萬年歷程序設(shè)計(jì)-----石玉英_第1頁
萬年歷程序設(shè)計(jì)-----石玉英_第2頁
萬年歷程序設(shè)計(jì)-----石玉英_第3頁
萬年歷程序設(shè)計(jì)-----石玉英_第4頁
萬年歷程序設(shè)計(jì)-----石玉英_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、- -1 華科學(xué)院計(jì)算機(jī)系信息管理與信息系統(tǒng)專業(yè)華科學(xué)院計(jì)算機(jī)系信息管理與信息系統(tǒng)專業(yè)程序設(shè)計(jì)綜合課程設(shè)計(jì)程序設(shè)計(jì)綜合課程設(shè)計(jì)報(bào)告報(bào)告 (2010/2011 學(xué)年 第一學(xué)期)學(xué)生姓名:學(xué)生姓名: 石玉英石玉英 學(xué)生班級:學(xué)生班級: 信息管理信息管理 092201H092201H學(xué)學(xué)生生學(xué)學(xué)號號: 2 20 00 09 92 22 20 04 40 01 11 16 6指導(dǎo)教師:指導(dǎo)教師: 荀荀亞亞玲玲2011 年 1 月 13 日- -2目 錄第一章 課程設(shè)計(jì)的目的和要求.11.1 課程設(shè)計(jì)的目的 .11.2 課程設(shè)計(jì)的要求 .2第二章 課程設(shè)計(jì)任務(wù)內(nèi)容.32.1 功能需求.32.2 功能模塊

2、.62.2.1 功能模塊圖 .62.2.2 主要模塊說明 .7第三章 詳細(xì)設(shè)計(jì)說明.93.1 程序設(shè)計(jì)思路 .93.2 函數(shù)功能說明.93.2.1 總函數(shù)流程圖 .103.2.2 參數(shù)說明 .10第四章 軟件使用說明.13第五章 課程設(shè)計(jì)心得與體會(huì).17附錄 1 參考文獻(xiàn) .18附錄 2 源程序 .19- -3萬年歷系統(tǒng)第一章第一章 課程設(shè)計(jì)的目的和要求課程設(shè)計(jì)的目的和要求1.1 課程設(shè)計(jì)的目的 通過本項(xiàng)課程設(shè)計(jì),可以培養(yǎng)獨(dú)立思考、 綜合運(yùn)用所學(xué)有關(guān)相應(yīng)知識(shí)的能力,能更好的鞏固C 語言程序設(shè)計(jì)課程學(xué)習(xí)的內(nèi)容,掌握 工程軟件設(shè)計(jì)的基本方法,強(qiáng)化上機(jī)動(dòng)手編程能力,闖過理論與實(shí)踐相結(jié)合的難關(guān)!更加了

3、解了 c 語言的好處和其可用性!同時(shí)增加了同學(xué)之間的團(tuán)隊(duì)合作精神!更加也體會(huì)到以后在工作中團(tuán)隊(duì)合作的重要性和必要性! 根據(jù)課堂講授內(nèi)容,學(xué)生做相應(yīng)的自主練習(xí),消化課堂所講解的內(nèi)容;通過調(diào)試典型例題或習(xí)題積累調(diào)試 C 程序的經(jīng)驗(yàn);通過完成輔導(dǎo)教材中的編程題,逐漸培養(yǎng)學(xué)生的編程能力、用計(jì)算機(jī)解決實(shí)際問題的能力。 在學(xué)習(xí)程序設(shè)計(jì)之前,我們首先要了解程序設(shè)計(jì)的基礎(chǔ)是什么,在學(xué)習(xí)的時(shí)候應(yīng)該重點(diǎn)掌握什么。 其實(shí)這一問題很好回答,重點(diǎn)是程序設(shè)計(jì)的基本概念、方法和思維方式,其次才是程序設(shè)計(jì)語言(在本課程中就是 C 語言) 。我們開發(fā)程序的目的是為了解決問題,而解決問題首先需要找出合適的解決方案,然后用合適的語

4、言把方案描述出來。顯然,該過程的關(guān)鍵是分析問題并找出解決方案,而不是描述方案。因此,程序設(shè)計(jì)課程的首要目標(biāo),是培養(yǎng)解決問題的基本思維方式,其次才是語言知識(shí)。 因此,同學(xué)們在學(xué)習(xí) C 程序設(shè)計(jì)的時(shí)候必須樹立以下觀念:(1)學(xué)習(xí)思考的方法比學(xué)習(xí)語言更重要, (2)琢磨程序設(shè)計(jì)的思維模式比琢磨 C 語言的知識(shí)更重要, (3)培養(yǎng)自己的思考能力比記憶語言知識(shí)更重要。 另外,C 語言本身的復(fù)雜性也是其比較難學(xué)的原因之一。C 不僅可以用來開發(fā)應(yīng)用程序,更可用來設(shè)計(jì)系統(tǒng)程序。比起其他語言,C 增加的許多特點(diǎn)就是為了設(shè)計(jì)高質(zhì)量的系統(tǒng)軟件。顯然,這些特點(diǎn)也增加了學(xué)習(xí) C 的難度。 通過 C 語言課程設(shè)計(jì),使學(xué)生

5、了解高級程序設(shè)計(jì)語言的結(jié)構(gòu),掌握基本的程序設(shè)計(jì)過程和技巧,掌握基本的分析問題和利用計(jì)算機(jī)求解問題的能力,具備初步的高級語言程序設(shè)計(jì)能力。為后續(xù)各門計(jì)- -4算機(jī)課程的學(xué)習(xí)和畢業(yè)設(shè)計(jì)打下堅(jiān)實(shí)基礎(chǔ)1.2 課程設(shè)計(jì)的要求 本課程設(shè)計(jì)是C 語言程序設(shè)計(jì)課程實(shí)踐環(huán)節(jié)的深化和延續(xù)。此次課程設(shè)計(jì)的目的是以 C 程序設(shè)計(jì)語言為基礎(chǔ),通過完成具有一定難度的課程設(shè)計(jì)題目的功能描述、總體設(shè)計(jì)、程序編寫及調(diào)試工作,加深對 C 語言相關(guān)知識(shí)的理解與 Visual C+集成開發(fā)環(huán)境的使用,重點(diǎn)掌握文件操作函數(shù)的熟練運(yùn)用,并養(yǎng)成良好的程序設(shè)計(jì)習(xí)慣,提高自我分析問題、解決問題的能力,為進(jìn)一步學(xué)習(xí)高級編程技術(shù)及其相關(guān)課程打下良

6、好基礎(chǔ)掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本方法 ,熟練掌握 C+編程工具 ,根據(jù)問題進(jìn)行學(xué)習(xí),拓廣、深化 ,獨(dú)立完成一個(gè)小型應(yīng)用程序的設(shè)計(jì)、編碼和測試,為以后學(xué)習(xí)軟件工程打下實(shí)踐基礎(chǔ)系統(tǒng)說明書要求提交打印版或手寫版(這是檢查作業(yè)的依據(jù))。內(nèi)容包括:系統(tǒng)需求描述(問題描述),系統(tǒng)結(jié)構(gòu)設(shè)計(jì)(類體系設(shè)計(jì)),類的詳細(xì)設(shè)計(jì)(各類定義的基本功能,即主要數(shù)據(jù)和函數(shù)功能描述,以及類和類之間的交互),擬采用開發(fā)平臺(tái)(Visual C+)作業(yè)報(bào)告:根據(jù)原有的系統(tǒng)設(shè)計(jì),編碼階段的工作,整理書寫作業(yè)報(bào)告,內(nèi)容包括:問題描述,系統(tǒng)設(shè)計(jì),使用說明,討論, 最后提交(電子版):實(shí)驗(yàn)報(bào)告, 基本要求:1、要求利用 C 語言面向過程的編

