通讯录实现(其三)

在前两篇对通讯录以静态数组和动态数组的形式实现以后,还想要对该项目进一步优化。想把之前输入过的联系人信息存下来,在下次需要打开时,直接读取之前的文件即可,不需要再次输入重复的信息。
本次优化的点在于,文件的加载和存档:

  • 文件加载:在初始化阶段完成。
  • 文件存档:在退出程序时完成。(退出异常时可能导致存档失败)

因为大部分代码都是相同的,所以本篇博客并不将所有的代码附上,若有需要,可以点击下面的链接:
静态数组实现:https://blog.csdn.net/hb_key/article/details/83213597
动态数组实现:https://blog.csdn.net/Hb_key/article/details/83348841

在此只将优化的部分代码附上:

static void Save(pContact pCon)
{
	int i = 0;
	FILE *fp = NULL;
	assert(pCon);
	fp = fopen("PeoInfo.dat", "wb");
	if (fp == NULL)
	{
		perror("Error for fwrite");
		exit(EXIT_FAILURE);
	}
	for (i = 0; i < pCon->size; i++)
	{
		fwrite(pCon->data + i, sizeof(PeoInfo), 1, fp);
	}
	fclose(fp);
	fp = NULL;
}

static void Load(pContact pCon)
{
	FILE *fp = NULL;
	PeoInfo tmp = { 0 };
	assert(pCon);
	fp = fopen("PeoInfo.dat", "rb");
	if (fp == NULL)
	{
		fp = fopen("PeoInfo.dat", "wb");
		perror("Error for fread");
		exit(EXIT_FAILURE);
	}
	while (fread(&tmp, sizeof(PeoInfo), 1, fp))
	{
		if (Check_Capacity(pCon) == 0)
		{
			printf("Load PeoInfo failure!\n");
			exit(EXIT_FAILURE);
		}
		pCon->data[pCon->size] = tmp;
		pCon->size++;
	}
	fclose(fp);
	fp = NULL;
}

需要注意的是,在初始化通讯录时,要调用static void Load(pContact pCon)函数。

猜你喜欢

转载自blog.csdn.net/Hb_key/article/details/83349381
今日推荐