模擬時鐘轉(zhuǎn)動程序課程設(shè)計報告_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計報告</b></p><p>  題 目 </p><p>  課 程 名 稱 結(jié)構(gòu)化程序設(shè)計課程設(shè)計 </p><p>  院 部 名 稱 </p><p>  專

2、 業(yè) </p><p>  班 級 </p><p>  學(xué) 生 姓 名 </p><p>  學(xué) 號 </p><p> 

3、 課程設(shè)計地點 </p><p>  課程設(shè)計學(xué)時 </p><p>  指 導(dǎo) 教 師 </p><p><b>  目 錄</b></p><p>  第一章 課程設(shè)計的目的和要求<

4、/p><p>  1.1 C語言課程設(shè)計的目的</p><p>  1.2 C語言課程設(shè)計實現(xiàn)的要求</p><p>  第二章 課程設(shè)計的任務(wù)內(nèi)容</p><p>  第三章 詳細設(shè)計說明</p><p>  3.1 程序系統(tǒng)的結(jié)構(gòu)</p><p>  3.1.1 實驗設(shè)備及環(huán)境

5、:(軟、硬件環(huán)境)</p><p>  3.2 模塊描述</p><p>  3.2.1 指針式時鐘</p><p>  3.2.2 數(shù)字式時鐘</p><p><b>  3.3 輸出項</b></p><p><b>  3.4 算法</b></

6、p><p><b>  3.5 流程圖</b></p><p>  3.6 函數(shù)說明</p><p><b>  3.7 接口</b></p><p>  3.8 調(diào)試結(jié)果</p><p>  第四章 軟件使用說明</p><p>  4

7、.1 軟件使用說明及出現(xiàn)的問題</p><p>  4.2 運行結(jié)果</p><p>  第五章 課程設(shè)計心得與體會</p><p><b>  附錄1:參考文獻</b></p><p>  附錄2:修改后的源代碼……………………………………………………………………</p><p>&

8、lt;b>  模擬時鐘轉(zhuǎn)動程序</b></p><p>  第一章 課程設(shè)計的目的和要求</p><p>  1.1 C語言課程設(shè)計的目的</p><p>  加深對講授內(nèi)容的理解,尤其是一些語法規(guī)定。通過課程設(shè)計,自然地、熟練地掌握。熟悉所用的計算機系統(tǒng)的操作方法,也就是熟悉語言程序開發(fā)的環(huán)境。學(xué)會上機調(diào)試程序。通過編程最終使程序運行結(jié)果為電腦

9、屏幕顯示模擬時鐘,并正常運行顯示表針時間。</p><p>  1.2 C語言課程設(shè)計實現(xiàn)的要求</p><p>  能模擬機械鐘表行走;在屏幕上顯示一個活動時鐘;程序界面設(shè)計合理,色彩得體大方,顯示正確;各指針運動規(guī)律正確;要準確地利用數(shù)字顯示日期和時間并且可以根據(jù)用戶的需求更改當(dāng)前時間(指針式時鐘與數(shù)字式時鐘實現(xiàn)同步更改);數(shù)字式時鐘的時間顯示與指針式時鐘顯示一致;可以通過上下鍵改變

10、當(dāng)前的時、分、秒;改的時間是小時、分鐘、還是秒數(shù);通過Tab鍵切換按Esc時程序退出。</p><p>  第二章 課程設(shè)計的任務(wù)內(nèi)容</p><p>  要熟練掌握C語言的基本知識:數(shù)據(jù)類型(整形、實型、字符型、指針、數(shù)組、結(jié)構(gòu)等);運算類型(算術(shù)運算、邏輯運算、自增自減運算、賦值運算等);程序結(jié)構(gòu)(順序結(jié)構(gòu)、判斷選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu));大程序的功能分解方法(即函數(shù)的使用)等。用C語言實現(xiàn)

11、一個模擬時鐘轉(zhuǎn)動程序;Graphics函數(shù)庫。</p><p>  提出總體方案的設(shè)計思想和原理,繪制程序流程圖和描述程序的功能,并說明程序的特點和難點。</p><p>  能模擬機械鐘表行走;要準確地利用數(shù)字顯示日期和時間;在屏幕上顯示一個活動時鐘;程序界面設(shè)計合理,色彩得體大方,顯示正確;各指針運動規(guī)律正確;數(shù)字式時鐘的時間顯示與指針式時鐘顯示一致;按任意鍵時程序退出。</p&

12、gt;<p>  模擬時鐘是一種集計時器和時鐘顯示于一體的程序。編寫一個指針式時鐘程序,此程序在屏幕正中有一個指針式鐘面,窗口標題以數(shù)字方式顯示日期和時間。指針式的時鐘表盤為橢圓形或圓形,并且圓周上有分布均勻的12個刻度,刻度要求顯示清楚,鐘面上有長度不相同的指針,即時針、分針、秒針,指針的運動要求具有規(guī)律性,且為順時針。數(shù)字鐘顯示時間的格式是年月日時分秒,小時為24進制,分鐘和秒是60進制,指針式的時鐘和數(shù)字式的時鐘顯示

13、的時間同步,且兩個時鐘所顯示的時間與計算機的系統(tǒng)時間一致。</p><p>  第三章 詳細設(shè)計說明</p><p>  3.1 程序系統(tǒng)的結(jié)構(gòu)</p><p>  圖3.1 功能模塊圖</p><p>  3.1.1 實驗設(shè)備及環(huán)境:(軟、硬件環(huán)境)</p><p>  Windows XP操作系統(tǒng)</

14、p><p>  Win TC IDE C語言開發(fā)環(huán)境</p><p><b>  Hp筆記本</b></p><p><b>  3.2 模塊描述</b></p><p>  3.2.1 指針式時鐘</p><p>  指針式的時鐘表盤為圓形,并且圓周上有分布均勻的12個較

15、大刻度和六十個較小的刻度,刻度顯示清楚,分別表示小時、分鐘和秒數(shù)鐘面上有長度不相同的指針,即時針、分針、秒針,指針的運動具有規(guī)律性,為順時針。</p><p>  3.2.2 數(shù)字式時鐘</p><p>  數(shù)字鐘顯示時間的格式是時分秒,小時為24進制,分鐘和秒是60進制,指針式的時鐘和數(shù)字式的時鐘顯示的時間同步,且兩個時鐘所顯示的時間與計算機的系統(tǒng)時間一致。</p>&l

16、t;p><b>  3.3 輸出項</b></p><p>  數(shù)字式時鐘輸出“%d時%d分%d秒”。</p><p><b>  3.4 算法</b></p><p>  #define宏定義部分定義變量。</p><p>  利用函數(shù)circle(a,b,c)定義圓即表盤及軸心,其中(

17、a,b)為圓心坐標,c為半徑。利用函數(shù)setbkcolor、setcolor設(shè)置顏色。gettime(t)獲取電腦時間進行顯示sound()、delay()函數(shù)設(shè)置表針走動聲音對應(yīng)走動刻度。應(yīng)用c語言庫函數(shù)進行表盤及顏色的的處理,編寫表針運算函數(shù),及表針影像顏色覆蓋處理詳見程序注釋。不論何種指針,每次轉(zhuǎn)動均以π/30弧度(一秒的角度)為基本單位,且都以表盤中心為轉(zhuǎn)動圓心。計算指針端點(x, y)的公式如下:x =圓心x坐標 指針長度

18、 * cos (指針方向角)y =圓心y坐標 指針長度 * sin (指針方向角)注重,指針長度是指自圓心至指針一個端點的長度(是整個指針的一部分),由于指針可以跨越圓心,因此一個指針需要計算兩個端點。三個指針的運動是相關(guān)聯(lián)的,秒針轉(zhuǎn)一圈引起分針運動一格,分針轉(zhuǎn)一圈引起時針運動一格,因此應(yīng)該使用消息來處理指針的運動。</p><p><b>  3.5 流程圖</b></p>

19、;<p>  圖3.2 程序流程圖</p><p>  3.6 函數(shù)說明 </p><p><b>  繪制小時的圓點:</b></p><p>  x=100*sin((h*60+m)/360*PI)+451;y=200-100*cos((h*60+m)/360*PI);</p><p>  繪制表示

20、分鐘或秒鐘的圓點:x=100*sin(m/30*PI)+451;y=200-100*cos(m/30*PI);</p><p>  由于表是順時針轉(zhuǎn)動,我們的角度習(xí)慣上使用逆時針,所以我們使用自己校正后的角度值,從12點開始,按順時針重新排列三角函數(shù)值,加入對角度正負的校正。</p><p><b>  1、程序與處理</b></p><p&g

