zoukankan      html  css  js  c++  java
  • Problem D: 时间和日期类(IV)

     

    Problem D: 时间和日期类(IV)

    Time Limit: 4 Sec  Memory Limit: 128 MB
    Submit: 3785  Solved: 2247
    [Submit][Status][Web Board]

    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

    输出格式用头文件<iomanip>中流操作算子:

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

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

     

    Append Code

    append.cc
    #include <iostream>
    #include <iomanip>
    using namespace std;
    class Date
    {
    public :
        int year , month, day;
        Date(int a=1, int b=1, int c=1):year(a), month(b), day(c)
        {
            cout<<"CREATE Date : ("<<year<<", "<<month<<", "<<day<<")"<<endl;
        }
        Date(const Date &p)
        {
            year=p.year; month=p.month; day=p.day;
            cout<<"COPY   Date : ("<<year<<", "<<month<<", "<<day<<")"<<endl;
        }
        void setDate(int a, int b, int c)
        {
            year=a; month=b; day=c;
        }
        void showDate()
        {
            cout<<setw(4)<<setfill('0')<<year<<"-"<<setw(2)<<setfill('0')<<month<<"-"<<setw(2)<<setfill('0')<<day;
        }
    
    };
    class Time
    {
    public:
        int h, m, s;
        Time(int a=0, int b=0, int c=0):h(a), m(b), s(c)
        {
            cout<<"CREATE Time : ("<<h<<", "<<m<<", "<<s<<")"<<endl;
        }
        Time(const Time &p)
        {
            h=p.h; m=p.m; s=p.s;
            cout<<"COPY   Time : ("<<h<<", "<<m<<", "<<s<<")"<<endl;
        }
        void setTime(int a, int b, int c)
        {
            h=a; m=b; s=c;
        }
        void showTime()
        {
            cout<<setw(2)<<setfill('0')<<h<<":"<<setw(2)<<setfill('0')<<m<<":"<<setw(2)<<setfill('0')<<s;
        }
    };
    class DateTime
    {
    public :
    
        Time time;
        Date date;//为了copy顺序,竟然要把定义顺序都改了,无语, 函数的构造顺序仅与对象的声明顺序对应,与初始化列表顺序无关!!!
        int year()const{return date.year;}
        int month()const{return date.month;}
        int day()const{return date.day;}
        int hour()const{return time.h;}
        int minute()const{return time.m;}
        int second()const{return time.s;}
    
        int year(int a){date.year=a;}
        int month(int a){date.month=a;}
        int day(int a){date.day=a;}
        int hour(int a){time.h=a;}
        int minute(int a){time.m=a;}
        int second(int a){time.s=a;}
        DateTime():date(1,1,1), time(0,0,0)
        {
            cout<<"CREATE DateTime : ("<<date.year<<", "<<date.month<<", "<<date.day<<", "<<time.h<<", "<<time.m<<", "<<time.s<<")"<<endl;
        }
        DateTime(int a, int b, int c, int d, int e, int f):date(a,b,c), time(d,e,f)
        {
            cout<<"CREATE DateTime : ("<<date.year<<", "<<date.month<<", "<<date.day<<", "<<time.h<<", "<<time.m<<", "<<time.s<<")"<<endl;
        }
        DateTime(const Date &p1, const Time &p2): time(p2),date(p1)
        {
            cout<<"CREATE DateTime : ("<<date.year<<", "<<date.month<<", "<<date.day<<")("<<time.h<<", "<<time.m<<", "<<time.s<<")"<<endl;
        }
        DateTime(const DateTime &p):time(p.time),date(p.date)
        {
            cout<<"COPY DateTime : ("<<date.year<<", "<<date.month<<", "<<date.day<<")("<<time.h<<", "<<time.m<<", "<<time.s<<")"<<endl;
        }
    
        DateTime setDateTime(int a, int b, int c, int d, int e, int f)
        {
         date.year=a; date.month=b; date.day=c;
         time.h=d; time.m=e; time.s=f;
         return *this;
        }
        void showDateTime()
        {
            cout<<setw(4)<<setfill('0')<<date.year<<"-"<<setw(2)<<setfill('0')<<date.month<<"-"<<setw(2)<<setfill('0')<<date.day<<" "<<setw(2)<<setfill('0')<<time.h<<":"<<setw(2)<<setfill('0')<<time.m<<":"<<setw(2)<<setfill('0')<<time.s;
        }
    };
    
    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;
        }
    }
    

      

    作者:7oDo

    仅供参考,请勿抄袭。

    Hang Hang Hang !!!

  • 相关阅读:
    【CSS】4种CSS方法设置元素垂直水平居中
    js数据类型:引用和5种基本数据类型
    iOS——CALayer的shadow无效问题
    iOS——自定义Segue实现总结
    iOS动画
    iOS——Command-Line 查看当前SDK版本并修改默认SDK版本
    iOS——Swift开发中的单例设计模式(摘译,非原创)
    Windows Phone 8 解锁提示IpOverUsbSvc问题——IpOverUsbEnum返回No connected partners found解决方案
    Windows 8.1 开发过程中遇到的小问题(2)
    Windows 8.1 开发过程中遇到的小问题
  • 原文地址:https://www.cnblogs.com/Jie-Fei/p/9097495.html
Copyright © 2011-2022 走看看