7、程思想來完成系統(tǒng)的設(shè)計(jì);2、突出 C 語言的函數(shù)特征,以多個(gè)函數(shù)實(shí)現(xiàn)每一個(gè)子功能;3、畫出功能模塊圖;4、進(jìn)行簡單界面設(shè)計(jì),能夠?qū)崿F(xiàn)友好的交互;5、具有清晰的程序流程圖和數(shù)據(jù)結(jié)構(gòu)的詳細(xì)定義;6、熟練掌握 C 語言對文件的各種操作。7、分析程序的功能要求,劃分程序功能模塊。8、代碼的編寫。定義數(shù)據(jù)結(jié)構(gòu)和各個(gè)功能子函數(shù)。9、程序的功能調(diào)試;10、完成系統(tǒng)總結(jié)報(bào)告以及使用說明書(4)指導(dǎo)教師應(yīng)做到教書育人。設(shè)計(jì)開始時(shí)要進(jìn)行動(dòng)員布置,對學(xué)生提出明確的設(shè)計(jì)任務(wù)要求及注意事項(xiàng),在設(shè)計(jì)期間要每天進(jìn)行輔導(dǎo)和檢查,及時(shí)予以指導(dǎo)和幫助,使設(shè)計(jì)順利進(jìn)行。基層教學(xué)單位的指導(dǎo)教師應(yīng)創(chuàng)造條件讓學(xué)生使- -5用計(jì)算機(jī)進(jìn)行設(shè)

8、計(jì),培養(yǎng)學(xué)生的計(jì)算機(jī)應(yīng)用能力。 第二章第二章 課程設(shè)計(jì)任務(wù)內(nèi)容課程設(shè)計(jì)任務(wù)內(nèi)容本程序通過 C 語言編程實(shí)現(xiàn)了一個(gè)萬年歷,能實(shí)現(xiàn)基本的萬年歷功能。萬年歷的實(shí)現(xiàn)核心是要判斷閏年和根據(jù)給定的日期計(jì)算其對應(yīng)的星期,并按照合適的方式輸出日歷.2.1 功能需求萬年歷能實(shí)現(xiàn)一些功能,主要包括以下幾點(diǎn):(1)日歷顯示功能。能根據(jù)系統(tǒng)日期進(jìn)行初始化,如果沒有任何輸入,則顯示系統(tǒng)日期所在月份的月歷。 判斷星期,但根據(jù)蔡勒公式,可以很容易地有年月日推斷出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中 year:要查詢的年份nd

9、ay:從該年的一月一日起到該天的天數(shù)w:得出的星期數(shù),w=0 表示星期天。 在打印月歷時(shí),只要知道第一天的星期,就可以依次輸入后面的日期,通過定長度輸出日期,在遇到某天時(shí)星期六時(shí),就換行輸出,因此可以按照月歷的格式輸出。對于初始輸入當(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)體,可以從中取出年月日(2)日歷查詢、閏年判斷功能。輸入日期進(jìn)行查詢,顯示查詢?nèi)掌谒谠路莸脑職v,還將顯示所在年份是否

10、為閏年能被 4 整除但不能被 100 整除,或者能被 400 整除的年份為閏年,否則為平- -6年。日期的查詢,就是直接打印改天所在月份的月歷(3)參數(shù)檢查功能。如果輸入日期不合法,查詢將被拒絕,并顯示提示信息。判斷日期是否合法,可以先判斷年月日是否有小于 0 的值,月和日是否有超出最大值 12 和 31 ,如果通過此判斷合法,再判斷是否時(shí)閏年,如果時(shí)閏年,則判斷二月份是否滿足要求,閏年二月份不能超過 29 天,平年二月份不能超過28 天。在查詢過程中,如果發(fā)現(xiàn)輸入不合法或者不滿足輸入要求,則要求重新輸入。(4)通過鍵盤操作(如:光標(biāo)上、下、左、右移動(dòng)鍵,pageup、pagedown 鍵)調(diào)

11、整年份、月份和日期,并顯示調(diào)整后的日期及月歷。捕獲鍵盤的輸入,通過兩個(gè) getch();將后一個(gè) getch()的返回值付給整型或字符型 k,k 為相應(yīng)鍵的 ascii 值,判斷 ascii 值,就可以知道時(shí)哪個(gè)鍵的輸入。若捕獲到某鍵的輸入,則設(shè)置相應(yīng)的年或月或日的值,再進(jìn)行刷性輸出,就可以實(shí)現(xiàn)日期的調(diào)整。2.2 功能模塊2.2.1 功能模塊圖本系統(tǒng)包括 4 個(gè)模塊,分別是功能控制模塊打印輸出模塊日歷顯示模塊和鍵值獲取模塊。1、功能控制模塊。該模塊用于實(shí)現(xiàn)日期有效性檢查判斷是否是閏年和返回指定日期對應(yīng)的日期。 2、打印輸出模塊。該模塊主要是進(jìn)行輸出顯示,包括打印指定個(gè)數(shù)的空格打印分隔線打印用戶

12、使用手冊打印當(dāng)前日期對應(yīng)的星期以及打印指定的星期。3、日歷顯示模塊。該模塊是系統(tǒng)的核心模塊,是用來顯示指定日期所在月份的月歷。4、鍵值獲取模塊。該模塊接受鍵盤操作,獲取鍵值,來進(jìn)行日期調(diào)整,并調(diào)用日歷顯示模塊中的函數(shù)來顯示調(diào)整后的日歷。- -7 圖 2-1 功能模塊圖2.2.2 主要模塊說明(1)日歷顯示模塊日歷顯示是系統(tǒng)的核心模塊,它控制著日歷的生成和顯示。其實(shí)現(xiàn)流程如圖所示。程序輸入的是包含年月日的日期,輸出 month 所在月份的月歷,并突出顯示 day 所在的日期和 year 是否是閏年的標(biāo)識(shí)。程序首先根據(jù)判斷 year 其是否是閏年,如果是則需要將該年 2 月份的天數(shù)設(shè)置為 29 天

13、,接著判斷 day 是否超過 month 所在的月份的最大天數(shù),如果超過則顯示系統(tǒng)日期所在的月歷。然后進(jìn)行星期輸出的判斷,如果輸出的是該月的第一個(gè)星期,則判斷該星期中還有幾天在本月(如,該月 1 號是星期五,則表示該月第一個(gè)星期中只有兩天在本月,星期一到星期四在上月,則星期一到星期四在本月就不輸出,僅有空萬年歷體系功能控制模塊打印輸出模塊日歷顯示模塊鍵值獲取模塊日歷顯示日歷查詢修改日期幫助退出- -8格表示) ,輸出完第一周后,接著輸出第二到第五(或者六)周,每周 7 天。在輸出過程中,如果遇到了 day 所在的日期,則突出顯示(2)鍵值獲取模塊鍵值獲取實(shí)現(xiàn)的是從鍵盤調(diào)整日期并顯示調(diào)整后的日歷

14、。系統(tǒng)首先 判斷從鍵盤輸入的 值,如果是右移鍵,表示增加月份。如果 左移鍵,表示減少月份。如果上移鍵,表示增加年份。如果下移鍵表示減少年份。如果上翻頁鍵表示減少日期。如果是下翻頁鍵表示增加日期。如果 Q/q 鍵表示查詢?nèi)掌?,此時(shí)將輸出提示信息,提示用戶輸入查詢?nèi)掌?。在用戶輸入查詢?nèi)掌诤螅到y(tǒng)將調(diào)用日期檢查函數(shù)對輸入日期的 合法性進(jìn)行檢測,如果輸入日期不合格,則提示錯(cuò)誤信息并顯示當(dāng)前系統(tǒng)日期所在月的 月歷;如果是 空格鍵表示重置,顯示當(dāng)前系統(tǒng)日期所在月的 月歷;如果是 Esc 鍵表示退出系統(tǒng),按此鍵后,系統(tǒng)將詢問用戶是否確定退出,在得到確定回答(用戶輸入 Y/y)后將退出系統(tǒng)。- -9第三章 詳

15、細(xì)設(shè)計(jì)說明3.1 程序設(shè)計(jì)思路(1)由于萬年歷具有以下特點(diǎn):平年 365 天(52 周+1 天),閏年 366 天(52 周+2 天)。平年 2 月 28 天,閏年 2 月 29 天。(2)根據(jù)萬年歷以上特點(diǎn)進(jìn)行編寫 1)首先對萬年歷年、月、日進(jìn)行編寫,編寫程序先定義每月的天數(shù)為 28天,如月份為 1、3、5、7、8、10、12 就定義天數(shù)為 31 天反之如果月份為4、6、9、11 就輸出天數(shù)為 30 天,由上可見 2 月份為 28 天但是如果為閏年就有 29 天就要定義一個(gè)數(shù)組存放天數(shù),用 while 循環(huán)控制。2)再對其中的星期進(jìn)行編寫:由于公元 1 月 1 日設(shè)為星期六,故 3 月 1

16、日為星期三,可以用萬年 3 月1 日星期算法(特別是那個(gè)三)由于其公式為:某年 3 月 1 日星期幾=(百年%4*5天+年/4*5 天+年%4+月星期表+日+2 天)%7閏 4 百年 3 月 1 日星期算法(百年%4=0)其公式為:某年 3 月 1 日星期幾=(年+年/4+月星期表+日+2 天)%7 例: 2000 年 3 月 1 日星期幾=(0+0/4+0+1+2)%7=3%7=星期三平 4 百年 3 月 1 日星期算法(百年%40)其公式為:某年 3 月 1 日星期幾=(百年%4*5 天+年+年/4+月星期表+日+2 天)%7 例:2100 年 3 月 1 日星期幾=(21%4*5+0/4

17、*5+0%4+3)%7=(5+0+0+3)%7=8%7=星期一(注意:2100 年是平年)其中萬年某日星期算法 其公式為:某日星期幾=(百年%4*5 天+年+年/4+月星期表+日+2 天)%73.2 函數(shù)功能說明- -103.2.1 總函數(shù)流程圖 圖 3-1 總函數(shù)流程圖3.2.2 參數(shù)說明(1)int isleapYear(int year);- -11該函數(shù)判斷某年是否是閏年,參數(shù)year表示要判斷的年份,返回值1表示該年為閏年,0表示該年為平年。int IsLeapYear( int year )if (year %4 = 0) & (year % 100 != 0) |(yea

18、r % 400 = 0) )return 1;elsereturn 0;流程圖: Y N Y N N Y 圖 3-2 閏年判斷(2)struct tm* getDay();該函數(shù)用以取得系統(tǒng)的時(shí)間。該函數(shù)沒有參數(shù),返回值類型為 struct tm*,是一個(gè)包含時(shí)間的結(jié)構(gòu)體struct tm* getDay()/從系統(tǒng)取得當(dāng)前時(shí)間time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);return gmt;開始Year%400Return 1Year%4Year%100Return 0Return 0Retur

19、n 1- -12(3)int getwDay(int year,int month,int day);該函數(shù)用以根據(jù)一個(gè)日期推斷星期,參數(shù)為要判斷的年月日。返回值為整型,123456分別表示星期一到星期六,0表示星期天。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;r

20、eturn w;- -13第四章 軟件使用說明1、進(jìn)入程序后顯示 圖 4-1 程序顯示2、按任意字符鍵返回主菜單 圖 4-2 主菜單3、進(jìn)入主菜單后按 1,顯示當(dāng)前時(shí)間- -14 圖 4-3 日歷顯示、4、在主菜單界面按 2,進(jìn)行日歷的查詢并經(jīng)行日期的合法性判斷和閏年的判斷。圖 4-4 輸入合法 圖 4-5 日歷查詢- -15 圖 4-6 輸入不合法 圖 4-7 修改日期此情況下,當(dāng)輸入正確的日期后,就可以顯示月歷,然后可以返回主菜單。5、在主菜單輸入 3,進(jìn)入日期調(diào)整界面,可以通過方向鍵以及 PageUp 和PageDown 進(jìn)行日期的調(diào)整按向上鍵后出現(xiàn)如下結(jié)果 圖 4-8 日期調(diào)整6、在主

