用户转账功能
- 把钱转给别人,转帐前需要判断:
- 自己账户是否有钱,系统中是否有其他账户
if (accounts.size() < 0) {
System.out.println("系统中只存在1个用户,无法为其它用户转账");
return;
}
2. 接下来让用户输入对方卡号,判断对方账户是否存在,账户如果存在,还需要认证对方账户的户主姓氏
if (loginAccount.getMoney() < 0) {
System.out.println("账户余额不足");
return;
}
while (true) {
System.out.println("请输入对方卡号");
String cardId = sc.next();
Account account = getAccountByCardId(cardId);
if (account == null) {
System.out.println("该卡号不存在");
} else {
String name = "*" + account.getUserName().substring(1);
System.out.println("请输入[" + name + "]的姓氏");
String preName = sc.next();
3. 完整代码
package com.badidu.ATM;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
private ArrayList<Account> accounts = new ArrayList<>();
Scanner sc = new Scanner(System.in);
private Account loginAccount;
public void start() {
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();
break;
case 2:
createAccount();
break;
default:
System.out.println("输入有误");
}
}
}
private void login() {
System.out.println("用户登录");
if (accounts.size() == 0) {
System.out.println("系统中不存在账户对象");
return;
}
while (true) {
System.out.println("请输入您的登陆卡号:");
String cardId = sc.next();
Account account = getAccountByCardId(cardId);
if (account == null) {
System.out.println("该卡号不存在");
} else {
while (true) {
System.out.println("请输入您的登陆密码");
String password = sc.next();
if (account.getPassword().equals(password)) {
loginAccount = account;
System.out.println("恭喜您," + account.getUserName() + "登录成功,您的卡号是:" + account.getCardId());
showUserCommand();
return;
} else {
System.out.println("密码错误");
}
}
}
}
}
private void showUserCommand() {
while (true) {
System.out.println(loginAccount.getUserName() + "您可以选择如下功能进行账户的处理---");
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:
showLoginAccount();
break;
case 2:
depositMoney();
break;
case 3:
drawMoney();
break;
case 4:
transferMoney();
break;
case 5:
System.out.println("修改密码");
break;
case 6:
System.out.println(loginAccount.getUserName() + "您退出系统成功");
return;
default:
System.out.println("输入有误");
}
}
}
private void transferMoney() {
System.out.println("---转账---");
if (accounts.size() < 0) {
System.out.println("系统中只存在1个用户,无法为其它用户转账");
return;
}
if (loginAccount.getMoney() < 0) {
System.out.println("账户余额不足");
return;
}
while (true) {
System.out.println("请输入对方卡号");
String cardId = sc.next();
Account account = getAccountByCardId(cardId);
if (account == null) {
System.out.println("该卡号不存在");
} else {
String name = "*" + account.getUserName().substring(1);
System.out.println("请输入[" + name + "]的姓氏");
String preName = sc.next();
if (account.getUserName().startsWith(preName)) {
System.out.println("请您输入转账给对方的金额:");
double money = sc.nextDouble();
if (loginAccount.getMoney() >= money) {
loginAccount.setMoney(loginAccount.getMoney() - money);
account.setMoney(account.getMoney() + money);
System.out.println("恭喜您,转账成功,您的余额为:" + loginAccount.getMoney());
return;
} else {
System.out.println("余额不足,最多可转账:" + loginAccount.getMoney());
}
} else {
System.out.println("姓氏错误,认证失败");
}
}
}
}
private void drawMoney() {
System.out.println("--取款操作--");
if (loginAccount.getMoney() < 100) {
System.out.println("余额不足100");
return;
}
while (true) {
System.out.println("请输入您要取款的金额");
double money = sc.nextDouble();
if (loginAccount.getMoney() >= money) {
if (money > loginAccount.getLimit()) {
System.out.println("取款金额超过每次的限额,您每次最多取" + loginAccount.getLimit() + "元款");
} else {
loginAccount.setMoney(loginAccount.getMoney() - money);
System.out.println("恭喜您,取款" + money + "成功,您的余额为:" + loginAccount.getMoney());
break;
}
} else {
System.out.println("余额不足,您的余额为:" + loginAccount.getMoney());
}
}
}
private void depositMoney() {
System.out.println("--存款操作--");
System.out.println("请输入您要存款的金额");
double money = sc.nextDouble();
loginAccount.setMoney(loginAccount.getMoney() + money);
System.out.println("恭喜您,存钱" + money + "成功,您的余额为:" + loginAccount.getMoney());
}
private void showLoginAccount() {
System.out.println("----当前您的帐户信息如下:----");
System.out.println("卡号" + loginAccount.getCardId());
System.out.println("账户名" + loginAccount.getUserName());
System.out.println("性别" + loginAccount.getSex());
System.out.println("余额" + loginAccount.getMoney());
System.out.println("取现额度" + loginAccount.getLimit());
}
public void createAccount() {
System.out.println("----------用户开户操作-----");
Account account = new Account();
System.out.println("请输入账户名");
String name = sc.next();
account.setUserName(name);
while (true) {
System.out.println("请输入账户性别");
char sex = sc.next().charAt(0);
if (sex == '男' || sex == '女') {
account.setSex(sex);
break;
} else {
System.out.println("输入有误,性别只能输入男女");
}
}
while (true) {
System.out.println("请输入账户密码");
String password = sc.next();
System.out.println("请您输入您的确认密码");
String confirmPassword = sc.next();
if (password.equals(confirmPassword)) {
account.setPassword(password);
break;
} else {
System.out.println("两次密码不一样");
}
}
System.out.println("请您输入的的取现额度");
double limit = sc.nextDouble();
account.setLimit(limit);
String newCardId = createCardId();
account.setCardId(newCardId);
accounts.add(account);
System.out.println("恭喜您," + account.getUserName() + "开户成功,您的卡号是:" + account.getCardId());
}
private String createCardId() {
while (true) {
String cardId = "";
Random r = new Random();
for (int i = 0; i < 8; i++) {
int data = r.nextInt(10);
cardId += data;
}
Account account = getAccountByCardId(cardId);
if (account == null) {
return cardId;
}
}
}
private Account getAccountByCardId(String cardId) {
for (int i = 0; i < accounts.size(); i++) {
Account account = accounts.get(i);
if (account.getCardId().equals(cardId)) {
return account;
}
}
return null;
}
}