版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 面向?qū)ο笳n程設(shè)計(jì)</b></p><p><b> 萬(wàn)年歷系統(tǒng)</b></p><p> 院(系)別 信息工程系 </p><p> 班 級(jí) 計(jì)算111 </p><p> 學(xué) 號(hào)
2、 </p><p> 姓 名 </p><p> 指導(dǎo)教師 </p><p> 時(shí) 間 2012-03-05—2012-03-09 </p><p><b> 目 錄</b></p>
3、<p> 1課程設(shè)計(jì)概述5</p><p> 1.1萬(wàn)年歷系統(tǒng)功能概述5</p><p> 1.2開(kāi)發(fā)環(huán)境概述5</p><p> 2萬(wàn)年歷系統(tǒng)總體設(shè)計(jì)6</p><p> 2.1問(wèn)題分析6</p><p> 2.2總體設(shè)計(jì)流程圖7</p><p>
4、 3萬(wàn)年歷系統(tǒng)詳細(xì)設(shè)計(jì)8</p><p><b> 4 程序測(cè)試9</b></p><p> 4.1進(jìn)入程序界面9</p><p> 4.2主菜單界面9</p><p> 4.3顯示當(dāng)前時(shí)間界面10</p><p> 4.4查詢(xún)時(shí)間界面 10</p>
5、<p> 4.5查詢(xún)時(shí)間出錯(cuò)界面11</p><p> 4.6退出程序界面12</p><p> 4.7主菜單選擇出錯(cuò)界面12</p><p> 5 程序源代碼13</p><p> 設(shè)計(jì)體會(huì)及今后的改進(jìn)意見(jiàn)21</p><p><b> 參考文獻(xiàn)21</b&
6、gt;</p><p><b> 課程設(shè)計(jì)概述</b></p><p> 字符統(tǒng)計(jì)軟件功能概述</p><p> 模仿Windwos的日歷. </p><p> 日歷顯示功能。能根據(jù)系統(tǒng)日期進(jìn)行初始化,如果沒(méi)有任何輸入,</p><p> 則顯示系統(tǒng)日期所在月份的月歷。</p>
7、;<p> 日歷查詢(xún)、閏年判斷功能。輸入日期進(jìn)行查詢(xún),顯示查詢(xún)?nèi)掌谒谠路莸脑職v,還將顯示所在年份是否為閏年。</p><p> 參數(shù)檢查功能。如果輸入日期不合法,查詢(xún)將被拒絕,并顯示提示信息。</p><p><b> 開(kāi)發(fā)環(huán)境概述</b></p><p> 在實(shí)驗(yàn)室一人一臺(tái)微機(jī)。</p><p>
8、;<b> 課程設(shè)計(jì)概述</b></p><p><b> 問(wèn)題分析</b></p><p> 難點(diǎn)在于判斷星期,但根據(jù)蔡勒公式,可以很容易地有年月日推斷出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;</p><p><b> w=nD
9、ay%7;</b></p><p> 其中year:要查詢(xún)的年份</p><p> nday:從該年的一月一日起到該天的天數(shù)w:得出的星期數(shù),w==0表示星期天。</p><p> 在打印月歷時(shí),只要知道第一天的星期,就可以依次輸入后面的日期,通過(guò)定長(zhǎng)度輸出日期,在遇到某天時(shí)星期六時(shí),就換行輸出,因此可以按照月歷的格式輸出。對(duì)于初始輸入當(dāng)前月歷,
10、可以通過(guò)<time.h>中的time 和localtime函數(shù)取出系統(tǒng)時(shí)間進(jìn)行初始化。</p><p> time_t timer;</p><p> struct tm* gmt;</p><p> time(&timer);</p><p> gmt=localtime(&timer);</p&g
11、t;<p> gmt就是一個(gè)時(shí)間結(jié)構(gòu)體,可以從中取出年月日。</p><p> 閏年的判斷,能被4整除但不能被100整除,或者能被400整除的年份為閏年,否則為平年。日期的查詢(xún),就是直接打印該天所在月份的月歷。</p><p> 判斷日期是否合法,可以先判斷年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通過(guò)此判斷合法,再判斷是否時(shí)閏年,如果時(shí)閏年,則判
12、斷二月份是否滿(mǎn)足要求,閏年二月份不能超過(guò)29天,平年二月份不能超過(guò)28天。在查詢(xún)過(guò)程中,如果發(fā)現(xiàn)輸入不合法或者不滿(mǎn)足輸入要求,則要求重新輸入。</p><p><b> 總體設(shè)計(jì)流圖</b></p><p><b> 萬(wàn)年歷系統(tǒng)詳細(xì)設(shè)計(jì)</b></p><p> int runnian(int year);</
13、p><p> 該函數(shù)判斷某年是否是閏年,參數(shù)year表示要判斷的年份,返回值1表示該年為閏年,0表示該年為平年。</p><p> struct tm* getDay();</p><p> 該函數(shù)用以取得系統(tǒng)的時(shí)間。該函數(shù)沒(méi)有參數(shù),返回值類(lèi)型為struct tm*,是一個(gè)包含時(shí)間的結(jié)構(gòu)體。</p><p> int jiancha(in
14、t year,int month,int day);</p><p> 該函數(shù)用以判斷輸入的年份是否合法,參數(shù)為要判斷的年月日,返回值為1表示該日期合法,為0表示不合法。</p><p> int getwDay(int year,int month,int day);</p><p> 該函數(shù)用以根據(jù)一個(gè)日期推斷星期,參數(shù)為要判斷的年月日。返回值為整型,12
15、3456分別表示星期一到星期六,0表示星期天。</p><p> void chaxun();</p><p> 該函數(shù)用以顯示要查詢(xún)的日期的月歷,無(wú)參數(shù)和返回值,。</p><p> void inline backMenu();</p><p> 該函數(shù)為內(nèi)聯(lián)函數(shù),用以實(shí)現(xiàn)完成某項(xiàng)功能后按任意字符鍵返回主菜單,無(wú)參數(shù)和返回值。&l
16、t;/p><p> void caidan(int &year,int &month,int &day);</p><p> 該函數(shù)參數(shù)為系統(tǒng)日期,無(wú)返回值,用戶(hù)在該函數(shù)執(zhí)行時(shí)可以選擇功能。</p><p><b> 程序測(cè)試</b></p><p><b> 進(jìn)入程序后顯示<
17、/b></p><p><b> 按任意鍵返回主菜單</b></p><p> 進(jìn)入主菜單后,按1,顯示當(dāng)前時(shí)間</p><p> 在主菜單界面按2,進(jìn)行日立的查詢(xún),并經(jīng)時(shí)期的合法性判斷和平潤(rùn)年的判斷。例如輸入:2020 12 20.由于輸入合法會(huì)顯示:</p><p> 進(jìn)入程序后顯示輸入:2012 11
18、 40,由于輸入不合法,會(huì)進(jìn)行報(bào)錯(cuò),要求重新輸</p><p> 在主界面中輸入3,程序退出</p><p> 在主界面中輸入:eufhg,會(huì)顯示</p><p><b> 5.程序原代碼:</b></p><p> #include<stdio.h></p><p> #i
19、nclude<time.h></p><p> #include<math.h></p><p> #include<string.h></p><p> #include<windows.h></p><p> #include<conio.h></p>&l
20、t;p> int year,month,day;//全局變量記錄時(shí)間</p><p> int daysOfMonth[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31, 30,31}};</p><p> int runnian(int year)//判斷是否是閏年&
21、lt;/p><p> { return(year%4==0&&year%100!=0||year%400==0)?1:0;</p><p><b> }</b></p><p> struct tm* getDay()//從系統(tǒng)取得當(dāng)前時(shí)間</p><p><b> {</b>
22、;</p><p> time_t timer;</p><p> struct tm* gmt;</p><p> time(&timer);</p><p> gmt=localtime(&timer);</p><p> return gmt;</p><p>&
23、lt;b> }</b></p><p> int jianca(int year,int month,int day)//檢查日期是否正確</p><p><b> {</b></p><p> if(year<0||month<1||month>12||day<1||day>31)<
24、;/p><p><b> return 0;</b></p><p> switch(month)</p><p><b> {</b></p><p><b> case 1:</b></p><p><b> case 3:</
25、b></p><p><b> case 5:</b></p><p><b> case 7:</b></p><p><b> case 8:</b></p><p><b> case 10:</b></p><p&
26、gt;<b> case 12:</b></p><p> if(day>31)return 0;break;</p><p><b> case 4:</b></p><p><b> case 6:</b></p><p><b> case 9:
27、</b></p><p><b> case 11:</b></p><p> if(day>30)return 0;break;</p><p><b> default:</b></p><p> if(runnian(year)&&day>29)
28、</p><p><b> return 0;</b></p><p> else if(runnian(year)==0&&day>28)</p><p><b> return 0;</b></p><p><b> }</b></p&g
29、t;<p><b> return 1;</b></p><p><b> }</b></p><p> int getwDay(int year,int month,int day)//取得星期</p><p><b> {</b></p><p>
30、int nday=0,nDay,i,w;</p><p> for(i=0;i<month-1;i++)</p><p> nday+=daysOfMonth[runnian(year)][i];</p><p> nday+=day;</p><p> nDay=year-1+(year-1)/4-(year-1)/100+(
31、year-1)/400+nday;</p><p><b> w=nDay%7;</b></p><p><b> return w;</b></p><p><b> }</b></p><p> int week(int year,int month,int day
32、)//取得星期</p><p><b> { </b></p><p> int nday=0,nDay,i,w;</p><p> for(i=0;i<month-1;i++)</p><p> nday+=daysOfMonth[runnian(year)][i];</p><p
33、> nday+=day;</p><p> nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;</p><p><b> w=nDay%7;</b></p><p><b> return w;</b></p><p><
34、b> }</b></p><p> void ty(int year,int month,int day)//打印月歷</p><p><b> {</b></p><p><b> int i;</b></p><p> char wday[7][4]={"日
35、","一","二","三","四","五","六"};</p><p> printf("####################################\n");</p><p> printf("##########
36、##########################\n");</p><p> printf("###### %d年%d月%d日 #######\n",year,month,day);</p><p> printf("************************************\n");</p&g
37、t;<p> printf("************************************\n");</p><p> for(i=0;i<7;i++)</p><p> printf("%5s",wday[i]);</p><p> printf("\n");<
38、;/p><p><b> int w;</b></p><p> int nowDay=1;</p><p> w=week(year,month,nowDay);//找到第一天的星期</p><p><b> int n;</b></p><p> n=daysOfM
39、onth[runnian(year)][month-1];</p><p> { //放置第一天</p><p><b> if(w==0)</b></p><p> printf("%5d",nowDay);</p>
40、<p> else if(w==1)</p><p> printf("%10d",nowDay);</p><p> else if(w==2)</p><p> printf("%15d",nowDay);</p><p> else if(w==3)</p>&l
41、t;p> printf("%20d",nowDay);</p><p> else if(w==4)</p><p> printf("%25d",nowDay);</p><p> else if(w==5)</p><p> printf("%30d",nowDa
42、y);</p><p><b> else </b></p><p> printf("%35d\n",nowDay);</p><p><b> }</b></p><p><b> nowDay++;</b></p><p&
43、gt; for(i=1;i<n;i++)</p><p><b> {</b></p><p> w=week(year,month,nowDay);</p><p> printf("%5d",nowDay);</p><p> if(w==6)//如果是星期六則換行打印<
44、;/p><p> puts("\n");</p><p><b> nowDay++;</b></p><p><b> }</b></p><p> printf("\n************************************\n");&
45、lt;/p><p> printf("************************************\n");</p><p><b> }</b></p><p> void caxun()//查詢(xún)?nèi)諝v</p><p><b> {</b></p>
46、<p> system("cls");</p><p> int year,month,day;</p><p> printf("請(qǐng)輸入你要查詢(xún)的日期(格式為年月日,如2009 11 3):");</p><p> scanf("%d%d%d",&year,&month,
47、&day);</p><p> while(!jianca(year,month,day))//如果日期輸入不正確,則重新輸入</p><p><b> {</b></p><p> printf("%c你輸入的日期錯(cuò)誤,請(qǐng)重新輸入:");</p><p> scanf("
48、%d%d%d",&year,&month,&day);</p><p><b> }</b></p><p> system("cls");</p><p> if(runnian(year))</p><p> printf("\n閏年\n\n&
49、quot;);</p><p> else printf("\n 平年\n\n");</p><p> ty(year,month,day);</p><p><b> }</b></p><p> void inline backMenu()</p><p><
50、;b> {</b></p><p> printf("請(qǐng)按任意字符鍵進(jìn)入主菜單:\n");</p><p><b> getch();</b></p><p> /*system("cls");*/</p><p><b> }</b&g
51、t;</p><p> void caidan(int &year,int &month,int &day)//主菜單</p><p> { system("cls");</p><p> printf("-------------------------------------------------
52、--\n");</p><p> printf("---------------------------------------------------\n");</p><p> printf("---------------------------------------------------\n");</p>&l
53、t;p> printf("---------------------------------------------------\n");</p><p> printf("***************************************************\n");</p><p> printf("****
54、***********************************************\n");</p><p> printf("*********** 主菜單 *************\n");</p><p> printf("*********************************
55、******************\n");</p><p> printf("****************************************************\n");</p><p> printf("*********** 1.顯示日歷 *************\n");&
56、lt;/p><p> printf("*********** 2.查詢(xún)?nèi)諝v *************\n");</p><p> printf("*********** 3.退出 *************\n");</p><p> printf(&qu
57、ot;*********** *************\n");</p><p> printf("*********** *************\n");</p><p> printf("***********
58、 *************\n");</p><p> char m[100];</p><p><b> int g=0;</b></p><p><b> do{</b></p><p><b> int f=0;</b>&l
59、t;/p><p><b> do</b></p><p><b> {</b></p><p><b> f=0;</b></p><p> printf("\n請(qǐng)輸入相應(yīng)數(shù)字:");</p><p> scanf("
60、%s",m);</p><p> if(strlen(m)>2)f=1;</p><p> }while(f==1);</p><p> switch(*m)</p><p><b> {</b></p><p><b> case '1':&l
61、t;/b></p><p> system("cls");</p><p> ty(year,month,day);</p><p> backMenu();//實(shí)現(xiàn)任意鍵返回主菜單</p><p> caidan(year,month,day);</p><p><b>
62、; break;</b></p><p><b> case '2':</b></p><p> system("cls");</p><p><b> caxun();</b></p><p> backMenu();</p>
63、<p> caidan(year,month,day);</p><p><b> break;</b></p><p> case '3':system("cls");</p><p> printf("程序已退出!\n");break;</p><
64、;p> default:printf("%c輸入錯(cuò)誤!\n");g=1;</p><p><b> }</b></p><p> }while(g);</p><p><b> }</b></p><p> void main()</p><p
65、><b> {</b></p><p> struct tm *gmt=getDay();</p><p> year=gmt->tm_year+1900;</p><p> month=gmt->tm_mon+1;</p><p> day=gmt->tm_mday;</p>
66、;<p> ty(year,month,day);//用系統(tǒng)時(shí)間進(jìn)行初始化,打印當(dāng)前月歷</p><p> backMenu();</p><p> caidan(year,month,day);</p><p><b> }</b></p><p> 設(shè)計(jì)體會(huì)及改進(jìn)意見(jiàn):</p>
67、<p> 此程序是自己所寫(xiě)的第一個(gè)功能比較完整的能實(shí)現(xiàn)一定的實(shí)際功能的程序,代碼比較短,不到300行,實(shí)現(xiàn)的功能有顯示當(dāng)前日歷,進(jìn)行某天的查詢(xún),閏年的判斷,日期的合法性判斷,。然后在程序編寫(xiě)過(guò)程中,遇到了一些細(xì)節(jié)性的問(wèn)題,比如在亂輸入的情況下,有時(shí)會(huì)出現(xiàn)程序崩潰,后來(lái)通過(guò)修改,修正了漏洞。到寫(xiě)報(bào)告為止,漏洞基本被找出,并得到修正。通過(guò)寫(xiě)這個(gè)程序,我對(duì)程序的健壯性有了更深的認(rèn)識(shí),也更加注意程序的細(xì)節(jié)問(wèn)題。</p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c語(yǔ)言課程設(shè)計(jì)--萬(wàn)年歷系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)--萬(wàn)年歷
- c語(yǔ)言課程設(shè)計(jì)--萬(wàn)年歷
- 萬(wàn)年歷c語(yǔ)言課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--萬(wàn)年歷
- C語(yǔ)言課程設(shè)計(jì)--萬(wàn)年歷.doc
- c語(yǔ)言課程設(shè)計(jì)——萬(wàn)年歷的設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--大賽評(píng)分、萬(wàn)年歷
- c語(yǔ)言課程設(shè)計(jì)--多功能萬(wàn)年歷
- c++萬(wàn)年歷課程設(shè)計(jì)
- c++課程設(shè)計(jì)--萬(wàn)年歷
- 課程設(shè)計(jì)-萬(wàn)年歷系統(tǒng)
- 萬(wàn)年歷c++課程設(shè)計(jì)
- 《c++課程設(shè)計(jì)》萬(wàn)年歷
- 萬(wàn)年歷c++課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)--萬(wàn)年歷電子時(shí)鐘
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論