溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用C語言實現通訊錄功能

發布時間:2022-09-23 09:53:03 來源:億速云 閱讀:160 作者:iii 欄目:開發技術

怎么用C語言實現通訊錄功能

目錄

  1. 引言
  2. 需求分析
  3. 數據結構設計
  4. 功能模塊設計
  5. 代碼實現
  6. 完整代碼
  7. 總結

引言

通訊錄是我們日常生活中常用的工具之一,它可以幫助我們存儲和管理聯系人信息。在本文中,我們將使用C語言來實現一個簡單的通訊錄功能。通過這個項目,你將學習如何使用C語言進行文件操作、數據結構設計以及模塊化編程。

需求分析

在開始編寫代碼之前,我們需要明確通訊錄的基本功能需求:

  1. 添加聯系人:用戶可以輸入聯系人的姓名、電話號碼、電子郵件等信息,并將其添加到通訊錄中。
  2. 刪除聯系人:用戶可以通過姓名或其他唯一標識符刪除通訊錄中的聯系人。
  3. 查找聯系人:用戶可以通過姓名或其他信息查找通訊錄中的聯系人。
  4. 修改聯系人:用戶可以修改通訊錄中已有聯系人的信息。
  5. 顯示所有聯系人:用戶可以查看通訊錄中所有聯系人的信息。
  6. 保存通訊錄到文件:用戶可以將通訊錄保存到文件中,以便下次使用。
  7. 從文件加載通訊錄:用戶可以從文件中加載之前保存的通訊錄。

數據結構設計

為了實現上述功能,我們需要設計一個合適的數據結構來存儲聯系人信息。我們可以使用結構體來表示每個聯系人,并使用鏈表或數組來存儲多個聯系人。

聯系人結構體

typedef struct Contact {
    char name[50];
    char phone[15];
    char email[50];
    struct Contact* next;
} Contact;

在這個結構體中,name、phoneemail分別表示聯系人的姓名、電話號碼和電子郵件地址。next指針用于將多個聯系人連接成一個鏈表。

通訊錄結構體

typedef struct AddressBook {
    Contact* head;
    int count;
} AddressBook;

AddressBook結構體包含一個指向鏈表頭部的指針head和一個表示聯系人總數的整數count。

功能模塊設計

接下來,我們將通訊錄的功能劃分為多個模塊,每個模塊負責實現一個特定的功能。

  1. 添加聯系人模塊:負責將新聯系人添加到通訊錄中。
  2. 刪除聯系人模塊:負責從通訊錄中刪除指定聯系人。
  3. 查找聯系人模塊:負責根據姓名或其他信息查找聯系人。
  4. 修改聯系人模塊:負責修改通訊錄中已有聯系人的信息。
  5. 顯示所有聯系人模塊:負責顯示通訊錄中所有聯系人的信息。
  6. 保存通訊錄到文件模塊:負責將通訊錄保存到文件中。
  7. 從文件加載通訊錄模塊:負責從文件中加載通訊錄。

代碼實現

5.1 數據結構定義

首先,我們定義聯系人和通訊錄的結構體。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Contact {
    char name[50];
    char phone[15];
    char email[50];
    struct Contact* next;
} Contact;

typedef struct AddressBook {
    Contact* head;
    int count;
} AddressBook;

5.2 添加聯系人

接下來,我們實現添加聯系人的功能。用戶輸入聯系人的姓名、電話號碼和電子郵件地址,程序將其添加到通訊錄中。

void addContact(AddressBook* book) {
    Contact* newContact = (Contact*)malloc(sizeof(Contact));
    if (newContact == NULL) {
        printf("內存分配失??!\n");
        return;
    }

    printf("請輸入姓名: ");
    scanf("%s", newContact->name);
    printf("請輸入電話號碼: ");
    scanf("%s", newContact->phone);
    printf("請輸入電子郵件: ");
    scanf("%s", newContact->email);

    newContact->next = book->head;
    book->head = newContact;
    book->count++;

    printf("聯系人添加成功!\n");
}

5.3 刪除聯系人

刪除聯系人的功能需要用戶輸入要刪除的聯系人姓名,程序遍歷鏈表找到該聯系人并將其刪除。

