java課程設(shè)計(jì)-時(shí)鐘圖形模擬_第1頁(yè)
已閱讀1頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  課 程 設(shè) 計(jì) 任 務(wù) 書(shū)</p><p><b>  目 錄</b></p><p>  1 設(shè)計(jì)內(nèi)容及要求1</p><p>  1.1 設(shè)計(jì)內(nèi)容1</p><p>  1.2 設(shè)計(jì)目的及意義1</p><p><b>  2 概要設(shè)計(jì)1</

2、b></p><p><b>  2.1功能簡(jiǎn)介1</b></p><p>  2.2功能說(shuō)明:1</p><p>  2.3 總體程序框圖2</p><p><b>  3 設(shè)計(jì)過(guò)程3</b></p><p>  3.1各個(gè)模塊程序流程圖3</p>

3、;<p>  3.2運(yùn)行界面及關(guān)鍵代碼4</p><p>  4設(shè)計(jì)結(jié)果與分析6</p><p><b>  4.1設(shè)計(jì)結(jié)果6</b></p><p><b>  4.2分析6</b></p><p><b>  5 總結(jié)7</b></p>

4、<p><b>  6 參考文獻(xiàn)7</b></p><p>  附程序清單及源程序8</p><p><b>  1 設(shè)計(jì)內(nèi)容及要求</b></p><p><b>  1.1 設(shè)計(jì)內(nèi)容</b></p><p>  通過(guò)編程最終使電腦屏幕顯示模擬時(shí)鐘,并正常運(yùn)行

5、顯示表針時(shí)間,電腦上呈現(xiàn)一個(gè)圖種的模型表示電腦上的時(shí)間,并可以模擬時(shí)鐘走動(dòng)。</p><p>  1.2 設(shè)計(jì)目的及意義</p><p>  設(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ǔ)言的應(yīng)用,通過(guò)編程實(shí)現(xiàn)既定功能。培養(yǎng)自學(xué)能力,獨(dú)立思考能力,

6、將理論形成實(shí)際運(yùn)用,同時(shí)可以掌握下列運(yùn)算符的使用:</p><p>  1 .數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)等)。</p><p>  2 .運(yùn)算類型(算術(shù)運(yùn)算、邏輯運(yùn)算、自增自減運(yùn)算、賦值運(yùn)算等)。</p><p>  3 .程序結(jié)構(gòu)(順序結(jié)構(gòu)、判斷選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu))</p><p>  5 .復(fù)雜任務(wù)功能分解方法(自頂向

7、下逐步求精、模塊化設(shè)計(jì)、信息隱藏等)。</p><p>  6 .學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃語(yǔ)言程序。</p><p><b>  2 概要設(shè)計(jì)</b></p><p><b>  2.1功能簡(jiǎn)介</b></p><p><b>  實(shí)現(xiàn)功能如下:</b>&l

8、t;/p><p> ?。?)在屏幕上最終顯示一個(gè)圖形時(shí)鐘(用程序繪制一個(gè)與時(shí)鐘樣式相似即可),能模擬機(jī)械鐘表行走。</p><p> ?。?)數(shù)字式顯示時(shí)間與指針式顯示時(shí)間一致,且各指針運(yùn)動(dòng)規(guī)律正確。</p><p> ?。?)能準(zhǔn)確的利用數(shù)字顯示時(shí)間和日期。</p><p> ?。?)按ESC可以退出程序。</p><p&g

9、t;<b>  2.2功能說(shuō)明:</b></p><p>  內(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í)間。</p><p>  說(shuō)明:指針順時(shí)針旋轉(zhuǎn);指針式的時(shí)鐘表盤(pán)為圓形;

10、圓周上分布均勻的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ì)思想如下:</p><p>  1 . 確定秒針的走時(shí),將圓分成60份每過(guò)一秒,秒重要轉(zhuǎn)過(guò)1/60個(gè)園,即一等份。</p><p>  2 . 確定分針真的走時(shí),將圓分成60份每過(guò)一分,分

11、針要轉(zhuǎn)過(guò)1/60個(gè)圓,即一等份分針自己走過(guò)的再加秒針的,才是此四分鐘的位置。 </p><p>  3 . 時(shí)鐘走動(dòng)與系統(tǒng)時(shí)間聯(lián)系:每過(guò)一秒畫(huà)出秒針,并且除去前一秒的秒針,分針和 秒針一樣,畫(huà)線函數(shù)與時(shí)間聯(lián)系使用變量。</p><p>  4 . 設(shè)置橫縱坐標(biāo)及表針:X = a*cos(b*pi/180)+300;Y=a*sin(b*pi/180)+240;</p>&l

12、t;p>  2.3 總體程序框圖</p><p><b>  (系統(tǒng)模塊圖)</b></p><p>  首先,先畫(huà)出個(gè)鐘的大致輪廓。從輸出數(shù)字到畫(huà)出外輪廓,到標(biāo)出短線到畫(huà)出時(shí)針、分針、秒針。這個(gè)輪廓就已經(jīng)完成了。然后,為了更加這個(gè)鐘的實(shí)用性。就通過(guò)獲取系統(tǒng)時(shí)間來(lái)結(jié)合實(shí)際意義,這是最簡(jiǎn)單,最好的方法。從應(yīng)用上,它顯示的是實(shí)際的時(shí)間,增強(qiáng)了可用性;從編程上,不用再

13、復(fù)雜地再編一個(gè)更時(shí)間一樣的函數(shù)來(lái),減少程序的篇幅、復(fù)雜性和編程者的工作量。接著順帶利用時(shí)間的變量名來(lái)畫(huà)時(shí)針,分針,秒針。最后,為了讓時(shí)針,分針,秒針讓觀察者看起來(lái)是連續(xù)的變化,即形象地模擬真實(shí)的機(jī)械鐘表那樣運(yùn)動(dòng)。</p><p><b>  3 設(shè)計(jì)過(guò)程</b></p><p>  3.1各個(gè)模塊程序流程圖</p><p>  3.2運(yùn)行界面及

14、關(guān)鍵代碼</p><p><b>  3.2.1運(yùn)行結(jié)果</b></p><p>  在桌面顯示一個(gè)模擬的時(shí)鐘,時(shí)鐘的秒針、分針與時(shí)針隨著時(shí)間的推移而不斷移動(dòng)就像我們經(jīng)常看見(jiàn)的圓形電子時(shí)鐘一樣。我們可以通過(guò)程序隨意改動(dòng)時(shí)鐘的背景顏色以及指針的顏色和表盤(pán)大小等問(wèn)題,同時(shí)還能在桌面顯示一些簡(jiǎn)單的英文以及圖案等。</p><p>  3.2.2關(guān)鍵代

15、碼分析及說(shuō)明</p><p> ?。?)本系統(tǒng)中主要的數(shù)據(jù)結(jié)構(gòu)就是time結(jié)構(gòu)體</p><p>  struct time</p><p><b>  {</b></p><p>  unsigned char m;/*分鐘*/</p><p>  unsigned char h/*小時(shí)*/ &

16、lt;/p><p>  unsigned char s/*秒*/</p><p><b>  }</b></p><p>  time結(jié)構(gòu)體定義在dos.h文件中,可用來(lái)保存系統(tǒng)的當(dāng)前時(shí)間,其中各字段的值的含義如下。</p><p>  ·unsigned char m:保存分鐘值。</p><

17、p>  ·unsigned char h:保存小時(shí)值。</p><p>  ·unsigned char s:保存秒數(shù)。</p><p><b>  (2)全局變量</b></p><p>  下面對(duì)程序用到的全局變量及數(shù)組進(jìn)行說(shuō)明。</p><p>  ·int h,m,s:此3個(gè)全

