标题:求助!!!队列的应用问题!
只看楼主
刘林夕
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2011-10-14
结帖率:0
 问题点数:0 回复次数:0 
求助!!!队列的应用问题!
至少两名以上的医生,挂号时可选择医生,并显示该医生前面有多少人在排队;
4. 病人信息至少包括就诊号,姓名;
5. 程序中只允许通过队列函数实现队列操作,不允许出现数组操作。
6. 挂号系统可参考以下界面
    医院挂号系统
    *********************************************
    *             1---------清空所有队列                *
    *            2---------挂号                        *
    *            3---------看病                        *
    *           4---------当前排队人数                *
    *            0---------退出系统                    *
    *********************************************
    挂号
    *********************************************
    *             1---------刘××医生(××科)        *
    *            2---------张××医生(××科)        *
    *            3---------赵××医生(××科)        *
    *            0---------返回                        *
    *********************************************
    请输入医生选项(1/2/3):1
    请输入就诊号:88560102
    请输入姓名:李一
    挂号成功!您前面有5人在排队
    #include<stdio.h>

typedef struct
{
    int  id[10];
    char name[10];
}datatype;

typedef struct QNode
{
   datatype data;
   struct QNode *next;
} QNode;

typedef struct
{
 QNode  *front; //队头指针
 QNode * rear;  //队尾指针
} LinkQueue;

void InitQueue (LinkQueue *Q)
{
   Q = new LinkQueue;
   Q->front=NULL;
   Q->rear =NULL;
}

int InQueue (LinkQueue *Q  )  //入队
{
    QNode  *s=new QNode;
    datatype p;
    printf("请输入就诊号:") ;
    scanf("%d",p.id);
    printf("请输入姓名:") ;
    scanf("%s",p.name);
    getchar();//?
   s->data=p;
   s->next=NULL;
   if(Q->front==NULL && Q->rear==NULL)//空队
       Q->front=Q->front=s;
   else
     { Q->rear->next=s;   Q->rear=s;  }
}


int OutQueue (LinkQueue *Q, datatype x)//出队
{
    QNode *p;
    if(Q->front==NULL&&Q->rear==NULL)//空队
    p=Q->front;     
    x=p->data;
    if ( Q->rear==Q->front )//只有一个人数
    Q->front==NULL;
    else
    Q->front=Q->front->next;
    delete (p);
    return 1;     
}

int QueueLen(LinkQueue *Q)//计算排队个数
{
    int n=0;
    QNode* p=Q->front;
   if(p==NULL)
   printf("队列为空!");
   else
   while(p!=NULL)
   {
       n++;
       p=p->next;
   }
   return n;
}


void  guahao( LinkQueue *Q1, LinkQueue *Q2, LinkQueue *Q3)                                            //挂号,挂号时显示前面的人数
{
    int x;
    static int a=0,b,c;
    printf("                           挂号\n");
    printf("   **************************************************\n");
    printf("   *             1---------刘××医生(××科)        *\n");
    printf("   *            2---------张××医生(××科)        *\n");
    printf("   *            3---------赵××医生(××科)        *\n");
    printf("   *            0---------返回                        *\n");
    printf("   **************************************************\n");
    printf("请输入医生选项(1/2/3):");               
    scanf("%d",&x);
    while(x!=0)
        {
           switch(x)
           {
              case 1:
              InQueue (Q1);a=QueueLen(Q1);printf("挂号成功!你的前面还有%d人在排队\n",a-1);break;
              case 2:
              InQueue (Q2);b=QueueLen(Q2);printf("挂号成功!你的前面还有%d人在排队\n",b-1);break;
              case 3:
              InQueue (Q3);c=QueueLen(Q3);printf("挂号成功!你的前面还有%d人在排队\n",c-1);break;
           }
           printf("请输入医生选项(1/2/3):");               
           scanf("%d",&x);
        }
}

void kanbing( LinkQueue *Q1, LinkQueue *Q2, LinkQueue *Q3)                                                 //看病
{
    datatype p;
    int x;
    printf("请输入诊号:") ;
    scanf("%d",p.id);
    printf("请输入姓名:") ;
    scanf("%s",p.name);
    getchar();
    printf("                           看病\n");
    printf("   **************************************************\n");
    printf("   *             1---------刘××医生(××科)        *\n");
    printf("   *            2---------张××医生(××科)        *\n");
    printf("   *            3---------赵××医生(××科)        *\n");
    printf("   *            0---------返回                        *\n");
    printf("   **************************************************\n");               
    printf("请输入医生选项(1/2/3):");   
    scanf("%d",&x);
    while(x)
    {
       switch(x)
       {
        case  1:OutQueue (Q1, p );break;
        case  2:OutQueue (Q2, p );break;
        case  3:OutQueue (Q3, p );break;
       }
      printf("请输入医生选项(1/2/3):");
      scanf("%d",&x);
    }
}
                                                            //查询
void chaxun( LinkQueue *Q1, LinkQueue *Q2, LinkQueue *Q3)
{
    int x;
    printf("                           查询\n");
    printf("   **************************************************\n");
    printf("   *             1---------刘××医生(××科)        *\n");
    printf("   *            2---------张××医生(××科)        *\n");
    printf("   *            3---------赵××医生(××科)        *\n");
    printf("   *            0---------返回                        *\n");
    printf("   **************************************************\n");               
    printf("请输入医生选项(1/2/3):");   
    scanf("%d",&x);
        while(x)
        {
           switch(x)
          {
            case 1: printf("1号医生排队人数:%d\n",QueueLen(Q1)-1);break;
            case 2: printf("2号医生排队人数:%d\n",QueueLen(Q2)-1);break;
            case 3: printf("3号医生排队人数:%d\n",QueueLen(Q3)-1);break;
          }
          printf("输入查询医生选项(1/2/3):");
          scanf("%d",&x);
        }
}

main()
{
    LinkQueue *Q1=new  LinkQueue;
    LinkQueue *Q2=new  LinkQueue;
    LinkQueue *Q3=new  LinkQueue;
    int x;
    printf("                       医院挂号系统\n"  );
    printf("     *********************************************\n");
    printf("     *             1---------清空所有队列             *\n");
    printf("     *            2---------挂号                     *\n");
    printf("     *            3---------看病                     *\n");
    printf("     *          4---------当前排队人数             *\n");
    printf("     *            0---------退出系统                 *\n");
    printf("  ************************************************\n");
    printf("输入选项<0-4>:");
    scanf("%d",&x);
    while(x!=0)
    {
        switch(x)
        {
            case 1:InitQueue(Q1); InitQueue(Q2); InitQueue(Q3);break;
            case 2:guahao(Q1,Q2,Q3);break;
            case 3:kanbing(Q1,Q2,Q3);break;
            case 4:chaxun(Q1,Q2,Q3);break;
        }
        printf("输入选项<0-4>:");
        scanf("%d",&x);
    }
}
        
  真的不知道哪里考虑的不周全,完全不知道哪里错误,求指导,谢谢!
搜索更多相关主题的帖子: 挂号 医生 
2011-11-24 20:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-356145-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.117269 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved