軟體測試與品質保證_一道關於日期的題

來源:互聯網
上載者:User
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. }  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.