C/C++之分文件写静态通讯录详解(保姆级教学)

静态顺序表实现简单的通讯录 一、通讯录实现要求: 实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人   二、基本思路:       根据题目的要求,我选 阅读详情

个人主页:点我进入主页

专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶

C语言刷题

欢迎大家点赞,评论,收藏。

一起努力,一起奔赴大厂。

目录

1. 前言

2.主函数

3.增加函数 

 4.位置查找函数

5.删除函数 

6.查找函数 

7. 修改函数

8.排序函数 

 9.头文件的展示


1. 前言

         在前面我们学习了自定义类型,其中包括结构体,位段,枚举,联合体,其中最有意思的是他们的内存对齐,想要学习的小伙伴们可以点击https://blog.youkuaiyun.com/Infernal_Puppet/article/details/133720624

进行学习,今天我们就来实现一下通讯录,后期我们还会讲动态通讯录,利用文件存储通讯录信息。通讯录包括 通讯录的增删查改排序,接下来让我们感受一下通讯录的实现把。

2.主函数

enum nums {
	退出,
	增加,
	查找,
	删除,
	修改,
	排序
};
void menu()
{
	printf("*************************\n");
	printf("***  1.增加   2.查找  ***\n");
	printf("***  3.删除   4.修改  ***\n");
	printf("***  5.排序   0.退出  ***\n");
	printf("*************************\n");
}
void init_adderstbook(Struct *pc)
{
	memset(pc->arr, 0, sizeof(pc->arr));
	pc->i = 0;
}
void print(Struct* pc)
{
	int i;
	printf("%-20s%-15s%-3s\n", "姓名", "电话", "年龄");
	for (i = 0; i <pc->i; i++)
	{
		printf("%-20s%-15s%-3d\n", pc->arr [i].name , pc->arr[i].phone , pc->arr[i].age );
	}
}
int main()
{
	Struct s;
	init_adderstbook(&s);
	while(1)
	{
		menu();
		int num;
		printf("请输入你想选择的序号:");
		scanf("%d", &num);
		int ret;
		switch (num)
		{
			case 增加:
				add(&s);
				print(&s);
				break;
			case 查找:
				finds(&s);
				break;
			case 删除:
				del(&s);
				print(&s);
				break;
			case 修改:
				mod(&s);
				print(&s);
				break;
			case 排序:
				qsort(s.arr, s.i, sizeof(s.arr[0]), mysort);
				print(&s);
				break;
			case 退出:
				return 0;
		}

	}

	return 0;
}

        这里面包括菜单函数,打印函数,结构体的初始化,还有一个枚举的定义,枚举主要用于switch case语句,由于我们要写的函数较多,容易忘记函数是什么,顺序是什么,我们就可以利用枚举进行定义。

3.增加函数 

void add(Struct *pc)
{
	assert(pc);
	if (pc->i + 1 == Max_Size)
	{
		printf("通讯录满了\n");
		return;
	}
	printf("请输入联系人的姓名:");
	scanf("%s", pc->arr[pc->i].name);
	printf("请输入联系人的电话;");
	scanf("%s", pc->arr[pc->i].phone);
	printf("请输入联系人的年龄:");
	scanf("%d", &pc->arr[pc->i].age);
	pc->i++;
}

        由于我们要传结构体,分为传值和传址,我们利用传址进行函数的传参,主要原因是这样更高效,由于是指针,我们用assert判断是不是空指针,再判断通讯录是不是满了,然后进行数据的输入。

 4.位置查找函数

int find(Struct *pc,char name[])
{
	assert(pc);
	int i = 0;
	for (i = 0; i <= pc->i; i++)
	{
		if (strcmp(name, pc->arr[i].name) == 0)
		{
			return  i;
		}
	}
	return -1;
}

        在这里我们创建了一个位置查找函数,这个函数主要是用于查找到name的位置,如果没有找到返回-1,找到返回所在的位置,这个函数主要用于删除函数和查找函数以及修改函数。

5.删除函数 

void del(Struct* pc)
{
	assert(pc);
	char name[50];
	printf("请输入你想删除人的名字\n");
	scanf("%s", name);
	int ret = find(pc, name);
	int i;
	if (ret != -1)
	{
		for (i = ret; i < pc->i; i++)
		{
			pc->arr[i] = pc->arr[i + 1];
		}
		pc->i--;
	}
}

         同样我们先判断是不是指针是不是空指针,然后进行想要查找的名字,利用find函数找到这个名字的位置,如果不是-1进行删除操作,也就是从这个位置开始,进行覆盖操作(前一个等于后一个直到结束),通讯录的人数减少一个,

