生活随笔
收集整理的這篇文章主要介紹了
数据结构银行叫号系统
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
數(shù)據(jù)結(jié)構(gòu)銀行叫號系統(tǒng)
針對前輩的銀行叫號系統(tǒng)有bug,并不能完美實現(xiàn)叫號操作,晚輩提出一點修改意見,如有不對,希望指正!
先貼上前輩代碼連接
https://blog.csdn.net/sinat_40306833/article/details/78665408
小輩在學(xué)習(xí)過程中 發(fā)現(xiàn)前輩代碼不能實現(xiàn)預(yù)期目標(biāo):
******************************銀行叫號系統(tǒng)
問題描述:模擬銀行叫號系統(tǒng),當(dāng)客戶到達(dá)銀行的時候 ,取號,顯示當(dāng)前客戶號,以及正在等待的客戶人數(shù);
當(dāng)有窗口 空閑的時,若有等待的客戶,則顯示信息:請XXXX號客戶到窗口辦理 。
測試數(shù)據(jù):假設(shè)有一個窗口,前后共有6個客戶。
系統(tǒng)效果:1、客戶到達(dá),取號
2、有窗口空閑,叫號
3、退出系統(tǒng)
實現(xiàn)貼士:用隊列 可以是順序的也可以是鏈?zhǔn)降?br /> 選用沒有頭結(jié)點的鏈?zhǔn)疥犃?br /> 下面插入前輩源代碼
#include <iostream>
using namespace std;
struct Customers{
int m_iId;
};
class Bank{
public:
Bank(int queueCapacity); //創(chuàng)建隊列
bool QueueEmpty(); //判空隊列
bool QueueFull(); //判滿函數(shù)
int QueueLength(); //隊列長度
bool EnQueue(Customers customer); //新元素入隊
bool DeQueue(Customers &customer); //首元素出隊
void QueueTraverse(); //遍歷隊列
private:
Customers *m_pQueue; //隊列數(shù)組指針
int m_iQueueLen; //隊列元素個數(shù)
int m_iQueueCapacity; //隊列數(shù)組容量
//int m_iHead; //隊頭
int m_iTail; //隊尾
};
Bank::Bank(int queueCapacity){
m_iQueueCapacity = queueCapacity; //隊列的總?cè)萘?#xff0c;賦值給隊列數(shù)組容量
m_iHead = 0; //隊頭初始化
m_iTail = 0; //隊尾初始化
m_iQueueLen = 0; //隊列元素個數(shù)初始化
m_pQueue = new Customers[m_iQueueCapacity]; //給數(shù)組申請內(nèi)存,并且從堆中申請內(nèi)存
}
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<<"歡迎使用銀行叫號系統(tǒng)"<<endl;
cout<<"1.有新客戶到達(dá),取號"<<endl;
cout<<"2.有窗口空閑,叫號"<<endl;
cout<<"3.退出系統(tǒng)"<<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;
}
在小輩學(xué)習(xí)過程中
發(fā)現(xiàn)不能實現(xiàn)2的功能 因此對前輩代碼進(jìn)行了更正,避免后人踩坑
一:
對類中的int m_iHead; //隊頭 聲明為public類型;方便以后調(diào)用
二:
在主函數(shù)中進(jìn)行輸出時候,把cout<<count<<endl;改為cout<<bank.m_iHead<<endl;這樣便可以實現(xiàn)柜臺叫號的目的。
注:由于小輩剛剛上csdn博客,第一次發(fā)表文章,如有不對,歡迎各位前輩進(jìn)行指正,感激不盡。
總結(jié)
以上是生活随笔為你收集整理的数据结构银行叫号系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。