C++課程設(shè)計(jì)——日期類設(shè)計(jì)報(bào)告_第1頁
C++課程設(shè)計(jì)——日期類設(shè)計(jì)報(bào)告_第2頁
C++課程設(shè)計(jì)——日期類設(shè)計(jì)報(bào)告_第3頁
C++課程設(shè)計(jì)——日期類設(shè)計(jì)報(bào)告_第4頁
C++課程設(shè)計(jì)——日期類設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、.日期類設(shè)計(jì)報(bào)告1. 設(shè)計(jì)題目設(shè)計(jì)一個(gè)日期類,(學(xué)號(hào)尾號(hào)2、5、8完成)要求:2. 設(shè)計(jì)要求l 重載帶參數(shù)構(gòu)造函數(shù)(int year ,int month, int day)和默認(rèn)構(gòu)造函數(shù),前者要求不合要求的數(shù)據(jù)(年月日超出范圍)拋出異常l 計(jì)算出該日是星期幾,(網(wǎng)上找公式)。l 重載“+”操作,一個(gè)日期對象和天數(shù)相加(符合交換律)。l 重載“-”操作,兩天日期對象相減返回相差天數(shù)。 l 重載“+=”操作當(dāng)前日期加天數(shù)l 重載輸入輸出操作。3. 設(shè)計(jì)分析由題中要求可以知道,首先要設(shè)計(jì)一個(gè)日期類(class Cdate),還要有構(gòu)造函數(shù),明白函數(shù)的帶參與不帶參的區(qū)別;而且在日期類之中需要設(shè)計(jì)正確

2、的日期格式,若不正確則實(shí)現(xiàn)拋出異常,C+中對異常的處理分為拋出異常、捕獲異常、處理異常;在此處只要求拋出異常即可,接下來的實(shí)現(xiàn)輸入日期計(jì)算星期幾的代碼,。由題可以進(jìn)行網(wǎng)上的搜索,這個(gè)應(yīng)該行對簡單!之后就是重載的操作啦!4. 設(shè)計(jì)主要模塊(代碼實(shí)現(xiàn))1. 定義一個(gè)日期類class CDatepublic:CDate()CDate(int y,int m,int d);void fun();void display();friend CDate operator + (int d,CDate dt);friend CDate operator - (CDate &dt1,CDate &dt2);f

3、riend CDate &operator += (CDate &a1,int d);friend std:ostream& operator ( std:istream& is, CDate& dt );bool isleapyear();/ 潤年的判定bool status;bool check();void gettian();private:int year,month,day,day1;int d,D,D1,D2,D3;CDate:CDate (int y,int m,int d):year(y),month(m),day(d)2. 實(shí)現(xiàn)計(jì)算星期幾:#include using na

4、mespace std;class Dateint year,month,day;bool isleap(int i) constreturn i%400=0|i%4=0&i%100!=0;/閏年的判定public:Date(int y, int m, int d): year(y), month(m), day(d) void print() constchar* s = 星期日,星期一,星期二,星期三,星期四,星期五,星期六;int d13 = 0,31,28,31,30,31,30,31,31,30,31,30;int sum = 0;int i;if(isleap(year)d2 +;

5、for(i=1;iyear;i+)sum += 365 + isleap(i);for(i=1;imonth;i+)sum += di;sum += day;cout ssum%7 year month day & year + month + day)Date d(year,month,day);d.print();3. 重載日期加減的操作:CDate operator - (CDate &dt1,CDate &dt2) /重載-計(jì)算兩日期對象的天數(shù)差;CDate dt3;if(dt1.year%4=0&dt1.year%100!=0|dt1.year%400=0)mon_day1=29;i

