# 银行业务模拟系统 2023.6.18 刘彩月,刘梦琦,金雨佳,赵亚璇 摘要:针对银行营业的工作记录和计算一天中客户在银行的逗留时间的问题。实现了模拟客户排队,窗口,管理客户,队列的功能。为了有效的存储和处理客户(客户到达,客户离开)采用有序表,其主要操作是插入和删除事件,用一个单链表表示。为了有效存储和处理窗口( 客户到达时间,离开时间)采用了队列。为了解决客户找到最短等待队列,使用了排序和插入算法,为了解决客户离开事件,使用了删除算法。删除和插入的算法效率为O(n)。针对银行开门,关门,营业窗口数目,客户到达时间,采用人机交互。完成了保存银行营业的工作记录,储存客户的到达时间和离开时间;显示出在某一天整个银行系统中客户在银行逗留的平均时间。 任务分工及完成情况: |任务|设计|开发|测试|文档| |-----|----|----|----|----| | 1和4| 刘彩月 | 刘彩月 | 赵亚璇 | 刘彩月 | | 2.1 | 赵亚璇 | 赵亚璇 | 金雨佳 | 赵亚璇 | | 2.2和2.3 | 金雨佳 | 金雨佳 | 刘梦琦 | 金雨佳 | | 3 | 刘梦琦 | 刘梦琦 | 刘彩月| 刘梦琦 | |代码|金雨佳|刘梦琦|赵亚璇|刘彩月| 记得写5自己的部分(个人总结) 每个成员的工作量(百分比): |刘彩月|赵亚璇|金雨佳|刘梦琦| |------|-----|-----|-----| | 25 | 25 | 25 | 25 | # 1.系统分析 ## 1.1问题描述 银行有n个窗口对外接待客户,从早晨银行开门起不断有客户进入银行。由于每个窗口在某时刻只能接待一个客户,因此在客户人多时需分别在各个窗口前排队。对于刚进入银行的客户,如果某个窗口的营业员正在空闲,则可上前办理业务;反之,若n个窗口均有客户正在办理业务,新来的客户便会排在人数最少的队伍后面。 设计一个银行业务模拟系统,模拟银行的业务运行并计算一天中客户在银行逗留的平均时间。通过人机互交的方式设定程序所需要的参数:银行的开门时间和关门时间,营业窗口数目。客户的到达时间可通过人机互交,文件导入或随机产生的方式输入。保存银行营业的工作记录,储存客户的到达时间和离开时间。显示出在某一天整个银行系统中客户在银行逗留的平均时间。要求系统运行正常,功能完整;数据结构使用得当,算法有较高的效率;代码规范,可读性高,结构清晰,具有一定的健壮性,可靠性和可维护性。 ## 1.2可行性分析 明确解决问题的关键,核心数据结构,核心算法等。 运用了单链表和队列,运用了排序,插入和删除的算法。 确定解决问题的总体思路和方案。 客户排队的过程是一个按照到达时间先到先接受服务的过程,这一过程可以通过队列实现。n个不同的窗口对应n个队列,队列中每一个元素对应一个客户。算法中处理的事件有两类:一类是客户到来事件,另一类是客户离开事件。客户到来事件发生的时刻随客户到来自然形成,客户到来后,使用排序算法找到最短的等待队列,将客户插入队列;客户离开事件发生的时刻由银行窗口为其办理业务的完成时间决定,业务办理完成后,客户从等待队列中出队,窗口为下一个客户(如果存在的话)服务。 本项目涉及的对象主要包括客户、银行窗口,可以设计两个数据结构实现客户和窗口的功能。此外,管理客户、队列的功能可以单独实现(类似银行进门处的接待员,引导客户在哪里排队)。 ## 1.3 需求分析 ### (1)输入和输出 确定系统的主要输入和输出,如可以设定的参数,数据文件等,明确其主要作用。 ### (2)数据字典 描述系统中需要处理的所有数据包含的具体信息。例如: 学生 = 学号 + 姓名 + 成绩 ### (3)数据文件 系统中需要读取xx数据文件以获取xx数据,或者需要导出xx数据。举例说明xx数据文件的具体格式。 ### (4)参数设定 系统开始运行时,需要设置的参数。可以用户手册的形式给出设定参数的过程,如系统提示信息和用户输入等。 ### (5)XX功能 其他具体功能。 首先简要说明该功能的主要作用,可以用户手册的形式给出系统提示信息、用户输入和系统输出等。 ### (6)XX功能 其他功能逐项列出。 # 2. 系统设计 ## 2.1 概要设计 系统划分为几个模块,可以画模块图。 逐个说明每个模块的功能(输入、输出、做什么,这里不写怎么做)。 ## 2.2 数据结构设计 首先,分析对比几种可选的数据结构设计方案。如图可以采用邻接矩阵,也可以采用邻接表,表示集合可以用普通的查找表,还可以用不相交集。给出每一种设计方案的特点(优势、不足等)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。 ### (1)xxx结构 给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。多个数据结构,逐一列出。 ### (2)xxx结构 给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。 ## 2.3 算法设计 首先,分析对比几种可选的算法设计方案。如是否排序,广度优先或深度优先搜索等。给出每一种设计方案的特点(优势、不足)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。 ### (1)XXX算法 给出核心算法的设计,包括伪代码或流程图。多个核心算法,逐一列出。只列举解决问题的核心算法,重点讲清楚是如何解决问题的。 ### (2)XXX算法 给出核心算法的设计,包括伪代码或流程图。 # 3. 系统实现 说明所使用的语言、开发工具等。 介绍项目的文件结构,以及主要函数的功能。 ## 3.1 核心数据结构的实现 描述数据结构的实现方法。 可以配合程序代码加以说明。如: ``` struct LNode { E data; // 数据元素 LNode *next; // 指向下一个结点的指针 }; ```` 对该数据结构的特点进行分析。 ## 3.2 核心算法的实现 描述算法的实现方法。 可以配合程序代码加以说明。如: ``` // 冒泡排序 void bubble_sort(T a[], int n) { ...... } ```` 对该算法的时间和空间复杂度进行分析。 # 4.系统测试 描述测试的思路和方法。比如,先用小数据量进行测试,再用真实数据进行测试。 测试应考虑到输入数据的特殊情况。 给出若干测试用例,包括输入、预期结果、运行结果或是否通过测试。运行结果和预期结果一致,为通过测试。 # 5. 总结 概况项目和完成情况。 遇到的问题和解决方法。 个人小结: 刘彩月: 金雨佳: 赵亚璇: 刘梦琦: # 参考文献 [1] 严蔚敏, 吴伟民. 数据结构(C语言版). 北京: 清华大学出版社, 2007.