C語言課程設計報告_第1頁
C語言課程設計報告_第2頁
C語言課程設計報告_第3頁
C語言課程設計報告_第4頁
C語言課程設計報告_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

xxxxxxxx

電子工程系

C語言

課程設計報告

題目名稱:年歷顯示設計

學生姓名:―XXXXXX

學號:XXXXXXXXXXXXX

專業(yè):電子信息工程

同組成員:XXXXXXXXXXX

2013年12月制成績:

、設計題目:題目五,年歷顯示設計

二、設計任務及自己所承擔部分

設計任務:

(1)輸入一個年份,輸出是在屏幕上顯示該年的日歷。假定輸入的年份在

1950-2050年之間。

(2)輸入年月,輸出該月的日歷。

(3)輸入年月日,輸出距今天還有多少天,星期兒,是否是公歷節(jié)日。

自己所承擔部分:程序的測試以及運行

三、總體設計(程序設計組成框圖、流程圖)

程序組成框圖:

年歷顯示設計

輸輸輸

出出出

年月詳

日日細

歷歷信

流程圖:

開始

點擊進入功能選項

查查

II信

歷息

輸出年日輸出詳細

歷信息

顯示結(jié)果

是否繼續(xù)

四、詳細設計(模塊功能說明,如函數(shù)功能、入口及出口參數(shù)說明,

函數(shù)調(diào)用關(guān)系描述等)

當我們輸入年份任意公元后的年份year時,可以通過一個for語句,算出從

公元一年到y(tǒng)ear-1年的總天數(shù),這其中要注意平年與閏年的區(qū)別,平年365天,

閏年是366天,把這一部分用how()函數(shù)表示。算出總天數(shù)Z后,用Z除以7余

數(shù)是d,則year這一年的一月一日便是星期d。如此則一月的日歷可表示出來。

然后把Z加上一月的天數(shù)tian得到的新值賦給Z,再用Z除以7,重新得到新的

余數(shù)d,如此可知二月的第一天是星期幾,可表示出二月的日歷。依次循環(huán),用

for(i=0;i〈12;i++)語句可表示出該年的日歷。注意閏年二月是29天,平年是

28天。

模塊功能說明:

A.大體框架:對于所給出的萬年歷要滿足三個功能即查詢某一年的年歷表,某

一年單月的月歷,某一年某一月某一日具體的信息包含星期幾,是否有公歷

節(jié)日,距離當前時間所差的天數(shù)三個小的功能。

a.功能A:查詢某一年的年歷表。主題思想將一年每個月的天數(shù)存放在一個數(shù)

組中以方便調(diào)用,其次年歷要判斷所查詢的年份是否為閏年或者是平年由條

件if((y%4==0&&y%100!=0)||y/400==0)來確定,如果是閏年則二月份輸出29

天此由條件語句給出。對于年里中的星期兒由公歷算法

b.判斷某一年的第一天也就是元旦為星期幾,利用循環(huán)語句依次累加排列出該

月的月歷,滿足條件(j*10+k)>=(10+w)就累加否則=輸出空格。

c.功能B:查詢某一年某一月的月歷,和上面一樣需要判斷是否為閏年,不同

之處是星期數(shù)由w=(y-l+(y-1)/4-(y-1)/100+(y-1)/400+s+l)%7給出。

d.功能C:查詢某一年某一月某一天的具體信息。利用s來計算出當前與你所

要查詢某一天所想差的天數(shù),具體思想為:兩個都利用了for循環(huán)語句,循

環(huán)起點同為0,也就是他們開始記年的時間相同,先計算整年之間所相差的

天數(shù)yl并判斷循環(huán)之間的年份是否為閏年,如果是加366否則加365.然后

判斷月份的天數(shù),也是利用for循環(huán)通過調(diào)用數(shù)組中的滿足條件的元素累加

月分所經(jīng)過的天數(shù)ml.則suml=yl+ml+dl.和上面一樣計算所要查詢的天數(shù)總

和sum=y+m,s=suml-sum,判斷這一天的星期數(shù)由公式

w=(y-l+(y-1)/4-(y-1)/100+(y-1)/400+s)%7判斷。公歷信息應提前輸入一

個公歷信息庫,利用條件語句判斷如果滿足輸出該節(jié)日。

要解決的主要問題為:

(1)找到日期和星期幾之間的對應關(guān)系。

(2)閏年的判斷可以構(gòu)造一個函數(shù)來實現(xiàn):intIsLeapYear(intyear);每

月對應的天數(shù)可以利用一個一維數(shù)組month_day□來存儲;為顯示一年當中的各

個月份可用switch-case分支結(jié)構(gòu)。

五、調(diào)試與測試:調(diào)試方法,測試結(jié)果的分析與討論,測試過程中遇

到的主要問題及采取的解決措施

測試方法:運用C++語言程序運行。具體步驟:編譯,組建,執(zhí)行

測試遇到的問題:

(1)函數(shù)的調(diào)用與套用,具體來說就是如何在一個構(gòu)造的函數(shù)中調(diào)用另一

個構(gòu)造函數(shù)。

(2)把每月的日歷設計的美觀,如何讓星期和下面的數(shù)字對齊。

(3)如何把握日歷的前幾天的空格,使每月的第一天正好對在它應該的星

期下。

測試結(jié)果:剛開始未能出來正確結(jié)果,有很多錯誤,但是我們根據(jù)c語言程

序中的提示一步步的解決,找到問題出來的地方,再不行的地方大家一起討論,

實在不行的我們就上網(wǎng)查資料,仿照別人的程序和思路進行修改,最終取得成功。

六、運行結(jié)果

程序界面

?C:\Users\lenovo\Desktop\Debug\Lexe^一回x

,歡迎來到萬年歷查詢系統(tǒng),

功能選項:

A:查詢1950-2050年的年歷表.

B:查物基年某月4日歷舂

C:輸入年月日查詢當天在息、.

情輸入你所要查詢的選項(輸入A或者B或者C):

程序功能A:輸出年日歷

~-4^-Jp-I「計用,杏一目N7充“

功能選項:

A(查詢1950-2050年的年歷表.

B.查詢某年某月的日歷君

C:輸入年月日查詢當天棺息.

請卷入,

清輸入,:A

..............2013年公歷表..............

NNTUEUFR

Su

M013

678912

202122232526

24

282930

27

==H==---Bs--

-

suNTuEFRTSAT

THU4

1

程序功能B:輸出月日歷

想繼

0不1:Z

N)者

?/金\

的fB:B

^噂s'i7

例\

^年13312

20127:

2013年12月

SUNMONTUEWEDTHUFRISAT

123456?

891011121314

15161718192021

22232425262728

293031

是否想繼續(xù)查詢(Y/N)

程序功能c:輸出詳細信息

是否想繼續(xù)查詢(Y/N):Y

簿輸入你臍襄查詢的選項(輸入A或者B或者C):C

請輸入今去的日期年月白(2013121):2013121

請輸入你薪要查詢的年月日:20i31231

你所查詢的2013年i2月31日的信息如下:

「噩百蒜Fl。芫二

;露曾新年;

SiSiSSS-Ev/NF?--

七、教師評語

程序代碼:

#include<stdio.h>

main()

inty,m,d,w,k,s,i,j;

inta[12]={31,28,31,30,31,30,31,31,30,31,30,31};

charp,q;

printf("查詢項目A:查詢1940-2040年的年歷表.\n");

