




全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù) 據(jù) 結(jié) 構(gòu) 實(shí)驗(yàn)報告學(xué) 號姓 名年 級班級填實(shí)際班級機(jī)號:學(xué)院機(jī)房時 間指導(dǎo)教師張磊一、實(shí)驗(yàn)題目:銀行業(yè)務(wù)模擬系統(tǒng)的設(shè)計與實(shí)現(xiàn) (該實(shí)驗(yàn)為綜合性實(shí)驗(yàn),共用6個學(xué)時)二、實(shí)驗(yàn)要求:1 問題描述:假設(shè)某銀行有四個窗口對外接待客戶,從早晨銀行開門起不斷有客戶進(jìn)入銀行。由于每個窗口在某個時刻只能接待一個客戶,因此在客戶人數(shù)眾多時需在每個窗口前順次排隊(duì),對于剛進(jìn)入銀行的客戶,如果某個窗口的業(yè)務(wù)員正空閑,則可上前辦理業(yè)務(wù),反之,若四個窗口均有客戶所占,他便會排在人數(shù)最少的隊(duì)伍后面?,F(xiàn)在需要編制程序以模擬銀行的這種業(yè)務(wù)活動并計算一天中客戶在銀行逗留的平均時間。2一個完整的系統(tǒng)應(yīng)具有以下功能:1)初始化(OpenForDay),模擬銀行開門時各數(shù)據(jù)結(jié)構(gòu)的狀態(tài)。2) 事件驅(qū)動(EventDrived), 對客戶到達(dá)和離開事件做相應(yīng)處理。3) 下班處理(CloseForDay), 模擬銀行關(guān)門時的動作,統(tǒng)計客戶平均逗留時間 。備注:假設(shè)銀行開門的時刻(間)設(shè)為0 , 銀行每天營業(yè)的時間在程序運(yùn)行時輸入(例如480分鐘)。每個客戶辦理業(yè)務(wù)的時間不超過30分鐘,兩個相鄰客戶到達(dá)銀行的時間間隔不超過5分鐘要求程序執(zhí)行時,只要給出銀行每天的營業(yè)時間即可輸出客戶平均逗留的時間。三、總的設(shè)計思想、環(huán)境語言、工具等總的設(shè)計思想:為了計算這個平均的逗留時間,自然需要知道每個客戶到達(dá)銀行和離開銀行這兩個時刻,后者減去前者即為每個客戶在銀行的逗留時間。所有客戶逗留時間的總和被一天內(nèi)進(jìn)入銀行的客戶數(shù)除便是所求的平均時間。稱客戶到達(dá)銀行和離開銀行這兩個時間發(fā)生的事情為“事件”,則整個模擬程序?qū)词录南群箜樞蜻M(jìn)行處理。這樣一種程序稱做事件驅(qū)動模擬。下面是上述銀行客戶的離散事件驅(qū)動的模擬算法。 void Bank_Simulation( int CloseTime ) / OpenForDay ( ); /初始化,模擬銀行開門時各數(shù)據(jù)結(jié)構(gòu)的狀態(tài)。 while(有要處理的事件時) /有事件可處理 EventDrived ; /事件驅(qū)動,從事件表中取出事件en;/根據(jù)en的類型(客戶到達(dá)事件或客戶離開事件)做相應(yīng)的處理 if(en表示客戶到達(dá)) CustomerArrived( );/ 處理客戶到達(dá)事件 else CustomerDeparture( ) ;/ 處理客戶離開事件 /while CloseForDay( );/計算客戶的平均逗留時間/ Bank_Simulation 環(huán)境語言:Windows下的Microsoft VC+四、數(shù)據(jù)結(jié)構(gòu)與模塊說明下面是模擬程序中需要的數(shù)據(jù)結(jié)構(gòu)及其操作。1模擬算法的主要處理對象是“事件”,事件的主要信息是事件的類型和事件的發(fā)生時刻。算法中處理的事件有兩類:一類是客戶到達(dá)事件;另一類是客戶離開事件。前一類事件發(fā)生的時刻隨客戶的到來自然形成;后一類事件發(fā)生的時刻由客戶辦理業(yè)務(wù)所需時間和等待時間而定。由于程序驅(qū)動是按事件發(fā)生時刻的先后順序進(jìn)行的,所以事件表應(yīng)是有序表,其主要操作是插入和刪除事件,用一個單鏈表表示!2模擬程序中需要的另一數(shù)據(jù)結(jié)構(gòu)是表示客戶排隊(duì)的隊(duì)列,由于假設(shè)銀行有4個窗口,因此程序中需要4個隊(duì)列,隊(duì)列中有關(guān)客戶的信息是客戶到達(dá)的時刻和客戶辦理業(yè)務(wù)所需要的時間。每個隊(duì)列中的隊(duì)頭客戶即為正在窗口辦理事務(wù)的客戶,他辦完業(yè)務(wù)離開隊(duì)列的時刻就是即將發(fā)生的客戶離開事件的時刻,這就是說,對每個隊(duì)頭客戶都存在一個將要驅(qū)動的客戶離開事件。因此在任何時刻即將發(fā)生的事伯只有5種可能:1)新的客戶到達(dá);2)1號窗口的客戶離開;3)2號窗口的客戶離開;4)3號窗口的客戶離開;5)4號窗口的客戶離開;注:為了使編寫的程序具有通用性,在編程序時將銀行的營業(yè)時間、開的窗口數(shù)、客戶辦業(yè)業(yè)務(wù)的最長時間及兩個客戶到達(dá)的時間間隔都設(shè)置成程序運(yùn)行時動態(tài)輸入,這樣可以對程序以及銀開設(shè)的窗口的合理性進(jìn)行分析,實(shí)現(xiàn)真正的模擬。從以上分析可知,在模擬程序中只需要兩種數(shù)據(jù)結(jié)構(gòu):有序鏈表和隊(duì)列。程序中用到的頭文件、類型定義及主要的函數(shù)原型如下:#includestdio.h#includemalloc.h#includemath.h#includestdlib.hint Cks=4; / 銀行辦理業(yè)務(wù)的窗口數(shù),默認(rèn)值為:4;最大值不超過20;int Qu ; / 客戶隊(duì)列數(shù)Qu=Cksint Khjg=5; / 兩相鄰到達(dá)客戶的時間間隔最大值,默認(rèn)值為:5int Blsj=30; / 每個客戶辦理業(yè)務(wù)的時間最大值,默認(rèn)值為:30typedef struct / 定義事件的元素類型ElemType為結(jié)構(gòu)體類型 int OccurTime; / 事件發(fā)生時刻 int NType; / 事件類型,Qu表示到達(dá)事件,0至Qu-1表示Qu個窗口的離開事件 Event,ElemType; / 事件類型,有序鏈表LinkList的數(shù)據(jù)元素類型typedef struct LNode /定義事件表的結(jié)點(diǎn)類型 ElemType data ;struct LNode *next; LNode, *LinkList; typedef LinkList EventList; / 事件鏈表類型,定義為有序鏈表typedef struct /定義客戶隊(duì)列的元素類型 int ArrivalTime; / 到達(dá)時刻 int Duration; / 辦理事務(wù)所需時間 QElemType; / 定義QElemType(隊(duì)列的數(shù)據(jù)元素類型)為結(jié)構(gòu)體類型;typedef struct QNode /定義客戶隊(duì)列的結(jié)點(diǎn)類型 QElemType data ;struct QNode *next; QNode, *Queue; typedef struct Queue head; Queue tail; LinkQueue;LinkQueue qQu+1; / Qu個客戶隊(duì)列void OpenForDay(); /模擬銀行開門的動作,即初始化操作 void CustomerArrived() / 處理客戶到達(dá)事件void CustomerDeparture() / 處理客戶離開事件五、主要算法的設(shè)計與實(shí)現(xiàn)void OpenForDay() /模擬銀行開門的動作,即初始化操作 int i; InitList(ev); / 初始化事件鏈表為空 en.OccurTime=0; / 設(shè)定第一個客戶到達(dá)事件 en.NType=0; / 客戶到達(dá)事件 Insert_EventList(ev, en);/插入事件 q=(LinkQueue*)malloc(Qu+1)*sizeof(LinkQueue);/為隊(duì)列申請Qu+1個隊(duì)頭指針,第0個不用 for(i=1;iQu+1;+i) / 置空隊(duì)列 InitQueue(qi); void CustomerArrived() / 處理客戶到達(dá)事件 QElemType f; int durtime,intertime,i; +CustomerNum; Random(durtime,intertime); / 生成隨機(jī)數(shù) /printf(%d %dn,durtime,intertime); et.OccurTime=en.OccurTime+intertime; / 下一客戶到達(dá)時刻 et.NType=0; / 隊(duì)列中只有一個客戶到達(dá)事件 /printf(%d %dn,et.NType,et.OccurTime); if(et.OccurTimeCloseTime) / 銀行尚未關(guān)門,插入事件表 Insert_EventList(ev,et); i=Minimum(q); / 求長度最短隊(duì)列的序號,等長為最小的序號 f.ArrivalTime=en.OccurTime; f.Duration=durtime; EnQueue(qi,f); if(QueueLength(qi)=1) et.OccurTime=en.OccurTime+durtime; et.NType=i; Insert_EventList(ev,et); / 設(shè)定第i隊(duì)列的一個離開事件并插入事件表 void CustomerDeparture() / 處理客戶離開事件,en.NTyPe!=0 int i; i=en.NType; DelQueue(qi,customer); / 刪除第i隊(duì)列的排頭客戶 TotalTime+=en.OccurTime-customer.ArrivalTime; / 累計客戶逗留時間 if(!QueueEmpty(qi) / 設(shè)定第i隊(duì)列的一個離開事件并插入事件表 GetHead_q(qi,customer); et.OccurTime=en.OccurTime+customer.Duration; et.NType=i; Insert_EventList(ev,et); void Bank_Simulation() int i; OpenForDay( ); / 初始化 while(!ListEmpty(ev) /output_ev(ev); /for(i=1;iQU+1;i+) output_q(qi); /getchar();/為觀察執(zhí)行結(jié)果用 Gethead(ev,en); /printf(事件%d %dn ,en.NType,en.OccurTime); if(en.NType=0) CustomerArrived(); / 處理客戶到達(dá)事件 else CustomerDeparture(); / 處理客戶離開事件 / 計算并輸出平均逗留時間 printf(顧客總數(shù):%d, 所有顧客共耗時:%d分鐘, 平均每人耗時: %d分鐘n,CustomerNum,TotalTime,TotalTime/CustomerNum); 六、源程序 見電子稿(文件名為: .cpp ); /文件名由自己取七、運(yùn)行結(jié)果請輸入銀行營業(yè)時間長度(單位:分)CloseTime=480請輸入銀行辦理業(yè)務(wù)所開窗口數(shù)Cks=4請輸入客戶辦理業(yè)務(wù)的最長時間Blsj=30請輸入兩個相鄰客戶到達(dá)銀行的時間間隔的最大值Khjg=5顧客總數(shù):154, 所有顧客共耗時:11303分鐘, 平均每人耗時: 73分鐘Press any key to continue請輸入銀行營業(yè)時間長度(單位:分)CloseTime=480請輸入銀行辦理業(yè)務(wù)所開窗口數(shù)Cks=5請輸入客戶辦理業(yè)務(wù)的最長時間Blsj=30請輸入兩個相鄰客戶到達(dá)銀行的時間間隔的最大值Khjg=5顧客總數(shù):154, 所有顧客共耗時:3854分鐘, 平均每人耗時: 25分鐘Press any key to continue請輸入銀行營業(yè)時間長度(單位:分)CloseTime=480請輸入銀行辦理業(yè)務(wù)所開窗口數(shù)Cks=6請輸入客戶辦理業(yè)務(wù)的最長時間Blsj=30請輸入兩個相鄰客戶到達(dá)銀行的時間間隔的最大值Khjg=5顧客總數(shù):154, 所有顧客共耗時:2705分鐘, 平均每人耗時: 17分鐘請輸入銀行營業(yè)時間長度(單位:分)CloseTime=480請輸入銀行辦理業(yè)務(wù)所開窗口數(shù)Cks=4請輸入客戶辦理業(yè)務(wù)的最長時間Blsj=15請輸入兩個相鄰客戶到達(dá)銀行的時間間隔的最大值Khjg=5顧客總數(shù):154, 所有顧客共耗時:1181分鐘, 平均每人耗時: 7分鐘 從運(yùn)行結(jié)果看,銀行設(shè)置6個窗口比較合適!八、自我評析與總結(jié)該實(shí)驗(yàn)做得比較成功,例如在編寫調(diào)試程序時,并不是僅僅把目標(biāo)局限在編譯通過,執(zhí)行有結(jié)果上。除了為了完成任務(wù)的模塊外,另有測試事件表的函數(shù)output_ev和各窗口隊(duì)列狀態(tài)的函數(shù)output_q;在適當(dāng)?shù)牡胤秸{(diào)用它們,運(yùn)行時可以看到事件表和窗口隊(duì)列的狀態(tài),用來判斷編寫程序的正確性;當(dāng)運(yùn)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校招英語面試題目及答案
- 校招項(xiàng)目運(yùn)營崗面試題目及答案
- 校招入職測試題庫及答案
- 高端電動汽車品牌F銷售與品牌形象維護(hù)合同
- 基于水凝膠納米結(jié)構(gòu)的動態(tài)光學(xué)調(diào)控及其應(yīng)用研究
- HIIT、RT、RT+NMES運(yùn)動對久坐人群體成分、肌力和運(yùn)動能力的影響研究
- Er偏析對γ-Al-γ-Al3Sc相界穩(wěn)定性及力學(xué)性能的影響
- 基于灌草根系行為的根土復(fù)合體力學(xué)特性研究
- 從失敗中總結(jié)經(jīng)驗(yàn)的工作計劃
- 倉庫供應(yīng)商關(guān)系管理的總結(jié)計劃
- 信息系統(tǒng)項(xiàng)目管理師論文8篇
- 北京中考英語詞匯表(1600詞匯)
- (完整版)重大危險源清單及辨識表
- 超市消防監(jiān)控系統(tǒng)設(shè)計
- 新工科的建設(shè)和發(fā)展思考ppt培訓(xùn)課件
- 封樣管理規(guī)定
- 黃腐酸鉀項(xiàng)目可行性研究報告-用于立項(xiàng)備案
- 管理人員責(zé)任追究制度
- 自動旋轉(zhuǎn)門PLC控制
- 電影場記表(雙機(jī)位)
- 畢設(shè)高密電法探測及數(shù)據(jù)處理解釋
評論
0/150
提交評論