day09——Java基础项目(ATM系统)

文章目录

Java项目实战:手把手开发ATM银行系统(附完整源码)

本文通过一个完整的ATM系统开发案例,深入讲解Java面向对象编程、集合应用和业务逻辑设计,帮助初学者快速提升项目实战能力

一、系统架构设计

1. 三层架构模型
java 复制代码
// 1. 账户实体类(数据层)
public class Account {
    private String cardId;   // 卡号
    private String userName; // 用户名
    private char sex;        // 性别
    private String passWord; // 密码
    private double money;    // 余额
    private double limit;    // 单次取现额度
    
    // Getter/Setter方法
}

// 2. ATM系统类(业务逻辑层)
public class ATM {
    private ArrayList<Account> accounts = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);
    private Account loginAcc; // 当前登录账户
    
    public void start() { /* 系统入口 */ }
}

// 3. 测试类(表示层)
public class Test {
    public static void main(String[] args) {
        ATM atm = new ATM();
        atm.start(); // 启动系统
    }
}
2. 核心数据结构
java 复制代码
// 使用ArrayList动态存储账户
private ArrayList<Account> accounts = new ArrayList<>();

二、核心功能实现

1. 开户功能(含唯一卡号生成)
java 复制代码
private void createAccount() {
    Account acc = new Account();
    
    // 信息录入(姓名、性别、密码校验)
    System.out.print("请输入姓名:");
    acc.setUserName(sc.next());
    
    // 性别校验
    while(true) {
        System.out.print("请输入性别(男/女):");
        char sex = sc.next().charAt(0);
        if(sex == '男' || sex == '女') {
            acc.setSex(sex);
            break;
        }
    }
    
    // 生成唯一卡号(8位数字)
    acc.setCardId(createCardId());
    accounts.add(acc);
    System.out.println("开户成功!卡号:" + acc.getCardId());
}

// 唯一卡号生成算法
private String createCardId() {
    Random r = new Random();
    while(true) {
        String cardId = "";
        for(int i=0; i<8; i++) {
            cardId += r.nextInt(10);
        }
        // 检查卡号唯一性
        if(getAccountByCardId(cardId) == null) {
            return cardId;
        }
    }
}
2. 登录安全验证
java 复制代码
private void login() {
    if(accounts.isEmpty()) {
        System.out.println("系统暂无账户!");
        return;
    }
    
    while(true) {
        System.out.print("输入卡号:");
        String cardId = sc.next();
        Account acc = getAccountByCardId(cardId);
        
        if(acc != null) {
            // 密码尝试次数控制
            int tryCount = 0;
            while(tryCount < 3) {
                System.out.print("输入密码:");
                String pwd = sc.next();
                
                if(acc.getPassWord().equals(pwd)) {
                    loginAcc = acc;
                    showUserCommand(); // 进入操作界面
                    return;
                }
                tryCount++;
            }
            System.out.println("密码错误次数过多!");
            return;
        }
    }
}
3. 存取款业务
java 复制代码
// 存款
private void deposit() {
    System.out.print("输入存款金额:");
    double money = sc.nextDouble();
    loginAcc.setMoney(loginAcc.getMoney() + money);
    System.out.println("存款成功!余额:" + loginAcc.getMoney());
}

// 取款(含风控校验)
private void withdraw() {
    // 最低余额限制
    if(loginAcc.getMoney() < 100) {
        System.out.println("余额不足100元!");
        return;
    }
    
    while(true) {
        System.out.print("输入取款金额:");
        double money = sc.nextDouble();
        
        // 双重校验
        if(money > loginAcc.getLimit()) {
            System.out.println("超过单笔限额:" + loginAcc.getLimit());
        } else if(money > loginAcc.getMoney()) {
            System.out.println("余额不足!");
        } else {
            loginAcc.setMoney(loginAcc.getMoney() - money);
            System.out.println("取款成功!余额:" + loginAcc.getMoney());
            break;
        }
    }
}
4. 安全转账实现
java 复制代码
private void transfer() {
    // 系统账户检查
    if(accounts.size() < 2) {
        System.out.println("系统账户不足!");
        return;
    }
    
    while(true) {
        System.out.print("输入对方卡号:");
        String cardId = sc.next();
        Account targetAcc = getAccountByCardId(cardId);
        
        if(targetAcc != null) {
            // 姓氏验证(安全措施)
            String maskName = "*" + targetAcc.getUserName().substring(1);
            System.out.print("请输入【" + maskName + "】的姓氏:");
            String inputName = sc.next();
            
            if(targetAcc.getUserName().startsWith(inputName)) {
                // 转账金额校验
                System.out.print("输入转账金额:");
                double money = sc.nextDouble();
                
                if(loginAcc.getMoney() >= money) {
                    // 执行转账
                    loginAcc.setMoney(loginAcc.getMoney() - money);
                    targetAcc.setMoney(targetAcc.getMoney() + money);
                    System.out.println("转账成功!");
                    return;
                } else {
                    System.out.println("余额不足!");
                }
            }
        }
    }
}

三、账户安全管理

1. 密码修改流程
java 复制代码
private void updatePassword() {
    // 原密码验证
    System.out.print("输入当前密码:");
    String oldPwd = sc.next();
    
    if(!loginAcc.getPassWord().equals(oldPwd)) {
        System.out.println("密码错误!");
        return;
    }
    
    // 新密码二次确认
    while(true) {
        System.out.print("输入新密码:");
        String newPwd = sc.next();
        System.out.print("确认新密码:");
        String confirmPwd = sc.next();
        
        if(newPwd.equals(confirmPwd)) {
            loginAcc.setPassWord(newPwd);
            System.out.println("密码修改成功!");
            return;
        }
        System.out.println("两次输入不一致!");
    }
}
2. 销户安全规则
java 复制代码
private void closeAccount() {
    // 二次确认
    System.out.print("确认销户?(y/n):");
    String confirm = sc.next();
    
    if("y".equalsIgnoreCase(confirm)) {
        // 余额检查
        if(loginAcc.getMoney() > 0) {
            System.out.println("账户仍有余额,无法销户!");
            return;
        }
        accounts.remove(loginAcc);
        System.out.println("销户成功!");
    }
}

四、项目亮点与优化建议

安全设计亮点:
  1. 卡号唯一性校验:8位随机数+重复检测
  2. 敏感操作验证:转账时的姓氏确认
  3. 密码安全策略:修改密码需原密码+二次确认
  4. 余额保护机制:销户前余额强制清零
可扩展功能:

基础功能 交易记录 利息计算 多币种支持 短信通知

性能优化建议:
  1. 使用HashMap优化账户查找:HashMap<String, Account>
  2. 添加交易流水记录功能
  3. 实现数据持久化(文件存储)
  4. 增加每日交易限额控制

源码获取ATM系统完整项目代码

五、学习收获总结

通过本项目,开发者将掌握:

  1. 面向对象设计能力

    • 实体类的合理封装
    • 业务逻辑分层实现
  2. 集合框架实战应用

    • ArrayList的CRUD操作
    • 集合元素的遍历与查找
  3. 业务逻辑设计思维

    • 金融级安全校验
    • 异常流程处理
    • 用户交互设计
  4. 项目架构能力

    • 三层架构实现
    • 高内聚低耦合设计

项目总结:本ATM系统涵盖了Java核心技术的实际应用,是初学者进阶的绝佳练手项目。通过实现金融级业务逻辑,开发者能够深入理解面向对象设计思想,为后续企业级开发奠定坚实基础。

相关推荐
小雪_Snow4 分钟前
final 关键字使用场景
java
阿蒙Amon9 分钟前
C#类型转换:从基础到进阶的全景解析
开发语言·c#
Murphy_lx24 分钟前
较为深入的了解c++中的string类(2)
java·c++·算法
猎嘤一号1 小时前
Windows11桌面解锁守护脚本
开发语言·python·opencv
一只鱼^_2 小时前
牛客周赛 Round 99
java·数据结构·c++·算法·贪心算法·动态规划·近邻算法
蓝婷儿2 小时前
Python 数据建模与分析项目实战预备 Day 2 - 数据构建与字段解析(模拟简历结构化数据)
开发语言·python·机器学习
青衫客362 小时前
浅谈 Python 中的 yield——yield的返回值与send()的关系
开发语言·python
玩代码3 小时前
CompletableFuture 详解
java·开发语言·高并发·线程
hz_zhangrl3 小时前
CCF-GESP 等级考试 2025年6月认证C++三级真题解析
开发语言·c++·青少年编程·gesp·gesp2025年6月·c++三级
人生在勤,不索何获-白大侠4 小时前
day21——特殊文件:XML、Properties、以及日志框架
xml·java·开发语言