UT源码+105032014074

NextDate函数问题 

NextDate函数说明一种复杂的关系,即输入变量之间逻辑关系的复杂性

       NextDate函数包含三个变量month、day和year,函数的输出为输入日期后一天的日期。 要求输入变量month、day和year均为整数值,并且满足下列条件:

   条件1  1≤ month ≤12  否则输出,月份超出范围

   条件2  1≤ day ≤31 否则输出,日期超出范围

   条件3  1912≤ year ≤2050  否则输出:年份超出范围

     String  nextdate(int m,int d,int y)

   注意返回值是字符串。

程序要求:

1)先显示“请输入日期”

2)不满足条件1,返回:“月份超出范围”;不满足条件2,返回:“日期超出范围”;不满足条件3,返回:“年份超出范围”;如果出现多个不满足,以最先出现不满足的错误返回信息。

3)条件均满足,则输出第二天的日期:格式“****年**月**日”(如果输入2050年12月31日,则正常显示2051年1月1日

Java版

  1 package test01;
  2 import java.util.Scanner;
  3 public class Test01_nextdate {
  4  public static void main(String[] args) {
  5   // TODO Auto-generated method stub
  6   int y=0 ,m=0,d=0;
  7   System.out.println("请输入年  月 日(用空格隔开),-1退出:");
  8   Scanner scan = new Scanner(System.in);
  9   while(true){
 10   y=scan.nextInt();
 11   if(y == -1)System.exit(0);;//-1退出程序
 12   m=scan.nextInt();
 13   d=scan.nextInt();
 14   System.out.println(nextDate(y,m,d));
 15   }
 16  }
 17  public static String nextDate(int y,int m,int d)//nextDate函数
 18  {
 19   String newDate = "";//用来接收日期
 20   boolean flag = true;//作为错误的标识
 21   boolean isR = ((y%4 == 0)&&(y%100 != 0))||(y %400 == 0);//作为是否为闰年的标识
 22   switch(m)
 23   {
 24   case 1:
 25   case 3:
 26   case 5:
 27   case 7:
 28   case 8:
 29   case 10:
 30   case 12:
 31    if(d<31)d++;
 32    else if(d==31)
 33    {
 34     if(m!=12)
 35     {
 36      m++;
 37      d=1;
 38     }
 39     else
 40     {
 41      y++;
 42      m=1;
 43      d=1;
 44     }
 45    }
 46    else{
 47     newDate="日期超出范围";
 48     flag=false;
 49    }
 50    break;
 51    
 52   case 4:
 53   case 6:
 54   case 9:
 55   case 11:
 56    if(d<30)d++;
 57    else if(d==30)
 58    {
 59     m++;
 60     d=1;
 61    }
 62    else{
 63     newDate="日期超出范围";
 64     flag=false;
 65    }
 66    break;
 67   case 2:
 68    if(isR)
 69    {
 70     if(d<29) d++;
 71     else if(d==29)
 72     {
 73      m++;
 74      d=1;
 75     }
 76     else{
 77      newDate="日期超出范围";
 78      flag=false;
 79     }
 80    }
 81    else{
 82     if(d<28) d++;
 83     else if(d==28)
 84     {
 85      m++;
 86      d=1;
 87     }
 88     else{
 89      newDate="日期超出范围";
 90      flag=false;
 91     }
 92    }
 93    break;
 94    
 95    default://如果月份不在1~12之间
 96     newDate="月份超出范围";
 97     flag=false;
 98     break;
 99   }
100   
101   if(flag)
102   {
103    if(y<1912 || y>2050)
104    {
105     newDate="年份超出范围";
106     flag=false;
107    }
108   }
109   if(flag)
110   {
111    newDate=y+"年"+m+"月"+d+"日";
112   }
113   else{
114   flag=true;//还原标识
115   }
116   return newDate;
117  }
118 }

C++版

  1 # include <stdio.h>
  2 # include <stdlib.h>
  3 void nextdate(int y, int m, int d)
  4 {
  5  int flag = 1; //标识是否为错误
  6  int r=((y%4==0)&&(y%100!=0))||(y%400==0);//标识是否为闰年 
  7  switch(m)
  8  {
  9   case 1:
 10     case 3:
 11      case 5:
 12       case 7:
 13        case 8:
 14         case 10:
 15          case 12:
 16           if (d<31) d++;
 17           else if(d==31) 
 18           {
 19            if(m!=12){
 20             m++;
 21             d=1;
 22            }
 23            else{
 24             y++;
 25             m=1;
 26             d=1;
 27            }
 28           }
 29           else 
 30           {
 31            flag=0;
 32            printf("日期超出范围
"); 
 33           }
 34           break;
 35           
 36           case 4:
 37               case 6:
 38             case 9:
 39              case 11:
 40               if(d<30)d++;
 41               else if(d==30)
 42               {
 43                m++;
 44                d=1;
 45               }
 46               else
 47               {
 48                flag=0;
 49                printf("日期超出范围
"); 
 50               
 51               }
 52               break;
 53               
 54               case 2:
 55                if(r==1) {
 56                 if(d<29)d++;
 57                 else if(d==29)
 58                 {
 59                  m++;
 60                  d=1;
 61                 }
 62                 else
 63                 {
 64                  flag=0;
 65                  printf("日期超出范围
");
 66                 }
 67                 
 68                }
 69                else{
 70                 if(d<28)d++;
 71                 else if(d==28)
 72                 {
 73                  m++;
 74                  d=1;
 75                 }
 76                 else
 77                 {
 78                  flag=0;
 79                  printf("日期超出范围
");
 80                 }
 81                }
 82                break; 
 83                default:
 84                 flag=0;
 85                                                            printf("月份超出范围
");
 86                 break;
 87            
 88   } 
 89 //  if(m<1 || m>12)
 90 //  {
 91 //   flag=0;
 92 //   printf("月份超出范围");
 93 //  }
 94   if(y<1912 || y>2050){
 95    flag=0;
 96    printf("年份超范围
");
 97   }
 98   if(flag!=0)//如果没有错误输出nextdate 
 99   {
100    printf("%d,%d,%d
",y,m,d);
101       } 
102  flag=1;//返回初始值 
103 } 
104   int main()
105   { 
106   int y=0,m=0,d=0;
107   printf("请输入年,月,日:(用逗号隔开,输入-1退出):
");  
108   while(scanf("%d,%d,%d",&y,&m,&d)!=EOF&& y!=-1)
109   {
110   nextdate(y,m,d);
111   printf("请继续输入(用逗号隔开,输入-1退出):
");
112 }
113   system("pause");
114   return 0;
115   }
原文地址:https://www.cnblogs.com/linpanhuang/p/6530604.html