C语言实现简单通讯录系统

C语言实现简单通讯录系统攻略

1. 确定功能需求

在开始编写代码前,需要明确实现的功能需求。一个简单的通讯录功能包含以下几个方面:

  • 添加联系人;
  • 显示联系人列表;
  • 修改联系人信息;
  • 删除联系人。

2. 设计数据结构

在C语言中,可以使用结构体来存储联系人的相关信息。为了方便,我们可以使用动态内存分配来动态地创建存储联系人的结构体。

typedef struct contact {
    char name[20];
    char phone[11];
    struct contact *next;
} Contact;

其中,name表示联系人姓名,phone表示联系人电话号码,next表示指向下一个联系人结构体的指针。

3. 编写添加联系人函数

添加联系人时,需要动态创建一个联系人结构体,并将它添加到链表的结尾处。示例代码如下:

Contact *addContact(Contact *head) {
    Contact *new_contact = (Contact*) malloc(sizeof(Contact));
    printf("请输入联系人姓名:");
    scanf("%s", new_contact->name);
    printf("请输入联系人电话:");
    scanf("%s", new_contact->phone);
    new_contact->next = NULL;

    if (head == NULL) {
        head = new_contact;
    } else {
        Contact *temp = head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = new_contact;
    }

    printf("联系人添加成功!\n");
    return head;
}

4. 编写显示联系人列表函数

显示联系人列表时,需要遍历链表并输出每个联系人的信息。示例代码如下:

void showContacts(Contact *head) {
    if (head == NULL) {
        printf("通讯录为空!\n");
    } else {
        printf("姓名\t\t电话\n");
        printf("------------------------\n");
        Contact *temp = head;
        while (temp != NULL) {
            printf("%s\t\t%s\n", temp->name, temp->phone);
            temp = temp->next;
        }
    }
}

5. 编写修改联系人信息函数

修改联系人信息时,需要先找到要修改的联系人结构体,然后更新它的name和phone字段。示例代码如下:

void modifyContact(Contact *head) {
    char name[20];
    printf("请输入要修改的联系人姓名:");
    scanf("%s", name);

    Contact *temp = head;
    while (temp != NULL) {
        if (strcmp(temp->name, name) == 0) {
            printf("请输入新的联系人姓名:");
            scanf("%s", temp->name);
            printf("请输入新的联系人电话:");
            scanf("%s", temp->phone);
            printf("联系人信息修改成功!\n");
            return;
        }
        temp = temp->next;
    }

    printf("没有找到该联系人!\n");
}

6. 编写删除联系人函数

删除联系人时,需要先找到要删除的联系人结构体,然后将其从链表中删除并释放内存。示例代码如下:

Contact *deleteContact(Contact *head) {
    char name[20];
    printf("请输入要删除的联系人姓名:");
    scanf("%s", name);

    if (head == NULL) {
        printf("通讯录为空!\n");
        return NULL;
    }

    if (strcmp(head->name, name) == 0) {
        Contact *temp = head->next;
        free(head);
        printf("联系人已删除!\n");
        return temp;
    } else {
        Contact *temp = head;
        while (temp->next != NULL) {
            if (strcmp(temp->next->name, name) == 0) {
                Contact *delete_node = temp->next;
                temp->next = delete_node->next;
                free(delete_node);
                printf("联系人已删除!\n");
                return head;
            }
            temp = temp->next;
        }
    }

    printf("没有找到该联系人!\n");
    return head;
}

7. 编写主函数

主函数负责循环接受用户的输入,并根据输入调用相应的函数。示例代码如下:

int main() {
    Contact *head = NULL;
    int choice = 0;

    while (1) {
        printf("\n-----------------------\n");
        printf("1. 添加联系人\n");
        printf("2. 显示联系人列表\n");
        printf("3. 修改联系人信息\n");
        printf("4. 删除联系人\n");
        printf("0. 退出程序\n");
        printf("-----------------------\n");

        scanf("%d", &choice);

        switch (choice) {
            case 0:
                printf("程序退出!\n");
                return 0;
            case 1:
                head = addContact(head);
                break;
            case 2:
                showContacts(head);
                break;
            case 3:
                modifyContact(head);
                break;
            case 4:
                head = deleteContact(head);
                break;
            default:
                printf("请输入正确的选项!\n");
                break;
        }
    }
}

8. 示例说明

以下是添加、显示和删除联系人的示例:

添加联系人

-----------------------
1. 添加联系人
2. 显示联系人列表
3. 修改联系人信息
4. 删除联系人
0. 退出程序
-----------------------
1
请输入联系人姓名:张三
请输入联系人电话:13612345678
联系人添加成功!

-----------------------
1. 添加联系人
2. 显示联系人列表
3. 修改联系人信息
4. 删除联系人
0. 退出程序
-----------------------
1
请输入联系人姓名:李四
请输入联系人电话:13812345678
联系人添加成功!

显示联系人列表

-----------------------
1. 添加联系人
2. 显示联系人列表
3. 修改联系人信息
4. 删除联系人
0. 退出程序
-----------------------
2
姓名                电话
------------------------
张三                13612345678
李四                13812345678

