模拟ATM系统

本文展示了如何使用Java实现一个简单的ATM系统,包括账户类(Account)的定义,账户的注册和登录功能。同时,提到了算法对于程序员的重要性,并推荐了一个刷题平台牛客网。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🏡个人主页 :@ 守夜人st
🚀系列专栏:Java
…持续更新中敬请关注…
🙉博主简介:软件工程专业,在校学生,写博客是为了总结回顾一些所学知识点

✈️推荐一款模拟面试,刷题神器,从基础走向大场面试👉 开启你的刷题之路吧

这里写目录标题

模拟ATM系统

项目说明:模拟ATM系统,系统具有注册、登录、查询、存钱、取钱、转账、修改密码、注销账户等功能。

Account类

package com.shouyeren.oop.atm;
/**
 * 账户类
 * */
public class Account {
    private String id;               //账号id
    private String userName;      //用户名
    private String passWord;      //密码
    private double balance;       //余额

    public Account() {
    }

    public Account(String id, String userName, String passWord, double balance, double quota) {
        this.id = id;
        this.userName = userName;
        this.passWord = passWord;
        this.balance = balance;
        this.quota = quota;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    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 getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public double getQuota() {
        return quota;
    }

    public void setQuota(double quota) {
        this.quota = quota;
    }

    private double quota;         //取现额度
}

ATM类

package com.shouyeren.oop.atm;


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

public class ATM {
    public static void main(String[] args) {
        //1.创建一个账户类
        //2.创建一个集合容器,存储账户对象
        ArrayList<Account> accounts = new ArrayList<>();
        Scanner sc = new Scanner(System.in);

        //3.系统首页
        while (true) {
            System.out.println("==============ATM系统==================");
            System.out.println("1、账户登录");
            System.out.println("2、账户注册");
            System.out.print("请选择:");

            int a = sc.nextInt();
            switch (a){
                case 1:
                    //1、账户登录
                    login(accounts,sc);
                    break;
                case 2:
                    //2、账户注册
                    register(accounts,sc);
                    break;
                default:
                    System.out.println("您输入的数据错误!!!");
            }
        }

    }

    /**
     * 用户开户功能的实现
     * @param accounts 接收的账户集合
     */
    private static void register(ArrayList<Account> accounts,Scanner sc){
        //1.创建一个账户对象,用于封装用户开户信息
        Account account = new Account();

        //2.录入当前用户输入信息
        System.out.println("请输入账户名:");
        account.setUserName(sc.next());
        while (true) {
            System.out.println("请输入账户密码:");
            String password = sc.next();
            System.out.println("请再次输入账户密码:");
            String okPassword = sc.next();
            if (password.equals(okPassword)){
                account.setPassWord(okPassword);
                break;
            }else {
                System.out.println("两次输入密码不一致!!!");
            }
        }

        //生成一个8位数字的随机id
        String id = getRandomId(accounts);
        account.setId(id);

        //3.把账户对象添加到账户集合中
        accounts.add(account);
        System.out.println("恭喜您" + account.getUserName() + ",开户成功!!!");
        System.out.println("您的卡号:" + account.getId() + " ,请妥善保管。");
    }

    /**
     * 生成一个8位数字组成的字符串
     * @return
     */
    private static String getRandomId(ArrayList<Account> accounts) {

        Random ra = new Random();
        while (true) {
            String id = "";
            for (int i = 0; i < 8; i++) {
                id += ra.nextInt(10);
            }
            Account account = CheckTheWeight(accounts,id);
            if (account == null){
                return id;
            }
        }
    }

    private static void login(ArrayList<Account> accounts,Scanner sc){
        System.out.println("==============ATM系统==================");
        if (accounts.size() == 0){
            System.out.println("对不起,该系统中目前没有任何账户,请先开户~~");
            return;
        }
        String id = null;
        while (true) {
            System.out.println("请输入您的卡号:");
            id = sc.next();
            Account account = CheckTheWeight(accounts,id);
            if (account != null){
                //该卡号存在
                while (true) {
                    System.out.println("请输入您的密码:");
                    String password = sc.next();
                    if (account.getPassWord().equals(password)){
                        System.out.println(account.getUserName() + "登陆成功!!!");
                        //进入账户
                        show(sc,account,accounts);
                        return;
                    }else {
                        System.out.println("密码错误!");
                    }
                }
            }else {
                System.out.println("对不起,该卡号不存在!!!");
            }
        }


    }

    /**
     * 登录成功展示菜单界面
     */
    private static void show(Scanner sc,Account account,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 i = sc.nextInt();

            switch (i){
                case 1:
    //                1.查询
                    showAcount(account);
                    break;
                case 2:
    //                2.存款
                    deposit(account,sc);
                    break;
                case 3:
    //                3.取款
                    withdraw(account,sc);
                    break;
                case 4:
    //                4.转帐
                    transfer(sc,account,accounts);
                    break;
                case 5:
    //                5.修改密码
                    modifyPassword(account,sc);
                    return;
                case 6:
    //                6.退出
                    System.out.println("退出成功,欢迎下次光临!");
                    return;
                case 7:
    //                7.注销账户
                    if (cancellationAccount(accounts,account,sc)) {
                        return;
                    } else {
                        break;
                    }
                default:
                    System.out.println("输入错误,请重新选择!");
            }
        }
    }


    /**
     * 注销账户
     * @param accounts 账户容器
     * @param account  当前账户
     * @param sc 扫描器
     */
    private static boolean cancellationAccount(ArrayList<Account> accounts, Account account, Scanner sc) {
        System.out.println("您是否确认注销自己的账户(1.确认,2.取消):");
        int a = sc.nextInt();
        if (a == 2){
            return false;
        }else {
            System.out.println("请输入您的密码:");
            String s = sc.next();
            if (s.equals(account.getPassWord())){
                accounts.remove(account);
                System.out.println("注销账户成功!!!");
            }
            else {
                System.out.println("密码输入错误!!!");
                return false;
            }
        }
        return true;
    }


    /**
     * 修改密码
     * @param account
     * @param sc
     */
    private static void modifyPassword(Account account, Scanner sc) {
        while (true) {
            System.out.println("请输入新密码: ");
            String a = sc.next();
            System.out.println("请再次确认您的密码:");
            String b = sc.next();
            if (a.equals(b)){
                System.out.println("密码修改成功!!!");
                account.setPassWord(b);
                return ;
            }else {
                System.out.println("您两次输入的密码不一致,请再次输入。");
            }
        }

    }


    /**
     * 转账方法
     * @param sc
     * @param account
     * @param accounts
     */
    private static void transfer(Scanner sc,Account account,ArrayList<Account> accounts) {
        //判断系统中是否有两个及以上账户存在
        if (accounts.size() < 2){
            System.out.println("当前系统中不足两个账户,不支持转账操作!");
            return;
        }

        //判断账户余额是否支持转账
        if (account.getBalance() == 0){
            System.out.println("对不起,您的余额不足,不支持转账!");
            return;
        }
        System.out.println("请输入需要转账账户的卡号:");
        String toId = sc.next();

        //判断用户输入是否是自己的卡号
        if (toId.equals(account.getId())){
            System.out.println("对不起,您无法给自己转账!!!");
        }

        //判断该卡号是否存在
        Account acc = CheckTheWeight(accounts,toId);

        if (acc == null){
                System.out.println("您输入的卡号不存在...");
        }else {
            String userName = acc.getUserName();
            String temp = "*" + userName.substring(1);
            System.out.println("请您输入[" + temp + "]进行确认");
            String s = sc.next();
            if (userName.startsWith(s)){
                System.out.println("请输入转账金额:");
                double money = sc.nextDouble();
                if(money > account.getBalance()){
                    System.out.println("对不起,您的余额不足,您最多转账" + account.getBalance() + "元。");
                }else {
                    account.setBalance(account.getBalance() - money);
                    acc.setBalance(acc.getBalance() + money);
                    System.out.println("转账成功!您的余额:" + account.getBalance());
                    return;
                }

            }else {
                System.out.println("对不起,您输入的信息有误!");
            }


        }




    }


    /**
     * 取款方法
     * @param account 传入的账户对象
     * @param sc
     */
    private static void withdraw(Account account, Scanner sc) {
        System.out.println("请输入存款金额: ");
        double money = sc.nextDouble();
        if (account.getBalance() - money < 0){
            System.out.println("取款失败,余额不足!");
        }else {
            double balance = account.getBalance() - money;
            account.setBalance(balance);
            System.out.println("取款" + money + "成功!");
        }
        showAcount(account);
    }


    /**
     * 存款方法
     * @param account
     * @param sc
     */
    private static void deposit(Account account, Scanner sc) {
        System.out.println("请输入存款金额: ");
        double money = sc.nextDouble();
        if (money < 0){
            System.out.println("请输入正确的存款金额...");
        }else {
            double balance = account.getBalance() + money;
            account.setBalance(balance);
            System.out.println("存款" + money + "成功!");
        }
        showAcount(account);
    }

    private static void showAcount(Account account) {
        System.out.println("==============账户信息==================");
        System.out.println("卡号:" + account.getId());
        System.out.println("账户名:" + account.getUserName());
        System.out.println("余额:" + account.getBalance());

    }

    /**
     * 查询卡号是否重复
     * @param accounts
     * @param id
     * @return
     */
    private static Account CheckTheWeight(ArrayList<Account> accounts,String id){

        for (int i = 0; i < accounts.size(); i++) {
            Account account = accounts.get(i);
            if (id.equals(account.getId())){
                return account;
            }
        }
        return null;
    }
}

算法对程序员来说及其重要,语言和开发平台不断变化,但是万变不离其宗的是那些算法和理论,刷算法最最最直白的原因就是找一个好的工作,那刷题一定是必不可少的
现在算法刷题平台还是蛮多的,给大家介绍一个我认为与大厂关联最深的平台——牛客网 跳转链接

在这里插入图片描述

感觉不错的话,动手点个赞吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

守夜人st

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

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

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

打赏作者

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

抵扣说明:

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

余额充值