C语言实战小项目——通讯录2.0

  


文章目录

  • 动态通讯录的实现
    • 一.通讯录的各项功能及主体框架
    • 1.通讯录的要求实现功能
    • 2.页面菜单
    • 3.通讯录的主体框架实现
    • 4.通讯录初始化及个人信息的表示
    • 二、功能函数的具体实现
    • 1.增加联系人的信息
    • 2.删除联系人的信息
    • 3.修改联系人的信息
    • 4.查找联系人的信息
    • 5.展示通讯录联系人信息
  • 整体代码展示
    • 1.test.c 通讯录主体框架测试文件
    • 2.contact.c 通讯录函数文件
    • 3.contact.h 宏定义及函数声明文件
  • 小结
  • 未完待续.......


动态通讯录的实现


——接上篇1.0版本静态通讯录的优化2.0版本

C语言实战小项目——通讯录1.0—— 博客入口


一.通讯录的各项功能及主体框架


??本次优化版本与上一次的1.0版本相比,改变了原有的固定内存存储通讯录联系人的方式。

??原来的存储联系人方式是我们规定一个数组存储1000个结构体进行存储联系人的各种信息,但是有时候我们用不了这么多的空间,没有那么多的联系人,那样我们开辟的内存空间就浪费了,所以这次我们的通讯录做了以下优化:

1.??通讯录我们开辟的动态内存空间默认最大的联系人数量是2个

2.??如果再添加联系人,我们将调整动态内存空间的大小,再次增加两个联系人的数量,这样极大的节约了空间的占有率。

3.??我们开辟的动态内存需要free ,防止内存泄漏的问题,所以在EXIT的功能后添加了DestroyContact函数来对开辟的空间进行释放。


1.通讯录的要求实现功能


0.退出菜单
1.添加联系人信息
2.删除指定名字的联系人信息
3.修改联系人的信息
4.查找好友的信息
5.展示通讯录联系人信息

??我们根据通讯录的各项功能进行编写页面菜单

2.页面菜单

void menu(){//打印通讯录菜单//0.退出菜单//1.添加联系人信息//2.删除指定名字的联系人信息//3.修改联系人的信息//4.查找好友的信息//5.展示通讯录联系人信息//6.对通讯录指定信息进行排序printf("*************************************************\n");printf("**********  ——欢迎来到通讯录菜单——  *********\n");printf("**********      0.退出菜单              *********\n");printf("**********      1.添加联系人信息        *********\n");printf("*********       2.删除联系人信息        *********\n");printf("*********       3.修改联系人信息        *********\n");printf("*********       4.查找联系人信息        *********\n");printf("*********       5.展示联系人信息        *********\n");printf("*************************************************\n");}


3.通讯录的主体框架实现


//将菜单的功能一一列举出来,以枚举的类型呈现enum{
	EXIT,
	ADD,
	DEL,
	MODIFY,
	SEARCH,
	SHOW,};int main(){int input = 0;//创建通讯录struct Contact con;  //Con就是通讯录,里面包含1000个人的信息,及sizeInitContact(&con);do{menu();printf("请选择功能:>");scanf("%d", &input);switch (input){case ADD:AddContact(&con);break;case DEL:DelContact(&con);break;case MODIFY :MotifyContact(&con);break;case SEARCH :SearchContact(&con);break;case SHOW:ShowContact(con);break;case EXIT:DestroyContact(&con);break;default:printf("选择错误,请重新输入!!\n");break;}} while(input);return 0;}


??我们用枚举类型将功能一一列举出来,同时每一个枚举成员也代表着对应的数字,我们在switch ...case 语句中也不用 case 1,case 2来记录每一功能对应的数字了,直接以case ADD,case DEL表示,更加直接了当。

4.通讯录初始化及个人信息的表示


#define _CRT_SECURE_NO_WARNINGS 1#define MAX 1000#define MAX_name 20#define MAX_tel 20#define MAX_sex 5#define MAX_addr 30#define DEFAULT_SZ 2struct  PeoInfor{char name[MAX_name];int age;char sex[MAX_sex];char tel[MAX_tel];char addr[MAX_addr];};//struct  Contact//{//	struct  PeoInfor date[MAX];  //  存放个人信息//	int size;                   //记录当前已有的元素个数/
相关文章