版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言課程設(shè)計(jì)報(bào)告萬年歷設(shè)計(jì)人:賈偉濤學(xué)號(hào):2013010912班級(jí):13電信應(yīng)電班指導(dǎo)老師:張偉日期:2014年6月9日內(nèi)容提要通過大一下學(xué)期對(duì)C語言的學(xué)習(xí),了解到了很多C語言的相關(guān)知識(shí)。學(xué)習(xí)的過程雖然有很多困惑,但是當(dāng)自己能夠獨(dú)立的看懂和獨(dú)立的完成一個(gè)簡單的程序時(shí),心中就會(huì)收獲無限的喜悅和成就感。我雖然可以看懂一些簡單的程序,編寫一些簡單的計(jì)算程序,更多的是學(xué)會(huì)了一種思想一一編程,它讓我在去思考很多日常生活中的事物是怎么樣通過一個(gè)個(gè)小小的函數(shù)實(shí)現(xiàn)功能的,激發(fā)我對(duì)c語言的興趣。C語言是近年在國內(nèi)外得到迅速推廣應(yīng)用的一種機(jī)器語言。C語言功能豐富,表達(dá)能力強(qiáng),使用靈活方便,應(yīng)用面廣,目標(biāo)程序效率高,可移植性好,既具有高級(jí)語言的優(yōu)點(diǎn),乂具有低級(jí)語言的許多特點(diǎn)。因此,C語言特別適合于編寫各種軟件。在這次的課程設(shè)計(jì)中我將把日常生活中最經(jīng)常接觸的一一日歷的查詢,利用C語言的程序編成一個(gè)簡單的萬年歷查詢系統(tǒng)。通過這個(gè)小小的系統(tǒng)可以實(shí)現(xiàn)很多功能。在程序中你能看到很多熟悉的C語言關(guān)鍵字,同時(shí)也加入了很多自己課外了解到的一些關(guān)鍵字。在不斷的調(diào)試中最終才獲得最為完整的程序。接下來就是我的C語言課程設(shè)計(jì)的具體內(nèi)容來了,大家拭目以待吧!目錄一、系統(tǒng)功能和數(shù)據(jù)說明二、問題分析三、程序總體設(shè)計(jì)及功能結(jié)構(gòu)框圖四、程序流程圖五、源程序代碼六、使用說明七、個(gè)人心得八、參考文獻(xiàn)一、系統(tǒng)功能和數(shù)據(jù)說明(一)功能簡介在日常生活中能接觸到很多不同類型的日歷,在日歷上我們通常希望它能簡單明了的給我們最想要的日期信息。在我的萬年歷系統(tǒng)當(dāng)中,就是將日歷,月歷做的簡單明了,很方便我們的查詢使用。下面是它要實(shí)現(xiàn)的一些基本功能:C語言編寫萬年歷查詢系統(tǒng):輸入年份,判斷是否為閏年輸入年月日,判斷是星期幾輸入年份,打印出12個(gè)月的月歷輸入年月,打印出本月的日歷另新增:對(duì)輸入指令錯(cuò)誤的提示加入了調(diào)用系統(tǒng)時(shí)間函數(shù)還添加了歡迎界面并進(jìn)行界面優(yōu)化(二)程序中的數(shù)據(jù)說明①intdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};這是定義的關(guān)于每個(gè)月天數(shù)的數(shù)組,根據(jù)大小月以及二月份的特殊情況將每個(gè)月的天數(shù)變?yōu)閿?shù)組中的元素存入數(shù)組當(dāng)中。其中days[1]=28,是將閏年二月的天數(shù)28天作為初始元素存入。在經(jīng)過yearMonth函數(shù)后就可以給days[1]中存入正確的月天數(shù)。②tm*tp;char*week□={〃一〃,〃二〃,〃三〃,〃四〃,〃五〃,〃六〃,〃日〃};這兩組數(shù)據(jù)設(shè)計(jì)都利用了指針定義,利用指針可以提高程序的可讀性,可以更方便使用。這兩個(gè)數(shù)組的作用是用于調(diào)用系統(tǒng)時(shí)間,而定義的星期數(shù)組*week[]和年月日變量*tp,由于還沒學(xué)到指針,在這里查閱了很多資料,并也借鑒了前輩們的很多程序。二、問題分析對(duì)于閏年的判斷,能被4整除但不能被100整除,或者能被400整除的年份為閏年,否則為平年。日期的查詢,就是直接打印改天所在月份的月歷。程序難點(diǎn)在于判斷星期,但根據(jù)公式,我們可以很容易地用年月日推斷出星期:weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;其中year:要查詢的年份day:從該年的一月一日起到該天的天數(shù)weekday:得出的星期數(shù)。在打印月歷時(shí),只要知道第一天的星期,就可以依次輸入后面的日期,通過一定長度輸出日期,在遇到某天時(shí)星期天時(shí),就換行輸出,因此可以按照月歷的格式輸出。對(duì)于初始輸入當(dāng)前系統(tǒng)時(shí)間,可以通過<time.h>中的time和localtime函數(shù)取出系統(tǒng)時(shí)間進(jìn)行初始化。判斷日期是否合法,if((year>=3000||year<=1600)||(month>=12||month<0)||(day>=31||day<=0))(system(〃CLS〃);printf(-輸入錯(cuò)誤,系統(tǒng)及即將返回!");Sleep(3000);gototz;}可以先判斷年月日是否有小于0的值,月和日是否有超出最大值12和31,如果通過此判斷合法,再判斷是否時(shí)閏年,如果時(shí)閏年,則判斷二月份是否滿足要求,閏年二月份不能超過29天,平年二月份不能超過28天。在查詢過程中,如果發(fā)現(xiàn)輸入不合法或者不滿足輸入要求,則提示錯(cuò)誤,并返回主菜單。三、程序總體設(shè)計(jì)及功能結(jié)構(gòu)框圖(一)功能結(jié)構(gòu)框圖#include<stdlib.h>//清屏函數(shù)system。#include<windows.h>//延時(shí)函數(shù)Sleep()#include<time.h>//調(diào)用系統(tǒng)時(shí)間函數(shù)time()在程序中運(yùn)用了大量的自定義函數(shù),都涉及為了使程序更簡介明了。其中有:intisLeapYear(intyear)//判斷是否為閏年voidhy()//歡迎信息;voidTime()//獲取系統(tǒng)時(shí)間;intwhichWeekday(intyear,intmonth,intday)//判斷某天為星期幾;voidyearMonth(intyear,intmonth)//打印某年某月的月歷;voidmonthDay(intyear)//輸入年份,打出個(gè)月歷;voidmenu()//主菜單;voidmain()//主函數(shù);這些函數(shù)的定義及其相應(yīng)的內(nèi)部程序共同構(gòu)筑起了這個(gè)萬年歷查詢系統(tǒng)的總程序。其中isLeapYear函數(shù)是用來判斷輸入的年份是否為閏年,實(shí)現(xiàn)了預(yù)計(jì)功能的第一個(gè)方面;whichWeekday函數(shù)則是為了實(shí)現(xiàn)判斷星期而編寫的;yearMonth函數(shù)則是為了實(shí)現(xiàn)月歷而編寫的;Time()函數(shù)則是為調(diào)用系統(tǒng)時(shí)間而編寫,該Time()函數(shù)采用指針形式定義了*week[]數(shù)組和*tp變量;yearMonth,monthDay這兩個(gè)函數(shù)的共同使用就能夠完成輸出年歷的功能。四、程序流程圖(一)總流程圖
(二)算法說明總天數(shù)的算法:isLeapYear函數(shù)的使用,判斷出了輸入年份是否為閏年的信息。判斷一年是否為閏年的方法是:該年分而能被4整除但不能被100整除,或者是能被400整除。判斷是否為閏年的流程圖:輸入日期計(jì)算星期幾:利用whichWeekday函數(shù)可以判斷出星期,然后對(duì)于輸入的日期可以通過公式weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7計(jì)算就可以輸出相應(yīng)的星期數(shù)。intwhichWeekday(intyear,intmonth,intday)//判斷某天為星期幾(intweekday;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;//計(jì)算星期的公式returnweekday+1;對(duì)輸入信息的匯總:voidyearMonth(intyear,intmonth)//打印某年某月的月歷,voidmonthDay(intyear)//輸入年份,打出個(gè)月歷;通過這兩個(gè)函數(shù)可以將輸入數(shù)據(jù)的具體信息通過完整日歷的形式表示出來。voidyearMonth(intyear,intmonth)//打印某年某月的月歷(inti,j=0;intweekday;//計(jì)算這個(gè)月第一天是星期幾weekday=whichWeekday(year,month,1);printf("\n%d年%d月\n〃,year,month);printf("\n〃);printf(-星期一星期二星期三星期四星期五星期六星期天\n〃);if(isLeapYear(year)&&month==2)days[1]=days[1]+1;printf("");for(i=1;i<weekday;i++)for(i=0;i<8-weekday;i++)(printf(〃%6d〃,i+1);printf("");}printf("\n");for(i=9-weekday;i<=days[month-1];i++,j++)(if(j==7)(j=0;printf("\n");}printf("%6d",i);\n");printf("\n}voidmonthDay(intyear)//輸入年份,打出個(gè)月歷(\n");inti;for(i=0;i<12;i++)yearMonth(year,i+1);printf(〃\n\n〃);}五、源程序代碼#include<stdio.h>//標(biāo)準(zhǔn)輸入輸出函數(shù)#include<stdlib.h>//清屏函數(shù)system()#include<windows.h>//延時(shí)函數(shù)Sleep()#include<time.h>//調(diào)用系統(tǒng)時(shí)間函數(shù)time()intdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};//每月的天數(shù),閏年二月要加intisLeapYear(intyear)//判斷是否為閏年if(year%4==0&&year%100!=0||year%400==0)return1;elsereturn0;}voidhy()//歡迎信息(printf("\n歡迎使用萬年歷查詢系統(tǒng)\n\n〃);Sleep(700);//延時(shí)毫秒printf("祝您每天好心情!\n\n\n");Sleep(1000);printf("版本:v2.0\n\n\n〃);Sleep(1000);\n");Sleep(5000);//延時(shí)秒}voidTime()//獲取系統(tǒng)時(shí)間(time_tt;structtm*tp;staticchar*week□={〃一〃,〃二〃,〃三〃,〃四〃,〃五〃,〃六〃,〃日〃};t二time(NULL);tp=localtime(&t);printf(〃\t\n〃);printf(〃\t\t系統(tǒng)時(shí)間日期:%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(〃星期%s\n〃,week[(tp->tm_wday)T]);\n〃);printf(〃\t\n〃);intwhichWeekday(intyear,intmonth,intday)//判斷某天為星期幾(intweekday;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;//計(jì)算星期的公式returnweekday+1;}voidyearMonth(intyear,intmonth)//打印某年某月的月歷inti,j=0;intweekday;//計(jì)算這個(gè)月第一天是星期幾weekday=whichWeekday(year,month,1);printf("\n%d年%d月\n〃,year,month);printf("\n〃);printf(-星期一星期二星期三星期四星期五星期六星期天\n〃);if(isLeapYear(year)&&month==2)days[1]=days[1]+1;printf("");for(i=1;i<weekday;i++)printf("");for(i=0;i<8-weekday;i++)(printf(〃%6d〃,i+1);printf("");for(i=9-weekday;i<=days[month-1];i++,j++)(if(j==7)(j=0;printf("\n");}printf("%6d",i);}printf("\n\n");}voidmonthDay(intyear)//輸入年份,打出個(gè)月歷inti;for(i=0;i<12;i++)yearMonth(year,i+1);printf(〃\n\n〃);voidmenu()//主菜單printf("\n");printf("");printf("萬年歷查詢系統(tǒng)\n\n〃);printf("*1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1*\IO\.**************************************************\n/?printf("**1、printf("**2、printf("**3、printf("**4、printf("**5、輸入年份,打出個(gè)月歷退出輸入年份,判斷是否為閏年輸入年月日,判斷該日為星期幾輸入月份,打出該月的日歷**\n〃);**\n〃);**\n〃);**\n〃);**\n〃);printf("*X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X**X*\-to\-to\■**************************************************\n\n/?}voidmain()//主函數(shù)(intnum,year,month,day,weekday;charch;while(1)(system("CLS");//清屏hy();//歡迎信息tz:system(〃CLS〃);//goto語句跳轉(zhuǎn)菜單標(biāo)志Time();//調(diào)用系統(tǒng)函數(shù)menu();//菜單printf("請(qǐng)輸入對(duì)應(yīng)操作:");scanf(〃%d〃,&num);switch(num)(case1:(system(〃CLS〃);t1:printf("\n請(qǐng)輸入年份,確定按‘回車’(格式:):\n");//goto語句標(biāo)志scanf(〃%d〃,&year);if(year>=3000||year<=1600)(system(〃CLS〃);printf(-輸入錯(cuò)誤,系統(tǒng)及即將返回!〃);Sleep(3000);gototz;}if(isLeapYear(year))elseprintf("%d年不是閏年。\n",year);printf("提示:\n如繼續(xù)運(yùn)行請(qǐng)按\n如回首菜單請(qǐng)按\n如退出請(qǐng)按\n請(qǐng)選擇:");ch=getch();if(ch==T,)gotot1;//goto語句返回的t1if(ch==,2,)gototz;//執(zhí)行主函數(shù)if(ch==,0,)exit(0);//退出break;}case2:system(〃CLS〃);t2:printf("\n請(qǐng)輸入年月日,以空格隔開,確定按‘回車’(格式:610):\n");scanf(〃%d%d%d〃,&year,&month,&day);if((year>=3000||year<=1600)||(month>=12||month<0)||(day>=31||day<=0))(system(〃CLS〃);printf(-輸入錯(cuò)誤,系統(tǒng)及即將返回!〃);Sleep(3000);gototz;}weekday=whichWeekday(year,month,day);printf("這天是星期%do\n\n",weekday);printf("提示:\n如繼續(xù)運(yùn)行請(qǐng)按\n如回首菜單請(qǐng)按\n如退出請(qǐng)按\n請(qǐng)選擇:");ch=getch();if(ch==T,)gotot2;if(ch==,2,)gototz;if(ch==,0,)exit(0);break;}case3:(system(〃CLS〃);t3:printf("\n請(qǐng)輸入年份,確定按‘回車'(格式:):\n");scanf(〃%d〃,&year);if(year>=3000||year<=1600)system(〃CLS〃);printf(-輸入錯(cuò)誤,系統(tǒng)及即將返回!〃);Sleep(3000);gototz;}monthDay(year);printf("提示:\n如繼續(xù)運(yùn)行請(qǐng)按\n如回首菜單請(qǐng)按\n如退出請(qǐng)按\n請(qǐng)選擇:");ch=getch();if(ch=='1')gotot3;if(ch=='2')gototz;if(ch=='0')exit(0);break;}case4:(system(〃CLS〃);t4:printf("\n請(qǐng)輸入年份(格式:):\n");scanf(〃%d〃,&year);printf("請(qǐng)輸入月份,確定按‘回車’(格式:):\n〃);scanf(〃%d〃,&month);if((year>=3000||year<=1600)||(month>=12||month<0))(system(〃CLS〃);printf(-輸入錯(cuò)誤,系統(tǒng)及即將返回!〃);Sleep(3000);gototz;yearMonth(year,month);if(isLeapYear(year)&&month==2)//如果年份為閏年,則月加天days[1]=days[1]+1;printf("提示:\n如繼續(xù)運(yùn)行請(qǐng)按\n如回首菜單請(qǐng)按\n如退出請(qǐng)按\n請(qǐng)選擇:");ch=getch();if(ch==T,)gotot4;if(ch==,2,)gototz;if(ch==,0,)exit(0);break;}case5:printf("\n是否確定退出?\n〃);printf("確定請(qǐng)按,取消請(qǐng)按");ch=getch();if(ch=='2')gototz;else(printf("");exit(0);//退出}break;}default:system(〃CLS〃);
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園園長培訓(xùn)相關(guān)制度
- 防恐資料宣傳與培訓(xùn)制度
- 預(yù)約計(jì)時(shí)培訓(xùn)管理制度
- 培訓(xùn)機(jī)構(gòu)評(píng)價(jià)管理制度
- 小主持培訓(xùn)提成制度
- 幼校車教育培訓(xùn)考核制度
- 鄉(xiāng)鎮(zhèn)消防工作培訓(xùn)制度
- 家裝公司新員工培訓(xùn)制度
- 物業(yè)安全培訓(xùn)管理制度
- 山西焦煤培訓(xùn)制度及流程
- 孩子如何正確與師長相處與溝通
- 集裝箱采購?fù)稑?biāo)方案(技術(shù)方案)
- 塔吊運(yùn)行日志
- 里氏硬度計(jì)算表
- 輸電線路基礎(chǔ)知識(shí)輸電線路組成與型式
- GB/T 14536.1-2022電自動(dòng)控制器第1部分:通用要求
- GB/T 24128-2009塑料防霉性能試驗(yàn)方法
- 土地買賣合同協(xié)議書模板
- 人員素質(zhì)測(cè)評(píng)理論與方法-素質(zhì)測(cè)評(píng)概述課件
- 微型消防站花名冊(cè)
- 鈑金噴漆合作協(xié)議
評(píng)論
0/150
提交評(píng)論