第一章 项目简介
1.1 项目名称
银行营业模拟演示系统
1.2系统设计要求:
客户业务分2种,第一种是申请从银行得到一笔资金,即借款或取款。第2种是向银行投入一笔资金,即存款或还款。银行有2个服务窗口,相应地有2个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立刻排入第2个队等候,直至满足时才离开银行,否则业务处理完后立刻离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第2种业务)被接待之前的数额,或者本次以将第2个队列检查或者处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只能开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。
写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。
1.3 设计思路
本问题主要需要处理两个队列(fq,sq)和一个事件表(eq)。一个队列(fq)表示第一种业务(存款或还款),另一个队列(sq)表示第二种业务(取款或借款)。事件有两类:到达银行和离开银行。到达事件发生时随机地设置此用户的交易时间和距下一到达事件之间的时间间隔。每个客户要办理的款额也应该是随机确定的。初始时银行现存资金总额为total。开始营业后的第一个事件是客户到达,营业时间从0到closetime。Total
和closetime以及随机产生的时间和款项的
上下界都是交互地从让用户从输入,作为模拟参数。要得到相关的结果:由于下班时间到而没能办理的顾客数;分别列出需要办理两种业务的顾客数;分别列出已成功办理两种业务的顾客数;分别列出两种业务的成功办理率;客户在银行内的平均逗留时间;下班时银行所剩余的资金总额。
C++课程设计
设计任务:编写银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。
按照使用者输入的数据输出相应的一些统计数据:办理存款业务的人数,办理取款业务的人数,成功办理这两个业务的人数以及各自的成功办理率,还有最后银行剩余的资金总额。
实现:
1. 输入:
用户需要在程序运行开始时输入以下数据: ① 银行初始资金total(测试数据为10000) ② 银行营业时间closetime(测试数据为600)
③ 客户交易时间上下界dealmaxtime和dealmintime,用于给随机数产生函数传递参数,产生一个介于这两个值之间的值。
④ 客户到达时间间隔上界arrivemaxtime arrivemintime,用于给随机数产生函数传递参数,产生一个介于这两个值之间的值。
⑤ 交易额的最大上限dealMaxMoney.用于给随机函产生函数参数,产生一个介于-dealMaxMoney和dealMaxMoney之间的值,作为顾客到银行办理业务的交易额。
2. 输出:
本程序用dos界面模拟输出整个银行业务办理及排队的结果,最后给出一下数据:
① 由于下班时间到而没能办理的顾客数 ② 分别列出需要办理两种业务的顾客数 ③ 分别列出已成功办理两种业务的顾客数 ④ 分别列出两种业务的成功办理率。 ⑤ 客户在银行内的平均逗留时间 ⑥ 下班时银行所剩余的资金总额
所有数据均要正确输入,并对输入合法性进行检测,如只能输入 数字,且上界必须不小于下界。
2
C++课程设计
第二章 系统概要信息
用户打开运行程序以后会出现如下的首届面:
用户按任意键继续,则会出现如下主界面:
用户选择1开始模拟。按提示输入相应的数据设置,就能得到想要的模拟结果。退出选择0.
对用户输入要求如下:
1. 银行开始的资金总额应该大于零。
2. 银行的营业时间必须小于1440分钟(24小时)。 3. 最大到达时间间隔必须小于营业时间。
4. 最小到达时间间隔必须介于零和最大到达时间之间。 5. 最大处理时间必须小于营业时间。
3
C++课程设计
6. 7.
最小处理时间必须介于零和最大处理时间之间。
最大交易额应该小于银行开始时的资金总额且小于程序设置的50000。
如果输入不符合上述要求,程序会提示用户哪里输入出错,可以再次输入。每个输入数据都有3次机会。当三次输入都错的时候,程序停止运行,按任意键退出。
现给出最小处理时间出错时的三种提示截图:
调试分析
1. 在做队列的扫描算法时,发现运行演示的效果很奇怪,经过仔细检查和阅读题目,终于发现是我的理解有误。在处理顾客的第一种业务(从银行取出一笔钱)时,我没有特殊处理,仅是和处理第二种一样,即是等到该顾客交易时间结束时才开始判断,如果不够取进入第二队列等候。但题目中有“如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立刻排入第2个队等候,直至满足时才离开银行,否则业务处理完后立刻离开银行”。想想这也是符合实际。于是改算法的判断为以下算法:
4
C++课程设计
伪码: {
if(!empry(fq)&& fq.head->money<0)
//如果队列一不空,而且队头客户办理第二种业务 {
//1.可以办,完成离开(即银行现金足够取) //2.不可以办,排队2等候 }
else
//存款 ,第一种业务
if(!empty(fq) && temped= searchAndDel(sq,total))) //当交易时间到 {
//办理该业务,并开始扫描第二队列,看是否能满足 //第二队列需要 }
if(currentime==next_arrtime )
{
//当当前时间等于即将到来的顾客到来时间,初始化 //该顾客节点,并设置下一顾客到达时间 } }
2.对于怎样计算已办理顾客的人数,一直没成功,最后在主函数中调用存款,取款函数中计算,才完成。 此时可以输入相应数据:
a. 银行初始资金total(测试数据为10000) b. 银行营业时间closetime(测试数据为600)
c. 客户交易时间上下界dealmaxtime和dealmintime
d. 客户到达时间间隔上下界arrivemaxtime和 arrivemintime
e. 交易额的上限dealmaxmoney.
程序模拟结束
最后给出一下数据:
1.由于下班时间到而没能办理的顾客数 2.分别列出需要办理两种业务的顾客数 3.分别列出已成功办理两种业务的顾客数
5
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库C++课程设计 - 银行营业模拟演示系统在线全文阅读。
相关推荐: