通讯录管理系统(完整的)

通讯录管理系统。(用单链表或结构数组)
每一个联系人包含编号、姓名、手机、qq等信息,通讯录管理系统可以方便实现对通讯录的管理,如增加联系人,查找某人的联系方式,删除联系人,修改某个人的联系信息等功能,要求用文件保存通讯录中联系人的信息。

TechWhizKid参考GPT回答:

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

// 联系人结构体
typedef struct Contact {
    int id;
    char name[50];
    char phone[20];
    char qq[20];
    struct Contact* next;
} Contact;

// 全局变量,保存通讯录链表的头节点
Contact* contactList = NULL;

// 函数声明
void printMenu();
void addContact();
void searchContact();
void deleteContact();
void modifyContact();
void saveContacts();
void loadContacts();

int main() {
    int choice;
    loadContacts();  // 从文件中加载联系人信息

    do {
        printMenu();
        printf("请输入选项:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addContact();
                break;
            case 2:
                searchContact();
                break;
            case 3:
                deleteContact();
                break;
            case 4:
                modifyContact();
                break;
            case 5:
                saveContacts();
                break;
            case 0:
                printf("感谢使用通讯录管理系统,再见!\n");
                break;
            default:
                printf("无效选项,请重新输入!\n");
                break;
        }
    } while (choice != 0);

    return 0;
}

void printMenu() {
    printf("*************** 通讯录管理系统 ***************\n");
    printf("1. 添加联系人\n");
    printf("2. 查找联系人\n");
    printf("3. 删除联系人\n");
    printf("4. 修改联系人信息\n");
    printf("5. 保存联系人到文件\n");
    printf("0. 退出\n");
    printf("********************************************\n");
}

void addContact() {
    Contact* newContact = (Contact*)malloc(sizeof(Contact));

    printf("请输入联系人编号:");
    scanf("%d", &(newContact->id));
    printf("请输入联系人姓名:");
    scanf("%s", newContact->name);
    printf("请输入联系人手机号码:");
    scanf("%s", newContact->phone);
    printf("请输入联系人QQ号码:");
    scanf("%s", newContact->qq);

    newContact->next = contactList;
    contactList = newContact;

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

void searchContact() {
    char name[50];
    printf("请输入要查找的联系人姓名:");
    scanf("%s", name);

    Contact* current = contactList;
    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            printf("编号:%d\n", current->id);
            printf("姓名:%s\n", current->name);
            printf("手机号码:%s\n", current->phone);
            printf("QQ号码:%s\n", current->qq);
            return;
        }
        current = current->next;
    }

    printf("未找到联系人:%s\n", name);
}

void deleteContact() {
    char name[50];
    printf("请输入要删除的联系人姓名:");
    scanf("%s", name);

    Contact* prev = NULL;
    Contact* current = contactList;
    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            if (prev == NULL) {
                contactList = current->next;
            } else {
                prev->next = current->next;
            }
            free(current);
            printf("联系人删除成功!\n");
            return;
        }
        prev = current;
        current = current->next;
    }

    printf("未找到联系人:%s\n", name);
}

void modifyContact() {
    char name[50];
    printf("请输入要修改的联系人姓名:");
    scanf("%s", name);

    Contact* current = contactList;
    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            printf("请输入新的联系人编号:");
            scanf("%d", &(current->id));
            printf("请输入新的联系人手机号码:");
            scanf("%s", current->phone);
            printf("请输入新的联系人QQ号码:");
            scanf("%s", current->qq);
            printf("联系人信息修改成功!\n");
            return;
        }
        current = current->next;
    }

    printf("未找到联系人:%s\n", name);
}

void saveContacts() {
    char filename[100];
    printf("请输入保存文件的路径和名称:");
    scanf("%s", filename);

    FILE* file = fopen(filename, "w");
    if (file == NULL) {
        printf("文件打开失败!\n");
        return;
    }

    Contact* current = contactList;
    while (current != NULL) {
        fprintf(file, "%d,%s,%s,%s\n", current->id, current->name, current->phone, current->qq);
        current = current->next;
    }

    fclose(file);
    printf("联系人保存成功!\n");
}

void loadContacts() {
    char filename[100];
    printf("请输入要加载的联系人文件的路径和名称:");
    scanf("%s", filename);

    FILE* file = fopen(filename, "r");
    if (file == NULL) {
        printf("文件打开失败!\n");
        return;
    }

    Contact* current = NULL;
    Contact* prev = NULL;
    char line[200];

    while (fgets(line, sizeof(line), file) != NULL) {
        Contact* newContact = (Contact*)malloc(sizeof(Contact));

        sscanf(line, "%d,%[^,],%[^,],%s", &(newContact->id), newContact->name, newContact->phone, newContact->qq);

        newContact->next = NULL;

        if (prev == NULL) {
            contactList = newContact;
        } else {
            prev->next = newContact;
        }

        prev = newContact;
    }

    fclose(file);
    printf("联系人加载成功!\n");
}


基于ChatGPT4与博主叶秋学长的回答,望采纳!!!有其他问题也可以询问我哦💕:
这个问题是关于如何在C语言中创建一个通讯录管理系统。系统需要包含一些功能,比如添加、查找、删除和修改联系人。联系人的信息需要包含编号、姓名、手机和QQ等信息,而且需要将这些信息存储在文件中。

这是一个相当大的项目,它需要涉及到很多C语言的知识,包括结构体、文件操作、链表等等。我可以提供一个基本的框架和一些关键的代码段,但是完整的程序可能需要您自己进一步开发和调试。

首先,我们需要定义一个结构体来表示联系人:

typedef struct Contact {
    int id;  // 编号
    char name[50];  // 姓名
    char phone[20];  // 手机
    char qq[20];  // QQ
    struct Contact *next;  // 单链表的下一个节点
} Contact;

我们可以使用这个结构体来创建一个单链表,每个节点代表一个联系人。链表可以让我们更容易地添加、删除和修改联系人。

我们可以用如下方式来添加联系人:

void add_contact(Contact **head, int id, char *name, char *phone, char *qq) {
    Contact *new_contact = (Contact *)malloc(sizeof(Contact));
    new_contact->id = id;
    strcpy(new_contact->name, name);
    strcpy(new_contact->phone, phone);
    strcpy(new_contact->qq, qq);
    new_contact->next = *head;
    *head = new_contact;
}

删除联系人可能需要一些额外的逻辑,因为我们需要找到要删除的联系人,然后更新链表的链接:

void delete_contact(Contact **head, int id) {
    Contact *prev = NULL;
    Contact *current = *head;
    while (current != NULL && current->id != id) {
        prev = current;
        current = current->next;
    }
    if (current == NULL) {
        printf("No contact with id %d found.\n", id);
        return;
    }
    if (prev == NULL) {
        *head = current->next;
    } else {
        prev->next = current->next;
    }
    free(current);
}

修改联系人的信息可以用类似的方式实现。查找联系人的信息可以通过遍历链表来完成。

最后,我们需要在文件中保存和读取联系人的信息。我们可以用以下方式来保存信息:

void save_contacts(Contact *head, char *filename) {
    FILE *file = fopen(filename, "w");
    Contact *current = head;
    while (current != NULL) {
        fprintf(file, "%d,%s,%s,%s\n", current->id, current->name, current->phone, current->qq);
        current = current->next;
    }
    fclose(file);
}

读取文件中的信息并创建联系人链表的逻辑稍微复杂一些,我们需要读取每一行,然后解析出各个字段的值:

