关于通讯录的实现

C++链表实现简单通讯录 通讯录简单介绍 通讯录这东西,相信大家日常生活中都会见到。我们可以联想一下,既然我们要实现通讯录,那么就要搞清楚通讯录里面有什么。这里面有联系人名字,联系人号码(这些是属性),还有简单的一些功能,比如说添加联系人,删除联系人,查找联系人,当你发现号码错误的时候,就需要修改联系人号码了(我们查找联系人一般都是根据名字来查找),这四个都是基本的功能,实现以上三个操作后,我们还可以浏览通讯录,看看通讯录... 阅读详情

涉及动态内存的开辟

结构体的声明

指针的传参应用

代码如下

头文件

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#define NAME 20
#define PHONE 20
#define ADDRESS 50
struct Person {
	char name[NAME];
	char sex;
	int age;
	char phoneNum[PHONE];
	char address[ADDRESS];
	char flag;   //标记,=1表示人被删除
}*ppsn;
void add_person(struct Person * ppsn);   //增加一个人
void del_person(struct Person * ppsn);   //删除指定人
void find_person(struct Person * ppsn);     //寻找指定人
void update(struct Person * ppsn);      //更新人信息
void show_all(struct Person * ppsn);    //显示所有人
void clear();                       //清空所有人
void sort_by_name(struct Person * ppsn);    //按名排序
void init(int size);        //初始化

引用

#include "add_list.h"
#include <stdio.h>
#include <stdlib.h>
//通讯录目前总人数
int sumCount = 0;
//动态开辟的大小
int sizeOfAdd = 0;
void init(int size)
{
	sizeOfAdd = size;
	ppsn = NULL;
	ppsn = (struct Person *)malloc(size * sizeof(struct Person));
}
void clear() {
	free(ppsn);
	ppsn = (struct Person *)malloc(sizeOfAdd * sizeof(struct Person));
	if (ppsn == NULL) {
		printf("清空失败");
	}
}
void add_person(struct Person * ppsn)
{
	ppsn += sumCount;
	if (ppsn != NULL) {
		printf("Please Enter Name: ");
		scanf("%s", ppsn->name);
		printf("Please Enter Sex: ");
		scanf(" %c", &(ppsn->sex));
		printf("Please Enter Age: ");
		scanf(" %u", &(ppsn->age));
		printf("Please Enter Tel: ");
		scanf(" %s", ppsn->phoneNum);
		printf("Please Enter Addr: ");
		scanf(" %s", ppsn->address);
		ppsn->flag = 0;
		sumCount += 1;
	}
}
void del_person(struct Person * ppsn)
{
	char name[NAME];
	printf("请输入删除人的姓名\n");
	scanf("%s", name);
	if (ppsn == NULL) {
		return;
	}
	int count = sumCount;
	for (; ppsn != NULL&&count; count--, ppsn++) {
		if (strcmp(ppsn->name, name) == 0 && !(ppsn->flag)) {
			printf("已经删除 %s %c %d %s %s\n", ppsn->name, ppsn->sex, ppsn->age, ppsn->phoneNum, ppsn->address);
			ppsn->flag = 1;
			return;
		}
	}

}
void show_all(struct Person * ppsn)
{
	int count = sumCount;
	while (ppsn != NULL && count--) {
		if (!(ppsn->flag))
			printf("%s %c %d %s %s\n", ppsn->name, ppsn->sex, ppsn->age, ppsn->phoneNum, ppsn->address);
		ppsn++;
	}
}

int cmp(const void *a, const void *b) {
	struct Person *pa = (struct Person *)a;
	struct Person *pb = (struct Person *)b;
	return strcmp(pa->name, pb->name);
}
void sort_by_name(struct Person * ppsn) {
	if (ppsn == NULL) {
		return;
	}
	qsort(ppsn, sumCount, sizeof(struct Person), cmp);
}
void find_person(struct Person * ppsn) {
	char name[NAME];
	printf("请输入删除人的姓名\n");
	scanf("%s", name);
	if (NULL == name || ppsn == NULL) {
		return;
	}
	int count = sumCount;
	for (; ppsn != NULL && count; count--, ppsn++) {
		if (strcmp(ppsn->name, name) == 0 && !(ppsn->flag)) {
			printf("%s %c %d %s %s\n", ppsn->name, ppsn->sex, ppsn->age, ppsn->phoneNum, ppsn->address);
			return;
		}
	}
	printf("没有找到\n");
}

