银行业务系统等待队列(共19页).docx

上传人:飞****2 文档编号:13568228 上传时间:2022-04-30 格式:DOCX 页数:19 大小:218.68KB
返回 下载 相关 举报
银行业务系统等待队列(共19页).docx_第1页
第1页 / 共19页
银行业务系统等待队列(共19页).docx_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《银行业务系统等待队列(共19页).docx》由会员分享,可在线阅读,更多相关《银行业务系统等待队列(共19页).docx(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上目录一、 实验问题描述-2二、 实验需求分析-3三、 软件概要设计-4四、 软件详细设计-5五、 编码与调试分析-14六、 程序运行操作说明-15七、 测试结果-16八、 课程设计心得体会-18九、 自主学习参考文献-19一、实验问题描述:本课程设计的目的就是要达到能够灵活运用程序设计基础所讲授内容,能够针对一个需求比较明确的小型软件,设计合理的解决方案,并能够用编程语言转化为可执行程序,以解决实际问题。进一步掌握开发一个小型实用软件系统的基本步骤和方法、进一步培养良好的编程习惯、提升学习能力,熟练掌握数据结构中所学知识,并加以运用到实际软件开发中去,掌握调试代码的基

2、本方法,通过调试找出BUG出现的地方以及原因,并运用正确的方法进行DEBUG。设银行有四个服务窗口,一个等待队列, 每个窗口均可以办理存款、取款、挂失、还贷业务,每种业务所需的服务时间不同,客户到达银行后,先到打号机上打号,号票上包括到达时间、编号和需要办理的业务,然后在银行内等候, 当任一服务窗口空闲时,处理等候客户中排在最前面的客户的业务。写一个上述银行业务的模拟系统,通过模拟方法求出客户在银行内逗留的平均时间和每个窗口办理的客户数及办理的每种业务数。基本要求:每个客户到达银行的时间和需要办理的业务随机产生,输出一天客户在银行的平均逗留时间和每个窗口每天办理的客户数和每种业务数。 提高要求

3、:设计图形用户界面,模拟中国银行真实的打号机操作界面,当用户选择一种业务后,要提示用户排在前面的人数。测试数据:营业时间为8小时,其他模拟量自行设定。每个人在生活中都会随时随地的和银行业务接触,因而也造成了银行工作人员的业务繁忙,同时大量的办理业务客户的出现也扰乱了银行秩序。因此在实际生活中需要的前提下,诞生银行业务办理系统是必然的。每个客户到达银行后自行到打号机前打取自己的票号,从而就产生了一个银行业务办理等待队列,每个客户都根据自己的小票信息在银行等待办理自己的业务,从而有效地解决了客户多引起的秩序混乱,当某个窗口空闲时,等待队列中的最前一个客户就到当前空闲的窗口办理自己的业务,后面的客户

4、继续等待,直到再一个空闲窗口出现。通过对以上功能的实现,从而在实际生活中解决了人们日常生活中的银行业务办理需求,解决生活中的实际问题,方便人们的生活和工作,提高办事效率和生活质量。二、实验需求分析:2.1、软件的基本功能银行有四个服务窗口,一个等待队列, 每个窗口均可以办理存款、取款、挂失、还贷业务,每种业务所需的服务时间不同,客户到达银行后,先到打号机上打号,号票上包括到达时间、编号和需要办理的业务,然后在银行内等候, 当任一服务窗口空闲时,处理等候客户中排在最前面的客户的业务。银行业务的模拟系统,通过模拟方法求出客户在银行内逗留的平均时间和每个窗口办理的客户数及办理的每种业务数。设计图形用

5、户界面,模拟中国银行真实的打号机操作界面,当用户选择一种业务后,要提示用户排在前面的人数。2.2、程序执行时的输入/输出形式按照程序执行是的界面提示选择操作顺序,若需要执行银行业务模拟,则在菜单选项中选择执行,如果执行成功系统会提示模拟信息生成成功,否则会提示无可查信息;信息生成完成后选择执行显示客户逗留时间,就可以输出当天模拟情况下的总模拟人数,当天银行下班为止总共办理的客户数量,和未办理完业务的客户数量,和客户当天在银行的平均逗留时间;选择显示各窗口业务统计信息可看到当天的四个窗口的业务办理情况,分别办理了那些业务和各种业务的总数;也可按窗口分别显示四个窗口分别办理了那些客户的业务,以及他

6、们的业务办理信息;另外可以手动选择业务并产生相应的到达时间切输出打号的信息。如果输入值与要求不符合,则系统会提示输入数据错误,并重新输入或者结束程序。2.3、测试数据要求程序执行时按照既定的数据类型及大小分别输入有效数据,若出现输入数据与既定数据类型及大小不符合则输出错误提示并选择执行下一步。三、软件概要设计:(1)抽象数据类型:根据题目的要求,考虑用队列类型比较适合。ADT QueueData队列中元素具有相同类型及先进先出特性,相邻元素具有前驱和后继关系Operation InitQueue前置条件:队列不存在 输入:无 功能:初始化队列 输出:无后置条件:创建一个空队列DestroyQu

7、eue 前置条件:队列已存在 输入:无功能:销毁队列输出:无后置条件:释放队列所占用的存储空间 EnQueue 前置条件:队列已存在 输入:元素值x 功能:入队操作,在队尾插入一个元素x 输出:如果插入不成功,抛出异常 后置条件:如果插入成功,队尾增加了一个元素 DeQueue 前置条件:队列已存在 输入:无 功能:出对操作,删除对头元素 输出:如果删除成功,返回被删元素值,否则,抛出异常 后置条件:如果删除成功,对头减少了一个元素 GetQueue 前置条件:队列已存在 输入:无 功能:读取当前的对头元素输出:若队列不空,返回当前的对头元素值后置条件:队列不变 Empty 前置条件:队列已存

8、在 输入:无 功能:判断队列是否为空 输出:如果队列为空,返回1;否则,返回0 后置条件:队列不变End ADT(2)主程序流程:开始输入数据判断是否是整型数输入数据错误判断是否打号无可查信息业务生成成功,请等待结束(3)模块调用关系:本程序中函数包括:main函数,队列操作相关函数;Personnel_Func(Ticket t2,int n,int s)函数,手动业务生成函数,可选择要生成的业务同时产生一个到达时间和打票信息;Ticket_Produce_Function(Ticket t,int n)函数,自动生成客户到达银行时的打票信息,其中包括到达时间,小票编号,业务种类;Perso

9、nnel_Distribution_Func(int n,int flag)函数,业务办理函数,等待队列中的每个元素出对后通过时间的计算和窗口闲忙的判断把客户分配到各个窗口办理业务;Business_statistic_Func(Windows win,int m)函数,统计各个窗口当天办理的各种业务种类,以及各种业务的数量;Display_Business_Func(Windows win,int m,int n,int coordinate)函数,按窗口分别显示各个窗口办理了那些客户的业务,以及数量;Make_waittime_Func(int n)函数,计算当天银行中办理业务的所有客户在

10、银行的逗留时间,以及当天总共办理了多少客户的业务和有多少客户的业务在下班时还没有办理业务;Menu()函数,模拟输出银行业务办理系统的打号菜单,并分类显示各个窗口业务办理情况。其函数调用关系如下:Mian() Menu()Personnel_Distribution_Func(int n,int flag)Make_waittime_Func(int n)Business_statistic_Func(Windows win,int m)Display_Business_Func(Windows win,int m,int n,int coordinate)Personnel_Func(Tic

11、ket t2,int n,int s)Personnel_Distribution_Func(int n,int flag)Ticket_Produce_Function(Ticket t,int n)4详细设计(1)实现概要设计的数据类型:采用队列const int QueueSize = 1000;template /定义模板类BankBusinsesclass BankBusinsespublic:BankBusinses();void EnQueue();int GetQueue();void Personnel_Func(Ticket t2,int n,int s); /手动业务生成

12、函数int Ticket_Produce_Function(Ticket t,int n); /打号函数int Personnel_Distribution_Func(int n,int flag); /业务办理函数intBusiness_statistic_Func(Windows win,int m); /业务统计函数voidDisplay_Business_Func(Windows win,int m,int n,int coordinate);/业务显示函数voidMake_waittime_Func(int n); /等待时间函数intMenu(); /菜单函数Windows win

13、4; /窗口Ticket tQueueSize; /票Ticket t2QueueSize;private:string name; /业务名称int businesstime; /办理业务所需时间int alltime; /办理所有业务的总时间int waittime; /等待时间double averagetime; /平均等待时间long *a,*b,*v;int dataQueueSize;Ticket data2QueueSize;int front,rear;(2)主程序以及其它模块的算法描述:主函数具体代码:int main()BankBusinses C;while(1) sw

14、itch(C.Menu()case 1:srand(time(0);n=(rand()%(500-1)+1);for(i = 0;i n;i+)C.ti.arrivaltime.hour = (rand()%(17-9)+9);C.ti.arrivaltime.minute = rand()%60;C.ti.arrivaltime.second = rand()%60;C.Ticket_Produce_Function(C.t,n);C.EnQueue();C.GetQueue();C.Personnel_Distribution_Func(n,0); break;case 2:if(flag

15、=0)couttt无可查询信息 !n;elseC.Make_waittime_Func(n);break;case 3:if(flag=0)couttt无可查询信息 !n;elseC.Business_statistic_Func(C.win,4);break;case 4:if(flag=0)couttt无可查询信息 !n;elseC.Display_Business_Func(C.win,4,n,0);break;case 5:if(flag=0)couttt无可查询信息 !n;elseC.Display_Business_Func(C.win,4,n,1);break;case 6:if

16、(flag=0)couttt无可查询信息 !n;elseC.Display_Business_Func(C.win,4,n,2);break;case 7:if(flag=0)couttt无可查询信息 !n;elseC.Display_Business_Func(C.win,4,n,3);break;case 8:for(i=0;im,!cin.eof() if(!cin.good() cin.clear();cin.ignore();couttt输入错误 !ntt请重新输入!;Sleep(1000); else if(m!=0 & m!=1)Sleep(1000); else if(cin.

17、good() & (m=0 | m=1) )if(m=0)tag=1;break;if(tag=1)break;C.Personnel_Func(C.t2,0,m);break;case 0: /如返回值为0则程序结束cout ttOVER !n;exit(0); return 0;主函数的功能调用了各个实现函数。首先是调用菜单函数显示出模拟菜单,提示用户按照要求进行选择操作,输入有误则会重新操作,否则进行下一个功能函数的调用,产生模拟客户的基本业务信息,在信息随机产生后就会调用核心函数把办理业务的客户根据实际情况分配到不同的窗口办理自己的业务。调用时间计算函数确定客户平均逗留时间和办理客户的

18、人数。最后是清屏函数。直至用户选择退出。(3)其它模块的算法描述打号函数功能:调用随机函数产生客户到达银行的随机时间和随机业务,并通过冒泡法对所有时间排序,然后进入队列等待。int BankBusinses:Ticket_Produce_Function(Ticket t,int n)srand(time(0);n=(rand()%(500-1)+1);for(i = 0;i n;i+) /产生客户到达银行的随机时间C.ti.arrivaltime.hour = (rand()%(17-9)+9);C.ti.arrivaltime.minute = rand()%60;C.ti.arrival

19、time.second = rand()%60;for(i = 0;i n;i+)ti.number = i; /编号产生rear=(rear+1)%QueueSize;datarear=ti.number;/产生的编号入队sign = (rand()%(5-1)+1;ti.business = sign;/产生随机客户业务 处理客户业务函数功能:调用打号函数对队列中的元素分配到不同的窗口办理业务。int BankBusinses:Personnel_Distribution_Func(int n,int flag)int c4 /作用是对应储存四个窗口业务办理结束的时间,在循环过程中后一个业

20、务办理结束时间将修改当前结束时间 Ticket_Produce_Function(t,n); /调用时间生成函数c0=a0+b0; /第一个窗口结束时间初值为队列中第一个客户办理业务的结束时间waittime=b0; /第一个客户的逗留时间int *d;d=new int4; /动态申请长度为四的一维数组,用于存放被修改结束时间的窗口的序号, 判断四个窗口中的结束时间是否大于下一个客户办理业务的开始时间, 如果小于则数组的dj中保存该窗口的序号,否则该地址存为-1, 判断窗口序号保存数组dj中是否有被保存的窗口序号, 若有则结束,且记住该窗口序号;如果有窗口序号被修改,则继续修改当前结束时间为

21、下一个客户的业务办理结束时间, 窗口各种业务累计, 如果当前窗口序号全未被修改,即当前所有窗口均处于忙碌状态,下一个客户需等待, 找出当前所有正在办理业务的窗口中,结束时间最早的窗口;ck=ck+bi+1; /修改该窗口的结束时间,即下一个在等待的客户到该窗口办理业务, 窗口各种业务累计 窗口业务统计函数功能:统计各个窗口办理业务的情况,人数以及各种业务种类。int BankBusinses:Business_statistic_Func(Windows win,int m) int i,n=0,allnum=0;for(i=0;i4;i+)allnum=wini.withdrawals+wi

22、ni.deposit+wini.reportloss+wini.borrowed;cout tttt 窗口 i+1;cout endl;cout 取款人数t存款人数t挂失人数t还贷人数t办理业务总数;coutwini.withdrawalsttwini.depositttwini.reportlossttwini.borrowedttallnum;窗口业务显示函数功能:显示各个窗口当天的业务办理情况。void BankBusinses:Display_Business_Func(Windows win,int m,int n,int coordinate)int j,flag=1;couttt

23、tt窗口coordinate+1办理: ;coutendl;for(j=0;jn;j+)if(vj=coordinate)coutj+1号客户 t;flag=0;if(flag=1)couttt该窗口当天没有办理业务 !n;等待时间函数功能:计算当天所有客户在银行的平均逗留时间,和当日总共办理的客户数,和未办理完业务的客户数。void BankBusinses:Make_waittime_Func(int n)flag=Personnel_Distribution_Func(n,flag);if(n-flag-1)!=0)couttt未办理完业务的编号: flag+2 n;aver=(wait

24、time/(flag+1)/60.0;for(i=flag+2;in;i+)waittime2 +=3600*17-ai;averagetime=(waittime+waittime2)/n)/60.0;5、编码与调试分析编码与调试过程中遇到的问题及解决办法:【问题一】:随机产生的时间无序,等待队列需按照有序等待。 解决办法: 定义时间结构体类型的数组存储时间,然后对时间进行排序并进入队列。解决此问题的核心代码:for(i = 0;i n;i+)for(j = i+1;j tj.arrivaltime.hour)temp=ti.arrivaltime.hour;ti.arrivaltime.h

25、our=tj.arrivaltime.hour;tj.arrivaltime.hour=temp;temp=ti.arrivaltime.minute;ti.arrivaltime.minute=tj.arrivaltime.minute;tj.arrivaltime.minute=temp;temp=ti.arrivaltime.second;ti.arrivaltime.second=tj.arrivaltime.second;tj.arrivaltime.second=temp;for(i = 0;i n;i+)for(j = i+1;j tj.arrivaltime.minute)te

26、mp=ti.arrivaltime.minute;ti.arrivaltime.minute=tj.arrivaltime.minute;tj.arrivaltime.minute=temp;temp=ti.arrivaltime.second;ti.arrivaltime.second=tj.arrivaltime.second;tj.arrivaltime.second=temp;else continue;for(i = 0;i n;i+)for(j = i+1;j tj.arrivaltime.second)temp=ti.arrivaltime.second;ti.arrivalti

27、me.second=tj.arrivaltime.second;tj.arrivaltime.second=temp;else continue;【问题二】:无法将队列元素按照出对顺序进行分配到各个窗口。解决办法: 定义一个整型数组c4 作用是对应储存四个窗口业务办理结束的时间,在循环过程中后一个业务办理结束时间将修改当前结束时间。队列元素出对后,根据到达时间和办理业务的时间可判断出客户离开银行的时间。首先对数组c4进行初始化,找出数组中的最小元素,用对头元素修改数组c4中的最小值。另动态申请数组d4=-1,-1,-1,-1,用来保存数组c4中被修改的值的地址;如果每一个客户的离开银行时间都小

28、于下一个客户的到达时间,则下一个客户就进入当前窗口办理业务;如果离开时间大于下一个客户的到达时间,则在c4中找出最小值,且用下一个客户的离开时间修改当前值,同时用d4保存该地址。如果四个窗口均有人办理业务,则客户应在等待队列中等待。其实现方法任然是找出窗口中办理业务的客户结束时间的最小值,同时判断该窗口的闲忙情况,然后用下一个客户的结束时间修改当前最小值,并保存地址。【问题三】:计算客户在银行的平均逗留时间问题。 解决方法: 客户在银行的平均逗留时间的计算分为两种情况。第一种情况,当天随机产生的客户都办理完了自己的业务,在这种情况下只需统计每个客户在银行的逗留时间之和再求平均值,即为平均逗留时

29、间,计算方法为 (每个客户开始办理业务的时间到达银行的时间+办理业务所用时间)。第二种情况,当天随机产生的客户太多在下班时还有客户没有办理业务,且在银行停止营业时离开银行;这种情况下的平均时间计算分为两部分,它包括第一种情况下已经办理完业务的客户所用时间和还没有办理业务的客户的等待时间之和,计算方法为 (已经办理完业务的每个客户开始办理业务时间到达银行的时间+办理业务的时间)+( 未办理业务的每个客户的离开时间到达银行时间 )。6、使用说明进入菜单,根据提示进行选择(a).如果要自动生成业务信息,输入1;(b).如果要显示客户逗留时间,输入2;(c).如果要显示各窗口业务统计信息,输入3;(d

30、).如果要显示窗口一的业务办理情况,输入4;(e).如果要显示窗口二的业务办理情况,输入5;(f).如果要显示窗口三的业务办理情况,输入6;(g).如果要显示窗口四的业务办理情况,输入7;(h).如果要手动输入选择要办理的业务,输入8;(j).如果要退出程序运行,输入0。7、测试结果菜单 逗留时间窗口业务统计窗口1业务输入错误手动选择业务结束运行8、自学知识在课程设计过程中,特别是在代码编写和调试的过程中,自学了很多新的知识。例如:随机函数的使用,srand(time(NULL)随机种子,rand()%x随机函数产生一定范围内的随机数,它包含在头文件#include ,#include中,Sl

31、eep()函数的应用,让程序暂停一定时间后再运行,它包含在头文件#include中。9、课程设计心得体会我选做的题目是银行业务模拟系统,在开始动手做之前,我首先分析了一下这个系统的可行性以及需求情况。然后根据分析对系统的重要数据字段进行定义,设计出系统的模型。本程序在刚开始调试时有许多错误,通过逐步调试不断修改代码最终程序得到了一定的完善能够正常运行在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。同时还需要多动脑子,尽量把所学的知识综合起来应用。除此之外,我还得到了一些有用的教训:写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误,在写代码的过程中要把各种可能出现BUG的地方都想到,严格控制对数据的判断以增强程序的健壮性。通过这次数据结构与算法课程设计,我学到了很多以前没有很好掌握的知识,也很好的巩固了理论课上学到的理论。更增强了自己的动手实践能力。参考书: 1c+面向对象程序设计 清华大学出版社 谭浩强著 2数据结构(C+版)清华大学出版社 王红梅、胡明、王涛著 3Visual C+课程设计 严华峰著专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