2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  計(jì)算機(jī)科學(xué)與技術(shù)系</b></p><p><b>  課程設(shè)計(jì)報(bào)告</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>  (2)全面考核學(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> ?。?)對于給定的設(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ì)一個(gè)交通燈管理的模擬程序,實(shí)現(xiàn)在一個(gè)十字路口的交通管理</p><p><b>  任務(wù)和要求</b></p><p>  設(shè)計(jì)程序界面,畫出十字路口和交通燈。</p><p>  可以手工設(shè)置紅、綠等的時(shí)間

5、間隔,程序按設(shè)定值自動變換每個(gè)路口的交通燈顏色。</p><p>  隨機(jī)產(chǎn)生一些車輛,這些車輛遵守紅燈停、綠燈行的交通規(guī)則。</p><p><b>  設(shè)計(jì)方案提示</b></p><p>  分別設(shè)置兩個(gè)線程代表東西和南北方向的交通燈,根據(jù)設(shè)定值變換交通燈顏色</p><p>  每個(gè)車輛對應(yīng)一個(gè)線程,利用線程技術(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)行的一個(gè)進(jìn)程。</p><p>  (二)程序?qū)煌魰r(shí)間按計(jì)數(shù)

7、器進(jìn)行監(jiān)聽,倒計(jì)時(shí)時(shí)間為0的時(shí)候就進(jìn)行切換。同時(shí)設(shè)置文本框,當(dāng)操作員將時(shí)間寫入文本框當(dāng)中之后,點(diǎn)擊確定按鈕就將程序中的紅綠燈的時(shí)間重置。以此作為一個(gè)線程。</p><p> ?。ㄈ╇S機(jī)在各個(gè)路口產(chǎn)生車輛,符合條件則通過,不符合條件則暫停。以此作為程序運(yùn)行的另一個(gè)進(jìn)程。</p><p>  程序中用到的6個(gè)類,介紹如下:</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í)間,在對設(shè)置的紅綠燈時(shí)間進(jìn)行修改。異常處理的方式是輸出當(dāng)前異常所產(chǎn)生的位置。</p><p>  在主方法當(dāng)中,是創(chuàng)建一個(gè)TrafficLight類的對象,通過構(gòu)造方法來實(shí)現(xiàn)所需的功能。</p><p>  2.繪制窗口的類Luche</p><p>  該類是JPanel類的子類,該類當(dāng)中含有的方法及其作用如下:</p><p>

10、; ?。?)該類當(dāng)中的一個(gè)構(gòu)造方法Luche()</p><p>  該方法的功能是將被十字路分割成的四塊區(qū)域的背景設(shè)置為綠色。</p><p> ?。?)繪制界面的方法(即該類中程序的執(zhí)行入口):</p><p>  public void paint(Graphics g1) </p><p>  設(shè)置十字路口,即根據(jù)具體的坐標(biāo)繪制兩個(gè)構(gòu)

11、成“十”字的道路。再根據(jù)車子的位置用for循環(huán)創(chuàng)建對象,以車子對象的兩個(gè)成員變量(橫縱坐標(biāo)值)作為繪制填充圓的圓心所在位置,以及根據(jù)相應(yīng)的矩形大小繪制填充圓。</p><p>  對這幾個(gè)燈進(jìn)行判斷,在其位紅色、綠色的情況下,對其進(jìn)行不同的處理。加載圖片對象,用try-catch對異常處理,加載是時(shí)間間隔為10毫秒。</p><p> ?。?)repaint()方法,循環(huán)的調(diào)用paint(

12、)方法。</p><p> ?。?)public List<Car> getCars()、public void setCars(List<Car> cars)</p><p>  這兩個(gè)方法的作用是:返回Car,即加Car移出,另一個(gè)是將獲得Car賦給該類當(dāng)中的成員變量。</p><p> ?。?)lauch()</p>&l

13、t;p>  該方法的作用就是:創(chuàng)建是三個(gè)線程對象,分別是界面的繪制的、車子對象的創(chuàng)建、時(shí)間倒計(jì)時(shí)對象。</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)中有一個(gè)方法:private boolean hasObstructor(Car car, List<Car> cars),用來判斷這個(gè)車子及其行駛的方向上是否有障礙物,在有和無的情況下分別作不同的處理。</p><p>  5.時(shí)

16、間倒計(jì)時(shí):public class PaintThread implements Runnable </p><p>  這個(gè)方法主要作用是對倒計(jì)時(shí)的時(shí)間進(jìn)行根性,根性的周期在try-catch中進(jìn)行控制,設(shè)置為1秒。</p><p>  5.車子類:class Car</p><p>  該類當(dāng)中的一個(gè)構(gòu)造方法:</p><p>  用一個(gè)

17、隨機(jī)數(shù)產(chǎn)生器產(chǎn)生隨機(jī)0-3這四個(gè)隨機(jī)整數(shù),由這4個(gè)數(shù)來確定產(chǎn)生的車子的起始坐標(biāo),即確定車子的行駛方向。同時(shí),這里有6個(gè)方法對這些車子對象的3個(gè)成員變量進(jìn)行賦值。</p><p>  6.創(chuàng)建車子的類:class CarFactory</p><p>  該類當(dāng)中只有一個(gè)方法,這個(gè)方法就是使創(chuàng)建一個(gè)Car類的對象,并返回這個(gè)類對象。</p><p><b>

