從0到1,實現Java控制台版本的ATM管理系統

来源:https://www.cnblogs.com/iflytek-aiit319102020329/archive/2023/09/24/17725835.html
-Advertisement-
Play Games

從0到1,實現Java控制台版本的ATM管理系統 ​ 其實作為一名Java的程式猿,無論你是初學也好,大神也罷,管理系統一直都是一個非常好的例子,初學者主要是用數組、List等等來寫出一個簡易的管理系統.牛逼一點的大神則用資料庫+swing來做一個有界面的管理系統,其實都並不會太難。 ​ 今天我就先 ...


從0到1,實現Java控制台版本的ATM管理系統

​ 其實作為一名Java的程式猿,無論你是初學也好,大神也罷,管理系統一直都是一個非常好的例子,初學者主要是用數組、List等等來寫出一個簡易的管理系統.牛逼一點的大神則用資料庫+swing來做一個有界面的管理系統,其實都並不會太難。

​ 今天我就先寫一個簡單的管理系統:用List來實現銀行的ATM管理系統

1.ATM系統技術選型分析

技術點分析

1.1 面向對象編程

每個用戶對象要對應一個賬戶對象,所以需要設計賬戶類Account

1.2 程式流程式控制制

需要結合分支、迴圈、跳轉等相關操作控製程序的業務邏輯

1.3 使用集合容器

系統需要提供一一個容器用於存儲這些賬戶對象的信息,我們選ArrayList集合,因為ArrayList底層是可變的數組,操作起來相比於數組較為方便一些

1.4 使用常見API

內容比較,分析,數據處理等需要用到String等常用API

2.學習收穫

2.1 優秀的面向對象編程能力,清晰、縝密的業務、數據分析能力

2.2 形成良好的編碼習慣,獲得一定的編碼經驗

2.3 熟練使用程式流程技術來控制電腦完成自己的想法

2.4 形成Java編程的業務思維,和解決問題的能力,讓基礎知識形成體系,為後續學習Java高級技術做有
力支撐

3.功能分析

3.1 賬戶類、首頁設計

分析:

①每個用戶一個賬戶對象,需要設計賬戶類,賬戶類至少包含(卡號、用戶名、餘額、取現額度、密碼)

1、用戶的賬戶信息,系統如何表示的?

  • 定義賬戶類Account, 定義系統關心的屬性信息。

一個標準類的書寫應當包括如下細節:

  • 成員屬性私有化

  • 提供空參/滿參的構造方法

  • 提供get/set方法


public class Account {
  //成員屬性

  //卡號
  private String cardID;

  //用戶名
  private String userName;

  //密碼
  private String passWord;

  //餘額
  private double money;

  //取現額度
  private double quotaMoney;

  //提供空參/滿參的構造方法

  public Account() {
  }

  public Account(String cardID, String username, String password, double money, double quotaMoney) {
    this.cardID = cardID;
    this.userName = username;
    this.passWord = password;
    this.money = money;
    this.quotaMoney = quotaMoney;
  }

  //提供get/和set方法


  public String getCardID() {
    return cardID;
  }

  public void setCardID(String cardID) {
    this.cardID = cardID;
  }

  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 getMoney() {
    return money;
  }

  public void setMoney(double money) {
    this.money = money;
  }

  public double getQuotaMoney() {
    return quotaMoney;
  }

  public void setQuotaMoney(double quotaMoney) {
    this.quotaMoney = quotaMoney;
  }
}

②系統採用什麼來存儲賬戶對象?

  • 需要定義一個ArrayList的集合用於存儲賬戶對象。
//定義集合對象,存儲所有賬戶信息
ArrayList<Account> accountList = new ArrayList<>();

③需要展示歡迎頁包含2個功能:註冊開戶、登錄賬戶。

==========歡迎您進入黑馬銀行ATM系統==========

1. 登錄賬戶.

2. 註冊賬戶.

3. 退出.

===========================================

3.2 用戶開戶功能實現

開戶功能的實現需要哪幾步操作,需要註意什麼問題?

  • 開戶功能 應該獨立定義成方法,並傳入當前集合對象給該方法。
  • 卡號 是通過設計的方法隨機返回8個數字代表卡號,註意:卡號不能重覆
  • 把開戶的信 息封裝成Account對象,存入到集合中。

分析

①開戶功能應該獨立定義成方法,並傳入當前集合對象給該方法。

private static boolean registerAccount(ArrayList<Account> accountList, Scanner scanner)

②需要提示用戶輸入個人信息,開戶的卡號是系統自動生成的8位數。

private static String createCardID(ArrayList<Account> accountList)

③註意:自動生成的卡號不能與其他用戶的卡號重覆。

private static Account isCardIDExisting(ArrayList<Account> accountList, String cardID)

④最終把用戶開戶的信息封裝成Account對象,存入到集合中。

Account account = new Account(cardID, userName, passWord, 0.0, quotaMoney);//滿參構造,初始化數據
accountList.add(account);

運行效果

==========歡迎您進入黑馬銀行ATM系統==========

1. 登錄賬戶.

2. 註冊賬戶.

3. 退出.

===========================================

請輸入命令1、2、3. 選擇對應的操作: 2

==========歡迎您進入黑馬銀行用戶辦卡界面==========

請輸入您的姓名: 常州陪彭於晏

請輸入您的密碼: 9527

請再次輸入您的密碼: 9527

請設置當次取現額度: 15000

尊敬的常州陪彭於晏貴賓先生/女士,您的賬戶已經開卡成功,您的卡號是: 65301297.

註冊成功~~~

3.3 用戶登錄功能實現

1、登錄功能如何實現的?

  • 根據卡號去集合中查詢對應的賬戶對象。
  • 如果找到了賬戶對象, 說明卡號存在,繼續輸入密碼。
  • 如果密碼也正確, 則登錄成功。

分析
①需要根據卡號去集合中查詢對應的賬戶對象。

private static Account isCardIDExisting(ArrayList<Account> accountList, String cardID) 

②如果找到了賬戶對象,說明卡號存在,繼續輸入密碼。
③如果密碼也正確,則登錄成功。

運行效果

==========歡迎您進入黑馬銀行ATM系統==========

1. 登錄賬戶.

2. 註冊賬戶.

3. 退出.

=========================================

請輸入命令1、2、3. 選擇對應的操作: 1

==========黑馬銀行ATM系統登錄界面==========

請輸入您的卡號: 77711112

請輸入您的密碼: 9527

登錄成功~~~

3.4 用戶操作頁設計、查詢賬戶、退出賬戶功能

分析
①用戶登錄成功後,需要進入用戶操作頁。

 private static void showCommand(Account account, ArrayList<Account> accountList, Scanner scanner) 

②查詢就是直接展示當前登錄成功的賬戶對象的信息。

 private static void showAccountInfo(Account account) 

③退出賬戶是需要回到首頁的。

運行效果

==========黑馬銀行ATM系統登錄界面==========

請輸入您的卡號: 37682957

請輸入您的密碼: 9527

登錄成功~~~

尊敬的常州彭於晏貴賓先生/女士,您可以辦理如下業務,您的卡號是37682957~~~

==========歡迎您進入黑馬銀行用戶操作界面==========

1.查詢.

2.存款.

3.取款.

4.轉賬.

5.修改密碼.

6.退出.

7.註銷當前賬戶.

============================================

請選擇相關操作數:6

成功退出黑馬銀行用戶操作界面~~~

==========歡迎您進入黑馬銀行ATM系統==========

1. 登錄賬戶.

2. 註冊賬戶.

3. 退出.

=========================================

請輸入命令1、2、3. 選擇對應的操作: 

3.5 用戶存款、取款功能設計

分析
①存款和取款都是拿到當前用戶的賬戶對象。

②通過調用賬戶對象的set方法修改其餘額。

運行效果

尊敬的常州彭於晏貴賓先生/女士,您可以辦理如下業務,您的卡號是18209986~~~

==========歡迎您進入黑馬銀行用戶操作界面==========

1.查詢.