18、局變量分別用來(lái)保存小時(shí)、分鐘、秒數(shù)。</p><p>  ·int x,x1,x2,y,y1,y2:保存數(shù)字時(shí)鐘中小時(shí)、分、秒在屏幕中顯示的坐標(biāo)值。</p><p>  ·struct time t[1]:定義一個(gè)time結(jié)構(gòu)類型的數(shù)組,此數(shù)組只有t[0]一個(gè)元素。</p><p><b>  (3)程序流程</b><

19、/p><p>  系統(tǒng)的執(zhí)行應(yīng)從運(yùn)行開(kāi)始,顯示界面正常運(yùn)行,直到用戶選擇退出系統(tǒng)為止。</p><p>  (4)流程圖功能描述</p><p><b> ?、佼?huà)圓模板:</b></p><p>  #inlude “graphics.h”</p><p>  #inlude ”math.h ”<

20、;/p><p>  Void init()</p><p>  Circle(300,240,200); </p><p><b> ?、诋?huà)時(shí)間刻線模塊:</b></p><p>  For(i=0;i<=60;i++)</p><p><b>  {</b></p&

21、gt;<p>  If(i%5==0)</p><p><b>  L=15;else</b></p><p><b>  L=5;</b></p><p>  X1=200*sin()+300;</p><p>  Y1=200*cos()+240;</p><p

22、><b>  }</b></p><p> ?、蹠r(shí)間模塊:Gettime(d)</p><p><b>  4設(shè)計(jì)結(jié)果與分析</b></p><p><b>  4.1設(shè)計(jì)結(jié)果</b></p><p>  運(yùn)行程序后在屏幕上顯示出一時(shí)鐘,鐘上的時(shí)間與電腦上的時(shí)間完全一樣,

23、并且在秒針運(yùn)行的同時(shí)伴隨聲音</p><p>  如同下圖一樣的圖案:</p><p><b>  4.2分析</b></p><p>  在桌面會(huì)顯示一個(gè)模擬的時(shí)鐘,時(shí)鐘的秒針、分針與時(shí)針隨著時(shí)間的推移而不斷移動(dòng)就像我們經(jīng)??匆?jiàn)的圓形電子時(shí)鐘一樣。我們可以通過(guò)程序隨意改動(dòng)時(shí)鐘的背景顏色以及指針的顏色和表盤(pán)大小等問(wèn)題,同時(shí)還能在桌面顯示一些簡(jiǎn)單

24、的英文以及圖案等。因?yàn)槭浅绦蚩刂茣r(shí)鐘的,所以起始時(shí)間是通過(guò)程序控制的,要想改動(dòng)還是需要通過(guò)改變程序獲得,并不是隨系統(tǒng)時(shí)間而確定起始時(shí)間的。</p><p><b>  5 總結(jié)</b></p><p>  通過(guò)本次的課程設(shè)計(jì),我深刻的體會(huì)到了C語(yǔ)言的強(qiáng)大。雖然本次的課程設(shè)計(jì)對(duì)我來(lái)說(shuō)有一定的難度,但是在朋友的幫助下我還是很好地完成了(自我感覺(jué))。從而也認(rèn)識(shí)到了程序的內(nèi)涵

25、,使我對(duì)編程產(chǎn)生了很大的興趣。其實(shí)編程很好玩的,在編程中不但可以完成一些現(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)一件事,那就是我一開(kāi)始選的TC程序,運(yùn)行的時(shí)候總是要我輸入?yún)?shù),由于自己的知識(shí)局限,總是敲不出結(jié)果,所以我又去百度文庫(kù)搜了一個(gè)vc程序,雖然最終使運(yùn)行出來(lái)了,可是這次事件讓我認(rèn)識(shí)自身知識(shí)的不足,

26、所以,這次過(guò)后會(huì)更加認(rèn)真的學(xué)習(xí)一些書(shū)面沒(méi)有的知識(shí),充實(shí)自己。</p><p><b>  6 參考文獻(xiàn)</b></p><p>  《C語(yǔ)言程序設(shè)計(jì)》(第二版)[M].北京:清華大學(xué)出版社 譚浩強(qiáng) 1999</p><p>  《數(shù)據(jù)結(jié)構(gòu)》(C語(yǔ)言版)[M].北京:清華大學(xué)出版社 嚴(yán)魏敏,吳偉民 1997</p><p&

27、gt;  《C語(yǔ)言程序設(shè)計(jì)》[M]. 黃明等.大連理工大學(xué)出版社,2005</p><p>  《C語(yǔ)言課程設(shè)計(jì)案例精編》. 郭翠英 . 中國(guó)水利水電出版 . 2004年3月</p><p>  《C語(yǔ)言程序設(shè)計(jì)教程》 曾春平,朱小谷,晏海華.北京希望電子出版社 . 2005年3月</p><p>  《C語(yǔ)言課程設(shè)計(jì)案例精編》清華大學(xué)出版社﹒ 姜靈芝、余健﹒ 2

28、008.1</p><p>  《C語(yǔ)言程序設(shè)計(jì)》西安電子科技大學(xué)出版社﹒田祥宏主編﹒2007.12</p><p><b>  附程序清單及源程序</b></p><p>  (1)TC2.0上的源程序</p><p>  #include"graphics.h"#include"mat

29、h.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í)鐘邊

30、框函數(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=200*sin(i*6*pi/180)+300;y1=200*cos(i*6*pi/180)+24

31、0;x2=(200-l)*sin(i*6*pi/180)+300;y2=(200-l)</p><p> ?。?)visual c++ 6.0上運(yùn)行的源程序</p><p>  #define _CRT_SECURE_NO_WARNINGS</p><p>  #include <windows.h></p><p>  #i

32、nclude <math.h></p><p>  #include <time.h></p><p>  #pragma comment(lib, "user32.lib")</p><p>  #pragma comment(lib, "gdi32.lib")</p><p>

33、;  #pragma comment(linker, "/SUBSYSTEM:Windows")</p><p>  void GetPos(double degree, int len, int* x, int* y)</p><p><b>  {</b></p><p>  *x = len * sin(degree)

