银行排队系统实验
更新时间: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 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(\ } } }
正在阅读:
银行排队系统实验10-27
怀集县人民医院关于做好新形势下妇幼健康服务工作实施方案09-25
广东教育学会外语教学专业委员会 - 关于征集和评 选2014年中小学04-18
聪明排湿气轻身一夏天05-22
微信营销管理云平台04-06
建造合同准则实施管理办法10-08
除氧给水操作规程12-01
吸收实验问答03-19
实用高保真音响放大器的设计 毕业设计07-12
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 排队
- 实验
- 银行
- 系统
- 四川双软认定企业505家
- 中国医疗推车行业市场前景分析预测报告(目录) - 图文
- Easy CD-DA Extractor使用指南
- 2019年新部编版二年级语文上册教案、教学设计:14我要的是葫芦 教案2
- 2015秋牛津译林版英语七上Unit 3《Welcome to our school》(Reading 2)word导学案
- 植物生理学名词解释
- 钢结构设计原理第1阶段测试题
- 浅谈弛豫铁电体的研究状况及进展
- 公司养殖场管理制度汇编
- 使用燃料对环境的影响教案
- 起重机司机题库及答案
- 2016年兵团干部在线学习“互联网+”与公务员培训答案
- 如何更好地发挥教材中各栏目设置的功能
- 医院人力资源管理办法
- 2009-2010学年第二学期无机化学试卷
- 小学五年级语文自我提高III(74)
- 青岛大学生职业生涯规划大赛书面作品评分标准 - 图文
- 先秦古韵三十部和“平水韵”的平声韵与入声韵韵目
- 随机信号分析实验报告
- 线性电位法测镍在硫酸中的钝化的行为