c语言顺序表实现通讯录

1.结构体定义

#define MAX_NAME 20
#define MAX_ADRESS 20
#define MAX_NUMS 11
#define MAX_SEX 8

typedef struct PeoInfor
{
	char name[MAX_NAME];
	char adress[MAX_ADRESS];
	char nums[MAX_NUMS];
	char sex[MAX_SEX];
}PeoInfo;

typedef struct Contants
{
	PeoInfo* data;
	int size;
	int capacity;
}Contants;

Contants结构体中有一个data指针指向PeoInfo结构体,通过daata指针维护联系人信息。capaci为通讯录能存储的最大联系人数量,size是通讯录中联系人的数量。

2.通讯录初始化

创建一个结构体变量con,对con里的sz初始化为0,data数组也全初始化为1

void InitCon(Contant* pc)//对通讯录的初始化
{
	assert(pc);

	assert(pc);
	pc->size = 0;
	pc->capacity = 4;
	pc->data = (PeoInfo*)malloc(sizeof(PeoInfo) * 4);
}

3.联系人信息的添加

将输入联系人信息的过程封装成一个函数

void ModInfo(Contant* pc,int i)
{
	assert(pc);

	printf("输入姓名:>\n");
	scanf("%s", pc->data[i].name);
	printf("输入地址:>\n");
	scanf("%s", pc->data[i].adress);
	printf("输入电话:>\n");
	scanf("%s", pc->data[i].tele);
	printf("输入性别:>\n");
	scanf("%s", pc->data[i].sex);
}
void CheckCapacity(Contant* pc)
{
	assert(pc);

	if (pc->size == pc->capacity)
	{
		pc->capacity *= 2;
		pc->data = (PeoInfo*)realloc(pc->data, sizeof(PeoInfo) * (pc->capacity));
	}
}
void AddConPeoInfo(Contant* pc)
{
	assert(pc);

	CheckCapacity(pc);
	ModInfo(pc, pc->size);
	pc->size++;
}

4.查找联系人

通过输入联系人的姓名,遍历数组查找,找到返回其在data数组中的下标,找不到返回-1

int FindConPeoInfo(Contant* pc)
{
	assert(pc);

	if (pc->size == 0)
	{
		printf("联系人数量为0,不能搜索\n");
		return -1;
	}

	printf("输入联系人姓名\n");
	char name[MAX_NAME] = { 0 };
	scanf("%s", name);
	int i = 0;
	for (i = 0; i < pc->size; i++)
	{
		if (strcmp(name, pc->data[i].name) == 0)
			return  i;
	}
	return -1;
}

5.删除联系人

输入联系人姓名,找到联系人姓名之后将后面的数据向前覆盖,最后把sz-1

void DeleConPeoInfo(Contant* pc)
{
	assert(pc);

	if (pc->size == 0)
	{
		printf("无法删除,联系人数量为0\n");
		return;
	}
	int ret = FindConPeoInfo(pc);
	if (ret != -1)
	{
		int j = ret;
		for (j = ret; j < pc->size - 1; j++)
		{
			pc->data[j] = pc->data[j + 1];
		}
		pc->size--;
		printf("删除联系人成功\n");
	}
	else
	{
		printf("删除联系人不存在\n");
		return;
	}
}

6.展示信息

void ShowConPeoInfo(Contant* pc)
{
	assert(pc);

	printf("%-10s\t%-15s\t%-13s\t%-5s\n",
		"姓名", "地址", "电话", "性别");
	int i = 0;
	for (i = 0; i < pc->size; i++)
	{
		printf("%-10s\t%-15s\t%-13s\t%-5s\n",
			pc->data[i].name, pc->data[i].adress, pc->data[i].tele, pc->data[i].sex);
	}
}

7.销毁通讯录

void Destory(Contant* pc)
{
	assert(pc);

	if (pc->capacity == 0)
		return;
	pc->size = 0;
	pc->capacity = 0;
	free(pc->data);
	pc->data = NULL;
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值