第七周项目5- 排队看病模拟

来源:互联网 发布:神经性耳鸣 知乎 编辑:程序博客网 时间:2024/05/22 14:09
问题描述及代码:[cpp] view plain copy1./*    2.*烟台大学计控学院     3.*作    者:朱建豪    4.*完成日期:2016年10月14日 5.*问题描述:编写一个程序,反映病人到医院看病,排队看医生的情况。在病人排队过程中,主要重复两件事:  6.   (1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。  7.   (2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。  8.   要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下:  9.   (1)排队——输入排队病人的病历号,加入到病人排队队列中。  10.   (2)就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。  11.   (3)查看排队——从队首到队尾列出所有的排队病人的病历号。  12.   (4)不再排队,余下顺序就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。  13.   (5)下班——退出运行,提示未就诊的病人明天再来。  14.*/  [cpp] view plain copy1.#include<stdio.h>  2.#include<malloc.h>  3.typedef struct qnode  4.{  5.    int data;  6.    struct qnode *next;  7.}QNode; /*链队结点类型*/  8.typedef struct  9.{  10.    QNode *front,*rear;  11.} QuType;           /*链队类型*/  12.void SeeDoctor()  13.{  14.    int sel,flag=1,find,no;  15.    QuType *qu;  16.    QNode *p;  17.    qu=(QuType *)malloc(sizeof(QuType));    /*创建空队*/  18.    qu->front=qu->rear=NULL;  19.    while (flag==1)                             /*循环执行*/  20.    {  21.        printf("1:排队 2:就诊 3:查看排队 4.不再排队,余下依次就诊 5:下班  请选择:");  22.        scanf("%d",&sel);  23.        switch(sel)  24.        {  25.        case 1:  26.            printf("  >>输入病历号:");  27.            do  28.            {  29.                scanf("%d",&no);  30.                find=0;  31.                p=qu->front;  32.                while (p!=NULL && !find)  33.                {  34.                    if (p->data==no)  35.                        find=1;  36.                    else  37.                        p=p->next;  38.                }  39.                if (find)  40.                    printf("  >>输入的病历号重复,重新输入:");  41.            }  42.            while (find==1);  43.            p=(QNode *)malloc(sizeof(QNode));   /*创建结点*/  44.            p->data=no;  45.            p->next=NULL;  46.            if (qu->rear==NULL)                 /*第一个病人排队*/  47.            {  48.                qu->front=qu->rear=p;  49.            }  50.            else  51.            {  52.                qu->rear->next=p;  53.                qu->rear=p; /*将*p结点入队*/  54.            }  55.            break;  56.        case 2:  57.            if (qu->front==NULL)                /*队空*/  58.                printf("  >>没有排队的病人!\n");  59.            else                                /*队不空*/  60.            {  61.                p=qu->front;  62.                printf("  >>病人%d就诊\n",p->data);  63.                if (qu->rear==p)            /*只有一个病人排队的情况*/  64.                {  65.                    qu->front=qu->rear=NULL;  66.                }  67.                else  68.                    qu->front=p->next;  69.                free(p);  70.            }  71.            break;  72.        case 3:  73.            if (qu->front==NULL)            /*队空*/  74.                printf("  >>没有排列的病人!\n");  75.            else                            /*队不空*/  76.            {  77.                p=qu->front;  78.                printf("  >>排队病人:");  79.                while (p!=NULL)  80.                {  81.                    printf("%d ",p->data);  82.                    p=p->next;  83.                }  84.                printf("\n");  85.            }  86.            break;  87.        case 4:  88.            if (qu->front==NULL)            /*队空*/  89.                printf("  >>没有排列的病人!\n");  90.            else                            /*队不空*/  91.            {  92.                p=qu->front;  93.                printf("  >>病人按以下顺序就诊:");  94.                while (p!=NULL)  95.                {  96.                    printf("%d ",p->data);  97.                    p=p->next;  98.                }  99.                printf("\n");  100.            }  101.            flag=0;                         /*退出*/  102.            break;  103.        case 5:  104.            if (qu->front!=NULL)            /*队不空*/  105.                printf("  >>请排队的病人明天就医!\n");  106.            flag=0;                     /*退出*/  107.            break;  108.        }  109.    }  110.    p=qu->front;  //销毁队列  111.    while (p!=NULL)  112.    {  113.        free(p);  114.        p = p->next;  115.    }  116.}  117.  118.int main()  119.{  120.    SeeDoctor();  121.    return 0;  122.}      运行结果:   <img src="http://img.blog.csdn.net/20151014145927884" alt="" />   知识点总结:   链队的基本运算以及whil循环和switch语句  
学习心得:  这个题目符合逻辑理解起来挺容易的  

0 0
原创粉丝点击