6.查找函数 

void finds(Struct* pc)
{
	assert(pc);
	char name[50];
	scanf("%s", name);
	int ret = find(pc, name);
	if (ret != -1)
	{
		printf("%-20s%-15s%-3s\n", "姓名", "电话", "年龄");
		printf("%-20s%-15s%-3d\n", pc->arr[ret].name, pc->arr[ret].phone, pc->arr[ret].age);
	}
	else
		printf("没找到\n");
}

        先进行指针是不是空的判断,输入要查找的人的名字,利用find函数进行查找,如果有进行打印,没有则打印没有找到。

7. 修改函数

void mod(Struct* pc)
{
	assert(pc);
	char name[50];
	printf("请输入你想修改的名字:");
	scanf("%s", name);
	int ret = find(pc, name);
	if (ret != -1)
	{
		printf("请输入你修改后的信息\n");
		printf("请输入联系人的姓名:");
		scanf("%s", pc->arr[ret].name);
		printf("请输入联系人的电话;");
		scanf("%s", pc->arr[ret].phone);
		printf("请输入联系人的年龄:");
		scanf("%d", &pc->arr[ret].age);
	}
	else
		printf("没有此人\n");
}

        先进行指针是不是空的判断,输入想要修改的人的名字,利用find函数进行查找,找到后对其进行修改,没有找到则返回没找到。

8.排序函数 

        在这个函数中我们用到了qsort函数,qsort函数的参数是要排序的数组,排序几个元素,每个元素占几个字节,排序方式函数,想要学习的可点击qsort函数详细讲解以及利用冒泡排序模拟实现qsort函数-优快云博客,进行查看。

 9.头文件的展示

        由于我们是分文件写的,分为主函数文件,函数文件,函数声明文件,其中函数文件和主函数文件是.c文件,函数声明文件是.h文件,具体代码如下:

#pragma once
#define Max_Size 50
#include <stdio.h>
#include <assert.h>
#include <string.h>

struct  xinxi {
	char name[50];
	char phone[13];
	int age;
};
typedef struct  adderstbook {
	struct xinxi arr[Max_Size];
	int i;
}Struct;
void add (Struct *pc);
int find(Struct* pc,char name[]);
void del(Struct* pc);
void finds(Struct* pc);
void mod(Struct* pc);
int mysort(const void* e1, const void* e2);

        今天的内容就结束了,欢迎大家来三连;

C++实现简单的通讯录管理 C++实现的简单通讯录管理,适用于c++学习后的课程设计。 立即下载

相关推荐

C++编写的通讯录源程序(免费提供)

这是我初学C++时编写的简便通讯录MFC程序。主要功能包括联系人信息加载、保存、查找、修改、删除、添加以及翻阅,编译运行都已通过。现在免费上传,或许会给你点帮助。

C++结构体项目----通讯录管理系统

添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人:显示通讯录中所有联系人信息 删除联系人:按照姓名进行删除指定联系人 查找联系人:按照姓名查看指定联系人信息 修改联系人:按照姓名重新修改指定联系人 清空联系人:清空通讯录中所有信息 退出通讯录:退出当前使用的通讯录

hjl011006的博客 397

c++ 通讯录 c++c++ 通讯录

c++c++ 通讯录 c++c++ 通讯录 c++c+c++c++ 通讯录 + 通讯录 c++c++ 通讯录 c++c++ c++c++ 通讯录 通讯录 c++c++ 通讯录 c++c++c++c++ 通讯录 通讯录 c++c++ 通讯录 c++c+c++c++ 通讯录 + 通讯录 c++c++ 通讯录

C/C++动态实现可保存至系统文件的通讯录

用c/c++语言所写的一个通讯录小项目,增删查改基础练习

m0_62126248的博客 1893

c++简易通讯录

使用c++编写的一个简易通讯录工程文件,可以满足基本的增删查改和存储操作

通讯录 C++

通过C++实现通讯录功能 功能包括:添加,输出,查询,删除,保存并退出

C++实例:通讯录管理系统(完整)

本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人:显示通讯录中所有联系人信息 删除联系人:按照姓名进行删除指定联系人 查找联系人:按照姓名查看指定联系人信息 修改联系人:按照姓名重新修改指定联系人 清空联系人:清空通讯录中所有信息 退出通讯录:退出当前使用的通讯录

邹么的博客 490

瑞芯微RV1126平台人脸识别模型转换实战:从ONNX到RKNN的完整流程

