ATM柜员机的设计与实现
-
项目背景
ATM柜员机系统在银行业务流程当中起着承上启下的作用,其重要性不言而喻。但是,目前许多银行在具体的一些业务流程处理过程中仍然使用手工操作的方式来实施,费时、费力,效率低下,而且无法达到理想的效果。然而 ATM自动取款功能不带为银行节省大量财力人力,还为广大城市用户带来便捷。ATM柜员机系统向用户提供一个方便、简单、随时随地可以存取款的现代计算机化的网络系统。可以大大减少工作人员摩羯月人力资源的开销,同时由于手续程序减少也可以减轻业务员的工作负担,有效地提高了整体的工作效率和精确度,减少了用户办理业务的等待时间。为此,我们开发了这个系统。
2 ATM柜员机系统分析
2.1 需求描述
2.1.1ATM柜员机介绍
2.1.2 基本目标
ATM柜员机主要是由各个实体窗口组成,它是由登录页面、选择服务、存款、取款、查询余额、修改密码以及查看交易记录等功能。它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求,让用户在电脑上可以轻松体验ATM取款机的使用流程,以达到易学易用的效果,避免用户在真实的ATM机上出现失误,带来不必要的损失。
2.1.3 经济目标
2.1.4 可行性研究所采用的方法
2.1.5 设计目标
2.1.6 设计及约束条件
a. ATM面向客户十分广泛,所以界面设计要力求简单明了,只要认识汉字并具备实际行动能力的人,就可以顺利进行操作,对于用户输入的数据,系统能进行严格的数据检验,尽可能的排除人为地错误。
b. 开发人员应具备相应的开发能力,懂C++ 与java编程,小组成员能够根据计划的要求,按时完成系统的每一部分,保证后面的开发进程可以顺利进行。但根据现有条件和知识,我们还得在技术方面进行学习和提高。
2.1.7 工作原理
a. 先建立数据库且追建数据库的驱动程序。
b. 在使用时,分为后台管理和前台操作。
c. 用户输入账户基本信息进行登录,然后方能进行下一步操作 。
2.2 需求分析
2.1.1 系统功能概述
A.主要对象
B.主要功能
(1)取款功能:用户按照系统输入要求输入取款金额即可取出相应金额的现金。
(2)查询余额功能:用户可以查看账户所剩现金余额。
(3)修改密码功能:如果用户想要修改当前密码,通过系统可以设置新密码。
(4)转账功能:用户可以通过该功能将自己账户上的金额转到其他账户。
首先,ATM要求用户输入密码,接下来ATM把从银行卡上读到的信息以及用户输入的密码传给ATM自动取款机系统,系统通过于数据库中的信息进行核对,如果密码正确ATM就要求用户选择事务类型(取款、查询等),直至用户选择退出应用服务,询问用户是否退出银行卡结束服务,如果用户选择结束,则退出银行卡,系统重回登陆界面。
C. 相关界面
(1)登录界面:
在整个的系统中,首先用户要输入正确用户登录密码以后才可以进入主界面进行相关的操作。
(2)主界面:
当用户输入正确的用户密码以后,出现主界面,包括以下的一些功能:
a) 主界面有“查询余额”“取款”“转账”“修改密码”等功能选项。
b) 主界面中还有“退卡”功能选项,即退出系统服务。
(3)取款界面:
a) 首先你可以输入取款的金额,输入的必须为50倍数的数字,否则系统会提示输入的金额错误,请重新输入。如果屏幕上有便捷提示,比如:1000、800、500等。如果上边有你想要取款的金额,你可以按相对应的按键就可以了,如果没有,你再找一个 “其他金额”按下之后,就可以自由输入自己想取的金额了,输入金额之后,按“确认”,即完成取款功能。
b) 正确输入取款的金额后,直接取款,会再次确认你取款的金额,“是”即可以取出取款机吐出的现金,并且数据更新到相关的数据库文件中,以便以后查询。
(4)余额查询界面:
在主界面中余额查询功能选项,就会弹出余额的窗口。
(5)修改密码界面
在主界面中修改密码功能选项,进入修改密码功能界面,系统要求首先输入旧密码,再输入写密码,并对新密码进行第二次确认,全部输入正确修改功能完成。
(6)转账界面:
当转账功能选项,会出现转账的界面,这时就可以进行转账;分别输入转入的账户和转入的金额,直接转入。若转入过程中出错会有相关的提示的操作。
2.1.2 系统用例规约描述
1).取款的用例规约
用例名称:ATM取款
简述:客户持银行卡(本行或其他行)从ATM提取现金
actors:客户和银行主机
基本流:
1.客户插入银行卡。
2.ATM从银行卡读入卡号(含银行标识和账号),验证卡的有效性。
3.客户输入密码。
4.ATM验证帐号和密码。
5.ATM显示包括取款在内的服务功能,客户选择“取款”。
6.输入取款额:客户输入数量为50的倍数的取款额。
7.ATM向银行主机通知卡号、密码、账号和取款额,获得含有最新余额的取款成功确认信息。
8.ATM打印并吐出凭条。
9.ATM清点并吐出现金,记录取款成功。
10.ATM询问客户是否继续服务。
11.客户选择否,ATM吐出银行卡,结束用例,否则回到步骤5。
备选流:
1. 客户取消服务:
ATM记录服务取消,打印凭条,吐出凭条和银行卡,[用例失败]
2. 客户未及时输入超过30秒:
ATM吞卡,[用例失败]
3. 卡无效:
ATM吞卡,[用例失败]
4. 读卡器或卡被损坏:
ATM吞卡,[用例失败]
5. 密码错:
5.1客户重新输入密码
5.2累计3次密码错误:ATM吞卡,[用例失败]
6. 无此帐号:ATM吞卡,[用例失败]
7. ATM无现金:ATM不显示“取款”功能,客户可选择其他服务, [用例失败]
8. 取款额超过ATM现金余额:ATM要求客户重新输入取款额。
9. 帐户余额不足:ATM要求客户重新输入取款额。
10. 取款额超过当日最高限额:ATM要求客户重新输入取款额。
11. 网络或银行主机失效、通讯超时:ATM记录服务取消,打印凭条,吐出凭条和银行卡,[用例失败]
12. 凭条打印失败,纸用完或卡纸:
12.1 ATM通知银行主机取消取款
12.2 ATM记录服务取消,吐出银行卡,[用例失败]
13. 吐现金失败:
13.1 ATM通知银行主机取消取款
13.2 ATM记录服务取消,吐出银行卡,[用例失败]
14. 客户未及时取走卡:ATM吞卡,[用例失败]
业务规则:
2). 转账的用例规约
名称:ATM转账
简述:客户持银行卡(本行)从ATM可以将卡内金额转至其他有效银行卡账户中
actors:客户和银行主机
基本流:
1.客户插入银行卡。
2.ATM从银行卡读入卡号(含银行标识和账号),验证卡的有效性。
3.客户输入密码。
4.ATM验证帐号和密码。
5.ATM显示包括取款在内的服务功能,客户选择“转账”。
6.输入转账金额。
7.ATM向银行主机通知卡号、密码、账号和取款额,获得含有最新余额的转账成功确认信息。
8.ATM打印并吐出凭条。
9.记录转账成功。
10.ATM询问客户是否继续服务。
11.客户选择否,ATM吐出银行卡,结束用例,否则回到步骤5。
[用例结束]
备选流:
1. 客户取消服务:ATM记录服务取消,打印凭条,吐出凭条和银行卡,[用例失败]
2. 客户未及时输入超过30秒:ATM吞卡,[用例失败]
3. 卡无效:ATM吞卡,[用例失败]
4. 读卡器或卡被损坏:ATM吞卡,[用例失败]
5. 密码错:
5.1客户重新输入密码
5.2累计3次密码错误:ATM吞卡,[用例失败]
6. 无此帐号:ATM吞卡,[用例失败]
7.帐户余额不足:ATM要求客户重新输入转账金额。
8.转账额超过当日最高限额:ATM要求客户重新输入转账金额。
9.网络或银行主机失效、通讯超时:ATM记录服务取消,打印凭条,吐出凭条和银行卡,[用例失败]
10.凭条打印失败,纸用完或卡纸:
10.1 ATM通知银行主机取消取款
10.2 ATM记录服务取消,吐出银行卡,[用例失败]
1. 单日转账不得超过50000
2. 本地本行转账免费
3. 本地异行转账+5每笔
2.1.3用例模型
系统Use-Case模型:
2.1.3 活动图
验证密码活动图:
查询信息活动图:
存款活动图:
取款活动图:
转账活动图:
2.1.4 顺序图
取款顺序图:
转账顺序图:
3 网上书店系统设计
3.1 体系结构的设计
(1)本系统使用java语言进行编写,数据库使用MySQL,采用面向对象的设计方法,使用C/S体系结构。
- 模块的层次关系(采用结构图描述),包含结构图中每个模块的简单说明
面向对象的包图:
3.2 详细设计
面向对象的方法描述格式:
3.2.1管理员类,进行账号密码的管理。
3.2.2 业务明细,记录客户行为
3.3.3 顾客类,记录顾客信息及行为。
3.3 数据库设计
3.3.1 数据库的概要模型
3.3.2 数据库的关系模型
管理员:管理员名称,密码,创建时间,修改时间,备注
用户:持卡人,手机号码, 身份证号, 银行卡号, 密码, 余额, 银行卡状态,
创建时间, 修改时间, 备注
明细: 持卡人id, 持卡人id, 金钱, 创建时间, 备注
3.3.3 数据库的物理模型
1manager.(管理员) |
|||||
字段 |
类型 |
长度 |
描述 |
是否为主键 |
是否允许为空 |
id |
int |
11 |
主键 |
是(自增) |
否 |
name |
char |
50 |
管理员名称 |
|
否 |
password |
tinyint |
1 |
密码 |
|
否 |
createtime |
varchar |
30 |
创建时间 |
|
否 |
updatetime |
varchar |
10 |
修改时间 |
|
否 |
description |
varchar |
255 |
备注 |
|
|
2.custom(用户) |
|||||
字段 |
类型 |
长度 |
描述 |
是否为主键 |
是否允许为空 |
id |
int |
11 |
主键 |
是(自增) |
否 |
name |
char |
50 |
持卡人 |
|
否 |
phone |
char |
12 |
手机号码 |
|
否 |
identity_card |
varchar |
20 |
身份证号 |
唯一键 |
否 |
card |
char |
1 |
银行卡号 |
唯一键 |
否 |
password |
tinyint |
1 |
密码 |
|
否 |
balance |
float |
11 |
余额 |
|
否 |
state |
varchar |
30 |
银行卡状态 |
|
否 |
createtime |
varchar |
30 |
创建时间 |
|
否 |
updatetime |
varchar |
10 |
修改时间 |
|
否 |
description |
varchar |
255 |
备注 |
|
|
3.detail(明细表) |
|||||
字段 |
类型 |
长度 |
描述 |
是否为主键 |
是否允许为空 |
id |
int |
11 |
主键 |
是(自增) |
否 |
custom_id |
int |
11 |
持卡人id |
|
否 |
business |
char |
50 |
业务描述 |
|
否 |
money |
float |
11 |
金钱 |
|
否 |
createtime |
varchar |
30 |
创建时间 |
|
否 |
description |
varchar |
255 |
备注 |
|
|
4 ATM柜员机系统实现
4.1 编码
(1)登录
功能介绍;登录到ATM柜员机系统。
功能界面实现的图;
功能实现的主要代码;
try { if (loginInfo == null || StringUtil.isEmpty(loginInfo.getCard()) || !StringUtil.isBankPassword(loginInfo.getPassword())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 用户登录"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 用户登录"); } return logServiceImpl.login(loginInfo, request); } catch (Exception e) { logger.error("用户登录error: ", e); return BaseResult.error(ErrorCode.ExceptionRetCode, ErrorCode.ExceptionRetInfo + ", 用户登录"); } }
(2)取款
功能界面实现的图;
功能实现的主要代码;
String card = null; try { card = (String) request.getSession().getAttribute("card"); } catch (Exception e) { logger.error(ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); return BaseResult.error(ErrorCode.IllegalAccessExceptionRetCode, ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); } if (customMoney == null || customMoney.getMoney() == null) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 取款"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 取款"); } if (customMoney.getMoney() < 0 || customMoney.getMoney() > 5000 || customMoney.getMoney() % 100 != 0) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 取款, 取款金额不符合规定"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 取款, 取款金额不符合规定"); } return customServiceImpl.updateCustomWithdrawal(card, customMoney); }
(3)存款
功能界面实现的图;
功能实现的主要代码;
String card = null; try { card = (String) request.getSession().getAttribute("card"); } catch (Exception e) { logger.error(ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); return BaseResult.error(ErrorCode.IllegalAccessExceptionRetCode, ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); } if (customMoney == null || customMoney.getMoney() == null) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 存款"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 存款"); } if (customMoney.getMoney() < 0 || customMoney.getMoney() % 100 != 0) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 存款, 存款金额不符合规定"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 存款, 存款金额不符合规定"); } return customServiceImpl.updateCustomDeposit(card, customMoney);
4.2 系统测试
主要模块的测试过程,如:
用例名称 |
登录改密测试 |
用例编号 |
Test-01 |
|||
项目名称 |
ATM自动存取款系统 |
编号/版本 |
1.0 |
|||
参考信息 |
参考代码 |
|||||
测试目的 |
测试登录与改密系统是否完善 |
|||||
环境要求 |
需连入内网 |
|||||
步骤 |
操作描述 |
预计输出 |
实际输出 |
是否通过 |
||
1 |
进入ATM自动存取款系统主页 |
成功打开界面 |
打开界面成功 |
是 |
||
2 |
输入客户的帐号密码登录系统 |
登陆成功 |
登陆成功 |
是 |
||
3 |
修改密码之后进入修改密码页面 |
进入成功且能修改密码 |
成功进入页面并且修改密码成功 |
是 |
||
4 |
忘记密码之后进入找回密码界面 |
输入客户的信息来找回客户的密码 |
密码找回成功 |
是 |
||
用例名称 |
存取款系统验证 |
用例编号 |
Test-02 |
|||
项目名称 |
ATM自动存取款系统 |
编号/版本 |
1.0 |
|||
参考信息 |
参考代码 |
|||||
测试目的 |
测试系统的存取款功能是否能够正确执行 |
|||||
环境要求 |
需连入内网 |
|||||
步骤 |
操作描述 |
预计输出 |
实际输出 |
是否通过 |
||
1 |
进入ATM自动存取款系统主页 |
成功打开界面 |
打开界面成功 |
是 |
||
2 |
输入客户的帐号密码登录系统 |
登陆成功 |
登陆成功 |
是 |
||
3 |
存款按键然后输入100的倍数来存款 |
进入页面成功并且存款成功 |
存款成功 |
是 |
||
4 |
取款按键然后输入100的倍数来取款 |
进入页面成功并且取款成功 |
取款成功 |
是 |
||
5 |
查询按键查看自己的余额 |
进入成功并且成功显示余额 |
显示余额成功 |
是 |
||
附录:( 附程序源代码(主要功能模块的源代码))
用户登录 if (loginInfo == null || StringUtil.isEmpty(loginInfo.getCard()) || !StringUtil.isBankPassword(loginInfo.getPassword())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 用户登录"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 用户登录"); } return logServiceImpl.login(loginInfo, request); 用户退出 HttpSession session = request.getSession(); session.setAttribute("card", null); logger.info("用户退出, 成功"); return BaseResult.success(); /* * 添加用户 * * @param addCustom * @return */ @ResponseBody @RequestMapping(value = { "/addCustom" }, method = { RequestMethod.POST }) public BaseResult addCustom(@RequestBody CustomInfo customInfo) { try { if (customInfo == null || StringUtil.isEmpty(customInfo.getName()) || !StringUtil.isPhone(true, customInfo.getPhone()) || !StringUtil.isIdentityCard(customInfo.getIdentityCard()) || !StringUtil.isBankPassword(customInfo.getPasswordOne()) || !StringUtil.isBankPassword(customInfo.getPasswordTwo())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 添加用户"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 添加用户"); } // 判断两次输入的密码是否相等 if (!customInfo.getPasswordOne().equals(customInfo.getPasswordTwo())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 添加用户, 两次输入密码不等"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 添加用户, 两次输入密码不等"); } return customServiceImpl.addCustom(customInfo); } catch (Exception e) { logger.error("添加用户error: ", e); return BaseResult.error(ErrorCode.ExceptionRetCode, ErrorCode.ExceptionRetInfo + ", 添加用户"); } } 查询余额 try { // 获取卡号 String card = null; try { card = (String) request.getSession().getAttribute("card"); } catch (Exception e) { logger.error(ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); return BaseResult.error(ErrorCode.IllegalAccessExceptionRetCode, ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); } return customServiceImpl.selectCustomBalance(card); catch (Exception e) { logger.error("查询余额error: ", e); return BaseResult.error(ErrorCode.ExceptionRetCode, ErrorCode.ExceptionRetInfo + ", 查询余额"); } } 取款 // 获取卡号 String card = null; try { card = (String) request.getSession().getAttribute("card"); } catch (Exception e) { logger.error(ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); return BaseResult.error(ErrorCode.IllegalAccessExceptionRetCode, ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); } if (customMoney == null || customMoney.getMoney() == null) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 取款"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 取款"); } if (customMoney.getMoney() < 0 || customMoney.getMoney() > 5000 || customMoney.getMoney() % 100 != 0) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 取款, 取款金额不符合规定"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 取款, 取款金额不符合规定"); } return customServiceImpl.updateCustomWithdrawal(card, customMoney); } 存款 // 获取卡号 String card = null; try { card = (String) request.getSession().getAttribute("card"); } catch (Exception e) { logger.error(ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); return BaseResult.error(ErrorCode.IllegalAccessExceptionRetCode, ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); } if (customMoney == null || customMoney.getMoney() == null) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 存款"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 存款"); } if (customMoney.getMoney() < 0 || customMoney.getMoney() % 100 != 0) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 存款, 存款金额不符合规定"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 存款, 存款金额不符合规定"); } return customServiceImpl.updateCustomDeposit(card, customMoney); 转账 // 获取卡号 String card = null; try { card = (String) request.getSession().getAttribute("card"); } catch (Exception e) { logger.error(ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); return BaseResult.error(ErrorCode.IllegalAccessExceptionRetCode, ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); } if (customTransfer == null || customTransfer.getMoney() == null || StringUtil.isEmpty(customTransfer.getToCard())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 转账"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 转账"); } if (customTransfer.getMoney() < 0 || customTransfer.getMoney() % 100 != 0) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 转账, 转账金额不符合规定"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 转账, 转账金额不符合规定"); } return customServiceImpl.updateCustomTransfer(card, customTransfer); 根据旧密码修改密码 // 获取卡号 String card = null; try { card = (String) request.getSession().getAttribute("card"); } catch (Exception e) { logger.error(ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); return BaseResult.error(ErrorCode.IllegalAccessExceptionRetCode, ErrorCode.IllegalAccessExceptionRetInfo + ", 查询余额"); } if (customPassword == null || !StringUtil.isBankPassword(customPassword.getPassword()) || !StringUtil.isBankPassword(customPassword.getPasswordOne()) || !StringUtil.isBankPassword(customPassword.getPasswordTwo())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 根据旧密码修改密码"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 根据旧密码修改密码"); } // 判断两次输入的密码是否相等 if (!customPassword.getPasswordOne().equals(customPassword.getPasswordTwo())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 根据旧密码修改密码, 两次输入密码不等"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 根据旧密码修改密码, 两次输入密码不等"); } return customServiceImpl.changeCustomPasswordByPassword(card, customPassword); 根据信息修改密码 if (customInfo == null || StringUtil.isEmpty(customInfo.getName()) || StringUtil.isEmpty(customInfo.getCard()) || !StringUtil.isPhone(true, customInfo.getPhone()) || !StringUtil.isIdentityCard(customInfo.getIdentityCard()) || !StringUtil.isBankPassword(customInfo.getPasswordOne()) || !StringUtil.isBankPassword(customInfo.getPasswordTwo())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 根据信息修改密码"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 根据信息修改密码"); } // 判断两次输入的密码是否相等 if (!customInfo.getPasswordOne().equals(customInfo.getPasswordTwo())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 根据信息修改密码, 两次输入密码不等"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 根据信息修改密码, 两次输入密码不等"); } return customServiceImpl.changeCustomPasswordByInfo(customInfo); 锁定用户卡 if (customCard == null || StringUtil.isEmpty(customCard.getCard())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 锁定用户卡"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 锁定用户卡"); } return customServiceImpl.changeCustomStateToLock(customCard); 解锁用户卡 if (customCard == null || StringUtil.isEmpty(customCard.getCard())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 解锁用户卡"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 解锁用户卡"); } return customServiceImpl.changeCustomStateToUnlock(customCard); 销户 if (customCard == null || StringUtil.isEmpty(customCard.getCard())) { logger.error(ErrorCode.ParaCheckErrorRetInfo + ", 销户"); return BaseResult.error(ErrorCode.ParaCheckErrorRetCode, ErrorCode.ParaCheckErrorRetInfo + ", 销户"); } return customServiceImpl.deleteCustomByCard(customCard);
今天的文章 ATM柜员机的设计与实现分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/104273.html