每日一图:
这里是目录
在上篇文章自定义类型:结构体篇中,我们详细的了解了结构体,那我们能不能用结构体来做一些事情呢?
可以,本篇文章将给大家讲解通讯录的实现方式。
1.通讯录的基本功能
那么要做一个通讯录,我们要了解通讯录中会包含哪些内容:
通讯录:
- 人的信息:姓名+年龄+性别+地址+电话
- 通讯录中可以存放100个人的信息
- 需要提供的功能:增加联系人,删除指定联系人,查找指定联系人的信息,修改指定联系人的信息,显示所有联系人的信息。
了解完通讯录的基本功能,我们就可以来实现一个简单的通讯录。
2.通讯录的实现
我们将创建3个文件,分别是:
test.c - 测试通讯录
contact.c - 通讯录的实现
contact.h - 函数的声明
2.1菜单框架
首先我们得先做一个通讯录菜单,用来实现我们上述提到的各种功能。
void menu()
{
printf("**************************************************\n");
printf("******* 通讯录 *******\n");
printf("******* 1.添加联系人 2.删除联系人 *******\n");
printf("******* 3.查找联系人 4.修改联系人 *******\n");
printf("******* 5.显示联系人 0.退出通讯录 *******\n");
printf("**************************************************\n");
}
int main()
{
int input = 0;
do
{
menu();//菜单
printf("请选择->");
scanf("%d", &input);
switch (input)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 0:
printf("退出通讯录\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
菜单的逻辑和之前讲解过的小游戏一致。
2.2结构体的定义和声明
通讯录里要包含人的信息,而人的信息有姓名+年龄+性别+地址+电话这几个部分构成,那么我们就得封装成一个结构体。
那么我们的结构体类型就得定义在头文件中(contact.h) 因为在其他文件中也可能使用到信息。
contact.h:
#pragma once
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
//人的信息
typedef struct PeoInfo//重命名为PeoInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char addr[ADDR_MAX];
char tele[TELE_MAX];
}PeoInfo;
那么我们的通讯录中如何才能放下100个人的信息?
我们回到test.c文件中,包含一下contact.h的头文件,然后在主函数中创建一个数组:
#include "contact.h"
PeoInfo data[100];
这样就可以存放100个人的信息了,光有信息还不行,我们还得知道我们的通讯录中放了多少个人的信息。
#include "contact.h"
//创建通讯录
PeoInfo data[100];
//表示通讯录当前放了多少个人的信息
int sz;
如果我们这样写,数据就会比较分散,那我们能不能把这些变量再封装成一个结构体呢?
当然可以,我们回到contact.h中:
#pragma once
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
//人的信息
typedef struct PeoInfo//重命名为PeoInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char addr[ADDR_MAX];
char tele[TELE_MAX];
}PeoInfo;
typedef struct Contact//重命名为Contact
{
PeoInfo data[MAX];//存放人的信息的
int sz;//当前已放信息的个数
}Contact;
这样我们就可以在主函数中创建Contact的结构体,结构体中包含了人的信息和存放个数。
2.3创建和初始化通讯录
我们需要细致的初始化,所以我们封装一个初始化函数来实现初始化功能。
test.c:
int input = 0;
//添加代码在input下方
//创建通讯录
Contact con;
//初始化通讯录
InitContact(&con);
contact.h:
void InitContact(Contact* pc);//函数声明
初始化函数的实现我们放在Contact.c中:
void InitContact(Contact* pc)
{
assert(pc);
pc->sz = 0;
memset(pc->data, 0, sizeof(pc->data));//初始化所有字节为0
}
接下来我们就可以开始实现功能了。
2.4添加联系人功能的实现
我们创建一个函数,里面包含添加联系人的功能,并在头文件中声明。
test.c:
case 1:
AddContact(&con);
break;
contact.h:
//添加联系人
void AddContact(Contact* pc);
功能的实现我们放在contact.c中:
void AddContact(Contact* pc)
{
assert(pc);
//判断通讯录是否为满
if (pc->sz == MAX)
{
printf("通讯录已满,无法增加\n");
return;
}
//增加联系人信息
printf("请输入名字->");
scanf("%s", pc->data[pc->sz].name);//数组名是地址,不需要&
printf("请输入年龄->");
scanf("%d", &(pc->data[pc->sz].age));//age是变量,需要&
printf("请输入性别->");
scanf("%s", pc->data[pc->sz].sex);
printf("请输入地址->");
scanf("%s", pc->data[pc->sz].addr);
printf("请输入电话->");
scanf("%s", pc->data[pc->sz].tele);
pc->sz++;
}
这样我们增加联系人的功能就实现了。
运行效果:
2.5显示通讯录中的信息
有了添加联系人功能,那我们接下来就做一个显示通讯录的功能,来测试我们的添加功能是否能正常实现。
一样是封装成一个函数:
test.c
case 5:
ShowContact(&con);
break;
contact.h
//显示通讯录的信息
void ShowContact(const Contact* pc);
contact.c
//只打印不会修改内容,所以最好加上const
void ShowContact(const Contact* pc)
{
assert(pc);
int i = 0;
//打印表头,宽度和下方一致,注意第二个为%-4s
printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字","年龄", "性别", "地址", "电话");
//打印数据
for (i = 0; i < pc->sz; i++)
{
//左对齐数据更美观
printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->data[i].name,
pc->data[i].age,
pc->data[i].sex,
pc->data[i].addr,
pc->data[i].tele);
}
}
运行效果:
2.6删除指定联系人
我们得先让用户输入一个名字,然后再在通讯录中查找用户输入的名字,暂不考虑同名情况。
删除的实现我们用一个最普通的方法:
代码如下:
test.c:
case 2:
DelContact(&con);
break;
contact.h:
//删除指定联系人
void DelContact(Contact* pc);
contact.c:
void DelContact(Contact* pc)
{
assert(pc);
char name[NAME_MAX] = { 0 };
//判断通讯录里是否有数据
if (pc->sz == 0)
{
printf("通讯录为空,无法删除\n");
return;
}
//删除
//找到要删除的人
printf("请输入要删除的人的名字->");
scanf("%s", name);
int i = 0;
int del = 0;//记录查找位置
//寻找通讯录中名字相同的信息,暂时不考虑同名情况
for (i = 0; i < pc->sz; i++)
{
//名字相等,找到了
if (strcmp(pc->data[i].name, name) == 0)
{
del = i;
break;
}
}
//删除
for (i = del; i < pc->sz - 1; i++);
{
pc->data[i] = pc->data[i + 1];
}
pc->sz--;
printf("删除成功\n");
}
运行效果:
可以看到,删除功能已经实现完成。
我们思考一下,后面的步骤:修改联系人和查找联系人都和删除联系人有一个共同的功能:查找,那我们不妨把查找功能封装成一个函数。
优化如下:
int FindByName(const Contact* pc, char name[])
{
assert(pc);
int i = 0;
//寻找通讯录中名字相同的信息,暂时不考虑同名情况
for (i = 0; i < pc->sz; i++)
{
//名字相等,找到了
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
void DelContact(Contact* pc)
{
assert(pc);
char name[NAME_MAX] = { 0 };
//判断通讯录里是否有数据
if (pc->sz == 0)
{
printf("通讯录为空,无法删除\n");
return;
}
//删除
//找到要删除的人
printf("请输入要删除的人的名字->");
scanf("%s", name);
//通过名字查找
int ret = FindByName(pc,name);//找到返回下标,找不到返回-1
//判断是否找到
if (-1 == ret)
{
printf("要删除的人不存在\n");//找不到则提示找不到
return;
}
int i = 0;
//找到后进行删除
for (i = ret; i < pc->sz - 1; i++);
{
pc->data[i] = pc->data[i + 1];
}
pc->sz--;
printf("删除成功\n");
}
2.7查找联系人
contact.h:
//查找指定联系人
void SearchContact(const Contact* pc);
test.c:
case 3:
SearchContact(&con);
break;
contact.c:
//查找联系人
void SearchContact(const Contact* pc)
{
assert(pc);
char name[NAME_MAX] = { 0 };
printf("请输入要查找的人的名字\n");
scanf("%s", name);
int pos = FindByName(pc, name);
if (-1 == pos)
{
printf("未查找到指定的联系人\n");
return;
}
//找到了,打印信息
printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年龄", "性别", "地址", "电话");
printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->data[pos].name,
pc->data[pos].age,
pc->data[pos].sex,
pc->data[pos].addr,
pc->data[pos].tele);
}
FindByName函数:
int FindByName(const Contact* pc, char name[])
{
assert(pc);
int i = 0;
//寻找通讯录中名字相同的信息,暂时不考虑同名情况
for (i = 0; i < pc->sz; i++)
{
//名字相等,找到了
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
运行效果:
2.8修改指定联系人
修改指定联系人首先得查找到联系人,那么可以沿用上面的查找代码。
而修改信息其实就是我们一开始做的添加联系人的操作,那么我们同样也可以沿用上面的添加联系人的代码。
复制粘贴时注意修改下标
contact.h:
//修改指定联系人
void ModifyContact(Contact* pc);
test.c:
case 4:
ModifyContact(&con);
break;
contact.c:
void ModifyContact(Contact* pc)
{
assert(pc);
//查找信息
char name[NAME_MAX] = { 0 };
printf("请输入要修改的人的名字\n");
scanf("%s", name);
int pos = FindByName(pc, name);
if (-1 == pos)
{
printf("要修改的人不存在\n");
return;
}
//修改信息
//增加联系人信息
printf("请输入名字->");
scanf("%s", pc->data[pos].name);//数组名是地址,不需要&
printf("请输入年龄->");
scanf("%d", &(pc->data[pos].age));//age是变量,需要&
printf("请输入性别->");
scanf("%s", pc->data[pos].sex);
printf("请输入地址->");
scanf("%s", pc->data[pos].addr);
printf("请输入电话->");
scanf("%s", pc->data[pos].tele);
printf("修改完成\n");
}
运行效果:
3.总体代码
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
void menu()
{
printf("**************************************************\n");
printf("******* 通讯录 *******\n");
printf("******* 1.添加联系人 2.删除联系人 *******\n");
printf("******* 3.查找联系人 4.修改联系人 *******\n");
printf("******* 5.显示联系人 0.退出通讯录 *******\n");
printf("**************************************************\n");
}
int main()
{
int input = 0;
//创建通讯录
Contact con;
//初始化通讯录
InitContact(&con);
do
{
menu();//菜单
printf("请选择->");
scanf("%d", &input);
switch (input)
{
case 1:
AddContact(&con);
break;
case 2:
DelContact(&con);
break;
case 3:
SearchContact(&con);
break;
case 4:
ModifyContact(&con);
break;
case 5:
ShowContact(&con);
break;
case 0:
printf("退出通讯录\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
//初始化函数
void InitContact(Contact* pc)
{
assert(pc);
pc->sz = 0;
memset(pc->data, 0, sizeof(pc->data));
}
//添加联系人
void AddContact(Contact* pc)
{
assert(pc);
//判断通讯录是否为满
if (pc->sz == MAX)
{
printf("通讯录已满,无法增加\n");
return;
}
//增加联系人信息
printf("请输入名字->");
scanf("%s", pc->data[pc->sz].name);//数组名是地址,不需要&
printf("请输入年龄->");
scanf("%d", &(pc->data[pc->sz].age));//age是变量,需要&
printf("请输入性别->");
scanf("%s", pc->data[pc->sz].sex);
printf("请输入地址->");
scanf("%s", pc->data[pc->sz].addr);
printf("请输入电话->");
scanf("%s", pc->data[pc->sz].tele);
pc->sz++;
}
//查找函数
int FindByName(const Contact* pc, char name[])
{
assert(pc);
int i = 0;
//寻找通讯录中名字相同的信息,暂时不考虑同名情况
for (i = 0; i < pc->sz; i++)
{
//名字相等,找到了
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
//删除联系人
void DelContact(Contact* pc)
{
assert(pc);
char name[NAME_MAX] = { 0 };
//判断通讯录中是否有数据
if (pc->sz == 0)
{
printf("通讯录为空,无法删除\n");
return;
}
//删除
//找到要删除的人
printf("请输入要删除的人的名字:>");
scanf("%s", name);
//通过名字查找
int ret = FindByName(pc, name);//找到返回下标,找不到返回-1
if (-1 == ret)
{
printf("要删除的人不存在\n");
return;
}
int i = 0;
//删除
for (i = ret; i < pc->sz - 1; i++)
{
pc->data[i] = pc->data[i + 1];
}
pc->sz--;
printf("删除成功\n");
}
//查找联系人
void SearchContact(const Contact* pc)
{
assert(pc);
char name[NAME_MAX] = { 0 };
printf("请输入要查找的人的名字\n");
scanf("%s", name);
int pos = FindByName(pc, name);
if (-1 == pos)
{
printf("未查找到指定的联系人\n");
return;
}
//找到了,打印信息
printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年龄", "性别", "地址", "电话");
printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->data[pos].name,
pc->data[pos].age,
pc->data[pos].sex,
pc->data[pos].addr,
pc->data[pos].tele);
}
//打印联系人
void ShowContact(const Contact* pc)
{
assert(pc);
int i = 0;
//打印表头,宽度和下方一致,注意第二个为%-4s
printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字","年龄", "性别", "地址", "电话");
//打印数据
for (i = 0; i < pc->sz; i++)
{
//左对齐数据更美观
printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->data[i].name,
pc->data[i].age,
pc->data[i].sex,
pc->data[i].addr,
pc->data[i].tele);
}
}
void ModifyContact(Contact* pc)
{
assert(pc);
//查找信息
char name[NAME_MAX] = { 0 };
printf("请输入要修改的人的名字\n");
scanf("%s", name);
int pos = FindByName(pc, name);
if (-1 == pos)
{
printf("要修改的人不存在\n");
return;
}
//修改信息
//增加联系人信息
printf("请输入名字->");
scanf("%s", pc->data[pos].name);//数组名是地址,不需要&
printf("请输入年龄->");
scanf("%d", &(pc->data[pos].age));//age是变量,需要&
printf("请输入性别->");
scanf("%s", pc->data[pos].sex);
printf("请输入地址->");
scanf("%s", pc->data[pos].addr);
printf("请输入电话->");
scanf("%s", pc->data[pos].tele);
printf("修改完成\n");
}
contact.h
#pragma once
#include <stdio.h>
#include <string.h>
#include <assert.h>
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
//人的信息
typedef struct PeoInfo//重命名为PeoInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char addr[ADDR_MAX];
char tele[TELE_MAX];
}PeoInfo;
typedef struct Contact//重命名为Contact
{
PeoInfo data[MAX];//存放人的信息的
int sz;//当前已放信息的个数
}Contact;
//初始化通讯录
void InitContact(Contact* pc);
//添加联系人
void AddContact(Contact* pc);
//删除指定联系人
void DelContact(Contact* pc);
//显示通讯录的信息
void ShowContact(const Contact* pc);
//查找指定联系人
void SearchContact(const Contact* pc);
//修改指定联系人
void ModifyContact(Contact* pc);
以上就是我们简单的通讯录的实现方式,因为我们的通讯录还是比较简单的一个通讯录,所以在当前通讯录中只能存放100个人的信息,并且这些信息并没有存储到文件里面去,当我们下一次运行此程序的时候,数据就全部丢失了,这些信息都是存放在内存中的,并没有持久化的保存,那么持久化的保存方式后期我会给大家做详细的讲解。
动态版本
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
void menu()
{
printf("**************************************************\n");
printf("******* 通讯录 *******\n");
printf("******* 1.添加联系人 2.删除联系人 *******\n");
printf("******* 3.查找联系人 4.修改联系人 *******\n");
printf("******* 5.显示联系人 0.退出通讯录 *******\n");
printf("**************************************************\n");
}
enum Option//选项
{
//枚举常量,默认从0开始
EXIT,//0.退出通讯录
ADD,//1.添加联系人
DEL,//2.删除联系人
SEARCH,//3.查找联系人
MODIFY,//4.修改联系人
SHOW//5.显示联系人
};
int main()
{
int input = 0;
//创建通讯录
Contact con;
//初始化通讯录
InitContact(&con);
do
{
menu();//菜单
printf("请选择->");
scanf("%d", &input);
switch (input)
{
case ADD:
AddContact(&con);
break;
case DEL:
DelContact(&con);
break;
case SEARCH:
SearchContact(&con);
break;
case MODIFY:
ModifyContact(&con);
break;
case SHOW:
ShowContact(&con);
break;
case EXIT:
//退出通讯录之前销毁通讯录
DestroyContact(&con);
printf("退出通讯录\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
静态版本
初始化函数
//void InitContact(Contact* pc)
//{
// assert(pc);
// pc->sz = 0;
// memset(pc->data, 0, sizeof(pc->data));
//}
//动态版本
//初始化函数
void InitContact(Contact* pc)
{
assert(pc);
pc->sz = 0;
PeoInfo * ptr = (PeoInfo*)calloc(DEFAULT_SZ, sizeof(PeoInfo));
//判断是否开辟成功
if (ptr == NULL)
{
perror("InitContact::calloc");
return;
}
pc->data = ptr;
pc->capacity = DEFAULT_SZ;
}
//销毁通讯录
void DestroyContact(Contact* pc)
{
free(pc->data);
pc->data = NULL;
pc->capacity = 0;
pc->sz = 0;
pc = NULL;
}
//静态版本
添加联系人
//void AddContact(Contact* pc)
//{
// assert(pc);
// //判断通讯录是否为满
// if (pc->sz == MAX)
// {
// printf("通讯录已满,无法增加\n");
// return;
// }
// //增加联系人信息
// printf("请输入名字->");
// scanf("%s", pc->data[pc->sz].name);//数组名是地址,不需要&
// printf("请输入年龄->");
// scanf("%d", &(pc->data[pc->sz].age));//age是变量,需要&
// printf("请输入性别->");
// scanf("%s", pc->data[pc->sz].sex);
// printf("请输入地址->");
// scanf("%s", pc->data[pc->sz].addr);
// printf("请输入电话->");
// scanf("%s", pc->data[pc->sz].tele);
//
// pc->sz++;
//}
void check_capacity(Contact* pc)
{
//判断通讯录是否为满
if (pc->sz == pc->capacity)
{
//增加容量
PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo));
//判断增容是否成功
if (ptr == NULL)
{
perror("check_capacity::relloc");
return;
}
pc->data = ptr;
pc->capacity += INC_SZ;
printf("增容成功\n");
}
}
//动态版本
void AddContact(Contact* pc)
{
assert(pc);
check_capacity(pc);
//增加联系人信息
printf("请输入名字->");
scanf("%s", pc->data[pc->sz].name);//数组名是地址,不需要&
printf("请输入年龄->");
scanf("%d", &(pc->data[pc->sz].age));//age是变量,需要&
printf("请输入性别->");
scanf("%s", pc->data[pc->sz].sex);
printf("请输入地址->");
scanf("%s", pc->data[pc->sz].addr);
printf("请输入电话->");
scanf("%s", pc->data[pc->sz].tele);
pc->sz++;
}
//查找函数
int FindByName(const Contact* pc, char name[])
{
assert(pc);
int i = 0;
//寻找通讯录中名字相同的信息,暂时不考虑同名情况
for (i = 0; i < pc->sz; i++)
{
//名字相等,找到了
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
//删除联系人
void DelContact(Contact* pc)
{
assert(pc);
char name[NAME_MAX] = { 0 };
//判断通讯录中是否有数据
if (pc->sz == 0)
{
printf("通讯录为空,无法删除\n");
return;
}
//删除
//找到要删除的人
printf("请输入要删除的人的名字:>");
scanf("%s", name);
//通过名字查找
int ret = FindByName(pc, name);//找到返回下标,找不到返回-1
if (-1 == ret)
{
printf("要删除的人不存在\n");
return;
}
int i = 0;
//删除
for (i = ret; i < pc->sz - 1; i++)
{
pc->data[i] = pc->data[i + 1];
}
pc->sz--;
printf("删除成功\n");
}
//查找联系人
void SearchContact(const Contact* pc)
{
assert(pc);
char name[NAME_MAX] = { 0 };
printf("请输入要查找的人的名字\n");
scanf("%s", name);
int pos = FindByName(pc, name);
if (-1 == pos)
{
printf("未查找到指定的联系人\n");
return;
}
//找到了,打印信息
printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年龄", "性别", "地址", "电话");
printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->data[pos].name,
pc->data[pos].age,
pc->data[pos].sex,
pc->data[pos].addr,
pc->data[pos].tele);
}
//打印联系人
void ShowContact(const Contact* pc)
{
assert(pc);
int i = 0;
//打印表头,宽度和下方一致,注意第二个为%-4s
printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字","年龄", "性别", "地址", "电话");
//打印数据
for (i = 0; i < pc->sz; i++)
{
//左对齐数据更美观
printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->data[i].name,
pc->data[i].age,
pc->data[i].sex,
pc->data[i].addr,
pc->data[i].tele);
}
}
void ModifyContact(Contact* pc)
{
assert(pc);
//查找信息
char name[NAME_MAX] = { 0 };
printf("请输入要修改的人的名字\n");
scanf("%s", name);
int pos = FindByName(pc, name);
if (-1 == pos)
{
printf("要修改的人不存在\n");
return;
}
//修改信息
//增加联系人信息
printf("请输入名字->");
scanf("%s", pc->data[pos].name);//数组名是地址,不需要&
printf("请输入年龄->");
scanf("%d", &(pc->data[pos].age));//age是变量,需要&
printf("请输入性别->");
scanf("%s", pc->data[pos].sex);
printf("请输入地址->");
scanf("%s", pc->data[pos].addr);
printf("请输入电话->");
scanf("%s", pc->data[pos].tele);
printf("修改完成\n");
}
contact.h
#pragma once
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
#define DEFAULT_SZ 3//默认大小
#define INC_SZ 2//每次增容量
//人的信息
typedef struct PeoInfo//重命名为PeoInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char addr[ADDR_MAX];
char tele[TELE_MAX];
}PeoInfo;
静态版本(空间是固定的)
//typedef struct Contact//重命名为Contact
//{
// PeoInfo data[MAX];//存放人的信息的
// int sz;//当前已放信息的个数
//}Contact;
//动态版本
typedef struct Contact//重命名为Contact
{
PeoInfo* data;//指向存放人的信息的
int sz;//当前已放信息的个数
int capacity;//当前通讯录的最大容量
}Contact;
//初始化通讯录
void InitContact(Contact* pc);
//销毁通讯录
void DestroyContact(Contact* pc);
//添加联系人
void AddContact(Contact* pc);
//删除指定联系人
void DelContact(Contact* pc);
//显示通讯录的信息
void ShowContact(const Contact* pc);
//查找指定联系人
void SearchContact(const Contact* pc);
//修改指定联系人
void ModifyContact(Contact* pc);
以上就是本文的全部内容了,希望大家看完能有所收获。