/*
*模拟银行叫号系统:当客户到达银行时,先取号,显示当前的客户号,以及正在等待的客户人数;
*当有窗口空闲时,若有等待客户,则显示信息:请XXXX号客户到窗口办理。
*使用顺序队列或链式队列实现该系统
*测试数据:假设有一个窗口,前后共6个客户。
*/
bank.h
#include <iostream>
using namespace std;
struct Customers{
int m_iId;
};
class Bank{
public:
Bank(int queueCapacity); //创建队列
bool QueueEmpty(); //判空队列
bool QueueFull(); //判满函数
int QueueLength(); //队列长度
bool EnQueue(Customers customer); //新元素入队
bool DeQueue(Customers &customer); //首元素出队
void QueueTraverse(); //遍历队列
private:
Customers *m_pQueue; //队列数组指针
int m_iQueueLen; //队列元素个数
int m_iQueueCapacity; //队列数组容量
int m_iHead; //队头
int m_iTail; //队尾
};
Bank::Bank(int queueCapacity){
m_iQueueCapacity = queueCapacity; //队列的总容量,赋值给队列数组容量
m_iHead = 0; //队头初始化
m_iTail = 0; //队尾初始化
m_iQueueLen = 0; //队列元素个数初始化
m_pQueue = new Customers[m_iQueueCapacity]; //给数组申请内存,并且从堆中申请内存
}
bool Bank::QueueEmpty(){
return m_iQueueLen ==0 ? true:false;
}
bool Bank::QueueFull(){
return m_iQueueLen == m_iQueueCapacity ? true:false;
}
int Bank::QueueLength(){
return m_iQueueLen;
}
bool Bank::EnQueue(Customers customer){
if(QueueFull())
return false;
else {
m_pQueue[m_iTail] = customer;
m_iTail++;
m_iTail = m_iTail%m_iQueueCapacity;
m_iQueueLen++;
return true;
}
}
bool Bank::DeQueue(Customers &customer){
if(QueueEmpty())
return false;
else{
customer = m_pQueue[m_iHead];
m_iHead++;
m_iHead = m_iHead%m_iQueueCapacity;
m_iQueueLen--;
return true;
}
}
void Bank::QueueTraverse(){
for(int i=m_iHead;i<m_iQueueLen + m_iHead;i++){
cout<<m_pQueue[i % m_iQueueCapacity].m_iId<<endl;
}
}
demo.cpp
#include <iostream>
#include "bank.h"
using namespace std;
int main(){
Bank bank(10);
Customers customer;
int count = 1;
cout<<"欢迎使用银行叫号系统"<<endl;
cout<<"1.有新客户到达,取号"<<endl;
cout<<"2.有窗口空闲,叫号"<<endl;
cout<<"3.退出系统"<<endl;
int number;
while(true){
cin>>number;
if(number == 1){
if(bank.EnQueue(customer)){
cout<<"您的id是"<<count<<",前面还有"<<bank.QueueLength()-1<<"人在排队!"<<endl;
count++;
}
else{
cout<<"取号失败!"<<endl;
}
}
if(number == 2){
if(bank.DeQueue(customer)){
count--;
cout<<"请第"<<count<<"号客户到窗口办理!"<<endl;
}
else{
cout<<"队列中已没有客户!"<<endl;
}
}
if(number == 3)
exit(0);
}
return 0;
}