數(shù)據(jù)結構大型實驗報告銀行模擬系統(tǒng)_第1頁
數(shù)據(jù)結構大型實驗報告銀行模擬系統(tǒng)_第2頁
數(shù)據(jù)結構大型實驗報告銀行模擬系統(tǒng)_第3頁
數(shù)據(jù)結構大型實驗報告銀行模擬系統(tǒng)_第4頁
數(shù)據(jù)結構大型實驗報告銀行模擬系統(tǒng)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結構大型實驗報告目錄一:采用的模型和類的設計1.1模型 1.2類的設計 1.2.1 time24類1.2.2 event類 1.2.3 pqueue類1.2.4 simulation類二:整個系統(tǒng)的框架設計三:本離散事件描述四:實現(xiàn)模擬的過程框圖五:完整的系統(tǒng)源代碼六:本系統(tǒng)運行結果七:實驗中遇到的問題及解決方法一:采用的模型和類的設計1.1模型:本系統(tǒng)采取事件驅動模型來設計。通過程序動態(tài)模擬銀行顧客在一家有n=2個窗口的銀行的到達和離開的情況。通過計算每位顧客的平均等待時間及每一窗口處于“繁忙”狀態(tài)的百分比,來計算銀行的服務效率。實現(xiàn)中,可以顧客的到達事件,離開事件代表銀行活動的對象,用

2、事件驅動來模擬這些活動,并以概率(隨機數(shù)發(fā)生器)來描述預期的客戶到達率和銀行職員為一個顧客服務所需的時間。在實驗中,可改變參數(shù),如銀行營業(yè)時間范圍,銀行窗口數(shù)、客戶的到達率、服務時間,顧客的最大耐性等待時間,vip顧客的到達率等,測試銀行的服務效率。銀行模擬的關鍵部分為客戶時間,包括到達,中途離開和辦完業(yè)務離開事件,剛達到的顧客通過隨機數(shù)產(chǎn)生下一個顧客的到達,已到達的顧客通過隨機數(shù)產(chǎn)生服務時間,選擇最早空閑的窗口后,可生成離開事件;所有事件都被加上時間戳,放到優(yōu)先隊列中,隊列中優(yōu)先級最高的事件就是時間戳最早的事件。其中每一到達事件均可估計出自己的等待時間,若等待時間超出一開始設定的最大耐性等待

3、時間,則顧客選擇中途離開,生成中途離開事件。到達的事件中,又分為普通顧客到達事件和vip顧客到達事件。vip到達時,可選擇普通窗口和貴賓窗口來辦理業(yè)務。但是普通顧客到達只能選擇普通窗口來辦理業(yè)務。1.2類的設計:1.2.1 time24類time24類對24小時時間制的加,減,等于,小于,輸入,輸出進行了運算符的重載。class time24;time24 operator+ (const time24& lhs, const time24& rhs);time24 operator+ (const time24& lhs, int min);time24 operator+ (int min

4、,const time24& rhs);time24 operator- (const time24& lhs, const time24& rhs);bool operator= (const time24& lhs, const time24& rhs);bool operator (istream& istr, time24 &r);ostream& operator (ostream& ostr, const time24& r);1.2.2 event類event類首先枚舉了事件類型:到達事件,中途離開事件還是正常辦完業(yè)務的離開事件。其中每個事件還包括了屬性(普通事件還是貴賓事件)。

5、具體成員變量及函數(shù)如下:#ifndef event_class#define event_class#include time24.henum eventtypearrival,departure,dep2;class eventprivate:int time;/到達時間eventtype etype;/事件類型int customerid;/顧客號int tellerid;/窗口號int waittime;/等待時間int servicetime;/服務時間int vip;/貴賓級public:event()int gettime()event(int t,eventtype et,int

6、 cid,int tid,int wt,int st,int v);int gettime()const;eventtype geteventtype() const;int getcustomerid()const;int gettellerid()const;int getwaittime()const;void setwaittime(int t);int getservicetime()const;int getvip()const;#endif1.2.3 pqueue類該優(yōu)先級隊列是以鏈表來實現(xiàn)的。由于每個事件都被插上了時間戳,所以以事件發(fā)生的先后順序來排定優(yōu)先級。時間早的事件,優(yōu)先

7、級高。同一時間,離開事件的優(yōu)先級大于到達事件。template struct nodet value;int priority;node * next;template class pqueueprivate:int count;/隊伍中的人數(shù)node *front,*back;/首尾指針node * newnode(t & value,int & priority,node* next);/插入的新的結點(事件類型的)public:pqueue();pqueue();t pqfirst();void pqinsert(t item,int priority);/插入函數(shù)void pqdele

8、te();/刪除函數(shù)void clearpq();/清除函數(shù)bool pqempty()const;/判斷是否為空bool pqfull()const;/判斷是否已滿int pqlength()const;/判斷隊伍長度;1.2.4 simulation 類 具體的模擬過程實現(xiàn)。#ifndef simulation_class#define simulation_class#include#includeevent.h#includepqueue.h#include time24.hstruct windowstateint finishservicetime;int totalcustome

9、rcount;int totalcustomerwait;int totalservice;int max_wait;class simulationprivate:time24 begin,end;/營業(yè)開始和結束時間int simulationtimelength;int tellerscount;int nextcustomerid;int arrivallow,arrivalhigh;/最小最大到達時間間隔(分鐘)int servicelow,servicehigh;/最小最大服務時間間隔(分鐘)int maxbearwait;/最大耐心等待時間int viprate;/貴賓到達概率i

10、nt totalcustomeraway;/中途離開的顧客數(shù)目windowstate tstat11;windowstate vtstat;/貴賓窗口pqueue pq;int flag;int nextarrivaltime();int getservicetime();int nextavailableteller();public:simulation();void initialization();/各窗口的數(shù)據(jù)初始化void arrivalevent(event e);/到達事件void departureevent(event e);/辦完業(yè)務離開事件void departuree

11、vent2(event e);/中途離開事件void runsimulation();void printsimulation();二:整個系統(tǒng)的設計框架 首先,根據(jù)銀行服務的流程設計好系統(tǒng)的整個模擬運作的框圖。由框圖,劃分好程序所需的幾個類,確定好相應的功能。用vc6.0實現(xiàn)基本功能,分調各內(nèi)容,排除bug,再聯(lián)調。實現(xiàn)了系統(tǒng)的基本功能后,再加上顧客的最大耐心等待時間,vip窗口等功能,進行調試。調試的時候,原代碼保留輸出語句,用來檢驗是否符合邏輯。 本系統(tǒng)關鍵在于處理各類事件,包括了到達事件,中途離開事件,辦完業(yè)務離開事件。由于系統(tǒng)運用事件驅動來模擬,故插入到優(yōu)先級的是各事件。各事件再根據(jù)

12、它們的時間,來排定優(yōu)先級。故重新設計了一個優(yōu)先級隊列。三:本離散事件的描述本離散時間采用的比較簡單類型的隨機離散。模擬過程中,通過輸入最大,最短服務時間,來確定一個顧客的的服務時間,如:servicelow+rand()%(servicehigh-servicelow+1);同樣,采用輸入一個顧客到達的時間間隔范圍來隨機取得一個顧客的到達時間,如:arrivallow+rand()%(arrivalhigh-arrivallow+1)。模擬過程中產(chǎn)生每個顧客的到達和離開事件,所有事件都加上時間戳,然后放到優(yōu)先級隊列中,隊列中優(yōu)先級最高的就是到達或離開最早的事件。由于接受服務的時間的長短不同,故

13、先到達的顧客不一定可以先離開。根據(jù)服務窗口的當前情況,取一個時間最短的窗口分配給該顧客。接著用服務時間隨機變量產(chǎn)生新的服務時間,由顧客的到達時間,等待時間和服務時間就可以確定該顧客的離開時間,再將顧客離開事件插入到隊列。作為優(yōu)先級隊列的隊列成員為事件對象,到達事件和離開事件均為event類的數(shù)據(jù)成員。對每個彈出到達事件,先讀入它是何時到達的,并于各窗口的finishservicetime作比較,如果值大于顧客的到達時間,則需要等待,不然,發(fā)生無需等待這種情況。同時產(chǎn)生下一個顧客的到達時間。調用nextavailableteller()來獲得等待時間最小的窗口號,其中服務窗口的數(shù)量可由系統(tǒng)界面選

14、定;再調用getservicetime()來取得隨機的服務時間,其中服務時間范圍可由系統(tǒng)界面設定。修改windows的窗口信息,產(chǎn)生離開事件。四:實現(xiàn)模擬的過程框圖產(chǎn)生顧客到達事件隨機獲得下一個到達事件下一到達事件是否超出營業(yè)時間結束下一個由窗口狀態(tài)決定顧客的服務窗口號和等待時間服務時間隨機變量采樣該顧客接受服務的時間顧客離開事件到達和離開事件的優(yōu)先級隊列(時間戳)開始營業(yè) 入隊列入隊 列圖1 產(chǎn)生顧客到達和離開事件隊列邏輯顧客到達事件獲取服務窗口號(等待時間最短)隨機變量采樣(所需服務時間)更改該窗口信息1. 完成服務時間2. 累計顧客數(shù)3. 累計等待時間4. 累計服務時間圖2 服務窗口狀態(tài)

15、跟蹤產(chǎn)生第一個事件判斷事件類型計算下次到達時間到達事件該時間 終止時間?y為下一個顧客產(chǎn)生到達事件計算事件服務窗口窗口空閑?y窗口完成時間= 事件發(fā)生時間等待時間= 窗口完成時間-事件發(fā)生時間等待時間超時或模擬時間完y修改窗口屬性數(shù)據(jù):窗口完成時間+= 顧客服務時間窗口服務顧客總數(shù)+總顧客等待時間+= 等待時間總服務時間+= 服務時間顧客離開生成離開事件,加入隊列設置窗口是否空閑獲取下一個事件結束離開事件nnn失敗成功圖3 整個模擬流程五:完整的系統(tǒng)代碼5.1 event.h5.2 d_except.h5.3 time24.h5.4 pqueue.h5.5 simulation.h5.6 ma

16、in.cpp六:本系統(tǒng)運行結果6.1 輸入銀行營業(yè)時間范圍6.2 輸入各參數(shù)6.3 具體執(zhí)行結果6.4 最后執(zhí)行結果七:實驗中遇到的問題及解決方法試驗中,遇到了不少問題,主要有如下:1、 對各種數(shù)據(jù)輸入異常的處理。本實驗中需要輸入不少int類型的數(shù)據(jù)。故在編代碼的時候,需要處理輸入錯誤數(shù)據(jù)的處理。比如時間,一開始只考慮到輸入的8點之類單個字符的數(shù)據(jù)的,所以使用char來讀入,并使用isdigit()來判斷,這使得我后來測試的時候,輸入10:00,11:00之類的數(shù)據(jù)時,系統(tǒng)會出現(xiàn)異常。同樣的錯誤還出現(xiàn)在對其他數(shù)據(jù)的處理上,如:服務時間,到達時間范圍等,剛開始是都用char來讀取,后來換成了string來讀取,解決了這個問題。2、 對優(yōu)先級隊列的編寫。在優(yōu)先級隊列的重寫過程中,有一個插入的函數(shù)。剛開

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論