银行业务模拟毕业设计(论文)word格式.doc

上传人:文库蛋蛋多 文档编号:4069578 上传时间:2023-04-03 格式:DOC 页数:18 大小:858KB
返回 下载 相关 举报
银行业务模拟毕业设计(论文)word格式.doc_第1页
第1页 / 共18页
银行业务模拟毕业设计(论文)word格式.doc_第2页
第2页 / 共18页
银行业务模拟毕业设计(论文)word格式.doc_第3页
第3页 / 共18页
银行业务模拟毕业设计(论文)word格式.doc_第4页
第4页 / 共18页
银行业务模拟毕业设计(论文)word格式.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《银行业务模拟毕业设计(论文)word格式.doc》由会员分享,可在线阅读,更多相关《银行业务模拟毕业设计(论文)word格式.doc(18页珍藏版)》请在三一办公上搜索。

1、一、需求分析1. 程序所实现的功能; 客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口,相应的有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立即排入第二队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前

2、的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。分析该需求,得到如下的流程图:2. 程序的输入,包含输入的数据格式和说明;int TotalMoney=10000; /银行初始存款 int CloseTime=480; /营业时间 int ArriveTime; /到达的时间 int dealTime; /处理的时间 int dealMoney = 5000; /

3、处理的钱数 int currentTime = 0; /当前时刻 int TotalMoneyTime = 0; /办理业务的总时间 int counter = 0; /初始化客户数 int number = 1; int state =1; /事件的状态 ,0和1 int currentTimeOfDeal = 0;int theArriveTime = 0;int num; /客户号int type; /到达或离开int beginTime; /endtime-begintime为处理的时间 int money; /正数为存款,负数为取款3. 程序的输出,程序输出的形式; 可根据需要输出客

4、户记录表;显示一天内客户的数目,未处理客户清单,输出数据为整型数据。每个客户的平均逗留时间,银行资金余额,输出数据为float型。4. 测试数据,如果程序输入的数据量比较大,需要给出测试数据; 银行初始资金总额为100000(元)营业时间为600(分钟)。其他模拟参量自定。两种极端的情况:一是两个到达事件之间的间隔时间很短,而客户的交易时间很长,另一个恰好相反,设置两个到达事件的间隔时间很长,而客户的交易时间很短。客户逗留时间,到达时间,客户存取款金额由程序随机产生。二、概要设计1定义程序中用到的抽象数据类型; 队列的抽象数据类型为:ADT queue数据对象:D= TotalMoney,Cl

