模擬時(shí)鐘轉(zhuǎn)動(dòng)程序_第1頁(yè)
模擬時(shí)鐘轉(zhuǎn)動(dòng)程序_第2頁(yè)
模擬時(shí)鐘轉(zhuǎn)動(dòng)程序_第3頁(yè)
模擬時(shí)鐘轉(zhuǎn)動(dòng)程序_第4頁(yè)
模擬時(shí)鐘轉(zhuǎn)動(dòng)程序_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、東南大學(xué)C語(yǔ)言課程設(shè)計(jì)報(bào)告課程名稱: 計(jì)算機(jī)綜合課程設(shè)計(jì) 學(xué) 院: 土木工程學(xué)院 設(shè)計(jì)題目: 模擬時(shí)鐘轉(zhuǎn)動(dòng)程序 級(jí) 別: B級(jí) 學(xué)生姓名: 韋信丞 學(xué) 號(hào): 05114419 同組學(xué)生: 學(xué) 號(hào): 指導(dǎo)教師: 郭恒寧 2015年 9 月 1 日C語(yǔ)言課程設(shè)計(jì)任務(wù)書模擬時(shí)鐘轉(zhuǎn)動(dòng)程序一、課程設(shè)計(jì)的內(nèi)容1、能模擬機(jī)械鐘表行走2、還要準(zhǔn)確利用數(shù)字顯示日期和時(shí)間3、在屏幕上顯示一個(gè)活動(dòng)時(shí)鐘4、按任意鍵時(shí)程序退出。二、課程設(shè)計(jì)應(yīng)完成的工作、 編寫完成相應(yīng)題目的程序、 編寫課程設(shè)計(jì)報(bào)告,課程設(shè)計(jì)報(bào)告應(yīng)該包含以下部分) 需求分析:包括設(shè)計(jì)題目、設(shè)計(jì)要求以及系統(tǒng)功能需求分析) 總體設(shè)計(jì):包括系統(tǒng)總體設(shè)計(jì)框架和系

2、統(tǒng)功能模塊圖) 詳細(xì)設(shè)計(jì):包括主要功能模塊的算法設(shè)計(jì)思路以及對(duì)應(yīng)的工作流程圖) 調(diào)試分析過(guò)程描述:包括測(cè)試數(shù)據(jù)、測(cè)試輸出結(jié)果以及對(duì)程序測(cè)試過(guò)程中存在問(wèn)題進(jìn)行思考(主要問(wèn)題的出錯(cuò)現(xiàn)象、出錯(cuò)原因、解決方法及其效果等,相應(yīng)效果截圖) 總結(jié):課程設(shè)計(jì)完成了哪些主要功能,是否有擴(kuò)展功能?還有哪些地方需要改進(jìn)?課程設(shè)計(jì)的學(xué)習(xí)與體會(huì)?有哪些合理化建議?) 附錄:主要原程序代碼含必要的注釋、 答辯:在實(shí)驗(yàn)室建立程序運(yùn)行環(huán)境,并在指導(dǎo)教師的監(jiān)督下,獨(dú)立解決問(wèn)題,運(yùn)行程序和回答教師的提問(wèn)。四、應(yīng)收集的資料及其主要參考文獻(xiàn) 譚浩強(qiáng)程序設(shè)計(jì)(第四版),北京:清華大學(xué)出版社,2010年6月 陳清華 朱紅 . C語(yǔ)言課程

3、設(shè)計(jì)案例精選與編程指導(dǎo)(第一版),南京:東南大學(xué)出版社,2003年6月 顧小晶 . 實(shí)用C語(yǔ)言簡(jiǎn)明教程(第一版),北京:中國(guó)電力出版社,2003年9月目錄. 設(shè)計(jì)目的與要求4. 總體設(shè)計(jì)5. 詳細(xì)設(shè)計(jì)6 3.1畫出鐘表的輪廓3.2獲取系統(tǒng)時(shí)間.調(diào)試分析7.總結(jié)10.附錄(程序)11.答辯記錄(正文處留出適當(dāng)空白)15.指導(dǎo)教師意見(jiàn)(正文處留出適當(dāng)空白)16. 目的與要求 要求:1、能模擬機(jī)械鐘表行走2、還要準(zhǔn)確利用數(shù)字顯示日期和時(shí)間3、在屏幕上顯示一個(gè)活動(dòng)時(shí)鐘4、按任意鍵時(shí)程序退出。設(shè)計(jì)總體要求:Ø 采用模塊化程序設(shè)計(jì);Ø 鼓勵(lì)可視化編程;Ø 源程序中應(yīng)有足夠的注

4、釋;Ø 學(xué)生可自行增加新功能模塊(視情況可另外加分);Ø 必須上機(jī)調(diào)試通過(guò);Ø 注重算法運(yùn)用,優(yōu)化存儲(chǔ)效率與運(yùn)算效率;Ø 需提交源程序(含有注釋)及相關(guān)文件(數(shù)據(jù)或數(shù)據(jù)庫(kù)文件); (cpp文件、txt或dat文件等)Ø 提交設(shè)計(jì)報(bào)告書,具體要求見(jiàn)以下說(shuō)明。課程設(shè)計(jì)報(bào)告要求: 需求和規(guī)格說(shuō)明:?jiǎn)栴}描述:題目要解決的問(wèn)題是什么? 設(shè)計(jì) 設(shè)計(jì)思路:主要算法思想。 總體設(shè)計(jì):程序設(shè)計(jì)組成框圖、N-S流程圖。 詳細(xì)設(shè)計(jì):模塊功能說(shuō)明(如函數(shù)功能、入口及出口參數(shù)說(shuō)明,函數(shù)調(diào)用關(guān)系描述等)。 調(diào)試與測(cè)試:調(diào)試過(guò)程中遇到的主要問(wèn)題,是如何解決的;對(duì)設(shè)計(jì)和編碼的

5、回顧討論和分析;改進(jìn)設(shè)想;經(jīng)驗(yàn)和體會(huì)等。附錄:源程序清單和結(jié)果。如果題目規(guī)定了測(cè)試數(shù)據(jù),則結(jié)果要包含這些測(cè)試數(shù)據(jù)和運(yùn)行輸出,當(dāng)然還可以含其他測(cè)試數(shù)據(jù)和運(yùn)行輸出;清單中應(yīng)有足夠的注釋。. 總體設(shè)計(jì)畫出鐘表模擬時(shí)鐘轉(zhuǎn)動(dòng)程序讓時(shí)針,分針,秒針隨著系統(tǒng)的時(shí)間動(dòng)起來(lái)獲取系統(tǒng)時(shí)間并畫出時(shí)針,分針,秒針首先,先畫出個(gè)鐘的大致輪廓。從輸出數(shù)字到畫出外輪廓,到標(biāo)出短線到畫出時(shí)針、分針、秒針。這個(gè)輪廓就已經(jīng)完成了。然后,為了更加這個(gè)鐘的實(shí)用性。就通過(guò)獲取系統(tǒng)時(shí)間來(lái)結(jié)合實(shí)際意義,這是最簡(jiǎn)單,最好的方法。從應(yīng)用上,它顯示的是實(shí)際的時(shí)間,增強(qiáng)了可用性;從編程上,不用再?gòu)?fù)雜地再編一個(gè)更新時(shí)間的函數(shù),減少程序的篇幅、復(fù)雜性

