package dome6;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATMsystem {
public static void main(String[] args) {
// 1.准备容器
ArrayList<Accounts> accounts = new ArrayList<>();
showMain(accounts);
}
public static void showMain(ArrayList<Accounts> accounts) {
// 2.准备系统首页
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("==========阿崽银行为您服务==========");
System.out.println("1.登录账号");
System.out.println("2.开户");
System.out.println("==请选择服务(1/2):");
int command = sc.nextInt();
switch (command) {
case 1:
// 登录方法
login(accounts, sc);
break;
case 2:
// 开户
newAccount(accounts, sc);
break;
default:
System.out.println("输入有误,请重新输入");
break;
}
}
}
/**
* 用户开户功能 开户功能实现:往系统的集合容器中存入一个新的账户对象xx; 1.定义开户方法 2.键盘录入信息
* 3.生成账户卡号,卡号有系统自动生成9位数字(卡号唯一) 4.创建Account账户类
*
* @param accounts,sc
*/
static String password = "";// 记录用户输入的密码,保证判断密码的循环可以正常使用
public static void newAccount(ArrayList<Accounts> accounts, Scanner sc) {
System.out.println("==========阿崽银行为您服务==========");
System.out.println("==========用户开户==========");
// 姓名
System.out.println("==请输入您的姓名");
String name = sc.next();
// 密码
while (true) {
System.out.println("==请输入您的密码");
password = sc.next();
System.out.println("==请再次输入您的密码");
String okPassword = sc.next();
// 判断两次密码是否一致
if (okPassword.equals(password)) {
break;
} else {
System.out.println("密码错误,请重新输入");
}
}
// 生成卡号(独立),并且卡号不能重复
// 功能1:随机生成一个卡号 功能2:判断该卡号是否与集合内的卡号重复
String cardId = createCardId(accounts);
// 每日限额
System.out.println("==请设置每日取现额度");
double quoteMoney = sc.nextInt();
double money = 0;
// 创建一个账户对象封装账户的信息,将得到的信息封装在一个对象里
// 注意这里要和账户里中的顺序一样且对应,不然存入集合时信息会交叉String userName,String userId,String
// passWord,double money,double quoteMoney
Account account = new Account(name, cardId, password, money, quoteMoney);
// 将对象里的内容装入集合
accounts.add(account);
System.out.println("==开户成功!您的卡号是:" + cardId);
}
// 功能1:随机生成一个卡号:使用Random随机一个9位数字符串,且不能重复
// 该功能返回卡号为字符串类型
public static String createCardId(ArrayList<Accounts> accounts) {
while (true) {
String cardID = "";
Random r = new Random();
for (int i = 0; i < 9; i++) {
cardID += r.nextInt(10);
}
Accounts acc = getCardId(cardID, accounts);// 使用功能二判断,得到的是账户类里面的卡号
if (acc == null) {
return cardID;
}
}
}
// 功能2:判断该卡号是否与集合内的卡号重复,
// 该功能中 如果卡号重复则报告给功能一继续随机 所以应该返回的是账户类中的卡号
public static Accounts getCardId(String cardID, ArrayList<Accounts> accounts) {
for (int i = 0; i < accounts.size(); i++) {
Accounts acc = accounts.get(i);
if (acc.getAccount().equals(cardID)) {
return acc;
}
}
return null;
}
/**
* 用户登录功能实现 1.定义方法 2.让用户输入卡号,根据卡号查询账户对象 3.没有账户,说明卡号不存在,找到账号则继续输入密码
* 4.密码不正确,继续输入密码。密码正确,登录成功
* @param accounts
* @param sc
*/
public static void login(ArrayList<Accounts> accounts, Scanner sc) {
while (true) {
System.out.println("==请输入您的卡号:");
String cardId = sc.next();
Account acc = getCardId(cardId, accounts);
if (acc != null) {
System.out.println("==请输入密码:");
String password = sc.next();
// 判断密码是否正确
for (int i = 0; i < accounts.size(); i++) {
if (accounts.get(i).equals(acc)) {
String okPassword = acc.getPassWord();
// 密码正确:展示登录页面
if (okPassword.equals(password)) {
System.out.println(acc.getUserName() + "登录成功");
// 展示操作页面
UserCommand(sc, acc, accounts);
return;// 直接结束当前方法
}
// 1密码错误,重新输入
else {
System.out.println("密码错误,请重新输入");
}
}
}
} else {
System.out.println("卡号错误,请重新输入");
break;
}
}
}
/**
* 用户操作页设计
*/
private static void UserCommand(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("==选择ATM机用户服务:");
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:
// 转账
transferAccounts(sc, accounts, acc);
break;
case 5:
// 修改密码
changePasswd(sc, acc);
break;
case 6:
// 退出
System.out.println("欢迎下次光临!");
return;// 结束当前方法
case 7:
// 注销
accountClosing(sc, acc,accounts);
return;
default:
System.out.println("==输入有误,请重新输入==");
}
}
}
/**
* 查看当前账户功能
*
* @param acc
*/
public static void showAccount(Account acc) {
System.out.println("==========当前账户信息==========");
System.out.println("卡号:" + acc.getUserId());
System.out.println("户主:" + acc.getUserName());
System.out.println("余额" + acc.getMoney());
System.out.println("当日限额:" + acc.getQuoteMoney());
}
/**
* 存款功能 1.拿出当前账户对象 2.输入存款金额 3.调用账户对象的Setmoney将余额修改为存钱后的金额 4.查看一下账户,确认存钱是否成功
*/
public static void depositMoney(Scanner sc, Account acc) {
System.out.println("==========存钱==========");
System.out.println("==请输入存入金额:");
double m = sc.nextDouble();
acc.setMoney(acc.getMoney() + m);// 取 余额+存款 赋值到总金额中
System.out.println("==存款完成==");
showAccount(acc);// 检查一下
}
/**
* 取款功能 1.判断账户是否有钱 2.有钱则拿到账户对象,取款 3.判断取款是否超过当次限额,以及余额是否足够 4.满足则去取款成功
*
* @param sc
* @param acc
*/
public static void drawMoney(Scanner sc, Account acc) {
System.out.println("==========取钱==========");
if (acc.getMoney() <= 100) {
System.out.println("您的余额不足,不支持使用取款功能");
} else {
while (true) { // 需要用到循环功能重复输入取款金额
System.out.println("操作限额:" + acc.getQuoteMoney());
System.out.println("==请输入取款金额:");
double m = sc.nextDouble();
if (m > acc.getMoney()) {
System.out.println("余额不足,请重新输入");
} else if (m > acc.getQuoteMoney()) {
System.out.println("该金额超过本次限额,请重新输入");
// 不需要用break结束,该分支完成后会继续循环
} else {
acc.setMoney(acc.getMoney() - m);
System.out.println("==取款成功==");
showAccount(acc);
return;// 取钱结束,结束该方法
}
}
}
}
/**
* 转账功能 1.转账需要两个账户,首先判断系统中是否有这两个账户 2.输入对方账户的户主姓氏,判断账户是否正确 3.转账过程中,转账一方账户是否有钱
* 4.转账
*
* @param sc
* @param accounts
*/
public static void transferAccounts(Scanner sc, ArrayList<Account> accounts, Account acc) {
System.out.println("==========转账==========");
while (true) {
// 判断有没有可操作用户
if (accounts.size() < 2) {
System.out.println("没有其他账户可选择,不可以转账");
return;// 回到首页
}
// 判断该账号有没有钱
if (acc.getMoney() == 0) {
System.out.println("余额不足,不可以转账");
return;
}
while (true) {
System.out.println("==请输入对方卡号:");
String cardId2 = sc.next();
// 判断对方账号是否存在
Account acc2 = getCardId(cardId2, accounts);
if (acc2 == null) {
System.out.println("该账户不存在,请重新输入");
}
if (acc2.getUserId().equals(acc.getUserId())) {
System.out.println("==请输入他人账户");
}
while (true) {
String name = acc2.getUserName();
System.out.println("==请确认对方姓氏:" + "*" + name.substring(1));
String perName = sc.next();
String okPerName = name.substring(0, 1);
if (perName.equals(okPerName)) {
System.out.println("==请输入转账金额");
double money = sc.nextDouble();
if (money > acc.getMoney()) {
System.out.println("余额不足,请重新输入");
} else if (money > acc.getQuoteMoney()) {
System.out.println("该金额超过本次限额,请重新输入");
// 不需要用break结束,该分支完成后会继续循环
} else {
acc.setMoney(acc.getMoney() - money);
acc2.setMoney(acc2.getMoney() + money);
System.out.println("==转账成功==");
showAccount(acc);
return;// 取钱结束,结束该方法
}
}
}
}
}
}
/**
* 修改密码功能 将当前密码用set方法更新
*
* @param sc
* @param acc
*/
public static void changePasswd(Scanner sc, Account acc) {
System.out.println("==========修改密码==========");
while (true) {
System.out.println("==请您输入当前密码");
String passwd = sc.next();
if (acc.getPassWord().equals(passwd)) {
System.out.println("请您输入新密码");
String newpass = sc.next();
System.out.println("请您再次输入密码");
String renewpass = sc.next();
if (newpass.equals(renewpass)) {
acc.setPassWord(newpass);
System.out.println("==修改成功!==");
return;
} else {
System.out.println("输入错误,请重新输入");
}
}
}
}
/**
* 销户功能 从集合中删除当前对象
*
* @param acc
*/
public static void accountClosing(Scanner sc, Account acc,ArrayList<Account> accounts) {
System.out.println("==========销户==========");
showAccount(acc);
System.out.println("==确认销户?(Y/N)==");
String cheak = sc.next();
if (cheak == "N") {
return;
}
accounts.remove(acc);
System.out.println("==销户成功,感谢使用阿崽银行==");
return;
}
}
}
package dome6;
public class Accounts {
private String account; //账号
private String password; //密码
private double balance; //余额
private String bankName; //银行卡名字
private String name; //持卡人姓名
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public String getBankName() {
return bankName;
}
public void setBankName(String bankName) {
this.bankName = bankName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public enety(String account, String password, double balance, String bankName, String name) {
this.account = account;
this.password = password;
this.balance = balance;
this.bankName = bankName;
this.name = name;
}
public enety() {
}
@Override
public String toString() {
return "enety{" +
"account='" + account + '\'' +
", password='" + password + '\'' +
", balance=" + balance +
", bankName='" + bankName + '\'' +
", name='" + name + '\'' +
'}';
}
}