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

yizhihongxing

基于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日

相关文章

  • C语言实现随机抽奖程序

    实现随机抽奖程序的过程中需要使用C语言中的随机数生成函数和数组等知识点。下面就是实现随机抽奖程序的详细攻略: 步骤一:包含头文件 在程序开始之前,需要先包含头文件<stdio.h>和<stdlib.h>。其中<stdio.h>包含了标准输入输出函数,<stdlib.h>包含了随机数生成函数rand和数组函数bs…

    C 2023年5月23日
    00
  • c++中do{…}while(0)的意义和用法

    当我们希望一个块语句可以像一个普通的表达式一样使用时,就可以使用C++中的do-while(0)语法。 do-while(0)是一个完整的语法块,由关键字“do”和“while”及他们所包含的部分组成,这个语法块被包含在一对圆括号中。这种块语句通常用于宏展开。 do-while(0)主要有以下两个作用: 使块语句可以像表达式一样使用 使用do-while(0…

    C 2023年5月23日
    00
  • asp.net两级联动(包含添加和修改)

    下面我来详细讲解一下“asp.net两级联动(包含添加和修改)”的完整攻略。 什么是两级联动 两级联动是指在两个下拉选择框中,第一个选择框的选项变化会影响第二个选择框的选项,即根据第一个选择框的选择结果,动态更新第二个选择框的选项。 实现两级联动的思路 要实现两级联动,我们需要结合前端JavaScript和后端代码实现。其大致思路如下: 通过JavaScri…

    C 2023年5月22日
    00
  • python多线程下信号处理程序示例

    下面我将为大家详细讲解“python多线程下信号处理程序示例”的完整攻略。 1. 什么是信号处理程序 信号处理程序(Signal handler)是一个特殊的函数,用于响应特定的信号。在操作系统中,信号是异步事件,将被进程内或进程外触发。Linux操作系统支持很多不同的信号,如SIGUSR1,SIGUSR2,SIGTERM,SIGKILL等,每个信号都有自己…

    C 2023年5月22日
    00
  • Java日常练习题,每天进步一点点(26)

    这篇文章是一篇介绍Java练习题的攻略文章,该文章共包含26个练习题,每天练习一道题目,可以逐步提高自己的Java编程能力。下面我将介绍每一道题目的解题思路和注意点。 题目1:将一个字符串进行反转 这道题目的解题思路是: 1.将字符串转化为字符数组 2.将数组逆序 3.将数组转化为字符串 代码示例: public class Practice1 { publ…

    C 2023年5月23日
    00
  • C语言学习基础知识分享

    C语言学习基础知识分享 一、学习前的准备 1. 了解计算机基础知识 在你开始学习C语言之前,你需要了解计算机的基础知识。例如,你需要了解操作系统、计算机硬件、编程语言等基本概念。这可以帮助你更好地理解C语言,并更有效地编写代码。 2. 确定学习目标 在学习C语言之前,你需要清楚自己的学习目标。例如,你是为了学习编程基础知识还是为了理解算法和数据结构等高级主题…

    C 2023年5月23日
    00
  • C++实现单例模式的方法

    C++实现单例模式的方法可以通过以下两种方式实现: 1. 饿汉式单例模式 在饿汉式单例模式中,单例实例在程序启动时被立即初始化,它是线程安全的。具体实现如下: class Singleton { private: Singleton() {} static Singleton* m_instance; public: static Singleton* In…

    C 2023年5月23日
    00
  • 如何判断一个数是否为2的幂次方?若是,并判断出来是多少次方?

    判断一个数是否为2的幂次方: 一个数如果是2的幂次方,那么它的二进制表示中只有最高位是1,其他各位都是0。比如2的1次方是2,写成二进制就是10;2的2次方是4,写成二进制是100;2的3次方是8,写成二进制是1000。 根据这个规律,我们可以用位运算来判断一个数是否为2的幂次方,具体方法如下: 首先判断这个数是否大于0,如果为0则不是2的幂次方; 然后判断…

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