




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计报告数据结构课程设计报告 银行业务模拟问题描述银行业务模拟问题描述 链表和队列链表和队列 班 级 计算机 091 班 姓 名 王 威 指导教师 董 跃 华 井福荣 成 绩 信息工程学院 2011 年 6 月 20 日 摘要摘要 问题描述 客户业务分为两种 第一种是申请从银行得到一笔资金 即取款 或借款 第二种是向银行投入一笔资金 即存款或还款 银行有两个服务窗口 相应的有两个队列 客户到达银行后先排第一个队 处理每个客户业务时 如果属于第一种 且申请额超出银行现存资金总额而 得不到满足 则立即排入第二队等候 直至满足时才离开银行 否则业务处理完 后立即离开银行 每接待完一个第二种业务的客户 则顺序检查和处理 如果可能 第二个队 列的客户 对能满足的申请者予以满足 不能满足者重新排到第二个队列的队尾 注意 在此检查过程中 一旦银行资金总额少于或等于刚才第一个队列中最后一 个客户 第二种业务 被接待之前的数额 或者本次已将第二个队列检查或处理 了一遍 就停止检查 因为此时已不可能还有能满足者 转而继续接待第一个队 列的客户 任何时刻都只开一个窗口 假设检查不需要时间 营业时间结束时所 有客户立即离开银行 写一个上述银行业务的事件驱动模拟系统 通过模拟方法 求出客户在银行内逗留的平均时间 关键字 关键字 队列 链表 取款 借款 存款 还款 驱动模拟系统 平均时间 目录 1 1 引言引言 4 2 2 需求分析需求分析 4 3 3 概要设计概要设计 5 1 单链表的抽象数据类型定义为 单链表的抽象数据类型定义为 5 4 4 详细设计详细设计 6 1 程序结构图 程序结构图 6 2 程序流程图 程序流程图 6 3 3 算法设计 算法设计 7 5 5 测试结果测试结果 12 6 6 调试分析调试分析 13 7 7 设计体会设计体会 13 8 8 结束语结束语 13 9 9 参考文献参考文献 14 10 10 附录附录 14 1 1 引言引言 随着数据处理的不断进步和计算机网络的迅速发展 银行业务的处理速度 也越来越快 熟悉运用队列和链表编写程序和掌握现代信息系统的开发方法也显 得尤为重要 所以对于计算机专业的学生来说熟练掌握队列的运用是每个学生的 必备本领 本次课程设计就是以银行业务模拟问题为模型 运用 C 语言和数据结 构结合队列和链表开发的系统 关键字 关键字 C 语言 数据结构 队列 链表 2 2 需求分析需求分析 基本功能 银行的办理业务模式 在与传统的各个窗口排队的方式相比现在 的打卡号的方式更加的科学和合理 对于这种方法的一种模拟就是本软件的要求 在不同的时间来不同的人 在未知的情况下来的多少人和银行办理业务的资源的 冲突 还有不会因为个人的办理业务的时间长短而影响到其他人办理业务的时间 问题 对于银行流水线业务的模拟 利用等候区来缓冲在窗口使用为满时候的资 源和使用的冲突 在窗口结束工作以后排在队列最前端的顾客去进行办理业务 输入输出形式 对于次题目是模拟银行运做的系统 而且时间是随即产生的 关于输入方式 可以不用太多 也可以没有 个人可以在做界面的时候输入对应 的选项 而输出相应的结果 必要输出 客户到达时间 客户进入的窗口 客户办理的业务 测试数据 营业时间为 8 小时 其他模拟量自行设定 测试数据为时间产生的随机数对于模拟银行中的时间和业务敷值 关键字 关键字 基本功能 输入输出 测试数据 3 3 概要设计概要设计 1 单链表的抽象数据类型定义为 ADT eventlist 数据对象 D qi qi ElemSet i 1 2 n n o 数据关系 R qi 1 qi qi 1 qi D i 2 3 n 队列的抽象数据类型定义 ADT Queue 数据对象 D ai ai ElemSet i 1 2 n n o 数据关系 R ai 1 ai ai 1 ai D i 2 3 n 基本操作 Initqueue linkqueue 客户号 string type 到达或离开 int beginTime int endTime int money 正数为存款 负数为取款 service next 队列 2 struct queue 队列 service head service rear 入队算法 3 void push queue temp money d temp next NULL if NULL q head 队列为空 初始化 q head temp q rear temp if else 队列不为空 插入元素 d q rear next temp q rear q rear next else 出队算法 4 void pop queue temp q head if NULL q head next q head q rear NULL else q head q head next delete temp 返回队首元素算法 5 service front queue 返回队尾元素算法 6 service back queue 处理事件算法 7 service searchAndDel queue 标记头节点 service temp while NULL q head if q head money next 首节点后移一位 返回原首节点 return temp else while else 队首元首不能被处理 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 else if q head sign 队列循环一周时停止 return NULL return NULL 客户到达事件 8 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 number 处理存款或还款事件算法 9 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 处理取款或借款事件算法 10 void getMoney 取款函数 if fq head money total 资金短缺 加入第二队列 push sq front fq money back sq beginTime front fq beginTime back sq num front fq num pop fq if else 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 currentTimeOfDeal back eq endTime counter 更新客户总数 totalTime back eq endTime back fq beginTime 更新逗留时间 pop fq 删除第一队列第一个业务 state 0 else void findAndDeal 在队列中寻找可处理元素 对其进行处理 while temped searchAndDel sq total 更新资金总额 push eq temped money 加入事件队列训 离开 back eq type 离开 back eq num temped num randomTemp rand dealTime 1 back eq endTime currentTime randomTemp currentTimeOfDeal randomTemp counter 更新客户总数 totalTime back eq endTime temped beginTime 更新逗留时间 delete temped 删除节点 temped NULL state 0 5 5 测试结果测试结果 初始界面 图图 5 15 1 模拟界面 图图 5 25 2 6 6 调试分析调试分析 1 我开始没有处理系统时间 即直接使用随机生成的客户到达时间 经查 阅资料才知道 原来分钟用 ti 60 显示 秒用 ti 60 显示即可 2 变成过程中犯了一个极其简单的错误 把栈和队列竟然弄反了 在运行 结果不对的情况下很难发现错误 花了我好长时间才找出来 我真是糊涂啊 7 7 设计体会设计体会 本次课程设计我最大的体会是 编程能力怎么样要看能不能用编程来解决实 际生活当中的问题 简单说就是理论联系实际 开始接触这个题目的时候 银行 业务模拟 根本不知从何下手 银行业务怎么和编程联系得上呢 后来通过上网 了解一些实例后 慢慢的一步步上手 等完成以后才知道原来真的可以用编程来 解决一些实际当中的问题的 看来以后还要多多接触这样的问题 来提高自己的 实际能力 8 8 结束语结束语 这个程序是在 C Free5 0 版本下完成的 使用时只需直接双击 exe 文件即可 9 9 参考文献参考文献 1 严蔚敏 吴伟民 著 数据结构 C 语言版 清华大学出版社 2010 2 谭浩强 著 C 程序设计 第三版 清华大学出版社 2005 10 10 附录附录 include include include using namespace std int total 初始时银行现存资金总额 int closeTime 营业结束时间 int arriveTime 两个到达事件之间的间隔上限 int dealTime 客户之间交易的时间上限 int dealMoney 5000 交易额上限 int currentTime 0 当前时间 int totalTime 0 客户逗留总时间 int counter 0 客户总数 int number 1 初始客户序列号 struct service int num 客户号 string type 到达或离开 int beginTime int endTime int money 正数为存款 负数为取款 service next struct queue 队列 service head service rear void push queue temp money d temp next NULL if NULL q head 队列为空 初始化 q head temp q rear temp if else 队列不为空 插入元素 d q rear next temp q rear q rear next else void pop queue temp q head if NULL q head next q head q rear NULL else q head q head next delete temp service front queue service back queue service searchAndDel queue 标记头节点 service temp while NULL q head if q head money next 首节点后移一位 返回原首节点 return temp else while else 队首元首不能被处理 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 else if q head sign 队列循环一周时停止 return NULL return NULL bool state 1 用于判断是否有窗口在处理 int currentTimeOfDeal 0 int theArriveTime 0 queue eq 事件队列 queue fq 队列一 queue sq 对列二 初始化三个队列 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 number 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 getMoney 取款函数 if fq head money total 资金短缺 加入第二队列 push sq front fq money back sq beginTime front fq beginTime back sq num front fq num pop fq if else 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 currentTimeOfDeal back eq endTime counter 更新客户总数 totalTime back eq endTime back fq beginTime 更新逗留时间 pop fq 删除第一队列第一个业务 state 0 else service temped int randomTemp void findAndDeal 在对列中寻找可处理元素 对其进行处理 while temped searchAndDel sq total 更新资金总额 push eq temped money 加入事件队列训 离开 back eq type 离开 bac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度物流运输合同封面素材定制服务协议
- 2025版柑桔电商平台广告投放购销合同示范
- 2025版钢结构工程预应力施工合同
- 2025版高层建筑外墙涂料施工及维护一体化合同
- 二零二五版教育局幼儿园教师岗位技能培训劳动合同
- 2025版财务共享服务中心外包合同
- 二零二五年度国有林地流转合同
- 二零二五年度净化车间装修工程进度跟踪与验收合同
- 学会修改课件
- 2025版地基基础工程施工合同交底书范本
- 2025年阿克苏社区专职工作人员招聘真题
- 药学教学课件下载
- 急性下壁心肌梗死患者PCI术后护理个案
- 出生缺陷防治知识课件
- 口腔门诊护理人员管理
- 通山城区污水处理厂运营维护方案
- 市政管网工程施工过程质量保证措施
- 2025云南师范大学辅导员考试题库
- 北京十一学校高中课程方案
- 绩效薪酬管理办法模板
- ZLP630高处作业吊篮使用说明书
评论
0/150
提交评论