通讯录的思路讲解和代码实现

用C语言制作一个拥有添加,删除,查找,修改,排序,清空,打印功能的通讯录

用分模块的方法来实现这个通讯录,函数的声明,类型的声明放在一个.h文件中,函数的实现放在一个.c文件中,在主文件中来调用函数。

首先创建一个test.c文件用来测试并且实现通讯录的功能

通讯录需要显示一个菜单来让用户具体选择哪个功能,那么在test.c文件中就需要打印出来一个菜单,如下代码:

#include <stdio.h>

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

int main()
{
	//通讯录:1.add 2.del 3.search 4,modify 5.sort 6.empty 7.print 0.exit
	do
	{

		menu();
	} while (0);
	return 0;
}

接着就要让用户选择输入某个数组来使用通讯录的功能,这时就可以用一个switch开关来实现了,如下代码:

	int input = 0;
	do
	{
		menu();
		printf("请选择功能>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			break;
		case 2:
			break;
		case 3:
			break;
		case 4:
			break;
		case 5:
			break;
		case 6:
			break;
		case 7:
			break;
		case 0:
			break;
		default:
			printf("请重新输入\n");
			break;
		}
	} while (input);

在while循环的条件判断部分直接写input,这样选择输入0的时候就直接跳出循环了,输入其他数字可以继续使用通讯录的功能。

case后面跟着的都是数字,有时候调试代码的时候比较容易忘记这个数字表示的是什么意思,所以这个时候可以用创建一个枚举类型来定义对应的枚举常量。

创建一个contact.h文件来放类型的定义,函数的声明。

然后把枚举类型在里面进行声明

enum input
{
	Exit,
	add,
	sub,
	search,
	modify,
	sort,
	empty,
	print
};

 之后要在主文件中调用这个头文件

#include "contact.h"

同时可以把#include <stdio.h>这些库函数的引用都放到contact.h这个文件当中,这样要引用新的库函数时只需要在contact.h这个文件中添加就可以了。

这样switch开关中的代码就可以改成这样了:

		switch (input)
		{
		case add:
			break;
		case sub:
			break;
		case search:
			break;
		case modify:
			break;
		case sort:
			break;
		case empty:
			break;
		case print:
			break;
		case Exit:
			break;
		}

然后开始用函数去实现每一个函数的功能,首先是添加功能,在添加之前,还得需要一个空的通讯录,来存放添加进去的通讯人的数据,而通讯人的数据有姓名,年龄,性别,电话号码,地址这些数据,都是一些不同类型的值,这时可以声明一个结构体类型来包含这些成员

好,切到contact.h文件来声明一个结构体类型:

typedef struct People
{
	char name[20];
	int age;
	char sex[5];
	char phone[20];
	char address[30];
} People;

同时还对这个类型重命名了一下,方便后续使用这个结构体类型,这是需要考虑到通讯录存放数据多少的问题,如果address里面存放的内容放不下了,这是就需要对数组的大小进行更改,那这时就要先找到这个结构体类型才能更改了,如果代码写的比较多的话就会比较乱,所以可以用#define定义的标识符常量来定义这些值,以后要改的话就只需要找到#define就可以了

如下代码:

#define NameMax 20
#define SexMax 5
#define PhoneMax 20
#define AddressMax 30
typedef struct People
{
	char name[NameMax];
	int age;
	char sex[SexMax];
	char phone[PhoneMax];
	char address[AddressMax];
} People;

因为这里是不同类型的值的定义,所以用#define来定义而不用枚举类型来定义,因为枚举类型是用来列举相同类型的值的,比如前面的通讯录功能都是属于通讯录的功能一类的值

下一步,通讯录不只存放一个人的数据,所以需要用这个结构体类型来创建一个数组,假设这个通讯录可以存放1000个人的数据,同时还能记录其中已存放了多少个人

那么可以在主函数中这么写:

int main()
{
	//通讯录:1.add 2.del 3.search 4,modify 5.sort 6.empty 7.print 0.exit
	People contact[1000];
	int num;

对于这个通讯录和这个通讯人的数量,这两个变量可以两者之间是由联系的,那么此时就可以再声明一个结构体类型来包含这两个成员。

切到contact.h文件:

typedef struct Contact
{
	People people[1000];
	int num;
} Contact;

声明好这个通讯录类型之后,需要在主文件中用这个类型创建一个变量,同时对变量的内容进行初始化

int main()
{
	//通讯录:1.add 2.del 3.search 4,modify 5.sort 6.empty 7.print 0.exit
	Contact contact;
	InitialContact(&contact);

 切到contact.h文件声明函数:

//函数的声明

//通讯录初始化
void InitialContact(Contact* pc);

此时创建一个contact.c文件来实现函数的内容:

  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

闻 术

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

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

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

打赏作者

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

抵扣说明:

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

余额充值