基于C++的银行存储管理系统
一、实训目的
通过课程设计,学会运用数据结构知识,针对具体应用,自己设计合理数据结构,确定存储结构,并能设计具体操作算法,选择使用具体语言进行实现。掌握C++较复杂程序的组织和设计过程,调试技巧。学习解决实际问题的能力。
二、实训环境
计算机windows xp或其它版本,VC6.0或更高版本,或其它语言环境。
三、实习题目
小明是一个计算机专业top student,祝贺他毕业了。并准备到银行参加工作。上班第一天,经理叫他编制一个实现一个活期储蓄处理程序,算作考查。上班第一天,一定要给领导一个好印象,小明二话没说,就答应了。现要你是小明了,请完成如下题目功能。储户、销户、存入、支出活动频繁,系统设计要求:
- 能比较迅速地找到储户的帐户,以实现存款、取款记账
- 能比较简单,迅速地实现插入和删除,以实现开和销户的需要
四、问题分析
- 创建文件,用数组形式存储用户数据,开户时自定义用户账户、姓名、密码、开户金额
- 用户登录时,输入正确的用户姓名、用户密码,完成登陆后即可进行存款、取款、查询、修改密码
- 实现输入用户的账户名和密码,将其全部信息删除,进行销户
五、逻辑结构和存储结构设计
存储结构设计:该存储结构是链式存储结构,本系统主要用线性表结构类型来存储在“活期储蓄账目管理系统”中的信息。其中,结构体由4个分量构成:用户账号名、用户姓名、用户密码、开户金额。
六、算法设计
本系统采用链式结构存储储蓄账目管理。
- 用户输入想开户的储户输入其姓名账户密码,然后显示开户成功,会有一个账户生成,然后开户成功
- 用户登录需要输入账号名和密码,判断密码是否正确,如果错误则返回,然后点击登录,就可以进入管理系统
- 用户的存取款和查询余额,首先在登录账户的基础上,选择存或取款,然后输入相应的金额,若是取款应判断其金额是否小于账户上的金额,如果不小于,则提示储户重新输入相应的金额,或者退出。 4、储户需要销户的账户,然后程序自动判断该账户是否存在,然后输入账户密码,若密码与账户相对应,则删除该账户
七、空间复杂度和时间复杂度分析
7.1 空间复杂度
是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算时通常是反复调用同一个方法,递归n次,就需要n个空间。
7.2 时间复杂度
一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f (n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。
八、效果截图
主界面
开户界面
账户信息界面
退出界面
九、收获和体会及不足
这是第二次做课程设计了,但开始自己读题时,思路不是很清晰,也不明白这个程序就是要结合所学数据结构的思想,要首先定义了多个数组,包含了储户的各类信息,如姓名,账号,金额等等,并利用文件将用户信息加以存储。开户时将输入的信息写入文件,存款和取款时对用户的存款加以处理并更新到文件中。
最后在分析好活期储蓄帐目管理的功能模块后,我开始编写代码,在代码调试的过成中,并不是一帆风顺的,这也是平常练的不够吧,经过几轮删删改改,终于做的差不多了,基本达到了老师的要求,但是还是有很多不足的地方。通过这次对银行管理系统的编写与调试,巩固了有关结构体的知识及其操作,锻炼了实际应用能力,同时对文件有了更进一步的了解及应用,明白文件的读写等相关知识。
在不断地进行书面设计和上机调试的过程中,认识到掌握设计程序的思路非常重要,要正确处理算法与语法的关系,算法是程序的核心,是灵魂,语法是外壳是工具。但是光掌握语法也是不够的,应该还要把重点放在解题思路上。这个实验也让我认识到自己知识的有限,与同学讨论的益处,培养了我的团队意识。
在这一周的课程设计中,我通过这次设计我也着实又感受了一次编程的乐趣,从中也学到了不少知识。书上和老师都说“程序=数据结构+算法”,但我在学习运用数据结构编程之前,并没能深刻体会到这一点,直到这次课程设计实践。
我感受最深的一点是:以前用C编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。现在编程感觉完全不同了。在编写一个程序之前,自己能够综合考虑各种因素,
首先选取自己需要的数据结构,是树还是图或是别的什么?然后选定一种或几种存储结构来具体的决定后面的函数的主要风格。最后在编写每一个函数之前,可以仔细斟酌比对,挑选出最适合当前状况的算法。另外,我还体会到深刻理解数据结构的重要性。只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。
通过这次课程设计逐渐提高了自己的程序设计和调试能力,通过上机实习,严整自己设计算法的正确性,学会了有效利用基本调试方法,查找出代码中的错误并且修27 改,我对参数的调用也进行了很多种尝试,已经能够相对准确的选择合适的参数形式来实现函数之间的数据传输交互了。
这次试验也让我看到了自己的不足,许多关于C++的一些比较具体的东西还不太懂,比方说指针。这次课程设计也让我知道了自己的能力只有经过不断地锻炼才能提高。
完整的源码和详细的文档,上传到了 【WRITE-BUG数字空间】,需要的请自取:https://www.writebug.com/code/0c436c04-c792-11ed-8aec-6479f0e5e323#%E5%9F%BA%E4%BA%8Ec-%E7%9A%84%E9%93%B6%E8%A1%8C%E5%AD%98%E5%82%A8%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F/#