基于C语言实现高级通讯录的示例代码

【攻略】基于C语言实现高级通讯录的示例代码

简述

本示例代码基于C语言实现了一个高级通讯录,具备添加联系人、查找联系人、删除联系人等功能,可以灵活调用。代码具有可读性强、简洁明了、易于修改的特点。

准备

在开始实现高级通讯录之前,需要安装C语言编译器,并具备一定的编程能力和语言基础。同时,还需要对通讯录具有清晰的逻辑思路和设计规划。

实现过程

1.创建通讯录结构体

首先需要定义一个通讯录结构体,包含联系人姓名、电话号码、email地址和家庭地址等信息。代码示例如下:

typedef struct AddressBook
{
    char name[20];
    char phone[20];
    char email[30];
    char address[50];
}addressbook;

2.添加联系人

其次,需要实现能够添加联系人的函数,包括输入联系人信息、初始判断是否已有该联系人、记录该联系人并保存信息。代码示例如下:

void addContact(addressbook contact[], int* num)
{
    //输入联系人信息
    printf("请输入联系人姓名:\n");
    scanf("%s", contact[*num].name);
    printf("请输入联系人电话:\n");
    scanf("%s", contact[*num].phone);
    printf("请输入联系人email地址:\n");
    scanf("%s", contact[*num].email);
    printf("请输入联系人家庭地址:\n");
    scanf("%s", contact[*num].address);
    //判断是否已有该联系人
    for (int i = 0; i < *num; i++)
    {
        if (strcmp(contact[i].name, contact[*num].name) == 0)
        {
            printf("通讯录中已有该联系人,添加失败!\n");
            return;
        }
    }
    //记录联系人并保存信息
    printf("联系人添加成功!\n");
    (*num)++;
}

3.查找联系人

接下来,需要实现能够查找联系人的函数,包括输入查询关键字、从通讯录中查找匹配的联系人、并打印输出联系人信息等。代码示例如下:

void searchContact(addressbook contact[], int num)
{
    char keyword[20];
    printf("请输入您要查找的联系人姓名或电话号码:\n");
    scanf("%s", keyword);
    printf("查询结果如下:\n");
    for (int i = 0; i < num; i++)
    {
        if (strcmp(contact[i].name, keyword) == 0 || strcmp(contact[i].phone, keyword) == 0)
        {
            printf("姓名:%s,电话:%s,email:%s,地址:%s\n",
                contact[i].name, contact[i].phone, contact[i].email, contact[i].address);
        }
    }
}

4.删除联系人

最后,需要实现能够删除联系人的函数,包括输入要删除的联系人的姓名、从通讯录中查找和删除该联系人信息等。代码示例如下:

void deleteContact(addressbook contact[], int* num)
{
    char name_to_delete[20];
    printf("请输入您要删除的联系人姓名:\n");
    scanf("%s", name_to_delete);
    int i;
    for (i = 0; i < *num; i++)
    {
        if (strcmp(contact[i].name, name_to_delete) == 0) 
        {
            break;
        }
    }
    if (i == *num) 
    {
        printf("通讯录中没有该联系人!\n");
        return;
    }
    else 
    {
        for (int j = i; j < *num - 1; j++)
        {
            contact[j] = contact[j + 1];
        }
        printf("该联系人已被删除!\n");
        (*num)--;
    }
}

5.示例说明

示例一:添加联系人

首先,需要调用添加联系人函数:

addContact(contact, &num);

接着,需要输入联系人信息:

请输入联系人姓名:
小明
请输入联系人电话:
13888888888
请输入联系人email地址:
xiaoming@qq.com
请输入联系人家庭地址:
北京市朝阳区
联系人添加成功!

最后,可以再次调用查找联系人函数来验证是否添加成功:

searchContact(contact, num);

输出结果如下:

请输入您要查找的联系人姓名或电话号码:
小明
查询结果如下:
姓名:小明,电话:13888888888,email:xiaoming@qq.com,地址:北京市朝阳区

示例二:删除联系人

首先,需要调用查找联系人函数来确认是否有要删除的联系人:

searchContact(contact, num);

输入要删除的联系人姓名:

请输入您要删除的联系人姓名:
小明

然后,需要调用删除联系人函数:

deleteContact(contact, &num);

输出结果如下:

该联系人已被删除!

最后,再次调用查找联系人函数来验证是否删除成功:

searchContact(contact, num);

输出结果如下:

请输入您要查找的联系人姓名或电话号码:
小明
查询结果如下:
通讯录中没有该联系人!

总结

基于C语言实现高级通讯录的示例代码,可以使我们更好地理解和应用C语言的相关知识点和编程思路。在实现过程中,需要充分考虑通讯录的逻辑结构和业务需求,代码设计要合理、清晰、易修改。同时,在实际应用时,还可以根据实际需求进行拓展和细化,打造更加完善的通讯录系统。

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

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

相关文章

  • notepad介绍及插件cmake编译过程(替代notepad++)

    Notepad介绍 Notepad是一款Windows平台下的简洁文本编辑器,其主要功能包括查看、编辑纯文本文档,具有简单、易上手、快速启动等特点,在Windows操作系统服务管理、配置文件编辑、读写脚本等工作中得到了广泛的应用。 插件CMake编译过程 Notepad++是Notepad的增强版,其功能更为强大,支持丰富的插件,其中之一就是CMake,它能…

    C 2023年5月23日
    00
  • Windows10系统遇到”不能打开要写入的文件”怎么办

    下面是关于“Windows10系统遇到’不能打开要写入的文件’怎么办”的完整攻略,分为以下几个步骤: 1. 检查文件权限 首先,我们需要确认文件是否有正确的权限限制。当一个文件受限时,您可能无法访问它,甚至将其写入到其中。 如何检查文件权限 单击鼠标右键并选择 “属性” 选项 选择 “安全” 标签页并检查是否与您的用户帐户相关联。 如果您有权限,请在相应的区…

    C 2023年5月23日
    00
  • C++ Boost Conversion超详细讲解

    C++ Boost Conversion超详细讲解 什么是Conversion? 在C++编程中,Conversion代表着把一个对象转换成另一种对象的操作。Conversion由C++ Core Language v1.05中的12.3章节定义。例如,如果我们需要把一个整数转换成另一个整数类型或者浮点数类型,那么就需要进行Conversion操作。 Boo…

    C 2023年5月23日
    00
  • C++回溯算法深度优先搜索举例分析

    当需要在一个问题的所有解中搜索特定解时,可以使用回溯算法。在搜索过程中,如果到达一个点不能通过它继续搜索了,回溯算法会回溯到上一个点继续搜索。 深度优先搜索是回溯算法的一种形式。在深度优先搜索中,我们尽可能深地搜索一个解的分支,如果达到一个结束点或无法进一步搜索,则回溯回到上一个状态并继续搜索其他分支。 在使用回溯算法解决问题时,首先必须明确问题的解空间。然…

    C 2023年5月22日
    00
  • C语言小程序 如何判断两个日期之差

    下面是详细讲解 “C语言小程序如何判断两个日期之差” 的完整攻略。 1. 题目描述 本题的主要目的是要求出两个日期之间的天数差。 例如:第一个日期为2020-01-01,第二个日期为2020-01-10,则它们之间的天数差为9天。 2. 解题思路 要求出两个日期之间的天数差,需要进行以下计算: 获取第一个日期和第二个日期在一年中的天数(即:天数之和)。 如果…

    C 2023年5月23日
    00
  • vscode调试gstreamer源码的详细流程

    下面是vscode调试gstreamer源码的详细攻略,步骤如下: 步骤一:安装依赖项 在调试gstreamer源码前,我们需要先安装一些依赖项,以便能够编译和运行gstreamer源码,需要安装以下依赖项: glib >= 2.40.0 libxml2 >= 2.4.16 bison >= 2.1 flex >= 2.5.35 py…

    C 2023年5月23日
    00
  • C++线程安全容器stack和queue的使用详细介绍

    C++线程安全容器stack和queue的使用详细介绍 什么是线程安全容器 线程安全容器是可以支持在多个线程并发访问的STL容器。在多线程程序中使用线程安全容器可以保证数据操作的正确性和安全性。 为什么需要线程安全容器 在并发环境中,多个线程可能同时访问同一资源。对于非线程安全的容器,在多线程的情况下容易出现数据竞争、死锁等问题。线程安全容器可以避免这种问题…

    C 2023年5月22日
    00
  • new和malloc的区别深入解析

    new和malloc的区别深入解析 在C++中,我们经常使用 new 和 malloc 来分配内存空间,但是二者有着一些区别。本文将深入分析 new 和 malloc 的区别,并且提供两个对比性的示例。 new 和 malloc 的区别 内存分配方式不同:new 是运算符,而 malloc 是C语言中的一个函数。 分配内存的类型不同:new 是 C++ 内存…

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