本文为数据结构与算法课设--《医院候诊排队系统》课题的分享,采用了可以选择出队的队列结构,可以分科室的进行患者新增和删去,按要求的完成了设计内容。
目录
1.设计内容和要求
设计内容: 设计一个医院候诊排队系统。问题描述:医院各科室的医生有限,因此病人到医院看病时必须排队候诊,而病人的病情有轻重之分,不能简单的根据先来先服务的原则进行诊断治疗,所以医院根据病人的病情规定了不同的优先级别。医生在诊断治疗时,总是选择优先级别高的病人先治疗,如果遇到两个优先级别相同的病人,则选择最先来排队的病人进行诊治。 设计要求: (1)用队列模拟上述排队候诊的问题,建立队列分别对应不同优先级别,按照从终端读入的输入数据的方式进行模拟管理。 输入1,表示有新的病人加入队列候诊,根据病情指定其优先级别; 输入2,表示医生根据优先级别为病人进行诊治; 输入3,表示退出系统。 (2)要求界面友好美观,操作方便易行; (3) 注意程序的实用性、安全性; |
2.功能分析和程序调试
功能分析:
本课题实际只解决两个问题,一个是入队,另一个是有选择的出队。由于病人的数量并不明确,所以采用链式队列的存储方式。
课题中并没有区别科室,但是结合实际生活,我们采用一个结构体数组来表示一个科室,并在其中封装队列的头尾指针和已经存储的病人数量便于判断。入队采取尾插入法,再加入对于空队列的一个判断就可以通过选择来进行新增病人的操作。
至于选择性的出队,对于一个链表,使用一个指针存取病情最严重的病人(优先级别最高),然后在原队列中删除他,最后进行显示输出即可。
程序调试:
开始运行程序,打印菜单开始选择。
开始进行病人信息的插入,这里构造一组数据来检查程序。这里键入信息后通过输出可以发现键入信息的功能正确。
从这里开始调试执行删去病人的操作,第一张图发现出队时是按照病情程度(优先级)来选择最严重的病人先输出的,第二张图发现是在病人病情都相同时,按照先来后到的顺序输出。验证发现功能实现了。
3.代码实现
1.结构体定义
typedef struct patient {
char name[10];
int illness;
struct patient* next;
}Pat;
typedef struct doc {
char name[20];
Pat* front;
Pat* rear;
int num_patient = 0;
}Doctor;
Doctor Doc[4]; //全局变量 存储科室信息
2.添加病人操作
void In_queue() {
int input;
Pat* newpat =(Pat*)malloc(sizeof(Pat));
if (!newpat) {
printf("内存分配失败\n");
return;
}
Menu2();
printf("请选择就诊科室 (1-%d)\n", sizeof(Doc) / sizeof(Doc[0]));
scanf("%d", &input);
if (input < 0 || in