通讯录思路

文章展示了如何使用C语言编写一个简单的通讯录管理系统,包括录入、删除、查找、修改和显示联系人信息等功能,以及对数据的排序和清空操作。结构体用于存储个人信息,宏定义限制了最大记录数,主函数通过菜单驱动用户交互,使用了memmove函数进行内存调整。
摘要由CSDN通过智能技术生成


该通讯录可存1000个人信息

1.菜单

打印通讯录功能菜单

void menu()
{
	printf("********************\n");
	printf("****1.添加 2.删除***\n");
	printf("****3.查找 4.修改***\n");
	printf("****5.显示 6.清空***\n");
	printf("****7.n排序8.退出***\n");
	printf("********************\n");
}

在这里插入图片描述

2.定义结构体并定义一个宏

定义一个值为值为1000的宏

#define max 1000

定义个人信息结构体

struct c
{
	char name[10];
	char sex[10];
	int age;
	char te[20];
	char residence[50];
};

在定义一个结构体,包含个人信息和录入人数,创造这个结构体变量a

struct b
{
	struct c form[max];
	int num;
}a;

3.主函数

将a初始化,创造一个变量i为选项,创造一个函数指针数组f这里的函数都是实现菜单里的功能

int main()
{
	struct b a = { 0 };
	int i;
	do {
		void (*f[8])(struct b* ) = { NULL,add,delet,seek,change,show,ck,p };
		menu();
		printf("put function option\n");
		scanf("%d", &i);
		if (i == 8)
			break;
		else if (i > 8 && i < 1)
			printf(" choose error\n");
		else
			f[i](&a);
	} while (i);
	return 0;
}

4.通讯录功能的实现

1.录入信息

void add(struct b* a)
{
	if (a->num > max)
	{
		printf("空间不可录入\n");
		return;
	}
	printf("输入名字\n");
	scanf("%s", a->form[a->num].name);
	printf("输入性别\n");
	scanf("%s", a->form[a->num].sex);
	printf("输入年龄\n");
	scanf("%d", &a->form[a->num].age);
	printf("输入phone\n");
	scanf("%s", a->form[a->num].te);
	printf("输入地址\n");
	scanf("%s", a->form[a->num].residence);
	a->num++;
	return;
}

2.删除个人信息

memmove是把&a->form[i + 1]为名的长为 sizeof(a->form[i]) * (a->num - i)的数组覆盖掉名为&a->form[i]数组的后 sizeof(a->form[i]) * (a->num - i)的空间

void delet(struct b* a)
{
	int i;
	i = check(a);
	if (i == -1)
	{
		printf("查无此人\n");
		return;
	}
	memmove(&a->form[i], &a->form[i + 1], sizeof(a->form[i]) * (a->num - i));
		a->num--;
}

后面会解释check函数

3.check检查是否有这个人

int check(struct b* a)
{
	int i;
	char name[20];
	printf("输入此人的名字");
	scanf("%s", name);
	for (i = 0; i < a->num; i++)
	{
		if (strcmp(name, a->form[i].name) == 0)
			return i;
	}
	return -1;
}

4.显示个人信息

void seek(struct b* a)
{
	int i;
	i = check(a);
	if (i == -1)
	{
		printf("查无此人\n");
		return;
	}
	printf("%-10s%-10s%-10s%-20s%-50s\n", "名字", "性别", "年龄", "phone number", "住址");
	printf("%-10s%-10s%-10d%-20s%-50s\n", a->form[i].name, a->form[i].sex, a->form[i].age,a->form[i].te, a->form[i].residence);
}

5.改变个人信息

void change(struct b* a)
{
	int i;
	i = check(a);
	if (i == -1)
	{
		printf("查无此人\n");
		return;
	}
	printf("输入名字\n");
	scanf("%s", a->form[i].name);
	printf("输入性别\n");
	scanf("%s", a->form[i].sex);
	printf("输入年龄\n");
	scanf("%d", &a->form[i].age);
	printf("输入phone\n");
	scanf("%s", a->form[i].te);
	printf("输入地址\n");
	scanf("%s", a->form[i].residence);
}

6.显示全部人信息

void show(struct b* a)
{
	int i;
	printf("%-10s%-10s%-10s%-20s%-50s\n", "名字", "性别", "年龄", "phone number", "住址");
	for(i=0;i<a->num;i++)
		printf("%-10s%-10s%-10d%-20s%-50s\n", a->form[i].name, a->form[i].sex, a->form[i].age, a->form[i].te, a->form[i].residence);
}

7.清空所有人信息

将a->num人数清零,再一次录入就会从结构体数组第一位开始录入覆盖掉原有信息

void ck(struct b* a)
{
	a->num = 0;
}

8.按照名字排序

void p(struct b* a)
{
	qsort(a->form, a->num, sizeof a->form[0], cmp);
}

cmp函数实现

int cmp(struct c* a,struct c* y)
{
	return strcmp(a->name, y->name)>0?1:-1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值