顺序表的应用——通讯录

44 篇文章 2 订阅
4 篇文章 0 订阅

目录

前提须知:

通讯录的结构:

通讯录的建立:

顺序表的重命名:

 顺序表数据类型的更改:

使用通讯录结构体新名字,进行类型重命名的问题:

头文件的添加:

小总结:

通讯录的初始化和销毁:

 头文件部分:

源文件部分:

​编辑

主函数部分:

添加联系人、删除联系人、修改联系人、查看通讯录、查找联系人: 

头文件声明部分:

 添加联系人:

源文件部分: 

主函数部分:

删除联系人: 

查找函数: 

源文件部分:

主函数部分:

​编辑

 查看通讯录:

源文件:

图例: 

 主函数部分:

修改联系人:

源文件部分: 

主函数部分: 

查找指定联系人: 

查找函数:

源文件:

主函数部分:

通讯录的界面优化:

 在主函数进行操作和美化界面:

菜单部分:

循环操作的基本框架: 

在do while 中输入op 以及使用switch进行分流调用通讯录的各个功能 

同时注意,别忘记定义通讯录和初始化通讯录 

初始化同时也有销毁通讯录 

随后按照菜单的顺序依次在switch的分流中输入函数 

效果: 



前提须知:

这是建立在之前顺序表的基础上完成的。

顺序表的简单介绍_明 日 香的博客-CSDN博客


通讯录的结构:

  • 如图所示:
  • 通讯录的结构是建立在顺序表上的,或者说顺序表内每一个元素其实都被一个结构体代替,这个结构体的内部成员是:姓名、性别、年龄、电话、住址。
  • 所以,我们这次的通讯录需要用到顺序表的各类操作,如头插、尾插、头删、尾删等。

通讯录的建立:

  •  在建立通讯录之前,我们首先建立两个文件,一个是通讯录的头文件,一个是通讯录的源文件。
  • 其中,使用通讯录的源文件,进行函数调用,调用顺序表的各类操作。
  • 且在通讯录的头文件中,进行通讯录结构体的建立。

↑  在通讯录的头文件中 建立 通讯录的结构体,并且为了使用方便,将通讯录 结构体 进行typedef重命名 为 CInfo 

顺序表的重命名:

  • 因为我们的通讯录底层还是需要使用顺序表进行完成的,所以我们在通讯录中重新定义顺序表的名字,以此方便我们进行查看。(在通讯录头文件中完成)
  • 同时顺序表的重命名,要使用顺序表的原名进行重命名
  • 顺序表的简单介绍_明 日 香的博客-CSDN博客 

 顺序表数据类型的更改:

  • 对顺序表中的类型进行更改,原先顺序表的空间地址类型需要进行改变,变为通讯录结构体类型
  • 同时,注意因为在通讯录头文件中,我们对通讯录结构体进行typedef重命名了,但是这里的类型重命名修改,要使用通讯录结构体的原名,否则会出错! 

使用通讯录结构体新名字,进行类型重命名的问题:

因为结构体中,字符和字符之间不能使用==进行比较是否相等! 

头文件的添加:

  • 分别在  顺序表的头文件   和  通讯录的源文件添加  通讯录的头文件 ! 

小总结:

通讯录的初始化和销毁:

 头文件部分:

  • contact* 是指通讯录结构体类型的指针,或者说是顺序表的指针类型,因为我们在通讯录的头文件中进行了顺序表的重命名
  • pcon是顺序表的地址,因为通讯录的底层是顺序表,或者说通讯录就是顺序表,所以pcon指向的是顺序表的空间地址! 
  • pcon相当于顺序表中的sl ——顺序表的简单介绍_明 日 香的博客-CSDN博客

源文件部分:

  • 在通讯录的源文件中,分别调用了顺序表头文件中的初始化和销毁函数,而后顺序表的头文件又调用到了顺序表的源文件。 

主函数部分:

 

添加联系人、删除联系人、修改联系人、查看通讯录、查找联系人: 

头文件声明部分:

 添加联系人:

  •  进行联系人的添加,需要按照通讯录的结构进行添加。

源文件部分: 

  • CInfo info;  前者是通讯录结构体重命名后的名字 ,后者是通讯录结构体在这个函数内创造的变量 
  • 进行在通讯录中插入数据,这里使用的是尾插
  • 注意,这里的pcon指向的是顺序表,因为之前将顺序表重新命名了,在通讯录头文件中
  • 注意,只有年龄不是字符数组类型,所以需要取地址符号&

主函数部分:

 

删除联系人: 

  • 在此之前我们先设定一个查找联系人是否存在的函数

查找函数: 

  • 因为字符不能直接使用==所以我们使用函数strcmp进行字符和字符之间的对比
  • pcon->size表示的是顺序表这个数组的大小,因为顺序表是数组,所以在进行数组循环时,是不能超过数组大小这个数的。
  • 解释一下,这里pcon->a[i].name 中 [i]的原因是:因为顺序表这个数组中的每一个元素都是一个结构体,从而构成了一个通讯录,所以就相当于这个下标位置的结构体中的name成员的内容。
  • return i;和return -1 ;前者是返回下标,后者是返回-1 因为数组是没有-1这个下标位置所代表的元素的。

源文件部分:

  • 删除联系人调用的是之前 顺序表源文件中的 任意位置删除数据 的函数 
  • 使用findiex 接收查找函数传来的下标,并且进行判断,判断成功则需要删除联系人不存在,失败则需要删除的联系人存在。

主函数部分:

 查看通讯录:

  • 查看通讯录其实就是打印通讯录

源文件:

  • 这里是准备使用表格的形式进行打印 
图例: 

 

  • 使用循环,进行以此的打印,类似于打印数组的每一个元素,只不过这个数组的每一个元素都是结构体,所以相当于打印数组中每一个结构体类型元素的结构体成员。 

 主函数部分:

修改联系人:

在修改联系人之前,我们需要知道修改的是哪一个联系人,且要修改的这个联系人是否存在?

而查找这个联系人是否存在,这里就需要使用到之前的查找函数。

且 修改的数据的位置 就是查找函数到的下标 位置,所以应该是对pcon->a[find ]进行修改 

源文件部分: 

最后进行修改成功的反馈 

主函数部分: 

查找指定联系人: 

这个查找指定联系人,本质其实就是确认查找的联系人是否存在,存在便打印出来。

输入需要查找的联系人名字,随后把名字字节传给之前创建好的查找函数。 

查找函数:

源文件:

主函数部分:

 


通讯录的界面优化:

 在主函数进行操作和美化界面:

菜单部分:

循环操作的基本框架: 

  • 设定op=-1 让我们输入一个数值,在do while中进行对于op的判定
  • op不是菜单栏中的非0序号则会有重新输入提示,op=0 则会进行菜单栏中的退出操作,所以 do while中的判定方式就是op!=0进行实施继续和退出 

在do while 中输入op 以及使用switch进行分流调用通讯录的各个功能 

同时注意,别忘记定义通讯录和初始化通讯录 

初始化同时也有销毁通讯录 

随后按照菜单的顺序依次在switch的分流中输入函数 

效果: 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值