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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)》</p><p><b>  課程設(shè)計(jì)任務(wù)書</b></p><p><b>  注明:內(nèi)容限1頁</b></p><p>  數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)課程設(shè)計(jì)</p><p><b>  程序設(shè)計(jì)說明書</b></p>&l

2、t;p>  【設(shè)計(jì)題目】模擬停車場(chǎng)管理</p><p><b>  【問題描述】</b></p><p>  設(shè)停車場(chǎng)T只有一個(gè)可停放幾輛汽車的狹長通道S1,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)的先后順序依次排列,若車場(chǎng)內(nèi)已停滿幾輛汽車,則后來的汽車只能在門外的便道上等候,一旦停車場(chǎng)內(nèi)有車開走,則排在便道上的第一輛車即可進(jìn)入;當(dāng)停車場(chǎng)內(nèi)某輛車要離

3、開時(shí),由于停車場(chǎng)是狹長的通道,在它之后開入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開出大門后,為它讓路的車輛再按原次序進(jìn)入車場(chǎng)。在這里假設(shè)汽車不能從便道上開走。試設(shè)計(jì)一個(gè)停車場(chǎng)管理程序</p><p><b>  【軟件功能】</b></p><p>  1.汽車經(jīng)過車牌號(hào)的標(biāo)記后進(jìn)入此停車場(chǎng)管理。</p><p>  2.模擬實(shí)現(xiàn)停車場(chǎng)T,通道

4、S1內(nèi)的停車位以及汽車。</p><p>  3.可以看到汽車在停車場(chǎng)內(nèi)的詳細(xì)信息 </p><p>  4.有美觀良好的圖形用戶界面。</p><p><b>  【算法思想】</b></p><p>  1.停車場(chǎng)和車輛規(guī)避所通過兩個(gè)棧來模擬。當(dāng)停車場(chǎng)內(nèi)的汽車要離開時(shí),后邊停放的汽車為其讓路所要停放的地方稱為車輛規(guī)避

5、所。</p><p>  2.先進(jìn)入通道的汽車可以先計(jì)入停車場(chǎng),所以,通道通過一個(gè)隊(duì)列來模擬。</p><p>  3.設(shè)計(jì)一個(gè)汽車類,汽車類中有車牌號(hào),停車位置(指停在停車場(chǎng)內(nèi),通道內(nèi),還是車輛規(guī)避所內(nèi))兩個(gè)屬性。</p><p>  4.一輛汽車首先進(jìn)入通道,由于車牌號(hào)也汽車一一對(duì)應(yīng),故通過隨機(jī)產(chǎn)生車牌號(hào)來模擬隨機(jī)出現(xiàn)在通道內(nèi)的汽車,將車牌號(hào)保存在汽車類中的車牌

6、號(hào)屬性中。</p><p>  5.進(jìn)入通道時(shí),需要檢查通道內(nèi)是否有汽車,若有,則需要在通道內(nèi)等待,若沒有,則檢查停車場(chǎng)內(nèi)是否有空車位,若沒有,則仍需要在通道內(nèi)等待,若有,則可以進(jìn)入停車場(chǎng)停車。</p><p>  6.當(dāng)汽車要離開停車場(chǎng)時(shí),此輛汽車后邊停放的汽車從后往前一次進(jìn)入車輛規(guī)避所,當(dāng)此輛汽車離開后,車輛規(guī)避所內(nèi)的汽車在依次進(jìn)入停車場(chǎng)(車輛規(guī)避所和汽車都是棧來模擬的,所以會(huì)遵循后進(jìn)

7、先出的原則)。</p><p>  7.有汽車離開后,檢查通道內(nèi)是否有汽車,如果有,則可進(jìn)入停車場(chǎng)。</p><p><b>  【邏輯結(jié)構(gòu)設(shè)計(jì)】</b></p><p>  程序運(yùn)行開始后,首先隨機(jī)產(chǎn)生車牌號(hào),由于汽車可能進(jìn)入停車場(chǎng),也可能不進(jìn)入,為了模擬這個(gè),我們給定了一個(gè)范圍,如果產(chǎn)生的隨機(jī)數(shù)落入到這個(gè)范圍內(nèi),則表示該汽車準(zhǔn)備進(jìn)入停車場(chǎng),

8、此時(shí),汽車現(xiàn)進(jìn)入通道內(nèi),如果通道內(nèi)已有汽車等待,則此汽車也排在后邊等待,如果它前面沒有汽車,這時(shí)檢查停車場(chǎng)內(nèi)是否有空車位,如果有,則進(jìn)入停車場(chǎng)停車,如果沒有,則在通道內(nèi)等待。</p><p>  汽車離開也是隨機(jī)的,這時(shí),我們隨機(jī)產(chǎn)生一個(gè)隨機(jī)停車位數(shù),如果這個(gè)數(shù)在停車場(chǎng)的停車位總數(shù)內(nèi),并且此車位上停有汽車,則此汽車準(zhǔn)備離開停車場(chǎng),此時(shí),檢查此汽車的后邊是否有汽車,如果有,他后邊的汽車由后往前依次進(jìn)入車輛規(guī)避所,當(dāng)

9、此汽車離開后,車輛規(guī)避所里的汽車再依次進(jìn)入停車場(chǎng)。</p><p>  當(dāng)有汽車離開后,檢查通道內(nèi)是否有汽車,如果有,則可以進(jìn)入停車場(chǎng)停車。</p><p><b>  【存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)】</b></p><p>  1.汽車的抽象數(shù)據(jù)類型:</p><p>  public class Car {</p>

10、<p>  public static final int ON_STOPPTING = 0;//指示Car當(dāng)前停放在停車場(chǎng)中</p><p>  public static final int ON_PAVEMENT = 1;//指示Car當(dāng)前停放在便道上</p><p>  public static final int ON_OTHER_PLACE = 3;//指示Ca

11、r當(dāng)前停放在其他地方</p><p>  private final String licensePlate;//記錄Car牌照號(hào)碼</p><p>  private int state;//記錄Car的當(dāng)前狀態(tài),即停在何處</p><p>  public Car(String lp, int s) ;//構(gòu)造方法1</p><p>

12、  public Car(String lp);//構(gòu)造方法2</p><p>  public void setState(int s) ;//設(shè)置Car當(dāng)前停放狀態(tài)</p><p>  public int getState() ;//獲取Car當(dāng)前停放狀態(tài)</p><p>  public String getLicensePlate() ;//獲取Car車牌

13、號(hào)碼</p><p><b>  }</b></p><p>  2.停車場(chǎng)的抽象數(shù)據(jù)類型:</p><p>  public class Stack<E> {</p><p>  Object[] elements;//棧元素?cái)?shù)組</p><p>  final int MA

14、X_NUM;//棧最大容量</p><p>  int top;//棧頂指針</p><p>  public Stack(int capacity) ; //構(gòu)造函數(shù)</p><p>  public boolean isFull() ; //棧滿否</p><p>  public boolean isEmpty()//??辗?lt

15、;/p><p>  public E getEementAt(int index) ; //取指定位置的元素</p><p>  public void push(E e) ; //入棧</p><p>  public E pop();//出棧</p><p>  public E peek() ;//取棧頂</p><p&

16、gt;<b>  }</b></p><p>  3.便道的抽象數(shù)據(jù)類型:</p><p>  public class LinkedQueue<E>{</p><p>  protected Node<E> front;//對(duì)頭節(jié)點(diǎn)</p><p>  protected Node<E&g

17、t; rear;//隊(duì)尾節(jié)點(diǎn)</p><p>  protected int count;//節(jié)點(diǎn)個(gè)數(shù)</p><p>  public LinkedQueue();//創(chuàng)建一個(gè)空</p><p>  public LinkedQueue(int size) ;//創(chuàng)建一個(gè)空隊(duì)</p><p>  public boolean append(

18、E e) ;//入隊(duì)</p><p>  public boolean empty() ; //判隊(duì)空</p><p>  public E getFront() ;//獲得隊(duì)首</p><p>  public E remove() ;//出隊(duì)</p><p>  public E getElementAt(int index) ;//獲取

19、指定位置的節(jié)點(diǎn)</p><p>  public int getElementCount(); //獲取隊(duì)的長度</p><p><b>  }</b></p><p><b>  【基本操作設(shè)計(jì)】</b></p><p>  歡迎界面上有兩個(gè)按鈕,”進(jìn)入”和”離開”。點(diǎn)擊“離開”則退出程序。點(diǎn)擊“

20、進(jìn)入”則進(jìn)入到演示界面。演示界面的右下端有一個(gè)“開始演示”按鈕,當(dāng)點(diǎn)擊后,開始模擬停車場(chǎng)管理就開始演示。</p><p><b>  【模塊流程圖】</b></p><p><b>  1</b></p><p><b>  2</b></p><p><b>  3

21、</b></p><p><b>  【界面設(shè)計(jì)】</b></p><p><b>  主界面</b></p><p><b>  演示界面</b></p><p><b>  【用戶手冊(cè)】</b></p><p>  

22、停車場(chǎng)和便道內(nèi)的車位數(shù)相等,都是10個(gè)車位</p><p>  隨機(jī)車牌是1到100000中的一個(gè)數(shù),可以進(jìn)入到停車場(chǎng)得車牌的范圍是10000到99999.</p><p>  隨機(jī)車位是1到15中的一個(gè)數(shù),車位的范圍是1到10,隨機(jī)車位在設(shè)定的范圍內(nèi),并且此車位上有汽車,則汽車執(zhí)行離開操作,否則不執(zhí)行。</p><p>  每4秒鐘,會(huì)先產(chǎn)生一個(gè)隨機(jī)車牌號(hào),然后再

23、產(chǎn)生一個(gè)隨機(jī)車位號(hào)。一共會(huì)產(chǎn)生20個(gè)隨機(jī)車牌號(hào)和20個(gè)隨機(jī)車位號(hào)。</p><p>  當(dāng)20次結(jié)束后,如果再點(diǎn)擊“開始演示”則程序會(huì)再次產(chǎn)生20個(gè)隨機(jī)車牌號(hào)和20個(gè)隨機(jī)車位號(hào)后停止</p><p><b>  程序上機(jī)調(diào)試報(bào)告</b></p><p>  【語法錯(cuò)誤及其排除】</p><p>  空指針異常。在測(cè)試代碼

24、時(shí)經(jīng)常遇見這個(gè)錯(cuò)誤,原因是,變量沒有被正確調(diào)用。調(diào)試這個(gè)錯(cuò)誤時(shí)很麻煩的,需要一點(diǎn)一點(diǎn)去檢查出現(xiàn)錯(cuò)誤的語句以及相關(guān)的語句。經(jīng)過仔細(xì)檢查,果然是我在調(diào)用變量時(shí)出現(xiàn)的錯(cuò)誤,一點(diǎn)點(diǎn)修改后,程序終于跑通了。</p><p>  數(shù)組下標(biāo)越界異常。車位是從1開始的,而數(shù)組下標(biāo)是從0開始的,剛開始時(shí),沒有注意到這一點(diǎn),導(dǎo)致最后一個(gè)車位上的車不能正常進(jìn)出。經(jīng)檢查后,將將車位與數(shù)組下標(biāo)對(duì)應(yīng)起來這樣就正確了。</p>

25、<p>  【算法錯(cuò)誤及其排除】</p><p>  剛開始產(chǎn)生隨機(jī)數(shù)時(shí),由于未將進(jìn)入停車場(chǎng)的汽車入棧,導(dǎo)致在汽車想要出棧時(shí),程序運(yùn)行錯(cuò)誤。當(dāng)將入棧語句加入,并且在出棧時(shí)判斷了棧是否不為空后,出棧正常,程序正常運(yùn)行。</p><p><b>  程序測(cè)試結(jié)果</b></p><p><b>  【測(cè)試數(shù)據(jù)】</b>

26、;</p><p><b>  車位數(shù)為10</b></p><p>  每4秒鐘產(chǎn)生一個(gè)隨機(jī)車牌號(hào)和一個(gè)隨機(jī)車位號(hào)。一共會(huì)產(chǎn)生20個(gè)隨機(jī)車牌號(hào)和20個(gè)隨機(jī)車位號(hào)。</p><p><b>  【輸出結(jié)果】</b></p><p><b>  1.程序開始運(yùn)行</b></

27、p><p>  2.一次循環(huán)結(jié)束后(即產(chǎn)生了20個(gè)隨機(jī)數(shù)后)</p><p><b>  【程序性能評(píng)價(jià)】</b></p><p>  此程序整體來說,性能優(yōu)良,汽車的進(jìn)入和離開通過隨機(jī)數(shù)來控制。免去了手動(dòng)輸入的麻煩,也可以更加真實(shí)的模擬停車場(chǎng)系統(tǒng)。</p><p><b>  【性能改進(jìn)方向】</b>

28、</p><p>  此程序也有不足的地方,比如說,程序指定了停車場(chǎng)和便道內(nèi)的車位數(shù),改進(jìn)的方向就是車位數(shù)由用戶來制定,由于這次編程時(shí)間太少,沒有來的及實(shí)現(xiàn)。</p><p>  還有一個(gè)不足的地方就是,20個(gè)隨機(jī)數(shù)是通過20此循環(huán)來產(chǎn)生的,如果20個(gè)隨機(jī)數(shù)沒有產(chǎn)生完,程序就不能關(guān)閉,除非強(qiáng)制關(guān)閉,這也是一個(gè)需要改進(jìn)的地方。</p><p><b>  【

29、收獲及體會(huì)】</b></p><p><b>  源程序代碼</b></p><p><b>  菜單界面</b></p><p>  package edu.cqit.ParkSimulation;</p><p>  import java.awt.BorderLayout;<

30、/p><p>  import java.awt.Dimension;</p><p>  import java.awt.FlowLayout;</p><p>  import java.awt.Toolkit;</p><p>  import java.awt.event.ActionEvent;</p><p>

31、  import java.awt.event.ActionListener;</p><p>  import javax.swing.ImageIcon;</p><p>  import javax.swing.JButton;</p><p>  import javax.swing.JFrame;</p><p>  import

32、javax.swing.JLabel;</p><p>  import javax.swing.JPanel;</p><p><b>  //繪制菜單界面</b></p><p>  public class BeginFrame extends JFrame implements ActionListener{</p>&l

33、t;p>  public BeginFrame(){</p><p>  setLayout(new BorderLayout());</p><p>  JLabel jl=new JLabel(new ImageIcon("src/image/welcome.jpg"),JLabel.CENTER);</p><p>  JPanel

34、jp1=new JPanel();</p><p>  jp1.add(jl);</p><p>  add(jp1,BorderLayout.CENTER);</p><p>  JPanel jp2=new JPanel(new FlowLayout());</p><p>  JButton jb1=new JButton("

35、進(jìn)入");</p><p>  JButton jb2=new JButton("離開");</p><p>  jb1.addActionListener(this);</p><p>  jb2.addActionListener(this);</p><p>  jp2.add(jb1);</p>

36、;<p>  jp2.add(jb2);</p><p>  add(jp2,BorderLayout.SOUTH);</p><p>  setResizable(false);</p><p>  setSize(400,330);</p><p>  Dimension screenSize = Toolkit.getDe

37、faultToolkit().getScreenSize();//獲取電腦的寬和高</p><p>  Dimension windowsSize = getSize();//獲取組件的寬高</p><p>  setLocation((screenSize.width - windowsSize.width) / 2,</p><p>  (screenSize.

38、height - windowsSize.height) / 2);//將組件顯示到當(dāng)前電腦桌面的中心</p><p>  setVisible(true);</p><p>  setTitle("停車場(chǎng)模擬管理程序");</p><p>  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<

39、/p><p><b>  }</b></p><p><b>  //按鈕的監(jiān)聽</b></p><p><b>  @Override</b></p><p>  public void actionPerformed(ActionEvent e) {</p>&l

40、t;p>  String comm=e.getActionCommand();</p><p>  if("進(jìn)入".equals(comm)){</p><p>  ParkSimulation aParkSimulation = new ParkSimulation(10);</p><p>  Dimension screenSize

41、= Toolkit.getDefaultToolkit()</p><p>  .getScreenSize();//獲取電腦的寬和高</p><p>  Dimension windowsSize = aParkSimulation.getSize();//獲取組件的寬高</p><p>  aParkSimulation.setLocation(</p&g

42、t;<p>  (screenSize.width - windowsSize.width) / 2,</p><p>  (screenSize.height - windowsSize.height) / 2);//將組件顯示到當(dāng)前電腦桌面的中心</p><p>  aParkSimulation.setTitle("停車場(chǎng)模擬管理程序");</

43、p><p>  setVisible(false);//開始界面隱藏</p><p>  aParkSimulation.setVisible(true);//主界面顯示</p><p><b>  }else{</b></p><p>  System.exit(0);//關(guān)閉程序</p><p>

44、<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  汽車類</b></p><p>  package edu.cqit.ParkSimulation;</p>

45、<p><b>  /**</b></p><p>  * <p>汽車類<code>Car</code>,記錄汽車的牌照號(hào)碼和汽車的當(dāng)前狀態(tài),當(dāng)前狀態(tài)用于區(qū)分每輛汽車</p><p>  * 所處的位置。</p></p><p><b>  * </b></p

46、><p><b>  */</b></p><p>  public class Car {</p><p><b>  // </b></p><p>  // 汽車可能的停放位置</p><p><b>  // </b></p><

47、p>  /** 指示<code>Car</code>當(dāng)前停放在停車場(chǎng)中, 用于<code>setState</code> */</p><p>  public static final int ON_STOPPTING = 0;</p><p>  /** 指示<code>Car</code>當(dāng)前停放在

48、便道上, 用于<code>setState</code> */</p><p>  public static final int ON_PAVEMENT = 1;</p><p>  /** 指示<code>Car</code>當(dāng)前在其他地方, 用于<code>setState</code> */</p

49、><p>  public static final int ON_OTHER_PLACE = 3;</p><p><b>  // </b></p><p><b>  // 汽車屬性</b></p><p><b>  // </b></p><p

50、><b>  /** </b></p><p>  * 記錄<code>Car</code>牌照號(hào)碼 </p><p>  * @see #getLicensePlate()</p><p><b>  */</b></p><p>  private final St

51、ring licensePlate;</p><p><b>  /** </b></p><p>  * 記錄<code>Car</code>的當(dāng)前狀態(tài), 一下常量之一:</p><p>  * <code>ON_STOPPING</code>、</p><p>  

52、* <code>ON_PAVEMENT</code>或</p><p>  * <code>ON_OTHER_PLACE</code>(默認(rèn))。</p><p>  * @see #getState()</p><p><b>  */</b></p><p>  priv

53、ate int state;</p><p><b>  /**</b></p><p>  * 創(chuàng)建一個(gè)指定車牌及當(dāng)前停放狀態(tài)的<code>Car</code>。</p><p><b>  * </b></p><p>  * @param lp 要?jiǎng)?chuàng)建的<

54、code>Car</code>車牌</p><p>  * @param s 要?jiǎng)?chuàng)建的<code>Car</code>當(dāng)前停放狀態(tài)</p><p><b>  */</b></p><p>  public Car(String lp, int s) {</p><p>  

55、licensePlate = lp;</p><p>  state = s;</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 創(chuàng)建一個(gè)指定車牌且在其他地方的<code>Car</code>。</p&g

56、t;<p><b>  * </b></p><p>  * @param lp 要?jiǎng)?chuàng)建的<code>Car</code>車牌</p><p><b>  */</b></p><p>  public Car(String lp) {</p><p>  l

57、icensePlate= lp;</p><p>  state = ON_OTHER_PLACE;</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 設(shè)置<code>Car</code>當(dāng)前停放狀態(tài)。<

58、/p><p><b>  * </b></p><p>  * @param s 當(dāng)前停放狀態(tài) - <code>Car</code>中定義的以下常量之一:<code>ON_STOPPING</code>、</p><p>  * <code>ON_PAVEMENT<

59、/code>或<code>ON_OTHER_PLACE</code>(默認(rèn))。</p><p><b>  */</b></p><p>  public void setState(int s) {</p><p>  switch (state) {</p><p>  case ON_

60、STOPPTING:</p><p>  state = s;</p><p><b>  break;</b></p><p>  case ON_PAVEMENT:</p><p>  state = s;</p><p><b>  break;</b></p&g

61、t;<p>  default: // 指定狀態(tài)為其他值時(shí),默認(rèn)設(shè)置狀態(tài)為ON_OTHER_PLACE</p><p>  state = ON_OTHER_PLACE;</p><p><b>  break;</b></p><p><b>  }</b></p><p>

62、<b>  }</b></p><p><b>  /**</b></p><p>  * 獲取<code>Car</code>當(dāng)前停放狀態(tài)。</p><p><b>  * </b></p><p>  * @return <code>Ca

63、r</code>當(dāng)前停放狀態(tài) - <code>Car</code>中定義的以下常量之一:<code>ON_STOPPING</code>、</p><p>  * <code>ON_PAVEMENT</code>或<code>ON_OTHER_PLACE</code>。</p

64、><p><b>  */</b></p><p>  public int getState() {</p><p>  return state;</p><p><b>  }</b></p><p><b>  /**</b></p>

65、<p>  * 獲取<code>Car</code>車牌號(hào)碼。</p><p><b>  * </b></p><p>  * @return <code>Car</code>車牌號(hào)碼</p><p><b>  */</b></p><p&g

66、t;  public String getLicensePlate() {</p><p>  return licensePlate;</p><p><b>  }</b></p><p><b>  }</b></p><p>  (3)汽車按鈕類,用于模擬顯示停車場(chǎng)和便道內(nèi)的汽車</p

67、><p>  package edu.cqit.ParkSimulation;</p><p>  import java.awt.Insets;</p><p>  import javax.swing.ImageIcon;</p><p>  import javax.swing.JButton;</p><p>  

68、//汽車按鈕類,用于模擬顯示停車場(chǎng)和便道內(nèi)的汽車</p><p>  public class ImageButton extends JButton {</p><p>  public static final ImageIconcarIcon = new ImageIcon("src/image"+ </p><p>  java.io

69、.File.separator +</p><p>  "car_icon.jpg");</p><p>  public static final int LEAVE = 0;</p><p>  public static final int COME = 1;</p><p>  public Image

70、Button() {</p><p>  this(null);</p><p><b>  }</b></p><p>  public ImageButton(String text) {</p><p>  super(text);</p><p>  setIcon(carIcon);&l

71、t;/p><p>  setHorizontalTextPosition(RIGHT);//文字的水平對(duì)齊方式在右邊</p><p>  setHorizontalAlignment(LEFT);//圖標(biāo)的水平對(duì)齊方式為左邊</p><p>  setMargin(new Insets(0,0,0,0));//設(shè)置按鈕邊框和標(biāo)簽之間的空白</p><

72、p>  setOpaque(false);//如果為 true,則該組件繪制其邊界內(nèi)的所有像素。否則該組件可能不繪制部分或所有像素,從而允許其底層像素透視出來</p><p>  setBorderPainted(false);//按鈕的邊框不顯示</p><p>  setEnabled(false);//按鈕是否使用</p><p>  setConten

73、tAreaFilled(false);//如果該屬性為 true,則按鈕將繪制內(nèi)容區(qū)域。</p><p>  //如果希望有一個(gè)透明的按鈕,比如只是一個(gè)圖標(biāo)的按鈕,那么應(yīng)該將此屬性設(shè)置為 false。</p><p><b>  }</b></p><p>  public void setState(int state, String tex

74、t) {</p><p>  setText(text);</p><p>  switch (state) {</p><p>  case COME:</p><p>  setEnabled(true);</p><p><b>  break;</b></p><p&g

75、t;<b>  default:</b></p><p>  setEnabled(false);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p>&l

76、t;p><b>  }</b></p><p><b> ?。?)鏈?zhǔn)疥?duì)列</b></p><p>  package edu.cqit.ParkSimulation;</p><p>  import java.util.NoSuchElementException;</p><p><

77、;b>  //鏈?zhǔn)疥?duì)列</b></p><p>  public class LinkedQueue<E> implements Queue<E> {</p><p>  protected Node<E> front;//對(duì)頭節(jié)點(diǎn)</p><p>  protected Node<E> rear

78、;//隊(duì)尾節(jié)點(diǎn)</p><p>  protected int count;//節(jié)點(diǎn)個(gè)數(shù)</p><p><b>  /**</b></p><p>  * Creates a new queue without elements.</p><p><b>  */</b></p>

79、<p>  public LinkedQueue() {//創(chuàng)建一個(gè)空隊(duì)</p><p>  front = rear = null;</p><p>  count = 0;</p><p><b>  }</b></p><p><b>  /**</b></p>&

80、lt;p>  * Creates a new queue without elements.</p><p><b>  */</b></p><p>  public LinkedQueue(int size) {//創(chuàng)建一個(gè)空隊(duì)</p><p>  front = rear = null;</p><p>  

81、count = 0;</p><p><b>  }</b></p><p>  public boolean append(E e) {//入隊(duì)</p><p>  Node<E> newNode = new Node<E>(e, rear);</p><p>  if (count == 0)

82、 {</p><p>  front = rear = newNode;</p><p><b>  } else {</b></p><p>  rear.setNext(newNode);</p><p>  rear = newNode;</p><p><b>  }</b

83、></p><p><b>  count++;</b></p><p>  return true;</p><p><b>  }</b></p><p><b>  //判隊(duì)空</b></p><p>  public boolean emp

84、ty() {</p><p>  return (count == 0);</p><p><b>  }</b></p><p>  public E getFront() {//獲得隊(duì)首</p><p>  if (empty()) {</p><p>  throw new NoSuchEl

85、ementException("隊(duì)列已空!");</p><p><b>  }</b></p><p>  return front.getElement();</p><p><b>  }</b></p><p>  public E remove() {//出隊(duì)</

86、p><p>  if (empty()) {</p><p>  throw new NoSuchElementException("隊(duì)列已空!");</p><p><b>  }</b></p><p>  Node<E> tempNode = front;</p><

87、p>  if (front == rear) {</p><p>  front = rear = null;</p><p><b>  } else {</b></p><p>  front = front.next;</p><p><b>  }</b></p><

88、;p><b>  count--;</b></p><p>  return tempNode.getElement();</p><p><b>  }</b></p><p>  public E getElementAt(int index) {//獲取指定位置的節(jié)點(diǎn)</p><p> 

89、 if (front == null) {</p><p>  throw new NoSuchElementException("隊(duì)列已空!");</p><p><b>  }</b></p><p>  Node<E> node = front;</p><p>  for (i

90、nt i = 0; i < index; i++) {</p><p>  node = node.next;</p><p><b>  }</b></p><p>  return node.getElement();</p><p><b>  }</b></p><

91、p>  public int getElementCount() {//獲取隊(duì)的長度</p><p>  return count;</p><p><b>  }</b></p><p>  public Object[] toArray() {</p><p>  Object[] aEs = new Obje

92、ct[count];</p><p>  Node<E> node = front;</p><p>  for (int i = 0; (i < aEs.length) && (node != null); i++) {</p><p>  aEs[i] = node.getElement();</p><p&

93、gt;  node = node.next;</p><p><b>  }</b></p><p>  return aEs;</p><p><b>  }</b></p><p><b>  }</b></p><p>  (5)信息顯示類,用于顯

