一、课程设计目的
1. 通过课程设计加强应用C/C++语言进行程序设计的能力;
2. 学会如何分解问题并绘制程序流程图;
3. 掌握用C/C++语言进行简单的菜单设计及编程;
4. 掌握用C/C++语言进行简单的文件操作;
5. 掌握用C/C++语言进行简单的面向对象编程;
6. 了解软件开发的基本流程。
二、课程设计选题
银行前台业务办理系统
(1) 开户:增加账户信息,包括账户编号、账户密码、客户姓名、账户类型(定期或活期)、开户时间、账户余额等信息;
(2) 登录:在进行以下操作之前需登录,用户需要输入正确的账户编号和密码才可以看到操作菜单,如果账户编号和密码输入错误超过三次,系统自动退出;
(3) 修改密码:根据账户编号和原始密码修改账户密码;
(4) 查询余额:根据账户编号查询账户余额;
(5) 存款:用户输入存款金额,根据账户编号增加账户余额;
(6) 取款:用户输入取款金额,根据账户编号减少账户余额;
(7) 数据统计:对所有账户信息进行统计,显示所有的账户信息并可以按照账户编号、账户余额等进行排序;
(8) 注销账户:删除该账户所有信息并验证删除是否成功。
三、课程设计任务及要求
1. 能够认真完成老师所布置的课程设计任务;
2. 在设计中充分运用所学知识;
3. 课程设计期间按时出勤,并在课后安排适量时间来进行课程设计;
4. 针对每个选题要求实现所有基本功能(可以扩展新功能),按照规范编写高质量的C/C++程序代码并认真完成《课程设计报告》。
四、功能模块结构图及功能说明
银行前台自助服务系统从总体设计方面来看,基本的功能包括主控模块、录入模块、修改模块、删除模块、查询模块、统计模块和输出模块等,如图1所示。
主控模块 |
录入模块 |
查询模块 |
修改模块 |
删除模块 |
统计模块 |
输出模块 |
整个系统的账户信息全部存储在account.txt文件中,在该文件中,每个用户的信息占一行,分为六个部分,分别为账户编号,用户姓名,密码,余额,账户类型,创建时间。各项信息之间用空格隔开,在读取时,分别用六个变量接受一个用户的六项数据,按照用户要求处理后继续读取下一个用户的数据,示例:
图1
上图数据表示,账户编号1,用户姓名是chenxu,密码是123,余额为100,类型为1(代表是活期账户),创建时间是2011年12月13日。
主控模块:主要完成初始化工作,包括屏幕的初始化,显示欢迎界面,在用户确认后输出主菜单,根据用户输入的数字选择不同的函数完成下一步的功能,此部分模块的代码主要在mainBody.cpp文件中。
录入模块:注册新账户,主要功能由createNewAccount.h中的 createNewAccount 函数和createAccount函数实现,用户决定创建新账户后,程序开始读取文件,计算出文件中所有已有账户的编号的最大值(以防出现两个账户编号相同的情况),然后将该最大值加一后作为新账户的编号number,随后提示用户输入姓名,将其保存在字符串name中,之后让用户输入两次密码,比对两次输入的密码,若相同则存入字符串password中,若不同则提醒用户两次的密码不同并请重新输入。若以上数据均无误,则将余额money设定为0,并获取当前日期存入字符串time,将以上六个数据以ios:out | ios:app打开方式输出到account.txt文件末尾。操作完毕后,让用户选择继续创建或返回主菜单或退出系统。
查询模块(登录):查询功能实际上是登录功能的一部分,主要功能由login.h 中的函数login()完成,在用户输入账号和密码后,函数开始读取文件,每次读入六个,将name与用户输入的enterName比较,将password与用户输入的enterPassword比较,若都相同,则登录成功。若没有发现任何数据与用户输入的一致,则输出“登录失败”。登录成功后,用户可选择输出该账户的余额等信息。
修改模块:修改包括修改密码和修改余额(即存款或取款),主要函数为changePassword,deposit和withdrawals,分别在头文件changePassword.h,deposit.h,withdrawal.h
中,三个函数的基本原理相同,首先需要用户登录。若登录成功,否则提示该用户不存在或密码错误。登录成功后,定义一个ifstream对象和一个ofstream对象,前者从account.txt中读取数据,读取方式还是以六个变量读入一个用户的数据。然后通过账号检查是否是该用户的数据,若不是,则不加改动地(即按照图1的结构)输出到空白新文件account1.txt中。若读取到该用户的数据,若用户想修改密码,则改动password,若用户想取款或存款,则将
money增加或减少一定的数量,随后将修改后的数据写入account.txt中。以上操作完成后,
account1.txt成为了完整的修改后的数据库,所以将account.txt删除,将account1.txt重命名为 account.txt,则完成了修改。
删除模块:删除模块与修改模块的原理相同,唯一的区别是在找到指定账户后,不将该账户的信息输出到新文件中,则在新文件该账户的信息就不再出现。
统计模块:统计模块的功能主要由头文件statistic.h 中的函数statistic()完成。首先让用户选择是按照账户顺序排列还是按金额数量排列。若按账号顺序排列,根据在录入模块中产生账号的方式可知,文件里的数据已经按账号顺序排好了,所以只需按顺序输出,即每读入一个用户的数据就输出一次即可。若按照余额的多少进行排列,首先定义变量i,每读入一个用户的数据就将i加一,则可得出共有多少个数据,以确定数组的大小。随后建立两个数组
numberList[i] 用于存放所有账户的账号,moneyList[i]用于存放所有账户的余额,随后对moneyList进行排序,当对moneyList的元素顺序进行操作时,对numberList进行相同操作以确保两个数组内相同下标的元素属于同一个账户。排序完成后,对numberList中的元素对应的账户信息依次输出即可。最后让用户选择下一步操作。
五、菜单设计原型
主菜单样例如下:
1. Create new account 2. Login to Your account 3. Change your password 4. Check account balance 5. Deposit 6.Withdrawals 7.Statistic account information 8.Cancellation 0.Exit the system Please choose |
菜单项说明:
“1. Create new account”说明:创建一个新账户
“2. Login to Your account”说明:登录你的账户
“3. Change your password”说明:修改账户密码
“4. Check account balance”说明:查询账户余额
“5. Deposit”说明:取款
“6. Withdrawals”说明:存款
“7. Statistic account information”说明:统计账户数据
“8. Cancellation”说明:注销账户
“0. Exit the system说明:退出系统
Createnew account中的子菜单
1. Create current account 2. Create regular account 3. Return to main menu 4. Exit the system Please Choose |
“1. Createcurrent account”说明:创建一个活期账户
“2 Createregular account”说明:创建一个定期账户
“3.Return to main menu”说明:返回主菜单
“4. Exit the system”说明:退出系统
Statistic中的子菜单
1.View the order by account number 2.View the order by account balances Please choose |
“1. View theorder by account number”说明:按照账号顺序输出所有账户信息
“2. View theorder by account balances”.说明:按照余额多少输出账户信息
七、测试用例及测试报告
录入模块测试用例及测试报告:
测试用例 | 预期结果 | 实际结果 | 测试结论 |
姓名:Jack 密码:1234 账户类型:活期 | 输出“add sucess!” | 输出“add success!” | 测试通过 |
姓名:Michael 密码:123 账户类型:定期 | 输出“add sucess!” | 输出“add success!” | 测试通过 |
姓名:David 密码:12345 账户类型:活期 | 输出“add sucess!” | 输出“add success!” | 测试通过 |
修改模块测试用例及测试报告:
测试用例 | 预期结果 | 实际结果 | 测试结论 |
存款:¥100 账号:2 密码:123 | 输出“Withdrawals success! !” | 输出“Withdrawals success!
| 测试通过 |
存款:¥50 账号:1 密码:1234 | 输出“Withdrawals success!
| 输出“Withdrawals success!
| 测试通过 |
存款:¥200 账号:3 密码:12345 | 输出“Withdrawals success!
| 输出“Withdrawals success!
| 测试通过 |
删除模块测试用例及测试报告:
测试用例 | 预期结果 | 实际结果 | 测试结论 |
账号:2 密码:123 | 输出“Cancellation success! !” | 输出“Cancellation success!
| 测试通过 |
账号:1 密码:1234 | 输出“Cancellation success!
| 输出“Cancellation success!
| 测试通过 |
账号:3 密码:12345 | 输出“Cancellation success!
| 输出“Cancellation success!
| 测试通过 |
查询模块测试用例及测试报告:
测试用例 | 预期结果 | 实际结果 | 测试结论 |
账号:2 密码:123 | 输出“money:23” | 输出“money:23” | 测试通过 |
账号:1 密码:1234 | 输出“money:50” | 输出“money:50” | 测试通过 |
账号:3 密码:12345 | 输出“money:100” | 输出“money:100” | 测试通过 |
统计模块测试用例及测试报告:
测试用例 | 预期结果 | 实际结果 | 测试结论 |
选择1
| 按账号顺序输出所有账户信息 | 按账号顺序输出所有账户信息 | 测试通过 |
选择2
| 按金额大小输出所有账户信息 | 按金额大小输出所有账户信息 | 测试通过 |
八、总结及心得体会
从开始做课程设计到结束全部工作差不多有1个月的时间,在刚开始做的时候,曾经有过不知如何下手的迷茫,到了后来思路逐渐清晰起来,。整个做项目的过程中遇到很多困难,但通过去图书馆查资料,在百度和优快云上提问和在课堂上接触到的新知识解决了这些困难。其实整个做课程设计的过程就是发现和解决问题的过程,整个程序的核心在于文件的操作。在还未接触面向对象时,我通过对12章知识的学习和自己的思考,想出了打开两个文件同时操作的方法,一个文件读,一个文件写。这样达到了修改和删除数据的目的。通过一个完整程序的开发,我逐渐了解了软件开发的基本流程。在整个开发时期里,各种各样的错误困扰了我很长时间,例如两个头文件互相包含怎样防止多次编译,在还没学到书上的#ifndef指令时,在网上查找到了#pragma once的防止多次编译方法。如何对两个有关联的元素排序。还有其它的各种各样的细节,例如如何改变控制台的颜色,如何让程序变得更加人性化都是在编写过程中必须考虑的问题。我准备寒假在家完全用面向对象的方法再做一次,希望能够加深对面向对象的理解。
总之,这次的C++课程设计对我进一步学习C++有着很大的帮助,而且克服困难的过程给了我全面了解C++知识与软件开发的机会,我希望能够在以后的学习中拓展自己的视野,进一步提高自己的编程水平。
九、参考文献
1.删除与重命名文件
http://zhidao.baidu.com/question/268602388.html
2. C++中头文件相互包含的几点问题
http://blog.163.com/zdfl_001/blog/static/22135136200852764157310/
3.C++中如何清屏?
http://topic.youkuaiyun.com/t/20040329/22/2901226.html
4.C++控制输出颜色
http://wenwen.soso.com/z/q102282430.htm?ri=1001&rq=188058199&uid=0&pid=w.xg.yjj&ch=w.xg.llyjj
5. C++修改txt文件里数据
http://zhidao.baidu.com/question/94275372.html