1.功能实现代码——实现业务需求
ATM.java
package com.ATM;
import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
private ArrayList<Account> Accounts = new ArrayList<>();
private Scanner sc = new Scanner(System.in);
private Account loginacc;//记住登陆之后的用户
public void start() {
while (true) {
System.out.println("ATM start");
System.out.println("1.用户登录");
System.out.println("2.用户开户");
System.out.println("请输入:");
String choice = sc.next();
switch (choice) {
case "1":
login();
break;
case "2":
addATM();
break;
default:
System.out.println("没有该操作!");
}
}
}
private void login() {
System.out.println("==系统登录==");
if (Accounts.isEmpty()) {
System.out.println("当前系统里面没有储存账号!!!");
return;
}
while (true) {
System.out.println("请您输入您的卡号:");
String cardid = sc.next();
Account acc = getAccountByCardid(cardid);
if (acc == null) {
System.out.println("输入的卡号不存在");
} else {
System.out.println("请您输入密码");
String password = sc.next();
while (true) {
if (acc.getPassword().equals(password)) {
System.out.println("恭喜您登陆成功" + acc.getUserName() + "卡号是:" + acc.getCardid());
loginacc = acc;
showusercommand(loginacc);
return;//退出当前功能
} else {
System.out.println("输入的密码有问题,请再次输入:");
break;
}
}
}
}
}
private void showusercommand(Account acc) {
while (true) {
System.out.println(acc.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.注销当前账户");
int command = sc.nextInt();
switch (command) {
case 1:
showloginaccount(acc);
break;
case 2:
depositMoney(acc);
break;
case 3:
drawmoney(acc);
break;
case 4:
teansferMoney(acc);
break;
case 5:
ChangePassword(acc);
return;
case 6:
System.out.println(acc.getUserName() + "退出系统成功");
return;
case 7:
if(Deleteaccount(acc)){
return;
}else{
break;
}
default:
System.out.println("操作不存在,请重新选择!");
}
}
}
private void ChangePassword(Account acc) {
System.out.println("请您输入当前账户的密码:");
while (true) {
String password = sc.next();
if (acc.getPassword().equals(password)) {
while (true) {
System.out.println("===请您输入新密码:===");
String newpassword = sc.next();
System.out.println("请您再次输入新密码:");
String recheckpassword = sc.next();
if(recheckpassword.equals(newpassword)){
acc.setPassword(newpassword);
System.out.println("恭喜您密码设置成功");
return;
}else{
System.out.println("两次密码输入不一致,请重新输入");
}
}
}else{
System.out.println("密码错误,请重新输入!");
}
}
}
//销户成功
private boolean Deleteaccount(Account acc) {
System.out.println("请问您确认销户吗?y/n");
while (true) {
String command = sc.next();
switch (command) {
case "y":
//判断是否有钱
if(acc.getBalance() == 0){
Accounts.remove(acc);
System.out.println("您的账号已经销户!!!");
return true;
}else{
System.out.println("您的账户还有余额,销户失败!");
return false;
}
case "n":
return false;
default:
System.out.println("输入有误,请您重新输入!");
}
}
}
private void teansferMoney(Account acc) {
System.out.println("==用户转账==");
if (Accounts.size() < 2) {
System.out.println("当前系统只有一个账号!");
return;
}
if (acc.getBalance() == 0) {
System.out.println("您的账户余额为0,无法转帐!!");
return;
}
//开始转账
while (true) {
System.out.println("请您输入对方的卡号");
String cardid = sc.next();
Account Toacc = getAccountByCardid(cardid);
if (Toacc == null) {
System.out.println("对方卡号不存在!");
} else if (acc.getCardid().equals(Toacc.getCardid())) {
System.out.println("小调皮,不准给自己转账~~~");
} else {
//对方账户存在,验证姓名
String name = '*' + Toacc.getUserName().substring(1);
System.out.println("请您输入【" + name + "】的姓氏");
String prename = sc.next();
//startsWith() 方法用于检测字符串是否以指定的前缀开始。
if (Toacc.getUserName().startsWith(prename)) {
while (true) {
System.out.println("请输入要转给对方的金额");
double money = sc.nextDouble();
//判断金额是否可以转账
if (acc.getBalance() >= money) {
acc.setBalance(acc.getBalance() - money);
Toacc.setBalance(Toacc.getBalance() + money);
System.out.println("转账成功,您的剩余余额为" + acc.getBalance());
return;
} else {
System.out.println("余额不足,无法转账");
System.out.println("请重试!");
}
}
} else {
System.out.println("对不起,您输入的姓氏有误,请重新输入!");
}
}
}
}
private void drawmoney(Account acc) {
System.out.println("==取钱操作==");
while (true) {
if (acc.getBalance() < 100) {
System.out.println("账户余额不足100元,不能取款!!!");
return;
} else {
System.out.println("请您输入取款余额:");
double money = sc.nextDouble();
//判断余额是否充足
if (money > acc.getBalance()) {
System.out.println("余额不足,您账户中的余额是" + acc.getBalance());
} else {
if (money > acc.getLimit()) {
System.out.println("您当前取款超过了最多限额!");
} else {
//可以开始取钱
acc.setBalance(acc.getBalance() - money);
System.out.println("恭喜您取钱成功!!!");
System.out.println("您当前余额剩余:" + acc.getBalance());
break;
}
}
}
}
}
//2.存款操作
private void depositMoney(Account acc) {
System.out.println("==存钱操作==");
System.out.println("请您输入存款金额");
double money = sc.nextDouble();
//更新
acc.setBalance(acc.getBalance() + money);
System.out.println("您当余额为:" + acc.getBalance());
}
//1.展示当前登录账户的信息
private void showloginaccount(Account acc) {
System.out.println("====您当前账户信息如下====");
System.out.println("卡号:" + acc.getCardid());
System.out.println("户主:" + acc.getUserName());
System.out.println("性别:" + acc.getSex());
System.out.println("余额" + acc.getBalance());
System.out.println("每次取钱额度:" + acc.getLimit());
}
private void addATM() {
//1.创建一个用关乎对象,用于封装用户信息
Account acc = new Account();
System.out.println("==注册开户==");
//2.输入信息
System.out.println("请您输入账户名称");
String name = sc.next();
acc.setUserName(name);
while (true) {
System.out.println("请您输入您的性别");
char sex = sc.next().charAt(0);
if (sex == '男') {
acc.setSex(sex);
break;
} else if (sex == '女') {
acc.setSex(sex);
break;
} else {
System.out.println("输入有误,请重新输入");
}
}
while (true) {
System.out.println("请您输入账户密码:");
String password = sc.next();
System.out.println("请您再次输入账户密码:");
String password2 = sc.next();
if (password.equals(password2)) {
acc.setPassword(password);
break;
} else {
System.out.println("您输入的两次密码不一致,请重新输入");
}
}
System.out.println("请您输入您的取现额度");
double limit = sc.nextDouble();
acc.setLimit(limit);
//重点为这个账号生成卡号,由系统自动生成,8位数字,不能与其他账号重复
String cardid = creatcardid();
acc.setCardid(cardid);
System.out.println("卡号为" + acc.getCardid());
Accounts.add(acc);
System.out.println("恭喜您注册成功" + acc.getUserName() + "开户成功,您的卡号是:");
}
//返回一个八位数字的卡号
private String creatcardid() {
while (true) {
String cardid = "";
Random random = new Random();
for (int i = 0; i < 8; i++) {
int data = random.nextInt(10);
cardid += data;
}
//3.判断卡号是否与其他账号是否重复的方法
Account acc = getAccountByCardid(cardid);
if (acc == null) {
return cardid;
}
}
}
//查询账户对象返回
private Account getAccountByCardid(String cardid) {
for (int i = 0; i < Accounts.size(); i++) {
Account acc = Accounts.get(i);
if (acc.getCardid().equals(cardid)) {
return acc;//返回查到的账号
}
}
return null;//查无此账户
}
}
2.创建账户对象,保存信息
Account.java
package com.ATM;
public class Account {
private String cardid;
private String userName;
private char sex;
private String password;
private double balance;
private double limit;
public String getCardid() {
return cardid;
}
public void setCardid(String cardid) {
this.cardid = cardid;
}
public String getUserName() {
return userName + (sex == '男' ? "先生":"女士");
}
public void setUserName(String userName) {
this.userName = userName;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
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 double getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
}
3.系统测试类——运行系统
text.java
package com.ATM;
public class test {
public static void main(String[] args) {
ATM atm = new ATM();
atm.start();
}
}