目录
test.c主函数
#include"contact.h"
void menu()
{
printf("****************************\n");
printf("***1.add 2.del ******\n");
printf("***3.search 4.modifi****\n");
printf("***5.show 6.sort******\n");
printf("*** 0.quit ***\n");
printf("****************************\n");
}
enum Option
{
QUIT,
ADD,
DEL,
SEARCH,
MODIFI,
SHOW,
SORT,
};
int main()
{
int input = 0;
menu();
struct contact con;
//初始化结构体
Init_con(&con);
do
{
scanf("%d", &input);
switch (input)
{
case ADD:
//添加联系人
add_con(&con);
break;
case DEL:
//删除联系人
del_con(&con);
break;
case SEARCH:
//搜索联系人
search_con(&con);
break;
case MODIFI:
//修改
modifi_con(&con);
break;
case SHOW:
//显示
show_con(&con);
break;
case SORT:
//按xx排序
sort_con_name(&con);
//sort_con_age(&con);
break;
case QUIT:
printf("退出程序\n");
break;
default:
printf("输入错误 请重新输入\n");
break;
}
} while (input);
return 0;
}
contact.c函数实现
#include"contact.h"
void Init_con(struct contact* con)
{
con->sz = 0;
memset(con, '0', sizeof(struct peoinf) * max);
}
void add_con(struct contact* con)
{
if (con->sz == 100)
{
printf("联系人信息已满\n");
return;
}
printf("请输入要录入的名字\n");
scanf("%s", con->data[con->sz].name);
printf("请输入要录入的性别\n");
scanf("%s", con->data[con->sz].sex);
printf("请输入要录入的年龄\n");
scanf("%d", &con->data[con->sz].age);
printf("请输入要录入的地址\n");
scanf("%s", con->data[con->sz].addr);
printf("请输入要录入的电话号码\n");
scanf("%s", con->data[con->sz].phonenum);
con->sz++;
printf("成功录入联系人信息\n");
}
void show_con(struct contact* con)
{
int i = 0;
printf("%-12s\t%-6s\t%-5s\t%-30s\t%-13s\n", "姓名", "性别", "年龄", "地址", "电话号码");
for (i = 0; i < con->sz; i++)
{
printf("%-12s\t%-6s\t%-5d\t%-30s\t%-13s\n",
con->data[i].name,
con->data[i].sex,
con->data[i].age,
con->data[i].addr,
con->data[i].phonenum);
}
}
//按名字查找联系人
int find_name(struct contact* con, char arr[])
{
int i = 0;
for (i = 0; i < con->sz; i++)
{
if (strcmp(con->data[i].name, arr) == 0)
return i;
}
return -1;
}
void search_con(const struct contact* con)
{
char arr[max_name];
printf("请输入要查找联系人的名字\n");
scanf("%s", arr);
int ret = find_name(con, arr);
if (-1 == ret)
{
printf("不存在该联系人\n");
}
else
{
printf("%-12s\t%-6s\t%-5d\t%-30s\t%-13s\n",
con->data[ret].name,
con->data[ret].sex,
con->data[ret].age,
con->data[ret].addr,
con->data[ret].phonenum);
}
}
void del_con(struct contact* con)
{
char name[max_name];
printf("请输入要删除的联系人\n");
scanf("%s", name);
int ret = find_name(con, name);
if (-1 == ret)
{
printf("不存在该联系人\n");
}
else
{
for (int i = ret; i < con->sz - 1; i++)
{
con->data[i] = con->data[i + 1];
}
con->sz--;
printf("成功删除该联系人\n");
}
}
void modifi_con(struct contact* con)
{
char name[max_name];
printf("请输入要修改联系人姓名\n");
scanf("%s", name);
int ret = find_name(con, name);
if (-1 == ret)
{
printf("不存在该联系人\n");
}
else
{
printf("请输入姓名");
scanf("%s", con->data[ret].name);
printf("请输入性别");
scanf("%s", con->data[ret].sex);
printf("请输入年龄");
scanf("%d", &con->data[ret].age);
printf("请输入地址");
scanf("%s", con->data[ret].addr);
printf("请输入手机号码");
scanf("%s", con->data[ret].phonenum);
}
}
int cmp_byage(const void* e1, const void* e2)
{
return ((struct peoinf*)e1)->age - ((struct peoinf*)e2)->age;
}
int cmp_byname(const void* e1, const void* e2)
{
return strcmp(((struct peoinf*)e1)->name , ((struct peoinf*)e2)->name);
}
void sort_con_age(struct contact* con)
{
qsort(con->data, con->sz, sizeof(struct peoinf), cmp_byage);
}
void sort_con_name(struct contact* con)
{
qsort(con->data, con->sz, sizeof(struct peoinf), cmp_byname);
}
contact.c头文件
#pragma once
#include<stdio.h>
#include<string.h>
#define max 100
#define max_name 12
#define max_sex 6
#define max_age 6
#define max_addr 30
#define max_phonenum 13
struct peoinf
{
char name[max_name];
char sex[max_sex];
int age;
char addr[max_addr];
char phonenum[max_phonenum];
};
struct contact
{
struct peoinf data[max];
int sz;
};
void Init_con(struct contact* con);
void add_con(struct contact* con);
void show_con(const struct contact* con);
void search_con(const struct contact* con);
void del_con( struct contact* con);
void modifi_con(struct contact* con);
void sort_con(struct contact* con);