C语言----通讯录系统的实现-文件版本

本文介绍了使用C语言实现通讯录系统,重点在于如何在退出时保存信息到文件以及启动时从文件加载信息。通过创建SaveContact和LoadContact函数,实现了文件的读写操作。在SaveContact函数中,打开文件、写入联系人信息并关闭文件;在LoadContact函数中,读取文件内容、检查容量并存储到程序的通讯录中。

通讯录的最新版本来啦,请注意查收~~~

在手机中的通讯录,与我们之前的两个通讯录版本相比,最大的区别是每次关掉程序或者关机重启,联系人的信息不会像在内存中的程序一样丢失,而是保存在了本地的硬盘里,这一次,我们就使用C语言中的文件功能对通讯录进行改进。

        总结一下,需要完成的功能为:在退出时保存信息到文件;打开时加载文件中的信息到程序。

目录

一、代码优化

        1.退出时保存信息

        (1)创建函数

        (2)保存信息

        (3)关闭文件

        2.打开程序时加载文件中的信息

        (1)创建读取函数

        (2)读取信息

         (3)关闭文件

三、文件代码 

        1.contact.h

        2.contact.c

        3.test.c

四、注意事项


一、代码优化

        1.退出时保存信息

                我们创建SaveContact函数用来将信息保存至文件中,将这个函数放在switch语句中的case选项下,先存放到文件中,再销毁程序中的通讯录。

// test.c
...
case EXIT:
    SaveContact(&contact);
    DestoryContact(&contact);
    break;
...

        (1)创建函数

                首先需要先打开文件,采用写入的方式,我们定义FILE类型指针,指向使用fopen打开的文件,并判断文件指针是否为空,即是否打开文件失败,失败就提示错误信息并退出函数。

        (2)保存信息

                 当打开文件成功后,就可以进行写入了,我们使用for循环进行逐个写入,使用fwrite写入文件,信息源为联系人列表,每次写入一个联系人信息所占的字节数,每次写入一个联系人信息,写入文件指针类型所指向的文件中。

        (3)关闭文件

                最后就是关闭文件了,使用fclose关闭文件,并将指针置空。

                每次使用文件指针后切记要关闭文件,并将指针置空,防止内存访问异常!

                函数代码如下:

// contact.c
void SaveContact(Contact* pc)
{
	// 打开文件
	FILE* pf = fopen("contact.dat", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	// 写文件
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		// 要写入的信息来源为联系人列表;每次写入一个联系人的信息大小;
		// 每次写入一个联系人信息;写入pf所指向的文件中
		fwrite(pc->data+i, sizeof(PeoInfo), 1,pf);
	}

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

        2.打开程序时加载文件中的信息

        加载文件就是指读取文件中的内容到程序中,我们创建LoadContact函数用来读取文件中的信息。

        需要注意的是,我们应该在程序初始化时读取文件的内容,而不是到用户选择功能时再进行读取。将读取文件的函数放在初始化函数中。

// contact.c
void InitContact(Contact* pc)
{
    ...
    LoadContact(pc);
}

        (1)创建读取函数

                a.读取文件

                        使用FILE类型指针指向使用fopen打开存放信息的文件"contact.dat",需要注意的是,这里应当使用"r"对文件进行读取。要记得进行判断是否打开成功~

        (2)读取信

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值