基于C语言实现个人通讯录管理系统

基于C语言实现个人通讯录管理系统攻略

1. 开发环境和工具

  • 操作系统:Windows或Linux
  • IDE:Visual Studio Code、Code::Blocks、Dev-C++等
  • 编程语言:C语言

2. 需求分析

通讯录管理系统用于存储个人通讯信息,包括姓名、电话、地址等。通讯录管理系统可以实现添加、删除、修改、查找、显示等功能。

3. 设计思路

  • 定义一个结构体,实现姓名、电话、地址等信息的存储。
  • 定义函数实现通讯录的添加、删除、修改、查找和显示功能。
  • 使用文件实现通讯录信息的存储和读取。
  • 使用菜单实现用户交互。

4. 实现步骤

4.1 定义结构体

typedef struct Contact {
    char name[20];
    char phone[12];
    char address[30];
} Contact;

4.2 实现添加功能

void Add(Contact *contacts, int *count) {
    printf("请输入姓名:");
    scanf(" %s", contacts[count->name]);
    printf("请输入电话:");
    scanf(" %s", contacts[count->phone]);
    printf("请输入地址:");
    scanf(" %s", contacts[count->address]);
    (*count)++;
}

4.3 实现删除功能

void Delete(Contact *contacts, int *count) {
    char name[20];
    printf("请输入删除联系人的姓名:");
    scanf(" %s", name);
    for (int i = 0; i < *count; i++) {
        if (strcmp(name, contacts[i].name) == 0) {
            for (int j = i; j < *count - 1; j++) {
                strcpy(contacts[j].name, contacts[j + 1].name);
                strcpy(contacts[j].phone, contacts[j + 1].phone);
                strcpy(contacts[j].address, contacts[j + 1].address);
            }
            (*count)--;
            printf("删除成功!\n");
            return;
        }
    }
    printf("没有找到该联系人!\n");
}

4.4 实现修改功能

void Modify(Contact *contacts, int *count) {
    char name[20];
    printf("请输入要修改联系人的姓名:");
    scanf(" %s", name);
    for (int i = 0; i < *count; i++) {
        if (strcmp(name, contacts[i].name) == 0) {
            printf("请输入姓名:");
            scanf(" %s", contacts[i].name);
            printf("请输入电话:");
            scanf(" %s", contacts[i].phone);
            printf("请输入地址:");
            scanf(" %s", contacts[i].address);
            printf("修改成功!\n");
            return;
        }
    }
    printf("没有找到该联系人!\n");
}

4.5 实现查找功能

void Find(const Contact *contacts, int count) {
    char name[20];
    printf("请输入要查找联系人的姓名:");
    scanf(" %s", name);
    for (int i = 0; i < count; i++) {
        if (strcmp(name, contacts[i].name) == 0) {
            printf("姓名:%s,电话:%s,地址:%s\n", contacts[i].name, contacts[i].phone, contacts[i].address);
            return;
        }
    }
    printf("没有找到该联系人!\n");
}

4.6 实现显示功能

void Show(const Contact *contacts, int count) {
    for (int i = 0; i < count; i++) {
        printf("姓名:%s,电话:%s,地址:%s\n", contacts[i].name, contacts[i].phone, contacts[i].address);
    }
}

4.7 实现文件读写功能

void Save(const Contact *contacts, int count) {
    FILE *fp = fopen("contacts.txt", "w");
    for (int i = 0; i < count; i++) {
        fprintf(fp, "%s %s %s\n", contacts[i].name, contacts[i].phone, contacts[i].address);
    }
    fclose(fp);
}

void Load(Contact *contacts, int *count) {
    FILE *fp = fopen("contacts.txt", "r");
    if (fp == NULL) {
        printf("没有文件!\n");
        return;
    }
    while (fscanf(fp, "%s %s %s", contacts[*count].name, contacts[*count].phone, contacts[*count].address) != EOF) {
        (*count)++;
    }
    fclose(fp);
}

4.8 实现菜单

int Menu() {
    int choice;
    printf("\n1. 添加联系人\n");
    printf("2. 删除联系人\n");
    printf("3. 修改联系人\n");
    printf("4. 查找联系人\n");
    printf("5. 显示联系人\n");
    printf("6. 退出\n");
    printf("请选择操作:");
    scanf("%d", &choice);
    return choice;
}

5. 示例说明

5.1 添加联系人

请输入姓名:Tom
请输入电话:12345678901
请输入地址:Beijing

5.2 删除联系人

请输入删除联系人的姓名:Tom
删除成功!

5.3 修改联系人

请输入要修改联系人的姓名:Tom
请输入姓名:Jerry
请输入电话:13579246801
请输入地址:Shanghai
修改成功!

5.4 查找联系人

请输入要查找联系人的姓名:Jerry
姓名:Jerry,电话:13579246801,地址:Shanghai

5.5 显示联系人

姓名:Jerry,电话:13579246801,地址:Shanghai

6. 总结

通过上述步骤的操作,我们就可以基于C语言实现个人通讯录管理系统。在整个过程中最核心的就是文件读写操作、结构体的定义以及菜单交互的设计。除此之外,针对需求的不同,我们可以在基础版本的基础上继续添加新功能。

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

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

相关文章

  • 全面了解Java中对于异常的捕捉方法

    全面了解Java中对于异常的捕捉方法 在Java中,异常处理是一个非常重要的概念,因为在编写代码时总会遇到一些意外情况,如文件不存在、网络连接断开等等,这些异常的出现会导致程序运行崩溃,无法完成预定任务,影响程序的可靠性和稳定性。Java提供了一套完善的异常处理机制来处理这些异常,可以使程序在出现异常的情况下依然保持正常运行,从而更好地保证程序的正确性。 J…

    C 2023年5月23日
    00
  • C++构造和解析Json的使用示例

    C++构造和解析Json的使用示例 简介 Json是一种轻量级的数据交换格式,常用于前后端数据传输、配置文件等。本文将介绍在C++中如何构造和解析Json数据。 Json库 C++中有很多称手的Json库,常用的有: RapidJson nlohmann/json C++ Json 这些库都提供了简单易用的Api,形式上大同小异,具体使用可以结合文档查询。 …

    C 2023年5月23日
    00
  • JavaScript中的连续赋值问题实例分析

    当我们在 JavaScript 语言中使用连续赋值时,需要注意一些问题。本文将介绍这些问题,并通过实例进行详细分析,帮助开发者更好地理解。 什么是连续赋值? 在 JavaScript 语言中,变量可以连续被赋值。连续赋值是指将多个值赋给多个变量的过程。例如: let a = 1, b = 2, c = 3; a = b = c = 4; console.lo…

    C 2023年5月22日
    00
  • C语言计算日期差的方法示例

    C语言计算日期差的方法示例 介绍 计算日期差是一道常见的编程问题,对于涉及到日期的应用程序而言,该问题尤为重要。C语言可以通过一些方法来计算日期差,包括使用time.h头文件中的函数以及手写计算公式。本文将为你介绍两种计算日期差的方法,并提供示例代码和详细注释。 时间戳方法 计算日期差最常见的方法是使用时间戳。时间戳是一个表示时间的整数值,通常指的是1970…

    C 2023年5月23日
    00
  • c++实现LinkBlockedQueue的问题

    让我们来详细讲解“c++实现LinkBlockedQueue的问题”该如何解决。 首先,我们需要阅读题目并理解其中所涉及的术语。“LinkBlockedQueue”是一个队列类,其中“Link”指的是链表,“Blocked”指的是阻塞,即队列为空时,出队操作会一直阻塞等待直到队列中有元素可出队。 接下来,我们可以通过以下步骤实现LinkBlockedQueu…

    C 2023年5月23日
    00
  • C++适用入门同学的模板讲解

    关于“C++适用入门同学的模板讲解”的完整攻略,我可以为您提供以下几个方面的内容: 一、为什么需要模板 在 C++ 中,模板是一种通用的语言特性,用于实现类型无关的代码复用。模板机制可以使得我们编写精简而又高效的代码。使用模板能有效地减少代码量,并且避免了类型转换的问题,同样的代码可以适用于不同类型的数据。 二、模板的基础语法 2.1 函数模板 函数模板是定…

    C 2023年5月23日
    00
  • win10系统激活失败提示错误代码0xc004f074的故障原因及解决方法

    win10系统激活失败提示错误代码0xc004f074的故障原因及解决方法 当用户在升级或重新安装Windows 10操作系统时,可能会遇到系统激活失败的问题,并显示错误代码0xc004f074,这个错误代码表示激活密钥无法验证。以下是可能导致这个问题的原因和解决方法。 原因 无法连接到激活服务器:如果无法连接到激活服务器,那么激活失败的问题就会发生。可能是…

    C 2023年5月23日
    00
  • JS/HTML5游戏常用算法之追踪算法实例详解

    JS/HTML5游戏常用算法之追踪算法实例详解 在制作游戏过程中,经常需要用到追踪算法,以实现游戏人物或物品的跟踪移动。本文将详细讲解追踪算法的原理和实现方式,并提供两个示例作为参考。 原理 追踪算法分为三种:面向目标追踪、路径追踪和预测追踪。其中,面向目标追踪是最常见的追踪算法之一。 面向目标追踪主要应用于游戏中,用于实现玩家角色或NPC跟随另一个移动对象…

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