1.c语言实现 编写一个程序实现就医管理。在病人就医过程中,主要发生三件事:(1)预检,分科室,挂号。不同科室都就是从1号开始挂号。如,内科1号,外科1号,眼科1号等;(2)病人到达诊室,将病历本交给护士,排到等待队列中候诊,不同科室,不同队列。(3)护士从等待队列中取出一位病人得病历,该病人进入诊室就诊。 3.功能要求 (1)挂号预检,分科室,生成就诊号; (2)排队输入病人得到就诊号,加入到不同科室的病人排队队列中; (3)就诊病人排队队列中最前面的病人就诊,并将其从队列中删除; (4)查询排队病人从队首到队尾的病历号; (5)下班退出运行;
时间: 2024-03-03 14:48:15 浏览: 97
基于c语言实现的病人就医管理系统源码+sln解决方案.zip
好的,我可以给您提供一份实现代码供您参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_DEPT_NUM 10
#define MAX_QUEUE_LEN 100
typedef struct {
int id; // 病历号
int dept; // 科室号
} Patient;
typedef struct {
Patient data[MAX_QUEUE_LEN];
int front, rear;
} Queue;
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
int isQueueEmpty(Queue *q) {
return q->front == q->rear;
}
int isQueueFull(Queue *q) {
return (q->rear + 1) % MAX_QUEUE_LEN == q->front;
}
int enqueue(Queue *q, Patient p) {
if (isQueueFull(q)) {
return 0;
}
q->data[q->rear] = p;
q->rear = (q->rear + 1) % MAX_QUEUE_LEN;
return 1;
}
int dequeue(Queue *q, Patient *p) {
if (isQueueEmpty(q)) {
return 0;
}
*p = q->data[q->front];
q->front = (q->front + 1) % MAX_QUEUE_LEN;
return 1;
}
int countQueue(Queue *q) {
return (q->rear - q->front + MAX_QUEUE_LEN) % MAX_QUEUE_LEN;
}
void printQueue(Queue *q) {
int i;
for (i = q->front; i != q->rear; i = (i + 1) % MAX_QUEUE_LEN) {
printf("%d ", q->data[i].id);
}
printf("\n");
}
int main() {
Queue queues[MAX_DEPT_NUM];
int i, ret;
Patient p;
for (i = 0; i < MAX_DEPT_NUM; i++) {
initQueue(&queues[i]);
}
while (1) {
printf("请选择操作:\n");
printf("1. 挂号预检\n");
printf("2. 排队等候\n");
printf("3. 就诊\n");
printf("4. 查询排队\n");
printf("5. 退出\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入科室号:\n");
int dept;
scanf("%d", &dept);
p.id = countQueue(&queues[dept]) + 1;
p.dept = dept;
printf("就诊号为:%d\n", p.id);
enqueue(&queues[dept], p);
break;
case 2:
printf("请输入科室号和姓名:\n");
char name[MAX_NAME_LEN];
scanf("%d%s", &dept, name);
p.id = countQueue(&queues[dept]) + 1;
p.dept = dept;
printf("就诊号为:%d\n", p.id);
enqueue(&queues[dept], p);
break;
case 3:
printf("请输入科室号:\n");
scanf("%d", &dept);
if (dequeue(&queues[dept], &p)) {
printf("就诊病人为:%d\n", p.id);
} else {
printf("队列为空\n");
}
break;
case 4:
printf("请输入科室号:\n");
scanf("%d", &dept);
printf("排队病人为:");
printQueue(&queues[dept]);
break;
case 5:
for (i = 0; i < MAX_DEPT_NUM; i++) {
while (!isQueueEmpty(&queues[i])) {
dequeue(&queues[i], &p);
}
}
exit(0);
}
}
return 0;
}
```
这份代码实现了上述五个功能,每个功能都在 `switch` 语句中分别对应一个 `case` 分支。我们首先定义了一个 `Patient` 结构体表示病人,其中 `id` 表示病历号,`dept` 表示科室号。然后定义了一个 `Queue` 结构体表示队列,使用循环数组实现,包含 `front` 和 `rear` 两个指针。
在主函数中,我们首先初始化了 `MAX_DEPT_NUM` 个队列,然后进入一个死循环,让用户选择操作。不同操作对应不同的 `case` 分支,具体实现如下:
1. 挂号预检
用户输入科室号,根据该科室号找到对应的队列,生成一个新的病历号并返回给用户,将病人信息添加到队列中。
2. 排队等候
用户输入科室号和姓名,根据该科室号找到对应的队列,生成一个新的病历号并返回给用户,将病人信息添加到队列中。
3. 就诊
用户输入科室号,根据该科室号找到对应的队列,从队列中取出队首的病人信息,并将其从队列中删除。
4. 查询排队
用户输入科室号,根据该科室号找到对应的队列,遍历队列并输出所有病历号。
5. 退出
程序退出前,需要将所有队列中的病人信息清空,释放所有内存。
以上就是这个程序的主要实现思路和代码,您可以根据您的需求和实际情况进行修改和完善。
阅读全文