文档名称:详细设计说明书
项目名称:ATM自动取款机系统
编写:张恒友
审核:王旭
日期:2016年6月5日
院系:计算机学院
专业:计算机科学与技术
一.引言
1.1编写目的
根据《需求规格说明书》,在仔细考虑讨论之后,我们又进一步对《ATM自动取款机系统》软件的功能划分、数据结构、软件总体结构进行设计,从而完成概要设计,作为软件详细设计的基础。
1.2项目背景
项目委托单位:计算机学院软件工程实验。
开发单位:班ATM自动取款机系统项目组。
由于柜台常常会拥挤,排队的人很多,而且大多数的客户都是取款,存款等,而有些办理业务的需要一定的时间,这会使得一些只需要取款等的客户会有较长时间的等待。所以银行希望设计一个系统,能让客户在系统上进行简单的操作,比如存款、取款、查询余额、转账等。
1.3定义
ATM: Automatic Teller Machine,自动柜员机。
1.4参考资料
《计算机软件需求说明编制指南》
《计算机软件产品开发文件指南》
《ATM系统可行性分析报告》。
《软件设计与体系结构》
《软件工程——实践者的研究方法》
二.任务概述
2.1目标
现如今,ATM在一定程度上存在很大的安全隐患,给用户造成很大的经济损失。为了解决这样的问题,我们小组提出了改进ATM自动取款机系统,使用户在操作过程中更加安全,放心,更便捷。
2.2运行环境
硬件环境:
CPU:1GHZ及以上
内存:1G以上
硬盘:20G以上
软件环境:
操作系统:Microsoft Windows XP或更高版本
数据库:Microsoft SQL Server 2005
Web服务器:Tomcat5.0以上
支持浏览器:Internet Explorer 7.0及其以上版本
开发环境:MyEclipse,jdk,Microsoft SQL Server 2005
2.3条件与限制
随着科技的发展,人们生活水平的不断提高,高性能高效率高安全的产品越来越受到人们的欢迎。 ATM自动取款机是一种非常智能的机器,人们可以直接和它交互,代替以前的手工操作,大大提高了银行的工作效率。同时也给广大用户带来了非常大的方便。由于ATM自动取款机是和服务器是连网的,这就涉及到
安全的问题本系统能够有效地解决这个问题。但是本程序也使用户操作时间增加,在一定程度上增加了用户的抱怨率。
三.总体设计
3.1处理流程
主流程图:
用户流程:
存款流程:
取款流程:
转账流程:
查询流程
改密:
3.2具体模块及代码实现
1. 主菜单模块(含:存款、取款、转账、密码修改、查询余额)
存款:个人账户上的金额加上。
取款:个人账户上的金额减去。
转账:涉及到两个账户其实就是下标的不同金额一个减去一个加上。
密码修改:输入新密码、再次输入新密码判断两次密码是否相同
在用strcpy()函数将新密码当前账户下标元素密码成员
并且判断是否修改成功。
查询余额:就是从结构体数组里面调用存金额那个成员
欢迎模块:
定义一个函数void huanying(),利用for循环进行字符的输出。
void huanying() //定义函数
{
int i;
for(i=0;i<10;i++) //for循环
{
printf("\n\n\n\n\n\n\n\n");
printf("\t\t\t --------------------------\n");
printf("\t\t\t欢迎使用 \n");
printf("\t\t\t --------------------------\n");
printf("\n\n\t\t希望此ATM系统可以给您带来方便!");
printf("\n\n\n\n\t\t\t\t正在进入");
shaohou(); //等待系统响应
system("cls");
printf("\n\n\n\n\n\n\n\n");
}
}
用户模块:
在此模块,从A,B,C中选择出执行的操作服务,然后进入下一个模块。利用while语句,定义的选择函数char xuanze,实现输出。
伪代码:
void main() //主函数
{
huanying();
system("cls");
while(1)
{
char xuanze; //定义函数
system("cls");
printf("\n\n\t欢迎使用\n");
printf("\n\n\t请选择:\n");
printf("\n\n\tA.开户服务\n");
printf("\n\n\tB.登录服务\n");
printf("\n\n\tC.退出。\n");
printf("\n\n\t请选择:");
scanf("%c",&xuanze);
switch(xuanze)
{
case'a':
case'A':kaihu();break;
case'b':
case'B':denglu();break;
case'c':
case'C':exit(0);
default:printf("\n\t您的选择错误!");break;
}
}
}
开户服务:
struct kaihu
{
char name[10];
char mima[10];
double zong;
int zhanghao;
}guke[20];
int renshu=0;
int xianzai;*/
#include
#include
#include
#include
struct
{
int jin_e,zong;
int zhanghao;
char name[20];
char mima[20];
}guke[20];
int renshu=0;
int xianzai;
void shaohou()
{
int i,j;
for(i=0;i<3;i++)
{
printf(".");
for(j=0;j<40000000;j++) {
;
}
}
}
void dedaomima(char mima[]) {
int i=0;
while(1)
{ char ch;
ch=getch();
if(ch=='\r')
{
mima[i]='\0';
printf("\n");
break;
}
else
{
if(ch=='\b')
{
if(i>0)
{
printf("\b \b");
i--;
}
}
else
{
if(i<16)
{
mima[i]=ch;
printf("*");
i++;
}
}
}
}
}
void kaihu()
{
int k;
for(k=0;k<5;k++)
{
printf("\n\n\t正在进入注册页面,请稍后"); shaohou();
system("cls");
}
while(1)
{
printf("\n\n\t【开户服务】");
printf("\n\n\t请输入您的姓名:");
char xingming[16];
char yanzheng[20];
scanf("%s",xingming);
printf("\n\n\t请输入密码:");
dedaomima(guke[renshu].mima);
printf("\n\n\t请再次确认您的密码:");
dedaomima(yanzheng);
if(strcmp(guke[renshu].mima,yanzheng)==0)
{
printf("\n\n\t密码验证通过:");
break;
}
else
{
printf("两次密码不相同。请重新输入。");
system("cls");
}
}while(1)
{
printf("\n\n\t请输入开户金额:");
scanf("%d",&guke[renshu].jin_e);
if(guke[renshu].jin_e>0)
{ printf("\n\n\t开户成功,您的可用余额为:%d",guke[renshu].jin_e); break;
}
else
{
printf("\n\n\t开户金额不能低于壹圆!\n\n");
system("cls");
}
}
guke[renshu].zhanghao=518518+renshu;
printf("\n\n\t您的账号是:%d请牢记!\n",guke[renshu].zhanghao); printf("\n\n\t开户成功,是否继续?继续请按任意键。\n");
renshu++;
getch();
}
登录服务:
void denglu()
{
int q;
for(q=0;q<8;q++)
{
printf("\n\n\t正在进入,请稍后"); shaohou();
system("cls");
}
/*while(1)
{
printf("\n\n\t\t【登录服务】");
printf("\n\n\t\t请输入账号:");
int zh;
scanf("%d",&zh);
int i;
for(i=0;i { if(zh!=guke[i].zhanghao) { printf("\n\n\t账号错误,请重新输入。"); continue; } else { xianzai=i; printf("\n\n\t账号正确:"); } }break; }*/ printf("\n\n\t\t【登录服务】"); printf("\n\n\t\t请输入账号:"); int zh; scanf("%d",&zh); for(int i=0;i { if(zh!=guke[i].zhanghao) { i++; if(i==renshu) { printf("\n\n\t账号错误,请重新输入。"); } continue; } else { xianzai=i; printf("\n\n\t账号正确:"); break; } } for(i=0;i<3;i++) { printf("\n\t请输入密码:"); char password[10]; dedaomima(password); if(strcmp(password,guke[xianzai].mima)==0) { printf("\n\t密码正确!"); break; }else { printf("密码输入错误,请重新输入。"); return; getch(); } } fuwu(); getch(); } 主菜单模块: 此模块主要用于用户进行各种操作服务的选择,实现相关功能,如存款,取款,转账,密码修改,余额查询等等。 void fuwu() { int i=0; for(i;i<8;i++) { printf("\n\n\n\n\n\n\n"); printf("\n\n\n\n\t\t\t正在进入服务,请稍后"); shaohou(); system("cls"); }while(1) { char shuru; system("cls"); printf("\n\n\t【服务】\n"); printf("\n\n\t%d欢迎使用!\n",guke[i].name); printf("\n\t(请选择:)\n"); printf("\n\ta.存款服务\n"); printf("\n\tb.取款服务\n"); printf("\n\tc.转账服务\n"); printf("\n\td.余额查询\n"); printf("\n\te.密码修改\n"); printf("\n\tf.退出\n"); printf("\n\t请选择服务:"); scanf("%c",&shuru); switch(shuru) { case 'a': case 'A':cunkuan();break; case 'b': case 'B':qukuan();break; // case 'c': // case 'C':zhuanzhang();break; case 'd': case 'D':chaxun();break; // case 'e': // case 'E':xiougai();break; case 'f': case 'F':printf("返回上级菜单,请按任意键");return; default:printf("\n\t您的选择错误!");break; } } } 存款服务: void cunkuan() { for(int i=0;i<5;i++) { printf("\n\n\t正在进入,请稍等"); shaohou(); system("cls"); } printf("\n\n\n\n\n\n\n"); printf("\n\n\t【存款服务】"); printf("\n\n\t请输入您的存款金额:"); int xincun; scanf("%d",&xincun); guke[renshu].zong=guke[renshu].jin_e+xincun; printf("\n\n\t您现在的可用余额为:%d",guke[renshu].zong); printf("\n\n\t是否继续?继续请按任意键。"); getch(); } 取款服务: void qukuan() { for(int i=0;i<5;i++) { printf("\n\n\t正在进入,请稍等"); shaohou(); system("cls"); } printf("\n\n\t【取款服务】"); printf("\n\n\t请输入取款金额:"); int xinqu; scanf("%d",&xinqu); guke[xianzai].zong=guke[renshu].zong-xinqu; if(xinqu printf("\n\n\t取款成功:%d,您现在的可用余额 为:%d",xinqu,guke[xianzai].zong); printf("\n\n\t是否继续?继续请按任意键:"); getch(); } 查询服务: void chaxun() { for(int i=0;i<5;i++) { printf("\n\n\t正在进入,请稍等"); shaohou(); system("cls"); } printf("\n\t【查询服务】"); printf("\n\t您的可用余额为:%d",guke[renshu].jin_e); printf("\n\t是否继续?继续请按任意键."); getch(); } 四.接口设计 4.1 外部接口 硬件接口: 包括和打印机的接口(控制打印机打发票及存款凭证等),和银行数据库主机的接口,和出钞机的接口。对硬件的处理主要由操作系统完成,本软件只调用 操作系统提供的打印,出钞等指令。 软件接口: 按照银行指定的格式与银行数据库通信,并需要预留可能在ATM上安装的其他软件的接口以便于扩充功能。 4.2 内部接口 1.前后台程序通信接口,包括配款提醒和维护提醒。 2.系统与数据库接口。 五.测试计划 测试日期、测试人员安排请参考测试计划;测试用例的具体内容,详见测试用例说明。现在本小组仅以会话用例与取款用例进行对ATM机管理系统的单体测试计划; 六.详细设计小结和相关说明 由于本系统最终将会运行于取款机之上,而取款机是一个典型的嵌入式设备,内存容量有限,运行速度比较缓慢,故在进行系统设计的时候不仅得考虑普通取款机系统设计的一般问题,还得额外考虑相关设备的一些特性。本详细设计有如下几个特点: 及时释放内存,提高内存资源利用率。 利用主菜单控制,进行功能选取,使程序简单化,模块化,清晰化。 正确合理使用多模块进行系统设计。 使用人工选择进行界面切换。