7-4 时间模拟 (50分) pta c++

给出下面的基类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<cmath>
#include<cstdio>
#include<iomanip>
using namespace std;

class Time{
protected:
    int second;
    int minute;
    int hour;
public:
    Time(int s,int m,int h):second(s),minute(m),hour(h){} 
    void operator++();
     void operator--(); 
     void print(){
        cout<<setw(2) << setfill('0')<<hour<<":";
        cout<<setw(2) << setfill('0')<<minute<<":";
        cout<<setw(2) << setfill('0')<<second<<endl;
    }
};
void Time::operator++(){
    second++;
    while(second>=60){
        second-=60;
        minute++;
    }
    while(second<0){
        second+=60;
        minute--;
    }
    while(minute>=60){
        minute-=60;
        hour++;
    }
    while(minute<0){
        minute+=60;
        hour--;
    }
    while(hour>=24){
        hour-=24;
    }
    while(hour<0){
        hour+=24; 
    }
}
void Time::operator--(){
    second--;
    while(second>=60){
        second-=60;
        minute++;
    }
    while(second<0){
        second+=60;
        minute--;
    }
    while(minute>=60){
        minute-=60;
        hour++;
    }
    while(minute<0){
        minute+=60;
        hour--;
    }
    while(hour>=24){
        hour-=24;
    }
    while(hour<0){
        hour+=24; 
    }
}

class Time_12hours:public Time{
    int type=0;
public:
    Time_12hours(int s,int m,int h,int type):Time(s,m,h),type(type){}
    void operator++();
    void operator--();
    void print(){
        if(type==0)cout<<"AM"<<" ";
        else{cout<<"PM"<<" ";}
        cout<<setw(2) << setfill('0')<<hour<<":";
        cout<<setw(2) << setfill('0')<<minute<<":";
        cout<<setw(2) << setfill('0')<<second<<endl;
    }
};
void Time_12hours::operator++(){
    second++;
    while(second>=60){
        second-=60;
        minute++;
    }
    while(second<0){
        second+=60;
        minute--;
    }
    while(minute>=60){
        minute-=60;
        hour++;
    }
    while(minute<0){
        minute+=60;
        hour--;
    }
    while(hour>=12){
        hour-=12;
        type=1-type; 
    }
    while(hour<0){
        hour+=12;
        type=1-type; 
    }
}

void Time_12hours::operator--(){
    second--;
    while(second>=60){
        second-=60;
        minute++;
    }
    while(second<0){
        second+=60;
        minute--;
    }
    while(minute>=60){
        minute-=60;
        hour++;
    }
    while(minute<0){
        minute+=60;
        hour--;
    }
    while(hour>=12){
        hour-=12;
        type=1-type; 
    }
    while(hour<0){
        hour+=12;
        type=1-type; 
    }
}
int main( ) {
    int type=24,h,m,s;
    while(1){
        cin>>type;
        if(type==0)break;
        cin>>h>>m>>s;
        if(type==121){
            Time_12hours b(s,m,h,0);
            string h;
            cin>>h;
            int count=0;
            cin>>count;
            if(h=="+"){
                for(int i=0;i<count;i++){
                    b.operator++();
                }
            }else{
                for(int i=0;i<count;i++){
                    b.operator--();
                }
            }
            b.print();
        }else if(type==122){
            Time_12hours b(s,m,h,1);
            string h;
            cin>>h;
            int count=0;
            cin>>count;
            if(h=="+"){
                for(int i=0;i<count;i++){
                    b.operator++();
                }
            }else{
                for(int i=0;i<count;i++){
                    b.operator--();
                }
            }
            b.print();
        }else{
            Time b(s,m,h);
            string h;
            cin>>h;
            int count=0;
            cin>>count;
            if(h=="+"){
                for(int i=0;i<count;i++){
                    b.operator++();
                }
            }else{
                for(int i=0;i<count;i++){
                    b.operator--();
                }
            }
                b.print();
        }
        
    }
    return 0;
}

 

posted on 2020-05-30 22:34  xwwer  阅读(985)  评论(0)    收藏  举报