目录
一、系统架构搭建、欢迎页设计
二、开户功能实现
三、登录功能实现
四、操作页展示、查询账户、退出账户
五、存款、取款功能实现
六、转账功能实现
七、销户功能实现
八、用户密码修改
九、实现代码
Test.java
package com.itheima.ATM;
public class Test {
public static void main(String[] args) {
ATM atm = new ATM();
atm.start();
}
}
Account.java
package com.itheima.ATM;
public class Account {
private String cardId;
private String userName;
private String password;
private char sex;
private double money;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
}
ATM.java
package com.itheima.ATM;
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;
/** 启动ATM系统,展示欢迎界面 */
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:
creatAcount();
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 acc = getAccountById(cardId);
if(acc == null){
System.out.println("您输入的卡号不正确噢");
}else{
while (true) {
System.out.println("请输入您的密码:");
String passWord = sc.next();
if(acc.getPassword().equals(passWord)){
System.out.println(acc.getUserName()+",您登陆了您的卡号:"+ acc.getCardId());
loginACC = acc;
showUserCommand();
return;
}else{
System.out.println("您输入的密码不正确!!");
}
}
}
}
}
/** 展示登录后的操作界面 */
private void showUserCommand(){
while (true) {
System.out.println("===" + loginACC.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();
break;
case 2:
//存款
depositMoney();
break;
case 3:
//取款
drawMoney();
break;
case 4:
//转账
transferMoney();
break;
case 5:
//修改密码
updatePassWord();
return;
case 6:
//退出
System.out.println(loginACC.getUserName() + "您退出系统成功!");
return;
case 7:
//销户
if(deleteAccount()){
return;
}
break;
default:
System.out.println("您输入的命令不对噢");
}
}
}
/** 修改密码 */
private void updatePassWord() {
System.out.println("===账户密码修改操作===");
while (true) {
System.out.println("请输入当前用户的密码:");
String passWord = sc.next();
if(loginACC.getPassword().equals(passWord)){
while (true) {
System.out.println("请输入新的密码:");
String newPassWord1 = sc.next();
System.out.println("请再次输入新的密码:");
String newPassWord2 = sc.next();
if(newPassWord1.equals(newPassWord2)){
loginACC.setPassword(newPassWord1);
System.out.println("修改密码成功");
return;
}else{
System.out.println("您两次输入的密码不一致!!!");
}
}
}else{
System.out.println("您输入的密码不正确!!!");
}
}
}
/** 销户 */
private boolean deleteAccount() {
System.out.println("===销户操作===");
System.out.println("您真的要销户吗?y/n");
String command = sc.next();
switch (command){
case "y":
if (loginACC.getMoney() == 0){
// 可以销户了
accounts.remove(loginACC);
System.out.println("销户成功");
return true;
}else{
System.out.println("您的账户还有余额,不可以销户!!!");
return false;
}
default:
System.out.println("您的账户会被保留");
return false;
}
}
/** 转账 */
private void transferMoney() {
System.out.println("===用户转账===");
if(accounts.size() < 2){
System.out.println("当前系统里只有您一个账户,无法完成转账!!!");
return;
}
if(loginACC.getMoney() == 0){
System.out.println("您自己已经没钱了噢!!!");
return;
}
while (true) {
System.out.println("请输入对方卡号:");
String cardId = sc.next();
if (getAccountById(cardId) == null){
System.out.println("您输入的卡号不正确噢!!!");
}else {
Account acc = getAccountById(cardId);
String name = "*" + acc.getUserName().substring(1);
System.out.println("您正在为" + name + "转账");
while (true) {
System.out.println("请输入该用户的姓氏:");
String prename = sc.next();
if (acc.getUserName().startsWith(prename)){
//系统里账户至少两个,自己账户有钱,对方卡号、姓氏输入正确,可以开始转账了
while (true) {
System.out.println("请输入转账金额:");
Double money = sc.nextDouble();
if (loginACC.getMoney() >= money){
loginACC.setMoney(loginACC.getMoney() - money);
acc.setMoney(acc.getMoney() + money);
System.out.println("转账成功!!");
System.out.println("您的账户余额:" + loginACC.getMoney());
System.out.println("对方的账户余额:" + acc.getMoney());
return;
}else{
System.out.println("钱不够了啊,您现在最多转账:" + loginACC.getMoney());
}
}
}else{
System.out.println("姓氏输入错误!!!");
}
}
}
}
}
/** 取钱 */
private void drawMoney() {
System.out.println("===取钱操作===");
if(loginACC.getMoney()<100){
System.out.println("当前账户余额不足100元,无法取钱");
return;
}
while (true) {
System.out.println("请输入取钱金额:");
double money = sc.nextDouble();
if(loginACC.getMoney() < money){
System.out.println("当前账户余额不足,您的余额是:"+loginACC.getMoney());
}else {
if(loginACC.getLimit() < money){
System.out.println("超出取款限额");
}else {
loginACC.setMoney(loginACC.getMoney() - money);
System.out.println("取钱" + money + "成功!您当前的余额是:" + loginACC.getMoney());
break;
}
}
}
}
// 存钱
private void depositMoney() {
System.out.println("===存钱操作===");
System.out.println("请输入存钱金额:");
double money = sc.nextDouble();
loginACC.setMoney(loginACC.getMoney() + money);
System.out.println("存钱"+ money +"成功!您当前的余额是:" + loginACC.getMoney());
return;
}
// 展示当前登录的账户信息
private void showLoginAccount(){
System.out.println("===当前您的账户信息如下:===");
System.out.println("账户卡号:" + loginACC.getCardId());
System.out.println("账户姓名:" + loginACC.getUserName());
System.out.println("账户性别:" + loginACC.getSex());
System.out.println("账户余额:" + loginACC.getMoney());
System.out.println("账户额度:" + loginACC.getLimit());
}
/** 用户开户 */
private void creatAcount(){
System.out.println("====系统开户====");
Account acc = new Account();
System.out.println("请输入您的账户姓名:");
String name = sc.next();
acc.setUserName(name);
while (true) {
System.out.println("请输入您的性别:");
char sex = sc.next().charAt(0);
if( sex == '男' || sex == '女' ){
acc.setSex(sex);
break;
}else{
System.out.println("您输入的性别有误,只能输入男或者女!!");
}
}
while (true) {
System.out.println("请输入您的账户密码:");
String passWord1 = sc.next();
System.out.println("请再次确认账户密码:");
String passWord2 = sc.next();
if( passWord1.equals(passWord2) ){
acc.setPassword(passWord1);
break;
}else{
System.out.println("您输入密码不一致!!!");
}
}
System.out.println("请输入您的取现额度:");
double limit = sc.nextDouble();
acc.setLimit(limit);
//为账户自动生成9位卡号,且不能和其他账户的卡号重复
String cardId = creatCardId();
acc.setCardId(cardId);
accounts.add(acc);
System.out.println(acc.getUserName() + "开户成功,您的卡号是:"+acc.getCardId());
}
//为账户自动生成9位卡号,且不能和其他账户的卡号重复
private String creatCardId(){
while (true) {
String cardId = "";
Random r = new Random();
for (int i = 0; i < 8; i++) {
int data = r.nextInt(10);
cardId += data;
}
if(getAccountById(cardId) == null){
return cardId;
}
}
}
//根据卡号查找账户
private Account getAccountById(String cardId){
for (int i = 0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
if(acc.getCardId().equals(cardId)){
return acc;
}
}
return null;
}
}