数据结构_银行排队问题

/*

某银行营业厅共有6个营业窗口,设有排队系统广播叫号,该银行的业务分为公积金、银行卡、理财卡等三种。公积金业务指定1号窗口,银行卡业务指定2、3、4号窗口,理财卡业务指定5、6号窗口。但如果5、6号窗口全忙,而2、3、4号窗口有空闲时,理财卡业务也可以在空闲的2、3、4号窗口之一办理。

客户领号、业务完成可以作为输入信息,要求可以随时显示6个营业窗口的状态。 */

1.源程序

#include

#include

#define MAXSIZE 10;

typedef struct Peo{

struct Peo *next;

}PeoNode;

typedef struct{

PeoNode *head;

PeoNode *rear;

int length;

}LQueueBank;

LQueueBank InitQueue(LQueueBank *W){

W->length = 0;

W->head = (PeoNode *)malloc(sizeof(PeoNode));

if(W->head!=NULL)

{

W->head->next=NULL;

W->rear=W->head;

}

return *W;

}

void InLCK(LQueueBank *A, LQueueBank *B,LQueueBank *C){

if(B->length

B->length++;

printf("办理中\n");

}

else if(C->length

C->length++;

printf("办理中\n");

}

else{

printf("请等待\n");

A->length++;

A->rear = A->rear->next;

}

}

void InGJJ(LQueueBank *A, LQueueBank *B){

if(B->length

B->length++;

printf("办理中\n");

}

else{

printf("请等待\n");

A->length++;

A->rear = A->rear->next;

}

}

void InYHK(LQueueBank *A, LQueueBank *B){

if(B->length

B->length++;

printf("办理中\n");

}

else{

printf("请等待\n");

A->length++;

A->rear = A->rear->next;

}

}

void Leave(LQueueBank *A, LQueueBank *B,LQueueBank *C,LQueueBank *D,LQueueBank *E,LQueueBank *F){

printf("请输入离开用户所在窗口\n");

int yw;

scanf("%d",&yw);

switch(yw){

case 1:

{

A->rear = A->head;A->length--;

if(D->length > 0) {

printf("请等待办理公积金的第一位用户来窗口1办理\n");

InGJJ(D,A);

}

break;

}

case 2:case 3:case 4:

{

B->rear = B->head->next->next;B->length--;

if(E->length > 0){

printf("请等待办理银行卡的第一位用户来窗口%d办理\n",yw); InYHK(E,B);

}

else if (F->length > 0) {

printf("请等待办理理财卡的第一位用户来窗口%d办理\n",yw); InLCK(F,C,B);

}

break;

}

case 5: case 6:

{

C->length--; C->rear = C->head->next;

if(F->length > 0) InLCK(F,C,B);

printf("请等待办理理财卡的第一位用户来窗口%d办理\n",yw);

break;

}

default: printf("输入有误,请重试!\n");

}

}

void PRINT(LQueueBank *A, LQueueBank *B,LQueueBank *C){

if(A->length == 0) printf("1号窗口空闲中\n");

else printf("1号窗口忙碌中\n");

if(B->length == 0) printf("2号窗口空闲中\n3号窗口空闲中\n4号窗口空闲中\n"); else if(B->length == 1) printf("2号窗口忙碌中\n3号窗口空闲中\n4号窗口空闲中\n"); else if(B->length == 2) printf("2号窗口忙碌中\n3号窗口忙碌中\n4号窗口空闲中\n"); else if(B->length == 3) printf("2号窗口忙碌中\n3号窗口忙碌中\n4号窗口忙碌中\n");

if(C->length == 0) printf("5号窗口空闲中\n6号窗口空闲中\n");

else if(C->length == 1) printf("5号窗口忙碌中\n6号窗口空闲中\n");

else if(C->length == 2) printf("5号窗口忙碌中\n6号窗口忙碌中\n");

}

void main()

