第七周项目五排队看病模拟

  1. /*   
  2. * Copyright (c) 2016, 烟台大学计算机与控制工程学院   
  3. * All rights reserved.   
  4. * 文件名称:main.cpp  
  5. * 作者:陈鹏鹏  
  6. * 完成日期:2016年10月16日   
  7. * 版本号:codeblocks   
  8. *   
  9. * 问题描述: 编写一个程序,反映病人到医院看病,排队看医生的情况。在病人排队过程中,主要重复两件事:   
  10. *(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。   
  11. *(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。   
  12. * 输入描述:(1)排队——输入排队病人的病历号,加入到病人排队队列中。   
  13. *           (2)就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。   
  14. *           (3)查看排队——从队首到队尾列出所有的排队病人的病历号。   
  15. *           (4)不再排队,余下顺序就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。   
  16. *           (5)下班——退出运行,提示未就诊的病人明天再来。   
  17. * 程序输出:<img src="https://img-blog.csdn.net/20151014182819999?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />  
  18. */      


代码:

[cpp]  view plain  copy
  1. #include <stdio.h>    
  2. #include <malloc.h>    
  3. typedef struct qnode    
  4. {    
  5.     int data;    
  6.     struct qnode *next;    
  7. } QNode;            /*链队结点类型*/    
  8.     
  9. typedef struct    
  10. {    
  11.     QNode *front,*rear;    
  12. } QuType;           /*链队类型*/    
  13.     
  14. void SeeDoctor()    
  15. {    
  16.     int sel,flag=1,find,no;    
  17.     QuType *qu;    
  18.     QNode *p,*q;    
  19.     qu=(QuType *)malloc(sizeof(QuType));    /*创建空队*/    
  20.     qu->front=qu->rear=NULL;    
  21.     while (flag==1)                             /*循环执行*/    
  22.     {    
  23.         printf("1:排队 2:就诊 3:查看排队 4.不再排队,余下依次就诊 5:下班  请选择:");    
  24.         scanf("%d",&sel);    
  25.         switch(sel)    
  26.         {    
  27.         case 1:    
  28.             printf("  >>输入病历号:");    
  29.             do    
  30.             {    
  31.                 scanf("%d",&no);    
  32.                 find=0;    
  33.                 p=qu->front;    
  34.                 while (p!=NULL && !find)    
  35.                 {    
  36.                     if (p->data==no)    
  37.                         find=1;    
  38.                     else    
  39.                         p=p->next;    
  40.                 }    
  41.                 if (find)    
  42.                     printf("  >>输入的病历号重复,重新输入:");    
  43.             }    
  44.             while (find==1);    
  45.             p=(QNode *)malloc(sizeof(QNode));   /*创建结点*/    
  46.             p->data=no;    
  47.             p->next=NULL;    
  48.             if (qu->rear==NULL)                 /*第一个病人排队*/    
  49.             {    
  50.                 qu->front=qu->rear=p;    
  51.             }    
  52.             else    
  53.             {    
  54.                 qu->rear->next=p;    
  55.                 qu->rear=p; /*将*p结点入队*/    
  56.             }    
  57.             break;    
  58.         case 2:    
  59.             if (qu->front==NULL)                /*队空*/    
  60.                 printf("  >>没有排队的病人!\n");    
  61.             else                                /*队不空*/    
  62.             {    
  63.                 p=qu->front;    
  64.                 printf("  >>病人%d就诊\n",p->data);    
  65.                 if (qu->rear==p)            /*只有一个病人排队的情况*/    
  66.                 {    
  67.                     qu->front=qu->rear=NULL;    
  68.                 }    
  69.                 else    
  70.                     qu->front=p->next;    
  71.                 free(p);    
  72.             }    
  73.             break;    
  74.         case 3:    
  75.             if (qu->front==NULL)            /*队空*/    
  76.                 printf("  >>没有排列的病人!\n");    
  77.             else                            /*队不空*/    
  78.             {    
  79.                 p=qu->front;    
  80.                 printf("  >>排队病人:");    
  81.                 while (p!=NULL)    
  82.                 {    
  83.                     printf("%d ",p->data);    
  84.                     p=p->next;    
  85.                 }    
  86.                 printf("\n");    
  87.             }    
  88.             break;    
  89.         case 4:    
  90.             if (qu->front==NULL)            /*队空*/    
  91.                 printf("  >>没有排列的病人!\n");    
  92.             else                            /*队不空*/    
  93.             {    
  94.                 p=qu->front;    
  95.                 printf("  >>病人按以下顺序就诊:");    
  96.                 while (p!=NULL)    
  97.                 {    
  98.                     printf("%d ",p->data);    
  99.                     p=p->next;    
  100.                 }    
  101.                 printf("\n");    
  102.             }    
  103.             flag=0;                         /*退出*/    
  104.             break;    
  105.         case 5:    
  106.             if (qu->front!=NULL)            /*队不空*/    
  107.                 printf("  >>请排队的病人明天就医!\n");    
  108.             flag=0;                     /*退出*/    
  109.             break;    
  110.         }    
  111.     }    
  112.     p=qu->front;  //销毁队列    
  113.     while (p!=NULL)    
  114.     {    
  115.         q = p->next;    
  116.         free(p);    
  117.         p = q;    
  118.     }    
  119. }    
  120.     
  121. int main()    
  122. {    
  123.     SeeDoctor();    
  124.     return 0;    
  125. }    


运行结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值