C语言实现通讯录的详细代码

下面我将为您详细讲解“C语言实现通讯录的详细代码”的完整攻略:

一、需求分析
1. 该通讯录需要实现的基本功能有添加联系人、删除联系人、查找联系人、修改联系人信息以及显示通讯录中所有联系人信息。
2. 联系人信息需要包含姓名、电话号码、电子邮箱等信息。
3. 联系人信息需要存储在文件中,以便程序重启后能够读取之前保存的联系人信息。

二、程序设计
1. 定义联系人结构体(包含姓名、电话号码、电子邮箱)。
2. 定义通讯录结构体(包含联系人信息、当前联系人数量、最大联系人数量)。
3. 实现添加联系人功能:从键盘读取联系人信息并添加到通讯录中。
4. 实现删除联系人功能:从键盘读取要删除联系人的姓名,遍历通讯录找到对应联系人并删除。
5. 实现查找联系人功能:从键盘读取要查找联系人的姓名,遍历通讯录找到对应联系人并打印联系人的信息。
6. 实现修改联系人信息功能:从键盘读取要修改的联系人姓名,遍历通讯录找到对应联系人并修改联系人信息。
7. 实现显示通讯录中所有联系人信息功能:遍历通讯录并打印所有联系人信息。
8. 实现读取联系人信息功能:从文件中读取联系人信息并存储到通讯录中。
9. 实现保存联系人信息功能:将通讯录中所有联系人信息保存到文件中。

三、完整代码(包含示例说明)

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

#define MAX_CONTACTS 100

typedef struct {
    char name[20];
    char phone[20];
    char email[30];
} Contact;

typedef struct {
    Contact contacts[MAX_CONTACTS];
    int num_contacts;
    int max_contacts;
} AddressBook;

void add_contact(AddressBook* book) {
    if (book->num_contacts >= book->max_contacts) {
        printf("The address book is full.\n");
        return;
    }

    Contact new_contact;
    printf("Please enter the contact's name: ");
    scanf("%s", new_contact.name);
    printf("Please enter the contact's phone number: ");
    scanf("%s", new_contact.phone);
    printf("Please enter the contact's email: ");
    scanf("%s", new_contact.email);

    book->contacts[book->num_contacts] = new_contact;
    book->num_contacts++;
}

int find_contact(AddressBook* book, char* name) {
    for (int i = 0; i < book->num_contacts; i++) {
        if (strcmp(book->contacts[i].name, name) == 0) {
            return i;
        }
    }
    return -1;
}

void remove_contact(AddressBook* book) {
    char name[20];
    printf("Please enter the contact's name: ");
    scanf("%s", name);

    int index = find_contact(book, name);
    if (index == -1) {
        printf("Contact not found.\n");
        return;
    }

    for (int i = index + 1; i < book->num_contacts; i++) {
        book->contacts[i - 1] = book->contacts[i];
    }
    book->num_contacts--;
    printf("Contact removed.\n");
}

void find_contact_info(AddressBook* book) {
    char name[20];
    printf("Please enter the contact's name: ");
    scanf("%s", name);

    int index = find_contact(book, name);
    if (index == -1) {
        printf("Contact not found.\n");
        return;
    }

    Contact contact = book->contacts[index];
    printf("Name: %s\n", contact.name);
    printf("Phone: %s\n", contact.phone);
    printf("Email: %s\n", contact.email);
}

void update_contact(AddressBook* book) {
    char name[20];
    printf("Please enter the contact's name: ");
    scanf("%s", name);

    int index = find_contact(book, name);
    if (index == -1) {
        printf("Contact not found.\n");
        return;
    }

    Contact new_contact;
    printf("Please enter the new phone number for %s: ", name);
    scanf("%s", new_contact.phone);
    printf("Please enter the new email for %s: ", name);
    scanf("%s", new_contact.email);

    book->contacts[index] = new_contact;
    printf("Contact information updated.\n");
}

void print_contacts(AddressBook* book) {
    printf("Contacts:\n");
    for (int i = 0; i < book->num_contacts; i++) {
        Contact contact = book->contacts[i];
        printf("Name: %s\n", contact.name);
        printf("Phone: %s\n", contact.phone);
        printf("Email: %s\n", contact.email);
        printf("\n");
    }
}

void load_contacts(AddressBook* book) {
    FILE* file = fopen("contacts.txt", "r");
    if (file == NULL) {
        printf("Error loading contacts.\n");
        return;
    }

    int num_contacts = 0;
    Contact contact;
    while (fscanf(file, "%s %s %s", contact.name, contact.phone, contact.email) == 3) {
        book->contacts[num_contacts] = contact;
        num_contacts++;
    }
    book->num_contacts = num_contacts;

    fclose(file);
    printf("Contacts loaded successfully.\n");
}

void save_contacts(AddressBook* book) {
    FILE* file = fopen("contacts.txt", "w");
    if (file == NULL) {
        printf("Error saving contacts.\n");
        return;
    }

    for (int i = 0; i < book->num_contacts; i++) {
        Contact contact = book->contacts[i];
        fprintf(file, "%s %s %s\n", contact.name, contact.phone, contact.email);
    }

    fclose(file);
    printf("Contacts saved successfully.\n");
}

