阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

教你C语言实现通讯录的详细代码

338次阅读
没有评论

共计 5205 个字符,预计需要花费 14 分钟才能阅读完成。

导读 本文详细讲解了 C 语言实现通讯录的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
(一)实现思路

1. 通讯录功能

添加好友,删除好友,查找好友,修改好友信息,对好友进行排序

2. 模块化实现各方面的功能

a. test.c

测试通讯录功能

b. Contact.c

实现通讯录功能

c. Contact.h

包含通讯录实现的头文件

3. 代码实现

(二)源代码
A.test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
#include 
#include "contact.h"
  
  
void menu()
{printf("*******************************\n");
    printf("***  1.Add         2.Del    ***\n");
    printf("***  3.Search      4.Modify ***\n");
    printf("***  5.Show        6.Sort   ***\n");
    printf("***  7.Help        8.About0 ***\n");
    printf("***  0.Exit                 ***\n");
    printf("*******************************\n");
}
  
  
int main()
{
  
    int input = 0;
    // 创建通讯录
    int size = 0;
    struct Contact con;// 一个结构体里包含 1000 个人的信息和 size;//size 表示的是该通讯录里现在的好友数
    // 初始化通讯录
    InitContact(&con);// 使 size 的初始值,以及好友信息初始化为 0;do
    {menu();
        printf("请选择:");
        scanf("%d", &input);
        switch (input)
        {
            // 添加好友信息
        case Add:
            AddContact(&con);
            break;
            // 删除好友
  
        case Del:
            DelContact(&con);
            break;
  
            // 查找好友信息
        case Search:
            SearchContact(&con);
            break;
  
            // 修改好友信息
        case Modify:
            ModifyContact(&con);
            break;
  
            // 显示好友信息
        case Show:
            ShowContact(&con);
            break;
  
            // 好友排序
        case Sort:
            SortContact(&con);
            break;
  
            // 退出
        case Exit:
            printf("退出通讯录!");
            break;
  
            // 通讯录的使用以及帮助
        case Help:
            HelpContact();
            break;
  
            // 关于通讯录
        case About:
            AboutContact();
            break;
  
            // 选择错误
        default:
            printf("选择错误!");
            break;
        }
  
    } while (input);
    return 0;
}
B.Contact.h
#define _CRT_SECURE_NO_WARNINGS 1
#define Max 1000
#define Max_name 20
#define Max_sex 5
#define Max_tele 12
#define Max_addr 30
  
enum Option
{
    Exit,
    Add,
    Del,
    Search,
    Modify,
    Show,
    Sort,
    Help,
    About
  
};
  
  
// 创建一个结构体来存放通讯录中要存放的信息
struct PeoInfo
{char name[Max_name];
    int age;
    char sex[Max_sex];
    char tele[Max_tele];
    char addr[Max_addr];
};
  
// 通讯录类型
struct Contact
{struct PeoInfo data[Max];// 存放一个信息,包括好友姓名,年龄,性别,电话,地址
    int size;// 记录当前已经有的元素个数
    // 存入一个好友,size 加 1,表示通讯录人数增加一个
};
  
  
// 声明函数
//1. 对通讯录进行初始化
void InitContact(struct Contact* ps);
  
// 增加好友信息
void AddContact(struct Contact* ps);
  
// 删除好友
void DelContact(struct Contact* ps);
  
// 查找指定姓名的好友
void SearchContact(struct Contact* ps);
  
// 显示好友信息
void ShowContact(const struct Contact* ps);
  
// 修改好友信息
void ModifyContact(struct Contact* ps);
  
// 按名字首字母对通讯录的好友进行排序
void SortContact(struct Contact* ps);
  
// 帮助使用通讯录
void HelpContact();
  
// 关于通讯录
void AboutContact();
C.Contact.c
#define _CRT_SECURE_NO_WARNINGS 1
  
#include "contact.h"
#include 
#include 
#include 
  
// 初始化通讯录
void InitContact(struct Contact* ps)
{memset(ps->data, 0, sizeof(ps->data));
    ps->size = 0;// 设置通讯录最初只有 0 个元素
}
  
  
// 帮助使用通讯录
void HelpContact()
{printf("各按键的使用:\n");
    printf("1. 添加好友 \n");
    printf("2. 删除好友 \n");
    printf("3. 查找好友信息 \n");
    printf("4. 修改好友信息 \n");
    printf("5. 显示好友信息 \n");
    printf("6. 对好友进行排序 \n");
    printf("7. 帮助使用通讯录 \n");
    printf("8. 关于通讯录 \n");
    printf("谢谢使用通讯录!\n");
  
}
  
// 关于通讯录
void AboutContact()
{printf("通讯录一般指在日常生活中用笔记录,也在手机,电脑,电子字典等电子产品中拥有这个功能。\n");
}
  
  
// 增加好友的电话,信息
void AddContact(struct Contact* ps)
{if (ps->size == Max)
    {printf("通讯录已满,无法增加!\n");
    }
    else
    {printf("请输入姓名:");
        scanf("%s", ps->data[ps->size].name);
        // 除了年龄,其他都是数组,直接用数组名
        printf("请输入年龄:");
        scanf("%d", &(ps->data[ps->size].age));
        // 年龄不是数组,则需要 &
        printf("请输入性别:");
        scanf("%s", ps->data[ps->size].sex);
        printf("请输入电话:");
        scanf("%s", ps->data[ps->size].tele);
        printf("请输入地址:");
        scanf("%s", ps->data[ps->size].addr);
        ps->size++;
        // 添加成功一个 1 好友,size 加 1,;printf("添加成功!\n");
    }
  
}
  
  
// 在删除,查找,修改的函数中均涉及查找到该好友才能进行
// 为了避免冗余,我们把查找的这个环节从函数中抽离出来
// 在函数中直接使用,就不会显得重复
  
static int Find_by_name(struct Contact* ps, char name[Max_name])
{
    int i;
    for (i = 0; i size; i++)
    {
        // 将要查找的好友姓名与通讯录中的好友进行比较
        if (0 == strcmp(ps->data[i].name, name))
        {
            // 若找到,返回其下标
            return i;
        }
    }
    // 若都循环,比对完了以后还没找到就返回 -1
    return -1;
}
  
  
// 删除好友信息
void DelContact(struct Contact* ps)
{
    int  j;
    char name[Max_name];
    printf("请输入删除好友的名字:");
    scanf("%s", name);
    //1. 查找要删除的人的位置
    int pos = Find_by_name(ps, name);
    // 调用函数进行查找,若找到,返回下标,若没找到,返回 -1;//2. 删除
    if (pos==-1)
    {printf("该好友不存在!\n");
    }
    else
    {
        // 删除数据
        for (j = pos; j size - 1; j++)
        {ps->data[j] = ps->data[j + 1];
            // 删除数据后,后面的元素位置都改变,向前移动一个位置;}
        ps->size--;
        // 删除一个好友,size-1.
        printf("删除成功!\n");
    }
}
  
  
// 查找指定好友信息
void SearchContact(struct Contact* ps)
{char name[Max_name];
    printf("输入要查找的好友姓名:");
    scanf("%s", name);
    int pos = Find_by_name(ps, name);
    if (pos ==-1)
    {printf("该好友不存在!\n");
    }
    else
    {printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");
        printf("%10s\t%4d\t%5s\t%12s\t%20s\n",
            ps->data[pos].name,
            ps->data[pos].age,
            ps->data[pos].sex,
            ps->data[pos].tele,
            ps->data[pos].addr);
    }
  
}
  
// 修改好友信息
void ModifyContact(struct Contact* ps)
{char name[Max_name];
    printf("请输入需要修改信息的好友姓名:");
    scanf("%s", name);
    int pos=Find_by_name(ps, name);
    if (pos == -1)
    {printf("该用户不存在!\n");
    }
    else
    {printf("请输入姓名:");
        scanf("%s", ps->data[pos].name);
        printf("请输入年龄:");
        scanf("%d", &(ps->data[pos].age));
        printf("请输入性别:");
        scanf("%s", ps->data[pos].sex);
        printf("请输入电话:");
        scanf("%s", ps->data[pos].tele);
        printf("请输入地址:");
        scanf("%s", ps->data[pos].addr);
        printf("修改成功!\n");
    }
  
}
  
  
// 显示出好友的基本信息
void ShowContact(const struct Contact* ps)
{if (ps->size == 0)
    {printf("通讯录为空!\n");
    }
    else
    {
        int i = 0;
        printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");
        for (i = 0; i size; i++)
        {
            printf("%10s\t%4d\t%5s\t%12s\t%20s\n",
                ps->data[i].name,
                ps->data[i].age,
                ps->data[i].sex,
                ps->data[i].tele,
                ps->data[i].addr);
                 
        }
    }
}
  
  
// 按照名字的首字母进行排序
  
int cmp_stu_by_name(const void* e1, const void* e2)
{return (strcmp(((struct Contact*)e1)->data->name, ((struct Contact*)e2)->data->name));
}
  
  
// 我们用 qsort()函数对我们的好友按照名字首字母进行排序
void SortContact(struct Contact* ps)
{qsort(ps->data, ps->size, sizeof(ps->data[0]), cmp_stu_by_name);
    printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");
    int i;
    for (i = 0; i size; i++)
    {
        printf("%10s\t%4d\t%5s\t%12s\t%20s\n",
            ps->data[i].name,
            ps->data[i].age,
            ps->data[i].sex,
            ps->data[i].tele,
            ps->data[i].addr);
    }
}

到此这篇关于 C 语言实现通讯录的详细代码的文章就介绍到这了。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计5205字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7975347
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...