栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】通讯录--动态增长版本&&文件版本(可保存到本地)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】通讯录--动态增长版本&&文件版本(可保存到本地)

✨ 写在前面

 哈喽 大家好
 作为一个初入编程的大学生,知识浅薄,但还是要学习大佬写一下前言滴(來)
 我的其他文章
       1.【C语言】字符串函数使用+模拟【上】
       2.【C语言】彻底搞明白C语言一大关卡—C指针【初阶】
       3.【C语言】字符串操作函数&&字符串查找&&内存操作函数【下】

 初入编程的世界 前方"路漫漫"️ 每天我们都要进步一点点
 希望分享知识的同时可以和你们一起进步

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

 

目录

1.动态通讯录

通讯录的初始化

增加联系人

 2.文件版本通讯录

初始化通讯录

 保存通讯录


1.动态通讯录

之前,完成了通讯录的静态版本

➡️➡️【C语言】通讯录--静态版本

不过静态版本存在一定的缺陷,我们定义的只可以存储1000个人的信息,并且如果存放的人数过少,会造成一定的空间浪费

所以我们考虑实现动态版本,可以对存放的空间进行扩容,这样减少了一定的空间浪费

而如果变成动态版本,定义的结构体就需要发生变化

静态数组改用成动态开辟空间! 

然后需要改动的就是

  1. 通讯录的初始化
  2. 增加联系人

通讯录的初始化

之前的静态版本 ,我们是这样初始化的:

定义了一个 data数组 然后再 初始化结构里利用memset直接把数组所有元素置0

 但是我们改成动态版本,没有定义静态数组,而是需要动态开辟一个数组

那么这个工作就需要在初始化接口函数里面实现

 如图所示:

        我们在InitContact函数里面 动态开辟了一个data数组

        然后给通讯录的最大容量一个默认值:DEFAULT_SZ --(宏定义为3)

        然后再用memset把动态开辟数组中的内容设置为0

增加联系人

静态通讯录版本中,增加联系人我们是这样做的

  1.  首先进行判断 是不是存满了
  2. 如果没满然后依次输入结构体数组sz位置的各个成员

但是动态的如何实现呢?

分析:

  1. 首先检查是不是需要扩容(是不是已经存放满了)
  2. 如果需要扩容,那么利用一个封装函数,realloc一下实现扩容
  3. 然后也是录入信息即可

 realloc进行扩大空间的时候 ,首先判断是不是扩容成功,如果扩容成功再把扩容成功的临时地址ptr 赋值给原来的空间地址-(pc->data)

这样 动态增长的通讯录就完成了!

 2.文件版本通讯录

如果文件的相关操作可以回去看一下这篇文章哦:

➡️【C语言】文件操作详解(保姆级教程)

上面我们把静态通讯录改成了动态版本

但是还存在一些问题,那就是,每一次运行文件都需要重新录入联系人信息

我们想要实现的功能:

  1. 保存输入的联系人信息
  2. 可以读取上一次输入的联系人信息

 那么如何实现呢?

首先我们考虑 需要修改哪些部分的接口

  1. 每一次运行程序,首先需要初始化,然后加载本地的文件到通讯录中
  2. 我们对通讯录进行增删改减之后 需要保存改动

初始化通讯录

初始化的时候,

        1.首先像动态版本一样,先动态开辟好初始空间

        2.然后建立一个临时结构体,利用fopen读取文件到临时结构体中,如果读取成功就赋值给我动态开辟好的通讯录里的当前位置

 

 保存通讯录

把目前的通讯录中data数组的每一个元素都保存到文件contact.dat中

然后只需要在退出的时候,调用一下保存函数接口就可以了

 

 这样 文件版本的通讯录就完成了(其他部分不用修改)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847697.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号