5-2 时间模拟

给出下面的基类Time的框架如下:

class Time

{
protected:

    int second;
    int minute;
    int hour;

public:

     void operator++();
     void operator--();

}

建立一个派生类Time_12hours,用于表示十二进制时间,增加以下成员数据:

string type;//标识为12进制时间,type=”12-hours-time”

string interval;//标识为AM或者PM,interval=”AM”或interval=”PM”

增加以下成员函数: void operator++();

     void operator--();

建立一个派生类Time_24hours,用于表示二十四进制时间,增加以下成员数据:

     string type;//标识为24进制时间,type=”24-hours-time”

增加以下成员函数:

     void operator++();

     void operator--();

生成上述类并编写主函数,根据输入的初始时间信息、自增或者自减类型、自增或者自减次数,输出其最后时间信息。

输入格式:测试输入包含多个测试用例,一个测试用例为一行,每行共五个数字,第一个数字为进制,121表示输入为12进制AM时间,122表示输入为12进制PM时间,输入为24表示输入为24进制时间,第二个数字为hour,第三个数字为minute,第四个数字为second,第五个字符为运算类型,+表示自增,-表示自减,第六个数字为运算次数,0表示测试用例结束。

输入样例:

121 11 59 59 + 3

24 11 59 59 + 3

122 11 59 59 + 3

122 00 00 00 - 3

121 00 00 00 - 5

24 00 00 00 - 1

0

输出样例:

PM 00:00:02

12:00:02

AM 00:00:02

AM 11:59:57

PM 11:59:55

23:59:59

 

参考代码:

#include<iostream>
#include<iomanip>
using namespace std;
//建立Time基类 
class Time{
protected:
    int second;
    int minute;
    int hour;
    int total;
public:
     void operator ++ ();
     void operator -- ();
     friend istream& operator >>(istream& , Time& );
};
istream& operator >> (istream& set, Time& x){
    set>> x.hour>> x.minute>> x.second;
    x.total = (x.hour*60+ x.minute)*60 + x.second;
    return set;
}
void Time::operator ++(){
    total++;                                        
    second = total%60;//对60秒取余数 
    minute = total/60%60;//换为分对60分取余数 
    hour = total/3600%24;//换为小时对24小时取余数 
}
void Time::operator --(){
    if(total==0) total=86400;//到前一天,保证sum大于零 
    total--;
    second = total%60;
    minute = total/60%60;
    hour = total/3600%24;    
}
//建立Time_12hours 
class Time_12hours:public Time{
private:
    string type;//12-hours-time 
    string interval;//AM ro PM1 
public:
    void set(int x){if(x == 122) total += 43200;};
    void operator --(){Time::operator --();};
    void operator ++(){Time::operator ++();};
    friend ostream& operator <<(ostream& ,Time_12hours &);
};
ostream& operator <<(ostream& put,Time_12hours &x)
{
    x.type="12-hours-time ";
      if(x.hour>=12)
      {
        x.interval="PM ";
        x.hour-=12;    
    }
       else
       {
         x.interval="AM ";    
    }

    put <<x.interval
        <<setiosflags(ios::right)<<setfill('0')
        <<setw(2)<<x.hour<<":"
        <<setw(2)<<x.minute<<":"
        <<setw(2)<<x.second<<endl;
}
//建立Time_24hours
class Time_24hours:public Time{
    string type;
public:
    void operator ++(){Time::operator ++();};
    void operator --(){Time::operator --();};
    friend ostream& operator <<(ostream& , Time_24hours &); 
}; 
ostream& operator <<(ostream& put, Time_24hours& x){
    put <<setiosflags(ios::right)<<setfill('0')
        <<setw(2)<<x.hour<<":"
        <<setw(2)<<x.minute<<":"
        <<setw(2)<<x.second<<endl;
}
int main(){
    Time_12hours t12;
    Time_24hours t24;    
    int type;            
    char flag;
    int n;            
    while( cin>>type )
    {
        if( type == 0 )break;
        else if( type >100 )
        {
            cin>>t12;
            t12.set(type);
            getchar();
            cin>>flag>>n;
            
            if(flag=='+')
                while(n--)
                    ++t12;
            else
                while(n--)
                    --t12;
            cout<<t12;
        }
        else
        {
            cin>>t24;
            getchar();
            cin>>flag>>n;
            if(flag == '+')
                while(n--)
                    ++t24;
            else
                while(n--)
                    --t24;
            cout<<t24;
        }
    }
    return 0;
}
 

欢迎指教,一起学习!

未经本人允许,请勿转载!

谢谢!

转载于:https://www.cnblogs.com/hello-OK/p/6985628.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值