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

已有一个日期类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

0

输出样例:

The urgent schedule is No.1: 2014/6/27 8:0:1

#include <iostream>
using namespace std;

// Date 类定义
class Date {
protected:
    int year, month, day; // 年、月、日

public:
    // Date 类构造函数,初始化年月日
    Date(int y, int m, int d)
        : year(y), month(m), day(d) {}
};

// Time 类定义
class Time {
protected:
    int hour, minute, second; // 时、分、秒

public:
    // Time 类构造函数,初始化时分秒
    Time(int h, int m, int s)
        : hour(h), minute(m), second(s) {}
};

// Schedule 类定义,公有继承 Date 和 Time 类
class Schedule : public Date, public Time {
    int ID; // 日程的ID

public:
    // Schedule 类构造函数,初始化日程的ID、日期和时间
    Schedule(int i, int y, int m, int d, int h, int mi, int s)
        : Date(y, m, d), Time(h, mi, s), ID(i) {}

    // 重载小于运算符,用于比较两个日程的时间先后
    bool operator<(const Schedule& s2) {
        // 按照年月日时分秒的顺序进行比较
        if (year < s2.year || (year == s2.year && month < s2.month) || (year == s2.year && month == s2.month && day < s2.day) ||
            (year == s2.year && month == s2.month && day == s2.day && hour < s2.hour) ||
            (year == s2.year && month == s2.month && day == s2.day && hour == s2.hour && minute < s2.minute) ||
            (year == s2.year && month == s2.month && day == s2.day && hour == s2.hour && minute == s2.minute && second < s2.second))
            return true;
        return false;
    }

    // 打印日程信息
    void printInfo() const {
        cout << "The urgent schedule is No." << ID << ": " << year << "/" << month << "/" << day << " " << hour << ":" << minute << ":" << second << endl;
    }
};

int main() {
    int id, y, m, d, h, mi, s;
    Schedule earliestSchedule(0, 9999, 99, 99, 99, 99, 99); // 创建初始值较大的日期时间(不一定要合理)

    // 循环读取日程信息
    while (cin >> id && id != 0) {  // 依次读取日程ID、年、月、日、时、分、秒
        char c;
        cin >> y >> c >> m >> c >> d >> h >> c >> mi >> c >> s;
        // 创建当前日程对象
        Schedule currentSchedule(id, y, m, d, h, mi, s);

        // 比较当前日程和最早日程,更新最早日程
        if (currentSchedule < earliestSchedule) {
            earliestSchedule = currentSchedule;
        }
    }

    // 打印最早日程信息
    earliestSchedule.printInfo();

    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值