[java->ATM小系统]--完整、可运行、高效

 


个人名片:
🐅作者简介:一名大二在校生,热爱生活,爱好敲码!
‍💅个人主页🥇:holy-wangle
➡系列内容:🖼️tkinter前端窗口界面创建与优化
✨个性签名:🍭不积跬步,无以至千里;不积小流,无以成江海 


案例文章

     0. 完整代码存放位置

  1. 系统准备、首页设计
  2. 用户开户功能实现
  3. 用户登录功能实现
  4. 用户操作页设计、查询账户、退出账户功能实现
  5. 用户存款功能实现
  6. 用户取款功能实现
  7. 用户转账功能实现
  8. 用户密码修改、销户功能实现

案例展示:

尝试登录账户,但是没有账户,所以无法登录,要注册账户!

 

进行注册呗!

 注册完成之后,进行登录!

 查询小好的账户信息如下呢!!!!

 

存多少钱?10000吧,哈哈哈! 

  取点钱买烧鸭吃咯!!!!!

转账给女朋友,还没有她的账号,再注册一个!

 

 再进行转账!

 

 修改密码试试,毕竟密码太简单了!

展示一波返回! 

 展示一些刚刚转账成功没,到账1000元了!!!! 

 注册用户也ok!!!!

 

 注册用户也ok!!!!

 大致系统就是这样了,看过不如自己尝试一下,复制去run一下吧!!!

完整系统代码:

main.java:


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

/**
 * ATM系统的入口类
 */
public interface ATMSystem {
    public static void main(String[] args) {
        // 1.定义账户类
        // 2.定义一个集合容器,负责以后存储全部的账户对象,进行相关的业务操作
        ArrayList<Account> accounts = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        // 3.登录界面设计
        OUT:
        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;
                //开户(定义方法的快速方法,alt + enter ,前提是先写好方法名和对应的参数)
                case 2:
                    register(accounts,sc);
                    break;
                case 3:
                    System.out.println("退出系统成功!");
                    break OUT;
                default:
                    System.out.println("抱歉!您输入有误,请重新输入!");
            }
        }
    }

    /**
     * 用户登录
     * @param accounts 存储用户集合对象
     * @param sc 扫描器
     */

    private static void login(ArrayList<Account> accounts, Scanner sc) {
        System.out.println("===============登录操作===============");
        //1.判断账号集合中是否存在账号,如果不存在就不能进行
        if (accounts.size() == 0)
        {
            System.out.println("您当前尚未注册任何账号,请先注册!");
            return;
        }

        // 2.正式进入登录操作
        System.out.println("请您输入登录卡号:");
        String cardId = sc.next();
        // 3.判断卡号是否存在
        Account acc = getSureCardId(cardId,accounts);
        while (true) {
            if (acc != null)
            {
                while (true) {
                    //卡号存在
                    System.out.println("请输入您的密码:");
                    String passWord = sc.next();
                    if (passWord.equals(acc.getPassWord()))
                    {
                        System.out.println("恭喜!登录成功!欢迎" + acc.getUserNames() + "先生/女生!");
                        //进入 其他功能!
                        // 展示操作页面
                        showUserCommand(sc,acc,accounts);
                        return;
                    }
                    else
                    {
                        System.out.println("输入密码有误,请重新输入!");
                    }
                }
            }
            else
            {
                System.out.println("抱歉,您输入的卡号不正确,请重新输入!");
                return;
            }
        }
    }

    /**
     * 展示操作页面
     * @param accounts 当前用户信息对象
     * @param sc 扫描器
     */

    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:
                    takeMoney(acc,sc);
                    break;
                case 4:
                    transferMoney(acc,sc,accounts);
                    break;
                case 5:
                    changePassword(acc,sc);
                    break;
                case 6:
                    System.out.println("返回成功!");
                    return;
                case 7:
                    deleteAccount(accounts,sc,acc);
                    // 退出菜单界面
                    return;
                default:
                    System.out.println("您输入的命令不正确!请重新输入!");
            }
        }

    }

    /**
     * 注销账户
     * @param accounts 存储用户信息集合
     * @param sc 扫描器
     * @param acc 当前用户对象
     */

    private static void deleteAccount(ArrayList<Account> accounts, Scanner sc, Account acc) {
        System.out.println("===============注销账户操作===============");
        System.out.println("请您是否确认注销当前账户:");
        System.out.println("请输入:" + "\n" + "是/否");
        String sure = sc.next();
        if (sure.equals("是"))
        {
            while (true) {
                System.out.println("请输入您的卡号:");
                String cardId = sc.next();
                if (cardId.equals(acc.getCardId()))
                {
                    for (int i = 0; i < accounts.size(); i++) {
                        Account account1 = accounts.get(i);
                        if (account1 == acc)
                        {
                            accounts.remove(i);
                            System.out.println("注销成功!");
                            return;
                        }
                    }
                }
                else {
                    System.out.println("卡号输入错误!");
                    return;
                }
            }
        }
        else
        {
            System.out.println("注销取消!");
            //再次调用菜单方法
            showUserCommand(sc,acc,accounts);
        }
    }

    /**
     * 修改用户密码
     * @param acc 当前用户对象
     * @param sc 扫描器
     */

    private static void changePassword(Account acc, Scanner sc) {
        while (true) {
            System.out.println("===============修改密码操作===============");
            System.out.println("请您输入您当前的姓氏:");
            String name = sc.next();
            if (acc.getUserNames().startsWith(name))
            {
                System.out.println("验证成功!");
                while (true) {
                    System.out.println("请输入您当前的密码:");
                    String passWord = sc.next();
                    if (passWord.equals(acc.getPassWord()))
                    {
                        System.out.println("请输入修改的密码:");
                        String changPassword = sc.next();
                        acc.setPassWord(changPassword);
                        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("===============转账操作===============");
        // 1.判断用户是否大于2
        if (accounts.size() < 2 )
        {
            System.out.println("抱歉,用户账户数量不足二,无法进行转账操作!请前往注册!");
            return;
        }
        // 2.判断当前用户账户是否有钱
        if (acc.getAccountMoney() == 0 || acc.getAccountMoney() < 0)
        {
            System.out.println("抱歉您的账户余额为0元,无法进行转账操作!");
            return;
        }
        // 3.真正转账开始
        while (true) {
            System.out.println("请输入您转账的卡号:");
            String cardId = sc.next();

            // 判断卡号是否存在
            Account account = getSureCardId(cardId,accounts);
            if (account == null)
            {
                System.out.println("抱歉,您输入的对方卡号不正确!");
            }
            else
            {
                if (account.getCardId().equals(acc.getCardId()))
                {
                    System.out.println("抱歉,您不能向您自己的账户转账!");
                    continue;
                }
                else
                {
                    //账户存在,验证姓氏
                    String tip = "*" + account.getUserNames().substring(1);
                    System.out.println("请输入[" + tip + "]的姓氏");
                    String name = sc.next();
                    // 验证是否输入成功
                    if (account.getUserNames().startsWith(name))
                    {
                        System.out.println("验证成功!");
                        System.out.println("请输入您要转账的金额:");
                        double transferMoney = sc.nextDouble();
                        if (transferMoney > acc.getAccountMoney())
                        {
                            System.out.println("抱歉您的余额不足!您当前余额为:" + acc.getAccountMoney());
                            return;
                        }
                        acc.setAccountMoney(acc.getAccountMoney() - transferMoney);
                        account.setAccountMoney(account.getAccountMoney() + transferMoney);
                        System.out.println("转账成功!您当前余额为:" + acc.getAccountMoney());
                        return;
                    }
                    else
                    {
                        System.out.println("对不起,您输入错误!");
                    }

                }
            }
        }
    }

    /**
     * 取钱操作
     * @param acc 当前用户对象
     * @param sc 扫描器
     */

    private static void takeMoney(Account acc, Scanner sc) {
        System.out.println("===============取钱操作===============");
        // 1.判断账户余额是否大于100元
        if (acc.getAccountMoney() < 100)
        {
            System.out.println("您当前余额不足100元,无法进行取钱操作!");
            return;
        }
        // 2.提示用户取钱
        while (true) {
            System.out.println("请输入您取钱的金额:");
            double money = sc.nextDouble();
            // 3.是否满足取钱要求
            if (money < acc.getQuotaMoney())
            {
                if (acc.getAccountMoney() > money)
                {
                    System.out.println();
                    acc.setAccountMoney(acc.getAccountMoney() - money);
                    System.out.println("取"+ money + "元成功!您当前余额为:" + acc.getAccountMoney());
                    return;
                }
                else
                {
                    System.out.println("余额不足,您当前余额为:" + acc.getAccountMoney());
                }

            }
            else
            {
                System.out.println("抱歉,您当前取钱的金额大于限额,无法进行取钱操作!");
            }
        }
    }

    /**
     * 存钱
     * @param acc 当前用户对象
     * @param sc 扫描器
     */

    private static void depositMoney(Account acc, Scanner sc) {
        System.out.println("===============存款操作===============");
        System.out.println("请输入您想存入的金额:");
        double money = sc.nextDouble();
        // 更新原来的余额
        acc.setAccountMoney(acc.getAccountMoney() + money);
        System.out.println("恭喜您存款成功!当前账户信息:");
        showAccount(acc);
    }

    /**
     * 展示查询账户信息
     * @param acc 当前用户信息对象
     */

    private static void showAccount(Account acc) {
        System.out.println("卡号:" + acc.getCardId());
        System.out.println("卡名:" + acc.getUserNames());
        System.out.println("余额:" + acc.getAccountMoney());
        System.out.println("限额:" + acc.getQuotaMoney());
        System.out.println("输出完毕!感谢查询!");
    }

    /**
     * 开户功能实现
     * @param accounts 存储客户信息的集合
     * @param sc 扫描器对象
     */

   private static void register(ArrayList<Account> accounts,Scanner sc) {
        // 开户功能实现
       System.out.println("===============ATM系统开户功能===============");
       Account account = new Account();
       System.out.println("请您输入账号名:");
       String name = sc.next();
       account.setUserNames(name);
       while (true) {
           System.out.println("请您输入密码:");
           String passWord = sc.next();
           System.out.println("请您再次输入密码:");
           String okPassWord = sc.next();
           if (passWord.equals(okPassWord))
           {
               System.out.println("密码确认成功!");
               account.setPassWord(okPassWord);
               break;
           }
           else
           {
               System.out.println("抱歉!两次密码输入不一致,请重新输入!");
           }
       }
       System.out.println("请设置当初提现最大额度:");
       double quoteMoney = sc.nextDouble();
       account.setQuotaMoney(quoteMoney);

       // 为账号随机生成一个8位数的卡号且不重复的号码(独立功能,独立方法)
       String cardId = getCardId(accounts);
       account.setCardId(cardId);

       //3.把账户对象添加到账户集合去
       System.out.println("账号添加完成!");
       accounts.add(account);
       System.out.println("恭喜!" + name + "先生/女士," + "\n" + "您的账户注册成功!"
               + "卡号是:" + cardId);

    }

    /**
     * 随机生成卡号不重复
     * @return
     */

    private static String getCardId(ArrayList<Account> accounts) {
        // 随机生成8个数字
        Random r = new Random();
        while (true) {
            String cardId = "";
            for (int i = 0; i < 8; i++) {
                int data = r.nextInt(10);
                cardId += data;

            }
            // 这里再定义一个方法去,获得独一无二的卡号
            Account acc  = getSureCardId(cardId,accounts);
            // 如果为空的话,证明没有出现该卡号,就可以使用该卡号
            if (acc == null)
            {
                return cardId;
            }
        }

    }

    /**
     * 根据卡号查询处一个账户对象
     * @param cardId 生成的卡号
     * @param accounts 账户集合
     * @return 返回一个账户对象地址
     */
    private static Account getSureCardId(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;//查无此账号

    }
}

 Account.java:


/**
 * 账户类
 */
public class Account {
    /*
    成员变量,私有
     */
    private String cardId; //卡号
    private String userNames; //卡名
    private String passWord; //密码
    private double accountMoney; // 账户余额
    private double quotaMoney; //提取额度

    public Account() {
    }

    public Account(String cardId, String userNames, String passWord, double accountMoney, double quotaMoney) {
        this.cardId = cardId;
        this.userNames = userNames;
        this.passWord = passWord;
        this.accountMoney = accountMoney;
        this.quotaMoney = quotaMoney;
    }

    public String getCardId() {
        return cardId;
    }

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

    public String getUserNames() {
        return userNames;
    }

    public void setUserNames(String userNames) {
        this.userNames = userNames;
    }

    public String getPassWord() {
        return passWord;
    }

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

    public double getAccountMoney() {
        return accountMoney;
    }

    public void setAccountMoney(double accountMoney) {
        this.accountMoney = accountMoney;
    }

    public double getQuotaMoney() {
        return quotaMoney;
    }

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


好了,今天的分享就这么多了,有什么不清楚或者我写错的地方,请多多指教!

私信,评论我呗!!!!!!

关注我下一篇不迷路哦!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值