> 文章列表 > C语言实现通讯录(文件版)

C语言实现通讯录(文件版)

这篇文章详细介绍了如何使用C语言的文件操作来增强通讯录的功能。作者通过讲解保存和加载联系人信息,以及在读取时进行内存扩容的方法,展示了如何让程序具备持久化存储的能力。这种方法不仅提升了程序的实用性,还锻炼了对文件操作和动态内存管理的理解。比如,当通讯录中的联系人数量超过预设容量时,程序能够自动扩展内存,确保所有信息都被正确读取和显示,体现了对边界情况的周全考虑。这让我联想到,在其他项目中,比如照片管理或任务管理,文件操作同样可以用来实现数据的持久化存储,提升用户体验。此外,这篇文章还让我意识到,内存管理的重要性不仅在于及时释放内存,更在于在动态数据处理中如何灵活调整内存大小,避免资源浪费或不足。总之,这篇文章通过一个简单的通讯录例子,让我对C语言的文件操作和内存管理有了更深的理解,也激励我在未来项目中尝试更多类似的实用功能。

C语言实现通讯录(文件版)

C语言实现通讯录(文件版)

  • 一、学习完C语言文件,可以增加通讯录的以下功能
  • 二、分析和实现相应函数
  • 三、 程序运行结果

一、学习完C语言文件,可以增加通讯录的以下功能

学习完C语言的文件读写,我们又可以将通讯录增加以下功能:


1.当退出通讯录的时候,把已增加的联系人信息写到文件中。

2.当通讯录初始化的时候,加载(读取)文件里的信息到通讯录 ——(直接使用打印函数可以显示在屏幕上)

二、分析和实现相应函数

分析:

  1. 当我们退出通讯录的时候要实现通讯录的保存功能 (实现保存通讯录联系人信息到Contact.dat文件)——SaveContact

  1. 当我们再次运行通讯录并对通讯录进行增删查改的时候,我们就应该要实现将文件中的信息输出到运行框中显示出来——LoadContact

  1. 当我们实现LoadContact函数的时候,发现要在初始化通讯录函数中就要调用加载函数LoadContact

  1. 在使用LoadContact函数的时候,发现会有问题——如果文件中联系人的个数大于3(capacity),这时我们将文件读取到程序中这时发现就无法显示文件中所有人的信息。这时我们就要在LoadContact函数中先扩容,再读取。
  1. 我们发现很多地方要利用扩容,所以我们干脆实现一个扩容函数。

实现:

初始化函数中调用LoadContact

void InitContact( Contact* ps)
{assert(ps);ps->data = (PeoInfo*)malloc(default_sz * sizeof(PeoInfo));if (ps->data == NULL){perror("InitContact");return;}ps->size = 0;ps->capacity = default_sz;//把文件中已经存放的通讯录中的信息加载到通讯录中LoadContact(ps);
}

SaveContact函数(保存联系人信息到文件)

SaveContact(Contact* ps)
{assert(ps);//打开文件,以写的形式打开--(没有contact.dat的文件会自动创建一个)FILE* pf = fopen("Contact.dat", "w");if (pf == NULL){perror("SaveContact");return;}//写文件int i = 0;for (i = 0; i < ps->size; i++){fwrite(ps->data + i, sizeof(PeoInfo), 1, pf);}//关闭文件fclose(pf);pf = NULL;
}

LoadContact函数(读取文件信息到通讯录)

void LoadContact(Contact* ps){FILE* pf = fopen("Contact.dat", "r");if (pf== NULL){printf("LoadContact:");return;}//读取文件,存放到通讯录中PeoInfo tmp = { 0 };while (fread(&tmp, sizeof(PeoInfo),