5、oseTime,ArriveTime,dalTime,dealMoney,currentTime,TotalMoneyTime,counter,number 数据关系:R=|数据操作:initqueue(linkqueue &q)操作结果:构造一个空队列qenqueue (linkqueue &q)初始条件:队列q已存在操作结果:插入元素为队尾元素,返回头指针qdequeue(linkqueue &q)初始条件:队列q已存在操作结果 若队列不空,删除Q的队头元素,把队头元素赋给,并返回OK,否则返回ERRORqueue2程序中包含的模块及模块间的关系说明。(1)主程序模块void main(

6、) 初始化; While(n=1) 接受客户信息; 处理客户信息;(2)队列模块实现队列抽象数据类型,记录客户到达时间并处理各模块之间的调用关系如下:三、详细设计1. 定义程序中所有用到的数据及其数据结构,及其基本操作的实现;队列结构体指针结构:typedef struct queue Queue* head; /队列的头结点Queue* rear; /队列的尾节点queue;2主函数和其他函数的伪码算法;(1)主函数:int main() printf(tt*n);printf(tt* 银行业务模拟系统 *n);printf(tt* *n);printf(tt* *n);printf(tt*

7、 1.开始模拟 0.退出 *n);printf(tt* *n); printf(tt*n);printf(tt* CopyRight 青岛理工大学 V1.0 *n);printf(tt*n);int n;scanf(%d,&n);while(n=1)srand(time(NULL); /随机生成0dealtime的处理时间 printf(输入最大到达时间间隔:n); scanf(%d,&ArriveTime);printf(输入最大的处理时间:n);scanf(%d,&dealTime);theArriveTime +=rand()%ArriveTime + 1; while(currentT

8、ime CloseTime)currentTime+;if( currentTimeOfDeal money = 0)Deposit();FindAndDeal();else TakeMoney();printf(客户序列t事件类型t时间tt处理金额n);while( NULL != EventQueue.head) if(EventQueue.head-type=1)printf(%dtt到达tt%dtt%dn,EventQueue.head-num,EventQueue.head-beginTime,EventQueue.head-money);if(EventQueue.head-typ

9、e=0)printf(%dtt离开tt%dtt%dn,EventQueue.head-num,EventQueue.head-endTime,EventQueue.head-money);QueuePop(EventQueue);printf(未处理客户:n);while( NULL != SecondQueue.head)TotalMoneyTime += ( CloseTime - SecondQueue.head-beginTime ); printf(%dn,SecondQueue.head-num);counter+;QueuePop(SecondQueue); printf(客户逗

10、留平均时间为: %fn,(float)TotalMoneyTime/(float)counter);printf(银行当前余额:%dn,TotalMoney);break;system(pause); return 0;(2)存钱函数:void Deposit() TotalMoney += QueueFront(FirstQueue)-money; QueuePush(EventQueue,QueueFront(FirstQueue)-money); QueueRear(EventQueue)-type = 0;QueueRear(EventQueue)-num = QueueFront(F

11、irstQueue)-num;QueueRear(EventQueue)-endTime = (QueueFront(FirstQueue)-beginTime + rand()%dealTime +1);counter+; TotalMoneyTime += (QueueRear(EventQueue)-endTime - QueueFront(FirstQueue)-beginTime); QueuePop(FirstQueue); currentTimeOfDeal = QueueRear(EventQueue)-endTime; state =0;(3)取钱函数void TakeMon

12、ey()if( (-FirstQueue.head-money) TotalMoney ) /不能取钱 QueuePush( SecondQueue,QueueFront(FirstQueue)-money );QueueRear(SecondQueue)-beginTime = QueueFront(FirstQueue)-beginTime;QueueRear(SecondQueue)-num = QueueFront(FirstQueue)-num;QueuePop(FirstQueue);else /可以取钱 TotalMoney += QueueRear(FirstQueue)-mo

13、ney;QueuePush(EventQueue,QueueFront(FirstQueue)-money); QueueRear(EventQueue)-type = 0;QueueRear(EventQueue)-num = QueueFront(FirstQueue)-num;QueueRear(EventQueue)-endTime = (QueueFront(FirstQueue)-beginTime + rand()%dealTime +1);QueueRear(EventQueue)-beginTime = 0;currentTimeOfDeal = QueueRear(Even

14、tQueue)-endTime;counter+; TotalMoneyTime += ( QueueRear(EventQueue)-endTime - QueueRear(FirstQueue)-beginTime ); QueuePop(FirstQueue); state =0;(4)初始化客户信息函数:void Arrive() QueuePush(FirstQueue,(rand()% (2*dealMoney) -dealMoney); QueueRear(FirstQueue)-beginTime = currentTime;QueueRear(FirstQueue)-num

15、= number;QueuePush(EventQueue,(QueueRear(FirstQueue)-money); QueueRear(EventQueue)-beginTime = currentTime;QueueRear(EventQueue)-type = 1;QueueRear(EventQueue)-num = number;number+;(5)处理业务函数:void FindAndDeal()LQueue* temped ;int randomTemp;while( (temped= SearchAndDel(SecondQueue,TotalMoney)&NULL !=

16、 temped ) TotalMoney += temped-money; QueuePush(EventQueue,temped-money);QueueRear(EventQueue)-type = 0;QueueRear(EventQueue)-num = temped-num;randomTemp = rand()%dealTime +1;QueueRear(EventQueue)-endTime = currentTime + randomTemp ;currentTimeOfDeal += randomTemp;counter+; TotalMoneyTime += ( Queue

17、Rear(EventQueue)-endTime - temped-beginTime ); state = 0; (6)进队操作函数:void QueuePush(queue &q,int d) LQueue* temp;temp=(LQueue *)malloc(sizeof(LQueue);temp-money = d;temp-next = NULL;if(NULL = q.head) /如果初始队列为空 q. head = temp;q. rear = temp;else q. rear-next = temp;q. rear =q.rear-next;(7)出队操作函数:void

18、QueuePop(queue &q) LQueue * temp;temp = q. head;if(NULL =q. head-next)q.head = q. rear =NULL;elseq. head=q. head-next;(8)返回队列头结点函数:LQueue* QueueFront(queue &q) return q. head;(9)返回队列尾节点函数:LQueue* QueueRear(queue &q) /返回队列的尾节点 return q. rear;(10)寻找可处理客户函数:LQueue* SearchAndDel(queue &q,int m) LQueue*

19、sign = q.head; LQueue* temp;while( q.head!=NULL )if(-(q. head-money) next; return temp;else if(q. head = q. rear) elseq. rear-next = q. head; q. rear = q. rear-next;q. head =q. head-next;q. rear-next = NULL;if(q. head = sign)return NULL;return NULL; /返回NULL取钱失败 3. 画出函数之间的调用关系图。四、调试分析1. 实际完成的情况说明(完成的

20、功能,支持的数据类型等); 本程序基于栈和队列,实现了银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行的逗留平均时间。2. 上机过程中出现的问题及其解决方案; 在上机过程中遇到多次重大错误,本程序函数较多,除主函数之外共有9个函数,这些函数中的任意一个出现问题,都会导致主函数调用出现错误。例如在QueueFront的定义中出现一个失误,导致运行失败,通过debug的提示,找到根源,修改函数,完善了程序。3. 程序中可以改进的地方说明; 可以将main函数之外的9个函数放到head.h头文件中,是程序更加模块化,更加简洁,并未以后的开发提供便利。4. 程序中可以扩充的功能及设计实现假想。

21、可以不固定营业时间以及初始金额,增加其适用性和灵活性,使之能够为更多的用户服务。该设想的实现需要删除初始化的几个数值,包括TotalMoney以及CloseTime,并通过getchar()从用户处获得自定义数值TotalMoney以及CloseTime。五、用户手册说明如何使用你编写的程序,详细列出每一步的操作步骤。 用户进入系统后,选择1进入系统,选择0退出系统。 进入系统后,用户输入最大到达时间间隔,按回车; 此时,要求用户输入最大的处理时间,按回车; 此时程序自动运行,列出客户序列,客户状态(到达或离开),时间,处理金额的清单,并列出未处理客户的序号、客户平均逗留时间以及银行当前余额。 模拟完成,用户按任意键,退出程序。六、测试结果 列出你的测试结果,包括输入和输出。注意测试数据应该完整和严格,至少给出2组测试结果(含合法数据与非法数据)。第一组:输入最大到达时间间隔:20输入最大的处理时间:5得到如下结果:第二组输入最大到达时间间隔:8输入最大的处理时间:23得到如下结果:七、附录列出源程序的文件名清单。head.hmain.cstdio.hstdlib.htime.h

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号