6、和編程者的工作量。接著順帶利用時(shí)間的變量名來(lái)畫時(shí)針,分針,秒針。最后,為了讓時(shí)針,分針,秒針讓觀察者看起來(lái)是連續(xù)的變化,即形象地模擬真實(shí)的機(jī)械鐘表那樣運(yùn)動(dòng),就用函數(shù)讓時(shí)針,分針,秒針跟著時(shí)間一齊走動(dòng)。. 詳細(xì)設(shè)計(jì)1. 畫出鐘表的輪廓:1)鐘表的外輪廓 circle(320,240,189); circle(320,240,180);2)畫出鐘內(nèi)的短線x1=180*sin(i*6*pi/180)+320; y1=180*cos(i*6*pi/180)+240; x2=(180-l)*sin(i*6*pi/180)+320; y2=(180-l)*cos(i*6*pi/180)+240; line

7、(x1,y1,x2,y2);3)畫出時(shí)針、分針、秒針i=now.sec; j=now.min; k=now.hour; dx3=l3*sin(i*6*pi/180); dy3=l3*cos(i*6*pi/180); dx2=l2*sin(j*6*pi/180+i*6*pi/180/60); dy2=l2*cos(j*6*pi/180+i*6*pi/180/60); dx1=l1*sin(k*pi/6+j*pi/360); dy1=l1*cos(k*pi/6+j*pi/360);line(x1,y1,x1+dx3,y1-dy3); line(x1,y1,x1+dx2,y1-dy2); line(

8、x1,y1,x1+dx1,y1-dy1);2. 獲取系統(tǒng)時(shí)間:time(&rawtime);t=localtime(&rawtime);now.sec=t->tm_sec;now.min=t->tm_min;now.hour=t->tm_hour;now.year=t->tm_year;now.mon=t->tm_mon;now.day=t->tm_mday;now.week=t->tm_wday;. 調(diào)試分析在VC環(huán)境中,已經(jīng)將graphics算法刪除了,所以在一開(kāi)始就發(fā)現(xiàn)在編譯的時(shí)候出現(xiàn)了graphicsh.h頭文件無(wú)法識(shí)別的錯(cuò)誤。

9、我上網(wǎng)查閱了相關(guān)回答,得知了安裝graphics算法的方法,即通過(guò)EasyX插件來(lái)安裝該頭文件。解決了這個(gè)問(wèn)題,便可以調(diào)用圖形處理的函數(shù)。再后來(lái),發(fā)現(xiàn)書本教程主要面向的是TC環(huán)境,所以在獲取時(shí)間這個(gè)問(wèn)題上,教材運(yùn)用的是gettime和getdate函數(shù),這兩個(gè)函數(shù)在VC環(huán)境下是不能運(yùn)用的,網(wǎng)上也沒(méi)有對(duì)這兩個(gè)函數(shù)進(jìn)行補(bǔ)充的安裝插件,所以只能從用其他函數(shù)代替這個(gè)方向著眼解決。于是我查找了關(guān)于VC環(huán)境中獲取系統(tǒng)時(shí)間的函數(shù),發(fā)現(xiàn)了需要學(xué)習(xí)幾個(gè)知識(shí)點(diǎn),首先是time_t類型,這個(gè)類型是一種整型,表示從1900年1月1日0:00:00時(shí)(這個(gè)知識(shí)點(diǎn)是在網(wǎng)上查閱到的,網(wǎng)上寫的是1970年1月1日0:00:0

10、0,但從運(yùn)行結(jié)果上看是1900年)到當(dāng)前系統(tǒng)時(shí)刻的秒數(shù),用到的函數(shù)是time_t time(time_t *)函數(shù),其返回值就是time_t類型,返回值儲(chǔ)存到指針?biāo)傅牡刂罚ɑ蛘哒f(shuō)直接是一個(gè)地址)中。當(dāng)然這還不夠,還需要將這秒數(shù)轉(zhuǎn)化成直觀的時(shí)間格式,這就用到了struct tm localtime(time_t *rawtime)函數(shù),將time_t類型格式化成struct tm類型(系統(tǒng)預(yù)定義了的結(jié)構(gòu)體),再將格式化了的數(shù)據(jù)傳到我自己定義的結(jié)構(gòu)體便于利用,這便解決了在VC環(huán)境下獲取系統(tǒng)時(shí)間的問(wèn)題。獲取時(shí)間問(wèn)題解決后,就到怎么實(shí)現(xiàn)時(shí)間的遞進(jìn),一開(kāi)始我是想用循環(huán)結(jié)構(gòu),每次循環(huán)都將秒加一,然后再編

