愿你坚持不懈,努力进步,进阶成自己理想的人

—— 2017.09, 写给3年后的自己

PAT:日程安排(多重继承+重载)

这题也真是诡异,之前用转为秒的方法,无法全部通过。后来试了另外一种解法,就过了 Orz

已有一个日期类Date,包括三个protected成员数据
int year;
int month;
int day;
另有一个时间类Time,包括三个protected成员数据
int hour;
int minute;
int second;
现需根据输入的日程的日期时间,安排前后顺序,为此以Date类和Time类为基类,建立一个日程类Schedule,包括以下新增成员:
int ID;//日程的ID
bool operator < (const Schedule & s2);//判断当前日程时间是否早于s2
生成以上类,并编写主函数,根据输入的各项日程信息,建立日程对象,找出需要最早安排的日程,并输出该日程对象的信息。
输入格式: 测试输入包含若干日程,每个日程占一行(日程编号ID 日程日期(****//)日程时间(**::))。当读入0时输入结束,相应的结果不要输出。
输入样例:
1 2014/06/27 08:00:01
2 2014/06/28 08:00:01

输出样例:
The urgent schedule is No.1: 2014/6/27 8:0:1

#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;

class Date {
protected:
    int year;
    int month;
    int day;
public:
    Date(int _y, int _m, int _d):year(_y), month(_m), day(_d){}
};

class Time {
protected:
    int hour;
    int minute;
    int second;
public:
    Time(int _h, int _m, int _s):hour(_h), minute(_m), second(_s){}
};

class Schedule:public Date, public Time {
private:
    int ID;
public:
    Schedule():Date(0,0,0), Time(0,0,0), ID(0){}
    Schedule(int _id, int _year, int _month, int _day, int _hour, int _minute, int _second):Date(_year, _month, _day), Time(_hour, _minute, _second), ID(_id){}
    bool operator < (const Schedule &s) {
        char timeArr1[15], timeArr2[15];
        sprintf(timeArr1, "%04d%02d%02d%02d%02d%02d", year, month, day, hour, minute, second);
        sprintf(timeArr2, "%04d%02d%02d%02d%02d%02d", s.year, s.month, s.day, s.hour, s.minute, s.second);
        return atof(timeArr1)<atof(timeArr2);
    }
    void show() {
        cout << "The urgent schedule is No."<<ID<<": "<<year<<"/"<<month<<"/"<<day<<" "<<hour<<":"<<minute<<":"<<second<<endl;
    }
};

int main() {
    int id, rows=0;
    int y,m,d,h,i,s;
    Schedule min;
    while (cin>>id) {
        if(id==0) break;
        scanf("%d/%d/%d %d:%d:%d", &y, &m, &d, &h, &i, &s);
        Schedule cur(id, y, m, d, h, i, s);
        if(rows++==0) min = cur;
        if(cur<min) min = cur;
    }
    if(rows!=0) min.show();
    
    return 0;
}