已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
13萬年歷系統(tǒng)題目:萬年歷系統(tǒng)姓名:黃煉軍學(xué)號(hào):20070810505學(xué)院:計(jì)算機(jī)與通信學(xué)院專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)0705班指導(dǎo)老師:何英完成時(shí)間:2009年11月10日一、 問題描述 模仿Windwos的日歷. 1) 日歷顯示功能。能根據(jù)系統(tǒng)日期進(jìn)行初始化,如果沒有任何輸入,則顯示系統(tǒng)日期所在月份的月歷。2) 日歷查詢、閏年判斷功能。輸入日期進(jìn)行查詢,顯示查詢?nèi)掌谒谠路莸脑職v,還將顯示所在年份是否為閏年。3) 參數(shù)檢查功能。如果輸入日期不合法,查詢將被拒絕,并顯示提示信息。4) 選做:通過鍵盤操作(如:光標(biāo)上、下、左、右移動(dòng)鍵,pageup、pagedown鍵)調(diào)整年份、月份和日期,并顯示調(diào)整后的日期及月歷。二、 問題分析對(duì)于要求1:難點(diǎn)在于判斷星期,但根據(jù)蔡勒公式,可以很容易地有年月日推斷出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中year:要查詢的年份nday:從該年的一月一日起到該天的天數(shù)w:得出的星期數(shù),w=0表示星期天。在打印月歷時(shí),只要知道第一天的星期,就可以依次輸入后面的日期,通過定長度輸出日期,在遇到某天時(shí)星期六時(shí),就換行輸出,因此可以按照月歷的格式輸出。對(duì)于初始輸入當(dāng)前月歷,可以通過中的time 和localtime函數(shù)取出系統(tǒng)時(shí)間進(jìn)行初始化。time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);gmt就是一個(gè)時(shí)間結(jié)構(gòu)體,可以從中取出年月日。對(duì)于要求2:閏年的判斷,能被4整除但不能被100整除,或者能被400整除的年份為閏年,否則為平年。日期的查詢,就是直接打印改天所在月份的月歷。對(duì)于要求3:判斷日期是否合法,可以先判斷年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通過此判斷合法,再判斷是否時(shí)閏年,如果時(shí)閏年,則判斷二月份是否滿足要求,閏年二月份不能超過29天,平年二月份不能超過28天。在查詢過程中,如果發(fā)現(xiàn)輸入不合法或者不滿足輸入要求,則要求重新輸入。對(duì)于選作要求:通過兩個(gè)getch();捕獲鍵盤的輸入,將后一個(gè)getch()的返回值付給整型或字符型k,k為相應(yīng)鍵的ascii值,判斷ascii值,就可以知道時(shí)哪個(gè)鍵的輸入。若捕獲到某鍵的輸入,則設(shè)置相應(yīng)的年或月或日的值,再進(jìn)行刷性輸出,就可以實(shí)現(xiàn)日期的調(diào)整。三、 總體設(shè)計(jì)功能模塊月歷顯示日期查詢?nèi)掌谂袛嗳掌谡{(diào)整閏年判斷流程圖程序進(jìn)入顯示當(dāng)前時(shí)間1、日期顯示2、日期查詢3、日期調(diào)整4、幫助文件5、退出程序1、日期顯示1、日期顯示2、日期查詢3、日期調(diào)整4、幫助文件5、退出程序四、 詳細(xì)設(shè)計(jì)主要函數(shù):int runYear(int year);該函數(shù)判斷某年是否是閏年,參數(shù)year表示要判斷的年份,返回值1表示該年為閏年,0表示該年為平年。struct tm* getDay();該函數(shù)用以取得系統(tǒng)的時(shí)間。該函數(shù)沒有參數(shù),返回值類型為struct tm*,是一個(gè)包含時(shí)間的結(jié)構(gòu)體。int dayExame(int year,int month,int day);該函數(shù)用以判斷輸入的年份是否合法,參數(shù)為要判斷的年月日,返回值為1表示該日期合法,為0表示不合法。int getwDay(int year,int month,int day);該函數(shù)用以根據(jù)一個(gè)日期推斷星期,參數(shù)為要判斷的年月日。返回值為整型,123456分別表示星期一到星期六,0表示星期天。void setDay(int &year,int &month,int &day);該函數(shù)調(diào)整當(dāng)前日期。參數(shù)為引用類型,分別為當(dāng)前日期的年月日,沒有返回值。void checkCalender();該函數(shù)用以顯示要查詢的日期的月歷,無參數(shù)和返回值,。void inline backMenu();該函數(shù)為內(nèi)聯(lián)函數(shù),用以實(shí)現(xiàn)完成某項(xiàng)功能后按任意字符鍵返回主菜單,無參數(shù)和返回值, void mainMenu(int &year,int &month,int &day);該函數(shù)參數(shù)為系統(tǒng)日期,無返回值,用戶在該函數(shù)執(zhí)行時(shí)可以選擇功能。五、 調(diào)試與測試1、 進(jìn)入程序后顯示2、 按任意字符鍵返回主菜單3、 進(jìn)入主菜單后,按1,顯示當(dāng)前時(shí)間4、 在主菜單界面按2,進(jìn)行日歷的查詢,并經(jīng)行日期的合法性判斷和閏年的判斷。例1、 輸入 2009 11 6,由于輸入合法,會(huì)顯示月歷例2、 輸入2009 11 31,由于輸入不合法,會(huì)進(jìn)行報(bào)錯(cuò),要求重新輸入此情況下,當(dāng)輸入正確的日期后,就可以顯示月歷,然后可以返回主菜單。5、 在主菜單輸入3,進(jìn)入日期調(diào)整界面,可以通過方向鍵以及PageUp和PageDown進(jìn)行日期的調(diào)整按向上鍵后出現(xiàn)如下結(jié)果6、 在主菜單中輸入4,進(jìn)入幫助界面7、 在主界面中輸入5,程序退出六、 程序源代碼#include#include#include#include#include #define KEYNUMUp 0x48#define KEYNUMDown 0x50 #define KEYNUMLeft 0x4b #define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49 #define KEYNUMPageDown 0x51 int year,month,day;/全局變量記錄時(shí)間int daysOfMonth212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31, 30,31;int runYear(int year)/判斷是否是閏年int flag=0;if(year%400=0|(year%4=0&year%100!=0)flag=1;return flag;struct tm* getDay()/從系統(tǒng)取得當(dāng)前時(shí)間time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);return gmt;int dayExame(int year,int month,int day)/檢查日期是否正確if(year0|month12|day31)return 0;switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(day31)return 0;break;case 4:case 6:case 9:case 11:if(day30)return 0;break;default:if(runYear(year)&day29)return 0;else if(runYear(year)=0&day28)return 0;return 1;int getwDay(int year,int month,int day)/取得星期int nday=0,nDay,i,w;for(i=0;imonth-1;i+)nday+=daysOfMonthrunYear(year)i;nday+=day;nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;return w;void printCalender(int year,int month,int day);void setDay(int &year,int &month,int &day)/調(diào)節(jié)日期printf(%c:上一年 %c:下一年n,24,25);printf(%c:上個(gè)月 %c:下個(gè)月n,27,26);printf(PageUp:昨天 PageDown:明天n);printf(其他:返回主菜單n);char k;getch();k=getch();switch(k)/通過方向鍵和PageUp、PageDown鍵來調(diào)整日期case KEYNUMUp:year-;if(dayExame(year,month,day)=0)year+; printf(%c,7);/檢查日期的合法性,/若錯(cuò)誤,保持日期不變,并警告system(cls);printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMDown:year+;if(dayExame(year,month,day)=0)year-;printf(%c,7);system(cls);printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMLeft:month-;if(dayExame(year,month,day)=0)month+;printf(%c,7);system(cls);printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMRight:month+;if(dayExame(year,month,day)=0)month-;printf(%c,7);system(cls);printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMPageUp:day-;if(dayExame(year,month,day)=0)day+;printf(%c,7);system(cls);printCalender(year,month,day);setDay(year,month,day);break;case KEYNUMPageDown:day+;if(dayExame(year,month,day)=0)day-;printf(%c,7);system(cls);printCalender(year,month,day);setDay(year,month,day);break;default:;void printCalender(int year,int month,int day)/打印月歷int i;char wday74=Sun,Mon,Tue,Wed,Thu,Fri,Sat;printf( %d年%d月%d日n,year,month,day);printf(*n);for(i=0;i7;i+)printf(%5s,wdayi);printf(n);int w;int nowDay=1;w=getwDay(year,month,nowDay);/找到第一天的星期int n;n=daysOfMonthrunYear(year)month-1;switch(w)/放置第一天case 0:printf(%5d,nowDay);break;case 1:printf(%10d,nowDay);break;case 2:printf(%15d,nowDay);break;case 3:printf(%20d,nowDay);break;case 4:printf(%25d,nowDay);break;case 5:printf(%30d,nowDay);break;default:printf(%35dn,nowDay);nowDay+;for(i=1;i2)f=1;while(f=1);switch(*menu)case 1:system(cls);/清屏printCalender(year,month,day);backMenu();/實(shí)現(xiàn)任意鍵返回主菜單mainMenu(year,month,day);break;case 2:system(cls);checkCalender();backMenu();mainMenu(year,month,day);break;case 3:system(cls);printCalender(year,month,day);setDay(year,month,day);printf(請(qǐng)按任意字符鍵返回主菜單:);getch();system(cls);mainMenu(year,month,day);break;case 4:system(cls);printf(在主菜單中輸入相應(yīng)的數(shù)字就可以完成以下功能:nn);printf(* 1、顯示今天所在月的月份nn);printf(* 2、輸入日期,判斷該年是否是閏年,并顯示所在月份的月歷nn);printf(* 3、用%c %c %c %c PageUp PageDown 進(jìn)行日期的調(diào)整nn,24,25,27,26);printf(* 4、顯示功能及操作方法nn);printf(* 5、退出程序nn);backMenu();mainMenu(year,month,day);break;case 5:system(cls);printf(程序已退出!n);exit(0);default:printf(%c輸入錯(cuò)誤!n,7);flag=1;while(flag);void main()struct tm *gmt=getDay();year=gmt-tm_year+1900;month=gmt-tm_mon+1;day=gmt-tm_mday;printCalender(year,month,day);/用系統(tǒng)時(shí)間進(jìn)行初始化,打印當(dāng)前
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度愛奇藝體育賽事賽事直播內(nèi)容制作合同:股票投資回報(bào)保障協(xié)議3篇
- 二零二五年度環(huán)保型渣土運(yùn)輸船租賃合同3篇
- 二零二五年電子商務(wù)平臺(tái)運(yùn)營咨詢合同2篇
- 二零二五年度桉樹木材加工節(jié)能減排合同3篇
- 二零二五版醫(yī)療扶貧公益項(xiàng)目合同3篇
- 二零二五版股份收購項(xiàng)目風(fēng)險(xiǎn)評(píng)估及控制合同3篇
- 二零二五版生態(tài)旅游區(qū)建設(shè)項(xiàng)目招標(biāo)合同及生態(tài)保護(hù)協(xié)議3篇
- 二零二五版數(shù)據(jù)中心電梯緊急搶修及日常維護(hù)合同3篇
- 二零二五年度房產(chǎn)交易居間服務(wù)合同12篇
- 二零二五版國際農(nóng)業(yè)勞務(wù)輸出與管理合同3篇
- 購銷合同電子版完整版
- 福建省福州市延安中學(xué)2023-2024學(xué)年八年級(jí)上學(xué)期期末物理模擬試卷+
- 2024年度醫(yī)院肝膽外科實(shí)習(xí)生帶教計(jì)劃課件
- 微機(jī)原理與接口技術(shù)考試試題及答案(綜合-必看)
- 勞務(wù)投標(biāo)技術(shù)標(biāo)
- 研發(fā)管理咨詢項(xiàng)目建議書
- 轉(zhuǎn)錢委托書授權(quán)書范本
- 一種配網(wǎng)高空作業(yè)智能安全帶及預(yù)警系統(tǒng)的制作方法
- 某墓園物業(yè)管理日常管護(hù)投標(biāo)方案
- 蘇教版六年級(jí)數(shù)學(xué)上冊(cè)集體備課記載表
- 內(nèi)蒙古匯能煤電集團(tuán)有限公司長灘露天煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
評(píng)論
0/150
提交評(píng)論