公交車管理系統(tǒng)_第1頁
公交車管理系統(tǒng)_第2頁
公交車管理系統(tǒng)_第3頁
公交車管理系統(tǒng)_第4頁
公交車管理系統(tǒng)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、公交車廣告發(fā)展史燕山大學(xué)課程設(shè)計(jì)說明書名稱:操作系統(tǒng)OS題目:公交車上司機(jī)與售貨員協(xié)調(diào)工作模擬班級:07級計(jì)算機(jī)開發(fā)小組:三劍客課題負(fù)責(zé)人:張浩課題組成員:張浩李康張曉玉姓名學(xué)號班級自評成績張浩07010401012107應(yīng)用2班A李康07010401011307軟件3班B張曉玉07010401013107軟件3班B開發(fā)日期:2010年1月11日-15日1概述計(jì)算機(jī)操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)中最不可缺少的,最常用的軟件,也是核心的,最接近于計(jì)算機(jī)硬件的軟件。其特點(diǎn)是內(nèi)容繁多,概念抽象,因此造成理解困難,掌握不易。本軟件的主要目的是通過直觀的演示,使學(xué)生能夠感性的明白掌握多道程序及其進(jìn)程同步和互斥的程

2、序設(shè)計(jì)的基本方法。1.1 基本功能利用多線程同步技術(shù)模擬公交車系統(tǒng),實(shí)現(xiàn)司機(jī)與售票員的同步與互斥關(guān)系,即開車時不允許開門,開門時不允許開車,實(shí)現(xiàn)每個乘客一個線程同步互斥的上下車。每站隨即生成上下車人數(shù),上下車線程實(shí)行,先下后上原則。到終點(diǎn)站后,可以統(tǒng)計(jì)本次出車的載客人數(shù)。1.2 開發(fā)計(jì)劃第一步,進(jìn)行問題分析,確定需要解決的問題;第二步,進(jìn)行整體構(gòu)思與框架設(shè)計(jì);第三步,查閱資料,分析所需要設(shè)計(jì)的程序算法;第四步,進(jìn)行各種算法及各個細(xì)節(jié)編碼的詳細(xì)設(shè)計(jì);第五步,進(jìn)行代碼調(diào)試,修改程序中的錯誤;第六步,整理總結(jié)書寫報告,進(jìn)行答辯。1.3 人員分工張浩:分析構(gòu)架,核心代碼編寫;李康:用戶界面設(shè)計(jì),輔助代

3、碼編寫,調(diào)試;張曉玉:功能測試、書寫實(shí)驗(yàn)報告。1.4 開發(fā)環(huán)境及開發(fā)工具本程序是以在windowsXPT用Netbean奪口jdk搭建的平臺上,以Javaf乍為開發(fā)語言進(jìn)行編寫的。使用的開發(fā)工具:netbeans.NetBean一臺直接提供了應(yīng)用程序的常見需求,如菜單、文檔管理和設(shè)置?!癗etBeansJ建應(yīng)用程序是指,僅提供NetBeansF臺尚不包含的應(yīng)用程序部分,而不是從頭開始編寫應(yīng)用程序。在開發(fā)周期結(jié)束時,可以將應(yīng)用程序與NetBeansff臺捆綁在一起,從而節(jié)省了很多時間和精力,并且構(gòu)建的應(yīng)用程序穩(wěn)定可靠。使用的開發(fā)語言:java.Java是一種簡單的、面向?qū)ο蟮摹⒎植际降?、解釋的?/p>

4、鍵壯的、安全的、結(jié)構(gòu)的中立的、可移植的、性能很優(yōu)異的多線程的、動態(tài)的語言。其特點(diǎn)主要有:平臺無關(guān)性、健壯性、面向?qū)ο?、安全性、分布式?.5 使用的基本概念和原理多道程序:用戶所提交的作業(yè)都先存放在外存中并排成一個隊(duì)列,成為“后備隊(duì)列”;然后,由作業(yè)調(diào)度程序按一定的算法由后被隊(duì)列中選擇若干個作業(yè)調(diào)入內(nèi)存,使它們共享CP眺口系統(tǒng)中的各種資源。進(jìn)程:進(jìn)程是進(jìn)程實(shí)體的運(yùn)行過程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位。線程:操作系統(tǒng)用來調(diào)度、分派的最小單位。同步和互斥:臨界段:臨界段對象通過提供所有線程必須共享的對象來控制線程。只有擁有臨界段對象的線程才可以訪問保護(hù)資源(進(jìn)行臨界區(qū)操作)。在另一個線程

5、可以獲取對象的訪問權(quán)。用戶應(yīng)用程序可能會使用臨界對象來阻止兩個線程同時訪問共享的資源發(fā)文件等?;コ饬浚夯コ饬康墓ぷ鞣绞胶团R界段非常相似,其區(qū)別在于互斥量不公保護(hù)一個進(jìn)程內(nèi)的資源共享,而且還保護(hù)系統(tǒng)中進(jìn)程之間的共享資源。它是通過為互斥量提供一個互斥量名”來進(jìn)行進(jìn)程間資源共享協(xié)調(diào)的。事件:事件對象用于給線程傳遞信號,指示線程中特定的操作可以開始或結(jié)束。除非線程已經(jīng)收到了這個事件信號,否則它將一直處于掛起狀態(tài)。當(dāng)事件對象進(jìn)入其信號狀態(tài)時,正在等待該事件的線程就可以開始執(zhí)行。例如,一個應(yīng)用程序可以通過事件來通知線程它需要的數(shù)據(jù)已經(jīng)準(zhǔn)備好。經(jīng)常利用事件進(jìn)行線程之間的通信。信號量:信號量與互斥相似,但是互

6、斥只允許在同一時刻一個線程訪問它的數(shù)據(jù),而信號量允許多個線程在同一時刻訪問它的數(shù)據(jù)。WIN32不知道哪一個線程擁有信號量,它只保證信號量使用的資源計(jì)數(shù)正確的設(shè)置。2需求分析協(xié)調(diào)司機(jī)和售票員以及乘客在運(yùn)行與開關(guān)門以及上下車時的關(guān)系,實(shí)現(xiàn)同步互斥,避免發(fā)生不必要的沖突,節(jié)省了時間空間資源。本程序顯示上下車人數(shù),并顯示車上總?cè)藬?shù),使車內(nèi)人數(shù)不超過總座位數(shù)。最終,利用統(tǒng)計(jì)功能,顯示此次公交車運(yùn)行的各種參數(shù):車次、總站數(shù)、總載客數(shù)。3總體設(shè)計(jì)基本的技術(shù)路線:面向?qū)ο?;軟件的總體結(jié)構(gòu):分為可視化界面以及后臺數(shù)據(jù)執(zhí)行;內(nèi)部模塊關(guān)系:司機(jī)類與售票員類同步互斥,上車類與下車類同步互斥;總體流程:停車-開門-下車

7、-上車-關(guān)門-開車;需要創(chuàng)建的進(jìn)程線程:主窗口線程、司機(jī)線程、售票員線程、上車乘客線程、下車乘客線程流程圖如下:開門1創(chuàng)建上F車統(tǒng)程I先下后上L上下車完成X關(guān)門I行駛ZL到站7LM4詳細(xì)設(shè)計(jì)Wait(),notify()實(shí)現(xiàn)進(jìn)程的等待和喚醒。BusJFrameO建主窗口,Driver(劑Conductor價別創(chuàng)建司機(jī)和售票員線程,PassengerOn()|建上車線程,PassengerOff0建下稱線程。確定要設(shè)計(jì)的過程、構(gòu)件、類、對象、函數(shù)和它們的參數(shù),要給出具體的名稱和參數(shù)及其解釋由Driver類調(diào)用BusStat或的stopCar()口runCar()!r法,由Conduct。類調(diào)用B

8、usStatei的openDoor()和closeDoor方法,實(shí)現(xiàn)同步互斥。由Passenger。類調(diào)用Seat類的takeOn()口hasOn()T法,由Passenger。類調(diào)用Sea樓I的takeOff()口hasOff的法,實(shí)現(xiàn)上下車線程的同步和互斥5編碼設(shè)計(jì)5.1 開發(fā)環(huán)境的設(shè)置和建立首先安裝JDK如下圖:Jawd|FTI)5EDtvrlpMtiKKit6Update13自定義安眠詰hK,州去年選舞舞上裝的匚.任力非.上彝完哀后,俗町以使用杉制由也中的友 110味程序突田程序來更改自逸捏的的能C ;1Rwa«i FttesVffJa Wkl ,ft,0. ISLjavaf

