问题描述
假设银行有K个窗口提供服务,从早晨银行开门(开门9:00am,关门5:00pm)起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,对于刚进入银行的客户(建议:客户进入时间使用随机函数产生),首先前往取号机取服务序号,取号机会自动打印出一张服务单。单上显示服务号及该服务号前面正在等待的人数。当银行职员服务完一个客户后,只需按呼叫相应键,即可自动呼叫下一位客户。
基本要求
(1)编制一个程序模拟银行这种业务活动。
(2)计算一天中N个客户在银行的平均等待时间,最长等待时间,最后完成时间,并且统计每个窗口服务了多少顾客。
(3)建议有如下设置:
a)客户到达的时间随机,一天的人数设定为N人。
b)银行业务员处理时间随机产生。
代码实现
#include<iostream>
#include <stdlib.h>
#include <time.h>
#include<windows.h>
using namespace std;
int K,N; //定义银行服务窗口个数和一天的客户人数
//欢迎界面函数
void welcom(){
cout<<"*****************************欢迎光临山大银行****************************"<<endl;
cout<<"银行的营业时间为 9:00 -17:00,请您注意安排自己的时间,欢迎您的再次到来!"<<endl;
}
//定义链表节点
template<class T>
struct chainNode
{
//数据成员
T element;
chainNode<T> *next;
//方法
chainNode(){}
chainNode(const T& element){
this->element=element;
}
chainNode(const T& element,chainNode<T> *next){
this->element=element;
this->next=next;
}
};
//定义队列
template<class T>
class queue{
public:
queue(); //初始化队列
~queue(){}; //析构函数
bool empty(){ //判断队列是否为空
return queueSize==0;
}
int size(){ //返回队列中元素的个数
return queueSize;
}
T& front(){ //返回队列首元素
return queueFront->element;
}
T& back(){ //返回队列尾元素
return queueBack->element;
}
chainNode<T> * begin(){
return queueFront;
}
void pop(); //删除首元素
void push(const T& theElement);
private:
int queueSize; //队列长度
chainNode<T> *queueFront; //指向队列第一个元素的指针
chainNode<T> *queueBack; //指向队列最后一个元素的指针
};
template<class T>
queue<T>::queue(){
queueFront=queueBack=NULL;
queueSize=0;
}
template<class T>
void queue<T>::pop(){
if(queueFront==NULL) {
cout<<"you queue is empty!";
return;
}
chainNode<T&