C语言实现简易通讯录完整流程

C语言实现简易通讯录完整流程

1. 需求分析

在编写“C语言实现简易通讯录”的过程中,我们需要实现以下功能:
1. 添加联系人
2. 删除联系人
3. 修改联系人
4. 查找联系人
5. 显示联系人

2. 思路设计

2.1 数据结构设计

为了实现通讯录功能,我们可以定义如下结构体存储联系人信息:

#define NAME_MAX_LENGTH 20
#define PHONE_MAX_LENGTH 20

struct contact{
    char name[NAME_MAX_LENGTH];
    char phone[PHONE_MAX_LENGTH];
};

2.2 功能实现设计

  1. 添加联系人:输入联系人姓名和电话,将联系人信息添加到通讯录;
  2. 删除联系人:输入联系人姓名,查找并删除该联系人信息;
  3. 修改联系人:输入联系人姓名,查找并修改该联系人电话;
  4. 查找联系人:输入联系人姓名,查找并显示该联系人信息;
  5. 显示联系人:显示所有联系人信息。

3. 代码实现

3.1 添加联系人

我们可以通过定义结构体数组来存储多个联系人信息,示例代码如下:

#define MAX_CONTACTS 100

struct contact contacts[MAX_CONTACTS];
int contacts_count = 0;

void add_contact(){
    if(contacts_count == MAX_CONTACTS){
        printf("通讯录已满,无法添加更多联系人。\n");
        return;
    }
    printf("请输入联系人姓名:");
    scanf("%s", contacts[contacts_count].name);
    printf("请输入联系人电话:");
    scanf("%s", contacts[contacts_count].phone);
    printf("联系人 %s 已成功添加到通讯录中。\n", contacts[contacts_count].name);
    contacts_count++;
}

3.2 删除联系人

我们可以通过遍历结构体数组查找并删除联系人信息,示例代码如下:

void delete_contact(){
    char name[NAME_MAX_LENGTH];
    printf("请输入要删除的联系人姓名:");
    scanf("%s", name);
    int index = -1;
    for(int i = 0; i < contacts_count; i++){
        if(strcmp(contacts[i].name, name) == 0){
            index = i;
            break;
        }
    }
    if(index == -1){
        printf("通讯录中无此联系人。\n");
        return;
    }
    for(int i = index; i < contacts_count-1; i++){
        contacts[i] = contacts[i+1];
    }
    printf("联系人 %s 已成功从通讯录中删除。\n", name);
    contacts_count--;
}

3.3 修改联系人

我们可以通过遍历结构体数组查找并修改联系人信息,示例代码如下:

void modify_contact(){
    char name[NAME_MAX_LENGTH];
    printf("请输入要修改的联系人姓名:");
    scanf("%s", name);
    int index = -1;
    for(int i = 0; i < contacts_count; i++){
        if(strcmp(contacts[i].name, name) == 0){
            index = i;
            break;
        }
    }
    if(index == -1){
        printf("通讯录中无此联系人。\n");
        return;
    }
    printf("请输入新的联系人电话:");
    scanf("%s", contacts[index].phone);
    printf("联系人 %s 的电话已成功修改为 %s。\n", name, contacts[index].phone);
}

3.4 查找联系人

我们可以通过遍历结构体数组查找联系人信息并显示,示例代码如下:

void search_contact(){
    char name[NAME_MAX_LENGTH];
    printf("请输入要查找的联系人姓名:");
    scanf("%s", name);
    int index = -1;
    for(int i = 0; i < contacts_count; i++){
        if(strcmp(contacts[i].name, name) == 0){
            index = i;
            break;
        }
    }
    if(index == -1){
        printf("通讯录中无此联系人。\n");
        return;
    }
    printf("联系人姓名:%s\n联系人电话:%s\n", contacts[index].name, contacts[index].phone);
}

3.5 显示联系人

我们可以通过遍历结构体数组显示所有联系人信息,示例代码如下:

void show_contacts(){
    printf("当前通讯录中共有 %d 个联系人。\n", contacts_count);
    for(int i = 0; i < contacts_count; i++){
        printf("联系人%d姓名:%s\n联系人%d电话:%s\n", i+1, contacts[i].name, i+1, contacts[i].phone);
    }
}

4. 示例说明

下面给出两条示例来说明如何使用实现的通讯录功能。

示例1:基本操作

先添加一个联系人,名为“张三”,电话为“12345678901”:

请输入操作编号:1
请输入联系人姓名:张三
请输入联系人电话:12345678901
联系人 张三 已成功添加到通讯录中。

查看添加的联系人:

请输入操作编号:5
当前通讯录中共有 1 个联系人。
联系人1姓名:张三
联系人1电话:12345678901

修改联系人的电话号码为“11111111111”:

请输入操作编号:3
请输入要修改的联系人姓名:张三
请输入新的联系人电话:11111111111
联系人 张三 的电话已成功修改为 11111111111。

将张三的联系人信息从通讯录中删除:

请输入操作编号:2
请输入要删除的联系人姓名:张三
联系人 张三 已成功从通讯录中删除。

再次查看通讯录中的联系人:

请输入操作编号:5
当前通讯录中共有 0 个联系人。

示例2:满员操作

