7-1 日程安排(多重继承+重载) (40 分)
已有一个日期类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
作者
余春艳
单位
福州大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream> using namespace std; class Date{ protected: int year; int month; int day; public: Date(int y,int mon,int d):year(y),month(mon),day(d){ } void showdate(){cout<<" "<<year<<"/"<<month<<"/"<<day; } }; class Time{ protected: int hour; int minute; int second; public: Time(int h,int min,int s):hour(h),minute(min),second(s){ } void showtime(){cout<<" "<<hour<<":"<<minute<<":"<<second;} }; class Schedule:public Date,public Time{ int ID; public: bool operator < (const Schedule & s2); Schedule(int id,int y,int mon,int d,int h,int min,int s):Date(y,mon,d),Time(h,min,s),ID(id){ } void show(); }; bool Schedule::operator < (const Schedule & s2){ if(year<s2.year) return 1; else if(year>s2.year) return 0; else{ if(month<s2.month) return 1; else if(month>s2.month) return 0; else{ if(day<s2.day) return 1; else if(day>s2.day) return 0; else { if(hour<s2.hour) return 1; else if(hour>s2.hour) return 0; else{ if(minute<s2.minute) return 1; else if(minute>s2.minute) return 0; else { if(second<s2.second) return 1; else return 0; } } } } } } void Schedule::show(){ cout<<"No."<<ID<<":"; Date::showdate(); Time::showtime(); } int main() { int id,y,mon,d,h,min,s,i=0; Schedule s2(0,9999,9999,9999,999,999,99); while(1) { cin>>id; if(id==0) break; i++; scanf("%d/%d/%d",&y,&mon,&d); scanf("%d:%d:%d",&h,&min,&s); Schedule s1(id,y,mon,d,h,min,s); if(s1<s2) s2=s1; } if(i!=0) {cout<<"The urgent schedule is ";s2.show();} return 0; }