病人看病模拟程序

6. 编写病人看病模拟程序。在病人排队过程中主要重复以下两件事:

(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊;

(2)护士从等待队列中取出下一位病人的病历,该病人进入就诊室候诊。

要求模拟病人等待就诊这一过程,主要功能说明如下:

(1)排队—>输入排队病人的病历号,加入到病人排队队列中。

(2)就诊—>病人排队队列中最前面的病人就诊,并将其从队列中删除。

(3)查看排队—>从队首到队尾列出所有排队病人的病历号。
 

#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int patientId;
    struct Node* next;
} Node;

typedef struct Queue {
    Node* front;
    Node* rear;
} Queue;

void initQueue(Queue* queue) {
    queue->front = NULL;
    queue->rear = NULL;
}

int isEmpty(Queue* queue) {
    return queue->front == NULL;
}

void enqueue(Queue* queue, int patientId) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->patientId = patientId;
    newNode->next = NULL;
    if (isEmpty(queue)) {
        queue->front = newNode;
        queue->rear = newNode;
    }
    else {
        queue->rear->next = newNode;
        queue->rear = newNode;
    }
}

int dequeue(Queue* queue) {

    Node* nodeToDelete = queue->front;
    int patientId = nodeToDelete->patientId;
    queue->front = nodeToDelete->next;//直接指向下一个
    free(nodeToDelete);
    if (queue->front == NULL) {
        queue->rear = NULL;
        //当queue->front == NULL为空时
        //基于前面的已经指向了下一个位置,
        //可以确定此时已经遍历完了整个队列,所以说,
        //队尾也要更新为NULL
        //因为我们这是删除队列的操作,如果说,删除完
        //当前元素后下一个为空,那就说明当前队列为空
        //当然要将队头尾都重置!
    }
    return patientId;
}

void displayQueue(Queue* queue) {
    if (isEmpty(queue)) {
        printf("Queue is empty.\n");
        return;
    }
    Node* currentNode = queue->front;
    while (currentNode != NULL) {
        printf("%d ", currentNode->patientId);
        currentNode = currentNode->next;
    }
    printf("\n");

    //return  没必要写,等它执行结束函数也行
}

int main() {
    Queue queue;
    initQueue(&queue);

    int choice, patientId;
    do {
        printf("1. 排队\n");
        printf("2. 就诊\n");
        printf("3. 查看排队\n");
        printf("0. 退出\n");
        printf("请输入您的选择: ");
        scanf("%d", &choice);

        switch (choice) {
        case 1:
            printf("请输入病历号: ");
            scanf("%d", &patientId);
            enqueue(&queue, patientId);
            break;
        case 2:
            if (!isEmpty(&queue)) {
                printf("就诊病历号: %d\n", dequeue(&queue));
            }
            else {
                printf("队列为空,没有病人在等待就诊。\n");
            }
            break;
        case 3:
            printf("当前排队病人的病历号: ");
            displayQueue(&queue);
            break;
        case 0:
            printf("程序已退出。\n");
            break;
        default:
            printf("无效选择,请重新输入。\n");
            break;
        }

        printf("\n");
    } while (choice != 0);

    return 0;
}


### 回答1: 病人看病模拟程序可以用来模拟病人看医生的整个流程,包括预约看病、挂号、等待、就诊、开药等步骤。以下是一个简单的程序实现: 首先,程序需要一个病人的信息类,包括病人的姓名、年龄、性别等基本信息。此外,还需要一个医生的信息类,包括医生的姓名、科室、职称等信息。 接下来,程序需要实现以下功能: 1. 病人可以通过程序进行预约,输入自己的基本信息,选择预约的医生和预约日期。 2. 程序根据病人的选择,显示可用的挂号号码,病人可以选择一个号码进行挂号。 3. 程序显示病人所选择医生的就诊时间段,病人需要在约定的时间段去医院等待就诊。 4. 程序模拟病人的等待过程,可以使用随机数模拟等待的时间,让病人感受到实际就诊时的等待。 5. 病人就诊时,医生会询问病人的病情和症状,可以通过回答问题进行模拟。 6. 医生根据病人的症状,可以开出相应的药方,包括药名、用法等信息。 7. 程序结束后,可以将病人就诊的整个过程记录下来,包括预约信息、挂号信息、就诊信息等。 通过这个病人看病模拟程序,可以让用户更加了解看病的流程,提前了解医生的情况,并且增强了对就诊过程的模拟体验。同时,也可以方便用户记录和回顾就诊的过程,对于治疗和治愈疾病具有一定帮助。此外,还可以根据实际需要进行一些功能的扩展,如添加医院、医生、药品等信息,实现更加全面的病人看病模拟程序。 ### 回答2: 病人看病模拟程序可以使用C语言编写,以下是一个简单的示例: ```c #include <stdio.h> int main() { int age; char gender; float temperature; printf("欢迎来到病人看病模拟程序!\n"); printf("请输入您的年龄:"); scanf("%d", &age); printf("请输入您的性别(M表示男性,F表示女性):"); scanf(" %c", &gender); printf("请输入您的体温:"); scanf("%f", &temperature); printf("\n正在分析您的情况...\n\n"); // 根据输入的信息进行判断和建议 if (age >= 60) { printf("年龄偏大,建议注意身体健康状况。\n"); } if (gender == 'F' && temperature > 37.5) { printf("体温过高,建议您去医院进行检查。\n"); } if (age >= 18 && age <= 60) { printf("年龄在工作阶段,建议您保持规律的作息和健康的生活方式。\n"); } printf("\n谢谢使用病人看病模拟程序!祝您身体健康!\n"); return 0; } ``` 上述代码实现了一个简单的病人看病模拟程序。程序会要求病人输入年龄、性别和体温,然后根据输入的信息进行判断和给出相应的建议。例如,如果病人年龄大于等于60岁,则程序会建议病人注意身体健康状况;如果病人是女性且体温超过37.5摄氏度,则程序会建议病人去医院进行检查;如果病人年龄在18岁至60岁之间,则程序会建议病人保持规律的作息和健康的生活方式。最后,程序会打印出感谢信息和祝愿病人身体健康。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值