zoukankan      html  css  js  c++  java
  • 就诊管理(数据结构小学期)

    暑假期间,在学校小学期做了数据结构的第二阶段作业,就诊管理。

    就诊管理模拟病人到医院看病,选择看病的诊室排队看医生的情况。在病人排队过程中,主要重复两件事:病人到达诊室,将病历本交给护士,排到等待队列中候诊。护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊(请参照铁大医院设置科室)

    设计要求:

    要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下:

    (1) 显示可选择的各诊室。

    (2) 排队——输入排队病人的病历号,加入到某诊室病人排队队列中。

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

    (4) 查看各诊室排队——从队首到队尾列出所有的该诊室排队病人的病历号。

    (5) 不再排队,余下依次就诊——从队首到队尾列出所有的排队病人的病历号及就诊诊室,并退出运行。

    (6) 下班——退出运行。

    #pragma warning(disable:4996)
    #include <stdio.h>  
    #include <malloc.h>  
    typedef struct qnode
    {
        int data;
        struct qnode* next;
    } QNode;            /*链队结点类型*/
    
    typedef struct
    {
        QNode* front, * rear;
    } QuType;           /*链队类型*/
    //排队
    void PaiDui(QuType* qu,int num)
    {
            int find;
            QNode* p, * q;
            find = 0;
            p = qu->front;
            while (p != NULL && !find)
            {
                if (p->data == num)
                    find = 1;
                else
                    p = p->next;
            }
            if (find) 
            {
                printf("病历号重复,该病人之前已进入到队列
    ");
            }
            else 
            {
                p = (QNode*)malloc(sizeof(QNode));   /*创建结点*/
                p->data = num;
                p->next = NULL;
                if (qu->rear == NULL)                 /*第一个病人排队*/
                {
                    qu->front = qu->rear = p;
                }
                else
                {
                    qu->rear->next = p;
                    qu->rear = p; /*将*p结点入队*/
                }
            }
            
    }
    //就诊
    int JiuZhen(QuType* qu) 
    {
        QNode* p, * q;
        int jiuzhen=-1;
        if (qu->front == NULL) 
        {
            printf("没有排队中的病人");
        }
        else
        {
            p = qu->front;
            jiuzhen = p->data;
            printf("病人%d就诊",p->data);
            if (qu->rear == p) 
            {
                qu->front = qu->rear = NULL;
            }
            else 
            {
                qu->front = p->next;
            }
            free(p);
        }
        return jiuzhen;
    }
    //查询各诊室排队情况
    void queryPaidui(QuType *qu) 
    {
        QNode *p;
        if (qu->front == NULL)            /*队空*/
                    printf("  >>没有排列的病人!
    ");
                else                            /*队不空*/
                {
                    p = qu->front;
                    printf("  >>排队病人:");
                    while (p != NULL)
                    {
                        printf("%d ", p->data);
                        p = p->next;
                    }
                    printf("
    ");
                }
    }
    //全部就诊
    void allJiuZhen(QuType *qu) 
    {
        QNode* p;
                if (qu->front == NULL)            /*队空*/
                    printf("  >>没有排列的病人!
    ");
                else                            /*队不空*/
                {
                    p = qu->front;
                    printf("  >>病人按以下顺序就诊:");
                    while (p != NULL)
                    {
                        printf("%d ", p->data);
                        p = p->next;
                    }
                    printf("
    ");
                }   
    }
    void SeeDoctor()
    {
        int sel, flag = 1, no,keshi,num=-1;
        int bingli[100];
        int zhenshi[100];
        int jilu=0,see3,see4;
        int m, n, j;
        QuType* qu,*qu1,*qu2,*qu3;
        qu = (QuType*)malloc(sizeof(QuType));    /*创建空队*/
        qu1 = (QuType*)malloc(sizeof(QuType));
        qu2 = (QuType*)malloc(sizeof(QuType));
        qu3 = (QuType*)malloc(sizeof(QuType));
        qu->front = qu->rear = NULL;
        qu1->front = qu1->rear = NULL;
        qu2->front = qu2->rear = NULL;
        qu3->front = qu3->rear = NULL;
        while (flag == 1) {
             printf("                                ***********************************************
    ");
            printf("                                                1.选择诊室
    ");
            printf("                                                2.排队
    ");
            printf("                                                3.就诊
    ");
            printf("                                                4.查看各诊室排队
     ");
            printf("                                               5.不再排队,依次就诊
    ");
            printf("                                                6.下班
    ");
            printf("                                ***********************************************
    ");
            printf("请选择:");
            scanf("%d",&sel);
            switch (sel)
            {
            case 1:
                n = 1; 
                j = 0;
                printf("1.外科 2.内科 3.皮肤科 4.骨科
    ");        //选择诊室,并分配病历号
                scanf("%d", &keshi);
                zhenshi[jilu] = keshi;
                printf("分配病历号:");
                scanf("%d",&no);
                while (n)                                     //判断病历号分配是否有重复
                {
                    for (int i = 0; i < jilu;i++) 
                    {
                        if (no == bingli[i]) 
                        {
                            printf("病历号重复!请重新分配:");
                            break;
                        }
                        else 
                        {
                            j++;
                        }
                    }
                    if (j == jilu)break;
                    else 
                    {
                        scanf("%d", &no);
                    }
                }    
                bingli[jilu] = no;
                jilu++;
                break;
            case 2:
                printf("  >>输入病历号:");
                scanf("%d",&num);
                m = -1;
                n = 0;
                for (int i = 0; i < jilu; i++) //获取排队病历号的诊室
                {
                    if (num == bingli[i]) 
                    {
                        m = zhenshi[i];
                        break;
                    }
                    else 
                    {
                        n++;
                    }
                }
                if(n==jilu)
                {
                    printf("该病例号并未被分配,请到诊室挂号再排队
    ");
                }
                else 
                {
                    switch (m) //根据不同诊室进行排队
                    {
                        case 1:
                            PaiDui(qu,num);
                            break;
                        case 2:
                            PaiDui(qu1,num);
                            break;
                        case 3:
                            PaiDui(qu2,num);
                            break;
                        case 4:
                            PaiDui(qu3,num);
                            break;
                    }
                }
                break;
            case 3:
                int panduan;
                printf("就诊诊室:1.外科 2.内科 3.皮肤科 4.骨科
    ");
                scanf("%d",&see3);
                switch (see3)
                {
                case 1:
                    panduan = JiuZhen(qu);
                    if (panduan >= 0) //删除已就诊的病历号
                    {
                        for (int i = 0; i < jilu; i++)
                        {
                            if (bingli[i] == panduan)
                            {
                                if (i == jilu - 1) { jilu--; }
                                else
                                {
                                    for (int j = i; j < jilu-1; j++)
                                    {
                                        bingli[i] = bingli[i + 1];
                                        zhenshi[i] = zhenshi[i + 1];
                                    }
                                    jilu--;
                                }
                                break;
                            }
    
                        }
                    }
                    break;
                case 2:
                    panduan = JiuZhen(qu1);
                    if (panduan >= 0)
                    {
                        for (int i = 0; i < jilu; i++)
                        {
                            if (bingli[i] == panduan)
                            {
                                if (i == jilu - 1) { jilu--; }
                                else
                                {
                                    for (int j = i; j < jilu-1; j++)
                                    {
                                        bingli[i] = bingli[i + 1];
                                        zhenshi[i] = zhenshi[i + 1];
                                    }
                                    jilu--;
                                }
                                break;
                            }
                            
                        }
                    }
                    break;
                case 3:
                    panduan = JiuZhen(qu2);
                    if (panduan >= 0)
                    {
                        for (int i = 0; i < jilu; i++)
                        {
                            if (bingli[i] == panduan)
                            {
                                if (i == jilu - 1) { jilu--; }
                                else
                                {
                                    for (int j = i; j < jilu-1; j++)
                                    {
                                        bingli[i] = bingli[i + 1];
                                        zhenshi[i] = zhenshi[i + 1];
                                    }
                                    jilu--;
                                }
                                break;
                            }
    
                        }
                    }
                    break;
                case 4:
                    panduan = JiuZhen(qu3);
                    if (panduan >= 0)
                    {
                        for (int i = 0; i < jilu; i++)
                        {
                            if (bingli[i] == panduan)
                            {
                                if (i == jilu - 1) { jilu--; }
                                else
                                {
                                    for (int j = i; j < jilu-1; j++)
                                    {
                                        bingli[i] = bingli[i + 1];
                                        zhenshi[i] = zhenshi[i + 1];
                                    }
                                    jilu--;
                                }
                                break;
                            }
    
                        }
                    }
                    break;
                default:
                    printf("输入格式错误!");
                    break;
                }
                break;
            case 4:
                printf("查看排队情况:
    ");
                printf("1.外科 2.内科 3.皮肤科 4.骨科
    ");
                scanf("%d",&see4);
                switch (see4)
                {
                case 1:
                    queryPaidui(qu);
                    break;
                case 2:
                    queryPaidui(qu1);
                    break;
                case 3:
                    queryPaidui(qu2);
                    break;
                case 4:
                    queryPaidui(qu3);
                    break;
                }
                break;
            case 5:
                printf("外科诊室:");
                allJiuZhen(qu);
                printf("内科诊室:");
                allJiuZhen(qu1);
                printf("皮肤科诊室:");
                allJiuZhen(qu2);
                printf("骨科诊室:");
                allJiuZhen(qu3);
                flag = 0;
                break;
            case 6:
                if (qu->front != NULL|| qu1->front != NULL|| qu2->front != NULL|| qu3->front != NULL)            /*队不空*/
                printf("  >>请排队的病人明天就医!
    ");
                flag = 0; 
                break;
            default:
                printf("输入格式错误!");
                break;
        }
        }
       
    }
    int main()
    {
        SeeDoctor();
        return 0;
    }
    

     选择了四个诊室,如果有需求可以继续添加诊室,只需要再次添加几个队列就可以。

    以上就是此次数据结构小学期第二阶段作业所得

    作者:哦心有
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    MVC通过后台注解来添加对数据的验证。
    HTML赋值方法练习
    HTML辅助方法的练习一
    第一次接触MVC Models概念
    部分视图的理解
    使用布局文件(Layout)
    springboot基本配置及快速启动
    springboot代码测试注意事项
    logback日志的基本使用
    springboot快速创建项目框架
  • 原文地址:https://www.cnblogs.com/haobox/p/14977077.html
Copyright © 2011-2022 走看看