Problem B: 時間和日期類(III) Description 設計一個日期時間類,用於讀取輸入的數據,按格式輸出日期和時間。 設計日期時間類DateTime由2個成員組成,分別是一個Date類對象和一個Time類對象; 設計DateTime類需支持以下操作: DateTime::DateTi ...
Problem B: 時間和日期類(III)
Time Limit: 4 Sec Memory Limit: 128 MBSubmit: 2889 Solved: 1732
[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::showDateTime()方法:按格式輸出DateTime對象;
DateTime::setDateTime(int,int,int,int,int,int)方法:依照參數(順序為年月日、時分秒)修改對象的屬性值;
DateTime類包含了兩個類:Date類和Time類
設計日期類Date需支持以下操作:
Date::Date()無參構造方法:初始化為1年1月1日
Date::Date(int,int,int)構造方法:傳入的參數依次為年月日,用參數將日期初始化。
在Date類的構造函數中輸出:“CREATE 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::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 01Sample Output
CREATE Time : (0, 0, 0) CREATE Date : (1, 1, 1) CREATE DateTime : (1, 1, 1, 0, 0, 0) 0001-01-01 00:00:00 1982-10-01 00:00:00 2000-02-28 23:59:59 2014-07-02 13:30:01HINT
輸出格式用頭文件<iomanip>中流操作運算元:
setw(w) :設置數據的輸出寬度為w個字元
setfill(c):設置用字元c作為填充字元
Append Code
#include <iostream>
#include <iomanip>
using namespace std;
int k=0;
class Time
{
friend class DateTime;
public:
int h,m,s;
Time(int a=0,int b=0,int c=0):h(a),m(b),s(c){}
void showTime()
{
cout<<setw(2)<<setfill('0')<<h<<":"<<setw(2)<<setfill('0')<<m<<":"<<setw(2)<<setfill('0')<<s;
}
Time setTime(int a,int b,int c)
{
*this=Time(a,b,c);
return *this;
}
};
class Date
{
friend class DateTime;
public:
int year,month,day;
Date(int a=1,int b=1,int c=1):year(a),month(b),day(c){}
void showDate()
{
cout<<setw(4)<<setfill('0')<<year<<"-"<<setw(2)<<setfill('0')<<month<<"-"<<setw(2)<<setfill('0')<<day;
}
Date setDate(int a,int b,int c)
{
*this=Date(a,b,c);
return *this;
}
};
class DateTime:public Time,public Date
{
public:
DateTime():Date(1,1,1),Time(0,0,0){cout<<"CREATE Time : ("<<Time::h<<", "<<Time::m<<", "<<Time::s<<")"<<endl;cout<<"CREATE Date : ("<<Date::year<<", "<<Date::month<<", "<<Date::day<<")"<<endl;cout<<"CREATE DateTime : ("<<Date::year<<", "<<Date::month<<", "<<Date::day<<", "<<Time::h<<", "<<Time::m<<", "<<Time::s<<")"<<endl;}
DateTime(const Date &p,const Time &q):Date(p.year,p.month,p.day),Time(q.h,q.m,q.s){}
DateTime(int a,int b,int c,int d,int e,int f):Date(a,b,c),Time(d,e,f){}
void showDateTime()
{
Date::showDate();
cout<<" ";
Time::showTime();
}
DateTime &setDateTime(int a,int b,int c,int d,int e,int f)
{
*this=DateTime(a,b,c,d,e,f);
return *this;
}
};
int main()
{
DateTime date_time;
date_time.showDateTime();
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.setDateTime(year, month, day, hour, minute, second);
date_time.showDateTime();
cout << endl;
}
}