软件测试与质量保证_一道关于日期的题

Code:
  1. /*  
  2. 软件测试与质量保证老师出的一个题目:
  3. 输入 年月日 (年份 取值分为【1600,210】,求出:上一天、下一天、该日是星期几、  
  4. 该日与你出生日期差多少天,是否为闰年,该日是该年得第几天?  
  5. //本程序基本竣工,再加上输入范围的限定就可以完工了。  
  6. */  
  7. #include <stdio.h>   
  8. #include <iostream>   
  9. #include <string>   
  10. #include <string.h>   
  11. using namespace std;   
  12.   
  13. //声明   
  14. int UpAndDown(int year,int month,int day);   
  15. int Isleap(int year);   
  16. int DateWeek(int year,int month,int day);   
  17. int Days(int year,int month,int day);   
  18. int BirthdayTime(int year,int month,int day);   
  19.   
  20. //求上一天和下一天   
  21. int UpAndDown(int year,int month,int day)   
  22. {   
  23.     int Array[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};   
  24.     if(month==12&&day==31)   //本年最后一天   
  25.     {   
  26.         printf("上一天是:%d-%02d-%02d/n",year,month,day-1);   
  27.         printf("下一天是:%d-%02d-%02d/n",year+1,01,01);   
  28.     }   
  29.     else if(month==1&&day==1)   //本年第一天   
  30.     {   
  31.         printf("上一天是:%d-%02d-%02d/n",year-1,12,31);   
  32.         printf("下一天是:%d-%02d-%02d/n",year,month,day+1);   
  33.     }   
  34.     else if(month!=12&&day==Array[month])   //本月最后一天   
  35.     {   
  36.         printf("上一天是:%d-%02d-%02d/n",year,month,day-1);   
  37.         printf("下一天是:%d-%02d-%02d/n",year,month+1,1);   
  38.     }   
  39.     else if(month!=1&&day==1)   //本月第一天   
  40.     {   
  41.         if(month==3&&Isleap(year)==1)   
  42.         {   
  43.             printf("上一天是:%d-%02d-%02d/n",year,month-1,29);   
  44.         }   
  45.         else  
  46.         {   
  47.             printf("上一天是:%d-%02d-%02d/n",year,month-1,Array[month-1]);   
  48.         }   
  49.         printf("下一天是:%d-%02d-%02d/n",year,month,day+1);   
  50.     }   
  51.     else   //正常情况   
  52.     {   
  53.         printf("上一天是:%d-%02d-%02d/n",year,month,day-1);   
  54.         printf("下一天是:%d-%02d-%02d/n",year,month,day+1);   
  55.     }   
  56.     return 0;   
  57. }   
  58.   
  59.   
  60. //判断是否为闰年   
  61. int Isleap(int year)   
  62. {   
  63.     if(year%4==0&&year%100!=0||year%400==0)   
  64.     {   
  65. //      cout<<"该年是闰年!"<<endl;   
  66.         return true;   
  67.     }   
  68.     else  
  69.     {   
  70. //      cout<<"该年是平年!"<<endl;   
  71.         return false;   
  72.     }   
  73. }   
  74.   
  75.   
  76. //判断当前日期是星期几   
  77. int DateWeek(int year,int month,int day)   
  78. {    
  79.     int Week;   
  80. //  string WeekDay[8]={"Error","星期一","星期二","星期三","星期四","星期五","星期六","星期天"};   
  81.     if(month==1||month==2){    
  82.         year-=1;    
  83.         month+=12;    
  84.     }    
  85.     Week=(day+1+2*month+3*(month+1)/5+year+(year/4)-year/100+year/400)%7;    
  86.     switch(Week)   
  87.     {   
  88.     case 1:printf("%d-%02d-%02d是星期一!/n",year,month,day);break;   
  89.     case 2:printf("%d-%02d-%02d是星期二!/n",year,month,day);break;   
  90.     case 3:printf("%d-%02d-%02d是星期三!/n",year,month,day);break;   
  91.     case 4:printf("%d-%02d-%02d是星期四!/n",year,month,day);break;   
  92.     case 5:printf("%d-%02d-%02d是星期五!/n",year,month,day);break;   
  93.     case 6:printf("%d-%02d-%02d是星期六!/n",year,month,day);break;   
  94.     case 7:printf("%d-%02d-%02d是星期天!/n",year,month,day);break;   
  95.     default:cout<<"Error!"<<endl;break;   
  96.     }   
  97.     return Week;   
  98. }   
  99. // 计算该日期是该年的第几天   
  100. int Days(int year,int month,int day)   
  101. {   
  102.     int Array[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};   
  103.     int days=0;   
  104.     if(Isleap(year)==1)   
  105.     {   
  106.         Array[2]=29;   
  107.     }   
  108.     else  
  109.     {   
  110.         Array[2]=28;   
  111.     }   
  112.   
  113.     for(int i=1;i<month;i++)   
  114.     {   
  115.         days+=Array[i];   
  116.     }   
  117.     days+=day;   
  118.     return days;   
  119. }   
  120.   
  121. //计算你输入的日期与你的出生日期差多少天   
  122. int BirthdayTime(int year,int month,int day)   
  123. {   
  124.     int ResultDay=0;   
  125.     int Day1=0,Day2=0,Day3=0,i;   
  126.     int BirthYear,BirthMonth,BirthDay;   
  127.     cout<<"请输入你的生日日期:"<<endl;   
  128.     scanf("%d-%d-%d",&BirthYear,&BirthMonth,&BirthDay);   
  129.     //如果年份和月份都相同,那么天数直接相减的绝对值结果就是了   
  130.     if(year==BirthYear&&month==BirthMonth)   
  131.     {   
  132.         ResultDay=(day>BirthDay)?(day-BirthDay):(BirthDay-day);   
  133.     }   
  134.     //如果年相同,月不同,分别看是该年的第几天,然后相减求绝对值即可   
  135.     else if( year==BirthYear && month!=BirthMonth )   
  136.     {   
  137.         Day1=Days(year,month,day);   
  138.         Day2=Days(BirthYear,BirthMonth,BirthDay);   
  139.   
  140.         ResultDay=(Day1>Day2)?(Day1-Day2):(Day2-Day1);   
  141.     }   
  142.     else    //如果年月都不同,则ResultDay=年份小的离年底的天数+年份大的超过的条数+相隔整年中的天数   
  143.     {   
  144.         if(year<BirthYear)    
  145.         {   
  146.             //求年份小的离年底的天数   
  147.             if(Isleap(year)==1)   
  148.             {   
  149.                 Day1=366-Days(year,month,day);   
  150.             }   
  151.             else  
  152.             {   
  153.                 Day1=365-Days(year,month,day);   
  154.             }   
  155.             //年份大的超过的天数   
  156.             Day3=Days(BirthYear,BirthMonth,BirthDay);   
  157.             //求相隔整年的天数   
  158.             for(i=year+1;i<BirthDay;i++)   
  159.             {   
  160.                 if( Isleap(i)==1 )   
  161.                 {   
  162.                     Day2+=366;   
  163.                 }   
  164.                 else  
  165.                     Day2+=365;   
  166.             }   
  167.             ResultDay=Day1+Day2+Day3;   
  168.         }   
  169.         else  
  170.         {   
  171.                         //求年份小的离年底的天数   
  172.             if(Isleap(BirthYear)==1)   
  173.             {   
  174.                 Day1=366-Days(BirthYear,BirthMonth,BirthDay);   
  175.             }   
  176.             else  
  177.             {   
  178.                 Day1=365-Days(BirthYear,BirthMonth,BirthDay);   
  179.             }   
  180.             //年份大的超过的天数   
  181.             Day3=Days(year,month,day);   
  182.             //求相隔整年的天数   
  183.             for(i=BirthYear+1;i<year;i++)   
  184.             {   
  185.                 if(Isleap(i)==1)   
  186.                 {   
  187.                     Day2+=366;   
  188.                 }   
  189.                 else  
  190.                     Day2+=365;   
  191.             }   
  192.             ResultDay=Day1+Day2+Day3;   
  193.   
  194.         }   
  195.     }   
  196.     printf("%d-%02d-%02d离你的出生日期%d-%02d-%02d相隔的天数是%d./n",year,month,day,BirthYear,BirthMonth,BirthDay,ResultDay );   
  197.     return ResultDay;   
  198. }   
  199.   
  200. int main(void)   
  201. {   
  202.     int Year,Month,Day;   
  203.     cout<<"请按MM-MM-MM格式输入年月日!"<<endl;   
  204.     scanf("%d-%d-%d",&Year,&Month,&Day);   
  205.   
  206.     UpAndDown(Year,Month,Day);   
  207.   
  208.     if(Isleap(Year)==1)   
  209.     {   
  210.         printf("%d年是闰年!/n",Year);   
  211.     }   
  212.     else  
  213.     {   
  214.         printf("%d年是平年!/n",Year);   
  215.     }   
  216.        
  217.     DateWeek(Year,Month,Day);   
  218.   
  219.     printf("%d-%02d-%02d是%d年的第%d天。/n",Year,Month,Day,Year,Days(Year,Month,Day));   
  220.        
  221.     BirthdayTime(Year,Month,Day);   
  222.        
  223.     return 0;   
  224. }  

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值