实验内容
请设计一个简单的模拟银行排队系统,要求程序具有以下4项菜单:
1.取号。选择该菜单后,为客户产生一个排队号。
2.叫号。选择该菜单后,显示可服务的客户排队号。
3.查看队伍。从队首到队尾列出所有排队客户的排队号。
4.退出系统
完整代码
#include <iostream>
#include<malloc.h>
using namespace std;
//队列及其应用
#define datatype int
#define MAX 30
typedef struct node
{datatype data;struct node *next;
}QNode;
typedef struct{QNode *front,*rear;//头尾指针int num;
}LQueue;
//置一个空链队
LQueue* init_LQueue()
{LQueue* q;QNode *p;q=(LQueue*)malloc(sizeof(LQueue));//申请头尾指针结点p=(QNode*)malloc(sizeof(QNode));//申请链队头结点p->next=NULL;q->front=p;q->rear=p;q->num=0;return q;
}
void In_LQueue(LQueue *q,datatype x)//入队
{QNode* p;p=(QNode*)malloc(sizeof(QNode));p->data=x;p->next=NULL;q->rear->next=p;q->rear=p;q->num++;
}
int Empty_LQueue(LQueue *q)//判空
{if(q->front==q->rear) return 1;else return 0;
}
int Out_LQueue(LQueue *q,datatype *x)//出队
{QNode *p;if(Empty_LQueue(q)){cout<<"队空";return 0;}else{p=q->front->next;q->front->next=p->next;*x=p->data;free(p);if(q->front->next==NULL)q->rear=q->front;q->num--;return 1;}
}
void Display(LQueue* q)
{datatype e;QNode* p=q->front->next;if(Empty_LQueue(q)){cout<<"无"<<endl;}
// for(int i= 0;i<=q->num;i++)
// {
// cout<<p->data<<" ";
// p=p->next;
// }//会直接跳出循环
else{while(p!=NULL){cout<<p->data<<" ";p=p->next;}
}cout<<endl;
}int Display_num(LQueue* q)
{QNode* p=q->front->next; return p->data;
}int main()
{cout<<"---------------------银行排队模拟------------------------"<<endl;cout<<" (1)取号"<<endl;cout<<" (2)叫号"<<endl;cout<<" (3)查看队伍"<<endl;cout<<" (0)取号"<<endl;cout<<"---------------------------------------------------------"<<endl;LQueue *L;L=init_LQueue();//用来放30个号码 LQueue *Q;// 银行系统用的队列 Q=init_LQueue();int a,i;for(i=1;i<=MAX;i++)//过号作废 假设一共30个号 {In_LQueue(L,i); }Display(L);//想要的是,i取L中的,从1开始,叫号一个废一个。 //for(int i =1;i<=L->num;i++)//每次进入循环都是不同的数 第几次进入i就是几
while(1){cout<<"请选择(0-3): "; cin>>a;switch(a){ case 1: //for(i;i<4;i++)//想要让i成动态的,选择1一次i+一次//现在i是一次性把for循环走了 // {// In_LQueue(L,i);In_LQueue(Q,L->front->next->data);//取号 cout<<"您的排队序号是"<<L->front->next->data<<",";cout<<"前面还有"<< (Q->num)-1<<"人" <<endl;L->front->next=L->front->next->next;break;case 2:cout<<"请序号"<<Display_num(Q)<<"的客户办理业务!"<<endl;Out_LQueue(Q,&(L->front->data));break;case 3:cout<<"目前正在排队的:";Display(Q);break; case 0:cout<<"--退出银行--"<<endl; break; default: cout<<"输入错误!!!" <<endl;break; }if (a==0)//跳出while {break;}} return 0;
}