ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:115.56KB ,
资源ID:23126409      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23126409.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(银行业务模拟.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

银行业务模拟.docx

1、银行业务模拟 NANCHANG UNIVERSITY 课 程 设 计 报 告 课程名称: 计算机技术综合课程设计 题 目: 银行业务模拟 学 院: 信息工程 系: 计算机科学与技术 专 业: 计算机科学与技术 班 级: 061 班 学 号: 6103106020 学生姓名: 邱雨田 时 间: 2010年1月11日至1月22日 一、 问题描述:客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款;第二种是向银行中投入一笔资金,即存款或还款。银行有两个服务窗口,相应地有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立

2、刻排入第二个队等候,直到满足时才离开银行;否则业务处理完后立刻离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。写一个银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。二、 分析与

3、设计1. 问题分析:本问题主要需要处理两个队列(fq,sq)和一个事件表(eq)。一个队列(fq)表示第一种业务(存款或还款),另一个队列(sq)表示第二种业务(取款或借款)。事件有两类:到达银行和离开银行。到达事件发生时随机地设置此用户的交易时间和距下一到达事件之间的时间间隔。每个客户要办理的款额也应该是随机确定的。初始时银行现存资金总额为total。开始营业后的第一个事件是客户到达,营业时间从0到closetime。Total 和closetime以及随机产生的时间和款项的上下界都是交互地从让用户从输入,作为模拟参数。要得到相关的结果:由于下班时间到而没能办理的顾客数;分别列出需要办理两种

4、业务的顾客数;分别列出已成功办理两种业务的顾客数;分别列出两种业务的成功办理率;客户在银行内的平均逗留时间;下班时银行所剩余的资金总额。2. 测试数据及期望结果:1) 输入:用户需要在程序运行开始时输入以下数据:1银行初始资金total(测试数据为10000)2银行营业时间closetime(测试数据为600)3客户交易时间上下界dealmaxtime和dealmintime,用于给随机数产生函数传递参数,产生一个介于这两个值之间的值。4客户到达时间间隔上界arrivemaxtime arrivemintime,用于给随机数产生函数传递参数,产生一个介于这两个值之间的值。5交易额的最大上限de

5、alMaxMoney.用于给随机函产生函数参数,产生一个介于-dealMaxMoney和dealMaxMoney之间的值,作为顾客到银行办理业务的交易额。2) 输出:本程序用dos界面模拟输出整个银行业务办理及排队的结果,最后给出一下数据:1由于下班时间到而没能办理的顾客数2分别列出需要办理两种业务的顾客数3分别列出已成功办理两种业务的顾客数4分别列出两种业务的成功办理率。5客户在银行内的平均逗留时间6下班时银行所剩余的资金总额3) 所有数据均要正确输入,并对输入合法性进行检测,如只能输入 数字,且上界必须不小于下界。4) 预计实现结果截图:用户打开运行程序以后会出现如下的首界面:用户按任意键

6、继续,则会出现如下主界面:用户选择1开始模拟。按提示输入相应的数据设置,就能得到想要的模拟结果。退出选择0.对用户输入要求如下:1 银行开始的资金总额应该大于零。2 银行的营业时间必须小于1440分钟(24小时)。3 最大到达时间间隔必须小于营业时间。4 最小到达时间间隔必须介于零和最大到达时间之间。5 最大处理时间必须小于营业时间。6 最小处理时间必须介于零和最大处理时间之间。7 最大交易额应该小于银行开始时的资金总额且小于程序设置的50000。如果输入不符合上述要求,程序会提示用户哪里输入出错,可以再次输入。每个输入数据都有3次机会。当三次输入都错的时候,程序停止运行,按任意键退出。现给出

7、最小处理时间出错时的三种提示截图:3. 模块结果及各个模块的实现方法描述:1) 概要设计结构体的定义如下:struct serviceint num; /客户号string type; /到达或离开int beginTime;/到达时间int endTime;/离开时间int money; /正数为存款,负数为取款service* next;/指针域;2) 队列的抽象数据类型定义如下:ADT Queue 数据对象:D ai | aiElemSet, i=1,2,.,n, n0 数据关系:R1 |ai-1, aiD, i=2,.,n 基本操作:void init_Q(Queue &Q);操作结果

8、:构造空队列Qint Q_empty(Queue Q);初始条件:队列Q存在操作结果:若Q为空队列,则返回TRUE,否则FALSEint Q_length(Queue Q);初始条件:队列Q存在操作结果:返回队列Q的元素个数,即队列长度int gethead_Q(Queue Q);初始条件:队列Q存在操作结果:返回队列Q的队头元素void en_Q(Queue &Q,int e);初始条件:队列Q存在操作结果:插入元素e为Q的新的队尾元素。void de_Q(Queue &Q,int &e);初始条件:队列Q存在操作结果:删除Q的队头元素。ADT Queue3) 模块及相互调用关系本程序包含3

9、个模块:1主程序模块2队列模块实现队列抽象数据类型各模块相互调用关系如下:主程序模块队列模块算法设计4) 队列类型typedef struct QNode /队列节点类型 int data; struct QNode *next; QNode,*PQNode;typedef struct PQNode front; /队头指针 PQNode rear; /队尾指针Queue;a) 队列的基本操作设置如下:void init_Q(Queue &Q);/初始化,构造空队列Q(Q.front=Q.rear)int Q_empty(Queue Q);/若队列Q存在/若Q为空队列,则返回TRUE,否则F

10、ALSEint Q_length(Queue Q);/若队列Q存在/返回队列Q的元素个数,即队列长度int gethead_Q(Queue Q);/若队列Q存在/返回队列Q的队头元素void en_Q(Queue &Q,int e);/若队列Q存在/插入元素e为Q的新的队尾元素。void de_Q(Queue &Q,int &e);/若队列Q存在/删除Q的队头元素。b) 其中操作算法:void init_Q(Queue &Q) /初始化,构造空队列Q(Q.front=Q.rear) Q.front=Q.rear=(PQNode)malloc(sizeof(QNode); if(!Q.front

11、)exit(-1); int Q_empty(Queue Q) /若队列Q存在 /若Q为空队列,则返回TRUE,否则FALSE if(Q.front=Q.rear)return 1; else return 0;int gethead_Q(Queue Q) /若队列Q存在 /返回队列Q的队头元素 if(!Q_empty(Q)return Q.front-next-data; else return 0;int Q_length(Queue Q) /若队列Q存在 /返回队列Q的元素个数,即队列长度 int count=0; PQNode p=Q.front; while(p!=Q.rear) c

12、ount+; p=p-next; return count;void en_Q(Queue &Q,int e) /若队列Q存在 /插入元素e为Q的新的队尾元素。 PQNode p=(PQNode)malloc(sizeof(QNode); if(!p)exit(-1); p-data=e; p-next=NULL; Q.rear-next=p; Q.rear=p;void de_Q(Queue &Q,int &e) /若队列Q存在 /删除Q的队头元素 PQNode p; if(Q.front=Q.rear)return ; p=Q.front-next; e=p-data; Q.front-n

13、ext=p-next; if(Q.rear=p)Q.rear=Q.front; free(p);5) 队列扫描算法伪码:if(!empry(fq)& fq.head-money0)/如果队列一不空,而且队头客户办理第二种业务/1.可以办,完成离开(即银行现金足够取)/2.不可以办,排队2等候else /存款 ,第一种业务 if(!empty(fq) & temped= searchAndDel(sq,total)/当交易时间到/办理该业务,并开始扫描第二队列,看是否能满足 /第二队列需要 if(currentime=next_arrtime )/当当前时间等于即将到来的顾客到来时间,初始化 /

14、该顾客节点,并设置下一顾客到达时间6) 其他函数算法int rand_num(int max,int min) /随机数生成 /根据传进的max和min,生成介于max和min的一个 /整数 randomize(); RandSeed=Now(); return ( random(100000) % (max - min + 1) +min ); 三、 源代码:/银行业务模拟系统#include #include #include #include using namespace std;struct serviceint num; /客户号string type; /到达或离开int beg

15、inTime;/到达时间int endTime;/离开时间int money; /正数为存款,负数为取款service* next;/指针域;struct queue /队列service* head;/队列头指针service* rear;/队列尾指针;int total; /初始时银行现存资金总额int closeTime; /营业结束时间int arriveMaxTime; /两个到达事件之间的间隔上限int arriveMinTime; /两个到达事件之间的间隔下限int dealMaxTime; /客户之间交易的时间上限int dealMinTime; /客户之间交易的时间下限int

16、 dealMaxMoney ; /交易额上限int ndn=0;/需要存款的人数int nwn=0;/需要取款的人数int sdn=0;/成功存款的人数int swn=0;/成功取款的人数int currentTime = 0; /当前时间int totalTime = 0; /客户逗留总时间int counter = 0; /客户总数int number = 1; /初始客户序列号bool state =1; /用于判断是否有窗口在处理int currentTimeOfDeal = 0;int thearriveMaxTime = 0;queue eq; /事件队列queue fq; /队列

17、一queue sq; /对列二/初始化三个队列service* front(queue &q)/返回队首元素return q. head;service* back(queue &q)/返回队尾元素return q. rear;void push(queue &q,int d)/ 插入元素d为Q的新的队尾元素service* temp = new service;temp-money = d;temp-next = NULL;if(q.head=NULL)/队列为空,初始化q. head = temp;q. rear = temp;/ifelse /队列不为空,插入元素dq. rear-nex

18、t = temp;q. rear = q.rear-next;/elsevoid pop(queue &q)/ 若队列不空,出对列函数service* temp;temp = q. head;if(q. head-next=NULL )q.head = q. rear =NULL;elseq. head=q. head-next;delete temp;void arrive()/到达函数,随机产生顾客,进入队列一产生到达事件 进入事件队列push(fq,(rand()% (2*dealMaxMoney) -dealMaxMoney); /随机产生顾客加入第一队列back(fq)-beginT

19、ime = currentTime;back(fq)-num = number;push(eq,(back(fq)-money); /将产生事件加入事件队列back(eq)-beginTime = currentTime;back(eq)-type = 到达;back(eq)-num = number;+number;void putMoney() /存款函数total += front(fq)-money; /更新资金总额push(eq,front(fq)-money); /加入事件队列 离开back(eq)-type = 离开;back(eq)-num = front(fq)-num;ba

20、ck(eq)-endTime = (front(fq)-beginTime + rand()%(dealMaxTime-dealMinTime +1)+dealMinTime);+counter; /更新客户总数totalTime += (back(eq)-endTime - front(fq)-beginTime); /更新逗留时间pop(fq); /删除第一队列第一个业务currentTimeOfDeal = back(eq)-endTime; state =0;void getMoney()/取款函数if( (-fq.head-money) total ) /资金短缺 加入第二队列pus

21、h( sq,front(fq)-money );back(sq)-beginTime = front(fq)-beginTime;back(sq)-num = front(fq)-num;pop(fq);/ifelsetotal += back(fq)-money;push(eq,front(fq)-money); /加入事件队列 离开back(eq)-type = 离开;back(eq)-num = front(fq)-num;back(eq)-endTime = (front(fq)-beginTime +rand()%(dealMaxTime-dealMinTime +1)+dealMi

22、nTime);back(eq)-beginTime = 0;currentTimeOfDeal = back(eq)-endTime;+counter; /更新客户总数 totalTime += ( back(eq)-endTime - back(fq)-beginTime ); /更新逗留时间pop(fq); /删除第一队列第一个业务state =0;/elseservice* searchAndDel(queue &q,int m)/搜索函数,在对列中寻找可处理元素service* sign = q. head; /标记头节点service* temp;while(q. head!=NUL

23、L )if(-(q. head-money) next; / 首节点后移一位,返回原首节点return temp;/else/whileelse/队首元首不能被处理if(q. head = q. rear)else/首节点移到队列尾部q. rear-next = q. head; q. rear = q. rear-next;q. head =q. head-next;q. rear-next = NULL;/else/elseif(q. head = sign)/队列循环一周时停止return NULL;return NULL;service* temped ;int randomTemp;

24、void findAndDeal()/处理函数 在对列中寻找可处理元素,对其进行处理while( (temped= searchAndDel(sq,total)&temped!=NULL ) /查找可处理取款total += temped-money; /更新资金总额push(eq,temped-money); /加入事件队列 离开back(eq)-type = 离开;back(eq)-num = temped-num;randomTemp = rand()%(dealMaxTime-dealMinTime +1)+dealMinTime;back(eq)-endTime = currentT

25、ime + randomTemp ;currentTimeOfDeal += randomTemp;+counter; /更新客户总数totalTime += ( back(eq)-endTime - temped-beginTime ); /更新逗留时间 delete temped; /删除节点temped = NULL;state = 0;int main() printf( *n);printf( *n);printf( *n);printf( * * 学院:信息工程学院n);printf( * *n);printf( * *n);printf( * * 专业:计算机科学与技术n);pr

26、intf( * *n);printf( * *n);printf( * 欢迎进入银行模拟系统 * 班级:061n);printf( * *n);printf( * *n);printf( * * 姓名:邱雨田n);printf( * *n);printf( * *n);printf( * * 学号:6103106020n); printf( *n);printf( *n);printf( *n);printf(n);printf(n);printf(n);printf(请按任意键继续.n);getch();int i;for(i=0;i=14;i+)printf(n);printf( *n);printf( *n);printf( *n);printf( * 1.开始模拟 *n);printf( * 0.退出 *n);printf( *n);printf( *n);printf( *n);i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1