C语言实现通讯录系统程序

C语言实现通讯录系统程序攻略

通讯录系统是一个经典的应用程序,其实现也是编程入门的一大重点。本文将分享使用C语言实现通讯录系统程序的完整攻略,帮助你从零开始完成一个完整的通讯录系统。

步骤1:需求分析

在编写任何程序之前,需要进行需求分析,从而明确程序需要实现的具体功能。在此我们定义所需的功能如下:

  1. 添加联系人:用户可以添加一个新的联系人,并记录该联系人的姓名、性别、年龄、手机号、家庭住址等信息。

  2. 显示联系人:用户可以查看所有已经添加的联系人信息,包括每个联系人的姓名、性别、年龄、手机号、家庭住址等信息。

  3. 删除联系人:用户可以选择一个要删除的联系人,并将其从通讯录中删除。

  4. 查找联系人:根据联系人的姓名进行查找,并在查询结果中显示该联系人的所有信息。

  5. 修改联系人:用户可以选择一个要修改的联系人,并修改该联系人的信息,如手机号、家庭住址等。

步骤2:设计程序数据结构

根据上述需求,我们可以设计出通讯录系统的数据结构,如下所示:

#define NAME_MAX_LEN 20
#define SEX_MAX_LEN 5
#define PHONE_MAX_LEN 12
#define ADDR_MAX_LEN 30

/* 联系人结构体 */
struct Contact {
    char name[NAME_MAX_LEN];
    char sex[SEX_MAX_LEN];
    int age;
    char phone[PHONE_MAX_LEN];
    char addr[ADDR_MAX_LEN];
};

上述代码中,我们定义了一个联系人结构体,其中包含了姓名、性别、年龄、手机号、家庭住址等信息。在程序中,我们将会增删改查联系人信息,因此这个结构体是非常重要的。

步骤3:实现程序功能

接下来,我们就可以根据需求,开始实现程序的功能,具体操作如下:

1. 添加联系人

在程序中,我们需要向用户询问联系人信息,然后将该联系人信息保存到通讯录列表中,代码如下所示:

/* 将新增联系人信息添加到通讯录列表 */
void add_contact(struct Contact* contacts, int* cnt) {
    printf("请输入联系人姓名:");
    scanf("%s", contacts[*cnt].name);
    printf("请输入联系人性别:");
    scanf("%s", contacts[*cnt].sex);
    printf("请输入联系人年龄:");
    scanf("%d", &contacts[*cnt].age);
    printf("请输入联系人手机号:");
    scanf("%s", contacts[*cnt].phone);
    printf("请输入联系人家庭住址:");
    scanf("%s", contacts[*cnt].addr);

    (*cnt)++;
    printf("联系人添加成功!\n");
}

在上述代码中,我们使用scanf函数获取用户输入的联系人信息,然后将其保存到通讯录列表中。同时,通过更新通讯录列表中联系人数量的方式,可以达到添加联系人的效果。

2. 显示联系人

在程序中,我们需要遍历通讯录列表,并输出每一个联系人的信息,代码如下:

/* 显示所有联系人信息 */
void show_contacts(struct Contact* contacts, int cnt) {
    printf("所有联系人信息如下:\n");
    for (int i = 0; i < cnt; i++) {
        printf("姓名:%s\t性别:%s\t年龄:%d\t手机号:%s\t家庭住址:%s\n",
            contacts[i].name, contacts[i].sex, contacts[i].age,
            contacts[i].phone, contacts[i].addr);
    }
}

在上述代码中,我们使用for循环遍历通讯录列表,然后输出每一个联系人的信息。通过使用printf函数,我们可以将每一个联系人的信息按照一定的格式进行显示。

3. 删除联系人

在程序中,我们需要让用户选择一个要删除的联系人,然后将其从通讯录列表中删除,代码如下:

/* 从通讯录列表中删除指定联系人 */
void delete_contact(struct Contact* contacts, int* cnt) {
    char name[NAME_MAX_LEN];
    printf("请输入要删除的联系人姓名:");
    scanf("%s", name);

    int index = -1;
    for (int i = 0; i < *cnt; i++) {
        if (strcmp(name, contacts[i].name) == 0) {
            index = i;
            break;
        }
    }

    if (index == -1) {
        printf("通讯录中不存在该联系人!\n");
    } else {
        for (int i = index; i < (*cnt) - 1; i++) {
            contacts[i] = contacts[i + 1];
        }
        (*cnt)--;
        printf("联系人删除成功!\n");
    }
}

在上述代码中,我们使用scanf函数获取用户输入的联系人姓名,然后遍历通讯录列表,查找该联系人的位置。如果找到该联系人,我们将通讯录列表中此位置以后所有的联系人向前移动一个位置,并更新联系人数量。否则,我们提示用户通讯录中不存在该联系人。

4. 查找联系人

在程序中,我们需要让用户输入要查找的姓名,并将所有符合条件的联系人信息输出,代码如下:

/* 根据姓名查找联系人 */
void find_contact(struct Contact* contacts, int cnt) {
    char name[NAME_MAX_LEN];
    printf("请输入要查找的联系人姓名:");
    scanf("%s", name);

    int found = 0;
    for (int i = 0; i < cnt; i++) {
        if (strcmp(name, contacts[i].name) == 0) {
            printf("姓名:%s\t性别:%s\t年龄:%d\t手机号:%s\t家庭住址:%s\n",
                contacts[i].name, contacts[i].sex, contacts[i].age,
                contacts[i].phone, contacts[i].addr);
            found = 1;
        }
    }

    if (!found) {
        printf("通讯录中不存在该联系人!\n");
    }
}

在上述代码中,我们使用scanf函数获取用户输入的联系人姓名,然后遍历通讯录列表,查找所有符合条件的联系人,并将其信息进行输出。如果找不到任何联系人,我们提示用户通讯录中不存在该联系人。

5. 修改联系人

在程序中,我们需要让用户选择一个要修改的联系人,然后修改该联系人的信息,代码如下:

/* 修改通讯录列表中指定联系人的信息 */
void modify_contact(struct Contact* contacts, int cnt) {
    char name[NAME_MAX_LEN];
    printf("请输入要修改的联系人姓名:");
    scanf("%s", name);

    int index = -1;
    for (int i = 0; i < cnt; i++) {
        if (strcmp(name, contacts[i].name) == 0) {
            index = i;
            break;
        }
    }

    if (index == -1) {
        printf("通讯录中不存在该联系人!\n");
        return;
    }

    printf("请输入新的联系人信息:\n");
    printf("请输入联系人性别:");
    scanf("%s", contacts[index].sex);
    printf("请输入联系人年龄:");
    scanf("%d", &contacts[index].age);
    printf("请输入联系人手机号:");
    scanf("%s", contacts[index].phone);
    printf("请输入联系人家庭住址:");
    scanf("%s", contacts[index].addr);
    printf("联系人信息修改成功!\n");
}

在上述代码中,我们使用scanf函数获取用户输入的联系人姓名,然后遍历通讯录列表,查找要修改的联系人,并更新该联系人的信息。如果找不到该联系人,我们提示用户通讯录中不存在该联系人。

步骤4:测试程序

根据上述代码,我们已经完成了通讯录系统的编写,现在可以编译并运行程序,查看是否符合需要。

为了方便测试,下面提供两个示例:

示例一:添加联系人

  1. 打开程序,选择“1. 添加联系人”。
  2. 输入联系人信息:“张三”、“男”、“18”、“13800138000”、“北京市昌平区”。
  3. 程序提示“联系人添加成功!”。

示例二:显示联系人

  1. 打开程序,选择“2. 显示联系人”。
  2. 程序依次输出所有已经添加的联系人的信息。

总结

以上就是使用C语言实现通讯录系统程序的完整攻略,通过以上代码,你可以了解到如何定义数据结构、实现程序功能、以及测试程序的方法。希望本文对于你学习C语言编程有所帮助,如果你有任何疑问或建议,欢迎在评论区留言。

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

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

相关文章

  • google c++程序测试框架googletest使用教程详解

    Google C++程序测试框架Googletest使用教程详解 什么是Googletest? Googletest是Google开源的C++单元测试框架。它旨在帮助编写更好的C++单元测试,而且是免费的。 Googletest的安装 Linux/Unix系统 从源码安装 wget https://github.com/google/googletest/a…

    C 2023年5月23日
    00
  • c#版json数据解析示例分享

    下面就详细讲解“C#版JSON数据解析示例分享”的完整攻略。 什么是JSON? JSON是JavaScript Object Notation的简称,是一种轻量级的数据交换格式,易于使用并且易于阅读和编写。在网络应用中,它通常用于与服务器进行交换数据。 JSON格式的数据通常使用大括号{}括起来,其中包含一个或多个键值对。其中,键是字符串,值可以是数字、字符…

    C 2023年5月23日
    00
  • C++中register关键字举例详解

    C++中register关键字举例详解 在C++中,register关键字用于告诉编译器将变量存储在寄存器中,以提高访问速度。但是,现代的编译器往往会忽略该关键字的存在,因为现代计算机具有足够大的缓存,所以必要性已经不太大。然而,了解这种关键字的使用方法仍然是有益的,特别是在特定的编译器和指令集架构下。 使用register关键字 为了使用register关…

    C 2023年5月23日
    00
  • 关于Http持久连接和HttpClient连接池的深入理解

    关于Http持久连接和HttpClient连接池的深入理解 什么是Http持久连接 在Http1.0中,每次客户端想要请求内容时,都会和服务器建立一次连接,产生一次完整的Http事务。连接关闭后,所有的相关资源被释放。 在Http1.1中,为了提高效率,引入了持久连接,即同一个连接可以请求多个资源。所以,Http持久连接可以理解为,在同一个连接上可以发送多个…

    C 2023年5月22日
    00
  • 关于 Python json中load和loads区别

    关于 Python json中load和loads区别 在Python中使用Json模块解析Json时,经常会用到json.load()和json.loads(),这两个方法都可以将Json格式的字符串转化为Python能够识别的对象,但是它们却有一定的区别。 1. json.load() json.load()方法可以从一个文件对象中读取数据,并将其解析为…

    C 2023年5月23日
    00
  • C语言链表实现工资管理系统

    C语言链表实现工资管理系统的完整攻略如下: 系统功能介绍 该系统主要实现以下功能: 添加员工信息 删除员工信息 修改员工信息 查询员工信息 显示所有员工信息 退出系统 系统设计 员工信息结构体 首先我们需要定义一个员工信息结构体,其中包括员工的姓名、工号、部门、职位和工资等信息。代码如下: struct Employee { char name[20]; /…

    C 2023年5月23日
    00
  • C++中Operator类型强制转换成员函数解析

    Operator类型强制转换成员函数是C++中的一种特殊的成员函数,用于在自定义类型中实现类型转换。Operator类型强制转换成员函数可以将对象从一种类型转换为另一种类型。注意,Operator类型强制转换成员函数既可以定义为成员函数也可以定义为非成员函数。 在C++中,有六种Operator类型强制转换成员函数。它们分别是: const_cast dyn…

    C 2023年5月22日
    00
  • C语言模拟实现库函数详解

    C语言模拟实现库函数详解 1. 什么是库函数? 库函数(也称为系统函数)是一组能够被程序员调用的函数库,它包含了许多常用的功能函数。C语言本身只提供了一些基本的语法和数据类型,必须通过调用库函数来进行更高级的操作,如打印信息、内存操作、文件操作等等。 2. C语言模拟实现库函数好处 通过自己实现库函数,可以更深入地了解函数的实现原理,加深对C语言的理解。同时…

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