搜档网
当前位置:搜档网 › 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() //定义函数

{

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);

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

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

由于本系统最终将会运行于取款机之上,而取款机是一个典型的嵌入式设备,存容量有限,运行速度比较缓慢,故在进行系统设计的时候不仅得考虑普通

取款机系统设计的一般问题,还得额外考虑相关设备的一些特性。本详细设计有如下几个特点:

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

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

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

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

相关主题