C语言-动态内存管理-通讯录

一、通讯录的介绍:

1.通讯录的内容: 

1.保存联系人的信息
2.记录通讯中已经保存的联系人个数
3.记录通讯录当前的最大容量

2.通讯录的功能:

1.增加联系人
2.删除联系人
3.修改联系人
4.查找联系人
5.打印联系人
6.排序联系人

3.通讯录中联系人的信息:

姓名   性别   年龄   电话   地址

二、通讯录的创建:

通讯录由3个文件实现,分别是   contact.h、contact.c、test.c

(一)、在contact.h文件中

1.将4个头文件放在contact.h中,包括

C语言-动态内存管理-通讯录_第1张图片

2.定义所需要的全局变量,包括NAME_MAX、SEX_MAX、TELE_MAX、ADDR_MAX等等。

C语言-动态内存管理-通讯录_第2张图片

3.为了增加代码的可读性和可维护性,使用枚举,对命名进行封装,防止污染。

C语言-动态内存管理-通讯录_第3张图片

4.创建结构体,用来存放联系人的信息类型

C语言-动态内存管理-通讯录_第4张图片

 5.创建嵌套结构体,用来存放联系人的信息。为了节省内存空间,用动态方式开辟内存。

C语言-动态内存管理-通讯录_第5张图片

6. 进行相应的函数的声明

C语言-动态内存管理-通讯录_第6张图片

(二)、在contact.c文件中

1.首先引用contact.h头文件,再执行下面的函数操作。 

C语言-动态内存管理-通讯录_第7张图片

 2.用InitContact()函数,初始化通讯录中联系人的信息。用assert()函数避免空指针,将sz(人数)和capacity(容量)进行初始化。为了节省内存空间,用malloc()函数开辟动态内存。如果开辟内存失败,则用pepper()函数进行报错。如果开辟内存成功,则用memset()函数将data进行初始化。

C语言-动态内存管理-通讯录_第8张图片

 3.用AddContact()函数,增加通讯录中联系人的信息。用assert()函数避免空指针。如果容量满了,则用CheckCapacity()函数进行扩容。如果容量未满,就依次录入联系人的信息。

C语言-动态内存管理-通讯录_第9张图片

 补充:CheckCapacity()函数用来对内存进行扩容。当人数达到容量时,则用realloc()函数开辟内存。如果开辟内存失败,则用pepper()函数进行报错。

C语言-动态内存管理-通讯录_第10张图片

4.用PrintContact()函数,打印通讯录中联系人的信息。用assert()函数避免空指针。用for循环对联系人的信息依次进行打印。

C语言-动态内存管理-通讯录_第11张图片

5.用DelContact()函数,删除通讯录中指定联系人的信息。用assert()函数避免空指针。如果sz(人数)为0,则删除失败。先输入要删除的人的姓名,再用FindByName()函数找到这个人位置,然后用for循环进行删除。

C语言-动态内存管理-通讯录_第12张图片

 补充:FindByName()函数用来找到删除人的位置。首先对data进行for循环,再用strcmp进行比较,如果相同就意味着找到了,然后返回下标。若未找到则返回 -1 。

C语言-动态内存管理-通讯录_第13张图片

 6.用SearchContact()函数,查找通讯录中指定联系人的信息。用assert()函数避免空指针。 用FindByName()函数寻找要查找的人的位置,若能找到,则将下标存储在pos中,并在printf()函数中进行打印。

C语言-动态内存管理-通讯录_第14张图片

7.用ModifyContact()函数,修改通讯录中指定联系人的信息。先输入要修改的人的姓名,再用FindByName()函数找到这个人位置,然后输入要修改的人的信息,接着进行修改。
    

C语言-动态内存管理-通讯录_第15张图片

 8.用SortContact()函数,排序通讯录中联系人的信息。输入要排序的内容,对内容进行判断,然后用冒泡排序法进行排序。

C语言-动态内存管理-通讯录_第16张图片

 9.用DestroyContact()函数,销毁通讯录中所有联系人的信息。用free()函数对data开辟的内存进行回收,并将data置成空指针。再将capacity和sz设置成 0,就销毁成功了。 

C语言-动态内存管理-通讯录_第17张图片

 (三)、在test.c文件中

1.首先引用contact.h头文件,再执行下面的函数操作。 

C语言-动态内存管理-通讯录_第18张图片

2.创建menu()函数,用来生成通讯录的功能菜单。

C语言-动态内存管理-通讯录_第19张图片

3.创建test()函数,在test()函数中按顺序对通讯录进行相应功能的操作。先创建通讯录,再初始化通讯录的信息,接着进入do while循环,打印功能菜单,输入信息,用switch语句判断你要执行的功能。

C语言-动态内存管理-通讯录_第20张图片

4.创建主函数。

 C语言-动态内存管理-通讯录_第21张图片

三、通讯录的代码运行结果: 

C语言-动态内存管理-通讯录_第22张图片

你可能感兴趣的:(c语言)