Java時鐘課程設(shè)計_第1頁
Java時鐘課程設(shè)計_第2頁
Java時鐘課程設(shè)計_第3頁
Java時鐘課程設(shè)計_第4頁
Java時鐘課程設(shè)計_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGE遼寧工業(yè)大學(xué)課程設(shè)計說明書(論文)遼寧工業(yè)大學(xué)JAVA程序設(shè)計課程設(shè)計(論文)題目:院(系):軟件學(xué)院專業(yè)班級:學(xué)號:學(xué)生姓名:指導(dǎo)教師:教師職稱:起止時間:程序設(shè)計專題(報告)任務(wù)及評語院(系):軟件學(xué)院教研室:軟件教研窒學(xué)號學(xué)生姓名專業(yè)班級程序設(shè)計(報告)題目程序設(shè)計(報告)任務(wù)程序設(shè)計專題的任務(wù)與要求:(1)掌握J(rèn)ava編程、面向?qū)ο蟮幕A(chǔ)知識。(2)較熟練地編寫Java應(yīng)用程序Application。(3)了解Java的常用標(biāo)準(zhǔn)類庫、編程技巧、異常處理。(5)聯(lián)系已學(xué)過的內(nèi)容,鞏固所學(xué)的理論,增強(qiáng)獨(dú)立工作能力。(6)通過設(shè)計主要使學(xué)生有一個獨(dú)立編寫程序的過程,對理論學(xué)習(xí)及動手能力都有一個很大的提高。(7)通過本次設(shè)計,進(jìn)一步培養(yǎng)學(xué)生熱愛專業(yè)的思想,同時對本專業(yè)綜合素質(zhì)的提高起一個積極的推動作用。課程設(shè)計過程中,要嚴(yán)格遵守實(shí)踐環(huán)節(jié)的時間安排,聽從指導(dǎo)教師的指導(dǎo)。正確地完成上述內(nèi)容,記錄實(shí)習(xí)日記,規(guī)范完整地撰寫出課程設(shè)計報告。指導(dǎo)教師評語及成績成績:指導(dǎo)教師簽字:2008年1月5日遼寧工業(yè)大學(xué)課程設(shè)計說明書(論文)PAGE17目錄1456第1章課程設(shè)計的目的與要求 1297601.1課程設(shè)計目的 1124561.2課程設(shè)計的實(shí)驗(yàn)環(huán)境 151451.3課程設(shè)計的預(yù)備知識 1197051.4課程設(shè)計要求 112591第2章課程設(shè)計內(nèi)容 2283482.1課程設(shè)計主要內(nèi)容 2295632.2概要設(shè)計 2310372.2.1自定義說明 218952.3詳細(xì)設(shè)計 3113382.4測試分析 1316462.4.1程序運(yùn)行情況 13145382.4.2程序異常處理 14199173章課程設(shè)計總結(jié) 1632562參考資料 17

第1章課程設(shè)計的目的與要求1.1課程設(shè)計目的《JAVA程序設(shè)計》是計算機(jī)相關(guān)專業(yè)的必修專業(yè)基礎(chǔ)課程,其實(shí)踐性、應(yīng)用性很強(qiáng)。實(shí)踐教學(xué)環(huán)節(jié)是必不可少的一個重要環(huán)節(jié)。本課程的程序設(shè)計專題實(shí)際是計算機(jī)相關(guān)專業(yè)學(xué)生學(xué)習(xí)完《JAVA程序設(shè)計》課程后,進(jìn)行的一次全面的綜合訓(xùn)練,JAVA程序設(shè)計的設(shè)計目的是加深對理論教學(xué)內(nèi)容的理解和掌握,使學(xué)生較系統(tǒng)地掌握程序設(shè)計及其在網(wǎng)絡(luò)開發(fā)中的廣泛應(yīng)用,基本方法及技巧,為學(xué)生綜合運(yùn)用所學(xué)知識,利用軟件工程為基礎(chǔ)進(jìn)行軟件開發(fā)、并在實(shí)踐應(yīng)用方面打下一定基礎(chǔ)。1.2課程設(shè)計的實(shí)驗(yàn)環(huán)境硬件要求能運(yùn)行Windows9.X操作系統(tǒng)的微機(jī)系統(tǒng)。JAVA程序設(shè)計語言及相應(yīng)的集成開發(fā)環(huán)境,J2SDK和ECLIPSE開發(fā)工具。1.3課程設(shè)計的預(yù)備知識熟悉JAVA語言及ECLIPSE開發(fā)工具。1.4課程設(shè)計要求按課程設(shè)計指導(dǎo)書提供的課題,要求學(xué)生在自行完成各個操作環(huán)節(jié),并能實(shí)現(xiàn)且達(dá)到舉一反三的目的,完成一個項(xiàng)目解決一類問題。要求學(xué)生能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、設(shè)計和解答類似問題;對此能夠較好地理解和掌握,能夠進(jìn)行簡單分析和判斷;能編寫出具有良好風(fēng)格的程序;掌握J(rèn)AVA程序設(shè)計的基本技能和面向?qū)ο蟮母拍詈头椒?;了解多線程、安全和網(wǎng)絡(luò)等編程技術(shù)。同時培養(yǎng)學(xué)生進(jìn)行分析問題、解決問題的能力;培養(yǎng)學(xué)生進(jìn)行設(shè)計分析、設(shè)計方法、設(shè)計操作與測試、設(shè)計過程的觀察、理解和歸納能力的提高。

第2章課程設(shè)計內(nèi)容2.1課程設(shè)計主要內(nèi)容Java是一種跨平臺、面向?qū)ο蟆⒒诰W(wǎng)絡(luò)及支持多媒體的編程語言。自1995年5月發(fā)布以來,Java和快成為開發(fā)因特網(wǎng)應(yīng)用程序的極具魅力的語言。Java程序可以插入HTML頁,有Web瀏覽器下載,為Web客戶帶來動畫和交互式的享受。Java的強(qiáng)大功能不僅僅限于Web應(yīng)用程序。它還是一種面向?qū)ο蟮耐ㄓ镁幊陶Z言,其編程功能完備,可以開發(fā)單獨(dú)的應(yīng)用程序?;谏鲜龅挠悬c(diǎn)可以看出,現(xiàn)如今Java的應(yīng)用之廣泛,所以我們的課程設(shè)計也選用了此編程工具,對生活中常用的時鐘程序進(jìn)行編寫,由于我們是剛剛開始接觸Java,編程水平有限無法實(shí)現(xiàn)特別復(fù)雜的編程項(xiàng)目,所以本次所編寫的程序是一個簡單的,沒有接觸到連接數(shù)據(jù)庫與錯誤異常的知識,這也是剛剛起步,不過我們會在今后的學(xué)習(xí)中不斷地深入研究與學(xué)習(xí),爭取在下一個編程項(xiàng)目中做出更多更復(fù)雜的程序來。2.2概要設(shè)計2.2.1自定義說明本次課程設(shè)計是利用本學(xué)期所學(xué)習(xí)的Java編程工具制作出一個可以顯示多國時間及日期的Java時鐘程序軟件。利用Java制作的原因是因?yàn)橛肑ava實(shí)現(xiàn)的HotJava瀏覽器顯示了Java的魅力:跨平臺、動感的Web、Internet計算。從此,Java被廣泛接受并推動了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Javaapplet。,一方面Java技術(shù)也不斷更新。本文圍繞Java編程語言在編程方面的具體應(yīng)用,論述了使用面向?qū)ο蠓椒?,對計算器程序進(jìn)行概要設(shè)計、詳細(xì)設(shè)計,最后使用Java編程實(shí)現(xiàn)的全過程。在編程我們使用的java語言,是目前比較流行的編程語言。啟動Java時鐘程序并運(yùn)行,可以看到時鐘界面。最上面一行的下拉菜單是城市選擇下拉菜單,在這里可以選擇所要查看的城市的時間,共有六個城市的時間可供查詢,它們是(“北京”,“倫敦”,“悉尼”,“夏威夷”,“莫斯科”,“紐約”)囊或了世界最大的幾座城市的時間。界面的中心則是表盤與表針,以模擬方式顯示當(dāng)前所選城市的時間,它有三個指針,時針、分針和秒針,這與我們?nèi)粘I钪兴褂玫臅r鐘是一樣的。最下面的兩行分別顯示的現(xiàn)在所選擇的城市名稱與當(dāng)前時間的電子模式。這些項(xiàng)目構(gòu)成了整個Java時鐘程序的整個界面,此程序占用資源少,相應(yīng)時間短,精確度與靈敏度高。2.3詳細(xì)設(shè)計(以下為程序源代碼及注釋)本時鐘程序共分為三個部分,其中第一部分是時鐘程序的定義階段,此階段定義了時鐘程序的界面,繪制出圓形表盤、表針(時針、分針和秒針)以及時鐘的窗口。然后是獲取計算機(jī)BIOS中的時間及日期。以下則為此程序:packagetimezoneclock;importjava.awt.*;importjavax.swing.JPanel;importjava.util.*;publicclassClockPanelextendsJPanelimplementsTimerInterface{BorderLayoutborderLayout1=newBorderLayout();privateCalendarcalendar;//定義一個Calendar變量privateStringyear,month,day,hour,minute,second;privateintseconds;//定義整形變量,用于計算當(dāng)前時間privateStringcity;//表示城市名稱privateTimeZonetz;//表示城市所在的時區(qū)publicClockPanel(Strings,Stringtz1){try{city=s;tz=tz.getTimeZone(tz1);calendar=Calendar.getInstance(tz);//獲得當(dāng)前的時間jbInit();}catch(Exceptionex){ex.printStackTrace();}}voidjbInit()throwsException{this.setLayout(borderLayout1);Timert=newTimer(1000,this);//定義一個Timer線程t.start();//啟動線程,運(yùn)行run()}//定義changeTZ方法,動態(tài)地改變時間publicvoidchangeTZ(Strings,Stringtz2){city=s;tz=tz.getTimeZone(tz2);calendar=Calendar.getInstance(tz);}protectedvoidpaintComponent(Graphicsg){/**@todoOverridethisjavax.swing.JComponentmethod*/super.paintComponent(g);g.drawOval(10,10,210,210);//繪制圓形g.drawString("12",105,30);g.drawString("3",200,115);g.drawString("6",115,210);g.drawString("9",20,120);for(inti=0;i<360;){g.drawLine(115+(int)(100*Math.cos(2*Math.PI*i/360-Math.PI/2)),115+(int)(100*Math.sin(2*Math.PI*i/360-Math.PI/2)),115+(int)(95*Math.cos(2*Math.PI*i/360-Math.PI/2)),115+(int)(95*Math.sin(2*Math.PI*i/360-Math.PI/2)));i=i+30;}doublehourAngle=2*Math.PI*seconds/(12*60*60);//計算時針與12點(diǎn)方向的角度doubleminuteAngle=2*Math.PI*seconds/3600;//計算分針與12點(diǎn)方向的角度doublesecondAngle=2*Math.PI*seconds/60;//計算秒針與12點(diǎn)方向的角度g.drawLine(110,110,110+(int)(60*Math.cos(hourAngle-Math.PI/2)),110+(int)(60*Math.sin(hourAngle-Math.PI/2)));//繪制時針g.drawLine(110,110,110+(int)(80*Math.cos(minuteAngle-Math.PI/2)),110+(int)(80*Math.sin(minuteAngle-Math.PI/2)));//繪制分針g.drawLine(110,110,110+(int)(90*Math.cos(secondAngle-Math.PI/2)),110+(int)(90*Math.sin(secondAngle-Math.PI/2)));//繪制秒鐘Fontf=newFont("NewRoman",Font.BOLD,12);//設(shè)置字體g.setFont(f);g.drawString(city+"時間是:",20,240);//在窗口繪制時間字符串g.drawString(year+"年"+month+"月"+day+"日"+hour+"時"+minute+"分"+second+"秒",25,260);}publicvoidtimeSpare(Timert){/**@todoImplementthisgraphicalclock.TimerInterfaceabstractmethod*/calendar.setTime(newDate());//得到當(dāng)前時間year=String.valueOf(calendar.get(Calendar.YEAR));//將整形的時間變量轉(zhuǎn)換為字符串//在java中0表示一月,故應(yīng)在所得的月份數(shù)字前加1month=String.valueOf(calendar.get(Calendar.MONTH)+1);day=String.valueOf(calendar.get(Calendar.DATE));hour=String.valueOf(calendar.get(Calendar.HOUR));minute=String.valueOf(calendar.get(Calendar.MINUTE));second=String.valueOf(calendar.get(Calendar.SECOND));seconds=calendar.get(Calendar.HOUR)*60*60+calendar.get(Calendar.MINUTE)*60+calendar.get(Calendar.SECOND);//用于計算當(dāng)前時間的秒數(shù)repaint();//窗口重繪}}程序制作并運(yùn)行:圖1程序運(yùn)行時鐘程序界面:圖2時鐘程序界面以上為時鐘界面的定義及獲取時間,第二部分為定義時間及日期的刷新時間,這部分用以控制時鐘程序按照多長時間進(jìn)行刷新,因?yàn)榻橛跁r鐘的特殊性,它的精確度要求的特別高,所以這部分程序也是整個程序中最為重要的部分之一。以下為刷新時間定義程序模塊:packagetimezoneclock;publicclassTimerextendsThread{privateintspare;//窗口刷新的時間間隔,單位為毫秒privateTimerInterfaceti;//定義一個TimerInterface接口變量publicTimer(inti,TimerInterfacet){spare=i;ti=t;setDaemon(true);}publicvoidrun(){try{while(!interrupted()){sleep(spare);//線程休息spare時間ti.timeSpare(this);//調(diào)用函數(shù)將窗口的內(nèi)容重繪}}catch(InterruptedExceptione){}}}以上兩部分制作完成之后,就要對時鐘程序加入全球化概念,用下面的程序分別加入世界各大主要城市的時間日期,其中包括(“北京、夏威夷、紐約、倫敦、莫斯科和悉尼”)。以下為世界各大城市時間:packagetimezoneclock;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassTimezoneClockextendsJFrame{JPanelcontentPane;BorderLayoutborderLayout1=newBorderLayout();JPaneljPanel1=newJPanel();Choicechoice1=newChoice();ClockPaneltzPanel=newClockPanel("北京","GMT+8");//ConstructtheframepublicTimezoneClock(){enableEvents(AWTEvent.WINDOW_EVENT_MASK);try{jbInit();}catch(Exceptione){e.printStackTrace();}}//ComponentinitializationprivatevoidjbInit()throwsException{contentPane=(JPanel)this.getContentPane();contentPane.setLayout(borderLayout1);this.setSize(newDimension(231,333));this.setTitle("各種不同時區(qū)的時鐘");choice1.addItemListener(newTimezoneClock_choice1_itemAdapter(this));contentPane.add(tzPanel,BorderLayout.CENTER);contentPane.add(jPanel1,BorderLayout.NORTH);jPanel1.add(choice1,null);//在面板中添加一個下拉選擇框choice1.addItem("北京");choice1.addItem("莫斯科");choice1.addItem("夏威夷");choice1.addItem("紐約");choice1.addItem("倫敦");choice1.addItem("悉尼");}//OverriddensowecanexitwhenwindowisclosedprotectedvoidprocessWindowEvent(WindowEvente){cessWindowEvent(e);if(e.getID()==WindowEvent.WINDOW_CLOSING){System.exit(0);}}voidchoice1_itemStateChanged(ItemEvente){switch(choice1.getSelectedIndex()){case0:{tzPanel.changeTZ("北京","GMT+8");}//將窗口的時間改為北京時間時間為北京時間:圖3時間為北京break;case1:{tzPanel.changeTZ("莫斯科","GMT+3");}//將窗口的時間改為莫斯科時間時間為莫斯科時間:圖4時間為莫斯科break;case2:{tzPanel.changeTZ("夏威夷","GMT-10");}//將窗口的時間改為夏威夷時間時間為夏威夷時間:圖5時間為夏威夷break;case3:{tzPanel.changeTZ("紐約","GMT-5");}//將窗口的時間改為紐約時間break;case4:{tzPanel.changeTZ("倫敦","GMT");}//將窗口的時間改為倫敦時間時間為倫敦時間:圖6時間為倫敦break;case5:{tzPanel.changeTZ("悉尼","GMT+10");}break;}}}classTimezoneClock_choice1_itemAdapterimplementsjava.awt.event.ItemListener{TimezoneClockadaptee;TimezoneClock_choice1_itemAdapter(TimezoneClockadaptee){this.adaptee=adaptee;}publicvoiditemStateChanged(ItemEvente){adaptee.choice1_itemStateChanged(e);}}2.4測試分析2.4.1程序運(yùn)行情況在開發(fā)大型軟件系統(tǒng)的漫長過程中,面對著極其錯綜復(fù)雜的問題,人的主觀認(rèn)識不可能完全符合客觀現(xiàn)實(shí),與工程密切相關(guān)的各類人員之間的通信和配合也不可能完美無暇,因此,在軟件生命周期的每個階段都不可避免地會產(chǎn)生差錯。我們力求在每個階段結(jié)束之前通過嚴(yán)格的技術(shù)審查,盡可能早地發(fā)現(xiàn)并糾正差錯;但是,經(jīng)驗(yàn)表明審查并不能發(fā)現(xiàn)所有差錯,此外在編碼過程中還不可避免地會引入新的錯誤。如果在軟件投入生產(chǎn)性運(yùn)行之前,沒有發(fā)現(xiàn)并糾正軟件中的大部分差錯,則這些差錯遲早會在生產(chǎn)過程中暴露出來,那時不僅改正這些錯誤的代價更高,而且往往會造成很惡劣的后果。測試的目的就是在軟件投入生產(chǎn)性運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯誤。目前軟件測試仍然是保證軟件質(zhì)量的關(guān)鍵步驟,它是對軟件規(guī)格說明、設(shè)計和編碼的最后復(fù)審。軟件測試的目的是尋找錯誤,并且是最大可能的找出最多的錯誤。軟件測試的目的是要證明程序中有故障存在,并力求設(shè)計出最能暴露錯誤的測試方案,測試不是為了顯示程序是好的,而是應(yīng)該從軟件中包含有缺陷和故障這個假定出發(fā)去測試程序,從中發(fā)現(xiàn)盡可能多的軟件故障。這時的關(guān)鍵是如何合理的設(shè)計測試用例。在選擇測試用例進(jìn),著重考慮那些易于發(fā)現(xiàn)程序錯誤的數(shù)據(jù)。測試以發(fā)現(xiàn)故障為目的,是為了發(fā)現(xiàn)故障而執(zhí)行程序的過程。軟件測試在軟件生命周期中橫跨兩個階段。通常在編寫出每個模塊之后就對它做必要的測試,編碼和單元測試屬于軟件生命周期的同一個階段。在這個階段結(jié)束之后,對軟件系統(tǒng)還應(yīng)該進(jìn)行各種綜合測試,這是軟件生命周期中的另一個獨(dú)立的階段。在詳細(xì)設(shè)計階段結(jié)束后,開始進(jìn)入軟件測試階段。首先應(yīng)該對每一個窗體都進(jìn)行測試使其能夠完成預(yù)期目的,對于有些功能做了相應(yīng)的修改,根據(jù)每個窗體的要求來嚴(yán)格的篩選數(shù)據(jù)反復(fù)的測試。然后進(jìn)行功能模塊測試,由于每個模塊的功能不同,因此采用了大量不同的數(shù)據(jù)進(jìn)行系統(tǒng)的完整性測試,現(xiàn)以管理員登錄功能為例進(jìn)行說明測試過程。2.4.2程序異常處理程序在運(yùn)行過程中可能會出現(xiàn)錯誤而且中斷正常的控制流,這就是異常處理現(xiàn)在。不提供處理異常代碼的程序可能會在不期望終止的時候終止,甚至可能引發(fā)嚴(yán)重問題。Java的異常處理子系統(tǒng)可以為程序員提供處理運(yùn)行是錯誤即異常處理的能力,而且比其他語言提供的異常處理能在形式上更簡潔、更靈活,使用Java的異常處理子系統(tǒng),程序員可以開發(fā)出比較健壯的程序。要想成為一名出色的Java程序員,就必須能夠完全駕馭Java的異常處理子系統(tǒng)。不過本程序比較小,內(nèi)容也并不是很多所以在異常方面并有沒代碼產(chǎn)生。不過對于異常命令我們這里還是給出一種,如何拋出并捕捉異常的方法,供今后的編程中參考和借鑒。1.聲明異常(throws)聲明異常是當(dāng)方法執(zhí)行時,聲明方法中可能出現(xiàn)的錯誤。因?yàn)槿魏未a都可能出現(xiàn)系統(tǒng)錯誤和運(yùn)行是錯誤,所以Java不需要在方法中顯示聲明Error和RuntimeException,但是如果方法拋出其它異常,則必須在方法中顯示聲明它們。可以使用方聲明中的關(guān)鍵字throws聲明方法中的異常。PublicvoidmyMethod()throwsIOException2.拋出異常(throw)在生命異常的方法中,如果出現(xiàn)異常,可以拋出異常對象。聲明異常是一個說明性的子句,只是表明方法可能會拋出異常,而真正拋出異常的動作是有拋出異常語句來完成的。拋出遺產(chǎn)的語法如下:ThrownewTheException();也可以使用以下語法:TheExceptione=newTheException();Throwe;3.使用

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論