21、菜單中輸入 4,進(jìn)入幫助界面- -16圖 4-9 幫助菜單7、在主界面中輸入 5,程序退出 圖 4-10 程序退出 - -17第五章 課程設(shè)計(jì)心得與體會(huì)通過課程設(shè)計(jì),一方面是為了檢查我們一個(gè)學(xué)期來我們學(xué)習(xí)的成果,另一方面也是為了讓我們進(jìn)一步的掌握和運(yùn)用它,同時(shí)也讓我們認(rèn)清自己的不足之處和薄弱環(huán)節(jié),加以彌補(bǔ)和加強(qiáng)。通過對萬年歷的設(shè)計(jì)進(jìn)一步的鞏固了用 c語言和 C+編寫程序,并且有利于更好的掌握程序設(shè)計(jì)語言! 此程序是自己所寫的第一個(gè)功能比較完整的能實(shí)現(xiàn)一定的實(shí)際功能的程序,代碼比較短,不到 250 行,實(shí)現(xiàn)的功能有顯示當(dāng)前日歷,進(jìn)行某天的查詢,閏年的判斷,日期的合法性判斷,日期的調(diào)整。然后在程序

22、編寫過程中,遇到了一些細(xì)節(jié)性的問題,比如在亂輸入的情況下,有時(shí)會(huì)出現(xiàn)程序崩潰,后來通過修改,修正了漏洞。到寫報(bào)告為止,漏洞基本被找出,并得到修正。通過寫這個(gè)程序,我對程序的健壯性有了更深的認(rèn)識(shí),也更加注意程序的細(xì)節(jié)問題。在萬年歷的編寫過程中也體會(huì)到了做事情一定要細(xì)心、認(rèn)真。更加知道了要掌握好基礎(chǔ)知識(shí)。還有體會(huì)到了成功的感覺。通過本項(xiàng)課程設(shè)計(jì)也培養(yǎng)了我獨(dú)立思考、綜合運(yùn)用所學(xué)有關(guān)知識(shí)的能力,掌握工程軟件的基本方法,強(qiáng)化上機(jī)動(dòng)手變成能力,闖過理論與實(shí)踐相結(jié)合的難關(guān)!在課程設(shè)計(jì)的過程中也知道了自己在以前的學(xué)習(xí)中有很大的不足導(dǎo)致在設(shè)計(jì)過程中出現(xiàn)了很多的問題,有些地方看不懂也不知道怎么去設(shè)計(jì),但是在設(shè)計(jì)過

23、程中也學(xué)習(xí)了很多,掌握了自己以前沒有學(xué)好的知識(shí),雖然一時(shí)可以掌握完以前沒有學(xué)好的知識(shí),不過也給自己敲響了警鐘,在學(xué)習(xí)中不可以伏于表面,要想學(xué)好每一門課程都要踏踏實(shí)實(shí),做什么都不是給別人看的!都是要更好的掌握該門知識(shí),提高自己的自身的修養(yǎng),提高自己的能力!為以后的工作打下良好的知識(shí)基礎(chǔ)和技能基礎(chǔ)!- -18附錄 1 參考文獻(xiàn)1譚浩強(qiáng), 張基溫. C 語言程序設(shè)計(jì)教程. 北京: 高等教育出版社, 20002吳偉民. 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì). 北京: 清華大學(xué)出版社.2010 孫寶山. Visual 3c#.NET 應(yīng)用程序設(shè)計(jì). 北京:中國鐵道出版社. 20084譚洪強(qiáng). C+程序設(shè)計(jì). 北京: 清華大

24、學(xué)出版社. 20095李蘭友,潘旭華,王占剛,孫寶山等編著.Visual c#.net 應(yīng)用程序設(shè)計(jì).北京. 中國鐵道出版社. 2008- -19附錄 2 源程序#include#include#include#include#include #define KEYNUMUp 0 x48#define KEYNUMDown 0 x50 #define KEYNUMLeft 0 x4b #define KEYNUMRight 0 x4d#define KEYNUMPageUp 0 x49 #define KEYNUMPageDown 0 x51 int year,month,day;/全局變量記

25、錄時(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

26、 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:- -20case 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&

27、amp;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,i

28、nt &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ò)誤,保持日期不- -21變,

29、并警告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)

30、;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);printCalende

31、r(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;- -22case 1:printf(%10d,nowDay);break;case 2

溫馨提示

  • 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

提交評論