void update(struct Person * ppsn) {
	char name[NAME];
	printf("请输入删除人的姓名\n");
	scanf("%s", name);
	if (NULL == name || ppsn == NULL) {
		return;
	}
	int count = sumCount;
	for (; ppsn != NULL && count; count--, ppsn++) {
		if (strcmp(ppsn->name, name) == 0 && !(ppsn->flag)) {
			printf("找到联系人,请依次输入姓名 性别 年龄 电话 地址,中间用空格隔开\n");
			scanf("%s %c %d %s %s", ppsn->name, &ppsn->sex, &ppsn->age, ppsn->phoneNum, ppsn->address);
			return;
		}
	}
	printf("没有找到\n");
}

主函数


#include "add_list.h"
#include <stdio.h>
void menu() {
	printf("**************************************\n");
	printf("********1.添加联系人信息 *************\n");
	printf("********2.删除联系人信息 *************\n");
	printf("********3.查找联系人信息 *************\n");
	printf("********4.修改联系人信息 *************\n");
	printf("********5.显示所有指定联系人信息******\n");
	printf("********6.清空所有指定联系人信息******\n");
	printf("********7.按名排序所有联系人**********\n");
	printf("********0.退出************************\n");
	printf("**************************************\n");
}

int main()
{

	printf("请选择你想创建的通讯录大小\n");
	int sizeOfAdd;
	scanf("%d", &sizeOfAdd);
	init(sizeOfAdd);
	int chose;
	do {
		menu();
		scanf("%d", &chose);
		switch (chose) {
		case 1:add_person(ppsn);
			break;
		case 2:del_person(ppsn);
			break;
		case 3:find_person(ppsn);
			break;
		case 4:update(ppsn);
			break;
		case 5:show_all(ppsn);
			break;
		case 6:clear(ppsn);
			break;
		case 7:sort_by_name(ppsn);
			break;
		default:break;

		}

	} while (chose);

	system("pause");
}

 

进阶C语言-通讯录的实现 关于通讯录的实现及完整代码! 阅读详情

相关推荐

通讯录项目的实现

此前我学习了顺序表的构建以及如何进行增删查改,这里是基于上述知识所创建的通讯录项目基于动态顺序表实现通讯录。通讯录的基本功能至少储存100个的通讯信息信息中包括:姓名,性别,年龄,电话,地址实现对联系人信息的增删查改和显示综上就是对通讯录项目的具体实现,大家想要查看所有具体代码可以点击下方git文章链接。

wxhdvd的博客 1968

通讯录的实现(三种方式)

通讯录的功能: 通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址。test .c (2)结构体的实现 在这儿我们需要创建两个结构体,一个用来存放人的信息:姓名、性别、年龄、电话、住址;另一个用来存放通讯录的信息。 contact.h (3)菜单选项功能实现 我们需要根据用户的需求进行选择,比如用户输入1,我们就知道他是要添加联系人,输入0,就是退出通讯录,在这儿我们可以用到枚举,将选择一一列举出来: contact.h test .c (4)全局变量的定义 为了能更好的对

2303_77100822的博客 954

java通讯录

java的swing写的一个通讯录,包含两个版本,一个是选项卡布局,一个是卡片布局,能将输入信息保存到文件中,并从文件中读取所有信息显示出来

C语言中文件fopen函数w+和w,a和a+的区别

w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。  w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。  a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)  a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该...

weixin_30471561的博客 3587

Y2JAVA阶段项目-在线通讯录

Y2JAVA阶段项目-在线通讯录[项目源码] 效果图: http://www.qingniaobbs.com/bbs/viewthread.php?tid=948&extra=

基于单片机的自动喷淋系统设计【毕业设计】

