C语言 ——— 将动态版本的通讯录实现为文件存储联系人模式

目录

前言

在退出通讯录之前

在运行通讯录之前 


前言

在这篇博客中,实现了动态版本的通讯录,接下来会增加函数,能用文件存储通讯录中的联系人

C语言 ——— 在控制台实现通讯录(增删查改、动态开辟内存空间)-CSDN博客


在退出通讯录之前

代码演示: 

//退出通讯录前,将联系人的信息保存到文件中
void SaveContact(Contact* con)
{
	//wb - 以二进制的形式写入数据
	FILE* pf = fopen("Contact.dat", "wb");

	//判断pf指针是否创建成功
	if (pf == NULL)
	{
		perror("SaveContact");
		return;
	}

	//写入数据
	for (int i = 0; i < con->sz; i++)
	{
		fwrite(con->date + i, sizeof(PeoInFo), 1, pf);
	}

	//关闭文件
	fclose(pf);
	pf = NULL;
}

代码验证:

在输入了联系人的信息后,查看当前代码目录:C语言 ——— 将动态版本的通讯录实现为文件存储联系人模式_第1张图片

因为存储的联系人的信息是以二进制的形式存储的,所以显示观看的时候是看不懂的 


在运行通讯录之前 

代码演示: 

//初始化时将文件中保存的信息加载到程序中
void LoadContact(Contact* con)
{
	//打开存储联系人信息的文件
	//rb - 以二进制的信息读文件
	FILE* pf = fopen("Contact.dat", "rb");

	//判断pf指针是否创建成功
	if (pf == NULL)
	{
		perror("LoadContact");
		return;
	}

	//读文件
	//先创建一个可以临时存放每一个联系人数据的结构体
	PeoInFo tmp = { 0 };

	//fread函数,读取到数据就返回1,没读取到数据返回0
	while (fread(&tmp, sizeof(PeoInFo), 1, pf))
	{
		//如果文件中存放的数据大于初始化时的数据,就要增容,判断增容是否成功
		if (CheckCapacity(con) == 0)
		{
			perror("CheckCapacity");
			return;
		}

		con->date[con->sz] = tmp;
		con->sz++;
	}


	//关闭文件
	fclose(pf);
	pf = NULL;
}

代码验证:

在上次退出通讯录前,已经存储了联系人的信息,所以运行通讯录时,直接打印所有联系人的信息,测试是否加载到了程序中:C语言 ——— 将动态版本的通讯录实现为文件存储联系人模式_第2张图片 

可以看到,成功将联系人的信息加载到了程序中 

你可能感兴趣的:(C语言)