{

LQueueBank Wait1,Wait2,Wait3,Busy1,Busy2,Busy3; //1:公积金 2:银行卡 3:理财卡 Wait1 = InitQueue(&Wait1);

Wait2 = InitQueue(&Wait2);

Wait3 = InitQueue(&Wait3);

Busy1 = InitQueue(&Busy1);

Busy2 = InitQueue(&Busy2);

Busy3 = InitQueue(&Busy3);

int ch = 0;

while(1)

{

printf("----------------------------------\n");

printf("1. 办理业务 ");

printf("2. 完成离开 ");

printf("3. 退出 ");

printf("0. 打印当前窗口状态\n");

while(1)

{

scanf("%d",&ch);

if(ch>=0&&ch

else

printf("\n输入有误,请重试!");

}

switch(ch)

{

case 0:{PRINT(&Busy1,&Busy2,&Busy3);break;}

case 1:{

printf("请输入业务种类1/2/3\n");

printf("1. 公积金 2. 银行卡 3. 理财卡\n");

int yw1;

scanf("%d",&yw1);

switch(yw1){

case 1: {InGJJ(&Wait1,&Busy1);break;}

case 2: {InYHK(&Wait2,&Busy2);break;}

case 3: {InLCK(&Wait3,&Busy3,&Busy2);break;}

default: printf("输入有误,请重试!\n");

}

break;

}

case 2:{

Leave(&Busy1,&Busy2,&Busy3,&Wait1,&Wait2,&Wait3);

break;

}

case 3:exit(0); default: break; }

}

}

2.运行窗口截图:

/*

某银行营业厅共有6个营业窗口,设有排队系统广播叫号,该银行的业务分为公积金、银行卡、理财卡等三种。公积金业务指定1号窗口,银行卡业务指定2、3、4号窗口,理财卡业务指定5、6号窗口。但如果5、6号窗口全忙,而2、3、4号窗口有空闲时,理财卡业务也可以在空闲的2、3、4号窗口之一办理。

客户领号、业务完成可以作为输入信息,要求可以随时显示6个营业窗口的状态。 */

1.源程序

#include

#include

#define MAXSIZE 10;

typedef struct Peo{

struct Peo *next;

}PeoNode;

typedef struct{

PeoNode *head;

PeoNode *rear;

int length;

}LQueueBank;

LQueueBank InitQueue(LQueueBank *W){

W->length = 0;

W->head = (PeoNode *)malloc(sizeof(PeoNode));

if(W->head!=NULL)

{

W->head->next=NULL;

W->rear=W->head;

}

return *W;

}

void InLCK(LQueueBank *A, LQueueBank *B,LQueueBank *C){

if(B->length

B->length++;

printf("办理中\n");

}

else if(C->length

C->length++;

printf("办理中\n");

}

else{

printf("请等待\n");

A->length++;

A->rear = A->rear->next;

}

}

void InGJJ(LQueueBank *A, LQueueBank *B){

if(B->length

B->length++;

printf("办理中\n");

}

else{

printf("请等待\n");

A->length++;

A->rear = A->rear->next;

}

}

void InYHK(LQueueBank *A, LQueueBank *B){

if(B->length

B->length++;

printf("办理中\n");

}

else{

printf("请等待\n");

A->length++;

A->rear = A->rear->next;

}

}

void Leave(LQueueBank *A, LQueueBank *B,LQueueBank *C,LQueueBank *D,LQueueBank *E,LQueueBank *F){

printf("请输入离开用户所在窗口\n");

int yw;

scanf("%d",&yw);

switch(yw){

case 1:

{

A->rear = A->head;A->length--;

if(D->length > 0) {

printf("请等待办理公积金的第一位用户来窗口1办理\n");

InGJJ(D,A);

}

break;

}

case 2:case 3:case 4:

{

B->rear = B->head->next->next;B->length--;

if(E->length > 0){

printf("请等待办理银行卡的第一位用户来窗口%d办理\n",yw); InYHK(E,B);

}

else if (F->length > 0) {

printf("请等待办理理财卡的第一位用户来窗口%d办理\n",yw); InLCK(F,C,B);

}

break;

}

case 5: case 6:

{

C->length--; C->rear = C->head->next;

if(F->length > 0) InLCK(F,C,B);

printf("请等待办理理财卡的第一位用户来窗口%d办理\n",yw);

break;

}

default: printf("输入有误,请重试!\n");

}

}

void PRINT(LQueueBank *A, LQueueBank *B,LQueueBank *C){

if(A->length == 0) printf("1号窗口空闲中\n");

else printf("1号窗口忙碌中\n");

if(B->length == 0) printf("2号窗口空闲中\n3号窗口空闲中\n4号窗口空闲中\n"); else if(B->length == 1) printf("2号窗口忙碌中\n3号窗口空闲中\n4号窗口空闲中\n"); else if(B->length == 2) printf("2号窗口忙碌中\n3号窗口忙碌中\n4号窗口空闲中\n"); else if(B->length == 3) printf("2号窗口忙碌中\n3号窗口忙碌中\n4号窗口忙碌中\n");

if(C->length == 0) printf("5号窗口空闲中\n6号窗口空闲中\n");

else if(C->length == 1) printf("5号窗口忙碌中\n6号窗口空闲中\n");

else if(C->length == 2) printf("5号窗口忙碌中\n6号窗口忙碌中\n");

}

void main()

{

LQueueBank Wait1,Wait2,Wait3,Busy1,Busy2,Busy3; //1:公积金 2:银行卡 3:理财卡 Wait1 = InitQueue(&Wait1);

Wait2 = InitQueue(&Wait2);

Wait3 = InitQueue(&Wait3);

Busy1 = InitQueue(&Busy1);

Busy2 = InitQueue(&Busy2);

Busy3 = InitQueue(&Busy3);

int ch = 0;

while(1)

{

printf("----------------------------------\n");

printf("1. 办理业务 ");

printf("2. 完成离开 ");

printf("3. 退出 ");

printf("0. 打印当前窗口状态\n");

while(1)

{

scanf("%d",&ch);

if(ch>=0&&ch

else

printf("\n输入有误,请重试!");

}

switch(ch)

{

case 0:{PRINT(&Busy1,&Busy2,&Busy3);break;}

case 1:{

printf("请输入业务种类1/2/3\n");

printf("1. 公积金 2. 银行卡 3. 理财卡\n");

int yw1;

scanf("%d",&yw1);

switch(yw1){

case 1: {InGJJ(&Wait1,&Busy1);break;}

case 2: {InYHK(&Wait2,&Busy2);break;}

case 3: {InLCK(&Wait3,&Busy3,&Busy2);break;}

default: printf("输入有误,请重试!\n");

}

break;

}

case 2:{

Leave(&Busy1,&Busy2,&Busy3,&Wait1,&Wait2,&Wait3);

break;

}

case 3:exit(0); default: break; }

}

}

2.运行窗口截图:


相关文章

  • 基于排队论的银行排队问题研究
  • 第30卷第1期湘潭师范学院学报(社会科学版) Vol. 30No. 1 2008年1月Journal of X iangtan Normal University (Social Science Edition ) J an. 2008 基 ...查看


  • 关于银行排队现象的分析和优化
  • [摘要]银行排队现象已成为亟需解决的问题.本文通过对我国排队问题现状和特点的分析,深入全面的从宏观.客户和银行三个层面揭示了排队问题的原因,并且针对存在的问题相应的提出了解决的办法 [关键字]排队现象 特点 成因 解决对策 引言 银行排队现 ...查看


  • 智慧银行建设方案-瑞银科技
  • 4008-750-222 智慧银行整体建设方案 智慧银行整体建设方案 江苏瑞银科技有限公司 2015年3月 4008-750-222 智慧银行整体建设方案 第一章 智慧银行建设驱动力分析 1.1 行业背景 中国金融市场对外资银行全面放开,非 ...查看


  • 智慧银行-规划设计方案
  • 智慧银行规划设计方案 目 录 第一章.智慧银行应用背景 . .......................................................................................... ...查看


  • 华为INtess呼叫中心解决方案
  • 华为INtess 呼叫中心解决方案 2002-09-27 15:18 作者: 来源:华为 [简 介] 华为技术有限公司成立于1988年,从事通信产品的研究.开发.生产与销售,2000年,实现销售额220亿元人民币,2001年销售额255亿元 ...查看


  • 弘业智能排队系统说明书
  • 弘业智能排队管理系统 使 用 说 明 书 山东弘业兴泰信息技术有限公司 目录 一. 公司简介 ......................................................................... ...查看


  • 基于单片机银行排队叫号系统设计
  • 河北工业大学本科毕业设计(论文)中期报告 毕业设计(论文)题目:基于单片机银行排队叫号系统设计 专业(方向):电子信息工程 学 生 信 息: 学号: 姓名: 班级: 指导教师信息: 姓名: 职称: 告提交日期:2014年4月4日- -201 ...查看


  • 200x金融公司年度工作总结
  • 调整信贷结构 促进商品流通20**年是国务院提出治理经济环境.整顿经济秩序的第一年,总行提出了"控制总量.调整结构.保证重点.压缩一般.适时调节"的信贷总方针,如何把这一中心任务贯彻落实到我们的商业信贷工作中去,我们提出 ...查看


  • 银行综合系统简述
  • 银行前台综合服务系统简述 一. 预约排队系统. 1. 该系统以自动排队机为实体,具有排队机相关功能.将实时排队信息发送到终端设备,方便大堂经理实时了解情况,处理突发事件,将网点的排队信息实时传输网上银行,手机银行,方便客户查询. 2. 支持 ...查看


热门内容