当前位置:文档之家› c++简易银行卡管理系统

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

华北水利水电大学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 <stdio.h>#include <iostream.h>#include <string.h>#include <fstream.h>#include <stdlib.h>#include <windows.h>#define MAX 1024struct SAccount{int username;int password;int id;int money;int lost;char history[1024];}account[40];class CAccount{public:int user name;/账号 int password;//密码 int id;//身份证int mon ey;〃 余额 in t lost;//挂失标志char* history;// 历史int OpenAccount(int id,int password);//开户 (返回一个账号)bool Checkld(int id,SAccount sa[]);〃检查是否存在 IDbool CheckUsername(int username){int count = GetCount();Readfile(account,count);for(int i=0;i<count;i++){if(username==account[i].username) return true;};username ************************ 存在 true找到用户位置检查账号密码是否匹配******************************* bool CheckPassword(intusername,int password){int count=GetCount();Readfile(account,count);for(int i=0;i<count;i++){if(username==account[i].username&&password==account[i].password)return true;} return false;}11************************************ ***************************************** int WhereUser(intusername){int count=GetCount();Readfile(account,count);for(int i=0;i<count;i++){if(username==account[i].username) return i;}*************************************************************************************************************************return false;void SaveMo ney(i nt num)//存款{int a;coutvv"请问你要存入的金额为:"<<e ndl;cin>>a;while(a<=0){cout«"输入错误,请重新输入:"<<e ndl;cin>>a;}int count = GetCount();Readfile(account,count); account[num].money=account[num].money+a; cout«"操作已成功"<<endl;cout«"您已成功存入:"<<a<<"元"<<e ndl;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);}*************************************************************************************************************** **********void GetMoney(int num){int a;cout<<"请输入款金额:"<<endl;cin>>a;while(a<=0){cout«"请重新输入取款金额:"<<e ndl;cin>>a;}int count = GetCount();Readfile(account,count);if(account[num].money<a){coutvv"对不起,你的余额不足!"<<endl;}else{account[num].money=account[num].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); // 此处改变历史记录coutvv"操作成功,请查收钞票"<<endl;***************************************************************** ********** void Vireme nt(i nt nu m,i nt user name)/转帐位置num 的账户向user name 转入{if(CheckUsername(username)){int a;coutvv"请问你要转帐的金额为:";cin>>a;while(av=0){coutvv"您输入转帐金额小于等于0"<<e ndl;coutvv"请重新输入转帐金额:";cin>>a;}int count = GetCount();Readfile(account,count);if(account[num].moneyva){cout<<"对不起,你的余额不足!"<<endl; return;}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);char str4[10];char str5[1024];char str6[1024];strcpy(str5,account[n].history); itoa(a,str4,10);wspri ntf(str6,"%s 存入%s 元",str5,str4);strcpy(account[n].history,str6);UpdateAllfile(account);coutvv"转帐成功"<<endl;}} elsecoutvv"您要转入的账号不存在,操作失败"<<e ndl;}返回选择的操作码登陆成功后的菜单界面,*************************************************************************** int LodingView(int num){int flag=0;int count = GetCount();cout<<" '***********************************************、'<<endl;cout<<" f******** 欢迎你,用户"<<account[num].username<<" ********" <<endl;cout<<" '***********************************************、'<<endl;Readfile(account,count);cout<<"**** 1:存款2:取款3:修改密码****"<<endl;cout<<"**** 4:转账5:余额6:交易历史****"<<endl;cout<<"**** 0:返回主界面****"<<endl;cout<<" '***********************************************、'<<endl;coutvv"请输入你的指令: cin>>flag;return flag;7运行结果及分析7.1测试数据:(1)王界面(2)首先进行开户,创立唯一性账号银行卡管理系统一一开户(3)登陆,进入存取款界面T F ;\Ba n kfvl anage System\Deb ug\Ba n k Man ageSyste mi.exe"「T F:\BankMdnageSy5tem\Debug\Bd nkManageSy5tem.exe''j100004[IKi—/.请输入你的指令;(5) 取款(6) 转账r;\DdriKivi!ai!dyt!,iyiLt-iri\i L7e,uuy \DdrniQividridytriybLfin.exetun# wi mPTVUv(4)存款■I i- \L^UI i i >\.i v i IJ i J<.Vi 14:兀2=W 毗醪B:®O界普乂欢迎你,用户100A04M )(-]4 )4・:3<貝旦M M M ;舅KK J( i_r»_r*u i_r輒I・.■i存入的金额为:(7) 查看余额及交易历史开户咸功存入山 丘元取出44元取岀賞元取出7777元■ MEfKilOf JOfiiM i OliMi f lf KiMi f aOf JfWJtiM M iJtiM M EJtiM M iWJf XXXHKXKX 欢迎彳尔,用户10巧004**** “存秋 3:<^ 密码**** ****4:转账 5:>§^ 6:父易历史 **** ™ 肌返回主界面 K W M MXitIMXKIWXKlIKlOtJOtIfflOflOOOOtitlOCiOtEiMlOCiMJtMaOtMiiMXl i tiKXMiKKMiK请输入你的指令:7.2测试结果:代码所执行的功能顺畅运行,余额的计算、交易历史的界面较为清晰合理,没有 错误,达到预先设想功能。

相关主题