-----------------------
1. 添加联系人
2. 显示联系人列表
3. 修改联系人信息
4. 删除联系人
0. 退出程序
-----------------------

删除联系人

-----------------------
1. 添加联系人
2. 显示联系人列表
3. 修改联系人信息
4. 删除联系人
0. 退出程序
-----------------------
4
请输入要删除的联系人姓名:李四
联系人已删除!

-----------------------
1. 添加联系人
2. 显示联系人列表
3. 修改联系人信息
4. 删除联系人
0. 退出程序
-----------------------
2
姓名                电话
------------------------
张三                13612345678

-----------------------
1. 添加联系人
2. 显示联系人列表
3. 修改联系人信息
4. 删除联系人
0. 退出程序
-----------------------

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

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

相关文章

  • IOS Object-C 中Runtime详解及实例代码

    iOS Object-C 中Runtime详解及实例代码 1. Runtime简介 Runtime是OC的运行时系统。是一个由 C 语言编写的 底层的 Objective-C 对象(如实例和 Class)的管理系统。它是编译器和 CPU 的桥梁, Objective-C 的“动态”本质得以实现。 通过运行时机制,Objective-C能够实现动态绑定和方法调…

    C 2023年5月22日
    00
  • 蒲公英x4c路由器怎么样 蒲公英x4c路由器详细评测

    蒲公英x4c路由器怎么样 蒲公英x4c路由器详细评测 蒲公英x4c路由器概述 蒲公英x4c路由器是一款基于OpenWRT固件开发的智能高速路由器,具有高速稳定、易于管理、安全稳定等特点。它采用了千兆网口,堡垒机级别的安全保障系统和智能家居和NAS多功能集成等设计,支持数据加速、加密、压缩等多项技术,既符合个人用户的需求,也符合企业用户的需求。 蒲公英x4c路…

    C 2023年5月23日
    00
  • C++实现通讯录管理系统项目

    C++实现通讯录管理系统项目,主要分为以下几个步骤: 1. 需求分析 在开发任何项目前,需要先进行需求分析,确定项目的目标和功能。 通讯录管理系统的主要功能包括添加联系人、显示联系人、删除联系人、修改联系人、清空联系人等操作。我们需要先确定这些操作的实现方式和操作流程。 2. 数据结构设计 在确定操作流程后,需要设计合适的数据结构来存储联系人信息。可以使用结…

    C 2023年5月24日
    00
  • C++利用GPAC实现生成MP4文件的示例代码

    本篇攻略将详细讲解如何使用C++利用GPAC实现生成MP4文件的示例代码。 GPAC简介 GPAC是一个开源多媒体框架,它可以处理音频、视频和字幕等多媒体相关内容,从而实现多媒体文件的编解码、处理以及流媒体的分发等操作。GPAC支持很多常用的视频编码器,如H.264、VP8、MPEG2等,同时也支持多种音频编码器,如AAC、MP3等等。本次攻略将着重介绍如何…

    C 2023年5月24日
    00
  • C语言解读数组循环右移问题

    C语言解读数组循环右移问题攻略 1. 问题描述 在数组中,循环右移操作是将数组中的元素向右移动k个位置,其中k为移动的步数,当移动到最后一个元素时,需要将最后一个元素的值作为第一个元素的值。如:[1, 2, 3, 4, 5],循环右移3个位置后变为[3, 4, 5, 1, 2]。 2. 解题思路 循环右移的本质是将原数组分为两部分:左边为需要右移的部分,右边…

    C 2023年5月23日
    00
  • js操作两个json数组合并、去重,以及删除某一项元素

    合并两个 JSON 数组 合并两个 JSON 数组可以通过 concat() 方法来实现,该方法将两个数组合并,并返回一个新的数组,同时保留原数组的数据不变。示例代码如下: const arr1 = [{ id: 1, name: ‘John’ }, { id: 2, name: ‘Jane’ }]; const arr2 = [{ id: 3, name:…

    C 2023年5月23日
    00
  • C++简单又轻松建立链式二叉树流程

    下面是关于“C++简单又轻松建立链式二叉树”的攻略。 什么是链式二叉树 链式二叉树是一种常见的树形结构,它由多个节点构成,每个节点可以有左子树、右子树和父节点。链式二叉树的特点是不需要连续的内存空间,因此它的插入和删除操作非常方便。 如何建立链式二叉树 在C++中,我们可以使用结构体表示每个二叉树节点,具体实现方式如下: struct TreeNode { …

    C 2023年5月30日
    00
  • 一文搞懂spring boot本地事务@Transactional参数

    下面是“一文搞懂spring boot本地事务@Transactional参数”的详细攻略: 目录 背景介绍 @Transactional参数介绍 示例说明 示例一:@Transactional使用方式 示例二:@Transactional注解入门 总结 背景介绍 在Spring Boot应用程序中,事务管理对数据的一致性和完整性十分重要。因此,Spring…

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