西安邮电学院
学院名称学生姓名专业名称班级软件工程报告
计算机学院
网络工程
: : : :
Part A: • What is Software Engineering (SE) 软件工程是一门工程学科,涉及软件生产的各个方面,从最初的系统描述一直到使用后的维护,都属于其学科范畴。软件工程人员运用的是系统的、有组织的的工作方法,这种方法对于制作高质量的软件是最有效的。
• How many different parts in SE development (1).问题的定义以及规划; (2).需求分析; (3).软件设计; (4).程序编码; (5).软件测试; (6).软件维护。
• What is Software Procees 软件过程是指制作软件产品的一组活动及其结果。所有的软件工程都包含: (1).软件描述; (2)软件开发;
(3)软件的有效性验证; (4)软件进化。
• Software development (Technology and method) 软件工程方法是一种软件开发的结构化方法,其目的在于提高软件质量的同时,使其性价比较高。结构化分析方法(DeMarco,1978)和JSD方法(Jackson,1983)在20世纪70年代首次开发出来,这些方法旨在识别系统中基本的功能模块,面向功能的方法现在仍被广泛应用。在20世纪80到90年代,Booch(1994)和Rumbaugh(1991)等人又提出了面向对象的方法。现在这些不同的方法已经被集成了一种方法——统一建模语言(UML)。
• Project and Project management
软件项目管理者和其他的工程项目管理者的工作性质是相同的,然而,软件工程管理与其他的工程管理相比,在很多方面是有显著的区别的。 (1).软件产品是无形的; (2).没有标准的软件过程;
(3).大型软件项目常常是“一次性”项目。
一、需求分析
由于经济社会发展速度的大幅提高,几乎所有的银行都配备了不用繁琐的人工操作的ATM自动取款机。人们可以随时随地进行交易,不再受银行的服务时间的约束,取款时也为人们节省了很多时间,方便快捷。
这个项目的开发是为银行提供一套高效稳定可靠的终端服务平台,为储户登录,存款,取款,查询,打印凭条等操作提供便利,尤其是在ATM机出现故障的情况下,提供了故障恢复的功能。
二、软件设计
本系统相应的需求有以下方面:
(1)能够读取和存储客户账户中的存取款信息,并方便有效地进行客户选择的交易操作。这主要包括以下内容:
① 自动调用银行总系统中客户原有信息 ② 银行客户账户中的信息的查询、读取 ③ 客户操作的识别,及信息的录入、更新、存储
(2)能够将客户输入的信息及时上传到银行总系统中,并将客户原有信息进行自动更新。这其中主要包括以下内容:
① 汇总客户更新的信息,直接上传到银行总系统中 ② 抽调银行总系统中客户原有信息,并进行修改
③ 将银行总系统中客户原有信息更新为客户最新输入的信息,并存储 (3)提供客户信息访问的权限和管理。其中包括: ① 客户访问普通信息的权限
② 银行系统管理员对客户信息的录入、更改和删除
需要补充说明的几点有:
(1)数据保存:需要长期保存的数据信息有
① 客户信息:客户开通银行账户的基本信息 ② 账户信息:客户在银行的存取款信息 (2)系统用户:银行系统管理员和客户
① 银行系统管理员:对ATM机中的信息可进行录入、更改和删除等操作 ② 客户:在ATM机上可进行存取交易操作
系统的总体规划
登陆界面否验证是选择操作界面是查询存款取款是否出现故障否否是是否故障恢复成功打印是是否打印凭条否否是否交易结束是退卡
客户端流程
三、软件开发与运行维护
由于本人水平有限以及时间仓促,暂时用C语言来实现,后期的运行维护也尚未展开。
#include \"stdio.h\" /*读取文件 将内容存放到内存*/ #include \"stdlib.h\" #include \"string.h\" fscanf(fp,\"#%s %s %f\\n\",atm[m].zhan#include \"conio.h\" ghao,atm[m].paword,&atm[m].allmon ey); int No=0,m,n=0; fclose(fp); /*记录用户账号次序变量*/ FILE *fp,*fp1; struct atmsystem { char zhanghao[9];
/*账号*/ char paword[11];
/*密码*/ float allmoney;
/*总金额*/ }atm[30],atmtemp; /*定义30个帐户与一个临时帐户*/
main()
/*主函数*/ { void kaihu();
/*声明开户函数*/ int check();
/*声明密码验证函数*/ void service();
/*声明服务菜单函数*/ void zhuanzhang();
/*声明转帐函数*/ void changepw();
/*声明更改密码函数*/ void quit(); /*声明退出函数*/ char a; /*菜单选择用的变量*/ if((fp=fopen(\"USER.txt\",\"r\"))==NULL) /*打开文件*/ {
printf(\"File cannot be opened\\n\");
system(\"pause\");
return 0; } for(m=0;!feof(fp);m++) /*关闭文件*/ No=m+1; for(;;)
/*循环主菜单*/ { system(\"cls\");
/*设置清屏*/ printf(\"***********Welcome to ATM System*************\\n\\n\");
printf(\"Please select:\\n1.Create a new account\\n2.Customer Service\\n3.Exit System\\n\"); /*输出主菜单*/
printf(\"-------------\\n\");
scanf(\"%c\",&a);
/*接收一个数字字符*/
if(a==\'1\')
/*判断是否是1*/
{
printf(\"Setting user information\\n\");
kaihu();
/*调用新开户的函数*/
printf(\"\\nPre any key to continue\");
getch();
system(\"cls\");
/*设置清屏*/
}
else if(a==\'2\')
/*判断是否是2*/
{
if(check()==1) /*调用检查账户函数*/
service(); /*认证后 开始服务*/
else 已经存在,请重新输入*/
{
getch();
printf(\"\\nSorry,you
break; have been wrong for 3 times.\");
}
else if(n==29) quit(); /*输入的帐户不存在,开建新帐户*/ }
flag=1;
} }
else if(a==\'3\')
if(flag==1) break;
/*判断是否是3*/ quit(); /*退出*/ }
system(\"pause\"); return 0; } void kaihu()
/*定义新开帐户函数*/ { int i,j,flag=0; char pw,ch1; float money; char ch[7];
if(No
scanf(\"%s\",&atmtemp.zhanghao);
/*接收一个字符串*/ if(strcmp(atmtemp.zhanghao,\"exit\")==0) exit(1); for(n=0;n
{
printf(\"\\nAccount already exists, please re-enter.\\nIf you want to exit,please enter \'exit\' when you enter ID.\\nPre any key to continue.\\n\\n\");
/*帐户/*跳出检查*/ }
printf(\"\\n\");
for(j=0;j
printf(\"Please enter your paword:(le than 10 characters)\\n\");
pw=getch();
while(pw!=\'\\r\') /*接收密码*/ {
if(pw==\'\\b\')
{
printf(\"\\b \\b\");
--i;
} else
{
putchar(\'*\');
atmtemp.paword[i++]=pw;
} pw=getch();
} atmtemp.paword[i]=\'\\0\'; printf(\"\\n\"); printf(\"Please re-enter paword\"); /*再次输入密码*/ printf(\"\\n\");
i=0; ch1=getch(); while(ch1!=\'\\r\') {
if(ch1==\'\\b\')
{
printf(\"\\b \\b\");
--i; } else
{
putchar(\'*\');
ch[i++]=ch1; }
} else printf(\"Sorry, there can\'t ch1=getch(); have more account.\\n\"); } } ch[i]=\'\\0\';
printf(\"\\n\"); int check()
if(strcmp(atmtemp.paword,ch)==0)
/*定义检查函数*/ /*两次输入密码一样,继续*/
{
strcpy(atm[No-1].zhanghao,atmtemp.zhanghao);
/*创建新账号*/
strcpy(atm[No-1].paword,atmtemp.paword);
atm[No-1].allmoney=0;
/*金额的初始值为0*/
for(;;)
{
printf(\"Please enter the amount in the first time:\\n\");
scanf(\"%f\",&money);
if(money>0) /*判断是否输入错误*/
{
atm[No-1].allmoney+=money;
/*总金额等于总金额加上初次存入金额*/
break;
}
else printf(\"Wrong amount.Again!\\n\");
}
printf(\"---------------------\\n\");
printf(\"Information:\\nID:%s\\nAmount:%.2f\\n\",atm[No-1].zhanghao,atm[No-1].allmoney);
printf(\"---------------------\\n\");
No++; /*帐户自增*/
break;
}
else printf(\"Please re-enter paword.You have 3 times to try!\\n\");
} { int i,j,flag=0;
/*设变量*/ char pw; for(j=0;j
/*让密码输入循环*/ { i=0; printf(\"Please enter your account ID:\\n\");
scanf(\"%s\",&atmtemp.zhanghao);
/*输入账号*/ printf(\"Please enter your paword:\\n\");
pw=getch(); while(pw!=\'\\r\') { if(pw==\'\\b\')
{
printf(\"\\b \\b\");
--i;
} else
{
putchar(\'*\');
atmtemp.paword[i++]=pw;
}
pw=getch(); } atmtemp.paword[i]=\'\\0\'; printf(\"\\n\"); for(n=0;n
{
printf(\"\\n----------------Authentication Succeful----------------\\n\\n\");
/*认证成功*/
flag=1;
/*而且标志为1*/ printf(\"\\tYour choice:\");
break; scanf(\"%d\",&a);
/*跳出内循环*/ /*输入选择*/
} if(a==1)
if(flag==1) break;
/*跳出外循环*/ if(flag==0)
/*如果验证密码不通过*/
printf(\"Authentication failed! Please re-enter and can not be much of an error in three times!\\n\\n\");/*认证失败!请重新输入,不容许多于三次的错误!*/
} return flag; } void service()
/*声明服务菜单函数*/ { int a;
/*设定输入选择的变量*/ int flag=0; float cq,q; /*设cq存入金额的变量,q取款金额的变量*/ for(;;) { system(\"cls\");
printf(\"Please select..............................ID:%s\\n\\n\",atm[n].zhanghao);
printf(\"\\t------------------\\n\");
/*输出语句-子菜单*/ printf(\"\\t-----------1.Deposit Services--------------------\\n\"); printf(\"\\t-----------2.Teller Service----------------------\\n\"); printf(\"\\t-----------3.Transfer----------------------------\\n\"); printf(\"\\t-----------4.Change Paword---------------------\\n\"); printf(\"\\t-----------5.Check the account information-------\\n\"); printf(\"\\t-----------6.Log out-----------------------------\\n\"); printf(\"\\t------------------\\n\\n\"); /*如果选择1*/
{
for(;;)
{
printf(\"Please enter the amount you want deposited:\");
/*请输入您要存入的金额*/
scanf(\"%f\",&cq);
/*输入存款的金额*/
if(cq>0)
{
atm[n].allmoney+=cq;
/*余额等于余额加上存款*/
break;
}
else printf(\"Wrong enter.Again!\\n\");
}
printf(\"------------------\\n\");
printf(\"\\nThe amount of your deposit:%.2f\\nTotal amount of money are:%.2f\\n\",cq,atm[n].allmoney);/*输出存款和余额*/
printf(\"------------------\\n\");
printf(\"\\nPre any key to continue\");
getch();
system(\"cls\");
/*设置清屏*/
} else if(a==2)
/*如果选择2*/
{
for(flag=0;;)
/*加入循环*/
{
if(flag)
break; /*跳出循环*/
for(;;)
{
printf(\"Please enter the amount of money you want:\");
scanf(\"%f\",&q);
/*输入您要取款的金额*/
if(q>0)
{
if(q>atm[n].allmoney)
/*如果取款金额大于余额*/
{
printf(\"You have not enough balance!\\n\");
/*输出\"余额不足\",继续循环*/
}
else
/*否则*/
{
atm[n].allmoney-=q;
/*余额等于原余额减去取款金额*/
printf(\"-----------------------\\n\");
printf(\"\\nThe amount of money you want are:%.2f\\nThe balance are:%.2f\\n\",q,atm[n].allmoney);/*输出取款金额和余额*/
printf(\"-----------------------\\n\");
printf(\"\\nPre any key to continue\");
getch();
system(\"cls\");
/*设置清屏*/
flag=1;
break;
/*并跳出循环*/
}
}
else printf(\"Wrong Enter.Again!\\n\");
}
} } else if(a==3)
/*如果选择3*/
{ zhuanzhang();
/*调用转账函数*/
printf(\"\\nPre any key to continue\");
getch();
system(\"cls\");
/*设置清屏*/
}
else if(a==4)
/*如果选择4.修改密码*/ {
changepw();
/*调用修改密码的函数*/ printf(\"\\nPre any key to continue\");
getch();
system(\"cls\");
/*设置清屏*/ }
else if(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(\"Pre any key to continue\\n\");
getch();
system(\"cls\");
/*设置清屏*/
}
else if(a==6)
/*如果选择是6*/
{
break;
}
} } void zhuanzhang()
/*定义转帐函数*/ { int i,flag=0,m; float s;
for(i=0;i
printf(\"Enter the account ID to be transferred to:\");
/*输入您要转入帐号*/
scanf(\"%s\",atmtemp.zhanghao); for(m=0;m
if (strcmp(atm[m].zhanghao,atmtemp.zhanghao)==0) /*如果输入的帐户存在*/
{
flag=1;
/*而且标志为1*/
break;
/*跳出内循环*/
} if(flag==1) break; /*跳出外循环*/ if(flag==0) printf(\"\\nEnter the account ID is wrong.Please re-enter and can not be much of an error in three times!\\n\"); } for(;;) {
if(flag==1) printf(\"\\nEnter the amount you want transferred to:\");
/*输入您要转入的金额*/ else
break; scanf(\"%f\",&s);
/*输入转入的金额*/ if(s>0) {
if(atm[n].allmoney
/*如果转出的金额大于余额*/
printf(\"You have not enough balance!\\n\");
/*输出\"余额不足\",并继续循环*/
else
{
atm[n].allmoney-=s;
/*转出的账户金额等于余额减去转出的金额*/
atm[m].allmoney+=s;
/*转入的账户金额等于余额加上转入的金额*/
printf(\"\\n------------------\\n\");
printf(\"Succeful transfer!\\n\");
printf(\"Your account balance are:%.2f\\n\",atm[n].allmoney); /*输出余额*/
printf(\"------------------\\n\");
break;
}
} else printf(\"Wrong enter.Again!\\n\");
} } void changepw()
/*定义修改密码的函数*/ { int i,j,p; char ch,ch1,ch2; char aa[11],cc[11],dd[11];
/*设定变量aa为输入原密码cc密码*/ for(;;)
/*循环*/ { i=0; printf(\"\\nPlease enter the original paword:\");
/*请输入原密码*/ ch=getch(); while(ch!=\'\\r\') { if(ch==\'\\b\')
{
printf(\"\\b \\b\");
--i;
} else
{
aa[i++]=ch; putchar(\'*\'); } ch=getch(); } aa[i]=\'\\0\';
/*输入原密码*/ printf(\"\\n\"); if(strcmp(aa,atm[n].paword)==0)
/*判断输入的密码是否与原密码相同*/
{
p=0;
j=0;
printf(\"\\nPlease enter your new paword:\");
/*请输入您的新密码*/
ch1=getch();
/*输入设定新密码*/
while(ch1!=\'\\r\')
{
if(ch1==\'\\b\')
{
printf(\"\\b \\b\");
--j;
} else
{
cc[j++]=ch1;
putchar(\'*\'); }
ch1=getch();
}
cc[j]=\'\\0\';
printf(\"\\n\");
printf(\"Please re-enter the paword:\");
ch2=getch();
while(ch2!=\'\\r\')
{
if(ch2==\'\\b\')
{
printf(\"\\b \\b\");
--p;
} else
{
dd[p++]=ch2;
putchar(\'*\'); }
ch2=getch();
}
dd[p]=\'\\0\';
printf(\"\\n\");
if(strcmp(cc,dd)==0)
{
strcpy(atm[n].paword,cc);
/*将新密码复盖旧密码*/
printf(\"------------------\\n\");
printf(\"\\nYour paword has been succefully modified\\n\");
/*您的密码已修改成功*/
printf(\"------------------\\n\");
break;
/*跳出循环*/
}
} else
/*判断密码为不想同*/
{
printf(\"\\nYou enter the paword is not correct\\n\");
/*您输入的密码不正确,并且继续循环*/
printf(\"*******Please re-enter********\\n\");
printf(\"\\nPre any key to continue\");
getch();
system(\"cls\"); /*设置清屏*/
} } }
void quit() {
remove(\"USER.txt\"); /*删除旧文件*/
fp1=fopen(\"USER.txt\",\"w+\"); /*重新写入文件*/
for(n=0;n
fprintf(fp1,\"#%s %s %f\\n\",atm[n].zhanghao,atm[n].paword,atm[n].allmoney);
fclose(fp1);
printf(\"\\nGood bye!!\\nThank you for using!\\n\");
getch();
exit(1);
/*跳出系统*/ }