日歷程序設(shè)計文檔_第1頁
日歷程序設(shè)計文檔_第2頁
日歷程序設(shè)計文檔_第3頁
日歷程序設(shè)計文檔_第4頁
日歷程序設(shè)計文檔_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

一、目的(要求)日歷程序(日歷需包括以下三種功能):輸出某年份的12個月輸出某年某月輸出某年某月某日是禮拜幾二、概要設(shè)計程序運行的流程:開始運行的菜單可選擇:1)輸出某年份的12個月2)輸出某年某月3)輸出某年某月某日是禮拜幾當(dāng)程序執(zhí)行完成以后,可通過用戶自己的意愿來選擇是不是再執(zhí)行一次程序。所包括的函數(shù)如下:打印日歷的函數(shù):voidprintmonth(intm)構(gòu)造日歷的函數(shù):voidprintheed(intm)intdaysofmonth(intm)intisleep()intfirstday(intm)voidreset()voidprintweek(intd)intisleep(ints)(重載函數(shù))打印開關(guān)的函數(shù):voidchoose(intc)三、設(shè)計要點每一個函數(shù)的功能:voidprintmonth(intm)作用:實現(xiàn)對日歷的打印。voidprintheed(intm)作用:構(gòu)造出日歷的頭“月日一二三四五六”。intdaysofmonth(intm)作用:計算m月份的天數(shù)。intisleep()作用:判斷當(dāng)前年份是不是為閏年。int firstday(int m)作用:判斷m月的第一天是禮拜幾。voidreset()作用:全局變量歸初始值。voidprintweek(intd)作用:將變量轉(zhuǎn)化為用戶可視的“禮拜一,禮拜二”等可視符號。intisleep(ints)作用:計算從N年到2021年中有多少個閏年,并且當(dāng)N<2021時不包括2021年,當(dāng)N>2021時包括2年。voidchoose(intc)作用:構(gòu)造程序內(nèi)部菜單,面對計算機。關(guān)鍵代碼分析:47~55:(此標(biāo)注為代碼行標(biāo),見四、源程序,下同)intk=firstday(m)If(k==7)k=0;for(inti=0;i<k;i++)cout<<””;for(inti=1;i<=daysofmonth(m);i++){cout<<””<<setw(2)<<i;if(k++==6){k=0;cout<<’\n’<<” ”;}}此代碼中k(作用于為printmonth的局部變量)充當(dāng)禮拜幾的角色,由k操縱當(dāng)前輸出的日期是禮拜幾。64~82:{switch(m)case1:case3:case5:case7:case8:case10:case12:return31;case4:case6:case9:case11:return30;case:if(isleep())return29;elsereturn28;}}由此代碼判斷m月份有多少天,然后輸出,構(gòu)造日歷。2月份通過isleep()函數(shù)判斷是不是為閏年。89~119:{If(m==1){If(year<N){ynn=isleep(0)*366+((N-year)isleep(0))*365;weekday=7-7nn%7;}else{ynn=(isleep(0))*366+((year-N)-isleep(0))*365;weekday=7+ynn%7;if(weekday>7)weekday-=7;}}else{if(year>=N){ynn+=daysofmonth(m-1);weekday=7+ynn%7;if(weekday>7)weekday-=7;}else{ynn-=daysofmonth(m-1);weekday=7-ynn%7;}}returnweekday;}通過計算公式(總天數(shù)%7=距離2021年1月1日有幾個禮拜單元)而算出m月的第一天是禮拜幾。Isleep(0)通過計算之間有多少個閏年。通過對全局變量weekday的return(可省略)輸出m月的第一天是禮拜幾。121~123:{ynn=0;}對全局變量ynn歸初始值,對第二遍的運行程序進行準(zhǔn)備。138~153:{intsum=0;if(N<year){for(inti=N;i<=year;i++)if((i%4==0&&i&100!=0)||(i%400==0))sum+=1;returnsum;}elseif(N>year){for(inti=N-1;i>=year;i--)if((i%4==0&&i%100!=0)||(i%400==0))sum+=1;returnsum;}elsereturn0;}計算并返回sum(作用域為isleep(ints))的值(從N年到2021年不包括2021年(2021年到N年)有多少個閏年)。155~200:{switch(c){case1:{160~165}case2:{168~175}case3:{179~196}default:cout<<”ERROR!”;}}通過開關(guān)switch制造構(gòu)建三個菜單(case1,case2,case3)以便程序能夠清晰且分工明確地運行三個功能。重點代碼注釋:53~54:cout<<””<<setw(2)<<i;if(k++=6){k=0;cout<<’\n’<<””;}出某年的12個月的日歷\n";cout<<"2.輸出某年某月的日歷\n";cout<<"3.輸出某年某月某日的禮拜幾\n";cout<<"********************************\n";cout<<"請輸入(1,2,3):\n";cin>>i;reset();choose(i);a='n';cout<<"*****again?*****\n";cout<<"請輸入(y)或(n)";cin>>a;}16.system("PAUSE");//MicrosoftVisualStudio2021需要system("PAUSE")來暫停操縱臺界面17.return0;18.}19.voidprintmonth(intm)20.{21.printheed(m);22.intk=firstday(m);23.if(k==7)k=0;24.for(inti=0;i<k;i++)25.cout<<"";26.for(inti=1;i<=daysofmonth(m);i++)27.{cout<<""<<setw(2)<<i;if(k++==6){k=0;cout<<'\n'<<"";}}cout<<endl;}voidprintheed(intm){35.cout<<setw(2)<<m<<"月日一二三四五六\n";36.cout<<"";}intdaysofmonth(intm){switch(m){case1:case3:case5:case7:case8:case10:case12:return31;case4:case6:case9:case11:return30;case2:if(isleep())return29;elsereturn28;}}58.intisleep()// 重載函數(shù){if((year%4==0&&year%100!=0)||(year%400==0))return1;elsereturn0;}intfirstday(intm){if(m==1){if(year<N){ynn=isleep(0)*366+((N-year)-isleep(0))*365;weekday=7-ynn%7;}else{ynn=(isleep(0))*366+((year-N)-isleep(0))*365;weekday=7+ynn%7;if(weekday>7)weekday-=7;}}else{if(year>=N){ynn+=daysofmonth(m-1);weekday=7+ynn%7;if(weekday>7)weekday-=7;}else{ynn-=daysofmonth(m-1);weekday=7-ynn%7;}}returnweekday;}voidreset(){ynn=0;}voidprintweek(intd){switch(d){case1:cout<<year<<"年"<<month<<"月"<<day<<"日是禮拜一哦,親愛的!";break;case2:cout<<year<<"年"<<month<<"月"<<day<<"日是禮拜二哦,親愛的!";break;case3:cout<<year<<"年"<<month<<"月"<<day<<"日是禮拜三哦,親愛的!";break;case4:cout<<year<<"年"<<month<<"月"<<day<<"日是禮拜四哦,親愛的!";break;case5:cout<<year<<"年"<<month<<"月"<<day<<"日是禮拜五哦,親愛的!";break;case6:cout<<year<<"年"<<month<<"月"<<day<<"日是禮拜六哦,親愛的!";break;case0:cout<<year<<"年"<<month<<"月"<<day<<"日是禮拜日哦,親愛的!";break;}}112.intisleep(ints)// 重載函數(shù){intsum=0;if(N<year){for(inti=N;i<=year;i++)if((i%4==0&&i%100!=0)||(i%400==0))sum+=1;returnsum;}121.elseif(N>year)// 不能包括2021年{for(inti=N-1;i>=year;i--)if((i%4==0&&i%100!=0)||(i%400==0))sum+=1;returnsum;}elsereturn0;}voidchoose(intc){switch(c){case1:{cout<<"輸入想要查詢的年份:";cin>>year;for(inti=1;i<=12;i++)printmonth(i);break;}case2:{cout<<"輸入想要查詢的(年)份:";cin>>year;cout<<"輸入想要查詢的(月)份:";cin>>month;147.for(inti=1;i<=(month-1);i++)// 模擬運行intk=firstday(i);printmonth(month);break;}case3:{cout<<"輸入想要查詢的(年)份:";cin>>year;cout<<"輸入想要查詢的(月)份:";cin>>month;158.for(inti=1;i<=(month-1);i++)// 模擬運行intk=firstday(i);cout<<"輸入想要查詢的(日)子:";cin>>day;intk=firstday(month);if(k==7)k=0;for(inti=1;i<=day;i++){if(k++==6)k=0;}k-=1;printweek(k);cout<<endl;break;}default:cout<<"ERROR!";}}五、測試當(dāng)c=1,year=1時:當(dāng)c=1,year=2021時:當(dāng)c=1,year=2100時:當(dāng)c=2,year=1,month=5時:當(dāng)c=2,year=2021,month=10時:當(dāng)c=2,year=2100,month=12時:當(dāng)c=3,year=1,month=3,day=5時:當(dāng)c=3,year=2021,month=5,day=3時:當(dāng)c=3,year=2021,month=5,day=1時:六、實驗測試中的BUG月份的日歷輸出出現(xiàn)了問題??墒浅霈F(xiàn)問題的概率大體為0。七、制作歷程2021年5月1日禮拜五:設(shè)計并制作日歷,用時50分鐘。2021年5月3日禮拜日:修改并更新日歷,用時30分鐘。-添加了功能2:輸出某年某月-添加了功能3:輸出某年某月某日是禮拜幾2021年5月

溫馨提示

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

評論

0/150

提交評論