首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C/C++ 學習之路(第 07 課):ATM 提款機模擬程式完整實作

     編輯:關於C語言

專案需求

模擬 ATM 基本流程:密碼驗證 (最多 3 次) → 選單操作 (提款/存款/查詢餘額/離開) → 交易執行與餘額更新。展示結構化程式設計、函式分工、輸入驗證等核心技能。

架構設計:模組化函式分工

  • simulateOfATM() — 主流程控制
  • accountVerify() — 密碼驗證 (含自訂字串比較)
  • accountOperate() — 交易選單與業務邏輯
  • strCompare() — 手寫字串比較 (教學用,實務用 strcmp)

關鍵技術點解析

1. 密碼驗證與嘗試次數限制

int accountVerify() {
    char password[50], pwd[10] = "abc";
    int pwdCount = 0;
    do {
        printf("please input your password or press ENTER to break: ");
        gets(password); // 注意:gets 不安全,教學示範用
        if (!strCompare(password, "\0")) break; // 空輸入離開
        if (strCompare(password, pwd)) { // 密碼錯誤
            printf("PASSWORD ERROR !!!\n");
            pwdCount++;
        } else return 1; // 成功
    } while (pwdCount < 3);
    return 0;
}

安全性提醒:實務務必使用 fgets() 替代 gets(),並以雜湊值 (如 SHA-256) 儲存密碼而非明文。

2. 交易選單與餘額管理

void accountOperate() {
    int operate, initMoney = 100, oprateMoney = 0;
    do {
        printf("the amount of your card is: %d\n", initMoney);
        // 顯示選單...
        scanf("%1d", &operate);
        switch (operate) {
            case 1: // 提款
                printf("how much whould you like to get: ");
                scanf("%d", &oprateMoney);
                if (oprateMoney <= 0 || oprateMoney > initMoney) {
                    printf("輸入錯誤或者余額不足!!\n"); continue;
                }
                initMoney -= oprateMoney;
                printf("¥%d 正在吐鈔,請笑納...\n", oprateMoney);
                break;
            case 2: // 存款
                // 類似邏輯...
            case 3: return; // 離開
        }
    } while (1);
}

3. 自訂字串比較 strCompare

int strCompare(char *str1, char *str2) {
    while (*str1 && *str2 && (*str1 == *str2)) {
        str1++; str2++;
    }
    return *str1 - *str2; // 相同返回 0,不同返回 ASCII 差值
}

展示指標走訪與字串結束判斷 (\0) 的基本功。

執行流程示範

please input your password or press ENTER to break:
abc
the amount of your card is: 100
*********** ACCOUNT OPERATE***************
*   1: get money                         *
*   2: deposite                          *
*   3: exit                              *
******************************************
please select a operate: 1
how much whould you like to get: 50
¥50 正在吐鈔,請笑納...

擴充方向

  • 多帳戶支援 (結構體陣列/鏈結串列)
  • 交易紀錄功能 (檔案 I/O)
  • 管理員模式 (新增/刪除帳戶、修改密碼)
  • 圖形化介面 (Win32 API / Qt / ncurses)

總結

這個小專案串聯了輸入輸出、流程控制、函式模組化、字串處理、指標操作等 C 語言核心技能。建議初學者完整打一遍,並嘗試加入上述擴充功能,是通往「會寫實用小工具」的關鍵一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved