| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6198 人关注过本帖, 1 人收藏
标题:银行排队队列问题则么解决
只看楼主 加入收藏
苍茫大地yj
Rank: 1
来 自:杭州
等 级:新手上路
帖 子:24
专家分:6
注 册:2012-12-15
结帖率:66.67%
收藏(1)
 问题点数:0 回复次数:14 
银行排队队列问题则么解决
求教队列问题,希望指教下
问题描述】
目前银行、医院等单位通过“叫号机”模拟了人群排队的过程,用户取票进队。叫号排队是队列应用的一个典型例子,设计一个程序,演示叫号排队系统的实现过程。
【基本要求】
匀客户到达银行时,先取号(显示当前的客户号,以及正在等待的客户人数)。当有窗口空闲时,若有等待的客户,则显示信息:请XXXX号客户到YY号窗口办理。设定窗口数量为3个,允许的最多排队等待顾客数为30,超过30则系统禁止取票。

我做不下去了,指导下我吧


#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
#define N 30///队列最大人数
#define w3///银行窗口个数
typedef猀琀爀甀挀琀 Node{
 int data;
 struct Node *next;
}node;

typedef struct {
 node * front;
 node * rear;

}queue;

void initqueue(queue *q)
{
 q->front=q->rear=(node*)malloc(sizeof(node));
 if(!q->front)攀砀椀琀(0);
 q->front->next=NULL;

}

void destroyqueue(queue *q)
{
 while(q->front){

焀->rear=q->front->next;
昀爀攀攀(q->front);
焀->front=q->rear;
 }
 printf("队列销毁成功\n");

}

void enterqueue(queue *q,int a)
{
 node *p;
 p=(node*)malloc(sizeof(node));
 if(!p)攀砀椀琀(0);
 p->data=a;
 p->next=NULL;
 q->rear->next=p;
 q->rear=p;
 printf("\t您的号码为%d\t",a);
 
}

void deletequeue(queue *q,int a)
{
 node *p;
 p=(node*)malloc(sizeof(node));
 if(q->front=q->rear)笀 printf("队列为空\n");exit(0);}
 p=q->front->next;
 a=p->data;
 q->front->next=p->next;
 if(q->rear==p) q->rear=q->front;
 free(p);
 printf("%d已离开\n",a);
 
}



void main()
{
焀甀攀甀攀 *list;
椀渀琀渀甀洀戀攀爀=1,m;
挀栀愀爀 ch1,ch2;
氀椀猀琀=(queue*)malloc(sizeof(queue));
椀渀椀琀焀甀攀甀攀(list);
 
眀栀椀氀攀(1){
瀀爀椀渀琀昀("请输入“#”字符获取排队号,其他字符无效:\t");
猀挀愀渀昀("%c",&ch1);
最攀琀挀栀愀爀();

椀昀(ch1!='#')笀瀀爀椀渀琀昀("字符输入错误\n"); exit(0);}
椀昀(ch1=='#'){
攀渀琀攀爀焀甀攀甀攀(list ,number);
渀甀洀戀攀爀++;
瀀爀椀渀琀昀("\t请输入“&”获取窗口号: ");
猀挀愀渀昀("%c",&ch2);
最攀琀挀栀愀爀();
椀昀(ch2!='&')笀瀀爀椀渀琀昀("字符输入错误\n"); exit(0);}
椀昀(ch2=='&'){
 srand(time(NULL));
 m=rand()%3+1;
瀀爀椀渀琀昀("请到第%d个窗口办理业务:\n ",m);






//if ( count>N )瀀爀椀渀琀昀("\n已超过%d人等候,稍后再取号:\n",N);


}
搜索更多相关主题的帖子: 银行 include 用户 
2012-12-16 15:05
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
你的main函数里面是什么编码来的?我看到是一堆乱码,不知道其他人是否也是

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-16 16:11
wanjiawei
Rank: 4
等 级:业余侠客
帖 子:61
专家分:213
注 册:2012-11-16
收藏
得分:0 
程序代码:
void main()
{ 
焀甀攀甀攀 *list;
椀渀琀渀甀洀戀攀爀=1,m;
挀栀愀爀 ch1,ch2;
氀椀猀琀=(queue*)malloc(sizeof(queue));
椀渀椀琀焀甀攀甀攀(list);

眀栀椀氀攀(1){
瀀爀椀渀琀昀("请输入“#”字符获取排队号,其他字符无效:\t");
猀挀愀渀昀("%c",&ch1);
最攀琀挀栀愀爀();

椀昀(ch1!='#')笀瀀爀椀渀琀昀("字符输入错误\n"); exit(0);}
椀昀(ch1=='#'){
攀渀琀攀爀焀甀攀甀攀(list ,number);
渀甀洀戀攀爀++;
瀀爀椀渀琀昀("\t请输入“&”获取窗口号: ");
猀挀愀渀昀("%c",&ch2);
最攀琀挀栀愀爀();
椀昀(ch2!='&')笀瀀爀椀渀琀昀("字符输入错误\n"); exit(0);}
椀昀(ch2=='&'){
srand(time(NULL));
m=rand()%3+1;
瀀爀椀渀琀昀("请到第%d个窗口办理业务:\n ",m);
紀

紀



//if ( count>N )瀀爀椀渀琀昀("\n已超过%d人等候,稍后再取号:\n",N); 

紀
}
这是什么情况.........
2012-12-16 16:30
lyuwjq
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-9-7
收藏
得分:0 
乱码乱码……

喜欢繁星明月的夜空……
2012-12-16 16:38
苍茫大地yj
Rank: 1
来 自:杭州
等 级:新手上路
帖 子:24
专家分:6
注 册:2012-12-15
收藏
得分:0 
我重新发了
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
#define N 30        ///队列最大人数
#define w  3         ///银行窗口个数
typedef  struct Node{
    int data;
    struct Node *next;
}node;

typedef struct {
    node * front;
    node * rear;

}queue;

void initqueue(queue *q)
{
    q->front=q->rear=(node*)malloc(sizeof(node));
    if(!q->front)  exit(0);
    q->front->next=NULL;

}

void destroyqueue(queue *q)
{
    while(q->front){

        q->rear=q->front->next;
        free(q->front);
        q->front=q->rear;
    }
    printf("队列销毁成功n");

}

void enterqueue(queue *q,int a)
{  
    node *p;
    p=(node*)malloc(sizeof(node));
    if(!p)   exit(0);
    p->data=a;
    p->next=NULL;
    q->rear->next=p;
    q->rear=p;
    printf("t您的号码为%dt",a);
   
}

void deletequeue(queue *q,int a)
{
    node *p;
    p=(node*)malloc(sizeof(node));
    if(q->front=q->rear)   { printf("队列为空n");exit(0);}
    p=q->front->next;
    a=p->data;
    q->front->next=p->next;
    if(q->rear==p) q->rear=q->front;
    free(p);
    printf("%d已离开n",a);
   
}

         

void main()
{   
     queue *list;
     int  number=1,m;
     char ch1,ch2;
     list=(queue*)malloc(sizeof(queue));
     initqueue(list);
   
     while(1){
        printf("请输入“#”字符获取排队号,其他字符无效:t");
        scanf("%c",&ch1);
        getchar();
        
        if(ch1!='#')  {printf("字符输入错误n"); exit(0);}
        if(ch1=='#'){
         enterqueue(list ,number);
         number++;
         printf("t请输入“&”获取窗口号: ");
         scanf("%c",&ch2);
         getchar();
         if(ch2!='&')  {printf("字符输入错误n"); exit(0);}
         if(ch2=='&'){
             srand(time(NULL));
             m=rand()%3+1;
           printf("请到第%d个窗口办理业务:n ",m);
         }

        }
        
        
         
        //if ( count>N )   printf("n已超过%d人等候,稍后再取号:n",N);   

     }
}
2012-12-16 20:34
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
linux环境的吧?

小小战士,战士中的战斗机!
2012-12-16 20:36
苍茫大地yj
Rank: 1
来 自:杭州
等 级:新手上路
帖 子:24
专家分:6
注 册:2012-12-15
收藏
得分:0 
回复 6楼 小小战士
visualc++ 6.0
2012-12-16 20:45
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
那还有乱码?是你写的吗?

小小战士,战士中的战斗机!
2012-12-16 20:55
苍茫大地yj
Rank: 1
来 自:杭州
等 级:新手上路
帖 子:24
专家分:6
注 册:2012-12-15
收藏
得分:0 
回复 8楼 小小战士
重新发的是我自己写的,觉得不太好,希望修改下
2012-12-16 21:02
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
改了一下,你先运行运行,看看效果。其他的一会再实现
人员离开你想怎样实现?是开个线程还是手动删除?好像顾客不能自己删除哦
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
#define N  5       ///队列最大人数
#define w  3         ///银行窗口个数
typedef  struct Node
{
    int data;
    struct Node *next;
}node;
typedef struct
{
    node * front;
    node * rear;
}queue;
void initqueue(queue *q,int *number)
{
    q->front=q->rear=(node*)malloc(sizeof(node));
    if(!q->front)
        exit(0);
    q->front->data=*number;
    q->front->next=NULL;   
}
void enterqueue(queue *q,int *number)
{  
    node *p;
    p=(node*)malloc(sizeof(node));
    if(!p)
        exit(0);
    p->data=*number;
    p->next=NULL;
    q->rear->next=p;
    q->rear=p;
    free(p);
    printf("您的号码为NO.%d!\n",*number);
    *number++;
}
/*void destroyqueue(queue *q)
{
    while(q->front)
    {
        q->rear=q->front->next;
        free(q->front);
        q->front=q->rear;
    }
    printf("队列销毁成功n");
}
void deletequeue(queue *q,int a)
{
    node *p;
    p=(node*)malloc(sizeof(node));
    if(q->front=q->rear)   
    {
        printf("队列为空n");
        exit(0);
    }
    p=q->front->next;
    a=p->data;
    q->front->next=p->next;
    if(q->rear==p) q->rear=q->front;
    free(p);
    printf("%d已离开n",a);
}*/
int main()
{   
    queue *list;
    int  number=0,m;
    char ch1,ch2;
    list=(queue*)malloc(sizeof(queue));
    initqueue(list,&number);
    while(1)
    {
        printf("请输入“#”字符获取排队号,其他字符无效:");
        scanf("%c",&ch1);
        getchar();
        if(ch1!='#')  
        {
            printf("字符输入错误!\n");
            continue;
        }
        else
        {
            if(number==N)
            {
                printf("已有%d人等候,稍后再取号!\n",number);
                continue;
            }
            number++;
            enterqueue(list,&number);
    loop:    printf("请输入“&”获取窗口号,其他字符无效:");
            scanf("%c",&ch2);
            getchar();
            if(ch2!='&')
            {
                printf("字符输入错误!\n");
                goto loop;
            }
            else
            {
                srand(time(NULL));
                m=rand()%w+1;
                printf("请到第%d个窗口办理业务!\n",m);
            }
        }
    }
    return 0;
}

[ 本帖最后由 小小战士 于 2012-12-16 21:31 编辑 ]

小小战士,战士中的战斗机!
2012-12-16 21:30
快速回复:银行排队队列问题则么解决
数据加载中...
 
   



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

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