C語言圖形時鐘課程設計實驗報告
目錄1.系統功能要求。2. 數據結構設計及說明。3.程序結構(畫流程圖) 。4.各模塊的功能。5.試驗結果(包括輸入數據和輸出結果) 。6.體會。7.參考文獻。8.附錄:程序清單及源程序。? 系統功能要求:在屏幕上顯示一個圖形時鐘(用程序繪制一個與時鐘樣式相似即可) ,時間與系統時間一致,且要隨著時間的走動準確的走動。? 數據結構設計及說明(1) 圖形時鐘要用 TC來編譯,學 C語言時主要用VC,用 TC對我有一定的挑戰性,不熟悉編譯,對圖形函數也沒有太多接觸,做這個有一定難度。(2) 先畫出時鐘基本組成, (時針分針秒針,中心點,表盤及其分隔點) 。(3) 時鐘表設計思想:第一步,確定秒鐘的走時。將圓等分成 60份每過一秒,秒鐘要轉 1/60個圓,亦即一等份。第二步,確定分鐘的走時。將圓等分成 60份每過一分,分鐘要轉 1/60個圓,亦即一等份。- 1 -分鐘自己走的再加秒鐘的,才是分鐘此時的位置。第三步,確定時鐘的走時。將圓等分成 12等分。每過一時,時鐘走一等份。和分鐘一樣,得加上分鐘,秒鐘的走時,才是此刻時鐘的位置。(4) 時鐘走動與系統時間聯系:每過一秒畫出秒針,并除去前一秒的秒針,分針秒針同樣可用。畫線函數與時間聯系使用變量。(5) 設置橫縱坐標x=a*cos(b*c*pi/180-pi/2)+300; y=a*sin(b*c*pi/180-pi/2)+240; 設置表針的動態坐標點 x1=200*sin(i*6*pi/180)+300; y1=200*cos(i*6*pi/180)+240; x2=(200-l)*sin(i*6*pi/180)+300; y2=(200-l)*cos(i*6*pi/180)+240;? 程序結構(畫流程圖)總流程圖:- 2 -開始確定橫縱坐標寫出時鐘表盤并將表盤分 60 份的函數圖形方式初始化函數使指針轉動并除去前一秒的指針畫出時針分針秒針獲取系統時間并寫入結構體 t 中在表盤適當位置插入 12、3、6、9結束指針轉動流程圖:- 3 -結束開始t[0].ti_sec==sgettime(t);setcolor(4);draw(190,s,6);s=t[0].ti_sec;draw(190, s, 6);t[0].ti_min != m NYsetcolor(14);draw(170, m, 6); m = t[0].ti_min;draw(170, m, 6);t[0].ti_hour != h NYsetcolor(7);draw(150, h, 30); h = t[0].ti_hour;draw(150, h, 30);YN? 各模塊的功能- 4 -void init()main()劃時鐘邊框函數和畫鐘點上的短線主函數 圖形初始化時鐘添加 12 點、3 點、6 點、9 點獲取系統時間,畫時針分針秒針將系統時間與時鐘聯系功能功能? 試驗結果(包括輸入數據和輸出結果)void draw(int a, int b, int c) 確定橫縱坐標,確定針分針秒針函數功能- 5 -12369? 體會:剛開始做時基本上什么都不懂,用 TC做,我更不會。不過參考了很多資料,到網上查,泡了幾天圖書館,差不多能寫出基本程序,雖然很多是借鑒別人的,不過能寫成這樣,我心里還是挺高興的。有了一點成功我就很興奮,這是動力。程序很奇特,很多問題都可以用程序編寫,看到那些大型程序我就感覺我也能寫出這樣的程序。程序設計主要靠理解與運用,有些沒有學過的知識不一定要懂得徹底,只要會運用就行。不足之處也很多,程序思路不太清晰可能有些混亂。有很多程序設計使用并不熟練,甚至有些方法掌握不了,更容易忘記。算法結構了解并不深入,獨立自主的想法占據總體達不到要求。需要加強練習和對知識的理解與掌握。? 參考文獻:《C 程序設計思想與方法》《C 語言完全手冊》《C 語言課程設計指導》《百度知道 圖形時針》- 6 -? 附錄:程序清單及源程序 (使用 TC)# include # include # include # define pi 3.1415926 void draw(int a, int b, int c){float x, y;x=a*cos(b*c*pi/180-pi/2)+300; /*確定橫坐標*/y=a*sin(b*c*pi/180-pi/2)+240; /*確定縱坐標*/line(300, 240, x, y);/*繪制時針或分針或秒針*/}void init() /*劃時鐘邊框函數*/ { int i,l,x1,x2,y1,y2; circle(300,240,200);/*以(300,240)為圓心,200為半徑畫圓*/circle(300,240,5);/*以(300,240)為圓心,5 為半徑畫圓*/for(i=0;i<60;i++) /*劃鐘點上的短線*/ { if(i%5==0) l=15; else l=5; x1=200*sin(i*6*pi/180)+300; /*畫線函數*/y1=200*cos(i*6*pi/180)+240; x2=(200-l)*sin(i*6*pi/180)+300; y2=(200-l)*cos(i*6*pi/180)+240; line(x1,y1,x2,y2); } } - 7 -main(){int x, y,i;int gdriver, gmode;unsigned char h, m, s;struct time t[1];gdriver = DETECT;initgraph( /*初始化*/for(i=0;i<=6;i++) { outtextxy(300,80,“12“) ; outtextxy(300,390,“6“); outtextxy(140,230,“9“); outtextxy(460,230,“3“); } init(); /*調用 init()函數*/setwritemode(1);/*將當前線與原有的線進行異或操作*/gettime(t); /*將計算機時間寫入結構體 t中*/h = t[0].ti_hour; /*h賦初值當前時數*/m = t[0].ti_min; /*m賦初值當前分數*/s = t[0].ti_sec; /*s賦初值當前秒數*/setcolor(7); draw(150, h, 30); /*畫時針*/setcolor(14);draw(170, m, 6); /*畫分針*/setcolor(4);draw(190, s, 6); /*畫秒針*/while (!kbhit()){while (t[0].ti_sec == s)- 8 -gettime(t);setcolor(4);draw(190, s, 6); /*清除前面畫的秒針*/s = t[0].ti_sec;draw(190, s, 6);