资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据结构课程设计报告银行业务模拟问题描述链表和队列班 级:计算机091班指导教师:董跃华、井福荣成 绩:洌农八瀆信息工程学院2011年6月20日摘要问题描述:客户业务分为两种。第一种是申请从银行得到一笔资金,即取款 或借款。第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口, 相应的有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而 得不到满足,则立即排入第二队等候,直至满足时才离开银行,否则业务处理完 后立即离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队 列的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。 注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一 个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理 了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队 列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所 有客户立即离开银行。写一个上述银行业务的事件驱动模拟系统,通过模拟方法 求出客户在银行内逗留的平均时间。关键字: 队列 链表 取款 借款 存款 还款 驱动模拟系统 平均时间目录1.引言- 4 -2.需求分析- 4 -3.概要设计 - 4 -1. 单链表的抽象数据类型定义为:-4-4.详细设计- 6 -1、程序结构图- 6 -2、程序流程图- 6 -3、算法设计-7-5.测试结果 - 12 -6.调试分析 - 12 -7.设计体会 - 13 -8.结束语- 13 -9.参考文献 - 13 -10.附录- 13 -1.引言随着数据处理的不断进步和计算机网络的迅速发展,银行业务的处理速度也 越来越快,熟悉运用队列和链表编写程序和掌握现代信息系统的开发方法也显得 尤为重要。所以对于计算机专业的学生来说熟练掌握队列的运用是每个学生的必 备本领。本次课程设计就是以银行业务模拟问题为模型,运用C语言和数据结构 结合队列和链表开发的系统。关键字:C语言数据结构队列链表2. 需求分析基本功能:银行的办理业务模式。在与传统的各个窗口排队的方式相比现在 的打卡号的方式更加的科学和合理,对于这种方法的一种模拟就是本软件的要求。 在不同的时间来不同的人,在未知的情况下来的多少人和银行办理业务的资源的 冲突,还有不会因为个人的办理业务的时间长短而影响到其他人办理业务的时间 问题。对于银行流水线业务的模拟。利用等候区来缓冲在窗口使用为满时候的资 源和使用的冲突。在窗口结束工作以后排在队列最前端的顾客去进行办理业务。输入输出形式:对于次题目是模拟银行运做的系统,而且时间是随即产生的, 关于输入方式。可以不用太多。也可以没有。个人可以在做界面的时候输入对应 的选项。而输出相应的结果。必要输出:客户到达时间,客户进入的窗口。客户办理的业务。测试数据:营业时间为 8 小时,其他模拟量自行设定。测试数据为时间产生的随机数对于模拟银行中的时间和业务敷值。关键字:基本功能 输入输出 测试数据3. 概要设计1.单链表的抽象数据类型定义为:ADT eventlist 数据对象:D=qiiqElemSet,i=l,2,n,n=o数据关系:R=qi-l,qilqi-l,qiWD,i=2,3,n队列的抽象数据类型定义:ADT Queue数据对象:D=ailaiWElemSet,i=l,2,n,n=o数据关系:R=ai-l,ailai-l,ai$D,i=2,3,.,n基本操作:Initqueue(linkqueue &q)操作结果:构造一个空的队列 q;Initlist(linklist &ev) 操作结果:构造一个空的链表 ev; push(queue &q,int d)初始条件:队列数组已存在 操作结果:在队尾插入一个元素 e pop(queue &q)初始条件:队列已存在操作结果:获取队列 q 的队头service* front(queue &q)初始条件:队列已存在 操作结果:返回队首元素 service* back(queue &q)初始条件:队列已存在 操作结果:返回队尾元素 service* searchAndDel(queue &q,int m)初始条件:队列已存在 操作结果:在队里寻找可处理元素 void putMoney()操作结果:处理存款事件void getMoney()操作结果:处理取款事件void arrive()初始条件:初始化操作完毕 操作结果:处理客户到达事件ADT2.本程序包含五个模块:主程序模块:Void main()接受命令;处理命令; 事件链表表单元模块实现链表的抽象数据类型; 队列单元模块实现队列的抽象数据类型; 事件结点结构单元模块定义链表的结点结构; 队列结点结构单元模块定义队列的结点结构; 各模块之间的调用关系如下:主程序模块链表、队列表单元模块 队列、链表结点结构单元模块。4.详细设计1、该程序结构图图 3-12、该程序流程图图 3-23、算法设计:0客户信息struct service int num; /客户号string type; /到达或离开int beginTime;int endTime;int money; /正数为存款,负数为取款service* next;02 队列struct queue /队列service* head;service* rear;03 入队算法void push(queue &q,int d) /插入元素d为Q的新的队尾元素 service* temp = new service;temp-money = d;temp-next = NULL;if(NULL = q.head) /队列为空,初始化q. head = temp;q. rear = temp;/ifelse /队列不为空,插入元素dq. rear-next = temp;q. rear = q.rear-next;/elseQ出队算法void pop(queue &q) / 若队列不空,出队列函数 service* temp;temp = q. head;if(NULL =q. head-next)q.head = q. rear =NULL;elseq. head=q. head-next;delete temp;返回队首元素算法service* front(queue &q) /返回队首元素 return q. head;service* back(queue &q) /返回队尾元素 return q. rear;Q处理事件算法service* searchAndDel(queue &q,int m) /在对列中寻找可处理元素 service* sign = q. head; /标记头节点 service* temp;while(NULL != q. head) 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;QB客户到达事件void arrive() /*到达函数 随机产生顾客,进入队列一产生到达事件 进入事件队列*/push(fq,(rand()% (2*dealMoney) -dealMoney); /随机产生顾客 加入第一队列back(fq)-beginTime = currentTime;back(fq)-num = number;push(eq,(back(fq)-money); /将产生事件加入事件队列 back(eq)-beginTime = currentTime;back(eq)-type = 到达; back(eq)-num = number;+numberQ处理存款或还款事件算法void putMoney() /存款函数total += front(fq)-money; /更新资金总额 push(eq,front(fq)-money); /加入事件队列离开 back(eq)-type = 离开;back(eq)-num = front(fq)-num;back(eq)-endTime = (front(fq)-beginTime + rand()%dealTime +1); +counter; /更新客户总数totalTime += (back(eq)-endTime - front(fq)-beginTime); / 更新逗留时间pop(fq); /删除第一队列第一个业务 currentTimeOfDeal = back(eq)-endTime;state =0;处理取款或借款事件算法void getM oney() /取款函数if( (-fq.head-money) total ) /资金短缺加入第二队列 push( sq,front(fq)-money );back(sq)-beginTime = front(fq)-beginTime; back(sq)-num = front(fq)-num;pop(fq);/ifelse total += back(fq)-money;push(eq,front(fq)-money); /加入事件队列 离开 back(eq)-type = 离开;back(eq)-num = front(fq)-num;back(eq)-endTime=(front(fq)-beginTime + rand()%dealTime+1);back(eq)-beginTime = 0;currentTimeOfDe
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号