21、t;  包括加載頭文件,定義常量、變量、結(jié)構(gòu)體數(shù)組和函數(shù)原型聲明。</p><p><b>  主函數(shù)main()</b></p><p>  main()函數(shù)主要實現(xiàn)了對電子時鐘的初始化工作,及clockhandle()函數(shù)的調(diào)用。</p><p><b>  main()</b></p><p>

22、;<b>  { </b></p><p>  int driver, mode=0, i, j;</p><p>  driver=DETECT; /*自動檢測顯示設(shè)備*/</p><p>  initgraph(&driver, &mode, "") /*初始化圖形系統(tǒng)*/</p><

23、p>  setlinestyle(0,0,3); /*設(shè)置當(dāng)前畫線寬度和類型:設(shè)置三點寬實線*/</p><p>  setbbcolor(0); /*用調(diào)色板設(shè)置當(dāng)前背景顏色*/</p><p>  setcolor(9); /*設(shè)置當(dāng)前畫線顏色*/</p><p><b>  ……</b></p><p>  

24、2、在電子表的左邊打印幫助提示信息,相當(dāng)于軟件的使用說明。</p><p>  3、時鐘按鍵控制模塊在電子時鐘中,按鍵控制模塊最主要的工作就是必須能讀取用戶按鍵,對按鍵值進行判斷,并調(diào)用相應(yīng)函數(shù)來執(zhí)行相關(guān)操作。int keyhandle (int key, int count) /*鍵盤控制*/</p><p>  4、數(shù)字時鐘處理模塊在數(shù)字時鐘處理模塊中,主要實現(xiàn)數(shù)字時鐘的顯示和數(shù)

25、字時鐘的修改。其中,在數(shù)字時鐘的修改中,用戶可先按Tab鍵定位需要修改內(nèi)容的位置,然后通過按光標上移或下移鍵來修改當(dāng)前時間。它的主要工作如下:(1)調(diào)用digitclock(int x,int y,int clock)函數(shù),在數(shù)字時鐘 r 指定位置顯示時、分、秒,其中digithour(double h)、int digithour(double h)和digitsec(double s) 用于完成數(shù)值的型向int型轉(zhuǎn)換。(2

26、)調(diào)用drawcursor(int count)、clearcursor(int count)函數(shù)來完成舊光標的擦除和新光標的繪制。</p><p>  首先定義一些時鐘常用的宏和定義處理時鐘的一些函數(shù)及保存數(shù)據(jù)的變量:</p><p>  int keyhandle(int,int); /*鍵盤按鍵判斷,并調(diào)用相關(guān)函數(shù)處理*/</p><p>  int time

27、upchange(int); /*處理上移按鍵*/</p><p>  int timedownchange(int); /*處理下移按鍵*/</p><p>  int digithour(double); /*將double型的小時數(shù)轉(zhuǎn)換成int型*/</p><p>  int digitmin(double); /*將double型的分鐘數(shù)轉(zhuǎn)換成int型

28、*/</p><p>  int digitsec(double); /*將double型的秒鐘數(shù)轉(zhuǎn)換成int型*/</p><p>  void digitclock(int,int,int ); /*在指定位置顯示時鐘或分鐘或秒鐘數(shù)*/</p><p>  void drawcursor(int); /*繪制一個光標*/</p><p&g

29、t;  void clearcursor(int);/*消除前一個光標*/</p><p>  void clockhandle(); /*時鐘處理*/</p><p>  double h,m,s; /*全局變量:小時,分,秒*/</p><p>  double x,x1,x2,y,y1,y2; /*全局變量:坐標值*/</p><p>

30、  struct time t[1];/*定義一個time結(jié)構(gòu)類型的數(shù)組*/</p><p><b>  3.7 接口 </b></p><p>  1.#include<graphics.h>TurbeC 中重要的函數(shù)庫,Visual C++6.0和DevC++都不支持(VC和DEV都支持C項目)Graphics,可憐我上網(wǎng)找了半天終于找到了合適的I

31、DEWin Tc</p><p>  本程序中的指針式時鐘和數(shù)字式時鐘的繪制都要靠它的 </p><p><b>  例如:</b></p><p>  int driver, mode=0,i,j;</p><p>  driver=DETECT; /*自動檢測顯示設(shè)備*/</p><p> 

32、 initgraph(&driver, &mode, "");/*初始化圖形系統(tǒng)*/</p><p>  setlinestyle(0,0,3); /*設(shè)置當(dāng)前畫線寬度和類型:設(shè)置三點寬實線*/</p><p>  setbkcolor(0);/*用調(diào)色板設(shè)置當(dāng)前背景顏色*/</p><p>  setcolor(9); /*設(shè)置

33、當(dāng)前畫線顏色*/</p><p>  line(82,430,558,430);</p><p>  line(70,62,70,418);</p><p>  line(82,50,558,50);</p><p>  line(570,62,570,418);</p><p>  line(70,62,570,62

34、);</p><p>  line(76,56,297,56);</p><p>  line(340,56,564,56); /*畫主體框架的邊直線*/</p><p>  2.#include<stdio.h> 標準的C的輸入輸出流函數(shù) 主要用它來控制字符串的某些操作</p><p>  3.#include&

35、lt;math.h>數(shù)學(xué)函數(shù)庫,一些數(shù)學(xué)計算的公式的具體實現(xiàn)是放在math.h里。</p><p>  4.#include<dos.h> 就是最早黑白界面下的操作使用的一些方法和接口的函數(shù)庫</p><p>  3.8 調(diào)試結(jié)果(在多次嘗試截屏無果后,痛下決定用相機拍下來了)</p><p><b>  圖3.3 運行結(jié)果<

36、/b></p><p>  第四章 軟件使用說明</p><p>  4.1 軟件使用說明及出現(xiàn)的問題</p><p>  在Win TC中新建一個cpp源文件, 然后輸入代碼。運行后顯示一個正在行走的機械時鐘。機械時鐘下方為數(shù)字式時鐘,可根據(jù)需要修改當(dāng)前時間,該程序全屏顯示,在屏幕的左半邊為操作提示(Tab:Cursor Move ;Up: Ti

37、me++;Down: Time--;ESC:Quit the System;)和一句警示語:Nothing is more important than time,可根據(jù)提示進行你想要的操作。按ESC退出。</p><p><b>  4.2 運行結(jié)果</b></p><p><b>  圖4.1 運行結(jié)果</b></p><

38、;p>  第五章 課程設(shè)計心得與體會</p><p>  經(jīng)過一個半學(xué)期對《C課程設(shè)計》的學(xué)習(xí),我們學(xué)習(xí)了理論知識,了解了C語言程序設(shè)計的思想,這些知識都為我們的下一步學(xué)習(xí)打下了堅實的基礎(chǔ)。通過課程設(shè)計,一方面是為了檢查我們一個半學(xué)期來我們學(xué)習(xí)的成果,另一方面也是為了讓我們進一步的掌握和運用它,同時也讓我們認清自己的不足之處和薄弱環(huán)節(jié),加以彌補和加強。通過對模擬時鐘的設(shè)計進一步的鞏固了用C編寫程序,并且有利

39、于更好的掌握程序設(shè)計語言!同時也認識到了結(jié)構(gòu)化語言的不足之處,為我們以后學(xué)習(xí)面向?qū)ο笳Z埋下伏筆。</p><p>  在模擬時鐘的編寫過程中也體會到了做事情一頂要細心、認真。更加知道了要掌握好基礎(chǔ)知識。還有體會到了成功的感覺!</p><p>  通過本項課程設(shè)計也培養(yǎng)了我獨立思考、 綜合運用所學(xué)有關(guān)相應(yīng)知識的能力,掌握工程軟件設(shè)計的基本方法,強化上機動手編程能力,闖過理論與實踐相結(jié)合的難

