南京邮电大学程序设计银行管理系统DOC.docx

上传人:b****6 文档编号:3621271 上传时间:2022-11-24 格式:DOCX 页数:27 大小:268KB
下载 相关 举报
南京邮电大学程序设计银行管理系统DOC.docx_第1页
第1页 / 共27页
南京邮电大学程序设计银行管理系统DOC.docx_第2页
第2页 / 共27页
南京邮电大学程序设计银行管理系统DOC.docx_第3页
第3页 / 共27页
南京邮电大学程序设计银行管理系统DOC.docx_第4页
第4页 / 共27页
南京邮电大学程序设计银行管理系统DOC.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

南京邮电大学程序设计银行管理系统DOC.docx

《南京邮电大学程序设计银行管理系统DOC.docx》由会员分享,可在线阅读,更多相关《南京邮电大学程序设计银行管理系统DOC.docx(27页珍藏版)》请在冰豆网上搜索。

南京邮电大学程序设计银行管理系统DOC.docx

南京邮电大学程序设计银行管理系统DOC

程序设计报告

(2015/2016学年第1学期)

 

题目:

银行定期储蓄管理系统

 

 

专业测控技术与仪器

组长学号姓名B14050608刘晨星昱

组员学号姓名B14050629郭文超

B14050633蒋文杰

指导教师崔子冠

指导单位计算机学院软件教学中心

日期2015年9月24日

成员分工

组长(刘晨星昱)

新建存单、查询存单、修改登录密码函数编写

组员(郭文超)

取款函数编写,完成实验报告

组员(蒋文杰)

主函数编写,界面优化,程序BUG最终检查

评分细则

评分项

优秀

良好

中等

遵守机房规章制度

上机时的表现

学习态度

程序准备情况

程序设计能力

团队合作精神

课题功能实现情况

算法设计合理性

用户界面设计

报告书写认真程度

内容详实程度

文字表达熟练程度

回答问题准确度

简短评语

 

教师签名:

年月日

评分等级

B14050608刘晨星昱

B14050629郭文超

B14050633蒋文杰

备注

评分等级共五种:

优秀、良好、中等、及格、不及格

银行定期储蓄管理系统

一、课题内容和要求

银行定期储蓄管理系统可以实现定期利息计算,客户按密码取款,工作人员口令修改等功能。

具体功能如下:

(1)工作人员根据口令进入系统;

(2)可以录入新的存单信息(存单编号,储户姓名,身份证编号,住址,联系电话,

存款金额,存期,利率,密码),存单信息可以保存在文件中,利率在存期决定后自动得到;

(3)根据存单编号可以查询存单信息;

(4)根据存单编号和密码可以完成储户取款操作,自动算清应支付的利息并显示在屏

幕上。

(5)界面友好,可操作性强,输入信息符合逻辑如存款金额不为负数、不可能有非

数字的字符等;

(6)工作人员可对信息维护,如口令修改等。

二、需求分析

系统中要求工作人员有一个系统帐号,并且帐号有密码,系统的一切操作(如:

录入存单信息,信息维护等)都由工作人员执行,而不是由存储用户执行,也主要是说存储用户并不直接与系统交互,而是通过管理员与系统交互。

储户填写的新的存单信息由工作人员输入系统,存单信息包括存单编号,储户姓名,

身份证编号,住址,联系电话,存款金额,存期,利率,密码。

存单信息可以保存在文件中,利率在存期决定后自动得到;储户可以根据存单编号查询存单信息,根据存单信息和密码完成储户取款操作,自动计算利息,并显示利息。

功能如图1所示:

 

 

图1功能框架图

(1)提供可操作的主菜单:

输出5个菜单,用于显示管理人员和用户可供操作的函数选项。

根据客户输入的选项来运行不同的功能,运行不同的函数。

(2)新建存单函数:

管理人员利用函数输入存单单号,姓名,身份证,地址,手机号码,存期,取款密码,存入金额。

(3)查询存单函数:

管理人员和用户利用函数查询已存入的存单信息。

(4)取款函数:

用户利用函数,输入取款密码取出自己的存款。

(5)修改管理员登录密码函数:

管理人员利用函数重新设定管理员登陆密码。

三、概要设计

1主要结构体

structbill//账单

{

intnumb;//账单编号

charname[32];//用户姓名

charid[19];//身份证号

charadd[20];//住址

chartel[12];//电话

doublemoney;//存款金额

intyear;//存期

doublelilv;//利率

intkey;//密码

};

2主要函数流程图

(1)主函数:

用于从文本中载入管理员登录密码,识别管理员输入密码,正确则载入主界面,错误则重输。

主界面包含5个选项,分别为新建存单,查询存单,取款,修改管理员密码,退出。

等待用户选择进入下一界面。

流程图如图2所示:

 

图2主函数

(2)新建存单函数:

管理员输入密码成功后,选择新建存单,输入存单单号,姓名,身份证,地址,手机号码,存期,取款密码,存入金额,输入成功后显示存入成功。

流程图如图3所示:

 

 

 

图3新建存单信息

(3)查询存单函数:

管理员输入密码成功后,选择查询存单信息,输入存单信息正确,主界面显示存单单号,姓名,身份证,地址,手机号码,,存入金额,存期,利率。

输入存单信息错误,提示重新输入。

流程图如图4所示:

 

图4查询存单信息

(4)取款函数:

管理员输入密码成功后,选择取款,用户输入存单单号,单号正确,主界面显示存单单号,存入金额,利率,存期,应得利息,单号错误重新输入;继续输入密码,密码正确,取款成功,密码错误,重新输入,错误3次,系统终止取款业务,返回主界面。

流程图如图5所示:

 

 

 

图5取款函数

(5)修改管理员登录密码函数,:

管理员输入密码成功后,选择修改管理员登录密码,输入原密码,密码正确,继续输入新密码,再次输入新密码,修改成功。

若原密码输错3次,则终止修改密码操作,返回主界面。

流程图如图6所示:

 

 

 

图6修改管理员登录密码函数

四、源程序代码

#include

#include

#include

intkeyy;

structbill//账单

{

intnumb;//账单编号

charname[32];//用户姓名

charid[19];//身份证号

charadd[20];//住址

chartel[12];//电话

doublemoney;//存款金额

intyear;//存期

doublelilv;//利率

intkey;//密码

};

intnewa()//新建存单

{

intn,i,flag;

FILE*nbill=fopen("bill.txt","r");

FILE*fbill=fopen("bill.txt","a");

{

structbilla;

intn;

printf("请输入新存单信息");

printf("\n>>编号:

");

do

{

intj,fnumb;

structbillc[10];

scanf("%d",&(a.numb));

flag=0;

for(j=0;j<10;j++)

{

fscanf(nbill,"%d\t%s\t%s\t%s\t%s\t%lf\t%d\t%lf\t%d",&c[j].numb,&c[j].name,&c[j].id,&c[j].add,&c[j].tel,&c[j].money,&c[j].year,&c[j].lilv,&c[j].key);

if(c[j].numb==a.numb)

{

printf("存单号重复,请重新输入\n");

j=10;

flag=2;

}

}

}while(flag==2);

//录入姓名

printf("\n>>姓名:

");

scanf("%s",a.name);

//录入身份证号

printf("\n>>身份证号:

");

do

{

i=0;

scanf("%s",&(a.id));

n=strlen(a.id);

while(a.id!

='\0')

{

if(a.id[i]>='0'&&a.id[i]<='9'||a.id[i]=='x'||a.id[i]=='X')

i++;

else

break;

}if(i==n&&n==18)

break;

else

printf("\n输入有误,请重新输入正确的身份证号码:

\n");

}

while

(1);

//录入住址

printf("\n>>住址:

");

scanf("%s",&(a.add));

//录入电话

printf("\n>>联系电话:

");

do

{

i=0;

scanf("%s",&(a.tel));

n=strlen(a.tel);

while(a.tel!

='\0')

{

if(a.tel[i]>='0'&&a.tel[i]<='9')

i++;

else

break;

}if(i==n&&n==11)

break;

else

printf("\n输入有误,请重新输入正确的手机号码:

\n");

}while

(1);

printf("\n>>存入金额:

");

do

{

scanf("%lf",&(a.money));

if(a.money<=0)

printf("\n输入有误,请重新输入正确的存入金额:

\n");

elsebreak;

}

while

(1);

printf("\n>>存期:

");

scanf("%d",&(a.year));

//计算利率

{

if(a.year>5)a.lilv=0.0420;

elseif(a.year>3)a.lilv=0.0378;

elsea.lilv=0.0225;

}

printf("\n>>利率为:

%0.4f",a.lilv);

printf("\n\n>>请设置取款数字密码,按回车键结束:

");

scanf("%d",&(a.key));

//写入文件

fprintf(fbill,"%d\t%s\t%s\t%s\t%s\t%f\t%d\t%f\t%d\n",a.numb,a.name,a.id,a.add,a.tel,a.money,a.year,a.lilv,a.key);

}

printf("存入成功\n");

system("pause");

system("cls");

fclose(fbill);

return0;

}

intfind()//查询信息

{

inti,fnumb,flag=0;

FILE*fbill=fopen("bill.txt","r");

structbillb[100];

doublelixi;//利息

for(i=0;i<100;i++)

{

fscanf(fbill,"%d\t%s\t%s\t%s\t%s\t%lf\t%d\t%lf\t%d",&b[i].numb,&b[i].name,&b[i].id,&b[i].add,&b[i].tel,&b[i].money,&b[i].year,&b[i].lilv,&b[i].key);

}

printf("请输入您需要查找的存单号:

\n>>");

scanf("%d",&fnumb);

printf("您好,这是您所查询的存单信息:

\n");

printf("\n");

for(i=0;i<10;i++)

if(b[i].numb==fnumb)

{

printf("存单编号:

%d\n\n用户姓名:

%s\n\n身份证号:

%s\n\n用户住址:

%s\n\n手机号码:

%s\n\n存入金额:

%0.2f\n\n存期:

%d年\n\n利率:

%0.4f\n\n取款密码:

已隐藏\n\n\n",b[i].numb,b[i].name,b[i].id,b[i].add,b[i].tel,b[i].money,b[i].year,b[i].lilv);//,b[i].key

flag=1;

break;

}

if(flag==0)

printf("您好,您输入的存单不存在,请查对后再输入。

\n");

system("pause");

system("cls");

return0;

}

intout()

{

inti,fnumb,flag=0,temp;

FILE*fbill=fopen("bill.txt","r");

structbillb[100];

doublelixi;//利息

for(i=0;i<100;i++)

{

fscanf(fbill,"%d\t%s\t%s\t%s\t%s\t%lf\t%d\t%lf\t%d",&b[i].numb,&b[i].name,&b[i].id,&b[i].add,&b[i].tel,&b[i].money,&b[i].year,&b[i].lilv,&b[i].key);

}

printf("请输入您的存单编号:

\n>>");

scanf("%d",&fnumb);

for(i=0;i<100;i++)

if(b[i].numb==fnumb)

{

flag=1;

break;

}

if(flag==0)

printf("您好,您输入的存单不存在,请查对后再输入。

\n");

if(flag==1)

{

lixi=b[i].money*b[i].lilv*b[i].year;

printf("\n存单编号:

%d\n\n存入金额:

%0.2f\n\n利率:

%0.4f\n\n存期:

%d年\n\n应得利息:

%0.2f\n\n",b[i].numb,b[i].money,b[i].lilv,b[i].year,lixi);

printf("\n请输入密码,注意遮挡:

");

scanf("%d",&temp);

if(temp==b[i].key)

printf("\n取款成功\n您已取出:

%0.2lf元\n\n",b[i].money+lixi);

else

{

printf("\n密码错误,请重新输入\n密码:

");

scanf("%d",&temp);

if(temp==b[i].key)

printf("\n取款成功\n您已取出:

%0.2lf元\n\n",b[i].money+lixi);

else

{

printf("\n密码错误,请重新输入\n密码:

");

scanf("%d",&temp);

if(temp==b[i].key)

{

printf("\n取款成功\n您已取出:

%0.2lf元\n\n",b[i].money+lixi);

}

else

printf("\n您好,由于您多次输入错误密码,为保障账号安全,系统终止取款操作。

\n\n");

}

}

}

system("pause");

system("cls");

return0;

}

intrevise()

{

FILE*rekeyy=fopen("keyy.txt","w");

inttemp,temp1,temp2,flag;

printf("请输入原密码\n密码:

");

scanf("%d",&temp);

if(temp==keyy)

flag=1;

system("cls");

for(;flag!

=1;)

{

printf("密码错误,请重新输入\n密码:

");

scanf("%d",&temp);

if(temp==keyy)

flag=1;

system("cls");

}

/*认证成功*/

printf("请输入新密码:

\n");

scanf("%d",&temp1);

system("cls");

printf("请再次输入新密码:

\n");

scanf("%d",&temp2);

system("cls");

if(temp1==temp2)

{

fprintf(rekeyy,"%d",temp1);

printf("修改成功\n");

system("pause");

}

else

{

printf("您好,由于您多次输入错误密码,为保障账号安全,系统终止修改密码操作。

");

system("pause");

}

printf("4\n");

system("cls");

fclose(rekeyy);

return0;

}

intmain()

{

FILE*fkeyy=fopen("keyy.txt","r");

intt;//输入密码的次数

inttemp;//输入的密码

inti;//序号

intflag=0;

fscanf(fkeyy,"%d",&keyy);

printf("请输入管理员登录密码:

\n");

scanf("%d",&temp);

if(temp==keyy)

flag=1;

system("cls");

for(;flag!

=1;)

{

printf("管理员密码错误,请重新输入:

\n");

scanf("%d",&temp);

if(temp==keyy)

flag=1;

system("cls");

}

{//认证成功

do

{

puts("***************************************");

puts("**");

puts("*欢迎使用银行定期储蓄管理系统:

*");

puts("**");

puts("*1:

新存单信息录入*");

puts("*2:

存单信息查询*");

puts("*3:

取款*");

puts("*4:

修改管理员登录密码*");

puts("*5:

退出系统*");

puts("**");

puts("***************************************");

printf("请选择您的操作:

");

scanf("%d",&i);

system("cls");//清屏

switch(i)

{

case1:

newa();

break;

case2:

find();

break;

case3:

out();

break;

case4:

revise();

break;

case5:

return0;

default:

printf("操作选择有误,请重新输入您需要的操作:

\n");

system("pause");

}

}while

(1);

}

fclose(fkeyy);

return0;

}

5、测试数据及其结果分析

提前在桌面建立一个“keyy.txt”文本文档,里面写入管理员登陆密码。

运行后,输入正确的密码(如图7),登入程序。

程序的主菜单界面如下(图8所示)。

图7输入管理员登录密码

图8主菜单界面

(1)新建存单测试(结果如图9所示):

图9完成新存单输入后的界面

(2)查询存单测试(结果如图10所示):

图10查询存单的结果

(3)取款测试(结果如图11所示):

图11取款成功的结果

(4)修改管理员密码测试(过程及结果如图12、13、14、15所示):

图12输入原密码

图13输入新密码

图14再次确认新密码

图15修改管理员密码成功的结果

(5)退出测试:

选择退出后,直接关闭系统。

 

结果分析如下:

(1)提示输入管理人员登录密码时,输入错误会一直停留在提示界面;

(2)新建存单测试,如果输入重复存单号会提示重新输入,身份证输入必须为18位数字,末位可为X,输入错误会提示重新输入,手机号码输入必须为11位数字,输入错误会提示重新输入,存款金额输入必须为正数,输入错误会提示输入错误。

(3)查询存单测试,存单单号输入必须为已有单号,输入错误会提示重新输入。

(4)取款测试,存单单号输入必须为已有单号,输入错误会提示重新输入。

密码输入必须正确,输入错误提示重新输入,错误3次会退出取款,重返主界面。

(5)修改管理员密码测试,原密码输入必须正确,输入错误提示重新输入,错误3次会退出密码修改界面,重返主界面。

再次输入新密码必须和第一次输入新密码相同,输入错误会提示重新输入。

六、调试过程中的问题

(1)结构体建立时的账单密码类型出问题:

为了可以记录用户所设计的密码,原先采用了一维整形数组来依次存放用户所输入的数字。

但是因为一个多位数的数字的大小足以用一个整形空间储存,采用一维数组不仅造成了大量的内存空间浪费,还使得对密码数位的分离造成困难。

故采用了用整形空间代替数组的方法,轻松解决了数字数位难以分离的问题。

(2)程序界面只能连续显示的处理问题:

程序每次运行时,每次输出显示都会接在原先的输出底下,长时间使用会使程序页面过长并且杂乱。

通过

system("cls");

函数,实现了清楚屏幕上原有的字符,使界面更加干净整洁,符合用户习惯。

(3)身份证号内包输入非数字的’x’字符影响输入的问题:

在第一次测试中,身份证号只允许为数字,采用数组存放身份证号导致无法识别字符’x’,为了解决这个问题,我们把存放身份证号的数组改为字符串,并采用了

while(a.id!

='\0')

{

if(a.id[i]>='0'&&a.id[i]<='9'||a.id[i]=='x'||a.id[i]=='X')

i++;

else

break;

}

的方法,实现了对”x”和”X”的识别。

(4)忘记取款则无法继续程序的问题:

在使用中,取款密码错误会导致无法取款,这时需要重新输入密码,再次错误后再次重试,再次错误后再次重试,再次错误后再次重试,再次错误后

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1