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

2021-01-21 06:31:54 浏览数 (1)

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

来看看不一样的部分。

查找

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

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

代码语言:javascript复制
//根据 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;
}
代码语言:javascript复制
//查找并返回对应联系人所在下标,若联系人不存在,返回 -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;
} 
代码语言:javascript复制
//查找联系人信息,可通过修改 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("%stt%stt%stt%stt%sn", 
		       per_arr[in].name, per_arr[in].job, 
			   per_arr[in].title, per_arr[in].telephone,
			   per_arr[in].email);
	}
}

函数调用关系如下图:

运行效果

开发工具 Dev-C 。

源码下载地址。

0 人点赞