某银行因为业务量太大,需要开发一个实用的银行叫号系统,该系统能够实现银行叫号排队的功能,凡是取号、排队,被叫号的才能进行相关的业务处理,该系统能够实现以下基本功能:
(1)定义一个号码类,该类别至少包含序号、业务类型等信息成员,并包含取号、排队、叫号等相应的功能。
(2)能够生成一个排队的序列号,并能告知当前用户,还有多少能在等待
(3)能够统计出当天一共有多少人排队
(4)能够在任意时刻输出当前队列当前的排队情况
(5)能够按照先后关系,将队列中队头的序列号输出,即相当于处理该业务,也就是出队
已经写了一部分,也可以交流,精修~
//设置2个容器,一个放普通,一个放置vip
//删除,string取出,删除“vip ”比较数字;call的VIP优先级;delete的最大值删除之后取号还为最大值;
//delete 23a是错误的输入。(没有判断)删掉“delete ”,判断后面的是不是重数字12a;
///
//
#include<iostream>
#include<string>
#include<vector>
using namespace std;
static int n=0;
static vector<int> v1;
static vector<string> v2;
//删除"delete "和"countN ",取出后面数字
int shuzi(string s,int sn)
{
int xn=0;
int i;
for(i=sn;i<s.size();i++)
if(s[i]>='0'&&s[i]<='9')
xn=10*xn+(s[i]-'0');
else
{
xn=0;
break;
}
return xn;
}
//取号;
void get(string s)
{
n++;
string s0;
if(s=="get")
{
cout<<n<<endl;
v1.push_back(n);
}
else
{
cout<<"vip "<<n<<endl;
s0=s0+"vip "+char(n+'0');
//cout<<s0<<endl;
v2.push_back(s0);
}
}
//叫号;
void call(string s)
{
vector<int>::iterator iter1=v1.begin();
vector<string>::iterator iter2=v2.begin();
if(n==0)
cout<<"error"<<endl;
else
if(!v2.empty())
{
cout<<*iter2<<endl;
v2.erase(iter2);
}
else
if(!v1.empty())
{
cout<<*iter1<<endl;
v1.erase(iter1);
}
else
cout<<"error"<<endl;
}
//删除号码;
void delet(string s)
{
int deln=shuzi(s,7);
//cout<<deln<<endl;
vector<int>::iterator iter1=v1.begin();
vector<string>::iterator iter2=v2.begin();
vector<int>::iterator iter3=v1.end();
vector<string>::iterator iter4=v2.end();
//注意把for循环提前,这样就不会出错;
for(vector<int>::iterator iter1=v1.begin();iter1!=v1.end();iter1++)
if(*iter1==deln)
iter3=iter1;
for(vector<string>::iterator iter2=v2.begin();iter2!=v2.end();iter2++)
if(shuzi(*iter2,4)==deln)
iter4=iter2;
if(deln>n)
cout<<"error"<<endl;
else
if(deln==n)
{
iter1=v1.end()-1;
iter2=v2.end()-1;
if(*iter1==n)
{
cout<<*iter1<<endl;
v1.erase(iter1);
}
else
{
cout<<*iter2<<endl;
v2.erase(iter2);
}
n--;
}
else
if(iter3!=v1.end())
{
cout<<*iter3<<endl;
v1.erase(iter3);
}
else
if(iter4!=v2.end())
{
cout<<*iter4<<endl;
v2.erase(iter4);
}
else
cout<<"111111111error"<<endl;
}
//获取当前排队总人数
void count(string s)
{
int count=v1.size()+v2.size();
cout<<count<<endl;
}
//获取在某个号码之前排队的总人数
void countN(string s)
{
int coun=shuzi(s,7);
//cout<<coun<<endl;
int k=0;
vector<int>::iterator iter1=v1.begin();
vector<string>::iterator iter2=v2.begin();
for(;iter1!=v1.end();iter1++)
if(*iter1<coun)
k++;
for(;iter2!=v2.end();iter2++)
if(shuzi(*iter2,4)<coun)
k++;
cout<<k<<endl;
}
//重值排号机
void reset(string s)
{
n=0;
}
//退出排号机void quit(string s)
int main()
{
string s,s1;
//int deln,coun;
while(getline(cin,s))
{
if(s=="get"||s=="get vip")
get(s);
else
if(s=="reset")
reset(s);
else
if(s=="call")
call(s);
else
if(s=="count")
count(s);
else
if(s=="quit")
break;
else
{
s1=s.substr(0,7);
//deln=shuzi(s,7);//不一定是一位数字,“delete ”,取后面
if(shuzi(s,7)==0||shuzi(s,7)>100000) //shuzi(s,7)这样调用时可以的
cout<<"error"<<endl;
else
if(s1=="delete ")
delet(s);
else
if(s1=="countN ")
countN(s);
else
cout<<"error"<<endl;
}
}
return 0;
}
嗯,提供参考链接,期望对你完善和实现银行排队叫号功能有帮助:https://www.cnblogs.com/nrocky/p/15229971.html
【你可借鉴看一下这个人写的,我觉得写的不错】
#include <iostream>
#include <string>
#include <vector> //用容器来区分vip和非vip的序号
#include <sstream>//用来连接字符串
using namespace std;
int ment;
static vector <string> v1; //vip序号容器
static vector <string> v2;//非vip序号容器
class No //题目要求:序号类
{
public:
int shuzi() //产生序号
{
return ++number;
}
void get(int); //取号
void show(); //显示排队
void call(); //叫号
private:
static int number; //序号
static int kind; //业务类型
};
//初始化 number和业务类型
int No::number = 0;
int No::kind=0;
//取号
void No::get(int n)
{
int flag1;
string s1,s="-VIP",sk[4]={"-00","-01","-10","-11"};
ostringstream oss;
ment++;
cout<<"\t\t\t\t您的号码马上就会产生,在那之前"<<endl;
cout<<"\t\t\t\t请问您是J.Bank的VIP客户吗?\n\t\t\t\t○1.YES\n\t\t\t\t○2.NO\n\t\t\t\t";//判断是否是VIP
cin>>flag1;
if(flag1==1||flag1==2)
{
cout<<"\t\t\t\t好的,请问您要办理什么业务呢?"<<endl;//判断办理的业务种类
cout<<"\t\t\t\t○1.个人金融业务"<<endl;
cout<<"\t\t\t\t○2.公司企业金融业务"<<endl;
cout<<"\t\t\t\t○3.房地产金融业务"<<endl;
cout<<"\t\t\t\t○4.个国际金融业务\n\t\t\t\t";
cin>>kind;
if(kind>=1||kind<=4)
{
cout<<"\t\t\t\t您好,你的号码是";
oss<<n<<sk[kind-1]; //将序号和业务种类号连接并显示起来
cout<<oss.str();
if(flag1==1) //vip 连接,存放并显示vip序号
{
oss<<s;
v1.push_back(oss.str());
cout<<s<<endl;
cout<<"\t\t\t\t您前方还有"<<v1.size()-1<<"位在等待";
cout<<",拿好您的序号,等待叫号~~"<<endl;
cout<<"******************************************************************************************************"<<endl;
}
if(flag1==2) //非vip 存放非vip序号
{
v2.push_back(oss.str());
cout<<"\n\t\t\t\t您前方还有"<<v1.size()+v2.size()-1<<"位在等待";
cout<<",拿好您的序号,等待叫号~~"<<endl;
cout<<"******************************************************************************************************"<<endl;
}
}
else
{
cout<<"\t\t\t\t你输入的不是我想要的哦~"<<endl;
}
}
else
{
cout<<"\t\t\t\t你输入的不是我想要的哦~"<<endl;
}
}
//叫号
void No::call()
{
vector<string>::iterator iter1=v1.begin();//设置迭代器iteri指向各自的容器第一元素
vector<string>::iterator iter2=v2.begin();
if(!v1.empty())//因为vip的优先级,所以先检测vip容器内是否为空
{
cout<<"\t\t\t\t请"<<*iter1<<"到前台办理业务!"<<endl;
iter1=v1.erase(iter1);//删除指向元素
}
else if(!v2.empty())
{
cout<<"\t\t\t\t请"<<*iter2<<"到前台办理业务!"<<endl;
v2.erase(iter2);
}
else if(v1.empty()||v2.empty())
cout<<"\t\t\t\t当前没有等待客户哦~~"<<endl;
cout<<"******************************************************************************************************"<<endl;
}
//显示当前排队功能
void No::show()
{
int flag=0,i;
if(v1.size()+v2.size()==0)
{
cout<<"\t\t\t\t当前没有客户在等待"<<endl;
}
else
{
cout<<"\t\t\t\t当前排队的情况是:"<<endl;
if(v1.size()==0)
{
cout<<"\t\t\t\tVIP客户:\n\t\t\t\t无"<<endl;//因为VIP客户的优先级所以先显示VIP客户
}
else{
cout<<"\t\t\t\tVIP客户:"<<endl;
for(i=0;i<v1.size();i++)
{
cout <<"\t\t\t\t○"<< v1[i] <<endl;
}
}
if(v2.size()==0)
{
cout<<"\t\t\t\t普通客户:\n\t\t\t\t无"<<endl;//显示普通客户排队情况
}
else{
cout<<"\t\t\t\t普通客户:"<<endl;
for(i=0;i<v2.size();i++)
{
cout<<"\t\t\t\t○" <<v2[i]<<endl;
}
}}
cout<<"******************************************************************************************************"<<endl;
}
void rule()
{
cout<<"\t\t\t\t*****Welcome to J.Bank*****\n"<<endl;
cout<<"\t\t\t\t●办理业务 请按1\n\t\t\t\tFor business, please press 1"<<endl;
cout<<"\t\t\t\t●查询排队详情 请按2\n\t\t\t\tFor details of queuing, please press 2"<<endl;
cout<<"\t\t\t\t●叫号功能 请按3\n\t\t\t\tFor the calling function,please press 3"<<endl;
cout<<"\t\t\t\t●今日排队总数 请按4\n\t\t\t\tFor the calling function,please press 3"<<endl;
}
int main()
{
rule();
while(1)
{
No no;
cout<<"\t\t\t\t您需要本行什么服务?(按0召唤J.Bank菜单)\n\t\t\t\t";
int n;
cin>>n;
if(n>=0&&n<=4)
{
if(n==1)
{
no.get(no.shuzi());
n=7;
}
if(n==2)
{
no.show();
n=7;
}
if(n==3)
{
no.call();
n=7;
}
if(n==0)
{
rule();
n=7;
}
if(n==4)
{
cout<<"\t\t\t\t今天来J.Bank排队的有"<<ment<<"个"<<endl;
n=7;
}
}
else if(n==610) //关机密码
{
break;
}
else
{
cout<<"\t\t\t\t你输入的不是我想要的哦~"<<endl;
cout<<"******************************************************************************************************"<<endl;
}
}
}
银行叫号系统可以划分为用户区号(包括本地和网络取号)、业务员叫号和其他的统计、展示等功能模块,在比较大的营业点,联网工作的计算机有几十台,逻辑功能不算复杂,主要是需要把散布在各个终端机的组网和多任务处理好基本就ok了。看你用什么开发工具了,都有类似的原型系统可用参照。
参考下这个