34、;</p><p>  *y = len * cos(degree);</p><p><b>  }</b></p><p>  void DrawClock(HWND hw, HDC h, int hour, int minute, int second)</p><p><b>  {</b>

35、</p><p>  HDC bufdc = CreateCompatibleDC(h);</p><p>  HBITMAP buf = CreateCompatibleBitmap(bufdc, 200, 200);</p><p><b>  RECT cr;</b></p><p>  HBRUSH bBg =

36、CreateSolidBrush(RGB(255, 255, 255));</p><p>  GetClientRect(hw, &cr);</p><p>  SelectObject(bufdc, bBg);</p><p>  SelectObject(bufdc, buf);</p><p>  FillRect(bufdc

37、, &cr, bBg);</p><p><b>  {</b></p><p>  int sx, sy, ex, ey;</p><p><b>  int i;</b></p><p>  for(i = 0; i < 12; ++i) {</p><p>

38、;  GetPos(2*3.14159/12*i, 85, &sx, &sy);</p><p>  GetPos(2*3.14159/12*i, 95, &ex, &ey);</p><p>  MoveToEx(bufdc, 100+sx, 100-sy, 0);</p><p>  LineTo(bufdc, 100+ex, 1

39、00-ey);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  {</b></p><p>  int hx, hy, mx, my, sx, sy;</p><p>  GetPos(2*3.

40、14159 / 24 * (hour + (double)minute / 60 + (double)second / 3600), 50, &hx, &hy);</p><p>  GetPos(2*3.14159 / 60 * (minute + (double)second / 60), 65, &mx, &my);</p><p>  GetPos(

41、2*3.14159 / 60 * second, 80, &sx, &sy);</p><p>  MoveToEx(bufdc, 100, 100, NULL);</p><p>  LineTo(bufdc, 100+hx, 100-hy);</p><p>  MoveToEx(bufdc, 100, 100, NULL);</p>

42、<p>  LineTo(bufdc, 100+mx, 100-my);</p><p>  MoveToEx(bufdc, 100, 100, NULL);</p><p>  LineTo(bufdc, 100+sx, 100-sy);</p><p><b>  }</b></p><p>  Bit

43、Blt(h, 0, 0, 200, 200, bufdc, 0, 0, SRCCOPY);</p><p>  DeleteDC(bufdc);</p><p>  DeleteObject(bBg);</p><p>  DeleteObject(buf);</p><p><b>  }</b></p>

44、<p>  LRESULT CALLBACK WndProc(HWND h, UINT m, WPARAM w, LPARAM l)</p><p><b>  {</b></p><p>  switch(m) {</p><p>  case WM_CREATE:</p><p>  SetTimer(h

45、, 1, 1000, 0);</p><p><b>  return 0;</b></p><p>  case WM_ERASEBKGND:</p><p><b>  return 1;</b></p><p>  case WM_TIMER:</p><p>  In

46、validateRect(h, 0, FALSE);</p><p><b>  return 0;</b></p><p>  case WM_PAINT: {</p><p>  PAINTSTRUCT ps;</p><p>  HDC dc = BeginPaint(h, &ps);</p>

47、<p><b>  {</b></p><p><b>  time_t t;</b></p><p>  struct tm* pst;</p><p><b>  time(&t);</b></p><p>  pst = localtime(&

48、t);</p><p>  DrawClock(h, dc, pst->tm_hour, pst->tm_min, pst->tm_sec);</p><p><b>  }</b></p><p>  EndPaint(h, &ps);</p><p><b>  return 0;

49、</b></p><p><b>  }</b></p><p>  case WM_DESTROY:</p><p>  KillTimer(h, 1);</p><p>  PostQuitMessage(0);</p><p><b>  return 0;</b

50、></p><p><b>  default:</b></p><p>  return DefWindowProc(h, m, w, l);</p><p><b>  }</b></p><p><b>  }</b></p><p>  i

51、nt APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmd, INT nShow)</p><p><b>  {</b></p><p>  WNDCLASS wc;</p><p>  ZeroMemory(&wc, sizeof(wc));</p>

52、<p>  wc.style = CS_HREDRAW | CS_VREDRAW;</p><p>  wc.lpfnWndProc = WndProc;</p><p>  wc.hInstance = hInst;</p><p>  wc.hbrBackground = (HBRUSH) COLOR_WINDOW;</p><

53、p>  wc.lpszClassName = TEXT("MYCLOCK");</p><p>  if (RegisterClass(&wc) != 0) {</p><p><b>  MSG m;</b></p><p>  HWND hw = CreateWindow(TEXT("MYCLOC

54、K"), TEXT("Clock"), WS_OVERLAPPEDWINDOW,</p><p>  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, 0);</p><p>  if (hw != NULL) {</p><p>

55、;<b>  RECT r;</b></p><p>  GetWindowRect(hw, &r);</p><p>  r.right = r.left + 200;</p><p>  r.bottom = r.top + 200;</p><p>  AdjustWindowRect(&r, WS

56、_OVERLAPPEDWINDOW, FALSE);</p><p>  MoveWindow(hw, r.left, r.top, r.right - r.left, r.bottom - r.top, FALSE);</p><p>  ShowWindow(hw, SW_SHOWNORMAL);</p><p>  UpdateWindow(hw);</

57、p><p>  while( GetMessage(&m, 0, 0, 0) > 0) {</p><p>  TranslateMessage(&m);</p><p>  DispatchMessage(&m);</p><p><b>  }</b></p><p>

58、;<b>  return 0;</b></p><p><b>  }</b></p><p><b>  return 1;</b></p><p><b>  } else</b></p><p><b>  return 1;</b

溫馨提示

  • 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ù)僅提供信息存儲(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)論