首页 > 代码库 > UT源码+105032014074

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版

 

package test01;

import java.util.Scanner;

public class Test01_nextdate {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int y=0 ,m=0,d=0;
  System.out.println("请输入年  月 日(用空格隔开),-1退出:");
  Scanner scan = new Scanner(System.in);
  while(true){
  y=scan.nextInt();
  if(y == -1)System.exit(0);;//-1退出程序
  m=scan.nextInt();
  d=scan.nextInt();
  System.out.println(nextDate(y,m,d));
  }
 }

 public static String nextDate(int y,int m,int d)//nextDate函数
 {
  String newDate = "";//用来接收日期
  boolean flag = true;//作为错误的标识
  boolean isR = ((y%4 == 0)&&(y%100 != 0))||(y %400 == 0);//作为是否为闰年的标识
  switch(m)
  {
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12:
   if(d<31)d++;
   else if(d==31)
   {
    if(m!=12)
    {
     m++;
     d=1;
    }
    else
    {
     y++;
     m=1;
     d=1;
    }
   }
   else{
    newDate="日期超出范围";
    flag=false;
   }
   break;
   
  case 4:
  case 6:
  case 9:
  case 11:
   if(d<30)d++;
   else if(d==30)
   {
    m++;
    d=1;
   }
   else{
    newDate="日期超出范围";
    flag=false;
   }
   break;
  case 2:
   if(isR)
   {
    if(d<29) d++;
    else if(d==29)
    {
     m++;
     d=1;
    }
    else{
     newDate="日期超出范围";
     flag=false;
    }
   }
   else{
    if(d<28) d++;
    else if(d==28)
    {
     m++;
     d=1;
    }
    else{
     newDate="日期超出范围";
     flag=false;
    }
   }
   break;
   
   default://如果月份不在1~12之间
    newDate="月份超出范围";
    flag=false;
    break;
  }
  
  if(flag)
  {
   if(y<1912 || y>2050)
   {
    newDate="年份超出范围";
    flag=false;
   }
  }
  if(flag)
  {
   newDate=y+"年"+m+"月"+d+"日";
  }
  else{
  flag=true;//还原标识
  }
  return newDate;
 }
}

 

技术分享

 

C++版

# include <stdio.h>
# include <stdlib.h>
void nextdate(int y, int m, int d)
{
 int flag = 1; //标识是否为错误
 int r=((y%4==0)&&(y%100!=0))||(y%400==0);//标识是否为闰年
 switch(m)
 {
  case 1:
    case 3:
     case 5:
      case 7:
       case 8:
        case 10:
         case 12:
          if (d<31) d++;
          else if(d==31)
          {
           if(m!=12){
            m++;
            d=1;
           }
           else{
            y++;
            m=1;
            d=1;
           }
          }
          else
          {
           flag=0;
           printf("日期超出范围\n");
          }
          break;
          
          case 4:
              case 6:
            case 9:
             case 11:
              if(d<30)d++;
              else if(d==30)
              {
               m++;
               d=1;
              }
              else
              {
               flag=0;
               printf("日期超出范围\n");
              
              }
              break;
              
              case 2:
               if(r==1) {
                if(d<29)d++;
                else if(d==29)
                {
                 m++;
                 d=1;
                }
                else
                {
                 flag=0;
                 printf("日期超出范围\n");
                }
                
               }
               else{
                if(d<28)d++;
                else if(d==28)
                {
                 m++;
                 d=1;
                }
                else
                {
                 flag=0;
                 printf("日期超出范围\n");
                }
               }
               break;
               default:
                flag=0;
                                                           printf("月份超出范围\n");
                break;
          
  }
//  if(m<1 || m>12)
//  {
//   flag=0;
//   printf("月份超出范围");
//  }
  if(y<1912 || y>2050){
   flag=0;
   printf("年份超范围\n");
  }
  if(flag!=0)//如果没有错误输出nextdate
  {
   printf("%d,%d,%d\n",y,m,d);
      }
 flag=1;//返回初始值
}
  int main()
  {
  int y=0,m=0,d=0;
  printf("请输入年,月,日:(用逗号隔开,输入-1退出):\n"); 
  while(scanf("%d,%d,%d",&y,&m,&d)!=EOF&& y!=-1)
  {
  nextdate(y,m,d);
  printf("请继续输入(用逗号隔开,输入-1退出):\n");
}
  system("pause");
  return 0;
  }

 

UT源码+105032014074