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

来源:互联网 发布:nginx 图片服务器搭建 编辑:程序博客网 时间:2024/05/16 04:07

/*   

* 烟台大学计算机与控制工程学院   

* 作者:王雪松  

* 完成日期:2016年10月14日   

*   

* 问题描述:

          编写一个程序,反映病人到医院看病,排队看医生的情况。在病人排队过程中,主要重复两件事: 
  (1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。 
  (2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。 
  要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下: 
  (1)排队——输入排队病人的病历号,加入到病人排队队列中。 
  (2)就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。 
  (3)查看排队——从队首到队尾列出所有的排队病人的病历号。 
  (4)不再排队,余下顺序就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。 
  (5)下班——退出运行,提示未就诊的病人明天再来。 
  运行结果可以如下图所示: 
      

*/

代码:

[csharp] 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
原创粉丝点击