模拟ATM系统

包含注册用户,登录用户,查看用户信息、存款、取款、给其他用户转账、修改密码、退出登录、注销当前用户,的功能(自己弄得比较墨迹,但是各个功能还是可以出来的)

package com.itheima;

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

/**
    首页:包含登录和注册2个功能
         每个用户的账户信息都是一个对象,需要提供账户类。
         需要准备一个容器,用于存储系统全部账户对象信息
 */
public class Test {
    public static void main(String[] args) {
        ArrayList<Account> accounts = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        OUT:
        while (true) {
            System.out.print("========欢迎您进入银行ATM系统========\n"
                    +"1. 登录账户\n"+"2. 注册账户\n"
                    +"3. 退出系统\n"
                    +"请输入命令1、2、3选择对应的操作:");
            int operate = sc.nextInt();
            switch (operate){
                case 1:
                    // 登录
                    Login(accounts);
                    break;
                case 2:
                    // 注册
                    Enroll(accounts);
                    break;
                case 3:
                    //退出系统
                    break OUT;
                default:
                    System.out.println("您输入的命令不存在");
            }
        }
    }

    /** ATM系统,用户注册模块
     * 创建一个Account账户类的对象用于封装账户信息(姓名、密码、卡号)
     * 键盘录入姓名、密码、确认密码(需保障两次密码一致)
     * 生成账户卡号,卡号必须由系统自动生成8位数字(必须保证卡号的唯一)
     * 把Account账户对象存入到集合accounts中去。
     * @param accounts 接收的账户集合
     * @return
     */
    public static void Enroll(ArrayList<Account> accounts){
        System.out.println("--------------系统开户功能-----------------");
        Scanner sc = new Scanner(System.in);
        // 1.创建一个账户对象,用于后期封装账户信息。
        Account account = new Account();

        // 2.录入当前这个账户的信息,注入到账户对象中去。
        System.out.println("请您输入您的姓名:");
        String name = sc.next();
        account.setName(name);
        while (true) {
            System.out.println("请您输入您的密码:");
            String password = sc.next();
            System.out.println("请您再次输入密码:");
            String password1 = sc.next();
            if (password.equals(password1)){
                account.setPassword(password);
                break;
            }else{
                System.out.println("您输入的两次密码不一致,请重新输入");
            }
        }
        System.out.println("请您输入当次取现额度:");
        double maxmoney = sc.nextDouble();
        account.setMaxmoney(maxmoney);
        Random r = new Random();
        // 为账户随机一个8位且与其他账户不重复的卡号。(独立功能,独立成方法)。
        String cardId = getRandomCardId(accounts);
        account.setCodenumber(cardId);

        System.out.println(account.getName()
                + "您的账户已经开卡成功,您的卡号是:"
                + account.getCodenumber());

        // 3.把账户对象添加到账户集合中去。
        accounts.add(account);
    }

    /**
     *  随机生成8位数卡号
     * @param accounts
     * @return
     */
    private static String getRandomCardId(ArrayList<Account> accounts) {
        // 1.随机生成八位数字组成卡号
        String codeId = "";
        Random r = new Random();
        while (true) {
            for (int i = 0; i < 8; i++) {
                codeId += r.nextInt(10);
            }

            // 2.判断这个8位的卡号是否与其他的卡号重复了。(独立成一个方法)
            if (getAccountByCardId(codeId,accounts) == null){
                //不重复
                return codeId;
            }
        }
    }

    /**
     *  根据卡号查询出一个账户对象出来
     * @param cardId    卡号
     * @param accounts  全部账户的集合
     * @return          账户对象 | null
     */
    public static Account getAccountByCardId(String cardId,ArrayList<Account> accounts){
        for (int i = 0; i < accounts.size(); i++) {
            if (accounts.get(i).getCodenumber().equals(cardId)){
                return accounts.get(i);
            }
        }
        return null;
    }

    /**
     * 登录界面
     * @param accounts
     */
    public static void Login(ArrayList<Account> accounts){
        Scanner sc = new Scanner(System.in);
        System.out.println("========银行ATM系统登录界面========");
        // 判断是否存在账户
        if (accounts.size() != 0) {
            while (true) {
                System.out.print("请输入您的卡号:");
                String cardId = sc.next();
                if(getAccountByCardId(cardId,accounts) == null){
                    System.out.println("您输入的卡号不存在,请重新输入~~");
                }else{
                    while (true) {
                        System.out.println("请输入您的密码");
                        String password = sc.next();
                        if(getAccountByCardId(cardId,accounts).getPassword().equals(password)){
                            System.out.println("欢迎卡号为"
                                    + getAccountByCardId(cardId, accounts).getCodenumber()
                                    + getAccountByCardId(cardId, accounts).getName()
                                    + "进入ATM系统");
                            homePage(getAccountByCardId(cardId,accounts),accounts);
                            break;
                        }else{
                            System.out.println("您输入的密码错误,请重新输入~~");
                        }
                    }
                }
                break;
            }
        }else{
            System.out.println("系统中没有已经开户的用户信息,请先注册账户");
        }
    }

    /**
     *  业务操作界面
     * @param account
     * @param accounts
     */
    public static void homePage(Account account,ArrayList<Account> accounts){
        Scanner sc = new Scanner(System.in);
        OUT:
        while (true) {
            System.out.println("========欢迎您进入ATM系统业务操作界面========");
            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.print("您可以继续选择功能进行操作了:");
            int choose = sc.nextInt();
            switch (choose){
                case 1:
                    // 查询
                    inquireUser(account);
                    break;
                case 2:
                    // 存款
                    depositMoney(account);
                    break;
                case 3:
                    // 取款
                    takeMoney(account);
                    break;
                case 4:
                    // 转账
                    giveMoney(account,accounts);
                    break;
                case 5:
                    // 修改密码
                    changePassword(account);
                    break;
                case 6:
                    // 退出登录
                    break OUT;
                case 7:
                    // 注销当前账户
                    logout(account,accounts);
                    break OUT;
                default:
                    System.out.println("您输入的命令不存在~~");
            }
        }
    }

    /**
     *  查询账户信息
     * @param account
     */
    public static void inquireUser(Account account){
        System.out.println("========欢迎您进入银行用户详情界面========");
        System.out.println("您的账户信息如下:");
        System.out.println("卡号:" + account.getCodenumber());
        System.out.println("姓名:" + account.getName());
        System.out.println("余额:" + account.getMoney());
        System.out.println("当次取现额度:" + account.getMaxmoney());
    }

    /**
     *  存款界面
     * @param account
     */
    public static void depositMoney(Account account){
        Scanner sc = new Scanner(System.in);
        System.out.println("-----------银行存款界面------------");
        System.out.println("请输入您想要存款的金额");
        double depMoney = sc.nextDouble();
        Double money = account.getMoney();
        double sumMoney = money + depMoney;
        account.setMoney(sumMoney);
        System.out.println("存款成功~~,您的账户现有余额:" + account.getMoney());
    }

    /**
     *  取款界面
     * @param account
     */
    public static void takeMoney(Account account){
        Scanner sc = new Scanner(System.in);
        System.out.println("------------银行取款界面------------");
        while (true) {
            System.out.println("请输入您要取款的金额");
            double takemoney = sc.nextDouble();
            if (takemoney <= account.getMaxmoney()){
                if (takemoney <= account.getMoney()) {
                    double money = account.getMoney() - takemoney;
                    account.setMoney(money);
                    System.out.println("取款成功~~,您的账户还剩金额:" + account.getMoney());
                    break;
                } else {
                    System.out.println("您输入的金额大于您账户现有金额:" + account.getMoney() + ",请重新输入需要提现的金额");
                }
            }else{
                System.out.println("您输入的金额大于当次提现额度");
            }
        }
    }

    /**
     *  转账界面
     * @param account
     * @param accounts
     */
    public static void giveMoney(Account account,ArrayList<Account> accounts){
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("-------------银行转账界面-------------");
            System.out.println("请您输入您要转账的卡号:");
            String cardId = sc.next();
            if (getAccountByCardId(cardId,accounts) == null){
                System.out.println("很遗憾~~您输入的卡号不存在,请重新输入!");
            }else{
                System.out.println("请输入您要转账的金额:");
                double givemoney = sc.nextDouble();
                if (givemoney <= account.getMoney()){
                    double sunmoney = getAccountByCardId(cardId,accounts).getMoney() + givemoney;
                    getAccountByCardId(cardId,accounts).setMoney(sunmoney);
                    double money = account.getMoney() - givemoney;
                    account.setMoney(money);
                    System.out.println("转账成功!!您的账户现在余额为:" + account.getMoney());
                    break;
                }else{
                    System.out.println("您输入的金额已经超出您的余额,请重新输入转账金额");
                }
            }
        }
    }

    /**
     *  修改密码界面
     * @param account
     */
    public static void changePassword(Account account){
        // 旧的密码
        String oldpassword = account.getPassword();
        Scanner sc = new Scanner(System.in);
        // 新的密码
        while (true) {
            System.out.println("-------------修改密码界面-------------");
            System.out.println("请您输入新的密码:");
            String newpassword = sc.next();
            if (newpassword.equals(oldpassword)){
                System.out.println("您输入的新密码与旧密码一致,请重新输入新的密码:");
            }else{
                System.out.println("请您再次输入新的密码进行确认:");
                String pw = sc.next();
                if (pw.equals(newpassword)){
                    account.setPassword(newpassword);
                    System.out.println("密码更改成功");
                    break;
                }else{
                    System.out.println("您输入的两次密码不一致,请重新输入密码");
                }
            }
        }
    }

    /**
     * 注销用户
     * @param account
     */
    public static void logout(Account account,ArrayList<Account> accounts){
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("-------------注销当前账户界面-------------");
            System.out.println("是否确定注销当前账户(输入:是|否)");
            String xuanze = sc.next();
            if (xuanze.equals("是")){
                if (account.getMoney() == 0.0) {
                    accounts.remove(account);
                    System.out.println("当前账户已成功删除");
                    break;
                }else{
                    System.out.println("您当前账户仍有余额,将余额全部取出后再进行销户");
                    takeMoney(account);
                }
            }else{
                System.out.println("您做出注册行为,虽已经取消注销行为,但仍需重新登录~~");
                break;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值