9、TM 任 oevebpfuentKit $ 3百上:3.包將專用按£UJUS.E迨將用費(fèi)KO r匚巾憚器驪動霜亨間.上一步富予一壬工工取消然后安裝Netbeans并關(guān)聯(lián)JDK:5.2 程序設(shè)計(jì)過程只需要注意的事項(xiàng)實(shí)現(xiàn)同步互斥的方法應(yīng)成對出現(xiàn),防止出現(xiàn)死鎖狀態(tài);互斥信號應(yīng)定義清晰,以用于互斥方法的實(shí)現(xiàn);線程的創(chuàng)建和指針傳遞清晰明確,用于線程之間的交互。5.3 關(guān)鍵構(gòu)件和插件的使用NetbeanS勺使用與一般編程軟件接近,但是它包含了很多強(qiáng)大的插件,利用其中的插件我們可以簡單的實(shí)現(xiàn)很多復(fù)雜的功能,例如在本次試驗(yàn)中惡我們程序的可視化窗口的建立就是利用如下組建實(shí)現(xiàn)的。期伴曲相電Xi lw叵工

10、具整_容器;標(biāo)將把陰格屆漸城相之一具面盅格內(nèi)曾框架巴i分層窗稻5«11£控件曝空工控鈿叵開啟/光出按天”一復(fù)選框4一單選授軸。搦睡口娟合框JTrutl-屬性嚇學(xué)I扁性的定蝌代嗎:*星度defaurtClogcOperat沁rEtITjOHLCLO典.v口-ttfeQ-苴W反片aKviyaOnTop口.2fikvoviOnTflDSuDC»rx>dJfianie5.4主要程序的代碼設(shè)計(jì)及注釋BusStat類主要源代碼:publicclassBusStatepublicstaticbooleandoorClosed=false;publicstaticboole

11、anbusStopped=true;/獲取輸出框指針privatestaticJTextAreabSay;publicstaticvoidgetBusSay(JTextAreab)bSay=b;/獲取輸出框指針publicsynchronizedvoidstopBus()busStopped=true;bSay.setText("已停");this.notify();publicsynchronizedvoidrunBus()throwsInterruptedExceptionwhile(!doorClosed)this.wait();busStopped=false;pu

12、blicsynchronizedvoidcloseDoor()doorClosed=true;bSay.setText("已關(guān)");this.notify();publicsynchronizedvoidopenDoor()throwsInterruptedExceptionwhile(!busStopped)this.wait();doorClosed=false;packageysu;importjava.util.logging.Level;importjava.util.logging.Logger;Conduct。關(guān)的主要源代碼:publicclassConduc

13、torextendsThread/獲取主窗口指針privatestaticBusJFramebj;publicstaticvoidgetBusJFrame(BusJFrameb)bj=b;/獲取BusStat或的指針privatestaticBusStatebState;publicstaticvoidgetBusState(BusStateb)bState=b;/獲得一個Driver進(jìn)程類的指針privatestaticDriverdr;publicstaticvoidgetDriver(Driverd)dr=d;/用于創(chuàng)建On和Off類privatevoidcreateOn()Thread

14、a=newPassengerOn();a.start();privatevoidcreateOff()Threadb=newPassengerOff();b.start();privatebooleantimeToQuit=false;privateintstation=0;publicstaticbooleanfinish=false;publicvoidrun()while(!timeToQuit)trybState.openDoor();bj.busSay.setTexf。已開");Thread.sleep(1000);bj.busSay.setText(null);bj.co

15、nductorSay.setText("抓緊時間上下車");Thread.sleep(2000);bj.conductorSay.setText(null);bj.busSay.setTex鄴始上下車");Thread.sleep(2000);bj.busSay.setText(null);Seat.doorAvailable=true;if(Seat.willOn>(Seat.seatRemain+Seat.willOff)Seat.canOn=Seat.seatRemain+Seat.willOff;elseSeat.canOn=Seat.willOn;

16、/統(tǒng)計(jì)本次出車載客人次數(shù)Seat.totalPassenger=Seat.totalPassenger+Seat.canOn;/創(chuàng)建上下車乘客的進(jìn)程for(inti=0;i<Seat.willOff;i+)createOff();for(inti=0;i<Seat.canOn;i+)createOn();if(Seat.canOn=0&&Seat.willOff=0)finish=true;elsefinish=false;/等待上下車完成while(!finish)Thread.sleep(100);if(Seat.canOn<Seat.willOn)bj.

17、busSay.setText®抱歉n本車已滿n歡迎乘坐下班客車");Thread.sleep(2000);Seat.doorAvailable=false;Seat.hasOn=0;/青零,防止出現(xiàn)累加Seat.hasOff=0;bj.busSay.setText("下車完畢");bj.seatRemain.setText(""+Seat.seatRemain);bj.seatUsed.setText(""+Seat.seatUsed);station+;if(station>Seat.totalStatio

