C语言实现简易通讯录实例

C语言实现简易通讯录实例

简介

本项目将使用C语言实现一个简易通讯录,可以添加联系人、删除联系人、修改联系人以及查看通讯录中所有联系人的信息。

环境

开发平台:Windows / Linux / MacOS

编译器:gcc

功能列表

  1. 添加联系人
  2. 删除联系人
  3. 修改联系人
  4. 查看通讯录中所有联系人的信息

数据结构

为了实现通讯录的功能,我们需要用到两种数据结构:联系人和通讯录。

联系人

联系人是通讯录中的基本单元,包含以下信息:

  • 姓名(字符串类型,最长不超过 20 个字符)
  • 性别(字符类型,'M' 表示男性,'F' 表示女性)
  • 年龄(整型,取值范围为 1 到 150)
  • 电话号码(字符串类型,最长不超过 15 个字符)
  • 住址(字符串类型,最长不超过 50 个字符)

我们可以定义一个结构体来表示一个联系人:

struct person {
    char name[20];
    char gender;
    int age;
    char phone[15];
    char address[50];
};

通讯录

通讯录是联系人的集合,可以对其中的联系人进行添加、删除、修改和查询操作。通讯录的存储可以使用数组或链表。在这里,我们使用数组来存储所有的联系人。

通讯录包含以下信息:

  • 联系人数组(最多可以存储 1000 个联系人)
  • 联系人数量

我们可以定义一个结构体来表示通讯录:

#define MAX_PERSONS 1000

struct address_book {
    struct person persons[MAX_PERSONS];
    int count;
};

添加联系人

添加联系人操作可以分为以下几个步骤:

  1. 从用户输入中获取新联系人的信息
  2. 在通讯录中添加新联系人
  3. 更新通讯录中联系人数量的计数器

下面是实现添加联系人函数的示例代码:

void add_person(struct address_book *book) {
    if (book->count == MAX_PERSONS) {
        printf("通讯录已满,无法添加新联系人。\n");
        return;
    }

    struct person new_person;

    printf("请输入新联系人的信息:\n");
    printf("姓名:");
    scanf("%s", new_person.name);
    printf("性别(M/F):");
    scanf(" %c", &new_person.gender);
    printf("年龄:");
    scanf("%d", &new_person.age);
    printf("电话号码:");
    scanf("%s", new_person.phone);
    printf("住址:");
    scanf("%s", new_person.address);

    book->persons[book->count] = new_person;
    book->count++;

    printf("新联系人已成功添加到通讯录中。\n");
}

删除联系人

删除联系人操作可以分为以下几个步骤:

  1. 从用户输入中获取待删除联系人的姓名
  2. 在通讯录中查找该姓名对应的联系人
  3. 如果找到了该联系人,则删除它
  4. 更新通讯录中联系人数量的计数器

下面是实现删除联系人函数的示例代码:

void delete_person(struct address_book *book) {
    char name[20];
    printf("请输入待删除联系人的姓名:");
    scanf("%s", name);

    int i;
    for (i = 0; i < book->count; i++) {
        if (strcmp(book->persons[i].name, name) == 0) {
            int j;
            for (j = i; j < book->count - 1; j++) {
                book->persons[j] = book->persons[j + 1];
            }
            book->count--;
            printf("联系人 %s 已从通讯录中删除。\n", name);
            return;
        }
    }

    printf("没有找到名为 %s 的联系人。\n", name);
}

示例说明

示例 1:添加联系人

struct address_book book;
book.count = 0;

add_person(&book);

/*
输出:
请输入新联系人的信息:
姓名:Peter
性别(M/F):M
年龄:30
电话号码:13912345678
住址:Shanghai
新联系人已成功添加到通讯录中。
*/

示例 2:删除联系人

struct address_book book;
book.persons[0] = (struct person){"Peter", 'M', 30, "13912345678", "Shanghai"};
book.count = 1;

delete_person(&book);

/*
输出:
请输入待删除联系人的姓名:Peter
联系人 Peter 已从通讯录中删除。
*/

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

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

