-严蔚敏数据结构-银行业务模拟系统的实现
1.需求分析
1.1输入的形式
输入的元素为整型类型;
输入的银行初始存款必须大于0;
输入的银行营业时间必须大于0且必须小于1440(一天);
输入的最大到达时间间隔必须大于0且必须小于银行营业时间;
输入的最小到达时间间隔必须大于0且必须小于最大到达时间间隔;
输入的最大处理时间必须大于0且必须小于银行营业时间;
输入的最小处理时间必须大于0且必须小于最大处理时间;
输入的交易额的最大上线必须大于0且必须小于银行初始存款且必须小于50000;
1.2输出的形式
输出的形式为以列表的形式输出事件处理序列;
并在列表输出完后输出需要存款的客户人数,需要取款的客户人数,成功办理存款的客户人数,成功办理取款的客户人数,存款成功办理率,取款成功办理率,客户逗留平均时间,银行当前余额等信息。
1.3程序功能
实现银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。
1.4测试
测试数据由程序用户手动输入,此处对于正确输入和错误输入给出样例。
(1)错误的输入
(2)正确的输入
(3)对应的输出结果
2.概要设计
2.1数据类型
本设计中用到的数据结构ADT定义如下:
2.2主程序的流程
主程序先是让外部进行测试数据输入,待测试数据输入完后,执行银行业务模拟系统,产生需要取款的客户人数,成功办理存款的客户人数,成功办理取款的客户人数,存款成功办理率,取款成功办理率,客户逗留平均时间,银行当前余额等信息。
2.3程序模块说明
3.详细设计
3.1头文件声明
为了增强代码可读性,使用头文件来记录各类结构体的声明以及常用变量的定义
|
|
|
|
3.5函数调用关系及程序流程
以下为程序的大致流程图:
函数调用关系图如下:
4.调试分析
4.1调试中遇到的问题
调试中遇到的问题不是很多,但遇到的问题在一定程度上让我更加的了解整个程序的运作机理,对于理解数据结构也有很大的帮助。
主要的问题在于一开始的时候实现检查Q2队列的接口时,在进行检查后,未再让经过检查却不满足处理的元素重新进入Q2队列,导致最后的元素缺少。经过调试发现了这个问题,对代码进行修正,最终解决了问题。
4.2算法分析
4.3经验体会
通过这次的课程设计的编写,学会了在多种数据结构之间进行巧妙的结合运用。同时,对于用到的多种数据结构也有了更多的了解。
在测试功能的时候一定要注意选取的测试数据的正确性和实用性。
5.用户使用说明
在进入银行业务模拟界面时,选择操作编号,0-退出系统,1-进入模拟系统.
进入模拟系统后,输入的银行初始存款必须大于0;
输入的银行营业时间必须大于0且必须小于1440(一天);
输入的最大到达时间间隔必须大于0且必须小于银行营业时间;
输入的最小到达时间间隔必须大于0且必须小于最大到达时间间隔;
输入的最大处理时间必须大于0且必须小于银行营业时间;
输入的最小处理时间必须大于0且必须小于最大处理时间;
输入的交易额的最大上线必须大于0且必须小于银行初始存款且必须小于50000;
若输入有误会进行提示,三次错误后退出模拟系统。若输入无误,则开始进行输出,输出事件处理的列表信息,以及需要存款的客户人数,需要取款的客户人数,成功办理存款的客户人数,成功办理取款的客户人数,存款成功办理率,取款成功办理率,客户逗留平均时间,银行当前余额等信息。
6.测试结果
6.1输出测试1
输入较大的银行初始存款,输入较大的到达时间间隔和较大的处理时间,较小的交易额上限
由于到达时间间隔和处理时间输入较大,测试数据会比较少,相对于来说,求得的银行业务模拟的客户平均用时等信息可能就没有那么的精确
6.2输出测试2
输入较大的银行初始存款,输入较小的到达时间间隔范围,较小的交易额上限
在较小的到达时间间隔和处理时间的输入下,会得到比前一种情况更多的测试数据输出,在此情况下,样本的容量足够大,对于客户平均用时等信息的统计就可能会更加的精确一些
6.3输出测试3
输入较小的银行初始存款,较大的处理时间和较大的时间间隔,较大的交易金额上限。
在这样的输出下,对于客户平均用时的影响比较大,且只能产生少量的数据。
7.参考文献
参考文献
[1] 张小艳,龚尚福编著. 数据结构与算法. 徐州:中国矿业大学出版社,2007
[2] 严蔚敏,吴伟民编著. 数据结构(C语言版). 北京: 清华大学出版社,1997
[3] 谭浩强编著. C程序设计(第三版). 北京: 清华大学出版社,2005