版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 計(jì)算機(jī)科學(xué)與技術(shù)系</b></p><p><b> 課程設(shè)計(jì)報告</b></p><p> 2012~2013學(xué)年第一學(xué)期</p><p> 2013 年 1 月</p><p><b> 課程設(shè)計(jì)目的</b></p>
2、<p> 通過課程設(shè)計(jì),學(xué)生在下述各方面的能力應(yīng)該得到鍛煉:</p><p> (1)進(jìn)一步鞏固、加深學(xué)生所學(xué)專業(yè)課程《JAVA語言教程》的基本理論知識,理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)學(xué)生綜合分析問題,解決問題的能力。</p><p> ?。?)全面考核學(xué)生所掌握的基本理論知識及其實(shí)際業(yè)務(wù)能力,從而達(dá)到提高學(xué)生素質(zhì)的最終目的。</p><p> ?。?)利
3、用所學(xué)知識,開發(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ù)處理的綜合能力。</p><p> (4)對于給定的設(shè)計(jì)題目,如何進(jìn)行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型。 </p><p> ?。?)熟練掌握J(rèn)AVA語言的GUI設(shè)計(jì)、多線程技術(shù),靈活運(yùn)用各種類庫。</p><p><b> 課程設(shè)計(jì)名稱及內(nèi)容&l
4、t;/b></p><p> 名稱:交通燈模擬程序</p><p> 內(nèi)容:設(shè)計(jì)一個交通燈管理的模擬程序,實(shí)現(xiàn)在一個十字路口的交通管理</p><p><b> 任務(wù)和要求</b></p><p> 設(shè)計(jì)程序界面,畫出十字路口和交通燈。</p><p> 可以手工設(shè)置紅、綠等的時間
5、間隔,程序按設(shè)定值自動變換每個路口的交通燈顏色。</p><p> 隨機(jī)產(chǎn)生一些車輛,這些車輛遵守紅燈停、綠燈行的交通規(guī)則。</p><p><b> 設(shè)計(jì)方案提示</b></p><p> 分別設(shè)置兩個線程代表東西和南北方向的交通燈,根據(jù)設(shè)定值變換交通燈顏色</p><p> 每個車輛對應(yīng)一個線程,利用線程技術(shù)
6、實(shí)現(xiàn)車輛的紅燈停、綠燈行的行為</p><p><b> 總體設(shè)計(jì)思路</b></p><p> 從實(shí)驗(yàn)的要求上看,要實(shí)現(xiàn)交通燈的管理,需要解決的問題有兩大部分:</p><p> ?。ㄒ唬├L制出交通燈及路口上的線路,以界面的形式展現(xiàn)出來。以此作為程序運(yùn)行的一個進(jìn)程。</p><p> ?。ǘ┏绦?qū)煌魰r間按計(jì)數(shù)
7、器進(jìn)行監(jiān)聽,倒計(jì)時時間為0的時候就進(jìn)行切換。同時設(shè)置文本框,當(dāng)操作員將時間寫入文本框當(dāng)中之后,點(diǎn)擊確定按鈕就將程序中的紅綠燈的時間重置。以此作為一個線程。</p><p> ?。ㄈ╇S機(jī)在各個路口產(chǎn)生車輛,符合條件則通過,不符合條件則暫停。以此作為程序運(yùn)行的另一個進(jìn)程。</p><p> 程序中用到的6個類,介紹如下:</p><p> 1.主類:Traffic
8、Light</p><p> 該類是從Jframe類中繼承過來的,該類當(dāng)中定義了文本框、文本區(qū)、按鈕這些對象成員變量。然后,在主類的構(gòu)造方法中,設(shè)置窗口的大小并將這些組添加到窗口容器當(dāng)中。這些組建是采用默認(rèn)的順序布局,根據(jù)設(shè)定的大小和其實(shí)位置添加到容器中。</p><p> 為“確定”按鈕注冊監(jiān)聽器,對其動作進(jìn)行監(jiān)聽。在try-catch中處理的是:從文本框中獲取數(shù)據(jù)并將其轉(zhuǎn)換成整型作
9、為紅綠燈的時間,在對設(shè)置的紅綠燈時間進(jìn)行修改。異常處理的方式是輸出當(dāng)前異常所產(chǎn)生的位置。</p><p> 在主方法當(dāng)中,是創(chuàng)建一個TrafficLight類的對象,通過構(gòu)造方法來實(shí)現(xiàn)所需的功能。</p><p> 2.繪制窗口的類Luche</p><p> 該類是JPanel類的子類,該類當(dāng)中含有的方法及其作用如下:</p><p>
10、; ?。?)該類當(dāng)中的一個構(gòu)造方法Luche()</p><p> 該方法的功能是將被十字路分割成的四塊區(qū)域的背景設(shè)置為綠色。</p><p> (2)繪制界面的方法(即該類中程序的執(zhí)行入口):</p><p> public void paint(Graphics g1) </p><p> 設(shè)置十字路口,即根據(jù)具體的坐標(biāo)繪制兩個構(gòu)
11、成“十”字的道路。再根據(jù)車子的位置用for循環(huán)創(chuàng)建對象,以車子對象的兩個成員變量(橫縱坐標(biāo)值)作為繪制填充圓的圓心所在位置,以及根據(jù)相應(yīng)的矩形大小繪制填充圓。</p><p> 對這幾個燈進(jìn)行判斷,在其位紅色、綠色的情況下,對其進(jìn)行不同的處理。加載圖片對象,用try-catch對異常處理,加載是時間間隔為10毫秒。</p><p> (3)repaint()方法,循環(huán)的調(diào)用paint(
12、)方法。</p><p> (4)public List<Car> getCars()、public void setCars(List<Car> cars)</p><p> 這兩個方法的作用是:返回Car,即加Car移出,另一個是將獲得Car賦給該類當(dāng)中的成員變量。</p><p> (5)lauch()</p>&l
13、t;p> 該方法的作用就是:創(chuàng)建是三個線程對象,分別是界面的繪制的、車子對象的創(chuàng)建、時間倒計(jì)時對象。</p><p> ?。?)其他的一些方法:</p><p> 這些方法的作用就是盤對燈的顏色,然后將該類當(dāng)中的成員變量附上該值。</p><p> 3.隨機(jī)產(chǎn)生車子線程類:class CarThread implements Runnable</p
14、><p> 該類的功能是實(shí)現(xiàn)Runnable接口功能:在run()方法中,用while循環(huán),在永真的條件下,將car對象添加到其中。用try-catch處理異常,在產(chǎn)生異常的情況下,就輸出該異常對象。</p><p> 4.控制小車子行駛的線程類:class CarRunThread implements Runnable</p><p> 控制的原理同上,再永
15、真的while循環(huán)當(dāng)中,產(chǎn)生Car對象,對其類型(所在的位置)進(jìn)行判斷然后根據(jù)不同的線路將其移除(在滿足條件的情況下)。</p><p> 該類當(dāng)中有一個方法:private boolean hasObstructor(Car car, List<Car> cars),用來判斷這個車子及其行駛的方向上是否有障礙物,在有和無的情況下分別作不同的處理。</p><p> 5.時
16、間倒計(jì)時:public class PaintThread implements Runnable </p><p> 這個方法主要作用是對倒計(jì)時的時間進(jìn)行根性,根性的周期在try-catch中進(jìn)行控制,設(shè)置為1秒。</p><p> 5.車子類:class Car</p><p> 該類當(dāng)中的一個構(gòu)造方法:</p><p> 用一個
17、隨機(jī)數(shù)產(chǎn)生器產(chǎn)生隨機(jī)0-3這四個隨機(jī)整數(shù),由這4個數(shù)來確定產(chǎn)生的車子的起始坐標(biāo),即確定車子的行駛方向。同時,這里有6個方法對這些車子對象的3個成員變量進(jìn)行賦值。</p><p> 6.創(chuàng)建車子的類:class CarFactory</p><p> 該類當(dāng)中只有一個方法,這個方法就是使創(chuàng)建一個Car類的對象,并返回這個類對象。</p><p><b>
18、 具體設(shè)計(jì)</b></p><p><b> 各個類之間的關(guān)系:</b></p><p> 主類 :TrafficLight 該類父類:Jframe</p><p> 繪制窗口類的對象 標(biāo)簽對象:greenlight_label、</p><p> Luche luche
19、 redlight_label</p><p> 作為成員變量 文本框?qū)ο螅簉edlight_field、</p><p> greenlight_field</p><p> 按鈕對象:btn_set</p><p> 容器類的子類:class Luche extends JPane
20、l</p><p> 用循環(huán)創(chuàng)建 Car類的對象 繪圖類對象 Graphics g(閉屏獲取圖片)</p><p> Graphics g1(播放圖片) </p><p> 創(chuàng)建并啟動3個線程對象</p><p> new PaintThread() new CarThread() new CarRunThrea
21、d()</p><p> 車運(yùn)動的類CarRunThrea </p><p> 時間倒計(jì)時(類): 產(chǎn)生小車的類:</p><p> PaintThrea CarThread</p><p> 實(shí)現(xiàn)Runnable接口</p><p> 實(shí)現(xiàn)Runnable接口</p><
22、;p> 實(shí)現(xiàn)Runnable接口</p><p> 同時調(diào)用了CarFactory類中的方法</p><p> 創(chuàng)建并返回Car對象</p><p> 以上各個類的具體實(shí)現(xiàn)如下:</p><p><b> Car類:</b></p><p> 通過產(chǎn)生0-3之間的隨機(jī)數(shù),初始化3
23、個成員變量。</p><p> 2.產(chǎn)生車子的類:class CarFactory </p><p> 該類當(dāng)中僅有一個靜態(tài)方法:public static Car getCar()</p><p> 執(zhí)行的語句:return new Car();</p><p> 其功能就是穿件Car對象,同時返回該對象。</p>&
24、lt;p> 3.時間倒計(jì)時的類:public class PaintThread implements Runnable</p><p> 變量j:全局變量(記錄顯示的時間)</p><p> 執(zhí)行的方法:public void run()</p><p> 方法中執(zhí)行了一個循環(huán):for (int i = 0; i < redTimes+gree
25、nTimes; i++)</p><p> i用來記錄次數(shù);再與異常處理</p><p><b> try {</b></p><p> Thread.sleep(1000);//暫停1秒</p><p> } catch (InterruptedException e) {</p><p&g
26、t; e.printStackTrace();//輸出異常所在的位置</p><p><b> }</b></p><p> 結(jié)合,在沒有異常的情況下,即循環(huán)的周期為1秒(時間更新周期)。</p><p><b> 在循環(huán)周期類:</b></p><p> 由于程序運(yùn)行的時間的影響,經(jīng)調(diào)試
27、分析:設(shè)置的紅綠燈的時間應(yīng)大于5秒</p><p> for (int i = 0; i < redTimes+greenTimes; i++) {</p><p> if(i==0){ //程序開始運(yùn)行</p><p> j = 0; //開始設(shè)置南北方向紅燈亮,東西方向綠燈亮</p><p> redStatus = tru
28、e;</p><p> greenStatus = false;</p><p><b> }</b></p><p> else if(i==redTimes){</p><p> j = 0;//當(dāng)時間周期到來時,兩路口的交通燈也進(jìn)行切換</p><p> redStatus = f
29、alse;</p><p> greenStatus = true;</p><p><b> }</b></p><p> else if(i==redTimes+greenTimes){</p><p> j = 0;//實(shí)際是不能出現(xiàn)的狀態(tài)(即所有方向上的燈都不亮)</p><p>
30、 redStatus = false;</p><p> greenStatus =false;</p><p><b> }</b></p><p> repaint();</p><p> j++;//執(zhí)行周期的記錄</p><p> if (i == redTimes+green
31、Times)</p><p><b> i = -1;</b></p><p><b> }</b></p><p> 實(shí)現(xiàn)的功能是:在執(zhí)行周期內(nèi)循環(huán)執(zhí)行交通燈顏色的切換,在達(dá)到周期的前一秒,將計(jì)時變量重新設(shè)置到初始狀態(tài)。</p><p> 4.控制車子運(yùn)動的類:</p>&l
32、t;p> class CarRunThread implements Runnable</p><p> 方法一:public void run()</p><p> 外循環(huán):while(true)//條件為永真</p><p> 內(nèi)循環(huán):for(int i = 0;i < cars.size();i ++ )//在車子對象數(shù)組不滿條件下<
33、/p><p> 實(shí)現(xiàn)的功能判斷如下:(以一個條件為例)</p><p> if(car.getType() == 0)//對對象的類型進(jìn)行判斷</p><p><b> {</b></p><p> if(car.getX()>2000)</p><p> {//條件是已經(jīng)超出了界面的
34、邊界范圍,將其移除</p><p> cars.remove(car);</p><p><b> i--;</b></p><p> continue;//結(jié)束本次循環(huán)跳轉(zhuǎn)至下次循環(huán)</p><p><b> }</b></p><p> if((Luche.th
35、is.isGreenStatus()&& Math.abs(car.getX()-210)<5 ) || hasObstructor(car,cars))</p><p> {continue;}//條件是://綠燈是是亮的但車距邊界已小于5像素或者是車子不可移動</p><p><b> else</b></p><p&
36、gt; {car.setX(car.getX()+5);}//在滿足移動的條件下,將車子的右移5個像素單位</p><p><b> }</b></p><p> 這個進(jìn)程的周期是:Thread.sleep(50);//進(jìn)程暫停50毫秒</p><p> 方法二:判斷是否有障礙物</p><p> privat
37、e boolean hasObstructor(Car car, List<Car> cars) </p><p> 分別對4個方向進(jìn)行判斷(選擇其一方向)</p><p> if(car.getType()==0){//西->東方向</p><p> for(int i = 0;i < cars.size();i ++ ){</
38、p><p> Car car2 = (Car) cars.get(i);//從已有的車子線程中取出下一個線程對象賦給當(dāng)前新創(chuàng)建的對象</p><p> int distance = (car2.getX()-car.getX());//判斷這兩個對象之間的距離</p><p> if(car2.getType()==0 && distance &l
39、t; 30 && distance>0)</p><p> return true;//沒有障礙物的條件是:兩者距離在30像素之間</p><p><b> }</b></p><p><b> }</b></p><p> 在不成立的條件下,返回false,但只用了一
40、個。因?yàn)樵诿看斡玫降臅r候,看上去是有4個判斷,但真正只會執(zhí)行其中一個(單線程)。</p><p> 5.隨機(jī)產(chǎn)生小車的線程</p><p> 在while(true)循環(huán)體中執(zhí)行:</p><p> 添加車子:cars.add(CarFactory.getCar());</p><p> 進(jìn)程的周期為1秒:Thread.sleep(
41、(long)(Math.random()*1200));</p><p><b> 6.繪制界面的類:</b></p><p> class Luche extends JPanel</p><p><b> 變量列表顯示如下:</b></p><p><b> 方法列表顯示如下:
42、</b></p><p><b> 7.主類:</b></p><p> public class TrafficLight extends JFrame</p><p><b> ?。?)含有的成員</b></p><p><b> ①標(biāo)簽:</b><
43、;/p><p> private JLabel redlight_label = new JLabel("紅燈時間: 秒");</p><p> private JLabel greenlight_label = new JLabel("綠燈時間: 秒");</p>&l
44、t;p><b> ?、谖谋究颍?lt;/b></p><p> private JTextField redlight_field = new JTextField();</p><p> private JTextField greenlight_field = new JTextField();</p><p><b> ③
45、按鈕</b></p><p> private JButton btn_set = new JButton("設(shè)置");</p><p><b> ④容器類的子類對象</b></p><p> private Luche luche = new Luche();</p><p>&
46、lt;b> (2)方法:</b></p><p> 構(gòu)造方法:public TrafficLight()</p><p> 實(shí)現(xiàn)的功能是:添加組件,</p><p><b> 動作處理:</b></p><p> public void actionPerformed(ActionEvent
47、 arg0) {//該方法對發(fā)生在按鈕上的事件進(jìn)行處理</p><p><b> //異常處理</b></p><p><b> try {</b></p><p> int redTimes = Integer.parseInt(redlight_field.getText());//獲取設(shè)置時間的文本框中的文本并
48、轉(zhuǎn)換成整形</p><p> int greenTimes = Integer.parseInt(greenlight_field.getText());</p><p> if(redTimes<greenTimes)</p><p> greenTimes=redTimes;</p><p> else if(redTime
49、s>greenTimes)</p><p> redTimes=greenTimes;</p><p> //當(dāng)獲得了值之后就對開始設(shè)定的進(jìn)行修改</p><p> luche.setRedTimes(redTimes);</p><p> luche.setGreenTimes(greenTimes);</p>
50、<p> } catch (NumberFormatException e) {}//異常處理</p><p><b> }</b></p><p> 說明:由于程序能夠運(yùn)行簡單,在設(shè)置時間之后,將紅綠燈的時間間隔均設(shè)置為等長的。即用上述的</p><p> if(redTimes<greenTimes)</p
51、><p> greenTimes=redTimes;</p><p> else if(redTimes>greenTimes)</p><p> redTimes=greenTimes;</p><p><b> 解決該問題。</b></p><p><b> 主方法功能:
52、</b></p><p> new TrafficLight();//創(chuàng)建對象,通過構(gòu)造方法的調(diào)用使程序運(yùn)行</p><p><b> 程序運(yùn)行的結(jié)果:</b></p><p> 1.未手動設(shè)置紅綠燈的時間:</p><p> 2.手動設(shè)置時間之后:</p><p> ?。?/p>
53、1)第一組測試數(shù)據(jù):</p><p> ?。?)第二組測試數(shù)據(jù):</p><p><b> 總結(jié)</b></p><p> Java 課程設(shè)計(jì)編寫的程序是不僅要實(shí)現(xiàn)一個單一的功能,而且是要對一個任務(wù)做多個操作,并將這些功能合理的組合到一起。這樣更加適用于對現(xiàn)實(shí)問題的解決能力。比如,我所做的的課題:十字路口紅綠燈模擬,不僅要用GUI繪制圖形
54、,而且還要用兩個線程分別對交通燈和車輛進(jìn)行處理。通過這樣一次比較大的實(shí)驗(yàn),提高了我將所學(xué)的各個知識點(diǎn)綜合到一起應(yīng)用,而且還學(xué)到了以前沒有學(xué)到的知識,比如:將java和數(shù)據(jù)庫SQL server相連接。實(shí)現(xiàn)java語言對數(shù)據(jù)庫的操縱。</p><p> 令我印象最深的一點(diǎn)就是,在課程設(shè)計(jì)的時候,可以檢查到自己平時學(xué)習(xí)的疏漏點(diǎn)。比如:</p><p> 在編寫對時間計(jì)數(shù)的時候處理的情況少了
55、一種</p><p> else if(i==redTimes+greenTimes){</p><p><b> j = 0;</b></p><p> redStatus = false;</p><p> greenStatus =false;</p><p><b>
56、}</b></p><p> 一旦,在文本框中輸入數(shù)據(jù)的時候,程序就會運(yùn)行錯誤,時間就異常的終止,導(dǎo)致紅綠燈不能進(jìn)行切換。</p><p> 這個錯誤,讓我明白了:在編程時,對于時間的處理的時候要考慮全面,這樣才能增加程序的健壯性。但有時確實(shí)就不能考慮那么全面,所以就要反復(fù)調(diào)試(選擇不同的測試數(shù)據(jù))。檢錯與改錯的能力還是要靠多寫一些程序,多分析,掌握經(jīng)驗(yàn)。</p>
57、;<p> 在這次課程設(shè)計(jì)當(dāng)中,通過對一個對象的功能的逐步分解、細(xì)化,在用類、方法來完成每一個小的細(xì)節(jié),最終通過在組合實(shí)現(xiàn)總體的功能了。</p><p> 通過這次課程設(shè)計(jì),我也想向?qū)W校里提一些建議:</p><p> 最重要的一點(diǎn)就是時間安排問題上,一個是時間安排的太少了,因?yàn)閖ava課程設(shè)計(jì)要實(shí)現(xiàn)的功能是很多的,并且java的內(nèi)容多;另一個就是時間安排的不合理,安排
58、在最后兩周,但這段時間會有很多課程要考試,所以還要有時間來復(fù)習(xí),這樣就更緊張,導(dǎo)致很多學(xué)生的程序不是自己來思考和編寫的。這樣,課程設(shè)計(jì)也就不會達(dá)到預(yù)期的作用啦!</p><p><b> 其它</b></p><p> 程序設(shè)計(jì)可在Eclipse、JDK1.5或JBuilder環(huán)境下實(shí)現(xiàn)</p><p><b> 參考資料<
59、;/b></p><p> [1] 呂鳳羽、馬皓《JAVA程序設(shè)計(jì)》清華大學(xué)出版社</p><p> [2] 耿祥義 《JAVA課程設(shè)計(jì)》 清華大學(xué)出版</p><p> [3] 黃小東 《Java課程設(shè)計(jì)案例精編》中國水利水電出版社</p><p> [4] 印旻 《Java與面向?qū)ο蟪绦蛟O(shè)計(jì)》清華大學(xué)出版社<
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)報告---紅綠燈控制道路車輛
- 紅綠燈課程設(shè)計(jì)
- 紅綠燈課程設(shè)計(jì)
- plc_紅綠燈課程設(shè)計(jì)報告
- 微機(jī)原理課程設(shè)計(jì)報告---紅綠燈
- 接口課程設(shè)計(jì)——模擬紅綠燈實(shí)驗(yàn)
- 單片機(jī)課程設(shè)計(jì)--紅綠燈
- 太陽能紅綠燈課程設(shè)計(jì)
- 紅綠燈數(shù)字電路課程設(shè)計(jì)
- 數(shù)字電路紅綠燈課程設(shè)計(jì)實(shí)驗(yàn)報告
- 單片機(jī)課程設(shè)計(jì)---交通紅綠燈
- 《數(shù)字電子技術(shù)》課程設(shè)計(jì)報告---紅綠燈控制器
- 課程設(shè)計(jì)--人行道紅綠燈控制系統(tǒng)
- 電工電子課程設(shè)計(jì)——自動紅綠燈控制系統(tǒng)
- 課程設(shè)計(jì)——交通紅綠燈plc控制系統(tǒng)
- 課程設(shè)計(jì)---人行道紅綠燈控制系統(tǒng)
- 《紅綠燈前
- 飲食紅綠燈
- 校園紅綠燈 教學(xué)設(shè)計(jì)
- 紅綠燈”系列宣傳
評論
0/150
提交評論