Account.java
package itmeima;
public class Account {
private StringcardNumber; //卡号
private Stringname; //姓名
private Stringsex; //性别
private Stringpassword; //密码
private double balance; //余额
private double quotaMoney; //取现额度
public StringgetCardNumber() {
return cardNumber;
}
public void setCardNumber(String cordNumber) {
this.cardNumber = cordNumber;
}
public StringgetName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public StringgetSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public StringgetPassword() {
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 getQuotaMoney() {
return quotaMoney;
}
public void setQuotaMoney(double quotaMoney) {
this.quotaMoney = quotaMoney;
}
}
ATMSystem.java
package itmeima;
//系统入口
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATMSystem {
public static void main(String[] args) {
// 2、创建一个集合对象,用于后期存入账户对象。
ArrayList accounts =new ArrayList<>();
// 3、展示系统欢迎页面
System.out.println("=========欢迎您进入到ATM系统===============");
while (true) {
System.out.println("1、登录账户");
System.out.println("2、注册账户");
System.out.println("请您选择操作:");
Scanner sc =new Scanner(System.in);
int command = sc.nextInt();
switch (command){
case 1:
// 登录操作
login(accounts, sc);
break;
case 2:
// 注册账户
register(accounts, sc);
break;
default:
System.out.println("当前输入的操作指令有误");
}
}
}
/**
用户登录功能
*/
private static void login(ArrayList accounts, Scanner sc) {
System.out.println("==================欢迎您进入到登录操作======================");
if(accounts.size() >0){
while (true) {
System.out.println("请您输入登录的卡号:");
String cardNumber = sc.next();
// 2、根据卡号去集合中查询是否存在账户对象
Account acc =getAccountByCardId(cardNumber, accounts);
// 判断账户对象是否存在,存在说明卡号正确
if(acc !=null){
while (true) {
// 3、判断密码是否正确
System.out.println("请您输入登录的密码:");
String passWord = sc.next();
if(acc.getPassword().equals(passWord)){
// 登录成功了!
System.out.println("欢迎你:" + acc.getName() +acc.getSex()+"进入系统,您可开始办理你的业务了!");
// 展示登录成功后的操作界面。
showCommand(sc, acc, accounts);
return;
}else {
System.out.println("您的密码不正确!");
}
}
}else {
System.out.println("卡号不存在,请重新确认!");
}
}
}else {
System.out.println("当前系统无任何账户,请先注册再登录!");
}
}
/**
登录后展示的界面
*/
private static void showCommand(Scanner sc, Account acc, ArrayList 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("请您输入操作命令:");
int command = sc.nextInt();
switch (command) {
case 1:
// 查询账户信息展示
showAccount(acc);
break;
case 2:
// 存款
depositMoney(acc,sc);
break;
case 3:
// 取款
drawMoney(acc,sc);
break;
case 4:
// 转账
transferMoney(acc, accounts, sc);
break;
case 5:
// 修改密码
updatePassWord(acc, sc);
return; // 跳出当前操作的方法,最终回到首页
case 6:
// 退出 回到首页
System.out.println("欢迎下次继续光临!!");
return; // 结束登录后的全部操作
case 7:
// 注销账户
accounts.remove(acc); // 从集合对象中删除当前账户对象。
System.out.println("您的账户已经完成了销毁,您将不可以进行登录了!");
return;
default:
System.out.println("您的操作命令有误!");
}
}
}
/**
修改当前账户对象的密码
* @param acc
*/
private static void updatePassWord(Account acc, Scanner sc) {
// 1、判断旧密码是否正确
while (true) {
System.out.println("请您输入当前密码认证:");
String passWord = sc.next();
if(acc.getPassword().equals(passWord)){
while (true) {
// 2、输入新密码
System.out.println("请您输入新密码:");
String newPassWord = sc.next();
System.out.println("请您确认新密码:");
String okPassWord = sc.next();
// 3、比对两次密码是否一致
if(newPassWord.equals(okPassWord)){
acc.setPassword(okPassWord);
System.out.println("密码已经修改成功,请重新登录!");
return;
}else {
System.out.println("两次密码不一致!");
}
}
}else {
System.out.println("您输入的密码有误。请重新确认密码!");
}
}
}
/**
* 从当前账户对象中把金额转给其他账户对象。
* @param acc
* @param accounts
* @param sc
*/
private static void transferMoney(Account acc, ArrayList accounts, Scanner sc) {
// 1、判断自己的账户中是否有钱
if(acc.getBalance() <=0){
System.out.println("没有余额,当前转账无法继续进行!");
return;
}
// 2、判断总账户数量是否大于等于2个。
if(accounts.size() >=2){
while (true) {
// 3、让当前用户输入对方的账号进行转账
System.out.println("请您输入对方卡号:");
String cardNumber = sc.next();
// 4、根据卡号查询出集合中的账户对象
Account otherAcc =getAccountByCardId(cardNumber, accounts);
// 5、判断账户对象是否存在,而且这个账户对象不能是自己。
if(otherAcc !=null){
// 6、判断当前账户是否是自己。
if(acc.getCardNumber().equals(otherAcc.getCardNumber())){
System.out.println("不能给自己账户转账!");
}else {
// 7、正式进入到转账逻辑了
String rs ="*" + otherAcc.getName().substring(1);//去姓取名
System.out.println("请您确认["+rs +"]的姓氏来确认!");
System.out.println("请您输入对方的姓氏:");
String preName = sc.next();
if(otherAcc.getName().startsWith(preName)){
// 认证通过
while (true) {
System.out.println("请您输入转账的金额(您最多可以转账:" + acc.getBalance() +"元):");
double money = sc.nextDouble();
if(money > acc.getBalance()){
System.out.println("余额不足,当前转账无法继续!");
}else {
// 开始转账
acc.setBalance(acc.getBalance() - money); // 更新自己账户
otherAcc.setBalance(otherAcc.getBalance() + money);
System.out.println("您已经完成转账!您当前还剩余:" + acc.getBalance());
return;
}
}
}else {
System.out.println("您输入对方的信息有误!");
}
}
}else {
System.out.println("您输入的转账卡号不存在!");
}
}
}else {
System.out.println("当前系统中没有其他账户可以转账,去注册一个账户吧!");
}
}
private static void drawMoney(Account acc, Scanner sc) {
System.out.println("==================欢迎进入账户取款操作======================");
// 1、判断账户的余额是否大于等于100
double money = acc.getBalance();
if(money >=100) {
while (true) {
// 2、输入取钱的金额
System.out.println("请您输入取钱的金额:");
double drawMoney = sc.nextDouble();
// 3、判断当前取钱金额是超过了账户的余额
if(drawMoney > money){
System.out.println("当前余额不足!当前余额是:" + money);
}else {
// 4、判断取钱金额是否超过了当次限额
if(drawMoney > acc.getQuotaMoney()){
System.out.println("您当前取款金额超过了每次限额!");
}else {
// 更新账户余额
acc.setBalance(money - drawMoney);
System.out.println("您当前取钱完成,剩余余额是:" + acc.getBalance());
break;
}
}
}
}else {
System.out.println("您当前账户余额不足100元,请先存钱!");
}
}
private static void depositMoney(Account acc, Scanner sc) {
System.out.println("==================欢迎进入账户存款操作======================");
System.out.println("请您输入存款金额:");
double money = sc.nextDouble();
acc.setBalance(acc.getBalance() + money);
showAccount(acc);
}
private static void showAccount(Account acc) {
System.out.println("==================您当前账户详情信息如下======================");
System.out.println("卡号:" + acc.getCardNumber());
System.out.println("户主:" + acc.getName());
System.out.println("余额:" + acc.getBalance());
System.out.println("当次取现额度:" + acc.getQuotaMoney());
}
/**
开户功能
*/
private static void register(ArrayList accounts, Scanner sc) {
System.out.println("==================欢迎您进入到开户操作======================");
// 2、创建一个账户对象封装账户信息
Account acc =new Account();
// 1、录入用户账户信息
System.out.println("请您输入账户名称:");
String userName =sc.next();
acc.setName(userName);
while (true) {
System.out.println("请您选择性别:1.男 2.女");
int select = sc.nextInt();
/* switch (select){
case 1:
String gender="先生";
acc.setSex(gender);
case 2:
String gender1="女士";
acc.setSex(gender1);
default:
System.out.println("您输入的指令有误!");
}*/
int t=0;
if (select==1){
String gender="先生";
acc.setSex(gender);
}else if (select==2){
String gender1="女士";
acc.setSex(gender1);
}else {
System.out.println("您输入的指令有误!");
}
System.out.println("请您输入账户密码:");
String passWord =sc.next();
System.out.println("请您输入确认密码:");
String okPassWord =sc.next();
if(okPassWord.equals(passWord)){
// 密码没有问题
acc.setPassword(okPassWord);
}else {
System.out.println("两次输入的密码不一致!");
}
if ((select==1||select==2)&&okPassWord.equals(passWord)){
break;
}else {
System.out.println("您输入的性别指令有误,或者两次密码不一致,请重新输入:");
}
}
System.out.println("请您设置当次取现额度:");
double quotaMoney = sc.nextDouble();
acc.setQuotaMoney(quotaMoney);
// 关键点:为当前账户生成一个随机的8位数字作为卡号,卡号不能与其他用户的卡号重复。
String cardId =createCardId(accounts);
acc.setCardNumber(cardId);
// 3、把账户对象存入到集合容器对象中去
accounts.add(acc);
System.out.println("恭喜您,"+acc.getName()+ acc.getSex()+"您开户完成,您的卡号是:" + acc.getCardNumber());
}
public static StringcreateCardId(ArrayList accounts){
while (true) {
String cardId ="";
// 随机生成8个数字
Random r =new Random();
for (int i =1; i <=8 ; i++) {
cardId += r.nextInt(10);
}
// 判断这个卡号是否重复:根据卡号去查询账户对象
Account account =getAccountByCardId(cardId, accounts);
if(account ==null){
return cardId;
}
}
}
public static AccountgetAccountByCardId(String cardId, ArrayList accounts){
for (int i =0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
if(acc.getCardNumber().equals(cardId)){
return acc;
}
}
return null;
}
}
**参考自黑马程序员教程教学