PINTIA - 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

解法

 /*第一种解法,每次读入数据之后进行比较*/
#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();
}

猜你喜欢

转载自blog.csdn.net/qq_44336650/article/details/107101013