void load_contacts(Contact **head, char *filename) {
    FILE *file = fopen(filename, "r");
    char line

```c
[256];
    while (fgets(line, sizeof(line), file)) {
        int id;
        char name[50], phone[20], qq[20];
        sscanf(line, "%d,%[^,],%[^,],%s", &id, name, phone, qq);
        add_contact(head, id, name, phone, qq);
    }
    fclose(file);
}

以上就是一个基本的通讯录管理系统的框架。它包含了一些基本的功能,比如添加、删除、查找和修改联系人,以及将联系人的信息保存到文件中。但是这个系统还不完整,还需要添加用户界面、错误处理、输入验证等等功能。

在实际编程中,还需要考虑一些额外的问题,比如内存管理、错误处理等等。我提供的代码只是一个开始,还需要你自己去实现更多的功能和细节。

希望这个回答对你有所帮助!

这个很多啊

可参考

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

// 联系人结构体
typedef struct contact {
    int id;
    char name[50];
    char phone[20];
    char qq[20];
    struct contact* next;
} Contact;

// 创建新的联系人节点
Contact* createContact(int id, char* name, char* phone, char* qq) {
    Contact* newContact = (Contact*)malloc(sizeof(Contact));
    newContact->id = id;
    strcpy(newContact->name, name);
    strcpy(newContact->phone, phone);
    strcpy(newContact->qq, qq);
    newContact->next = NULL;
    return newContact;
}

// 在链表末尾添加联系人
void addContact(Contact** head, Contact* newContact) {
    if (*head == NULL) {
        *head = newContact;
    } else {
        Contact* current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newContact;
    }
}

// 根据姓名查找联系人
Contact* findContactByName(Contact* head, char* name) {
    Contact* current = head;
    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            return current;
        }
        current = current->next;
    }
    return NULL;
}

// 根据姓名删除联系人
void deleteContact(Contact** head, char* name) {
    Contact* current = *head;
    Contact* prev = NULL;
    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            if (prev == NULL) {
                *head = current->next;
            } else {
                prev->next = current->next;
            }
            free(current);
            return;
        }
        prev = current;
        current = current->next;
    }
}

// 修改联系人信息
void modifyContact(Contact* contact, char* name, char* phone, char* qq) {
    strcpy(contact->name, name);
    strcpy(contact->phone, phone);
    strcpy(contact->qq, qq);
}

// 打印联系人信息
void printContact(Contact* contact) {
    printf("ID: %d\n", contact->id);
    printf("Name: %s\n", contact->name);
    printf("Phone: %s\n", contact->phone);
    printf("QQ: %s\n", contact->qq);
}

// 保存联系人信息到文件
void saveContactsToFile(Contact* head, char* filename) {
    FILE* file = fopen(filename, "w");
    if (file == NULL) {
        printf("打开文件失败!\n");
        return;
    }

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

    fclose(file);
}

// 从文件加载联系人信息
Contact* loadContactsFromFile(char* filename) {
    FILE* file = fopen(filename, "r");
    if (file == NULL) {
        printf("打开文件失败!\n");
        return NULL;
    }

    Contact* head = NULL;
    char line[100];
    while (fgets(line, sizeof(line), file)) {
        int id;
        char name[50];
        char phone[20];
        char qq[20];
        sscanf(line, "%d,%[^,],%[^,],%s", &id, name, phone, qq);
        Contact* newContact = createContact(id, name, phone, qq);
        addContact(&head, newContact);
    }

    fclose(file);
    return head;
}

int main() {
    Contact* head = NULL;

    // 从文件加载联系人信息
    head = loadContactsFromFile("contacts.txt");

    // 添加示例联系人
    addContact(&head, createContact(1, "Alice", "123456789", "123456"));
    addContact(&head, createContact(2, "Bob", "987654321", "654321"));

    // 查找联系人
    Contact* contact = findContactByName(head, "Alice");
    if (contact != NULL) {
        printContact(contact);
    }

    // 删除联系人
    deleteContact(&head, "Bob");

    // 修改联系人信息
    contact = findContactByName(head, "Alice");
    if (contact != NULL) {
        modifyContact(contact, "Alice Smith", "987654321", "654321");
    }

    // 保存联系人信息到文件
    saveContactsToFile(head, "contacts.txt");

    // 释放链表内存
    Contact* current = head;
    while (current != NULL) {
        Contact* next = current->next;
        free(current);
        current = next;
    }

    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^