本项目直接写在两个类里
Talk is cheap. Show me the code.

package itjiangfeng;

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

public class ATMSystem {
    public static void main(String[] args) {
        //1.系统需要的容器对象
        ArrayList<Account>accounts = new ArrayList<Account>();
        //2.首页登录界面
        showMain(accounts);

    }
    public static void showMain(ArrayList<Account> accounts){
        System.out.println("=================欢迎进入首页=================");
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请您输入您想做的操作:");
            System.out.println("1、登录");
            System.out.println("2、开户");
            System.out.println("您可以在此输入命令:");
            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<Account> accounts,Scanner sc) {
        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){
                //让用户继续输入密码
                while (true) {
                    System.out.println("请您输入用户密码:");
                    String password = sc.next();
                    if(acc.getPassWord().equals(password)){
                        //密码正确
                        //展示系统登录成功后界面
                        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<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("请您输入操作命令:");
            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(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) {
        System.out.println("========修改密码==========");
        while (true) {
            System.out.println("请您输入原账户密码");
            String okPassword = sc.next();
            if(acc.getPassWord().equals(okPassword)){
                System.out.println("请您输入新密码:");
                String newPassword = sc.next();
                System.out.println("请再次输入新密码:");
                String okPassword2 = sc.next();
                if(newPassword.equals(okPassword2)){
                    //正式进入修改密码逻辑
                    acc.setPassWord(newPassword);
                    return;
                }else{
                    System.out.println("两次输入密码不一致");
                }
            }else {
                System.out.println("您当前输入密码不正确~~~");
            }
        }
    }

    /**
     * 转账功能
     * @param sc
     * @param acc
     * @param accounts
     */
    private static void transferMoney(Scanner sc, Account acc, ArrayList<Account> accounts) {
        //层层过滤
        //1判断系统中账号是否有两个及以上
        if(accounts.size() < 2){
            System.out.println("系统中无其他账户,无法转账!");
            return;
        }
        //判断自己账户是否有钱
        if(acc.getMoney() == 0){
            System.out.println("亲,余额不足,无法完成转账功能!");
            return;
        }
        //转账逻辑
        while (true) {
            System.out.println("请您输入对方账号卡号:");
            String cardId = sc.next();
            Account account = getAccountByCardId(cardId,accounts);

            if(account != null){
                if(account.getCardId().equals(acc.getCardId())){
                    System.out.println("您不可以为自己转账!");
                }else {
                    //确认对方
                    String name = "*" + account.getUserName().substring(1);
                    System.out.println("请您确认对方姓氏是否是"+name);
                    String prename = sc.next();
                    if(account.getUserName().startsWith(prename)){
                        //真正开始转账
                        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("恭喜你,转账成功!已经为"+ account.getUserName()+"转账"+money);
                            showAccount(acc);
                            return;
                        }
                    }else {
                        System.out.println("对不起,转账用户信息有误");
                    }
                }
            }else {
                System.out.println("对不起,您输入的转账卡号有问题!");
            }
        }

    }

    /**
     * 取款功能
     * @param acc
     * @param sc
     */

    private static void drawMoney(Account acc, Scanner sc) {
        System.out.println("============取款界面==========");
        //判断账户
        if (acc.getMoney() >= 100){
            while (true) {
                System.out.println("请输入取款金额");
                double money = sc.nextDouble();
                if(money>acc.getQuotaMoney()){
                    System.out.println("您当前取钱超过了每次限额,您每次最多取:" + acc.getQuotaMoney());
                }else{
                    if(acc.getMoney() >= money){
                        acc.setMoney(acc.getMoney()-money);
                        System.out.println("恭喜你,取钱成功!当前账户余额:"+acc.getMoney() );
                        return;//取钱后方法结束
                    }else {
                        System.out.println("余额不足");
                    }
                }
            }

        }else{
            System.out.println("金额<100,建议不要取款");
        }
    }

    //存款
    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);
    }

    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());
    }
    //用户开户功能

    private static void register(ArrayList<Account> accounts,Scanner sc) {
        System.out.println("==========用户开户功能==========");
        System.out.println("请您输入开户名称:");
        String name = sc.next();
        String password ="";
        while (true) {
            System.out.println("请您输入开户密码:");
            password = sc.next();
            System.out.println("请您输入确认密码:");
            String okPassword = sc.next();

            if(okPassword.equals(password)){
                break;

            }else{
                System.out.println("两次密码必须一致");
            }
        }
        System.out.println("请您输入单次限额:");
        double quateMoney = sc.nextDouble();
        //3.生成一个账号卡号,不能与其他卡号重复
        String cardId = creatCardId(accounts);
        //4.创建一个账号对象
        Account account = new Account(cardId,name,password,quateMoney);
        //5.把账户对象添加到集合中去
        accounts.add(account);
        System.out.println("恭喜您,开户成功!您的卡号是" + account.getCardId() + "请你妥善保管");

    }
    public static String creatCardId(ArrayList<Account>accounts){
        while (true) {
            String cardId = "";
            Random r = new Random();
            for (int i = 0; i < 8; i++) {
                cardId += r.nextInt(10);
            }
            Account acc = getAccountByCardId(cardId,accounts);
            if(acc == null){
                return cardId;
            }
        }

    }
//根据卡号找用户对象
    public static Account getAccountByCardId(String cardId, ArrayList<Account>accounts){
        for (int i = 0; i < accounts.size(); i++) {
            Account acc = accounts.get(i);
            if(acc.getCardId().equals(cardId)){
                return acc;
            }
        }
        return null;//查无此账号
    }

}
package itjiangfeng;

public class Account {
    private String cardId;
    private String userName;
    private String passWord;
    private double money;
    private double quotaMoney;

    public Account() {
    }

    public Account(String cardId, String userName, String passWord, double quotaMoney) {
        this.cardId = cardId;
        this.userName = userName;
        this.passWord = passWord;
        this.quotaMoney = 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;
    }
}