java時鐘論文_第1頁
java時鐘論文_第2頁
java時鐘論文_第3頁
java時鐘論文_第4頁
java時鐘論文_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、X X X X 大 學(xué)Java語言程序設(shè)計課程設(shè)計(論文)題目: 時鐘 院(系): 專業(yè)班級: 學(xué) 號: 學(xué)生姓名: 指導(dǎo)教師: 教師職稱: 起止時間: 課程設(shè)計(論文)任務(wù)及評語院(系): 教研室: 學(xué) 號 學(xué)生姓名 專業(yè)班級 課程設(shè)計(論文)題目 時鐘課程設(shè)計(論文)任務(wù)任務(wù)與要求:(1). 掌握面向?qū)ο蟪绦蛟O(shè)計語言JAVA的基本語法(2). 掌握J(rèn)AVA面向?qū)ο笤O(shè)計的思想,(3). 掌握VJAVA6.0與MyEclips JAVA 開發(fā)工具的使用 (4). 運用標(biāo)準(zhǔn)JAVA規(guī)范設(shè)計應(yīng)用程序設(shè)計過程中,要嚴(yán)格遵守設(shè)計的時間安排,聽從指導(dǎo)教師的指導(dǎo)。正確地完成上述內(nèi)容,規(guī)范完整地撰寫出設(shè)計報

2、告。指導(dǎo)教師評語及成績 成績: 指導(dǎo)教師簽字: 年 月 日xxxx大 學(xué) 課 程 設(shè) 計 說 明 書(論 文)目 錄第1章 課程設(shè)計目的與要求11.1設(shè)計目的11.2實驗環(huán)境11.3預(yù)備知識11.4設(shè)計要求1第2章 課程設(shè)計內(nèi)容22.1 課題描述22.2 系統(tǒng)設(shè)計22.2.1功能分析22.2.2面向?qū)ο笤O(shè)計22.2.2類成員描述42.3程序?qū)崿F(xiàn)52.3.1源碼分析52.3.2運行結(jié)果18第3章 總結(jié)19參考文獻20第1章 課程設(shè)計目的與要求1.1設(shè)計目的將理論教學(xué)中涉及到的知識點貫穿起來,對不同的數(shù)據(jù)類型、程序控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)作一比較和總結(jié),結(jié)合設(shè)計題目進行綜合性應(yīng)用,對所學(xué)知識達到融會貫通

3、的程度。通過課程設(shè)計,學(xué)生在下述各方面的能力應(yīng)該得到鍛煉:(1)進一步鞏固、加深學(xué)生所學(xué)專業(yè)課程JAVA語言教程的基本理論知識,理論聯(lián)系實際,進一步培養(yǎng)學(xué)生綜合分析問題,解決問題的能力。(2)全面考核學(xué)生所掌握的基本理論知識及其實際業(yè)務(wù)能力,從而達到提高學(xué)生素質(zhì)的最終目的。(3)利用所學(xué)知識,開發(fā)小型應(yīng)用系統(tǒng),掌握運用JAVA語言編寫調(diào)試應(yīng)用系統(tǒng)程序,訓(xùn)練獨立開發(fā)應(yīng)用系統(tǒng),進行數(shù)據(jù)處理的綜合能力。(4)對于給定的設(shè)計題目,如何進行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型。(5)掌握面向?qū)ο蟪绦蛟O(shè)計的方法。(6)熟練掌握J(rèn)AVA語言的基本語法,靈活運用各種數(shù)據(jù)類型。(7)進一步掌握在集成環(huán)境下如何調(diào)

4、試程序和修改程序。1.2實驗環(huán)境硬件要求能運行Windows 操作系統(tǒng)的微機系統(tǒng)。JAVA語言應(yīng)用程序開發(fā)軟件使用:VJAVA 系統(tǒng),或其他JAVA語言應(yīng)用程序開發(fā)軟件。1.3預(yù)備知識熟悉JAVA語言程序設(shè)計的基本知識及VJAVA編輯器的使用方法。1.4設(shè)計要求1.仔細分析設(shè)計題目,畫出程序流程圖,編寫程序源代碼。2.積極上機調(diào)試源程序,增強編程技巧與調(diào)程能力。3.認(rèn)真書寫課程設(shè)計預(yù)習(xí)報告,課程設(shè)計說明書。4.遵守課程設(shè)計要求和機房管理制度,服從指導(dǎo)教師的安排,確保課程設(shè)計的順利完成課程設(shè)計內(nèi)容。第2章 課程設(shè)計內(nèi)容2.1 課題描述我設(shè)計的時鐘有的界面良好,比較簡潔美觀,程序有很強的實用性,實