40、關(guān)!</p><p>  由于C程序設(shè)計語言是近年在國內(nèi)外得到迅速推廣應(yīng)用的一種語言。據(jù)51CTO 2010的語言排行榜,C語言是程序員使用率第二高的語言,僅次于面向?qū)ο蟮腏ava語言,是使用率最高的面向結(jié)構(gòu)的編程語言。它功能豐富,表達能力強,使用靈活方便,應(yīng)用面廣,目標程序效率高,可移植性好,既具有高級語言的優(yōu)點,又具有低級語言的許多特點。通過這次的程序設(shè)計更加了解了語言設(shè)計的好處和其可用性!</p>

41、;<p>  在這次課程設(shè)計中也知道了自己的動手能力不強有待進一部的提高!在設(shè)計過程中不能夠把書本上的知識與實踐相結(jié)合,這也就增加了設(shè)計不好該程序的想法!在設(shè)計過程中的一次次設(shè)計錯誤增加了我放棄的想法!不過經(jīng)過自己的獨立思考和同學(xué)的幫助終于完成了課程設(shè)計!完成該程序后想起自己以前的每一次對自己失去信心,就覺得并不是在知識掌握上打敗了,而是自己對自己缺乏信心!只要自己對自己不失去信心相信就可以完成那些以前認為完成不了的事情!

