银行排队系统实验

更新时间:2023-10-27 10:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验课题:

“银行排队系统”的设计与实现

实验成员: xxx xxx 班级: 11 计 科

指导老师:xxx xxx 实验日期:2013.3.19

目录

一、

设计要求 1.1、 问题描述 1.2、 需求分析 二、

概要设计

2.1、主界面设计 2.2、存储结构设计 2.3、系统功能设计 三、模块设计 3.1、模块设计

3.2、系统子程序及功能设计 3.3、函数主要调用关系图 四、详细设计 4.1、数据类型定义

4.2、系统主要子程序详细设计 五、测试分析 5.1、顾客达到 5.2、顾客离开 5.3、业务查询 5.4、排队查询 5.5、系统查询 5.6、退出 六、实验心得 七、用户手册 八、源程序清单

一、设计要求

1.1、 问题描述

排队系统是利用现代网络通信技术和计算机信息管理技术来代替传统排队的

系统,从本质上改善传统排队管理所存在的拥挤、嘈杂、混乱现象、避免各种不必要的

纠纷。通过使用排队系统,由传统的客户站立排队变为取票进队、排队等待、叫号服务,由传统物理的多个队列变成为一个逻辑队列,使先来后服务得到了保障。 1.2、 需求分析

假设某银行有n个窗口展开对外接待服务,从早上银行开门起不断有客户进入。客户在客户人数众多时需要选择窗口排队,约定的规定如下:

a) 顾客到达银行时能拿到排队号码,并能知道需要等待的人数。如果是VIP客户直

接进入VIP窗口,无须加入普通客户的等待。 b) 可以查看每个银行窗口正在给几号客户办理业务。 c) 顾客离开银行时,有评价窗口银行职员服务的平台。 二、概要设计 2.1、主界面设计

为了实现“银行排队系统”的各项功能,首先要设计一个含有多个菜单的主控制菜单子程序,以链接系统的各项子功能,方便客户使用本系统。本系统主控制菜单运行界面如下图所示。

2.2、存储结构设计

本系统采用队列(Queue)存储银行排队中的顾客信息。其中:用数组存放办理业务的窗口;用链式队列存放排队顾客的信息。 struct List

{//数组结点类型

int A[n+1]; //顾客用来办理业务的n个窗口,0号单元不用 int len;

}L; //表示数组中的元素个数 struct Lnode

{//链表结点类型 int data;

Lnode *next; };

Struct Linkqueue

{//等候链队列的类型定义

Lnode *front ,*rear; }Q;

2.3、系统功能设计

本系统分为6个功能模块

1) 顾客到达。分为VIP客户和普通客户进行排队拿号,普通客户进入逻辑队列。

2) 顾客离开。顾客离开时将该客户从列队中删除,并提供让客户对银行窗口职员

评价的平台 3) 看业务办理。可以查看每个业务窗口正在给第几个顾客办理业务。 4) 查看排队情况。可以查看当前顾客前有多个顾客在排队等待。 5) 系统查询。可以查询本系统为多个普通客户和VIP客户办理过业务。

6) 退出。退出整个银行排队系统。

三、模块设计 3.1、模块设计

本程序包含3个模块:主程序模块、菜单选择模块和队列操作模块。并调用如图所示关系图

主程序模块

3.2、系统子程序及功能设计

本系统共设置了14个子程序,各自程序的函数名及功能说明 1) void initshuzu() //初始化数组(银行业务窗口) 2) void print1() //输出数组(银行业务窗口)界面 3) void print2() //输出排队等候队列界面

4) void daoda(int x) //解决顾客到达事件算法,调用(11) 5) void likeai(int x) //解决顾客离开事件算法,调用(12) 6) int guitai() //判断输入的柜台号是否正确 7) int pingfeng() //判断输入的分数是否正确 8) void mygrade() //主评分函数,调用(6)和(7) 9) void VIP(int x) //VIP用户认证 10) void time() //时间函数

以下编号11)~13)是队列的基本操作。 11)void Enqueue(Linkqueue *Q,int elem) //进队列 12)int Dlqueue(Linkqueue *Q) //出队列 13)void Initqueue() //初始化队列

14)void main() //主函数。设定界面的颜色和大小,调用工作区的模块函数

3.3、函数主要调用关系图

系统主函数调用关系如图所示

菜单选择模块 队列操作模块

14 main 1 2 3 4 5 9 10 8 11

四、详细设计 4.1、数据类型定义 1) 数组的结构体定义

