首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言簡易電話簿管理系統完整實作:結構體陣列、指標間接索引、增刪改查分頁顯示

     編輯:關於C語言

系統功能

  • 輸入聯絡人 (姓名、單位、市話、手機、關係、信箱、QQ)
  • 分頁顯示所有聯絡人 (每頁 10 筆)
  • 多欄位關鍵字查詢
  • 刪除聯絡人 (索引陣列壓縮)
  • 新增聯絡人
  • 修改聯絡人

資料結構設計

struct Person {
    char name[20], wp[20], pn[20], mpn[20], fz[20], em[20], qq[20];
};
struct Person book[100];      // 資料池
int idx[100];                 // 間接索引陣列:idx[i] = book 中實際下標
int n = 0;                    // 當前筆數

索引陣列優勢:刪除/排序只需移動 int 索引,不動大型結構體,效率高且資料不碎片化。

核心模組代碼精華

輸入模組 (複用於新增)

void input_one(struct Person *p) {
    printf("姓名: "); scanf("%s", p->name);
    printf("單位: "); scanf("%s", p->wp);
    printf("市話: "); scanf("%s", p->pn);
    printf("手機: "); scanf("%s", p->mpn);
    printf("關係: "); scanf("%s", p->fz);
    printf("信箱: "); scanf("%s", p->em);
    printf("QQ:   "); scanf("%s", p->qq);
}

分頁顯示

void display_all() {
    int pages = (n + 9) / 10;
    for (int pg = 0; pg < pages; pg++) {
        int start = pg * 10, end = (pg == pages-1) ? n : start + 10;
        for (int i = start; i < end; i++)
            printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
                book[idx[i]].name, book[idx[i]].wp, book[idx[i]].pn,
                book[idx[i]].mpn, book[idx[i]].fz, book[idx[i]].em, book[idx[i]].qq);
        if (pg < pages-1) { printf("按 1 繼續..."); getchar(); getchar(); system("cls"); }
    }
}

多欄位查詢

void search() {
    char key[20]; scanf("%s", key);
    for (int i = 0; i < n; i++) {
        struct Person *p = &book[idx[i]];
        if (!strcmp(p->name, key) || !strcmp(p->wp, key) || !strcmp(p->pn, key) ||
            !strcmp(p->mpn, key) || !strcmp(p->fz, key) || !strcmp(p->em, key) || !strcmp(p->qq, key)) {
            // 列印該筆
        }
    }
}

刪除 (索引壓縮)

void delete() {
    char key[20]; scanf("%s", key);
    for (int i = 0; i < n; i++) {
        if (match(book[idx[i]], key)) {
            for (int j = i; j < n-1; j++) idx[j] = idx[j+1];
            n--; break;
        }
    }
}

改進建議 (生產級)

  • 輸入緩衝區大小限制 (%19s) 防溢位。
  • 檔案持久化 (CSV/JSON/SQLite)。
  • 動態記憶體 (realloc) 突破 100 筆上限。
  • 介面分離:TUI (ncurses) / GUI / Web API。
  • 單元測試覆蓋核心邏輯。

總結

此系統展示 C 語言結構體陣列 + 索引陣列的經典資料管理模式:資料不動、索引移動,簡單高效。適合作為教學專題、嵌入式輕量管理工具、面試手寫代碼參考。

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