求助!!!队列的应用问题!
至少两名以上的医生,挂号时可选择医生,并显示该医生前面有多少人在排队;4. 病人信息至少包括就诊号,姓名;
5. 程序中只允许通过队列函数实现队列操作,不允许出现数组操作。
6. 挂号系统可参考以下界面
医院挂号系统
*********************************************
* 1---------清空所有队列 *
* 2---------挂号 *
* 3---------看病 *
* 4---------当前排队人数 *
* 0---------退出系统 *
*********************************************
挂号
*********************************************
* 1---------刘××医生(××科) *
* 2---------张××医生(××科) *
* 3---------赵××医生(××科) *
* 0---------返回 *
*********************************************
请输入医生选项(1/2/3):1
请输入就诊号:88560102
请输入姓名:李一
挂号成功!您前面有5人在排队
#include<stdio.h>
typedef struct
{
int id[10];
char name[10];
}datatype;
typedef struct QNode
{
datatype data;
struct QNode *next;
} QNode;
typedef struct
{
QNode *front; //队头指针
QNode * rear; //队尾指针
} LinkQueue;
void InitQueue (LinkQueue *Q)
{
Q = new LinkQueue;
Q->front=NULL;
Q->rear =NULL;
}
int InQueue (LinkQueue *Q ) //入队
{
QNode *s=new QNode;
datatype p;
printf("请输入就诊号:") ;
scanf("%d",p.id);
printf("请输入姓名:") ;
scanf("%s",p.name);
getchar();//?
s->data=p;
s->next=NULL;
if(Q->front==NULL && Q->rear==NULL)//空队
Q->front=Q->front=s;
else
{ Q->rear->next=s; Q->rear=s; }
}
int OutQueue (LinkQueue *Q, datatype x)//出队
{
QNode *p;
if(Q->front==NULL&&Q->rear==NULL)//空队
p=Q->front;
x=p->data;
if ( Q->rear==Q->front )//只有一个人数
Q->front==NULL;
else
Q->front=Q->front->next;
delete (p);
return 1;
}
int QueueLen(LinkQueue *Q)//计算排队个数
{
int n=0;
QNode* p=Q->front;
if(p==NULL)
printf("队列为空!");
else
while(p!=NULL)
{
n++;
p=p->next;
}
return n;
}
void guahao( LinkQueue *Q1, LinkQueue *Q2, LinkQueue *Q3) //挂号,挂号时显示前面的人数
{
int x;
static int a=0,b,c;
printf(" 挂号\n");
printf(" **************************************************\n");
printf(" * 1---------刘××医生(××科) *\n");
printf(" * 2---------张××医生(××科) *\n");
printf(" * 3---------赵××医生(××科) *\n");
printf(" * 0---------返回 *\n");
printf(" **************************************************\n");
printf("请输入医生选项(1/2/3):");
scanf("%d",&x);
while(x!=0)
{
switch(x)
{
case 1:
InQueue (Q1);a=QueueLen(Q1);printf("挂号成功!你的前面还有%d人在排队\n",a-1);break;
case 2:
InQueue (Q2);b=QueueLen(Q2);printf("挂号成功!你的前面还有%d人在排队\n",b-1);break;
case 3:
InQueue (Q3);c=QueueLen(Q3);printf("挂号成功!你的前面还有%d人在排队\n",c-1);break;
}
printf("请输入医生选项(1/2/3):");
scanf("%d",&x);
}
}
void kanbing( LinkQueue *Q1, LinkQueue *Q2, LinkQueue *Q3) //看病
{
datatype p;
int x;
printf("请输入诊号:") ;
scanf("%d",p.id);
printf("请输入姓名:") ;
scanf("%s",p.name);
getchar();
printf(" 看病\n");
printf(" **************************************************\n");
printf(" * 1---------刘××医生(××科) *\n");
printf(" * 2---------张××医生(××科) *\n");
printf(" * 3---------赵××医生(××科) *\n");
printf(" * 0---------返回 *\n");
printf(" **************************************************\n");
printf("请输入医生选项(1/2/3):");
scanf("%d",&x);
while(x)
{
switch(x)
{
case 1:OutQueue (Q1, p );break;
case 2:OutQueue (Q2, p );break;
case 3:OutQueue (Q3, p );break;
}
printf("请输入医生选项(1/2/3):");
scanf("%d",&x);
}
}
//查询
void chaxun( LinkQueue *Q1, LinkQueue *Q2, LinkQueue *Q3)
{
int x;
printf(" 查询\n");
printf(" **************************************************\n");
printf(" * 1---------刘××医生(××科) *\n");
printf(" * 2---------张××医生(××科) *\n");
printf(" * 3---------赵××医生(××科) *\n");
printf(" * 0---------返回 *\n");
printf(" **************************************************\n");
printf("请输入医生选项(1/2/3):");
scanf("%d",&x);
while(x)
{
switch(x)
{
case 1: printf("1号医生排队人数:%d\n",QueueLen(Q1)-1);break;
case 2: printf("2号医生排队人数:%d\n",QueueLen(Q2)-1);break;
case 3: printf("3号医生排队人数:%d\n",QueueLen(Q3)-1);break;
}
printf("输入查询医生选项(1/2/3):");
scanf("%d",&x);
}
}
main()
{
LinkQueue *Q1=new LinkQueue;
LinkQueue *Q2=new LinkQueue;
LinkQueue *Q3=new LinkQueue;
int x;
printf(" 医院挂号系统\n" );
printf(" *********************************************\n");
printf(" * 1---------清空所有队列 *\n");
printf(" * 2---------挂号 *\n");
printf(" * 3---------看病 *\n");
printf(" * 4---------当前排队人数 *\n");
printf(" * 0---------退出系统 *\n");
printf(" ************************************************\n");
printf("输入选项<0-4>:");
scanf("%d",&x);
while(x!=0)
{
switch(x)
{
case 1:InitQueue(Q1); InitQueue(Q2); InitQueue(Q3);break;
case 2:guahao(Q1,Q2,Q3);break;
case 3:kanbing(Q1,Q2,Q3);break;
case 4:chaxun(Q1,Q2,Q3);break;
}
printf("输入选项<0-4>:");
scanf("%d",&x);
}
}
真的不知道哪里考虑的不周全,完全不知道哪里错误,求指导,谢谢!