資源簡介
我學數據結構的時候的大作業
離散事件模擬
附上代碼帶注釋
還有詳細的實驗報告和實驗要求
還有visio的流程圖文件也在里面
還有我第一次錯誤的思路的代碼也附上 方便讀者理解

代碼片段和文件信息
/**
*????????----------------------銀行系統模擬---------------------
*???????
*????????Desinged?by?wankaiming
*????????
*
*
*
*/
#include
#include
#include
#include
#define?random(x)?(rand()%x)???//產生隨機數
using?namespace?std;
//--------事件類
class?Event{
public:
??int?time;//事件發生時間單位是秒如果在離開隊列就是離開時候的時間
??int??customerId;//顧客號
??int??windowId;//服務窗口
??int??waittime;//等待時間
??int?servetime;//服務時間
??Event(){
?????time=0;??
?customerId=0;
?????windowId=0;
??waittime=0;
??servetime=0;
??}
????friend?bool?operator?(Event?a?Event?b)
????{
????????return?a.time>?b.time;?//結構體中,x小的優先級高
????}
};
//-----------服務窗口類
class?ServiceWin{
public:
???int?id;
???bool?state;??//1表示可以接收服務?0表示不能接收服務
???double?efficiency;?//工作效率
???double?totalwait;?//總等待時間
???double?customerSum;//總顧客數
???double?avgWait;??//平均等待時間
???double?totalserve;
???int?canServe;??//最早服務時間
???ServiceWin(){
?state=true;
?????canServe=0;
?totalwait=0;
?customerSum=0;
?avgWait=0;
?efficiency=0;
?totalserve=0;
???}
};
//打印窗口信息
void?printInfo(ServiceWin?s[]Event?e){
?cout<<“==========================================================================“< ?cout<<“***??各窗口最早服務時間如下“< ?for(int?i=0;i<4;i++){??//?如果最早可服務時間早于顧客到達事件的時間,則將最早可服務時間調整到當前時間
if(s[i].canServe ??????????????????cout<<“***??窗口“< ??s[i].canServe=e.time;?//設為顧客到達事件的時間
}
else{
??cout<<“***??窗口“< }
?}
?????????cout<<“===========================================================================“<
}
//判斷是否有窗口空閑?返回值小于4,則返回空閑的窗口號,若等于4表示沒有空閑窗口
int?judge(ServiceWin?s[]){
int?i=0;
???for(i=0;i<4;i++){
?if(s[i].state==true){
break;???//窗口i是空閑窗口
?}
}
???return?i;
}
//初始化到達隊列,將所有的達到事件加入到到達事件隊列
priority_queue??InitArriveQueue(int?eventnumint?len){
???srand((int)time(0));
???priority_queue?q;
???for(int?i=0;i(len*eventnum)?;i++){???//len*eventnum是模擬系統中產生的總事件數
???????Event?e;//記錄到達事件
???e.customerId=i;
???e.servetime=random(30)*60;???//假設每次產生隨機的服務時間再30分以內
???????e.time=random(60)*60+(i/eventnum)*3600;??????//(i%eventnum)*3600當超過每小時發生的到達事件數的時候加1小時,保證頻率
???q.push(e);
???}
?
???return?q;
}
void?freeWin(priority_queue?&departEvent?&dServiceWin?s[]){
cout<<“顧客號為“< cout<<“服務窗口號為:“< s[d.windowId].state=true;
cout<
}
void?changeWinTime(ServiceWin?s[]int?currenttime){
for(int?i=0;i<4;i++){
???if(s[i].canServe }
}
//到空閑窗口服務?加入離開隊列?設定時間戳
void?gotoWin(int?judgecountpriority_queue?&departEvent?&eServiceWin?s[]){
???int?i=judgecount;
???????????in
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????307911??2012-05-01?09:39??數據結構大作業\Debug\main.obj
?????文件?????244147??2012-05-01?13:12??數據結構大作業\Debug\mymain.obj
?????文件??????99328??2012-05-01?13:19??數據結構大作業\Debug\vc60.idb
?????文件?????143360??2012-05-01?13:12??數據結構大作業\Debug\vc60.pdb
?????文件?????536701??2012-05-01?13:12??數據結構大作業\Debug\數據結構大作業.exe
?????文件?????800112??2012-05-01?13:12??數據結構大作業\Debug\數據結構大作業.ilk
?????文件????3108044??2012-05-01?12:13??數據結構大作業\Debug\數據結構大作業.pch
?????文件????1123328??2012-05-01?13:12??數據結構大作業\Debug\數據結構大作業.pdb
?????文件???????7767??2012-06-15?12:17??數據結構大作業\mymain.cpp
?????文件???????4366??2012-05-01?10:24??數據結構大作業\數據結構大作業.dsp
?????文件????????553??2012-04-29?18:21??數據結構大作業\數據結構大作業.dsw
?????文件??????41984??2012-05-01?13:20??數據結構大作業\數據結構大作業.ncb
?????文件??????49664??2012-05-01?13:20??數據結構大作業\數據結構大作業.opt
?????文件????????921??2012-05-01?13:12??數據結構大作業\數據結構大作業.plg
?????文件???????7961??2012-06-15?12:17??main(一開始的錯誤代碼).txt
?????文件??????64000??2012-04-30?23:38??錯誤流程圖.vsd
?????文件??????69120??2012-05-01?12:58??數據結構大作業.vsd
?????文件?????233984??2012-06-15?12:18??數據結構大作業wankaiming.doc
?????目錄??????????0??2012-05-01?13:21??數據結構大作業\Debug
?????目錄??????????0??2012-05-01?13:20??數據結構大作業
????.......?????50176??2002-04-28?13:05??數據結構大型實驗題目-2011.doc
-----------?---------??----------?-----??----
??????????????6893427????????????????????21
評論
共有 條評論