12 6 7 struct List {

int A[n+1]; //顾客用来办理业务的n个窗口,0单元不用,存放顾客号 int len; //表示数组中的元素个数 }L;

2) 链表结点的结构体定义 Struct Lnode {//链表结点类型 Int data;

Lnode *next; };

3) 链式队列的结构体定义 Struct Linkqueue

{ //等候的链队列的类型定义 Lnode *front,*rear; }Q;

4)全局变量的定义

int VIP1=0; //VIP客户计数

float sum1=0,sun2=0,sun3=0,sum4=0,sum5=0; //n号窗口的服务客户总人数 4.2、系统主要子程序详细设计

1)顾客到达函数

void daoda(int x) //解决顾客到达事件算法 {

int i=L.len+1; if (L.len

{

L.A[i]=x; i++; L.len++;

}

else

Enqueue(&Q,x); }

2)顾客离开时间处理函数

void likai(int x) //解决顾客离开事件算法 { int i=0; do { if(x>L.len) { printf(\输入有误!\\n请重新输入:\ scanf(\ } else

for(i=0;i<=L.len;i++) { if(i==x) { printf(\尊敬的%d号顾客您好!\\n\ L.A[i]=0; L.len--;

if(Q.front!=Q.rear) {

int y=Dlqueue(&Q);

L.A[i]=y;

L.len++; }

}

}

}while(i==0); }

3)银行窗口业务查询输出函数 void printl() //输出数组算法 {

int i;

