【C语言小项目】通讯录(结构体数组实现)+像素级解说


请添加图片描述

前言

实践出真知!本文就带你用结构体相关的知识去实现一个C语言的小项目-通讯录。如果有兴趣的话也可以自己去编译器上跑跑看哦。

文章目录

整体思路与框架

在考虑做通讯录之前,我们得搞清楚我们想实现通讯录的哪些功能?1.添加联系人,2.删除联系人3.查找联系人。4.修改联系人。5.展示整个通讯录。6.对通讯录的练习人进行排序(本文是按照电话号的字典序来排的)
所以我们整体的框架就呈现出来了,程序包含三个文件:用test.c来测试整个程序的运行逻辑,用Contact.c来实现各个模块的功能,用Contact.h包含整个程序的头文件,宏,以及一些函数的声明等等。

模块化实现功能及其详解

通讯录信息的存储形式

通过定义一个结构体,里面包含一个联系人所有的相关信息。

typedef struct PeoInfor {
   
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char address[ADDRE_MAX];
	char tel[TEL_MAX];
}PeoInfor;

再定义一个结构体,里面包含联系人的个数和用一个结构体数组包含所有联系人的信息

typedef struct Contact {
   
	PeoInfor data[MAX];
	int size;
}Contact;

初始化通讯录

void InitContact(Contact* con)
{
   
	assert(con);
	con->size = 0;
	memset(con->data, 0, sizeof(con->data));
}

添加联系人

void Add_person(Contact* con)
{
   
	assert(con);
	if (con->size == MAX) printf("通讯录人数已满,添加失败\n");
	printf("下面请输入您要添加的联系人的信息\n");
	printf("请输入添加联系人的姓名:\n");
	scanf("%s", con->data[con->size].name);
	printf("请输入添加联系人的年龄\n");
	scanf("%d", &(con->data[con->size].age));
	printf("请输入添加联系人的性别\n");
	scanf("%s", con->data[con->size].sex);
	printf("请输入添加联系人的地址\n");
	scanf("%s", con->data[con->size].address);
	printf("请输入添加联系人的电话\n");
	scanf("%s", con->data[con->size].tel);
	con->size++;
}

查找某个人

int FindByname(Contact* con, char* name)
{
   
	assert(con);
	for (int i = 0; i < con->size; i++)
	{
   
		if (strcmp(name, con->data[i].name) == 0)
		{
   
			return i;
			break;
		}
	}
	return -1;
}
void Search_person(Contact* con)
{
   
	char name[NAME_MAX];
	printf("请输入您要查找的人的姓名:\n");
	scanf("%s", name);
	int i = FindByname(con, name);
	if (i == -1)
	{
   
		printf("要查找的人不存在\n");
		return;
	}
	printf("%-10s\t%-5s\t%-5s\t%-20s\t%-12s\n", "姓名", "年龄", "性别", "地址", "电话号码");
	printf("%-10s\t%-5d\t%-5s\t%-20s\t%-12s\n",
		con->data[i].name, (con->data[i].age),
		con->data[i].sex, con->data[i].address,
		con->data[i].tel);
}

删除联系人

void Del_person(Contact* con)
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值