随着人民生活质量提高与生活节奏的加快,城市居民对于花草绿植的家庭培养与装饰需求增加,随之因浇灌植物的需要,智能浇花系统的市场逐渐扩大。现有自动浇花系统大部分只能通过设置固定浇水时间而难以实现适时、适量浇水,或在植物环境土壤含水量低时进行报警而并不能实际补水。为克服局限性而设计以单片机为控制中心的自动浇花系统。通过湿度传感器检测目标植物环境土壤湿度数据,再经ADCO832将其放大转换为数字量,由单片机读取输出向LCD1602 显示屏显示并通过比对键盘向单片机所设置的湿度范围而利用中断服务程序进行补水需求判断。

qq_48771816的博客 1711

通讯录的实现(初版)

通讯录的实现(超详细教程)一遍就懂!!!

m0_62692838的博客 1946

07. 基础实战篇 - STP的基本配置

STP(生成数协议)是一个用于在局域网中消除环路的协议,他的标准是IEEE802.1d。STP通过强制使部分冗余链路处于阻塞状态,其它链路处于转发状态,将环形网络结构修剪成无环路的树形网络结构。可实现消除环路,当处于转发状态的链路不可用时,STP重新配置网络,并激活合适的备用链路状态,恢复网络连通性。

weixin_39868387的博客 7224

通讯录的简单实现

在结构体

ChaserZHY的博客 334

【OpenClaw 故障排查完全指南】

OpenClaw 故障排查指南摘要 本指南针对OpenClaw 2026.2.26版本常见问题提供解决方案,适用于Windows/Linux/macOS平台。 核心问题及修复方案: 飞书插件连接失败:删除冲突插件或重装OpenClaw Ollama认证错误:设置环境变量OLLAMA_API_KEY="ollama-local" 配置警告:可安全忽略的安全扫描提示 端口占用:查找并终止占用18789端口的进程 插件重复加载:清理重复插件目录 快速修复: 提供一键修复PowerShell脚本

weixin_37572294的博客 1万+

论文分享 - OctoMap八叉树建图原理

论文:OctoMap:An Efficient Probabilistic 3D Mapping Framework Based on Octrees。

一只废佐_的博客 2539

基于顺序表实现通讯录

我们之前实现顺序表的时候,顺序表储存的是整型类型的数据。我们要想实现通讯录的话,那么存储的类型应该是储存自定义类型的数据。这个自定义类型的数据应该是结构体。先在通讯录的头文件在定义通讯录的结构201020100int age;}peoInfo;因为通讯录的实现是基于顺序表的,要将顺序表中存放的数组类型改为结构体类型,也就是我们定义的通讯录结构体。int size;}SL;注意不要忘了头文件。下面就要在通讯录头文件中声明函数了,想一下。

GGDxianv的博客 1523

基因组注释(Annotation)

Annotation

hgz2020的博客 6488

通讯录的实现;

实现一个类似于手机通讯录的功能,可以输入每个联系人的姓名、年龄、性别、电话、地址;每输入一个联系人就显示出整个通讯录,可以根据联系人的各个内容进行排序,通讯录的大小是可变的;

qq_54029068的博客 1115

告别专业软件!用QGIS+GDAL免费搞定S-57电子海图,附全套符号库和样式文件

本文详细介绍了如何利用免费开源工具QGIS和GDAL处理S-57电子海图,包括数据转换、符号库配置和专业可视化方案。通过实战指南,用户无需依赖昂贵的商业软件,即可实现从S-57到SHP的转换及专业级海图制作,特别适合预算有限的个人和小型机构。

weixin_33701294的博客 391

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.5 RTC设备编写与实现

4. Linux kernel RTC子系统goldfish_rtc driver分析。电脑,会需要时间,还比如 我们的手机、平板,都需要时间;驱动基本就是应用层需要什么数据你给什么数据就行,基本必须实现的就是。3.2 Linux kernel RTC 设备描述符讲解。中看到他的具体实现,也可以根据他的寄存器描述直接在。5. 将驱动添加进kernel和测试RTC驱动。系统来说,时间是一个非常重要的功能;之类的函数接口,接下来我们就开始讲解如何写。,所以我们直接移植设备树即可。,他的寄存器很简单,你可以从。

DSMGUOGUO的博客 568

简单实现通讯录

