








大致思路:









contact.h
#include
#include
#include
#include
#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_NUM 12
#define MAX_ADDR 30
#define MAX_DATA 100
//创建联系人结构体
struct Peoinfo
{
char name[MAX_NAME];
char sex[MAX_SEX];
char num[MAX_NUM];
int age;
char addr[MAX_ADDR];
};
//创建通讯录结构体
struct Contact
{
struct Peoinfo data[MAX_DATA];
int sz;
//int capcity;
};
//初始化通讯录
void init_contact(struct Contact* con);
//添加联系人
void addContact(struct Contact* con);
//删除联系人
void deleteContact(struct Contact* con);
//修改联系人
void modifyContact(struct Contact* con);
//查找联系人
void searchContact(struct Contact* con);
//展示通讯录
void showContact(struct Contact* con);
//排序通讯录
void sortContact(struct Contact con);
//清空联系人
void clearContact(struct Contact* con);
contact.c
#include "contact.h"
//初始化通讯录
void init_contact(struct Contact* con)
{
assert(con);
con->sz = 0;
memset(con->data, 0, MAX_DATA*sizeof(struct Peoinfo));
}
//添加联系人
void addContact(struct Contact *con)
{
assert(con);
if ((con->sz) > MAX_DATA)
{
printf("通讯录已满!\n");
}
printf("请输入姓名:");
scanf("%s", con->data[con->sz].name);
printf("请输入性别:");
scanf("%s", con->data[con->sz].sex);
printf("请输入电话:");
scanf("%s", con->data[con->sz].num);
printf("请输入年龄:");
scanf("%d", &(con->data[con->sz].age));
printf("请输入地址:");
scanf("%s", con->data[con->sz].addr);
con->sz++;
printf("添加联系人成功!\n");
}
//删除联系人
void deleteContact(struct Contact* con)
{
char name[MAX_NAME];
printf("请输入要删除的联系人:");
scanf("%s", name);
int ret = find(con, name);
if (ret == -1)
printf("未找到该联系人!\n");
else
{
int i = 0;
for (i = 0; i < con->sz - ret; i++)
{
con->data[ret+i] = con->data[ret + i+1];
}
con->sz--;
printf("删除联系人成功!\n");
}
}
//修改联系人
void modifyContact(struct Contact* con)
{
char name[MAX_NAME];
printf("请输入要修改的联系人:");
scanf("%s", name);
int ret = find(con, name);
if (ret == -1)
printf("未找到该联系人!\n");
else
{
printf("请输入姓名:");
scanf("%s", con->data[ret].name);
printf("请输入性别:");
scanf("%s", con->data[ret].sex);
printf("请输入电话:");
scanf("%s", con->data[ret].num);
printf("请输入年龄:");
scanf("%d", &(con->data[ret].age));
printf("请输入地址:");
scanf("%s", con->data[ret].addr);
printf("修改联系人成功!\n");
}
}
//寻找联系人
static int find(const struct Contact* con,char* name)
{
int i = 0;
for (i = 0; i < con->sz; i++)
{
if (0==strcmp(con->data[i].name,name))
return i;
}
return -1;
}
//查找联系人
void searchContact(struct Contact* con)
{
assert(con);
char name[20]={0};
printf("请输入要查找的联系人:");
scanf("%s", &name);
int ret=find(con, name);
if (ret == -1)
printf("未找到该联系人!\n");
else
{
printf("%-20s\t%-10s\t%-12s\t%-5s\t%-30s\n", "姓名", "性别", "电话", "年龄", "地址");
printf("%-20s\t%-10s\t%-12s\t%-5d\t%-30s\n", con->data[ret].name, con->data[ret].sex,
con->data[ret].num, con->data[ret].age, con->data[ret].addr);
}
}
//展示通讯录
void showContact(struct Contact* con)
{
assert(con);
int i = 0;
printf("%-20s\t%-10s\t%-12s\t%-5s\t%-30s\n", "姓名", "性别", "电话", "年龄", "地址");
for (i = 0; i < con->sz; i++)
{
printf("%-20s\t%-10s\t%-12s\t%-5d\t%-30s\n", con->data[i].name,con->data[i].sex,
con->data[i].num,con->data[i].age,con->data[i].addr);
}
}
//按姓名排序
int name_cmp(const void* e1, const void* e2)
{
return strcmp(((struct Peoinfo*)e1)->name, ((struct Peoinfo*)e2)->name);
}
//按地址排序
int addr_cmp(const void* e1, const void* e2)
{
return strcmp(((struct Peoinfo*)e1)->addr, ((struct Peoinfo*)e2)->addr);
}
//按年龄排序
int age_cmp(const void* e1, const void* e2)
{
return ((struct Peoinfo*)e1)->age- ((struct Peoinfo*)e2)->age;
}
//排序通讯录
void sortContact(struct Contact con)
{
printf("********* 请选择排序方式:**********\n");
printf("********* 1.姓名 2.地址 **********\n");
printf("********* 3.年龄 ***********\n");
printf("************************************\n");
int a = 0;
scanf("%d", &a);
switch(a)
{
case 1:
qsort(con.data, con.sz, sizeof(con.data[0]), name_cmp);
break;
case 2:
qsort(con.data, con.sz, sizeof(con.data[0]), addr_cmp);
break;
case 3:
qsort(con.data, con.sz, sizeof(con.data[0]), age_cmp);
break;
default:
printf("输入错误\n");
break;
}
int i = 0;
printf("%-20s\t%-10s\t%-12s\t%-5s\t%-30s\n", "姓名", "性别", "电话", "年龄", "地址");
for (i = 0; i < con.sz; i++)
{
printf("%-20s\t%-10s\t%-12s\t%-5d\t%-30s\n", con.data[i].name, con.data[i].sex,
con.data[i].num, con.data[i].age, con.data[i].addr);
}
}
//清空联系人
void clearContact(struct Contact* con)
{
con->sz = 0;
printf("清空联系人成功!\n");
}
test.c
#include "contact.h"
void Meue()
{
printf("************************************\n");
printf("***** 1.add 2.delete *****\n");
printf("***** 3.modify 4.search *****\n");
printf("***** 5.show 6.sort *****\n");
printf("***** 7.clear 0.exit *****\n");
printf("************************************\n");
}
int main()
{
int a = 0;
enum number
{
EXIT,
ADD,
DELETE,
MODIFY,
SEARCH,
SHOW,
SORT,
CLEAR
};
struct Contact con;
init_contact(&con);
do
{
Meue();
scanf("%d", &a);
switch (a)
{
case EXIT:
printf("成功退出!\n");
break;
case ADD:
addContact(&con);
break;
case DELETE:
deleteContact(&con);
break;
case MODIFY:
modifyContact(&con);
break;
case SEARCH:
searchContact(&con);
break;
case SHOW:
showContact(&con);
break;
case SORT:
sortContact(con);
break;
case CLEAR:
clearContact(&con);
break;
default:
printf("输入错误!\n");
break;
}
}
while (a);
return 0;
}