




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上合肥學院計算機科學與技術(shù)系課程設計報告20122013學年第一學期課程 JAVA語言課程設計名稱JAVA語言課程設計學生姓名朱鵬飛學號專業(yè)班級11級計本(3)班指導教師檀明、張艷明2013 年 1 月一、 課程設計目的通過課程設計,學生在下述各方面的能力應該得到鍛煉:(1)進一步鞏固、加深學生所學專業(yè)課程JAVA語言教程的基本理論知識,理論聯(lián)系實際,進一步培養(yǎng)學生綜合分析問題,解決問題的能力。 (2)全面考核學生所掌握的基本理論知識及其實際業(yè)務能力,從而達到提高學生素質(zhì)的最終目的。 (3)利用所學知識,開發(fā)小型應用系統(tǒng),掌握運用JAVA語言編寫調(diào)試應用系統(tǒng)程序,訓練獨
2、立開發(fā)應用系統(tǒng),進行數(shù)據(jù)處理的綜合能力。(4)對于給定的設計題目,如何進行分析,理清思路,并給出相應的數(shù)學模型。 (5)熟練掌握JAVA語言的GUI設計、多線程技術(shù),靈活運用各種類庫。二、 課程設計名稱及內(nèi)容名稱:交通燈模擬程序內(nèi)容:設計一個交通燈管理的模擬程序,實現(xiàn)在一個十字路口的交通管理三、 任務和要求1 設計程序界面,畫出十字路口和交通燈。2 可以手工設置紅、綠等的時間間隔,程序按設定值自動變換每個路口的交通燈顏色。3 隨機產(chǎn)生一些車輛,這些車輛遵守紅燈停、綠燈行的交通規(guī)則。四、 設計方案提示分別設置兩個線程代表東西和南北方向的交通燈,根據(jù)設定值變換交通燈顏色每個車輛對應一個線程,利用線
3、程技術(shù)實現(xiàn)車輛的紅燈停、綠燈行的行為五、 總體設計思路從實驗的要求上看,要實現(xiàn)交通燈的管理,需要解決的問題有兩大部分:(一)繪制出交通燈及路口上的線路,以界面的形式展現(xiàn)出來。以此作為程序運行的一個進程。(二)程序?qū)煌魰r間按計數(shù)器進行監(jiān)聽,倒計時時間為0的時候就進行切換。同時設置文本框,當操作員將時間寫入文本框當中之后,點擊確定按鈕就將程序中的紅綠燈的時間重置。以此作為一個線程。(三)隨機在各個路口產(chǎn)生車輛,符合條件則通過,不符合條件則暫停。以此作為程序運行的另一個進程。程序中用到的6個類,介紹如下:1主類:TrafficLight該類是從Jframe類中繼承過來的,該類當中定義了文本框、文
4、本區(qū)、按鈕這些對象成員變量。然后,在主類的構(gòu)造方法中,設置窗口的大小并將這些組添加到窗口容器當中。這些組建是采用默認的順序布局,根據(jù)設定的大小和其實位置添加到容器中。為“確定”按鈕注冊監(jiān)聽器,對其動作進行監(jiān)聽。在try-catch中處理的是:從文本框中獲取數(shù)據(jù)并將其轉(zhuǎn)換成整型作為紅綠燈的時間,在對設置的紅綠燈時間進行修改。異常處理的方式是輸出當前異常所產(chǎn)生的位置。在主方法當中,是創(chuàng)建一個TrafficLight類的對象,通過構(gòu)造方法來實現(xiàn)所需的功能。2繪制窗口的類Luche該類是JPanel類的子類,該類當中含有的方法及其作用如下:(1)該類當中的一個構(gòu)造方法Luche()該方法的功能是將被十
5、字路分割成的四塊區(qū)域的背景設置為綠色。(2)繪制界面的方法(即該類中程序的執(zhí)行入口):public void paint(Graphics g1) 設置十字路口,即根據(jù)具體的坐標繪制兩個構(gòu)成“十”字的道路。再根據(jù)車子的位置用for循環(huán)創(chuàng)建對象,以車子對象的兩個成員變量(橫縱坐標值)作為繪制填充圓的圓心所在位置,以及根據(jù)相應的矩形大小繪制填充圓。對這幾個燈進行判斷,在其位紅色、綠色的情況下,對其進行不同的處理。加載圖片對象,用try-catch對異常處理,加載是時間間隔為10毫秒。(3)repaint()方法,循環(huán)的調(diào)用paint()方法。(4)public List<Car> ge
6、tCars()、public void setCars(List<Car> cars)這兩個方法的作用是:返回Car,即加Car移出,另一個是將獲得Car賦給該類當中的成員變量。(5)lauch()該方法的作用就是:創(chuàng)建是三個線程對象,分別是界面的繪制的、車子對象的創(chuàng)建、時間倒計時對象。(6)其他的一些方法:這些方法的作用就是盤對燈的顏色,然后將該類當中的成員變量附上該值。3.隨機產(chǎn)生車子線程類:class CarThread implements Runnable該類的功能是實現(xiàn)Runnable接口功能:在run()方法中,用while循環(huán),在永真的條件下,將car對象添加到其中
7、。用try-catch處理異常,在產(chǎn)生異常的情況下,就輸出該異常對象。4.控制小車子行駛的線程類:class CarRunThread implements Runnable控制的原理同上,再永真的while循環(huán)當中,產(chǎn)生Car對象,對其類型(所在的位置)進行判斷然后根據(jù)不同的線路將其移除(在滿足條件的情況下)。該類當中有一個方法:private boolean hasObstructor(Car car, List<Car> cars),用來判斷這個車子及其行駛的方向上是否有障礙物,在有和無的情況下分別作不同的處理。5.時間倒計時:public class PaintThread
8、 implements Runnable 這個方法主要作用是對倒計時的時間進行根性,根性的周期在try-catch中進行控制,設置為1秒。5.車子類:class Car該類當中的一個構(gòu)造方法:用一個隨機數(shù)產(chǎn)生器產(chǎn)生隨機0-3這四個隨機整數(shù),由這4個數(shù)來確定產(chǎn)生的車子的起始坐標,即確定車子的行駛方向。同時,這里有6個方法對這些車子對象的3個成員變量進行賦值。6.創(chuàng)建車子的類:class CarFactory該類當中只有一個方法,這個方法就是使創(chuàng)建一個Car類的對象,并返回這個類對象。六、 具體設計各個類之間的關(guān)系:主類 :TrafficLight 該類父類:Jframe 繪制窗口類的對象 標簽對
9、象:greenlight_label、 Luche luche redlight_label 作為成員變量 文本框?qū)ο螅簉edlight_field、 greenlight_field 按鈕對象:btn_set容器類的子類:class Luche extends JPanel 用循環(huán)創(chuàng)建 Car類的對象 繪圖類對象 Graphics g(閉屏獲取圖片) Graphics g1(播放圖片) 創(chuàng)建并啟動3個線程對象 new PaintThread() new CarThread() new CarRunThread() 車運動的類CarRunThrea 時間倒計時(類): 產(chǎn)生小車的類: Pain
10、tThrea CarThread 實現(xiàn)Runnable接口 實現(xiàn)Runnable接口實現(xiàn)Runnable接口 同時調(diào)用了CarFactory類中的方法 創(chuàng)建并返回Car對象以上各個類的具體實現(xiàn)如下:1. Car類:通過產(chǎn)生0-3之間的隨機數(shù),初始化3個成員變量。3個成員變量包含的方法對應的方法的功能車子所在橫坐標private int xgetX()、setX(int x)獲取橫坐標、設置橫坐標為當前獲取的值車子所在縱坐標private int ygetY()、setY(int y)獲取縱坐標、設置縱坐標為當前縱坐標車子行駛的方向private int type;getType()、setTy
11、pe(int type)獲取編號、設置編號為當前編號(即車子的行駛方向)2.產(chǎn)生車子的類:class CarFactory 該類當中僅有一個靜態(tài)方法:public static Car getCar()執(zhí)行的語句:return new Car();其功能就是穿件Car對象,同時返回該對象。3時間倒計時的類:public class PaintThread implements Runnable變量j:全局變量(記錄顯示的時間)執(zhí)行的方法:public void run()方法中執(zhí)行了一個循環(huán):for (int i = 0; i < redTimes+greenTimes; i+)i用來記
12、錄次數(shù);再與異常處理try Thread.sleep(1000);/暫停1秒 catch (InterruptedException e) e.printStackTrace();/輸出異常所在的位置結(jié)合,在沒有異常的情況下,即循環(huán)的周期為1秒(時間更新周期)。在循環(huán)周期類:由于程序運行的時間的影響,經(jīng)調(diào)試分析:設置的紅綠燈的時間應大于5秒for (int i = 0; i < redTimes+greenTimes; i+) if(i=0) /程序開始運行j = 0; /開始設置南北方向紅燈亮,東西方向綠燈亮redStatus = true;greenStatus = false;el
13、se if(i=redTimes)j = 0;/當時間周期到來時,兩路口的交通燈也進行切換redStatus = false;greenStatus = true;else if(i=redTimes+greenTimes)j = 0;/實際是不能出現(xiàn)的狀態(tài)(即所有方向上的燈都不亮)redStatus = false;greenStatus =false;repaint();j+;/執(zhí)行周期的記錄if (i = redTimes+greenTimes)i = -1;實現(xiàn)的功能是:在執(zhí)行周期內(nèi)循環(huán)執(zhí)行交通燈顏色的切換,在達到周期的前一秒,將計時變量重新設置到初始狀態(tài)。4控制車子運動的類:clas
14、s CarRunThread implements Runnable方法一:public void run()外循環(huán):while(true)/條件為永真內(nèi)循環(huán):for(int i = 0;i < cars.size();i + )/在車子對象數(shù)組不滿條件下實現(xiàn)的功能判斷如下:(以一個條件為例)if(car.getType() = 0)/對對象的類型進行判斷if(car.getX()>2000)/條件是已經(jīng)超出了界面的邊界范圍,將其移除cars.remove(car); i-; continue;/結(jié)束本次循環(huán)跳轉(zhuǎn)至下次循環(huán)if(Luche.this.isGreenStatus()&
15、amp;& Math.abs(car.getX()-210)<5 ) | hasObstructor(car,cars)continue;/條件是:/綠燈是是亮的但車距邊界已小于5像素或者是車子不可移動elsecar.setX(car.getX()+5);/在滿足移動的條件下,將車子的右移5個像素單位這個進程的周期是:Thread.sleep(50);/進程暫停50毫秒方法二:判斷是否有障礙物private boolean hasObstructor(Car car, List<Car> cars) 分別對4個方向進行判斷(選擇其一方向)if(car.getType(
16、)=0)/西->東方向for(int i = 0;i < cars.size();i + )Car car2 = (Car) cars.get(i);/從已有的車子線程中取出下一個線程對象賦給當前新創(chuàng)建的對象int distance = (car2.getX()-car.getX();/判斷這兩個對象之間的距離if(car2.getType()=0 && distance < 30 && distance>0)return true;/沒有障礙物的條件是:兩者距離在30像素之間在不成立的條件下,返回false,但只用了一個。因為在每次用到
17、的時候,看上去是有4個判斷,但真正只會執(zhí)行其中一個(單線程)。5隨機產(chǎn)生小車的線程在while(true)循環(huán)體中執(zhí)行:添加車子:cars.add(CarFactory.getCar();進程的周期為1秒:Thread.sleep(long)(Math.random()*1200);6繪制界面的類:class Luche extends JPanel變量列表顯示如下:變量名、類型及修飾符 功能private Boolean redStatus控制南北方向的紅燈,初值為falseprivate Boolean greenStatus控制東西方向的綠燈,初值為falseprivate int re
18、dTimes記錄紅燈時間周期private int greenTimes記錄綠燈的時間周期int j = 0全局變量,記錄執(zhí)行次數(shù)private List<Car> cars動態(tài)數(shù)組存儲車子線程對象方法列表顯示如下:方法名功能Luche()構(gòu)造方法,僅用來設置界面的背景顏色paint( )創(chuàng)建的對象有:Image image、Graphics g、Color c = g.getColor();/創(chuàng)建顏色類對象,并獲取當期的顏色;Car car = (Car) cars.get(i);/用循環(huán)創(chuàng)建Car類對象,賦上的值是已存在的對象數(shù)組中的同類對象;if (redStatus = t
19、rue) /南北方向紅燈亮即:根據(jù)對象的值,繪制交通燈的位置和顏色public void setRedStatus(boolean redStatus)this.redStatus = redStatus;/給當前對象附上更新之后的值public boolean isGreenStatus()return greenStatus;public void setGreenStatus(boolean greenStatus)this.greenStatus = greenStatus;public int getRedTimes()return redTimes;/獲取文本框中的紅燈設置時間pu
20、blic void setRedTimes(int redTimes)this.redTimes = redTimes;/更新紅燈設置時間public int getGreenTimes()return greenTimes;public void setGreenTimes(int greenTimes)this.greenTimes = greenTimes;public List<Car> getCars()return cars; /返回從動態(tài)數(shù)組中產(chǎn)生車子對象Public void setCars(List<Car> cars)this.cars = cars
21、;/將該時間點上的車子對象賦值給正在執(zhí)行的車子線程public void lauch()創(chuàng)建3個線程new Thread(new PaintThread().start();new Thread(new CarThread().start();new Thread(new CarRunThread().start();7主類:public class TrafficLight extends JFrame(1)含有的成員標簽:private JLabel redlight_label = new JLabel("紅燈時間: 秒");private JLabel greenl
22、ight_label = new JLabel("綠燈時間: 秒");文本框:private JTextField redlight_field = new JTextField();private JTextField greenlight_field = new JTextField();按鈕private JButton btn_set = new JButton("設置");容器類的子類對象private Luche luche = new Luche();(2)方法:構(gòu)造方法:public TrafficLight()實現(xiàn)的功能是:添加組件,動
23、作處理:public void actionPerformed(ActionEvent arg0) /該方法對發(fā)生在按鈕上的事件進行處理/異常處理 try int redTimes = Integer.parseInt(redlight_field.getText();/獲取設置時間的文本框中的文本并轉(zhuǎn)換成整形 int greenTimes = Integer.parseInt(greenlight_field.getText();if(redTimes<greenTimes) greenTimes=redTimes; else if(redTimes>greenTimes) re
24、dTimes=greenTimes; /當獲得了值之后就對開始設定的進行修改 luche.setRedTimes(redTimes); luche.setGreenTimes(greenTimes); catch (NumberFormatException e) /異常處理說明:由于程序能夠運行簡單,在設置時間之后,將紅綠燈的時間間隔均設置為等長的。即用上述的if(redTimes<greenTimes) greenTimes=redTimes; else if(redTimes>greenTimes) redTimes=greenTimes;解決該問題。主方法功能:new TrafficLight();/創(chuàng)建對象,通過構(gòu)造方法的調(diào)用使程序運行程序運行的結(jié)果:1.未手動設置紅綠燈的時間:2.手動設置時間之后:(1)第一組測試數(shù)據(jù):(2)第二組測試數(shù)據(jù):七、 總結(jié)Java 課程設計編寫的程序是不僅要實現(xiàn)一個單一的功能,而且是要對一個任務做多個操作,并將這些功能合理的組合到一起。這樣更加適用于對現(xiàn)實問題的解決能力。比如,我所做
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025標準門面房租賃合同范本
- 2025年代理記賬合同正式簽訂新政策助力企業(yè)發(fā)展
- 2025房屋租賃代理合同書樣本
- 2025果園承包經(jīng)營合同協(xié)議書
- 2025店鋪租賃合同模板「詳細版」
- 2025房產(chǎn)買賣合同補充協(xié)議
- 2025南昌市建筑材料買賣合同范本
- 2025農(nóng)田租賃合同書樣本
- 2025最權(quán)威的工程承包合同模板
- 2025違反商品房買賣合同的法律責任
- 《三角形的分類》-完整版課件
- 吊裝安全心得體會(6篇)
- DB52-T 1057-2022+農(nóng)村生活污水處理技術(shù)規(guī)范
- 血液透析中心管理規(guī)范(2020年版)
- 課本劇孔雀東南飛 演示文稿
- 注塑機日常保養(yǎng)點檢表
- 一年級語文下冊課件-13 荷葉圓圓70-部編版(共16張PPT)
- 湘少版四年級英語下冊1-3單元測試卷無答案
- 培訓考試匯總金屬膠接工藝簡介
- Q-RJ 557-2017 航天型號產(chǎn)品禁(限)用工藝目錄(公開)
- 食品安全法培訓課件
評論
0/150
提交評論