以下内容摘自张海藩老师《软件工程导论》课件

目录

自动取款机(ATM)系统

需求陈述

建立功能模型

建立对象模型

建立动态模型


自动取款机(ATM)系统

需求陈述


某银行拟开发一个自动取款机系统,它是一个由自动取款机、中央计算机、分行计算机及柜员终端组成的网络系统。ATM和中央计算机由总行投资购买。
总行拥有多台ATM,分别设在全市各主要街道上。分行负责提供分行计算机和柜员终端。柜员终端设在分行营业厅及分行下属的各个储蓄所内。该系统的软件开发成本由各个分行分摊。
银行柜员使用柜员终端处理储户提交的储蓄事务。储户可以用现金或支票向自己拥有的某个账户内存款或开新账户。储户也可以从自己的账户中取款。通常,一个储户可能拥有多个账户。
柜员负责把储户提交的存款或取款事务输进柜员终端,接收储户交来的现金或支票,或付给储户现金。柜员终端与相应的分行计算机通信,分行计算机具体处理针对某个账户的事务并且维护账户。
拥有银行账户的储户有权申请领取现金兑换卡。使用现金兑换卡可以通过ATM访问自己的账户。目前仅限于用现金兑换卡在ATM上提取现金(即取款),或查询有关自己账户的信息(例如,某个指定账户上的余额)。将来可能还要求使用ATM办理转账、存款等事务。
所谓现金兑换卡就是一张特制的磁卡,上面有分行代码和卡号。分行代码唯一标识总行下属的一个分行,卡号确定了这张卡可以访问哪些账户。通常,一张卡可以访问储户的若干个账户,但是不一定能访问这个储户的全部账户。
每张现金兑换卡仅属于一个储户所有,但是,同一张卡可能有多个副本,因此,必须考虑同时在若干台ATM上使用同样的现金兑换卡的可能性。也就是说,系统应该能够处理并发的访问。
当用户把现金兑换卡插入ATM之后,ATM就与用户交互,以获取有关这次事务的信息,并与中央计算机交换关于事务的信息。
首先,ATM要求用户输入密码,接下来ATM把从这张卡上读到的信息以及用户输入的密码传给中央计算机,请求中央计算机核对这些信息并处理这次事务。
中央计算机根据卡上的分行代码确定这次事务与分行的对应关系,并且委托相应的分行计算机验证用户密码。
如果用户输入的密码是正确的,ATM就要求用户选择事务类型(取款、查询等)。当用户选择取款时,ATM请求用户输入取款额。最后,ATM从现金出口吐出现金,并且打印出账单交给用户。

建立功能模型

步骤:
1 识别外部执行者;
2 识别用例;
3 建立用例图;
4 补充用例描述:为建立对象模型和动态模型打基础。
系统功能模型

用例描述

建立对象模型

建立对象模型步骤(六个步骤):
# 确定分析类
分析模型中,分析类是概念层次上内容,类直接与应用逻辑相关,不关注技术实现。
1 找出候选分析类
边界类 控制类 实体类
1.1 确定边界类
通常,一参与者与一用例间交互或通信关联对应一边界类

边界类                               说明
SetupForm                       开新账户的操作界面
DepositForm                    存款的操作界面
ATMWithdrawForm          ATM用户取款的操作界面
ATMBalanceForm             ATM查询余额的操作界面
ATMPasswordForm          ATM改变密码的操作界面
TellerWithdrawForm         Teller用户取款的操作界面
TellerBalanceForm            Teller查询余额的操作界面
TellerPasswordForm         Teller改变密码的操作界面
(5个用例和两个执行者构成8个)
1.2 识别控制类
控制类负责协调边界类和实体类,通常在现实世界没有对应的事物。 一般来说,一个用例对应一个控制类。

