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日

相关文章

  • C 程序 检查闰年

    下面是关于“C 程序 检查闰年”的完整使用攻略。这个文本包含了关于如何使用这个程序的一些基本信息和使用示例。 程序介绍 这个程序是用 C 语言编写的,它可以检查某一年是否是闰年。 使用攻略 这个程序的使用非常简单。你可以按照以下步骤来使用这个程序: 下载程序代码 你可以从网站上下载该程序的源代码,将其复制到你的本地计算机中。 打开代码文件 你可以使用任何文本…

    C 2023年5月9日
    00
  • C语言详细分析宏定义的使用

    C语言详细分析宏定义的使用 宏定义是C语言中的一个非常重要的特性,可以用来定义一些常量、函数名称、条件编译和代码模板等。本文将详细分析宏定义的使用方法,包括宏定义的类型、作用域、参数、注意事项以及常用的示例说明。 宏定义的类型 C语言中定义宏有两种方式: #define #define是最常用的宏定义方式,它可以在文件的任何地方定义。#define后面跟随一…

    C 2023年5月23日
    00
  • OpenCV使用邻居访问扫描图像的操作方法

    使用邻居访问扫描图像是计算机视觉和图像处理中常用的一种操作。OpenCV库中提供了许多函数和方法用于处理各种类型的图像。 以下是OpenCV使用邻居访问扫描图像的操作方法: 1. 定义邻居 邻居可以是指像素周围的像素或以像素为中心的矩形区域。在OpenCV中,我们可以使用函数 cv2.getStructuringElement() 来创建不同形状、尺寸和内核…

    C 2023年5月22日
    00
  • vs2005编译时出现C2859错误该怎么办?

    题目中提到的C2859错误是VS2005编译器出现的一种错误,主要是因为编译器没有足够的内存来处理源代码的语法。 解决方法如下: 方法一: 打开项目工程,找到Solution Explorer中的“.vcxproj”文件。 在文件夹中找到“ClCompile”节点,将“AdditionalOptions”项目的信息更改为“/Zm300”。 重新编译项目。 这…

    C 2023年5月23日
    00
  • Java语法中Lambda表达式无法抛出异常的解决

    Java 8引入的Lambda表达式是一种比较方便的编程方式,但有一点需要注意:Lambda表达式不能抛出异常。而在实际应用中,有时需要在Lambda表达式中抛出异常,这时候就需要找到“Java语法中Lambda表达式无法抛出异常的解决方法”。 要解决这个问题,可以使用函数式接口和Lambda表达式结合使用,来使Lambda表达式可以抛出异常。 具体步骤如下…

    C 2023年5月22日
    00
  • 打印圣诞树

    打印圣诞树 今天遇到一个不算特别变态的题目,可是却往错误的方向思考了有一会儿。 这是这个题目的链接:[打印圣诞树](圣诞树_牛客题霸_牛客网 (nowcoder.com)) 题目大致意思是,给定一个高度,打印出圣诞树。 效果图类似以下这种: 错误示范 首先我把每片叶子看作是5X3的矩形,空白看作是3X3的矩形。 最上面为第1层,最下面为第n层。 第i层前面有…

    C语言 2023年4月17日
    00
  • Scala异常处理的方法深入分析

    Scala异常处理的方法深入分析 在Scala编程中,异常处理是一个很重要的概念。Scala提供了很多方式来处理异常,包括try-catch语句、抛出异常、Option等。本文将深入分析Scala异常处理的方法,并提供两个示例来说明这些方法的使用。 try-catch语句 try-catch语句是最基本的Scala异常处理方式。使用try-catch语句,我…

    C 2023年5月23日
    00
  • C++实现智能柜管理系统

    C++实现智能柜管理系统攻略 简介 智能柜管理系统是一种集合了计算机技术、管理学等多方面知识的综合性系统。本文将介绍如何使用C++实现一个基于命令行界面的智能柜管理系统。 功能需求 智能柜管理系统,首先需要实现以下基础功能: 用户登录:用户需要输入账号密码才能访问系统 商品管理:管理员可以添加、删除、修改商品信息等 用户管理:管理员可以添加、删除、修改用户信…

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