通讯录程序的改进——文件备份

根据最近学习的文件的读写将之前的通讯录进行了一些改进,在程序开始之前加上了一个读入函数,程序末尾加上了一个写出函数。这样,在程序结束的时候,通讯录中的数据将会以文件的形式保存下来,下次再进入程序时,从文件中读取数据就能达到文件备份的效果了。


1、读入函数:

void read_data (Node* h)
{
	FILE *fp = fopen("address.txt","ab+");    //  打开"address.txt"文件,没有就创建一个
	if (fp == NULL)
	{
		perror ("fopen");
		return;
	}

	int count = 0;
	// 读入记录个数
	fread (&count, sizeof(int), 1, fp);
	printf ("记录的个数:%d\n", count);
	int i;

	Node* node = Create_address_list();
	for (i = 0; i < count; i++)
	{
		
		int len1;
		// 读入数据长度
		fread (&len1, sizeof(int), 1, fp);
		// 读入数据
		fread (&node->data, len1, 1, fp);
		Insert_Last(h, node->data);
	}
}
该函数在程序开始后就执行,从文件中读取数据加入到创建好的链表中。读取的格式大致为:读取记录的个数(int 型数据)、读取数据的长度(int 型数据)、读入数据(长度为前一个数据)。


2、写出函数

void write_data (Node* h)
{
	FILE *fp = fopen ("address.txt","wb+");
	if (fp == NULL)
	{
		perror ("fopen");
		return;
	}	
	Node *tmp = h->next;
	if (h->next == NULL)
		return;
	int len = 0;
	while(tmp)
	{
		tmp = tmp->next;
		len++;
	}
	fwrite (&len, sizeof(int), 1, fp);
	tmp = h->next;		
	do
	{	
		len = sizeof(tmp->data);
		fwrite (&len, sizeof(int), 1, fp);
		fwrite (&tmp->data, sizeof(tmp->data), 1, fp);
		tmp = tmp->next;
	}while (tmp);
	fclose(fp);
}
这边需要遍历一下链表来判断需要写的数据个数,然后按照之前读入的格式写入address.txt 文件中。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值