首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言實現通訊錄:從數據結構到文件存儲的完整思路

     編輯:程式設計疑難解答

核心數據結構

#define MAX_NAME 20
#define MAX_PHONE 15
#define MAX_ADDR 50
#define MAX_CONTACTS 1000

typedef struct {
    char name[MAX_NAME];
    char phone[MAX_PHONE];
    char addr[MAX_ADDR];
} Contact;

typedef struct {
    Contact contacts[MAX_CONTACTS];
    int count; // 當前聯繫人數
} AddressBook;

核心功能模組

  1. 初始化:count = 0,可從文件加載歷史數據。
  2. 新增:檢查容量 → 輸入信息 → 存入 contacts[count++]。
  3. 刪除:查找索引 → 後續元素前移覆蓋 → count--。
  4. 查找:遍歷數組,strcmp 比對姓名/電話,支持模糊匹配。
  5. 修改:查找到索引後,重新輸入覆蓋該結構體。
  6. 顯示所有:循環打印格式化輸出。
  7. 文件持久化:
    • 存檔:fwrite(&book, sizeof(AddressBook), 1, fp);(二進制)或逐條 fprintf(文本)。
    • 讀檔:對應 fread 或 fscanf 恢復。

主程序框架

int main() {
    AddressBook book = {0};
    load_from_file(&book); // 啟動時加載
    int choice;
    while (1) {
        print_menu();
        scanf("%d", &choice);
        switch (choice) {
            case 1: add_contact(&book); break;
            case 2: del_contact(&book); break;
            case 3: search_contact(&book); break;
            case 4: modify_contact(&book); break;
            case 5: show_all(&book); break;
            case 0: save_to_file(&book); return 0;
        }
    }
}

進階優化方向

  • 動態內存:用 malloc/realloc 替換固定數組,突破上限。
  • 鏈表/哈希表:提升查找/刪除效率至 O(1) 或 O(log n)。
  • 多文件/數據庫:引入 SQLite 實現並發、事務、複雜查詢。
  • GUI:配合 GTK/WinAPI 實現圖形介面。

新手建議

先用固定數組+文本文件跑通流程,理解結構體、文件 IO、字符串處理、菜單循環等基礎知識串聯。再逐步重構為動態版本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved