实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
提供方法:
- 添加联系人信息
- 删除指定联系人信息
- 查找指定联系人信息
- 修改指定联系人信息
- 显示所有联系人信息
- 清空所有联系人
- 以年龄排序所有联系人
//头文件部分
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NAME 10
#define SEX 6
#define TELE 12
#define ADDR 10
#define MAX 1000
//表示人的信息
struct peoinfo
{
char name[NAME];
char sex[SEX];
int age;
char tele[TELE];
char addr[ADDR];
};
//通讯录
struct contact
{
struct peoinfo c[MAX];//一千个人的信息
int sz;//下标记录
};
//初始化通讯录
void initcontact(struct contact*p);
//添加联系人
void addcontact(struct contact* p);
//显示通讯录
void showcontact(struct contact* p);
//删除联系人
void delcontact(struct contact* p);
//搜索联系人
void searchcontact(struct contact* p);
//清空通讯录
void emptycontact(struct contact* p);
//按照年龄排序通讯录
void sortcontact(struct contact* p);
//主函数部分
#include"game.h"
void menu()
{
printf("*****1.Add 2.del********\n");
printf("*****3.search 4.modif******\n");
printf("*****5.show 6.empty******\n");
printf("*****7.sort 0.exit*******\n");
printf("******************************\n");
}
int main()
{
int input = 0;
//创建通讯录
struct contact con;
//初始化通讯录
initcontact(&con);
do
{
menu();
printf("请选择>:\n");
scanf("%d", &input);
switch (input)
{
case 1:
addcontact(&con);
break;
case 2:
delcontact(&con);
break;
case 3:
searchcontact(&con);
break;
case 4:
break;
case 5:
showcontact(&con);
break;
case 6:
emptycontact(&con);
break;
case 7:
sortcontact(&con);
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
//函数的实现
//初始化通讯录
void initcontact(struct contact* p)
{
p->sz = 0;
memset(p->c, 0, MAX * sizeof(struct peoinfo));
}
//添加联系人
void addcontact(struct contact* p)
{
if (p->sz == MAX)
{
printf("通讯录已满\n");
return;
}
printf("请输入名字:>");
scanf("%s", p->c[p->sz].name);
printf("请输入性别:>");
scanf("%s", p->c[p->sz].sex);
printf("请输入年龄:>");
scanf("%d", &p->c[p->sz].age);
printf("请输入电话:>");
scanf("%s", p->c[p->sz].tele);
printf("请输入住址:>");
scanf("%s", p->c[p->sz].addr);
printf("添加联系人成功\n");
p->sz++;//添加一个 下标++
}
//显示通讯录
void showcontact(struct contact* p)
{
printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "性别", "年龄", "电话", "地址");
int i = 0;
for (i = 0; i < p->sz; i++)
{
printf("%-20s\t", p->c[i].name);
printf("%-5s\t", p->c[i].sex);
printf("%-5d\t", p->c[i].age);
printf("%-12s\t", p->c[i].tele);
printf("%-30s\t", p->c[i].addr);
printf("\n");
}
}
int findname( struct contact* p,char name[])
{
int i = 0;
for (i = 0; i < p->sz; i++)
{
if (strcmp(name, p->c[i].name) == 0)
{
return i;
}
}
return -1;
}
//删除联系人
void delcontact(struct contact* p)
{
printf("请输入要删除人的姓名\n");
char name[20];
scanf("%s", name);
int ret = findname(p,name);
if (ret == -1)
{
printf("该联系人不存在\n");
}
else
{
int i = 0;
for (i = ret; i < p->sz-1; i++)
{
p->c[i] = p->c[i+1];
}
printf("成功删除联系人\n");
p->sz--;//删除一个 下标--
}
}
//搜索联系人
void searchcontact(struct contact* p)
{
printf("请输入要搜索人的姓名:>\n");
char name[20];
scanf("%s", name);
int ret= findname(p, name);
if (ret == -1)
{
printf("该联系人不存在\n");
}
else
{
printf("%-20s\t", p->c[ret].name);
printf("%-5s\t", p->c[ret].sex);
printf("%-5d\t", p->c[ret].age);
printf("%-12s\t", p->c[ret].tele);
printf("%-30s\t", p->c[ret].addr);
printf("\n");
}
}
//清空通讯录
void emptycontact(struct contact* p)
{
p->sz = 0;
memset(p->c, 0, MAX * sizeof(struct peoinfo));
printf("已清空通讯录\n");
}
//排序通讯录
int cmp(const void* e1, const void* e2)
{
return ((struct peoinfo*)e1)->age - ((struct peoinfo*)e2)->age;
}
void sortcontact(struct contact* p)
{
qsort(p->c, p->sz, sizeof(struct peoinfo), cmp);
}