課程設(shè)計(jì)用C語言設(shè)計(jì)一個(gè)歷系統(tǒng)_第1頁(yè)
課程設(shè)計(jì)用C語言設(shè)計(jì)一個(gè)歷系統(tǒng)_第2頁(yè)
課程設(shè)計(jì)用C語言設(shè)計(jì)一個(gè)歷系統(tǒng)_第3頁(yè)
課程設(shè)計(jì)用C語言設(shè)計(jì)一個(gè)歷系統(tǒng)_第4頁(yè)
課程設(shè)計(jì)用C語言設(shè)計(jì)一個(gè)歷系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)課程 程序設(shè)計(jì)基礎(chǔ) 題目 用C語言設(shè)計(jì)一個(gè)年歷系統(tǒng) 1 問題要求及任務(wù)描述1.1 題目要求用C語言設(shè)計(jì)一個(gè)年歷系統(tǒng)1.2 主要任務(wù)年歷系統(tǒng)首先對(duì)于輸入的任一年,能夠給出該年每月的日期及實(shí)際周幾的對(duì)應(yīng)情況,并與實(shí)際的星期數(shù)垂直對(duì)齊,如下表所示(當(dāng)輸入2004時(shí)顯示如下):Input the year:2004The calendar of the year 2004. Januray 1 February 2= = Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 1 2 3 1 2 3 4 5 6 7 4 5 6 7 8 9

2、 10 8 9 10 11 12 13 14 11 12 13 14 15 16 17 15 16 17 18 19 20 21 18 19 20 21 22 23 24 22 23 24 25 26 27 28 25 26 27 28 29 30 31 29= = March 3 April 4= = Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 1 2 3 7 8 9 10 11 12 13 4 5 6 7 8 9 10 14 15 16 17 18 19 20 11 12 13 14 15 16 1

3、7 21 22 23 24 25 26 27 18 19 20 21 22 23 24 28 29 30 31 25 26 27 28 29 30= =功能要求 : 輸入任一年將顯示出該年的所有月份日期,對(duì)應(yīng)的星期,輸出的格式如上表要求(注意閏年情況); 輸入任意日期(包括年、月、日,格式有yyy/mm/dd、dd/mm/yyyy、mm/dd/yyyy、和yyyy,mm,dd、mm,dd,yyyy、dd,mm,yyyy六種基本情況),要求能夠顯示出該日期是本年的哪一周,是星期幾。2 解決問題的主要思路和方法2.1 關(guān)鍵問題1、輸入任一年將顯示出該年的所有月份日期,對(duì)應(yīng)的星期,但是要并排月份,還

4、要注意閏年情況。2、一個(gè)月份中開始和最后對(duì)應(yīng)的星期可能是上個(gè)月或下個(gè)月的天數(shù),但是要空出來。3、輸入任意日期,然后要顯示出該日期是本年的哪一周,星期幾。2.2 擬采用解決問題的方法1、先判斷輸入的年份是否是閏年。2、用基姆拉爾森計(jì)算公式去計(jì)算某年第一天是星期幾。3、月份的日子可以用for語句去實(shí)現(xiàn),特別的,一個(gè)月份中開始和最后對(duì)應(yīng)的星期可能是上個(gè)月或下個(gè)月的天數(shù),因此要用for語句去騰空。4、根據(jù)輸入的日期和基姆拉爾森公式的變換得出能計(jì)算出該日期是本年的哪一周,是星期幾的公式。5、熟悉運(yùn)用一些沒學(xué)過的函數(shù),如strcat,sprintf,strlen函數(shù)。2.3 主要算法和處理流程圖3 程序?qū)?/p>

5、現(xiàn)3.1 程序?qū)崿F(xiàn)時(shí)應(yīng)考慮的問題選擇選擇其他數(shù)字則輸入錯(cuò)誤選擇2時(shí)調(diào)用函數(shù)find_day();選擇1時(shí)調(diào)用函數(shù)calendar();選擇 3.2 主要源代碼及說明int judge( int year, int month ) /定義judge函數(shù) if( month = 1 | month = 3 | month = 5 | month = 7 | month = 8 | month = 10 | month = 12 ) return( 1 );/返回1時(shí),表示天數(shù)為31天的月份 else if( month = 2 ) if( year % 4 != 0 | year % 100 =

6、0 && year % 400 != 0 ) /判斷閏年,真為平年 return( 2 ); else return( 3 ); else return( 4 );void calendar()int year, i, j, a, n, m, k, line; /定義變量 const char month 12 12 = "January 1", "February 2", "March 3", "April 4", "May 5", "June 6", &q

