c語言課程設(shè)計報告萬年歷最詳細(xì)_第1頁
c語言課程設(shè)計報告萬年歷最詳細(xì)_第2頁
c語言課程設(shè)計報告萬年歷最詳細(xì)_第3頁
c語言課程設(shè)計報告萬年歷最詳細(xì)_第4頁
c語言課程設(shè)計報告萬年歷最詳細(xì)_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C語言課程設(shè)計報告 萬年歷設(shè)計人:賈偉濤學(xué)號: 2013010912班級: 13 電信應(yīng)電班指導(dǎo)老師:張偉日期: 2014年6月 9日內(nèi)容提要通過大一下學(xué)期對 C 語言的學(xué)習(xí),了解到了很多 C語言的相關(guān)知識。學(xué)習(xí)的過 程雖然有很多困惑,但是當(dāng)自己能夠獨立的看懂和獨立的完成一個簡單的程序時, 心中就會收獲無限的喜悅和成就感。我雖然可以看懂一些簡單的程序,編寫一些簡 單的計算程序,更多的是學(xué)會了一種思想編程,它讓我在去思考很多日常生活 中的事物是怎么樣通過一個個小小的函數(shù)實現(xiàn)功能的,激發(fā)我對 c 語言的興趣。C語言是近年在國內(nèi)外得到迅速推廣應(yīng)用的一種機(jī)器語言。C 語言功能豐富, 表達(dá)能力強(qiáng), 使用

2、靈活方便, 應(yīng)用面廣, 目標(biāo)程序效率高, 可移植性好, 既具有高級語 言的優(yōu)點,又具有低級語言的許多特點。因此,C語言特別適合于編寫各種軟件。在這次的課程設(shè)計中我將把日常生活中最經(jīng)常接觸的日歷的查詢,利用語言的程序編成一個簡單的萬年歷查詢系統(tǒng)。通過這個小小的系統(tǒng)可以實現(xiàn)很多功 能。在程序中你能看到很多熟悉的 C 語言關(guān)鍵字,同時也加入了很多自己課外了解 到的一些關(guān)鍵字。在不斷的調(diào)試中最終才獲得最為完整的程序。接下來就是我的 C 語言課程設(shè)計的具體內(nèi)容來了,大家拭目以待吧!目錄一、系統(tǒng)功能和數(shù)據(jù)說明 二、問題分析 三、程序總體設(shè)計及功能結(jié)構(gòu)框圖 四、程序流程圖 五、源程序代碼 六、使用說明 七、

3、個人心得 八、參考文獻(xiàn) 一、系統(tǒng)功能和數(shù)據(jù)說明(一)功能簡介在日常生活中能接觸到很多不同類型的日歷, 在日歷上我們通常希望它能簡單明了的給我們最想要的日期信息。在我的萬年歷系統(tǒng)當(dāng)中,就是將日歷,月歷做的簡單明了,很方便我們的查詢使用。下面是它要實現(xiàn)的一些基本功能:C語言編寫萬年歷查詢系統(tǒng):(1) 輸入年份,判斷是否為閏年(2) 輸入年月日,判斷是星期幾(3) 輸入年份,打印出 12 個月的月歷(4) 輸入年月,打印出本月的日歷另新增:(1) 對輸入指令錯誤的提示(2) 加入了調(diào)用系統(tǒng)時間函數(shù)(3) 還添加了歡迎界面并進(jìn)行界面優(yōu)化(二)程序中的數(shù)據(jù)說明int days12 = 31, 28, 3

4、1, 30, 31, 30, 31, 31, 30, 31, 30, 31;這是定義的關(guān)于每個月天數(shù)的數(shù)組,根據(jù)大小月以及二月份的特殊情況將每個 月的天數(shù)變?yōu)閿?shù)組中的元素存入數(shù)組當(dāng)中。其中 days1=28, 是將閏年二月的天數(shù) 28 天作為初始元素存入。在經(jīng)過 yearMonth 函數(shù)后就可以給 days1 中存入正確的 月天數(shù)。 tm *tp;char *week= 一, 二, 三 , 四, 五, 六, 日 ;這兩組數(shù)據(jù)設(shè)計都利用了指針定義,利用指針可以提高程序的可讀性,可以更 方便使用。 這兩個數(shù)組的作用是用于調(diào)用系統(tǒng)時間, 而定義的星期數(shù)組 *week 和年 月日變量 *tp ,由于還

5、沒學(xué)到指針,在這里查閱了很多資料,并也借鑒了前輩們的很 多程序。二、問題分析對于閏年的判斷, 能被 4整除但不能被 100整除,或者能被 400 整除的年份 為閏年,否則為平年。日期的查詢,就是直接打印改天所在月份的月歷。程序難點在于判斷星期, 但根據(jù)公式, 我們可以很容易地用年月日推斷出星 期:weekday=(day+2*month+3*(month+1)/5+year+year/4- year/100+year/400)%7;其中 year :要查詢的年份day:從該年的一月一日起到該天的天數(shù)weekday:得出的星期數(shù)。在打印月歷時, 只要知道第一天的星期, 就可以依次輸入后面的日期,

6、 通過一定長度輸出日期, 在遇到某天時星期天時, 就換行輸出, 因此可以按照月歷的格式輸出對于初始輸入當(dāng)前系統(tǒng)時間, 可以通過 中的 time 和 localtime 函數(shù)取出系統(tǒng)時間進(jìn)行初始化判斷日期是否合法, if(year=3000|year=12|month=31|day=0)system(CLS);printf( 輸入錯誤,系統(tǒng)及即將返回!);Sleep(3000);goto tz;可以先判斷年月日是否有小于 0 的值,月和日是否有超出最大值 12 和 31 ,如 果通過此判斷合法, 再判斷是否時閏年, 如果時閏年, 則判斷二月份是否滿足要 求,閏年二月份不能超過 29 天,平年二月

7、份不能超過 28 天。在查詢過程中,如 果發(fā)現(xiàn)輸入不合法或者不滿足輸入要求,則提示錯誤,并返回主菜單。三、程序總體設(shè)計及功能結(jié)構(gòu)框圖一)功能結(jié)構(gòu)框圖星期查輸出年二)程序設(shè)計標(biāo)系準(zhǔn)統(tǒng)輸時入間輸顯出函數(shù)頭文件: #include/#include/ 清屏函數(shù) system() #include/ 延時函數(shù) Sleep() #include / 調(diào)用系統(tǒng)時間函數(shù) time ()在程序中運(yùn)用了大量的自定義函數(shù),都涉及為了使程序更簡介明了。其中有:int isLeapYear(int year)/ 判斷是否為閏年void hy()/ 歡迎信息;void Time() / 獲取系統(tǒng)時間;int which

8、Weekday(int year, int month, int day)/ 判斷某天為星期幾;void yearMonth(int year, int month)/打印某年某月的月歷;void monthDay(int year)/ 輸入年份,打出個月歷;void menu()/ 主菜單;void main()/ 主函數(shù);這些函數(shù)的定義及其相應(yīng)的內(nèi)部程序共同構(gòu)筑起了這個萬年歷查詢系 統(tǒng)的總程序。 其中 isLeapYear 函數(shù)是用來判斷輸入的年份是否為閏年, 實現(xiàn)了預(yù)計 功能的第一個方面; whichWeekday 函數(shù)則是為了實現(xiàn)判斷星期而編寫的; yearMonth 函數(shù)則是為了實現(xiàn)

9、月歷而編寫的; Time()函數(shù)則是為調(diào)用系統(tǒng)時間而編寫, 該 Time ()函數(shù)采用指針形式定義了 *week 數(shù)組和 *tp 變量 ; yearMonth ,monthDay 這兩個 函數(shù)的共同使用就能夠完成輸出年歷的功能。四、程序流程圖(一)總流程圖(二)算法說明1. 總天數(shù)的算法:isLeapYear 函數(shù)的使用,判斷出了輸入年份是否為閏年的信息。判斷一年是否為閏年的方法是:該年分而能被 4整除但不能被 100 整除,或者是能被 400整除。判斷是否為閏年的流程圖:2. 輸入日期計算星期幾:利用 whichWeekday 函數(shù)可以判斷出星期,然后對于輸入的日期可以通過公式weekday

10、=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7計 算就可以輸出相應(yīng)的星期數(shù)。int whichWeekday(int year, int month, int day)/判斷某天為星期幾int weekday;if (month = 1 | month = 2)/公式中要把月和月?lián)Q成是上一年的月和月month += 12;year -= 1;weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7; / 計算星期的公式return weekda

