面向对象分析与设计ATM系统分析与设计.doc
ATM系统分析与设计需求分析一总体要求:1,ATM机要可以判断磁卡的类别,如果不是有效的磁卡那么退卡; 2,可以在较快的时间内响应用户的请求,并针对相应的请求执行正确的操作;3,当卡在ATM机内30秒内没有操作时,系统自动没收信用卡;4,查自己的账户时应显示余额与可用余额,并显示ATM机里所拥有的现金面值,让用户可以做出正确的选择;5,提取现金时提示用户输入取款金额并判断输入是否确,如果错误提醒用户并要求重新操作,正确那么提醒用户收取现金;钞票在出钞机内30秒内没人取走,自动回收钞票;6,转账汇款时让用户选择转账类型,要求用户输入转账账号并要求用户输入两次,以确保没有输入错误,在两次输入都正确的情况下,让用户输入转账金额,并作最后确实认。7,进入修改密码界面后提醒用户输入新密码,并要求再次输入以确保密码统一无误,在确认后完成修改操作,并提醒用户新询密码生效;8,对于错误的操作或者操作延时做出有效的处理。二,系统要求:要求用户一次取款数额不得大于2500元;要求用户一天取款数额不得超过5000元;要求用户连续输入错误密码次数不得超过3次。三,系统性能要求:要求反响时间不得大于10秒钟;四:设计目标:系统可以提供24小时不连续效劳,操作简单,可以很方便为用户提供取款、转账/汇款、查询账户信息等效劳。 模型分析一:设计DFD图。(1) 顶层DFD图:用户 银行卡交易凭条银行卡ATM系统用户 20层DFD图:银行卡密码确认用户 选择操作账户信息退出退出类型用户判断超时执行操作提示信息操作类型没收信用卡31层DFD图:超时信息未超时信息没收信用卡操作是否超过30秒退出用户警告信息银行卡取款取款操作查询是否打印账单查询操作打印账单选择信息选择交易密码确认退出类型转账操作更改密码操作退出转账银行卡更改密码用户取款子系统:客户存储信息单选择交易收回货币30秒内无响应提取现金取款金额选择货币种类调用取款系统选择信息取款操作选择信息现金警示信息用户查询子系统:客户存储信息单选择交易调用查询系统 选择货币种类选择信息查询信息查询账户查询操作显示选择信息用户转账子系统:客户存储信息单卡内转账选择信息选择交易调用转账系统 查询操作转入卡号信息选择信息卡卡转账选择信息转入卡号信息转账金额记录记录记录更改密码子系统:客户存储信息单调用更改密码系统选择交易记录新密码新密码更改密码信息确认选择信息 二:组织构造设计 1系统构造读卡机模块键盘输入模块显示模块ATM机系统认证模块出钞模块打印模块(2) 读卡机系统输入:银行卡查询数据库,识别卡号及所属银行输出:显示卡号及所属银行信息3键盘输入子系统输入:密码,取款金额,查询余额等验证信息显示相关操作10秒内无操作那么吞卡认证子系统:输入卡号连接认证效劳器验证卡号信息正确那么显示输入密码,否那么吐卡 显示子系统:信息输入后台处理在屏幕上显示处理情况出钞子系统:输入金额后台处理输出现金30秒内客户不取走现金那么吞入现金打印子系统:客户选择是否打印后台处理输出报表或者无动作数据库子系统:客户输入信息数据库查询在输出显示查询信息建立模型一:建立根本系统模型图二:建立序列图:代码设计:#include<iostream.h>class consumer;class ATM / ATM取款机public: ATM(consumer& cn):cnsm(cn) void welcome(); / 登陆界面 bool check_passwd(char n,char pwd); / 核对密码 void change_passwd(); / 修改密码 void fetchmoney(); / 取款 void information(); / 查询信息 void exitATM(); / 退出系统 void functionshow(); / 功能界面 void lock(); / 锁机private: int times; / 记录密码输入次数 consumer& cnsm;class consumer/ 用户public: friend class ATM; consumer(char Name,char Num, float Money,char Password);protected: char* get_name(); / 取得姓名 char* get_num(); / 取得卡号 char* get_passwd(); / 取得密码 float get_money(); / 取得余额 void set_passwd(char pwd); / 设置密码 void set_money(float m); / 取钱private: char passwd8; / 用户密码 char name20; / 用户姓名 char num20; float money;/ * consumer类的成员函数 *#include"function.h"#include<string.h>consumer:consumer(char Name,char Num,float Money,char Password) strcpy(name,Name); strcpy(num,Num); money=Money; strcpy(passwd,Password);float consumer:get_money() return money;char* consumer:get_name() return name;char* consumer:get_num() return num;char* consumer:get_passwd() return passwd;void consumer:set_money(float m) money-=m;void consumer:set_passwd(char pwd) strcpy(passwd,pwd);/ * ATM类的成员函数 *#include "function.h"#include <string.h>#include<stdlib.h>void ATM:welcome() times=0; cout<<"$ 欢送使用ATM自动取款机! "<<endl; char pwd8,num20,ch; int i=0; do i=0; cout<<endl<<"请输入卡号:" do cin.get(ch); numi+=ch; while(ch!='n'); numi-1='0' i=0; cout<<"请输入密码:" do cin.get(ch); pwdi+=ch; while(ch!='n'); pwdi-1='0' if(!check_passwd(num,pwd) cout<<"你输入的卡号或密码有误, 请重新输入"<<endl; times+; else functionshow(); while(times<3); lock(); bool ATM:check_passwd(char num,char pwd) if(strcmp(num,cnsm.get_num()=0&&strcmp (pwd,cnsm.get_passwd()=0) return true; else return false;void ATM:functionshow() int n; do cout<<endl<<"请你输入相应的操作序号进展操作:"<<endl; cout<<"1) 修改密码 "<<endl<<"2) 取款 "<<endl<<"3) 查询余额 "<<endl<<"4) 退出系统 "<<endl; cout<<"$ >" cin>>n; while(n<1|n>4) cout<<"请输入正确的操作序号!"<<endl; cout<<"$ >" cin>>n; switch(n) case 1: change_passwd(); break; case 2: fetchmoney(); break; case 3: information(); break; case 4: exitATM(); break; while(true);void ATM:change_passwd() char pwd8,repwd8; times=0; do cout<<endl<<"请输入旧密码:" cin>>pwd; if(!check_passwd(cnsm.get_num(),pwd) times+; else break; while(times<3); if(times=3) lock(); int t=0; do cout<<"请输入新密码:" cin>>pwd; cout<<"请再输入一次新密码:" cin>>repwd; if(t=strcmp(pwd,repwd)!=0) cout<<"密码不一致, 请重新输入!"<<endl; while(t!=0); cnsm.set_passwd(pwd); cout<<"密码修改成功"<<endl;void ATM:fetchmoney() float m; char ch; do cout<<endl<<"请输入取款金额:"<<"n$>"<<endl ; cin>>m; while(m<=0) cout<<"请输入正确金额"<<endl; cout<<"$ > " cin>>m; if(cnsm.get_money()-m<0) cout<<"对不起,你的余额缺乏!"<<endl; else cout<<endl<<"操作成功,请取钱!"<<endl; cnsm.set_money(m); cout<<"是否要继续该项操作:(Y/N) "<<endl; cout<<"$ > " cin>>ch; while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y') cout<<"$ >" cin>>ch; while(ch='y'|ch='Y');void ATM:information() cout<<""<<endl; cout<<""<<endl; cout<<" 用户姓名:"<<cnsm.get_name()<<endl; cout<<" 卡号: "<<cnsm.get_num()<<endl; cout<<" 余额: "<<cnsm.get_money()<<endl; cout<<""<<endl;void ATM:lock() cout<<endl<<"对不起,由于你的操作有误, 你的卡已经被没收! "<<endl; exit(1);void ATM:exitATM() cout<<endl<<"感谢你对本银行的支持, 欢送下次光临!"<<endl; cout<<"请取卡"<<endl; exit(0);第 14 页