目录
前提须知:
通讯录的结构:
通讯录的建立:
顺序表的重命名:
顺序表数据类型的更改:
使用通讯录结构体新名字,进行类型重命名的问题:
头文件的添加:
通讯录的初始化和销毁:
头文件部分:
源文件部分:
编辑
主函数部分:
添加联系人、删除联系人、修改联系人、查看通讯录、查找联系人:
头文件声明部分:
添加联系人:
源文件部分:
主函数部分:
删除联系人:
查找函数:
源文件部分:
主函数部分:
编辑
查看通讯录:
源文件:
图例:
主函数部分:
前提须知:
这是建立在之前顺序表的基础上完成的。
顺序表的简单介绍_明 日 香的博客-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 接收查找函数传来的下标,并且进行判断,判断成功则需要删除联系人不存在,失败则需要删除的联系人存在。
主函数部分:
查看通讯录:
- 查看通讯录其实就是打印通讯录
源文件:
- 这里是准备使用表格的形式进行打印
图例:
- 使用循环,进行以此的打印,类似于打印数组的每一个元素,只不过这个数组的每一个元素都是结构体,所以相当于打印数组中每一个结构体类型元素的结构体成员。