博客类网站源码,新手做电商如何起步,建设网站外贸,技术支持 英铭网站建设文章目录 Java项目实战#xff1a;手把手开发ATM银行系统#xff08;附完整源码#xff09;一、系统架构设计1. 三层架构模型2. 核心数据结构 二、核心功能实现1. 开户功能#xff08;含唯一卡号生成#xff09;2. 登录安全验证3. 存取款业务4. 安全转账实现 三、账户安全… 文章目录 Java项目实战手把手开发ATM银行系统附完整源码一、系统架构设计1. 三层架构模型2. 核心数据结构 二、核心功能实现1. 开户功能含唯一卡号生成2. 登录安全验证3. 存取款业务4. 安全转账实现 三、账户安全管理1. 密码修改流程2. 销户安全规则 四、项目亮点与优化建议安全设计亮点可扩展功能性能优化建议 五、学习收获总结 Java项目实战手把手开发ATM银行系统附完整源码 本文通过一个完整的ATM系统开发案例深入讲解Java面向对象编程、集合应用和业务逻辑设计帮助初学者快速提升项目实战能力 一、系统架构设计
1. 三层架构模型
// 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 ArrayListAccount 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. 核心数据结构
// 使用ArrayList动态存储账户
private ArrayListAccount accounts new ArrayList();二、核心功能实现
1. 开户功能含唯一卡号生成
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 i0; i8; i) {cardId r.nextInt(10);}// 检查卡号唯一性if(getAccountByCardId(cardId) null) {return cardId;}}
}2. 登录安全验证
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. 存取款业务
// 存款
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. 安全转账实现
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. 密码修改流程
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. 销户安全规则
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(销户成功);}
}四、项目亮点与优化建议
安全设计亮点
卡号唯一性校验8位随机数重复检测敏感操作验证转账时的姓氏确认密码安全策略修改密码需原密码二次确认余额保护机制销户前余额强制清零
可扩展功能 #mermaid-svg-Yuk52humA0xNIY9O {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Yuk52humA0xNIY9O .error-icon{fill:#552222;}#mermaid-svg-Yuk52humA0xNIY9O .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Yuk52humA0xNIY9O .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Yuk52humA0xNIY9O .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Yuk52humA0xNIY9O .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Yuk52humA0xNIY9O .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Yuk52humA0xNIY9O .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Yuk52humA0xNIY9O .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Yuk52humA0xNIY9O .marker.cross{stroke:#333333;}#mermaid-svg-Yuk52humA0xNIY9O svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Yuk52humA0xNIY9O .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Yuk52humA0xNIY9O .cluster-label text{fill:#333;}#mermaid-svg-Yuk52humA0xNIY9O .cluster-label span{color:#333;}#mermaid-svg-Yuk52humA0xNIY9O .label text,#mermaid-svg-Yuk52humA0xNIY9O span{fill:#333;color:#333;}#mermaid-svg-Yuk52humA0xNIY9O .node rect,#mermaid-svg-Yuk52humA0xNIY9O .node circle,#mermaid-svg-Yuk52humA0xNIY9O .node ellipse,#mermaid-svg-Yuk52humA0xNIY9O .node polygon,#mermaid-svg-Yuk52humA0xNIY9O .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Yuk52humA0xNIY9O .node .label{text-align:center;}#mermaid-svg-Yuk52humA0xNIY9O .node.clickable{cursor:pointer;}#mermaid-svg-Yuk52humA0xNIY9O .arrowheadPath{fill:#333333;}#mermaid-svg-Yuk52humA0xNIY9O .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Yuk52humA0xNIY9O .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Yuk52humA0xNIY9O .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-Yuk52humA0xNIY9O .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-Yuk52humA0xNIY9O .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Yuk52humA0xNIY9O .cluster text{fill:#333;}#mermaid-svg-Yuk52humA0xNIY9O .cluster span{color:#333;}#mermaid-svg-Yuk52humA0xNIY9O div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Yuk52humA0xNIY9O :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 基础功能 交易记录 利息计算 多币种支持 短信通知 性能优化建议
使用HashMap优化账户查找HashMapString, Account添加交易流水记录功能实现数据持久化文件存储增加每日交易限额控制 源码获取ATM系统完整项目代码 五、学习收获总结
通过本项目开发者将掌握 面向对象设计能力 实体类的合理封装业务逻辑分层实现 集合框架实战应用 ArrayList的CRUD操作集合元素的遍历与查找 业务逻辑设计思维 金融级安全校验异常流程处理用户交互设计 项目架构能力 三层架构实现高内聚低耦合设计
项目总结本ATM系统涵盖了Java核心技术的实际应用是初学者进阶的绝佳练手项目。通过实现金融级业务逻辑开发者能够深入理解面向对象设计思想为后续企业级开发奠定坚实基础。