JAVA-----ATM模拟系统

用户界面(输入选项当前数字即可)

Account类:

public class Account {
    //用户类
    private String CardId;//用户卡号
    private String userName;//用户名
    private String passWord;//用户密码
    private double money;//账户金额
    private double quotaMoney;//转账限额
    //创建get ,set 方法

    public String getCardId() {
        return CardId;
    }

    public String getUserName() {
        return userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public double getMoney() {
        return money;
    }

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

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

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

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

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

    public double getQuotaMoney() {
        return quotaMoney;
    }

}

入口类: 

功能如下:

1.查询,2.存款,3.取款,4.转账,5.修改密码,6.退出,7.注销用户。

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<>();//创建一个集合用户类
        Scanner sc = new Scanner(System.in);

        while (true) {//死循环
            System.out.println("************欢迎来到嘎嘣秃ATM系统*************");
            System.out.println("1、登入用户");
            System.out.println("2、注册用户");
            System.out.println("3、退出");//退出程序
            System.out.println("请输入您的需求:");
            int command = sc.nextInt();

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

                    break;

                case 2://注册用户:
                    register(accounts,sc);
                    break;
                case 3://退出程序
                    return;
                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:
                    showAccount(acc);//查询账户
                    break;
                case 2:
                    depositMoney(acc,sc);//存款
                    break;

                case 3:
                    //取款
                    drawMoney(acc,sc);
                    break;
                case 4:
                    //转账
                    transferMoney(acc,sc,accounts);
                    break;
                case 5:
                    //修改密码
                    updataPassWord(acc,sc);
                    return ;
                case 6:
                    //退出
                    System.out.println("用户退出成功!感谢您的使用。");
                    return;
                case 7:
                    //注销用户
                    deleteAccount (accounts,acc,sc);
                    return ;

                default:
                    System.out.println("没有该操作请重新输入:");
            }
        }


    }

    /**
     *
     * @param accounts 账户集合
     * @param acc  当前登录账户
     * @param sc 扫描器
     */

    private static void deleteAccount(ArrayList<Account> accounts, Account acc, Scanner sc) {
        System.out.println("*******************用户销户操作********************");
        System.out.println("您真的确定要消除当前账户吗?");
        System.out.println("输入数字:1 ,确定消除账户~~");
        while (true) {
            int s = sc.nextInt();
            switch (s) {
                case 1:
                    if (acc.getMoney() >0) {
                        System.out.println("您要把当前账户的剩余余额:" + acc.getMoney() + "元,取走哟~~~");
                        acc.setMoney(0);
                    }else {
                        accounts.remove(acc);//消除账户
                        System.out.println("账户已被消除。");
                        return ;
                    }

                default:
                    System.out.println("您的账户还保留着呢~~~请再输入数字 1,确定消除账户~~~");
            }
        }
    }

    /**
     *
     * @param acc 登入的账户
     * @param sc 扫描器
     */

    private static void updataPassWord(Account acc, Scanner sc) {
        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 okPossWord = sc.next();
                    if (okPossWord.equals(newPassWord)){
                        acc.setPassWord(okPossWord);
                        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("您的账户余额为:" + acc.getMoney() + "元,无法转账,悠着点喔!");
             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 {
                System.out.println("请您输入对方用户的名字:");
                String name= sc.next();

                if (account.getUserName().equals(name)){
                    while (true) {
                        System.out.println("请您输入转账金额:");
                        double money = sc.nextDouble();
                        if (money > acc.getMoney()) {
                            System.out.println("您的余额为:" + acc.getMoney() + "元,不足:" + money);
                        }else {
                            System.out.println("您已转账成功");
                            acc.setMoney(acc.getMoney()-money);
                            account.setMoney(account.getMoney() + money);
                            System.out.println("您的余额剩余:" + acc.getMoney());
                            return ;
                        }
                    }
                }else {
                    System.out.println("您输入的账户名有误,请重新输入卡号:");
                }
            }
        }

    }

    /**
     取款功能
     */

    private static void drawMoney(Account acc, Scanner sc) {
        System.out.println("*******************转账操作********************");
        if (acc.getMoney() < 100){
            System.out.println("当前金额不够100元,不能存款");
            return;
        }


        while (true) {
            System.out.println("输入取款金额:");
            double money = sc.nextDouble();
            if (money > acc.getQuotaMoney
                    ()){
                System.out.println("您的取款金额已经超过了最大限额,请重新输入金额");
            }else {
                if(acc.getMoney() >= money){
                    System.out.println("取钱成功:" + money + "元.");
                    acc.setMoney(acc.getMoney() - money);//更新余额
                    showAccount(acc);//展现用户
                    return;//结束方法

                }else {
                    System.out.println("您的余额为:" +acc.getMoney() + "不足于" + money + ",不能取钱");
                }

            }
        }
    }

    /**
     存款功能
     */

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

    /*用户开户功能
    * */
    private static void register(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(passWord);//密码认证成功
                break;//两次密码一样 跳出死循环
            } else {
                System.out.println("您输入的两次密码不一致!请重新输入");
            }
        }

        System.out.println("请您输入转账最高限额:");
        double quotaMoney = sc.nextDouble();//默认为正整数
        account.setQuotaMoney(quotaMoney);

        String cardId = getRandomCardId(accounts);//生成卡号---16位,注意:不能有重复的卡号(难点)
        account.setCardId(cardId);

        accounts.add(account);//把建好的用户对象放到集合里
        System.out.println("恭喜您" + userName + "先生/女士已成功开启账户,您的卡号是:" + cardId + "请妥善保管您的卡。");


    }

    /**
     *
     * @param accounts 随机生成卡号
     */
    private static String getRandomCardId(ArrayList <Account> accounts) {
        Random r = new Random();
        while (true){
            String cardId = "";
            for (int i = 0; i < 8; i++) {//生成一个8位的银行卡号
                cardId += r.nextInt(10);//生成 0~9的随机数
            }

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


    }

/*有没有重复卡号
* */
    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;

    }
}

 该系统没有连接数据库,所以每运行一次就要创建一个用户。

功能的运行截图就不一一发送了,大家有兴趣的话自己跑跑代码

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值