简易度相当于一个小作业是😂
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#define SIZE 20
typedef struct
{
char dept[20];
char docname[20];
char patient[20];
int bh;
}ST;
typedef struct SQueue{
ST data[SIZE];
int rear;
int length;
int size;
}QE , *Queue;
int initQueue(Queue Q){//初始化
Q->rear = -1;
Q->length= 0;
Q->size = SIZE;
return 1;
}
int QueueEmpty(Queue Q){//队列空
if(Q->length == 0)return 1;
else return 0;
}
int QueueLength(Queue Q){//取得队列长
return Q->length;
}
int QueueGetHead(Queue Q,ST *e){//取得队列头
if(QueueEmpty(Q)){
return 0;
}
int front = (Q->rear - Q->length +Q->size +1)% Q->size;
if(Q->rear == front)return 0;
* e = Q->data[front];
return 1;
}
int QueueEnter(Queue Q, ST e){//进队列
if(Q->length == Q->size)return 0;
Q->length++;
Q->rear = (Q->rear+1) % Q->size;
Q->data[Q->rear] = e;
return 1;
}
int QueueOut(Queue Q,ST *e){//出队列
if(Q->length == 0)return 0;
int front = (Q->rear - Q->length +Q->size +1)% Q->size;
* e = Q->data[front];
Q->length--;
return 1;
}
void QueueTravers(Queue Q){//遍历队列
int i = (Q->rear - Q->length +Q->size +1)% Q->size;
for(; i < Q->length;i++)
{
printf("%s %s %d\n",Q->data[i].docname,Q->data[i].patient,Q->data[i].bh);
}
printf("%s %s %d\n",Q->data[i].docname,Q->data[i].patient,Q->data[i].bh);
}
int menu(){
int s;
printf("医院挂号排队系统\n");
printf("1. 挂号服务\n");
printf("2. 专家一叫号\n");
printf("3. 专家二叫号\n");
printf("4. 显示信息\n");
printf("0. 退出\n");
printf("输入选择:\n");
scanf("%d",&s);
if(s>=0 && s<=4){
return s;
}
else{
printf("输入有误,重新输入! \n");
scanf("%d",&s);
}
}
int main(){
ST d;
int n1=0;
int n2 = 0;
int num;
QE Q1,Q2;
initQueue(&Q1);
initQueue(&Q2);
while (1)
{
num = menu();
switch (num)
{
case 0:
return 0;
case 1:
printf("请输入选择的专家1/专家2 病人名字\n");
scanf("%s %s",d.docname,d.patient);
if(strcmp(d.docname,"专家1")==0){
d.bh = ++n1;
QueueEnter(&Q1,d);
}
if(strcmp(d.docname,"专家2")==0){
d.bh = ++ n2;
QueueEnter(&Q2,d);
}
printf("完成\n");
break;
case 2:
if(QueueOut(&Q1,&d)){
printf("请%d号病人%s去诊室1就诊\n",d.bh,d.patient);
}
else{
printf("无人排队需要就诊\n");
}
break;
case 3:
if(QueueOut(&Q2,&d)){
printf("请%d号病人%s去诊室1就诊\n",d.bh,d.patient);
}
else{
printf("无人排队需要就诊\n");
}
break;
case 4:
if(QueueGetHead(&Q1,&d)){
printf("正在诊室1就诊的是%3d号病人%8s\n",d.bh,d.patient);
printf("目前诊室1还有%d人等候就诊\n",QueueLength(&Q1)-1);
}
else{
printf("诊室1无人排队\n");
}
if(QueueGetHead(&Q2,&d)){
printf("正在诊室2就诊的是%3d号病人%8s\n",d.bh,d.patient);
printf("目前诊室2还有%d人等候就诊\n",QueueLength(&Q2)-1);
}
else{
printf("诊室2无人排队\n");
}
break;
}
}
}