搜档网
当前位置:搜档网 › ATM自动取款机系统—详细设计说明书

ATM自动取款机系统—详细设计说明书

ATM自动取款机系统—详细设计说明书
ATM自动取款机系统—详细设计说明书

文档名称:项目名称:

详细设计说明书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()//定义函数

{

inti;

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;

}

}

}

开户服务:

structkaihu

{

char name[10];

char mima[10];

double zong; intzhanghao;

}guke[20];

intrenshu=0;

intxianzai;*/

#include

#include

#include

#include

struct

{

intjin_e,zong; intzhanghao;

char name[20];

char mima[20];

}guke[20];

intrenshu=0;

intxianzai;

void shaohou()

{

inti,j;

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

{

printf(".");

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

{

;

}

}

}

void dedaomima(char mima[]) {

inti=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请输入账号: ");

intzh;

scanf("%d",&zh);

inti;

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请输入账号: ");

intzh;

scanf("%d",&zh);

for(inti=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()

{

inti=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\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(inti=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请输入您的存款金额 :");

intxincun;

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(inti=0;i<5;i++)

{

printf("\n\n\t正在进入 , 请稍等 ");

shaohou();

system("cls");

}

printf("\n\n\t【取款服务】 ");

printf("\n\n\t请输入取款金额 :");

intxinqu;

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(inti=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机管理系统的单体测试计划;

用例

被测试的功能初始系统状态测试输入期望的结果

会话用例

系统读取顾客系统处于 ON状插入可读的银银行卡被接收,

的银行卡态,并没有为顾行卡系统请求输入

客提供服务密码

会话用例系统弹出不可

读取的银行卡

系统处于 ON状插入不可读取银行卡被弹出,

态,当前没有为的银行卡系统显示错误

顾客提供服务信息,准备启动

一个新的会话

会话用例系统接收顾客

的密码

系统请求顾客输入密码

输入密码

会话用例系统允许顾客

执行事务

执行事务

系统显示事务

类型菜单

会话用例系统允许在一

个会话中执行

回答“是”

系统询问是否

多个事务系统显示一个事务类型菜单

系统询问顾客是否希望执行其它事务

系统显示事务

执行其它事务类型菜单

会话用例当顾客选择不

执行其它事务

系统询问是否回答“否”系统弹出银行时,会话结束

执行其它事务卡,准备启动一

个新的会话

系统处理一个

事务用例不合法的密码

插入了可读取输入不正确的执行非法密码

的卡密码尝试某个

事务

取款用例系统提示顾客

选择需要提取

正在显示事务选择取款事务系统显示账户的现金的账户

类型菜单类型菜单

取款用例系统正确执行

合法取款事务

系统显示取款选择系统当前系统弹出现金,

金额菜单拥有单小于账打印收据,更新

户余额的取款账户余额

金额

取款用例系统验证是否

有足够的现金,

系统现有的现选择大于当前完成用户的请

金数量小于顾系统拥有现金求

客请求的数量数量的取款金

额系统将显示一

个信息,提示现金不足,请重新选择取款金额

取款用例系统验证顾客

账户余额是否

系统正在请求能够满足请求

取款金额

的金额选择一个取款

金额使得该金

额小于当前系

统中的现金余

额但是大于用

户账户余额

系统将显示一

个信息位顾客

提供是否执行

其它事务的选

取款用例取款事务在选

择金额之前可

系统显示账户按下“ CANCEL”

以被顾客取消

类型菜单键

取款用例取款事务在顾

客请求取款金

系统显示请求按下“ CANCEL”

额之前的任何系统显示信息为顾客执行其它事务提供相关选项

系统显示信息

时候可以被取消取款金额菜单键为顾客执行之

前事务的选项

六.详细设计小结和相关说明

由于本系统最终将会运行于取款机之上,而取款机是一个典型的嵌入式设备,内存容量有限,运行速度比较缓慢,故在进行系统设计的时候不仅得考虑普通取款机系统设计的一般问题,还得额外考虑相关设备的一些特性。本详细设计有如下几个特点:

及时释放内存,提高内存资源利用率。

利用主菜单控制,进行功能选取,使程序简单化,模块化,清晰化。

正确合理使用多模块进行系统设计。

使用人工选择进行界面切换。

相关主题