先创建一个project -> 再创建module -> 创建包package 包名com.domain -> 创建定义 class

例如:整合课程是一个project 每天是一个模块module

包结构示例:

ATMSystem.java

package com.domain;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/**
 * ATM 系统的入口类
 */

public class ATMSystem {
    public static void main(String[] args) {
        // 1、定义账户类
        // 2、定义一个集合容器,负责存储全部账户对象负责业务操作
        ArrayList accounts = new ArrayList<>();

        Scanner sc = new Scanner(System.in);

        // ctrl + alt + T 包成死循环
        while (true){
            // 3、展示系统的首页
            System.out.println("-----------------------ATM系统-------------------------");
            System.out.println("1、账户登录");
            System.out.println("2、账户注册");

            int command = sc.nextInt();

            switch (command) {
                case 1:
                    // 用户登录
                    login(accounts, sc);
                    break;
                case 2:
                    // 用户账户开户 Alt + 回车 自动生成函数
                    register(accounts);
                    break;
                default:
                    System.out.println("对不起,您操作的命令不存在!");
            }
        }

    }

    private static void login(ArrayList accounts,Scanner sc) {
        System.out.println("==================系统登陆操作================");

        if(accounts.size() == 0) {
            System.out.println("当前系统还没有账号");
            return;
        }

        while (true) {
            System.out.println("请您输入登陆卡号");
            String cardId = sc.next();
            // 判断卡号是否存在
            Account acc = getAccountByCardId(cardId, accounts);

            if(acc != null) {
                System.out.println("请输入登陆密码:");
                String pwd = sc.next();

                if(acc.getPassWord().equals(pwd)) {
                    // 登陆成功
                    System.out.println("恭喜您" + acc.getUserName() + "登陆成功,您的卡号是" + acc.getCardId());

                    // 展示登陆后的操作页
                    showUserCommand(sc, acc, accounts);
                    return;
                } else {
                    System.out.println("您输入的密码有误");
                }
            }else{
                System.out.println("抱歉,卡号不存在");
            }
        }


    }

    /**
     展示登陆后的操作页
     */
    private static void showUserCommand(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(sc, acc, accounts);
                    break;
                case 5:
                    // 修改密码
                    updatePassWord(sc, acc);
                    return;
                case 6:
                    // 退出
                    System.out.println("退出成功");
                    return; // 当前方法停止执行
                case 7:
                    // 注销账户
                    if(deleteAccount(acc, sc, accounts)) {
                        // 销户成功,回到首页
                        return;
                    } else {
                        break;
                    }
                default:
                    System.out.println("您输入的操作命令不正确");
            }
        }
    }

    /**
     * 销户功能
     * @param acc
     * @param sc
     * @param accounts
     */
    private static boolean deleteAccount(Account acc, Scanner sc, ArrayList accounts) {
        System.out.println("==================用户销户================");
        System.out.println("您真的要销户? y/n");
        String rs = sc.next();
        switch (rs) {
            case "y":
                // 销户开始
                if(acc.getMoney() > 0){
                    System.out.println("您还有资金,无法销户");
                } else {
                    accounts.remove(acc);
                    System.out.println("销户完成");
                    return true;
                }
                break;
            default:
                System.out.println("账户继续保留");
        }
        return false;
    }

    /**
     * 修改密码
     * @param sc 扫描器
     * @param acc 当前登录成功账户
     */
    private static void updatePassWord(Scanner sc, Account acc) {
        System.out.println("==================用户密码修改================");
        while (true) {
            System.out.println("请您输入当前密码:");
            String passWord = sc.next();

            // 1、 判断密码是否正确
            if(acc.getPassWord().equals(passWord)) {
                // 密码正确,输入新密码
                System.out.println("请输入新密码:");
                String newPassWord = sc.next();

                System.out.println("请确认新密码:");
                String okPassWord = sc.next();

                if(newPassWord.equals(okPassWord)) {
                    // 两次密码输入一致可以修改
                    acc.setPassWord(newPassWord);
                    System.out.println("恭喜,密码修改成功");
                    return;
                } else {
                    System.out.println("两次密码输入不一致");
                }
            } else {
                System.out.println("您输入的密码不正确");
            }
        }
    }

    /**
     * 转账
     * @param sc
     * @param acc
     * @param accounts
     */
    private static void transferMoney(Scanner sc, Account acc, ArrayList accounts) {
        System.out.println("==================用户转账================");
        if (accounts.size() < 2) { System.out.println("当前系统中不足2个账户"); return; } if (acc.getMoney() == 0) { System.out.println("余额为0,不能转账"); return; } while (true) { System.out.println("请输入对方账户卡号:"); String cardId = sc.next(); if (cardId.equals(acc.getCardId())) { System.out.println("对不起,不能给自己转账"); continue; } // 判断卡号是否存在 Account account = getAccountByCardId(cardId, accounts); if (account == null) { System.out.println("对方卡号不存在"); } else { String userName = account.getUserName(); String tip = "*" + userName.substring(1); System.out.println("请您输入["+ tip +"]的姓氏"); String preName = sc.next(); // 判断姓氏是否正确 if(userName.startsWith(preName)) { while (true) { // 认证通过开始转账 System.out.println("请输入转账金额:"); double money = sc.nextDouble(); if (money > acc.getMoney()) {
                            System.out.println("对不起余额不足,您最多可以转账" + acc.getMoney());
                        } else {
                            // 余额充足,开始转账
                            acc.setMoney(acc.getMoney() - money);
                            account.setMoney(account.getMoney() + money);
                            System.out.println("转账成功!您的账户剩余" + acc.getMoney());
                            return;
                        }
                    }
                } else {
                    System.out.println("对不起,您输入的信息有误");
                }
            }
        }
    }

    /**
     * 存款
     * @param acc 当前账户对象
     * @param sc 扫描器
     */

    private static void depositMoney(Account acc, Scanner sc) {
        System.out.println("==================用户存款================");
        System.out.println("请输入存款金额:");
        double money = sc.nextDouble();

        acc.setMoney(acc.getMoney() + money);
        System.out.println("恭喜,存款成功,账户信息:");
        showAccount(acc);
    }

    /**
     * 取款
     * @param acc
     * @param sc
     */
    private static void drawMoney(Account acc, Scanner sc) {
        System.out.println("==================用户取款================");
        if (acc.getMoney() < 100) { System.out.println("金额不足100元"); return; } System.out.println("请输入取款金额"); double money = sc.nextDouble(); if (money > acc.getQuotaMoney()) {
            System.out.println("取款超过单次限额,限额" + acc.getQuotaMoney());
        } else {
            // 检查余额
            if (money > acc.getMoney()) {
                System.out.println("余额不足,当前余额:" + acc.getMoney());
            } else {
                acc.setMoney(acc.getMoney() - money);
                System.out.println("取款成功,当前账户信息:");
                showAccount(acc);
                return;
            }
        }

    }

    /**
     * 展示账户信息
     * @param acc
     */
    private static void showAccount(Account acc) {
        System.out.println("==================当前账户信息如下================");
        System.out.println("卡号" + acc.getCardId());
        System.out.println("姓名" + acc.getUserName());
        System.out.println("余额" + acc.getMoney());
        System.out.println("限额" + acc.getQuotaMoney());
    }

    /**
     * 用户开户功能的实现
     * @param accounts 接收账户的集合
     */
    private static void register(ArrayList accounts) {
        System.out.println("==================系统开户操作================");

        // 1、创建一个账户集合
        Account account = new Account();

        // 2、录入账户信息
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入用户名:");
        String userName = sc.next();
        account.setUserName(userName);

        while(true) {
            System.out.println("请输入密码:");
            String pwd1 = sc.next();

            System.out.println("再次输入密码:");
            String pwd2 = sc.next();

            if(pwd2.equals(pwd1)){
                // 两次密码输入一致
                account.setPassWord(pwd1);
                break;
            }else{
                System.out.println("两次密码输入不一致,请检查");
            }
        }

        System.out.println("请输入当前限额:");
        double quotaMoney = sc.nextDouble();
        account.setQuotaMoney(quotaMoney);

        // 为账户随机生成8位不重复卡号
        String cardId = getRandCardId(accounts);
        account.setCardId(cardId);


        // 3、添加到集合中
        accounts.add(account);
        System.out.println("恭喜您" + userName + "成功开卡,卡号 "+ cardId);
    }

    /**
     * 为账户生成8位随机不重复卡号
     * @return
     */
    private static String getRandCardId(ArrayList accounts){
        Random r = new Random();

        while(true) {
            String randNumber = "";
            for (int i = 0; i < 8; i++) {
                randNumber += r.nextInt(10);
            }

            // 判断卡号是否重复
            Account acc = getAccountByCardId(randNumber, accounts);

            if(acc == null) {
                return randNumber;
            }
        }

    }

    /**
     * 根据卡号获取账户
     * @param cardId 卡号
     * @param accounts 账户集合
     * @return
     */
    private static Account getAccountByCardId(String cardId, ArrayList accounts){
        for (int i = 0; i < accounts.size(); i++) {
            Account acc = accounts.get(i);
            if(cardId.equals(acc.getCardId())) {
                return acc;
            }
        }
        return null;
    }
}

Account.java

package com.domain;

/**
 * 账户类
 */

public class Account {
    /**
     * 成员变量 私有
     */
    private String cardId;
    private String userName; // 用户名
    private String passWord; // 密码
    private double money; // 账户余额
    private double quotaMoney; // 每次取现额度

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public double getQuotaMoney() {
        return quotaMoney;
    }

    public void setQuotaMoney(double quotaMoney) {
        this.quotaMoney = quotaMoney;
    }
}