42、也讓我懂得了要想成功首先就必須有很強的自信心!懂得了自己以后要在做任何事情時都要自信!當(dāng)自己都不相信自己能夠成功時還可能會獲得成功嗎?</p><p>  在課程設(shè)計的過程中也知道了自己在以前的學(xué)習(xí)中有很大的不足導(dǎo)致在設(shè)計過程中出現(xiàn)了很多的問題,有些地方看不懂也不知道怎么去設(shè)計,但是在設(shè)計過程中也學(xué)習(xí)了很多,掌握了自己以前沒有學(xué)好的知識,雖然一時可以掌握完以前沒有學(xué)好的知識,不過也給自己敲響了警鐘,在學(xué)習(xí)中不可以

43、伏于表面,要想學(xué)好每一門課程都要踏踏實實,做什么都不是給別人看的!都是要更好的掌握該門知識,提高自己的自身的修養(yǎng),提高自己的能力!為以后的工作打下良好的知識基礎(chǔ)和技能基礎(chǔ)!</p><p><b>  附錄1:</b></p><p><b>  教材及參考書</b></p><p><b>  附錄二:<

44、/b></p><p>  /*電子時鐘源代碼*/#include<graphics.h>#include<stdio.h>#include<math.h>#include<dos.h></p><p>  #include <string.h></p><p>  #include <

45、conio.h> #define PI 3.1415926 /*定義常量*/#define UP 0x4800 /*上移↑鍵:修改時間*/#define DOWN 0x5000 /*下移↓鍵:修改時間*/#define ESC 0x11b /*ESC鍵 : 退出系統(tǒng)*/#define TAB 0xf09 /*TAB鍵 : 移動光標*//*函數(shù)聲明*/int keyhandle(int,int); /*鍵盤按鍵判斷,并

46、調(diào)用相關(guān)函數(shù)處理*/int timeupchange(int); /*處理上移按鍵*/int timedownchange(int); /*處理下移按鍵*/int digithour(double); /*將double型的小時數(shù)轉(zhuǎn)換成int型*/int digitmin(double); /*將double型的分鐘數(shù)轉(zhuǎn)換成int型*/int digitsec(double); /*將double型的秒鐘數(shù)轉(zhuǎn)換成int型*/

47、void digitclock(int,int,int ); /*在指定位置顯示時鐘或分鐘或秒鐘數(shù)*/v</p><p>  double h,m,s; /*全局變量:小時,分,秒*/double x,x1,x2,y,y1,y2; /*全局變量:坐標值*/struct time t[1];/*定義一個time結(jié)構(gòu)類型的數(shù)組*/main(){int driver, mode=0,i,j;driver=

48、DETECT; /*自動檢測顯示設(shè)備*/initgraph(&driver, &mode, "");/*初始化圖形系統(tǒng)*/</p><p>  添加內(nèi)容 :/*為防止圖形初始化時發(fā)生異常 出現(xiàn)錯誤時將出現(xiàn)有好的提示界面 */errorcode = graphresult()if (errorcode != grOk) /* 圖形初始化時出現(xiàn)錯誤*/{printf

49、("Graphics error: %s/n", grapherrormsg(errorcode));printf("Press any key to halt:");getch();exit(1); /* return with error code */}/* setlinestyle(0,0,3); /*設(shè)置當(dāng)前畫線寬度和類型:設(shè)置三點寬實線*/</p><p&

50、gt;  函數(shù)名: setlinestyle</p><p>  功 能: 設(shè)置當(dāng)前畫線寬度和類型</p><p>  用 法: void far setlinestyle(int linestyle, unsigned pattern,int width);</p><p>  linestyle為整數(shù)型,用來定義所畫直線類型</p>&l

51、t;p>  pattern為無符號整數(shù)型,該參數(shù)在需要用戶自定義線型時使用 ,如果是使用系統(tǒng)預(yù)定義的線型則參數(shù)取0值</p><p>  width為整數(shù)型,用來指定所畫直線的粗細</p><p>  SOLID_LINE          0             實線&

52、lt;/p><p>  DOTTED_LINE         1             點線</p><p>  CNTER_LINE          2            

53、中心線</p><p>  DASHED_LINE         3             虛線</p><p>  USERBIT_LINE        4             用

54、戶自定義線型</p><p><b>  此處我稍作修改:</b></p><p><b>  */</b></p><p>  setlinestyle(0,0,3); /*設(shè)置當(dāng)前畫線寬度和類型:設(shè)置四點寬點線線setbkcolor(0);/*用調(diào)色板設(shè)置當(dāng)前背景顏色*/</p><p>  

55、/*可以讓用戶選擇系統(tǒng)支持的顏色作為背景色*/</p><p>  int bkcol, maxcolor, x=10, y=10;</p><p>  char IsOK;</p><p>  maxcolor = getmaxcolor();</p><p>  for (bkcol=0; bkcol<=maxcolor; bkco

56、l++) { /* 清理屏幕 */ cleardevice(); /* 設(shè)置新的背景色*/ setbkcolor(bkcol); /* output a messsage */ if (bkcol == WHITE) setcolor(EGA_BLUE); sprintf(msg, "Background color: %d", bkcol); outtextxy(x, y, msg); IsO

57、K=getch(); </p><p>  if(IsOK==’Y’)</p><p>  break;}setcolor(9); /*設(shè)置當(dāng)前畫線顏色*/line(82,430,558,430);line(70,62,70,418);line(82,50,558,50);line(570,62,570,418);line(70,62,570,62);line(76,56,

58、297,56);line(340,56,564,56); /*畫主體框架的邊直線*//*arc(int x, int y, int stangle, int endangle, int radius)*/arc(82,62,90,180,12);arc(558,62,0,90,12);setlinestyle(0,0,3);arc(82,418,180,279,12);setlinestyle(0,0,3);arc(55

59、8,418,270,360,12); /*畫主體框架的邊角弧線*/setcolor(15);outtextxy(300,53,"CLOCK"); /*顯示標題*/setcolor(7);rectangle(342,72,560,360); /*畫一個矩</p><p>  setwritemode(0); /*規(guī)定畫線的方式。mode=0, 則表示畫線時將所畫位置的原來信息覆蓋*/s

60、etcolor(15);outtextxy(433,75,"CLOCK");/*時鐘的標題*/setcolor(7);line(392,310,510,310);line(392,330,510,330);arc(392,320,90,270,10);arc(510,320,270,90,10); /*繪制電子動畫時鐘下的數(shù)字時鐘的邊框架*//*繪制數(shù)字時鐘的時分秒的分隔符*/setcolor(5);

61、for(i=431;i<=470;i+=39)for(j=317;j<=324;j+=7){setlinestyle(0,0,3);circle(i,j,1); /*以(i, y)為圓心,1為半徑畫圓*/}setcolor(15);line(424,315,424,325); /*在運行電子時鐘前先畫一個光標*//*繪制表示小時的圓點*/for(i=0,m=0,h=0;i<=11;i++,h++){

62、x=100*sin((h*60+m)/360</p><p>  setlinestyle(0,0,1);x=110*sin((h*60+m)/360*PI)+451;//在半徑的延伸處顯示圓點代表的小時y=200-110*cos((h*60+m)/360*PI);</p><p><b>  if(h==0)</b></p><p>&l

63、t;b>  {h=12;</b></p><p>  char buffer1[10];</p><p>  outtextxy(x,y,buffer1);</p><p>  sprintf(buffer1,"%d",h);</p><p>  outtextxy(x,y, buffer1);</

64、p><p>  h=0;//不要忘記將h再次賦值為0</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  char buffer1[10];</p>

65、<p>  outtextxy(x,y,buffer1);</p><p>  sprintf(buffer1,"%d",h);</p><p>  outtextxy(x,y, buffer1);</p><p><b>  }</b></p><p>  //將表示小時的圓點用更大的圓點

66、與畫出}/*繪制表示分鐘或秒鐘的圓點*/for(i=0,m=0;i<=59;m++,i++){x=100*sin(m/30*PI)+451;y=200-100*cos(m/30*PI);setlinestyle(0,0,1);circle(x,y,1);}/*在電子表的左邊打印幫助提示信息*/setcolor(4);outtextxy(184,125,"HELP");setcolor(1

67、5);outtextxy(182,125,"HELP");setcolor(5);outtextxy(140,185,"TAB : Cursor move");outtextxy(140,225,"UP : Time ++");outtextxy(140,265,"DOWN: Time --");outtextxy(140,305,"E

68、SC : Quit system!");outtextxy(140,345,"Version : 2.0");setcolor(12);outtextxy(150,400,"Nothing is m</p><p>  void clockhandle(){int k=0,count;setcolor(15);gettime(t);/*取得系統(tǒng)時間,保存在ti

69、me結(jié)構(gòu)類型的數(shù)組變量中*/h=t[0].ti_hour;m=t[0].ti_min;x=50*sin((h*60+m)/360*PI)+451; /*時針的x坐標值*/y=200-50*cos((h*60+m)/360*PI); /*時針的y坐標值*/line(451,200,x,y);/*在電子表中繪制時針*/</p><p>  x1=80*sin(m/30*PI)+451; /*分針的x坐標值*

70、/y1=200-80*cos(m/30*PI); /*分針的y坐標值*/line(451,200,x1,y1); /*在電子表中繪制分針*/</p><p>  digitclock(408,318,digithour(h)); /*在數(shù)字時鐘中,顯示當(dāng)前的小時值*/digitclock(446,318,digitmin(m)); /*在數(shù)字時鐘中,顯示當(dāng)前的分鐘值*/setwritemode(1);/

71、*規(guī)定畫線的方式,如果mode=1,則表示畫線時用現(xiàn)在特性的線與所畫之處原有的線進行異或(XOR)操作,實際上畫出的線是原有線與現(xiàn)在規(guī)定的線進行異或后的結(jié)果。因此, 當(dāng)線的特性不變, 進行兩次畫線操作相當(dāng)于沒有 畫線,即在當(dāng)前位置處清除了原來的畫線*/for(count=2;k!=ESC;){ /*開始循環(huán),直至用戶按下ESC鍵結(jié)束循環(huán)*/setcolor(12);/*淡紅色*/sound(500);/*以指定頻率打開PC揚

72、聲器,這里頻率為500Hz*/delay(700);/*發(fā)一個頻率為500Hz的音調(diào),維持700毫秒*/sound(200);/*以指定頻率打開PC揚聲器,這里頻率為200Hz*/delay(300);</p><p>  //呵呵 聲音怪怪的</p><p>  sound(600);/*以指定頻率打開PC揚聲器,這里頻率為500Hz*/delay(800);/*發(fā)一個頻率為50

73、0Hz的音調(diào),維持700毫秒*/sound(400);/*以指定頻率打開PC揚聲器,這里頻率為200Hz*/delay(200);/*以上兩種不同頻率的音調(diào),可仿真鐘表轉(zhuǎn)動時的嘀噠聲*/nosound(); /*關(guān)閉PC揚聲器*/s=t[0].ti_sec;m=t[0].ti_min;h=t[0].ti_hour;</p><p>  x2=98*sin(s/30*PI)+451; /*秒針的x坐

74、標值*/y2=200-98*cos(s/30*PI); /*秒針的y坐標值*/line(451,200,x2,y2);/*繪制秒針*/</p><p>  /*利用此循環(huán),延時一秒*/while(t[0].ti_sec==s&&t[0].ti_min==m&&t[0].ti_hour==h){ gettime(t);/*取得系統(tǒng)時間*/if(bioskey(1)!=0)

75、{k=bioskey(0);count=keyhandle(k,count);if(count==5) count=1;}}setcolor(15);digitclock(485,318,digitsec(s)+1);/*數(shù)字時鐘增加1秒*/</p><p>  setcolor(12); /*淡紅色*/x2=98*sin(s/30*PI)+451;y2=200-98*cos(s/30*PI);

76、line(451,200,x2,y2);/*用原來的顏色在原來位置處再繪制秒針,以達到清除當(dāng)前秒針的目的*/</p><p>  /*分鐘處理*/if(t[0].ti_min!=m){ /*若分鐘有變化*//*消除當(dāng)前分針*/setcolor(15); /*白色*/x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);

77、/*繪制新的分針*/m=t[0].ti_min;digitclock(446,318,digitmin(m)); /*在數(shù)字時鐘中顯示新的分鐘值*/x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);}</p><p>  /*小時處理*/if((t[0].ti_hour*60+t[0].ti_min)!=(h*60+m

78、)){ /*若小時數(shù)有變化*//*消除當(dāng)前時針*/setcolor(15); /*白色*/x=50*sin((h*60+m)/360*PI)+451;/*50:時鐘的長度(單位:像素),451:圓心的x坐標值*/y=200-50*cos((h*60+m)/360*PI);line(451,200,x,y);/*繪制新的時針*/h=t[0].ti_hour;digitclock(408,318,digithour(h));

79、x=50*sin((h*60+m)/360*PI)+451;y=200-50*cos((h*60+m)/360*PI);line(451,200,x,y);}}}</p><p>  int keyhandle(int key,int count) /*鍵盤控制 */{ switch(key){case UP: timeupchange(count-1); /*因為count的初始值為2,所以此處

80、減1*/break;case DOWN:timedownchange(count-1); /*因為count的初始值為2,所以此處減1*/break;case TAB:setcolor(15);clearcursor(count); /*清除原來的光標*/drawcursor(count); /*顯示一個新的光標*/count++;break;}return count;}</p><p>

81、  int timeupchange(int count) /*處理光標上移的按鍵*/{if(count==1){t[0].ti_hour++;if(t[0].ti_hour==24) t[0].ti_hour=0;settime(t); /*設(shè)置新的系統(tǒng)時間*/}</p><p>  if(count==2){t[0].ti_min++;if(t[0].ti_min==60) t[0].ti_m

82、in=0;settime(t); /*設(shè)置新的系統(tǒng)時間*/}</p><p>  if(count==3){t[0].ti_sec++;if(t[0].ti_sec==60) t[0].ti_sec=0;settime(t); /*設(shè)置新的系統(tǒng)時間*/}}</p><p>  int timedownchange(int count) /*處理光標下移的按鍵*/{if(c

83、ount==1) {t[0].ti_hour--;if(t[0].ti_hour==0) t[0].ti_hour=23;settime(t);/*設(shè)置新的系統(tǒng)時間*/}if(count==2) {t[0].ti_min--;if(t[0].ti_min==0) t[0].ti_min=59;settime(t);/*設(shè)置新的系統(tǒng)時間*/}</p><p>  if(count==3) {t[

84、0].ti_sec--;if(t[0].ti_sec==0) t[0].ti_sec=59;settime(t);/*設(shè)置新的系統(tǒng)時間*/}}</p><p>  int digithour(double h)/*將double型的小時數(shù)轉(zhuǎn)換成int型*/{int i;for(i=0;i<=23;i++){if(h==i) return i;}}</p><p>  

85、int digitmin(double m)/*將double型的分鐘數(shù)轉(zhuǎn)換成int型*/{int i;for(i=0;i<=59;i++){if(m==i) return i;}}</p><p>  int digitsec(double s) /*將double型的秒鐘數(shù)轉(zhuǎn)換成int型*/{int i;for(i=0;i<=59;i++){if(s==i) return i;}}

86、</p><p>  void digitclock(int x,int y,int clock)/*在指定位置顯示數(shù)字時鐘:時\分\秒*/{char buffer1[10];setfillstyle(0,2);bar(x,y,x+15,328);if(clock==60) clock=0;sprintf(buffer1,"%d",clock);outtextxy(x,y,buff

87、er1);}</p><p>  void drawcursor(int count) /*根據(jù)count的值,畫一個光標*/{switch(count){case 1:line(424,315,424,325);break;case 2:line(465,315,465,325);break;case 3:line(505,315,505,325);break;}}</p><

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論