代码编织梦想

之前在网上看到的代码套路基本一致,但是仔细分析后仍然存在问题:

它缺少了对所输入月份的天数的检查,就比如输入6月32日后仍然可以得到一个结果,但是很明显是与实际不符的。我在原有基础上进行了改进,现在已经实现了对所输入的年份 月份 日期的范围检查。主要就是对类似的月份进行相同的操作,不同类的月份要划分清晰。

代码如下:

package test;

import java.util.Scanner;


public class PreDate {
public static void main(String[] args){
Scanner scancer=new Scanner(System.in);
System.out.println("请输入年 月 日:");
int year=scancer.nextInt();
int month=scancer.nextInt();
int day=scancer.nextInt();
//输入数据不合法
if(year<1812||year>2017||month<1||month>12||day<1||day>31){
System.out.println("输入的数据不符合题意");
System.exit(0);
}
//判断日期是否符合现实
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:{
if(day>=1&&day<=31)
break;
else 
System.out.println("输入的数据不符合题意");
    System.exit(0);

}
case 4:
case 6:
case 9:
case 11:{
if(day>=1&&day<=30)
break;
else 
System.out.println("输入的数据不符合题意");
   System.exit(0);
}
case 2:{
if((year%400==0)||(year%4==0&&year%100!=0)){
if(day>=1&&day<=29)
break;
   else
    System.out.println("输入的数据不符合题意");
   System.exit(0);
}
else
if(day>=1&&day<=28)
break;
else 
System.out.println("输入的数据不符合题意");
       System.exit(0);
}
}
//计算输入日期的前一个日期
//当年份发生变化的情况
if(month==1&&day==1){
year=year-1;
month=12;     
day=31;
}
//月份发生变化的情况
else if(month!=1&&day==1){
switch(month){
case 2:
case 4:
case 6:
case 8:
case 9:
case 11:{
month=month-1;
day=31;
break;
}
case 5:
case 7:
case 10:
case 12:{
month=month-1;
day=30;
break;
}
case 3:{
if((year%400==0)||(year%4==0&&year%100!=0)){
month=month-1;
day=29;
}
else{
month=month-1;
day=28;
}
break;
}
}

}
//只有日期发生变化的情况
else{
day=day-1;
}
System.out.println("The PreDay is "+year+"-"+month+"-"+day);
  }

}


等价类划分如下:


M1={月份:4,6,9,11}       M2={月份:5,7,10,12}

M3={月份:1}                 M4={月份:2}

M5={月份:3}                  M6={月份:8}

D1={日期:1}                  D2={日期:2〈=日期〈=27}

D3={日期:28}                 D4={日期:29}

D5={日期:30}                D6={日期:31}

Y1={年:是闰年}               Y2={年:不是闰年}

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

C1:月份在

M1

M1

M1

M2

M2

M3

M3

M4

M4

M4

M4

M4

M5

M5

M5

M6

M6

C2:日期在

D1

D2-D5

D6

D1

D2-D6

D1

D2-D6

D1

D2-D3

D4

D4

D5-D6

D1

D1

D2-D6

D1

D2-D6

C2:年份在

 

 

 

 

 

 

 

 

 

Y1

Y2

 

Y1

Y2

 

 

 

a1:不可能

 

 

1

 

 

 

 

 

 

 

1

1

 

 

 

 

 

a2:day减1

 

1

 

 

1

 

1

 

1

1

 

 

 

 

1

 

1

a3:day复位31

1

 

 

 

 

1

 

1

 

 

 

 

 

 

 

1

 

a4:day复位30

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

a5:day复位29

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

a6:day复位28

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

a7:月减1

1

 

 

1

 

 

 

1

 

 

 

 

1

1

 

1

 

a8:月复位12

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

a9:年减一

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

测试结果

用例ID

输入数据

预期输出

实际输出

是否通过

备注

1

1799 6 15

输入年份无效

2

1812 6 13

1812 6 12

1812 6 12

 

3

2016 6 13

2016 6 12