void deleteContact(AddressBook* book, char* name) {
    Contact* current = book->head;
    Contact* previous = NULL;

    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            if (previous == NULL) {
                book->head = current->next;
            } else {
                previous->next = current->next;
            }
            free(current);
            book->count--;
            printf("聯系人刪除成功!\n");
            return;
        }
        previous = current;
        current = current->next;
    }

    printf("未找到該聯系人!\n");
}

5.4 查找聯系人

查找聯系人的功能允許用戶通過姓名查找聯系人信息。

void findContact(AddressBook* book, char* name) {
    Contact* current = book->head;

    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            printf("姓名: %s\n", current->name);
            printf("電話號碼: %s\n", current->phone);
            printf("電子郵件: %s\n", current->email);
            return;
        }
        current = current->next;
    }

    printf("未找到該聯系人!\n");
}

5.5 修改聯系人

修改聯系人的功能允許用戶通過姓名查找聯系人并修改其信息。

void modifyContact(AddressBook* book, char* name) {
    Contact* current = book->head;

    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            printf("請輸入新的電話號碼: ");
            scanf("%s", current->phone);
            printf("請輸入新的電子郵件: ");
            scanf("%s", current->email);
            printf("聯系人信息修改成功!\n");
            return;
        }
        current = current->next;
    }

    printf("未找到該聯系人!\n");
}

5.6 顯示所有聯系人

顯示所有聯系人的功能將遍歷鏈表并打印每個聯系人的信息。

void displayContacts(AddressBook* book) {
    Contact* current = book->head;

    if (current == NULL) {
        printf("通訊錄為空!\n");
        return;
    }

    while (current != NULL) {
        printf("姓名: %s\n", current->name);
        printf("電話號碼: %s\n", current->phone);
        printf("電子郵件: %s\n", current->email);
        printf("----------------------------\n");
        current = current->next;
    }
}

5.7 保存通訊錄到文件

保存通訊錄到文件的功能將通訊錄中的聯系人信息寫入到一個文件中。

void saveToFile(AddressBook* book, char* filename) {
    FILE* file = fopen(filename, "w");
    if (file == NULL) {
        printf("文件打開失??!\n");
        return;
    }

    Contact* current = book->head;
    while (current != NULL) {
        fprintf(file, "%s,%s,%s\n", current->name, current->phone, current->email);
        current = current->next;
    }

    fclose(file);
    printf("通訊錄已保存到文件!\n");
}

5.8 從文件加載通訊錄

從文件加載通訊錄的功能將從文件中讀取聯系人信息并重新構建通訊錄。

void loadFromFile(AddressBook* book, char* filename) {
    FILE* file = fopen(filename, "r");
    if (file == NULL) {
        printf("文件打開失??!\n");
        return;
    }

    char name[50], phone[15], email[50];
    while (fscanf(file, "%[^,],%[^,],%[^\n]\n", name, phone, email) != EOF) {
        Contact* newContact = (Contact*)malloc(sizeof(Contact));
        if (newContact == NULL) {
            printf("內存分配失??!\n");
            return;
        }

        strcpy(newContact->name, name);
        strcpy(newContact->phone, phone);
        strcpy(newContact->email, email);
        newContact->next = book->head;
        book->head = newContact;
        book->count++;
    }

    fclose(file);
    printf("通訊錄已從文件加載!\n");
}

完整代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Contact {
    char name[50];
    char phone[15];
    char email[50];
    struct Contact* next;
} Contact;

typedef struct AddressBook {
    Contact* head;
    int count;
} AddressBook;

void addContact(AddressBook* book) {
    Contact* newContact = (Contact*)malloc(sizeof(Contact));
    if (newContact == NULL) {
        printf("內存分配失??!\n");
        return;
    }

    printf("請輸入姓名: ");
    scanf("%s", newContact->name);
    printf("請輸入電話號碼: ");
    scanf("%s", newContact->phone);
    printf("請輸入電子郵件: ");
    scanf("%s", newContact->email);

    newContact->next = book->head;
    book->head = newContact;
    book->count++;

    printf("聯系人添加成功!\n");
}

void deleteContact(AddressBook* book, char* name) {
    Contact* current = book->head;
    Contact* previous = NULL;

    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            if (previous == NULL) {
                book->head = current->next;
            } else {
                previous->next = current->next;
            }
            free(current);
            book->count--;
            printf("聯系人刪除成功!\n");
            return;
        }
        previous = current;
        current = current->next;
    }

    printf("未找到該聯系人!\n");
}

void findContact(AddressBook* book, char* name) {
    Contact* current = book->head;

    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            printf("姓名: %s\n", current->name);
            printf("電話號碼: %s\n", current->phone);
            printf("電子郵件: %s\n", current->email);
            return;
        }
        current = current->next;
    }

    printf("未找到該聯系人!\n");
}

void modifyContact(AddressBook* book, char* name) {
    Contact* current = book->head;

    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            printf("請輸入新的電話號碼: ");
            scanf("%s", current->phone);
            printf("請輸入新的電子郵件: ");
            scanf("%s", current->email);
            printf("聯系人信息修改成功!\n");
            return;
        }
        current = current->next;
    }

    printf("未找到該聯系人!\n");
}

void displayContacts(AddressBook* book) {
    Contact* current = book->head;

    if (current == NULL) {
        printf("通訊錄為空!\n");
        return;
    }

    while (current != NULL) {
        printf("姓名: %s\n", current->name);
        printf("電話號碼: %s\n", current->phone);
        printf("電子郵件: %s\n", current->email);
        printf("----------------------------\n");
        current = current->next;
    }
}

void saveToFile(AddressBook* book, char* filename) {
    FILE* file = fopen(filename, "w");
    if (file == NULL) {
        printf("文件打開失??!\n");
        return;
    }

    Contact* current = book->head;
    while (current != NULL) {
        fprintf(file, "%s,%s,%s\n", current->name, current->phone, current->email);
        current = current->next;
    }

    fclose(file);
    printf("通訊錄已保存到文件!\n");
}

void loadFromFile(AddressBook* book, char* filename) {
    FILE* file = fopen(filename, "r");
    if (file == NULL) {
        printf("文件打開失??!\n");
        return;
    }

    char name[50], phone[15], email[50];
    while (fscanf(file, "%[^,],%[^,],%[^\n]\n", name, phone, email) != EOF) {
        Contact* newContact = (Contact*)malloc(sizeof(Contact));
        if (newContact == NULL) {
            printf("內存分配失??!\n");
            return;
        }

        strcpy(newContact->name, name);
        strcpy(newContact->phone, phone);
        strcpy(newContact->email, email);
        newContact->next = book->head;
        book->head = newContact;
        book->count++;
    }

    fclose(file);
    printf("通訊錄已從文件加載!\n");
}

int main() {
    AddressBook book = {NULL, 0};
    int choice;
    char name[50];
    char filename[50];

    while (1) {
        printf("\n通訊錄管理系統\n");
        printf("1. 添加聯系人\n");
        printf("2. 刪除聯系人\n");
        printf("3. 查找聯系人\n");
        printf("4. 修改聯系人\n");
        printf("5. 顯示所有聯系人\n");
        printf("6. 保存通訊錄到文件\n");
        printf("7. 從文件加載通訊錄\n");
        printf("8. 退出\n");
        printf("請選擇操作: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addContact(&book);
                break;
            case 2:
                printf("請輸入要刪除的聯系人姓名: ");
                scanf("%s", name);
                deleteContact(&book, name);
                break;
            case 3:
                printf("請輸入要查找的聯系人姓名: ");
                scanf("%s", name);
                findContact(&book, name);
                break;
            case 4:
                printf("請輸入要修改的聯系人姓名: ");
                scanf("%s", name);
                modifyContact(&book, name);
                break;
            case 5:
                displayContacts(&book);
                break;
            case 6:
                printf("請輸入要保存的文件名: ");
                scanf("%s", filename);
                saveToFile(&book, filename);
                break;
            case 7:
                printf("請輸入要加載的文件名: ");
                scanf("%s", filename);
                loadFromFile(&book, filename);
                break;
            case 8:
                printf("退出程序。\n");
                return 0;
            default:
                printf("無效的選擇,請重新輸入!\n");
        }
    }

    return 0;
}

總結

通過本文,我們學習了如何使用C語言實現一個簡單的通訊錄功能。我們設計了合適的數據結構,并實現了添加、刪除、查找、修改、顯示、保存和加載聯系人信息的功能。這個項目不僅幫助我們鞏固了C語言的基礎知識,還讓我們了解了如何進行模塊化編程和文件操作。希望這個項目對你有所幫助,并激發你進一步探索C語言的興趣。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女