printf(\正在办理业务的顾客编号为: 一号柜台 二号柜台 printf(\ \ for( i=1;i<=L.len;i++)

{

printf(\号客户 \

三号柜台\\n\ }

printf(\ }

4)顾客排队等候人数查询函数

void print2() //输出队列算法

{ int i=0;

printf(\正在等候办理业务的顾客编号为:\ Lnode *s=Q.front->next; while(s!=NULL)

{

printf(\ s=s->next;

i++; }

printf(\您的前面一共有%d人在排队,请您稍候!\printf(\

}

五、测试分析 5.1、顾客达到

5.2、顾客离开

5.3、业务查询

5.4、排队查询

5.5、系统查询

5.6、退出

六、实验心得

栈和队列是两种特殊的线性结构。栈只允许在表的一端进行插入和删除操作;而队列只允许在表的一端进行插入,在表的另一端进行删除操作 七、用户手册

2)本程序执行文件为“银行排列系统.exe”。

3)进入本系统之后,随即显示系统主菜单界面。用户可在该界面下输入各子菜单前对应的数字并回车键,执行相应的子菜单命名。

八、源程序清单 #include #include #include #include #include #define n 3 int vip1=0;

int y,z;

float sum1=0,sum2=0,sum3=0,sum4=0,sum5=0; float i1=0,i2=0,i3=0,i4=0,i5=0;

float ave1=0,ave2=0,ave3=0,ave4=0,ave5=0; struct List

{

int A[n+1]; //顾客用来办理业务的N个窗口 int len; //表示数组中的元素个数 }L;

struct Lnode

{ //链表结点类型 int data;

Lnode *next;

};

struct Linkqueue

{ //链式存储的等候队列的类型定义 Lnode *front; Lnode *rear;

}Q;

void Initshuzu() //初始化线性的算法 {

for(int i=1;i<=n;i++)

L.A[i]=0; //元素值为0,表示编号为I的窗口当前状态为空 L.len=0;

}

void Initqueue() //初始化队列的算法 {

Q.front=Q.rear=(Lnode *)malloc(sizeof(Lnode)); Q.front->next=NULL; }

void Enqueue(Linkqueue *Q,int elem) //进队算法 {

Lnode *s;

s=(Lnode *)malloc(sizeof(Lnode)); s->data=elem; s->next=NULL; Q->rear->next=s;

Q->rear=s; }

int Dlqueue(Linkqueue *Q) //出队算法 {

Lnode *t;

int x;

if(Q->front==Q->rear) { printf(\队列为空!\\n\ exit(1); } else

{ t=Q->front->next; Q->front->next=t->next; x=t->data; free(t); return x; }

}

void printl() //输出数组算法

{ int i;

printf(\正在办理业务的顾客编号为: 一号柜台 二号柜台 三号柜台\\n\

printf(\ \{

for( i=1;i<=L.len;i++)

printf(\号客户 \

}

printf(\

}

void print2() //输出队列算法

{ int i=0;

printf(\正在等候办理业务的顾客编号为:\ Lnode *s=Q.front->next; while(s!=NULL) {

printf(\

s=s->next;

i++; }

printf(\您的前面一共有%d人在排队,请您稍候!\printf(\

}

void daoda(int x) //解决顾客到达事件算法 { int i=L.len+1; if (L.len

{

L.A[i]=x; i++; L.len++;

}

else

Enqueue(&Q,x);

}

void likai(int x) //解决顾客离开事件算法 {

int i=0; do {

if(x>L.len) { } else

for(i=0;i<=L.len;i++) {

if(i==x) { }

printf(\尊敬的%d号顾客您好!\\n\ L.A[i]=0; L.len--;

if(Q.front!=Q.rear) { int y=Dlqueue(&Q); L.A[i]=y; L.len++; }

printf(\输入有误!\\n请重新输入:\scanf(\

} }while(i==0); }

int guitai( ) //判断输入的柜台号是否正确 { int y=0;

printf(\请输入你所办理业务的柜台号(1-3):\\n\

scanf(\if(y<1||y>5) {

printf(\你输入的柜台号有误,请重新输入!\\n\

printf(\请输入你所办理业务的柜台号(1-3):\\n\ scanf(\

} else printf(\你所办理业务的柜台为%d.\\n\

return y;

}

int pingfeng( ) //判断输入的分数是否正确

{ int y=0;

printf(\请输入你评分(1-5):\\n 1分????非常不满意;\\n

2分????比较不满意;\\n 3分????一般满意;\\n 4分????比较满意;\\n 5分????非常满意。\\n\ printf(\请输入:\

scanf(\if(y<1||y>5) {

printf(\你输入评分有误,请重新输入!\\n\

printf(\请输入你的评分(1-5):\\n\ scanf(\

}

else

printf(\你的评分为%d.\\n\

return y;

}

void mygrade() //主评分函数

{ printf(\为了改善服务质量,请你对我们的服务进行评价。谢谢!\\n\

z=guitai( );

y=pingfeng( );

switch (z) //柜台评分处理 {

case 1: //1号柜台评分处理

{

sum1+=y;

i1++; ave1=sum1/i1;

printf(\号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\\n\

break; }

case 2: //2号柜台评分处理

{ sum2+=y; i2++;

ave2=sum2/i2;

printf(\号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\\n\

break;

}

case 3: //3号柜台评分处理

{ sum3+=y;

i3++; ave3=sum3/i3;

printf(\号柜台的平均满意度为%0.2f。感谢你的评分,谢谢!!!\\n\

}

break;

}

default : printf(\你的输入有误,请重新输入!\\n\

getch();

}

void vip(int x) //vip用户认证 {

int i,a; a=x;

char ch[3]; int k=0;

switch(a) {

case 1: { printf(\请输入你的卡号:\

scanf(\

printf(\请您输入五位密码:\

while(ch[k-1]!=' ') { ch[k]=getch(); k++;

printf(\ }

if(i==100&&ch[0]=='1'&&ch[1]=='1'&&ch[2]=='1'&&ch[3]=='1') { printf(\尊敬的VIP用户您好,请您直接到VIP区办理业务!\\n\ vip1++; }

else if(i==200&&ch[0]=='2'&&ch[1]=='2'&&ch[2]=='2'&&ch[3]=='2') { printf(\尊敬的VIP用户您好,请您直接到VIP区办理业务!\\n\ }

else if(i==300&&ch[0]=='3'&&ch[1]=='3'&&ch[2]=='3'&&ch[3]=='3') { printf(\尊敬的VIP用户您好,请您直接到VIP区办理业务!\\n\

vip1++;

}

else if(i==400&&ch[0]=='4'&&ch[1]=='4'&&ch[2]=='4'&&ch[3]=='4') {

vip1++;

printf(\尊敬的VIP用户您好,请您直接到VIP区办理业务!\\n\

vip1++; }

else if(i==500&&ch[0]=='5'&&ch[1]=='5'&&ch[2]=='5'&&ch[3]=='5') { printf(\尊敬的VIP用户您好,请您直接到VIP区办理业务!\\n\ vip1++;

}

else printf(\你的输入有误!\\n\

break;

}

default : break;

} }

void time() //时间函数

{

time_t timep; time (&timep);

printf(\ 现在时刻:%s\}

void main() //主函数 {

system(\ //屏幕颜色设定

system(\ time_t a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,end;

double

b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,b10=0,allsum=0,average=0,xi=0; double A[10]={0,0,0,0,0,0,0,0,0,0}; int c,x,v=0,w=0; Initshuzu(); Initqueue(); double sum=0;

while(1) {

printf(\

欢迎光临中国******************************************\\n\ printf(\ \\n\

printf(\ 1 顾客到达\\n\ printf(\ 2 顾客离开\\n\

printf(\ 3 查看业务办理\\n\ printf(\ 4 查看排队情况\\n\

银行

printf(\ 5 系统查询\\n\

printf(\ 6 退出\\n\\n\

time();

printf(\ 提示:请按回车键进行下一步操作\\n\

printf(\

\\n\ printf(\

*******************************************\\n\ printf(\请输入:\ scanf(\ switch(c) { case 1: { system(\

printf(\

*****************************************\\n\\n\ int k=0; int a; printf(\请选择你的用户类型:VIP用户请按 1;\\n 通卡用户请按 2.\\n\

printf(\请输入:\ scanf(\ if (a==1) { vip(a);

getch();

} else { v++; //普通卡顾客计数 printf(\尊敬的普通卡用户,你的业务号为%d.\\n\ daoda(v); if(v==1)

{ a1=time(NULL); //v=1的客户到达时间

system(\ }

else if(v==2) {

a2=time(NULL); system(\ }

else if(v==3)

{

a3=time(NULL); system(\ }

else if(v==4) {

a4=time(NULL); system(\ }

{

a5=time(NULL); system(\ }

else if(v==6) {

a6=time(NULL); system(\ } {

else if(v==5)

else if(v==7) a7=time(NULL); system(\ }

else if(v==8)

{

a8=time(NULL); system(\ }

else if(v==9) {

a9=time(NULL); system(\

}

else if(v==10)

{

a10=time(NULL); system(\ }

{ printf(\请稍候拿号,谢谢!\

system(\

else

}

} system(\ break; } {

case 2:

system(\

printf(\顾客离开界面******************************************\\n\\n\ printf(\请输入离开顾客得编号:\\n\ scanf(\ likai(x); mygrade() ; w++;

if(x=1)

{ end=time(NULL); A[0]=difftime(end,a1); printf(\ 秒.\\n\ }

else if(x=2) {

end=time(NULL);

A[1]=difftime(end,a2);

printf(\ 秒.\\n\

}

else if(x=3)

{

end=time(NULL);

A[2]=difftime(end,a3);

printf(\ 秒.\\n\

}

else if(x=4)

{

end=time(NULL);

A[3]=difftime(end,a4);

printf(\ 秒.\\n\

}

else if(x=5)

您办理业务所用时间为 %0.2f 您办理业务所用时间为 %0.2f 您办理业务所用时间为 %0.2f 您办理业务所用时间为 %0.2f

{

end=time(NULL); A[4]=difftime(end,a5); printf(\ 您办理业务所用时间为 %0.2f 秒.\\n\

}

else if(x=6)

{

end=time(NULL);

A[5]=difftime(end,a6);

printf(\ 秒.\\n\

}

else if(x=7) {

end=time(NULL);

A[6]=difftime(end,a7); printf(\ 秒.\\n\

}

else if(x=8)

{

end=time(NULL); A[7]=difftime(end,a8);

printf(\ 秒.\\n\

}

else if(x=9) { end=time(NULL); A[8]=difftime(end,a9);

printf(\ 秒.\\n\ } else if(x=10) { end=time(NULL);

A[9]=difftime(end,a10);

printf(\ 秒.\\n\

}

allsum+=A[0]; getch();

system(\

您办理业务所用时间为您办理业务所用时间为您办理业务所用时间为您办理业务所用时间为您办理业务所用时间为%0.2f

%0.2f %0.2f %0.2f

%0.2f

break;

} case 3: { system(\

printf(\业务查询界面

*******************************************\\n\\n\ printl(); getch();

system(\ break;

} case 4:

{ system(\

printf(\

排队查询界面

*******************************************\\n\\n\ print2();

getch(); system(\

break; } case 5: {

system(\

printf(\系统查询界面

*****************************************\\n\\n\ char cool[3]; int i=0,k=0; printf(\请输入你的卡号:\ scanf(\

printf(\请您输入五位密码:\ while(cool[k-1]!=' ')

{ cool[k]=getch();

k++;

printf(\

}

if(i==000&&cool[0]=='1'&&cool[1]=='1'&&cool[2]=='1'&&cool[3]=='1') {

average=allsum/w; printf(\至今已有 %d 位普通用户,%d 位vip用户成功办理业务!\

printf(\普通用户业务办理总共用时 %0.2f秒,平均用时 %0.2f秒

\\n\ } getch(); system(\

} return; getch(); system(\

break;

case 6: return;

getch(); system(\

default: printf(\输入有误!请重新输入:\\n\

getch(); system(\

} } }

本文来源:https://www.bwwdw.com/article/w0l2.html

Top