📄 bank.cpp
字号:
/////////////////////////////////
//输入服务窗口数(小于等于8个)
//程序开始演示
/////////////////////////////////
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <bios.h>
#include "bank/typedef.h"
float Arr=1,Proc=5,t; //Arr=客户到达的平均时间间隔;
//Proc=业务处理的平均时间间隔
//可自行调整
node Node[9];
server S_W[8];
int h=0,m=0,s=0;
int total=0;
customer *Customer;
int win,i,j,q; //win=记录服务窗口数
queue *fd,*td;
float AW,AQ;
//显示数据
void print()
{
clrscr();
for (i=0;i<win;i++)
{
cout<<"Server_"<<i+1<<" : ";
Customer=S_W[i].person;
for (j=S_W[i].num;j>0;j--)
{
printf("%d ",j);
Customer=Customer->next;
}
printf("\n\n");
}
printf("Finished Customer Total: %d \nQueue Length: %f \nCustomer Pause Time: %f ", total, AQ, AW);
printf("\nUsed Time %d:%d:%d",h,m,s);
printf("\n\nPress any key to exit...");
}
//产生客户到达事件
void arrive()
{
Node[8].time=t+random(Arr*2);
Customer=new customer;
Customer->ct=t;
Customer->st=random(Proc*2);
j=S_W[0].num;
for (i=1;i<win;i++)
{
if (j>S_W[i].num) j=S_W[i].num;
}
for (i=0;i<win;i++)
{
if (S_W[i].num==j)
{
Customer->next=S_W[i].person;
S_W[i].person=Customer;
S_W[i].num++;
if (S_W[i].num==1) Node[i].time=t+Customer->st;
break;
}
}
}
//业务处理事件
void process()
{
if (Node[8].time<t) arrive();
for (q=0;q<8;q++)
{
if (Node[q].time<t)
{
if (S_W[q].num!=0)
{
S_W[q].num--;
Customer=S_W[q].person;
S_W[q].person=Customer->next;
Node[q].time=t+Customer->next->st;
td->t=Customer->st;//写入记录最近二十个客户等待时间的循环链表
td=td->next;
total++;
delete Customer;
}
}
}
}
void main()
{
fd=new queue;//创建记录最近二十个客户等待时间的循环链表
fd->t=0;
td=fd;
for (i=0;i<19;i++)
{
td->next=new queue;
td=td->next;
td->t=0;
}
td->next=fd;
clrscr();
do{
printf("Input the window count(<8): ");
scanf("%d",&win);
}while(win>8 || win<0);
//接受用户输入的服务窗口数
clrscr();
randomize();
arrive(); //产生客户到达事件
while(1)
{
AQ=0;//计算平均队长
for (i=0;i<win;i++)
{
AQ+=S_W[i].num;
}
AQ/=win;
AW=0;//计算最近二十个客户的平均等待时间
for (i=0;i<20;i++)
{
AW+=fd->t;
fd=fd->next;
}
AW/=20;
process();
print();
sleep(1);
if(++s>=60)
{
s=0;
if(++m>=60)
{
m=0;
h++;
}
}
if (bioskey(1)!=0)
{
exit(0);
}
t++;
} // 循环处理事件
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -