银行储蓄管理系统.docx
《银行储蓄管理系统.docx》由会员分享,可在线阅读,更多相关《银行储蓄管理系统.docx(49页珍藏版)》请在冰豆网上搜索。
银行储蓄管理系统
银行储蓄管理系统
一、课题内容和要求
1.系统的基本功能:
(1)工作人员根据口令进入系统;口令可由管理员进行添加、修改或删除。
(2)定期存款:
可以录入新的存单信息(储户姓名,身份证编号,住址,联系电话,存款金额,存期,密码,是否自动转存),利率在存期决定后自动得到。
存单的编号系统自动生成;
(3)活期存/取款:
根据客户的存折或者银行卡,执行活期存款或取款业务。
(4)定期取款:
分到期和未到期两种情况。
对于到期的存单,无需提供身份证。
未到期的存单,系统需要核对身份证。
直接根据存单编号和密码可以完成储户取款操作,自动算清应支付的利息并显示在屏幕上。
(5)系统管理员可以修改各种定期和活期利率,可以管理普通工作人员的口令。
(6)银行卡或者存单的账号查询:
根据银行卡号、存单编号、身份证或者名字,执行相应的查询操作,比如明细查询等。
2.要求:
(1)各种信息都保存在相应的文件中;
(2)界面友好,可操作性强。
(3)变量、函数命名符合规范。
(4)注释详细:
每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。
二、需求分析
随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银行客户的需要。
现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务:
同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。
近几年来,各商业银行加快了与社会各业的合作,利用自身的网点优势和业务特点,为其提供各种高效、快捷的代收代付业务,也就是中间代理业务,目前以与广大人民群众生活密切相关的各项缴费业务如水电费、电话费、手机费等代收业务为主,这些业务开展方式多种多样,但一般都离不开计算机的高效管理支持。
随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行的电子化水平和相应的管理水平提出了更高的要求。
如何利用电子化的手段构建一个高效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。
支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大,响应时间长。
特别是银行每天要处理大量的存取款事件,做好存取款是银行工作重要的环节,然而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的软件系统来实现快速、有效、准确、安全的处理银行事物。
本系统分为多个模块,每个模块有自己的作用,首先进入的是选择登陆的
界面,使用choose1函数实现,其中包括管理员的登陆和工作人员的登陆两种,根据进入的人员的不同选择相应的登陆形式。
管理员在第一次登录时要创建自己的账号和密码,并要确认密码,此功能通过admin函数实现,创建后就开始登陆,相应的账号和密码保存在admin.txt文件中。
登陆后可以实现管理账号、修改定期利率、修改活期利率的功能,分别在choose2函数,changeprate函数,changecrate函数实现。
管理账号可以管理管理员自己的账号,在changeadmin函数中实现对自己账号及密码的修改。
也可以管理工作人员的账号,实现对账号的添加、修改,删除、查询等操作,在choose3中实现相应的选择,并在readworker函数、addworker函数、modworker函数delworker函数中实现查询、添加、修改删除等操作。
在选择利率时,活期利率和定期利率,先输入在rate.txt文件中,有管理员可以输入。
工作人员登陆时必须验证账号和密码,在worker函数中实现相应的功能,登陆后选择用户的登陆和注册信息,没有注册的用户必须先注册一个账号,记住自己的密码,在zhuce函数中实现用户的注册,并事先创建好一个文件user.txt文件中,实现用户登录,然后输入账号和密码,并判断登陆是否正确。
登陆后选择要进行的方式,包括cunkuan和huoqi分别表示定期存取款和活期存取款。
在cunkuan函数中有DQcunkuan和DQqukuan两个函数的选择,分别进行相应的操作。
定期存款要输入姓名、身份证号、联系电话、地址、金额、存期(年)、以及是否自动转存等信息,利率自动显示。
进行下一步操作。
当进行DGqukuan函数时可以实现,可以取款。
用gettime函数得到当前时间作为存单编号信息。
用calcdate函数计算活期利率。
在huoqi函数中选择是活期存款还是活期取款。
定期取款未到期要输入身份证信息。
三、概要设计
程序的工作流程:
1、初始时登陆界面:
2、管理员登陆界面:
3、管理员管理操作:
4、工作人员登陆界面:
5、接上图:
6、活期存取款
7、定期存取款:
1、管理员修改自己账号和密码的流程
初始时账号和密码已经存在!
2、用户登录函数的实现
3、管理员修改工作人员信息
4、用户定期存款函数流程
四、源程序代码
#include
#include
#include
#include
#include
voidchoose1();
voidadmin1();
voidchoose2();
voidchoose3();
voidchoose4();
voidzhuce();
voiddenglu();
voidcunkuan();
voidDQcunkuan();
voidDQqukuan();
voidhuoqi();
voidgetrate();
voidHQcunkuan();
voidHQqukuan();
voidchangeprate();
voidchangecrate();
doublegettime();
intcalcdate(doublea,doubleb);
intcalcpr(doubleintime,char*id,doublej);
intcalccr(doubleintime);
voidadmin();
voidchangeadmin();
voidreadworker();
voidaddworker();
voidmodworker();
voiddelworker();
voidworker();
voidchaxun();
voidreadcd();
charname[20];
charpw[20];
charad1[50];
charad2[50];
charad3[50];
doubleprate;
doublecrate;
voidchoose1()/*选择登陆形式*/
{
inti;
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");
printf("●●●●●●●●●●●●欢迎进入,选择登陆的形式:
●●●●●●●●●●●●●●●");
printf("◇◇1、管理员登录◇◇\n");
printf("△△2、工作人员登录△△\n");
printf("▲▲3、退出系统▲▲\n");
printf("\n");
printf("请输入选择的数字:
");
scanf("%d",&i);
switch(i)
{
case1:
admin();break;
case2:
worker();break;
case3:
exit(0);break;
default:
{
printf("输入错误,请重新选择\n");
choose1();break;
}
}
}
voidadmin1()/*管理员操作函数*/
{
inti;
printf("欢迎光临,请输入要进行的项目:
\n");
printf("1、管理账号\n");
printf("2、修改定期利率\n");
printf("3、修改活期利率\n");
printf("4、返回\n");
printf("请选择:
");
scanf("%d",&i);
switch(i)
{
case1:
choose2();break;
case2:
changeprate();admin1();break;
case3:
changecrate();admin1();break;
case4:
choose1();break;
default:
{
printf("输入错误,请重新选择\n");
admin1();break;
}
}
}
voidchoose2()/*选择管理的类型*/
{
inti;
printf("管理账号界面:
\n");
printf("1、管理员账号\n");
printf("2、管理工作人员帐号\n");
printf("3、返回\n");
printf("");
scanf("%d",&i);
switch(i)
{
case1:
changeadmin();break;
case2:
choose3();break;
case3:
admin1();break;
default:
{
printf("输入错误,请重新选择\n");
choose1();break;
}
}
}
voidchoose3()/*选择管理的方式*/
{
inti;
printf("请输入要管理的方式:
\n");
printf("1、查询\n");
printf("2、添加\n");
printf("3、修改\n");
printf("4、删除\n");
printf("5、返回\n");
scanf("%d",&i);
switch(i)
{
case1:
{readworker();choose3();break;}
case2:
{addworker();choose3();break;}
case3:
{modworker();choose3();break;}
case4:
{delworker();choose3();break;}
case5:
choose2();break;
default:
{printf("输入错误,请重新选择\n");
choose3();break;}
}
}
voidchoose4()/*用户选择登录或注册*/
{
inti;
printf("用户请选择:
\n");
printf("1、用户注册\n");
printf("2、用户登录\n");
printf("3、返回\n");
scanf("%d",&i);
switch(i)
{
case1:
zhuce();choose4();break;
case2:
denglu();break;
case3:
choose1();break;
default:
{
printf("输入错误,请重新选择\n");
choose4();break;
}
}
}
voidzhuce()/*用户注册函数的实现*/
{
chars1[20],s2[20],s5[20];
chara[256],*a1;
intk=0;
FILE*fp;
fp=fopen("user.txt","w");
if(!
fp)
{
printf("filecannotbeopened!
");
exit
(1);
}
printf("输入账号:
\n");
scanf("%s",&s1);
while(fgets(a,256,fp)!
=NULL)
{
a1=strtok(a,"\n");
if(strcmp(s1,a1)==0)
{
printf("账号已存在!
\n");
printf("重新输入账号:
\n");
scanf("%s",&s1);
rewind(fp);
k++;
}
}
if(k!
=0)
printf("账号申请成功!
\n");
printf("请输入您的密码:
\n");
scanf("%s",&s2);
printf("请确认密码:
\n");
scanf("%s",&s5);
if(strcmp(s2,s5))
{
printf("密码不一致,请重新输入\n");
zhuce();
}
strcat(s1,"");
strcat(s2,"\n");
strcat(s1,s2);
fputs(s1,fp);
printf("注册成功!
\n");
fclose(fp);
denglu();
}
voiddenglu()/*用户登录函数实现*/
{
intk=0;
inti;
FILE*fp;
chars[50],*s1,*s2,*s3;
charch1[50],ch2[50];
fp=fopen("user.txt","r");
printf("用户登录界面:
\n");
printf("请输入您的账号:
\n");
scanf("%s",&ch1);
printf("请输入您的密码:
\n");
scanf("%s",&ch2);
strcpy(name,ch1);
strcpy(pw,ch2);
while(fgets(s,256,fp)!
=NULL)
{
s3=strtok(s,"\n");
s1=s3;
s3=strtok(NULL,"\n");
s2=s3;
s3=strtok(NULL,"\n");
if(strcmp(s1,name)==0&&strcmp(s2,pw)==0)
{
k=1;
break;
}
}
if(k==1)
{
printf("登陆成功!
\n");
printf("选择类型:
\n");
printf("1、定期\n");
printf("2、活期\n");
scanf("%d",&i);
switch(i)
{
case1:
cunkuan();break;
case2:
huoqi();break;
defaut:
denglu();break;
}
}
if(k==0)
{
printf("登录失败!
\n");
choose4();
}
fclose(fp);
}
voidcunkuan()/*定期存取款的选择*/
{
inti;
printf("请输入存款类型:
\n");
printf("1、定期存款\n");
printf("2、定期取款\n");
printf("3、查询\n");
printf("4、返回\n");
scanf("%d",&i);
switch(i)
{
case1:
DQcunkuan();cunkuan();break;
case2:
DQqukuan();cunkuan();break;
case3:
chaxun();cunkuan();break;
case4:
choose4();break;
default:
{
printf("输入错误,请重新选择\n");
cunkuan();break;
}
}
}
voidDQcunkuan()/*定期存款代码的实现*/
{
FILE*fp;
chars1[20],s2[20],s3[20],s4[20],s8[20];
chara[256],*a1,*a2,*a3;
ints5,s6;
doubles,s7;
fp=fopen("period.txt","r");
while(fgets(a,256,fp)!
=NULL)
{
a3=strtok(a,"\n");
a1=a3;
a3=strtok(NULL,"\n");
a2=a3;
if(strcmp(a1,name)==0&&strcmp(a2,pw)==0)
{
printf("存款已存在,不能重复存入!
\n");
cunkuan();
exit(0);
}
}
fp=fopen("period.txt","a+");
fputs(name,fp);
fprintf(fp,"");
fputs(pw,fp);
fprintf(fp,"");
s=gettime();
fprintf(fp,"%.0lf",s);
fprintf(fp,"");
printf("输入姓名:
\n");
scanf("%s",&s1);
fputs(s1,fp);
fprintf(fp,"");
printf("输入身份证号:
\n");
scanf("%s",&s2);
fputs(s2,fp);
fprintf(fp,"");
printf("输入联系电话:
\n");
scanf("%s",&s3);
fputs(s3,fp);
fprintf(fp,"");
printf("输入地址:
\n");
scanf("%s",&s4);
fputs(s4,fp);
fprintf(fp,"");
printf("输入金额:
\n");
scanf("%d",&s5);
fprintf(fp,"%d",s5);
fprintf(fp,"");
printf("输入存期(年):
\n");
scanf("%d",&s6);
fprintf(fp,"%d",s6);
fprintf(fp,"");
getrate();
s7=s5*s6*prate;
printf("利息:
%.2lf\n",s7);
fprintf(fp,"%.2lf",s7);
fprintf(fp,"");
printf("是否自动转存?
(y/n)\n");
scanf("%s",&s8);
fputs(s8,fp);
fprintf(fp,"\n");
printf("存款成功!
\n");
fclose(fp);
}
voidDQqukuan()/*定期取款的代码实现*/
{
FILE*fp;
inti=0,k=0,n=0,d,m=0;
doubleintime,inmoney,j;
char*s1,*s2,*s3,id[20]="\0",s[256],s4[256]="\0";
fp=fopen("period.txt","r+");
if(fp==NULL)
{
printf("还没有一个人申请帐号.\n");
printf("输入任何键返回菜单......\n");
getch();
zhuce();
}
while(fgets(s,256,fp)!
=NULL)
{
s3=strtok(s,"");
s1=s3;
s3=strtok(NULL,"");
s2=s3;
s3=strtok(NULL,"");
m++;
if(strcmp(s1,name)==0&&strcmp(s2,pw)==0)
{
k=1;
n=m;
}
}
if(k==1)
{
printf("编号姓名身份证电话地址金额存期利息是否转存\n");
intime=atof(s3);
while(s3!
=NULL)
{
i++;
if(i==6)inmoney=atof(s3);
if(i==3)strcat(id,s3);
if(i==7)j=atof(s3);
printf("%s",s3);
s3=strtok(NULL,"");
}
printf("\n");
d=calcpr(intime,id,j);
getrate();
if(d>=0)
{
printf("本息共%.2lf\n",inmoney+inmoney*d*crate);
rewind(fp);
for(i=0;i{
fgets(s,256,fp);
if(i==n-1)continue;
strcat(s4,s);
}
fp=fopen("period.txt","w");
fputs(s4,fp);
printf("取款成功!
\n");
fclose(fp);
}
if(d==-1)cunkuan();
if(d==-2)
{
printf("本息共%.2lf\n",inmoney+inmoney*j*prate);
rewind(fp);
for(i=0;i{
fgets(s,256,fp);
if(i==n-1)continue;
strcat(s4,s);
}
fp=fopen("period.txt","w");
fputs(s4,fp);
printf("取款成功!
\n");
fclose(fp);
}
}
if(k==0)
{
printf("无存款信息!
\n");
cunkuan();
}
}
voidhuoqi()/*活期存取款代码实现*/
{
inti;
printf("请输入选择的类型:
\n");
printf("1、活期存款\n");
printf("2、活期取款\n");
printf("3、查询\n");
printf("4、返回\n");
scanf("%d",&i);
switch(i)
{
case1:
HQcunkuan();huoqi();break;
case2:
HQqukuan(