11、出秒一直到年的遞進(jìn)規(guī)則,最后,在每個(gè)循環(huán)結(jié)束時(shí),都將程序暫停執(zhí)行一秒(VC環(huán)境中用的是void Sleep(int millisecond)函數(shù))。首先這本身就很復(fù)雜了,更復(fù)雜的還是閏年的確定上。由于辨別是否是閏年的程序要相當(dāng)?shù)亻L(zhǎng),從程序的簡(jiǎn)便化出發(fā)就排除了引入系統(tǒng)自動(dòng)辨別閏年的程序模塊,一開(kāi)始我考慮的是系統(tǒng)的運(yùn)行時(shí)間不會(huì)很長(zhǎng),可以通過(guò)程序運(yùn)行前向用戶詢問(wèn)今年是否是閏年。再后來(lái)一想,一個(gè)好用的系統(tǒng),除了功能多樣化以外,還需要自動(dòng)化,所以我一直想解決這個(gè)非自動(dòng)化的缺陷。后來(lái)我一想,為什么一定要自己編寫出時(shí)間的變化呢?系統(tǒng)本身就是在變化的,為什么不直接利用系統(tǒng)時(shí)間的變化來(lái)帶動(dòng)程序時(shí)間的變化呢?因此

12、,我就將獲取系統(tǒng)時(shí)間步驟放到了for循環(huán)中,這樣利用同步直接實(shí)現(xiàn)了時(shí)間的正確遞變。在改變了思路的時(shí)候,我又想到,由于獲得的時(shí)間的毫秒級(jí)數(shù)據(jù)與程序開(kāi)始運(yùn)行時(shí)刻有關(guān),這就導(dǎo)致了程序時(shí)間與系統(tǒng)時(shí)間就有了毫秒級(jí)的誤差,我就想能否將原來(lái)思路中用到的Sleep函數(shù)刪掉,通過(guò)頻率很高地獲取時(shí)間來(lái)達(dá)到顯示精準(zhǔn)的時(shí)間的目的。于是我就嘗試把Sleep(1000);語(yǔ)句刪掉,然后運(yùn)行。結(jié)果令我比較失望,由于系統(tǒng)執(zhí)行for循環(huán)的速度并不很快,就造成了圖像顯示的頻閃,非常不美觀,索性就留下了Sleep(1000);語(yǔ)句,毫秒級(jí)的誤差應(yīng)用上也不需要消除。還有一個(gè)問(wèn)題是模擬時(shí)鐘圖像的變化問(wèn)題,即實(shí)現(xiàn)簡(jiǎn)單動(dòng)畫化,剛開(kāi)始,我想

13、采用的是異或劃線法刪掉前一秒的圖像,即通過(guò)setwritemode(1);語(yǔ)句設(shè)定劃線模式,在這個(gè)模式下,如果先畫了一條曲線,那么再有在相同位置再畫一條一模一樣的曲線的命令,即完全重合時(shí),那么就是刪除這條曲線的意思。但是實(shí)際運(yùn)行過(guò)程中,發(fā)現(xiàn)采用了這種變化方法的時(shí)分秒針的圖像在顯示屏上根本沒(méi)有顯示,只有不采用這種方法畫出的鐘表輪廓得以顯示。(如下圖1)我一開(kāi)始是想繼續(xù)按這思路解決這個(gè)問(wèn)題的,但是我又想,課題中有數(shù)字日歷及時(shí)鐘的顯示要求,這種字符串圖形通過(guò)這種方式是否能清楚呢?最后我決定還是換個(gè)方法,決定用cleardevice()函數(shù)對(duì)整個(gè)屏幕圖像進(jìn)行清零,再把所有畫圖的內(nèi)容全都放在循環(huán)里,果然

14、程序便能順利正確地運(yùn)行起來(lái)。(如下圖2) 圖1圖2剩下的難題就只剩下數(shù)字時(shí)鐘和日歷的顯示了,我查閱了教材,輸出字符串的函數(shù)有兩種,一種是void far outtextxy(int x,int y,char *str),還有一種void moveto(int x,int y)搭配void far outtext(char *str),但是是要想實(shí)現(xiàn)字符串加上變量的數(shù)據(jù)輸出,就必須通過(guò)int sprintf(char *str,char *format,variable-list)先格式化format內(nèi)容到指針str所指的數(shù)組里(該數(shù)組要足夠大),然后通過(guò)上述兩個(gè)方法輸出str所指的數(shù)組里的內(nèi)容

15、,這次問(wèn)題解決得很順利,一次就能成功執(zhí)行該功能。. 總結(jié)在這次模擬時(shí)鐘轉(zhuǎn)動(dòng)程序設(shè)計(jì)中,我遇到了很多困難,通過(guò)查資料,向同學(xué)、學(xué)長(zhǎng)、老師請(qǐng)教,才一一得到解決。我發(fā)現(xiàn)平時(shí)自學(xué)到的知識(shí)太少了,“書到用時(shí)方恨少”,今后我要把更多時(shí)間用在基礎(chǔ)學(xué)習(xí)上,利用課余時(shí)間多看課外書籍,拓寬知識(shí)面。C語(yǔ)言的設(shè)計(jì)必須結(jié)合實(shí)際,充分考慮界面友好等人性化設(shè)置,這就要求我們要多觀察,敢創(chuàng)新。另外上機(jī)實(shí)驗(yàn)是必不可少的,理論的東西學(xué)得再好,不結(jié)合實(shí)驗(yàn)區(qū)驗(yàn)證始終只能停留在理論階段。通過(guò)此次實(shí)戰(zhàn)演練,我還學(xué)到很重要的一點(diǎn),就是要虛心請(qǐng)教他人,個(gè)人的力量總是有限的,只有發(fā)揮眾人的智慧才能把任務(wù)完成的更好,這在今后的工作中也是相當(dāng)重要

16、的。最后,感謝郭恒寧老師的指導(dǎo)。. 附錄#include<graphics.h>#include<conio.h>#include<math.h>#include<windows.h>#include<time.h>#include<stdlib.h>#include<stdio.h>#define pi 3.141592653struct timeint sec; int min; int hour; int year; int mon; int day;int week; now;int main()voi

17、d lunkuo();int gdriver=VGA,gmode=VGAHI;double x1=320,y1=240,dx1,dx2,dy1,dy2,dx3,dy3,i,j,k;int l1=100,l2=150,l3=160;char ch,s200;time_t rawtime;struct tm *t;initgraph(&gdriver,&gmode,"d:clydeturboc2");/圖形初始化for(;!(kbhit();)/一旦有鍵盤按鍵按下,終止循環(huán)lunkuo();/畫出輪廓 time(&rawtime); t=localtim

18、e(&rawtime); now.sec=t->tm_sec; now.min=t->tm_min; now.hour=t->tm_hour; now.year=t->tm_year; now.mon=t->tm_mon; now.day=t->tm_mday; now.week=t->tm_wday;/獲取時(shí)間 i=now.sec; j=now.min; k=now.hour; dx3=l3*sin(i*6*pi/180); dy3=l3*cos(i*6*pi/180); dx2=l2*sin(j*6*pi/180+i*6*pi/180/60); dy2=l2*cos(j*6*pi/180+i*6*pi/180/60); dx1=l1*sin(k*pi/6+j*pi/360); dy1=l1*cos(k*pi/6+j*pi/360); line(x1,y1,x1+dx3,y1-dy3); line(x1,y1,x1+dx2,y1-dy2); l

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論