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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

9、 choise是一個(gè)隨機(jī)產(chǎn)生的0或1,用來決定客戶買票或退票。 </p><p>  cus_list是一個(gè)線性表,用來存儲客戶所買到的所有票。</p><p>  7)、Tickets.java</p><p>  定義了number和list兩個(gè)屬性,其中number用來表示服務(wù)器售出的票號,list是一個(gè)線性表,用來存儲剩余火車票。包含了售票票方法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()”這個(gè)語句判斷客戶是否有票可退,若客戶有票可退,則通過輸出流將退票信息及所退票號發(fā)送給服務(wù)器端;若客戶無票可退,則改為買票,通過輸出流將信息發(fā)送給服務(wù)器端。流程圖如下:</p><p>  、服務(wù)器端通過輸入流接收客戶端的信息,接收信息后,隨機(jī)產(chǎn)生一個(gè)時(shí)間,線程休眠,模擬網(wǎng)絡(luò)延遲。然后判斷客戶是買票還是退

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

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

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

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

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

17、gt;<p>  客戶請求退票時(shí),客戶無票可退,轉(zhuǎn)為買票情況。</p><p><b>  實(shí)驗(yàn)總結(jié)</b></p><p>  通過本次實(shí)驗(yàn),掌握了Server Socket的用法和多線程編程的的原理、還有同步代碼塊的使用、線程等待和喚醒的使用,在實(shí)驗(yàn)過程中遇到了很多不明白的問題,通過找書、與同學(xué)討論都一一解決了。第一次實(shí)驗(yàn)的時(shí)候,基本上不知道從何處入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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

提交評論