C语言实践:基础通讯录实现

目录

一、通讯录基本功能

1.增加联系人    2.删除联系人    3.查找联系人    4.修改联系人信息

5.显示通讯录    6.排序

二、联系人信息格式

三、实现思路


一、通讯录基本功能

1.增加联系人    2.删除联系人    3.查找联系人    4.修改联系人信息

5.显示通讯录    6.排序

二、联系人信息格式

姓名+性别+年龄+地址+电话

三、实现思路

 1.第一步,我们为了让使用者可以知道我们通讯录的功能一个显示面板是必不可少的。直接printf即可。但使用者不可能只使用一次就不继续使用,这时就要用到do-while循环和switch语句了。代码如下。

int main()
{
	int a;
	do
	{
		//mun为菜单
		mun();
		printf("请输入对应功能的数字:");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			break;
		case 2:
			break;
		case 3:
			break;
		case 4:
			break;
		case 5:
			break;
		case 6:
			break;
		case 0:
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (a != 0);
}
void mun(void)
{
	printf("********************************************\n");
	printf("*******1.添加联系人       2.删除联系人*******\n");
	printf("*******3.查找联系人       4.修改联系人*******\n");
	printf("*******5.显示通讯录       6.排序通讯录*******\n");
	printf("*******            0.退出            *******\n");
	printf("********************************************\n");
}

效果如图所示:

这时,我们的菜单就做好了,我们知道一个联系人的信息有姓名、性别、年龄、地址、电话。如果我们用多个不同类型的数组去存储就太过麻烦了,我们可以使用结构体来存储一个联系人的信息,代码如下:

//创建一个存储联系人信息的结构体
struct context
{
	//姓名
	char name[20];
	//性别
	char sex[5];
	//年龄
	int age;
	//地址
	char site[50];
	//电话
	char phone[12];
};
//再创建一个结构体方便context类型数组的使用
struct con
{
	//MAX为一个常量,100。
	struct context p[MAX];
	//sz用于记录,在后续代码中有很大的用处
	int sz;
};

接下来,我们还需将cun进行初始化以确保代码运行正常,我们可以写一个初始化函数,代码如下

void rise(con* pc)
{
	//使用memset函数对cun进行初始化
	memset(pc->p, 0, sizeof(pc->p));
}

接下来,我们就可以按照通讯录的功能逐步写代码实现。

2.增加联系人:想要添加联系人,我们要先判断p数组中是否还有存储空间,总不能p数组已经存储了100个联系人信息,还添加吧。若通讯录中联系人信息未存满,则进行添加。代码如下:

void add(struct con* pc)
{
	//我们知道sz是用来计数的,因此我们可以用sz来判断是否存储满
	if (pc->sz == MAX)
	{
		printf("通讯录已存满,请删除一些联系人后重试\n");
		return;
	}
	else
	{
		printf("请输入姓名>");
		scanf("%s", pc->p[pc->sz].name);
		printf("请输入姓别>");
		scanf("%s", pc->p[pc->sz].sex );
		printf("请输入年龄>");
		scanf("%d", &pc->p[pc->sz].age );
		printf("请输入地址>");
		scanf("%s", pc->p[pc->sz].site );
		printf("请输入电话>");
		scanf("%s", pc->p[pc->sz].phone );
		pc->sz++;
	}
}

3.删除联系人:通常,我们一看到数组中的删除就会想到,将要删除的数的后一位向前移,覆盖掉要删除的数,后面的数重复这样的操作,从而达到删除这一个数的操作,且这样做数的存储顺序不会发生改变。代码如下:

void del(struct con* pc)
{
	char a[20];
	printf("请输入要删除联系人的姓名>");
	//因为a就是数组首元素的地址,所以不需要再取地址
	scanf("%s", a);
	//for循环遍历寻找
	int i;
	for (i = 0; i <= pc->sz; i++)
	{
		if (strcmp(pc->p[i].name, a) == 0)
		{
			//找到就跳出循环
			break;
		}
	}
	if (i == pc->sz+1)
	{
		printf("未找到要删除的联系人");
		re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值