文章目录实现通讯录1.分3个文件实现1.1contact.h(主要包含函数实现的一些头文件和声明)1.2contact.c(功能函数实现)1.3test.c(包含主函数)2.开始之前的准备工作2.1声明储存联系人的结构体2.3创建通讯录2.3初始化通讯录3.通讯录的基本功能实现(由各部分的函数实现)3.1添加联系人Add3.2删除联系人Delete3.3搜索联系人Search3.4修改联系人Modify3.5打印联系人Print3.6让联系人以某种方式排序Sort3.7退出通讯录Exit,并且销毁3.8菜单

m0_65148990的博客 1032

论deepseek软件底层原理

如处理医学文本时,将任务分配给擅长医学知识处理的专家,避免通用模块处理的低效性,极大提升计算效率与任务处理的针对性。教师模型复杂且强大,学生模型结构简单。协作处理:多模块协作时,建立数据流通与交互机制,各模块按顺序或并行处理数据,不断传递与更新中间结果,共同完成复杂任务。(一)输入处理与任务判断 输入预处理:接收输入数据,如用户文本提问,首先进行清洗,去除噪声数据、特殊字符等。任务分类:通过MoE架构“路由器”,依据输入数据特征,判断任务所属领域与类型,如文本分类、情感分析等,为后续处理模块选择提供依据。

欢乐打代码! 2738

通讯录的实现

当我们需要办一些业务时,需要录入我们的个人信息,我们的个人信息放在一个系统中,我们简称这个系统为通讯录,而这个通讯录可以存储我们的名字,性别,电话,地址....等等等。今天我们实现一个简单的通讯录。定义枚举是为了方便使用switch,枚举第一个元素以0为起始位置。//定义枚举,方便使用switch改变EXIT,//0ADD,//1DEL,//2SEARCH,//3MODIFY,//4SHOW,//5SORT//6通讯录需要存入的数据有名字,性别,电话,地址,因此来定义类型。//宏定义。

AAlykk的博客 5954

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【C语言】通讯录的实现

通讯录——不断优化之路

m0_73737103的博客 2901

IDEA的使用指南

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

《通讯录》思路及代码实现详解

打印一个菜单,提供用户选择功能;添加联系人信息;删除联系人信息;查询联系人信息;修改联系人信息;显示所有联系人信息;对所有联系人信息进行排序整理;删除所有联系人信息;操作完毕可选择退出。这些就是实现的通讯录的整体细节与模板,具体每个功能的具体实现思路及细节我们我会给大家一一实现与讲解。思路及代码均有。

weixin_67596609的博客 3251

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

通讯录的实现(详解)

记录一个人的基本信息,并且需要它可以实现增删查改等功能;

chaodddddd的博客 2350

C语言——通讯录的实现

进来轻松拿捏C语言通讯录的实现,讲解绝对到位,理解绝对透彻!!!

m0_64607843的博客 8677

c语言实现通讯录

以上为实现一个通讯录系统的大致过程。对于通讯录优化的过程中,大家记住结束程序时要释放内存防止内存泄漏。以上内容仅供参考如有雷同纯属巧合。//类型的声明int age;}PeoInfo;//个人信息//静态版本//{//存放100个人的信息// int sz;//记录通讯录存放的人的信息个数//}Contact;//动态版本//存放个人的信息int sz;//记录通讯录存放的人的信息个数//通讯录容量}Contact;//初始化通讯录//增加联系人//显示所有联系人。

hushuyuan0405的博客 1153

(Java)通讯录的实现

通讯录,我们每个人都基本用过,但是 怎样实现一个简单的通讯录呢???嗯哼 我的思路: 1、首先用户应进入一个操作界面。 2、用户选择去执行哪个项目操作,这时需要输入菜单上想要执行项目对应的序号 3、根据用户的选择,执行不同的操作(添加,删除,更新,查找联系人) 主函数代码实现: import javax.naming.NameNotFoundException; import java.util....

weixin_44945344的博客 3517

c语言: 实现通讯录

该通讯录要实现7个功能,1.增加联系人 2.删除指定联系人 3.查找联系人 4.修改联系人 5.显示联系人 6.清空联系人 7.以名字排序联系人以上就是我实现通讯录的具体思路和代码实现。

li209779的博客 1439
上一篇: C 语言自定义类型知识总结
下一篇: 关于java的回文判断
王翔乐
博客等级 码龄8年 6粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值