94、示汽車進(jìn)出停車場(chǎng)的詳細(xì)信息</p><p>  package edu.cqit.ParkSimulation;</p><p>  import java.awt.Color;</p><p>  import javax.swing.JTextArea;</p><p>  import javax.swing.text.Document

95、;</p><p>  //信息顯示類,用于顯示汽車進(jìn)出停車場(chǎng)的詳細(xì)信息</p><p>  public class MessagePanel extends JTextArea {</p><p>  public MessagePanel() {//構(gòu)造方法1</p><p><b>  super();</b>&

96、lt;/p><p><b>  }</b></p><p>  public MessagePanel(String text) {//構(gòu)造方法2</p><p>  super(text);</p><p><b>  }</b></p><p>  public Messag

97、ePanel(Document doc) {//構(gòu)造方法3</p><p>  super(doc);</p><p><b>  }</b></p><p>  public MessagePanel(int rows, int columns) {//構(gòu)造方法4</p><p>  super(rows, colum

98、ns);</p><p><b>  }</b></p><p>  public MessagePanel(String text, int rows, int columns) {//構(gòu)造方法5</p><p>  super(text, rows, columns);</p><p><b>  }<

99、;/b></p><p>  public MessagePanel(Document doc, String text, int rows, int columns) {//構(gòu)造方法6</p><p>  super(doc, text, rows, columns);</p><p><b>  }</b></p>&l

100、t;p>  public void initialize() {</p><p>  setBackground(Color.BLUE);//設(shè)置背景色</p><p>  setForeground(Color.WHITE);//設(shè)置此組件的前景色</p><p>  setEditable(false);//是否可以編輯</p><p&

101、gt;  setDragEnabled(true);//啟用自動(dòng)拖動(dòng)處理</p><p><b>  }</b></p><p>  public void append(String str) {//追加要顯示的字符串</p><p>  super.append(str);</p><p>  update(this

102、.getGraphics());</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  (6)隊(duì)列接口</b></p><p>  package edu.cqit.ParkSimulation;</p>&l

103、t;p>  import java.util.NoSuchElementException;</p><p><b>  //隊(duì)列接口</b></p><p>  public interface Queue<E> {</p><p>  boolean append(E e) throws Exception;//入隊(duì)<

104、;/p><p>  E remove() throws NoSuchElementException;//出隊(duì)</p><p>  E getFront() throws NoSuchElementException;//獲得隊(duì)首</p><p>  boolean empty();//隊(duì)空否</p><p><b>  }</b

105、></p><p><b>  (7)節(jié)點(diǎn)類</b></p><p>  package edu.cqit.ParkSimulation;</p><p><b>  //節(jié)點(diǎn)類</b></p><p>  public class Node<E> {</p><

106、;p>  protected E element;//數(shù)據(jù)域</p><p>  protected Node<E> next;//指針域(指向下一個(gè)節(jié)點(diǎn))</p><p>  public Node(E obj, Node<E> nextval) {//節(jié)點(diǎn)構(gòu)造方法1</p><p>  element = obj;//數(shù)據(jù)域賦值

107、</p><p>  next = nextval;//指針域指向下一個(gè)節(jié)點(diǎn)</p><p><b>  }</b></p><p>  public Node(Node<E> nextval) {//節(jié)點(diǎn)構(gòu)造方法1</p><p>  element = null;</p><

108、p>  next = nextval;</p><p><b>  }</b></p><p>  public E getElement() {</p><p>  return element;</p><p><b>  }</b></p><p>  pu

109、blic Node<E> getNext() {</p><p>  return next;</p><p><b>  }</b></p><p>  public void setElement(E obj) {</p><p>  element = obj;</p><p>

110、<b>  }</b></p><p>  public void setNext(Node<E> nextval) {</p><p>  next = nextval;</p><p><b>  }</b></p><p>  public String toString() {&

111、lt;/p><p>  return element.toString();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  (8)棧</b></p><p>  package edu.cqit.

112、ParkSimulation;</p><p><b>  //棧</b></p><p>  public class Stack<E> {</p><p>  Object[] elements;//棧元素?cái)?shù)組</p><p>  final int MAX_NUM;//棧最大容量</p&g

113、t;<p>  int top;//棧頂指針</p><p><b>  //構(gòu)造函數(shù)</b></p><p>  public Stack(int capacity) {</p><p>  MAX_NUM = capacity;</p><p>  elements = new Object[

114、MAX_NUM];</p><p>  top = 0;</p><p><b>  }</b></p><p><b>  //棧滿否</b></p><p>  public boolean isFull() {</p><p>  return (top == MA

