时间和日期类(IV)

Problem B: 时间和日期类(IV)Time Limit: 4 Sec Memory Limit: 128 MB
Submit: 4644 Solved: 2797
[Submit][Status]Description设计一个日期时间类,用于读取输入的数据,按格式输出日期和时间。

设计日期时间类DateTime由2个成员组成,分别是一个Date类对象和一个Time类对象;
设计DateTime类需支持以下操作:
DateTime::DateTime()无参构造方法:初始化为1年1月1日、0时0分0秒;
DateTime::DateTime(int,int,int,int,int,int)构造方法:依照参数(顺序为年月日、时分秒)初始化对象;
在上述两个DateTime类的构造函数中输出:“CREATE DateTime : (y, m, d, hh, mm, ss)”,其中y、m、d为初始化对象时的年月日值,h、m、s为初始化对象时的时分秒值。参见输出。

DateTime::DateTime(const Date&,const Time&)构造方法:依照参数传入的日期和时间初始化对象;
在这个DateTime类的构造函数中输出:“CREATE DateTime : (y, m, d) (hh, mm, ss)”,其中y、m、d为初始化对象时的年月日值,h、m、s为初始化对象时的时分秒值。参见输出。

DateTime:DateTime(const DateTime&)构造方法:拷贝构造函数,初始化对象。
在拷贝构造函数中输出:“COPY DateTime : (y, m, d) (hh, mm, ss)”,其中y、m、d为初始化对象时的年月日值,h、m、s为初始化对象时的时分秒值。参见输出。

DateTime::showDateTime()方法:按格式输出DateTime对象;
DateTime::setDateTime(int,int,int,int,int,int)方法:依照参数(顺序为年月日、时分秒)修改对象的属性值;

编写DateTime类的读写函数:year()、month()、day()、hour()、minute()、second()。读写函数的参数、返回值参见main()函数。

DateTime类包含了两个类:Date类和Time类

设计日期类Date需支持以下操作:
Date::Date()无参构造方法:初始化为1年1月1日
Date::Date(int,int,int)构造方法:传入的参数依次为年月日,用参数将日期初始化。
在Date类的构造函数中输出:“CREATE Date : (y, m, d)”,其中y、m、d为初始化对象时的年月日值。参见输出。

Date::Date(const Date&)构造方法:拷贝构造函数,初始化对象。
在拷贝构造函数中输出:“COPY Date : (y, m, d)”,其中y、m、d为初始化对象时的年月日值。参见输出。

Date::showDate()方法:按格式输出Date对象。
Date::setDate(int,int,int)方法:传入的参数依次为年月日,用参数修改对象的属性值

设计时间类Time需支持以下操作:
Time::Time()无参构造方法:初始化为0时0分0秒
Time::Time(int,int,int)构造方法:传入的参数依次为时分秒,用参数将时间初始化。
在Time类的构造函数中输出:“CREATE Time : (h, m, s)”,其中h、m、s为初始化对象时的时分秒值。参见输出

Time::Time(const Time&)构造方法:拷贝构造函数,初始化对象。
在拷贝构造函数中输出:“COPY Time : (h, m, s)”,其中h、m、s为初始化对象时的时分秒值。参见输出

Time::showTime()方法:按格式输出Time对象。
Time::setTime(int,int,int)方法:传入的参数依次为时分秒,用参数修改对象的属性值


你设计DateTime类、Date类和Time类,使得main()函数能够正确运行。

函数调用格式见append.cc

append.cc中已给出main()函数。

Input输入的第一个整数n,表示有n组测试数据。
后面的输入每行为一组测试数据。每组测试数据的前3个整数是日期的年月日,后3个整数是时间的时分秒。

Output每组测试数据对应一行输出。日期的输出格式为“yyyy-mm-dd”,时间的输出格式为“hh:mm:ss”,中间用一个空格分开。

Sample Input
3
1982 10 1 0 0 0
2000 2 28 23 59 59
2014 7 2 13 30 01
Sample Output
CREATE Date : (1000, 10, 10)
COPY Date : (1000, 10, 10)
CREATE Time : (1, 1, 1)
COPY Time : (1, 1, 1)
COPY Time : (1, 1, 1)
COPY Date : (1000, 10, 10)
CREATE DateTime : (1000, 10, 10) (1, 1, 1)
COPY Time : (1, 1, 1)
COPY Date : (1000, 10, 10)
COPY DateTime : (1000, 10, 10) (1, 1, 1)
DateTime : 1000 10 10 1 1 1
1982-10-01 00:00:00
2000-02-28 23:59:59
2014-07-02 13:30:01
HINT输出格式用头文件中流操作算子:

setw(w) :设置数据的输出宽度为w个字符

setfill©:设置用字符c作为填充字符

Append Codeappend.cc,

