C++课程设计银行管理系统.docx
《C++课程设计银行管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计银行管理系统.docx(33页珍藏版)》请在冰点文库上搜索。
C++课程设计银行管理系统
C++课程设计__银行管理系统
C++课程设计报告
设计题目:
银行管理系统
学生姓名:
XXXXXX
班级:
XXXXXXXXXXXXXX
指导教师:
XXX
评分
2010年12月20日
21.需求与功能分析
2.系统总体框架4
3.模块设计与分析5
类的设计与分析74.
5.特色算法分析9
6.功能测试10
7.存在的不足与对策15
8.程序源代码17
-1-
一、需求与功能分析
随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银行客户的需要。
现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务:
同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。
近几年来,各商业银行加快了与社会各业的合作,利用自身的网点优势和业务特点,为其提供各种高效、快捷的代收代付业务,也就是中间代理业务,目前以与广大人民群众生活密切相关的各项缴费业务如水电费、电话费、手机费等代收业务为主,这些业务开展方式多种多样,但一般都离不开计算机的高效管理支持。
随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行的电子化水平和相应的管理水平提出了更高的要求。
如何利用电子化的手段构建一个高效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。
支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大,响应时间长。
特别是银行每天要处理大量的存取款事件,做好存取款是银行工作重要的环节,然而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的软件系统来实现快速、有效、准确、安全的处理银行事物。
主要用于银行的储蓄卡管理系统,它可以帮助我们有效、准确、并且高效实现的完成存取事件。
此系统操作方便效率、安全性高,只要客户开户并设定好密码就可以轻松的实现存取款。
-2-
系统实现的主要有储蓄卡开户管理、存取款管理、用户查询历史数据显示、注销等功能。
储蓄卡开户管理模块:
卡号、姓名、开户金额、身份证号、地址、电话、密码、确认密码和保存组成。
(开户金额必须是数字,密码和确认密码必须一样是六位数字)
*查询历史数据模块:
存款记录、取款记录、余额显示等。
*注销模块:
一旦注销该卡号就不存在且余额提醒你取出。
通过该银行账户管理系统地运行,使办公人员可以轻松快捷的完成对账户管理的任务,提高账目管理效率,使银行的账目管理工作系统化、规范化、自动
该银行帐目管理信息系统,优点是设计过程思路清晰、模块划分简洁,设计各阶段分工明确。
经过实践证明,该划分是合理的,极大得提高了本系统的实现。
二、系统总体框架
银行管理系统
登录界面
注册开户主界页面注销退出
存取余历注
钱款额史销
页页页记页
面面面录面
-1图1
三、模块设计与分析
-3-
储蓄卡开户管理模块:
3.1登录页面
输入卡号和密码,根据用户输入的卡号和密码,到后台文件查询,若正确则登录成功,并保存卡好信息已备后用。
若卡号存在和密码不匹配或无该卡号已经注销,提示该卡号已存在或已注销,保持界面三次不变等待用户的重新输入。
3.2主界面页面
主要导航栏有:
欢迎使用储蓄卡管理(存款、取款、查询余额、查询历史记录、注销退出)
3.3储蓄卡开户页面
提供开户界面,由用户输入新储蓄卡的所有信息,将该信息保存到文件中,并将开户金额作为该卡的第一次存款记录存人文件。
3.4存钱页面
从登录界面得到卡号,并提供数据输入界面,等待用户的输入存款金额。
从后台数据库中找到该用户余额记录,修改余额,并将该存款事件的相应信息写人数据库,同时将存钱的金额显示在页面上。
3.5取款页面
从登录界面得到卡号,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上,。
3.6查询余额页面
从登录界面得到卡好,把该卡上的余额显示到界面中。
3.7查询历史记录页面
从登录界面得到卡号,把该卡的所有存款取款信息查询出来,并显示在页面上。
3.8注销页面
从关闭文件,状态为注销,最后关闭整个系统。
列举取款模块进行分析:
voidFunction:
:
Drawing(User&u){
system("cls");
-4-
cout<<"\n\n\n\t\t*********************************************\n"<dl;
cout<<"\t\t请输入取款金额:
";
stringstr1("\n\t\t现取RMB钞-");
stringstr2;
intk=0;
while(k<=3)
{
cin>>SaveAndDrawMoney;
u.Fmoney-=SaveAndDrawMoney;
if(u.Fmoney>=0)
{
system("cls");
cout<<"\n\n\n\t\t正在出炒,请稍等~"<strstreamss;
ss<ss>>str2;
stringfrist="Record"+str2+".txt";
constchar*RecordFile=frist.c_str();
ofstreamoutfile(RecordFile,ios:
:
out|ios:
:
app);
outfile<outfile.close();
outfile.clear();
break;
}
else
{
k++;
if(k>=3)
{
system("cls");
cerr<<"\n\n\n\t\t很抱歉,你重复输入错误多次"<<<"\n\t\t正在退卡中……"<exit(0);
}
system("cls");
u.Fmoney+=SaveAndDrawMoney;
cerr<<"\n\n\n\t\t对不起,你输入的金额超出有效金额。
"<<<"\n\t\t请重新输入:
";
}
}
cout<<"\n\n\t\t操作成功,单击任何键返回主菜单~";
getch();
}
-5-
在取款页面中,输入取款金额并对取款金额与存款余额进行比较,如果三次都超过的话就输出:
很抱歉,你重复输入错误多次,在退卡中……,如果取款金额小于存款余额的话就执行,并保存记录。
四、类的设计与分析
1(User类
classUser主要制定用户的成员数据,并进行登录与保存功能:
画出User类的类图
相关代码:
classUser
{
public:
voidget(User&);
friendclassFunction;
ostream&print(ostream&os);
//friendostream&operator<<(ostream&o,constUser&u);
friendistream&operator>>(istream&i,User&u);
voidPassWord();
boolLogin(User&);
voidSaveFile(User&);
vectorStrFunction;
User(){}
User(intA,stringN,intF,stringI,stringAd,int
-6-
T):
Accout(A),Name(N),Fmoney(F),ID(I),Address(Ad),Telephone(T){}
intAccout;
stringName;
intFmoney;
stringID;
stringAddress;
intTelephone;
charPword1[9];
charPword2[9];
};
表1User类说明表名称属性说明Accout数据成员用户账户数据Name数据成员用户姓名Fmoney数据成员用户首次金额ID数据成员用户身份证号Address数据成员用户地址Telephone数据成员用户电话Pword1数据成员用户密码Pword2数据成员用户再一次确认密码Get()构造函数默认构造函数Login()成员方法登录方法Password()成员方法密码验证SaveFile()成员方法保存数据
2(Function类
Function类主要实现用户的各种功能:
画出User类的类图:
相关代码:
classFunction
{
public:
-7-
voidSaving(User&);
voidDrawing(User&);
voidBalance(User&);
voidRecord(User&);private:
intSaveAndDrawMoney;};
表1User类说明表
名称属性说明SaveAndDrawMoney数据成员用户存入与取出金额Saving()成员方法实现存款功能与保存数据Drawing()成员方法实现取款功能与保存数据Balance()成员方法查询余额功能Record()成员方法查询历史记录
五、特色算法分析
1.User类中的PassWord方法
功能:
输入密码并进行确认,如果密码确认三次失败,则退出系统。
流程图:
否
While(n<3)
是
输入:
password1Password2
否
strcmp(Pwor
d1,Pword2)
1
是
代码:
-8-
voidUser:
:
PassWord(){
intnum=0;
while(num<3)
{
cout<<"\n\t\t请输入位储蓄密码:
";
for(inti=0;i<8;i++)
{Pword1[i]=getch();cout<<"*";}
Pword1[8]='\0';
cout<cout<<"\n\t\t请再一次确认密码:
";
for(i=0;i<8;i++)
{Pword2[i]=getch();cout<<"*";}
cout<Pword2[8]='\0';
if(strcmp(Pword1,Pword2)==0)
{
cout<<"\n\n\t\t密码确认成功,单击任何键进入主菜单";
getch();
return;
}
else
{
num++;
cout<<"\n\t\t你输入的密码错误,请重新输入~\n"<}
if(num==3)
{
system("cls");
cerr<<"\n\n\n\t\t对不起,你三次输入不正确\n"<<<"\t\t感谢你的使用,再见~"<exit(0);
}
}
}
六、功能测试
6.1首页:
图6-1:
-9-
6.2储蓄卡开户页面
图6-2:
6.3主界面页面
主要导航栏有:
欢迎使用储蓄卡管理(存款、取款、查询余额、查询历史记
录、注销退出)
图6-3:
-10-
6.4存钱页面
图6-4:
6.5取款页面
从登录界面得到卡号,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上。
输入取款金额:
图6-5:
当取款金额大于现有金额:
图6-6:
当取款金额小于或等于现有金额:
图6-7:
-11-
6.6查询余额页面
图6-8:
6.7查询历史记录页面
图6-9:
6.8用户信息
图6-10:
-12-
6.9注销页面
从保存数据并关闭文件,状态为注销,最后关闭整个系统。
图6-11:
图6-12:
七、存在的不足与对策
程序存在的不足之处在于程序以文件方式储存,并且每个用户信息与用户的历史记录分别用一个文件来储存,如果这样的话一个用户就需要二个文件储存信息,那么一万个用户就需要用到二万个文件保存。
这不但浪费内存而已在查找文件也会花费时间。
解决的对策是使用stl标准库或者数据库的方法进行解决,这里列举了一个用stl标准库里面用vector解决的例子:
-13-
#include
#include
#include
#include
usingnamespacestd;
classAccount
{
public:
stringaccount;//如果你要保存0001这样的格式,用string方便
doublebalance;//余额
//自己补充数据成员
friendostream&operator<<(ostream&o,constAccount&t);
friendistream&operator>>(istream&i,Account&t);
};
ostream&operator<<(ostream&o,constAccount&t)
{
o<returno;
}
istream&operator>>(istream&i,Account&t)
{
i>>t.account>>t.balance/*自己补充各个数据成员*/;
returni;
}
intmain()
{
ifstreamifs("account.txt");
vectorvacc;
vacc.assign(istream_iterator(ifs),
istream_iterator());
ifs.close();
for(vector:
:
iteratorit=vacc.begin();it!
=vacc.end();
++it)
{
if(it->account=="0002"){
it->balance+=100;//余额增加100
break;
}
}
-14-
ofstreamofs("account.txt");
copy(vacc.begin(),vacc.end(),ostream_iterator(ofs));
return0;
}
通过这个例子,我们就可以从程序中输入像
//account.txt里面的内容示例
0001104.7
0002252.1
00044299.04
0003723.2
八、程序源代码
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
classFunction;
classUser
{
public:
voidget(User&);
friendclassFunction;
ostream&print(ostream&os);
//friendostream&operator<<(ostream&o,constUser&u);
friendistream&operator>>(istream&i,User&u);
voidPassWord();
boolLogin(User&);
voidSaveFile(User&);
vectorStrFunction;
User(){}
User(intA,stringN,intF,stringI,stringAd,int
T):
Accout(A),Name(N),Fmoney(F),ID(I),Address(Ad),Telephone(T){}
intAccout;
stringName;
intFmoney;
stringID;
stringAddress;
intTelephone;
-15-
charPword1[9];
charPword2[9];
};
classFunction
{
public:
voidSaving(User&);
voidDrawing(User&);
voidBalance(User&);
voidRecord(User&);
private:
intSaveAndDrawMoney;};
voidFunction:
:
Saving(User&u){
system("cls");
\n\n\t\t*********************************************\n"<dl;
cout<<"\t\t请输入存款金额:
";
\t\t现存RMB钞+");stringstr1("\n
cin>>SaveAndDrawMoney;
u.Fmoney+=SaveAndDrawMoney;
strstreamss;
stringstr2;
ss<ss>>str2;
stringfrist="Record"+str2+".txt";
constchar*RecordFile=frist.c_str();
ofstreamoutfile(RecordFile,ios:
:
out|ios:
:
app);
outfile<outfile.close();
outfile.clear();
cout<<"\n\n\t\t操作成功,单击任何键返回主菜单~";
getch();
}
voidFunction:
:
Drawing(User&u){
system("cls");
cout<<"\n\n\n\t\t*********************************************\n"<dl;
cout<<"\t\t请输入取款金额:
";
stringstr1("\n\t\t现取RMB钞-");
-16-
stringstr2;
intk=0;
while(k<=3)
{
cin>>SaveAndDrawMoney;
u.Fmoney-=SaveAndDrawMoney;
if(u.Fmoney>=0)
{
system("cls");
cout<<"\n\n\n\t\t正在出炒,请稍等~"<strstreamss;
ss<ss>>str2;
stringfrist="Record"+str2+".txt";
constchar*RecordFile=frist.c_str();
ofstreamoutfile(RecordFile,ios:
:
out|ios:
:
app);
outfile<outfile.close();
outfile.clear();
break;
}
else
{
k++;
if(k>=3)
{
system("cls");
cerr<<"\n\n\n\t\t很抱歉,你重复输入错误多次"<<<"\n\t\t正在退卡中……"<exit(0);
}
system("cls");
u.Fmoney+=SaveAndDrawMoney;
cerr<<"\n\n\n\t\t对不起,你输入的金额超出有效金额。
"<<<"\n\t\t请重新输入:
";
}
}
cout<<"\n\n\t\t操作成功,单击任何键返回主菜单~";
getch();
}
voidFunction:
:
Balance(User&u){
system("cls");
-17-
cout<<"\n\n\n\t\t*********************************************\n"<dl;
cout<<"\t\t你当前的余额是:
";
cout<<"\t\t"<cout<<"\n\t\t*********************************************\n"<cout<<"\n\t\t操作成功,单击任何键返回主菜单~";
getch();
}
voidFunction:
:
Record(User&u){
stringstr1,str2;
system("cls");
cout<<"\n\n\n\t\t*********************************************\n"
<cout<<"\t\t摘要币种钞汇存/取款金额"<strstreamss;
ss<ss>>str2;
strin