#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define OK 1
#define ERROR -1
typedef int status;
typedef struct{
int number;
char name[100];
}ElemType;
typedef struct Qnode{
ElemType data;
struct Qnode *next;
}Qnode,*QuenePtr;
typedef struct{
QuenePtr front;
QuenePtr rear;
}LinkQuene;
status CreateQuene(LinkQuene &Q);
status EnQuene(LinkQuene &Q,int n);
status DeQuene(LinkQuene &Q);
status SortQuene(LinkQuene Q,int e);
status Sort2Quene(LinkQuene Q);
status Sort3Quene(LinkQuene Q);
status CompareQuene(LinkQuene Q,QuenePtr p);
int main()
{
int a,m,n,e,j;
LinkQuene Q;
Q.front=NULL;
QuenePtr q;
while(1)
{
cout<<"1,上班 "<<"2,候诊 "<<"3,就诊"<<endl;
cout<<"4,查看排队 "<<"5,查看看诊 "<<"6,下班"<<endl;
cout<<"请输入想要执行操作序号:";
cin>>a;
switch(a)
{
case 1:
{
m=CreateQuene(Q);
if(m==-1)
{
cout<<"上班失败!请重新上班"<<endl;
}
else
{
cout<<"上班成功!"<<endl;
}
break;
}
case 2:
{
if(Q.front==NULL)
{
cout<<"请先上班再输入候诊病人的信息!"<<endl;
break;
}
cout<<"请输入候诊病人的个数:";
cin>>n;
m=EnQuene(Q,n);
if(m==1)
{
cout<<"候诊病人输入成功!"<<endl;
}
break;
}
case 3:
{
m=DeQuene(Q);
if(m==1)
{
cout<<"排在最前面的病人已就诊!"<<endl;
}
else
{
cout<<"已无病人候诊,无法就诊!"<<endl;
}
break;
}
case 4:
{
q=Q.front->next;
cout<<"请输入查看人的病历号:";
cin>>e;
m=SortQuene(Q,e);
if(m==-1)
{
cout<<"此病历号不存在!查看失败!"<<endl;
}
else if(m==0)
{
cout<<"此病人是第一个,前面无病人!"<<endl;
}
else
{
cout<<"此病人前面有"<<m<<"个病人"<<endl;
cout<<"其病历号和姓名以此为:"<<endl;
for(j=0;j<m;j++)
{
cout<<q->data.number<<" "<<q->data.name<<endl;
q=q->next;
}
}
break;
}
case 5:
{
m=Sort2Quene(Q);
if(m==-1)
{
cout<<"已无病人候诊!"<<endl;
}
else
{
cout<<"候诊人数为:"<<m<<endl;
cout<<"候诊人的病历号和姓名以此为:"<<endl;
Sort3Quene(Q);
}
break;
}
case 6:
{
m=Sort2Quene(Q);
if(m==-1)
{
cout<<"已无病人候诊,可以下班,欢迎下次上班!";
exit(0);
}
else
{
cout<<"还有病人等待候诊,无法下班!"<<endl;
}
break;
}
}
system("pause");
system("cls");
}
}
status CreateQuene(LinkQuene &Q)
{
Q.front=new Qnode;
if(!Q.front)
return ERROR;
Q.front->next=NULL;
Q.rear=Q.front;
return OK;
}
status EnQuene(LinkQuene &Q,int n)
{
QuenePtr p;
int i=0,j;
p=new Qnode;
printf("请输入第%d个病人的病历号和姓名:",i+1);
scanf("%d%s",&p->data.number,p->data.name);
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
for(i=1;i<n;i++)
{
p=new Qnode;
printf("请输入第%d个病人的病历号和姓名:",i+1);
scanf("%d%s",&p->data.number,p->data.name);
j=CompareQuene(Q,p);
while(j==-1)
{
cout<<"此病历号前面已存在,请重新输入病历号!"<<endl;
printf("请输入第%d个病人的病历号和姓名:",i+1);
scanf("%d%s",&p->data.number,p->data.name);
j=CompareQuene(Q,p);
}
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
return OK;
}
status DeQuene(LinkQuene &Q)
{
if(Q.front==Q.rear)
return ERROR;
QuenePtr p;
p=Q.front->next;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
delete p;
return OK;
}
status SortQuene(LinkQuene Q,int e)
{
QuenePtr p;
int i=0;
p=Q.front->next;
while(p!=NULL)
{
if(p->data.number==e)
{
break;
}
else
{
i++;
p=p->next;
}
}
if(p==NULL)
return ERROR;
else
return i;
}
status Sort2Quene(LinkQuene Q)
{
int i=0;
if(Q.front==Q.rear)
return ERROR;
QuenePtr p;
p=Q.front->next;
while(p!=NULL)
{
i++;
p=p->next;
}
return i;
}
status Sort3Quene(LinkQuene Q)
{
QuenePtr p;
p=Q.front->next;
while(p!=NULL)
{
cout<<p->data.number<<" "<<p->data.name<<endl;
p=p->next;
}
}
status CompareQuene(LinkQuene Q,QuenePtr p)
{
QuenePtr q;
q=Q.front->next;
while(q!=NULL)
{
if(q->data.number==p->data.number)
{
return ERROR;
}
q=q->next;
}
return OK;
}
用队列实现医院管理系统(链表)
于 2022-03-15 19:16:33 首次发布