int main() {
    AddressBook book;
    book.num_contacts = 0;
    book.max_contacts = MAX_CONTACTS;

    int choice;
    do {
        printf("Please choose an option:\n");
        printf("1. Add contact\n");
        printf("2. Remove contact\n");
        printf("3. Find contact information\n");
        printf("4. Update contact information\n");
        printf("5. Print all contacts\n");
        printf("6. Load contacts\n");
        printf("7. Save contacts\n");
        printf("8. Quit\n");
        printf("> ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                add_contact(&book);
                break;
            case 2:
                remove_contact(&book);
                break;
            case 3:
                find_contact_info(&book);
                break;
            case 4:
                update_contact(&book);
                break;
            case 5:
                print_contacts(&book);
                break;
            case 6:
                load_contacts(&book);
                break;
            case 7:
                save_contacts(&book);
                break;
            case 8:
                printf("Goodbye.\n");
                break;
            default:
                printf("Invalid choice.\n");
        }
    } while (choice != 8);

    return 0;
}

示例说明:
假设我们想要添加联系人“Tom”的信息,则在程序界面选择选项1,输入联系人的姓名、电话号码、电子邮箱,按照提示添加即可。如果添加过程中通讯录已满,则会提示“The address book is full.”。

假设我们想要查找联系人“Tom”的信息,则在程序界面选择选项3,输入联系人的姓名,然后程序会遍历通讯录查找该联系人,如果找到则会将该联系人的信息打印出来;如果没有找到,则会提示“Contact not found.”。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现通讯录的详细代码 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • PHP使用JSON和将json还原成数组

    关于PHP使用JSON和将JSON还原成数组的攻略,可以分为以下几个步骤: 1. PHP使用JSON 1.1 创建JSON字符串 在PHP中使用json_encode()函数可以将数组转换为JSON格式的字符串。例如: $array = array( ‘name’ => ‘Tom’, ‘age’ => 25, ‘sex’ => ‘male’…

    C 2023年5月23日
    00
  • C语言实现贪吃蛇游戏代码

    C语言实现贪吃蛇游戏代码 简介 贪吃蛇是一种经典的游戏,我们可以使用C语言来实现这个游戏。在这个游戏中,蛇在一个二维平面上移动,吃掉食物来增加长度,如果蛇触碰到了自己或者墙壁,那么游戏就结束了。 实现过程 下面是用C语言实现贪吃蛇游戏的步骤: 定义游戏中的基本元素,如蛇、食物、地图等。 初始化游戏元素,包括蛇的初始位置、长度和方向,食物的随机位置。 创建游戏…

    C 2023年5月23日
    00
  • Java的Jackson库的使用及其树模型的入门学习教程

    Java的Jackson库的使用及其树模型的入门学习教程 什么是Jackson库 Jackson是一个在Java平台上解析JSON的框架,它是一个高性能的开源库,同时还具有灵活而强大的功能,可以方便地将Java对象序列化为JSON格式的数据,或者将JSON数据反序列化为Java对象。 Jackson库的基本使用 Jackson库的基本使用分为序列化和反序列化…

    C 2023年5月23日
    00
  • C++中异常机制的实现机制详解

    C++中异常机制的实现机制详解 异常(Exception)是指程序运行时出现的一些不可预知的错误,比如非法输入、内存分配失败等。异常处理机制可以让程序在遇到异常时不会立即崩溃,而是可以做一些处理,让程序能够在异常发生后继续执行。 C++中的异常处理机制分为三个部分:抛出异常、捕获异常和处理异常。下面我们来详细讲解它们的实现机制。 抛出异常 抛出异常使用thr…

    C 2023年5月22日
    00
  • 理光C2551彩色复印机怎么扫描文件?

    下面是关于“理光C2551彩色复印机怎么扫描文件”的详细攻略: 步骤一:连接网络 首先,确保你已经在正确的网络环境中,你需要连接到理光C2551彩色复印机所在的网络,才能进行扫描操作。 步骤二:将文件放入扫描仪上 在理光C2551彩色复印机上找到扫描仪,打开其盖子,并将要扫描的文件放在玻璃底部。注意,如果有多页文件需要扫描,需要一张一张的扫描。 步骤三:选择…

    C 2023年5月23日
    00
  • 关于C语言一维数组算法问题详解

    关于C语言一维数组算法问题详解 一维数组简介 在C语言中,数组是一组具有相同数据类型的变量,这些变量彼此之间通过一个整数下标进行引用和访问。一维数组即为只有一维下标的数组,它是C语言中最简单、常见的数据结构之一。 一维数组需要指定数组的元素类型和数组中元素的个数。例如int类型的数组声明可以为 int arr[10]; //arr是一个包含10个整数的数组 …

    C 2023年5月23日
    00
  • 对C语言编程标准以及声明的基本理解

    当你开始学习C语言编程时,了解并遵守C语言编程标准是非常重要的。下面将向你介绍C语言编程标准以及如何正确声明变量和函数。 C语言编程标准 为什么需要编程标准 C语言编程标准可以帮助你: 提高代码的可读性,使其易于理解和维护。 提高代码的可移植性,使其可以在不同的平台和操作系统上运行。 减少编译器产生意外行为的可能性。 最终,编程标准可以让你编写更高效,更健壮…

    C 2023年5月22日
    00
  • C++使用智能指针实现模板形式的单例类

    下面我将详细讲解使用智能指针实现模板形式的单例类的完整攻略。 1. 什么是智能指针? 智能指针是一个 C++ 类,它的实例行为类似于指针,不过它添加了自动内存回收的管理功能。智能指针中最常用的是 std::shared_ptr 和 std::unique_ptr。 我们使用智能指针可以避免内存泄漏和空悬指针,避免程序崩溃等问题。 2. 什么是模板形式的单例类…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部