设计函数实现输入日期显示星期几,并用等价类及边界值法测试

① 设计程序

程序代码:

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

 

public class DateToWeekday {

    public static void main(String[] args) {

        // 创建主窗口

        JFrame frame = new JFrame("日期转星期");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setSize(300, 150);

        

        // 创建面板

        JPanel panel = new JPanel();

        frame.add(panel);

        placeComponents(panel);

        

        // 设置窗口可见

        frame.setVisible(true);

    }

 

    private static void placeComponents(JPanel panel) {

        panel.setLayout(null);

 

        // 创建标签和文本框

        JLabel userInputLabel = new JLabel("Please enter a date (YYYY-MM-DD):");

        userInputLabel.setBounds(10, 20, 270, 25);

        panel.add(userInputLabel);

 

        JTextField userInput = new JTextField(20);

        userInput.setBounds(10, 50, 165, 25);

        panel.add(userInput);

 

        // 创建按钮

        JButton btnConvert = new JButton("Get Weekday");

        btnConvert.setBounds(190, 50, 100, 25);

        panel.add(btnConvert);

 

        // 创建标签用于显示结果

        JLabel resultLabel = new JLabel();

        resultLabel.setBounds(10, 90, 270, 25);

        panel.add(resultLabel);

 

        // 添加按钮点击事件

        btnConvert.addActionListener(e -> {

            String dateStr = userInput.getText();

            String result = getWeekday(dateStr);

            resultLabel.setText(result);

        });

    }

 

    private static String getWeekday(String dateStr) {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        Calendar cal = Calendar.getInstance();

 

        try {

            cal.setTime(dateFormat.parse(dateStr));

            int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

            String[] days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

            return days[dayOfWeek - 1];

        } catch (ParseException e) {

            return "Invalid date format. Please use YYYY-MM-DD.";

        }

    }

}

 

① 划分等价类,得到等价类表。等价类表格式如下:

输入条件

有效等价类

唯一标识

无效等价类

唯一标识

日期格式

格式为 YYYY-MM-DD

E1

格式不为 YYYY-MM-DD

I1

年份范围

年份在 1900-2100 之间

E2

年份小于 1900 或大于 2100

I2

月份范围

月份在 1-12 之间

E3

月份小于 1 或大于 12

I3

日期范围

日期在 1-31 之间(根据月份)

E4

日期小于 1 或大于 31

I4

闰年处理

闰年 2 月有 29 天

E5

非闰年 2 月有 29 天

I5

非闰年处理

非闰年 2 月有 28 天

E6

非闰年 2 月有 29 天

I6

30 天月份

4、6、9、11 月有 30 天

E7

4、6、9、11 月有 31 天

I7

31 天月份

1、3、5、7、8、10、12 月有 31 天

E8

1、3、5、7、8、10、12 月有 30 天

I8

 

 

② 运用等价类划分法设计测试用例,得到测试用例表。测试用例表格式如下:

序号

输入数据

覆盖等价类

输出

1

"2023-10-05"

E1, E2, E3, E4, E8

Thursday

2

"2000-02-29"

E1, E2, E3, E4, E5

Tuesday

3

"2023-04-30"

E1, E2, E3, E4, E7

Sunday

4

"2023-02-28"

E1, E2, E3, E4, E6

Tuesday

5

"1899-12-31"

I2

Invalid date format. Please use YYYY-MM-DD.

6

"2101-01-01"

I2

Invalid date format. Please use YYYY-MM-DD.

7

"2023-13-01"

I3

Invalid date format. Please use YYYY-MM-DD.

8

"2023-00-01"

I3

Invalid date format. Please use YYYY-MM-DD.

9

"2023-01-32"

I4

Invalid date format. Please use YYYY-MM-DD.

10

"2023-02-29"

I6

Invalid date format. Please use YYYY-MM-DD.

11

"2023-04-31"

I7

Invalid date format. Please use YYYY-MM-DD.

12

"2023-01-00"

I4

Invalid date format. Please use YYYY-MM-DD.

 

 

 

③ 运用边界值法设计测试用例。

序号

输入数据

覆盖边界值

输出

1

"1900-01-01"

最小年份

Monday

2

"2100-12-31"

最大年份

Friday

3

"2023-01-01"

最小月份

Sunday

4

"2023-12-31"

最大月份

Sunday

5

"2023-02-28"

非闰年 2 月

Tuesday

6

"2020-02-29"

闰年 2 月

Saturday

7

"2023-04-30"

30 天月份

Sunday

8

"2023-01-31"

31 天月份

Tuesday

9

"2023-01-32"

超出日期范围

Invalid date format. Please use YYYY-MM-DD.

10

"2023-02-29"

非闰年 2 月 29 天

Invalid date format. Please use YYYY-MM-DD.

posted @ 2025-03-24 08:08  不会JAVA的小袁  阅读(45)  评论(0)    收藏  举报