day09——Java基礎項目(ATM系統)

文章目錄

    • 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("銷戶成功!");}
}

四、項目亮點與優化建議

安全設計亮點:
  1. 卡號唯一性校驗:8位隨機數+重復檢測
  2. 敏感操作驗證:轉賬時的姓氏確認
  3. 密碼安全策略:修改密碼需原密碼+二次確認
  4. 余額保護機制:銷戶前余額強制清零
可擴展功能:
基礎功能
交易記錄
利息計算
多幣種支持
短信通知
性能優化建議:
  1. 使用HashMap優化賬戶查找:HashMap<String, Account>
  2. 添加交易流水記錄功能
  3. 實現數據持久化(文件存儲)
  4. 增加每日交易限額控制

源碼獲取:ATM系統完整項目代碼

五、學習收獲總結

通過本項目,開發者將掌握:

  1. 面向對象設計能力

    • 實體類的合理封裝
    • 業務邏輯分層實現
  2. 集合框架實戰應用

    • ArrayList的CRUD操作
    • 集合元素的遍歷與查找
  3. 業務邏輯設計思維

    • 金融級安全校驗
    • 異常流程處理
    • 用戶交互設計
  4. 項目架構能力

    • 三層架構實現
    • 高內聚低耦合設計

項目總結:本ATM系統涵蓋了Java核心技術的實際應用,是初學者進階的絕佳練手項目。通過實現金融級業務邏輯,開發者能夠深入理解面向對象設計思想,為后續企業級開發奠定堅實基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909925.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909925.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡:(五)信道復用技術,數字傳輸系統,寬帶接入技術

計算機網絡&#xff1a;&#xff08;五&#xff09;信道復用技術&#xff0c;數字傳輸系統&#xff0c;寬帶接入技術 前言一、信道復用技術1. 為什么需要復用技術&#xff1f;2. 頻分復用&#xff08;FDM&#xff09;3. 時分復用&#xff08;TDM&#xff09;4. 統計時分復用&am…

【期末總結】計算機網絡

【期末總結】計算機網絡 參考鏈接&#xff1a;計算機網絡知識點全面總結&#xff08;有這一篇就夠了&#xff01;&#xff01;&#xff01;&#xff09;-CSDN博客 一.概述 1.1 計算機網絡的分類 按照網絡的作用范圍&#xff1a;廣域網&#xff08;WAN&#xff09;、城域網&a…

React學習001-創建 React 應用

React學習001-創建 React 應用 1、安裝node.js2、安裝構建工具2.1 核心特性2.2 性能對比??2.3 適用場景?? 3、創建應用4、項目啟動參考文章 1、安裝node.js 這里建議安裝nvm多版本管理node.js&#xff0c;想用哪個版本&#xff0c;一條命令即可~ 多版本管理node.js 2、安…

(cvpr2025) Adaptive Rectangular Convolution for Remote Sensing Pansharpening

論文&#xff1a;(cvpr2025) Adaptive Rectangular Convolution for Remote Sensing Pansharpening 代碼&#xff1a;https://github.com/WangXueyang-uestc/ARConv.git 這個論文研究的是全色與多光譜圖像的融合。作者認為現有的基于CNN的方法中&#xff0c;傳統的卷積存在兩個…

【圖像處理入門】7. 特征描述子:從LBP到HOG的特征提取之道

摘要 特征描述子是圖像處理中提取圖像本質信息的關鍵工具。本文將深入講解局部二值模式(LBP)與方向梯度直方圖(HOG)兩種經典特征描述子的原理、實現方法及應用場景。結合OpenCV代碼示例,展示如何利用LBP提取紋理特征、使用HOG進行目標檢測,幫助讀者掌握從圖像中提取有效…

AI 應用開發的‘核心樞紐’:Dify、Coze、n8n、FastGPT、MaxKB、RAGFlow 等六大平臺全面對決

在人工智能與自動化流程日益普及的當下&#xff0c;各類平臺如雨后春筍般涌現&#xff0c;成為構建智能應用與自動化工作流的 “核心樞紐”。其中&#xff0c;Dify、Coze、n8n、FastGPT、MaxKB、RAGFlow 備受矚目&#xff0c;它們各自具備獨特的功能與優勢&#xff0c;適用于不…

RV1126+OPENCV對視頻流單獨進行視頻膨脹/腐蝕操作

一.RV1126OPENCV對視頻流進行視頻膨脹操作的大體流程圖 思路&#xff1a;初始化VI與VENC模塊&#xff0c;之后開啟兩個線程&#xff0c;一個線程從VI模塊獲取視頻流數據&#xff0c;用Opencv的Mat將其轉成Mat矩陣之后進行用dilate膨脹&#xff0c;將膨脹之后的視頻數據用send函…

Cordova + Vue 移動端視頻播放組件(支持 HLS + 原生播放器兜底)

在混合 App 中&#xff0c;移動端使用 標簽播放視頻經常踩坑&#xff0c;尤其是格式兼容、跨域限制、WebView 差異等問題。 本文介紹一個通用的 Cordova 視頻播放組件&#xff1a;優先 HTML5 播放&#xff0c;播放失敗自動提示用戶使用系統播放器&#xff0c;并支持原生插件兜底…

【Linux】掌握vim編譯器使用——詳細教程

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、Vim的三種核心模式解析 二、高效編輯核心命令大全 1. 光標快速導航 2. 文本編輯四連擊 3. 高效搜索替換 三、Vim神技&#xff1a;批量注釋與多文件編輯 1. 批量…

Oracle遷移瀚高,如何做表等對象與文件名一對一的文件腳本(APP)

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5 文檔用途 Oracle遷移到瀚高后&#xff0c;需要整理一張表對應一個與表同名的腳本&#xff0c;一個函數對應一個與函數同名的腳本 詳細信息 一、整理…

洞察分享 | 在萬物互聯的時代,如何強化網絡安全,更有效地保護工業基礎設施?

2025年&#xff0c;物聯網&#xff08;IoT&#xff09;與互聯系統已深度融入工業4.0的發展之中&#xff0c;同時也帶來了前所未有的網絡安全挑戰。隨著工業系統的互聯互通不斷加深&#xff0c;網絡攻擊的范圍和類型不斷增加&#xff0c;關鍵基礎設施因此面臨更高的網絡風險暴露…

k8s 1.23.6版本apiserver list-watch原理機制

Kubernetes 1.23.6 版本中&#xff0c;API Server 的 **List-Watch 機制** 是集群狀態同步的核心機制&#xff0c;其設計目標是高效、實時地將資源變更通知到各組件&#xff08;如 kubelet、controller-manager等&#xff09;。以下是其詳細原理和工作機制&#xff1a; 1. 核心…

Linux基本指令篇 —— mkdir指令

mkdir是Linux和Unix-like系統中用于創建目錄的基本命令&#xff0c;全稱為"make directory"。下面將詳細介紹這個命令的用法、選項和實際應用。 目錄 一、基本語法 二、基本用法 創建單個目錄 創建多個目錄 三、常用選項 -p 或 --parents -m 或 --mode -v 或 …

聊聊GPIO 工作模式

嵌入式開發中&#xff0c;GPIO&#xff08;General-Purpose Input/Output&#xff09;是最基礎也最常用的功能模塊之一。你可以把它想象成微控制器伸出來的無數根“手腳”&#xff1a;既可以用它輸出信號去點亮LED、驅動外設&#xff0c;也可以用它輸入信號來檢測按鍵、讀取傳感…

DM9000AE+STM32H7在rt-thread中的使用

概述 記錄下DM9000AE在rt-thread上的使用 FMC的配置 rt-thread的網絡設備驅動注冊 硬件連接 16bit總線 掛在FMC_A0 地址0x6000_0000 FMC的配置 FMC是STM32H7的一個外設&#xff0c;通過FMC把DM9000當做一個SRAM來訪問&#xff0c;只需要配置好FCM的時序就可以了。 DM9000…

TiDB 字符串行轉列與 JSON 數據查詢優化知識筆記

一、長字符串行轉列方案 JSON_TABLE 方案&#xff08;TiDB 5.0 推薦&#xff09; 通過將逗號分隔字符串轉為 JSON 數組后展開為行&#xff1a; sql SET str ‘a,b,c,d’; SELECT jt.val, jt.pos FROM JSON_TABLE( CONCAT(‘[’, REPLACE(str, ‘,’, ‘“,”’), ‘"]’…

1 Studying《Performance Analysis and Tuning on Modern CPUs》7-11

目錄 Part2. Source Code Tuning For CPU 數據驅動優化 7 CPU Front-End Optimizations 7.1 Machine code layout //機器碼布局 7.2 Basic Block 7.3 Basic block placement 7.4 Basic block alignment 7.5 Function splitting //函數拆分 7.6 Function groupin…

WinUI3入門6:子線程處理UI 窗口加載后執行 獲取和設置控件尺寸 自動生成事件代碼框架

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C的&#xff0c;可以在任何平臺上使用。 源碼指引&#xff1a;github源…

中國招聘智能化白皮書:從 “人撐不住“ 到 “AI 破局“ 的底層邏輯革命——AI得賢招聘官第六代AI面試官

一場面試&#xff0c;牽動一家公司的人力系統。 當簡歷數量以千計堆疊、當HR通宵挑燈刷篩選、當面試質量與效率陷入兩難&#xff0c;招聘不再只是流程問題&#xff0c;而成了“組織生存”的關鍵變量。 問題是&#xff1a;靠人&#xff0c;已經撐不住了。 企業招聘正步入前所…