




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、東南大學C語言課程設計報告課程名稱: 計算機綜合課程設計 學 院: 土木工程學院 設計題目: 模擬時鐘轉動程序 級 別: B級 學生姓名: 韋信丞 學 號: 05114419 同組學生: 學 號: 指導教師: 郭恒寧 2015年 9 月 1 日C語言課程設計任務書模擬時鐘轉動程序一、課程設計的內容1、能模擬機械鐘表行走2、還要準確利用數(shù)字顯示日期和時間3、在屏幕上顯示一個活動時鐘4、按任意鍵時程序退出。二、課程設計應完成的工作、 編寫完成相應題目的程序、 編寫課程設計報告,課程設計報告應該包含以下部分) 需求分析:包括設計題目、設計要求以及系統(tǒng)功能需求分析) 總體設計:包括系統(tǒng)總體設計框架和系
2、統(tǒng)功能模塊圖) 詳細設計:包括主要功能模塊的算法設計思路以及對應的工作流程圖) 調試分析過程描述:包括測試數(shù)據(jù)、測試輸出結果以及對程序測試過程中存在問題進行思考(主要問題的出錯現(xiàn)象、出錯原因、解決方法及其效果等,相應效果截圖) 總結:課程設計完成了哪些主要功能,是否有擴展功能?還有哪些地方需要改進?課程設計的學習與體會?有哪些合理化建議?) 附錄:主要原程序代碼含必要的注釋、 答辯:在實驗室建立程序運行環(huán)境,并在指導教師的監(jiān)督下,獨立解決問題,運行程序和回答教師的提問。四、應收集的資料及其主要參考文獻 譚浩強程序設計(第四版),北京:清華大學出版社,2010年6月 陳清華 朱紅 . C語言課程
3、設計案例精選與編程指導(第一版),南京:東南大學出版社,2003年6月 顧小晶 . 實用C語言簡明教程(第一版),北京:中國電力出版社,2003年9月目錄. 設計目的與要求4. 總體設計5. 詳細設計6 3.1畫出鐘表的輪廓3.2獲取系統(tǒng)時間.調試分析7.總結10.附錄(程序)11.答辯記錄(正文處留出適當空白)15.指導教師意見(正文處留出適當空白)16. 目的與要求 要求:1、能模擬機械鐘表行走2、還要準確利用數(shù)字顯示日期和時間3、在屏幕上顯示一個活動時鐘4、按任意鍵時程序退出。設計總體要求:Ø 采用模塊化程序設計;Ø 鼓勵可視化編程;Ø 源程序中應有足夠的注
4、釋;Ø 學生可自行增加新功能模塊(視情況可另外加分);Ø 必須上機調試通過;Ø 注重算法運用,優(yōu)化存儲效率與運算效率;Ø 需提交源程序(含有注釋)及相關文件(數(shù)據(jù)或數(shù)據(jù)庫文件); (cpp文件、txt或dat文件等)Ø 提交設計報告書,具體要求見以下說明。課程設計報告要求: 需求和規(guī)格說明:問題描述:題目要解決的問題是什么? 設計 設計思路:主要算法思想。 總體設計:程序設計組成框圖、N-S流程圖。 詳細設計:模塊功能說明(如函數(shù)功能、入口及出口參數(shù)說明,函數(shù)調用關系描述等)。 調試與測試:調試過程中遇到的主要問題,是如何解決的;對設計和編碼的
5、回顧討論和分析;改進設想;經驗和體會等。附錄:源程序清單和結果。如果題目規(guī)定了測試數(shù)據(jù),則結果要包含這些測試數(shù)據(jù)和運行輸出,當然還可以含其他測試數(shù)據(jù)和運行輸出;清單中應有足夠的注釋。. 總體設計畫出鐘表模擬時鐘轉動程序讓時針,分針,秒針隨著系統(tǒng)的時間動起來獲取系統(tǒng)時間并畫出時針,分針,秒針首先,先畫出個鐘的大致輪廓。從輸出數(shù)字到畫出外輪廓,到標出短線到畫出時針、分針、秒針。這個輪廓就已經完成了。然后,為了更加這個鐘的實用性。就通過獲取系統(tǒng)時間來結合實際意義,這是最簡單,最好的方法。從應用上,它顯示的是實際的時間,增強了可用性;從編程上,不用再復雜地再編一個更新時間的函數(shù),減少程序的篇幅、復雜性
6、和編程者的工作量。接著順帶利用時間的變量名來畫時針,分針,秒針。最后,為了讓時針,分針,秒針讓觀察者看起來是連續(xù)的變化,即形象地模擬真實的機械鐘表那樣運動,就用函數(shù)讓時針,分針,秒針跟著時間一齊走動。. 詳細設計1. 畫出鐘表的輪廓:1)鐘表的外輪廓 circle(320,240,189); circle(320,240,180);2)畫出鐘內的短線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)畫出時針、分針、秒針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)時間: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;. 調試分析在VC環(huán)境中,已經將graphics算法刪除了,所以在一開始就發(fā)現(xiàn)在編譯的時候出現(xiàn)了graphicsh.h頭文件無法識別的錯誤。
9、我上網查閱了相關回答,得知了安裝graphics算法的方法,即通過EasyX插件來安裝該頭文件。解決了這個問題,便可以調用圖形處理的函數(shù)。再后來,發(fā)現(xiàn)書本教程主要面向的是TC環(huán)境,所以在獲取時間這個問題上,教材運用的是gettime和getdate函數(shù),這兩個函數(shù)在VC環(huán)境下是不能運用的,網上也沒有對這兩個函數(shù)進行補充的安裝插件,所以只能從用其他函數(shù)代替這個方向著眼解決。于是我查找了關于VC環(huán)境中獲取系統(tǒng)時間的函數(shù),發(fā)現(xiàn)了需要學習幾個知識點,首先是time_t類型,這個類型是一種整型,表示從1900年1月1日0:00:00時(這個知識點是在網上查閱到的,網上寫的是1970年1月1日0:00:0
10、0,但從運行結果上看是1900年)到當前系統(tǒng)時刻的秒數(shù),用到的函數(shù)是time_t time(time_t *)函數(shù),其返回值就是time_t類型,返回值儲存到指針所指的地址(或者說直接是一個地址)中。當然這還不夠,還需要將這秒數(shù)轉化成直觀的時間格式,這就用到了struct tm localtime(time_t *rawtime)函數(shù),將time_t類型格式化成struct tm類型(系統(tǒng)預定義了的結構體),再將格式化了的數(shù)據(jù)傳到我自己定義的結構體便于利用,這便解決了在VC環(huán)境下獲取系統(tǒng)時間的問題。獲取時間問題解決后,就到怎么實現(xiàn)時間的遞進,一開始我是想用循環(huán)結構,每次循環(huán)都將秒加一,然后再編
11、出秒一直到年的遞進規(guī)則,最后,在每個循環(huán)結束時,都將程序暫停執(zhí)行一秒(VC環(huán)境中用的是void Sleep(int millisecond)函數(shù))。首先這本身就很復雜了,更復雜的還是閏年的確定上。由于辨別是否是閏年的程序要相當?shù)亻L,從程序的簡便化出發(fā)就排除了引入系統(tǒng)自動辨別閏年的程序模塊,一開始我考慮的是系統(tǒng)的運行時間不會很長,可以通過程序運行前向用戶詢問今年是否是閏年。再后來一想,一個好用的系統(tǒng),除了功能多樣化以外,還需要自動化,所以我一直想解決這個非自動化的缺陷。后來我一想,為什么一定要自己編寫出時間的變化呢?系統(tǒng)本身就是在變化的,為什么不直接利用系統(tǒng)時間的變化來帶動程序時間的變化呢?因此
12、,我就將獲取系統(tǒng)時間步驟放到了for循環(huán)中,這樣利用同步直接實現(xiàn)了時間的正確遞變。在改變了思路的時候,我又想到,由于獲得的時間的毫秒級數(shù)據(jù)與程序開始運行時刻有關,這就導致了程序時間與系統(tǒng)時間就有了毫秒級的誤差,我就想能否將原來思路中用到的Sleep函數(shù)刪掉,通過頻率很高地獲取時間來達到顯示精準的時間的目的。于是我就嘗試把Sleep(1000);語句刪掉,然后運行。結果令我比較失望,由于系統(tǒng)執(zhí)行for循環(huán)的速度并不很快,就造成了圖像顯示的頻閃,非常不美觀,索性就留下了Sleep(1000);語句,毫秒級的誤差應用上也不需要消除。還有一個問題是模擬時鐘圖像的變化問題,即實現(xiàn)簡單動畫化,剛開始,我想
13、采用的是異或劃線法刪掉前一秒的圖像,即通過setwritemode(1);語句設定劃線模式,在這個模式下,如果先畫了一條曲線,那么再有在相同位置再畫一條一模一樣的曲線的命令,即完全重合時,那么就是刪除這條曲線的意思。但是實際運行過程中,發(fā)現(xiàn)采用了這種變化方法的時分秒針的圖像在顯示屏上根本沒有顯示,只有不采用這種方法畫出的鐘表輪廓得以顯示。(如下圖1)我一開始是想繼續(xù)按這思路解決這個問題的,但是我又想,課題中有數(shù)字日歷及時鐘的顯示要求,這種字符串圖形通過這種方式是否能清楚呢?最后我決定還是換個方法,決定用cleardevice()函數(shù)對整個屏幕圖像進行清零,再把所有畫圖的內容全都放在循環(huán)里,果然
14、程序便能順利正確地運行起來。(如下圖2) 圖1圖2剩下的難題就只剩下數(shù)字時鐘和日歷的顯示了,我查閱了教材,輸出字符串的函數(shù)有兩種,一種是void far outtextxy(int x,int y,char *str),還有一種void moveto(int x,int y)搭配void far outtext(char *str),但是是要想實現(xiàn)字符串加上變量的數(shù)據(jù)輸出,就必須通過int sprintf(char *str,char *format,variable-list)先格式化format內容到指針str所指的數(shù)組里(該數(shù)組要足夠大),然后通過上述兩個方法輸出str所指的數(shù)組里的內容
15、,這次問題解決得很順利,一次就能成功執(zhí)行該功能。. 總結在這次模擬時鐘轉動程序設計中,我遇到了很多困難,通過查資料,向同學、學長、老師請教,才一一得到解決。我發(fā)現(xiàn)平時自學到的知識太少了,“書到用時方恨少”,今后我要把更多時間用在基礎學習上,利用課余時間多看課外書籍,拓寬知識面。C語言的設計必須結合實際,充分考慮界面友好等人性化設置,這就要求我們要多觀察,敢創(chuàng)新。另外上機實驗是必不可少的,理論的東西學得再好,不結合實驗區(qū)驗證始終只能停留在理論階段。通過此次實戰(zhàn)演練,我還學到很重要的一點,就是要虛心請教他人,個人的力量總是有限的,只有發(fā)揮眾人的智慧才能把任務完成的更好,這在今后的工作中也是相當重要
16、的。最后,感謝郭恒寧老師的指導。. 附錄#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;/獲取時間 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機器人汽車零部件瑕疵剔除行業(yè)深度調研及發(fā)展戰(zhàn)略咨詢報告
- 農產品倉儲企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 果脯蜜餞食品企業(yè)數(shù)字化轉型與智慧升級戰(zhàn)略研究報告
- 木糖企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 扒胎機企業(yè)數(shù)字化轉型與智慧升級戰(zhàn)略研究報告
- 乳食品企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 小型貨車道路運輸企業(yè)數(shù)字化轉型與智慧升級戰(zhàn)略研究報告
- 2025年數(shù)字電視有條件接收設備合作協(xié)議書
- 醫(yī)用軟填料批發(fā)企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 2025年口服降血糖藥項目建議書
- 甘肅四年級信息技術下冊教學設計(簡版)(含核心素養(yǎng))
- 作文復習:破繭成蝶逆天改命-《哪吒2》現(xiàn)象級成功的高考寫作啟示 課件
- 2025年錫林郭勒職業(yè)學院單招職業(yè)技能測試題庫標準卷
- 2025中建三局(中原)社會招聘高頻重點模擬試卷提升(共500題附帶答案詳解)
- 【生 物】光合作用課件-2024-2025學年人教版生物七年級下冊
- 人教版 七年級英語下冊 UNIT 2 單元綜合測試卷(2025年春)
- 2024年湖北省武漢市中考數(shù)學試題(解析版)
- 2024年“新能源汽車裝調工”技能及理論知識考試題與答案
- 【地理】非洲-位置與范圍 高原為主的地形課件-2024-2025學年湘教版(2024)七下
- 搶救車的管理
- GB/T 17350-2024專用汽車和專用掛車分類、名稱及型號編制方法
評論
0/150
提交評論