c++简易银行卡管理系统Word文档格式.docx
《c++简易银行卡管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《c++简易银行卡管理系统Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
在用户输入正确的帐号和密码的情况下,接受用户转账操作,转帐金额不应该大于当前帐号存款金额,当转帐金额不大于当前帐号存款金额时,执行转帐操作,并对该帐户的存款信息及转帐的接受账户的存款信息进行更新。
(7)修改账户密码:
在用户输入正确的帐号和密码的情况下,接受用户修改密码操作,用户输入的原密码,若用户输入的密码与原密码匹配,则接受用户输入的新密码,若用户两个输入的密码相同,则修改账户密码,并对数据文件进行更新操作。
(8)查看余额:
在用户输入正确的帐号和密码的情况下,接受用户查看余额操作,该模块只涉及数据查询,并不涉及数据文件更新操作。
(9)查看用户交易历史:
在用户输入正确的帐号和密码的情况下,接受用户查看用户交易历史操作,系统将显示当前账户的最近的存、取款操作记录,该模块只涉及数据查询,并不涉及数据文件更新操作。
2小组成员分工及本人任务
实验容共分为九个子功能,设计时采用模块化设计,每人分配三个功能,独立完成,最后进行综合调试。
乐民:
存款取款转账
杜世豪:
修改帐户密码查看余额查看用户交易历史
娄旭阳:
开户挂失销户
3需求分析
3.1总体情况:
定义结构体数组,数据成员主要有用户名、密码、交易历史、挂失标志、余额、身份证等容,再定义公有类,在主界面上,可供用户进行开户、存取款、转账、查看余额、交易历史、挂失、销户等操作,为了实现界面的回复,定义了大量的函数调用,在控制用户的循环操作时,主要采用了while及ifelse循环。
3.2本人任务部分:
存款:
用户自主实现存款功能,遇到问题时,可给予一定提示,存款之后,对数据进行更新。
取款:
转账:
用户自主实现转账功能,遇到问题时,可给予一定提示,转账之后,对双账户的数据进行更新。
4概要设计
总体数据结构为结构体数组设计,采用顺序存储式,总体的程序设计没有涉及太过复杂的数据结构,可采用较为简单的顺序存储式。
structSAccount
{
intusername;
//整型定义用户名
intpassword;
//整型定义密码
intid;
//整型定义身份证号
intmoney;
//整型定义余额
intlost;
//整型定义挂失
charhistory[1024];
//字符型定义历史
}account[40];
//结构体数组数量最多为40个
主函数将实现检测登录的账号密码是否匹配,在登录成功之后,才会调用存款、取款、转账函数,进入相对应的界面。
转账中,转账的对象的用户名将在主函数中给出,然后调用转账函数,对用户名是否存在进行判断。
定义WhereUser函数即为找到用户位置,在转账中调用,找到转账对象的位置,对其的余额进行计算。
5详细设计
5.1类型定义
均在程序定义了整型常量与字符串型变量
5.2算法描述
(1)存款:
输入界面,对存入金额的判断,符合要求时,对余额进行更新,并把新的数据写入至文件中。
(2)取款:
输入界面,对取款金额进行判断,当取款金额小于余额时,取款成功,更新余额及交易历史。
(3)转帐:
检查转账账号是否存在,存在时,当转账金额小于余额时,可进行转账,对双账户信息进行更新,不存在时,转账失败。
就转账进行详细介绍。
主函数:
case4:
{
system("
cls"
);
intusername;
cout<
<
"
请输入你要转入的账号:
;
cin>
>
username;
Virement(num,username);
return1;
}
break;
调用至voidVirement(intnum,intusername)中,使用if(CheckUsername(username))else语句对输入的帐号进行判断,帐号存在时,输入转账金额,当转账金额小于账户余额时,操作成功,找到转账对象的位置,对双余额进行计算:
intn=WhereUser(username);
account[num].money-=a;
account[n].money+=a;
然后定义字符串型变量:
charstr1[10];
charstr2[1024];
charstr3[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<
stdio.h>
iostream.h>
string.h>
fstream.h>
stdlib.h>
windows.h>
#defineMAX1024
intpassword;
intid;
intlost;
charhistory[1024];
classCAccount
public:
//账号
//密码
//身份证
//余额
//挂失标志
char*history;
//历史
intOpenAccount(intid,intpassword);
//开户(返回一个账号)
boolCheckId(intid,SAccountsa[]);
//检查是否存在ID
};
//****************************************检查username************************存在true
boolCheckUsername(intusername)
intcount=GetCount();
Readfile(account,count);
for(inti=0;
i<
count;
i++)
{
if(username==account[i].username)
returntrue;
}
returnfalse;
}
//**************************************检查账号密码是否匹配*******************************
boolCheckPassword(intusername,intpassword)
intcount=GetCount();
if(username==account[i].username&
&
password==account[i].password)
//************************************找到用户位置*****************************************
intWhereUser(intusername)
returni;
//***********************************************存款***************************************************************************
voidSaveMoney(intnum)//存款
inta;
cout<
请问你要存入的金额为:
endl;
cin>
a;
while(a<
=0)
cout<
输入错误,请重新输入:
cin>
account[num].money=account[num].money+a;
操作已成功"
您已成功存入:
a<
元"
charstr1[10];
charstr2[1024];
charstr3[1024];
strcpy(str2,account[num].history);
itoa(a,str1,10);
wsprintf(str3,"
%s存入%s元"
strcpy(account[num].history,str3);
UpdateAllfile(account);
//***********************************************取款***************************************************************************
voidGetMoney(intnum)
请输入款金额:
请重新输入取款金额:
if(account[num].money<
a)
对不起,你的余额不足!
else
account[num].money=account[num].money-a;
charstr1[10];
charstr2[1024];
charstr3[1024];
strcpy(str2,account[num].history);
itoa(a,str1,10);
wsprintf(str3,"
strcpy(account[num].history,str3);
UpdateAllfile(account);
//此处改变历史记录
操作成功,请查收钞票"
//***********************************************转账***************************************************************************
voidVirement(intnum,intusername)//转帐位置num的账户向username转入
if(CheckUsername(username))
{
inta;
请问你要转帐的金额为:
while(a<
{
cout<
您输入转帐金额小于等于0"
请重新输入转帐金额:
cin>
}
intcount=GetCount();
Readfile(account,count);
if(account[num].money<
对不起,你的余额不足!
return;
else
intn=WhereUser(username);
account[num].money-=a;
account[n].money+=a;
charstr4[10];
charstr5[1024];
charstr6[1024];
strcpy(str5,account[n].history);
itoa(a,str4,10);
wsprintf(str6,"
str5,str4);
strcpy(account[n].history,str6);
UpdateAllfile(account);
转帐成功"
您要转入的账号不存在,操作失败"
//***********************************************登陆成功后的菜单界面,返回选择的操作码***************************************************************************
intLodingView(intnum)
intflag=0;
***********************************************"
********欢迎你,用户"
account[num].username<
********"
****1:
存款2:
取款3:
修改密码****"
****4:
转账5:
余额6:
交易历史****"
****0:
返回主界面****"
请输入你的指令:
flag;
returnflag;
7运行结果及分析
7.1测试数据:
(1)主界面
(2)首先进行开户,创立唯一性账号。
(3)登陆,进入存取款界面。
(4)存款
(5)取款
(6)转账
(7)查看余额及交易历史
7.2测试结果:
代码所执行的功能顺畅运行,余额的计算、交易历史的界面较为清晰合理,没有错误,达到预先设想功能。
7.3时间复杂度分析:
时间复杂度O(n)
7.4改进思想:
本次程序已经是在大家讨论并经过多次修改的程序,但是确实存在着多不足。
其一:
希望可以就交易历史的函数进行修改,让其交易历史的记录规化,程序中的交易历史记录是无序的,希望可以就存入的,取出的,转账的按顺序进行显示;
其二:
对交易的时间进行编写,在查看交易历史时,可以看到每次交易的准确时间。
8课程设计总结
本次课程设计是一次谨的实践操作,在设计过程中,根据“课程设计报告容要求”,对组员进行了详细的分工,对设计流程也有详细的规划,需求分析,概要设计以及详细设计,都在与组员的讨论中,有了大概的思路,刚开始就懂得了团队合作的重要性。
在具体的源代码设计中,用到最多的便是之前的C、C++课本,意识到课本中多的知识,还没有学透,在初级的代码设计中,用到最多还是扎实的基础知识。
我分配的任务是三大功能模块,实现存款,取款,转账功能,代码的输入界面较为简单,但是余额的计算与交易历史的保存比较复杂,为了令界面风格更为友好,采用了结构体数组的类型和顺序存储的式,余额的计算最重要的是找到本账户的位置,然后对本账户的余额进行计算,所以在定义函数时,定义了voidGetMoney(intnum),通过num找到本账户的位置account[num],然后对余额进行计算。
交易历史的保存,是将之前的交易历史调出,并把这次操作的数据与之前交易历史合并,把得到的新的交易历史更新到文件UpdateAllfile(account)中,最后将其输出即可,之前我想到的是采用fotream中的open()和close()函数,在每次操作之后,便将其写出,但考虑到这样会出现大量重复的代码,还需要将之前定义的函数重新定义,便打消了这个想法,跟组员的讨论过程中,决定使用现在的程序,这样将数据输出时较为简单。
在两个星期的实践过程中,加深对数据结构知识的理解,同时懂得了在解决实际问题时,只有理论知识是远远不够的,必须在平时加强动手能力,编程是一种重复性与创新性的工作,会出现大量重复代码,关键处又必须能够有闪光点,在程序大致框架的筹建中,要尽可能的想到以后会出现的问题,如果考虑不够全面,那么在编程中,就会出现多问题。
程序的编写会让我们变得更加谨细致,在以后的学习中,我们要发扬这个特性,让它也成为我们所编写程序的特点。
总的来说,课程设计让我有所进步,每一行代码都是需要我们认真思考的,一个符号的错误程序就无法运行,意味着在生活一点小小的瑕疵可能就令我们与成功无缘,生而知之有限,学而知之无涯,希望以后可以设计更加优秀的代码。