網(wǎng)絡(luò)編程課程設(shè)計報告--模擬火車售票退票系統(tǒng)_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  Java網(wǎng)絡(luò)編程報告</p><p>  姓名: </p><p>  學(xué)號: </p><p>  題目: 模擬火車售票退票系統(tǒng) </p><p><b>  一、作業(yè)要求:</b

2、></p><p>  模擬火車售票退票系統(tǒng)實現(xiàn)一個服務(wù)器為多個客戶服務(wù),要求</p><p>  服務(wù)器用線程池,線程容量為4,座位數(shù)為60個,即01-60號座.</p><p>  客戶通過網(wǎng)絡(luò)發(fā)送請求可以退票可以買票,先來先服務(wù),買票還是退票由隨機數(shù)決定,退票必須是該用戶買過的有效票,先買的票先退。若退票時該用戶已沒有買到的票,則改為買票。若服務(wù)器票已售

3、完,則需等待,先來先服務(wù),哪個客戶先來,服務(wù)器將先為哪個客戶服務(wù)。</p><p>  服務(wù)器每次接收一個客戶請求需打印該客戶的端口號、IP和該用戶是買票還是退票,處理該請求之前目前剩余的票所有座號,處理之后剩余的座號也要打印出來,并延遲一個隨機處理時間,以模擬對每個客戶處理的時間不同。將處理結(jié)果發(fā)給客戶。</p><p>  客戶收到結(jié)果后打印到屏幕。</p><p&

4、gt;  注意資源共享的問題,適當時可用同步代碼,不允許用同步方法。注意線程之間的協(xié)作。</p><p>  演示時開放4-5個用戶,并演示一次退票無效的情況(即要退的票在服務(wù)器中還沒有賣出去,要求2是正常情況)</p><p><b>  主要設(shè)計思路:</b></p><p>  1、該程序包括以下幾個類:</p><p

5、>  1)、EchoClient.java</p><p>  2)、EchoServer.java</p><p>  3)、Node.java</p><p>  定義了線性表的一個節(jié)點的結(jié)構(gòu),并對節(jié)點進行初始化</p><p>  4)、LList.java</p><p>  接口類,包含以下幾個方法:&

6、lt;/p><p>  boolean isEmpty(); // 判斷線性表是否為空 </p><p>  int length(); // 返回線性表長度 </p><p>  T get(int i); // 返回第i(i>0)個元素 </p><p>  vo

7、id insert(int i,T x); // 插入x作為第i個元素 </p><p>  void insert1(T x); //按順序插入一個數(shù)到鏈表中</p><p>  T remove(int i); // 刪除第i個元素并返回被刪對象 </p><p>  void append(T x);

8、 // 在線性表最后插入x元素</p><p>  5)、SingleLinkList.java</p><p>  實現(xiàn)接口LList。</p><p>  6)、Customer.java</p><p>  定義了choise,cus_tickets兩個屬性和choice()方法,其中 </p><p> 

9、 choise是一個隨機產(chǎn)生的0或1,用來決定客戶買票或退票。 </p><p>  cus_list是一個線性表,用來存儲客戶所買到的所有票。</p><p>  7)、Tickets.java</p><p>  定義了number和list兩個屬性,其中number用來表示服務(wù)器售出的票號,list是一個線性表,用來存儲剩余火車票。包含了售票票方法sell()

10、和退票方法return_ticket()。</p><p><b>  思路及流程圖</b></p><p>  1)、首先客戶端通過調(diào)用Customer類的choice()方法,由choice()方法來決定客戶是買票還是退票。若choise==1,則客戶買票,若choise==0,則客戶退票。流程圖如下:</p><p>  、若客戶買票,則

11、通過輸出流將買票信息發(fā)送給服務(wù)器端。若客戶退票,則通過“customer.cus_list.isEmpty()”這個語句判斷客戶是否有票可退,若客戶有票可退,則通過輸出流將退票信息及所退票號發(fā)送給服務(wù)器端;若客戶無票可退,則改為買票,通過輸出流將信息發(fā)送給服務(wù)器端。流程圖如下:</p><p>  、服務(wù)器端通過輸入流接收客戶端的信息,接收信息后,隨機產(chǎn)生一個時間,線程休眠,模擬網(wǎng)絡(luò)延遲。然后判斷客戶是買票還是退

12、票,若是買票,則調(diào)用Tickets類中的sell()方法進行售票處理;若是退票,則調(diào)用Tickets類中的return_ticket()方法進行退票處理。流程圖如下:</p><p>  4)、若客戶是買票的,則通過“l(fā)ist.isEmpty()”判斷是否有票可售,若有票可售,則進行售票處理(即將list線性表中的第一個節(jié)點刪除,表示此票已售出),處理后將信息反饋給客戶;客戶收到服務(wù)器端的信息后,將反饋信息打印輸

13、出,同時將所買到的票添加到cus_list線性表的最后。</p><p>  若無票可售,則線程等待,將線程加入等待隊列,當線程被喚醒后,進行售票處理,處理后將信息反饋給客戶??蛻羰盏椒?wù)器端的信息后,輸出反饋的信息,同時,將所買到的票添加到cus_list線性表的最后。</p><p>  、若客戶是退票的,首先判斷客戶所退的票是否是已售出的票,若不是,則非法退票,退票失敗,將反饋信息發(fā)

14、送給客戶端;若是,則進行退票處理(將所要退的票按大小添加到線性表list中),退票處理后,將反饋信息發(fā)送給客戶端,然后該線程將已經(jīng)退了的票從cus_list中刪除(即cus_list.remove())。判斷是否有線程在等待隊列中,若有,則將隊列中的第一個線程喚醒,進行售票處理,然后將反饋信息發(fā)送給客戶端。</p><p><b>  關(guān)鍵代碼</b></p><p>

15、;  1)、EchoClient.java</p><p>  、EchoServer.java</p><p>  、Tickets.java</p><p><b>  程序運行截圖</b></p><p><b>  1)、服務(wù)器端截圖</b></p><p>  當票

16、已售完時,客戶請求買票就將客戶加入一個等待隊列,如果有另一個客戶來退票,則將所退的票售給等待隊列中的第一個客戶。</p><p><b>  當所</b></p><p>  非法退票情況演示:控制客戶退票號為20的票,因為20號票還未售出,所以退票失敗!</p><p><b>  2)、客戶端截圖</b></p&

17、gt;<p>  客戶請求退票時,客戶無票可退,轉(zhuǎn)為買票情況。</p><p><b>  實驗總結(jié)</b></p><p>  通過本次實驗,掌握了Server Socket的用法和多線程編程的的原理、還有同步代碼塊的使用、線程等待和喚醒的使用,在實驗過程中遇到了很多不明白的問題,通過找書、與同學(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論