病人就医管理系统
一.课程设计目的
1.培养学生程序设计开发的基本素质、思维方法;
2.培养分析和解决问题的能力;
3.使学生在实践过程中灵活运用所学的知识,逐渐掌握复杂软件的设计和开发技能,为后面的认知实习与社会实践打下基础。
二、主要任务
(1)熟练掌握队列的两种存储方式。
(2)掌握队列的基本操作及应用。
(3)利用队列实现病人就医管理模拟程序。
三、项目内容:
【问题描述】
设计一个病人就医管理系统
【基本要求】
编写一个程序定义行医,反映病人到医院看病,排队看医生的情况,在病人排队过程中,
主要发生两件事:
(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。
(2)护士从等待队列中取出一位病人的病历,该病人进入诊室就诊。
要求程序采用菜单方式,其选项及功能说明如下:
(1)排队------输入病人的病历号,加入到病人排队队列中
(2)就诊-------病人排队队列中最前面的病人就诊,并将其从队列中删除。
(3)查看排队------从队首到队尾列出所有的排队病人的病历号。
(4)下班---------退出运行。
【实现提示】
病人到达诊室,输入病人的病历号,加入到病人排队队列中。-病人排队队列中最前面的病人就诊,并将其从队列中删除。
#include <stdio.h>
#include <malloc.h>
typedef struct qnode
{int data;struct qnode* next;
} QNode; /*链队结点类型*/typedef struct
{QNode* front, * rear;
} QuType; /*链队类型*/void SeeDoctor()
{int sel, flag = 1, find, no;QuType* qu;QNode* p, * q;qu = (QuType*)malloc(sizeof(QuType)); /*创建空队*/qu->front = qu->rear = NULL;while (flag == 1) /*循环执行*/{printf("1:排队 2:就诊 3:查看排队 4:下班 请选择:");scanf_s("%d", &sel);switch (sel){case 1:printf(" >>输入病历号:");do{scanf_s("%d", &no);find = 0;p = qu->front;while (p != NULL && !find){if (p->data == no)find = 1;elsep = p->next;}if (find)printf(" >>输入的病历号重复,重新输入:");} while (find == 1);p = (QNode*)malloc(sizeof(QNode)); /*创建结点*/p->data = no;p->next = NULL;if (qu->rear == NULL) /*第一个病人排队*/{qu->front = qu->rear = p;}else{qu->rear->next = p;qu->rear = p; /*将*p结点入队*/}break;case 2:if (qu->front == NULL) /*队空*/printf(" >>没有排队的病人!\n");else /*队不空*/{p = qu->front;printf(" >>病人%d就诊\n", p->data);if (qu->rear == p) /*只有一个病人排队的情况*/{qu->front = qu->rear = NULL;}elsequ->front = p->next;free(p);}break;case 3:if (qu->front == NULL) /*队空*/printf(" >>没有排列的病人!\n");else /*队不空*/{p = qu->front;printf(" >>排队病人:");while (p != NULL){printf("%d ", p->data);p = p->next;}printf("\n");}break;case 5:if (qu->front != NULL) /*队不空*/printf(" >>请排队的病人明天就医!\n");flag = 0; /*退出*/break;}}p = qu->front; //销毁队列while (p != NULL){q = p->next;free(p);p = q;}
}int main()
{SeeDoctor();return 0;
}
运行结果: