文章目錄
- 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 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. 核心數據結構
// 使用ArrayList動態存儲賬戶
private ArrayList<Account> 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 i=0; i<8; 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位隨機數+重復檢測
- 敏感操作驗證:轉賬時的姓氏確認
- 密碼安全策略:修改密碼需原密碼+二次確認
- 余額保護機制:銷戶前余額強制清零
可擴展功能:
性能優化建議:
- 使用HashMap優化賬戶查找:
HashMap<String, Account>
- 添加交易流水記錄功能
- 實現數據持久化(文件存儲)
- 增加每日交易限額控制
源碼獲取:ATM系統完整項目代碼
五、學習收獲總結
通過本項目,開發者將掌握:
-
面向對象設計能力
- 實體類的合理封裝
- 業務邏輯分層實現
-
集合框架實戰應用
- ArrayList的CRUD操作
- 集合元素的遍歷與查找
-
業務邏輯設計思維
- 金融級安全校驗
- 異常流程處理
- 用戶交互設計
-
項目架構能力
- 三層架構實現
- 高內聚低耦合設計
項目總結:本ATM系統涵蓋了Java核心技術的實際應用,是初學者進階的絕佳練手項目。通過實現金融級業務邏輯,開發者能夠深入理解面向對象設計思想,為后續企業級開發奠定堅實基礎。