萬年歷課程設(shè)計(jì)報(bào)告_第1頁
萬年歷課程設(shè)計(jì)報(bào)告_第2頁
萬年歷課程設(shè)計(jì)報(bào)告_第3頁
萬年歷課程設(shè)計(jì)報(bào)告_第4頁
萬年歷課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上西安文理學(xué)院軟件學(xué)院課程設(shè)計(jì)報(bào)告設(shè)計(jì)名稱: 程序語言課程設(shè)計(jì) 設(shè)計(jì)題目: 萬年歷 學(xué)生學(xué)號(hào): 專業(yè)班級(jí): 軟件工程一班 學(xué)生姓名: 羅強(qiáng)強(qiáng) 學(xué)生成績: 指導(dǎo)教師(職稱): 張慶剛 課題工作時(shí)間: 2012.11.15 至 2012.11.29 軟件學(xué)院課程設(shè)計(jì)任務(wù)書學(xué)生姓名羅強(qiáng)強(qiáng)學(xué)號(hào)專業(yè)班級(jí)軟件工程一班設(shè)計(jì)題目萬年歷內(nèi)容概要: 設(shè)計(jì)用的計(jì)算機(jī)環(huán)境 :WindowsXP,Turboc2.0 和 Microsoft Visual C+ 6.0設(shè)計(jì)所運(yùn)用的語言:C語言算法中涉及的知識(shí)點(diǎn):定義整型,字符型,指針變量,字符型數(shù)組和指針數(shù)組。數(shù)組的初始化和引用和指針的使用。設(shè)計(jì)所

2、包含的基本功能:模仿現(xiàn)實(shí)生活中的掛歷.當(dāng)前頁以系統(tǒng)當(dāng)前日期的月份為準(zhǔn)顯示當(dāng)前月的每一天(顯示出日及對(duì)應(yīng)的星期幾). 當(dāng)系統(tǒng)日期變到下一月時(shí),系統(tǒng)自動(dòng)翻頁到下一月,每頁的顏色都不相同。文獻(xiàn)資料:譚浩強(qiáng). C 程序設(shè)計(jì)(第三版)M.北京:清華大學(xué)出版社.2005譚浩強(qiáng). C 程序設(shè)計(jì)題解與上機(jī)指導(dǎo) (第三版)M .北京: 清華大學(xué)出版社.2005戴建鵬譯 C 語言大全(第三版)M .北京:電子工業(yè)大學(xué)出版社.1994設(shè)計(jì)要求:一設(shè)計(jì)內(nèi)容及功能要求:模仿現(xiàn)實(shí)生活中的掛歷.當(dāng)前頁以系統(tǒng)當(dāng)前日期的月份為準(zhǔn)顯示當(dāng)前月的每一天(顯示出日及對(duì)應(yīng)的星期幾). 當(dāng)系統(tǒng)日期變到下一月時(shí),系統(tǒng)自動(dòng)翻頁到下一月. 二設(shè)

3、計(jì)完成后提交的文件和圖表 文件:萬年歷系統(tǒng)文件,及源代碼圖表: 1, 進(jìn)入萬年歷系統(tǒng) 2, 任意鍵進(jìn)入菜單 3, 當(dāng)輸入非法字符時(shí),提示錯(cuò)誤,重新輸入4, 進(jìn)入選項(xiàng) 1,日歷顯示 5, 進(jìn)入選項(xiàng) 2,日歷查詢6, 當(dāng)查詢輸入非法字符時(shí),提示錯(cuò)誤,返回主菜單 當(dāng)查詢輸入非法字符時(shí), 提示錯(cuò)誤7, 進(jìn)入選項(xiàng) 3,退出工作期限:設(shè)計(jì)工作自2012年11月15日至2012年11月29日止。指導(dǎo)教師: 院長: 日 期:2012年11月15日摘 要本程序是一個(gè)萬年歷程序,模仿現(xiàn)實(shí)生活中的掛歷. 當(dāng)前頁以系統(tǒng)當(dāng)前日期的月為準(zhǔn)顯示當(dāng)前月的每一天(顯示出日及對(duì)應(yīng)的星期幾). 當(dāng)系統(tǒng)日期變到下一月時(shí),系統(tǒng)自動(dòng)翻頁

