病人就医管理系统
一.课程设计目的
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; else p = 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; } else qu->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; }
运行结果: