基于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日常练习题,每天进步一点点(50)

    当我们学习编程语言时,除了理论知识的学习外,实践编程也是非常重要的。而Java日常练习题则是一种提高编程能力的好方法。本篇攻略将针对“Java日常练习题,每天进步一点点(50)”这一题目进行详细讲解。 题目内容 该题目为Java练习题,包括50道不同难度的题目,涉及Java基础、面向对象编程、异常处理、IO、集合框架等知识点。 解题步骤 理解题目意思对于每一…

    C 2023年5月23日
    00
  • C语言中双链表的基本操作

    下面是C语言中双链表的基本操作的完整攻略。 双链表的基本操作 什么是双链表 双向链表(Doubly linked list)是链表的一种,它同样由一系列的节点组成,每个结点分别含有指向前驱和后继结点的两个指针。这种结构允许双向遍历。常见的操作有前插、后插、删除、查找等,下面详细介绍其基本操作。 双链表的结构 双链表的结构如下所示: struct node{ …

    C 2023年5月24日
    00
  • C语言处理未初始化指针

    下面我会详细讲解“C语言处理未初始化指针”的完整使用攻略。 1. 什么是未初始化指针 从语言层面上来说,C语言中的指针默认是一个垃圾值或者未初始化的值,即该指针变量中存储的是一个未知的地址,而这个地址是随机的。 在实际编程中,如果程序员不小心对未初始化指针进行操作,就可能会导致错误和不可预见的行为。因此,在使用指针之前,程序员必须显式地对指针进行初始化操作。…

    C 2023年5月9日
    00
  • 浅谈C语言结构体

    浅谈C语言结构体的攻略如下: 什么是结构体 结构体是C语言中非常重要的一种复合数据类型,它由不同数据类型的数据成员组成。结构体能够将多个数据成员组合起来,便于进行操作和管理。C语言中的结构体类似于面向对象语言中的类,但不具有继承和封装的特性。 如何定义结构体 定义一个结构体需要用到struct关键字,结构体的基本语法格式如下: struct struct_n…

    C 2023年5月23日
    00
  • VScode中添加头文件和源文件(C/C++)的方法

    添加头文件和源文件是开发C/C++程序的必备步骤,本文将详细讲解在VScode中添加头文件和源文件的方法,以便程式师开发更加便捷。 添加头文件 要在VScode中添加头文件,需要按照以下步骤进行操作: 1.为了创建一个C/C++项目,您需要在终端中使用以下命令来创建一个名称为myproject的新目录: mkdir myproject cd myprojec…

    C 2023年5月23日
    00
  • Win10安装打印机驱动出现错误代码0xc000007b的原因及解决方法

    Win10安装打印机驱动出现错误代码0xc000007b的原因及解决方法攻略 引言 在进行Windows 10系统安装打印机驱动程序时,常会出现错误代码0xc000007b的问题,该问题会影响到您正常的打印操作,需要得到有效的解决。 原因分析 错误代码0xc000007b的出现通常是由于打印机驱动程序文件缺少或不完整,无法正确运行。而导致打印机驱动程序缺少或…

    C 2023年5月23日
    00
  • C语言项目小学生数学考试系统参考

    C语言项目小学生数学考试系统参考攻略 一、项目背景 小学数学考试系统是一个用C语言编写的计算机应用程序,可用于进行小学生数学考试。该程序拥有自动出题、计算分数、打印成绩单等功能,可以方便地进行小学生数学考试。 二、需求分析 程序应满足以下需求: 能够自动出题并计算分数; 能够记录用户的考试结果; 能够输出成绩单。 三、技术方案 在程序中,可以采用伪随机数生成…

    C 2023年5月30日
    00
  • c++11新增的便利算法实例分析

    C++11新增的便利算法实例分析 C++11为我们提供了许多实用的 STL 算法,其中一些算法来自 Boost 库,可以大大提高我们的编程效率。在本文中,我们将介绍 C++11 中的一些便利算法,包括 for_each(),transform() 和 sort(),并提供代码示例进行演示。 for_each() for_each() 算法允许我们对一个容器中…

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