① 设计程序
程序代码:
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. |