C語言萬年歷報(bào)告_第1頁
C語言萬年歷報(bào)告_第2頁
C語言萬年歷報(bào)告_第3頁
C語言萬年歷報(bào)告_第4頁
C語言萬年歷報(bào)告_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

課程設(shè)計(jì)評分表課程設(shè)計(jì)題目:萬年歷設(shè)計(jì)項(xiàng)目內(nèi)容滿分實(shí)評選題能結(jié)合所學(xué)課程知識、有一定的能力訓(xùn)練。符合選題要求(5人一題)10工作量適中,難易度合理10能力水平能熟練應(yīng)用所學(xué)知識,有一定查閱文獻(xiàn)及運(yùn)用文獻(xiàn)資料能力10理論依據(jù)充分,數(shù)據(jù)準(zhǔn)確,公式推導(dǎo)正確10能應(yīng)用計(jì)算機(jī)軟件進(jìn)行編程、資料搜集錄入、加工、排版、制圖等10能體現(xiàn)創(chuàng)造性思維,或有獨(dú)特見解10成果質(zhì)量總體設(shè)計(jì)正確、合理,各項(xiàng)技術(shù)指標(biāo)符合要求。10說明書綜述簡練完整,概念清楚、立論正確、技術(shù)用語準(zhǔn)確、結(jié)論嚴(yán)謹(jǐn)合理;分析處理科學(xué)、條理分明、語言流暢、結(jié)構(gòu)嚴(yán)謹(jǐn)、版面清晰10設(shè)計(jì)說明書欄目齊全、合理,符號統(tǒng)一、編號齊全。格式、繪圖、表格、插圖等規(guī)范準(zhǔn)確,符合國家標(biāo)準(zhǔn)10有一定篇幅,字符數(shù)不少于500010總分100指導(dǎo)教師評語:指導(dǎo)教師簽名:年月日C語言課程設(shè)計(jì)之萬年歷實(shí)驗(yàn)報(bào)告分享者:仙仙劍一、實(shí)驗(yàn)題目:萬年歷設(shè)計(jì)二、試驗(yàn)時(shí)間:2012年12月28日至2013年1月5日三、實(shí)驗(yàn)地點(diǎn):四、實(shí)驗(yàn)?zāi)康模罕敬握n程設(shè)計(jì)的主要目的是綜合運(yùn)用所學(xué)的C語言知識解決一個比較實(shí)際的簡單問題,側(cè)重對數(shù)組、函數(shù)、指針、結(jié)構(gòu)體和文件等相關(guān)內(nèi)容的綜合應(yīng)用,使同學(xué)們能進(jìn)一步熟悉掌握C語言的基本語法,進(jìn)一步提升自己的編程能力并逐步培養(yǎng)編程思維,進(jìn)而不斷提高同學(xué)們解決問題的能力,并為以后的語言學(xué)習(xí)打下良好的基礎(chǔ)。五、實(shí)驗(yàn)要求:1.每人一題,獨(dú)立完成;設(shè)計(jì)要求有界面菜單。2.此次課程設(shè)計(jì)在規(guī)定的時(shí)間必須在實(shí)驗(yàn)室完成,不得以任何理由在其他地點(diǎn)進(jìn)行;3.每個人需按照選題規(guī)則確定好自己的題目(注意不是多人完成一題,每人獨(dú)立完成一題),不得以任何理由選擇其他的題目,當(dāng)然在完成自己的題目之后根據(jù)個人興趣可以繼續(xù)選做其他的題目;4.每人必須撰寫課程設(shè)計(jì)報(bào)告(格式附后)。并上交程序代碼電子稿(每位同學(xué)先建立一個文件夾,取名規(guī)則為“學(xué)號+姓名”,文件夾里存放上交電子內(nèi)容,每班取一文件夾名,取名規(guī)則為班級號,內(nèi)放該班同學(xué)上交內(nèi)容,每班學(xué)習(xí)委員統(tǒng)一收齊后拷貝給指導(dǎo)老師)。5.課程設(shè)計(jì)的成績由兩部分組成:考勤(30%)+程序檢查成績(40%)+報(bào)告檢查成績(30%)六、具體要求:1、查詢某年某月每一天對應(yīng)星期幾2、可以查詢某年某月的上個月或是下個月的日歷情況3、查詢某年某月某日是這一年的第幾天,并查詢該天是星期幾4、判斷該年是閏年還是平年,判斷這一年的生肖七、實(shí)現(xiàn)思路:實(shí)現(xiàn)該程序一定要找準(zhǔn)一個幾點(diǎn),比如找準(zhǔn)2000年1月1日是星期幾,然后在此基礎(chǔ)上推出具體某天和這個幾點(diǎn)之間相差多少天,然后推出該天是星期幾,注意顯示的時(shí)候格式要對齊。

流程圖如下:開始主函數(shù):開始主菜單主菜單輸入整數(shù)select輸入整數(shù)select1<=select<=41<=select<=4N Yswitch(select)switch(select)6 65432154321退出系統(tǒng)生肖查詢閏年與平年查日歷查詢系統(tǒng)月歷查詢系統(tǒng)年歷查詢系統(tǒng)退出系統(tǒng)生肖查詢閏年與平年查日歷查詢系統(tǒng)月歷查詢系統(tǒng)年歷查詢系統(tǒng)結(jié)束結(jié)束

(2)年歷查詢系統(tǒng):主菜單主菜單年歷查詢系統(tǒng)年歷查詢系統(tǒng)輸入年份year輸入年份year輸出是閏年輸出不是閏年NY閏年NYyear>=1輸出是閏年輸出不是閏年NY閏年NYyear>=1 生肖生肖輸出生肖輸出生肖輸出各月的情況計(jì)算各月的情況

(3)月歷查詢系統(tǒng):輸出各月的情況計(jì)算各月的情況主菜單主菜單月歷查詢系統(tǒng)月歷查詢系統(tǒng)輸入year,month輸入year,monthNyear>=1&&1<=month<=12Nyear>=1&&1<=month<=12YY輸出此月及上一個月和下一個月的情況的情況輸出此月及上一個月和下一個月的情況的情況(4)日歷查詢系統(tǒng):主菜單主菜單輸出該日的情況YNyear>=1&&1<=month<=12&&1<=day<=maxDay(year,month)輸入year,month,day日歷查詢系統(tǒng)

