我們已經寫好了一個登入程式,包括一個帳號管理系統,不是嗎?因此我們打算以登入程式作為使用者進入程式的介面,若輸入正確的帳號、密碼,使用者便可處理自己的通訊資料,如下圖
長方形代表一個程式模組,這裡所謂的模組,可能是一群函數的集合,而非個別的函數。從「登入程式」可以進入「帳號管理」,「帳號管理」必須回到「登入程式」才能正常結束程式,這部份我們已經完成了,剩下「通訊錄資料」的部份,目前暫以印出登入者帳號的歡迎訊息代替。
「通訊錄資料」的部份,我們會提供以下選單,使用者只要輸入數字就能執行相關功能
1. 增加好友 |
2. 刪除好友 |
3. 查詢好友 |
4. 排序列表 |
5. 印出列表 |
6. 存檔後登出 |
7. 不存檔登出 |
8. 存檔後離開 |
9. 不存檔離開 |
到目前為止,我們所介紹寫程式的方式都是處理記憶體中的資料,因此實際要處理通訊錄資料,需要定義一個專屬記錄通訊錄資料的結構,同時要連接成鏈結串列的資料結構,好方便處理這些資料。
接下來就開始建置選單的功能了,我們逐步將更功能函數化。首先,增加好友使用函數 addfriend() ,就是在鏈結串列中加入新的節點,這裡要注意,參數必須宣告成雙重指標,不然無法有效建立鏈結串列。
程式功能越複雜,程式碼全部擠在單一檔案中不易管理,我們可以將介面與實作分開,這裡所謂的介面就是設計自己的標頭檔,將常數與結構的定義、函數原型的宣告放在這裡,實作檔則放置函數的定義,我們需要另外寫一個含有 main() 的執行檔。
我們接著建立在鏈結串列的線性搜尋演算法,使程式具備查詢好友的功能,另外刪除好友則是把節點移除,因此也需要雙重指標當參數。通訊錄資料也需要排序列表的功能,我們依據暱稱的第一個字元順序進行氣泡排序。
最後,我們進行一些測試,登出或離開為程式的基本功能之一,要留意登出是結束 frienddata() 的 while (1) 迴圈,回到 login() 的 while (1) 迴圈繼續執行,而讓程式直接結束的方法則為呼叫 stdlib.h 的 exit() ,可使程式正常的結束。
問題與討論
- 發展大型程式分成模組有什麼好處?
- 為什麼要在「通訊錄資料」提供程式直接結束的選項?
沒有留言:
張貼留言