同樣是權限的問題,我們應該要給某個使用者具有管理帳號的權限,如同網路論壇、 BBS 站台的管理員或各版的版主。第一個問題會是要給哪個使用者管理的權限,第二個問題會是要有哪些管理的功能?
解決第一個問題比較簡單,我們只需要給某個預設的使用者這樣的權限即可,就像大部分的 UNIX-Like 作業系統都有一個 root 帳號, root 具有絕對的權力可以對系統做任何調整,包含檢閱、刪除、移動每個帳號的檔案。
因此,我們預設一個 administrator 的帳號在 userID[0] 的位置,所以我們會加入以下的程式碼
// administrator 為預設的管理者帳號, 0000 為其密碼 strcpy(userID[0], "administrator"); strcpy(userCODE[0], "0000");
這裡要留意的一點,字串在 C 語言中是複合的資料型態,所以需要用到標準函數庫中 string.h 的函數 strcpy() 來進行拷貝的工作。
第二個問題並不麻煩,因為使用者可以自己新增使用者帳號,所以管理者應該要具有刪除帳號的功能,另外為了方便管理,我們打算額外提供一個管理模式的介面,管理者也應該要有印出帳號列表、搜尋帳號、排序帳號等功能,如下列表
指令 | 功能 |
---|---|
exit | 離開管理模式 |
list | 印出帳號列表 |
search | 搜尋特定帳號 |
delete | 刪除特定帳號 |
sort | 排序帳號列表 |
管理者輸入正確的帳號、密碼就會進入管理模式,所以我們會在比對帳號、密碼的 for 迴圈加入以下管理模式的程式碼
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; }
進入管理模式也就是進入另一個 while (1) 迴圈,管理模式以井字號 # 作為提示輸入指令的符號,然後以字元陣列 instruction 變數接收使用者輸入的指令,用到新的變數,別忘了要先宣告
// 宣告接收管理模式指令 char instruction[LEN];
我們同樣以 exit 為離開管理模式指令,其他的指令還沒實際寫出來,就先印出提示字串來代替吧!
完整的範例程式碼及編譯執行,請繼續參考
問題與討論
- 為什麼進入管理模式要用另一個 while (1) 迴圈?
- 還沒實作出來的指令先用提示訊息代替,這種規劃程式的方法有什麼優點?
- 離開管理模式與結束程式的指令都是 exit ,這樣的設計方式好不好?
沒有留言:
張貼留言