八、實(shí)現(xiàn)過程:輸出該日的情況YNyear>=1&&1<=month<=12&&1<=day<=maxDay(year,month)輸入year,month,day日歷查詢系統(tǒng)#include<time.h>/*包含的頭文件*/#include<stdio.h>#include<math.h>#include<windows.h>inteachyeartotal(intyear,intmonth,intday);/*函數(shù)聲明*/intcounterdays(intyear,intmonth,intday);intnowtime(intyear,intmonth,intday);intweek(intyear,intmonth,intday);intmaxDay(intyear,intmonth);voidisleap(intyear);voidshengxiao(intyear);voidwhatweek(intyear,intmonth,intday);voiddisplay(intyear,intmonth);voiddisplay2(intyear,intmonth);voiddisplay3(intyear,intmonth,intday);voidjieri(intyear,intmonth,intday);voiddisplay1(intyear);voidgetmenu();voidmain()/*主函數(shù)*/{intyear,month,day,select;while(1){getmenu();printf("請輸入相應(yīng)數(shù)字:");/*菜單選擇*/scanf("%d",&select);system("cls");/*調(diào)用DOS命令,清除屏幕上所有的文字*/switch(select){case1:/*當(dāng)選擇為1時(shí)顯示年歷*/printf("年歷顯示:輸入年(如2012):");scanf("%d",&year);printf("\n");if(year>=1)/*顯示年份從公元1年開始*/{isleap(year);shengxiao(year);display1(year);/*調(diào)用函數(shù)*/} else{system("cls");printf("輸入無效,重新輸入!\n");}break;case2:/*當(dāng)選擇為2顯示月歷*/printf("月歷顯示:輸入年月(如2012,6):");scanf("%d,%d",&year,&month);if(year>=1&&month>=1&&month<=12){display2(year,month);}else{system("cls");printf("輸入無效,重新輸入!\n");}break;case3:/*當(dāng)選擇為3時(shí)顯示日期*/printf("日期顯示:輸入年月日(比如2012,6,10):");scanf("%d,%d,%d",&year,&month,&day);if(year>=1&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month)){display3(year,month,day);}else{system("cls");printf("輸入無效,重新輸入!\n");}break;case4:/*查詢閏年與平年*/printf("閏年與平年查詢,請輸入年份(比如2012):");scanf("%d",&year);printf("\n");if(year>=1){if(year%4==0&&year%100!=0||year%400==0)printf("\n%4d年是閏年\n\n\n",year);elseprintf("\n%4d年是平年\n\n\n",year);}else{system("cls");printf("輸入無效,重新輸入!\n");}break;case5:/*查詢生肖*/printf("生肖查詢,請輸入年份(比如2012):");scanf("%d",&year);printf("\n");if(year>=1)shengxiao(year);else{system("cls");printf("輸入無效,重新輸入!\n");}break;case6:exit(0);/*正常結(jié)束程序的運(yùn)行*/default:/*當(dāng)輸入其他數(shù)字時(shí),輸入無效,重新輸入*/system("cls");printf("輸入無效,重新輸入!\n");}}}voidisleap(intyear)/*判斷是否為閏年*/{if(year%4==0&&year%100!=0||year%400==0)printf("%4d年是閏年,",year);elseprintf("%4d年是平年,",year);}voidshengxiao(intyear){intx;x=year%12;switch(x){case0:printf("此年的生肖是:猴\n\n");break;case1:printf("此年的生肖是:雞\n\n");break;case2:printf("此年的生肖是:狗\n\n");break;case3:printf("此年的生肖是:豬\n\n");break;case4:printf("此年的生肖是:鼠\n\n");break;case5:printf("此年的生肖是:牛\n\n");break;case6:printf("此年的生肖是:虎\n\n");break;case7:printf("此年的生肖是:兔\n\n");break;case8:printf("此年的生肖是:龍\n\n");break;case9:printf("此年的生肖是:蛇\(yùn)n\n");break;case10:printf("此年的生肖是:馬\n\n");break;case11:printf("此年的生肖是:羊\n\n");break;}}intmaxDay(intyear,intmonth)/*每月的天數(shù)*/{inta[]={31,28,31,30,31,30,31,31,30,31,30,31};/*每個月中的天數(shù)*/if(year%4==0&&year%100!=0||year%400==0)a[1]=29;/*閏年2月份有29天*/returna[month-1];}inteachyeartotal(intyear,intmonth,intday)/*判斷某天是一年中的第幾天*/{inti,sum=0;for(i=1;i<month;i++)sum+=maxDay(year,i);sum+=day;returnsum;}intweek(intyear,intmonth,intday)/*對天數(shù)進(jìn)行判斷確定是星期幾*/{intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7;returnnumber;}voiddisplay(intyear,intmonth)/*輸出年月*/{intmax,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf("%4s%4s%4s%4s%4s%4s%4s\n","Sun","Mon","Tue","Wed","Thu","Fri","sat");for(i=0;i<number;i++)printf("");/*1號前的星期補(bǔ)空格*/while(j<=max){printf("%6d",j);if(i%7==6)printf("\n");/*每7格換一行*/i++;j++;}printf("\n\n");}voiddisplay1(intyear)/*輸出年歷*/{inti;printf("各月的情況如下:\n\n");for(i=1;i<=12;i++){printf("%d年%d月\n\n",year,i);display(year,i);}}voiddisplay2(intyear,intmonth)/*輸出月歷*/{printf("\n%d年%d月\n",year,month);display(year,month);if(month==1){year=year-1;month=12;printf("\n此月的上一個月(即%d年%d月)的情況如下:\n\n",year,month);display(year,month);year=year+1;month=2;printf("\n此月的下一個月(即%d年%d月)的情況如下:\n\n",year,month);display(year,month);month=1;}if(month==12){ month=month-1; printf("\n此月的上一個月(即%d年%d月)的情況如下:\n\n",year,month); display(year,month); year=year+1; month=1;printf("\n此月的下一個月(即%d年%d月)的情況如下:\n\n",year,month); display(year,month); month=12; }if(month>=2&&month<=11){month=month-1;printf("\n此月的上一個月(即%d月)的情況如下:\n\n",month);display(year,month);month=month+2;printf("\n此月的下一個月(即%d月)的情況如下:\n\n",month);display(year,month);}}voiddisplay3(intyear,intmonth,intday)/*輸出日歷*/{whatweek(year,month,day);printf(“該天是這一年第%3d天”,eachyeartotal(year,month,day));jieri(year,month,day);counterdays(year,month,day);}intcounterdays(intyear,intmonth,intday)/*判斷今天距特定日期的天數(shù)*/{intyear1,days0,days1,month1,days,day1;time_ttimep;/*函數(shù)原型:time_ttime(time_t*timer)功能:獲取當(dāng)前的系統(tǒng)時(shí)間,返回的結(jié)果是一個time_t類型,其實(shí)就是一個大整數(shù),其值表示從CUT(CoordinatedUniversalTime)時(shí)間1970年1月1日00:00:00(稱為UNIX系統(tǒng)的Epoch時(shí)間)到當(dāng)前時(shí)刻的秒數(shù)。然后調(diào)用localtime將time_t所表示的CUT時(shí)間轉(zhuǎn)換為本地時(shí)間(我們是+8區(qū),比CUT多8個小時(shí))并轉(zhuǎn)成structtm類型,該類型的各數(shù)據(jù)成員分別表示年月日時(shí)分秒。*/structtm*p;/*在標(biāo)準(zhǔn)C/C++中,可以通過tm結(jié)構(gòu)來獲得日期和時(shí)間*/time(&timep);/*time函數(shù)原型是:time_ttime(time_t*timer);參數(shù)是能返回time_t型對象的指針timer,那里存放著當(dāng)時(shí)時(shí)間。通??梢院雎赃@個參數(shù),用NULL,直接就獲得當(dāng)時(shí)時(shí)間。(1970年1月1日起算的時(shí)間“秒”數(shù))。time_ttimep:如果用別的方法得到時(shí)間,存在timep中。time(&timep):返回的就是timep里的值。*/p=gmtime(&timep);/*原型:structtm*gmtime(long*clock);功能:把日期和時(shí)間轉(zhuǎn)換為格林威治(GMT)時(shí)間的函數(shù)。將參數(shù)timep所指的time_t結(jié)構(gòu)中的信息轉(zhuǎn)換成真實(shí)世界所使用的時(shí)間日期表示方法,然后將結(jié)果由結(jié)構(gòu)tm返回。*/year1=(1900+p->tm_year);month1=(1+p->tm_mon);day1=(p->tm_mday);/*獲取系統(tǒng)時(shí)間year1、month1、day1分別為年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,day1);days=days0-days1;/*計(jì)算出兩個日期之間的時(shí)間差*/printf("\n今天距%d年%d月%d日還有%d天\n\n",year,month,day,days);returndays;}voidwhatweek(intyear,intmonth,intday)/*判斷是星期幾*/{intnumber;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachye-artotal(year,month,day);number=number%7;switch(number){case0:printf("\n%d年%d月%d日是星期日,",year,month,day);break;case1:printf("\n%d年%d月%d日是星期一,",year,month,day);break;case2:printf("\n%d年%d月%d日是星期二,",year,month,day);break;case3:printf("\n%d年%d月%d日是星期三,",year,month,day);break;case4:printf("\n%d年%d月%d日是星期四,",year,month,day);break;case5:printf("\n%d年%d月%d日是星期五,",year,month,day);break;case6:printf("\n%d年%d月%d日是星期六,",year,month,day);break;default:system("cls");printf("出現(xiàn)錯誤!\n");}}voidjieri(intyear,intmonth,intday)/*判斷是否公歷節(jié)日*/{if(month==1&&day==1)printf(",這天是元旦\n");if(year>=1300&&month==2&&day==14)printf(",這天是情人節(jié)\n");if(year>=1909&&month==3&&day==8)printf(",這天是婦女節(jié)\n");if(year>=1925&&month==3&&day==12)printf(",這天是植樹節(jié)\n");if(year>=1582&&month==4&&day==1)printf(",這天是愚人節(jié)\n");if(year>=1890&&month==5&&day==1)printf(",這天是勞動節(jié)\n");if(year>=1950&&month==5&&day==4)printf(",這天是青年節(jié)\n");if(year>=1950&&month==6&&day==1)printf(",這天是兒童節(jié)\n");if(year>=1941&&month==7&&day==1)printf(",這天是建黨日\n");if(year>=1950&&month==8&&day==1)printf(",這天是建軍節(jié)\n");if(year>=1985&&month==9&&day==10)printf(",這天是教師節(jié)\n");if(year>=1950&&month==10&&day==1)printf(",這天是國慶節(jié)\n");}voidgetmenu()/*顯示菜單選擇*/{printf("************主菜單************\n\n");printf("*歡迎進(jìn)入萬年歷系統(tǒng)*\n\n");printf("*1、年歷顯示*\n\n");printf("*2、月歷查詢*\n\n");printf("*3、日期查詢*\n\n");printf("*4、閏年與平年查詢*\n\n");printf("*5、生肖查詢*\n\n");printf("*6、退出系統(tǒng)*\n\n");printf("******************************\n\n");printf("*******李淵*201220181028******\n\n");}九、實(shí)驗(yàn)總結(jié)(分析程序的得與失):本次實(shí)驗(yàn)的計(jì)算是一個難題,函數(shù)不易編寫,通過去圖書館和上網(wǎng)的方式,查閱了各種資料,花費(fèi)了大量的時(shí)間和精力,終于實(shí)現(xiàn)了題目所要求的功能。在查閱的過程中,發(fā)現(xiàn)有很多地方看不懂,這一方面是由于平時(shí)的基礎(chǔ)不扎實(shí),另一方面可能是我們沒有學(xué)過,我深深體會到了C語言的博大精深,我們現(xiàn)在所掌握的可能只是一點(diǎn)皮毛。正所謂“師父領(lǐng)進(jìn)門修行在個人”,通過這一個學(xué)期的學(xué)習(xí),我們初步掌握了C語言最基本的知識,為以后的自學(xué)打下了基礎(chǔ),創(chuàng)造了前提;今后我們所面臨的任務(wù)依然任重而道遠(yuǎn),我們在課下要花費(fèi)大量的功夫把C語言的基礎(chǔ)打扎實(shí),繼續(xù)深造,將C語言運(yùn)用的更加熟練,從而更好地學(xué)習(xí)其他語言。本次試驗(yàn)的一個亮點(diǎn)是增添了公歷節(jié)日的輸出和所查詢的日期與今天相差多少天等功能。公歷節(jié)日的輸出較為簡單,在能力的范圍之內(nèi),但編寫好程序之后,又發(fā)現(xiàn)編寫得不夠嚴(yán)密,例如,輸入“1200,10,1”,則程序會輸出“該天是國慶節(jié)”,但1200年新中國還沒有建立,這顯然與事實(shí)不符。于是把原本用的switch函數(shù),全部改為if語句,并上網(wǎng)查出各個節(jié)日的歷史起源,從而獲得該節(jié)日開始的年份,最后終于實(shí)現(xiàn)這一功能。從中,我懂得了嚴(yán)謹(jǐn)?shù)闹匾裕行〇|西看似簡單,但要把它嚴(yán)謹(jǐn)?shù)刈龀鰜韰s并不是一件容易的事,樹立嚴(yán)謹(jǐn)?shù)淖黠L(fēng),對于今后的編程是至關(guān)重要的。另一個是計(jì)算今天距離所查詢的日期相差的天數(shù),這一功能對我來說難度較大,我們從未接觸過這樣的問題。在沒有任何頭緒的情況下,借助互聯(lián)網(wǎng)查到了相應(yīng)的解決方案,需要調(diào)用系統(tǒng)時(shí)間,然后計(jì)算相應(yīng)的時(shí)間差,從中我又學(xué)到了如何調(diào)用系統(tǒng)時(shí)間的方法,獲益匪淺。另一方面,本想實(shí)現(xiàn)的農(nóng)歷查詢功能以及隨時(shí)返回主菜單功能由于能力、時(shí)間等原因未能實(shí)現(xiàn),此為一個遺憾。農(nóng)歷的編寫過于復(fù)雜,在現(xiàn)有的能力和精力下,實(shí)現(xiàn)此功能的確難度很大,這也體現(xiàn)了我們祖先高超的智慧,能編寫這樣的歷法,真是太了不起了,今后有機(jī)會一定要實(shí)現(xiàn)這一功能。關(guān)于隨時(shí)返回主菜單的功能,考慮到此函數(shù)的編寫會破壞前面編寫的循環(huán)系統(tǒng),而且萬年歷只有兩層內(nèi)容,不像其他題目有很多層,也不必隨時(shí)返回主菜單,這樣做反而畫蛇添足。因此沒有編寫此函數(shù)。十、實(shí)驗(yàn)心得:當(dāng)拿到題目時(shí),同學(xué)們都很茫然、不知所措,這樣一個大的程序還從未編過,以前做實(shí)驗(yàn)時(shí)大多是抄書上的,很少自己編,現(xiàn)在真是悔恨不已。本身實(shí)驗(yàn)課就不多,再加上元旦沖掉8節(jié)實(shí)驗(yàn)課,使之雪上加霜,這意味著課下需要下更多的功夫。本想課下多去實(shí)驗(yàn)室,可是試驗(yà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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論