生活随笔
收集整理的這篇文章主要介紹了
数据结构银行叫号系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構銀行叫號系統
針對前輩的銀行叫號系統有bug,并不能完美實現叫號操作,晚輩提出一點修改意見,如有不對,希望指正!
先貼上前輩代碼連接
https://blog.csdn.net/sinat_40306833/article/details/78665408
小輩在學習過程中 發現前輩代碼不能實現預期目標:
******************************銀行叫號系統
問題描述:模擬銀行叫號系統,當客戶到達銀行的時候 ,取號,顯示當前客戶號,以及正在等待的客戶人數;
當有窗口 空閑的時,若有等待的客戶,則顯示信息:請XXXX號客戶到窗口辦理 。
測試數據:假設有一個窗口,前后共有6個客戶。
系統效果:1、客戶到達,取號
2、有窗口空閑,叫號
3、退出系統
實現貼士:用隊列 可以是順序的也可以是鏈式的
選用沒有頭結點的鏈式隊列
下面插入前輩源代碼
#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<<"請第"<<bank.iHead<<"號客戶到窗口辦理!"<<endl;
cout<<"請第"<<count<<"號客戶到窗口辦理!"<<endl;
}
else{
cout<<"隊列中已沒有客戶!"<<endl;
}
}
if(number == 3)
exit(0);
}return 0;
}
在小輩學習過程中
發現不能實現2的功能 因此對前輩代碼進行了更正,避免后人踩坑
一:
對類中的int m_iHead; //隊頭 聲明為public類型;方便以后調用
二:
在主函數中進行輸出時候,把cout<<count<<endl;改為cout<<bank.m_iHead<<endl;這樣便可以實現柜臺叫號的目的。
注:由于小輩剛剛上csdn博客,第一次發表文章,如有不對,歡迎各位前輩進行指正,感激不盡。
總結
以上是生活随笔為你收集整理的数据结构银行叫号系统的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。