JAVA課程設(shè)計(jì)時(shí)鐘的設(shè)計(jì)實(shí)現(xiàn).doc_第1頁
JAVA課程設(shè)計(jì)時(shí)鐘的設(shè)計(jì)實(shí)現(xiàn).doc_第2頁
JAVA課程設(shè)計(jì)時(shí)鐘的設(shè)計(jì)實(shí)現(xiàn).doc_第3頁
JAVA課程設(shè)計(jì)時(shí)鐘的設(shè)計(jì)實(shí)現(xiàn).doc_第4頁
JAVA課程設(shè)計(jì)時(shí)鐘的設(shè)計(jì)實(shí)現(xiàn).doc_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

遼 寧 工 業(yè) 大 學(xué)java程序設(shè)計(jì) 課程設(shè)計(jì)(論文)題目: 時(shí)鐘 院(系): 軟件學(xué)院 專業(yè)班級: 軟件技術(shù)091班 學(xué) 號(hào): 888888888 學(xué)生姓名: tianxi 指導(dǎo)教師: tianxi 教師職稱: 助 教 起止時(shí)間: 2010.12.1至2010.12.16 程序設(shè)計(jì)專題(報(bào)告)任務(wù)及評語院(系):軟件學(xué)院 教研室:軟件教研室學(xué) 號(hào)8888888學(xué)生姓名tianxi專業(yè)班級軟件技術(shù)091程序設(shè)計(jì)(報(bào)告)題目時(shí)鐘程序設(shè)計(jì)(報(bào)告)任務(wù)程序設(shè)計(jì)專題的任務(wù)與要求:(1)掌握java編程、面向?qū)ο蟮幕A(chǔ)知識(shí)。(2)較熟練地編寫java應(yīng)用程序application。(3)了解java的常用標(biāo)準(zhǔn)類庫、編程技巧、異常處理。(5)聯(lián)系已學(xué)過的內(nèi)容,鞏固所學(xué)的理論,增強(qiáng)獨(dú)立工作能力。(6)通過設(shè)計(jì)主要使學(xué)生有一個(gè)獨(dú)立編寫程序的過程,對理論學(xué)習(xí)及動(dòng)手能力都有一個(gè)很大的提高。(7)通過本次設(shè)計(jì),進(jìn)一步培養(yǎng)學(xué)生熱愛專業(yè)的思想,同時(shí)對本專業(yè)綜合素質(zhì)的提高起一個(gè)積極的推動(dòng)作用。課程設(shè)計(jì)過程中,要嚴(yán)格遵守實(shí)踐環(huán)節(jié)的時(shí)間安排,聽從指導(dǎo)教師的指導(dǎo)。正確地完成上述內(nèi)容,記錄實(shí)習(xí)日記,規(guī)范完整地撰寫出課程設(shè)計(jì)報(bào)告。指導(dǎo)教師評語及成績成績: 指導(dǎo)教師簽字: 2009 年 12 月 20 日遼 寧 工 業(yè) 大 學(xué) 課 程 設(shè) 計(jì) 說 明 書(論 文)目 錄第1章 課程設(shè)計(jì)的目的與要求11.1 課程設(shè)計(jì)目的11.2 課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境11.3 課程設(shè)計(jì)的預(yù)備知識(shí)11.4 課程設(shè)計(jì)要求1第2章 課程設(shè)計(jì)內(nèi)容22.1課程設(shè)計(jì)主要內(nèi)容22.2概要設(shè)計(jì)22.2.1自定義類說明22.3詳細(xì)設(shè)計(jì)32.4測試分析162.4.1程序運(yùn)行情況162.4.2程序異常處理16第3章 課程設(shè)計(jì)總結(jié)17參考資料18第1章 課程設(shè)計(jì)的目的與要求1.1 課程設(shè)計(jì)目的java程序設(shè)計(jì)是計(jì)算機(jī)相關(guān)專業(yè)的必修專業(yè)基礎(chǔ)課程,其實(shí)踐性、應(yīng)用性很強(qiáng)。實(shí)踐教學(xué)環(huán)節(jié)是必不可少的一個(gè)重要環(huán)節(jié)。本課程的程序設(shè)計(jì)專題實(shí)際是計(jì)算機(jī)相關(guān)專業(yè)學(xué)生學(xué)習(xí)完java程序設(shè)計(jì)課程后,進(jìn)行的一次全面的綜合訓(xùn)練,java程序設(shè)計(jì)的設(shè)計(jì)目的是加深對理論教學(xué)內(nèi)容的理解和掌握,使學(xué)生較系統(tǒng)地掌握程序設(shè)計(jì)及其在網(wǎng)絡(luò)開發(fā)中的廣泛應(yīng)用,基本方法及技巧,為學(xué)生綜合運(yùn)用所學(xué)知識(shí),利用軟件工程為基礎(chǔ)進(jìn)行軟件開發(fā)、并在實(shí)踐應(yīng)用方面打下一定基礎(chǔ)。1.2 課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境硬件要求能運(yùn)行windows 9.x操作系統(tǒng)的微機(jī)系統(tǒng)。java程序設(shè)計(jì)語言及相應(yīng)的集成開發(fā)環(huán)境,j2sdk和eclipse開發(fā)工具。1.3 課程設(shè)計(jì)的預(yù)備知識(shí)熟悉java語言及eclipse開發(fā)工具。1.4 課程設(shè)計(jì)要求按課程設(shè)計(jì)指導(dǎo)書提供的課題,要求學(xué)生在自行完成各個(gè)操作環(huán)節(jié),并能實(shí)現(xiàn)且達(dá)到舉一反三的目的,完成一個(gè)項(xiàng)目解決一類問題。要求學(xué)生能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、設(shè)計(jì)和解答類似問題;對此能夠較好地理解和掌握,能夠進(jìn)行簡單分析和判斷;能編寫出具有良好風(fēng)格的程序;掌握java程序設(shè)計(jì)的基本技能和面向?qū)ο蟮母拍詈头椒ǎ涣私舛嗑€程、安全和網(wǎng)絡(luò)等編程技術(shù)。同時(shí)培養(yǎng)學(xué)生進(jìn)行分析問題、解決問題的能力;培養(yǎng)學(xué)生進(jìn)行設(shè)計(jì)分析、設(shè)計(jì)方法、設(shè)計(jì)操作與測試、設(shè)計(jì)過程的觀察、理解和歸納能力的提高。第2章 課程設(shè)計(jì)內(nèi)容2.1課程設(shè)計(jì)主要內(nèi)容我設(shè)計(jì)的時(shí)鐘有的界面良好,比較簡潔美觀,程序有很強(qiáng)的實(shí)用性,實(shí)現(xiàn)程序與電腦的時(shí)間的同步??梢燥@示時(shí)鐘,也可以顯示分針秒針,并可以在相應(yīng)位置調(diào)整時(shí)間。而且初始運(yùn)行會(huì)自動(dòng)與電腦的時(shí)間校對,一般默認(rèn)為同步,但還可以自己再次調(diào)節(jié),提高了實(shí)用性。本系統(tǒng)共包括1個(gè)java源文件。1、clock源文件是本程序的主函數(shù)其作用是初始化棋盤。2、setcurrenttime源文件實(shí)現(xiàn)電腦設(shè)置時(shí)間。3、painthourpointer源文件為時(shí)針.4、paintsecondpointer源文件實(shí)現(xiàn)人與電腦設(shè)置秒針.5、paintminutedot源文件人與電腦設(shè)置分針.2.2概要設(shè)計(jì)2.2.1自定義類說明* * 類名: clock * * 作用: 自定義主類,對鼠標(biāo)拖拽的初始界面進(jìn)行聲明* * 繼承的父類: jcomponent類 * * 實(shí)現(xiàn)的接口: 沒有 * *表1-成員變量表表2.1 clock成員變量成員變量描述變量類型名稱時(shí)針stringhour分針stringminute秒針stringsecond時(shí)間點(diǎn)textfieldtext_1表2-方法表表2 clock方法方法名功能備注setcurrenttime設(shè)置當(dāng)前時(shí)間構(gòu)造方法painthourpointer設(shè)置時(shí)針接口方法paintsecondpointer設(shè)置秒針接口方法paintminutedot設(shè)置分針接口方法actionperformed事件處理run程序運(yùn)行2.3詳細(xì)設(shè)計(jì)import java.awt.*; import java.awt.geom.ellipse2d; 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 jcomponent 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)前時(shí)間 this.currenttime.settime(time); 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); /返回一個(gè)指定寬、高的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 = getheight() - 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); painthourpointer(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, -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, angle); 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.second); 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 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 = 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 = 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( ellipse2d 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 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 clock(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_close); 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 + 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);/時(shí)針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.drawline(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;/小點(diǎn)d = 0;for (int i = 0; i = 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;/小時(shí),分鐘,秒double rad = math.pi / 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;/獲得小時(shí)thread t = new thread(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 int count=0; /判斷是否重定義了時(shí)間 /構(gòu)造函數(shù) public mytimer1() /定義窗口大小 setsize(320, 200); /定義窗口標(biāo)題 settitle(測試自定義時(shí)鐘類!); container c = getcontentpane(); / new clockcanvas(北京時(shí)間, gmt+8) c.add(new clockcanvas(北京時(shí)間, gmt+8); /定義接口 interface timerlistener1 void timeelapsed(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(interruptedexception 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(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); /分離時(shí)間 double hourangle = 2 * math.pi * (seconds - 3 * 60 * 60) / (12 * 60 * 60); double minuteangle = 2 * math.pi * (seconds - 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(calendar.hour) * 60 * 60 + calendar.get(calendar.minute) * 60 + calendar.get(calendar.second); repaint(); /定義時(shí)鐘類 class mytimer implements timerlistener /定義時(shí)鐘類的屬性 static int inthour,intminute,intsecond; /構(gòu)造函數(shù) public mytimer() setcurrenttimeassystemtime(); timer t = new timer(1000, this); /實(shí)例timer類,里面有run方法 t.start(); /顯示當(dāng)前時(shí)間 public void displaycurrenttime() joptionpane.showmessagedialog(null,inthour+:+intminute+:+intsecond); /設(shè)定當(dāng)前時(shí)間 public void setcurrenttime() /從對話框輸入時(shí),分秒 string strtemp=joptionpane.showinputdialog(null,請輸入當(dāng)前小時(shí)(24小時(shí)制):); 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)前時(shí)間為對話框輸入的時(shí)間 if(ihour=0&ihour24) inthour=ihour; transform(angle);g.setcolor(color);/設(shè)定當(dāng)前時(shí)間為系統(tǒng)時(shí)間,構(gòu)造函數(shù)調(diào)用 public void setcurrenttimeassystemtime() /定義date類的一個(gè)對象,用來獲取系統(tǒng)時(shí)間 date timecurrent=new date(); catch(interruptedexception e) 2.4測試分析2.4.1程序運(yùn)行情況當(dāng)程序正常運(yùn)行的時(shí)候,它能清晰的顯示時(shí)鐘界面。默認(rèn)為與系統(tǒng)時(shí)間同步,如果出現(xiàn)錯(cuò)誤,就會(huì)進(jìn)行歸零。運(yùn)行界面如圖2.1:圖2.1運(yùn)行界面2.4.2程序異常處理當(dāng)線程在活動(dòng)之前或活動(dòng)期間處于正在等待、休眠或占用狀態(tài)且該線程被中斷時(shí),拋出該異常。有時(shí)候,一種方法可能

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論