PTA 7-2 日程安排(多重继承+重载)

文章描述了一个C++编程问题,涉及创建两个类Date和Time,分别表示日期和时间,然后基于这两个类创建一个Schedule类,该类包含了日期、时间和一个ID。Schedule类重载了小于运算符以比较日程的先后顺序。程序会读取一系列日程输入,找出最早的那个日程并输出其详细信息。
摘要由CSDN通过智能技术生成

已有一个日期类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 <bits/stdc++.h>
using namespace std;

class Date{
  protected:
    int year, month, day;
  public:
    Date(int y, int m, int d): year(y), month(m), day(d){};    //初始化
};

class Time{
  protected:
    int hour, minute, second;
  public:
    Time(int hh, int mm, int ss): hour(hh), minute(mm), second(ss){};    //初始化
};

class Schedule: public Date, public Time{    //继承基类
  private:
    int ID;
  public:
    Schedule(int i, int y, int m, int d, int hh, int mm, int ss):Date(y, m, d), Time(hh, mm, ss) {
      ID = i;    //初始化
    }
    bool operator < (const Schedule & s2) {    //判断当前日程时间是否早于s2
      if(year<s2.year)return true;
      if(year==s2.year&&month<s2.month)return true;
      if(year==s2.year&&month==s2.month&&day<s2.day)return true;
      if(year==s2.year&&month==s2.month&&day==s2.day&&hour<s2.hour)return true;
      if(year==s2.year&&month==s2.month&&day==s2.day&&hour==s2.hour&&minute<s2.minute)return true;
      if(year==s2.year&&month==s2.month&&day==s2.day&&hour==s2.hour&&minute==s2.minute&&second<s2.second)return true;
      return false;
    }
  void show() {    //输出
    cout<<"The urgent schedule is No."<<ID<<": "<<year<<"/"<<month<<"/"<<day<<" "<<hour<<":"<<minute<<":"<<second<<endl;
  }
};

int main() {
  int i, y, m, d, hh, mm, ss;
  char a;
  cin >> i >> y >> a >> m >> a >> d >> hh >> a >> mm >> a >> ss;
  Schedule s1(i, y, m, d, hh, mm, ss);
  cin >> i;
  int flag=0;
  while(i){      //判断输入0,输入0则结束
    cin >> y >> a >> m >> a >> d >> hh >> a >> mm >> a >> ss;
    Schedule s2=Schedule(i, y, m, d, hh, mm, ss);
    if(s2<s1) {     //若后者s2比前者s1小(日期前),则将s2给s1
      s1=s2;                //s1保存最小(日期早)的值
    };
    cin>>i;
    flag++;    //判断第一行是否直接输入0
  }
  if(flag!=0) {     //若第一行直接为0,则不作任何输出
    s1.show();
  };
  return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值