Java電子計(jì)時(shí)器軟件設(shè)計(jì)報(bào)告_第1頁(yè)
Java電子計(jì)時(shí)器軟件設(shè)計(jì)報(bào)告_第2頁(yè)
Java電子計(jì)時(shí)器軟件設(shè)計(jì)報(bào)告_第3頁(yè)
Java電子計(jì)時(shí)器軟件設(shè)計(jì)報(bào)告_第4頁(yè)
Java電子計(jì)時(shí)器軟件設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩13頁(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、精選優(yōu)質(zhì)文檔-傾情為你奉上 佛山科學(xué)技術(shù)學(xué)院可視化編程技術(shù)課程設(shè)計(jì)報(bào)告電子計(jì)時(shí)器軟件設(shè)計(jì)學(xué)生姓名: 李泳東學(xué) 號(hào): 年級(jí)專業(yè):11級(jí)教育技術(shù)學(xué)2班指導(dǎo)老師: 容汝佳學(xué) 院: 教育科學(xué)學(xué)院廣東佛山提交日期:2013年6月目 錄1. 前言22概要設(shè)計(jì)3 2.1 開(kāi)發(fā)環(huán)境 3 2.2 電子鐘計(jì)時(shí)器功能 3 2.3 界面設(shè)計(jì) 3 2.4 類的框架結(jié)構(gòu)圖 43. 詳細(xì)設(shè)計(jì) 4 3.1 使用的JAVA類的說(shuō)明 4 3.2 類的主要方法 53.2.1時(shí)鐘鐘面類對(duì)象設(shè)計(jì)和按鍵處理63.2.2 運(yùn)行處理 73.2.3 設(shè)計(jì)總體認(rèn)識(shí) 93.2.4 程序流程圖 9 4. 運(yùn)行結(jié)果 105. 測(cè)試分析 10 5.1

2、程序運(yùn)行情況 10 5.2 程序異常處理 116. 源程序 11參考文獻(xiàn)20設(shè)計(jì)總結(jié)20專心-專注-專業(yè)摘要:該程序是一個(gè)圖形界面的簡(jiǎn)單的java小時(shí)鐘嵌套一個(gè)簡(jiǎn)單的秒表,具有良好的、簡(jiǎn)介的界面。它是圖形界面、線程、流與文件等技術(shù)的綜合運(yùn)用,其界面主要采用了java.awt包,javax.swing等。程序?qū)崿F(xiàn)了小時(shí)鐘的基本功能??梢詮碾娔X上獲得準(zhǔn)確的背景時(shí)間,其時(shí)間精確到秒,可以獲得準(zhǔn)確的星期、日期。時(shí)鐘的界面靜中帶動(dòng),秒表跳動(dòng)。使用人員能快捷簡(jiǎn)單地進(jìn)行操作秒表,即時(shí)準(zhǔn)確地計(jì)算時(shí)間,對(duì)人們的生活有一定的幫助。關(guān)鍵字:java電子計(jì)時(shí)器,時(shí)鐘鐘面類,方法,事件1 前言隨著科學(xué)技術(shù)的不斷發(fā)展,計(jì)

3、算機(jī)已經(jīng)成為我們工作學(xué)習(xí)和生活中不可缺少的工具。文本編輯器是個(gè)人計(jì)算機(jī)最司空見(jiàn)慣的應(yīng)用程序了,在學(xué)習(xí)了Java語(yǔ)言之后,我決定使用Java語(yǔ)言編寫(xiě)一個(gè)簡(jiǎn)單的計(jì)算器,可以實(shí)現(xiàn)簡(jiǎn)單的運(yùn)算功能,滿足日?;镜墓ぷ鲗W(xué)習(xí)和娛樂(lè)需要。Java是由Sun公司開(kāi)發(fā)的新一代純面向?qū)ο蟮木W(wǎng)絡(luò)編程語(yǔ)言。其目標(biāo)是建立一種在任意種機(jī)器、任一種操作系統(tǒng)的網(wǎng)絡(luò)環(huán)境中運(yùn)行的軟件,實(shí)行所謂的“程序?qū)懸淮?,到處運(yùn)行”的目標(biāo)。正因?yàn)槿绱?,Java已成為當(dāng)今Internet上最流行、最受歡迎的一種程序開(kāi)發(fā)語(yǔ)言。Java開(kāi)發(fā)小組把Java按特性分為基本版、移動(dòng)版、企業(yè)版,每個(gè)版本有一個(gè)軟件開(kāi)發(fā)包。Java基本版本叫Java 2標(biāo)準(zhǔn)版(

4、Java 2 Standard Edition,J2SE),它包含建立Java應(yīng)用程序或者是Applet所需的應(yīng)用程序編程接口(API)。Java 2移動(dòng)版(The Java 2 Mobile Edition,J2ME)包含創(chuàng)建無(wú)線Java應(yīng)用程序的API。還有Java 2企業(yè)版(The Java 2 Enterprise,J2EE)是J2SE的增強(qiáng)版本,包含建立多層架構(gòu)應(yīng)用程序API。Java語(yǔ)言是由C+語(yǔ)言發(fā)展起而來(lái)的,是一種徹底的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。作為一種純面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,它非常適合大型軟件的開(kāi)發(fā)。Java語(yǔ)言去掉了C+語(yǔ)言的一些容易引起錯(cuò)誤的特性。Java語(yǔ)言的特點(diǎn)有:面

5、向?qū)ο蟆⒖缙脚_(tái)、安全性、多線程和圖形功能強(qiáng)。2 概要設(shè)計(jì)2.1開(kāi)發(fā)環(huán)境 開(kāi)發(fā)平臺(tái):Microsoft Windows 7 Professional Service Pack 2 開(kāi)發(fā)工具:eclipse 2.2計(jì)算器功能獲得準(zhǔn)確的背景時(shí)間,這時(shí)小時(shí)鐘最基本的功能。    按下“開(kāi)始”鍵,開(kāi)始計(jì)時(shí),秒表跳動(dòng)。    按下“停止”鍵,停止計(jì)時(shí),秒表的時(shí)間停留在按下“停止”鍵的那一刻。   。按下“繼續(xù)”鍵,秒表繼續(xù)運(yùn)行,不會(huì)從0開(kāi)始,富有人性化。    按下“重設(shè)”鍵,秒表歸零。2.3界面

6、設(shè)計(jì)電子鐘和計(jì)時(shí)器面板2.4類的框架結(jié)構(gòu)圖class ClockPaint extends JPanel implements ActionListener,Runnablepublic shizhongandjishiqi() public void windowClosing()public void actionPerformed()public void run() class ClockPaint extends JPanel implements Runnablepublic ClockPaint()public void paint(Graphics g) 3詳細(xì)設(shè)計(jì)3.1計(jì)算器

7、使用的Java類的說(shuō)明類名: shizhongandjishiqi 作用: 主類。繼承的父類: Frame類實(shí)現(xiàn)的接口: ActionListener類,Runnable類public class shizhongandjishiqi extends JFrame implements ActionListener,Runnable3.2類的主要方法3.2.1時(shí)鐘鐘面類對(duì)象設(shè)計(jì)和按鍵處理: public shizhongandjishiqi(int r) /創(chuàng)建時(shí)鐘鐘面類對(duì)象btnStart = new JButton("開(kāi)始");btnPause = new JButto

8、n("停止");btnResume = new JButton("繼續(xù)");btnStop = new JButton("重設(shè)");lblTime = new JLabel("00:00:00.00");setLayout(null);btnStart.addActionListener(this); btnPause.addActionListener(this); btnResume.addActionListener(this); btnStop.addActionListener(this);ClockPa

