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

news/2025/3/26 2:58:37/文章来源:https://www.cnblogs.com/yuanxinglan/p/18788682

① 设计程序

程序代码:

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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904637.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读DAMA数据管理知识体系指南29文件和内容管理活动

读DAMA数据管理知识体系指南29文件和内容管理活动1. 规划生命周期的管理 1.1. 从文件的创建或接收文件后的分发、存储、检索、归档和潜在的销毁 1.2. 规划包括开发分类/索引系统和分类法,以实现文件的存储和检索 1.3. 重要的是,生命周期规划中需要为档案建立具体的制度 1.4. …

c语言实验2

1 #include <stdio.h>2 #include <stdlib.h>3 #include <time.h>4 5 #define N 56 7 int main() {8 int number;9 int i; 10 11 srand(time(0)); // 以当前系统时间作为随机种子 12 for(i = 0; i < N; ++i) { 13 number = r…

使用 Browser-Use WebUI + DeepSeek 实现浏览器AI自动化全攻略

使用 Browser-Use WebUI + DeepSeek 实现浏览器AI自动化全攻略 环境准备 1. 安装 Python 环境版本要求:Python 3.11 或更高版本 验证安装:命令行执行 python --version 注意:安装时需勾选 "Add to PATH" 选项(Windows用户)2. 核心工具安装 # 安装 browser-use 框…

20234214 2024-2025-2 《Python程序设计》实验一报告

20234214 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2342 姓名: 唐果儿 学号:20234214 实验教师:王志强 实验日期:2025年3月18日 必修/选修: 公选课 1.实验内容 (一)实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; …

WinForm 使用 Win32 API 实现的无边框窗口

WinForm 使用 Win32 API 实现的无边框窗口前言 时光荏苒,转眼已近是2025年了。不知不觉两年多没有研究代码了,在这期间 .NET 10 都快 RC 了,前几天刷手机看到张队公众号里有关于 .NET 9.0 AOT 发布的内容,所以写了这些代码来测试一下 AOT 编译的效果,并评估未来是否开发支…

C语言打卡学习第4天(2025.3.23)

今天只写了几道基础题,又看了下数组和冒泡排序,概念搞懂了但是写代码还是比较困难,准备明天把排序这类题好好看看。

一文速通Python并行计算:01 Python多线程编程-基本概念、切换流程、GIL锁机制和生产者与消费者模型

多线程允许程序同时执行多个任务,提升效率和响应性。线程分为新建、就绪、运行、阻塞和死亡五种状态。Python的GIL锁限制多线程并行执行,适合I/O密集型任务。生产者-消费者模型通过共享缓冲区和条件变量实现线程协作,解决数据共享问题。一文速通 Python 并行计算:01 Python…

Spring的三级缓存详解

目录 1、什么是三级缓存 2、三级缓存详解Bean实例化前属性赋值/注入前初始化后总结3、怎么解决的循环依赖 4、不用三级缓存不行吗 5、总结 一、什么是三级缓存 就是在Bean生成流程中保存Bean对象三种形态的三个Map集合,如下:

20244207 实验一 《python程序设计》实验报告

# 20244207 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2442 姓名: 赵文萱 学号:20244207 实验教师:王志强 实验日期:2025年3月18日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,…

20244202 《Python程序设计》实验一报告

20244202 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2442 姓名: 陈艺豪 学号:20244219 实验教师:王志强 实验日期:2025年3月23日 必修/选修: 公选课 1.实验内容 (1).熟悉Python开发环境; (2).练习Python运行、调试技能; (3).编写程序,练习变量和类…

USTCPC 2025 游记

队名 合肥一中能不能多请点OI教练,二人队。队长 @包涵宇 ,省队爷。 Day -inf~0 随机写了几道有意思的 cf 。 bhy 又在做黑的插头 dp 。膜拜。 Day 1 早上被父母逼着学习文化课,结果作业做不完直接半红温状态,, 加上昨天做了 ~8h 文化课作业只完成了 1/2 ,然后直接不做了…