#include"test.h"
void meum()
{
printf("*******************************\n");
printf("*********1.add 2.del ******\n");
printf("*********3.search 4.modify ***\n");
printf("*********5.sort 6.show *****\n");
printf("********* 0.exit ******\n");
}
void test()
{
Contact M;
InitContact(&M);
int input = 0;
do
{
meum();
printf("请输入选项\n");
scanf("%d", &input);
switch (input)
{
case Add: AddContact(&M);
break;
case Delete: DeleteContact(&M);
break;
case Search: SearchContact(&M);
break;
case Modify:ModifyContact(&M);
break;
case Sort:SortContact(&M);
break;
case Show: ShowContact(&M);
break;
case Exit: printf("退出成功!\n");
break;
default:
printf("非法输入\n");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
#include"test.h"
int cmp(void* p1, void* p2)
{
return ((Phone*)p1)->age - ((Phone*)p2)->age;
}
void SearchContact(Contact* obj)
{
char tmp[20];
printf("请输入查找人的姓名:");
scanf("%s", tmp);
int n = obj->sz;
int i = 0;
while (i < n)
{
if (strcmp(obj->Data[i].name, tmp) == 0)
{
break;
}
i++;
}
if (i == n)
{
printf("查无此人\n");
}
else
{
printf("%-10s\t%-4s\t%-13s\t%-5s\n", "姓名", "年龄", "号码", "性别");
printf("%-10s\t%-4d\t%-13s\t%-5s\n", obj->Data[i].name, obj->Data[i].age, obj->Data[i].num, obj->Data[i].sex);
}
}
int SearchContact1(Contact* obj)
{
char tmp[20] = "";
printf("请输入查找人的姓名:");
scanf("%s", tmp);
int n = obj->sz;
int i = 0;
while (i < n)
{
if (strcmp(obj->Data[i].name, tmp)==0)
{
break;
}
i++;
}
if (i == n)
{
return -1;
}
else
{
return i;
}
}
void InitContact(Contact* obj)
{
Phone* newnode = (Phone*)malloc(sizeof(Phone) * 4);
obj->Data = newnode;
obj->sz = 0;
obj->capacity = 4;
}
void AddContact(Contact* obj)
{
if (obj->sz == obj->capacity)
{
Phone* newnode = (Phone*)realloc(obj->Data, sizeof(Phone) * obj->capacity * 2);
if (newnode == NULL)
{
exit(-1);
}
else
{
obj->Data = newnode;
obj->capacity *= 2;
}
}
printf("请输入名字\n");
scanf("%s",&obj->Data[obj->sz].name);
printf("请输入年龄\n");
scanf("%d",&obj->Data[obj->sz].age);
printf("请输入电话\n");
scanf("%s",&obj->Data[obj->sz].num);
printf("请输入性别\n");
scanf("%s",&obj->Data[obj->sz].sex);
obj->sz++;
printf("添加成功\n");
}
void ShowContact(Contact* obj)
{
int n = obj->sz;
printf("%-10s\t%-4s\t%-13s\t%-5s\n", "姓名", "年龄", "号码", "性别");
int i = 0;
for (i = 0; i < n; i++)
{
printf("%-10s\t%-4d\t%-13s\t%-5s\n", obj->Data[i].name, obj->Data[i].age, obj->Data[i].num, obj->Data[i].sex);
}
}
void DeleteContact(Contact* obj)
{
if (obj->sz == 0)
{
printf("通讯录为空无法删除!\n");
return;
}
int pos = SearchContact1(obj);
if (pos == -1)
{
printf("查无此人\n");
return;
}
else
{
int i = obj->sz;
while (pos < i-1)
{
obj->Data[pos] = obj->Data[pos + 1];
pos++;
}
obj->sz--;
printf("删除成功!\n");
}
}
void SortContact(Contact* obj)
{
qsort(obj->Data, obj->sz, sizeof(Phone), cmp);
printf("排序成功!");
}
void ModifyContact(Contact* obj)
{
int pos = SearchContact1(obj);
if (pos == -1)
{
printf("查无此人\n");
}
else
{
printf("请输入名字\n");
scanf("%s", &obj->Data[pos].name);
printf("请输入年龄\n");
scanf("%d", &obj->Data[pos].age);
printf("请输入电话\n");
scanf("%s", &obj->Data[pos].num);
printf("请输入性别\n");
scanf("%s", &obj->Data[pos].sex);
printf("修改成功\n");
}
}
头文件
enum function
{
Exit,
Add,
Delete,
Search,
Modify,
Sort,
Show,
};
typedef struct Phone
{
char name[20];
int age;
char num[20];
char sex[10];
}Phone;
typedef struct Contact
{
Phone* Data;
int sz;
int capacity;
}Contact;
void AddContact(Contact* obj);
void InitContact(Contact* obj);
void DeleteContact(Contact* obj);
int SearchContact1(Contact* obj);
void SearchContact(Contact* obj);
void ModifyContact(Contact* obj);
void SortContact(Contact* obj);
void ShowContact(Contact* obj);