核酸检测——顺序队列实现

核酸检测——顺序队列实现

主要功能

  • 入队功能。增加的人数,以及人员的信息来自于键盘输入。
  • 出队检测。可以一次安排10人混检,也可以安排单检。出队检测后,人员的信息从排队人员中删除。
  • 查找功能。输入身份证号,判断相应人员是否完成了核酸检测,或者是还在队伍中排队,或者没有来排队。该功能需要对已经完成检测的人员信息进行存储。
  • 输出功能。按照身份证号排序,输出当前正在排队的人员的信息。
  • 队列状态的显示和预警。队列状态的基本信息主要指当前排队人数,其他信息可以自行扩展(如排在第一位的是谁,预估当前队列完成检测的时间等)。

基本功能如下图所示,如想添加功能,请自行添加
核酸检测——顺序队列实现_第1张图片

代码如下:

#include
#define Maxsize  100

typedef struct QueueNode
{
	int data[Maxsize]; 
	char name[Maxsize];
	int id;
}QueueNode;

typedef struct SeqQueue
{
	QueueNode data[Maxsize];
	int fornt;   //队头指针
	int rear;    //队尾指针
}SeqQueue;


void InitQueue(SeqQueue *sq ){
	sq->fornt=sq->rear = 0;
}

int IsFull(SeqQueue *sq)
{
    if (sq->rear == Maxsize) 
    {
        return 1;
    }
    return 0;
}

void EnQueue(SeqQueue *sq, QueueNode data)
{
	if (IsFull(sq))
	    {
	        printf("队列已满\n");
	        return ;
	    }
	   sq->data[sq->rear] = data;
	   sq->rear++;    
}

int IsEmpty(SeqQueue* sq)
{
    if (sq->fornt == sq->rear)
    {
        return 1;
    }
    return 0;
}


int DeleteQueue(SeqQueue* sq)
{
    if (IsEmpty(sq))
    {
        printf("队列为空!\n");
        return 0;
    }
    sq->fornt = (sq->fornt)+1;     
    return 1;
}

void FindQueue(SeqQueue* sq, int id){
    for (int i = sq->fornt; i <sq->rear; i++){
		if (sq->data[i].id== id){
			printf("此人在队伍中排队,未完成核算检测\n");
			return; 
		}
	}
	for (int i = 0; i < sq->fornt; i++){
		if (sq->data[i].id== id){
			printf("此人已完成核算检测\n");
			return;
		}
	}
	printf("此人没有来排队\n");
}

void ShowQueuePeople(SeqQueue* sq){
	if (IsEmpty(sq))
    {
        printf("队列为空!\n");
        return ;
    }
    for (int i = sq->fornt; i < sq->rear; i++){
		printf("姓名:%s\t身份证号:%d\n",sq->data[i].name,sq->data[i].id);
	}
}

void ShowQueue(SeqQueue* sq){
	printf("当前排队人数:%d\n", sq->rear - sq->fornt);
}
int main(){
	QueueNode data;
	SeqQueue sq;
	int checked; 
	int id;
	InitQueue(&sq);
	
	int select = 1;
	while(select){
		 printf("*****************************************************\n");
		 printf("* 1  进入队列排队          2  出队检测方式          *\n");
		 printf("* 3  查找人员信息          4  显示排队的人员的信息  *\n");
		 printf("* 5  显示队列信息          6  退出程序              *\n");
		 printf("*****************************************************\n");
	
		printf("请选择>\n");
		scanf("%d",&select);
		switch (select){
		case 1:
			printf("请输入入队者的姓名和身份证号\n");
			scanf("%s%d",data.name,&data.id); 
			EnQueue(&sq,data);
			break;
		case 2:
			printf("*****************************************************\n");
			printf("* 1   单管检查                 2  混管检测          *\n");
			printf("* 其他数字  退出选项                                *\n");
			printf("*****************************************************\n");
			printf("请选择>\n");
			scanf("%d",&checked);
			if (checked == 1){
				DeleteQueue(&sq);
			}
			if (checked == 2){
				for (int i = 0; i < 10; i++){
					DeleteQueue(&sq);
				}
			}
			break;
		case 3:
			 	printf("请输入您要查找的入队者的身份证号\n");
			 	scanf("%d",&id); 
			 	FindQueue(&sq,id);
			 	break;
			 	
		case 4:
				ShowQueuePeople(&sq);
				break;
		case 5:
			 	ShowQueue(&sq);
			 	break;
		case 6:
			return 0;
		}		 
	}
}

你可能感兴趣的:(c++,算法,数据结构)