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日

相关文章

  • OpenCV如何提取图片中曲线

    OpenCV提取图片中曲线攻略 简介 OpenCV是一款开源的计算机视觉库,通过它可以方便地对图像和视频进行处理和分析。其中,提取图片中的曲线是一种比较基础的图像处理技巧,在很多领域都有广泛的应用。 本文将介绍在OpenCV中如何提取图片中曲线的完整攻略。 准备工作 在开始操作之前,需要先在Python环境下安装好OpenCV库。安装方法可以参考OpenCV…

    C 2023年5月23日
    00
  • 如何区分C++中的inline和#define宏

    下面给出区分C++中的inline和#define宏的攻略。 什么是inline inline是C++中的一个关键字,用于告诉编译器将函数展开为内联代码,而不是通过函数调用来执行。这样可以避免函数调用带来的额外开销,提高程序的性能。 什么是#define宏 #define是C++中的一个预处理指令,用于定义一个常量或者函数宏。当程序中使用宏定义时,预处理器会…

    C 2023年5月22日
    00
  • C程序 将华氏温度转换为摄氏温度

    下面我将为您讲解如何使用C程序将华氏温度转换为摄氏温度。 程序介绍 此程序使用C语言编写,可以将输入的华氏温度转换为摄氏温度,转换公式为: C = (F – 32) / 1.8 其中,C表示摄氏温度,F表示华氏温度。 程序使用攻略 本程序可在各大C语言开发环境中运行,以下以Visual Studio Code为例: 打开Visual Studio Code软…

    C 2023年5月9日
    00
  • iOS Runtime详解(新手也看得懂)

    iOS Runtime详解(新手也看得懂) 什么是Runtime? Runtime是指在运行时进行操作的能力。在iOS开发中,Runtime是一种基于C语言的API,它可以动态地创建类、对象和修改类的属性和方法等。其主要的作用是在编译阶段之外,给我们提供了对类和对象的管理。 Runtime的应用场景 动态给类添加属性(associative referenc…

    C 2023年5月22日
    00
  • jar命令的用法详解

    Jar 命令的用法详解 Jar 命令是 Java 开发中常用的命令之一,它主要用于在 Java 平台上实现打包操作。在本篇攻略中,我们将学习如何使用 Jar 命令来进行打包操作,以及如何解压缩已有的 Jar 包。以下是具体的步骤和示例说明。 1. Jar 命令的基本用法 jar [选项参数] 打包生成的 jar 文件名 [源文件或目录] 选项参数(可选):J…

    C 2023年5月22日
    00
  • C语言学生信息管理系统小项目

    我们来详细讲解一下如何开发一个简单的C语言学生信息管理系统小项目。首先,我们需要梳理一下需求,确定开发的步骤和程序结构。 需求分析 这个小项目的主要功能是实现学生信息的录入、查询、修改、删除等操作。我们需要设计一个简单的命令行界面,用户可以根据提示输入相应的命令,执行对应的操作。 用户在进行操作之前首先需要进行登录,我们也需要设计一个简单的登录功能,并提供用…

    C 2023年5月23日
    00
  • c语言中main函数用法及知识点总结

    标题:C语言中main函数用法及知识点总结 什么是main函数? 在C语言中,main函数是一个程序的入口,也是程序执行的起点。当程序被调用时,操作系统会首先找到程序中的main函数并执行它。因此,main函数通常是程序中必不可少的一部分。 main函数的定义和格式 main函数的定义和格式如下所示: int main(int argc, char *arg…

    C 2023年5月23日
    00
  • 基于条件变量的消息队列 说明介绍

    基于条件变量的消息队列是一种进程间通信机制,适用于多线程环境。在使用过程中,需要注意线程同步和互斥的问题。 什么是条件变量 条件变量是线程间同步的一种方式,线程可以调用它的wait()方法将自己阻塞,直到其他线程调用signal()方法才能重新运行。条件变量常和互斥锁配合使用,锁用来保护数据,条件变量用来等待特定条件的发生。 消息队列 消息队列是一种消息传递…

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