printf(〃查詢項目B:查詢某年某月的日歷表.\n");

printf("查詢項目C:輸入年月日查詢當天信息.\n\n");

do

{printf(“請輸入你所要查詢的項目(輸入A或者B或者C)");

scanf("%c",&p);

if(p==,A,)

/*打印某年的年歷表

printf("請輸入你想知道的年份:");

scanf("%d",&y);

printf('\n");

printf(/,============%d年公歷表============\n\n",y);

w=(y+(y-1)/4-(y-1)/100+(y-l)/400)%7;

if((y%4==0&&y%100!=0)||y%400==0)

a[l]=29;

for(i=0;i<12;i++)

(

d=0;

printf("================%2d月================\n",i+1);

printfCSUNMONTUEWEDTHUFRISAT\n");

for(j=l;j<=6;j++)

for(k=0;k<=6;k++)

{

if((j*10+k)>=(10+w))

(

d=d+l;

if(d>a[i])

(

printf("\n");

break;

)

elseprintf("%5d”,d);

w=k+l;

if(w==7)

(

w=0;

printf('\n");

)

)

elseprintf("");

printf("===================================\n");

)

/*打印某年某月的日歷表

if(p==,B')

printf("請輸入你想知道的年月:“);

scanf("%d%d”,&y,&m);

printf("\n");

printfC=============%d年/d月=============\n\n”,y,m);

if((y%4==0&&y%100!=0)||y%400==0)

a[l]=29;

s=0;

for(i=0;i<m-l;i++)

s=s+a[i];

w=(y-l+(y-1)/4-(y-1)/100+(y-1)/400+s+l)%7;

printfCSUNMONTUEWEDTHUFRISAT\n");

d=0;

for(j=l;j<=6;j++)

for(k=0;k<=6;k++)

(

if((j*10+k)>=(10+w))

{

d=d+l;

if(d>a[i])

{

printf('\n");

break;

)

elseprintf("%5d”,d);

w=k+l;

if(w==7)

{

w=0;

printf("\n");

elseprintf(z/");

}

printf("===================================\n");

)

/*某年某月某日的信息查詢

if(p==C')

(

/*計算這天距今天多少天

intyl,ml,dl,sumy,sumyl,summ,summl,sum,suml;

sumy=0;

sumyl=0;

summ=0;

summl=0;

sum=0;

suml=O;

printf(〃請輸入今天的日期:年月日〃);

scanfC/%d%d%dz,,&yl,&ml,&dl);

printf(〃請輸入你所要查詢的年月日〃);

scanf(〃%d%d%d”,&y,&m,&d);

printf(〃\n〃);

printf("你所查詢的%(1年%(1月%d日的信息如下:\n〃,y,m,d);

printf(z,===============================\n;

for(i=0;i<yl;i++)

(

if((i%4==0&&i%100!=0)||i%400==0)

sumyl=sumy1+366;

elsesumyl=sumy1+365;

)

for(j=0;j++)

summl=summl+a[j];

suml=sumyl+summl+dl;

for(i=0;i<y;i++)

(

if((i%4==0&&i%100!=0)||i%400==0)

sumy=sumy+366;

elsesumy=sumy+365;

)

for(j=0;j<m-l;j++)

summ=summ+a[j];

sum=sumy+summ+d;

s=suml-sum;

if(s>0)printf(z,距離今天已過%-8d天1\n”,s);

if(s<0)printf。|距離今天還有%-8d天1\nz,,-s);

if(s==0)printf(z/1你所查詢的就是今天1\n");

/*計算要查詢的這一天是星期兒

s=0;

for(i=0;i<m-l;i++)

s=s+a[i];

s=s+d;

w=(y-l+(y-1)/4-(y-l)/100+(y-1)/400+s)%7;

switch(w)

{case1:printf(z,星期一\n/z);break;

case2:printfC1星期二|\n〃);break;

case3:printfC星期三I\n〃);break;

case4:printf(z,|星期四|\n〃);break;

case5:printf(z,星期五|\n〃);break;

case6:printf(,z星期六I\n〃);break;

case0:printf(,z|星期天I\n〃);break;

/*查看該日是否有節(jié)日

/

^r**T**v**7**r**r*^v*^r**?**7**T**T**r**7**1**r**T**7**!**7^^v*^7**p*T^*T**7**1^<p<p*p<p/

if(m==2&&d==2)printf(/z|世界濕地日I\n");

if(m==2&&d==13)printf("|明天情人節(jié)了|\n");

if(m==2&&d==14)printf("|今天是情人節(jié)了I\n");

if(m==3&&d==l)printf("z|國際海豹曰I\n");

if(m==3&&d==3)printf(z/1全國愛耳日I'n");

if(m==3&&d==8)printf(z/!3.8婦女節(jié)I\n");

if(m==3&&d==12)printf("|植樹節(jié)I\n");

if(m==3&&d==14)printf("國際警察日I\n");

if(m==3&&d==15)printf(z/|消費者權(quán)益日I\n");

if(m==3&&d==17)printf(,?|國際航海日I\n");

if(m==3&&d==21)printfC|世界森林日I\n");

if(m==3&&d==23)printfC|世界氣象日|\n");

if(m==3&&d==24)printfC|世界防治結(jié)核病日|\n");

if(m==4&&d==l)printf("|愚人節(jié),小心上當I\n");

if(m==4&&d==7)printfC|世界衛(wèi)生日|\n");

if(m==4&&d==8)printf(/z復活節(jié)I'n");

if(m==4&&d==13)printf("|黑色星期五I\n");

if(m==5&&d==l)printf(z/1勞動節(jié)放假|(zhì)\n/z);

if(m==5&&d==4)printf("|青年節(jié)I\n");

if(m==5&&d==8)printf("|世界紅十字日I\n");

if(m==5&&d==12)printf(,z|國際護士節(jié)I\n");

if(m==5&&d==5)printfC|近日注意母親節(jié)|\n");

if(m==5&&d==15)printf(/z|國際家庭日I\n");

if(m==5&&d==31)printf(/?|世界無煙日|\nz/);

if(m==6&&d==l)printf("|國際兒童節(jié)I\n");

if(m==6&&d==5)printf("|世界環(huán)境日I'n");

if(m==6&&d==26)printf("|國際禁毒日I'n");

if(m==6&&d==6)printf("|全國愛眼日|\n");

if(m==6&&d==13)printfC|近期注意父親節(jié)|\n");

if(m==7&&d==l)printf("|香港回歸紀念日|\n/z);

if(m==7&&d==7)printfC(抗日戰(zhàn)爭紀念日|\n");

if(m==7&&d==ll)printf("世界人口日I'n");

if(m==8&&d==l)printf(z/八一建軍節(jié)I'n");

if(m==8&&d==8)printf

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論