9、int cp = new ClockPaint(r); this.add(cp); cp.setBounds(0, 0, r*5, r*3); this.add(btnStart); btnStart.setBounds(10,r*4,80,40); this.add(btnPause); btnPause.setBounds(135,r*4,80,40); this.add(btnResume); btnResume.setBounds(265,r*4,80,40); this.add(btnStop); btnStop.setBounds(395,r*4,80,40); this.add(

10、lblTime); lblTime.setBounds(210,340,100,50); this.setTitle("Clock2"); this.setSize(r*5, r*5); this.setVisible(true); this.setAlwaysOnTop(true);/設(shè)置為窗口總在前面顯示 this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0);/窗口關(guān)閉按鈕事件處理 ); 按鍵:if(btn.getText().

11、equals("開(kāi)始") th = new Thread(this); count = 0; th.start(); else if(btn.getText().equals("停止") th.suspend();/因?yàn)橐^續(xù)幾時(shí),不能使用stop命令 else if(btn.getText().equals("繼續(xù)") th.resume();/繼續(xù) else if(btn.getText().equals("重設(shè)")lblTime.setText("00:00:00:00");/歸零 pub

12、lic static void main(String s) /主程序 new shizhongandjishiqi(100); 3.2.2運(yùn)行處理:public void run() while(true) int ms, seconds, minutes, hours; String msg = "" hours = (int)(count / ); minutes = (int)(count - hours * ) / 60000); seconds = (int)(count - hours * - minutes * 60000) / 500); ms = (in

13、t)(count % 1000); if(hours < 10) msg += "0" + hours + ":" else msg += hours + ":" if(minutes < 10) msg += "0" + minutes + ":" else msg += minutes + ":" if(seconds < 10) msg += "0" + seconds + ":" else msg += sec

14、onds + ":" if(ms < 10) msg += "00" + ms; else if(ms < 100) msg += "0" + ms; else msg += ms; lblTime.setText(msg); count+; try Thread.sleep(1); catch (InterruptedException e) e.printStackTrace(); 3.2.3設(shè)計(jì)的總體認(rèn)識(shí)l JAVA設(shè)計(jì)的摘要l JAVA設(shè)計(jì)的目錄結(jié)構(gòu)l JAVA設(shè)計(jì)的概要和詳細(xì)設(shè)計(jì)l JAVA設(shè)計(jì)的版權(quán)意識(shí)l JA

15、VA設(shè)計(jì)需要編譯的環(huán)境l JAVA設(shè)計(jì)的實(shí)用性不能重復(fù)按3.2.4程序流程圖開(kāi)始重設(shè)繼續(xù)停止4運(yùn)行結(jié)果 計(jì)時(shí)器結(jié)果顯示5測(cè)試分析5.1程序運(yùn)行情況: 程序正常的響應(yīng)按鈕事件,在按 “開(kāi)始”鍵之后,能正常計(jì)時(shí),可以正常顯示,但如果重新按“開(kāi)始”鍵的時(shí)候,則會(huì)重新計(jì)時(shí),其他按鍵將會(huì)失去效果,這個(gè)時(shí)候就要對(duì)結(jié)果進(jìn)行必要的異常處理, 但是這個(gè)問(wèn)題還沒(méi)有得到解決。5.2 程序異常處理: 計(jì)時(shí)器的異常處理:有待解決。時(shí)鐘的異常處理:while (true) try Thread.sleep(1000);/休眠一秒 catch (InterruptedException ie) /當(dāng)程序出現(xiàn)異常,彈出對(duì)話框

16、提示 JOptionPane.showMessageDialog(this, ie.getMessage(), "程序異常", JOptionPane.ERROR_MESSAGE); s += 6;/每過(guò)1秒,秒針角度增加6度 if(s%360=0) m += 6;/秒針每走一周,分針角度增加6度 if(m%72=0) h += 6;/當(dāng)秒針角度為360°的倍數(shù)(即秒針指向12),且分針角度為72°的倍數(shù)時(shí),時(shí)針角度增加6°即走到下一個(gè)刻點(diǎn) this.repaint();/重新繪制鐘面,系統(tǒng)自動(dòng)調(diào)用paint(Graphics g) 6 源程序

17、:package 作品;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;public class shizhongandjishiqi extends JFrame implements ActionListener,RunnableThread th;/JMenuBar menubar;/JMenu filemenu;JButton btnStart;JButton btnPause;JButton btnResume;JButton btnStop;JLabel lblTim

18、e;long count;public shizhongandjishiqi(int r) /創(chuàng)建時(shí)鐘鐘面類對(duì)象/menubar = new JMenuBar();/filemenu = new JMenu("文件");btnStart = new JButton("開(kāi)始");btnPause = new JButton("停止");btnResume = new JButton("繼續(xù)");btnStop = new JButton("重設(shè)");lblTime = new JLabel(&qu

19、ot;00:00:00.00");setLayout(null);btnStart.addActionListener(this); btnPause.addActionListener(this); btnResume.addActionListener(this); btnStop.addActionListener(this);ClockPaint cp = new ClockPaint(r); this.add(cp); cp.setBounds(0, 0, r*5, r*3); this.add(btnStart); btnStart.setBounds(10,r*4,80

20、,40); this.add(btnPause); btnPause.setBounds(135,r*4,80,40); this.add(btnResume); btnResume.setBounds(265,r*4,80,40); this.add(btnStop); btnStop.setBounds(395,r*4,80,40); this.add(lblTime); lblTime.setBounds(210,340,100,50); this.setTitle("Clock2"); this.setSize(r*5, r*5); this.setVisible(

21、true); this.setAlwaysOnTop(true);/設(shè)置為窗口總在前面顯示 this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0);/窗口關(guān)閉按鈕事件處理 ); public void actionPerformed(ActionEvent e) JButton btn = (JButton)e.getSource(); if(btn.getText().equals("開(kāi)始") th = new Thread(thi

22、s); count = 0; th.start(); else if(btn.getText().equals("停止") th.suspend(); else if(btn.getText().equals("繼續(xù)") th.resume(); else if(btn.getText().equals("重設(shè)") /th.stop();lblTime.setText("00:00:00:00"); public static void main(String s) /主程序 new shizhongandjish

23、iqi(100); public void run() while(true) int ms, seconds, minutes, hours; String msg = "" hours = (int)(count / ); minutes = (int)(count - hours * ) / 60000); seconds = (int)(count - hours * - minutes * 60000) / 500); ms = (int)(count % 1000); if(hours < 10) msg += "0" + hours

24、+ ":" else msg += hours + ":" if(minutes < 10) msg += "0" + minutes + ":" else msg += minutes + ":" if(seconds < 10) msg += "0" + seconds + ":" else msg += seconds + ":" if(ms < 10) msg += "00" + ms; e

25、lse if(ms < 100) msg += "0" + ms; else msg += ms; lblTime.setText(msg); count+; try Thread.sleep(1); catch (InterruptedException e) e.printStackTrace(); /該類用于顯示時(shí)鐘鐘面class ClockPaint extends JPanel implements Runnable int x, y, r;/上邊距,左邊距,鐘面半徑int h, m, s;/ 時(shí)鐘,分鐘,秒鐘在鐘面上形成的角度數(shù)(與“12:00:00”指針

26、形成的夾角)double rad = Math.PI / 180;/角度1°所對(duì)應(yīng)的弧度public ClockPaint(int r) /構(gòu)造函數(shù) this.x = r/2; this.y = r/2; this.r = r; Calendar now = new GregorianCalendar();/創(chuàng)建當(dāng)前日期時(shí)間對(duì)象 s = now.get(Calendar.SECOND) * 6;/ 初始化秒鐘角度;一圓360度,秒鐘轉(zhuǎn)一周60秒,所以每走1秒角度轉(zhuǎn)過(guò)6度 m = now.get(Calendar.MINUTE) * 6;/ 同上 h = (now.get(Calend

27、ar.HOUR_OF_DAY) - 12) * 30/鐘面是12時(shí)制的,每1個(gè)小時(shí)所占的角度是360/12=30度 + now.get(Calendar.MINUTE) / 12 * 6;/ 1個(gè)小時(shí)里時(shí)鐘經(jīng)過(guò)5個(gè)刻度點(diǎn),所以每12分鐘才過(guò)1刻度點(diǎn), /而每個(gè)刻度點(diǎn)只見(jiàn)角度相差6度 Thread t = new Thread(this);/創(chuàng)建一個(gè)線程對(duì)象 t.start();/啟動(dòng)線程/方法重寫(xiě),繪制鐘面各元素public void paint(Graphics g) Graphics2D g2d = (Graphics2D)g; / 清屏GradientPaint p=new Gradie

28、ntPaint(120,10,Color.yellow,300,200,Color.blue);g2d.setPaint(p);g2d.fillRect(0, 0, r * 5, r * 5);/填充矩形,參數(shù)分別為左上角頂點(diǎn)橫、縱坐標(biāo),寬、高 / 畫(huà)圓g2d.setColor(Color.white);/g2d.drawOval(x*2, y*2, r * 1, r * 1);g2d.drawOval(x, y, r * 2, r * 2);/參數(shù)分別為矩形的左上角頂點(diǎn)橫、縱坐標(biāo),矩形寬,矩形高(矩形內(nèi)切橢圓) int d = 0,x1 = 0,y1 = 0;/角度數(shù),橫坐標(biāo),縱坐標(biāo) / 刻

29、度點(diǎn) 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像素畫(huà)點(diǎn); y1 = (int) (r - 2) * Math.cos(rad * d);/刻度點(diǎn)縱坐標(biāo) (rad * d):表示的是弧度 g2d.drawString(".", x + r + x1 - 1, y + r - y1 + 1);/后2個(gè)參數(shù)表示橫縱坐標(biāo),即從該坐標(biāo)處畫(huà)“.” d += 6;/一個(gè)圓360度,每隔6度畫(huà)一個(gè)點(diǎn),共60個(gè)點(diǎn) for

30、(int i = 0; i < 120; i+) /循環(huán)繪出60個(gè)刻度點(diǎn) x1 = (int) (r -20) * Math.sin(rad * d);/刻度點(diǎn)橫坐標(biāo) (r - 2):距圓面向內(nèi)縮進(jìn)2像素畫(huà)點(diǎn); y1 = (int) (r -20) * Math.cos(rad * d);/刻度點(diǎn)縱坐標(biāo) (rad * d):表示的是弧度 g2d.drawString(".", x + r + x1 - 1, y + r - y1 + 1);/后2個(gè)參數(shù)表示橫縱坐標(biāo),即從該坐標(biāo)處畫(huà)“.” d += 3;/一個(gè)圓360度,每隔6度畫(huà)一個(gè)點(diǎn),共60個(gè)點(diǎn) / 數(shù)字 g2d.s

31、etFont (new Font(Font.SERIF,Font.BOLD,13);/大小 g2d.setColor(Color.white); d = 30;/時(shí)鐘刻度數(shù)從1開(kāi)始,角度的基線是“00”秒時(shí)的秒鐘,刻度1的夾角為30° for (int i = 1; i <= 12; i+) x1 = (int) (r -10) * Math.sin(rad * d);/(r - 10): 縮進(jìn)10像素標(biāo)刻度數(shù) y1 = (int) (r -10) * Math.cos(rad * d); g2d.drawString(i + "", x + r + x1

32、- 4, y + r - y1 + 5); d += 30; / 時(shí)針 g2d.setColor(Color.black); g2d.setStroke(new BasicStroke(3.5f); x1 = (int) (2*r / 5) * Math.sin(rad * h); y1 = (int) (2*r / 5) * Math.cos(rad * h); g2d.drawLine(x + r, y + r, x + r + x1, y + r - y1);/畫(huà)直線, 前2參數(shù)表起點(diǎn)坐標(biāo),后2參數(shù)表終點(diǎn)坐標(biāo) / 分針 g2d.setColor(Color.black); g2d.set

33、Stroke(new BasicStroke(2.5f); x1 = (int) (3*r / 5) * Math.sin(rad * m); y1 = (int) (3*r / 5) * Math.cos(rad * m); g2d.drawLine(x + r, y + r, x + r + x1, y + r - y1); / 秒針 g2d.setColor(Color.RED); g2d.setStroke(new BasicStroke(1.5f); x1 = (int) (4*r / 5) * Math.sin(rad * s); y1 = (int) (4*r / 5) * Ma

34、th.cos(rad * s); g2d.drawLine(x + r, y + r, x + r + x1, y + r - y1); / 獲得時(shí)間、星期、日期 Calendar now1 = new GregorianCalendar();/獲得當(dāng)前的日期時(shí)間對(duì)象 int hour = now1.get(Calendar.HOUR_OF_DAY);/小時(shí),獲得當(dāng)前的時(shí)刻 int minute = now1.get(Calendar.MINUTE);/分,同上 int second = now1.get(Calendar.SECOND);/秒 int year = now1.get(Cale

35、ndar.YEAR);/年 int month = now1.get(Calendar.MONTH)+1;/月 int date = now1.get(Calendar.DAY_OF_MONTH);/日 int week = now1.get(Calendar.DAY_OF_WEEK);/星期 / 星期轉(zhuǎn)換字符串 String weekDay = "" switch(-week) case 1:weekDay="星期一"break; case 2:weekDay="星期二"break; case 3:weekDay="星期三

36、"break; case 4:weekDay="星期四"break; case 5:weekDay="星期五"break; case 6:weekDay="星期六"break; case 7:weekDay="星期日"break; default :weekDay=""break; / 顯示時(shí)間、星期、日期 g2d.setFont (new Font(Font.SERIF,Font.BOLD,17);/設(shè)置字體屬性 g2d.setColor(Color.red); g2d.drawString("北京時(shí)間: "+ (hour<10?"0":"")+hour+ ":" + (minute<10?"0&q

溫馨提示

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

評(píng)論

0/150

提交評(píng)論