UT源码 005

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日

源码:

 1 #include <iostream>
 2 #include <sstream>
 3 #include <string>
 4 using namespace std;
 5 
 6 string nextdate(int month,int day,int year)
 7 {
 8     int isleap[]={31,29,31,30,31,30,31,31,30,31,30,31};
 9     int noleap[]={31,28,31,30,31,30,31,31,30,31,30,31};
10     stringstream m,d,y;
11     
12     if (month<1 || month>12)
13     {
14         return "月份超出范围";
15     }
16     if (day<1 || day>31)
17     {
18         return "日期超出范围";
19     }
20     if (year<1912 || year>2050)
21     {
22         return "年份超出范围";
23     }
24 
25     if ((year%4==0 && year%100!=0) || year%400==0)//闰年
26     {
27         if (day<isleap[month-1])
28         {
29             d<<day+1;
30             m<<month;
31             y<<year;
32         } 
33         else if (day==isleap[month-1])//该月的最后一天
34         {
35             if (month==12)//一年的最后一天
36             {
37                 d<<1;
38                 m<<1;
39                 y<<year+1;
40                 return y.str()+""+m.str()+""+d.str()+"";
41             }
42             d<<1;
43             m<<month+1;
44             y<<year;
45         }
46         else
47         {
48             return "日期超出范围";
49         }
50         
51     } 
52     else//非闰年
53     {
54         if (day<noleap[month-1])
55         {
56             d<<day+1;
57             m<<month;
58             y<<year;
59         } 
60         else if (day==noleap[month-1])//该月的最后一天
61         {
62             if (month==12)//一年的最后一天
63             {
64                 d<<1;
65                 m<<1;
66                 y<<year+1;
67                 return y.str()+""+m.str()+""+d.str()+"";
68             }
69             d<<1;
70             m<<month+1;
71             y<<year;
72         }
73         else
74         {
75             return "日期超出范围";
76         }
77     }
78     return y.str()+""+m.str()+""+d.str()+"";
79     
80 }
81 
82 
83 int main()
84 {
85     while(1)
86     {
87         cout<<"请输入日期(格式: 月 日 年):"<<endl;
88         int month,day,year;
89         cin>>month>>day>>year;
90         cout<<nextdate(month,day,year)<<endl;
91 
92     }
93     return 0;
94 }

 

posted on 2017-03-10 14:09  005_陈晓华  阅读(302)  评论(0编辑  收藏  举报