package com.lu.atm.atmenum;
import com.lu.atm.service.ATMService;
public enum ATMEnum {
REGISTER(1, "用户开户") {
@Override
public void show() {
ATMService.register();
}
},
LOGIN(2, "用户登录") {
@Override
public void show() {
ATMService.login();
}
},
USERAll(3, "查询所有用户") {
@Override
public void show() {
ATMService.showAll();
}
},
EXIT(4, "退出ATM") {
@Override
public void show() {
ATMService.exit();
}
};
private int code;
private String desc;
public static void compareParameters(int code){
ATMEnum[] values = ATMEnum.values();
for (ATMEnum value : values) {
if (value.getCode() == code){
value.show();
}
}
}
public abstract void show();
ATMEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getDesc() {
return desc;
}
}
package com.lu.atm.atmenum;
import com.lu.atm.service.ATMService;
/**
* 1.用户存钱
* 2.用户取钱
* 3.注销账户
* 4.用户转账
* 5.退出登录
* 6.修改密码
*/
public enum UserEnum {
STORE(1, "存钱") {
@Override
public void show() {
ATMService.store();
}
},
WITHDRAW(2, "取钱") {
@Override
public void show() {
ATMService.take();
}
},
CANCEL(3, "注销账户") {
@Override
public void show() {
ATMService.logout();
}
},
TRANSFER(4, "转账") {
@Override
public void show() {
ATMService.transfer();
}
},
EXIT(5, "退出登录") {
@Override
public void show() {
ATMService.signOut();
}
},
UPDATE(6, "修改密码") {
@Override
public void show() {
ATMService.changePwd();
}
};
private int code;
private String desc;
public abstract void show();
UserEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
public static void compareParameters(int code) {
for (UserEnum userEnum : UserEnum.values()) {
if (userEnum.getCode() == code) {
userEnum.show();
return;
}
}
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package com.lu.atm.service;
import com.lu.atm.Account;
import com.lu.atm.atmenum.UserEnum;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Objects;
import java.util.Random;
import java.util.Scanner;
public class ATMService {
private static final ArrayList<Account> list = new ArrayList<>();
private static final Scanner sc = new Scanner(System.in);
private static String cardId;
private static boolean quit = true;
/**
* 用户开户
*/
public static void register() {//用户开户
Account account = new Account();
System.out.println("请输入姓名:");
account.setName(sc.next());
while (true) {
System.out.println("请输入性别:");
String next = sc.next();
if (next.equals("男") || next.equals("女")) {
account.setSex(next);
break;
}
System.out.println("输入有误,请重新输入");
}
while (true) {
try {
System.out.println("请输入年龄:");
int i = sc.nextInt();
if (i > 0 && i <= 120) {
account.setAge(i);
break;
}
System.out.println("输入有误,请重新输入");
} catch (Exception e) {
System.out.println("输入有误");
}
}
while (true) {
System.out.println("请输入密码:");
String next = sc.next();
System.out.println("请再次输入密码:");
if (next.equals(sc.next())) {
account.setCardPwd(next);
break;
} else {
System.out.println("两次密码不一致");
}
}
account.setBigDecimal(BigDecimal.ZERO);
while (true) {
String s = randomAccounts();
if (list.stream().noneMatch(account1 -> account1.getCardId().equals(s))) {
account.setCardId(s);
break;
}
}
list.add(account);
System.out.println("恭喜您开户成功,您的卡号是:" + account.getCardId());
}
/**
* 退出ATM
*/
public static void exit() {
System.out.println("谢谢使用");
System.exit(0);
}
/**
* 退出登录
*/
public static void signOut() {
quit = false;
}
/**
* 随机生成16位卡号
*
* @return 16位卡号
*/
public static String randomAccounts() {
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < 16; j++) {
sb.append(random.nextInt(0, 10));
}
return sb.toString();
}
/**
* 用户登录
*/
public static void login() {
if (list.isEmpty()) {
System.out.println("暂无用户,请先开户");
return;
}
while (true) {
System.out.println("请输入卡号:");
String cardId = sc.next();
for (Account account : list) {
if (account.getCardId().equals(cardId)) {
int count = 3;
while (true) {
System.out.println("请输入密码:");
String cardPwd = sc.next();
if (account.getCardPwd().equals(cardPwd)) {
quit = true;
ATMService.cardId = account.getCardId();
System.out.println("==欢迎" + account.getName() + "登录==");
String s = """
1.用户存钱
2.用户取钱
3.注销账户
4.用户转账
5.退出登录
6.修改密码
""";
while (quit) {
System.out.println(s);
int i = sc.nextInt();
if (i >= 1 && i <= 6) {
UserEnum.compareParameters(i);
} else {
System.out.println("输入有误,请重新输入");
}
}
return;
}
System.out.println("密码错误,还有" + (count--) + "次机会");
if (count == 0) {
System.out.println("密码错误次数过多,请重新登录");
return;
}
}
}
}
System.out.println("账号不存在请重新输入");
}
}
/**
* 展示所有账户信息
*/
public static void showAll() {
if (list.isEmpty()) {
System.out.println("暂无用户,请先开户");
return;
}
for (Account account : list) {
System.out.println("姓名:" + account.getName().charAt(0) + "**");
System.out.println("账号:" + account.getCardId().substring(0, 12) + "****");
System.out.println("余额:" + account.getBigDecimal());
System.out.println("年龄:" + account.getAge());
}
}
/**
* 用户存钱
*/
public static void store() {
while (true) {
System.out.println("请输入存钱金额:");
BigDecimal bigDecimal = sc.nextBigDecimal();
System.out.println(bigDecimal);
if (bigDecimal.compareTo(new BigDecimal("100")) >= 0 && bigDecimal.compareTo(new BigDecimal("10000")) <= 0) {
//每次只能存100元的整数倍
if (bigDecimal.remainder(new BigDecimal("100")).compareTo(BigDecimal.ZERO) == 0) {
for (Account account : list) {
if (account.getCardId().equals(ATMService.cardId)) {
account.setBigDecimal(account.getBigDecimal().add(bigDecimal));
System.out.println("存钱成功,余额为:" + account.getBigDecimal());
return;
}
}
}
System.out.println("不能存零钱");
continue;
}
System.out.println("存的钱必须大于一百或小于一万");
}
}
/**
* 用户取钱
*/
public static void take() {
for (Account account : list) {
if (account.getCardId().equals(ATMService.cardId)) {
if (account.getBigDecimal().compareTo(BigDecimal.ZERO) == 0) {
System.out.println("您还没钱请先存钱!");
return;
}
}
}
while (true) {
System.out.println("请输入取钱金额:");
BigDecimal bigDecimal = sc.nextBigDecimal();
if (bigDecimal.remainder(new BigDecimal("100")).compareTo(BigDecimal.ZERO) == 0) {
if (bigDecimal.compareTo(new BigDecimal("10000")) < 0) {
for (Account account : list) {
if (account.getCardId().equals(ATMService.cardId)) {
account.setBigDecimal(account.getBigDecimal().subtract(bigDecimal));
System.out.println("余额:" + account.getBigDecimal());
return;
}
}
}
System.out.println("单次取钱不能超过10000元");
continue;
}
System.out.println("不能取零钱!");
}
}
/**
* 注销账户
*/
public static void logout() {
if (Objects.requireNonNull(idToAccount(cardId)).getBigDecimal().compareTo(BigDecimal.ZERO) > 0) {
System.out.println("账号还有钱请先取钱!");
return;
}
System.out.println("请输入密码确认是否要注销:");
if (Objects.requireNonNull(idToAccount(cardId)).getCardPwd().equals(sc.next())) {
list.remove(idToAccount(cardId));
System.out.println("注销成功");
return;
}
System.out.println("密码错误注销失败");
}
/**
* 根据用户id返回用户信息
*
* @param id 用户id
* @return 放回用户信息
*/
public static Account idToAccount(String id) {
for (Account account : list) {
if (id.equals(account.getCardId())) {
return account;
}
}
return null;
}
/**
* 修改密码
*/
public static void changePwd() {
System.out.println("请输入旧密码:");
String next = sc.next();
if (Objects.requireNonNull(idToAccount(cardId)).getCardPwd().equals(next)) {
System.out.println("请输入新密码:");
String next1 = sc.next();
if (next1.equals(next)) {
System.out.println("新密码不能与旧密码相同!");
} else {
Objects.requireNonNull(idToAccount(cardId)).setCardPwd(next1);
System.out.println("修改成功!");
}
} else {
System.out.println("密码错误!");
}
}
/**
* 转账
*/
public static void transfer() {
if (Objects.requireNonNull(idToAccount(cardId)).getBigDecimal().compareTo(BigDecimal.ZERO) == 0) {
System.out.println("账号余额为0,请先存钱");
return;
}
System.out.println("请输入密码:");
String next = sc.next();
if (Objects.requireNonNull(idToAccount(cardId)).getCardPwd().equals(next)) {
System.out.println("请输入你要转账的账号");
String next1 = sc.next();
if (idToAccount(next1) != null) {
System.out.println("请输入转账金额:");
BigDecimal bigDecimal = sc.nextBigDecimal();
if (bigDecimal.compareTo(new BigDecimal("100")) >= 0 && bigDecimal.compareTo(new BigDecimal("10000")) <= 0) {
if (bigDecimal.compareTo(Objects.requireNonNull(idToAccount(cardId)).getBigDecimal()) <= 0) {
if (bigDecimal.remainder(new BigDecimal("100")).compareTo(BigDecimal.ZERO) == 0) {
Objects.requireNonNull(idToAccount(cardId)).setBigDecimal(Objects.requireNonNull(idToAccount(cardId)).getBigDecimal().subtract(bigDecimal));
Objects.requireNonNull(idToAccount(next1)).setBigDecimal(Objects.requireNonNull(idToAccount(next1)).getBigDecimal().add(bigDecimal));
System.out.println("转账成功");
}
}
}
} else {
System.out.println("账号不存在");
}
} else {
System.out.println("密码输入错误请重新开始");
}
}
}
package com.lu.atm;
import java.math.BigDecimal;
public class Account {
private String cardId;
private String cardPwd;
private String name;
private String sex;
private int age;
private BigDecimal bigDecimal;
public Account() {
}
public Account(String cardId, String cardPwd, String name, String sex, int age, BigDecimal bigDecimal) {
this.cardId = cardId;
this.cardPwd = cardPwd;
this.name = name;
this.sex = sex;
this.age = age;
this.bigDecimal = bigDecimal;
}
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getCardPwd() {
return cardPwd;
}
public void setCardPwd(String cardPwd) {
this.cardPwd = cardPwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public BigDecimal getBigDecimal() {
return bigDecimal;
}
public void setBigDecimal(BigDecimal bigDecimal) {
this.bigDecimal = bigDecimal;
}
@Override
public String toString() {
return "Account{" +
"cardId='" + cardId + '\'' +
", cardPwd='" + cardPwd + '\'' +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", bigDecimal=" + bigDecimal +
'}';
}
}
package com.lu.atm;
public class App {
public static void main(String[] args) {
ATM atm = new ATM();
atm.start();
}
}
package com.lu.atm;
import com.lu.atm.atmenum.ATMEnum;
import java.util.InputMismatchException;
import java.util.Scanner;
public class ATM {
public void start(){
Scanner scanner = new Scanner(System.in);
int i = 0;
while (true){
String welcome = """
===欢迎使用ATM系统===
1.用户开户
2.用户登录
3.展示所有账户信息
4.退出ATM
""";
System.out.println(welcome);
try {
i = scanner.nextInt();
scanner.nextLine(); // 消费掉换行符或其他非数字字符
if (i >= 1 && i <= 4) {
ATMEnum.compareParameters(i);
} else {
System.out.println("输入错误,请重新输入");
}
} catch (InputMismatchException e) {
System.out.println("请输入一个有效的数字!");
scanner.nextLine(); // 清除错误的输入
}
}
}
}