📄 bank.cpp
字号:
#include"Bank.h"
Bank::Bank()
{
flag=1;
cout<<endl<<"****模拟过程条件的设置*****"<<endl;
cout<<endl<<"请输入银行营业时间长度:"<<endl;
cin>>CloseTime;
}
Bank::Open()
{
TotalTime=0; CustomerNum=0;
cout<<"请输入每个客户办理业务所需最长时间:"<<endl;
cin>>m;
cout<<"请输入两个相邻客户到达的最长时间间隔:"<<endl;
cin>>n;
cout<<endl<<"*********营业模拟过程**********"<<endl;
}
int Bank::MinQueue()
{
int min,order;
min=q[0].length();
order=0;
for(int i=1;i<4;i++)
if(min>q[i].length())
{
min=q[i].length();
order=i;
}
return order;
}
Bank::CustomerArrived(event *en)
{
++CustomerNum;
int DurTime=rand()%m+1; //办理事务所需时间, 1~m;
int InterTime=rand()%n+1;//下一个客户到达的时间间隔, 1~n;
int t=en->OccurTime+InterTime;//下一个客户到达的时间;
if(t>=CloseTime)
flag=0; //银行停止营业标志
else
{
E.OrderInsert(t,0);
int i=MinQueue();
q[i].EnQueue(en->OccurTime,DurTime);
if(q[i].length()==1)
E.OrderInsert(en->OccurTime+DurTime,i+1);
}
for(int i=0;i<4;i++)
{
cout<<"NO."<<i+1<<": ";
q[i].QueuePrint();
}
}
Bank::CustomerDeparture(event *en)
{
int i=en->NType-1;
qnode *qn=q[i].DelQueue();
TotalTime+=en->OccurTime-qn->ArrivalTime;
if(!q[i].IsEmpty())
{
E.OrderInsert(en->OccurTime+q[i].front->Duration,i+1);
}
for(i=0;i<4;i++)
{
cout<<"NO."<<i+1<<": ";
q[i].QueuePrint();
}
}
Bank::Service()
{
while(!E.IsEmpty())
{
//E.EventPrint();
event *en=E.DelEvent();
if(en->NType==0)
{
CustomerArrived(en);
if(flag==0)
break;
}
else
CustomerDeparture(en);
//E.EventPrint();
cout<<endl;
}
}
Bank::Close()
{
cout<<endl<<"银行已停止营业!"<<endl;
cout<<endl<<"********模拟结果********"<<endl;
cout<<"客户逗留总时间: "<<TotalTime<<endl;
cout<<"客户总数: "<<CustomerNum<<endl;
cout<<"每个客户逗留的平均时间: "<<(float)TotalTime/CustomerNum<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -