




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C語言課程設計報告 -萬年歷設計人:賈偉濤學號:2013010912班級:13電信應電班指導老師:張偉日期:2014年6月9日內容提要通過大一下學期對C語言的學習,了解到了很多C語言的相關知識。學習的過程雖然有很多困惑,但是當自己能夠獨立的看懂和獨立的完成一個簡單的程序時,心中就會收獲無限的喜悅和成就感。我雖然可以看懂一些簡單的程序,編寫一些簡單的計算程序,更多的是學會了一種思想編程,它讓我在去思考很多日常生活中的事物是怎么樣通過一個個小小的函數實現功能的,激發我對c語言的興趣。C語言是近年在國內外得到迅速推廣應用的一種機器語言。C語言功能豐富,表達能力強,使用靈活方便,應用面廣,目標程序效率
2、高,可移植性好,既具有高級語言的優點,又具有低級語言的許多特點。因此,C語言特別適合于編寫各種軟件。在這次的課程設計中我將把日常生活中最經常接觸的日歷的查詢,利用C語言的程序編成一個簡單的萬年歷查詢系統。通過這個小小的系統可以實現很多功能。在程序中你能看到很多熟悉的C語言關鍵字,同時也加入了很多自己課外了解到的一些關鍵字。在不斷的調試中最終才獲得最為完整的程序。接下來就是我的C語言課程設計的具體內容來了,大家拭目以待吧!目錄一、 系統功能和數據說明-二、 問題分析-三、 程序總體設計及功能結構框圖-四、 程序流程圖-五、 源程序代碼-六、使用說明-七、個人心得-八、參考文獻-一、系統功能和數據
3、說明(一)功能簡介在日常生活中能接觸到很多不同類型的日歷,在日歷上我們通常希望它能簡單明了的給我們最想要的日期信息。在我的萬年歷系統當中,就是將日歷,月歷做的簡單明了,很方便我們的查詢使用。下面是它要實現的一些基本功能:C語言編寫萬年歷查詢系統:(1)輸入年份,判斷是否為閏年(2)輸入年月日,判斷是星期幾(3)輸入年份,打印出12個月的月歷(4)輸入年月,打印出本月的日歷另新增:(1) 對輸入指令錯誤的提示(2) 加入了調用系統時間函數(3) 還添加了歡迎界面并進行界面優化(二)程序中的數據說明int days12 = 31, 28, 31, 30, 31, 30, 31, 31, 30, 3
4、1, 30, 31;這是定義的關于每個月天數的數組,根據大小月以及二月份的特殊情況將每個月的天數變為數組中的元素存入數組當中。其中days1=28,是將閏年二月的天數28天作為初始元素存入。在經過yearMonth函數后就可以給days1中存入正確的月天數。 tm *tp;char *week="一","二","三","四","五","六","日" 這兩組數據設計都利用了指針定義,利用指針可以提高程序的可讀性,可以更方便使用。這兩個數組的作用是用于調用系統
5、時間,而定義的星期數組*week和年月日變量*tp,由于還沒學到指針,在這里查閱了很多資料,并也借鑒了前輩們的很多程序。二、問題分析對于閏年的判斷,能被4整除但不能被100整除,或者能被400整除的年份為閏年,否則為平年。日期的查詢,就是直接打印改天所在月份的月歷。程序難點在于判斷星期,但根據公式,我們可以很容易地用年月日推斷出星期: weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;其中year:要查詢的年份day:從該年的一月一日起到該天的天數weekday:得出的星期數。在打印月歷時,只要知道第一天的星
6、期,就可以依次輸入后面的日期,通過一定長度輸出日期,在遇到某天時星期天時,就換行輸出,因此可以按照月歷的格式輸出。對于初始輸入當前系統時間,可以通過<time.h>中的time 和localtime函數取出系統時間進行初始化。判斷日期是否合法,if(year>=3000|year<=1600)|(month>=12|month<0)|(day>=31|day<=0)system("CLS");printf(" 輸入錯誤,系統及即將返回!");Sleep(3000);goto tz;可以先判斷年月日是否有小于
7、0的值,月和日是否有超出最大值12和31 ,如果通過此判斷合法,再判斷是否時閏年,如果時閏年,則判斷二月份是否滿足要求,閏年二月份不能超過29天,平年二月份不能超過28天。在查詢過程中,如果發現輸入不合法或者不滿足輸入要求,則提示錯誤,并返回主菜單。三、程序總體設計及功能結構框圖(一)功能結構框圖系統時間顯示主菜單星期查詢輸出年歷輸出月歷閏年判斷歡迎使用 (二)程序設計頭文件:#include<stdio.h>/標準輸入輸出函數#include<stdlib.h>/清屏函數system()#include<windows.h>/延時函數Sleep()#inc
8、lude<time.h> /調用系統時間函數time()在程序中運用了大量的自定義函數,都涉及為了使程序更簡介明了。其中有:int isLeapYear(int year)/判斷是否為閏年void hy()/歡迎信息; void Time() /獲取系統時間;int whichWeekday(int year, int month, int day)/判斷某天為星期幾; void yearMonth(int year, int month)/打印某年某月的月歷;void monthDay(int year)/輸入年份,打出個月歷;void menu()/主菜單;void main(
9、)/主函數;這些函數的定義及其相應的內部程序共同構筑起了這個萬年歷查詢系統的總程序。其中isLeapYear函數是用來判斷輸入的年份是否為閏年,實現了預計功能的第一個方面;whichWeekday函數則是為了實現判斷星期而編寫的;yearMonth函數則是為了實現月歷而編寫的;Time()函數則是為調用系統時間而編寫,該Time()函數采用指針形式定義了*week數組和*tp變量;yearMonth,monthDay 這兩個函數的共同使用就能夠完成輸出年歷的功能。四、程序流程圖(一)總流程圖開始計算是否為閏年計算星期數按鍵1?按鍵3和44輸出是否為閏年輸出星期數計算編輯接收到的數據輸出具體年歷
10、和月歷按鍵5?是是是是計算是否為閏年計算星期數按鍵2?是是是計算是否為閏年計算星期數是是是是結束 退出(二)算法說明1. 總天數的算法:isLeapYear函數的使用,判斷出了輸入年份是否為閏年的信息。判斷一年是否為閏年的方法是:該年分而能被4整除但不能被100整除,或者是能被400整除。判斷是否為閏年的流程圖:2.輸入日期計算星期幾:利用whichWeekday函數可以判斷出星期,然后對于輸入的日期可以通過公式weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7計算就可以輸出相應的星期數。int whichWe
11、ekday(int year, int month, int day)/判斷某天為星期幾int weekday;if (month = 1 | month = 2)/公式中要把月和月換成是上一年的月和月 month += 12; year -= 1; weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7; /計算星期的公式return weekday+1;3. 對輸入信息的匯總:void yearMonth(int year, int month)/打印某年某月的月歷,void monthDay(int year
12、)/輸入年份,打出個月歷;通過這兩個函數可以將輸入數據的具體信息通過完整日歷的形式表示出來。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");printf(" 星期一星期二星期三星期四星期五星期六星期天n");if(isLeapYear(year) &&a
13、mp; 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");pr
14、intf("%6d ", i);printf("n-n");void monthDay(int year)/輸入年份,打出個月歷int i;for(i = 0; i < 12; i +)yearMonth(year,i+1);printf("nn");五、源程序代碼#include<stdio.h>/標準輸入輸出函數#include<stdlib.h>/清屏函數system()#include<windows.h>/延時函數Sleep()#include<time.h> /調用系統
15、時間函數time()int days12=31,28,31,30,31,30,31,31,30,31,30,31;/每月的天數,閏年二月要加int isLeapYear(int year)/判斷是否為閏年if(year%4 = 0 && year%100 != 0 | year%400 = 0) return 1;else return 0;void hy()/歡迎信息printf("n 歡迎使用萬年歷查詢系統nn"); Sleep(700);/延時毫秒printf(" 祝您每天好心情!nnn"); Sleep(1000);printf(
16、" 版本:v2.0nnn");Sleep(1000);printf(" 正在進入功能菜單,請稍候n");Sleep(5000);/延時秒void Time() /獲取系統時間 time_t t;struct tm *tp;static char *week="一","二","三","四","五","六","日"t=time(NULL);tp=localtime(&t);printf("t n&quo
17、t;);printf("tt 系統時間日期:%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);printf("t n");int whichWeekday(int year, int month, int day)/判斷某天為星期幾in
18、t weekday;if (month = 1 | month = 2)/公式中要把月和月換成是上一年的月和月 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(
19、"n %d年%d月n",year,month);printf("-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);pr
20、intf(" ");printf("n");for(i = 9-weekday; i <= daysmonth-1; i +,j+)if(j = 7)j = 0;printf("n");printf("%6d ", i);printf("n-n");void monthDay(int year)/輸入年份,打出個月歷int i;for(i = 0; i < 12; i +)yearMonth(year,i+1);printf("nn");void menu()/主
21、菜單printf("-n");printf(" ");printf(" 萬年歷查詢系統nn");printf(" *n");printf(" * 1、輸入年份,判斷是否為閏年 *n");printf(" * 2、輸入年月日,判斷該日為星期幾 *n");printf(" * 3、輸入年份,打出個月歷 *n");printf(" * 4、輸入月份,打出該月的日歷 *n");printf(" * 5、退出 *n");pri
22、ntf(" *nn");void main()/主函數int num,year,month,day,weekday;char ch;while(1)system("CLS");/清屏hy();/歡迎信息tz:system("CLS");/goto語句跳轉菜單標志Time();/調用系統函數menu();/菜單printf("請輸入對應操作:");scanf("%d", &num);switch(num)case 1:system("CLS");t1:printf(&q
23、uot;n請輸入年份,確定按回車(格式:):n");/goto語句標志scanf("%d", &year);if(year>=3000|year<=1600)system("CLS");printf(" 輸入錯誤,系統及即將返回!");Sleep(3000);goto tz;if(isLeapYear(year)printf("%d年是閏年。n",year);elseprintf("%d年不是閏年。n",year);printf("提示:n如繼續運行請按n
24、如回首菜單請按n如退出請按n請選擇:"); ch=getch(); if(ch='1') goto t1;/goto語句返回的t1 if(ch='2')goto tz;/執行主函數if(ch='0')exit(0);/退出break;case 2:system("CLS");t2:printf("n請輸入年月日,以空格隔開,確定按回車(格式:6 10):n");scanf("%d%d%d", &year,&month,&day);if(year>=
25、3000|year<=1600)|(month>=12|month<0)|(day>=31|day<=0)system("CLS");printf(" 輸入錯誤,系統及即將返回!");Sleep(3000);goto tz;weekday = whichWeekday(year, month, day);printf("這天是星期%d。nn",weekday);printf("提示:n如繼續運行請按n如回首菜單請按n如退出請按n請選擇:"); ch=getch(); if(ch=
26、9;1') goto t2; if(ch='2')goto tz;if(ch='0')exit(0);break;case 3:system("CLS");t3:printf("n請輸入年份,確定按回車(格式:):n");scanf("%d", &year);if(year>=3000|year<=1600)system("CLS");printf(" 輸入錯誤,系統及即將返回!");Sleep(3000);goto tz;monthD
27、ay(year);printf("提示:n如繼續運行請按n如回首菜單請按n如退出請按n請選擇:"); ch=getch(); if(ch='1') goto t3; if(ch='2')goto tz;if(ch='0')exit(0);break;case 4:system("CLS");t4:printf("n請輸入年份(格式:):n");scanf("%d", &year);printf("請輸入月份,確定按回車(格式:):n");s
28、canf("%d", &month);if(year>=3000|year<=1600)|(month>=12|month<0)system("CLS");printf(" 輸入錯誤,系統及即將返回!");Sleep(3000);goto tz;yearMonth(year,month);if(isLeapYear(year) && month = 2)/如果年份為閏年,則月加天days1 = days1 + 1;printf("提示:n如繼續運行請按n如回首菜單請按n如退出請按n請選擇:");ch=getch();if(ch='1') goto t4;i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄭州房屋預售管理辦法
- 西安藥品發放管理辦法
- 工商注冊驗資管理辦法
- 如何提高公廁管理辦法
- 肯德基美術課件
- 培訓師精彩課件
- 兒科護理技能培訓課件
- 分班重點數學試卷
- 高郵汪曾祺學校數學試卷
- 贛職22年數學試卷
- 氣體滅火系統驗收表1
- 新北師大版六年級上冊數學全冊教學課件
- DB1309T 256-2021 榆三節葉蜂綜合防治技術規程
- 人教版五四制六下地理復習提綱詳細筆記
- 燃氣工程計價規則及定額應用
- 大氣污染控制工程課程設計-某廠酸洗硫酸煙霧治理設施設計
- 人教版小學三年級下冊英語復習課件(164頁PPT)
- 300MW單元機組過熱汽溫控制系統的設計
- (完整版)銷售人員銷售能力測試及答案解析
- 頂管施工頂管作業安全技術交底
- 上海市城鎮排水管道非開挖修復工程施工質量驗收規程試行520
評論
0/150
提交評論