C语言实现静态存储通讯录的示例代码

yizhihongxing

下面是详细的“C语言实现静态存储通讯录的示例代码”的攻略:

一、准备工作

1. 安装开发环境

首先需要安装C语言开发环境,推荐使用Code::Blocks,可以在官网https://www.codeblocks.org/上进行下载和安装。

2. 创建项目

在Code::Blocks中,选择File->New->Project,选择“Console application”,按照提示设置项目名称和路径等信息,创建一个新的C语言项目。

3. 编写代码

根据通讯录的需求,编写相应的代码,包括定义结构体、添加联系人、删除联系人、显示所有联系人等操作。具体代码如下:

#include <stdio.h>
#include <string.h>

#define MAX_CONTACTS 100    // 最大联系人数
#define MAX_NAME_LEN 20     // 姓名的最大长度
#define MAX_PHONE_LEN 20    // 电话号码的最大长度

// 定义联系人结构体
struct Contact {
    char name[MAX_NAME_LEN];
    char phone[MAX_PHONE_LEN];
};

// 定义通讯录结构体
struct AddressBook {
    struct Contact contacts[MAX_CONTACTS];
    int count;    // 当前联系人数
};

// 向通讯录添加联系人
void addContact(struct AddressBook *addressBook) {
    if (addressBook->count >= MAX_CONTACTS) {
        printf("通讯录已满!\n");
        return;
    }

    printf("请输入联系人姓名:\n");
    scanf("%s", addressBook->contacts[addressBook->count].name);    // 输入姓名
    printf("请输入联系人电话:\n");
    scanf("%s", addressBook->contacts[addressBook->count].phone);   // 输入电话

    addressBook->count++;    // 当前联系人数加一
    printf("添加联系人成功!\n");
}

// 从通讯录删除联系人
void deleteContact(struct AddressBook *addressBook, char *name) {
    int index = -1;

    // 查找姓名对应的联系人
    for (int i = 0; i < addressBook->count; i++) {
        if (strcmp(name, addressBook->contacts[i].name) == 0) {
            index = i;
            break;
        }
    }

    if (index == -1) {
        printf("联系人不存在!\n");
        return;
    }

    // 移动后面的联系人,覆盖被删除的联系人
    for (int i = index + 1; i < addressBook->count; i++) {
        addressBook->contacts[i - 1] = addressBook->contacts[i];
    }

    addressBook->count--;    // 当前联系人数减一
    printf("删除联系人成功!\n");
}

// 显示所有联系人
void showContacts(struct AddressBook *addressBook) {
    if (addressBook->count == 0) {
        printf("通讯录为空!\n");
        return;
    }

    printf("共有%d个联系人:\n", addressBook->count);
    for (int i = 0; i < addressBook->count; i++) {
        printf("%d.姓名:%s,电话:%s\n", i + 1, addressBook->contacts[i].name, addressBook->contacts[i].phone);
    }
}

int main() {
    struct AddressBook addressBook = {{}, 0};    // 初始化为空通讯录
    int choice;

    // 提示用户输入命令
    while (1) {
        printf("\n请输入指令:\n");
        printf("1.添加联系人\n");
        printf("2.删除联系人\n");
        printf("3.显示所有联系人\n");
        printf("0.退出\n");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addContact(&addressBook);
                break;
            case 2: {
                char name[MAX_NAME_LEN];
                printf("请输入要删除的联系人姓名:\n");
                scanf("%s", name);
                deleteContact(&addressBook, name);
                break;
            }
            case 3:
                showContacts(&addressBook);
                break;
            case 0:
                return 0;
            default:
                printf("无效的指令!\n");
        }
    }
}

二、示例说明

1. 添加联系人

当用户选择1,即“添加联系人”时,程序会提示用户输入联系人姓名和电话,依次将输入的姓名和电话保存到下一个空闲的联系人位置,同时更新联系人数。如果通讯录已满,则提示“通讯录已满!”。代码如下:

void addContact(struct AddressBook *addressBook) {
    if (addressBook->count >= MAX_CONTACTS) {
        printf("通讯录已满!\n");
        return;
    }

    printf("请输入联系人姓名:\n");
    scanf("%s", addressBook->contacts[addressBook->count].name);    // 输入姓名
    printf("请输入联系人电话:\n");
    scanf("%s", addressBook->contacts[addressBook->count].phone);   // 输入电话

    addressBook->count++;    // 当前联系人数加一
    printf("添加联系人成功!\n");
}

2. 删除联系人

当用户选择2,即“删除联系人”时,程序会提示用户输入待删除联系人的姓名。如果找到了该联系人,则将该联系人的信息从通讯录中删除,并将后面的联系人依次向前移动。如果未找到该联系人,则提示“联系人不存在!”。代码如下:

void deleteContact(struct AddressBook *addressBook, char *name) {
    int index = -1;

    // 查找姓名对应的联系人
    for (int i = 0; i < addressBook->count; i++) {
        if (strcmp(name, addressBook->contacts[i].name) == 0) {
            index = i;
            break;
        }
    }

    if (index == -1) {
        printf("联系人不存在!\n");
        return;
    }

    // 移动后面的联系人,覆盖被删除的联系人
    for (int i = index + 1; i < addressBook->count; i++) {
        addressBook->contacts[i - 1] = addressBook->contacts[i];
    }

    addressBook->count--;    // 当前联系人数减一
    printf("删除联系人成功!\n");
}

以上就是“C语言实现静态存储通讯录的示例代码”的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现静态存储通讯录的示例代码 - Python技术站

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

相关文章

  • C/C++ 中怎样使用SetConsoleTextAttribute()函数来控制输出字符的颜色

    当在控制台程序中使用C/C++语言输出字符时,通过SetConsoleTextAttribute()函数可以改变输出字符的颜色。该函数在Windows头文件中定义。下面给出SetConsoleTextAttribute()函数的用法及示例代码。 语法 BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput, W…

    C 2023年5月23日
    00
  • C语言实现车票管理系统

    C语言实现车票管理系统攻略 系统简介 本项目旨在通过使用C语言实现一个简单的车票管理系统,包含票务查询、购票、售票等功能,并能够通过简单的文件操作来实现信息的存储和读取。 系统设计 数据结构 本系统的重要数据结构包括车次、日期、座位号、顾客信息等。 车次包括列车编号、起始站和终点站,同一天内可以有多条相同的车次。 日期包括年、月、日,组成日期的整型和字符串等…

    C 2023年5月22日
    00
  • C++实现LeetCode(121.买卖股票的最佳时间)

    C++实现LeetCode(121.买卖股票的最佳时间) 题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。 注意:你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第2天(股票价格 =…

    C 2023年5月23日
    00
  • C++ Cartographer源码中关于MapBuilder的声明与构造

    在C++ Cartographer源码中,MapBuilder模块的声明与构造均源于同一文件map_builder.h。这个文件定义了MapBuilder类,是生成地图的核心类之一,因为它将传递的轨迹数据和传感器数据相融合,生成完整的地图。下面展示了MapBuilder类的声明: class MapBuilder { public: … void Loa…

    C 2023年5月22日
    00
  • C语言超详细讲解队列的实现及代码

    C语言超详细讲解队列的实现及代码 什么是队列 队列(Queue)是一种线性数据结构,它遵循“先进先出”(FIFO)原则。队列通常用于在数据元素到来的顺序的控制和处理。 队列的最常见的两个操作是 enqueue(入队)和 dequeue(出队)。 enqueue操作用于在队列的尾部插入元素。 dequeue操作用于从队列的头部删除元素。 队列的实现 队列可以使…

    C 2023年5月23日
    00
  • C# CLR 中学习 C++关键词extern使用详解

    C# CLR 中学习 C++关键词extern使用详解 什么是extern关键词 extern是一种C++编程语言关键词,也可以在C# CLR中使用。 extern关键词的主要作用是指示编译器外部变量或函数的存在,并告诉编译器外部变量或函数在程序的其他地方定义。此外,extern也被用来在调用C++函数时手动指定函数的调用约定。 使用extern关键词声明外…

    C 2023年5月23日
    00
  • OpenCV mask的作用及如何制作掩模mask

    OpenCV的mask是一个二进制图像,用于控制对另一个图像的操作。在图像处理中,掩模通常被用于选择感兴趣区域(ROI)或执行像素级别的操作,如图像增强、滤波、混合等。 制作掩模实际上就是创建一个二值图像,其中像素值为0或255(黑或白),作用是将掩模图像中为255的像素区域与原图像中对应位置的像素进行操作,在区域内进行所需的图像处理操作。 下面我们以制作掩…

    C 2023年5月23日
    00
  • C语言创建windows窗口实例

    下面是关于C语言创建Windows窗口实例的完整攻略,分为以下几个步骤: 1. 引入必要的头文件 首先我们需要在程序中引入必要的头文件,包括Windows.h和tchar.h。这些头文件在使用Windows API时必须被包含,以便于调用其中定义的函数和宏。 #include <windows.h> #include <tchar.h&gt…

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