c++简易银行卡管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北水利水电大学
North China Institute of Water Conservancy and Hydroelectric Power
课程设计
题目简易银行卡管理系统
院系信息工程学院
专业计算机科学与技术
姓名张乐民
1 题目的内容及要求
1.1 简易银行卡管理系统
(1)开户:创建一个新的账户,接受用户输入的身份证号,以及账户密码,判断用户输入的身份证号是否唯一且账户密码是否符合要求,如验证成功则为该用户生成一个唯一的帐号。
(2)存款:在用户输入正确的帐号和密码的情况下,接受用户输入的存款金额,并对该帐号的存款信息进行更新。
(3)取款:在用户输入正确的帐号和密码的情况下,接受用户输入的取款金额。取款金额不应该大于当前帐号存款金额,当取款金额不大于当前帐号存款金额时,执行取款操作,并对该帐户的存款信息进行更新。
(4)挂失:在用户输入正确的帐号和密码的情况下,接受用户挂失操作。当帐号挂失后,与该帐号相关的操作都将被禁止。
(5)销户:在用户输入正确的帐号和密码的情况下,接受用户销户。当用户销户后,该帐号将被永久删除。
(6)转帐:在用户输入正确的帐号和密码的情况下,接受用户转账操作,转帐金额不应该大于当前帐号存款金额,当转帐金额不大于当前帐号存款金额时,执行转帐操作,并对该帐户的存款信息及转帐的接受账户的存款信息进行更新。
(7)修改账户密码:在用户输入正确的帐号和密码的情况下,接受用户修改密码操作,用户输入的原密码,若用户输入的密码与原密码匹配,则接受用户输入的新密码,若用户两个输入的密码相同,则修改账户密码,并对数据文件进行更新操作。
(8) 查看余额:在用户输入正确的帐号和密码的情况下,接受用户查看余额操作,该模块只涉及数据查询,并不涉及数据文件更新操作。
(9)查看用户交易历史:在用户输入正确的帐号和密码的情况下,接受用户查看用户交易历史操作,系统将显示当前账户的最近的存、取款操作记录,该模块只涉及数据查询,并不涉及数据文件更新操作。
2 小组成员分工及本人任务
实验内容共分为九个子功能,设计时采用模块化设计,每人分配三个功能,独立
完成,最后进行综合调试。
张乐民:存款取款转账
杜世豪:修改帐户密码查看余额查看用户交易历史
娄旭阳:开户挂失销户
3 需求分析
3.1 总体情况:定义结构体数组,数据成员主要有用户名、密码、交易历史、挂失标志、余额、身份证等内容,再定义公有类,在主界面上,可供用户进行开户、存取款、转账、查看余额、交易历史、挂失、销户等操作,为了实现界面的回复,定义了大量的函数调用,在控制用户的循环操作时,主要采用了while 及if else 循环。
3.2 本人任务部分:存款:用户自主实现存款功能,遇到问题时,可给予一定提示,存款之后,对数据进行更新。
取款:用户自主实现存款功能,遇到问题时,可给予一定提示,存款之后,对数据进行更新。
转账:用户自主实现转账功能,遇到问题时,可给予一定提示,转账之后,对双方账户的数据进行更新。
4 概要设计
总体数据结构为结构体数组设计,采用顺序存储方式,总体的程序设计没有涉及太过复杂的数据结构,可采用较为简单的顺序存储方式。
struct SAccount
{
int username; // 整型定义用户名
int password; // 整型定义密码
int id; // 整型定义身份证号
int money; // 整型定义余额
int lost; // 整型定义挂失
char history[1024]; //字符型定义历史
}account[40]; // 结构体数组数量最多为40 个主函数将实现检测登录的账号密码是否匹配,在登录成功之后,才会调用存款、取款、转账函数,进入相对应的界面。转账中,转账的对象
的用户名将在主函数中给出,然后调用转账函数,对用户名是否存在进行判断。定义
WhereUser函数即为找到用户位置,在转账中调用,找到转账对象的位置,对其的余额进行计算。
5 详细设计
5.1 类型定义
均在程序定义了整型常量与字符串型变量
5.2 算法描述
(1)存款:输入界面,对存入金额的判断,符合要求时,对余额进行更新,并把新
的数据写入至文件中。
(2)取款:输入界面,对取款金额进行判断,当取款金额小于余额时,取款成功,
更新余额及交易历史。
(3)转帐:检查转账账号是否存在,存在时,当转账金额小于余额时,可进行转账,
对双方账户信息进行更新,不存在时,转账失败。就转账进行详细介绍。主函数:
case 4:
{
system("cls");
int username;
cout<<"请输入你要转入的账号:";
cin>>username;
Virement(num,username);
return 1;
}
break;
调用至void Vireme nt(i nt nu m,i nt user name)中,使用if(CheckUser name(user name)) else 语句对输入的帐号进行判断,帐号存在时,输入转账金额,当转账金额小于
账户余额时,操作成功,找到转账对象的位置,对双方余额进行计算:
int n = WhereUser(username);
account[num].money -= a; account[n].money += a;
然后定义字符串型变量:
char str1[10];
char str2[1024];
char str3[1024];
strcpy(str2,account[num].history);
itoa(a,str1,10);
wspri ntf(str3,"%s 取出%s 元”,str2,str1);
strcpy(account[num].history,str3);
UpdateAllfile(account);
使用strcpy 字符串复制函数,将str1,str2 的数值赋给str3, 将str3 的值赋给account[num].history 交易历史,然后更新所有数据到文件,每次操作,如存取款,都必须对余额进行计算,同时更新交易历史。
6 源代码:
#include
#include
#include
#include
#include
#include
#define MAX 1024
struct SAccount
{
int username;
int password;