1、 文档名称: 具体设计说明书 项目名称: ATM自动取款机系统 编写: 张恒友 审核: 王旭 日期: 6月5日 院系: 计算机学院 专业: 计算机科学和技术 一.引言 1.1 编写目标 依据《需求规格说明书》,在仔细考虑讨论以后,我们又深入对《ATM自动取款机系统》软件功效划分、数据结构、软件总体结构进行设计,从而完成概要设计,作为软件具体设计基础。 1.2 项目背景 项目委托单位:计算机学院软件工程试验。 开发单位:班ATM自动取款机系统项目组。 因为柜台常常会拥挤,排队人很多,而且大多数用户全部是取款,存款等,而有些办理
2、业务需要一定时间,这会使得部分只需要取款等用户会有较长时间等候。所以银行期望设计一个系统,能让用户在系统上进行简单操作,比如存款、取款、查询余额、转账等。 1.3 定义 ATM: Automatic Teller Machine,自动柜员机。 1.4 参考资料 《计算机软件需求说明编制指南》 《计算机软件产品开发文件指南》 《ATM系统可行性分析汇报》。 《软件设计和体系结构》 《软件工程——实践者研究方法》 二. 任务概述 2.1目标 现现在,ATM在一定程度上存在很大安全隐患,给用户造成很大经济损失。为了处理这么问题,我们小组提出了改善AT
3、M自动取款机系统,使用户在操作过程中愈加安全,放心,更便捷。 2.2运行环境 硬件环境: CPU:1GHZ及以上 内存:1G以上 硬盘:20G以上 软件环境: 操作系统:Microsoft Windows XP或更高版本 数 据 库:Microsoft SQL Server Web服务器:Tomcat5.0以上 支持浏览器:Internet Explorer 7.0及其以上版本 开发环境:MyEclipse,jdk,Microsoft SQL Server 2.3条件和限制 伴随科技发展,大家生活水平不停提升,高性能高效率高安全产品越来越受到大
4、家欢迎。 ATM自动取款机是一个很智能机器,大家能够直接和它交互,替换以前手工操作,大大提升了银行工作效率。同时也给广大用户带来了很大方便。因为ATM自动取款机是和服务器是连网,这就包含到安全问题本系统能够有效地处理这个问题。不过本程序也使用户操作时间增加,在一定程度上增加了用户埋怨率。 三.总体设计 3.1 处理步骤 主步骤图: 用户步骤: 存款步骤: 取款步骤: 转账步骤: 查询步骤 : 改密: 3.2 具体模块及代码实现 1. 主菜单模块(含:存款、取款、转账、密码修改、查
5、询余额) 存款:个人账户上金额加上。 取款:个人账户上金额减去。 转账:包含到两个账户 其实就是下标不一样 金额一个减去一个加上。 密码修改:输入新密码、再次输入新密码 判定两次密码是否相同 在用strcpy()函数 将新密码 目前账户下标元素密码组员 而且判定是否修改成功。 查询余额:就是从结构体数组里面调用存金额那个组员 欢迎模块: 定义一个函数void huanying(),利用for循环进行字符输出。 void huanying() //定义函数 { int i; for(i=0;i<10;i++) //f
6、or循环 { 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(); //等
7、候系统响应 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"
8、); 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'
9、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
10、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();
11、 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++; } }
12、 } } } 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
13、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请输入开户金额:"); scan
14、f("%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); pri
15、ntf("\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 16、u;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 17、h!=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); 18、
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++)
{
19、
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\ 20、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':
21、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");
}
print 22、f("\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++)
{
23、 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 24、\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 外部接口
25、
硬件接口:
包含和打印机接口(控制打印机打发票及存款凭证等),和银行数据库主机接口,和出钞机接口。对硬件处理关键由操作系统完成,本软件只调用操作系统提供打印,出钞等指令。
软件接口:
根据银行指定格式和银行数据库通信,并需要预留可能在ATM上安装其它软件接口方便于扩充功效。
4.2 内部接口
1.前后台程序通信接口,包含配款提醒和维护提醒。
2.系统和数据库接口。
五.测试计划
测试日期、测试人员安排请参考测试计划;测试用例具体内容,详见测试用例说明。现在本小组仅以会话用例和取款用例进行对ATM机管理系统单体测试计划;
用例
被测试功效
初始系统状态
测试输入 26、
期望结果
会话用例
系统读取用户银行卡
系统处于ON状态,并没有为用户提供服务
插入可读银行卡
银行卡被接收,系统请求输入密码
会话用例
系统弹出不可读取银行卡
系统处于ON状态,目前没有为用户提供服务
插入不可读取银行卡
银行卡被弹出,系统显示错误信息,准备开启一个新会话
会话用例
系统接收用户密码
系统请求用户输入密码
输入密码
系统显示一个事务类型菜单
会话用例
系统许可用户实施事务
系统显示事务类型菜单
实施事务
系统问询用户是否期望实施其它事务
会话用例
系统许可在一个会话中实施多个事务
系统问询是否实施其它事务
回复“是”
系统 27、显示事务类型菜单
会话用例
当用户选择不实施其它事务时,会话结束
系统问询是否实施其它事务
回复“否”
系统弹出银行卡,准备开启一个新会话
事务用例
系统处理一个不正当密码
插入了可读取卡
输入不正确密码尝试某个事务
实施非法密码
取款用例
系统提醒用户选择需要提取现金账户
正在显示事务类型菜单
选择取款事务
系统显示账户类型菜单
取款用例
系统正确实施正当取款事务
系统显示取款金额菜单
选择系统目前拥有单小于账户余额取款金额
系统弹出现金,打印收据,更新账户余额
取款用例
系统验证是否有足够现金,完成用户请求
系统现有现金数量小于用户请求 28、数量
选择大于目前系统拥有现金数量取款金额
系统将显示一个信息,提醒现金不足,请重新选择取款金额
取款用例
系统验证用户账户余额是否能够满足请求金额
系统正在请求取款金额
选择一个取款金额使得该金额小于目前系统中现金余额不过大于用户账户余额
系统将显示一个信息位用户提供是否实施其它事务选项
取款用例
取款事务在选择金额之前能够被用户取消
系统显示账户类型菜单
按下“CANCEL”键
系统显示信息为用户实施其它事务提供相关选项
取款用例
取款事务在用户请求取款金额之前任何时候能够被取消
系统显示请求取款金额菜单
按下“CANCEL”键
系统显示信息为用户实施之前事务选项
六.具体设计小结和相关说明
因为本系统最终将会运行于取款机之上,而取款机是一个经典嵌入式设备,内存容量有限,运行速度比较缓慢,故在进行系统设计时候不仅得考虑一般取款机系统设计通常问题,还得额外考虑相关设备部分特征。本具体设计有以下多个特点:
立即释放内存,提升内存资源利用率。
利用主菜单控制,进行功效选择,使程序简单化,模块化,清楚化。
正确合理使用多模块进行系统设计。
使用人工选择进行界面切换。