6、f(dt2.year%4=0&dt2.year%100!=0|dt2.year%400=0)mon_day1=29; dt1.D =(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+dt1.D1 +dt1.day ; for(int i=0;i=dt1.month -1;i+)dt1.D1 +=mon_dayi;dt2.D2 =(dt2.year -1)*365+(dt2.year-1)/4-(dt2.year-1)/100+(dt2.year-1)/400+dt2.D3 +dt2.day ;for(int j=

7、0;j=dt2.month -1;j+)dt2.D3 +=mon_dayj;dt3.d =dt1.D -dt2.D2 ; return dt3;4. 調(diào)試運(yùn)行圖示1.判斷日期格式是否正確2,輸入日期并且計(jì)算星期幾,返回與系統(tǒng)中初始設(shè)定日期的相差天數(shù):5. 源代碼附錄:#include #include #include using namespace std;class CDate; /聲明類;CDate operator + (int d,CDate dt); /必須在此先聲明重載 CDate operator -(CDate &dt1,CDate &dt2);CDate &operator

8、 += (CDate &a1,int d);CDate &operator (CDate &a1,int d);std:ostream& operator ( std:istream& is, CDate& dt );char *week=星期日,星期一,星期二,星期三,星期四,星期五,星期六; /指針數(shù)組,保存星期;int mon_day=31,28,31,30,31,30,31,31,30,31,30,31; /數(shù)組,保存每月天數(shù);class CDatepublic:CDate()CDate(int y,int m,int d);void fun();void display();frie

9、nd CDate operator + (int d,CDate dt);friend CDate operator - (CDate &dt1,CDate &dt2);friend CDate &operator += (CDate &a1,int d);friend std:ostream& operator ( std:istream& is, CDate& dt );bool isleapyear();/ 潤年的判定bool status;bool check();void gettian();private:int year,month,day,day1;int d,D,D1,D2,

10、D3;CDate:CDate (int y,int m,int d):year(y),month(m),day(d)void CDate:gettian ()cout兩天日期對象相減返回相差天數(shù):dendl;bool CDate:isleapyear()return (year % 4) = 0) & (year % 100) != 0) | (year % 400) = 0);bool CDate:check()if (year 0)status = false;return status;if (month 12)status = false;return status;switch (m

11、onth)case 1:case 3:case 5:case 7:case 8:case 10:case 12:if (day 31)status = false;break;case 2:if (isleapyear()if (day 29)status = false;elseif (day 28)status = false;break;case 4:case 6:case 9:case 11:if (day 30)status = false;break;default:status = false;if (status)coutyear/month/dayendl;cout恭喜日期正

12、確了!endl;return status;void CDate:fun ()int C,W,y;cout請輸入日期!endl;coutyear;coutmonth;coutday;if(year=0|month12|day31)cout請輸入正確的日期!endl;elseif(month=1|month=2)month+=12;-year;elseC=year/100;y=year%100;W=(C/4)-2*C+y+(y/4)+(13*(month+1)/5)+day-1)+700)%7;cout今天是weekWendl;void CDate:display ()if(year=0|mon

13、th12|day31)cout請輸入正確的日期!endl;else coutyear/month/daymon_daydt.month-1)if(dt.year%4=0&dt.year%100!=0|dt.year%400=0)mon_day1=29;dt.day-=mon_daydt.month-1;if(+dt.month=13)dt.month=1;dt.year+;return dt;CDate operator - (CDate &dt1,CDate &dt2) /重載-計(jì)算兩日期對象的天數(shù)差;CDate dt3;if(dt1.year%4=0&dt1.year%100!=0|dt1

14、.year%400=0)mon_day1=29;if(dt2.year%4=0&dt2.year%100!=0|dt2.year%400=0)mon_day1=29; dt1.D =(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+dt1.D1 +dt1.day ; for(int i=0;i=dt1.month -1;i+)dt1.D1 +=mon_dayi;dt2.D2 =(dt2.year -1)*365+(dt2.year-1)/4-(dt2.year-1)/100+(dt2.year-1)/400+dt

15、2.D3 +dt2.day ;for(int j=0;jmon_daya1.month-1)a1.day-=mon_daya1.month-1;if(+a1.month=13)a1.month=1;a1.year+;return a1;std:ostream& operator ( std:ostream& os, CDate& dt ) os dt.year / dt.month / ( std:istream& is, CDate& dt ) is dt.year dt.month dt.day ; return is;int _tmain(int argc, _TCHAR* argv)CDate b2(2013,2,29);b2.check ();CDate b5(2013,6,9);b5.check ();/b2.display (); / CDate b1(-1231,10,17);/b1.display ();/cout*endl;/b1.fun ();/CDate b3(1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論