【C语言】通讯录的实现(文件版本)

我们已经实现了静态版本和动态增长的通讯录,动态增长的通讯录解决了内存问题,但是这俩种通讯录都是只有在程序的一次运行中数据存在,当我们关闭程序,重新运行时,之前存入通讯录中的数据都已经销毁了,为了使通讯录中的数据持久化,我们可以将通讯录中的联系人存放到文件中,这样当我们重新运行程序时,只要能实现从文件中导入联系人信息,就能查看之前存放的联系人信息:

基于动态增长版本的通讯录,我们只需要实现两个功能:

1️⃣ 在退出通讯录的时候把信息到保存到文件中

2️⃣在通讯录打开的时候,可以把文件中的信息加载到通讯录中

 把信息到保存到文件中

void SaveContact(Contact* pcon)
{
 int i = 0;
 FILE* pfWrite = fopen("contact.dat", "wb");
 if(pfWrite == NULL)
 {
  printf("保存信息:打开文件失败\n");
  return;
 }
 //保存信息
 for(i=0; i<pcon->sz; i++)
 {
  fwrite(pcon->data+i, sizeof(PeoInfo), 1, pfWrite);
 }
​
 //关闭文件
 fclose(pfWrite);
 pfWrite = NULL;
}

把文件中的信息加载到通讯录中

void LoadContact(Contact* pcon)
{
 PeoInfo tmp = {0};
 FILE* pfRead = fopen("contact.dat", "rb");
 if(pfRead == NULL)
 {
  printf("加载信息:打开文件失败\n");
  return;
 }
 //加载信息
 while(fread(&tmp, sizeof(PeoInfo), 1, pfRead))
 {
  CheckCapacity(pcon);
  pcon->data[pcon->sz] = tmp;
  pcon->sz++;
 }
​
 fclose(pfRead);
 pfRead = NULL;
}

把文件中的信息加载到通讯录中这一步添加到通讯录初始化函数中即可

void InitContact(Contact* pcon)
{
 assert(pcon);
 pcon->sz = 0;
 pcon->data = (PeoInfo *)calloc(DEFAULT_SZ, sizeof(PeoInfo));
 if(pcon->data == NULL)
 {
  printf("%s\n", strerror(errno));
  return;
 }
 pcon->capacity = DEFAULT_SZ;
  
 LoadContact(pcon); //初始化时直接读取

}

 完整代码:Project_23_4_21/Project_23_4_21 · 李斯啦果/我的代码 - 码云 - 开源中国 (gitee.com)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值