银行ATM系统软件工程设计报告.docx
《银行ATM系统软件工程设计报告.docx》由会员分享,可在线阅读,更多相关《银行ATM系统软件工程设计报告.docx(24页珍藏版)》请在冰豆网上搜索。
银行ATM系统软件工程设计报告
西安邮电学院
软件工程报告
学院名称
:
计算机学院
学生姓名
:
专业名称
:
网络工程
班级
:
PartA:
•WhatisSoftwareEngineering(SE)
软件工程是一门工程学科,涉及软件生产的各个方面,从最初的系统描述一直到使用后的维护,都属于其学科范畴。
软件工程人员运用的是系统的、有组织的的工作方法,这种方法对于制作高质量的软件是最有效的。
•HowmanydifferentpartsinSEdevelopment
(1).问题的定义以及规划;
(2).需求分析;
(3).软件设计;
(4).程序编码;
(5).软件测试;
(6).软件维护。
•WhatisSoftwareProcesses
软件过程是指制作软件产品的一组活动及其结果。
所有的软件工程都包含:
(1).软件描述;
(2)软件开发;
(3)软件的有效性验证;
(4)软件进化。
•Softwaredevelopment(Technologyandmethod)
软件工程方法是一种软件开发的结构化方法,其目的在于提高软件质量的同时,使其性价比较高。
结构化分析方法(DeMarco,1978)和JSD方法(Jackson,1983)在20世纪70年代首次开发出来,这些方法旨在识别系统中基本的功能模块,面向功能的方法现在仍被广泛应用。
在20世纪80到90年代,Booch(1994)和Rumbaugh(1991)等人又提出了面向对象的方法。
现在这些不同的方法已经被集成了一种方法——统一建模语言(UML)。
•ProjectandProjectmanagement
软件项目管理者和其他的工程项目管理者的工作性质是相同的,然而,软件工程管理与其他的工程管理相比,在很多方面是有显著的区别的。
(1).软件产品是无形的;
(2).没有标准的软件过程;
(3).大型软件项目常常是“一次性”项目。
一、需求分析
由于经济社会发展速度的大幅提高,几乎所有的银行都配备了不用繁琐的人工操作的ATM自动取款机。
人们可以随时随地进行交易,不再受银行的服务时间的约束,取款时也为人们节省了很多时间,方便快捷。
这个项目的开发是为银行提供一套高效稳定可靠的终端服务平台,为储户登录,存款,取款,查询,打印凭条等操作提供便利,尤其是在ATM机出现故障的情况下,提供了故障恢复的功能。
二、软件设计
本系统相应的需求有以下方面:
(1)能够读取和存储客户账户中的存取款信息,并方便有效地进行客户选择的交易操作。
这主要包括以下内容:
1 自动调用银行总系统中客户原有信息
2 银行客户账户中的信息的查询、读取
3 客户操作的识别,及信息的录入、更新、存储
(2)能够将客户输入的信息及时上传到银行总系统中,并将客户原有信息进行自动更新。
这其中主要包括以下内容:
1 汇总客户更新的信息,直接上传到银行总系统中
2 抽调银行总系统中客户原有信息,并进行修改
3 将银行总系统中客户原有信息更新为客户最新输入的信息,并存储
(3)提供客户信息访问的权限和管理。
其中包括:
1 客户访问普通信息的权限
2 银行系统管理员对客户信息的录入、更改和删除
需要补充说明的几点有:
(1)数据保存:
需要长期保存的数据信息有
1 客户信息:
客户开通银行账户的基本信息
2 账户信息:
客户在银行的存取款信息
(2)系统用户:
银行系统管理员和客户
1 银行系统管理员:
对ATM机中的信息可进行录入、更改和删除等操作
2 客户:
在ATM机上可进行存取交易操作
系统的总体规划
客户端流程
三、软件开发与运行维护
由于本人水平有限以及时间仓促,暂时用C语言来实现,后期的运行维护也尚未展开。
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
intNo=0,m,n=0;/*记录用户账号次序变量*/
FILE*fp,*fp1;
structatmsystem
{
charzhanghao[9];/*账号*/
charpassword[11];/*密码*/
floatallmoney;/*总金额*/
}atm[30],atmtemp;/*定义30个帐户与一个临时帐户*/
main()/*主函数*/
{
voidkaihu();/*声明开户函数*/
intcheck();/*声明密码验证函数*/
voidservice();/*声明服务菜单函数*/
voidzhuanzhang();/*声明转帐函数*/
voidchangepw();/*声明更改密码函数*/
voidquit();/*声明退出函数*/
chara;/*菜单选择用的变量*/
if((fp=fopen("USER.txt","r"))==NULL)/*打开文件*/
{
printf("Filecannotbeopened\n");
system("pause");
return0;
}
for(m=0;!
feof(fp);m++)/*读取文件将内容存放到内存*/
fscanf(fp,"#%s%s%f\n",atm[m].zhanghao,atm[m].password,&atm[m].allmoney);
fclose(fp);/*关闭文件*/
No=m+1;
for(;;)/*循环主菜单*/
{
system("cls");/*设置清屏*/
printf("***********WelcometoATMSystem*************\n\n");
printf("Pleaseselect:
\n1.Createanewaccount\n2.CustomerService\n3.ExitSystem\n");/*输出主菜单*/
printf("--------------------------------------------\n");
scanf("%c",&a);/*接收一个数字字符*/
if(a=='1')/*判断是否是1*/
{
printf("Settinguserinformation\n");
kaihu();/*调用新开户的函数*/
printf("\nPressanykeytocontinue");
getch();
system("cls");/*设置清屏*/
}
elseif(a=='2')/*判断是否是2*/
{
if(check()==1)/*调用检查账户函数*/
service();/*认证后开始服务*/
else
{
printf("\nSorry,youhavebeenwrongfor3times.");
quit();
}
}
elseif(a=='3')/*判断是否是3*/
quit();/*退出*/
}
system("pause");
return0;
}
voidkaihu()/*定义新开帐户函数*/
{
inti,j,flag=0;
charpw,ch1;
floatmoney;
charch[7];
if(No<=30)/*判断是否有空间创建帐户*/
{
for(;;)
{
printf("PleaseenteryouraccountID:
(lessthan8characters)\n");
scanf("%s",&atmtemp.zhanghao);/*接收一个字符串*/
if(strcmp(atmtemp.zhanghao,"exit")==0)
exit
(1);
for(n=0;n<30;n++)/*验证输入的帐户和密码*/
{
if(strcmp(atm[n].zhanghao,atmtemp.zhanghao)==0)/*如果输入的帐户已经存在*/
{
printf("\nAccountalreadyexists,pleasere-enter.\nIfyouwanttoexit,pleaseenter'exit'whenyouenterID.\nPressanykeytocontinue.\n\n");/*帐户已经存在,请重新输入*/
getch();
break;
}
elseif(n==29)/*输入的帐户不存在,开建新帐户*/
flag=1;
}
if(flag==1)break;/*跳出检查*/
}
printf("\n");
for(j=0;j<3;j++)
{
i=0;
printf("Pleaseenteryourpassword:
(lessthan10characters)\n");
pw=getch();
while(pw!
='\r')/*接收密码*/
{
if(pw=='\b')
{
printf("\b\b");
--i;
}
else
{
putchar('*');
atmtemp.password[i++]=pw;
}
pw=getch();
}
atmtemp.password[i]='\0';
printf("\n");
printf("Pleasere-enterpassword");/*再次输入密码*/
printf("\n");
i=0;
ch1=getch();
while(ch1!
='\r')
{
if(ch1=='\b')
{
printf("\b\b");
--i;
}
else
{
putchar('*');
ch[i++]=ch1;
}
ch1=getch();
}
ch[i]='\0';
printf("\n");
if(strcmp(atmtemp.password,ch)==0)/*两次输入密码一样,继续*/
{
strcpy(atm[No-1].zhanghao,atmtemp.zhanghao);/*创建新账号*/
strcpy(atm[No-1].password,atmtemp.password);
atm[No-1].allmoney=0;/*金额的初始值为0*/
for(;;)
{
printf("Pleaseentertheamountinthefirsttime:
\n");
scanf("%f",&money);
if(money>0)/*判断是否输入错误*/
{
atm[No-1].allmoney+=money;/*总金额等于总金额加上初次存入金额*/
break;
}
elseprintf("Wrongamount.Again!
\n");
}
printf("---------------------\n");
printf("Information:
\nID:
%s\nAmount:
%.2f\n",atm[No-1].zhanghao,atm[No-1].allmoney);
printf("---------------------\n");
No++;/*帐户自增*/
break;
}
elseprintf("Pleasere-enterpassword.Youhave3timestotry!
\n");
}
}
elseprintf("Sorry,therecan'thavemoreaccount.\n");
}
intcheck()/*定义检查函数*/
{
inti,j,flag=0;/*设变量*/
charpw;
for(j=0;j<3;j++)/*让密码输入循环*/
{
i=0;
printf("PleaseenteryouraccountID:
\n");
scanf("%s",&atmtemp.zhanghao);/*输入账号*/
printf("Pleaseenteryourpassword:
\n");
pw=getch();
while(pw!
='\r')
{
if(pw=='\b')
{
printf("\b\b");
--i;
}
else
{
putchar('*');
atmtemp.password[i++]=pw;
}
pw=getch();
}
atmtemp.password[i]='\0';
printf("\n");
for(n=0;n<30;n++)/*验证输入的帐户和密码*/
if(strcmp(atm[n].zhanghao,atmtemp.zhanghao)==0&&strcmp(atm[n].password,atmtemp.password)==0)/*如果输入的帐户和密码相同*/
{
printf("\n----------------AuthenticationSuccessful----------------\n\n");/*认证成功*/
flag=1;/*而且标志为1*/
break;/*跳出内循环*/
}
if(flag==1)break;/*跳出外循环*/
if(flag==0)/*如果验证密码不通过*/
printf("Authenticationfailed!
Pleasere-enterandcannotbemuchofanerrorinthreetimes!
\n\n");/*认证失败!
请重新输入,不容许多于三次的错误!
*/
}
returnflag;
}
voidservice()/*声明服务菜单函数*/
{
inta;/*设定输入选择的变量*/
intflag=0;
floatcq,q;/*设cq存入金额的变量,q取款金额的变量*/
for(;;)
{
system("cls");
printf("Pleaseselect..............................ID:
%s\n\n",atm[n].zhanghao);
printf("\t-------------------------------------------------\n");/*输出语句-子菜单*/
printf("\t-----------1.DepositServices--------------------\n");
printf("\t-----------2.TellerService----------------------\n");
printf("\t-----------3.Transfer----------------------------\n");
printf("\t-----------4.ChangePassword---------------------\n");
printf("\t-----------5.Checktheaccountinformation-------\n");
printf("\t-----------6.Logout-----------------------------\n");
printf("\t-------------------------------------------------\n\n");
printf("\tYourchoice:
");
scanf("%d",&a);/*输入选择*/
if(a==1)/*如果选择1*/
{
for(;;)
{
printf("Pleaseentertheamountyouwantdeposited:
");/*请输入您要存入的金额*/
scanf("%f",&cq);/*输入存款的金额*/
if(cq>0)
{
atm[n].allmoney+=cq;/*余额等于余额加上存款*/
break;
}
elseprintf("Wrongenter.Again!
\n");
}
printf("------------------\n");
printf("\nTheamountofyourdeposit:
%.2f\nTotalamountofmoneyare:
%.2f\n",cq,atm[n].allmoney);/*输出存款和余额*/
printf("------------------\n");
printf("\nPressanykeytocontinue");
getch();
system("cls");/*设置清屏*/
}
elseif(a==2)/*如果选择2*/
{
for(flag=0;;)/*加入循环*/
{
if(flag)
break;/*跳出循环*/
for(;;)
{
printf("Pleaseentertheamountofmoneyyouwant:
");
scanf("%f",&q);/*输入您要取款的金额*/
if(q>0)
{
if(q>atm[n].allmoney)/*如果取款金额大于余额*/
{
printf("Youhavenotenoughbalance!
\n");/*输出"余额不足",继续循环*/
}
else/*否则*/
{
atm[n].allmoney-=q;/*余额等于原余额减去取款金额*/
printf("-----------------------\n");
printf("\nTheamountofmoneyyouwantare:
%.2f\nThebalanceare:
%.2f\n",q,atm[n].allmoney);/*输出取款金额和余额*/
printf("-----------------------\n");
printf("\nPressanykeytocontinue");
getch();
system("cls");/*设置清屏*/
flag=1;
break;/*并跳出循环*/
}
}
elseprintf("WrongEnter.Again!
\n");
}
}
}
elseif(a==3)/*如果选择3*/
{
zhuanzhang();/*调用转账函数*/
printf("\nPressanykeytocontinue");
getch();
system("cls");/*设置清屏*/
}
elseif(a==4)/*如果选择4.修改密码*/
{
changepw();/*调用修改密码的函数*/
printf("\nPressanykeytocontinue");
getch();
system("cls");/*设置清屏*/
}
elseif(a==5)/*如果选择5*/
{
printf("---------------------\n");
printf("ID:
%s\n",atm[n].zhanghao);/*输出清单:
账号*/
printf("Psaaword:
******\n");/*输出密码*/
printf("Balance:
%.2f\n",atm[n].allmoney);/*输出金额*/
printf("---------------------\n");
printf("Pressanykeytocontinue\n");
getch();
system("cls");/*设置清屏*/
}
elseif(a==6)/*如果选择是6*/
{