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

C語言結構體實戰:通訊錄管理系統完整實現(增刪改查排序)

     編輯:關於C語言

C語言結構體實戰:通訊錄管理系統完整實現(增刪改查排序)

需求:實現一個可存儲 1000 人信息的通訊錄,每人包含姓名、性別、年齡、電話、住址。提供菜單驅動的 7 大功能:添加、刪除、查找、修改、顯示全部、清空、按姓名排序。

模組劃分

  1. 頭文件(contact.h):定義結構體 Peo(單人信息)與 Contact(通訊錄陣列+計數器),聲明所有操作函式。
  2. 測試/主模組(test.c):菜單顯示、用戶輸入接收、switch 分發調用具體功能函式。
  3. 功能實現模組(contact.c):各具體操作的邏輯代碼,均接收 Contact* 指針操作同一份數據。

核心代碼結構

contact.h

#pragma once
typedef struct Peo {
    char name[20];
    char sex[4];
    int age;
    char tell[12];
    char address[20];
} Peo;

typedef struct Contact {
    Peo Dhb[1000];
    int count;
} Contact;

void add_stu(Contact *p);
void del_stu(Contact *p);
void find_stu(Contact *p);
void modify_stu(Contact *p);
void show_stu(Contact *p);
void clear_stu(Contact *p);
void sort_stu(Contact *p);

contact.c 關鍵函式

// 統一查找函式,返回索引或 -1
int search(Contact *p, char *name) {
    for (int i = 0; i < p->count; i++)
        if (strcmp(p->Dhb[i].name, name) == 0) return i;
    return -1;
}

// 添加
void add_stu(Contact *p) {
    scanf("%s %s %d %s %s", p->Dhb[p->count].name, p->Dhb[p->count].sex,
          &p->Dhb[p->count].age, p->Dhb[p->count].tell, p->Dhb[p->count].address);
    p->count++;
    printf("添加成功\n");
}

// 刪除(覆蓋法)
void del_stu(Contact *p) {
    char name[20]; scanf("%s", name);
    int idx = search(p, name);
    if (idx != -1) {
        for (int i = idx; i < p->count - 1; i++) p->Dhb[i] = p->Dhb[i + 1];
        p->count--; printf("刪除成功\n");
    } else printf("不存在\n");
}

// 排序(冒泡法按姓名升序)
void sort_stu(Contact *p) {
    for (int i = 0; i < p->count - 1; i++)
        for (int j = 0; j < p->count - 1 - i; j++)
            if (strcmp(p->Dhb[j].name, p->Dhb[j+1].name) > 0) {
                Peo tmp = p->Dhb[j];
                p->Dhb[j] = p->Dhb[j+1];
                p->Dhb[j+1] = tmp;
            }
    show_stu(p);
}

test.c 主循環

Contact con = {0};
void menu() { /* 打印 1~7 選項 */ }
void test() {
    int input = 1;
    while (input) {
        menu();
        scanf("%d", &input);
        switch (input) {
            case 1: add_stu(&con); break;
            case 2: del_stu(&con); break;
            case 3: find_stu(&con); break;
            case 4: modify_stu(&con); break;
            case 5: show_stu(&con); break;
            case 6: clear_stu(&con); break;
            case 7: sort_stu(&con); break;
            case 0: exit(0);
        }
    }
}
int main() { test(); return 0; }

避坑指南與擴展建議

  • 輸入處理:scanf("%s") 遇空格截斷,姓名/地址含空格時需改用 fgets 並去換行。
  • 緩衝區溢出:字符陣列大小固定,輸入超長會溢出,建議用 scanf("%19s") 限制寬度。
  • 排序效率:1000 筆資料冒泡排序尚可,大數據量建議改用 qsort。
  • 持久化:可增加「存檔/讀檔」功能,將通訊錄序列化至二進制或文本文件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved