#include "superlinkman.h"
void expand_capacity(Contact* p)
{
if (p->num == p->capacity)
{
int sz = p->capacity + INC_NUM;
Peo* tmp=(Peo*)realloc(p->s, sz*sizeof(Peo));
p->capacity += INC_NUM;
if (tmp == NULL)
{
printf("扩容失败!\n");
return;
}
p->s = tmp;
}
}
void init_contact(Contact* p)
{
p->num = 0;
p->capacity = INIT_NUM;
p->s= (Contact*)malloc(sizeof(Peo)*INIT_NUM);
assert(p->s != NULL);
memset(p->s, 0, sizeof(Peo)*INIT_NUM);
}
void meun()
{
printf("*************************\n");
printf("**** 1.添加联系人 ****\n");
printf("**** 2.删除联系人 ****\n");
printf("**** 3.查找联系人 ****\n");
printf("**** 4.修改联系人 ****\n");
printf("**** 5.显示联系人 ****\n");
printf("**** 6.清空联系人 ****\n");
printf("**** 0.退出 ****\n");
printf("*************************\n");
}
void Add(Contact* p)
{
expand_capacity(&con);
if (p->num < p->capacity)
{
printf("请添加联系人:>\n");
printf("姓名:");
scanf("%s", &p->s[p->num].name);
printf("年龄:");
scanf("%d", &p->s[p->num].age);
printf("性别:");
scanf("%s", &p->s[p->num].sex);
printf("联系方式:");
scanf("%s", &p->s[p->num].tel);
printf("地址:");
scanf("%s", &p->s[p->num].address);
p->num++;
printf("添加成功!\n");
printf("联系人数量:%d\n", p->num);
return;
}
}
void Del(Contact* p)
{
int ret = Find(&con);
int i = ret;
if (i == -1)
return;
char x[3];
printf("确定删除联系人吗?(Y/N)\n");
printf("请输入:");
scanf("%s", &x);
if ((0 == strcmp(&x, "Y")) && (i<p->num))
{
for (i = ret; i < p->num; i++)
{
p->s[i] = p->s[i + 1];
}
p->num--;
}
else if ((0 == strcmp(&x, "Y")) && (i == p->num))
{
p->num--;
}
else
printf("删除失败!\n");
printf("联系人数量:%d\n", p->num);
}
int Find(Contact* p)
{
char arr[10];
int i;
printf("请输入联系人姓名:>");
scanf("%s", &arr);
for (i = 0; i < p->num; i++)
{
if (strcmp(p->s[i].name, &arr) == 0)
{
printf("姓名:%s 年龄:%d 性别:%s 联系方式:%s 住址:%s\n", p->s[i].name, p->s[i].age, p->s[i].sex,
p->s[i].tel, p->s[i].address);
return i;
}
}
printf("没有此联系人!\n");
return -1;
}
void Gai(Contact* p) // 修改联系人
{
int i = Find(&con);
printf("姓名:");
scanf("%s", &p->s[i].name);
printf("年龄:");
scanf("%d", &p->s[i].age);
printf("性别:");
scanf("%s", &p->s[i].sex);
printf("联系方式:");
scanf("%s", &p->s[i].tel);
printf("地址:");
scanf("%s", &p->s[i].address);
printf("修改成功!\n");
printf("联系人数量:%d\n", p->num);
}
void Show(Contact* p)
{
name_sort(&con);
int i = 0;
for (i = 0; i < p->num; i++)
{
printf("姓名:%s 年龄:%d 性别:%s 联系方式:%s 住址:%s\n", p->s[i].name, p->s[i].age, p->s[i].sex,
p->s[i].tel, p->s[i].address);
}
printf("联系人数量:%d\n", p->num);
return 0;
}
void name_sort(Contact* p) //冒泡排序
{
int i = 0;
int j = 0;
if (p->num == 0)
{
printf("通讯录为空!\n");
return;
}
for (i = 0; i < p->num - 1; i++)
{
for (j = 0; j < p->num - i - 1; j++)
{
if (strcmp(p->s[j].name, p->s[j + 1].name)>0)
{
Peo tmp = p->s[j];
p->s[j] = p->s[j + 1];
p->s[j + 1] = tmp;
}
}
}
}
void Empty(Contact* p)
{
char x[3];
printf("确定清空联系人吗?(Y/N)\n");
printf("请输入:");
scanf("%s", &x);
if (0 == strcmp("Y", &x))
{
p->num = 0;
free(p);
p = NULL;
printf("清空成功!\n");
printf("联系人数量:%d\n", p->num);
return 0;
}
else
return 0;
}
void expand_capacity(Contact* p)
{
if (p->num == p->capacity)
{
int sz = p->capacity + INC_NUM;
Peo* tmp=(Peo*)realloc(p->s, sz*sizeof(Peo));
p->capacity += INC_NUM;
if (tmp == NULL)
{
printf("扩容失败!\n");
return;
}
p->s = tmp;
}
}
void init_contact(Contact* p)
{
p->num = 0;
p->capacity = INIT_NUM;
p->s= (Contact*)malloc(sizeof(Peo)*INIT_NUM);
assert(p->s != NULL);
memset(p->s, 0, sizeof(Peo)*INIT_NUM);
}
void meun()
{
printf("*************************\n");
printf("**** 1.添加联系人 ****\n");
printf("**** 2.删除联系人 ****\n");
printf("**** 3.查找联系人 ****\n");
printf("**** 4.修改联系人 ****\n");
printf("**** 5.显示联系人 ****\n");
printf("**** 6.清空联系人 ****\n");
printf("**** 0.退出 ****\n");
printf("*************************\n");
}
void Add(Contact* p)
{
expand_capacity(&con);
if (p->num < p->capacity)
{
printf("请添加联系人:>\n");
printf("姓名:");
scanf("%s", &p->s[p->num].name);
printf("年龄:");
scanf("%d", &p->s[p->num].age);
printf("性别:");
scanf("%s", &p->s[p->num].sex);
printf("联系方式:");
scanf("%s", &p->s[p->num].tel);
printf("地址:");
scanf("%s", &p->s[p->num].address);
p->num++;
printf("添加成功!\n");
printf("联系人数量:%d\n", p->num);
return;
}
}
void Del(Contact* p)
{
int ret = Find(&con);
int i = ret;
if (i == -1)
return;
char x[3];
printf("确定删除联系人吗?(Y/N)\n");
printf("请输入:");
scanf("%s", &x);
if ((0 == strcmp(&x, "Y")) && (i<p->num))
{
for (i = ret; i < p->num; i++)
{
p->s[i] = p->s[i + 1];
}
p->num--;
}
else if ((0 == strcmp(&x, "Y")) && (i == p->num))
{
p->num--;
}
else
printf("删除失败!\n");
printf("联系人数量:%d\n", p->num);
}
int Find(Contact* p)
{
char arr[10];
int i;
printf("请输入联系人姓名:>");
scanf("%s", &arr);
for (i = 0; i < p->num; i++)
{
if (strcmp(p->s[i].name, &arr) == 0)
{
printf("姓名:%s 年龄:%d 性别:%s 联系方式:%s 住址:%s\n", p->s[i].name, p->s[i].age, p->s[i].sex,
p->s[i].tel, p->s[i].address);
return i;
}
}
printf("没有此联系人!\n");
return -1;
}
void Gai(Contact* p) // 修改联系人
{
int i = Find(&con);
printf("姓名:");
scanf("%s", &p->s[i].name);
printf("年龄:");
scanf("%d", &p->s[i].age);
printf("性别:");
scanf("%s", &p->s[i].sex);
printf("联系方式:");
scanf("%s", &p->s[i].tel);
printf("地址:");
scanf("%s", &p->s[i].address);
printf("修改成功!\n");
printf("联系人数量:%d\n", p->num);
}
void Show(Contact* p)
{
name_sort(&con);
int i = 0;
for (i = 0; i < p->num; i++)
{
printf("姓名:%s 年龄:%d 性别:%s 联系方式:%s 住址:%s\n", p->s[i].name, p->s[i].age, p->s[i].sex,
p->s[i].tel, p->s[i].address);
}
printf("联系人数量:%d\n", p->num);
return 0;
}
void name_sort(Contact* p) //冒泡排序
{
int i = 0;
int j = 0;
if (p->num == 0)
{
printf("通讯录为空!\n");
return;
}
for (i = 0; i < p->num - 1; i++)
{
for (j = 0; j < p->num - i - 1; j++)
{
if (strcmp(p->s[j].name, p->s[j + 1].name)>0)
{
Peo tmp = p->s[j];
p->s[j] = p->s[j + 1];
p->s[j + 1] = tmp;
}
}
}
}
void Empty(Contact* p)
{
char x[3];
printf("确定清空联系人吗?(Y/N)\n");
printf("请输入:");
scanf("%s", &x);
if (0 == strcmp("Y", &x))
{
p->num = 0;
free(p);
p = NULL;
printf("清空成功!\n");
printf("联系人数量:%d\n", p->num);
return 0;
}
else
return 0;
}