📄 bank.h
字号:
//Produce by George Lee Feb. 28th, 2002
#if !defined(_INC_BANK_OO)
#define _INC_BANK_OO
#include "d:\vc_h_file\Dllist.h"
#include "d:\vc_h_file\Lqueue.h"
//--------------------------//
// //
// 银行事件类 //
// //
//--------------------------//
class Event
{
public:
int occurtime;//事件发生时间
int ntype;//类型: -1 — 到达;0,1,2,3 — 服务窗口
int operator==(Event a) {return(occurtime==a.occurtime);}
int operator<=(Event a) {return(occurtime<=a.occurtime);}
int operator<(Event a) {return(occurtime<a.occurtime);}
int operator>=(Event a) {return(occurtime>=a.occurtime);}
int operator>(Event a) {return(occurtime>a.occurtime);}
};
typedef struct
{
int arrivaltime;//到达时刻
int servicetime;//服务时间
}Service;
//--------------------------//
// //
// 银行事件驱动模拟类 //
// //
//--------------------------//
class Bank
{
public:
DLList<Event> L;
LQueue<Service> Q[4];
int totaltime,cusnum,closetime;
Bank(int close=20);
~Bank();
int Empty();
Event Customer(); //提取事件列表的首结点
void CustomerArrived(Event en,int servicetime,int intertime);
void CustomerDeparture(Event en);
};
Bank::Bank(int close)
{
Event en;
en.occurtime=0;
en.ntype=-1;
L.Insert(en);
totaltime=0;
cusnum=0;
closetime=close;
}
Bank::~Bank()
{
}
int Bank::Empty()
{
if(L.Empty())
return(1);
return(0);
}
Event Bank::Customer()
{
Event en;
en=L.GetData(0);
L.Delete(0);
return(en);
}
void Bank::CustomerArrived(Event en,int servicetime,int intertime)
{
int i,min;
Service cn;
Event en1;
if(en.occurtime+intertime<=closetime)
{
en1.occurtime=en.occurtime+intertime;
en1.ntype=-1;
L.Insert(en1);
}
min=0;
for(i=1;i<4;i++)
if(Q[min].Size()>Q[i].Size())
min=i;
cn.arrivaltime=en.occurtime;
cn.servicetime=servicetime;
Q[min].Insert(cn);
cusnum++;
if(Q[min].Size()==1)
{
en1.occurtime=en.occurtime+servicetime;
en1.ntype=min;
L.Insert(en1);
}
}
void Bank::CustomerDeparture(Event en)
{
int i;
Service cn;
Event en1;
i=en.ntype;
cn=Q[i].GetData();
Q[i].Delete();
totaltime=totaltime+(en.occurtime-cn.arrivaltime);
if(!Q[i].Empty())
{
cn=Q[i].GetData();
en1.occurtime=en.occurtime+cn.servicetime;
en1.ntype=i;
L.Insert(en1);
}
}
#endif // _INC_BANK_OO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -