软件测试——决策表法

       实现PreDate,前一日函数PreDate是NextDate的逆函数,即给定一个月份、日期、年,会返回前一天的日期。年的取值范围在1812到2017年。日的取值在1日到31日月的取值在1到12月之间。

一、代码如下:

package experiment2;

import java.util.Scanner;

public class PreDate {
       
	   public static void main(String args[]){
		   
		     
		      System.out.println("请输入日期:");
		      Scanner sc = new Scanner(System.in); 
		      int year = sc.nextInt();
		      int month = sc.nextInt();
		      int day = sc.nextInt();
		      
		      if(year<1812||year>2017||month<1||month>31||day<1||day>31){
		    	  System.out.println("不可能");
		      }
		      else{
		    	  if(day==1)
			      {
			    	  if(month==1)
			    	  {
			    		  year=year-1;
			    		  month=12;
			    		  day=31;
			    	  }
			    	  else if(month==2||month==4||month==6||month==8||month==9||month==11){
			    		  month=month-1;
				    	  day=31;
			    	  }
			    	  else if(month==5||month==7||month==10||month==12){ 
			    		  month=month-1;
				    	  day=30;
			    	  }
			    	  else{
			    		  if(year%4==0&&year%100!=0||year%400==0){
				    		  month=month-1;
					    	  day=29;
				    	  }
				    	  else{
				    		  month=month-1;
				    		  day=28;
				    	  }
			    	  }
			    	  System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
			      }
			      else{
			    	  if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day<=31) {
			    		  day=day-1;
			    		  System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
			    	  }
			    	  else if((month==4||month==6||month==9||month==11)&&day<=30) {
			    		  day=day-1;
			    		  System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
			    	  }
			    	  else if(month==2) {
			    		  if((year%4==0&&year%100!=0||year%400==0)&&day<=29) {
			    			  day=day-1;
			    			  System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
			    		  }
			    		  else if(day<=28) {
			    			  day=day-1;
			    			  System.out.println("该日期的前一天为"+year+"年"+month+"月"+day+"日");
			    		  }
			    		  else {
			    			  System.out.println("不可能");
			    		  }
			    	  }
			    	  else {
			    		  System.out.println("不可能");
			    	  }
			      }
		      }
	   }
}

二、决策表分析过程如下

     1. 定义条件桩、动作桩

    1.1输入

—year

—month

—day

   1.2为获得前一个日期,PreDate函数需执行的操作只有如下5种

—day变量值减1

—day变量值为31

—day变量值为30

—day变量值为28

—day变量值为29

—month变量值减1

—month变量值为12

—year变量值减1

     1.3考虑规则个数

     M1:{month:month为4或6或8或9或11月};

     M2:{month:month为5或7或10或12月 };

     M3:{month:month是1月};

    M4: {month: month是2月};

   M5:{month: month是3月};

   D1:{day: day=1};

   D2:{day:1<day≤28};

   D3:{day:day=29};

   D4:{day:day=30};

   D5:{day:day=31};

   Y1:{year:year是闰年};

   Y2:{year:year不是闰年};

   2.输入条件项动作项

规则

选项

1

2

3

4

5

6

7

8

9

10

11

条件

C1:year在

C2:month在

M1

M1

M1

M1

M1

M2

M2

M2

M2

M2

M3

C3:day在

D1

D2

D3

D4

D5

D1

D2

D3

D4

D5

D1

动作

A1:不可能

 

 

 

 

 

 

 

 

 

 

A2:day减1

 

 

 

  • 1
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值