C语言实现一个简单通讯录

通讯录和学生信息管理系统的基本功能部分实现一模一样。
来看看不一样的部分。

查找

通讯录需要实现根据联系人不同信息查找的功能,可以为每一种查找情况都封装一个查找函数,或者根据不同情况返回不同的比较结果进行查找。

为了使函数更加简短,我们将该功能分为三个函数。

//根据 mode 的不同获取不同比较方式的比较结果 
//mode: 1 通过姓名,2 通过职务,3 通过职称,4 通过电话,5 通过邮件 
int GetCmpRes(Person per, char* goal, int mode) {
	int cmp_res = -2;
	switch (mode) {
		case 1:
			cmp_res = strcmp(per.name, goal);
			break;
		case 2:
			cmp_res = strcmp(per.job, goal);
			break;
		case 3:
			cmp_res = strcmp(per.title, goal);
			break;
		case 4:
			cmp_res = strcmp(per.telephone, goal);
			break;
		case 5:
			cmp_res = strcmp(per.email, goal);
			break;
		default:
			break;
	}
	
	return cmp_res;
}
//查找并返回对应联系人所在下标,若联系人不存在,返回 -1
//可通过修改 mode 参数切换不同的查找方式 
int FindByMode(Person per_arr[], int length, char* goal, int mode) {
	int i, is_find = 0;
	for (i = 0; i < length && is_find == 0; i++) {
		int cmp_res = GetCmpRes(per_arr[i], goal, mode);
		if (cmp_res == 0) {
			is_find = 1;
		}
	}

	if (is_find == 0) {
		i = -1;
	} else {
		i -= 1;
	}
	
	return i;
} 
//查找联系人信息,可通过修改 mode 参数改变查找的方式 
void FindPerson(Person per_arr[], int length) {
	char* text[6] = {"", "姓名", "工作", "职务", "职称", "邮箱"}; 
	
	int mode;
	printf("你想通过什么方式查找?\n");
	printf("1.姓名 2.工作 3.职务 4.职称 5.邮箱\n@请输入操作号码>");
	scanf("%d", &mode); 
	if (mode < 1 || mode > 5) {mode = 1;}
		
	char goal[30];
	printf("请输入要查找的联系人的%s:", text[mode]);
	scanf("%s", &goal);
	
	int in = FindByMode(per_arr, length, goal, mode);
	if (in == -1) {
		printf("未找到改联系人!\n"); 
	} else {
		printf("通讯姓名\t工作职务\t工作职称\t电话号码\t电子邮件\n");
		printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", 
		       per_arr[in].name, per_arr[in].job, 
			   per_arr[in].title, per_arr[in].telephone,
			   per_arr[in].email);
	}
}

函数调用关系如下图:
在这里插入图片描述
运行效果
在这里插入图片描述
开发工具 Dev-C++。
源码下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值