版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 停車場(chǎng)管理-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告停車場(chǎng)管理系統(tǒng)
- 停車場(chǎng)管理系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)---停車場(chǎng)管理課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----停車場(chǎng)管理系統(tǒng)設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論