#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
class Time{
    friend class DateTime;
private:
    int h1,m1,s1;
public:
    Time():h1(0),m1(0),s1(0){cout<<"CREATE Time : ("<<h1<<", "<<m1<<", "<<s1<<")"<<endl;}
    Time(int x,int y,int z):h1(x),m1(y),s1(z){cout<<"CREATE Time : ("<<h1<<", "<<m1<<", "<<s1<<")"<<endl;}
    Time(const Time &p):h1(p.h1),m1(p.m1),s1(p.s1){cout<<"COPY   Time : ("<<h1<<", "<<m1<<", "<<s1<<")"<<endl;}
//    Time(const Time &p){h=p.h;m=p.m;s=p.s;num++;sum++;cout<<"There was a call to the copy constructor : "<<h<<","<<m<<","<<s<<endl;}
    void showTime()const{if(h1>=24||m1>=60||s1>=60||h1<0||m1<0||s1<0) cout<<"Time error"<<endl; else cout<<setw(2)<<setfill('0')<<h1<<":"<<setw(2)<<setfill('0')<<m1<<":"<<setw(2)<<setfill('0')<<s1;}
    void setTime(int x,int y,int z){h1=x;m1=y;s1=z;}
};
class Date{
    friend class DateTime;
private:
    int y2;
    int m2;
    int d2;
public:
    Date():y2(1),m2(1),d2(1){cout<<"CREATE Date : ("<<y2<<", "<<m2<<", "<<d2<<")"<<endl;}
    Date(int x,int y,int z):y2(x),m2(y),d2(z){cout<<"CREATE Date : ("<<y2<<", "<<m2<<", "<<d2<<")"<<endl;}
    Date(const Date &p):y2(p.y2),m2(p.m2),d2(p.d2){cout<<"COPY   Date : ("<<y2<<", "<<m2<<", "<<d2<<")"<<endl;}
    void showDate(){cout<<setw(4)<<setfill('0')<<y2<<"-"<<setw(2)<<setfill('0')<<m2<<"-"<<setw(2)<<setfill('0')<<d2;}
    void setDate(int x,int y,int z){y2=x;m2=y;d2=z;}
};
class DateTime{
    friend class Time;
    friend class Date;
private:
    Time t_;
    Date d_;
public:
    DateTime():d_(1,1,1),t_(0,0,0){cout<<"CREATE DateTime : ("<<d_.y2<<", "<<d_.m2<<", "<<d_.d2<<", "<<t_.h1<<", "<<t_.m1<<", "<<t_.s1<<")"<<endl;}
    DateTime(const Date& a,const Time& b):d_(a),t_(b){cout<<"CREATE DateTime : ("<<d_.y2<<", "<<d_.m2<<", "<<d_.d2<<")"<<" "<<"("<<t_.h1<<", "<<t_.m1<<", "<<t_.s1<<")"<<endl;}
    DateTime(int x1,int y1,int z1,int x2,int y2,int z2):d_(x1,y1,z1),t_(x2,y2,z2){cout<<"CREATE DateTime : ("<<d_.y2<<", "<<d_.m2<<", "<<d_.d2<<", "<<t_.h1<<", "<<t_.m1<<", "<<t_.s1<<")"<<endl;}
    DateTime(const DateTime &p):t_(p.t_),d_(p.d_){cout<<"COPY   DateTime : ("<<d_.y2<<", "<<d_.m2<<", "<<d_.d2<<")"<<" "<<"("<<t_.h1<<", "<<t_.m1<<", "<<t_.s1<<")"<<endl;}
    void showDateTime(){d_.showDate(); cout<<" "; t_.showTime();}
    DateTime& setDateTime(int x1,int y1,int z1,int x2,int y2,int z2){d_.setDate(x1,y1,z1);t_.setTime(x2,y2,z2);return *this;}
    int year(int a){d_.y2=a;}
    int month(int b){d_.m2=b;}
    int day(int c){d_.d2=c;}
    int hour(int a){t_.h1=a;}
    int minute(int b){t_.m1=b;}
    int second(int c){t_.s1=c;}
    int year()const{return d_.y2;}
    int month()const{return d_.m2;}
    int day()const{return d_.d2;}
    int hour()const{return t_.h1;}
    int minute()const{return t_.m1;}
    int second()const{return t_.s1;}
};
 
int main()
{
    const Date date(1000, 10, 10), dt(date);
    const Time time(1, 1, 1), tm(time);
    DateTime date_time(dt, tm);
    const DateTime cnt(date_time);
    cout << "DateTime : " << cnt.year() << " " << cnt.month() << " " << cnt.day();
    cout << " " << cnt.hour() << " " << cnt.minute() << " " << cnt.second();
    cout << endl;
    int cases;
    cin >> cases;
    for(int ca = 0; ca < cases; ca++)
    {
        int year, month, day;
        cin >> year >> month >> day;
        int hour, minute, second;
        cin >> hour >> minute >> second;
        date_time.year(year);
        date_time.month(month);
        date_time.day(day);
        date_time.hour(hour);
        date_time.minute(minute);
        date_time.second(second);
        date_time.showDateTime();
        cout << endl;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43511633/article/details/94726069