模拟ATM系统 —— 用户存款、取款、转账、修改密码和销户功能
接着上一篇:
5.用户存款功能
分析:
*存款就是拿到当前账户对象
*然后让用户输入存款的金额
*调用账户对象的setMoney方法将账户余额修改成存钱后的余额
*存款后需要查询当前账户信息,确认是否存钱成功
把实现存款功能定义成一个独立的方法:depositMoney(acc,sc);
/**
* 存款
* @param acc 当前账户对象
* @param sc 扫描器
*/
private static void depositMoney(Account acc, Scanner sc) {
System.out.println("================用户存款操作=======================");
System.out.println("请您输入存款金额:");
double money = sc.nextDouble();
//更新账户余额:原来 + 存款
acc.setMoney(acc.getMoney() + money);
System.out.println("存款成功!当前账户信息如下:");
showAccount(acc);
}
6.用户取款功能
分析:
*取款需要先判断账户是否有余额
*有余额则拿到自己账户对象
*然后让用户输入取款金额
*判断取款金额是否超过了每次限额,已经余额是否足够
*满足要求则调用账户对象的setMoney方法完成金额的修改
/**
* 取款
* @param acc 当前账户对象
* @param sc 扫描器
*/
private static void drawMoney(Account acc, Scanner sc) {
System.out.println("================用户取款操作=======================");
//1、判断是否足够100元
if (acc.getMoney() < 100){
System.out.println("对不起,您当前账户的余额不足100元,不能取款!");
return; //跳出取款方法
}
//2、提示用户输入取款金额
System.out.println("请您输入取款金额:");
double money = sc.nextDouble();
//3、判断这个金额是否满足要求
if (money > acc.getQuotaMoney()){
System.out.println("对不起,您当前取款金额超过了每次限额,每次最多可取:"+acc.getQuotaMoney());
}else {
//没有超过限额
//4、判断是否超过当前账户的余额
if (money > acc.getMoney()){
System.out.println("对不起,您当前取款金额超过了总余额,您的总余额是:"+acc.getMoney());
}else {
//可以取款
System.out.println("恭喜您,取款"+money+"元,成功!");
//更新余额
acc.setMoney(acc.getMoney() - money);
//取款结束
showAccount(acc);
return; //跳出取款方法
}
}
}
7.用户转账功能
分析:
*转账功能需要判断系统中是否有2个账户对象及以上
*同时还要判断自己当前账户是否有余额
*接下来输入对方卡号,判断对方卡号是否存在
*对方账户还需要认证对方户主的姓氏
*满足要求则可以把自己账户对象的金额修改到对方账户对象中去
把实现转账功能定义成一个独立的方法:transferMoney(sc,acc,accounts);
/**
* 转账功能
* @param sc 扫描器
* @param acc 自己的账户对象
* @param accounts 全部账户集合
*/
private static void transferMoney(Scanner sc, Account acc, ArrayList<Account> accounts) {
System.out.println("================用户转账操作=======================");
//1、是否有2个账户
if (accounts.size() < 2){
System.out.println("当前系统中,不足2个账户,请先去开户!");
return; // 退出转账方法
}
//2、判断自己当前账户是否有余额
if (acc.getMoney() == 0){
System.out.println("对不起,您没有余额,不能转账!!");
return; // 退出转账方法
}
while (true) {
//3、真正开始转账
System.out.println("请您输入对方账户的卡号:");
String cardId = sc.next();
//卡号不能是自己的卡号
if (cardId.equals(acc.getCarId())){
System.out.println("对不起,您不能给自己账户进行转账!!");
continue; //结束当次执行
}
//判断卡号是否存在,根据卡号去查询对方账户对象
Account account = getAccountByCardId(cardId, accounts);
if (account == null){
System.out.println("对不起,您输入的对方账户不存在!");
}else {
//这个账户对象存在,继续认证姓氏
String userName = account.getUserName(); //阳阳 从第二位开始截取,不能用替换
String tip = "*" + userName.substring(1);
System.out.println("请您输入【"+tip+"】的姓氏");
String preName = sc.next();
//认证姓氏是否输入正确
if (userName.startsWith(preName)){ //姓氏是否以preName开头
//认证通过,正式开始转账
while (true) {
System.out.println("请输入转账金额:");
double money = sc.nextDouble();
//判断余额舒服足够
if (money > acc.getMoney()){
System.out.println("对不起,您的余额不足,最多可以转账:"+acc.getMoney());
}else {
//余额足够,可以转账
acc.setMoney(acc.getMoney() - money);
account.setMoney(account.getMoney() + money);
System.out.println("转账成功!您的余额为:"+acc.getMoney());
return; //跳出转账方法
}
}
}else {
System.out.println("对不起,您输入的姓氏有误!");
}
}
}
}
8.用户修改密码、注销账号功能
分析:
*修改密码就是当前对象的密码属性使用set方法进行更新
*销户就是从集合对象中删除当前对象,并且回到首页
把修改密码功能定义成一个独立的方法:updatePassWord(sc,acc);
在销户过程中,为了更严谨要询问用户是否确定销户,所以把销户功能也定义成一个方法:deleteAccount(acc,sc,accounts);
/**
* 注销账户功能
* @param acc 当前账户对象
* @param sc 扫描器
* @param accounts 全部账户集合
*/
private static boolean deleteAccount(Account acc, Scanner sc, ArrayList<Account> accounts) {
System.out.println("================用户销户操作=======================");
System.out.println("您真的要销户吗? y/n");
String re = sc.next();
switch (re){
case "y":
//真正销户
//从当前账户集合中,删除当前账户对象,注销就完成了
if (acc.getMoney() > 0){
System.out.println("您的账户还有余额,不允许销户!!");
}else {
accounts.remove(acc);
System.out.println("您的账户销户成功!");
return true; //销户成功
}
break;
default:
System.out.println("好的,您的账户继续保留!");
}
return false; //继续保留
}
/**
* 修改密码
* @param sc 扫描器
* @param acc 当前登录成功的账户对象
*/
private static void updatePassWord(Scanner sc, Account acc) {
System.out.println("================用户修改密码操作=======================");
while (true) {
System.out.println("请输入当前账户的密码:");
String passWord = sc.next();
//1、判断密码是否正确
if (acc.getPassWord().equals(passWord)){
while (true) {
//密码正确
//2、输入新密码
System.out.println("请您输入新密码:");
String newPassword = sc.next();
System.out.println("请您输入确认密码:");
String okPassword = sc.next();
if (newPassword.equals(okPassword)) {
//两次密码输入正确
acc.setPassWord(newPassword);
System.out.println("恭喜您,您的密码修改成功!");
return; // 跳出该方法
}else {
System.out.println("对不起,您输入的2次密码不一致!");
}
}
}else {
System.out.println("您输入的密码不正确!");
}
}
}
模拟ATM系统 —— 用户存款、取款、转账、修改密码和销户功能的更多相关文章
- 转载:mysql添加用户、删除用户、授权、修改密码
mysql添加用户.删除用户.授权.修改密码等 MySql中添加用户,新建数据库,用户授权,删除用户,修改密码1.新建用户. //登录MYSQL @>mysql -u root -p @> ...
- Linux进入单用户模式(passwd root修改密码)
进入单用户模式——passwd root修改密码 1.在grub 页面输入a,进入修改内核模式 2.在内核的结尾“/”,输入空格,在输入single,回车 3.启动系统,进入单用户模式 4.Passw ...
- mysql 创建用户、授权、修改密码
以下操作都要在mysql所在机器操作 一.创建用户 CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456'; 或 insert into mysql. ...
- mysql 创建用户与授权、修改密码
mysql版本:5.6.35 1.创建用户 #foo表示你要建立的用户名,后面的123表示密码, #localhost限制在固定地址localhost登陆 CREATE USER foo@localh ...
- mysql-管理命令【创建用户、授权、修改密码、删除用户和授权、忘记root密码】
一.创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 关键参数说明: username - 创建登录用户名, host ...
- mongodb查看操作记录方法以及用户添加删除权限修改密码
前一阵跑程序时发现一个问题,同事导出了部分数据,但是在merge回原库时竟然和原库的数据对不上,后来找了半天发现是原库数据少了. 找了很多资料发现很多人认为的操作日志和我想的不太一样...找了半条才发 ...
- MySql增加用户、授权、修改密码等语句
1. mysql 增加新用户: insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) value ...
- 查看centos中的用户和用户组和修改密码
查看centos中的用户和用户组 1.用户列表文件: vim /etc/passwd/ 2.用户组列表文件: vim /etc/group 3.查看系统中有哪些用户: cut -d : -f /etc ...
- linux中防止黑客进入单用户模式进行强制修改密码窃取数据
如何防止别人恶意通过单用户系统破解root密码,进入系统窃取数据? 给grub加密,不让别人通过grub进入单用户. 当前系统:CentOS Linux release 7.6.1810 (Core) ...
- 用数据库管理SERV-U的用户时,如何修改密码及原理
将serv-u设置成数据库管理用户的前提是先要建立数据源 如何用Serv-U连接ODBC|1.可以在 FTP所在服务器安装一个 SQL Server 数据库,也可以使用论坛自带的数据库.建议在 FT ...
随机推荐
- 2023 年 dotnet 仓库社区年度调查已经开始
准备好今年对 dotnet 指手画脚了吗,平常在群里我忍气吞声,今天我必须重拳出击,快来参与吧. 我直接一个参的加 .NET 是一个跨平台的开发框架,支持多种语言和应用场景,如 C#.F#.VB.NE ...
- 使用vscode调试ros
https://blog.csdn.net/u012254599/article/details/106143540/ CMakeLists.txt set(CMAKE_BUILD_TYPE &quo ...
- Spring(AOP的认识、实现)
2:Spring AOP AOP (Aspect Oriented Programming) 面向切面编程 OOP(Object Oriented Programming)面向对象编程,用对象的思想来 ...
- ASP.NET Core - 依赖注入(一)
1. Ioc 与 DI Ioc 和DI 这两个词大家都应该比较熟悉,这两者已经在各种开发语言各种框架中普遍使用,成为框架中的一种基本设施了. Ioc 是控制反转, Inversion of Contr ...
- 【python自动化测试】1- python基础和pycharm使用
python基础和pycharm使用 1.pycharm 1.1 为特定格式文件添加头信息 File--Settings--Editor--File and Code Templates--Pytho ...
- JZOJ 2022.07.06【提高组A】模拟
历程 被暴打了 原因是钻进了 \(T4\) 的坑中... 先看完题,发现 \(T4\) 比较有意思,\(T2\) 没有想法 \(T3\) 挺容易,做法似乎很好想 \(T1\) 送分,十几分钟搞定 然后 ...
- 内网安全之:Windows系统帐号隐藏
Windows系统帐号隐藏 目录 Windows系统帐号隐藏 1 CMD下创建隐藏账户 2 注册表创建隐藏账户 3 利用工具隐藏账户 1 CMD下创建隐藏账户 CMD下创建隐藏账户 net user ...
- 益赛普等TNFi持续治疗强直性脊柱炎的长期疗效观察(≥3年)
北大深圳医院风湿免疫科在2021年发表了益赛普等TNFi持续治疗强直性脊柱炎的长期(≥3年)疗效观察[1]. 入排条件严苛,坚持随访不容易 观察对象是2009-2019年间就诊于该科室的AS患者,需有 ...
- node、mongodb、服务器相关
1.CentOs搭建NodeJs服务器-Mongodb安装 2.如何将 node+mongodb 项目部署在服务器上 3.如何通过cmd开一个本地服务器 4.如何部署一个本地的web项目到服务器-搭建 ...
- Ubuntu docker安装、验证、卸载
卸载Docker CE 卸载Docker CE软件包: sudo apt-get purge docker-ce 主机上的图像,容器,卷或自定义配置文件不会自动删除.要删除所有图像,容器和卷: sud ...