115、X_NUM);</p><p><b>  }</b></p><p><b>  //??辗?lt;/b></p><p>  public boolean isEmpty() {</p><p>  return (top == 0);</p><p><b>  }

116、</b></p><p>  //取指定位置的元素</p><p>  public E getEementAt(int index) {</p><p>  if (index >= MAX_NUM || index < 0) {</p><p>  throw new ArrayIndexOutOfBoundsEx

117、ception(index);</p><p><b>  }</b></p><p>  return (E) elements[index];</p><p><b>  }</b></p><p><b>  //入棧</b></p><p>  

118、public void push(E e) throws Exception {</p><p>  if (isFull()) {</p><p>  throw new Exception("堆棧已滿!");</p><p><b>  }</b></p><p>  elements[top++

119、] = e;</p><p><b>  }</b></p><p><b>  //出棧</b></p><p>  public E pop() {</p><p>  if (isEmpty()) {</p><p>  throw new NullPointerExc

120、eption("堆棧已空!");</p><p><b>  }</b></p><p>  return (E) (elements[--top]);</p><p><b>  }</b></p><p><b>  //取棧頂</b></p>

121、;<p>  public E peek() {</p><p>  if (isEmpty()) {</p><p>  throw new NullPointerException("堆棧已空!");</p><p><b>  }</b></p><p>  return (E)

122、(elements[top-1]);</p><p><b>  }</b></p><p><b>  }</b></p><p>  (9)顯示停車場(chǎng)和便道的面板</p><p>  package edu.cqit.ParkSimulation;</p><p>  i

123、mport java.awt.BorderLayout;</p><p>  import java.awt.GridLayout;</p><p>  import javax.swing.AbstractButton;</p><p>  import javax.swing.ButtonGroup;</p><p>  import j

124、avax.swing.JComponent;</p><p>  import javax.swing.JPanel;</p><p>  import javax.swing.JScrollPane;</p><p>  public class StopPanel extends JPanel {</p><p>  /** 能加入此容器

125、的組件最大數(shù) */</p><p>  private intmaxCompCount;</p><p>  /** Title組件 */</p><p>  private JComponenttitleComponent;</p><p>  /** 容納加入此容器的組件 */</p><p>  

126、private JComponentcontentComponent;</p><p>  /** 容納加入此容器的按鈕 */</p><p>  private ButtonGroupgroup;</p><p>  /** 此容器中組件布局方式 */</p><p>  private GridLayoutcompone

127、ntLayout;</p><p><b>  /**</b></p><p>  * 創(chuàng)建一個(gè)具有指定標(biāo)題,指定初始可添加組件數(shù)量及組件對(duì)齊方式的容器。</p><p>  * @param title要添加的標(biāo)題組件</p><p>  * @param titlePos標(biāo)題組件的位置</p>

128、<p>  * @param maxComCount可添加組件的數(shù)量</p><p>  * @param align組件對(duì)齊方式</p><p><b>  */</b></p><p>  public StopPanel(JComponent title, int maxComCount) {</p><

129、;p>  titleComponent = title;</p><p>  group = new ButtonGroup();</p><p>  this.maxCompCount= maxComCount; </p><p><b>  init();</b></p><p><b>

130、;  }</b></p><p><b>  /**</b></p><p>  * 創(chuàng)建一個(gè)空標(biāo)題,指定初始可添加組件數(shù)量及組件對(duì)齊方式的容器。</p><p>  * @param maxComCount可添加組件數(shù)量初始值</p><p>  * @param align組件對(duì)齊方式</p&

131、gt;<p><b>  */</b></p><p>  public StopPanel(int maxComCount) {</p><p>  this(null, maxComCount);</p><p><b>  }</b></p><p><b>  /*

132、</b></p><p><b>  * 初始化容器。</b></p><p><b>  */</b></p><p>  private void init() {</p><p>  setLayout(new BorderLayout());</p><p&g

133、t;  contentComponent = new JPanel();</p><p>  componentLayout = new GridLayout(maxCompCount, 1);</p><p>  contentComponent.setLayout(componentLayout);</p><p>  add(new JScrollPane

134、(contentComponent), BorderLayout.CENTER);</p><p>  if (titleComponent != null) {</p><p>  add(titleComponent, BorderLayout.NORTH);</p><p><b>  }</b></p><p>

135、<b>  }</b></p><p><b>  /**</b></p><p>  * 將指定組件添加到容器。</p><p>  * @param b要添加的組件</p><p>  * @return如果添加成功返回true,否則返回false。</p><p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論