银行排队叫号系统

/*

*模拟银行叫号系统:当客户到达银行时,先取号,显示当前的客户号,以及正在等待的客户人数;

*当有窗口空闲时,若有等待客户,则显示信息:请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;
}

  • 6
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值