18、  具體設(shè)計(jì)</b></p><p><b>  各個(gè)類之間的關(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個(gè)線程對象</p><p>  new PaintThread() new CarThread() new CarRunThrea

21、d()</p><p>  車運(yùn)動的類CarRunThrea </p><p>  時(shí)間倒計(jì)時(shí)(類): 產(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>  同時(shí)調(diào)用了CarFactory類中的方法</p><p>  創(chuàng)建并返回Car對象</p><p>  以上各個(gè)類的具體實(shí)現(xiàn)如下:</p><p><b>  Car類:</b></p><p>  通過產(chǎn)生0-3之間的隨機(jī)數(shù),初始化3

23、個(gè)成員變量。</p><p>  2.產(chǎn)生車子的類:class CarFactory </p><p>  該類當(dāng)中僅有一個(gè)靜態(tài)方法:public static Car getCar()</p><p>  執(zhí)行的語句:return new Car();</p><p>  其功能就是穿件Car對象,同時(shí)返回該對象。</p>&

24、lt;p>  3.時(shí)間倒計(jì)時(shí)的類:public class PaintThread implements Runnable</p><p>  變量j:全局變量(記錄顯示的時(shí)間)</p><p>  執(zhí)行的方法:public void run()</p><p>  方法中執(zhí)行了一個(gè)循環(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秒(時(shí)間更新周期)。</p><p><b>  在循環(huán)周期類:</b></p><p>  由于程序運(yùn)行的時(shí)間的影響,經(jīng)調(diào)試

27、分析:設(shè)置的紅綠燈的時(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)時(shí)間周期到來時(shí),兩路口的交通燈也進(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í)變量重新設(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)的功能判斷如下:(以一個(gè)條件為例)</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個(gè)像素單位</p><p><b>  }</b></p><p>  這個(gè)進(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個(gè)方向進(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);//從已有的車子線程中取出下一個(gè)線程對象賦給當(dāng)前新創(chuàng)建的對象</p><p>  int distance = (car2.getX()-car.getX());//判斷這兩個(gè)對象之間的距離</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、個(gè)。因?yàn)樵诿看斡玫降臅r(shí)候,看上去是有4個(gè)判斷,但真正只會執(zhí)行其中一個(gè)(單線程)。</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("紅燈時(shí)間: 秒");</p><p>  private JLabel greenlight_label = new JLabel("綠燈時(shí)間: 秒");</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> ?、苋萜黝惖淖宇悓ο?lt;/b></p><p>  private Luche luche = new Luche();</p><p>&

46、lt;b> ?。?)方法:</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è)置時(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í)間之后,將紅綠燈的時(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è)置紅綠燈的時(shí)間:</p><p>  2.手動設(shè)置時(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)一個(gè)單一的功能,而且是要對一個(gè)任務(wù)做多個(gè)操作,并將這些功能合理的組合到一起。這樣更加適用于對現(xiàn)實(shí)問題的解決能力。比如,我所做的的課題:十字路口紅綠燈模擬,不僅要用GUI繪制圖形

54、,而且還要用兩個(gè)線程分別對交通燈和車輛進(jìn)行處理。通過這樣一次比較大的實(shí)驗(yàn),提高了我將所學(xué)的各個(gè)知識點(diǎn)綜合到一起應(yīng)用,而且還學(xué)到了以前沒有學(xué)到的知識,比如:將java和數(shù)據(jù)庫SQL server相連接。實(shí)現(xiàn)java語言對數(shù)據(jù)庫的操縱。</p><p>  令我印象最深的一點(diǎn)就是,在課程設(shè)計(jì)的時(shí)候,可以檢查到自己平時(shí)學(xué)習(xí)的疏漏點(diǎn)。比如:</p><p>  在編寫對時(shí)間計(jì)數(shù)的時(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ù)的時(shí)候,程序就會運(yùn)行錯(cuò)誤,時(shí)間就異常的終止,導(dǎo)致紅綠燈不能進(jìn)行切換。</p><p>  這個(gè)錯(cuò)誤,讓我明白了:在編程時(shí),對于時(shí)間的處理的時(shí)候要考慮全面,這樣才能增加程序的健壯性。但有時(shí)確實(shí)就不能考慮那么全面,所以就要反復(fù)調(diào)試(選擇不同的測試數(shù)據(jù))。檢錯(cuò)與改錯(cuò)的能力還是要靠多寫一些程序,多分析,掌握經(jīng)驗(yàn)。</p>

57、;<p>  在這次課程設(shè)計(jì)當(dāng)中,通過對一個(gè)對象的功能的逐步分解、細(xì)化,在用類、方法來完成每一個(gè)小的細(xì)節(jié),最終通過在組合實(shí)現(xiàn)總體的功能了。</p><p>  通過這次課程設(shè)計(jì),我也想向?qū)W校里提一些建議:</p><p>  最重要的一點(diǎn)就是時(shí)間安排問題上,一個(gè)是時(shí)間安排的太少了,因?yàn)閖ava課程設(shè)計(jì)要實(shí)現(xiàn)的功能是很多的,并且java的內(nèi)容多;另一個(gè)就是時(shí)間安排的不合理,安排

58、在最后兩周,但這段時(shí)間會有很多課程要考試,所以還要有時(shí)間來復(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論