2.存款.

3.取款.

4.轉賬.

5.修改密碼.

6.退出.

7.註銷當前賬戶.

============================================

請選擇相關操作數:2

==========歡迎您進入黑馬銀行用戶存款界面==========

請輸入存款的金額:15000

==========歡迎您進入黑馬銀行用戶詳情界面==========

您的賬戶信息如下: 

卡號: 18209986

姓名: 常州彭於晏

餘額: 15000.0元

當次取現額度: 15000.0元

===========================================

您已經存款成功~~~
    
==========歡迎您進入黑馬銀行用戶取款界面==========

請輸入取款的金額:26000

此次取款金額超出了當次取現額度~~~

請輸入取款的金額:1000

==========歡迎您進入黑馬銀行用戶詳情界面==========

您的賬戶信息如下: 

卡號: 18209986

姓名: 常州彭於晏

餘額: 14000.0元

當次取現額度: 15000.0元

===========================================

您已經取款成功~~~

3.6 用戶轉賬功能設計

分析
①轉賬功能要分析對方賬戶是否存在的問題。
②還要分析自己的餘額是否足夠的問題。

3.7 用戶密碼修改功能、銷戶功能

分析
①修改密碼就是把當前對象的密碼屬性使用set方法進行更新。
②銷戶是從集合對象中刪除當前對象,並回到首頁。

至此,ATM管理系統就在這裡,是不是很簡單呢?

4.部分源碼展示

public class ATMSystem {

  public static void main(String[] args) {

    //定義集合對象,存儲所有賬戶信息
    ArrayList<Account> accountList = new ArrayList<>();

    //鍵盤錄入的對象
    Scanner scanner = new Scanner(System.in);


    //操作數
    int keyWord = 0;

    //迴圈標誌
    boolean runningFlag = true;

    //登錄/註冊操作的返回值 成功/失敗
    boolean status = true;

    while (runningFlag) {

      System.out.println("==========歡迎您進入黑馬銀行ATM系統==========\n");
      System.out.println("1. 登錄賬戶.\n");
      System.out.println("2. 註冊賬戶.\n");
      System.out.println("3. 退出.\n");
      System.out.println("=========================================\n");
      System.out.print("請輸入命令1、2、3. 選擇對應的操作: ");
      keyWord = scanner.nextInt();
      System.out.println();


      switch (keyWord) {
        case 1:
          //1. 登錄 待實現
          //System.out.println("登錄 待實現\n");
          status = loginAccount(accountList, scanner);
          if (status) {
            //System.out.println("登陸成功~~~\n");
          } else
            System.out.println("登錄失敗~~~\n");
          break;
        case 2:
          //2. 註冊 待實現
          //System.out.println("註冊 待實現\n");
          status = registerAccount(accountList, scanner);
          if (status)
            System.out.println("註冊成功~~~\n");
          else
            System.out.println("註冊失敗~~~\n");
          break;
        case 3:
          runningFlag = false;
          System.out.println("成功退出黑馬銀行ATM系統,歡迎您下次使用~~~\n");
          break;
        default:
          System.out.println("\n您當前輸入的命令不合法,請重新輸入~~~\n");
          break;
      }
    }
  }

註冊

  private static boolean registerAccount(ArrayList<Account> accountList, Scanner scanner) {
    System.out.println("==========歡迎您進入黑馬銀行用戶辦卡界面==========\n");

    System.out.print("請輸入您的姓名: ");
    scanner.nextLine();
    String userName = scanner.nextLine();

    System.out.println();


    String passWord = "", rePassWord = "";

    while (true) {
      System.out.print("請輸入您的密碼: ");
      passWord = scanner.nextLine(); // 讀取用戶輸入的密碼
      System.out.println();

      System.out.print("請再次輸入您的密碼: "); // 再次確認密碼
      rePassWord = scanner.nextLine(); // 讀取用戶再次輸入的密碼
      System.out.println();

      //檢驗用戶兩次輸入的密碼是否相同
      if (passWord.equals(rePassWord)) {
        break;
      } else {
        System.out.println("您2次輸入的密碼不一致,請核對後重新輸入~~~\n");
      }
    }

    //銀行系統生成銀行卡號,開戶的卡號是系統自動生成的8位數
    String cardID = createCardID(accountList);


    //現階段還未學到日期類,沒法統計每天取多少錢,本次只作當次取現額度,等日後學習至日期類,再作變更
    System.out.print("請設置當次取現額度: ");//一次最多取多少錢
    double quotaMoney = scanner.nextDouble();
    System.out.println();

    Account account = new Account(cardID, userName, passWord, 0.0, quotaMoney);//滿參構造,初始化數據

    accountList.add(account);

    System.out.println("尊敬的" + account.getUsername() + "貴賓先生/女士,您的賬戶已經開卡成功,您的卡號是: " + account.getCardID() + ".\n");

    return true;
  }

完整代碼詳見:https://gitee.com/AIITCherry/to-do-list

程式運行演示視頻詳見:https://www.bilibili.com/video/BV1J84y1D75i/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=2b0d1f971a9cdc1466c16aeece19350d


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景介紹 我們存在著大量在PC頁面通過表格看數據業務場景,表格又分為兩種,一種是 antd / fusion 這種基於 dom 元素的表格,另一種是通過 canvas 繪製的類似 excel 的表格。 基於 dom 的表格功能豐富較為美觀,能實現多表頭、合併單元格和各種自定義渲染(如表格中渲染圖形 ...
  • 在現代的Web開發中,優化用戶體驗至關重要。一種常見的方法是在頁面載入時預載入圖片,並展示一個載入進度條,讓用戶瞭解載入進度。在本文中,我們將深入探討如何實現這兩個關鍵功能,以提高網站性能和用戶滿意度 ...
  • 9 月 16 日,全棧 Web 框架 Remix 正式發佈了 2.0 版本,Remix 團隊在發佈 1.0 版本後經過近 2 年的持續努力,發佈了 19 個次要版本、100 多個補丁版本,並解決了數千個問題和拉取請求,終於迎來了第二個主要版本! Remix 具有以下特性: 追求速度、用戶體驗(UX) ...
  • Uber公司技術棧介紹 Uber(Uber Technologies,Inc.)中文譯作“優步”,是一家美國矽谷的科技公司。Uber在2009年,由加利福尼亞大學洛杉磯分校輟學生特拉維斯·卡蘭尼克和好友加勒特·坎普(Garrett Camp)創立。因旗下同名打車APP而名聲大噪。Uber已經進入中國 ...
  • 實踐環境 python 3.6.2 scikit-build-0.16.7 win10 opencv_python-4.5.4.60-cp36-cp36m-win_amd64.whl 下載地址: https://pypi.org/project/opencv-python/4.5.4.60/#fil ...
  • 概述 表單驗證的最終效果大家都懂,這裡不闡述了,主要從巨集觀角度說說blazor中表單驗證框架涉及到的類,以及它們是如何協作的,看完這個,再看官方文檔也許能更輕鬆點。 blazor中的驗證框架分為兩部分:基礎驗證框架 和 基於數據註釋Atrrbute的驗證器,當然也提供了很多擴展點。註意我們通常使用數 ...
  • 函數是什麼?在編程中,函數是一段可重用的代碼塊,用於完成特定任務或執行特定操作。它可以接輸入參數並返回一個值或執行一系列操作。函數可以幫助程式員將代碼模塊化,提高代碼的可讀性和可維護性。 函數通常包括以下組成部分: 函數名:用於標識函數,並可以通過函數名調用執行該函數。 參數:輸入給函數的值,在函數 ...
  • 節省時間與精力,更高效地打造穩定可靠的Web項目:基於Go語言和Gin框架的完善Web項目骨架。無需從零開始,直接利用這個骨架,快速搭建一個功能齊全、性能優異的Web應用。充分發揮Go語言和Gin框架的優勢,輕鬆處理高併發、大流量的請求。構建可擴展性強、易於維護的代碼架構,保證項目的長期穩定運行。同 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...