控制类                             说明
SetupControl                  负责执行开新账户
DepositControl               负责执行存款
WithdrawControl            负责执行取款
BalanceControl               负责执行查询余额
PasswordControl            负责执行改变密码
(5个用例5个控制类)
1.3 识别实体类
实体类通常是用例中的参与对象,对应着现实世界中“事物”

# 非正式分析法:需求陈述中名词。
例:用非正式分析法提取ATM系统中的实体类。
银行,自动取款机(ATM),系统,中央计算机,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问
# ATM系统分析员根据领域知识或常识提取出隐含的类。
通信链路、事务日志
2 筛选出正确的类
2.1 冗余
储户与用户,现金兑换卡与磁卡及副本应去掉“用户”、“磁卡”、“副本”,保留“储户”和“现金兑换卡”。
2.2 无关
与本问题密切相关类放进目标系统,去掉“成本”、“市”、“街道”、“营业厅”、“储蓄所”。
2.3 笼统
银行(总行和分行)、系统、软件、信息、访问(事务)。
2.4 属性
现金、支票、取款额、账单、余额、分行代码、卡号、密码和类型。
2.5 操作
需求陈述中既作名词又作动词的词,慎重考虑是作类合适,还是作类中操作合适。
2.6 实现
事务日志、通信链路。

ATM系统筛选后的类:
银行,自动取款机(ATM),系统,中央计算机,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问

ATM系统的实体分析类

# 确定类的关联
1 初步确定关联
动词或动词词组;  
隐含关联;
与用户及领域专家讨论补充。
1.1 直接提取动词短语
ATM、中央计算机、分行计算机及柜员终端组成网络
总行拥有多台ATM
ATM设在主要街道上
分行提供分行计算机和柜员终端
柜员终端设在分行营业厅及储蓄所内
分行分摊软件开发成本
储户拥有账户
分行计算机处理针对账户的事务
分行计算机维护账户
柜员终端与分行计算机通信
柜员输入针对账户的事务
ATM与中央计算机交换关于事务的信息
中央计算机确定事务与分行的对应关系
ATM读现金兑换卡
ATM与用户交互
ATM吐出现金
ATM打印账单
系统处理并发的访问
1.2 需求陈述中隐含的关联
总行由各分行组成
分行保管账户
总行拥有中央计算机
系统维护事务日志
系统提供必要安全性
储户拥有现金兑换卡
1.3 根据问题域知识得出的关联
现金兑换卡访问账户
分行雇用柜员
2 筛选                                      
2.1 已删去类之间关联
删掉某候选类,与这个类有关的关联也删去,或重新表达
已删去“系统”、“网络”、“市”、“街道”、“成本”、“软件”、“事务日志”、“现金”、“营业厅”、“储蓄所”、“账单”候选类,关联也应删去:
ATM、中央计算机、分行计算机及柜员终端组成网络
ATM设在主要街道上
分行分摊软件开发成本
系统提供必要安全性
系统维护事务日志
ATM吐出现金
ATM打印账单
柜员终端设在分行营业厅及储蓄所内
2.2 与问题无关或与实现密切相关的关联删去
“系统处理并发的访问”
2.3 瞬时事件
“ATM读现金兑换卡”“ATM与用户交互”
“中央计算机确定事务与分行对应关系”隐含“中央计算机与分行通信”
2.4 三元关联
三个或三个以上对象关联,可分解为二元关联或限定关联。
“柜员输入针对账户的事务”分解成“柜员输入事务”和“事务修改账户”
“ATM与中央计算机交换关于事务的信息”隐含“ATM与中央计算机通信”和“在ATM上输入事务”这两个二元关联
3 进一步完善
3.1 正名
"分行提供分行计算机和柜员终端"改为"分行拥有分行计算机"和"分行拥有柜员终端"。
3.2 分解
把“事务”分解成“远程事务”和“柜员事务”。
3.3 补充    
需补充"柜员输入柜员事务"、"柜员事务输进柜员终端"、"在ATM上输入远程事务"和"远程事务由现金兑换卡授权"。
#划分主题
原始实体类图

划分主题后的实体类图

#确定属性
需求陈述中的名词
1 误把类当属性
独立存在更重要,则应为类。
2 误把链属性作为属性
属性要依赖某关联链存在,则为关联类的属性。
3 误把限定当属性
属性值固定下来可减少重数,则应为限定。
4 误把内部状态当属性
对象的非公开内部状态不作属性。
5 过于细化
忽略对大多数操作都没有影响的属性。
6 存在不一致属性
分解两个类。

加上属性的实体类图
(属性和类限定词的区别是什么?)

#识别继承
识别出继承关系的实体类图

#反复修改
1 分解“现金兑换卡”类
现金兑换卡有两独立功能:标志储户访问账号的权限;含有   分行代码和卡号的数据载体。(卡权限和现金兑换卡)
2“事务”由“更新”组成
更新包括取款、存款、查询。有自己属性(类型、金额),应独立存在。
3 合并“分行”和“分行计算机”
同理合并总行和总行计算机。

修改后的实体类图

建立动态模型

开发交互式系统,动态模型非常重要
步骤:
# 编写典型交互行为脚本
结合ATM系统的实例,介绍建立动态模型方法
脚本描述用户与目标系统间的一个或多个典型交互过程
1 正常情况脚本
ATM请储户插卡;储户插入一张现金兑换卡
ATM接受该卡并读它上面的分行代码和卡号
ATM要求储户输入密码;储户输入自己密码“1234”等数字
ATM请求总行验证卡号和密码;总行要求“39”号分行核对储户密码,通知ATM这张卡有效
ATM要求储户选择事务类型(取款、转账、查询等);储选择“取款”
ATM要求储户输入取款额;储户输人“880”
...
2 异常情况脚本
3 错误情况脚本
ATM请储户插卡;储户插入一张现金兑换卡
ATM接受该卡并读它上面的分行代码和卡号
ATM要求储户输入密码;储户误输入“8888”
ATM请求总行验证;总行向有关银行咨询后拒绝这张卡
ATM显示“密码错”,请用户重新输入密码;储户输入1234
ATM请总行验证后知道输入的密码正确
ATM请储户选择事务类型;储户选择“取款”
ATM询问用户取款额;储户不想取款,敲“取消”键
ATM退出现金兑换卡,请储户拿走;储户拿走
ATM请储户插卡
# 从脚本中提取事件及相关对象,用顺序图表达
从脚本提取所有外部事件,确定每类事件发送和接收对象。针对系统中的典型功能,画出顺序图
ATM用户取款顺序图

# 确定对象状态及状态间转换关系,用状态图描绘
用一张状态图描绘类的行为,集中考虑具有交互行为类。画出系统中重点类的状态图。
ATM类状态图

总行类状态图

分行类状态图

