#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define MAXLEN 100
typedef struct
{
char dept[20];
char docname[20];
char bname[20];
int bh;
}QElemType ;
typedef struct
{
int front;
int rear;
int queueSize;
QElemType data[MAXLEN];
}SqQueue;
int initSqQueue(SqQueue *LQ)
{
LQ->front=LQ->rear=0;
LQ->queueSize=MAXLEN;
return 1;
}
int SqQueueEmpty(SqQueue Q)
{
if(Q.front==Q.rear)return 1;
else return 0;
}
int SqQueueLength(SqQueue Q)
{
return (Q.rear-Q.front+Q.queueSize)%Q.queueSize;
}
int SqGetHead(SqQueue Q,QElemType *e)
{
if(Q.rear==Q.front)return 0;
*e=Q.data[Q.front];
return 1;
}
int SqEnQueue(SqQueue *LQ,QElemType e)
{
if((LQ->rear+1)%LQ->queueSize==LQ->front) return 0;
LQ->data[LQ->rear]=e;
LQ->rear=(LQ->rear+1)%LQ->queueSize;
return 1;
}
int SqDeQueue(SqQueue *LQ,QElemType *e)
{
if(LQ->front==LQ->rear) return 0;
*e=LQ->data[LQ->front];
LQ->front=(LQ->front+1)%LQ->queueSize;
return 1;
}
void SqQueueTraverse(SqQueue Q)
{
int p=Q.front;
printf("\nSqQueueTraverse:\n");
while(p!=(Q.rear)%Q.queueSize)
{
printf("%c,front %d,rear %d,queueSize %d\n",Q.data[p],Q.front,Q.rear,Q.queueSize);
p=(p+1)%Q.queueSize;
}
printf("\n");
}
int menu()
{
int n;
while(1)
{
system("cls");
printf("*******医院挂号模拟系统*******\n");
printf(" 1.挂号\n");
printf(" 2.专家1叫号\n");
printf(" 3.专家2叫号\n");
printf(" 4.显示\n");
printf(" 0.退出\n");
printf("******************************\n");
printf("请选择1/2/3/4/0\n");scanf("%d",&n);
if(n>=0&&n<=4)return n;
else
{
printf("功能编号输入错误,请重新选择!按任意键继续!\n");
getch();
}
}
}
void main()
{
int num,n1=0,n2=0;
SqQueue Q1,Q2;
QElemType x;
initSqQueue(&Q1);
initSqQueue(&Q2);
while(1)
{
num=menu();
switch(num)
{
case 1:printf("请输入专家1或者专家2和病人名,用空格隔开\n");
scanf("%s%s",x.docname,x.bname);
if(strcmp(x.docname,"专家1")==0)
{
x.bh=++n1;
SqEnQueue(&Q1,x);
}
if(strcmp(x.docname,"专家2")==0)
{
x.bh=++n2;
SqEnQueue(&Q2,x);
}
printf("请按任意键继续\n");
getch();
break;
case 2:
SqDeQueue(&Q1,&x);
printf("请%d号病人%s去诊室1就诊\n",x.bh,x.bname);
printf("请按任意键继续\n");
getch();
break;
case 3:
SqDeQueue(&Q2,&x);
printf("请%d号病人%s去诊室2就诊\n",x.bh,x.bname);
printf("请按任意键继续\n");
getch();
break;
case 4:
SqGetHead(Q1,&x);
if(SqQueueEmpty(Q1))printf("目前诊室1没有病人\n");
else
{
printf("正在诊室1就诊的是%3d号病人%8s ",x.bh,x.bname);
printf("目前诊室还有%d人等候就诊\n",SqQueueLength(Q1)-1);
SqGetHead(Q2,&x);
}
if(SqQueueEmpty(Q2))printf("目前诊室2没有病人\n");
else
{
printf("正在诊室2就诊的是%3d号病人%8s ",x.bh,x.bname);
printf("目前诊室还有%d人等候就诊\n",SqQueueLength(Q2)-1);
}
printf("请按任意键继续\n");
getch();
break;
case 0:exit(0);
}
}
}