package com.ysc;
/**
* Created with IntelliJ IDEA.
* User: yuyuyu
* Date: 2022/4/12.
* Time: 22:31.
* To change this template use File | Settings | File Templates.
* @author 86182
*/
//import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
* 实现ATM系统的类
*/
public class ATMSystem {
public static void main(String[] args) {
//1.定义账户类
//2.定义一个集合容器,负责以后存储全部的账户对象,进行相关的业务操作。
ArrayList<Account> accounts = new ArrayList<Account>();
Scanner sc = new Scanner(System.in);
//3.展示系统的首页
while (true) {
System.out.println("===============================欢迎使用ATM系统===============================");
System.out.println("1.账户登录");
System.out.println("2.账户开户");
System.out.println("请选择操作:");
int command = sc.nextInt();
switch (command) {
case 1:
//账户登录
login(accounts, sc);
break;
case 2:
//账户开户
register(accounts, sc);
break;
default:
System.out.println("输入错误,请重新输入!");
}
}
}
/**
* 账户登录
*
* @param accounts 全部账户的集合
* @param sc 扫描器
*/
private static void login(ArrayList<Account> accounts, Scanner sc) {
System.out.println("======================系统登录操作=========================");
//1.判断账户集合中是否存在账户,如果不存在,提示用户。
if (accounts.size() == 0) {
System.out.println("抱歉,没有任何账户,请先开户!");
return;//结束方法
}
//2.登录操作
while (true) {
System.out.println("请输入账户名:");
String cardId = sc.next();
//3.判断卡号是否存在,根据卡号查询账户
Account acc = getAccountByCardId(cardId, accounts);
if (acc != null) {
while (true) {
//卡号存在,登录成功
//4.输入密码
System.out.println("请输入密码:");
String password = sc.next();
//判断密码是否正确
if (acc.getPassword().equals(password)) {
//密码正确,登录成功
System.out.println(acc.getUserName()+"登录成功!您的卡号是:"+acc.getCardId());
// ```` 查询,收支明细,转账,取款,退出
//展示登陆后的主页面
showUserCommand(sc, acc,accounts);
return;//干掉登录方法
}else{
System.out.println("密码错误,请重新输入!");
}
}
}else {
System.out.println("抱歉,没有该账户,请重新输入!");
}
}
}
/**
* 展示登陆后的主页面
*/
private static void showUserCommand(Scanner sc, Account acc, ArrayList<Account> accounts) {
while (true) {
System.out.println("======================用户操作页===========================");
System.out.println("1.查询账户");
System.out.println("2.存款");
System.out.println("3.取款");
System.out.println("4.转账");
System.out.println("5.修改密码");
System.out.println("6.退出");
System.out.println("7.注销账户");
System.out.println("请选择操作:");
int command = sc.nextInt();
switch (command) {
case 1:
//查询账户(展示当前登录账户信息)
showAccount(acc);
break;
case 2:
//存款
depositMoney(sc, acc);
break;
case 3:
//取款
drawMoney(sc, acc);
break;
case 4:
//转账
transferMoney(sc, acc, accounts);
break;
case 5:
//修改密码
updatePassword(sc, acc);
return;//密码修改成功,退出主页面重新登录
case 6:
//退出
System.out.println("您已退出登录!");
return;//结束方法,返回到登录方法
case 7:
//注销账户
deleteAccount(sc, acc, accounts);
default:
System.out.println("输入错误,请重新输入!");
}
}
}
/**
* 注销账户
* @param sc
* @param acc
* @param accounts
*/
private static void deleteAccount(Scanner sc, Account acc, ArrayList<Account> accounts) {
System.out.println("======================注销账户页===========================");
System.out.println("您确定要注销账户吗?(y/n)");
String confirm = sc.next();
if (acc.getMoney() > 0) {
System.out.println("您的账户金额不为0,不能注销!");
} else if ("y".equals(confirm)) {
accounts.remove(acc);
System.out.println("您已注销账户!");
} else {
System.out.println("您已取消注销!");
}
}
/**
* 注销账户
* @param sc
* @param acc
*/
private static void updatePassword(Scanner sc, Account acc) {
System.out.println("================用户修改页================");
while (true) {
System.out.println("请输入当前密码:");
String oldPassword = sc.next();
//1.判断密码是否正确
if (acc.getPassword().equals(oldPassword)) {
while (true) {
//密码正确,修改密码
//2.输入新密码
System.out.println("请输入新密码:");
String newPassword = sc.next();
System.out.println("请再次输入新密码:");
String okPassword = sc.next();
//3.判断两次密码是否一致
if (newPassword.equals(okPassword)) {
//一致,修改密码
acc.setPassword(newPassword);
System.out.println("密码修改成功!");
return;//结束修改密码方法
}else {
System.out.println("两次密码不一致,请重新输入!");
}
}
} else {
System.out.println("密码错误,请重新输入!");
}
}
}
/**
* 转账功能
* @param sc 接收输入的扫描器
* @param acc 自己的账户
* @param accounts 全部账户
*/
private static void transferMoney(Scanner sc, Account acc, ArrayList<Account> accounts) {
System.out.println("======================转账页===========================");
//1.判断是否有两个账户
if (accounts.size() < 2) {
System.out.println("抱歉,当前系统中没有足够的账户,无法转账!");
return;//结束方法
}
//2.判断自己的账户是否有足够的余额
if (