C语言通讯录管理系统源代码怎么用?

99ANYc3cd6
预计阅读时长 26 分钟
位置: 首页 C语言 正文

C语言通讯录管理系统源代码

以下是一个完整的C语言通讯录管理系统源代码,包含添加、删除、查询、显示、保存和加载通讯录等功能。

c语言通讯录管理系统源代码
(图片来源网络,侵删)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h> // 用于getch()函数
#define MAX_NAME_LEN 50
#define MAX_PHONE_LEN 20
#define MAX_EMAIL_LEN 50
#define MAX_ADDR_LEN 100
#define MAX_RECORDS 1000
// 联系人结构体
typedef struct {
    char name[MAX_NAME_LEN];
    char phone[MAX_PHONE_LEN];
    char email[MAX_EMAIL_LEN];
    char address[MAX_ADDR_LEN];
} Contact;
// 通讯录结构体
typedef struct {
    Contact contacts[MAX_RECORDS];
    int count;
} AddressBook;
// 函数声明
void initAddressBook(AddressBook *book);
void addContact(AddressBook *book);
void deleteContact(AddressBook *book);
void searchContact(AddressBook *book);
void displayAllContacts(AddressBook *book);
void saveToFile(AddressBook *book);
void loadFromFile(AddressBook *book);
void showMenu();
int main() {
    AddressBook book;
    initAddressBook(&book);
    loadFromFile(&book);
    int choice;
    do {
        showMenu();
        printf("请输入您的选择: ");
        scanf("%d", &choice);
        while(getchar() != '\n'); // 清除输入缓冲区
        switch(choice) {
            case 1:
                addContact(&book);
                break;
            case 2:
                deleteContact(&book);
                break;
            case 3:
                searchContact(&book);
                break;
            case 4:
                displayAllContacts(&book);
                break;
            case 5:
                saveToFile(&book);
                break;
            case 6:
                printf("感谢使用,再见!\n");
                break;
            default:
                printf("无效的选择,请重新输入!\n");
        }
        if(choice != 6) {
            printf("\n按任意键继续...");
            getch();
        }
    } while(choice != 6);
    return 0;
}
// 初始化通讯录
void initAddressBook(AddressBook *book) {
    book->count = 0;
}
// 显示菜单
void showMenu() {
    system("cls"); // 清屏 (Windows系统)
    // system("clear"); // Linux/Mac系统
    printf("========== 通讯录管理系统 ==========\n");
    printf("1. 添加联系人\n");
    printf("2. 删除联系人\n");
    printf("3. 查询联系人\n");
    printf("4. 显示所有联系人\n");
    printf("5. 保存通讯录\n");
    printf("6. 退出系统\n");
    printf("====================================\n");
}
// 添加联系人
void addContact(AddressBook *book) {
    if(book->count >= MAX_RECORDS) {
        printf("通讯录已满,无法添加更多联系人!\n");
        return;
    }
    Contact newContact;
    printf("请输入姓名: ");
    fgets(newContact.name, MAX_NAME_LEN, stdin);
    newContact.name[strcspn(newContact.name, "\n")] = '\0'; // 去除换行符
    printf("请输入电话: ");
    fgets(newContact.phone, MAX_PHONE_LEN, stdin);
    newContact.phone[strcspn(newContact.phone, "\n")] = '\0';
    printf("请输入邮箱: ");
    fgets(newContact.email, MAX_EMAIL_LEN, stdin);
    newContact.email[strcspn(newContact.email, "\n")] = '\0';
    printf("请输入地址: ");
    fgets(newContact.address, MAX_ADDR_LEN, stdin);
    newContact.address[strcspn(newContact.address, "\n")] = '\0';
    book->contacts[book->count++] = newContact;
    printf("联系人添加成功!\n");
}
// 删除联系人
void deleteContact(AddressBook *book) {
    if(book->count == 0) {
        printf("通讯录为空,没有联系人可删除!\n");
        return;
    }
    char name[MAX_NAME_LEN];
    printf("请输入要删除的联系人姓名: ");
    fgets(name, MAX_NAME_LEN, stdin);
    name[strcspn(name, "\n")] = '\0';
    int found = 0;
    for(int i = 0; i < book->count; i++) {
        if(strcmp(book->contacts[i].name, name) == 0) {
            // 将后面的联系人前移
            for(int j = i; j < book->count - 1; j++) {
                book->contacts[j] = book->contacts[j + 1];
            }
            book->count--;
            found = 1;
            printf("联系人删除成功!\n");
            break;
        }
    }
    if(!found) {
        printf("未找到姓名为 %s 的联系人!\n", name);
    }
}
// 查询联系人
void searchContact(AddressBook *book) {
    if(book->count == 0) {
        printf("通讯录为空,没有联系人可查询!\n");
        return;
    }
    char name[MAX_NAME_LEN];
    printf("请输入要查询的联系人姓名: ");
    fgets(name, MAX_NAME_LEN, stdin);
    name[strcspn(name, "\n")] = '\0';
    int found = 0;
    for(int i = 0; i < book->count; i++) {
        if(strcmp(book->contacts[i].name, name) == 0) {
            printf("\n姓名: %s\n", book->contacts[i].name);
            printf("电话: %s\n", book->contacts[i].phone);
            printf("邮箱: %s\n", book->contacts[i].email);
            printf("地址: %s\n", book->contacts[i].address);
            found = 1;
            break;
        }
    }
    if(!found) {
        printf("未找到姓名为 %s 的联系人!\n", name);
    }
}
// 显示所有联系人
void displayAllContacts(AddressBook *book) {
    if(book->count == 0) {
        printf("通讯录为空,没有联系人可显示!\n");
        return;
    }
    printf("\n========== 所有联系人 ==========\n");
    printf("%-20s %-15s %-25s %-30s\n", "姓名", "电话", "邮箱", "地址");
    printf("------------------------------------------------------------\n");
    for(int i = 0; i < book->count; i++) {
        printf("%-20s %-15s %-25s %-30s\n", 
               book->contacts[i].name, 
               book->contacts[i].phone, 
               book->contacts[i].email, 
               book->contacts[i].address);
    }
    printf("================================\n");
}
// 保存通讯录到文件
void saveToFile(AddressBook *book) {
    FILE *file = fopen("contacts.dat", "wb");
    if(file == NULL) {
        printf("无法打开文件进行保存!\n");
        return;
    }
    fwrite(book, sizeof(AddressBook), 1, file);
    fclose(file);
    printf("通讯录保存成功!\n");
}
// 从文件加载通讯录
void loadFromFile(AddressBook *book) {
    FILE *file = fopen("contacts.dat", "rb");
    if(file == NULL) {
        printf("未找到通讯录文件,将创建新通讯录,\n");
        return;
    }
    fread(book, sizeof(AddressBook), 1, file);
    fclose(file);
    printf("通讯录加载成功!\n");
}

功能说明

  1. 添加联系人:可以输入姓名、电话、邮箱和地址来添加新联系人
  2. 删除联系人:根据姓名删除联系人
  3. 查询联系人:根据姓名查询联系人信息
  4. 显示所有联系人:以表格形式显示所有联系人信息
  5. 保存通讯录:将通讯录数据保存到二进制文件
  6. 加载通讯录:从文件加载已保存的通讯录数据

使用说明

  1. 将代码复制到C语言编译器中(如Dev-C++, Visual Studio Code等)
  2. 编译并运行程序
  3. 根据菜单提示选择相应功能

注意事项

  1. 程序使用conio.h中的getch()函数,这在Windows系统中有效
    • 如果在Linux/Mac系统上运行,可以注释掉getch()相关代码
  2. 数据以二进制格式保存在contacts.dat文件中
  3. 程序限制了最大联系人数量为1000个,可以根据需要修改MAX_RECORDS宏定义

扩展建议

  1. 可以增加按电话号码或邮箱查询的功能
  2. 可以增加修改联系人信息的功能
  3. 可以增加按姓名排序的功能
  4. 可以增加数据验证,确保电话号码格式正确等
c语言通讯录管理系统源代码
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede文件夹目录各文件夹有何作用?
« 上一篇 03-07
dede后台模板 五色
下一篇 » 03-07

相关文章

取消
微信二维码
支付宝二维码

目录[+]