C 語言初學教材 - 第六章 將資料暫存在記憶體中 目錄

常見大部分有關通訊錄的程式,如 msn 即時通訊、 Facebook 或無名小站等都有帳號專屬的好友列表,使用者需要先登入才能使用專屬的管理好友的服務,假如我們所要發展的通訊錄程式,使用者是一個家庭,爸爸 tommy ,媽媽 laura ,哥哥 john ,姊姊 mary ,弟弟 sam ,妹妹 helen ,共有六個人,各自都有自己的朋友,因此各自的通訊錄需要個別處理。



我們已經寫好了一個登入程式,包括一個帳號管理系統,不是嗎?因此我們打算以登入程式作為使用者進入程式的介面,若輸入正確的帳號、密碼,使用者便可處理自己的通訊資料,如下圖



長方形代表一個程式模組,這裡所謂的模組,可能是一群函數的集合,而非個別的函數。從「登入程式」可以進入「帳號管理」,「帳號管理」必須回到「登入程式」才能正常結束程式,這部份我們已經完成了,剩下「通訊錄資料」的部份,目前暫以印出登入者帳號的歡迎訊息代替。


「通訊錄資料」的部份,我們會提供以下選單,使用者只要輸入數字就能執行相關功能
1. 增加好友
2. 刪除好友
3. 查詢好友
4. 排序列表
5. 印出列表
6. 存檔後登出
7. 不存檔登出
8. 存檔後離開
9. 不存檔離開


到目前為止,我們所介紹寫程式的方式都是處理記憶體中的資料,因此實際要處理通訊錄資料,需要定義一個專屬記錄通訊錄資料的結構,同時要連接成鏈結串列的資料結構,好方便處理這些資料。


接下來就開始建置選單的功能了,我們逐步將更功能函數化。首先,增加好友使用函數 addfriend() ,就是在鏈結串列中加入新的節點,這裡要注意,參數必須宣告成雙重指標,不然無法有效建立鏈結串列。


程式功能越複雜,程式碼全部擠在單一檔案中不易管理,我們可以將介面與實作分開,這裡所謂的介面就是設計自己的標頭檔,將常數與結構的定義、函數原型的宣告放在這裡,實作檔則放置函數的定義,我們需要另外寫一個含有 main() 的執行檔


我們接著建立在鏈結串列的線性搜尋演算法,使程式具備查詢好友的功能,另外刪除好友則是把節點移除,因此也需要雙重指標當參數。通訊錄資料也需要排序列表的功能,我們依據暱稱的第一個字元順序進行氣泡排序。


最後,我們進行一些測試,登出或離開為程式的基本功能之一,要留意登出是結束 frienddata() 的 while (1) 迴圈,回到 login() 的 while (1) 迴圈繼續執行,而讓程式直接結束的方法則為呼叫 stdlib.h 的 exit() ,可使程式正常的結束。


問題與討論
  1. 發展大型程式分成模組有什麼好處?
  2. 為什麼要在「通訊錄資料」提供程式直接結束的選項?




沒有留言: