




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、需求分析1. 程序所实现的功能; 客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口,相应的有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立即排入第二队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。分析该需求,得到如下的流程图:2. 程序的输入,包含输入的数据格式和说明;int totalmoney=10000; /银行初始存款 int closetime=480; /营业时间 int arrivetime; /到达的时间 int dealtime; /处理的时间 int dealmoney = 5000; /处理的钱数 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. 程序的输出,程序输出的形式; 可根据需要输出客户记录表;显示一天内客户的数目,未处理客户清单,输出数据为整型数据。每个客户的平均逗留时间,银行资金余额,输出数据为float型。4. 测试数据,如果程序输入的数据量比较大,需要给出测试数据; 银行初始资金总额为100000(元)营业时间为600(分钟)。其他模拟参量自定。两种极端的情况:一是两个到达事件之间的间隔时间很短,而客户的交易时间很长,另一个恰好相反,设置两个到达事件的间隔时间很长,而客户的交易时间很短。客户逗留时间,到达时间,客户存取款金额由程序随机产生。二、概要设计1定义程序中用到的抽象数据类型; 队列的抽象数据类型为:adt queue数据对象:d= totalmoney,closetime,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( ) 初始化; 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* 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(currenttime 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-type=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(客户逗留平均时间为: %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(firstqueue)-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 takemoney()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)-money;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(eventqueue)-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 = 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 != 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 += ( queuerear(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 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* 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. 实际完成的情况说明(完成的功能,支持的数据类型等); 本程序基于栈和队列,实现了银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行的逗留平均时间。2. 上机过程中出现的问题及其解决方案; 在上机过程中遇到多次重大错误,本程序函数较多,除主函数之外共有9个函数,这些函数中的任意一个出现问题,都会导致主函数调用出现错误。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年在哪找地理题库及答案
- 2025年接种疫苗试题及答案
- 基于5G网络的2025年智慧物流配送资金申请与通信技术报告
- 全渠道零售业大数据应用案例分析报告
- 2025年小儿用药试卷及答案
- 强县工程考核方案公示(3篇)
- 千万工程立项方案范文(3篇)
- 2025年波浪力学试卷及答案
- 急救质量持续改进模型-洞察及研究
- 2025年押题宝典教师招聘之《幼儿教师招聘》题库及参考答案详解【预热题】
- 土地证补办申请书
- 2025年秋期英语组工作计划
- 2024译林英语七年级上册单词
- 历年全国普通话考试真题50套
- 2024年社区警务规范考试题库
- 中学篮球社团教案全套
- 电焊、气焊、电渣焊作业预防措施及应急预案
- 职业技术学院《老年常见疾病预防与照护》课程标准
- 半导体工艺2:HDP-主要工艺参数详解
- HJ 962-2018 土壤 pH 值的测定 电位法(正式版)
- 抖音:短视频与直播运营全套教学课件
评论
0/150
提交评论