java简单的ATM系统

package com.ATM;

import com.sun.org.apache.xpath.internal.objects.XString;

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

public class AtmSystem {
    public static void main(String[] args) {
        //定义账户类
        //定义一个集合容器负责以后存储全部的账户对象
        ArrayList<Account> accounts = new ArrayList<>();

        while (true) {
            System.out.println("----------------------zyjATM系统--------------------");
            System.out.println("1.账户登录");
            System.out.println("2.账户开户");

            Scanner sc = new Scanner(System.in);
            System.out.println("请选择你的操作:");
            int command = sc.nextInt();

            switch (command){
                //用户登录
                case 1:
                    login(accounts,sc);

                    break;
    //                开户
                case 2:
                    regist(accounts,sc);
                    break;

                default:
                    System.out.println("你输入的操作命令有误!!!");
            }
        }
    }

    /**
     * 登录功能
     * @param accounts 全部账户对象的集合
     * @param sc  扫描器
     */
    private static void login(ArrayList<Account> 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){
                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:
                    //1.查询账户
                    showAccount(acc);
                    break;
                case 2:
                    //2.存款
                    depositMoney(acc,sc);
                    break;
                case 3:
                    //3.取款
                    drewMoney(acc,sc);
                    break;
                case 4:
                    //4.转账
                    transferMoney(acc,sc,accounts);
                    break;
                case 5:
                    //5.修改密码
                    updatePassWord(sc,acc);
                    return;//结束当前方法的执行
                case 6:
                    //退出
                    System.out.println("退出成功,欢迎下次光临");
                    return;//结束当前方法的执行
                case 7:
                    //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<Account> 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();
            //判断密码是否正确
            if(acc.getPassWord().equals(passWord)){
                //密码正确
                //输入新密码
                while (true) {
                    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 acc 自己的账户对象
     * @param sc 扫描器
     * @param accounts 全部的转户集合
     */
    private static void transferMoney(Account acc, Scanner sc, ArrayList<Account> accounts) {
        System.out.println("==============用户转账操作============");
        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();
            //不能给自己转账
            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 + "转账,需要进行验证~~~");
                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("你成功转账:" + money + "元给" + account.getUserName());
                            System.out.println("你的账户还有:" + acc.getMoney() + "元");
                            return;//结束转账方法
                        }
                    }
                }else {
                    System.out.println("对不起,你输入的信息有误~~~");
                }


            }
        }
    }

    /**
     * 取钱功能
     * @param acc 当前账户对象
     * @param sc  扫描器
     */
    private static void drewMoney(Account acc, Scanner sc) {
        System.out.println("===============用户取钱操作================");
        while (true) {
            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()+"元");
                    return;
                }else {
                    System.out.println("恭喜,你已经取出" + money + "元");
                    acc.setMoney(acc.getMoney()-money);
                    showAccount(acc);
                    return;//结束取钱
                }

            }
        }
    }

    /**
     * 对账户进行存款
     * @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
     */
    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 regist(ArrayList<Account> accounts,Scanner sc) {
        System.out.println("=================系统开户操作================");
        //创建一个账户对象,用于后期封装账户信息
        Account account = new Account();

        //录入当前账户的信息,注入到账户对象中去
        System.out.println("请输入账户用户名:");
        String userName = sc.next();
        account.setUserName(userName);
        while (true) {
            System.out.println("请输入账户密码:");
            String passWord = sc.next();
            System.out.println("再次输入确认密码:");
            String okPassWord = sc.next();
            if (okPassWord.equals(passWord)){
                //密码确认后可以注入给账户对象
                account.setPassWord(okPassWord);
                break;
            }else {
                System.out.println("对不起,你输入的两次密码不正确,请重新输入~~~");
            }
        }

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

        //为账户随机生成一个8位的卡号

        String cardId = getRandomCardId(accounts);
        account.setCardId(cardId);


        //把对象添加到集合中去
        accounts.add(account);
        System.out.println("恭喜你,"+userName+"先生/女士,你开户成功,你的卡号是: "+cardId);


    }

    /**
     * 为账户生成一个8位与其他账户不同的卡号
     * @return
     */
    private static String getRandomCardId(ArrayList<Account> accounts) {
        //生成8位数字
        Random r = new Random();
        while (true) {
            String cardId ="";
            for (int i = 0; i <8; i++) {
                cardId += r.nextInt(10);
            }

            //判断卡号是否重复
            Account acc =  getAccountByCardId(cardId,accounts);
            if (acc == null){
                return cardId;
            }
        }
    }

    /**
     * 根据卡号查询出一个账户对象出来
     * @param cardId
     * @param accounts
     * @return
     */
    private 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 com.ATM;

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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_44765534/article/details/126875771