本文详细介绍了在瑞芯微RV1126平台上,将人脸识别模型从ONNX格式转换为RKNN格式的完整实战流程。内容涵盖模型结构分析、RKNN-Toolkit环境搭建、量化数据集准备、核心转换脚本编写与参数解析,以及在设备端的部署测试与性能调优,旨在帮助嵌入式AI开发者高效完成模型转化,提升边缘设备上的人脸识别应用部署效率。

o5p6q的博客 570

通讯录管理系统<C/C++>(万字详解/文末源码)

1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人:显示通讯录中所有联系人信息 删除联系人:按照姓名进行删除指定联系人 查找联系人:按照姓名查看指定联系人信息 修改联系人:按照姓名重新修改指定联系人 清空联系人:清空通讯录中所有信息 退出通讯录:退.

兴趣使然的编程菜鸟 2627

C#与发那科机器人通信实战:从SDK配置到机械臂控制

本文详细介绍了如何使用C#与发那科机器人进行通信,从SDK配置到机械臂控制的完整实战流程。内容包括环境准备、通信连接建立、机械臂运动控制、异常处理与状态监控,以及高级功能实战,帮助开发者快速掌握工业机器人编程技术。

weixin_42524276的博客 459

基于ROS2的无人机野生动物巡查系统设计

自主巡检系统是嵌入式人工智能与机器人技术融合的关键应用方向,其核心在于多源感知融合、实时路径规划与端侧智能识别的协同实现。原理上依赖SLAM定位构建环境地图,结合栅格化建模与混合路径算法(如蚁群+BFS)达成全覆盖遍历;技术价值体现在资源受限平台下的确定性响应与时空对齐能力,支撑高鲁棒性野外作业。典型应用场景包括生态监测、禁飞区巡检及小尺度智能安防。本文围绕ROS2 Humble中间件架构、Livox激光雷达与MaixCAM视觉协同、YOLO11n INT8模型端侧部署等关键技术展开,突出嵌入式AI与实时控

weixin_30598047的博客 649

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学)

在前面我们写到过文件的打开与关闭用到了函数主要是fopen函数,参数是文件的文件名和打开方式,文件关闭函数fclose,参数是流,我们还讲到过流,今天我们讲解一些写文件与读文件函数以及对通讯录的改进还有一些文件的其他函数。今天主要包括将数据传入文件的函数,以及将文件中的内容传到程序中的函数,还有一些对于文件中的指针以及偏移量的函数fseek函数,ftell函数,rewind函数的讲解,异界对通讯录的改造.今天的内容就结束了。

Infernal_Puppet的博客 995

PCB压合原理与工艺全流程深度解析

PCB压合是多层印制电路板制造中的核心工序,其本质并非简单物理叠加,而是高分子树脂流动、玻璃布应力释放、铜箔热膨胀及界面能调控的协同过程。理解压合原理,需掌握温度-压力-时间三维曲线动态关系;优化工艺流程,须兼顾叠板精度、热压参数匹配与冷却策略;关键影响因素如半固化片(PP)选型、铜箔表面处理、设备温场均匀性、结构对称性、环境湿度及操作手法,共同决定层间结合力、翘曲度与孔壁质量。本文围绕PCB压合原理、工艺流程、关键影响因素三大维度展开,融合IPC标准、实测数据与产线案例,为工艺工程师、NPI人员及设备维护

weixin_29191081的博客 257

C语言用结构体实现静态通讯录

1.初始化通讯录的函数可以看到我们这个自定义函数用了一个很巧妙的方法,用我们的结构体指针变量指向单个数据内存当中,用了库函数里的memset函数,初始化通讯录里的信息全为0。用来记录存放联系人数量的count结构体成员,也初始化为0,意味着我们一开始联系人的数量为0。注:memset函数的基本用法如果文章中有不对的地方欢迎指出,我都会虚心学习并改正,如果对源码有不理解的地方,也可以在评论区里询问我,我尽可能帮助解答!

comerun的博客 4032

【SPSS实战】手动实现Quade非参数协方差分析:从数据准备到结果解读

本文详细介绍了在SPSS中手动实现Quade非参数协方差分析的全过程。针对数据不满足正态性和方差齐性假设时,如何通过秩转换、回归调整残差,并最终利用Kruskal-Wallis检验完成组间比较。该方法为处理含协变量的非参数多组比较问题提供了清晰的实战解决方案,并探讨了其与标准Quade检验的异同及适用场景。

weixin_29306317的博客 356

国科大人工智能原理与算法-2024-第一次作业-雷震老师