5、現(xiàn)程序與電腦的時間的同步??梢燥@示時針、分針、秒針及日期,并可以在相應(yīng)位置調(diào)整時間。而且初始運行會自動與電腦的時間校對,一般默認(rèn)為同步,但還可以自己再次調(diào)節(jié),提高了實用性。2.2 系統(tǒng)設(shè)計2.2.1功能分析實現(xiàn)程序與電腦的時間的同步??梢燥@示時鐘,也可以顯示分針秒針,并可以在相應(yīng)位置調(diào)整時間。而且初始運行會自動與電腦的時間校對,一般默認(rèn)為同步,但還可以自己再次調(diào)節(jié),提高了實用性。2.2.2面向?qū)ο笤O(shè)計(一)類的設(shè)計本程序設(shè)計了兩個類,該類是NewJFrame和Tclock。完成顯示格式、更新時間的功能(時間一秒一更新)。(二)UML類圖該系統(tǒng)采用統(tǒng)一建模語言UML,即可視化(Visualing

6、)、規(guī)范定義(Specifying)、構(gòu)造(Constructing)和文檔化(Documenting),適用于各種軟件開發(fā)方法、軟件生命周期的各個階段、各種應(yīng)用領(lǐng)域以及各種開發(fā)工具,支持大部分現(xiàn)存的面向?qū)ο箝_發(fā)過程,從而為設(shè)計人員、開發(fā)人員、用戶和領(lǐng)域?qū)<抑g的交流提供了便利。UML能讓系統(tǒng)構(gòu)造者用標(biāo)準(zhǔn)的、易于理解的方式建立起能夠表達他們想象力的系統(tǒng)藍圖,可對系統(tǒng)的理解、設(shè)計、瀏覽、配置、維護和信息進行控制,還可將模型分解成包的結(jié)構(gòu)組件,以便于軟件小組將大的系統(tǒng)分解成易于處理的塊結(jié)構(gòu),理解和控制各個包之間的依賴關(guān)系,并在復(fù)雜的開發(fā)環(huán)境中管理模型單元。隨著UML的不斷完善與發(fā)展,現(xiàn)已統(tǒng)一為大眾

7、所接受的標(biāo)準(zhǔn)建模語言。在UML中為類提供了圖形表示。通常一個類主要包括兩個部分,類的屬性和對類的操作。用語言描述起來,不僅繁重冗長,而且太過于抽象,不容易表達清楚。系統(tǒng)類圖能夠清楚直觀的表現(xiàn)出類的屬性和對類的操作,并且能夠清晰的從視覺上給我們呈現(xiàn)出類與類之間的關(guān)系。開始系統(tǒng)初始化時鐘設(shè)置鍵值合法性處理顯示設(shè)計時鐘值時鐘運行時鐘處理 圖2.1總體流程圖2.2.2類成員描述* * 類名: Clock * * 作用: 自定義主類,對鼠標(biāo)拖拽的初始界面進行聲明* * 繼承的父類: JComponent類 * * 實現(xiàn)的接口: 沒有 * *表1-成員變量表表2.1 Clock成員變量成員變量描述變量類型

8、名稱時針StringHour分針StringMinute秒針StringSecond時間點TextFieldtext_1表2-方法表表2 Clock方法方法名功能備注setCurrentTime設(shè)置當(dāng)前時間構(gòu)造方法paintHourPointer設(shè)置時針 接口方法paintSecondPointer設(shè)置秒針 接口方法paintMinuteDot設(shè)置分針 接口方法actionPerformed事件處理 run程序運行 2.3程序?qū)崿F(xiàn)2.3.1源碼分析import java.awt.*; import java.awt.geom.Ellipse2D

9、; import java.awt.geom.GeneralPath; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.util.Calendar; import java.util.Date; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.UIManager; public class Clock extends JC

10、omponent private static final Color INTEGRAL_COLOR = new Color(0, 128, 128); private int radius; private Calendar currentTime = Calendar.getInstance(); private double s = 0.03; public Clock(int radius) this.radius = radius; public void setCurrentTime(Date time) /設(shè)置當(dāng)前時間 this.currentTime.setTime(time)