相关文章

  • springboot-dubbo cannot be cast to问题及解决

    “springboot-dubbo cannot be cast to”问题往往会在Spring Boot项目中使用Dubbo时出现。该问题出现的原因往往是因为Dubbo的版本与Spring Boot的版本不兼容导致Dubbo不能正确地使用Spring Boot的自动配置机制。下面将详细介绍该问题的解决方法。 步骤1:检查Dubbo版本与Spring Boo…

    C 2023年5月23日
    00
  • C++特性之智能指针shared_ptr详解

    C++特性之智能指针shared_ptr详解 什么是智能指针? 智能指针是C ++中的一个重要特性,它可以避免内存泄漏和悬空指针的问题。智能指针是一个C ++类,它的析构函数自动释放分配的内存。最常见的智能指针有: unique_ptr shared_ptr weak_ptr 其中shared_ptr是引用计数智能指针。这种智能指针在控制对象之间的共享所有权…

    C 2023年5月22日
    00
  • C语言实现简单计算器功能(2)

    当我们实现一个简单的计算器功能时,需要考虑以下几个方面: 用户输入的合法性检查 进行算术运算的函数实现 错误处理和提示信息输出 第一步,我们需要先获取用户输入的表达式,并对其进行合法性检查。用户输入的表达式应该是一个合法的算术表达式,不能含有非法字符,比如字母等。我们可以使用正则表达式来判断用户输入的内容是否合法。 示例1: #include <reg…

    C 2023年5月23日
    00
  • C语言实现企业员工管理系统开发

    C语言实现企业员工管理系统开发攻略 1. 确定功能需求和数据结构 在开始编写代码之前,需要先确定功能需求和相应的数据结构。对于企业员工管理系统,通常需要包括以下功能: 添加员工 删除员工 修改员工信息 查询员工信息 显示员工列表 其中,员工的信息通常包括姓名、年龄、性别、职位等。根据这些需求,可以定义如下数据结构: // 定义 Employee 结构体,表示…

    C 2023年5月23日
    00
  • C++ 基础教程之虚函数实例代码详解

    下面是针对“C++ 基础教程之虚函数实例代码详解”的完整攻略: C++ 基础教程之虚函数实例代码详解 什么是虚函数? 在 C++ 中,虚函数是指在基类中声明为虚的函数,其在派生类中被重新定义的函数。使用虚函数可以实现运行时多态性,即在程序运行时根据对象的类型确定调用的方法。 在基类中使用虚函数时,需要将函数声明为“virtual”,并且函数的定义可以为纯虚函…

    C 2023年5月24日
    00
  • thinkphp下MySQL数据库读写分离代码剖析

    下面是“thinkphp下MySQL数据库读写分离代码剖析”的完整攻略,包含了步骤、示例代码和注意点。 步骤 1. 安装MySQL主从复制 首先,需要安装MySQL主从复制功能,将主服务器的数据同步到从服务器,实现读写分离。 2. 配置主从服务器 在主服务器和从服务器中,分别配置MySQL的主从关系和各自的配置文件。在配置文件中,需要设置数据库的用户名、密码…

    C 2023年5月23日
    00
  • gin 获取post请求的json body操作

    获取post请求的json body操作指的是在网站的后端处理中,从请求中获取客户端使用POST方式提交的JSON数据。在Gin框架中,可以使用以下步骤来实现该操作。 1. 引入相关库 在Go中,可以使用标准库encoding/json来处理JSON数据。为了在Gin框架中方便处理JSON数据,需要引入github.com/gin-gonic/gin库。 i…

    C 2023年5月23日
    00
  • 尼尔机械纪元结局如何选 全结局条件图文介绍

    关于尼尔机械纪元结局的选择及全结局条件,我会通过以下几个方面进行详细讲解: 结局种类及选择方法 全结局条件概述 示例说明 1. 结局种类及选择方法 尼尔机械纪元共有5种结局,分别是A B C D E,其中A~D为主结局,E为非正式结局。为了触发每个结局,你需要在游戏中做出不同的选择。以下是各个结局的选择步骤: A结局:完成E机器人的任务,选择消除“人机分离”…

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