4、到下一月,還可以在程序中任意的輸入公元年份,月,日進(jìn)行日期查詢,當(dāng)輸入完成后,用戶圖形界面出現(xiàn)相應(yīng)年月簡易的日歷表,并且是以星期的格式出現(xiàn)。而且每個(gè)運(yùn)行界面的顏色都不相同。在本程序中主要運(yùn)用了定義整型,字符型,指針變量,字符型數(shù)組和指針數(shù)組,數(shù)組的初始化和引用和指針的使用,達(dá)到 c 語言程序編寫所體現(xiàn)的方便快捷的功效。專心-專注-專業(yè)目 錄摘 要 II第一章 緒論. .21.1 課題的背景.21.2 課題的目的.213 課題的意義2第二章設(shè)計(jì)簡介及設(shè)計(jì)方案論述 .32.1 實(shí)現(xiàn)的功能.32.2 結(jié)構(gòu)模塊分析.3第三章詳細(xì)設(shè)計(jì).43.1 設(shè)計(jì)思路.43.2 功能模塊.43. 3 各模塊函數(shù)詳細(xì)說

5、明.5第四章運(yùn)行結(jié)果. .94.1 系統(tǒng)使用說明.94.2 系統(tǒng)運(yùn)行結(jié)果接截圖.9總 結(jié) .12參考文獻(xiàn) .13 附錄 主要程序代碼 .14第一章 緒論1.1 課題的背景在現(xiàn)代信息社會(huì)里,人們越來越重視時(shí)間的有效利用,而萬年歷也成了工作生活中 必不可少的一部分,方便實(shí)用的萬年歷對(duì)于提高現(xiàn)代人的時(shí)間觀念,優(yōu)化時(shí)間使用效率 具有重要意義。同時(shí),隨著個(gè)人電腦的普及,簡單的桌面萬年歷成為人們?nèi)粘W飨⒓爸?要事件提醒記錄的重要工具。簡易萬年歷可以運(yùn)行在電腦桌面上,使用者可以通過各種 不同的標(biāo)記對(duì)重要時(shí)間及節(jié)假日和備忘事件等方面進(jìn)行有效的查詢和管理。1.2課題的目的通過顯示年日歷程序的設(shè)計(jì),培養(yǎng)我們綜合利

6、用 C語言進(jìn)行程序設(shè)計(jì)的能 力,加強(qiáng)函數(shù)的運(yùn)用及學(xué)生對(duì)軟件工程方法的初步認(rèn)識(shí),提高軟件系統(tǒng)分析能力 和程序文檔建立、歸納總結(jié)的能力,培養(yǎng)學(xué)生利用系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù)及典型算 法進(jìn)行設(shè)計(jì)。通過本項(xiàng)課程設(shè)計(jì),可以培養(yǎng)獨(dú)立思考、綜合運(yùn)用所學(xué)有關(guān)相應(yīng)知識(shí)的能力,能更好的鞏固C語言程序設(shè)計(jì)課程學(xué)習(xí)的內(nèi)容,掌握工程軟件設(shè)計(jì)的基本 方法,強(qiáng)化上機(jī)動(dòng)手編程能力,闖過理論與實(shí)踐相結(jié)合的難關(guān)!更加了解了 C語言的好處和其可用性!同時(shí)增加了同學(xué)之間的團(tuán)隊(duì)合作精神!更加也體會(huì)到以 后在工作中團(tuán)隊(duì)合作的重要性和必要性! 通過 C語言課程設(shè)計(jì),使我們了解高級(jí)程序設(shè)計(jì)語言的結(jié)構(gòu),掌握基本的 程序設(shè)計(jì)過程和技巧,掌握基本的分析

7、問題和利用計(jì)算機(jī)求解問題的能力,具備初步的高級(jí)語言程序設(shè)計(jì)能力。為后續(xù)各門計(jì)算機(jī)課程的學(xué)習(xí)和畢業(yè)設(shè)計(jì)打下堅(jiān)實(shí)基礎(chǔ)。1.3 課題的意義掌握一種編程工具和面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想和方法, 培養(yǎng)我們學(xué)生綜合利用 某種語言進(jìn)行程序設(shè)計(jì)的能力,培養(yǎng)我們學(xué)生利用系統(tǒng)提供的功能進(jìn)行創(chuàng)新設(shè)計(jì)的能 力,培養(yǎng)我們學(xué)生充分利用計(jì)算機(jī)的功能和特點(diǎn)分析實(shí)際問題及解決實(shí)際問題的能力。 為我們提供一個(gè)綜合運(yùn)用所學(xué)知識(shí)解決實(shí)際問題的機(jī)會(huì), 增強(qiáng)我們學(xué)生的實(shí)踐動(dòng)手能力和工程實(shí)踐能力,并培養(yǎng)和鍛煉我們學(xué)生的自學(xué)創(chuàng)新能力。為了能更好地了解 C語言,因此開設(shè)了此次課程設(shè)計(jì),程序設(shè)計(jì)教學(xué)課程的目的不是為了單獨(dú)的課堂學(xué)習(xí),而是要讓我們

8、學(xué)生掌握程序設(shè)計(jì)的基本思想及方法。一方面,在課程設(shè)計(jì)過程中,可以明確的指導(dǎo)為什么而學(xué),還能對(duì)所學(xué)知識(shí)得到應(yīng)用,更重要的是可以讓我們學(xué)生掌握一些基本函數(shù)的用法,從而不在對(duì)編程序感到茫然,經(jīng)過設(shè)計(jì),可以讓我們熟悉簡單程序的設(shè)計(jì)方法和編寫,對(duì)程序設(shè)計(jì)及該門課程設(shè)計(jì)語言的應(yīng)用得到理解。第二章 設(shè)計(jì)簡介及設(shè)計(jì)方案論述2.1實(shí)現(xiàn)功能簡易萬年歷主要實(shí)現(xiàn)以下幾個(gè)功能: 日歷顯示; 日歷查詢 ; 退出程序2.2內(nèi)部結(jié)構(gòu)模塊分析萬年歷主程序萬年歷獲取系統(tǒng)日期判斷是否是閏年取得星期打印月歷查詢?nèi)諝v退出程序萬年歷內(nèi)部程序分六部分:獲取系統(tǒng)日期、判斷是否是閏年、取得星期、打印月歷、查詢?nèi)諝v、退出程序。第三章 詳細(xì)設(shè)計(jì)3

9、.1 設(shè)計(jì)思路3.1.1 設(shè)計(jì)語言語言選擇:本系統(tǒng)選擇C語言來編寫3.1.2設(shè)計(jì)程序流程圖開始程序進(jìn)入顯示當(dāng)前日歷獲取系統(tǒng)日期判斷閏年是 否輸出日歷 二月29天 二月28天1. 日歷顯示2. 日歷查詢3. 退出程序1.日歷顯示2.日歷查詢輸入年月日正確判斷輸入的年月日格式3.退出程序 錯(cuò)誤結(jié)束萬年歷系統(tǒng)3.2功能模塊退出日歷查詢天星期日歷顯示3.3各模塊函數(shù)詳細(xì)說明3.3.1從系統(tǒng)取當(dāng)前日期struct tm*getDay()time_t timer; struct tm* gmt; time(&timer); gmt=localtime(&timer); return gmt

