




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)與信息工程系 高級(jí)語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告課 程 設(shè) 計(jì) 任 務(wù) 書專 業(yè)通信工程班 級(jí)13級(jí)四班姓 名張凱銘設(shè) 計(jì) 起 止 日 期設(shè)計(jì)題目:時(shí)鐘圖形模擬設(shè)計(jì)任務(wù)(主要技術(shù)參數(shù)):硬件環(huán)境:CPU:Pentium 2.8GHz以上 內(nèi)存:256MB以上 硬盤空間:80G以上軟件環(huán)境:(1)操作系統(tǒng):Windows XP(2)開發(fā)軟件:JDK,JCreator實(shí)現(xiàn)功能:通過(guò)編程最終使電腦屏幕顯示模擬時(shí)鐘,并正常運(yùn)行顯示表針時(shí)間,電腦上呈現(xiàn)一個(gè)圖種的模型表示電腦上的時(shí)間,并可以模擬時(shí)鐘走動(dòng)。指導(dǎo)教師評(píng)語(yǔ):成績(jī): 簽字:年 月 日目 錄1 設(shè)計(jì)內(nèi)容及要求11.1 設(shè)計(jì)內(nèi)容11.2 設(shè)計(jì)目的及意
2、義12 概要設(shè)計(jì)12.1功能簡(jiǎn)介12.2功能說(shuō)明:12.3 總體程序框圖23 設(shè)計(jì)過(guò)程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)容通過(guò)編程最終使電腦屏幕顯示模擬時(shí)鐘,并正常運(yùn)行顯示表針時(shí)間,電腦上呈現(xiàn)一個(gè)圖種的模型表示電腦上的時(shí)間,并可以模擬時(shí)鐘走動(dòng)。1.2 設(shè)計(jì)目的及意義設(shè)計(jì)目的及意義:熟悉Visual c+ 6.0軟件的應(yīng)用,C語(yǔ)言相關(guān)函數(shù),語(yǔ)句的學(xué)習(xí),查找資料代碼等,編程、調(diào)試、運(yùn)行、效果顯示調(diào)整,完成上傳,熟悉編程語(yǔ)言,了解程序運(yùn)行以及圖像顯示等C語(yǔ)言的
3、應(yīng)用,通過(guò)編程實(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ù)功能分解方法(自頂向下逐步求精、模塊化設(shè)計(jì)、信息隱藏等)。6 .學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃語(yǔ)言程序。2 概要設(shè)計(jì)2.1功能簡(jiǎn)介實(shí)現(xiàn)功能如下:(1)在屏幕上最終顯示一個(gè)圖形時(shí)鐘(用程序繪制一個(gè)與時(shí)鐘樣式相似即可),能模擬機(jī)械鐘表行走。(2)數(shù)字式顯示時(shí)間與指針式顯示時(shí)間一致,且各指針運(yùn)動(dòng)規(guī)律
4、正確。(3)能準(zhǔn)確的利用數(shù)字顯示時(shí)間和日期。(4)按ESC可以退出程序。2.2功能說(shuō)明:內(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í)間同步并獲取系統(tǒng)時(shí)間。說(shuō)明:指針順時(shí)針旋轉(zhuǎn);指針式的時(shí)鐘表盤為圓形;圓周上分布均勻的12個(gè)刻度;有3個(gè)長(zhǎng)度不同的指針,即時(shí)針,分針,秒針的運(yùn)動(dòng)具有規(guī)律性;數(shù)字鐘顯示時(shí)間格式年月日時(shí)分秒,小時(shí)為24進(jìn)制,分和秒為60進(jìn)制;指針式的時(shí)鐘與數(shù)字式的時(shí)鐘顯示時(shí)間同步;其主要的設(shè)計(jì)思想如下:1 . 確定
5、秒針的走時(shí),將圓分成60份每過(guò)一秒,秒重要轉(zhuǎn)過(guò)1/60個(gè)園,即一等份。2 . 確定分針真的走時(shí),將圓分成60份每過(guò)一分,分針要轉(zhuǎn)過(guò)1/60個(gè)圓,即一等份分針自己走過(guò)的再加秒針的,才是此四分鐘的位置。 3 . 時(shí)鐘走動(dòng)與系統(tǒng)時(shí)間聯(lián)系:每過(guò)一秒畫出秒針,并且除去前一秒的秒針,分針和 秒針一樣,畫線函數(shù)與時(shí)間聯(lián)系使用變量。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è)輪
6、廓就已經(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ù)來(lái),減少程序的篇幅、復(fù)雜性和編程者的工作量。接著順帶利用時(shí)間的變量名來(lái)畫時(shí)針,分針,秒針。最后,為了讓時(shí)針,分針,秒針讓觀察者看起來(lái)是連續(xù)的變化,即形象地模擬真實(shí)的機(jī)械鐘表那樣運(yùn)動(dòng)。3 設(shè)計(jì)過(guò)程3.1各個(gè)模塊程序流程圖Start初始化圖形系統(tǒng)設(shè)置窗體的背景色、前景色及畫筆畫出主體框架的邊直線、邊角弧線畫出時(shí)鐘的框架、標(biāo)題及時(shí)分秒的刻度;繪制數(shù)字式時(shí)鐘下的數(shù)字時(shí)鐘的邊框架調(diào)用時(shí)鐘處理程序獲取當(dāng)前時(shí)間并顯
7、示調(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í)鐘一樣。我們可以通過(guò)程序隨意改動(dòng)時(shí)鐘的背景顏色以及指針的顏色和表盤大小等問(wèn)題,同時(shí)還能在桌面顯示一些簡(jiǎn)單的英文以及圖案等。3.2.2關(guān)鍵代碼分析及說(shuō)明(1)本系統(tǒng)中主要的數(shù)據(jù)結(jié)構(gòu)就是time結(jié)構(gòu)體struct time unsigned char m;/*分鐘*/ unsigned char h/*小時(shí)*/ unsi
8、gned char s/*秒*/time結(jié)構(gòu)體定義在dos.h文件中,可用來(lái)保存系統(tǒng)的當(dāng)前時(shí)間,其中各字段的值的含義如下。·unsigned char m:保存分鐘值。·unsigned char h:保存小時(shí)值。·unsigned char s:保存秒數(shù)。(2)全局變量下面對(duì)程序用到的全局變量及數(shù)組進(jìn)行說(shuō)明。·int h,m,s:此3個(gè)全局變量分別用來(lái)保存小時(shí)、分鐘、秒數(shù)。·int x,x1,x2,y,y1,y2:保存數(shù)字時(shí)鐘中小時(shí)、分、秒在屏幕中顯示的坐標(biāo)值。·struct time t1:定義一個(gè)time結(jié)構(gòu)類型的數(shù)組,此數(shù)組只
9、有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<=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í)伴隨聲音如同下
10、圖一樣的圖案:4.2分析在桌面會(huì)顯示一個(gè)模擬的時(shí)鐘,時(shí)鐘的秒針、分針與時(shí)針隨著時(shí)間的推移而不斷移動(dòng)就像我們經(jīng)??匆姷膱A形電子時(shí)鐘一樣。我們可以通過(guò)程序隨意改動(dòng)時(shí)鐘的背景顏色以及指針的顏色和表盤大小等問(wèn)題,同時(shí)還能在桌面顯示一些簡(jiǎn)單的英文以及圖案等。因?yàn)槭浅绦蚩刂茣r(shí)鐘的,所以起始時(shí)間是通過(guò)程序控制的,要想改動(dòng)還是需要通過(guò)改變程序獲得,并不是隨系統(tǒng)時(shí)間而確定起始時(shí)間的。5 總結(jié)通過(guò)本次的課程設(shè)計(jì),我深刻的體會(huì)到了C語(yǔ)言的強(qiáng)大。雖然本次的課程設(shè)計(jì)對(duì)我來(lái)說(shuō)有一定的難度,但是在朋友的幫助下我還是很好地完成了(自我感覺(jué))。從而也認(rèn)識(shí)到了程序的內(nèi)涵,使我對(duì)編程產(chǎn)生了很大的興趣。其實(shí)編程很好玩的,在編程中不但
11、可以完成一些現(xiàn)實(shí)中從在的東西,還可以制作出很多意想不到東西。還有對(duì)于此次課程設(shè)計(jì)讓我深刻的認(rèn)識(shí)到自己學(xué)得的遠(yuǎn)遠(yuǎn)還太少,需要我們自發(fā)的去學(xué)習(xí)知識(shí)才可以成長(zhǎng)的更快!其次,對(duì)于此次設(shè)計(jì)我得坦誠(chéng)一件事,那就是我一開始選的TC程序,運(yùn)行的時(shí)候總是要我輸入?yún)?shù),由于自己的知識(shí)局限,總是敲不出結(jié)果,所以我又去百度文庫(kù)搜了一個(gè)vc程序,雖然最終使運(yùn)行出來(lái)了,可是這次事件讓我認(rèn)識(shí)自身知識(shí)的不足,所以,這次過(guò)后會(huì)更加認(rèn)真的學(xué)習(xí)一些書面沒(méi)有的知識(shí),充實(shí)自己。6 參考文獻(xiàn)C語(yǔ)言程序設(shè)計(jì)(第二版)M.北京:清華大學(xué)出版社 譚浩強(qiáng) 1999數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)M.北京:清華大學(xué)出版社 嚴(yán)魏敏,吳偉民 1997C語(yǔ)言程序設(shè)
12、計(jì)M. 黃明等.大連理工大學(xué)出版社,2005C語(yǔ)言課程設(shè)計(jì)案例精編. 郭翠英 . 中國(guó)水利水電出版 . 2004年3月C語(yǔ)言程序設(shè)計(jì)教程 曾春平,朱小谷,晏海華.北京希望電子出版社 . 2005年3月C語(yǔ)言課程設(shè)計(jì)案例精編清華大學(xué)出版社 姜靈芝、余健 2008.1C語(yǔ)言程序設(shè)計(jì)西安電子科技大學(xué)出版社田祥宏主編2007.12附程序清單及源程序(1)TC2.0上的源程序#include"graphics.h"#include"math.h"#include"dos.h"#define pi 3.1415926#define X(a,b,c
13、) 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,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=20
14、0*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 gdriver=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
15、(&gdriver,&gmode,"c:tc");for(i=0;i<=6;i+)settextstyle(TRIPLEX_FONT,HORIZ_DIR,i); /*控制輸出字符的字體,方向,大小*/cleardevice();settextjustify(1,1); /*在指定坐標(biāo)上輸出字符串*/outtextxy(300,80,"12") ;outtextxy(300,390,"6");outtextxy(140,230,"9");outtextxy(460,230,"3&quo
16、t;);outtextxy(380,100,"1");outtextxy(220,100,"11");outtextxy(430,160,"2");outtextxy(430,310,"4");outtextxy(380,370,"5");outtextxy(220,370,"7");outtextxy(160,160,"10");outtextxy(160,310,"8");init();setwritemode(1); /*設(shè)置畫線
17、的輸出模式*/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í)針顏色*/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(!kb
18、hit() /*控制程序按下任意鍵退出*/while(t0.ti_sec=s)gettime(t);gotoxy(44,18); /*使光標(biāo)移動(dòng)到指定坐標(biāo)*/printf("bbbbbbbbb"); /*退格,使表示時(shí)間的字符串不斷變化*/sound(400); /*按給定的頻率打開PC揚(yáng)聲器*/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)
19、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);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,
20、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,q);printf("bbbbbbbbb");getch();closegraph();(2)visual c+ 6.0上運(yùn)行的源程序#define _CRT_SECURE_NO_WARNINGS#include <windows.h>#include
21、 <math.h>#include <time.h>#pragma comment(lib, "user32.lib")#pragma comment(lib, "gdi32.lib")#pragma comment(linker, "/SUBSYSTEM:Windows") void GetPos(double degree, int len, int* x, int* y) *x = len * sin(degree); *y = len * cos(degree); void DrawClock(HWND
22、 hw, HDC h, int hour, int minute, int second) HDC bufdc = CreateCompatibleDC(h); HBITMAP buf = CreateCompatibleBitmap(bufdc, 200, 200); RECT cr; HBRUSH bBg = CreateSolidBrush(RGB(255, 255, 255); GetClientRect(hw, &cr); SelectObject(bufdc, bBg); SelectObject(bufdc, buf); FillRect(bufdc, &cr,
23、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); MoveToEx(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 +
24、(double)second / 3600), 50, &hx, &hy); GetPos(2*3.14159 / 60 * (minute + (double)second / 60), 65, &mx, &my); GetPos(2*3.14159 / 60 * second, 80, &sx, &sy); MoveToEx(bufdc, 100, 100, NULL); LineTo(bufdc, 100+hx, 100-hy); MoveToEx(bufdc, 100, 100, NULL); LineTo(bufdc, 100+mx,
25、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); 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; c
26、ase 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; 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,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)生產(chǎn)管理與調(diào)度方案手冊(cè)
- 公司電話客服勞動(dòng)合同
- 防雷接地施工方案例
- 2025年人力資源制度:全日制從業(yè)人員勞動(dòng)合同
- 咨詢產(chǎn)品服務(wù)合同
- 環(huán)氧樹脂注漿施工方案
- 晉城房屋糾偏施工方案
- 泄爆吊頂施工方案
- 鋼欄桿安裝工程施工方案
- 濱城區(qū)七上數(shù)學(xué)試卷
- 中國(guó)現(xiàn)當(dāng)代文學(xué)第一章魯迅
- 居民自建房經(jīng)營(yíng)業(yè)態(tài)不超過(guò)三種承諾書
- 探究語(yǔ)言溝通聯(lián)合心理護(hù)理在精神疾病護(hù)理中的應(yīng)用效果
- 管理百年知到章節(jié)答案智慧樹2023年南昌大學(xué)
- 汽車維修工高級(jí)考試試題含參考答案
- 組織行為學(xué)(對(duì)外經(jīng)濟(jì)貿(mào)易大學(xué))智慧樹知到答案章節(jié)測(cè)試2023年
- 日間手術(shù)管理制度考核試題及答案
- avolites tiger touch ii v7.0操作說(shuō)明書添加面板按鍵介紹
- 部編人教版小學(xué)五年級(jí)道德與法治下冊(cè)全冊(cè)完整課件ppt
- 頂罩沖壓工藝與模具設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- 分離工程試習(xí)題庫(kù)-葉慶國(guó)
評(píng)論
0/150
提交評(píng)論