import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATMSystem {
public static void main(String[] args) {
ArrayList<Account> accounts = new ArrayList<>();
while (true) {
System.out.println("----------欢迎使用ATM系统----------");
System.out.println("1.登录账号");
System.out.println("2.注册账号");
System.out.println("请选择你要进行的操作:");
Scanner sc = new Scanner(System.in);
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 扫描器
* @return
*/
private static void register(ArrayList<Account> accounts, Scanner sc) {
System.out.println("==========欢迎进入到注册操作==========");
//1.创建一个账户对象,用于后期封装账户信息
Account account = new Account();
//2.为这个账户对象录入信息
System.out.println("请输入账号名称:");
String name = sc.next();
account.setName(name);
while (true) {
System.out.println("请输入账户密码:");
String password = sc.next();
System.out.println("请输入确认密码:");
String password2 = sc.next();
if (password.equals(password2)) {
account.setPassword(password);
break;
} else {
System.out.println("两次输入密码不一致!");
}
}
System.out.println("请设置单次取现额度:");
double restrictMoney = sc.nextDouble();
account.setRestrictMoney(restrictMoney);
String id = getRandomId(accounts);
account.setId(id);
System.out.println("恭喜您," + name + ",您的账户注册成功,您的卡号是:" + id);
accounts.add(account);
}
/**
* 为账户生成8位与其他账户不同的卡号
*
* @return
*/
private static String getRandomId(ArrayList<Account> accounts) {
Random r = new Random();
while (true) {
//1.生成8位数字
String id = "";
for (int i = 0; i < 8; i++) {
id += r.nextInt(10);
}
//2.判断该卡号是否与其他账户卡号重复
Account account = getAccountById(accounts, id);
if (account == null) {
return id;
}
}
}
/**
* 根据卡号查询账户对象
*
* @param accounts
* @param id
* @return
*/
private static Account getAccountById(ArrayList<Account> accounts, String id) {
for (int i = 0; i < accounts.size(); i++) {
Account account = accounts.get(i);
if (account.getId().equals(id)) {
return account;
}
}
return null;
}
/**
* 登录账户
*
* @param accounts 存储账户对象的集合
* @param sc 扫描器
* @return
*/
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 id = sc.next();
Account account = getAccountById(accounts, id);
if (account != null) {
while (true) {
System.out.println("请输入登陆密码:");
String password = sc.next();
if (password.equals(account.getPassword())) {
System.out.println("登陆成功!欢迎你:" + account.getName() + ",进入操作系统,请开始办理你的业务:");
showUserCommand(accounts, sc, account);
return;
} else {
System.out.println("密码错误!请重新输入!");
}
}
} else {
System.out.println("卡号不存在!请确认后重新输入!");
}
}
}
/**
* 登录操作
*
* @param accounts
* @param sc
* @param account
*/
private static void showUserCommand(ArrayList<Account> accounts, Scanner sc, Account account) {
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:
inquire(account);
break;
case 2:
deposit(account, sc);
break;
case 3:
withdrawals(account, sc);
break;
case 4:
transfer(accounts, account, sc);
break;
case 5:
changePassword(account, sc);
return;
case 6:
return;
case 7:
logout(accounts, account, sc);
return;
default:
System.out.println("命令不存在!");
}
}
}
/**
* 查询账户对象信息
*
* @param account
*/
private static void inquire(Account account) {
System.out.println("==========您当前账户详情信息如下==========");
System.out.println("卡号:" + account.getId());
System.out.println("户主:" + account.getName());
System.out.println("余额:" + account.getMoney());
System.out.println("当前取现额度:" + account.getRestrictMoney());
}
/**
* 向账户内存款
*
* @param account
* @param sc
*/
private static void deposit(Account account, Scanner sc) {
System.out.println("==========欢迎进入存款操作==========");
System.out.println("请输入存款金额:");
double money = sc.nextDouble();
account.setMoney(money + account.getMoney());
System.out.println("存款成功!");
inquire(account);
}
/**
* 从账户内取款
*
* @param account
* @param sc
*/
private static void withdrawals(Account account, Scanner sc) {
System.out.println("==========欢迎进入账户取款操作==========");
while (true) {
System.out.println("请输入取钱的金额:");
double withdrawalsMoney = sc.nextDouble();
if (withdrawalsMoney > account.getRestrictMoney()) {
System.out.println("超出每次取款限额!");
} else {
if (withdrawalsMoney > account.getMoney()) {
System.out.println("您的余额不足!");
} else {
account.setMoney(account.getMoney() - withdrawalsMoney);
System.out.println("取款成功!请及时取走您的钱!您当前余额为:" + account.getMoney());
return;
}
}
}
}
/**
* 转账
*
* @param accounts
* @param account
* @param sc
*/
private static void transfer(ArrayList<Account> accounts, Account account, Scanner sc) {
System.out.println("==========欢迎进入到转账系统==========");
if (accounts.size() == 1) {
System.out.println("该系统中没有其他用户,请注册后再进行转账!");
return;
}
while (true) {
System.out.println("请输入你要转账的卡号:");
String id = sc.next();
//1.判断一:被转账卡号是否为该用户卡号
if (id.equals(account.getId())) {
System.out.println("不能给自己转账!");
continue;
}
Account account1 = getAccountById(accounts, id);
//2.判断二:转账卡号是否存在
if (account1 != null) {
String name1 = account1.getName();
String tip = "*" + name1.substring(1);
System.out.println("请您输入" + tip + "的姓氏来确认");
String preName = sc.next();
//3.判断三:让用户确认被转账人姓名
if (name1.startsWith(preName)) {
while (true) {
System.out.println("请输入转账的金额" + "(您最多可以转账:" + account.getMoney() + "元):");
double transferAmount = sc.nextDouble();
//4.判断四:判断转账金额是否大于余额
if (transferAmount <= account.getMoney()) {
account.setMoney(account.getMoney() - transferAmount);
account1.setMoney(account1.getMoney() + transferAmount);
System.out.println("转账成功!你的余额为:" + account.getMoney());
return;
} else {
System.out.println("余额不足!");
}
}
} else {
System.out.println("你输入的对方信息有误!");
}
} else {
System.out.println("该卡号不存在请重新输入!");
}
}
}
/**
* 修改密码
*
* @param account
*/
private static void changePassword(Account account, Scanner sc) {
while (true) {
System.out.println("请输入当前密码进行认证:");
String password1 = sc.next();
if (password1.equals(account.getPassword())) {
while (true) {
System.out.println("请输入新密码:");
String password2 = sc.next();
System.out.println("请确认新密码:");
String password3 = sc.next();
if (password2.equals(password3)) {
account.setPassword(password2);
System.out.println("修改成功!");
return;
} else {
System.out.println("两次密码不一致!");
}
}
} else {
System.out.println("密码错误!请重新确认!");
}
}
}
/**
* 注销账号
*
* @param account
* @param sc
*/
private static void logout(ArrayList<Account> accounts, Account account, Scanner sc) {
while (true) {
System.out.println("请您输入密码确认注销:");
String password = sc.next();
if (password.equals(account.getPassword())) {
accounts.remove(account);
System.out.println("注销成功!");
break;
} else {
System.out.println("密码错误!");
}
}
}
}
有问题请指出!