10、; 3.3.2判斷是否是閏年int runYear(int year)/判斷是否是閏年 int run=0; if(year%400=0|(year%4=0&&year%100!=0) run=1; return run; int chaxunday(int year,int month,int day)/檢查正確if(year<=0&&year>=10000|month<1&&month>12|day<1|day>31) return 0;switch(month) case 1:case 3:case 5:

11、case 7:case 8:case 10:case 12: if(day>31)return 0;break; case 4:case 6:case 9:case 11: if(day>30)return 0;break; default: if(runYear(year)&&day>29) return 0; else if(runYear(year)=0&&day>28) return 0;return 1; 3.3.3取得星期int qudeDay(int year,int month,int day)/取得星期int nday=

12、0,nDay,i,x;for(i=0;i<month-1;i+)nday+=daysOfMonthrunYear(year)i; nday+=day;nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;x=nDay%7; return x; void printrili(int year,int month,int day)/打印月歷 int i; char wday74="日","一","二","三","四","五&quo

13、t;,"六 "printf(" %d 年%d 月%d 日n",year,month,day);for(i=0;i<7;i+) printf("%5s",wdayi);printf("n");int w; int nowDay=1; w=qudeDay(year,month,nowDay);/找到第一天的星期int n;n=daysOfMonthrunYear(year)month-1;switch(w) /放置第一天case 0:printf("%5d",nowDay);break; ca

14、se 1:printf("%10d",nowDay);break; case 2:printf("%15d",nowDay);break; case 3:printf("%20d",nowDay);break; case 4:printf("%25d",nowDay);break; case 5:printf("%30d",nowDay);break; default:printf("%35dn",nowDay);nowDay+; for(i=1;i<n;i+)w=qu

15、deDay(year,month,nowDay); printf("%5d",nowDay); if(w=6) /如果是星期六則換行打印puts("n");nowDay+; 3.3.4查詢?nèi)諝vvoid checkrili() system("cls");printf("請輸入你要查詢的日期(如 2012 11 20):");scanf("%d%d%d",&year,&month,&day);while(!chaxunday(year,month,day) /如果日期輸入不

16、正確,則重新輸入printf("請重新輸入");scanf("%d%d%d",&year,&month,&day); system("cls"); if(runYear(year) printf("n 閏年nn");else printf("n 平年nn");printrili(year,month,day); 3.3.5返回主菜單void backMenu()int x; printf("請按任意字符鍵返回主菜單:"); scanf("%d

17、",&x); system("cls"); char menu100;/定義數(shù)組int flag=0;do int f=0; do f=0; printf("n 請輸入相應(yīng)數(shù)字:");scanf("%s",menu);if(strlen(menu)>2)f=1; /測量字符串長度。數(shù)字字符串長while(f=1);switch(*menu) case '1': system("cls"); /清屏 printrili(year,month,day); backMenu();

18、/實(shí)現(xiàn)任意鍵返回主菜單mainMenu(year,month,day);break;case '2': system("cls"); checkrili();backMenu(); mainMenu(year,month,day); break; case'3':system("cls");printf("程序已退出! ""cls");exit(0);default:printf("%c 輸入錯(cuò)誤!n",7);flag=1;while(flag); 第四章 設(shè)計(jì)結(jié)

19、果及分析4.1 系統(tǒng)使用說明這個(gè)程序是用 C 語言編寫的,在軟件 Microsoft Visual C+上運(yùn)行,首先打開 Visual C+,創(chuàng)建文件夾保存,新建文件,然后編入代碼,編譯,如果沒有錯(cuò)誤的話運(yùn)行。運(yùn)行界面上有五個(gè)選項(xiàng),根據(jù)需求選擇選項(xiàng),首頁最上面是顯示的運(yùn)行當(dāng)時(shí)的本地時(shí)間。4.2 系統(tǒng)運(yùn)行結(jié)果及截圖4.2.1系統(tǒng)運(yùn)行顯示當(dāng)前日期4.2.2顯示主菜單4.2.3查詢?nèi)掌?.2.4顯示所查詢的日期4.2.5退出程序4.2.6輸入錯(cuò)誤總結(jié) 本次用 C 語言編寫的萬年歷系統(tǒng)主要實(shí)現(xiàn)了當(dāng)天日歷的顯示、日歷的查詢和退出程序三大功能,是一次成功的課程設(shè)計(jì)。在設(shè)計(jì)初期,首先溫習(xí)了課本內(nèi)容,再次熟悉

20、了 C 程序,然后廣泛的查找有關(guān)萬年歷的資料,并結(jié)合查找到的資料,整理出設(shè)計(jì)的主要思路,畫出流程圖,最終完成了源程序代碼的編寫。在實(shí)驗(yàn)中,碰到了不少問題,其中包括如何獲取系統(tǒng)時(shí)間,如何改變界面的顏色,通過查閱資料和詢問同學(xué)得到了解決。當(dāng)然, 由于時(shí)間和能力的原因,顯示農(nóng)歷的功能沒有實(shí)現(xiàn)。 在本次課程設(shè)計(jì)中,我深深體會(huì)到查找資料的重要性,因?yàn)楸敬握n程設(shè)計(jì)需要比較全面的 C 語言知識(shí),需要從書本中查找大量的幫助資料,培養(yǎng)了自己的自主學(xué)習(xí)能力和分析問題的能力,使我受益匪淺。參考文獻(xiàn)譚浩強(qiáng). C 程序設(shè)計(jì)(第三版)M.北京:清華大學(xué)出版社.2005譚浩強(qiáng). C 程序設(shè)計(jì)題解與上機(jī)指導(dǎo) (第三版)M .

21、北京: 清華大學(xué)出版社.2005戴建鵬譯 C 語言大全(第三版)M .北京:電子工業(yè)大學(xué)出版社.1994附錄 主要程序代碼#include<stdio.h>#include<time.h> #include<math.h>#include<windows.h>int year,month,day; /全局變量記錄時(shí)間int daysOfMonth212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31; void main()system("c

22、olor 4a");int runYear(int year);struct tm* getDay();/從系統(tǒng)取得當(dāng)前時(shí)間,結(jié)構(gòu)體,在函數(shù)中指定int chaxunday(int year,int month,int day);/檢查日期是否正確int qudeDay(int year,int month,int day);/取得星期void printrili(int year,int month,int day);/打印月歷 void checkrili();/查詢?nèi)諝vvoid backMenu();void mainMenu(int &year,int &mo

23、nth,int &day);/主菜單 struct tm *gmt=getDay();/用系統(tǒng)時(shí)間進(jìn)行初始化,year=gmt->tm_year+1900;month=gmt->tm_mon+1;day=gmt->tm_mday;printrili(year,month,day);/打印當(dāng)前月歷backMenu();mainMenu(year,month,day); struct tm*getDay()/從系統(tǒng)取得當(dāng)前時(shí)間time_t timer; struct tm* gmt; time(&timer); gmt=localtime(&timer);

