用C语言写一个通讯录(简易版)

 前言

使用C语言模拟一个通讯录,通讯录最大可以存储1000个人的信息。

存储的信息包括:姓名、性别、年龄、电话号码、地址

能实现的功能包括:1。新增联系人;2.删除联系人;3.查找联系人:根据姓名查找;4.修改联系人;5.排序联系人:将通讯录中的联系人根据姓名首字母的大小升序排列、6.打印通讯录中的联系人的所有信息、7.退出通讯录

一、通讯录菜单

设计一个菜单,向用户展示功能,用来和用户交互

void menu()
{
	printf("******************************\n");
	printf("**** 1.add      2.del    *****\n");
	printf("**** 3.search   4.modify *****\n");
	printf("**** 5.sort     6.print  *****\n");
	printf("**** 0.exit              *****\n");
	printf("******************************\n");
}

打印出来的效果 

二、通讯录主函数

函数主体使用do……while循环对输入的选项进行判断,当输入为0时跳出循环,程序结束。不为0时,用switch语句跳转到相对应的功能,代码如下:

void test()
{
	int input = 0;
	Contacts con;//创建通讯录

	do
	{
		menu();
		printf("请选择功能:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			break;
		case DEL:
			break;
		case SEARCH:
			break;
		case MODIFY:
			break;
		case SORT:
			break;
		case PRINT:
			break;
		case EXIT:
			break;
		default:
			printf("选项不存在,请重新选择\n");
			break;
		}

	} while (input);
}
int main()
{
	test();

	return 0;
}

三、枚举通讯录选项

switch语句会根据输入值,跳入不同的case语句中。上面代码为了可读性将case后面的数值替换成了对应的选项,无法达到switch的效果,因此使用枚举对选项赋值。

//枚举所有的选项数据
enum Option
{
	EXIT,//默认为0
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SORT,
	PRINT
};

四、定义通讯录和联系人

1.定义联系人的信息(结构体)

联系人的信息不是单一类型,使用结构体创建一个联系人类型

//一个联系人的身份信息数据
typedef struct PeoInfo
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
	int age;
}PeoInfo;

2.定义通讯录信息(结构体)

通讯录里面既要有联系人的身份信息,也要能让人知道保存联系人的个数。这里我们创建一个上述联系人的结构体类型的数组,用来保存联系人的身份信息

//通讯录的信息数据
typedef struct Contacts
{
	int count;//通讯录中联系人的总数
	PeoInfo data[MAX_CONTACTS];//通讯录中所有人的信息
}Contacts;

五、全局变量声明

为了方便日后对通讯录的修改和完善,将所有需要指定数组元素个数的数据进行声明

//定义的类型
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 20
#define MAX_CONTACTS 1000

六、通过姓名查找联系人的函数

//查找联系人的姓名,找到了返回下标,找不到返回-1
static int FindByName(Contacts* pc, char* pch)
{
	assert(pc && pch);
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		if (strcmp(pc->data[i].name, pch) == 0)
		{
			return i;
		}
	}
	return -1;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ljiyu0506

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值