




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系課程設(shè)計(jì)報(bào)告20122013學(xué)年第一學(xué)期課程 JAVA語言課程設(shè)計(jì)名稱JAVA語言課程設(shè)計(jì)學(xué)生姓名朱鵬飛學(xué)號(hào)1104011011專業(yè)班級(jí)11級(jí)計(jì)本(3)班指導(dǎo)教師檀明、張艷明2013 年 1 月一、 課程設(shè)計(jì)目的通過課程設(shè)計(jì),學(xué)生在下述各方面的能力應(yīng)該得到鍛煉:(1)進(jìn)一步鞏固、加深學(xué)生所學(xué)專業(yè)課程JAVA語言教程的基本理論知識(shí),理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)學(xué)生綜合分析問題,解決問題的能力。 (2)全面考核學(xué)生所掌握的基本理論知識(shí)及其實(shí)際業(yè)務(wù)能力,從而達(dá)到提高學(xué)生素質(zhì)的最終目的。 (3)利用所學(xué)知識(shí),開發(fā)小型應(yīng)用系統(tǒng),掌握運(yùn)用JAVA語言編寫調(diào)試應(yīng)用系統(tǒng)程序,訓(xùn)練獨(dú)立開發(fā)應(yīng)用系統(tǒng),進(jìn)行數(shù)據(jù)處理的綜合能力。(4)對(duì)于給定的設(shè)計(jì)題目,如何進(jìn)行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型。 (5)熟練掌握J(rèn)AVA語言的GUI設(shè)計(jì)、多線程技術(shù),靈活運(yùn)用各種類庫。二、 課程設(shè)計(jì)名稱及內(nèi)容名稱:交通燈模擬程序內(nèi)容:設(shè)計(jì)一個(gè)交通燈管理的模擬程序,實(shí)現(xiàn)在一個(gè)十字路口的交通管理三、 任務(wù)和要求1 設(shè)計(jì)程序界面,畫出十字路口和交通燈。2 可以手工設(shè)置紅、綠等的時(shí)間間隔,程序按設(shè)定值自動(dòng)變換每個(gè)路口的交通燈顏色。3 隨機(jī)產(chǎn)生一些車輛,這些車輛遵守紅燈停、綠燈行的交通規(guī)則。四、 設(shè)計(jì)方案提示分別設(shè)置兩個(gè)線程代表東西和南北方向的交通燈,根據(jù)設(shè)定值變換交通燈顏色每個(gè)車輛對(duì)應(yīng)一個(gè)線程,利用線程技術(shù)實(shí)現(xiàn)車輛的紅燈停、綠燈行的行為五、 總體設(shè)計(jì)思路從實(shí)驗(yàn)的要求上看,要實(shí)現(xiàn)交通燈的管理,需要解決的問題有兩大部分:(一)繪制出交通燈及路口上的線路,以界面的形式展現(xiàn)出來。以此作為程序運(yùn)行的一個(gè)進(jìn)程。(二)程序?qū)煌魰r(shí)間按計(jì)數(shù)器進(jìn)行監(jiān)聽,倒計(jì)時(shí)時(shí)間為0的時(shí)候就進(jìn)行切換。同時(shí)設(shè)置文本框,當(dāng)操作員將時(shí)間寫入文本框當(dāng)中之后,點(diǎn)擊確定按鈕就將程序中的紅綠燈的時(shí)間重置。以此作為一個(gè)線程。(三)隨機(jī)在各個(gè)路口產(chǎn)生車輛,符合條件則通過,不符合條件則暫停。以此作為程序運(yùn)行的另一個(gè)進(jìn)程。程序中用到的6個(gè)類,介紹如下:1主類:TrafficLight該類是從Jframe類中繼承過來的,該類當(dāng)中定義了文本框、文本區(qū)、按鈕這些對(duì)象成員變量。然后,在主類的構(gòu)造方法中,設(shè)置窗口的大小并將這些組添加到窗口容器當(dāng)中。這些組建是采用默認(rèn)的順序布局,根據(jù)設(shè)定的大小和其實(shí)位置添加到容器中。為“確定”按鈕注冊(cè)監(jiān)聽器,對(duì)其動(dòng)作進(jìn)行監(jiān)聽。在try-catch中處理的是:從文本框中獲取數(shù)據(jù)并將其轉(zhuǎn)換成整型作為紅綠燈的時(shí)間,在對(duì)設(shè)置的紅綠燈時(shí)間進(jìn)行修改。異常處理的方式是輸出當(dāng)前異常所產(chǎn)生的位置。在主方法當(dāng)中,是創(chuàng)建一個(gè)TrafficLight類的對(duì)象,通過構(gòu)造方法來實(shí)現(xiàn)所需的功能。2繪制窗口的類Luche該類是JPanel類的子類,該類當(dāng)中含有的方法及其作用如下:(1)該類當(dāng)中的一個(gè)構(gòu)造方法Luche()該方法的功能是將被十字路分割成的四塊區(qū)域的背景設(shè)置為綠色。(2)繪制界面的方法(即該類中程序的執(zhí)行入口):public void paint(Graphics g1) 設(shè)置十字路口,即根據(jù)具體的坐標(biāo)繪制兩個(gè)構(gòu)成“十”字的道路。再根據(jù)車子的位置用for循環(huán)創(chuàng)建對(duì)象,以車子對(duì)象的兩個(gè)成員變量(橫縱坐標(biāo)值)作為繪制填充圓的圓心所在位置,以及根據(jù)相應(yīng)的矩形大小繪制填充圓。對(duì)這幾個(gè)燈進(jìn)行判斷,在其位紅色、綠色的情況下,對(duì)其進(jìn)行不同的處理。加載圖片對(duì)象,用try-catch對(duì)異常處理,加載是時(shí)間間隔為10毫秒。(3)repaint()方法,循環(huán)的調(diào)用paint()方法。(4)public List getCars()、public void setCars(List cars)這兩個(gè)方法的作用是:返回Car,即加Car移出,另一個(gè)是將獲得Car賦給該類當(dāng)中的成員變量。(5)lauch()該方法的作用就是:創(chuàng)建是三個(gè)線程對(duì)象,分別是界面的繪制的、車子對(duì)象的創(chuàng)建、時(shí)間倒計(jì)時(shí)對(duì)象。(6)其他的一些方法:這些方法的作用就是盤對(duì)燈的顏色,然后將該類當(dāng)中的成員變量附上該值。3.隨機(jī)產(chǎn)生車子線程類:class CarThread implements Runnable該類的功能是實(shí)現(xiàn)Runnable接口功能:在run()方法中,用while循環(huán),在永真的條件下,將car對(duì)象添加到其中。用try-catch處理異常,在產(chǎn)生異常的情況下,就輸出該異常對(duì)象。4.控制小車子行駛的線程類:class CarRunThread implements Runnable控制的原理同上,再永真的while循環(huán)當(dāng)中,產(chǎn)生Car對(duì)象,對(duì)其類型(所在的位置)進(jìn)行判斷然后根據(jù)不同的線路將其移除(在滿足條件的情況下)。該類當(dāng)中有一個(gè)方法:private boolean hasObstructor(Car car, List cars),用來判斷這個(gè)車子及其行駛的方向上是否有障礙物,在有和無的情況下分別作不同的處理。5.時(shí)間倒計(jì)時(shí):public class PaintThread implements Runnable 這個(gè)方法主要作用是對(duì)倒計(jì)時(shí)的時(shí)間進(jìn)行根性,根性的周期在try-catch中進(jìn)行控制,設(shè)置為1秒。5.車子類:class Car該類當(dāng)中的一個(gè)構(gòu)造方法:用一個(gè)隨機(jī)數(shù)產(chǎn)生器產(chǎn)生隨機(jī)0-3這四個(gè)隨機(jī)整數(shù),由這4個(gè)數(shù)來確定產(chǎn)生的車子的起始坐標(biāo),即確定車子的行駛方向。同時(shí),這里有6個(gè)方法對(duì)這些車子對(duì)象的3個(gè)成員變量進(jìn)行賦值。6.創(chuàng)建車子的類:class CarFactory該類當(dāng)中只有一個(gè)方法,這個(gè)方法就是使創(chuàng)建一個(gè)Car類的對(duì)象,并返回這個(gè)類對(duì)象。六、 具體設(shè)計(jì)各個(gè)類之間的關(guān)系:主類 :TrafficLight 該類父類:Jframe 繪制窗口類的對(duì)象 標(biāo)簽對(duì)象:greenlight_label、 Luche luche redlight_label 作為成員變量 文本框?qū)ο螅簉edlight_field、 greenlight_field 按鈕對(duì)象:btn_set容器類的子類:class Luche extends JPanel 用循環(huán)創(chuàng)建 Car類的對(duì)象 繪圖類對(duì)象 Graphics g(閉屏獲取圖片) Graphics g1(播放圖片) 創(chuàng)建并啟動(dòng)3個(gè)線程對(duì)象 new PaintThread() new CarThread() new CarRunThread() 車運(yùn)動(dòng)的類CarRunThrea 時(shí)間倒計(jì)時(shí)(類): 產(chǎn)生小車的類: PaintThrea CarThread 實(shí)現(xiàn)Runnable接口 實(shí)現(xiàn)Runnable接口實(shí)現(xiàn)Runnable接口 同時(shí)調(diào)用了CarFactory類中的方法 創(chuàng)建并返回Car對(duì)象以上各個(gè)類的具體實(shí)現(xiàn)如下:1. Car類:通過產(chǎn)生0-3之間的隨機(jī)數(shù),初始化3個(gè)成員變量。3個(gè)成員變量包含的方法對(duì)應(yīng)的方法的功能車子所在橫坐標(biāo)private int xgetX()、setX(int x)獲取橫坐標(biāo)、設(shè)置橫坐標(biāo)為當(dāng)前獲取的值車子所在縱坐標(biāo)private int ygetY()、setY(int y)獲取縱坐標(biāo)、設(shè)置縱坐標(biāo)為當(dāng)前縱坐標(biāo)車子行駛的方向private int type;getType()、setType(int type)獲取編號(hào)、設(shè)置編號(hào)為當(dāng)前編號(hào)(即車子的行駛方向)2.產(chǎn)生車子的類:class CarFactory 該類當(dāng)中僅有一個(gè)靜態(tài)方法:public static Car getCar()執(zhí)行的語句:return new Car();其功能就是穿件Car對(duì)象,同時(shí)返回該對(duì)象。3時(shí)間倒計(jì)時(shí)的類:public class PaintThread implements Runnable變量j:全局變量(記錄顯示的時(shí)間)執(zhí)行的方法:public void run()方法中執(zhí)行了一個(gè)循環(huán):for (int i = 0; i redTimes+greenTimes; i+)i用來記錄次數(shù);再與異常處理try Thread.sleep(1000);/暫停1秒 catch (InterruptedException e) e.printStackTrace();/輸出異常所在的位置結(jié)合,在沒有異常的情況下,即循環(huán)的周期為1秒(時(shí)間更新周期)。在循環(huán)周期類:由于程序運(yùn)行的時(shí)間的影響,經(jīng)調(diào)試分析:設(shè)置的紅綠燈的時(shí)間應(yīng)大于5秒for (int i = 0; i redTimes+greenTimes; i+) if(i=0) /程序開始運(yùn)行j = 0; /開始設(shè)置南北方向紅燈亮,東西方向綠燈亮redStatus = true;greenStatus = false;else if(i=redTimes)j = 0;/當(dāng)時(shí)間周期到來時(shí),兩路口的交通燈也進(jìn)行切換redStatus = false;greenStatus = true;else if(i=redTimes+greenTimes)j = 0;/實(shí)際是不能出現(xiàn)的狀態(tài)(即所有方向上的燈都不亮)redStatus = false;greenStatus =false;repaint();j+;/執(zhí)行周期的記錄if (i = redTimes+greenTimes)i = -1;實(shí)現(xiàn)的功能是:在執(zhí)行周期內(nèi)循環(huán)執(zhí)行交通燈顏色的切換,在達(dá)到周期的前一秒,將計(jì)時(shí)變量重新設(shè)置到初始狀態(tài)。4控制車子運(yùn)動(dòng)的類:class CarRunThread implements Runnable方法一:public void run()外循環(huán):while(true)/條件為永真內(nèi)循環(huán):for(int i = 0;i 2000)/條件是已經(jīng)超出了界面的邊界范圍,將其移除cars.remove(car); i-; continue;/結(jié)束本次循環(huán)跳轉(zhuǎn)至下次循環(huán)if(Luche.this.isGreenStatus()& Math.abs(car.getX()-210)5 ) | hasObstructor(car,cars)continue;/條件是:/綠燈是是亮的但車距邊界已小于5像素或者是車子不可移動(dòng)elsecar.setX(car.getX()+5);/在滿足移動(dòng)的條件下,將車子的右移5個(gè)像素單位這個(gè)進(jìn)程的周期是:Thread.sleep(50);/進(jìn)程暫停50毫秒方法二:判斷是否有障礙物private boolean hasObstructor(Car car, List cars) 分別對(duì)4個(gè)方向進(jìn)行判斷(選擇其一方向)if(car.getType()=0)/西-東方向for(int i = 0;i cars.size();i + )Car car2 = (Car) cars.get(i);/從已有的車子線程中取出下一個(gè)線程對(duì)象賦給當(dāng)前新創(chuàng)建的對(duì)象int distance = (car2.getX()-car.getX();/判斷這兩個(gè)對(duì)象之間的距離if(car2.getType()=0 & distance 0)return true;/沒有障礙物的條件是:兩者距離在30像素之間在不成立的條件下,返回false,但只用了一個(gè)。因?yàn)樵诿看斡玫降臅r(shí)候,看上去是有4個(gè)判斷,但真正只會(huì)執(zhí)行其中一個(gè)(單線程)。5隨機(jī)產(chǎn)生小車的線程在while(true)循環(huán)體中執(zhí)行:添加車子:cars.add(CarFactory.getCar();進(jìn)程的周期為1秒:Thread.sleep(long)(Math.random()*1200);6繪制界面的類:class Luche extends JPanel變量列表顯示如下:變量名、類型及修飾符 功能private Boolean redStatus控制南北方向的紅燈,初值為falseprivate Boolean greenStatus控制東西方向的綠燈,初值為falseprivate int redTimes記錄紅燈時(shí)間周期private int greenTimes記錄綠燈的時(shí)間周期int j = 0全局變量,記錄執(zhí)行次數(shù)private List cars動(dòng)態(tài)數(shù)組存儲(chǔ)車子線程對(duì)象方法列表顯示如下:方法名功能Luche()構(gòu)造方法,僅用來設(shè)置界面的背景顏色paint( )創(chuàng)建的對(duì)象有:Image image、Graphics g、Color c = g.getColor();/創(chuàng)建顏色類對(duì)象,并獲取當(dāng)期的顏色;Car car = (Car) cars.get(i);/用循環(huán)創(chuàng)建Car類對(duì)象,賦上的值是已存在的對(duì)象數(shù)組中的同類對(duì)象;if (redStatus = true) /南北方向紅燈亮即:根據(jù)對(duì)象的值,繪制交通燈的位置和顏色public void setRedStatus(boolean redStatus)this.redStatus = redStatus;/給當(dāng)前對(duì)象附上更新之后的值public boolean isGreenStatus()return greenStatus;public void setGreenStatus(boolean greenStatus)this.greenStatus = greenStatus;public int getRedTimes()return redTimes;/獲取文本框中的紅燈設(shè)置時(shí)間public void setRedTimes(int redTimes)this.redTimes = redTimes;/更新紅燈設(shè)置時(shí)間public int getGreenTimes()return greenTimes;public void setGreenTimes(int greenTimes)this.greenTimes = greenTimes;public List getCars()return cars; /返回從動(dòng)態(tài)數(shù)組中產(chǎn)生車子對(duì)象Public void setCars(List cars)this.cars = cars;/將該時(shí)間點(diǎn)上的車子對(duì)象賦值給正在執(zhí)行的車子線程public void lauch()創(chuàng)建3個(gè)線程new Thread(new PaintThread().start();new Thread(new CarThread().start();new Thread(new CarRunThread().start();7主類:public class TrafficLight extends JFrame(1)含有的成員標(biāo)簽:private JLabel redlight_label = new JLabel(紅燈時(shí)間: 秒);private JLabel greenlight_label = new JLabel(綠燈時(shí)間: 秒);文本框:private JTextField redlight_field = new JTextField();private JTextField greenlight_field = new JTextField();按鈕private JButton btn_set = new JButton(設(shè)置);容器類的子類對(duì)象private Luche luche = new Luche();(2)方法:構(gòu)造方法:public TrafficLight()實(shí)現(xiàn)的功能是:添加組件,動(dòng)作處理:public void actionPerformed(ActionEvent arg0) /該方法對(duì)發(fā)生在按鈕上的事件進(jìn)行處理/異常處理 try int redTimes = Integer.parseInt(redlight_field.getText();/獲取設(shè)置時(shí)間的文本框中的文本并轉(zhuǎn)換成整形 int greenTimes = Integer.parseInt(greenlight_field.getText();if(redTimesgreenTimes) redTimes=greenTimes; /當(dāng)獲得了值之后就對(duì)開始設(shè)定的進(jìn)行修改 luche.setRedTimes(redTimes); luche.setGreenTimes(greenTimes); catch (NumberFormatException e) /異常處理說明:由于程序能夠運(yùn)行簡單,在設(shè)置時(shí)間之后,將紅綠燈的時(shí)間間隔均設(shè)置為等長的。即用上述的if(redTimesgreenTimes) redTimes=greenTimes;解決該問題。主方法功能:new TrafficLight();/創(chuàng)建對(duì)象,通過構(gòu)造方法的調(diào)用使程序運(yùn)行程序運(yùn)行的結(jié)果:1.未手動(dòng)設(shè)置紅綠燈的時(shí)間:2.手動(dòng)設(shè)置時(shí)間之后:(1)第一組測(cè)試數(shù)據(jù):(2)第二組測(cè)試數(shù)據(jù):七、 總結(jié)Java 課程設(shè)計(jì)編寫的程序是不僅要實(shí)現(xiàn)一個(gè)單一的功能,而且是要對(duì)一個(gè)任務(wù)做多個(gè)操作,并將這些功能合理的組合到一起。這樣更加適用于對(duì)現(xiàn)實(shí)問題的解決能力。比如,我所做的的課題:十字路口紅綠燈模擬,不僅要用GUI繪制圖形,而且還要用兩
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 惠州經(jīng)濟(jì)職業(yè)技術(shù)學(xué)院《工程管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 西北工業(yè)大學(xué)《港澳臺(tái)廣告》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津城市建設(shè)管理職業(yè)技術(shù)學(xué)院《算法課程設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 武昌首義學(xué)院《社會(huì)工作倫理》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西軟件職業(yè)技術(shù)大學(xué)《電子商務(wù)運(yùn)營管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東農(nóng)業(yè)工程學(xué)院《投資銀行學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京中醫(yī)藥大學(xué)東方學(xué)院《信息化管理與技術(shù)創(chuàng)新》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京城市學(xué)院《機(jī)械CAD》2023-2024學(xué)年第二學(xué)期期末試卷
- 順德職業(yè)技術(shù)學(xué)院《民族建筑與文化實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江工程學(xué)院昆侖旅游學(xué)院《外貿(mào)制單英》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海市境內(nèi)旅游合同 示范文本(2013版)
- 電路(2)知到智慧樹章節(jié)測(cè)試課后答案2024年秋山東大學(xué)
- 鋼構(gòu)制品加工協(xié)議
- 化肥農(nóng)藥種子購銷合同
- 臨床護(hù)理實(shí)踐指南2024版
- 兒童糖尿病酮癥酸中毒診療指南(2024)解讀
- 老年期常見心理問題的護(hù)理(老年護(hù)理課件)
- 病毒蛋白相互作用
- 2019魯教版高中地理選擇性必修第一冊(cè)《第二單元 地形變化的原因》大單元整體教學(xué)設(shè)計(jì)2020課標(biāo)
- 《民法典》2024年知識(shí)考試題庫(含答案)
- 2023年嘉興海寧水務(wù)集團(tuán)下屬企業(yè)招聘工作人員考試真題
評(píng)論
0/150
提交評(píng)論