




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄
一、題目概述(內(nèi)容及要求)...............................2
二、功能分析.............................................2
三、設(shè)計(jì).................................................3
四、運(yùn)行與測(cè)試..........................................11
五、總結(jié).................................................15
參考文獻(xiàn).................................................16
一、題目概述(內(nèi)容及要求)
1.內(nèi)容:
輸出公元1年至9999年的日歷;
以標(biāo)準(zhǔn)日歷的形式輸出,包含月份、星期以及具體某一天對(duì)應(yīng)的年、月、星期;
用數(shù)據(jù)結(jié)構(gòu)課上所學(xué)二叉樹及隊(duì)列順序存儲(chǔ)形式存儲(chǔ)。
1.要求:①輸入年份②選擇列數(shù)③打印日歷并寫入文件。說明:列數(shù)表示打印
格式12行一列、6行二列、四行三列。。。。。
二、功能分析
1.當(dāng)你輸入正確的公元年份時(shí),程序會(huì)彈出選擇菜單,然你選擇輸出方式。然
后去F盤,看file文檔即可。當(dāng)你輸入一個(gè)錯(cuò)誤的年份,比如-2時(shí)。因?yàn)檫@
個(gè)年份無法通過循環(huán)的判定,所以程序無法繼續(xù)下去。
同時(shí),時(shí)間復(fù)雜度為Q(n)0
2.確定每年的第一天是星期兒。
設(shè)公元元年一日是星期一,根據(jù)蔡司公式,用365乘以(year-1)再與年多
出來的一天求和,與7取余,再加一天,就能求出所求年的一月一日是星期
兒了。
3.確定所求年是不是閏年。
普通年能被4整除且不能被100整除的為閏年。
4.使輸出的數(shù)字對(duì)齊。
當(dāng)輸出數(shù)字小于10時(shí),輸出兩個(gè)空格。當(dāng)輸出數(shù)字大于等于10時(shí),輸
出一個(gè)空格。
5.算法的改進(jìn)設(shè)想。
(1)可以不以公元元年一月一日為起點(diǎn),可以找出任意年的任意天作為原
點(diǎn)。
(2)case2,case3中的計(jì)算首日的部分可以共享,這樣能減少代碼長(zhǎng)度。
圖2-1程序功能圖
三、設(shè)計(jì)
1.每個(gè)程序中使用的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)說明。
本程序用到的存儲(chǔ)結(jié)構(gòu)式數(shù)組
intmonth[13>{0,1,2,3,4,5,6,7,8,9,10,11,12}〃儲(chǔ)存一年的總月數(shù)
intDay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}〃儲(chǔ)存每個(gè)月
的天數(shù)
inti=12;〃月份
intj=6;//每個(gè)月需要打印的行數(shù)
intk=7;//每個(gè)月需要打印的列數(shù)
a[i][j][k]〃儲(chǔ)存每個(gè)月里,每個(gè)數(shù)據(jù)的位置
2.每個(gè)部分的算法設(shè)計(jì)說明。
圖3-1算法流程圖1
圖3-2算法流程圖2
圖3-3算法流程圖3
3.相應(yīng)算法實(shí)現(xiàn)的源程序(有注解說明)
圖4T:printf(,z萬年歷\n〃);
printf(〃請(qǐng)輸入年份〃);
voidDrawMenu()〃菜單函數(shù)
(
圖4-3:ystem(〃cls〃);
cout<<endl
?endl;
cout?,z\t/z<<endl;
cout<<,z\t請(qǐng)選擇輸出方式,z?endl;
cout?/z\tz\<endl;
COUt?Z,\t1.十二行一列/z?endl;
COUt?Z,\t〃<〈endl;
cout?,z\t2.六行二列〃<<endl;
COUt?Z,\t/z<<endl;
C0Ut?z,\t3,三行四列,,<<endl;
while(beContinue)
(
DrawMenu();
while(1)
(
ch=getchar();
if(ch<=,3'&&ch>=,T)
break;
DrawMenu();
圖4-4:system(z/cls,z);
for(j=l;j<13;j++)
(
x=x+Day[j];
First_monthday=(x+First_yearday)%7;〃所求年中的每個(gè)月的第一1天是
星期兒
out?year<〃年〃<<〃z/<<month[j]?^月”;
out?〃星期日星期一星期二星期三星期四星期五星期六’\n〃;
for(i=0;i<First_monthday;i++)〃在每個(gè)月的第一天開始前,用空
格補(bǔ)位
out??,〃;
for(x=l;x<=Day[j];x++)〃在每個(gè)月結(jié)束后用空格補(bǔ)位
(
if(x<10)
out?/z/z?x;
else
out?z,z,<<x;
if(((x+First_monthday)%7)==0&&x<Day[j])〃換行
out<<endl;
圖4-5.:system(z,clsz,);
for(j=l;j<13;j++)
if(j!=l)
x+=Day[j-l];
First_monthday=(x+First_yearday)%7;
for(i=0;i<First_monthday;i++)
a[j-l][0][i]=0;
for(k=l;k<=Day[j];k++)
a[j-l][(i+k-l)/7][(i+k-l)%7]=k;
for(;k<43-First_monthday;k++)
a[j-l][(i+k-l)/7H(i+k-l)%7]=0;
)
for(i=0;i<12;i+=2)
(
1=1;
for(j=0;j<6;j++)
(
if(1==1)
***********\n〃;
out?year<<“年〃<<i+l<<〃月;
out?year<<〃年〃?i+2<X〃月〃<<〃\t\t〃;
*******\n〃;
out。"日?二三四五六日一二三四五六
1=0;
)
for(k=0;k<7;k++)
if(a[i][j][k]==0)
out<<”";
else
if(a[i][j][k]<10)
out<C
else
outY
out?"\t";
for(k=0;k<7;k++)
if(a[i+l][j][k]==0)
out<<”
else
if(a[i+l][j][k]<10)
out。"/,?a[i+l][j][k];
else
out<<z,z,?a[i+l][j][k];
)
out<<z/\tz/;
out?endl;
)
out<<endl;
)
out.close();
)
5.
system("cis");
for(j=l;j<13;j++)
(
if(j!=l)
x+=Day[j-l];
First_monthday=(x+First_yearday)%7;〃計(jì)算每個(gè)月的第一天是星
期幾
for(i=0;i<First_monthday;1++)〃每個(gè)月到達(dá)第一天之前,置0
[0][i]=0;
for(k=l;k<=Day[j];k++)
(
a[j-1][(i+k-1)/7][(i+k-1)%7]=k;//輸出日期
for(;k<43-First_monthday;k++)〃排版
a[j-1][(i+k-1)/7][(i+k-l)%7]=0;
for(i=0;i<12;i+=3)
(
1=1;
for(j=0;j<6;j++)
(
if(l==l)
out<〈year<<"年<<"月;
out?year<<"年”《i+2久"月
out<〈year?"年"<Xi+3〈〈“月;
out?,z日一二三.?二三六日一二三四五六日一二三
四五六'\n〃;
1=0;
)
for(k=0;k<7;k++)〃置零處,置成空格
(
if(a[i][j][k]==0)
out<<z/";
else
if(a[i][j][k]<10)
out。”"?a[i][j][k];
else
out<<-[k];
out?"\t";
for(k=0;k<7;k++)
(
if(a[i+l][j][k]==0)
out<<,z
else
if(a[i+l][j][k]<10)
out?!保?,?a[i+l][j][k];
else
out<<〃
)
OUt?/Z\t,Z;
for(k=0;k<7;k++)
(
if(a[i+2][j][k]==0)
out<<,z〃;
else
if(a[i+2][j][k]<10)
out?,zz,?a[i+2][j][k];
else
out<<〃"<<a[i+2][j][k];
)
out<<endl;
)
out<<endl;
四、運(yùn)行與測(cè)試
1.運(yùn)行界面圖。
6一C:\Docu?entsandSettings\Ad>inistrator\桌面'教學(xué)軟件\Debug\翼馬超12030--日I3E3
''D
請(qǐng)輸入年份|
圖4-1(輸入年份之后單擊回車)
c\C:\Docu>entsandSettings\Ad>inistrator\桌面'教學(xué)軟件\Debug\翼馬超12030...HlfiW
請(qǐng)選擇輸出方式
1.十二行一列
2.六行二列
3.三行四列
圖4-2(選擇輸出方式,單擊回車后自動(dòng)寫入文件)
2嬴年1月
星期日星期一星期二星期三星期四星期五星期六
135
678101112
13141516171819
20212223242526
2728293031
**************************************************:**
2000年2月
****************************************************
星期日星期一星期二星期三星期四星期五星期六
4
5671011
1213141718
1920212425
262728
************¥:*****¥:*******************:**************
2000年3月
****************************************************
星期日星期一星期二星期三星期四星期五星期六
123
567891011
12131415161718
19202122232425
262728293031
****************************************************
2000年4月
************************:1:****:1:***************:1:******
星期日星期一星期二星期三星期四星期五星期六
12
3456789
10111213141516
17181920212223
24252627282930
圖4-312行1列
2000年1月2000年2月
日一二三四五六日一二三四五六
11234
3456786789101112
10111213141513141516171819
1617181920212220212223242526
232425262728292728
3031
2000年3月2000年4月
日一二—四五六a一二三四五六
1345
67810111234567
1314151617181910111213141516
2021222324252617181920212223
272829303124252627282930
瑞蕃5月******2溫年々月
B——四五六S——四五六
1-456734
8101112131456781011
1516171819202112131415161718
2223242526272819202122232425
2930312627282930
圖4-4六行2列
2000年1月2000年2月2000年3月
*********************************************************************************
日一二三四五六日一二三四五六日一二三四五六
11234512345
234567867891011126789101112
91011121314151314151617181913141516171819
161718192021222021222324252620212223242526
2324252627282927282728293031
3031
2000年4月2000年5月2000年6月
、
B一—四五六S—二—四五八B——四五六
567234
34567101112131456791011
101112131415161516171819202112131415161718
171819202122232223242526272819202122232425
242526272829302930312627282930
2000年7月2000年8月2000年9月
*********************************************************************************
日一二三四五六日一二三四五六日一二三四五六
12123456123
34567897891011121345678910
101112131415161415161718192011121314151617
171819202122232122232425262718192021222324
2425262728293028293031252627282930
31
圖4~53行4列
五、總結(jié)
這兩周課設(shè)從開始的確定命題,到搜集資料,到初步編程,到修改代
碼,到最終完成代碼,這是一個(gè)學(xué)習(xí)的過程,一個(gè)升華的過程。我想課設(shè)
的意義也是在于此吧。剛開始接觸到課題感覺到無從下手,后來通過逐步
的思考,認(rèn)真的研究逐步的建立了整個(gè)宏觀的流程,然后就是一段時(shí)間的
埋頭苦干,反復(fù)優(yōu)化程序?,F(xiàn)在,一切都結(jié)束了,感覺這個(gè)命題其實(shí)也不
難的。這就告訴我們理論與實(shí)踐的關(guān)系。想到不一定能做到,但做到了一
定會(huì)想到,做到不一定有想象的那么難。只要你愿意做,就一定能做到。
當(dāng)然課設(shè)也有很多的不足,由于剛學(xué)完數(shù)據(jù)結(jié)構(gòu)沒多久,因此沒有建立一
個(gè)系統(tǒng)的知識(shí)框架,在編程時(shí)大體上還是延續(xù)C的思路,并沒有過多的采
用數(shù)據(jù)結(jié)構(gòu)在算法和效率上進(jìn)行優(yōu)化,這是此次最大的不足,也將會(huì)是今
后學(xué)習(xí)的重點(diǎn)。
在設(shè)計(jì)過程中不能夠把書本上的知識(shí)與實(shí)踐相結(jié)合,這也就增加了設(shè)計(jì)不好
該程序的想法!在設(shè)計(jì)過程中的一次次設(shè)計(jì)錯(cuò)誤增加了我放棄的想法!不過經(jīng)過
自己的獨(dú)立思考和同學(xué)的幫助終于完成了課程設(shè)計(jì)!完成該程序后想起自己以前
的每一次對(duì)自己失去信心,就覺得并不是在知識(shí)掌握上打敗了,而是自己對(duì)自己
缺乏信心!只要自己對(duì)自己不失去信心相信就可以完成那些以前認(rèn)為完成不了的
事情!也讓我懂得了要想成功首先就必須有很強(qiáng)的自信心!懂得了自己以后要在
做任何事情時(shí)都要自信!當(dāng)自己都不相信自己能夠成功時(shí)還可能會(huì)獲得成功嗎?
在課程設(shè)計(jì)的過程中也知道了自己在以前的學(xué)習(xí)中有很大的不足導(dǎo)致在設(shè)
計(jì)過程中出現(xiàn)了很多的問題,有些地方看不懂也不知道怎么去設(shè)計(jì),但是在設(shè)計(jì)
過程中也學(xué)習(xí)了很多,掌握了自己以前沒有學(xué)好的知識(shí),雖然一時(shí)可以掌握完以
前沒有學(xué)好的知識(shí),不過也給自己敲響了警鐘,在學(xué)習(xí)中不可以伏于表面,要想
學(xué)好每一門課程都要踏踏實(shí)實(shí),做什么都不是給別人看的!都是要更好的掌握該
門知識(shí),提高自己的自身的修養(yǎng),提高自己的能力!為以后的工作打下良好的知
識(shí)基礎(chǔ)和技能基礎(chǔ)!
當(dāng)然,我的成功也離不開大家的幫助,所以,在此我要感謝給于過我?guī)椭?/p>
指導(dǎo)老師和熱心的同學(xué)們。
六、參考文獻(xiàn)
[1]嚴(yán)蔚敏,吳偉民著.數(shù)據(jù)結(jié)構(gòu):C語言版.清華大學(xué)出版社,2007
[2]譚浩強(qiáng)著.C++面向?qū)ο蟪绦蛟O(shè)計(jì).北京:清華大學(xué)出版社,2006
[3]李愛華著.C++面向?qū)ο蟪绦蛟O(shè)計(jì).
七、附件
程序代碼:
#include<iostream>
#include<conio.h>
#include<fstream>
usingnamespacestd;
voidDrawMenu()〃菜單函數(shù)
system(〃cls〃);
cout?endl
<<endl;
cout?/z\t"?endl;
cout?z/\t請(qǐng)選擇輸出方式/z<<endl;
cout?,z\t/z<<endl;
cout<</z\t1.十二行一列,z<<endl;
cout<<z'\t/z<<endl;
cout?/z\t2.六行二列z,?endl;
COUt?/Z\tz,?endl;
COUt<<,Z\t3.三行四列,z?endl;
)
intmain()
inta[12][6][7];
intyear;
intmonth[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};〃定義一年的總月
數(shù)
intday;
intleapyear;〃閏年
intFirst_yearday;〃一年的第一天
intFirst_monthday;〃一個(gè)月的第一天
intx=0,i,j,k,1,y;
charch;
intDay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//定義每
個(gè)月有多少天
ofstreamout;〃寫入文件
out.open(,,f:\\file.txt",ios::out);
if(!out)
(
cout<<z,CanJtopenfile!!!z,<<endl;
return-1;
)
printfC萬年歷\n〃);
printf(〃請(qǐng)輸入年份〃);
scanf(〃%d〃,&year);
First_yearday=(365*(year-1)+(year-1)/4-(year-1)/100+(year-1)/4
00)%7+l;"〃判斷所求年的一月一日是星期兒
leapyear=(year%4==4&&year%100!=100I|year%400==0)?0:1;//
Day[2]=(leapyear==l)?29:28;〃求年是閏年的話,二月置為
29天否則二月置為28天
while(year>0)
(
DrawMenu();
while(l)
(
ch=getchar0;
if(ch<=,3'&&ch>=?T)
break;
DrawMenu();
switch(ch)
caseP:
system(z,cls,z);
for(j=l;j<13;j++)
(
x=x+Day[j];
First_monthday=(x+First_yearday)%7;〃所求年中的每個(gè)月的第一1天
是星期兒一
out〈<year?〃年〃〈〈"z,?month[j]月”;
[]t<<〃\51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c\j~|〃.
out?〃星期日星期一星期二星期三星期四星期五星期‘六
'\n〃;
for(i=0;i<First_monthday;i++)〃在每個(gè)月的第一天開始前,
用空格補(bǔ)位
out?zz〃;
for(x=l;x<=Day[j];x++)〃在每個(gè)月結(jié)束后用空格補(bǔ)位
if(x<10)
OUt?Z,Z,?X;
else
out?z/z,<<x;
if(((x+First_monthday)%7)==0&&x<Day[j])〃換行
out<<endl;
}
break;
case'3’:
system(〃cls〃);
for(j=l;j<13;j++)
if(j!=l)
x+=Day[j-l];
First_monthday=(x+First_yearday)%7;〃計(jì)算每個(gè)月的第一天
是星期兒
for(i=0;i<First_monthday;i++)〃每個(gè)月到達(dá)第一天之前,置0
a[j-l][0][i]=0;
for(k=l;k<=Day[j];k++)
a[j-l][(i+k-l)/7][(i+k-l)%7]=k;〃輸出日期
for(;k<43-First_monthday;k++)〃排版
a[j-l][(i+k-l)/7H(i+k-l)%7]=0;
for(i=0;i<12;i+=3)
(
1=1;
for(j=0;j<6;j++)
(
if(1==1)
out〈〈year<<"年"<<i+l<<"月"<<'\t\t\t";
out〈<year<<"年月;
out〈<year<<"年月;
out。"日二三,?四五)/日一二三四五六日一二
三四五六'\n";
1=0;
)
for(k=0;k<7;k++)〃置零處,置成空格
(
if(a[i][j][k]==0)
out<<z"";
else
if(a[i][j][k]<10)
out?!??a[i][j][k];
else
)
;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年黑龍江省建筑安全員A證考試題庫及答案
- 覆土撒播有機(jī)肥施工方案
- 單位購置窗簾合同范本
- 出租鄉(xiāng)鎮(zhèn)倉庫房合同范本
- 二年級(jí)口算題目全集100道
- 企業(yè)標(biāo)志商標(biāo)設(shè)計(jì)合同范本
- 卸貨安全合同范本
- 全村荒地出租合同范例
- 寫真退款合同范本
- 單位車輛報(bào)廢合同范例
- 統(tǒng)籌管理方案
- 建筑工程安全文明施工標(biāo)準(zhǔn)化圖集(附圖豐富)
- 人教版 美術(shù)二年級(jí)上冊(cè) 第9課 蜻蜓飛飛 教案
- Unit 1 Travel教案-2023-2024學(xué)年高一下學(xué)期 中職英語高教版(2023修訂版)基礎(chǔ)模塊2
- DB3206T 1083-2024機(jī)關(guān)會(huì)議服務(wù)人員操作技術(shù)規(guī)范
- 習(xí)作《我的家人 》教案-2024-2025學(xué)年統(tǒng)編版語文四年級(jí)上冊(cè)
- 眼鏡學(xué)智慧樹知到答案2024年溫州醫(yī)科大學(xué)
- 24年注安-其他安全-必背考點(diǎn)-王培山
- 《積極心理學(xué)(第3版)》 課件 第9章 積極的愛
- 中醫(yī)淋巴排毒
- 第四屆檔案職業(yè)技能競(jìng)賽理論試題庫資料-上(選擇題)
評(píng)論
0/150
提交評(píng)論