24、 return gmt; int runYear(int year)/判斷是否是閏年 int run=0; if(year%400=0|(year%4=0&&year%100!=0) run=1; return run; int chaxunday(int year,int month,int day)/檢查正確if(year<=0&&year>=10000|month<1&&month>12|day<1|day>31) return 0;switch(month) case 1:case 3:case 5:c

25、ase 7:case 8:case 10:case 12: if(day>31)return 0;break; case 4:case 6:case 9:case 11: if(day>30)return 0;break; default: if(runYear(year)&&day>29) return 0; else if(runYear(year)=0&&day>28) return 0;return 1; int qudeDay(int year,int month,int day)/取得星期int nday=0,nDay,i,x

26、;for(i=0;i<month-1;i+)nday+=daysOfMonthrunYear(year)i; nday+=day;nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;x=nDay%7; return x; void printrili(int year,int month,int day)/打印月歷 int i; char wday74="日","一","二","三","四","五","六

27、 "printf(" %d 年%d 月%d 日n",year,month,day);for(i=0;i<7;i+) printf("%5s",wdayi);printf("n");int w; int nowDay=1; w=qudeDay(year,month,nowDay);/找到第一天的星期int n;n=daysOfMonthrunYear(year)month-1;switch(w) /放置第一天case 0:printf("%5d",nowDay);break; case 1:print

28、f("%10d",nowDay);break; case 2:printf("%15d",nowDay);break; case 3:printf("%20d",nowDay);break; case 4:printf("%25d",nowDay);break; case 5:printf("%30d",nowDay);break; default:printf("%35dn",nowDay);nowDay+; for(i=1;i<n;i+)w=qudeDay(year

29、,month,nowDay); printf("%5d",nowDay); if(w=6) /如果是星期六則換行打印puts("n");nowDay+; void checkrili()/查詢?nèi)諝v system("color 0a"); system("cls");printf("請輸入你要查詢的日期(如 2012 11 20):");scanf("%d%d%d",&year,&month,&day);while(!chaxunday(year,mon

30、th,day) /如果日期輸入不正確,則重新輸入printf(" 請重新輸入");scanf("%d%d%d",&year,&month,&day); system("cls"); if(runYear(year) printf("n 閏年nn");else printf("n 平年nn");printrili(year,month,day); void backMenu()int x; printf("請按任意字符鍵返回主菜單:"); scanf(&

31、quot;%d",&x); system("cls"); void mainMenu(int &year,int &month,int &day)/主菜單 system("color 1e");printf(" *n");printf(" * *主菜單* *n");printf(" * 1.日歷顯示 *n");printf(" * 2.日歷查詢 *n");printf(" * 3.退出 *n");printf(" *n");char menu100;/定義數(shù)組int flag=0;do int f=0; do f=0; printf("n 請輸入相應(yīng)數(shù)字:");scanf("%s",menu);if(strlen(menu)>2)f=1; /測量字符串長度。數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論