模拟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 ...
随机推荐
- python将一行多字符转换为多行单字符方法
笔者这次是第一次写东西,主要是想把在运用中的一些实例给记录下来,分享给那些和笔者有同样需求的人.可能分享的方法有些累赘或者不准确,还望各位大佬勿喷,因为笔者也是python小白,这些都是通过搜索汇总得 ...
- sqlite3数据库Linux 系统移植和使用
sqlite3数据库是一个小型的数据库,当数据量不大,要求不是特别高的时候,是个不错的选择. 在Linux上移植和使用也非常的方便. 本示例是在硬件全志r528 .linux5.4 上验证的. 移植操 ...
- 结合ChatGPT体验新必应new bing 的惊喜:这是我第一次使用的感受
前言 最近相信大家都被 ChatGPT 刷屏了,它的爆火大家是有目共睹的,微软的新必应(New Bing) 是结合了比 ChatGPT 更强大的新一代 OpenAI 语言模式,接下来我们一起来&quo ...
- 如何在 JavaScript 中使用媒体查询
前言 说起媒体查询想必大家最先想到的都是CSS中@media,没错,这是我们最常用的媒体查询方法,主要用来为我们的网站做适配处理. 比如: h1 { font-size: 2rem; color: g ...
- jquery获得标签元素
一.根据元素name值获取元素 $("元素[name="name的值"]"); 例子:1.$("a[name="apoint"]& ...
- mysql 数据库的一些参数,常用模版和调优方式
innodb_buffer_pool_size :这个参数是Mysql数据库最重要的参数之一,表示InnoDB类型的 表 和索引的最大缓存 .它不仅仅缓存 索引数据 ,还会缓存 表的数据 .这个值越大 ...
- 【Redis的三种数据删除策略】定时定期惰性,超出内存就自动清理
https://blog.csdn.net/DQWERww/article/details/126453008 https://blog.csdn.net/qq_38056518/article/de ...
- 解决scroll中addEventListener不生效的问题
这样写会出现一个情况,滚动的时候不打印任何值,并没有进入具体方法 但是下面这种方法 加一个true就会打印出相应的值
- vue中当数据改变时更新DOM
具体场景: 当vue中使用swiper, better-scroll时候,我们需要去new Swiper,new [better-scroll]来获取实例,通常我们页面的数据都是异步获取的, 会导致我 ...
- php 实现CURL请求接口
$ch = curl_init (); //初始化 @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 @curl_setopt($ ...