c語言課程設計--萬年歷.doc_第1頁
c語言課程設計--萬年歷.doc_第2頁
c語言課程設計--萬年歷.doc_第3頁
c語言課程設計--萬年歷.doc_第4頁
c語言課程設計--萬年歷.doc_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

13萬年歷系統(tǒng)題目:萬年歷系統(tǒng)姓名:黃煉軍學號:20070810505學院:計算機與通信學院專業(yè):計算機科學與技術0705班指導老師:何英完成時間:2009年11月10日一、 問題描述 模仿Windwos的日歷. 1) 日歷顯示功能。能根據(jù)系統(tǒng)日期進行初始化,如果沒有任何輸入,則顯示系統(tǒng)日期所在月份的月歷。2) 日歷查詢、閏年判斷功能。輸入日期進行查詢,顯示查詢?nèi)掌谒谠路莸脑職v,還將顯示所在年份是否為閏年。3) 參數(shù)檢查功能。如果輸入日期不合法,查詢將被拒絕,并顯示提示信息。4) 選做:通過鍵盤操作(如:光標上、下、左、右移動鍵,pageup、pagedown鍵)調(diào)整年份、月份和日期,并顯示調(diào)整后的日期及月歷。二、 問題分析對于要求1:難點在于判斷星期,但根據(jù)蔡勒公式,可以很容易地有年月日推斷出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中year:要查詢的年份nday:從該年的一月一日起到該天的天數(shù)w:得出的星期數(shù),w=0表示星期天。在打印月歷時,只要知道第一天的星期,就可以依次輸入后面的日期,通過定長度輸出日期,在遇到某天時星期六時,就換行輸出,因此可以按照月歷的格式輸出。對于初始輸入當前月歷,可以通過中的time 和localtime函數(shù)取出系統(tǒng)時間進行初始化。time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);gmt就是一個時間結(jié)構(gòu)體,可以從中取出年月日。對于要求2:閏年的判斷,能被4整除但不能被100整除,或者能被400整除的年份為閏年,否則為平年。日期的查詢,就是直接打印改天所在月份的月歷。對于要求3:判斷日期是否合法,可以先判斷年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通過此判斷合法,再判斷是否時閏年,如果時閏年,則判斷二月份是否滿足要求,閏年二月份不能超過29天,平年二月份不能超過28天。在查詢過程中,如果發(fā)現(xiàn)輸入不合法或者不滿足輸入要求,則要求重新輸入。對于選作要求:通過兩個getch();捕獲鍵盤的輸入,將后一個getch()的返回值付給整型或字符型k,k為相應鍵的ascii值,判斷ascii值,就可以知道時哪個鍵的輸入。若捕獲到某鍵的輸入,則設置相應的年或月或日的值,再進行刷性輸出,就可以實現(xiàn)日期的調(diào)整。三、 總體設計功能模塊月歷顯示日期查詢?nèi)掌谂袛嗳掌谡{(diào)整閏年判斷流程圖程序進入顯示當前時間1、日期顯示2、日期查詢3、日期調(diào)整4、幫助文件5、退出程序1、日期顯示1、日期顯示2、日期查詢3、日期調(diào)整4、幫助文件5、退出程序四、 詳細設計主要函數(shù):int runYear(int year);該函數(shù)判斷某年是否是閏年,參數(shù)year表示要判斷的年份,返回值1表示該年為閏年,0表示該年為平年。struct tm* getDay();該函數(shù)用以取得系統(tǒng)的時間。該函數(shù)沒有參數(shù),返回值類型為struct tm*,是一個包含時間的結(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ù)一個日期推斷星期,參數(shù)為要判斷的年月日。返回值為整型,123456分別表示星期一到星期六,0表示星期天。void setDay(int &year,int &month,int &day);該函數(shù)調(diào)整當前日期。參數(shù)為引用類型,分別為當前日期的年月日,沒有返回值。void checkCalender();該函數(shù)用以顯示要查詢的日期的月歷,無參數(shù)和返回值,。void inline backMenu();該函數(shù)為內(nèi)聯(lián)函數(shù),用以實現(xiàn)完成某項功能后按任意字符鍵返回主菜單,無參數(shù)和返回值, void mainMenu(int &year,int &month,int &day);該函數(shù)參數(shù)為系統(tǒng)日期,無返回值,用戶在該函數(shù)執(zhí)行時可以選擇功能。五、 調(diào)試與測試1、 進入程序后顯示2、 按任意字符鍵返回主菜單3、 進入主菜單后,按1,顯示當前時間4、 在主菜單界面按2,進行日歷的查詢,并經(jīng)行日期的合法性判斷和閏年的判斷。例1、 輸入 2009 11 6,由于輸入合法,會顯示月歷例2、 輸入2009 11 31,由于輸入不合法,會進行報錯,要求重新輸入此情況下,當輸入正確的日期后,就可以顯示月歷,然后可以返回主菜單。5、 在主菜單輸入3,進入日期調(diào)整界面,可以通過方向鍵以及PageUp和PageDown進行日期的調(diào)整按向上鍵后出現(xiàn)如下結(jié)果6、 在主菜單中輸入4,進入幫助界面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;/全局變量記錄時間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)取得當前時間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:上個月 %c:下個月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);/檢查日期的合法性,/若錯誤,保持日期不變,并警告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();/實現(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(請按任意字符鍵返回主菜單:);getch();system(cls);mainMenu(year,month,day);break;case 4:system(cls);printf(在主菜單中輸入相應的數(shù)字就可以完成以下功能:nn);printf(* 1、顯示今天所在月的月份nn);printf(* 2、輸入日期,判斷該年是否是閏年,并顯示所在月份的月歷nn);printf(* 3、用%c %c %c %c PageUp PageDown 進行日期的調(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輸入錯誤!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)時間進行初始化,打印當前

溫馨提示

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

評論

0/150

提交評論