




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 課程設(shè)計(jì) 課程名稱 語言程序課程設(shè)計(jì) 題目名稱 編寫萬年歷系統(tǒng) 學(xué)生學(xué)院 專業(yè)班級(jí) 學(xué) 號(hào) 學(xué)生姓名 指導(dǎo)教師 2009 年 06 月 04日廣東工業(yè)大學(xué)課程設(shè)計(jì)任務(wù)書題目名稱 編寫萬年歷系統(tǒng) 學(xué)生學(xué)院專業(yè)班級(jí)姓名學(xué)號(hào)一、 課程設(shè)計(jì)的內(nèi)容二、 課程設(shè)計(jì)的要求與數(shù)據(jù)、進(jìn)一步掌握和利用語言進(jìn)行程序設(shè)計(jì)的能力;、進(jìn)一步理解和運(yùn)用結(jié)構(gòu)化程序設(shè)計(jì)的思想和方法;、初步掌握開發(fā)一個(gè)小型實(shí)用系統(tǒng)的基本方法;、學(xué)會(huì)調(diào)試一個(gè)較長程序的基本方法;、學(xué)會(huì)利用流程圖或圖表示法;、掌握書寫程序設(shè)計(jì)開發(fā)文檔能力。三、 課程設(shè)計(jì)應(yīng)完成的工作、編寫完成相應(yīng)題目程序;、編寫課程設(shè)計(jì)報(bào)告,課程設(shè)計(jì)報(bào)告的
2、內(nèi)容包括一下個(gè)部分:)需求分析:包括設(shè)計(jì)題目、設(shè)計(jì)要求以及系統(tǒng)功能需求分析;)總體設(shè)計(jì):包括系統(tǒng)總體設(shè)計(jì)框架和系統(tǒng)功能模塊圖;)詳細(xì)設(shè)計(jì):包括主要功能模塊的算法設(shè)計(jì)思路以及對(duì)應(yīng)的工程流程圖;)調(diào)試分析過程描述:包括測試數(shù)據(jù)、測試輸出結(jié)果,以及對(duì)程序調(diào)試過程中存在問題的思考(列出主要問題的出錯(cuò)現(xiàn)象、出錯(cuò)原因、解決方法及效果等,適當(dāng)?shù)陌Y(jié)果截圖);)總結(jié):課程設(shè)計(jì)完成了哪些功能,有沒有什么擴(kuò)展功能?還有哪些地方需要改經(jīng)?課程設(shè)計(jì)過程中的學(xué)習(xí)體會(huì)和收獲、對(duì)本次課程設(shè)計(jì)的認(rèn)識(shí)以及自己的建議等內(nèi)容;)附錄:主要源代碼,含必要的注釋。、答辯:在實(shí)驗(yàn)式建立程序運(yùn)行的環(huán)境,并在指導(dǎo)老師的監(jiān)督下,獨(dú)立解決問題
3、、運(yùn)行程序和回答老師問題。四、課程設(shè)計(jì)進(jìn)程安排序號(hào)設(shè)計(jì)各階段內(nèi)容地點(diǎn)起止日期下達(dá)任務(wù)書,說明設(shè)計(jì)要求;收集資料實(shí)驗(yàn)3#51316周前總體方案設(shè)計(jì),詳細(xì)設(shè)計(jì)實(shí)驗(yàn)3#51716周前編寫程序,調(diào)試分析實(shí)驗(yàn)3#51715、16周撰寫報(bào)告并上交,答辯實(shí)驗(yàn)3#51716周五、應(yīng)收集的資料及主要參考文獻(xiàn)發(fā)出任務(wù)日期:年月日指導(dǎo)老師簽名:計(jì)劃完成日期:年月日基層教學(xué)單位負(fù)責(zé)人簽章:主管院長簽章:目錄目的與要求4總體方案5系統(tǒng)設(shè)計(jì)5.1功能模塊設(shè)計(jì)5調(diào)試分析9總結(jié)和展望9附錄10答辯記錄16指導(dǎo)教師意見17目的與要求目的:編寫一個(gè)一萬年歷系統(tǒng),為學(xué)生提供一個(gè)動(dòng)手動(dòng)腦、獨(dú)立實(shí)踐的機(jī)會(huì),將課本上的理論知識(shí)和實(shí)際應(yīng)用
4、問題進(jìn)行有機(jī)結(jié)合,鍛煉學(xué)生分析、解決實(shí)際問題的能力,提高學(xué)生項(xiàng)目開發(fā)及程序調(diào)試能力??傮w要求:1)對(duì)系統(tǒng)進(jìn)行功能模塊分析、控制模塊分析正確;2)系統(tǒng)分析要實(shí)用;3)編程簡練,可用,功能全面,具有較好的健壯性;4)說明書、流程圖要清楚; 題目要求:模仿現(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)實(shí)生活中的掛歷,因此我認(rèn)為程序功能至少要以下方面:1) 顯示系統(tǒng)的年、月、日和時(shí)間(時(shí)間為可選模塊,因?yàn)轭}目不作要求);2) 模仿現(xiàn)實(shí)掛歷的外表,即每7天換一行,每一天對(duì)應(yīng)當(dāng)天是星期幾;3) 每
5、月天數(shù)及星期幾要與現(xiàn)實(shí)一致;4) 最好有查詢功能,能夠查詢某年某月的掛歷;5) 在各功能間切換時(shí)要自然,并有相應(yīng)的文字提示;6) 界面友好、美觀。7) 程序函數(shù)合理,簡潔,名稱含義明了,有相應(yīng)注釋。系統(tǒng)設(shè)計(jì).1功能模塊設(shè)計(jì)1)定義全局變量和全局?jǐn)?shù)組、指針等;2)把程序分為若干個(gè)函數(shù),分別為:1·showtime ( ) : 顯示系統(tǒng)時(shí)間 ;2·nowyear ( )、nowmonth ( )、nowday ( ) : 得到系統(tǒng)時(shí)間的年、月、日。3·getkey1 ( int year , int key )、getkey2 ( int month , int ke
6、y ) : 檢測按鍵,若按了上下左右方向鍵就return 給下一個(gè)應(yīng)用它的函數(shù)。4·isleap ( int year ) :計(jì)算該年份是否為閏年,因?yàn)殚c年和非閏年的2月份天數(shù)不同。5·isweek ( int year , int month , int day ) :計(jì)算某年某月某天為星期幾,在本程序中他有兩個(gè)作用,1是計(jì)算某月的第一天星期幾,以決定前面有多少個(gè)空格,2是計(jì)算系統(tǒng)時(shí)間當(dāng)天是星期幾。6·showdata ( ) :顯示系統(tǒng)時(shí)間當(dāng)月的掛歷題目要求之一。7·checkdata ( ) :顯示要查詢月的掛歷。8·reno ( ) :
7、刷新系統(tǒng)時(shí)間和當(dāng)月的掛歷,能夠?qū)崿F(xiàn)題目中“當(dāng)系統(tǒng)時(shí)間變?yōu)橄乱辉聲r(shí)自動(dòng)翻到下一月。9·str( ) :顯示要查詢月的掛歷并實(shí)現(xiàn)循環(huán)查詢。10·main( ) :主函數(shù),整合其它函數(shù)實(shí)現(xiàn)顯示系統(tǒng)時(shí)間、查詢月掛歷等一系列功能。3) 流程圖: 主流程:getkey1(int year,int key)getkey2(int month,int key) :showtime( ):Isleap(int year ):nowyear( )、nowmonth( )、nowday( ):int showdata ( ) :main( ) :int isweek(int year,int m
8、onth,int day):int reno ( ) :int str( ) :int checkdata ( ) :各個(gè)函數(shù)互相嵌套,并最終匯集到main( )函數(shù)下,共同實(shí)現(xiàn)目的功能(1)顯示系統(tǒng)時(shí)間并能夠自動(dòng)翻頁;(2)查詢某年某月功能;(3)兩模塊間無縫連接,自由切換。調(diào)試分析按題目的要求,我最初制作了一個(gè)掛歷,完全滿足題目要求顯示當(dāng)前月的掛歷、時(shí)間變后自動(dòng)翻頁。但是我認(rèn)為這個(gè)最初的作品不夠完美,偏短(只有幾十行),因此后來我在最初作品的基礎(chǔ)上加入了新的功能并加以完善,最終完成了我現(xiàn)在的作品。在原基礎(chǔ)上,我加入了3個(gè)新的功能(1)顯示時(shí)間精確到秒,并每秒刷新一次,即保持與系統(tǒng)時(shí)間一致;
9、(2)加入查找功能,通過方向鍵可以查詢公元后的任何一個(gè)月的掛歷;(3)顯示當(dāng)月掛歷模塊與查詢模塊之間實(shí)現(xiàn)無縫轉(zhuǎn)換。在制作過程中也遇到了很多問題,通過努力都一一得到解決:1) 許多函數(shù)以前沒見過,最終通過百度獲取到時(shí)間函數(shù)time(NULL)、localtime(<)、ctime(<) ;刷屏函數(shù)clrscr( ) ;檢測鍵盤輸入函數(shù)getch( )、!kbhit( ),等等。2) 最初在函數(shù)isweek( )中,用week = allday % 7 - 1 來計(jì)算當(dāng)天是星期幾,在調(diào)試中發(fā)現(xiàn),有時(shí)正常有時(shí)出錯(cuò),經(jīng)檢查發(fā)現(xiàn)是上述代碼有問題:當(dāng)星期六時(shí)結(jié)果是-1,很明顯錯(cuò)誤。
10、后來改為week = (allday-1) % 7 后恢復(fù)正常。3) 調(diào)試過程中發(fā)現(xiàn)在查詢模式下只能查詢當(dāng)前月(年)的前一個(gè)月(年)和后一個(gè)月(年),經(jīng)研究發(fā)現(xiàn)是因?yàn)樽兞坎辉趕tr()函數(shù)中而是在另一個(gè)函數(shù)中,修改值無法保存,因此每次循環(huán)后年和月就初始化了。后來我把年和月的變量放到str( )函數(shù)中,問題解決。······經(jīng)過最終調(diào)試,本程序已經(jīng)可以完美的實(shí)現(xiàn)上述各個(gè)功能??偨Y(jié)和展望經(jīng)過本次任務(wù),我對(duì)C語言的制作有了更深層次的了解,制作技巧也相應(yīng)有了提高,也熟悉了很多以前沒學(xué)過、考試不會(huì)考但很實(shí)用的函數(shù)、制作方法等。更重要的是,這是我
11、的第一次C語言大作業(yè),它令我從以前的最多編寫幾十行的程序的程度進(jìn)步到能夠編寫幾百行的代碼,學(xué)會(huì)宏觀的思考如何編寫一個(gè)大程序,學(xué)會(huì)全面思考問題。通過這次作業(yè),我也增加了對(duì)C語言的興趣,相信我以后會(huì)有更多進(jìn)步。我還有更多的想法去改進(jìn)我的這個(gè)程序,由于時(shí)間有限,這次無法實(shí)現(xiàn)。我期待在有空后能修改出一個(gè)更完美的程序。附錄#include "stdio.h"#include "time.h"int key ;int year , month ;int mon213 = 0,31,28,31,30,31,30,31,31,30,31,30,31 , /*定義各個(gè)月的
12、天數(shù)*/ 0,31,29,31,30,31,30,31,31,30,31,30,31 ;time_t lt;int showtime ( ) /*顯示系統(tǒng)時(shí)間*/ lt = time(NULL) ;printf(" 星期/月/日 時(shí)間 年n") ;printf(" %s",ctime(<) ; /*輸出字符串形式的系統(tǒng)時(shí)間*/int nowyear ( ) /*系統(tǒng)的年份*/ struct tm *local ;lt = time (NULL) ;local = localtime (<) ;return local->tm
13、_year + 1900 ; /*系統(tǒng)年份從1900年為0年開始計(jì)算*/int nowmonth ( ) /*系統(tǒng)的月份*/struct tm *local ;lt = time ( NULL ) ;local = localtime ( < ) ;return local->tm_mon + 1 ;int nowday ( ) /*系統(tǒng)在哪一天*/struct tm *local ;lt = time ( NULL ) ;local = localtime ( < ) ;return local->tm_mday ;int getkey1 ( int ye
14、ar , int key ) /*檢測鍵盤的上下方向鍵*/if ( 72 = key ) /*上方向鍵代碼是72*/year+ ;else if ( 80 = key ) /*下方向鍵代碼是80*/year- ;return year ; int getkey2 ( int month , int key ) /*檢測鍵盤的左右方向鍵*/if ( 77 = key ) /*右方向鍵代碼是77*/month+ ;else if ( 75 = key ) /*左方向鍵代碼是75*/month- ;return month ;int isleap ( int year ) /*判斷是否是閏年*/ /
15、*被4整除但不被100整除的年時(shí)閏年*/int leap ; /*被400整除的是閏年*/leap = (year % 4 = 0) && (year % 100 != 0) | (year % 400 = 0) ;return leap ;int isweek ( int year , int month , int day ) /*判斷X年X月X日是星期幾*/int i , j , week ;int allday = 0 ;for ( i = 0 ; i < year ; i+ )if (1 = isleap ( i ) /*閏年有366天*/allday = al
16、lday + 366 ;elseallday = allday + 365 ; /*非閏年有365天*/for ( j = 1 ; j < month ; j+ )allday = allday + mon isleap( year ) j ;allday = allday + day ;week = ( allday -1 ) % 7 ; /*計(jì)算當(dāng)天為星期幾,星期日至六為0至6*/return week ;int showdata ( ) /*顯示系統(tǒng)月份的掛歷*/ int i , z ;int j = 0 ;printf("n") ;printf("
17、%d年 %d月n" , nowyear( ) , nowmonth( ) ) ;printf(" *n") ;printf(" Sun Mon Tues Wed Thur Fri Satn") ;printf(" *n") ; z = isweek ( nowyear( ) , nowmonth( ) , 1 ) ; for ( i = 0 ; i < z ; i+ ) printf(" ") ; for ( i=0 ; i < mon isleap( nowyear( ) ) nowmont
18、h( ) ; i+ ) if (i = nowday( ) - 1) && (i < 9) /*在系統(tǒng)時(shí)間的今天上做記號(hào)【】*/ printf(" %d" , i + 1 ) ; else if ( i = nowday( ) - 1 ) printf(" %2d" , i + 1 ) ; else if ( i = nowday( ) ) printf("%5d" , i + 1 ) ; else printf( "%6d" , i + 1 ) ; if ( 0 = ( z + i + 1
19、) % 7 ) && ( i + 1) != mon isleap( nowyear( ) nowmonth( ) ) /*每7天換一行*/ j + ; printf( "n") ; if ( j = 3 ) /*令提示語保持在同一行*/ printf("nnnn") ; if ( j = 4 ) printf("nnn") ; if ( j = 5 ) printf("nn") ; printf(" 按方向鍵進(jìn)入查詢狀態(tài)") ; int checkdata ( ) /*顯示要查
20、詢的月份的掛歷*/int i , z ;int j = 0 ;printf("nnn") ;printf(" %d年 %d月n" , year , month ) ;printf(" *n") ;printf(" Sun Mon Tues Wed Thur Fri Satn") ;printf(" *n") ; z = isweek( year , month , 1 ) ; for ( i = 0 ; i < z ; i+ ) printf(" ") ; for (
21、i = 0 ; i < mon isleap ( year ) month ; i+ ) printf( "%6d" , i+1 ) ; if ( 0 = ( z + i + 1 ) % 7 ) && ( i + 1 ) != mon isleap ( year ) month ) j + ; printf( "n") ; if ( j = 3 ) /*令提示語保持在同一行*/ printf("nnnn") ; if ( j = 4 ) printf("nnn") ; if ( j = 5 ) printf("nn") ; printf(" 按上下方向鍵查詢年,按左右方向鍵查詢月n") ; printf(" 按ESC鍵退回系統(tǒng)時(shí)間") ;i
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 心胸血管外科護(hù)理查房
- 手外科器械護(hù)理查房
- 廣東南海中考數(shù)學(xué)試卷
- 手術(shù)室護(hù)理進(jìn)修匯報(bào)總結(jié)
- 湖北荊門中考2024數(shù)學(xué)試卷
- 成分含量測定-洞察及研究
- 2025房屋抵押借款合同范本
- 湖北歷年來高考數(shù)學(xué)試卷
- 土壤污染修復(fù)技術(shù)實(shí)施對(duì)生態(tài)農(nóng)業(yè)影響研究報(bào)告
- 2025非全日制工作人員勞動(dòng)合同規(guī)范文本
- 2026年高考政治一輪復(fù)習(xí):高考政治命題備考策略
- 2024年湖南省辰溪縣檔案局公開招聘試題帶答案
- 鋰離子電池安全性能優(yōu)化:針刺實(shí)驗(yàn)與失效機(jī)制分析
- 2025至2030年中國森林消防車行業(yè)市場全景評(píng)估及未來趨勢研判報(bào)告
- 2025生產(chǎn)與運(yùn)作管理試題及答案
- 暑假的一次冒險(xiǎn)經(jīng)歷記事作文4篇范文
- 入職預(yù)支薪資協(xié)議書
- 《中國特色社會(huì)主義理論體系的形成和發(fā)展》(課件)
- 職業(yè)技術(shù)學(xué)院嬰幼兒托育服務(wù)與管理專業(yè)人才培養(yǎng)方案
- 2025臺(tái)州市椒江區(qū)輔警考試試卷真題
- 中學(xué)生零食消費(fèi)情況調(diào)查與分析
評(píng)論
0/150
提交評(píng)論