数据结构之实现“通讯录”

                                               大家先赞后看,养成好习惯

你们的点赞和关注还有收藏就是我的动力!!!

目录

前言

一、通讯录文件的创建和联系人结构体定义

1.1 文件创建

1.2 联系人结构体定义

二、通讯录的功能实现

2.1通讯录初始化

2.2通讯录销毁

2.3添加联系人

2.4删除联系人

2.5查找联系人(包含显现联系人)

2.6修改通讯录

2.7展示通讯录

2.8菜单的创建 (与扫雷、猜数字相似)

三、使用通讯录储存联系人

四、结合文件操作来储存信息

五、代码展示

5.1通讯录头文件

5.2通讯录源文件 

总结


前言

“通讯录”是基于顺序表的基础上实现的项目,要熟悉顺序表才比较容易看懂和完成通讯录项目。在这个博客里面不会来介绍之前的东西,之前没看懂的可以到这【数据结构之“顺序表”】-优快云博客

一、通讯录文件的创建和联系人结构体定义

1.1 文件创建

加上之前顺序表的两个文件一共是五个文件。

test.c是实现联系人储存的文件,contact.c是通讯录的源文件,contact.h是通讯录的头文件,seqlist.c和seqlist.h是之前的顺序表的源文件和头文件。(源文件是功能实现的代码,头文件是用来包含一些头文件和定义一些东西)

1.2 联系人结构体定义

我们这里的联系人信息包含:姓名、性别、年龄 、电话、地址

typedef struct PersonInfo//通讯录
{
	char name[Max_name];//姓名
	char gender[Max_gender];//性别
	int age;//年龄
	char tel[Max_tel];//电话
	char addr[Max_addr];//地址
}PeoInfo;//命名为PeoInfo

二、通讯录的功能实现

2.1通讯录初始化

我们就调用一下顺序表的初始化就可以了,因为在顺序表的arr中存放每一个结构体(也就是联系人的信息)就是PersonInfo。

//通讯录初始化
void contactInit(contact * con)
{
	//这里的con就是sl也就是一个结构体指针初始化为NULL
	//我们直接调用顺序表的初始化
	SLInit(con);//初始化
}

2.2通讯录销毁

销毁也同初始化,直接调用顺序表的销毁。

//通讯录销毁
void contactDestroy(contact* con)
{
	SLDestroy(con);//销毁
}

2.3添加联系人

也就是给结构体里面的人赋初值,然后调用一下顺序表的插入函数(头插、尾插都行)。

//添加通讯录联系人
void contactAdd(contact* con)
{
	PeoInfo info;//同SL sl;定义一个结构体,方便使用
	printf("请输入联系人姓名:\n");
	scanf("%s", info.name);
	printf("请输入联系人性别:\n");
	scanf("%s", info.gender);
	printf("请输入联系人年龄:\n");
	scanf("%d", &info.age);
	printf("请输入联系人电话:\n");
	scanf("%s", info.tel);
	printf("请输入联系人地址:\n");
	scanf("%s", info.addr);

	SLPushFront(con,info);//头插联系人
	printf("添加联系人成功!\n");
}

2.4删除联系人

删除联系人有很多方法,可以通过姓名、性别、年龄 、电话、地址 五种方法随便选择一种。

我这里演示的是通过姓名来删除联系人,剩下的几种大家可以自行尝试!!。

想法我们要遍历每一个结构体里面的info.name然后判断与要被删除的联系人姓名,然后返回下标进行了(顺序表本质就是一个数组,可以通过下标来找到),调用查找联系人返回下标函数,我们比较的是字符使用要用strcmp函数,然后调用一下顺序表指定位置的删除就可以了。

//查找联系人,并返回下标
int contactFindName(contact* con,char name[Max_name])
{
	//还可以通过其他来返回下标,地址,电话都行,要看传来的参数是什么。
	for (int i = 0;i < con->size;i++)
	{
		if (0 == strcmp(con->arr[i].name, name))//strcmp字符串比较函数
		{
			//找到了
			return i;
		}
	}
	//没找到
	return -1;
}

//
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值