版權(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):010912班級(jí):13電信應(yīng)電班指導(dǎo)老師:張偉日期:6月9日內(nèi)容提要經(jīng)過大一下學(xué)期對(duì)C語言學(xué)習(xí),了解到了很多C語言相關(guān)知識(shí)。學(xué)習(xí)過程即使有很多迷惑,不過當(dāng)自己能夠獨(dú)立看懂和獨(dú)立完成一個(gè)簡單程序時(shí),心中就會(huì)收獲無限喜悅和成就感。我即使能夠看懂部分簡單程序,編寫部分簡單計(jì)算程序,更多是學(xué)會(huì)了一個(gè)思想——編程,它讓我在去思索很多日常生活中事物是怎么樣經(jīng)過一個(gè)個(gè)小小函數(shù)實(shí)現(xiàn)功效,激發(fā)我對(duì)c語言愛好。C語言是多年在中國外得到快速推廣應(yīng)用一個(gè)機(jī)器語言。C語言功效豐富,表示能力強(qiáng),使用靈活方便,應(yīng)用面廣,目標(biāo)程序效率高,可移植性好,既含有高級(jí)語言優(yōu)點(diǎn),又含有低級(jí)語言很多特點(diǎn)。所以,C語言尤其適合于編寫多種軟件。在這次課程設(shè)計(jì)中我將把日常生活中最常常接觸——日歷查詢,利用C語言程序編成一個(gè)簡單萬年歷查詢系統(tǒng)。經(jīng)過這個(gè)小小系統(tǒng)能夠?qū)崿F(xiàn)很多功效。在程序中你能看到很多熟悉C語言關(guān)鍵字,同時(shí)也加入了很多自己課外了解到部分關(guān)鍵字。在不停調(diào)試中最終才取得最為完整程序。接下來就是我C語言課程設(shè)計(jì)具體內(nèi)容來了,大家拭目以待吧!
目錄系統(tǒng)功效和數(shù)聽說明-----------------------問題分析---------------------------------程序總體設(shè)計(jì)及功效結(jié)構(gòu)框圖---------------程序步驟圖-------------------------------源程序代碼-------------------------------六、使用說明---------------------------------七、個(gè)人心得---------------------------------八、參考文件---------------------------------
一、系統(tǒng)功效和數(shù)聽說明(一)功效介紹在日常生活中能接觸到很多不一樣類型日歷,在日歷上我們通常期望它能簡單明了給我們最想要日期信息。在我萬年歷系統(tǒng)當(dāng)中,就是將日歷,月歷做簡單明了,很方便我們查詢使用。下面是它要實(shí)現(xiàn)部分基礎(chǔ)功效:C語言編寫萬年歷查詢系統(tǒng):(1)輸入年份,判定是否為閏年(2)輸入年月日,判定是星期幾(3)輸入年份,打印出12個(gè)月月歷(4)輸入年月,打印出本月日歷另新增:對(duì)輸入指令錯(cuò)誤提醒加入了調(diào)用系統(tǒng)時(shí)間函數(shù)還添加了歡迎界面并進(jìn)行界面優(yōu)化(二)程序中數(shù)聽說明①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,因?yàn)檫€沒學(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í),只要知道第一天星期,就能夠依次輸入后面日期,經(jīng)過一定長度輸出日期,在碰到某天時(shí)星期天時(shí),就換行輸出,所以能夠根據(jù)月歷格式輸出。對(duì)于初始輸入目前系統(tǒng)時(shí)間,能夠經(jīng)過<time.h>中time和localtime函數(shù)取出系統(tǒng)時(shí)間進(jìn)行初始化。判定日期是否正當(dāng),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,假如經(jīng)過此判定正當(dāng),再判定是否時(shí)閏年,假如時(shí)閏年,則判定二月份是否滿足要求,閏年二月份不能超出29天,平年二月份不能超出28天。在查詢過程中,假如發(fā)覺輸入不正當(dāng)或不滿足輸入要求,則提醒錯(cuò)誤,并返回主菜單。三、程序總體設(shè)計(jì)及功效結(jié)構(gòu)框圖(一)功效結(jié)構(gòu)框圖系統(tǒng)時(shí)間系統(tǒng)時(shí)間顯示主菜單星期查詢輸出年歷輸出月歷閏年判定歡迎使用歡迎使用(二)程序設(shè)計(jì)頭文件:#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()在程序中利用了大量自定義函數(shù),全部包含為了使程序更介紹明了。其中有:intisLeapYear(intyear)//判定是否為閏年voidhy()//歡迎信息;voidTime()//獲取系統(tǒng)時(shí)間;intwhichWeekday(intyear,intmonth,intday)//判定某天為星期幾;voidyearMonth(intyear,intmonth)//打印某年某月月歷;voidmonthDay(intyear)//輸入年份,打出個(gè)月歷;voidmenu()//主菜單;voidmain()//主函數(shù);這些函數(shù)定義及其對(duì)應(yīng)內(nèi)部程序共同構(gòu)筑起了這個(gè)萬年歷查詢系統(tǒng)總程序。其中isLeapYear函數(shù)是用來判定輸入年份是否為閏年,實(shí)現(xiàn)了估計(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ù)共同使用就能夠完成輸出年歷功效。四、程序步驟圖(一)總步驟圖開始開始計(jì)算是否為閏年計(jì)算星期數(shù)按鍵1?按鍵3和4輸出是否為閏年輸出星期數(shù)計(jì)算編輯接收到數(shù)據(jù)輸出具體年歷和月歷按鍵5?是是是是計(jì)算是否為閏年計(jì)算星期數(shù)按鍵2?是是是計(jì)算是否為閏年計(jì)算星期數(shù)是是是是結(jié)束退出(二)算法說明1.總天數(shù)算法:isLeapYear函數(shù)使用,判定出了輸入年份是否為閏年信息。判定十二個(gè)月是否為閏年方法是:該年分而能被4整除但不能被100整除,或是能被400整除。判定是否為閏年步驟圖:2.輸入日期計(jì)算星期幾:利用whichWeekday函數(shù)能夠判定出星期,然后對(duì)于輸入日期能夠經(jīng)過公式weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7計(jì)算就能夠輸出對(duì)應(yīng)星期數(shù)。intwhichWeekday(intyear,intmonth,intday)//判定某天為星期幾{ intweekday; if(month==1||month==2)//公式中要把月和月?lián)Q成是上十二個(gè)月月和月 { month+=12; year-=1; } weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;//計(jì)算星期公式 returnweekday+1;}3.對(duì)輸入信息匯總:voidyearMonth(intyear,intmonth)//打印某年某月月歷,voidmonthDay(intyear)//輸入年份,打出個(gè)月歷;經(jīng)過這兩個(gè)函數(shù)能夠?qū)⑤斎霐?shù)據(jù)具體信息經(jīng)過完整日歷形式表示出來。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(""); } printf("\n "); 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"); }五、源程序代碼#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};//每個(gè)月天數(shù),閏年二月要加intisLeapYear(intyear)//判定是否為閏年{ if(year%4==0&&year%100!=0||year%400==0) return1; else return0; }voidhy()//歡迎信息{ printf("\n 歡迎使用萬年歷查詢系統(tǒng)\n\n"); Sleep(700);//延時(shí)毫秒 printf(" 祝您天天好心情!\n\n\n"); Sleep(1000); printf("版本:v2.0\n\n\n"); Sleep(1000); printf("正在進(jìn)入功效菜單,請(qǐng)稍候》》\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)-1]); printf("\t─────────────────────\n");}intwhichWeekday(intyear,intmonth,intday)//判定某天為星期幾{ intweekday; if(month==1||month==2)//公式中要把月和月?lián)Q成是上十二個(gè)月月和月 { 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(""); } printf("\n "); 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(" **************************************************\n"); printf(" ** 1、輸入年份,判定是否為閏年**\n"); printf(" ** 2、輸入年月日,判定該日為星期幾**\n"); printf(" ** 3、輸入年份,打出個(gè)月歷**\n"); printf(" ** 4、輸入月份,打出該月日歷**\n"); printf(" ** 5、退出**\n"); printf(" **************************************************\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)) printf(" %d年是閏年。\n",year); else printf(" %d年不是閏年。\n",year); printf("提醒:\n如繼續(xù)運(yùn)行請(qǐng)按\n如回首菜單請(qǐng)按\n如退出請(qǐng)按\n請(qǐng)選擇:");ch=getch();if(ch=='1') gotot1;//goto語句返回t1if(ch=='2') gototz;//實(shí)施主函數(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(" 這天是星期%d。\n\n",weekday); printf("提醒:\n如繼續(xù)運(yùn)行請(qǐng)按\n如回首菜單請(qǐng)按\n如退出請(qǐng)按\n請(qǐng)選擇:");ch=getch();if(ch=='1') 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=='1') 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"); printf(" 您輸入指令有誤,請(qǐng)重新輸入!!\n\n"); printf("提醒:\n如回首菜單請(qǐng)按\
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外科手術(shù)后靜脈血栓管理方案
- 新入職工入職安全培訓(xùn)試題及完整答案【一套】
- 公司主要負(fù)責(zé)人安全培訓(xùn)試題附答案【奪分金卷】
- 網(wǎng)絡(luò)課程平臺(tái)建設(shè)方案
- 公司職工安全培訓(xùn)試題(標(biāo)準(zhǔn)卷)
- 管理人員安全培訓(xùn)試題附答案(綜合題)
- 項(xiàng)目管理人員安全培訓(xùn)試題及參考答案(預(yù)熱題)
- 幼兒《海底世界》課件
- 科室三級(jí)護(hù)理質(zhì)量管理
- 光伏發(fā)電系統(tǒng)驗(yàn)收方案
- 期中模擬檢測(cè)(試題) 2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)北師大版
- 乙醇鈉團(tuán)體標(biāo)準(zhǔn)
- 2023年國家公務(wù)員錄用考試《行測(cè)》副省級(jí)卷-解析
- 2024人教新版七年級(jí)上冊(cè)英語單詞英譯漢默寫表
- 教育機(jī)構(gòu)線上教育平臺(tái)建設(shè)方案
- 五年級(jí)語文上冊(cè)第四單元綜合素質(zhì)達(dá)標(biāo)作業(yè)
- 第02講:內(nèi)容概括(講解)-2024年中考語文記敘文閱讀講與練(全國)原卷版
- 2024年高考政治考試題海南卷及參考答案
- 危險(xiǎn)貨物道路運(yùn)輸車輛動(dòng)態(tài)監(jiān)控考核試卷
- 2024年電工作業(yè)高壓電工操作證考試模擬試題庫及答案(共180題)
- 英語冠詞講解
評(píng)論
0/150
提交評(píng)論