简单的医院挂号排队系统(c语言)

简易度相当于一个小作业是😂

#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
",Q->data[i].docname,Q->data[i].patient,Q->data[i].bh);
	}
		printf("%s %s %d
",Q->data[i].docname,Q->data[i].patient,Q->data[i].bh);

}

int menu(){
          
   
    int s;
    printf("医院挂号排队系统
");
    printf("1. 挂号服务
");
    printf("2. 专家一叫号
");
    printf("3. 专家二叫号
");
    printf("4. 显示信息
");
    printf("0. 退出
");
    printf("输入选择:
");
    scanf("%d",&s);
    if(s>=0 && s<=4){
          
   
        return s;
    }
    else{
          
   
        printf("输入有误,重新输入! 
");
        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 病人名字
");
            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("完成
");
            break;
        case 2:
            if(QueueOut(&Q1,&d)){
          
   
    	    	printf("请%d号病人%s去诊室1就诊
",d.bh,d.patient);	
			}
			else{
          
   
				printf("无人排队需要就诊
");
			} 
            break;
        case 3:
            if(QueueOut(&Q2,&d)){
          
   
    	    	printf("请%d号病人%s去诊室1就诊
",d.bh,d.patient);	
			}
			else{
          
   
				printf("无人排队需要就诊
");
			} 
            break;
        case 4:
            if(QueueGetHead(&Q1,&d)){
          
   
            printf("正在诊室1就诊的是%3d号病人%8s
",d.bh,d.patient);
            printf("目前诊室1还有%d人等候就诊
",QueueLength(&Q1)-1);	
			}
			else{
          
   
				printf("诊室1无人排队
");
				
			}
            if(QueueGetHead(&Q2,&d)){
          
   
            printf("正在诊室2就诊的是%3d号病人%8s
",d.bh,d.patient);
            printf("目前诊室2还有%d人等候就诊
",QueueLength(&Q2)-1);	
			}
			else{
          
   
				printf("诊室2无人排队
");
			}
            break;
        }

    }
}
经验分享 程序员 微信小程序 职场和发展