(实验)完成一个医院挂号系统,功能如下:
①取号排队:输入患者姓名,身份证号,年龄,性别信息后输出排队序号,同时提醒其前排队患者数量;
②叫号服务:取排在最前的患者服务,通知提醒其后两
位患者等待。
③查询服务(患者):患者输入排队序号,查询该序号之前排队人数;
④查询服务(管理员):按排队序号输出所有排队人员信息;
⑤取消排队:输出排队序号,删除该患者排队信息(极少使用)。
#include <iostream>
#include<string.h>
using namespace std;
const int MAXSIZE=100;
const int ok=1;
const int error=0;
typedef int Status;
typedef struct people //定义患者信息
{
string name;//姓名
int number;//身份证号
int age;//年龄
string sex;//性别
int n=0;//患者的排队序号
}people;
typedef struct//队列的顺序存储,循环队列的数据类型
{
people *base;//基地址
int front;//指向队头的指针
int rear;//指向队尾下一个元素的指针
}sqqueue;
Status Initqueue(sqqueue &Q)//循环队列的初始化
{
Q.base=new people[MAXSIZE];//为队列分配一个最大容量为MAXSIZE的数组空间
Q.front=Q.rear=0;//把头指针和尾指针置为0;队列为空
return ok;
}
Status input(sqqueue &Q,people &e)//输入患者的信息
{
if((Q.rear+1)%MAXSIZE==Q.front)//判断队满
return error;//跳出程序
else
{
cout<<"请输入患者的信息:"<<endl;
cout<<"请输入患者的姓名:"<<endl;
cin>>e.name;
cout<<"请输入患者的身份证号码(4位):"<<endl;
cin>>e.number;
cout<<"请输入患者的年龄:"<<endl;
cin>>e.age;
cout<<"请输入患者的性别"<<endl;
cin>>e.sex;
Q.base[Q.rear]=e;//新元素插入队尾
Q.rear=(Q.rear+1)%MAXSIZE;//队尾指针加1
}
return ok;
}
Status get_sq(sqqueue &Q,people &e)//出队,删除
{
if(Q.front==Q.rear) return error;//队列是空的
e=Q.base[Q.front];//队头元素
Q.front=(Q.front+1)%MAXSIZE;
cout<<"删除成功"<<endl;
return ok;
}
Status calling(sqqueue Q,people &e)//叫号
{
if(Q.front!=Q.rear)
cout<<"请排队序号为"<<Q.base[Q.front].n+1<<"的患者就诊"<<endl;
cout<<"请序号为"<<Q.base[Q.front].n+2<<"和"<<Q.base[Q.front].n+3<<"的患者等待就诊"<<endl;
}
int sq_search1(sqqueue &Q,int S)//患者查询
{
for(int i=0;i<(Q.rear-Q.front+MAXSIZE)%MAXSIZE;i++)
{
if(Q.base[i].n=S)
return i;
}
}
void sq_search2(sqqueue &Q,int i)//查询(管理者端)
{
if(Q.rear==Q.front)//判断队空
{
cout<<"该队列为空!"<<endl;
return;
}
else
cout<<"患者的信息如下:"<<endl;
cout<<"姓名 身份证号 年龄 性别 "<<endl;
for(i=0;i<(Q.rear-Q.front+MAXSIZE)%MAXSIZE;i++)
{
cout<<" "<<Q.base[i+1].name<<" "<<Q.base[i+1].number<<" "<<Q.base[i+1].age<<" "<<Q.base[i+1].sex<<" "<<endl;
}
}
int main()
{
sqqueue Q;
people e;
int choose=-1;
int a,b,i,S;
cout<<"医院挂号系统欢迎您!"<<endl;
cout<<"^^^^^^^^^^^^^^^^^^^^"<<endl;
cout<<"1.创建队列"<<endl;
cout<<"2.输入患者信息取号"<<endl;
cout<<"3.叫号"<<endl;
cout<<"4.查询服务(患者端)"<<endl;
cout<<"5.查询服务(管理端)"<<endl;
cout<<"6.取消排队(最前面的)"<<endl;
while(choose!=0)
{
cout<<"请输入你要执行的操作:"<<endl;
cin>>choose;
switch(choose)
{
case 1:
if(Initqueue (Q))//建立队列
cout<<"建立队列成功!"<<endl;
else
cout<<"失败!请重新建立"<<endl;
break;
case 2:
input(Q,e);//输入患者的信息
e.n=(Q.rear-Q.front+MAXSIZE)%MAXSIZE;//计算当前队列的长度
cout<<"你的排队序号为:"<<e.n<<endl;
cout<<"你当前的人数为:"<<e.n-1<<endl;
break;
case 3:
calling(Q,e);
break;
case 4:
cout<<"请输入要查询的患者排队序号"<<endl;
cin>>S;
b=sq_search1(Q,b);//患者查询
cout<<"查询结果是:"<<endl;
cout<<"姓名 "<<"身份证号"<<" 年龄"<<" 性别"<<endl;
cout<<Q.base[b+1].name<<" "<<Q.base[b+1].number<<" "<<Q.base[b+1].age<<" "<<Q.base[b+1].sex<<endl;
break;
case 5:
sq_search2(Q,i);//输出所有的信息
break;
case 6:
get_sq(Q,e);
break;
}
}
return 0;
}