模擬 ATM 基本流程:密碼驗證 (最多 3 次) → 選單操作 (提款/存款/查詢餘額/離開) → 交易執行與餘額更新。展示結構化程式設計、函式分工、輸入驗證等核心技能。
simulateOfATM() — 主流程控制accountVerify() — 密碼驗證 (含自訂字串比較)accountOperate() — 交易選單與業務邏輯strCompare() — 手寫字串比較 (教學用,實務用 strcmp)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) 儲存密碼而非明文。
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);
}
strCompareint 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 正在吐鈔,請笑納...
這個小專案串聯了輸入輸出、流程控制、函式模組化、字串處理、指標操作等 C 語言核心技能。建議初學者完整打一遍,並嘗試加入上述擴充功能,是通往「會寫實用小工具」的關鍵一步。