2016 6 12

 

4

2018 6 13

输入年份无效

5

2012 5 1

2012 4 30

2012 4 30

 

6

2012 -3 1

输入月份无效

7

2012 13 1

输入月份无效

8

2012 3 -1

输入日期无效

9

2012 3 32

输入日期无效

10

2008 3 1

2008 2 29

2008 2 29

闰年2 月29天

11

2008 4 1

2008 3 31

2008 3 31

前一个月31天

12

2009 3 1

2009 2 28

2009 2 28

平年2月28天

13

2009 5 1

2009 4 30

2009 4 30

前一个月30天

 


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liangaliang96/article/details/79883216

软件测试 preday 决策表-爱代码爱编程

前一日函数DPreate是NextDate的逆函数,即给定一个月份、日期、年,会返回前一天的日期。 年的取值在1812年到2017年    日的取值在1日到31日之间    月的取值在1到12月之间 代码如下: import java.util.Scanner; public class PreDate {

黑盒测试技术-决策表测试(decision table testing)-爱代码爱编程

参考:http://reqtest.com/requirements-blog/a-guide-to-using-decision-tables/          《A Practitioner's Guide to Software Test Design》 黑盒是设计测试用例方法:决策表测试 1. 概念      Decision t

predate()上一日函数-爱代码爱编程

输入日期显示它的上一天日期 import java.util.Scanner; public class PreDate { public static int year = 0; public sta

scanner中nextint()、nextline()方法的使用注意事项 笔记_悦&@的博客-爱代码爱编程_nextint

一、nextInt()、nextLine()区别: 1.nextInt()只会读取数值,剩下"\n"还没有读取,并将cursor放在本行中。 2.nextLine()会读取"\n",并结束(nextLine() reads till the end of line \n)。 3.如果想要在nextInt()后读取一行,就得在nextInt()之后额外加上c

黑龙江大学软件测试实验报告_-无问西东的博客-爱代码爱编程

    软件测试 实  验 指 导 书                   黑龙江大学软件学院       实验要求   在《软件测试》的课程实验过程中,要求学生做到: (1)预习相关理论。 (2)仔细阅读实验内容提纲,记录测试中所遇到的主要问题,做出必要说明和分析。 (3)认真书写实验报告。 (4)遵守机房纪

前一天函数_tian_he_he的博客-爱代码爱编程_前一天日期函数

PriorDate(年份,月份,日期)是三个变量的函数。函数返回 输入日期的前一个日期。变量年份、月份、日期都是整数值, 且满足下面的条件:1900≤年≤2060 ,1≤月≤12, 1≤日≤31 /*PriorDate函数 特殊情况为: 闰年3.1 每年的1.1 8.1 */ #include<cstdio> #include<alg

软件测试之功能性测试方法---决策表法-爱代码爱编程

程序说明: 前一日函数 Pre Date 是 NextDate的逆函数,即给定一 个月份、日期、年,会返回前一天的日期。 年的取值在1812年到2017年。 日的取值 在 1日到 31 日之间。 月的取值 在 1到 12

软件测试python版本的决策表法解决preDate返回前一天日期-爱代码爱编程

实验内容 前一日函数PreDate是NextDate的逆函数,即给定一个月份、日期、年,会返回前一天的日期。 年的取值在1812年到2020年 日的取值在1日到31日之间 1 月的取值在1到12月之间 分析: (1)分析 输入:year--month--day 操作: day变量值减1 day复位为30 day复位为31 day复

nextdate函数白盒测试问题 软件测试_软件测试NextDate函数决策表测试法实验报告...-爱代码爱编程

一、实验目的: 掌握黑盒测试中的决策表测试法,并对被测程序设计测试用例。 二、实验环境 操作系统: Windows XP + SP2 /win7 三、实验内容 1 、编写一个 NextDate 函数。 2 、掌握黑盒测试中的决策表测试法的基本步骤。 3 、使用决策表法设计测试用例,对编写的函数实施测试,总结分 析测试结果。