設計一個多功能的MyTime類
阿新 • • 發佈:2018-12-19
題目內容:
定義一個帶過載建構函式的日期類Date,資料成員有年、月、日;成員函式包括:一個帶引數的建構函式Date(int,int,int),一個不帶引數的建構函式(設定日期為1900年1月1日),一個按“年-月-日”格式顯示日期的函式,一個對資料成員賦值的函式void init(int,int,int)。
主函式中對類的測試要求: 1. 分別使用兩個不同的過載建構函式建立兩個日期類物件(必須為d1,d2,d2初始值為2100-12-12); 2. 按“年-月-日”格式分別顯示兩個物件的值; 3. 輸入資料,用init函式為d1賦值; 2.按“年-月-日”格式顯示物件d1的值;。 輸入格式: 給d1賦值的資料
輸出格式: d1的預設值d2的初始值d1賦值後的值
輸入樣例: 2011 4 29 輸出樣例: 1900-1-1 2100-12-12 2011-4-29
#include <iostream> #include <cmath> #include<iomanip> using namespace std; class MyTime { int hour; int min; int sec; int seccha(int h,int m,int s); public: MyTime(){ hour = 0; min = 0; sec = 0; } MyTime(int h,int m,int s) { (h>=0 && h<=12)? hour = h:hour = 0; (m>=0 && m<=60)? min = m:min = 0; (s>=0 && s<=60)? sec = s:sec = 0; } void inite(int h,int m,int s) { (h>=0 && h<=12)? hour = h:hour = 0; (m>=0 && m<=60)? min = m:min = 0; (s>=0 && s<=60)? sec = s:sec = 0; } void out_12() { int h1; if(hour>=12) { h1 = hour%12; cout<<setw(2)<<setfill('0')<<h1<<":"<<setw(2)<<setfill('0')<<min<<":"<<setw(2)<<setfill('0')<<sec<<" "<<"PM"<<endl; }else { cout<<setw(2)<<setfill('0')<<hour<<":"<<setw(2)<<setfill('0')<<min<<":"<<setw(2)<<setfill('0')<<sec<<" "<<"AM"<<endl; } } void out_24() { cout<<setw(2)<<setfill('0')<<hour<<":"<<setw(2)<<setfill('0')<<min<<":"<<setw(2)<<setfill('0')<<sec<<endl; } void Addtime(int h, int m, int s) { sec = sec + s; if(sec >=60) { min = min + sec/60; sec = sec % 60; } min = min + m; if(min >=60) { hour = hour + min/60; min = min % 60; } hour = (hour + h) % 24; } void decreatime(int h, int m, int s) { int sum1 = seccha(h,m,s); int sum2 = seccha(hour,min,sec); int sum = abs(sum1 - sum2); int h1,m1,s1; hour = sum/3600; min = (sum%3600)/60; sec = sum%60; } }; int MyTime :: seccha(int h,int m,int s) { return h*3600 + m*60 + s; } int main() { int hour,min,sec,h1,m1,s1; cin>>hour>>min>>sec>>h1>>m1>>s1; MyTime t1,t2(8,10,30); t1.out_12(); t1.out_24(); t2.out_12(); t2.out_24(); t1.inite(hour,min,sec); t1.Addtime(h1,m1,s1); t1.out_12(); t1.out_24(); t2.decreatime(h1,m1,s1); t2.out_12(); t2.out_24(); return 0; }