相信大家去医院看病就诊的时候都见过医院的排队系统,该系统可以实现挂号、就诊以及查看排队人数等功能。
这极大的提高了医院的效率。
题目描述
编写一个程序,反映病人到医院看病排队看医生的情况。在病人排队过程中,主要重复两件事情:
1 病人到达诊室,将病历本交给护士,选择挂号的科室,排到等待队列中候诊
2 护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。
要求模拟病人等待就诊这一过程,程序采用菜单方式,选项及功能说明如下:
1 排队——输入排队病人的病历号,和就诊科室,加入到病人排队队列中;
2 就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除;
3 查看排队——从队首到队尾列出所有的排队病人的病历号
4 下班——退出运行
样例输入
1
1
111
1
1
222
2
1
2
2
1
1
333
3
1
3
4
4
样例输出
***** 排队系统 *****
1 排队
2 就诊
3 查看排队
4 下班
***** 排队系统 *****
请选择诊室:
1 内科 2 外科 3 五官科 4 口腔科
请输入病历号:
挂号成功请等候,您前面排队人数0
***** 排队系统 *****
1 排队
2 就诊
3 查看排队
4 下班
***** 排队系统 *****
请选择诊室:
1 内科 2 外科 3 五官科 4 口腔科
请输入病历号:
挂号成功请等候,您前面排队人数1
***** 排队系统 *****
1 排队
2 就诊
3 查看排队
4 下班
***** 排队系统 *****
请选择诊室:
1 内科 2 外科 3 五官科 4 口腔科
请111病人到内科看病
***** 排队系统 *****
1 排队
2 就诊
3 查看排队
4 下班
***** 排队系统 *****
请选择诊室:
1 内科 2 外科 3 五官科 4 口腔科
该诊室尚无人排队
***** 排队系统 *****
1 排队
2 就诊
3 查看排队
4 下班
***** 排队系统 *****
请选择诊室:
1 内科 2 外科 3 五官科 4 口腔科
请输入病历号:
挂号成功请等候,您前面排队人数1
***** 排队系统 *****
1 排队
2 就诊
3 查看排队
4 下班
***** 排队系统 *****
请选择诊室:
1 内科 2 外科 3 五官科 4 口腔科
该诊室排队人数2:
222
333
***** 排队系统 *****
1 排队
2 就诊
3 查看排队
4 下班
***** 排队系统 *****
请选择诊室:
1 内科 2 外科 3 五官科 4 口腔科
该诊室尚无人排队
***** 排队系统 *****
1 排队
2 就诊
3 查看排队
4 下班
***** 排队系统 *****
实现代码:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef int datatype;
typedef struct QNode
{
datatype data;
struct QNode *next;
}QNode;
typedef struct qptr
{
QNode *front;
QNode * rear;
} LinkQueue;
int InitQueue(LinkQueue* &Q)
{
Q=new LinkQueue;
Q->front=NULL;
Q->rear=NULL;
return 1;
}
int QueueEmpty(LinkQueue* Q)
{
if(Q->front==NULL&&Q->rear==NULL)
return 1;
else
return 0;
}
int InQueue(LinkQueue* Q,datatype x)
{
QNode *s;
s=new QNode;
s->data=x;
s->next=NULL;
if(Q->front==NULL&&Q->rear==NULL)
Q->rear=Q->front=s;
else{
Q->rear->next=s;
Q->rear=s;
}
return 1;
}
int OutQueue(LinkQueue* Q,datatype &x)
{
QNode *p;
if(Q->front==NULL&&Q->rear==NULL)
return 0;
p=Q->front;
x=p->data;
if(Q->rear==Q->front&&Q->rear!=NULL)
Q->rear=Q->front=NULL;
else
Q->front=Q->front->next;
free(p);
return 1;
}
int ShowMenu()
{
printf("***** 排队系统 *****\n");
printf("1 排队\n");
printf("2 就诊\n");
printf("3 查看排队\n");
printf("4 下班\n");
printf("***** 排队系统 *****\n");
return 1;
}
int ShowMenu1()
{
printf("请选择诊室:\n");
printf("1 内科 2 外科 3 五官科 4 口腔科\n");
return 1;
}
int getlength(LinkQueue* &Q){
QNode *p;
p=Q->front;
int n=0;
while(p!=NULL){
p=p->next;
n++;
}
return n;
}
void show(LinkQueue* &Q)
{
QNode *p;
p=Q->front;
int n=0;
while(p!=NULL){
printf("%d\n",p->data);
p=p->next;
}
}
int main()
{
LinkQueue* Q,*Q1,*Q2,*Q3;
InitQueue(Q);InitQueue(Q1);InitQueue(Q2);InitQueue(Q3);
datatype x;
while(1){
ShowMenu();
scanf("%d",&x);
if(x==1){
ShowMenu1();
scanf("%d",&x);
if(x==1){
printf("请输入病历号:\n");
scanf("%d",&x);
InQueue(Q,x);
printf("挂号成功请等候,您前面排队人数%d\n",getlength(Q)-1);
}else if(x==2){
printf("请输入病历号:\n");
scanf("%d",&x);
InQueue(Q1,x);
printf("挂号成功请等候,您前面排队人数%d\n",getlength(Q1)-1);
}else if(x==3){
printf("请输入病历号:\n");
scanf("%d",&x);
InQueue(Q2,x);
printf("挂号成功请等候,您前面排队人数%d\n",getlength(Q2)-1);
}else if(x==4){
printf("请输入病历号:\n");
scanf("%d",&x);
InQueue(Q3,x);
printf("挂号成功请等候,您前面排队人数%d\n",getlength(Q3)-1);
}else {
printf("请再试一次\n");
}
}else if(x==2){
ShowMenu1();
scanf("%d",&x);
if(x==1){
if(QueueEmpty(Q)==1){
printf("该诊室尚无人排队\n");
}else{
OutQueue(Q,x);
printf("请%d病人到内科看病\n",x);
}
}else if(x==2){
if(QueueEmpty(Q1)==1){
printf("该诊室尚无人排队\n");
}else{
OutQueue(Q1,x);
printf("请%d病人到外科看病\n",x);
}
}else if(x==3){
if(QueueEmpty(Q2)==1){
printf("该诊室尚无人排队\n");
}else{
OutQueue(Q2,x);
printf("请%d病人到五官科看病\n",x);
}
}else if(x==4){
if(QueueEmpty(Q3)==1){
printf("该诊室尚无人排队\n");
}else{
OutQueue(Q3,x);
printf("请%d病人到口腔科看病\n",x);
}
}else{
printf("请再试一次\n");
}
}else if(x==3){
ShowMenu1();
scanf("%d",&x);
if(x==1){
if(QueueEmpty(Q)==1){
printf("该诊室尚无人排队\n");
}else{
printf("该诊室排队人数%d:\n",getlength(Q));
show(Q);
}
}else if(x==2){
if(QueueEmpty(Q1)==1){
printf("该诊室尚无人排队\n");
}else{
printf("该诊室排队人数%d:\n",getlength(Q1));
show(Q1);
}
}else if(x==3){
if(QueueEmpty(Q2)==1){
printf("该诊室尚无人排队\n");
}else{
printf("该诊室排队人数%d:\n",getlength(Q2));
show(Q2);
}
}else if(x==4){
if(QueueEmpty(Q3)==1){
printf("该诊室尚无人排队\n");
}else{
printf("该诊室排队人数%d:\n",getlength(Q3));
show(Q3);
}
}else{
printf("请再试一次\n");
}
}else if(x==4){
break;
}else{
printf("请再试一次\n");
}
}
}
效果图:
