首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

银行排队系统模拟 C语言,该如何处理

2012-02-21 
银行排队系统模拟C语言假设某银行有n个窗口对外接待客户,从早晨银行开门起不断有客户进入银行,由于每个窗

银行排队系统模拟 C语言
假设某银行有n个窗口对外接待客户,从早晨银行开门起不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进和银行的客户。如果某个窗口的业务员正空闲,则可上前输业务。反之,若个窗口均有客户所占,他便会排在为数最少的队伍后面。编制一个程序模拟银行的这种业务活动并计算一天中客户在银行的平均逗留时间。

[解决办法]
用优先级队列来模拟整个过程,每个客户都需要有到达、离开两次入队操作。

建立一个大小为n的数组,来记录每个窗口(接下来的)的空闲时间,初始化全部赋值为0。
这里我们假设有1、2两个窗口,T(1)=T(2)=0
建立一个(按时间的)优先级队列,初始化为空。
假设银行0时开业,下面举例来说明:
第一个客人于1分钟到达,假设这个客人办理业务需要的时间为10分钟(一般模拟过程中,这个时间是在某个范围内随机生成的)。为该用户分配一个空闲窗口1,同时T(1)=11。此时需要入队:
------------------------
【第1位客人,离开时间11】
------------------------

第二个客人于3分钟时到达,假设这个客人办理业务需要的时间为5分钟。由于T(2)==0<3,说明在这位客人到达时第2号窗口是闲的,那么让他去2号窗口,同时T(2)=3+5=8。然后入队:
-------------------------------------------------
【第2位客人,离开时间8】->【第1位客人,离开时间11】
-------------------------------------------------

第三个客人于4分钟时到达,假设这个客人办理业务需要的时间为6分钟。此时T(1)=11>4,T(2)=8>4,两个窗口都是忙碌的。但由于T(2)<T(3),我们认为2号窗口相对来说轻松一些,让他去2号窗口排队,同时T(2)=T(2)+6=14。然后入队:
--------------------------------------------------------------------------
【第2位客人,离开时间8】->【第1位客人,离开时间11】->【第3位客人,离开时间14】
---------------------------------------------------------------------------
……
整个过程持续下去,一直到关门时间为止。


上面的示例在队列中只记录了离开时间,实际上还可以记录到达时间、在哪个窗口办理等等信息,这样只需要将这个优先级队列依次执行出队操作,就能统计出平均业务受理时间、平均等待时间、哪个窗口工作量多少...

[解决办法]
#include"SqQueue.h"
#include<time.h>
#include<stdio.h>
#include<string.h>
extern int n=1000;
void disp(SqQueue *sq)
{
int i;
if(sq->rear==sq->front)
cout<<"空队列!";
if(sq->rear>sq->front)
for(i=sq->front+1;i<=sq->rear;i++)
cout<<sq->data[i]<<" ";
else
for(i=sq->front+1;i<=sq->rear+QueueSize;i++)
cout<<sq->data[i%QueueSize]<<" ";
cout<<endl;
}

void display(SqQueue &sq)
{
cout<<endl<<endl<<" 中国建设银行"<<endl;
cout<<" China Construction Bank"<<endl;
cout<<" 建行南宁园湖北路支行"<<endl;
cout<<" A"<< n<<endl;
cout<<"您将要办理的是:个人业务存取款"<<endl;
cout<<"和缴费产品,共有"<<(sq.rear-sq.front+QueueSize)%QueueSize<<"人在等待,请您"<<endl;
cout<<"在座位上放心等候,我们会广播通知"<<endl;
cout<<"您!(过号请重新取号,谢谢您的合作,"<<endl;
cout<<"欢迎您的光临!)\n排队开始时间:\r"<<endl;

time_t a; 
time(&a);
puts(ctime(&a));
cout<<endl;
}

void BankQueue()
{
SqQueue sq;
char ch;
InitQueue(sq);
while(1)
{
cout<<"输入命令:";
cin>>ch;
switch(ch)
{

case'y':
case'Y':
n++;
EnQueue(sq,n);
display(sq);
break;
case's':
case'S':
cout<<"排队的顾客为:"<<endl;
disp(&sq);
break;
}

if(ch=='Q' || ch=='q')
break;
}
}



void main()
{
cout<<" ***********************************"<<endl;
cout<<" * *"<<endl;
cout<<" * 中国建设银行排队系统 *"<<endl;
cout<<" * *"<<endl;
cout<<" * Y/y:排队 S/s:显示队列 Q/q:退出 *"<<endl;
cout<<" * *"<<endl;
cout<<" ***********************************"<<endl;
BankQueue();
}
不用谢我的...

热点排行