自动取款机(ATM)系统。相关推荐

  1. 虚拟自动取款机ATM设计(C语言)

    1.设计一个模拟自动取款机ATM,有常用的功能 2.常用的功能有:用户输入密码登录界面:取款界面:取款后的取款金额以及剩余显示,退出功能等等 3.程序执行的命令包括:(1)输入正确密码进入主登录页面 ...

  2. Eclipse+Java+Swing+Mysql实现自助存取款机(ATM)系统

    目录 一.系统介绍 1.开发环境 2.技术选型 3.系统功能 4.数据库 5.工程截图 二.系统展示 1.注册页面 2.登录页面 3.主页面 4.取款 5.存款 6.转账 7.余额查询 三.部分代码 ...

  3. 银行的atm是一台通用计算机,ATM自动取款机是不是所有银行通用的,要不...

    2018-08-09 18:37车广侠 客户经理 工行可以在农行ATM上进行查询的,不需要手续费用. 2007年04月20日 中行农行工行建行深发展宣布今日零点ATM跨行查询费取消 ●2007年4月6 ...

  4. MFC模拟自动取款机

    MFC模拟自动取款机 框架:MFC 语言:C++ ##(二)模拟自动取款机 1.问题描述 模拟银行的自动取款机ATM使用过程中的界面和用户交互过程. 2.基本要求 (1)模拟自动取款机的流程,实现查询 ...

  5. atm系统的用例模型_ATM自动取款机用例图.doc-_装配图网

    自动取款机用例图一.顾客与ATM机交互功能用例顾客插卡输密码存款取款查询余额修改密码转账缴费退卡打印凭条ATM机用例约束1.插卡用户和ATM自动取款机交互时,系统提示请插入磁卡,插入磁卡后,如果验证成 ...

  6. Java语言实现 ATM 自动取款机系统

    ATM自动取款机 ​​​ 实现 ATM 自动取款机系统,本系统有如下功能: 1.登陆    用户通过输入卡号和密码登陆本系统,如果输入错误,提示错误并重新输入,连续三次错误吞卡. 2.取款    系统 ...

  7. atm系统的用例模型_ATM自动取款机用例图

    自动取款机用例图 一.顾客与 ATM 机交互功能用例 用例约束: 1 .插卡:用户和 ATM 自动取款机交互时,系统提示请插入磁卡,插入磁卡后,如果验证成 功,进入登陆界面:否则退卡. 2 .输密码: ...

  8. 模拟atm取款机 php,C语言模拟ATM自动取款机系统

    C语言实验报告 题目名称:C语言模拟ATM自动取款机系统 一:问题描述: C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输 ...

  9. C语言ATM自动取款机系统项目的设计与开发

    文章目录 基于C语言的ATM自动取款机系统项目设计与开发 一.ATM自动取款机系统功能分析与介绍 二.开发ATM自动取款机系统的工具以及创建项目的过程 2.1.本项目使用Visual Studio 2 ...

最新文章

  1. LeetCode简单题之二叉树的最大深度
  2. python 底层原理_Python 探针实现原理
  3. Python for i in range ()用法详解
  4. 找出所有层级_数轴上的行程问题1:你的数学思维水平在哪一个层级?
  5. javaScript DOM编程常用的方法与属性
  6. 面向区块链的高效物化视图维护和可信查询论文学习
  7. 第二次作业python
  8. Python pip install 包后,pycharm仍然提示No module named(提示 No module named ‘pip‘)
  9. ASP.NET 4.0尚未在Web服务器上注册。您需要手动将Web服务器配置为使用ASP.NET,这样您的网站才能正确运行。...
  10. input type = submit 提交方式和用js的form.submit()有什么区别?
  11. android和emui的版本对应,同为Android 操作系统的小米MIUI和华为EMUI, 谁更优秀?
  12. 2014 北京区域赛 dp
  13. php 5分钟前,PHP实现时间轴函数(刚刚、5分钟前)
  14. c语言程序设计输出函数,输出函数C语言程序设计.pdf
  15. vmware workstation 14 密钥
  16. 【Ant Design Vue】封装导出Excel文件的功能模块到ele-pro-table
  17. android手机存储空间猛增,实测安卓升级到鸿蒙,可用内存增加半个G,存储空间增加6个G...
  18. 如何证明二元函数的连续性 可…
  19. 安卓期末大作业——Android小说阅读器
  20. Vue - 拖曳式可视化生成应用软件(适合迭代的基础架构、低代码平台)

热门文章

  1. 【转】中国正爆发聊天APP大战 未来或影响西方
  2. yaml语法 关于key为中文时的问题
  3. [何以解忧唯有颓废]老舒
  4. 新版本 印象笔记 markdown语法大全 !!!
  5. 应届毕业生到底有哪些优势呢
  6. 百度关键字排名的几个规则
  7. bootstrap 清楚浮动
  8. win7系统下安装win10教程
  9. while语句计算n的阶乘
  10. 面试js数组和object string点滴yan