模擬時(shí)鐘課程設(shè)計(jì)報(bào)告_第1頁
模擬時(shí)鐘課程設(shè)計(jì)報(bào)告_第2頁
模擬時(shí)鐘課程設(shè)計(jì)報(bào)告_第3頁
模擬時(shí)鐘課程設(shè)計(jì)報(bào)告_第4頁
模擬時(shí)鐘課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)報(bào)告課程: 面向?qū)ο蟪绦蛟O(shè)計(jì) 學(xué)號(hào):1210461018 1210461027 1210461050 姓名: 張揚(yáng) 李佳珂 金正行 班級(jí): 12計(jì)科2班 教師: 錢 田 芬 時(shí)間: 2014年12月10日 計(jì)算機(jī)科學(xué)與技術(shù)系設(shè)計(jì)名稱:模擬時(shí)鐘日期:2014年1 2月 10日設(shè)計(jì)內(nèi)容:通過多線程技術(shù),重繪界面,繪制一個(gè)虛擬的時(shí)鐘,時(shí)鐘界面包括表盤和指針。并用數(shù)字表顯示當(dāng)前的時(shí)間。1 設(shè)計(jì)目的與要求1.1基本要求編寫一個(gè)模擬時(shí)鐘程序,此程序在屏幕中間有一指針式鐘面。左上角以數(shù)字方式顯示時(shí)間,該時(shí)間應(yīng)與指針顯示的時(shí)間一致,且與機(jī)器系統(tǒng)時(shí)間相同。在設(shè)計(jì)的過程中,需要用到awt組件和swing容

2、器與組件,布局管理器,事件處理,繪制圖形,還運(yùn)用到了類的繼承,事件監(jiān)聽器和線程。掌握jdk、editplus、eclipse、jcreator等開發(fā)工具的運(yùn)用,拓寬常用類庫的應(yīng)用。增進(jìn)java語言編輯基本功,1.2 設(shè)計(jì)目的設(shè)計(jì)一個(gè)帶有指針、數(shù)字時(shí)鐘,并且具有秒表功能,能方便我們的使用和操作,為我們以后的使用創(chuàng)造一個(gè)良好的平臺(tái)。把自己所學(xué)的理論知識(shí)運(yùn)用到實(shí)際操作中去,以此來發(fā)現(xiàn)自己的不足,及時(shí)的改正。在實(shí)際的操作中學(xué)習(xí)及運(yùn)用還沒有學(xué)過的知識(shí)。最后在調(diào)試與測(cè)試的過程還可以提升自己的改錯(cuò)能力也是自己經(jīng)驗(yàn)的積累!2 設(shè)計(jì)環(huán)境、思想和功能描述2.1運(yùn)行環(huán)境:eclipse +jdk平臺(tái)

3、60;            cpu:pentium 2.8ghz以上 內(nèi)存:256mb以上 硬盤空間:80g以上 操作系統(tǒng):windows xp windows 7 windows 82.2主要設(shè)計(jì)思想:先是利用構(gòu)造函數(shù)創(chuàng)建一個(gè)長(zhǎng)為200,寬為200的窗體,顏色設(shè)置為black,并把窗體設(shè)計(jì)為固定大小。利用awt繪制圖形的方法,在窗體中間畫一個(gè)圓,并且繪制時(shí)鐘上的12個(gè)數(shù)字,然后利用calendar類提供

4、的hour,minute和second 方法獲得現(xiàn)在的時(shí)間,在計(jì)算時(shí)間和度數(shù)的關(guān)系;在利用awt繪制圖形的方法繪制出各指針,并設(shè)置不同的顏色。在利用drawstring在窗體的左上角顯示出當(dāng)前的時(shí)間。2.3功能描述:設(shè)計(jì)的時(shí)鐘界面良好,比較簡(jiǎn)潔美觀,程序有很強(qiáng)的實(shí)用性,實(shí)現(xiàn)程序與電腦的時(shí)間的同步??梢燥@示時(shí)鐘,可以顯示具體的數(shù)字時(shí)間,也可以顯示分針秒針。3 設(shè)計(jì)方案的具體論證3.1詳細(xì)設(shè)計(jì)3.1.1 界面及布局設(shè)計(jì)先是利用構(gòu)造函數(shù)創(chuàng)建一個(gè)長(zhǎng)為200,寬為200的窗體,顏色設(shè)置為black,并把窗體設(shè)計(jì)為固定大小。 利用awt繪制圖形的方法,在窗體中間畫一個(gè)圓,并且繪制時(shí)鐘上的12個(gè)數(shù)

5、字,然后利用calendar類提供的hour,minute,second方法獲得現(xiàn)在的時(shí)間,在計(jì)算時(shí)間和度數(shù)的關(guān)系;在利用awt繪制圖形的方法繪制出各指針,并設(shè)置不同的顏色。 3.1.2 類、方法類名: clock  作用: 自定義主類,對(duì)鼠標(biāo)拖拽的初始界面進(jìn)行聲明 類名: clockpain 作用:用來畫時(shí)鐘和指針繼承的父類: jcomponent類 實(shí)現(xiàn)的接口: 沒有表 1-成員變量clockpaint成員變量成員變量描述變量類型名稱時(shí)針stringh分針stringm秒針stri

6、ngs表 2-方法表clockpaint方法方法名功能備注get(calendar.second)獲得秒數(shù)接口方法get(calendar.minute)獲得分鐘接口方法get(calendar.hour_of_day)獲得小時(shí)接口方法paint()畫圖run()運(yùn)行程序3.2 概要設(shè)計(jì)啟動(dòng)時(shí)鐘創(chuàng)建一個(gè)主窗體利用awt繪制圖形方法在窗體繪制一個(gè)圓,并繪制好12個(gè)數(shù)字計(jì)算出時(shí)間和度數(shù)的關(guān)系繪制出各指針關(guān)閉時(shí)鐘時(shí)針走時(shí)分針走時(shí)秒針走時(shí)程序流程圖定義子類:clockpaint 繼承的父類名:jpanel 繼承的接口名:runnable int h, 

7、m, s                           / 小時(shí),分鐘,秒 主要成員方法:  s = now.get(calendar.second) * 6    / 獲得秒轉(zhuǎn)換成度

8、數(shù) m = now.get(calendar.minute) * 6    / 獲得分鐘 h = (now.get(calendar.hour_of_day) - 12) * 30+ now.get(calendar.minute) / 12 * 6    / 獲得小時(shí) 主要成員方法:/清屏 super.pa

9、int(g) g.setcolor(color.black) g.fillrect(0, 0, r * 3, r * 3)       / 畫圓 g.setcolor(color.white) g.drawoval(x, y, r * 2, r * 2)       &

10、#160;/ 秒針 g.setcolor(color.red) int x1 = (int) (r - 10) * math.sin(rad * s) int y1 = (int) (r - 10) * math.cos(rad * s) g.drawline(x + r, y + r, 

11、x + r + x1, y + r - y1)    / 分針 g.setcolor(color.blue) x1 = (int) (r - r / 2.5) * math.sin(rad * m) y1 = (int) (r - r / 2.5)&

12、#160;* math.cos(rad * m) g.drawline(x + r, y + r, x + r + x1, y + r - y1)    / 時(shí)針 g.setcolor(color.cyan) x1 = (int) (r - r / 1.5) 

13、* math.sin(rad * h) y1 = (int) (r - r / 1.5) * math.cos(rad * h) g.drawline(x + r, y + r, x + r + x1, y + r - y1)    / 數(shù)

14、字 g.setcolor(color.yellow) int d = 29 for (int i = 1; i <= 12; i+)                      3.3 程序說明先是利用構(gòu)造函數(shù)創(chuàng)建一個(gè)長(zhǎng)為200,寬為2

15、00的窗體,顏色設(shè)置為black,并把窗體設(shè)計(jì)為固定大小。利用awt繪制圖形的方法,在窗體中間畫一個(gè)圓,并且繪制時(shí)鐘上的12個(gè)數(shù)字,然后利用calendar類提供的hour,minute,second方法獲得現(xiàn)在的時(shí)間,在計(jì)算時(shí)間和度數(shù)的關(guān)系;在利用awt繪制圖形的方法繪制出各指針,并設(shè)置不同的顏色。在利用drawstring在窗體的左上方畫出和時(shí)鐘相對(duì)數(shù)字時(shí)間。在設(shè)計(jì)的過程中,需要用到swing組件和swing容器與組件,布局管理器,事件處理,繪制圖形,還運(yùn)用到了類的繼承,事件監(jiān)聽器和線程。 “gregoriancalendar()”用于顯示當(dāng)前時(shí)間;“setcolor”用于顯示時(shí)針、分針和

16、表盤的顏色;“color numbercolor” 用于顯示秒針和數(shù)字的顏色, “drawoval(x, y, r * 2, r * 2)”用graphics算法來畫圓,其中(x,y)是圓的中心,r為圓半徑;“public void paint(graphics g)”用于運(yùn)行時(shí)程序;   “public void start()” threat的啟動(dòng)方法; “public void run()” 線程的run方法。run( )方法就是分出去讓程

17、序同時(shí)運(yùn)行的、用來處理休眠和重畫圖形的線程。4 設(shè)計(jì)結(jié)果與分析4.1設(shè)計(jì)結(jié)果 當(dāng)程序正常運(yùn)行的時(shí)候,它能清晰的顯示時(shí)鐘界面。默認(rèn)為與系統(tǒng)時(shí)間同步,如果出現(xiàn)錯(cuò)誤,就會(huì)進(jìn)行歸零。運(yùn)行界面如圖4.2設(shè)計(jì)分析 使用的方法:在clock的源代碼的編寫過程中運(yùn)用了paint( )、repaint( )、run( )等方法。時(shí)鐘的繪制采用雙緩沖圖形處理機(jī)制,即先在緩沖區(qū)內(nèi)繪制圖形,再把圖形顯示到框架上。時(shí)鐘的不斷繪制是通過一個(gè)線程不斷讀取系統(tǒng)時(shí)間,如果時(shí)間有變化即繪制。 調(diào)試方法:首先我是一個(gè)類一個(gè)類的完成,在每一個(gè)類完成后都會(huì)對(duì)它進(jìn)行編譯,待它能

18、正常的編譯之后在進(jìn)行下面的類的編寫。在編譯的過程中會(huì)有一些錯(cuò)誤,比如說語法錯(cuò)誤,類的引用格式不正確,會(huì)產(chǎn)生一些異常。但是在經(jīng)過慢慢的調(diào)試,這些問題逐漸得到解決遇到的問題和解決方法:在用java編寫程序時(shí),我遇到了很多困難,對(duì)很多的接口,類,方法都不是很熟悉,只好采用查看api文檔,一個(gè)一個(gè)進(jìn)行對(duì)照學(xué)習(xí),同時(shí)也上網(wǎng)查看了有關(guān)模擬時(shí)鐘的相關(guān)描述,還向同學(xué)請(qǐng)教了,翻閱了相關(guān)的書籍。14附錄:程序代碼import java.awt.color;import java.awt.graphics;import java.awt.event.windowadapter;import java.awt.eve

19、nt.windowevent;import java.text.dateformat;import java.util.calendar;import java.util.gregoriancalendar;import javax.swing.jframe;import javax.swing.jpanel;public class clock extends jframe private static final long serialversionuid = 1l; public clock (int r) clockpaint cp = new clockpaint (r); this

20、.add(cp); this.setsize(300,210); this.setresizable(false); this.setlocation(260, 120); this.settitle("小時(shí)鐘"); this.setvisible(true); addwindowlistener(new windowadapter() public void windowclosing(windowevent e) system.exit(0); ); public static void main(string s) new clock (70); class cloc

21、kpaint1 extends jpanel implements runnable private static final long serialversionuid = 1l; int x, y, r; /上邊距,左邊距,鐘面半徑 int h, m, s; / 時(shí)針,分針,秒針對(duì)應(yīng)的度數(shù) double rad = math.pi / 180; /角度1°所對(duì)應(yīng)的弧度 public clockpaint1(int r) this.x = r/3; this.y = r/3; this.r = r; calendar now = new gregoriancalendar(); s

22、 = now.get(calendar.second) * 6;/ m = now.get(calendar.minute) * 6;/ h = (now.get(calendar.hour_of_day) - 12) * 30 + now.get(calendar.minute) / 12 * 6; thread t = new thread(this); t.start(); public void paint(graphics g) /清屏 super.paint(g); g.setcolor(color.black); g.fillrect(0, 0, 300, r*3);/填充矩形,

23、參數(shù)分別為左上角頂點(diǎn)橫、縱坐標(biāo),寬、高 / 畫圓 g.setcolor(color.white); g.drawoval(x, y, r * 2, r * 2);/參數(shù)分別為矩形的左上角頂點(diǎn)橫、縱坐標(biāo),矩形寬,矩形高(矩形內(nèi)切橢圓) / 秒針 g.setcolor(color.red); int x1 = (int) (r - 10) * math.sin(rad * s);/r-10為秒針的長(zhǎng)度,x軸朝右,y軸朝下 int y1 = (int) (r - 10) * math.cos(rad * s); g.drawline(x + r, y + r, x + r + x1, y + r -

24、 y1);/畫直線, 前2參數(shù)表起點(diǎn)坐標(biāo),后2參數(shù)表終點(diǎn)坐標(biāo) / 分針 g.setcolor(color.blue); x1 = (int) (r - r / 2.5) * math.sin(rad * m);/ y1 = (int) (r - r / 2.5) * math.cos(rad * m); g.drawline(x + r, y + r, x + r + x1, y + r - y1); / 時(shí)針 g.setcolor(color.cyan); x1 = (int) (r - r / 1.5) * math.sin(rad * h); y1 = (int) (r - r / 1.

25、5) * math.cos(rad * h); g.drawline(x + r, y + r, x + r + x1, y + r - y1); / 數(shù)字 int d = 30;/時(shí)鐘刻度數(shù)從1開始,角度的基線是“00”秒時(shí)的秒鐘,刻度1的夾角為30° for (int i = 1; i <= 12; i+) x1 = (int) (r - 10) * math.sin(rad * d);/刻度數(shù)橫坐標(biāo) y1 = (int) (r - 10) * math.cos(rad * d);/刻度數(shù)縱坐標(biāo) (rad * d):表示的是弧度 g.drawstring(i + "

26、;" , x + r + x1 - 4 , x + r - y1 + 5 ); d += 30; / 小點(diǎn) d = 0; for (int i = 0; i < 60; i+) /循環(huán)繪出60個(gè)刻度點(diǎn) x1 = (int) (r - 2) * math.sin(rad * d);/刻度點(diǎn)橫坐標(biāo) (r - 2):距圓面向內(nèi)縮進(jìn)2像素畫點(diǎn); y1 = (int) (r - 2) * math.cos(rad * d);/刻度點(diǎn)縱坐標(biāo) (rad * d):表示的是弧度 g.drawstring(".", x + r + x1 - 1 , x + r - y1 +

27、1);/后2個(gè)參數(shù)表示橫縱坐標(biāo),即從該坐標(biāo)處畫“.” d += 6; /一個(gè)圓360度,每隔6度畫一個(gè)點(diǎn),共60個(gè)點(diǎn) / 顯示時(shí)間 calendar now1 = new gregoriancalendar(); int hour = now1.get(calendar.hour_of_day);/小時(shí),獲得當(dāng)前的時(shí)刻 int minute = now1.get(calendar.minute);/分,同上 int second = now1.get(calendar.second);/秒 g.setcolor(color.pink); g.drawstring(hour<10?&quo

28、t;0":"")+hour+ ":" + (minute<10?"0":"")+minute+ ":" + (second<10?"0":"")+second, 200, 85);/drawstring使用當(dāng)前畫筆的顏色和字體,將參數(shù)str的內(nèi)容顯示出來,并且最 /左邊的字符的基線從坐標(biāo)x,y開始 calendar now2 = new gregoriancalendar(); dateformat f=dateformat.getd

29、ateinstance(dateformat.full);/獲取當(dāng)前日期的完整格式 g.setcolor(color.pink); g.drawstring(f.format(now2.gettime(), 162, 130); /實(shí)現(xiàn)接口runnable的方法run,用來刷新時(shí)分秒三指針的度數(shù) public void run() while (true) try thread.sleep(1000);/休眠一秒 catch (exception ex) s += 6; if(s % 360=0) m += 6; if(m % 72=0) h += 6; this.repaint(); 設(shè)計(jì)建

30、議與體會(huì)首先,java作為一種計(jì)算機(jī)語言,它具備語言的特性,就是我們?cè)谡n堂上認(rèn)真聽取了老師的指導(dǎo)之后,還得自己回去認(rèn)真看書寫程序,并且上機(jī)實(shí)習(xí)才能發(fā)現(xiàn)問題及時(shí)解決問題。就像我們學(xué)習(xí)語言一樣要通過和同學(xué)之間的交流才能提高我們的實(shí)際應(yīng)用能力。所以,我們?cè)谧约赫J(rèn)真刻苦學(xué)習(xí)的同時(shí),一定要多和同學(xué)老師交流,從他們那里吸取好的思維方式、好的學(xué)習(xí)方法。 對(duì)于課程設(shè)計(jì),基本上實(shí)現(xiàn)了模擬時(shí)鐘程序的要求,指針式鐘面,左上角有數(shù)字時(shí)間,與系統(tǒng)顯示的時(shí)間一致。該設(shè)計(jì)的特點(diǎn)是時(shí)鐘上標(biāo)有12數(shù)字個(gè)刻度,且每一分鐘的位置都一個(gè)刻度,并且各指針是不同的顏色,看上去比較美觀,在左上方顯示數(shù)字時(shí)間,這是為了能更好的看時(shí)

31、間。但是功能還不完善,沒有實(shí)現(xiàn)對(duì)于時(shí)間的重置。 我想在不斷地進(jìn)行對(duì)該設(shè)計(jì)的完善,不僅能為該時(shí)鐘設(shè)置背景,以增加該時(shí)鐘的美觀效果,也可以對(duì)時(shí)鐘到了一定的時(shí)間就可以報(bào)時(shí),并且可以設(shè)置鬧鐘,為鬧鐘設(shè)置多種音樂,可供選擇,這樣的話就不顯得單調(diào),這樣一來該時(shí)鐘更方便實(shí)用。也能對(duì)自己的動(dòng)手能力有所提高。在完成課程設(shè)計(jì)的過程中,遇到了不少的問題:一是有一些東西自己沒有學(xué)過;二是在編寫的過程中由于思路不清晰以及自己的粗心給自己制造了一些麻煩,還有就是會(huì)產(chǎn)生一些異常。但是在經(jīng)過自己和搭檔、同學(xué)的交流,以及自己查閱資料和api文檔,針對(duì)性的對(duì)不懂得問題進(jìn)行查詢,自己沒有學(xué)過但是又要用到得逐漸的得到解決,

32、再經(jīng)過自己反復(fù)的理清思路和反復(fù)的檢查,由思路不清晰和粗心帶來的麻煩也慢慢得到了解決。最后java作為一個(gè)面向?qū)ο蟮木幊陶Z言,在圖像方面具有很強(qiáng)的實(shí)現(xiàn)能力。這樣很能激發(fā)我的學(xué)習(xí)興趣。在編寫程序的時(shí)候發(fā)現(xiàn),雖然它是一個(gè)面向?qū)ο蟮木幊陶Z言,我們一定要學(xué)會(huì)如何編寫多個(gè)類和方法,在不斷地摸索中培養(yǎng)我們自身設(shè)計(jì)面向?qū)ο蠼鉀Q方案的能力。作為學(xué)生的我們,是一個(gè)學(xué)習(xí)的過程,我們應(yīng)該學(xué)習(xí)如何寫好程序。而好的程序不僅僅是一系列語句的拼湊,我們要聯(lián)系自身實(shí)際,用編程語言解決問題和實(shí)施解決問題的方案。在以后的日子里,我要不斷地學(xué)習(xí)這個(gè)博大精深的語言,繼續(xù)不斷的深化自己的實(shí)際動(dòng)手能力。金 正 行面向?qū)ο笳n程設(shè)計(jì)這兩周來,通過對(duì)所選題目程序的詳細(xì)分析和更改,受益匪淺。讓我了解到了java更多的實(shí)用功

溫馨提示

  • 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)論