用C++银行叫号系统

某银行因为业务量太大,需要开发一个实用的银行叫号系统,该系统能够实现银行叫号排队的功能,凡是取号、排队,被叫号的才能进行相关的业务处理,该系统能够实现以下基本功能:
(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了。看你用什么开发工具了,都有类似的原型系统可用参照。

参考下这个