#include <stdio.h> #include <string.h> #define SIZE 100 #define LEN 20 enum state {EXIT, RUN, WRONG_NAME, WRONG_CODE}; int main(void) { // 宣告預設的帳號及密碼 char userID[SIZE][LEN]; char userCODE[SIZE][LEN]; // 宣告暫存使用者輸入的帳號及密碼 char inputName[LEN]; char inputCode[LEN]; // 宣告暫存新註冊的帳號及密碼 char newName[LEN]; char newCode[LEN]; // 宣告暫存成功登入的帳號及密碼 char whoName[LEN]; char whoCode[LEN]; // administrator 為預設的管理者帳號, 0000 為其密碼 strcpy(userID[0], "administrator"); strcpy(userCODE[0], "0000"); // 宣告接收管理模式指令 char instruction[LEN]; // 宣告狀態變數、迴圈變數及陣列索引值變數 int state, i; int counter; counter = 1; while (1) { state = WRONG_NAME; printf("login: "); scanf("%s", inputName); // "exit" 為內建指令,用來離開迴圈 if (!strcmp(inputName, "exit")) { state = EXIT; printf("\n\n您將要離開本登入程式....\n\n"); break; } // "new" 為內建指令,用來新建帳號密碼 if (!strcmp(inputName, "new")) { state = RUN; printf("\n請輸入新的註冊帳號: "); scanf("%s", newName); printf("請輸入新的登入密碼: "); scanf("%s", newCode); strcpy(userID[counter], newName); strcpy(userCODE[counter], newCode); counter++; printf("\n新的帳號、密碼已建立,請重新登入....\n"); continue; } // 從陣列中判斷是否有使用者輸入的帳號,若有才再繼續要求輸入密碼 for (i = 0; i < SIZE; i++) { if (!strcmp(inputName, userID[i])) { printf("password: "); scanf("%s", inputCode); if (i == 0 && !strcmp(inputCode, userCODE[i])) { printf("\n\n您成功以管理員模式登入....\n"); printf("將入帳號管理模式,請在提示符號 # 後輸入指令\n"); while (1) { printf("\n# "); scanf("%s", instruction); // exit 為離開管理模式的指令 if (!strcmp(instruction, "exit")) { break; } // list 為列印使用者列表的指令 if (!strcmp(instruction, "list")) { printf("\n您即將開啟印出使用者帳號列表的功能....\n"); continue; } // search 為查詢帳號指令 if (!strcmp(instruction, "search")) { printf("\n您即將開啟查詢使用者帳號的功能....\n"); continue; } // delete 為刪除帳號指令 if (!strcmp(instruction, "delete")) { printf("\n您即將開啟刪除使用者帳號的功能....\n"); continue; } // sort 為排序指令 if (!strcmp(instruction, "sort")) { printf("\n您即將開啟排序使用者帳號列表的功能....\n"); continue; } } printf("\n\n您即將離開管理模式,請重新登入....\n\n"); state = RUN; break; } if (!strcmp(inputCode, userCODE[i])) { strcpy(whoName, inputName); strcpy(whoCode, inputCode); printf("\n\n哈囉, %s , 歡迎使用本登入程式...\n\n", whoName); state = RUN; break; } else { state = WRONG_CODE; break; } } } // 判斷目前狀態,顯示提示訊息 if (state == RUN) { continue; } else if (state == WRONG_NAME) { printf("\n\n沒有這名使用者喔!請重新登入....\n\n"); continue; } else if (state == WRONG_CODE) { printf("\n\n密碼錯誤,請重新登入....\n\n"); continue; } } printf("\n\n程式即將關閉,所有建立的資料都會消失....\n\n"); return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:nc3.c 功能:利用 while 迴圈設計的登入系統 作者:張凱慶 時間:西元2010年7月 */
程式說明及編譯執行,請繼續參考
沒有留言:
張貼留言