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

本文详细介绍了如何使用C语言实现一个通讯录管理系统,包括通讯录的结构、功能和创建过程。通讯录由contact.h、contact.c、test.c三个文件实现,实现了增加、删除、修改、查找、打印、排序等功能。通过初始化、内存管理、查找和排序等操作,展示了通讯录系统的基本操作和内存管理策略。
摘要由CSDN通过智能技术生成

一、通讯录的介绍:

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中,包括<stdio.h>、<string.h>、<assert.h>、<stdlib.h>。

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

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

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

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

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

(二)、在contact.c文件中

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

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

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

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

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

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

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

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

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

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

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

 (三)、在test.c文件中

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

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

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

4.创建主函数。

 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值