c++简易银行卡管理系统

c++简易银行卡管理系统
c++简易银行卡管理系统

.

分类号编号

华北水利水电大学North China Institute of Water Conservancy and Hydroelectric Power 课程设计

题目简易银行卡管理系统

院系信息工程学院

专业计算机科学与技术

姓名乐民

学号201215211

指导教师帆

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 Virement(int num,int username)中,使用if(CheckUsername(username)) 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);

wsprintf(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;

int id;

int money;

int lost;

char history[1024];

}account[40];

class CAccount

{

public:

int username;//账号

int password;//密码

int id;//身份证

int money;//余额

int lost;//挂失标志

char* history;//历史

int OpenAccount(int id,int password);//开户(返回一个账号) bool CheckId(int id,SAccount sa[]);//检查是否存在ID

//****************************************检查username************************ 存在true

bool CheckUsername(int username)

{

int count = GetCount();

Readfile(account,count);

for(int i=0;i

{

if(username==account[i].username)

return true;

}

return false;

}

//**************************************检查账号密码是否匹配*******************************

bool CheckPassword(int username,int password)

{

int count=GetCount();

Readfile(account,count);

for(int i=0;i

相关主题
相关文档
最新文档