《ATM项目》--- 控制台项目

 一 . 创建一个Account类

//账户类
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;
    }
}

 二 . 通过主函数调用方法

public static void main(String[] args) {
        //1.准备系统需要的容器对象,用于储存账户对象
        ArrayList<Account> accounts = new ArrayList<>();
        //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("您当前输入的操作指令不被支持!");
            }
        }
    }

四 . 用户登录方法 

/**
     * 完成用户登录
     *
     * @param accounts 账户的集合对象
     */
    private static void login(ArrayList<Account> accounts, Scanner sc) {
        //必须系统中存在账户才可以登录
        if (accounts.isEmpty()) {
            //没有账户
            System.out.println("当前系统中无任何账户,您需要先注册!");
            return;
            //直接结束方法
        }
        while (true) {
            //2.让用户键盘录入卡号
            System.out.println("请您输入登录的卡号:");
            String cardId = sc.next();
            //根据卡号查询账户对象
            Account acc = getAccountByCardId(cardId, accounts);
            //3.判断账户对象是否存在,存在说明卡号没问题
            if (acc != null) {
                //4.让用户继续输入密码
                System.out.println("请您输入登录的密码:");
                String password = sc.next();
                //5.判断密码是否正确
                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.注销账户");
            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(accounts, acc, sc);
                    break;
                case 5:
                    //修改密码
                    updataPassWord(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 updataPassWord(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 okNewPassWord = sc.next();
                if (newPassWord.equals(okNewPassWord)) {
                    //修改账户对象的密码为新密码
                    acc.setPassWord(newPassWord);
                    return;
                    //直接结束方法9
                } else {
                    System.out.println("您两次输入的密码不一致");
                }
            } else {
                System.out.println("当前输入密码不正确!!!");
            }
        }
    }

 七 . 转账方法

/**
     * 转账
     *
     * @param accounts
     * @param acc
     * @param sc
     */
    private static void transferMoney(ArrayList<Account> accounts, Account acc, Scanner sc) {
        //判断系统中是否有两个用户及以上
        if (accounts.size() < 2) {
            System.out.println("对不起,系统中无其他账户,您不可以转账!");
            return;
        }
        //2.判断自己账户中是否有钱
        if (acc.getMoney() == 0) {
            System.out.println("对不起,您自己都没有钱,就别转帐了");
            return;
        }
        //3.开始转账逻辑
        System.out.println("请你输入对方账户卡号:");
        String cardId = sc.next();
        Account account = getAccountByCardId(cardId, accounts);
        //判断这个账户对象是否存在,存在说明对方卡号输入正确
        if (account != null) {
            //判断这个账户对象是否是当前登陆的自己账户
            if (acc.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("恭喜您,转账成功,已经为" + acc.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("====================取款操作====================");
        //1.判断他的账户是否足够100
        if (acc.getMoney() >= 100) {
            while (true) {
                System.out.println("请您输入取款的金额:");
                double money = sc.nextDouble();
                //2.判断这个金额是否超过当前限额
                if (money > acc.getQuotaMoney()) {
                    System.out.println("您当次取款金额超过每次限额,不要取那么多,每次最多取:" + acc.getQuotaMoney());
                } else {
                    //3.判断当前余额是否足够你取钱
                    if (acc.getMoney() >= money) {
                        //钱够,可以取钱
                        acc.setMoney(acc.getMoney() - money);
                        System.out.println("恭喜您,取钱" + money + "成功!!!当前账户余额还剩:" + acc.getMoney());
                        return;
                        //取钱后结束方法
                    } else {
                        System.out.println("当前余额不足!!!");
                    }
                }
            }
        } else {
            System.out.println("您自己的金额没有超过100,就别取了!!!");
        }
    }

 九 . 存钱方法

/**
     * 存钱
     *
     * @param acc
     * @param sc
     */
    private static void depositMoney(Account acc, Scanner sc) {
        System.out.println("====================存款操作====================");
        System.out.println("请您输入存款的金额:");
        double money = sc.nextDouble();
        //直接把金额修改到账户用户的money属性
        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());
    }

 十一 . 开户方法

/**
     * 用户开户功能
     *
     * @param accounts
     * @param sc
     */
    private static void register(ArrayList<Account> accounts, Scanner sc) {
        //2.键盘录入 姓名 密码 确认密码
        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 quotaMoney = sc.nextDouble();
        //3.生成账户的卡号,卡号是8位数,而且不能与其他卡号重复
        String cardId = createCardId(accounts);
        //4.创建一个账户对象封装账户的信息
        Account account = new Account(cardId, name, password, quotaMoney);
        //5.把账户对象添加到集合中去
        accounts.add(account);
        System.out.println("恭喜您!开户成功!您的卡号是:" + account.getCardId() + ",请妥善保管");
    }

 十二 . 随机生成卡号

 public static String createCardId(ArrayList<Account> accounts) {
        while (true) {
            //生成8位随机的数字代表卡号
            StringBuilder cardId = new StringBuilder();
            Random r = new Random();
            for (int i = 0; i < 8; i++) {
                cardId.append(r.nextInt(10));
            }
            //判断卡号是否重复
            Account acc = getAccountByCardId(cardId.toString(), accounts);
            if (acc == null) {
                //说明当前卡号没有重复
                return cardId.toString();
            }
        }
    }

 十三 . 确认账户是否重复

public static Account getAccountByCardId(String cardId, ArrayList<Account> accounts) {
        for (Account acc : accounts) {
            if (acc.getCardId().equals(cardId)) {
                return acc;
            }
        }
        return null;
        //查无此账户,说明此账户没有重复
    }

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    博哥爱学习

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值