添加满MAX_CONTACTS(100)个联系人:

请输入操作编号:1
请输入联系人姓名:联系人1
请输入联系人电话:123
联系人 联系人1 已成功添加到通讯录中。
请输入操作编号:1
请输入联系人姓名:联系人2
请输入联系人电话:123
联系人 联系人2 已成功添加到通讯录中。
...
请输入操作编号:1
请输入联系人姓名:联系人100
请输入联系人电话:123
联系人 联系人100 已成功添加到通讯录中。

尝试添加第101个联系人:

请输入操作编号:1
请输入联系人姓名:联系人101
请输入联系人电话:123
通讯录已满,无法添加更多联系人。

尝试查看通讯录中的联系人:

请输入操作编号:5
当前通讯录中共有 100 个联系人。
联系人1姓名:联系人1
联系人1电话:123
联系人2姓名:联系人2
联系人2电话:123
...
联系人100姓名:联系人100
联系人100电话:123

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

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

相关文章

  • BYC币怎么样?BYC/币缘币还值得投资吗

    BYC币的基本概念 BYC币,全名为币缘币(Bytecoin),是一种匿名、去中心化、开源的数字货币。它于2012年创立,是第一代公开发行的隐私币之一。相比于比特币,BYC币主张保护交易者的隐私,并提供更快的交易确认速度和更低的交易费用。 BYC币的投资价值分析 优点 高度保护隐私:BYC币使用了加密技术和混淆账户的方法,可以有效保护交易者的个人隐私。 去中…

    C 2023年5月23日
    00
  • C语言中如何在结构体内定义函数

    在C语言中,我们可以在结构体内定义函数。这些函数通常被称为结构体的“成员函数”或“方法”。在本文中,将为大家提供关于如何在结构体内定义函数的详细攻略,包括选定结构体、定义函数、实现函数等步骤。 选定结构体 首先你需要选定合适的结构体,以便将要定义的函数与此结构体相关联。可以基于结构体表示某一事物,例如下面的学生成绩结构体: typedef struct { …

    C 2023年5月23日
    00
  • 蓝屏代码0xc0000001是什么原因?蓝屏代码0xc0000001解决方法汇总

    蓝屏代码0xc0000001是什么原因? 在 Windows 操作系统中,蓝屏代码 0xc0000001 表示一个致命的系统错误,导致计算机无法继续工作。该错误代码通常与系统启动、恢复和内核数据读取有关。以下是可能导致蓝屏代码 0xc0000001 的几个常见原因: 损坏的引导记录或分区表; 损坏的操作系统文件; 损坏的驱动程序; 损坏的硬件,如硬盘、内存和…

    C 2023年5月24日
    00
  • C语言程序环境中的预处理详解

    C语言程序环境中的预处理详解 什么是预处理器 在 C 语言中,预处理器是一种用于在编译程序之前处理源代码的程序,它会根据源代码中的指示来进行一系列的操作,例如文件的导入和宏的展开等。预处理器是在编译过程的第一步中被执行的,它的主要作用是生成修改了的源代码,这些修改的结果将被送入编译器进行编译和链接。 #include 指令 include 指令被用来将另一个…

    C 2023年5月23日
    00
  • go语言搬砖之go jmespath实现查询json数据

    下面是“go语言搬砖之go jmespath实现查询json数据”的完整攻略: 什么是go jmespath go jemspah是一个Go语言实现的JMESPath语法查询工具。JMESPath是一种用于描述如何从JSON文档中提取所需数据的查询语言。 安装go jmespath 在Go语言的环境下使用go get即可安装go jmespath: go g…

    C 2023年5月23日
    00
  • C/C++ Qt数据库与SqlTableModel组件应用教程

    C/C++ Qt数据库与SqlTableModel组件应用教程 简介 本教程将介绍如何在Qt中使用SqlTableModel组件进行数据库操作,包括连接数据库、创建表格、插入、查询、修改和删除数据。本教程适用于C/C++语言。 准备工作 在开始使用SqlTableModel之前,你需要安装Qt和一个SQLite或MySQL数据库。 安装Qt 你可以从Qt官网…

    C 2023年5月22日
    00
  • 最短时间学会基于C++实现DFS深度优先搜索

    最短时间学会基于C++实现DFS深度优先搜索攻略 什么是DFS深度优先搜索 DFS即深度优先搜索,是一种基于搜索算法的遍历和检索树或图数据结构的算法。DFS算法采用深度优先策略,从根结点出发访问所有可达结点,直到叶子节点。在访问某个结点时,先访问该结点的第一个未访问的相邻节点,然后递归的访问其非相邻节点。其搜索的核心思想是根据某个搜索方向向前搜索到底,直至无…

    C 2023年5月22日
    00
  • JSP学习之Java Web中的安全控制实例详解

    JSP学习之Java Web中的安全控制实例详解,是一篇讲解Java Web项目中应用安全控制的文章。在Web项目中,安全控制是非常重要的一环。本文将详细介绍实现Java Web应用中的安全控制的过程。 什么是安全控制 首先,我们需要了解什么是安全控制。在Web应用中,安全控制是指对应用程序进行访问限制以保证应用的安全性。安全控制可以是身份验证、授权、审计等…

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