1.结构体定义
#define MAX_NAME 20
#define MAX_ADRESS 20
#define MAX_NUMS 11
#define MAX_SEX 8
typedef struct PeoInfor
{
char name[MAX_NAME];
char adress[MAX_ADRESS];
char nums[MAX_NUMS];
char sex[MAX_SEX];
}PeoInfo;
typedef struct Contants
{
PeoInfo* data;
int size;
int capacity;
}Contants;
Contants结构体中有一个data指针指向PeoInfo结构体,通过daata指针维护联系人信息。capaci为通讯录能存储的最大联系人数量,size是通讯录中联系人的数量。
2.通讯录初始化
创建一个结构体变量con,对con里的sz初始化为0,data数组也全初始化为1
void InitCon(Contant* pc)//对通讯录的初始化
{
assert(pc);
assert(pc);
pc->size = 0;
pc->capacity = 4;
pc->data = (PeoInfo*)malloc(sizeof(PeoInfo) * 4);
}
3.联系人信息的添加
将输入联系人信息的过程封装成一个函数
void ModInfo(Contant* pc,int i)
{
assert(pc);
printf("输入姓名:>\n");
scanf("%s", pc->data[i].name);
printf("输入地址:>\n");
scanf("%s", pc->data[i].adress);
printf("输入电话:>\n");
scanf("%s", pc->data[i].tele);
printf("输入性别:>\n");
scanf("%s", pc->data[i].sex);
}
void CheckCapacity(Contant* pc)
{
assert(pc);
if (pc->size == pc->capacity)
{
pc->capacity *= 2;
pc->data = (PeoInfo*)realloc(pc->data, sizeof(PeoInfo) * (pc->capacity));
}
}
void AddConPeoInfo(Contant* pc)
{
assert(pc);
CheckCapacity(pc);
ModInfo(pc, pc->size);
pc->size++;
}
4.查找联系人
通过输入联系人的姓名,遍历数组查找,找到返回其在data数组中的下标,找不到返回-1
int FindConPeoInfo(Contant* pc)
{
assert(pc);
if (pc->size == 0)
{
printf("联系人数量为0,不能搜索\n");
return -1;
}
printf("输入联系人姓名\n");
char name[MAX_NAME] = { 0 };
scanf("%s", name);
int i = 0;
for (i = 0; i < pc->size; i++)
{
if (strcmp(name, pc->data[i].name) == 0)
return i;
}
return -1;
}
5.删除联系人
输入联系人姓名,找到联系人姓名之后将后面的数据向前覆盖,最后把sz-1
void DeleConPeoInfo(Contant* pc)
{
assert(pc);
if (pc->size == 0)
{
printf("无法删除,联系人数量为0\n");
return;
}
int ret = FindConPeoInfo(pc);
if (ret != -1)
{
int j = ret;
for (j = ret; j < pc->size - 1; j++)
{
pc->data[j] = pc->data[j + 1];
}
pc->size--;
printf("删除联系人成功\n");
}
else
{
printf("删除联系人不存在\n");
return;
}
}
6.展示信息
void ShowConPeoInfo(Contant* pc)
{
assert(pc);
printf("%-10s\t%-15s\t%-13s\t%-5s\n",
"姓名", "地址", "电话", "性别");
int i = 0;
for (i = 0; i < pc->size; i++)
{
printf("%-10s\t%-15s\t%-13s\t%-5s\n",
pc->data[i].name, pc->data[i].adress, pc->data[i].tele, pc->data[i].sex);
}
}
7.销毁通讯录
void Destory(Contant* pc)
{
assert(pc);
if (pc->capacity == 0)
return;
pc->size = 0;
pc->capacity = 0;
free(pc->data);
pc->data = NULL;
}