18、n)timeToQuit=true;Driver.timeToQuit=true;break;Thread.sleep(2000);bj.busSay.setText(null);bj.conductorSay.setText("門了");Thread.sleep(2000);bj.conductorSay.setText(null);bState.closeDoor();Thread.sleep(1000);catch(InterruptedExceptionex)Logger.getLogger(Conductor.class.getName().log(Level.S

19、EVERE,null,ex);tryThread.sleep(200);catch(InterruptedExceptionex)Logger.getLogger(Conductor.class.getName().log(Level.SEVERE,null,ex);bj.conductorSay.setTex!("點(diǎn)站至U了n謝謝乘坐本車n再見)bj.willOff.setText(""+0);bj.willOn.setText(""+0);BusJFrame.sumrizeAvailable=true;dr.stop();/* Tochan

20、gethistemplate,chooseTools|Templates* andopenthetemplateintheeditor.* /packageysu;importjava.util.logging.Level;importjava.util.logging.Logger;Driver類主要源代碼:publicclassDriverextendsThread/獲取主窗口指針privatestaticBusJFramebj;publicstaticvoidgetBusJFrame(BusJFrameb)bj=b;/獲取BusStat或的指針privatestaticBusStateb

21、State;publicstaticvoidgetBusState(BusStateb)bState=b;/獲取BusStat類的指針publicstaticbooleantimeToQuit=false;publicvoidrun()while(!timeToQuit)trybState.runBus();Thread.sleep(1000);bj.driverSay.setTex咐發(fā)");bj.nowNextSation.setTex/一站");bj.nextStation.setText(""+(+Seat.nextStation)+"站

22、");inta=(int)(Math.random()*10);/下車人數(shù)不能多于車上已有的人if(Seat.seatUsed<a)Seat.willOff=Seat.seatUsed;elseSeat.willOff=a;/提前創(chuàng)建下一站要下車的人數(shù)if(Seat.nextStation=Seat.totalStation)Seat.willOn=0;Seat.willOff=Seat.seatUsed;elseSeat.willOn=(int)(Math.random()*10);勝成上車的人數(shù)bj.willOff.setText(""+Seat.wil

23、lOff);bj.willOn.setText(""+Seat.willOn);bj.busSay.setText(null);Thread.sleep(2000);bj.driverSay.setText(null);bj.busSay.setTex解車行駛中");Thread.sleep(3000);bj.busSay.setText(null);bj.driverSay.setTextf"站了");bj.nowNextSation.setText("站");Thread.sleep(1000);bj.driverSay

24、.setText(null);bj.busSay.setTex竄已停");Thread.sleep(1000);bState.stopBus();Thread.sleep(1000);catch(InterruptedExceptionex)Logger.getLogger(Driver.class.getName().log(Level.SEVERE,null,ex);Sea段的主要源代碼:/*Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/packageysu;/*authorA

25、dministrator*/publicclassSeatpublicstaticinttotalStation=4;publicstaticinttotalPassenger=0;publicstaticinttotalSeat=30;publicstaticintstationName=10;publicstaticintbusName=30;publicstaticintseatTotal=30;publicstaticintseatRemain=30;publicstaticintseatUsed=0;publicstaticintwillOff=0;publicstaticintwi

26、llOn=0;publicstaticintcanOn=0;publicstaticinthasOn=0;publicstaticinthasOff=0;publicstaticintnextStation=0;publicstaticbooleandoorAvailable=true;publicstaticvoidreset()totalStation=12;totalPassenger=0;totalSeat=30;stationName=0;busName=30;seatTotal=30;seatRemain=30;seatUsed=0;willOff=0;willOn=0;canOn

27、=0;hasOn=0;hasOff=0;nextStation=0;doorAvailable=true;publicsynchronizedvoidtakeOn()throwsInterruptedExceptionwhile(!doorAvailable|hasOff<willOff)this.wait();doorAvailable=false;hasOn+;seatUsed+;seatRemain-;publicsynchronizedvoidtakeOff()throwsInterruptedExceptionwhile(!doorAvailable)this.wait();d

28、oorAvailable=false;hasOff+;seatUsed-;seatRemain+;publicsynchronizedvoidhasOff()doorAvailable=true;this.notifyAll();if(Seat.hasOff=Seat.willOff&&Seat.canOn=0)Conductor.finish=true;publicsynchronizedvoidhasOn()doorAvailable=true;this.notifyAll();if(Seat.hasOn=Seat.canOn)Conductor.finish=true;P

29、assengerOnl的主要源代碼如下:/* Tochangethistemplate,chooseTools|Templates* andopenthetemplateintheeditor.* /packageysu;importjava.util.logging.Level;importjava.util.logging.Logger;/* authorAdministrator* /publicclassPassengerOnextendsThread/獲得Sea膜的指針privatestaticSeatseat;publicstaticvoidgetSeat(Seats)seat=s

30、;/獲取主窗口指針privatestaticBusJFramebj;publicstaticvoidgetBusJFrame(BusJFrameb)bj=b;Overridepublicvoidrun()tryThread.sleep(100);catch(InterruptedExceptionex)Logger.getLogger(PassengerOn.class.getName().log(Level.SEVERE,null,ex);tryseat.takeOn();catch(InterruptedExceptionex)Logger.getLogger(PassengerOn.cl

31、ass.getName().log(Level.SEVERE,null,ex);bj.busSay.append(""+Seat.hasOn+,人已經(jīng)上車n");bj.seatUsed.setText(""+Seat.seatUsed);bj.seatRemain.setText(""+Seat.seatRemain);bj.willOn.setText(""+(Seat.canOn-Seat.hasOn);bj.willOff.setText(""+(Seat.willOff-Sea

32、t.hasOff);tryThread.sleep(2000);catch(InterruptedExceptionex)Logger.getLogger(PassengerOn.class.getName().log(Level.SEVERE,null,ex);seat.hasOn();Passenger。類的主要源代碼如下:/* Tochangethistemplate,chooseTools|Templates* andopenthetemplateintheeditor.* /packageysu;importjava.util.logging.Level;importjava.uti

33、l.logging.Logger;/*authorAdministrator*/publicclassPassengerOffextendsThread/獲得Sea膜的指針privatestaticSeatseat;publicstaticvoidgetSeat(Seats)seat=s;/獲取主窗口指針privatestaticBusJFramebj;publicstaticvoidgetBusJFrame(BusJFrameb)bj=b;Overridepublicvoidrun()tryThread.sleep(100);catch(InterruptedExceptionex)Logg

34、er.getLogger(PassengerOff.class.getName().log(Level.SEVERE,null,ex);tryseat.takeOff();catch(InterruptedExceptionex)Logger.getLogger(PassengerOff.class.getName().log(Level.SEVERE,null,ex);bj.busSay.append(""+Seat.hasOff+"人已經(jīng)下車n");bj.seatUsed.setText(""+Seat.seatUsed);bj.seatRemain.setText(""+Seat.seatRemain);bj.willOn.setText

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論