數(shù)據(jù)結(jié)構(gòu)課程設(shè)計萬年歷查詢_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計萬年歷查詢_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計萬年歷查詢_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計萬年歷查詢_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計萬年歷查詢_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一、題目概述(內(nèi)容及要求) 2二、功能分析 2三、設(shè)計 3四、運行與測試 11五、總結(jié) 15參考文獻(xiàn) 16、題目概述(內(nèi)容及要求)1. 內(nèi)容: 輸出公元 1 年至 9999 年的日歷; 以標(biāo)準(zhǔn)日歷的形式輸出,包含月份、星期以及具體某一天對應(yīng)的年、月、星期; 用數(shù)據(jù)結(jié)構(gòu)課上所學(xué)二叉樹及隊列順序存儲形式存儲。1.要求:輸入年份選擇列數(shù)打印日歷并寫入文件。說明:列數(shù)表示打印 格式 12 行一列、 6 行二列、四行三列。 。功能分析1. 當(dāng)你輸入正確的公元年份時, 程序會彈出選擇菜單, 然你選擇輸出方式。 然 后去 F 盤,看 file 文檔即可。當(dāng)你輸入一個錯誤的年份,比如 -2 時。因為這 個年份

2、無法通過循環(huán)的判定,所以程序無法繼續(xù)下去。同時,時間復(fù)雜度為 Q(n)。2 確定每年的第一天是星期幾。設(shè)公元元年一日是星期一,根據(jù)蔡司公式,用365乘以(year-1 )再與年多出來的一天求和,與 7取余,再加一天,就能求出所求年的一月一日是星期 幾了。3 確定所求年是不是閏年。普通年能被 4 整除且不能被 100 整除的為閏年。4. 使輸出的數(shù)字對齊。當(dāng)輸出數(shù)字小于 10 時,輸出兩個空格。當(dāng)輸出數(shù)字大于等于 10 時,輸 出一個空格。5. 算法的改進(jìn)設(shè)想。(1)可以不以公元元年一月一日為起點,可以找出任意年的任意天作為原 點。(2) case? case3中的計算首日的部分可以共享,這樣能

3、減少代碼長度。圖2-1程序功能圖三、設(shè)計1.每個程序中使用的存儲結(jié)構(gòu)設(shè)計說明本程序用到的存儲結(jié)構(gòu)式數(shù)組儲存一年的總月數(shù)intmonth13=0,1,2,3,4,5,6,7,8,9,10,11,12 /int Day13=0,31,28,31,30,31,30,31,31,30,31,30,31 /儲存每個月int i=12;/int j=6;/int k=7;/的天數(shù)月份每個月需要打印的行數(shù)每個月需要打印的列數(shù)aijk/儲存每個月里,每個數(shù)據(jù)的位置2. 每個部分的算法設(shè)計說明YNSwitch(ch)CaselCase2Case362for(j=1,j13,j+)for(j=1,j13,j+)f

4、or(j=1,j13,j+)31二月置為28天二月置為29天是否為閏年圖3-1算法流程圖1r開始71計算所求年份 的一月一日是 星期幾圖3-2算法流程圖2圖3-3算法流程圖33.相應(yīng)算法實現(xiàn)的源程序(有注解說明)圖4-1 : printf(printf(請輸入年份);萬年歷n );void DrawMenu()圖4-3 : ystem(cls); coute ndle ndl;cout tcout tcout t/菜單函數(shù)e ndl;請選擇輸出方式e ndl;e ndl;coutt1.十二行一列IIendl;couttIIendl;coutt2.六行二列IIendl;couttIIendl;c

5、outt3.三行四列IIendl;while (beContinue)DrawMenu();while (1) ch=getchar(); if (ch=1 ) break ; DrawMenu();圖4-4: system( cls );for (j=1;j13;j+)x=x+Dayj;所求年中的每個月的第一天是First_monthday=(x+First_yearday)%7; / 星期幾o(hù)ut n*nout year 年 monthj ”月”out*noutvv 星期日星期一星期二星期三星期四星期五星期六n; for (i=0;iFirst_monthday;i+) / 在每個月的第一

6、天開始前, 用空 格補位out ;for (x=1;x=Dayj;x+)/ 在每個月結(jié)束后用空格補位if (x10)out x;elseout x;if (x+First_monthday)%7)=0 & xDayj) /換行outendl;圖4-5. :system( cls );for (j=1;j13;j+)if (j!=1)x+=Dayj-1;First_monthday=(x+First_yearday)%7;for (i=0;iFirst_monthday;i+)aj-10i=0;for (k=1;k=Dayj;k+)aj-1(i+k-1)/7(i+k-1)%7=k;for (;k

7、43-First_monthday;k+) aj-1(i+k-1)/7(i+k-1)%7=0;for (i=0;i12;i+=2)l=1;for (j=0;j6;j+)if (l=1)out n*n*out year 年 i+1 月 ttt out year 年 i+2 月 ttout n*n ;日一二三四五六out 日 一 二 三 四 五 六 n ;l=0;for (k=0;k7;k+)if (aijk=0) out ;elseif (aijk10) out aijk; elseout aijk;outt ;for (k=0;k7;k+)if (ai+1jk=0)out ;elseif (a

8、i+1jk10)out ai+1jk;elseout ai+1jk;outt ;outendl;outendl;out.close();5. system( cls );for (j=1;j13;j+) if (j!=1) x+=Dayj-1; First_monthday=(x+First_yearday)%7; / 計算每個月的第一天是星 期幾每個月到達(dá)第一天之前,置 0輸出日期for (i=0;iFirst_monthday;i+) / aj-10i=0;for (k=1;k=Dayj;k+)aj-1(i+k-1)/7(i+k-1)%7=k; /for (;k43-First_month

9、day;k+) / 排版aj-1(i+k-1)/7(i+k-1)%7=0;for (i=0;i12;i+=3)l=1;for (j=0;j6;j+)if (l=1)out n * *n;out year 年 i+1 月 ttt ; outyear 年 i+2 月 tt ; outyear 年 i+3 月 n ;out n * *n;三四五六 日out 日一二 四五六n;l=0;for (k=0;k7;k+)if (aijk=0)out ;elseif (aijk10)/out aijk; elseout aijk; out t ;for (k=0;k7;k+)if (ai+1jk=0) out

10、 ;elseif (ai+1jk10)out ai+1jk;四五六 日置零處,置成空格elseout ai+1jk;outt ;for (k=0;k7;k+)if (ai+2jk=0) out ;elseif (ai+2jk10)out ai+2jk; elseout ai+2jk;outendl;out?|C?C3|c- ?|C3jC?|c3jC y-?|c?|C3|c 斗-_*.p- - y20001 月2000年 2月四3 0 7 4 1112 34 18 51A -1 25 2 9 61A 1X _261320278219623一 -13 5 2- 1 2一 7 4 1812 24 5

11、11 1218 1925 26*:|(:*木:(:*#* 卓:f:* 琳* 十木來十*#* 卓 #*:!:* 束菲 #*#* #:!:* * :(:*#*#* * 打00年3月測0年明 2 9 6 3 o/ 12 318 5 2 912 24 1812 261320274 11=11871X 5 2 9 6/11218 51 H .一101724312 9 6 3 012 3三5 2 912 24 1812 23 0 712 2-1 - 1 _T T -r T- T T _TTt- r T- T-T-1 T-t _T_T -y-T- -t-f- T r T fl* t-t |-r | 2000

12、年5月2000年6月18 53 0 7 ix- JI1S264 1122S1CO1E22292 9 6 3 012 33 0 7 4IX- 1A 2-4125 re/ MIX - Tt圖4-4 六行2列才水相qz|c4:*4:4c:K玄沖才孔*4*1:*:*:*:1:才卓*:|0掃|:*:*31:玄:?:*:水羋相冰版*#玄:比:4:*:+相*上兀曲瘧|:#*|0耳:米*玄就才:4:*嗥水章*如M庫L月20002月20帥年2月#*5|*|#*那斗4實=1:*31*31#榨來*乂#=*斗*=1*1=4=命*=*=:+=1=*=1*1*非*羋=*=10*=11=扣#半#*和*1咔*#+:乂#31!

13、*#*冋日二三四五六日二匹J17TL23452347Jt7g1U1112勺101L1213141.51314I. h171S191617n為20212220212223252$2324232&272B29272B2031日-匹1237ygKi131415L6172021222324S726293031-_5 2 9 671-12 -14 18 5H丄 112孑和牛林斗桿:|=友棄耳丼邛和的缽耳:*丼*水:nof:米事*:fc:|cx*x:半:fc件|c杠牛菲不此齊卒邛卓林件忙口=沖村半杓和冰亦祥半北丼沖半晞齊林20004 月2DD0 年 5 月20006 月:+沖*|o|c*4:*ii:五竜輩

14、哮 ZTtoHlolot:朮竜* 箕*:命*:|*戟:|:+7:|:負(fù)*:4*0|:童*章*:|:4:*3|:4*4:赫輩輩理*7+:|1*|-0*4:出盤輩站輩:#:*: *z|o|c日一二四亠 /、a二四H三五1T1234b67123445789891.01112131.45673g1011161112二1415151C1617L81920211213141E161718171S19202122232223242526272320212223西更屈25藥2T2S293J25303122729的30卓片右出*斗*4去卓#斗.*_*4*4_*4沖淤#卓*4|1_4_木康*4*人*卓*4|*.4

15、*卓啦_*_斗卓蚌卓柏出木+144*441144*卓木*凡年斗*#*#*汕0C年7月2射0年呂月20 00年9月*5|匕*!卡*乍兀朱*味*3|掃來就朮輩串*來掃出章.*盤宋3C牢!址*卡址記嗎*味斜*|t朮*J|C乍X*+*i斜日1四五亠八日匹五六日一匹豆六21234561235&7i70O9It)111213.67851010L213劇1S1514151317151020:i1213L415161717L920212223215223242E.2627is202122;324:4牡212829Sti冀四的31272S前3031圖4-5 3行4列五、總結(jié)這兩周課設(shè)從開始的確定命題,至擻集資料

16、,至V初步編程,至M修改代 碼,到最終完成代碼,這是一個學(xué)習(xí)的過程,一個升華的過程。我想課設(shè) 的意義也是在于此吧。剛開始接觸到課題感覺到無從下手,后來通過逐步 的思考,認(rèn)真的研究逐步的建立了整個宏觀的流程,然后就是一段時間的 埋頭苦干,反復(fù)優(yōu)化程序?,F(xiàn)在,一切都結(jié)束了,感覺這個命題其實也不 難的。這就告訴我們理論與實踐的關(guān)系。想到不一定能做到,但做到了一 定會想到,做到不一定有想象的那么難。只要你愿意做,就一定能做到。 當(dāng)然課設(shè)也有很多的不足,由于剛學(xué)完數(shù)據(jù)結(jié)構(gòu)沒多久,因此沒有建立一 個系統(tǒng)的知識框架,在編程時大體上還是延續(xù)C的思路,并沒有過多的采用數(shù)據(jù)結(jié)構(gòu)在算法和效率上進(jìn)行優(yōu)化,這是此次最大

17、的不足,也將會是今 后學(xué)習(xí)的重點。在設(shè)計過程中不能夠把書本上的知識與實踐相結(jié)合,這也就增加了設(shè)計不好該程序的想法!在設(shè)計過程中的一次次設(shè)計錯誤增加了我放棄的想法!不過經(jīng)過 自己的獨立思考和同學(xué)的幫助終于完成了課程設(shè)計! 完成該程序后想起自己以前的每一次對自己失去信心,就覺得并不是在知識掌握上打敗了,而是自己對自己 缺乏信心!只要自己對自己不失去信心相信就可以完成那些以前認(rèn)為完成不了的 事情!也讓我懂得了要想成功首先就必須有很強的自信心! 懂得了自己以后要在 做任何事情時都要自信!當(dāng)自己都不相信自己能夠成功時還可能會獲得成功嗎? 在課程設(shè)計的過程中也知道了自己在以前的學(xué)習(xí)中有很大的不足導(dǎo)致在設(shè)

18、計過程中出現(xiàn)了很多的問題,有些地方看不懂也不知道怎么去設(shè)計, 但是在設(shè)計 過程中也學(xué)習(xí)了很多,掌握了自己以前沒有學(xué)好的知識, 雖然一時可以掌握完以 前沒有學(xué)好的知識,不過也給自己敲響了警鐘,在學(xué)習(xí)中不可以伏于表面,要想 學(xué)好每一門課程都要踏踏實實,做什么都不是給別人看的!都是要更好的掌握該 門知識,提高自己的自身的修養(yǎng),提高自己的能力!為以后的工作打下良好的知 識基礎(chǔ)和技能基礎(chǔ)!當(dāng)然,我的成功也離不開大家的幫助,所以,在此我要感謝給于過我?guī)椭?指導(dǎo)老師和熱心的同學(xué)們。六、參考文獻(xiàn)1 嚴(yán)蔚敏,吳偉民著數(shù)據(jù)結(jié)構(gòu):C語言版清華大學(xué)出版社,20072 譚浩強著.C+面向?qū)ο蟪绦蛟O(shè)計.北京:清華大學(xué)出

19、版社,20063 李愛華著.C+面向?qū)ο蟪绦蛟O(shè)計.七、附件程序代碼:#inelude #include vconio.h #include using namespacestd; void DrawMe nu()system( cls); coute ndle ndl; cout t/IIcout t請選擇輸出方式cout tIIcout t1.十二行一列cout tIIcout t2.六行二列菜單函數(shù)e ndl; e ndl; e ndl;e ndl; e ndl;e ndl;cout tIIendl;cout t 3.三行四列IIendl;intmain()int a1267;int ye

20、ar;int month13=0,1,2,3,4,5,6,7,8,9,10,11,12;/ 定義一年的總月 數(shù)intday;intleapyear; /閏年intFirst_yearday; /一年的第一天intFirst_monthday; /一個月的第一天intx=0,i,j,k,l,y;char ch;int Day13=0,31,28,31,30,31,30,31,31,30,31,30,31; / 定義每個月有多少天ofstream out;/ 寫入文件out.open( f:file.txt ,ios:out);if (!out)cout Cant open file! 0)Dra

21、wMenu();while (1) ch=getchar();if (ch=1 ) break ;DrawMenu();switch (ch)case 1 :system( cls );for (j=1;j13;j+)x=x+Dayj;First_monthday=(x+First_yearday)%7; / 所求年中的每個月的第一天 是星期幾o(hù)ut n*nout year 年 monthj ”月”;out n*n星期五 星期六out 星期日 星期一 星期二 星期三 星期四An;for (i=0;iFirst_monthday;i+) /在每個月的第一天開始前,用空格補位out ;for (x

22、=1;x=Dayj;x+) / 在每個月結(jié)束后用空格補位 if (x10)out x;elseout x;if (x+First_monthday)%7)=0 & xDayj) /換行outendl;break ;case 3 :system( cls ); for (j=1;j13;j+)if (j!=1)x+=Dayj-1;計算每個月的第一天First_monthday=(x+First_yearday)%7; / 是星期幾for (i=0;iFirst_monthday;i+) /每個月到達(dá)第一天之前,置 0aj-10i=0;for (k=1;k=Dayj;k+)aj-1(i+k-1)/7(i+k-1)%7=k; / 輸出日期for (;k43-First_monthday;k+) / 排版 aj-1(i+k-1)/7(i+k-1)%7=0;for (i=0;i12;i+=3)l=1;for (j=0;j6;j+) if (l=1) out n*nout year 年 i+1 月 ttt out year 年 i+2 月 tt out year 年 i+3 月 n ;out n*n ;outvv日一二三四五六 日一二三四五六 三四五六n;l=0;for (k=0;k7;k+)/置零處,置成空格if (aijk=0)out ;elseif (aijk10)out

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論