1. 反射行动(比如从热炉子上缩回你的手)是理性的吗?它们是智能的吗? 2. 以下的计算机系统在何种程度上是人工智能的实例: - 超市条码扫描器 - 网络搜索引擎 - 语音激活的电话菜单 - 对网络状态动态响应的网络路由算法 3. 为什么进化会倾向于导致行为合理的系统?设计这样的系统想达到的目标是什么?

MatsumotoChrikk 2928

通讯录的实现(静态版本和动态版本和文件版本)

通讯录的实现(静态版本和动态版本和文件版本) 从为什们到怎么办手把手教你制作通讯录

wutongguo的博客 1992

RK+linux教程:RK3588 RGA硬件加速在YOLOv5图像预处理中的深度应用教程

摘要: 本教程深入解析了RK3588芯片的RGA硬件加速器在YOLOv5图像预处理中的应用。通过专用硬件设计,RGA支持图像缩放、边界填充等核心操作,结合零拷贝技术显著提升处理效率。重点分析了LetterBox算法的RGA实现,包括参数计算、边界填充和性能优化,并与传统CPU处理对比,展示了RGA在高分辨率图像处理中的优势。教程还提供了统一的预处理接口设计,便于在OpenCV与RGA方案间灵活切换,为RK3588平台的深度学习部署提供实用优化方案。

LXY_LOVE36的博客 977

C/C++静态通讯录

C/C++静态通讯录

敲代码嘞~的博客 411

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。 本篇文章将演示怎样在Unity中接入百度翻译,实现文本自动翻译的功能。

努力前行,总会成为自己心中的那道光 9059

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

我们天天在使用的通讯录原来是这样实现的呀——C语言实现简单静态通讯录和动态通讯录(基于顺序表)

⭐️前面的话⭐️ 大家好!在生活中大家一定离不开通讯录或类似功能的联系人列表,比如QQ好友列表,微信朋友列表。在这篇文章中我会详细介绍如何使用C语言来搭建一个简单的通讯录,包括静态通讯录和动态通讯录。

未见花闻的博客 1431

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【c语言进阶】常见的静态通讯录

不知道结构体的运用?快来学学静态通讯录吧!

睿的博客 1326

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C语言小项目——通讯录(适合刚学完C语言的初学者)

目录前言功能分析整体框架思路(佛挡杀佛法)前期实现准备初始化通讯录增(Add)删(Delete)查(Search)改(Modify)展示(Show)通讯录按名字排序(Sort)通讯录 前言 对于刚学完C语言理论知识的我们,一定需要做一些小项目来巩固我们所学过的理论知识,把理论转化为实践是重要的一步。学过不一定学会,学会不一定会敲代码。这篇通俗易懂的通讯录实现包你一看就会。看不会打我 此篇实现通讯录的静态版。适合刚学完C语言的初学者。 功能分析 可以实现通讯录的增、删、查、改以及排序和展示。 整体框架思路(佛

一些七零八碎的知识点 5842

C/C++ 通讯录程序构思与实现

完善了自己之前写的通讯录程序。程序用c语言进行编写,分为静态版本的v1版程序,和使用动态内存管理的v2版程序。 通讯录中存储的个人信息包括:姓名、性别、年龄、电话、住址。要求通讯录包含以下功能://1 添加联系人信息//2 删除指定联系人信息//3 查找指定联系人信息//4 修改指定联系人信息//5 显示所有联系人信息//6 清空所有联系人//7 以名字排序所有联系人此处调用了c语言库函数qsort,需要引用头文件。其函数声明为:))...

weixin_52603289的博客 1万+

c语言--通讯录的实现与ScreenToGif

c语言-通讯录

includeevey的博客 3361

静态通讯录详解

思路就是使用strcmp因为名字都是字符串,如果==0就返回i正好返回i的位置。查找联系人就简单许多,我们可以使用显示联系人代码去掉循环就可以查找联系人了。在此之前,我们要知道删除,查找我们都是需要找到联系人的位置。需要注意的是e1原本是void* 的,所以我们使用的时候需要把类型改为结构体也就是(PeoInfo*)这个sz-1是非常重要的,当del在4的时候就已经把5换到4了,所以删除的次数一定是-1的。提到排序我们就可以使用qsort函数,我们要注意的是里面的参数。当通讯录sz为0时一定是不能删除的。

m0_52126444的博客 481
上一篇: C/C++之自定义类型(结构体,位段,联合体,枚举)详解
下一篇: 我的创作纪念日———C/C++之动态内存管理
steventom
博客等级 码龄4年 720粉丝 80原创
评论 83
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

steventom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值