11、y+1;3. 對輸入信息的匯總:void yearMonth( int year, int month) / 打 印 某 年 某 月 的 月 歷 , void monthDay(int year) / 輸入年份,打出個月歷; 通過這兩個函數(shù)可以將輸入數(shù)據(jù)的 具體信息通過完整日歷的形式表示出來。void yearMonth(int year, int month)/打印某年某月的月歷int i,j=0;int weekday; / 計算這個月第一天是星期幾weekday = whichWeekday(year, month, 1);printf(n%d 年%d月n,year,month);pri

12、ntf( n);printf( 星期一星期二星期三星期四星期五星期六星期天 n);if(isLeapYear(year) & month = 2) days1 = days1 + 1;printf( );for(i = 1; i weekday; i +)printf( );for(i = 0; i 8 - weekday; i +)printf(%6d, i+1);printf( );printf(n );for(i = 9-weekday; i = daysmonth-1; i +,j+)if(j = 7)j = 0;printf(n );printf(%6d , i);n);每月的天數(shù),

13、閏年printf(nvoid monthDay(int year)/輸入年份,打出個月歷int i;for(i = 0; i 12; i +)yearMonth(year,i+1);printf(nn);五、源程序代碼#include/ 標(biāo)準(zhǔn)輸入輸出函數(shù)#include/ 清屏函數(shù) system()#include/ 延時函數(shù) Sleep()#include / 調(diào)用系統(tǒng)時間函數(shù) time ()int days12=31,28,31,30,31,30,31,31,30,31,30,31;/二月要加int isLeapYear(int year)/判斷是否為閏年if(year%4 = 0 & y

14、ear%100 != 0 | year%400 = 0)return 1;elsereturn 0;void hy()/ 歡迎信息printf(nSleep(700);/ 延時毫秒printf(Sleep(1000);printf(Sleep(1000);歡迎使用萬年歷查詢系統(tǒng) nn);祝您每天好心情! nnn);版本: v2.0nnn);printf(正在進(jìn)入功能菜單,請稍候n);Sleep(5000);/ 延時秒void Time() / 獲取系統(tǒng)時間time_t t;struct tm *tp;static char *week=一, 二, 三, 四, 五, 六 , 日;t=time(N

15、ULL);tp=localtime(&t);printf(t n);printf(tt 系 統(tǒng) 時 間 日 期 :%d 年 %d 月 %d 日 ,tp-tm_year+1900,tp-tm_mon+1,tp-tm_mday);printf( %d:%d:%d ,tp-tm_hour,tp-tm_min,tp-tm_sec);printf( 星期 %sn,week(tp-tm_wday)-1);n);printf(tint whichWeekday(int year, int month, int day)/判斷某天為星期幾int weekday;if (month = 1 | month =

16、2)/公式中要把月和月?lián)Q成是上一年的月和月month += 12;year -= 1;weekday=(day+2*month+3*(month+1)/5+year+year/4- year/100+year/400)%7; / 計算星期的公式return weekday+1;void yearMonth(int year, int month)/ 打印某年某月的月歷int i,j=0;int weekday; / 計算這個月第一天是星期幾 weekday = whichWeekday(year, month, 1);printf(n%d 年%d月n,year,month);printf( n

17、);printf( 星期一星期二星期三星期四星期五星期六星期天 n);if(isLeapYear(year) & month = 2) days1 = days1 + 1;printf( );for(i = 1; i weekday; i +)printf( );for(i = 0; i 8 - weekday; i +)printf(%6d, i+1);printf( ););printf(nfor(i = 9-weekday; i = daysmonth-1; i +,j+)if(j = 7)j = 0;printf(n );printf(%6d , i);printf(n n);void

18、 monthDay(int year)/ 輸入年份,打出個月歷int i;for(i = 0; i =3000|year=3000|year=12|month=31|day=3000|year=3000|year=12|month0)system(CLS);printf( 輸入錯誤,系統(tǒng)及即將返回! );Sleep(3000);goto tz;yearMonth(year,month);if(isLeapYear(year) & month = 2)/ 如果年份為閏年,則月加天出請按 n 請選擇:days1 = days1 + 1;printf( 提示 :n 如繼續(xù)運(yùn)行請按 n 如回首菜單請按 n 如退 );ch=getch();if(ch=1)goto t4;if(ch=2)goto tz;if(ch=0)exit(0);break;case 5:printf(n 是否確定退出? n); printf(確定請按,取消請按 );ch=getch();if(ch = 2)goto tz;elseprintf( );exit(0);/ 退出break;default:system(CLS);printf( 您的輸入的指令有誤 , 請重新輸入 !nn); printf( 提示 :n 如回首菜單請按

溫馨提示

  • 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

提交評論