7、uot;July 7", "August 8", "September 9", "October 10", "November 11", "December 12" ; char tempOut 2 6 40 , temp 10 ;/定義一個(gè)三維數(shù)組 tempOut左0右1每月第幾行每行字符明細(xì)。 printf( "please inter the year:" ); /輸入所求年份 scanf( "%d", &year ); print

8、f( "n" ); printf( "the calendar of the year%d.n", year ); a =(year+(year-1)/4-(year-1)/100+(year-1)/400)%7; /判斷每年的第一天是周幾 當(dāng)a值為0的時(shí)候,對(duì)應(yīng)周日 for( i = 0; i < 12; i += 1 )/月份循環(huán) memset( tempOut, 0, sizeof( tempOut ) );/memset函數(shù)的作用是在一段內(nèi)存塊中填充某個(gè)給定的值,它是對(duì)數(shù)組進(jìn)行清零操作 printf( "%-33s%sn"

9、;, monthi, monthi + 1 ); /輸出月份名,-33是先左對(duì)齊再留33個(gè)空格 printf( "= =n" ); printf( " Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Satn" ); AGAIN: line = 0; n = judge( year, i + 1 ); / 調(diào)用函數(shù),n值為1234,代表每月為多少天 for( k = 0; k < a; k + ) / a代表每年第一天,后為每月前空格天數(shù) strcat( tempOut i % 2 0 , &

10、quot; " );/運(yùn)用strcat函數(shù)把4個(gè)空格接到tempouti%20 for( m = 1; m < 32; m+ )/每月天數(shù)循環(huán) sprintf( temp, "%4d", m ); /輸出格式占4列,右端對(duì)齊 strcat( tempOut i % 2 line , temp );/運(yùn)用strcat函數(shù)把temp數(shù)組拷貝到tempout所指的末尾,且tempout有足夠的空間存放temp的內(nèi)容 if( ( a + m ) % 7 = 0 ) line +; if( n = 1 && m = 31 ) break; /從此處至以

11、下執(zhí)行整月停止 else if( n = 2 && m = 28 ) break; else if( n = 3 && m = 29 ) break; else if( n = 4 && m = 30 ) break; a = ( a + m ) % 7; / a為每月末行天數(shù) if( i % 2 = 0 ) i +; goto AGAIN; else for( j = 0; j < 6; j + ) if( strlen( tempOut 0 j ) = 0 && strlen( tempOut 1 j ) = 0 ) b

12、reak;/運(yùn)用strlen函數(shù)判斷檢查左右列是否都沒有第六行,如果是就可以省去空行的輸出了。 printf( "%-33s%sn", tempOut 0 j , tempOut 1 j ); printf( "= =nn" );/輸出左邊的字符串,長(zhǎng)度33,使得右邊字串對(duì)齊。 void find_day()int a,day,month,year,sum,leap,S,k,W;/定義變量printf("n請(qǐng)輸入年月日(格式如2004 11 1):n");scanf("%d%*c%d%*c%d",&year

13、,&month,&day);switch(month)case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf(

14、"data error");break; sum=sum+day; if(year%400=0|(year%4=0&&year%100!=0)/判斷閏年還是平年 leap=1; else leap=0; if(leap=1&&month>2) sum+; S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7;/S/7的系數(shù)就是星期數(shù) a=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;k=(sum+a)%7;/判斷k能否被7整除,是否有余數(shù)

15、,有余數(shù)則周數(shù)+1if(k=0) W=(sum+a)/7;/W代表第幾周,特別的是從星期日到星期一,而不是從星期一到星期日 printf("第%d周",W);elseW=(sum+a)/7;W=W+1;printf("第%d周",W); switch(S) case 1:printf("星期一n");break; case 2:printf("星期二n");break; case 3:printf("星期三n");break; case 4:printf("星期四n");br

16、eak; case 5:printf("星期五n");break; case 6:printf("星期六n");break; case 0:printf("星期日n");break;printf("n");4 測(cè)試4.1 測(cè)試結(jié)果及分析5 小結(jié)5.1本問題解決方法及程序?qū)崿F(xiàn)小結(jié)1、用基姆拉爾森計(jì)算公式去計(jì)算某年第一天是星期幾a=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;/在公式中year表示年數(shù),公式由百度搜索得出2、為了并排月份,定義了一個(gè)三維數(shù)組char tempOut 2 6 40 , temp 10 ;/ tempOut左0右1每月第幾行每行字符明細(xì)。3、運(yùn)用memset、strcat、sprintf函數(shù):memset( tempOut, 0, sizeof( tempOut ) );/memset函數(shù)的作用是在一段內(nèi)存塊中填充某個(gè)給定的值,它是對(duì)數(shù)組進(jìn)行清零操作。strcat( tempOut i % 2 0 , " "

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論