模拟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 ...
随机推荐
- springcloud-alibaba
1.spring cloud alibaba官网 https://spring.io/projects/spring-cloud-alibaba#overview 2.spring cloud ali ...
- Listen 1音乐播放器
Listen 1 Listen 1可以搜索和播放来自网易云音乐,QQ音乐,酷狗音乐,酷我音乐,Bilibili,咪咕音乐网站的歌曲,让你的曲库更全面.还支持歌单功能,你可以方便的播放,收藏和创建自己的 ...
- 集合类再探:不可变类的好处,Collector接口详解,使用内部迭代
集合类再探 注:本文使用的pom依赖见文末. 集合类的基础 - Iterable.Iterator java语言层面支持对实现了Iterable接口的对象使用for-each语句.Iterator可以 ...
- OpenSCAD:一款用于创建实体3D CAD对象的软件
推荐:使用 NSDT场景设计器 快速搭建 3D场景. 原文链接:https://www.mvrlink.com/openscad/ OpenSCAD是一个用于创建实体3D CAD对象的软件.它是免费软 ...
- select加下拉箭头
<div class="flex"> <label>城市</label> <div class="dealerbo"& ...
- LeetCode-2013 检测正方形
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/detect-squares 题目描述 给你一个在 X-Y 平面上的点构成的数据流.设计一个满足下 ...
- 从0搭建Vue3组件库(三): 组件库的环境配置
本篇文章将在项目中引入 typescript,以及手动搭建一个用于测试组件库组件 Vue3 项目 因为我们是使用 Vite+Ts 开发的是 Vue3 组件库,所以我们需要安装 typescript.v ...
- 问题集锦 ~ javascript
#使用PHP输出json数据给js变量 SyntaxError: unexpected token: identifier const data = <?php echo json_encode ...
- containerd.service containerd-1.6.8-linux-amd64.tar.gz cni-plugins-linux-amd64-v1.1.1.tgz 标准文件下载
配置K8S时 可能会用到#systemcd来管理containerd,这https://raw.githubusercontent.com/containerd/containerd/main/con ...
- 2021.09 ccf csp 第四题 收集卡牌
2021.09 ccf csp 第四题 收集卡牌 思路 这题如果直接计算,因为不同的分类种数太多,枚举所有的分类情况是一个几乎不可能的复杂任务. 但不同摸牌次数,不同已摸出牌种类的子问题的答案之间,具 ...