11、; public void setCurrentTime(long millis) this.currentTime.setTimeInMillis(millis); public Dimension getPreferredSize() Insets insets = getInsets(); int r = (int) (radius = -1 ? 0 : radius*(1+s)+1; return new Dimension(r * 2 + insets.left + insets.right,r * 2 + insets.top + insets.bottom); /返回一個指定寬、

12、高的Dimension protected void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Insets insets = getInsets(); int wid = getWidth() - insets.left - insets.right; int hei = getHeigh

13、t() - insets.top - insets.bottom; int r = (int) (Math.min(wid, hei) / 2 / (1+s); g2d.translate(insets.left + r * (1+s), insets.top + r * (1+s); g2d.scale(1, -1); for (int i = 0; i < 60; i+) int angle = 90 - i * 6; double pos = calcPos(r, angle); paintMinuteDot(r, g2d, pos0, pos1, i % 5 = 0); pain

14、tHourPointer(r, g2d); paintMinutePointer(r, g2d); paintSecondPointer(r, g2d); paintCenterPoint(g2d); g2d.scale(1, -1); g2d.translate(-insets.left - r * (1+s), -insets.top - r * (1+s); private void paintCenterPoint(Graphics2D g2d) g2d.setColor(Color.BLUE); Rectangle2D rect = new Rectangle2D.Double(-2

15、, -2, 4, 4); g2d.fill(rect); private void paintMinutePointer(int r, Graphics2D g2d) int minute = currentTime.get(Calendar.MINUTE); int second = currentTime.get(Calendar.SECOND); double angle = 90 - (minute + second / 60.0) * 6; Shape pointerShape = createPointerShape(r * 0.8, r * 0.04, r * 0.08, ang

16、le); g2d.setColor(Color.LIGHT_GRAY); g2d.fill(pointerShape); g2d.setColor(Color.DARK_GRAY); g2d.draw(pointerShape); private void paintHourPointer(int r, Graphics2D g2d) int hour = currentTime.get(Calendar.HOUR); int minute = currentTime.get(Calendar.MINUTE); int second = currentTime.get(Calendar.SEC

17、OND); double angle = 90 - (hour + minute / 60.0 + second / 3600.0) * 30; Shape pointerShape = createPointerShape(r * 0.6, r * 0.06, r * 0.1, angle); g2d.setColor(Color.LIGHT_GRAY); g2d.fill(pointerShape); g2d.setColor(Color.DARK_GRAY); g2d.draw(pointerShape); private Shape createPointerShape(double

18、r1, double r2, double r3, double angle) GeneralPath gp = new GeneralPath(); double pos = calcPos(r1, angle); double pos1 = calcPos(r2, angle + 90); gp.append(new Line2D.Double(pos0, pos1, pos10, pos11), true); double pos2 = calcPos(r3, angle + 180); gp.lineTo(float)pos20, (float)pos21); double pos3

19、= calcPos(r2, angle + 270); gp.lineTo(float)pos30, (float)pos31); gp.closePath(); return gp; private void paintSecondPointer(int r, Graphics2D g2d) g2d.setColor(Color.BLACK); int second = currentTime.get(Calendar.SECOND); int angle = 90 - second * 6; double pos = calcPos(r * 0.9, angle); double pos1

20、 = calcPos(r * 0.2, angle + 180); Line2D line = new Line2D.Double(pos10, pos11, pos0, pos1); g2d.draw(line); private void paintMinuteDot(int r, Graphics2D g2d, double x, double y, boolean flag) g2d.setColor(flag ? Color.RED : Color.BLACK); if (flag) /Rectangle2D rect = new Rectangle2D.Double( Ellips

21、e2D rect = new Ellipse2D.Double( x - r * s, y - r * s, r * s * 2, r * s * 2); g2d.fill(rect); else /Rectangle2D rect = new Rectangle2D.Double( Ellipse2D rect = new Ellipse2D.Double( x - r * 0.02, y - r * 0.02, r * 0.04, r * 0.04); g2d.fill(rect); private double calcPos(double r, double angle) double

22、 radian = Math.toRadians(angle); double x = r * Math.cos(radian); double y = r * Math.sin(radian); return new double x, y; public static void main(String args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch (Exception e) e.printStackTrace(); final Clock clock = new Clo

23、ck(50); clock.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10); JFrame f = new JFrame( "軟件081班 071404011 孫慶賀 "); /f.setBounds(380,200,500,600); f.getContentPane().add(clock, BorderLayout.CENTER); f.pack(); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CL

24、OSE); f.setVisible(true); new Thread() public void run() while (true) try Thread.sleep(1000); catch (InterruptedException ex) ex.printStackTrace(); clock.setCurrentTime(System.currentTimeMillis(); clock.repaint(); .start(); int y1 = (int)(r - 10) * Math.cos(rad * s);g.drawLine(x + r, y + r, x + r +

25、x1, y + r - y1);/分針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);/時針g.setColor(Color.CYAN);x1 = (int)(r - r / 1.5) * Math.sin(rad * h);y1 = (int)(r - r / 1.5) * Math.cos(rad * h);g.drawL

26、ine(x + r, y + r, x + r + x1, y + r - y1);/數(shù)字g.setColor(Color.YELLOW);int d = 29;for (int i = 1; i <= 12; i+) x1 = (int)(r - 10) * Math.sin(rad * d);y1 = (int)(r - 10) * Math.cos(rad * d);g.drawString(i + "", x + r + x1 - 4, x + r - y1 + 5);d+=30;/小點d = 0;for (int i = 0; i < 60; i+)

27、x1 = (int)(r - 2) * Math.sin(rad * d);y1 = (int)(r - 2) * Math.cos(rad * d);g.drawString(".", x + r + x1 - 1, x + r - y1 + 1);d+=6;/顯示時間Calendar now1 = new GregorianCalendar();g.drawString(now1.get(Calendar.HOUR_OF_DAY) + ":" + now1.get(Calendar.MINUTE) + ":" + now1.get

28、(Calendar.SECOND), 0, 10);public void run() while (true) try Thread.sleep(1000);catch (Exception ex) s+=6;if (s >= 360) s = 0;m+=6;if (m = 72 | m = 144 | m = 216 | m = 288) h+=6;if (m >= 360) m = 0;h+=6;if (h >=360) h = 0;this.repaint();int x, y, r;int h, m, s;/小時,分鐘,秒double rad = Math.PI /

29、 180;public ClockPaint(int x, int y, int r) this.x = x;this.y = y;this.r = r;Calendar now = new GregorianCalendar();s = now.get(Calendar.SECOND) * 6;/獲得秒轉(zhuǎn)換成度數(shù)m = now.get(Calendar.MINUTE) * 6;/獲得分鐘h = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30 + now.get(Calendar.MINUTE) / 12 * 6;/獲得小時Thread t = new Th

30、read(this);t.start();public void paint(Graphics g) /清屏super.paint(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);/秒針g.setColor(Color.RED);int x1 = (int)(r - 10) * Math.sin(rad * s);/定義MyTimer類 class MyTimer1 extends JFrame static i

31、nt count=0; /判斷是否重定義了時間 /構(gòu)造函數(shù) public MyTimer1() /定義窗口大小 setSize(320, 200); /定義窗口標(biāo)題 setTitle("測試自定義時鐘類!"); Container c = getContentPane(); / new ClockCanvas("北京時間", "GMT+8") c.add(new ClockCanvas("北京時間", "GMT+8"); /定義接口 interface TimerListener1 void t

32、imeElapsed(Timer1 t); class Timer1 extends Thread /類Timer1 private TimerListener1 target; private int interval; public Timer1(int i, TimerListener1 t) target = t; interval = i; setDaemon(true); public void run() try while (!interrupted() sleep(interval); target.timeElapsed(this); catch(InterruptedEx

33、ception e) class ClockCanvas extends JPanel /clockcanvas implements TimerListener1 static int seconds = 0; private String city; private GregorianCalendar calendar; /構(gòu)造函數(shù) public ClockCanvas(String c, String tz) city = c; calendar = new GregorianCalendar(TimeZone.getTimeZone(tz); Timer1 t = new Timer1

34、(1000, this); t.start(); setSize(180, 180); /繪制鐘面 public void paintComponent(Graphics g) super.paintComponent(g); g.drawOval(100, 5, 120, 120); g.drawOval(101, 6, 118, 118); /分離時間 double hourAngle = 2 * Math.PI * (seconds - 3 * 60 * 60) / (12 * 60 * 60); double minuteAngle = 2 * Math.PI * (seconds -

35、 15 * 60) / (60 * 60); double secondAngle = 2 * Math.PI * (seconds - 15) / 60; public void timeElapsed(Timer1 t) calendar.setTime(new Date(); if(MyTimer1.count=1) int a=1; seconds=MyTHour*60*60+MyTMinute*60+MyTSecond; seconds+=a;/a為秒自加 repaint(); else seconds = calendar.get(C

36、alendar.HOUR) * 60 * 60 + calendar.get(Calendar.MINUTE) * 60 + calendar.get(Calendar.SECOND); repaint(); /定義時鐘類 class MyTimer implements TimerListener /定義時鐘類的屬性 static int intHour,intMinute,intSecond; /構(gòu)造函數(shù) public MyTimer() setCurrentTimeAsSystemTime(); Timer t = new Timer(1000, this); /實例Timer類,里面有

37、run方法 t.start(); /顯示當(dāng)前時間 public void displayCurrentTime() JOptionPane.showMessageDialog(null,intHour+":"+intMinute+":"+intSecond); /設(shè)定當(dāng)前時間 public void setCurrentTime() /從對話框輸入時,分秒 String strTemp=JOptionPane.showInputDialog(null,"請輸入當(dāng)前小時(24小時制):"); int iHour=Integer.parseInt(strTemp); strTemp=JOptionPane.showInputDialog(null,"請輸入當(dāng)前分:"); int iMinute=Integer.parseInt(strTemp); strTemp=JOptionPane.showInputDialog(null,"請輸入當(dāng)前秒:"); int iSecond=Integer.parseInt(strTemp); /設(shè)定當(dāng)前時間為對話框輸入的時間 if(iHour>=0&&iHour<24) intHou

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論