前言
本文主要介绍使用Java
简单实现仿ATM操作系统。
该ATM系统主要包括:登录、开户、查询、存款、取款、转账、修改密码、退出、注销账户功能。
该ATM系统主要使用while
循环来实现各项功能的循环操作。
结构组成:账户实体类和主系统操作类。
一、账户实体Account类
该类主要包含账户需要的所有字段和存取款的操作方法。
1. 定义字段
定义字段并实现setter和getter方法。
public class Account {
// 卡号
private String cardId;
// 用户名
private String userName;
// 密码
private String password;
// 余额
private double money;
// 单次取款限额
private double quotaMoney;
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getQuotaMoney() {
return quotaMoney;
}
public void setQuotaMoney(double quotaMoney) {
this.quotaMoney = quotaMoney;
}
}
2 重写构造方法
public Account(String cardId, String userName, String password, double quotaMoney) {
this.cardId = cardId;
this.userName = userName;
this.password = password;
this.quotaMoney = quotaMoney;
}
3 存款
public void inMoney(double money) {
this.money += money;
}
4 取款
0:取款额大于余额
1:取款成功
2:取款额大于单次取款限额
public int outMoney(double money) {
if (money > this.money) {
return 0;
} else if (money > this.quotaMoney) {
return 2;
} else {
this.money -= money;
return 1;
}
}
二、主系统操作ATMSystem类
该类包括ATM系统的所有操作功能的实现。主要包括系统主页面和登录之后个人页面。
1 系统主页面
系统主页面主要实现登录和开户的功能。
1.1 启动
本系统使用List
集合来存储账户信息。
public class ATMSystem {
public static void main(String[] args) {
// 存储账户信息
List<Account> accounts = new ArrayList<>();
start(accounts);
}
/* 起始主页 */
public static void start(List<Account> accounts) {
System.out.println("==========欢迎您进入ATM系统==========");
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("1、登录");
System.out.println("2、开户");
System.out.println("请您选择操作:");
int type = scanner.nextInt();
switch (type) {
case 1:
login(scanner, accounts);
break;
case 2:
register(scanner, accounts);
break;
default:
System.out.println("您选择的操作有误。");
}
}
}
}
1.2 登录
实现逻辑:
1、判断系统中账户个数。
2、通过输入的卡号查询对应账户进行判断。
3、判断输入的密码。
4、进入个人主页面。
/* 登录 */
public static void login(Scanner scanner, List<Account> accounts) {
System.out.println("==========欢迎您进入到登录操作==========");
if (accounts.size() == 0) {
System.out.println("当前系统无任何账户,请先开户再登录!");
return;
}
Account account = null;
while (true) {
System.out.println("请您输入卡号:");
String cardId = scanner.next();
account = queryAccountByCardId(accounts, cardId);
if (account == null) {
System.out.println("您输入的卡号有误!");
} else {
break;
}
}
while (true) {
System.out.println("请您输入密码:");
String password = scanner.next();
if (account.getPassword().equals(password)) {
break;
} else {
System.out.println("您输入的密码有误!");
}
}
System.out.println("尊敬的" + account.getUserName() + ",欢迎您进入系统!\n您的卡号是:" + account.getCardId());
enterSystem(scanner, accounts, account);
}
/* 查询账户 */
public static Account queryAccountByCardId(List<Account> accounts, String cardId) {
for (int i = 0; i < accounts.size(); i++) {
Account a = accounts.get(i);
if (a.getCardId().equals(cardId)) {
return a;
}
}
return null;
}
1.3 开户
实现逻辑:
1、输入账户基本信息。
2、生成8位由数字组成的不重复的卡号。
3、存储新账户信息。
/* 开户 */
public static void register(Scanner scanner, List<Account> accounts) {
System.out.println("==========欢迎您进入到开户操作==========");
System.out.println("请您输入姓名:");
String name = scanner.next();
String password;
while (true) {
System.out.println("请您输入密码:");
password = scanner.next();
System.out.println("请您确认密码:");
if (scanner.next().equals(password)) {
break;
} else {
System.out.println("您两次输入的密码不一致,请重新设置");
}
}
System.out.println("请您设置单次最大取现金额:");
double quotaMoney = scanner.nextDouble();
String cardId = createCardId(accounts);
Account account = new Account(cardId, name, password, quotaMoney);
accounts.add(account);
System.out.println("恭喜您开户成功!您的卡号是:\"" + account.getCardId() + "\",请您妥善保管。");
}
/* 生成卡号 */
public static String createCardId(List<Account> accounts) {
Random random = new Random();
while (true) {
String carId = "";
for (int i = 0; i < 8; i++) {
carId += random.nextInt(10);
}
Account a = queryAccountByCardId(accounts, carId);
if (a == null) {
return carId;
}
}
}
2 个人主页面
登录成功之后进入个人主页面主要实现查询、存款、取款、转账、修改密码、退出、注销账户功能。
/* 进入个人主页面 */
public static void enterSystem(Scanner scanner, List<Account> accounts, 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、注销账户");
int type = scanner.nextInt();
switch (type) {
case 1:
showAccount(account);
break;
case 2:
depositMoney(scanner, accounts, account);
break;
case 3:
drawMoney(scanner, accounts, account);
break;
case 4:
transferMoney(scanner, accounts, account);
break;
case 5:
updatePassword(scanner, accounts, account);
return;
case 6:
logout(accounts);
return;
case 7:
destroyAccount(accounts, account);
return;
default:
}
}
}
2.1 查询
主要展示当前登录账户信息。
/* 展示账户信息 */
public static void showAccount(Account account) {
System.out.println("==========当前账户信息==========");
System.out.println("卡号:" + account.getCardId() + "\n" + "户主:" + account.getUserName() + "\n" + "余额:" + account.getMoney() + "\n" + "当次取现额度:" + account.getQuotaMoney());
}
2.2 存款
实现逻辑:
1、当前账户调用存款方法进行存款。
2、存款完成展示当前账户最新信息。
/* 存款 */
public static void inMoney(Scanner scanner, List<Account> accounts, Account account) {
System.out.println("==========存款操作==========");
System.out.println("请输入存款金额:");
double money = scanner.nextDouble();
account.inMoney(money);
System.out.println("存款完成!");
showAccount(account);
}
2.3 取款
实现逻辑:
1、当前账户调用取款方法进行取款。
2、根据当前账户取款方法返回值给出相应的提示。
3、取款完成展示当前账户最新信息。
/* 取款 */
public static void outMoney(Scanner scanner, List<Account> accounts, Account account) {
System.out.println("==========取款操作==========");
while (true) {
System.out.println("请输入取款金额:");
double money = scanner.nextDouble();
int status = account.outMoney(money);
switch (status) {
case 1:
System.out.println("取款完成!");
showAccount(account);
return;
case 0:
System.out.println("账户余额不足!");
break;
case 2:
System.out.println("超出单次取现额度!");
break;
default:
System.out.println("系统故障!");
}
}
}
2.4 转账
实现逻辑:
1、判断当前系统中账户个数。
2、判断当前账户余额。
3、判断转账账户是否存在。
4、判断转账账户是否是自己。
5、对接收账户进行信息确认。
6、判断当前账户取款方法返回值。
7、转账成功展示当前账户最新信息。
/* 转账 */
public static void transferMoney(Scanner scanner, List<Account> accounts, Account account) {
System.out.println("==========转账操作==========");
if (accounts.size() < 2) {
System.out.println("当前只有一个账号,暂无法转账!");
enterSystem(scanner, accounts, account);
return;
}
if (account.getMoney() == 0) {
System.out.println("对不起,您的账户没钱,就别转了~~");
return;
}
while (true) {
System.out.println("请输入转账账号:");
Account a = queryAccountByCardId(accounts, scanner.next());
if (a == null) {
System.out.println("账号不存在!");
} else {
if (account.getCardId().equals(a.getCardId())) {
System.out.println("您不可以给自己转账!");
continue;
}
System.out.println("请确认【*" + a.getUserName().substring(1) + "】的姓氏:");
String surname = scanner.next();
if (surname.equals(a.getUserName().substring(0, 1))) {
while (true) {
System.out.println("请输入转账金额:");
double money = scanner.nextDouble();
int status = account.outMoney(money);
switch (status) {
case 1:
a.inMoney(money);
System.out.println("转账成功!您为" + a.getUserName() + "转账了:" + money);
showAccount(account);
return;
case 0:
System.out.println("账户余额不足!您最多可以转:" + account.getMoney());
break;
case 2:
System.out.println("超出单次取现额度!");
break;
default:
System.out.println("系统故障!");
}
}
} else {
System.out.println("对不起,您认证的信息错误!");
}
}
}
}
2.5 修改密码
实现逻辑:
1、旧密码确认。
2、判断两次输入的新密码是否一致。
3、修改当前账户密码。
4、在循环的switch
中直接return
结束循环返回到系统主页面。
/* 修改密码 */
public static void updatePassword(Scanner scanner, List<Account> accounts, Account account) {
System.out.println("==========修改密码操作==========");
while (true) {
System.out.println("请输入密码:");
String password = scanner.next();
if (password.equals(account.getPassword())) {
break;
} else {
System.out.println("密码错误!");
}
}
while (true) {
System.out.println("请输入新密码:");
String password1 = scanner.next();
System.out.println("请确认新密码:");
String password2 = scanner.next();
if (password1.equals(password2)) {
System.out.println("密码修改成功!");
account.setPassword(password1);
break;
} else {
System.out.println("密码不一致!");
}
}
}
2.6 退出
实现逻辑:
1、给出提示之后在循环的switch
中直接return
结束循环返回到系统主页面。
/* 退出 */
public static void logout(List<Account> accounts) {
System.out.println("欢迎下次光临!");
}
2.7 注销账户
实现逻辑:
1、将当前账户从账户集合中移除。
2、在循环的switch
中直接return
结束循环返回到系统主页面。
/* 注销账户 */
public static void destroyAccount(List<Account> accounts, Account account) {
accounts.remove(account);
System.out.println("您的账户已注销!");
}
总结
以上就是关于Java
仿ATM操作系统实现的全部内容。
如果有什么问题,我们可以一起交流讨论解决。
最后,希望可以帮助到有需要的码友。