【c++实现】模拟银行叫号系统
/********************編譯環境是codeblocks*******************/
/*銀行叫號系統
問題描述:模擬銀行叫號系統,當客戶到達銀行的時候 ,取號,顯示當前客戶號,以及正在等待的客戶人數;? ? ? ? ? 當有窗口 空閑的時,若有等待的客戶,則顯示信息:請XXXX號客戶到窗口辦理 。
測試數據:假設有一個窗口,前后共有6個客戶。
系統效果:1、客戶到達,取號
?2、有窗口空閑,叫號
?3、退出系統
實現貼士:用隊列 ?可以是順序的也可以是鏈式的
選用沒有頭結點的鏈式隊列
*/
/*問題總結+代碼*/
? ? ? ? ? ? ? /*****************head文件********************/
#include<iostream>using namespace std;
? struct QNode{
char id;//當前的號碼
QNode *next;//指向下一個節點
};
class LoopQueue{
private:
QNode *head;//指向的指針
QNode *rear;//指向尾部的指針
int length;//長度 ? ?用于取號的時候
public:
void init();
void EnQueue(char n);//入隊
bool DeQueue(QNode &e);//出隊
void add(QNode *p);
void removenode();
//void tranverse();//遍歷
// bool SetEmpty(); ?//置空
int getLength();
QNode * gethead(){
return head;
}
};
//沒有頭結點
//初始化
void LoopQueue::init(){
head=NULL; rear=NULL;
length=0;
}
//入隊
void LoopQueue::add(QNode *e){
? ? /*
? ? ? ? ? ? 之前運行不出來的原因就是:
? ? ? ? ? ? 在空隊列的時候 ? 插入操作 和 ?有元素的操作不一樣
? ? */
? ? ?QNode *p=e;//讓指針p指向e;等待接入節點
? ? if(length==0){//空隊列
? ? ? ? head=p;
? ? ? ? rear=p;length++;
? ? }else{
? ? ? ? ?rear->next=p;
? ? ? ? rear=rear->next;//rear 移動到新接入的節點上
? ? ? ? length++;
? ? }
}
void LoopQueue::EnQueue(char n){//改一改自己的風格,傳個節點吧!!!娜娜棒棒的
QNode *p=new QNode;
p->id=n;//傳入的值作為 ?節點p的id值 ? 封裝好數據
add(p);
}
//出隊
bool LoopQueue::DeQueue(QNode &e){//e是要取值的節點
if(length==0){//空
return false;
}
e.id=head->id;//叫號時候的號碼 ?用e把他傳出來
QNode *p=head;//再用一個指針 ?指向頭 ?準備釋放掉這個節點
head=head->next;//移動head這個指針
return true;
}
void LoopQueue::removenode(){
? ? if(length==0){
? ? ? ? ? ? cout<<"沒有了!!!"<<endl;
? ? }
? ? ? ? QNode *p = head;
? ? ? ? head=p->next;//移動head
? ? ? ? delete p;
? ? ? ? length--;
}
?int ?LoopQueue::getLength(){
? return length;
?}
? ?/***********************main文件****************************/
#include "BankHead.h"
int main(){
int a,i=1;
QNode e;
LoopQueue queue;
queue.init();//初始化
cout<<"請選擇:\n1、歡迎光臨!請排隊取號,等候叫號!"<<endl
? ? ? ? <<"2、服務號空閑,開始叫號" <<endl
? ? ? ? <<"3、服務結束!退出系統!"<<endl;
while(cin>>a){
? ? ? ? switch(a){
? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? queue.EnQueue(i++);
cout<<"歡迎光臨!"<<"綜合業務"<<endl
<<"您的號碼是"<<i-1<<endl
//<<"您的號碼是"<<queue.getLength()<<endl
<<"您前面有"<<queue.getLength()-1<<"人等候"<<endl;break;
? ? ? ? ? ? case 2:
? ? ? ? ? ? ? ? if(queue.DeQueue(e)){
? ? ? ? ? ? ? ? ? ? cout<<"請"<<e.id<<"號客戶到窗口辦理!"<<endl;
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? cout<<"效率不錯!所有客戶問題解決完畢!\n你可以稍稍休息一下\n";
? ? ? ? ? ? ? ? }break;
? ? ? ? ? ? case 3:cout<<"小娜娜,期待您下次光臨哈!"<<endl;break;
? ? ? ? }
}
return 0;
}
/*************************結束*******************************/
總結
以上是生活随笔為你收集整理的【c++实现】模拟银行叫号系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android系统充电系统介绍-预防手机
- 下一篇: 内存屏障,先看这篇文章