用C编写一个程序实现就医管理。在病人就医过程中,主要发生三件事: ⑴预检,分科室,挂号。 ⑵病人到达诊室,将病历本交给护士,排到等待队列中候诊。 ⑶护士从等待队列中取出一位病人的病历,该病人进入诊室就诊。 要求程序采用菜单方式,其选项及功能说明如下: ⑴挂号------预检,分科室,生成就诊号。 ⑵排队------输入病人的就诊号,加入到病人排队队列中。 ⑶就诊-------病人排队队列中最前面的病人就诊,并将其从队列中删除。 ⑷查看排队------从队首到队尾列出所有的排队病人的病历号。 ⑸下班---------退出运行。
时间: 2023-08-15 16:13:23 浏览: 165
以下是用C语言编写的就医管理程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 100 // 队列最大长度
typedef struct {
int pre_check; // 预检结果,0表示不需要,1表示需要
int department; // 科室编号
int visit_num; // 就诊号
} Patient;
typedef struct {
Patient data[MAX_QUEUE_SIZE]; // 队列元素
int front; // 队首指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue* queue) {
queue->front = queue->rear = 0;
}
// 判断队列是否为空
int isEmpty(Queue* queue) {
return queue->front == queue->rear;
}
// 判断队列是否已满
int isFull(Queue* queue) {
return (queue->rear + 1) % MAX_QUEUE_SIZE == queue->front;
}
// 入队
void enqueue(Queue* queue, Patient patient) {
if (isFull(queue)) {
printf("队列已满,无法加入新的病人。\n");
return;
}
queue->data[queue->rear] = patient;
queue->rear = (queue->rear + 1) % MAX_QUEUE_SIZE;
}
// 出队
Patient dequeue(Queue* queue) {
if (isEmpty(queue)) {
printf("队列为空,无法取出病人。\n");
Patient patient = {0, 0, 0};
return patient;
}
Patient patient = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_QUEUE_SIZE;
return patient;
}
// 挂号
void registerPatient(Queue* queue) {
Patient patient;
printf("请输入病人的预检结果(0表示不需要,1表示需要):");
scanf("%d", &patient.pre_check);
printf("请输入病人所在科室编号(1-10):");
scanf("%d", &patient.department);
patient.visit_num = (rand() % 10000) + 1; // 随机生成就诊号
printf("挂号成功,病人的就诊号是%d。\n", patient.visit_num);
enqueue(queue, patient);
}
// 排队
void queueUp(Queue* queue) {
int visit_num;
printf("请输入需要排队的病人的就诊号:");
scanf("%d", &visit_num);
int i;
for (i = queue->front; i != queue->rear; i = (i + 1) % MAX_QUEUE_SIZE) {
if (queue->data[i].visit_num == visit_num) {
printf("加入排队成功。\n");
return;
}
}
printf("该病人不存在或已排队。\n");
}
// 就诊
void visit(Queue* queue) {
Patient patient = dequeue(queue);
if (patient.visit_num == 0) {
printf("当前没有等待就诊的病人。\n");
return;
}
printf("病人%s就诊,就诊号为%d,科室编号为%d。\n", patient.pre_check == 1 ? "需要预检的" : "无需预检的", patient.visit_num, patient.department);
}
// 查看排队
void checkQueue(Queue* queue) {
if (isEmpty(queue)) {
printf("当前没有等待就诊的病人。\n");
return;
}
printf("当前等待就诊的病人的病历号如下:\n");
int i;
for (i = queue->front; i != queue->rear; i = (i + 1) % MAX_QUEUE_SIZE) {
printf("%d ", queue->data[i].visit_num);
}
printf("\n");
}
int main() {
Queue queue;
initQueue(&queue);
int choice;
do {
printf("\n**********欢迎使用就医管理系统**********\n");
printf("1. 挂号\n");
printf("2. 排队\n");
printf("3. 就诊\n");
printf("4. 查看排队\n");
printf("5. 下班\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
registerPatient(&queue);
break;
case 2:
queueUp(&queue);
break;
case 3:
visit(&queue);
break;
case 4:
checkQueue(&queue);
break;
case 5:
printf("谢谢使用,再见!\n");
break;
default:
printf("输入错误,请重新选择操作。\n");
break;
}
} while (choice != 5);
return 0;
}
```
程序中使用了一个队列来存储等待就诊的病人,当医生空闲时,从队列中取出队首的病人进行就诊。程序中还实现了随机生成就诊号的功能。在程序运行过程中,用户可以根据菜单提示进行操作。
阅读全文