




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計設(shè)計說明書萬年歷的實現(xiàn)學(xué)生姓名學(xué)號班級成績指導(dǎo)教師數(shù)學(xué)與計算機科學(xué)學(xué)院2012 年 9 月 8 日數(shù)據(jù)結(jié)構(gòu)課程設(shè)計評閱書題 目萬年歷的實現(xiàn)學(xué)生姓名學(xué)號成績: 教師簽名: 年 月 日成績: 教師簽名: 年 月 日總成績: 室主任簽名: 年 月 日注:指導(dǎo)教師成績60%,答辯成績40%,總成績合成后按五級制記入。課程設(shè)計任務(wù)書20122013學(xué)年第1學(xué)期專業(yè): 計算機科學(xué)與技術(shù) 學(xué)號: 姓名: 課程設(shè)計名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 設(shè)計題目: 萬年歷的實現(xiàn) 完成期限:自 2012 年 8 月 27 日至 2012 年 9 月 8 日共 2 周設(shè)計依據(jù)、要求及主要內(nèi)容(可另加附頁):運用
2、C/ C+結(jié)構(gòu)體、函數(shù)、數(shù)據(jù)結(jié)構(gòu)等基知識,按以下要求編程實現(xiàn)萬年歷的功能:1) 闡述設(shè)計思想,畫出流程圖;2) 輸入任一年,判斷該年是否為閏年; 輸入年月日計算該日為當(dāng)年的那一天;3)輸入任一年,顯示該年的日歷,日歷包括陽歷、農(nóng)歷、節(jié)氣;4). 說明測試方法,寫出完整的運行結(jié)果,較好的界面設(shè)計.設(shè)計要求:1)問題分析和任務(wù)定義:根據(jù)設(shè)計題目的要求,充分地分析和理解問題,明確問題要求做什么?(而不是怎么做?)限制條件是什么?確定問題的輸入數(shù)據(jù)集合。2)邏輯設(shè)計:對問題描述中涉及的操作對象定義相應(yīng)的數(shù)據(jù)類型,并按照以數(shù)據(jù)結(jié)構(gòu)為中心的原則劃分模塊,定義主程序模塊和各抽象數(shù)據(jù)類型。邏輯設(shè)計的結(jié)果應(yīng)寫出
3、每個抽象數(shù)據(jù)類型的定義(包括數(shù)據(jù)結(jié)構(gòu)的描述和每個基本操作的功能說明),各個主要模塊的算法,并畫出模塊之間的調(diào)用關(guān)系圖;3)詳細(xì)設(shè)計:定義相應(yīng)的存儲結(jié)構(gòu)并寫出各函數(shù)的偽碼算法。在這個過程中,要綜合考慮系統(tǒng)功能,使得系統(tǒng)結(jié)構(gòu)清晰、合理、簡單和易于調(diào)試,抽象數(shù)據(jù)類型的實現(xiàn)盡可能做到數(shù)據(jù)封裝,基本操作的規(guī)格說明盡可能明確具體。詳細(xì)設(shè)計的結(jié)果是對數(shù)據(jù)結(jié)構(gòu)和基本操作做出進(jìn)一步的求精,寫出數(shù)據(jù)存儲結(jié)構(gòu)的類型定義,寫出函數(shù)形式的算法框架;4)程序編碼:把詳細(xì)設(shè)計的結(jié)果進(jìn)一步求精為程序設(shè)計語言程序。同時加入一些注解和斷言,使程序中邏輯概念清楚;5)程序調(diào)試與測試:采用自底向上,分模塊進(jìn)行,即先調(diào)試低層函數(shù)。能夠
4、熟練掌握調(diào)試工具的各種功能,設(shè)計測試數(shù)據(jù)確定疑點,通過修改程序來證實它或繞過它。調(diào)試正確后,認(rèn)真整理源程序及其注釋,形成格式和風(fēng)格良好的源程序清單和結(jié)果;6)結(jié)果分析:程序運行結(jié)果包括正確的輸入及其輸出結(jié)果和含有錯誤的輸入及其輸出結(jié)果。算法的時間、空間復(fù)雜性分析;7)編寫課程設(shè)計報告;以上要求中前三個階段的任務(wù)完成后,先將設(shè)計說明書的草稿交指導(dǎo)老師面審,審查合格后方可進(jìn)入后續(xù)階段的工作。設(shè)計工作結(jié)束后,經(jīng)指導(dǎo)老師驗收合格后將設(shè)計說明書打印裝訂,并進(jìn)行答辯。指導(dǎo)教師(簽字): 教研室主任(簽字): 批準(zhǔn)日期: 2012年 8 月 27 日摘要設(shè)計了一個萬年歷軟件,該萬年歷具有閏年判斷,輸入某年月
5、日查詢該日期所對應(yīng)的星期,計算該日期是本年中的第幾天及輸出年歷的功能。本計算器采用VC+作為軟件開發(fā)環(huán)境,采用年歷推算的方法輸出年歷。操作簡單易懂,界面清晰明了,易于被用戶接受。關(guān)鍵詞:萬年歷; 閏年;查詢目 錄1 課題描述12 需求分析23 流程設(shè)計34 詳細(xì)設(shè)計65 程序編碼76 程序調(diào)試與運行結(jié)果107 結(jié)果分析及總結(jié)12參考文獻(xiàn)131. 課題描述運用C/ C+結(jié)構(gòu)體、函數(shù)、數(shù)據(jù)結(jié)構(gòu)等基知識,按以下要求編程實現(xiàn)萬年歷的功能:1).輸入任一年,判斷該年是否為閏年; 2).輸入年月日計算該日為當(dāng)年的哪一天;3).輸入任一年,顯示該年的日歷,日歷包括陽歷、農(nóng)歷、節(jié)氣。在程序設(shè)計的過程中,要注意
6、以下要求:1).闡述設(shè)計思想,畫出流程圖;2).說明測試方法,寫出完整的運行結(jié)果,較好的界面設(shè)計。2. 需求分析1).閏年的判斷該函數(shù)主要對年份進(jìn)行判斷,當(dāng)年份滿足一定的條件,則該年為閏年,若不滿足,則該年為平年。2).輸入年月日計算該日為本年的哪一天該函數(shù)首先要明確需要計算的是輸入日期是星期幾,其次是計算輸入日期是該年中的第幾天。該函數(shù)是先進(jìn)行閏年的判斷,以便其后對數(shù)組的調(diào)用,依次將月份相加,最后所得總和加上日期即可得到所要計算的天數(shù);然后利用這個天數(shù)和公式first=(n+(n-1)/4-(n-1)/100+(n-1)/400)%7,計算出星期幾。3).年歷的輸出該函數(shù)主要是輸入某年年份,
7、對其進(jìn)行計算,而后輸出該年年歷。3. 流程設(shè)計 該函數(shù)包括三個主要的子函數(shù),閏年的判斷,輸入任一年月日,計算該日為當(dāng)年的哪一天及輸出年歷函數(shù)。 1).閏年的判斷,如圖3.1開 始輸入年份判斷條件平 年閏 年結(jié) 束不滿足滿足圖3.1 判斷閏年的流程圖 2).輸入任一年月日,計算該日為當(dāng)年的哪一天,如圖3.2不滿足滿足開始輸入年月日判斷閏年2月為28天2月為29天For循環(huán)計算天數(shù)For循環(huán)計算天數(shù)計算星期幾結(jié) 束3.2 判斷輸入日期為哪一天的流程圖 3).輸出年歷,如圖3.3開 始輸入年份計算星期輸出年歷結(jié) 束3.3 輸出年歷的流程圖 4).主函數(shù),如圖3.4開 始While循環(huán)判斷閏年查詢輸入
8、年月日為該年的哪一天輸出年歷結(jié)束3.4 主函數(shù)的流程圖4. 詳細(xì)設(shè)計 1).int judge(int b) / 判斷是否閏年 if(b%4=0&&b%100!=0|b%400=0) return 1; else return -1; 該函數(shù)是用來判斷輸入年份是否為閏年。函數(shù)利用b%4=0&&b%100!=0|b%400=0這個式子作為判斷條件,若滿足則為閏年,不滿足則為平年。 2).int sumdays(int year,int month,int day) /計算天數(shù) int i,j,a; int sum=0; a=judge(year); /判斷是否為閏
9、年 if(a=1) /當(dāng)該年為閏年時,計算天數(shù) for(i=1;i<month;i+) sum=sum+ryeari-1; sum=sum+day; if(a=-1) /當(dāng)該年為平年時,計算天數(shù) for(j=1;j<month;j+) sum=sum+nryearj-1; sum=sum+day; return sum; 該函數(shù)是輸入任一年月日,計算該日為當(dāng)年的哪一天。函數(shù)首先判斷閏年,再將閏年和平年分開計算天數(shù),最后輸出要求的天數(shù)。 3).void display()該函數(shù)的作用是輸出年歷。該函數(shù)調(diào)用了判斷閏年的函數(shù),計算天數(shù)的函數(shù)及計算星期的函數(shù),用蔡勒公式first=(n+(
10、n-1)/4-(n-1)/100+(n-1)/400)%7計算出某年的第一天是星期幾,并推算出該年年歷,最后調(diào)整格式輸出年歷。 4).void main()該函數(shù)是程序的主函數(shù),用以調(diào)用各個子函數(shù)。5. 程序編碼 #include<stdio.h> #include<stdlib.h> int ryear12=31,29,31,30,31,30,31,31,30,31,30,31; /存儲閏年每月天數(shù) int nryear12=31,28,31,30,31,30,31,31,30,31,30,31; /存儲非閏年每月天數(shù) int judge(int b) / 判斷是否閏
11、年 if(b%4=0&&b%100!=0|b%400=0) return 1; else return -1; int sumdays(int year,int month,int day) /計算天數(shù) int i,j,a; int sum=0; a=judge(year); /判斷是否為閏年 if(a=1) /當(dāng)該年為閏年時,計算天數(shù) for(i=1;i<month;i+) sum=sum+ryeari-1; sum=sum+day; if(a=-1) /當(dāng)該年為平年時,計算天數(shù) for(j=1;j<month;j+) sum=sum+nryearj-1; sum
12、=sum+day; return sum; int week(int days,int n) /用總天數(shù)計算星期 int b; int first; first=(n+(n-1)/4-(n-1)/100+(n-1)/400)%7; /蔡勒公式(計算某年的第一天是星期幾) b=(first+days-1)%7; return b; void display() /打印年歷 int n,days; int i,j,c; int a,m,w; while(n<=0) /判斷數(shù)據(jù)合法性 printf("n-請輸入需要打印的日歷年份:"); scanf("%d&quo
13、t;,&n); printf("n"); a=judge(n); for(i=0;i<12;i+) days=sumdays(n,i+1,1);/計算總天數(shù)并將值賦給days w=week(days,n); /計算星期并將值賦給w if(a=1) m=ryeari; if(a=-1) m=nryeari;printf("ttt %d年 %d月nn",n,i+1); printf("t周日t周一t周二t周三t周四t周五t周六n"); for(j=1;j<=m;j+) /當(dāng)j值小于每月最大值if(j=1) /當(dāng)每月1號
14、小于當(dāng)前星期值時,跳格for(c=0;c<w;c+)printf("t");printf("t %d",j); /否則打出與星期所對應(yīng)的日期if(w%7=6) /當(dāng)星期值除以7的余數(shù)為六時,換行printf("n");w=week(days+j,n) ; /計算下一個星期值printf("nn"); void main()/主函數(shù)int year,month,day;int n,a;int sum,w;printf("tt=萬年歷=nn");printf("t1=查詢年份是否為閏
15、年!nn");printf("t2=計算您輸入的日期為該年中的第幾天!nn");printf("t3=輸出該年年歷!nn");printf("t4=退出!n");while(1)printf("n-請輸入您要進(jìn)行的操作(序號1-4):");scanf("%d",&n);while(n<0|n>4) /判斷數(shù)據(jù)合法性printf("n-輸入有誤! 請重新輸入(序號1-4):");scanf("%d",&n);if(n=1
16、) /當(dāng)n等于1時,調(diào)用judge函數(shù)while(year<=0)printf("n-請輸入您要查詢的年份:"); scanf("%d",&year);a=judge(year);if(a=1) printf("nt-%d年是閏年!n",year);if(a=-1) printf("nt-%d年是平年!n",year);if(n=2) /當(dāng)n等于2時,調(diào)用sumdays函數(shù)while(year<=0|month<=0|month>12|day>31|day<=0) /判斷
17、數(shù)據(jù)的合法性printf("n-請輸入您要查詢的年月日(如*/*/*):");scanf("%d/%d/%d",&year,&month,&day);a=judge(year);sum=sumdays(year,month,day);w=week(sum,year);if(w=0) w=7;if(a=1) printf("nt-%d/%d/%d是星期%d,為本年中的第%d天!n",year,month,day,w,sum);if(a=-1) printf("nt-%d/%d/%d是星期%d,為本年中的
18、第%d天!n",year,month,day,w,sum);if(n=3) display(); /當(dāng)n等于3時,調(diào)用display函數(shù)if(n=4) /當(dāng)n等于4時,程序結(jié)束printf("nt-謝謝使用! O(_)Onn");break;6. 程序調(diào)試與運行結(jié)果 1).首先是程序主界面,先進(jìn)行數(shù)據(jù)合法性驗證,輸入正確選項1,進(jìn)入判斷閏年功能,輸入-1,判斷數(shù)據(jù)合法性,數(shù)入2012,進(jìn)行判斷,為閏年。如圖6.1 圖6.1程序主界面及進(jìn)行操作1時的界面 2).輸入正確選項2時,先進(jìn)行數(shù)據(jù)合法性判斷,再輸入2012/03/01,進(jìn)行計算,輸出結(jié)果為該天是星期四,是2012年中的第61天。如圖6.2 圖6.2
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025教師教學(xué)成果提升計劃他
- 服裝行業(yè)PMC關(guān)鍵職責(zé)
- 一年級上冊語文培優(yōu)輔差提升計劃
- 金融機構(gòu)采購制度及流程
- 市政工程信息化管理難點及解決措施
- 供應(yīng)室物資配送路徑流程他
- 口腔醫(yī)院多渠道營銷推廣計劃
- 高端餐飲膳食委員會設(shè)計計劃
- 新人教版小學(xué)二年級上冊語文課外輔導(dǎo)計劃
- 酒店銷售總監(jiān)客戶開發(fā)職責(zé)
- 2025年廣東省中考英語試題卷(含答案解析)
- 2025年吉林省中考物理試卷真題及答案詳解(精校打印版)
- 江蘇省南京市六校聯(lián)合體2024-2025學(xué)年高一下學(xué)期期末調(diào)研測試歷史試題(含答案)
- 標(biāo)準(zhǔn)的編寫講課件
- 學(xué)堂在線 護(hù)理研究方法 期末考試答案
- 2025年湖南省中考英語試卷真題(含答案解析)
- 2025年法律職業(yè)資格考試民法專項練習(xí)卷:合同法真題解析及試題
- 2025年天津市中考英語真題試卷及答案
- 玻尿酸介紹課件
- 2025至2030年中國電子束曝光系統(tǒng)行業(yè)市場研究分析及發(fā)展前景研判報告
- 2025中國心肌病綜合管理指南要點解讀課件
評論
0/150
提交評論