圖形模擬時(shí)鐘C語言課程設(shè)計(jì)_第1頁
圖形模擬時(shí)鐘C語言課程設(shè)計(jì)_第2頁
圖形模擬時(shí)鐘C語言課程設(shè)計(jì)_第3頁
圖形模擬時(shí)鐘C語言課程設(shè)計(jì)_第4頁
圖形模擬時(shí)鐘C語言課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、學(xué)號(hào)高級(jí)語言程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告 題目:圖形模擬時(shí)鐘專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級(jí):計(jì)算機(jī)科學(xué)與技術(shù)2班姓名:學(xué)號(hào):指導(dǎo)教師:陳廣宏成績:計(jì)算機(jī)與信息工程系 2014年6月20日計(jì)算機(jī)與信息工程系 高級(jí)語言程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告目 錄1 設(shè)計(jì)內(nèi)容及要求11.1 設(shè)計(jì)內(nèi)容11.2 設(shè)計(jì)目的及意義12 概要設(shè)計(jì)12.1功能簡介12.2功能說明:12.3 總體程序框圖23 設(shè)計(jì)過程33.1各個(gè)模塊程序流程圖33.2運(yùn)行界面及關(guān)鍵代碼44設(shè)計(jì)結(jié)果與分析64.1設(shè)計(jì)結(jié)果64.2分析65 總結(jié)76 參考文獻(xiàn)7附程序清單及源程序81 設(shè)計(jì)內(nèi)容及要求1.1 設(shè)計(jì)內(nèi)容通過編程最終使電腦屏幕顯示模擬時(shí)鐘,并正常運(yùn)行顯示

2、表針時(shí)間,電腦上呈現(xiàn)一個(gè)圖種的模型表示電腦上的時(shí)間,并可以模擬時(shí)鐘走動(dòng)。1.2 設(shè)計(jì)目的及意義設(shè)計(jì)目的及意義:熟悉Visual c+ 6.0軟件的應(yīng)用,C語言相關(guān)函數(shù),語句的學(xué)習(xí),查找資料代碼等,編程、調(diào)試、運(yùn)行、效果顯示調(diào)整,完成上傳,熟悉編程語言,了解程序運(yùn)行以及圖像顯示等C語言的應(yīng)用,通過編程實(shí)現(xiàn)既定功能。培養(yǎng)自學(xué)能力,獨(dú)立思考能力,將理論形成實(shí)際運(yùn)用,同時(shí)可以掌握下列運(yùn)算符的使用:1 .數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)等)。2 .運(yùn)算類型(算術(shù)運(yùn)算、邏輯運(yùn)算、自增自減運(yùn)算、賦值運(yùn)算等)。3 .程序結(jié)構(gòu)(順序結(jié)構(gòu)、判斷選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu))5 .復(fù)雜任務(wù)功能分解方法(自頂向下

3、逐步求精、模塊化設(shè)計(jì)、信息隱藏等)。6 .學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃語言程序。2 概要設(shè)計(jì)2.1功能簡介實(shí)現(xiàn)功能如下:(1)在屏幕上最終顯示一個(gè)圖形時(shí)鐘(用程序繪制一個(gè)與時(shí)鐘樣式相似即可),能模擬機(jī)械鐘表行走。(2)數(shù)字式顯示時(shí)間與指針式顯示時(shí)間一致,且各指針運(yùn)動(dòng)規(guī)律正確。(3)能準(zhǔn)確的利用數(shù)字顯示時(shí)間和日期。(4)按ESC可以退出程序。2.2功能說明:內(nèi)容:指針式時(shí)鐘模塊完成在屏幕上顯示一個(gè)活動(dòng)時(shí)鐘,模擬機(jī)械鐘表行走,時(shí)針,分針,秒針不同顏色且順時(shí)針旋轉(zhuǎn),獲取系統(tǒng)時(shí)間;數(shù)字式時(shí)鐘模塊完成顯示時(shí)間格式年月日時(shí)分秒,小時(shí)為24小時(shí)制,分和秒為60進(jìn)制與指針式的時(shí)鐘顯示時(shí)間同步并

4、獲取系統(tǒng)時(shí)間。說明:指針順時(shí)針旋轉(zhuǎn);指針式的時(shí)鐘表盤為圓形;圓周上分布均勻的12個(gè)刻度;有3個(gè)長度不同的指針,即時(shí)針,分針,秒針的運(yùn)動(dòng)具有規(guī)律性;數(shù)字鐘顯示時(shí)間格式年月日時(shí)分秒,小時(shí)為24進(jìn)制,分和秒為60進(jìn)制;指針式的時(shí)鐘與數(shù)字式的時(shí)鐘顯示時(shí)間同步;其主要的設(shè)計(jì)思想如下:1 . 確定秒針的走時(shí),將圓分成60份每過一秒,秒重要轉(zhuǎn)過1/60個(gè)園,即一等份。2 . 確定分針真的走時(shí),將圓分成60份每過一分,分針要轉(zhuǎn)過1/60個(gè)圓,即一等份分針自己走過的再加秒針的,才是此四分鐘的位置。 3 . 時(shí)鐘走動(dòng)與系統(tǒng)時(shí)間聯(lián)系:每過一秒畫出秒針,并且除去前一秒的秒針,分針和 秒針一樣,畫線函數(shù)與時(shí)間聯(lián)系使用變

5、量。4 . 設(shè)置橫縱坐標(biāo)及表針:X = a*cos(b*pi/180)+300;Y=a*sin(b*pi/180)+240;2.3 總體程序框圖模擬時(shí)鐘轉(zhuǎn)動(dòng)程序指針式時(shí)鐘數(shù)字式時(shí)鐘(系統(tǒng)模塊圖)首先,先畫出個(gè)鐘的大致輪廓。從輸出數(shù)字到畫出外輪廓,到標(biāo)出短線到畫出時(shí)針、分針、秒針。這個(gè)輪廓就已經(jīng)完成了。然后,為了更加這個(gè)鐘的實(shí)用性。就通過獲取系統(tǒng)時(shí)間來結(jié)合實(shí)際意義,這是最簡單,最好的方法。從應(yīng)用上,它顯示的是實(shí)際的時(shí)間,增強(qiáng)了可用性;從編程上,不用再復(fù)雜地再編一個(gè)更時(shí)間一樣的函數(shù)來,減少程序的篇幅、復(fù)雜性和編程者的工作量。接著順帶利用時(shí)間的變量名來畫時(shí)針,分針,秒針。最后,為了讓時(shí)針,分針,秒針

6、讓觀察者看起來是連續(xù)的變化,即形象地模擬真實(shí)的機(jī)械鐘表那樣運(yùn)動(dòng)。3 設(shè)計(jì)過程3.1各個(gè)模塊程序流程圖Start初始化圖形系統(tǒng)設(shè)置窗體的背景色、前景色及畫筆畫出主體框架的邊直線、邊角弧線畫出時(shí)鐘的框架、標(biāo)題及時(shí)分秒的刻度;繪制數(shù)字式時(shí)鐘下的數(shù)字時(shí)鐘的邊框架調(diào)用時(shí)鐘處理程序獲取當(dāng)前時(shí)間并顯示調(diào)用消息處理函數(shù)刷新窗口顯示(1秒)創(chuàng)建數(shù)字鐘字體對(duì)數(shù)字鐘進(jìn)行輸出判斷修改是增加還是減少Esc(任意鍵)調(diào)出digitalClockEnd3.2運(yùn)行界面及關(guān)鍵代碼3.2.1運(yùn)行結(jié)果在桌面顯示一個(gè)模擬的時(shí)鐘,時(shí)鐘的秒針、分針與時(shí)針隨著時(shí)間的推移而不斷移動(dòng)就像我們經(jīng)??匆姷膱A形電子時(shí)鐘一樣。我們可以通過程序隨意改動(dòng)

7、時(shí)鐘的背景顏色以及指針的顏色和表盤大小等問題,同時(shí)還能在桌面顯示一些簡單的英文以及圖案等。3.2.2關(guān)鍵代碼分析及說明(1)本系統(tǒng)中主要的數(shù)據(jù)結(jié)構(gòu)就是time結(jié)構(gòu)體struct time unsigned char m;/*分鐘*/ unsigned char h/*小時(shí)*/ unsigned char s/*秒*/time結(jié)構(gòu)體定義在dos.h文件中,可用來保存系統(tǒng)的當(dāng)前時(shí)間,其中各字段的值的含義如下。·unsigned char m:保存分鐘值。·unsigned char h:保存小時(shí)值。·unsigned char s:保存秒數(shù)。(2)全局變量下面對(duì)程序用

8、到的全局變量及數(shù)組進(jìn)行說明。·int h,m,s:此3個(gè)全局變量分別用來保存小時(shí)、分鐘、秒數(shù)。·int x,x1,x2,y,y1,y2:保存數(shù)字時(shí)鐘中小時(shí)、分、秒在屏幕中顯示的坐標(biāo)值。·struct time t1:定義一個(gè)time結(jié)構(gòu)類型的數(shù)組,此數(shù)組只有t0一個(gè)元素。(3)程序流程系統(tǒng)的執(zhí)行應(yīng)從運(yùn)行開始,顯示界面正常運(yùn)行,直到用戶選擇退出系統(tǒng)為止。(4)流程圖功能描述畫圓模板: #inlude “graphics.h” #inlude ”math.h ” Void init()Circle(300,240,200); 畫時(shí)間刻線模塊:For(i=0;i<

9、=60;i+)If(i%5=0)L=15;elseL=5;X1=200*sin()+300;Y1=200*cos()+240;時(shí)間模塊:Gettime(d)4設(shè)計(jì)結(jié)果與分析4.1設(shè)計(jì)結(jié)果運(yùn)行程序后在屏幕上顯示出一時(shí)鐘,鐘上的時(shí)間與電腦上的時(shí)間完全一樣,并且在秒針運(yùn)行的同時(shí)伴隨聲音如同下圖一樣的圖案:4.2分析在桌面會(huì)顯示一個(gè)模擬的時(shí)鐘,時(shí)鐘的秒針、分針與時(shí)針隨著時(shí)間的推移而不斷移動(dòng)就像我們經(jīng)??匆姷膱A形電子時(shí)鐘一樣。我們可以通過程序隨意改動(dòng)時(shí)鐘的背景顏色以及指針的顏色和表盤大小等問題,同時(shí)還能在桌面顯示一些簡單的英文以及圖案等。因?yàn)槭浅绦蚩刂茣r(shí)鐘的,所以起始時(shí)間是通過程序控制的,要想改動(dòng)還是需

10、要通過改變程序獲得,并不是隨系統(tǒng)時(shí)間而確定起始時(shí)間的。5 總結(jié)通過本次的課程設(shè)計(jì),我深刻的體會(huì)到了C語言的強(qiáng)大。雖然本次的課程設(shè)計(jì)對(duì)我來說有一定的難度,但是在朋友的幫助下我還是很好地完成了(自我感覺)。從而也認(rèn)識(shí)到了程序的內(nèi)涵,使我對(duì)編程產(chǎn)生了很大的興趣。其實(shí)編程很好玩的,在編程中不但可以完成一些現(xiàn)實(shí)中從在的東西,還可以制作出很多意想不到東西。還有對(duì)于此次課程設(shè)計(jì)讓我深刻的認(rèn)識(shí)到自己學(xué)得的遠(yuǎn)遠(yuǎn)還太少,需要我們自發(fā)的去學(xué)習(xí)知識(shí)才可以成長的更快!其次,對(duì)于此次設(shè)計(jì)我得坦誠一件事,那就是我一開始選的TC程序,運(yùn)行的時(shí)候總是要我輸入?yún)?shù),由于自己的知識(shí)局限,總是敲不出結(jié)果,所以我又去百度文庫搜了一個(gè)v

11、c程序,雖然最終使運(yùn)行出來了,可是這次事件讓我認(rèn)識(shí)自身知識(shí)的不足,所以,這次過后會(huì)更加認(rèn)真的學(xué)習(xí)一些書面沒有的知識(shí),充實(shí)自己。6 參考文獻(xiàn)C語言程序設(shè)計(jì)(第二版)M.北京:清華大學(xué)出版社 譚浩強(qiáng) 1999數(shù)據(jù)結(jié)構(gòu)(C語言版)M.北京:清華大學(xué)出版社 嚴(yán)魏敏,吳偉民 1997C語言程序設(shè)計(jì)M. 黃明等.大連理工大學(xué)出版社,2005C語言課程設(shè)計(jì)案例精編. 郭翠英 . 中國水利水電出版 . 2004年3月C語言程序設(shè)計(jì)教程 曾春平,朱小谷,晏海華.北京希望電子出版社 . 2005年3月C語言課程設(shè)計(jì)案例精編清華大學(xué)出版社 姜靈芝、余健 2008.1C語言程序設(shè)計(jì)西安電子科技大學(xué)出版社田祥宏主編20

12、07.12附程序清單及源程序(1)TC2.0上的源程序#include"graphics.h"#include"math.h"#include"dos.h"#define pi 3.1415926#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y)void init() /*劃時(shí)鐘邊框函數(shù)*/int i,l

13、,x1,x2,y1,y2;setbkcolor(1);circle(300,240,200);circle(300,240,205);circle(300,240,5);for(i=0;i<60;i+) /*劃鐘點(diǎn)上的短線*/if(i%5=0)l=15;elsel=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);main()int x,y,i,k=1;int gdri

14、ver=9,gmode=2;unsigned char h,m,s;int o,p,q;float n;struct time t1;struct date d1;initgraph(&gdriver,&gmode,"c:tc");initgraph(&gdriver,&gmode,"c:tc");for(i=0;i<=6;i+)settextstyle(TRIPLEX_FONT,HORIZ_DIR,i); /*控制輸出字符的字體,方向,大小*/cleardevice();settextjustify(1,1); /

15、*在指定坐標(biāo)上輸出字符串*/outtextxy(300,80,"12") ;outtextxy(300,390,"6");outtextxy(140,230,"9");outtextxy(460,230,"3");outtextxy(380,100,"1");outtextxy(220,100,"11");outtextxy(430,160,"2");outtextxy(430,310,"4");outtextxy(380,370,&q

16、uot;5");outtextxy(220,370,"7");outtextxy(160,160,"10");outtextxy(160,310,"8");init();setwritemode(1); /*設(shè)置畫線的輸出模式*/if(k!=0)getdate(d); /*獲得系統(tǒng)日期函數(shù)*/o=d0.da_year;p=d0.da_mon;q=d0.da_day;gettime(t); /*獲得系統(tǒng)時(shí)間函數(shù)*/h=t0.ti_hour;m=t0.ti_min;s=t0.ti_sec;setcolor(7); /*設(shè)置時(shí)針顏

17、色*/n=(float)h+(float)m/60;d(150,n,30); /*畫出時(shí)針*/setcolor(14); /*設(shè)置分針顏色*/d(170,m,6); /*畫出分針*/setcolor(4); /*設(shè)置秒針顏色*/d(190,s,6); /*畫出秒針*/while(!kbhit() /*控制程序按下任意鍵退出*/while(t0.ti_sec=s)gettime(t);gotoxy(44,18); /*使光標(biāo)移動(dòng)到指定坐標(biāo)*/printf("bbbbbbbbb"); /*退格,使表示時(shí)間的字符串不斷變化*/sound(400); /*按給定的頻率打開PC揚(yáng)聲器

18、*/delay(70); /*中斷程序的執(zhí)行,時(shí)間為70毫秒*/sound(200);delay(30);nosound(); /*按給定的頻率關(guān)閉PC揚(yáng)聲器*/setcolor(4);d(190,s,6);s=t0.ti_sec;d(190,s,6);if(t0.ti_min!=m)setcolor(14);d(170,m,6);m=t0.ti_min;d(170,m,6);if(t0.ti_hour!=h)setcolor(7);d(150,h,30);h=t0.ti_hour;d(150,h,30);sound(1000);delay(240);nosound();delay(140);

19、sound(2000);delay(240);nosound();if(s<10) /*用字符的形式輸出時(shí)間*/ if(m<10)printf("%u:0%u:0%u",h,m,s);elseprintf("%u:%u:0%u",h,m,s);else if(m<10)printf("%u:0%u:%u",h,m,s);elseprintf("%u:%u:%u",h,m,s);gotoxy(34,19); /*在指定坐標(biāo)上輸出日期*/printf("%d年%d月%d日",o,p

20、,q);printf("bbbbbbbbb");getch();closegraph();(2)visual c+ 6.0上運(yùn)行的源程序#define _CRT_SECURE_NO_WARNINGS#include <windows.h>#include <math.h>#include <time.h>#pragma comment(lib, "user32.lib")#pragma comment(lib, "gdi32.lib")#pragma comment(linker, "/S

21、UBSYSTEM:Windows") void GetPos(double degree, int len, int* x, int* y) *x = len * sin(degree); *y = len * cos(degree); void DrawClock(HWND hw, HDC h, int hour, int minute, int second) HDC bufdc = CreateCompatibleDC(h); HBITMAP buf = CreateCompatibleBitmap(bufdc, 200, 200); RECT cr; HBRUSH bBg =

22、 CreateSolidBrush(RGB(255, 255, 255); GetClientRect(hw, &cr); SelectObject(bufdc, bBg); SelectObject(bufdc, buf); FillRect(bufdc, &cr, bBg); int sx, sy, ex, ey; int i; for(i = 0; i < 12; +i) GetPos(2*3.14159/12*i, 85, &sx, &sy); GetPos(2*3.14159/12*i, 95, &ex, &ey); MoveTo

23、Ex(bufdc, 100+sx, 100-sy, 0); LineTo(bufdc, 100+ex, 100-ey); int hx, hy, mx, my, sx, sy; GetPos(2*3.14159 / 24 * (hour + (double)minute / 60 + (double)second / 3600), 50, &hx, &hy); GetPos(2*3.14159 / 60 * (minute + (double)second / 60), 65, &mx, &my); GetPos(2*3.14159 / 60 * second,

24、 80, &sx, &sy); MoveToEx(bufdc, 100, 100, NULL); LineTo(bufdc, 100+hx, 100-hy); MoveToEx(bufdc, 100, 100, NULL); LineTo(bufdc, 100+mx, 100-my); MoveToEx(bufdc, 100, 100, NULL); LineTo(bufdc, 100+sx, 100-sy); BitBlt(h, 0, 0, 200, 200, bufdc, 0, 0, SRCCOPY); DeleteDC(bufdc); DeleteObject(bBg);

25、 DeleteObject(buf); LRESULT CALLBACK WndProc(HWND h, UINT m, WPARAM w, LPARAM l) switch(m) case WM_CREATE: SetTimer(h, 1, 1000, 0); return 0; case WM_ERASEBKGND: return 1; case WM_TIMER: InvalidateRect(h, 0, FALSE); return 0; case WM_PAINT: PAINTSTRUCT ps; HDC dc = BeginPaint(h, &ps); time_t t;

26、struct tm* pst; time(&t); pst = localtime(&t); DrawClock(h, dc, pst->tm_hour, pst->tm_min, pst->tm_sec); EndPaint(h, &ps); return 0; case WM_DESTROY: KillTimer(h, 1); PostQuitMessage(0); return 0; default: return DefWindowProc(h, m, w, l); int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrev

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論