已有一个日期类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;
class Date{
protected:
int year;
int month;
int day;
};
class Time{
protected:
int hour;
int minute;
int second;
};
class Schedule : public Time, public Date{
protected:
int ID;
public:
bool operator < (const Schedule& s2);
void get_Sche(); // 除ID外的输入
void set_ID(int n) {
ID = n; } // ID的输入
void print() {
cout <<"The urgent schedule is "<< "No." << ID << ": "
<< year << "/" << month << "/" << day << " "<< hour << ":"
<< minute << ":" << second;
};
bool Schedule::operator < (const Schedule& s2) {
if(year < s2.year) return 1;
if(year > s2.year) return 0;
if(month < s2.month) return 1;
if(month > s2.month) return 0;
if(day < s2.day) return 1;
if(day > s2.day) return 0;
if(hour < s2.hour) return 1;
if(hour > s2.hour) return 0;
if(minute < s2.minute) return 1;
if(minute > s2.minute) return 0;
if(second < s2.second) return 1;
if(second > s2.second) return 0;
return 1;
}
void Schedule::get_Sche(){
scanf("%d/%d/%d%d:%d:%d",&year,&month,&day,
&hour,&minute,&second);
}
int main()
{
int num; // 编号
Schedule result; // 最终结果
int i = 0;
while(1) {
scanf("%d",&num);
if(num == 0) break;
Schedule temp;
temp.set_ID(num);
temp.get_Sche();
if(i == 0) {
result = temp;
}
else {
if(temp < result) {
result = temp;
}
}
i ++;
}
result.print();
}
/*第二种,采用数组存储,排序后输出*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Date{
protected:
int year;
int month;
int day;
};
class Time{
protected:
int hour;
int minute;
int second;
};
class Schedule : public Time, public Date{
protected:
int ID;
public:
bool operator < (const Schedule& s2);
void get_Sche();
void set_ID(int n) {
ID = n; }
void print() {
void print() {
cout <<"The urgent schedule is "<< "No." << ID << ": "
<< year << "/" << month << "/" << day << " "<< hour << ":"
<< minute << ":" << second;
}
};
bool Schedule::operator < (const Schedule& s2) {
if(year < s2.year) return 1;
if(year > s2.year) return 0;
if(month < s2.month) return 1;
if(month > s2.month) return 0;
if(day < s2.day) return 1;
if(day > s2.day) return 0;
if(hour < s2.hour) return 1;
if(hour > s2.hour) return 0;
if(minute < s2.minute) return 1;
if(minute > s2.minute) return 0;
if(second < s2.second) return 1;
if(second > s2.second) return 0;
return 0;
}
void Schedule::get_Sche() {
scanf("%d/%d/%d %d:%d:%d",&year,&month,&day,&hour,&minute,&second);
}
int main()
{
int num;
vector<Schedule> vec;
while(1) {
scanf("%d",&num);
if(num == 0) break;
Schedule temp;
temp.set_ID(num);
temp.get_Sche();
vec.push_back(temp);
}
sort(vec.begin(), vec.end(), [](Schedule& s1, Schedule& s2) {
return s1 < s2;});
// sort(<algorithm>) 第三个参数提供排序规则,这里可以选择默认,因为默认是升序的
vec[0].print();
}