补1

一、问题及代码

  1. #include<iostream>    
  2. #include<iomanip>    
  3. #include<cstdlib>    
  4. using namespace std;    
  5. class Date; //对Date类的提前引用声明      
  6. class Time      
  7. {      
  8. public:      
  9.     Time(int,int,int);      
  10.     void add_a_second(Date &);  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年      
  11.     void display(Date &);  //显示时间,格式:月/日/年 时:分:秒      
  12. private:      
  13.     int hour;      
  14.     int minute;      
  15.     int sec;      
  16. };      
  17. class Date      
  18. {      
  19. public:      
  20.     Date(int,int,int);      
  21.     friend class Time; //Time为Date的友元类      
  22. private:      
  23.     int month;      
  24.     int day;      
  25.     int year;      
  26. };      
  27.       
  28. int main( )      
  29. {      
  30.     Time t1(23,59,32);      
  31.     Date d1(12,31,2013);   //测试时,再试试Date d1(2,28,2013)会如何      
  32.     for(int i=0; i<=100; i++)      
  33.     {      
  34.         t1.add_a_second(d1);      
  35.         t1.display(d1);      
  36.     }      
  37.     Time t2(23,59,30);    
  38.     Date d2(2,29,2012);    
  39.     for(i=0;i<=100;i++)    
  40.     {    
  41.         t2.add_a_second(d2);    
  42.         t2.display(d2);    
  43.     }    
  44.     return 0;      
  45. }      
  46. //下面定义两个类中的成员函数,要求不得再增加成员函数      
  47. //注意体会在Time的成员函数中可以调用Date类的私有数据成员         
  48. Time::Time(int x,int y,int z)    
  49. {    
  50.     if(x<0||x>=24||y<0||y>=60||z<0||z>=60)    
  51.     {    
  52.         cout<<"设置时间错误!"<<endl;    
  53.         exit(0);    
  54.     }    
  55.     else    
  56.     {    
  57.         hour=x;    
  58.         minute=y;    
  59.         sec=z;    
  60.     }    
  61. }    
  62. Date::Date(int x,int y,int z)    
  63. {    
  64.     if(x==4||x==6||x==9||x==11)    
  65.     {    
  66.         if(y<1||y>30)    
  67.             exit(0);    
  68.         else    
  69.         {    
  70.             month=x;    
  71.             day=y;    
  72.             year=z;    
  73.         }    
  74.     }    
  75.     else    
  76.         if(x==2)    
  77.         {    
  78.             if(z%400==0||z%4==0&&z%100!=0)    
  79.             {    
  80.                 if(y<1||y>29)    
  81.                     exit(0);    
  82.                 else    
  83.                 {    
  84.                     month=x;    
  85.                     day=y;    
  86.                     year=z;    
  87.                 }    
  88.             }    
  89.             else    
  90.             {    
  91.                 if(y<1||y>28)    
  92.                     exit(0);    
  93.                 else    
  94.                 {    
  95.                     month=x;    
  96.                     day=y;    
  97.                     year=z;    
  98.                 }    
  99.             }    
  100.         }    
  101.         else    
  102.         {    
  103.             if(y<1||y>31)    
  104.                 exit(0);    
  105.             else    
  106.             {    
  107.                 month=x;    
  108.                 day=y;    
  109.                 year=z;    
  110.             }    
  111.         }    
  112. }    
  113. void Time::add_a_second(Date &p)  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年      
  114. {    
  115.     sec++;    
  116.     if(sec==60)    
  117.     {    
  118.         sec=0;    
  119.         minute++;    
  120.         if(minute==60)    
  121.         {    
  122.             minute=0;    
  123.             hour++;    
  124.         }    
  125.     }    
  126.     if(hour==24)    
  127.     {    
  128.         hour=0;    
  129.         if(p.month==2)    
  130.         {    
  131.             if(p.year%400==0||p.year%4==0||p.year%100!=0)    
  132.             {    
  133.                 if(p.day==29)    
  134.                 {    
  135.                     p.day=1;    
  136.                     p.month++;    
  137.                 }    
  138.                 else    
  139.                     p.day++;    
  140.             }    
  141.             else    
  142.             {    
  143.                 if(p.day==28)    
  144.                 {    
  145.                     p.day=1;    
  146.                     p.month++;    
  147.                 }    
  148.                 else    
  149.                     p.day++;    
  150.             }    
  151.         }    
  152.         else    
  153.             if(p.month==4||p.month==6||p.month==9||p.month==11)    
  154.             {    
  155.                 if(p.day==30)    
  156.                 {    
  157.                     p.day=1;    
  158.                     p.month++;    
  159.                 }    
  160.                 else    
  161.                     p.day++;    
  162.             }    
  163.             else    
  164.                 if(p.month==12)    
  165.                 {    
  166.                     if(p.day==31)    
  167.                     {    
  168.                         p.day=1;    
  169.                         p.month=1;    
  170.                         p.year++;    
  171.                     }    
  172.                     else    
  173.                         p.day++;    
  174.                 }    
  175.                 else    
  176.                 {    
  177.                     if(p.day==31)    
  178.                     {    
  179.                         p.day=1;    
  180.                         p.month++;    
  181.                     }    
  182.                     else    
  183.                         p.day++;    
  184.                 }    
  185.     }    
  186. }    
  187. void Time::display(Date &p)    
  188. {    
  189.     cout<<setfill('0')<<setw(2)<<p.month<<'/'<<setfill('0')<<setw(2)<<p.day<<'/'<<p.year;    
  190.     cout<<"    "<<setfill('0')<<setw(2)<<hour<<':'<<setfill('0')<<setw(2)<<minute<<':'<<setfill('0')<<setw(2)<<sec<<endl;    
  191. }    


二、运行结果


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值