#include
#include
#define N 12//文件通讯录条数。
void menu()//菜单界面
{
printf("\t\t\t\t************************************\n");
printf("\t\t\t\t**************菜单界面**************\n");
printf("\t\t\t\t ---------------------------------- \n");
printf("\t\t\t\t| 1.添加联系人信息 |\n");
printf("\t\t\t\t| 2.显示所有联系人信息 |\n");
printf("\t\t\t\t| 3.删除部分联系人 |\n");
printf("\t\t\t\t| 4.清空所有联系人 |\n");
printf("\t\t\t\t| 5.修改联系人 |\n");
printf("\t\t\t\t| 6.精确查找联系人 |\n");
printf("\t\t\t\t| 7.模糊关键字查找 |\n");
printf("\t\t\t\t| 8.导出通讯录 |\n");
printf("\t\t\t\t| 9.导入通讯录 |\n");
printf("\t\t\t\t| 10.按条件排序 |\n");
printf("\t\t\t\t| 11.重复删除 |\n");
printf("\t\t\t\t| 12.误清空恢复 |\n");
printf("\t\t\t\t| 0.退出 |\n");
printf("\t\t\t\t ----------------------------------\n");
}
typedef struct link
{
char name[10];
char sex[10];
char age[10];
char addr[20];
char tel[20];
}linkman;
typedef struct PEOPLE
{
int num;
linkman count[1000];
}*people;
int add_linkman(people cou)//添加联系人。
{
if(cou->num==1000)
{
printf("通讯录已满,无法录入");
return(cou->num);
}
else
{
printf("please input name:\n");
scanf("%s",cou->count[cou->num].name);
printf("please input sex:\n");
scanf("%s",cou->count[cou->num].sex);
printf("please input age:\n");
scanf("%s",cou->count[cou->num].age);
printf("please input address:\n");
scanf("%s",cou->count[cou->num].addr);
printf("please input telphone\n");
scanf("%s",cou->count[cou->num].tel);
cou->num++;
printf("添加成功\n");
return(cou->num);
}
}
void display_linkman(people cou)//显示所有联系人
{
int i=0;
if(cou->num==0)
{
printf("当前通讯录为空\n");
return;
}
else
{
printf("姓名\t性别\t年龄\t地址\t电话号码\n");
for(i=0;inum;i++)
{
printf("%s\t%s\t%s\t%s\t%s",
cou->count[i].name,
cou->count[i].sex,
cou->count[i].age,
cou->count[i].addr,
cou->count[i].tel);
printf("\n");
}
return;
}
}
void delete_linkman(people cou)//删除联系人。
{
printf("\t\t\t\t*********注意:删除后无法恢复***********\n");
char name[10];
int i=0,flag=0;
if(cou->num==0)
{
printf("通讯录已空,无法删除\n");
return;
}
else
{
printf("请输入需要删除的人的名字>:");
scanf("%s",name);
printf("\n");
for(i=0;i<=cou->num;i++)
{
if(!strcmp(name,cou->count[i].name))
{
while(inum)
{
cou->count[i]=cou->count[i+1];
i++;
}
cou->num--;
flag=0;
printf("删除成功\n");
return;
}
}
printf("未找到此联系人,删除失败\n");
return;
}
}
void clear_linkman(people cou)//清空联系人
{
if(cou->num==0)
{
printf("联系人已空,无需再次清空\n");
return;
}
else
{
cou->num=0;
printf("清空完成\n");
return;
}
}
void modify_linkman(people cou)//修改联系人。
{
char name[10];
int i;
if(cou->num==0)
{
printf("联系人为空,请新建联系人\n");
return;
}
else
{
printf("请输入需要修改的联系人的名字>:");
scanf("%s",name);
for(i=0;i<=cou->num;i++)
{
if(!strcmp(name,cou->count[i].name))
{
printf("please input name:\n");
scanf("%s",cou->count[i].name);
printf("please input sex:\n");
scanf("%s",cou->count[i].sex);
printf("please input age:\n");
scanf("%s",cou->count[i].age);
printf("please input address:\n");
scanf("%s",cou->count[i].addr);
printf("please input telphone\n");
scanf("%s",cou->count[i].tel);
printf("修改成功\n");
break;
}
else if(i==cou->num)
{
printf("未找到相应联系人\n");
}
}
return;
}
}
void search_linkman(people cou)//查找联系人
{
char name[10];
int i;
if(cou->num==0)
{
printf("联系人为空,无法查找,请新建联系人\n");
return;
}
else
{
printf("请输入查找人的名字>:");
scanf("%s",name);
for(i=0;i<=cou->num;i++)
{
if(!strcmp(name,cou->count[i].name))
{
printf("%s\t%s\t%s\t%s\t%s\n",
cou->count[i].name,
cou->count[i].sex,
cou->count[i].age,
cou->count[i].addr,
cou->count[i].tel);
break;
}
else if(i==cou->num)
{
printf("未找到联系人\n");
}
}
return;
}
}
void derive_linkman(people cou)//导出通讯录。
{
FILE *fp;
int i;
if((fp=fopen("通讯录2.txt","wt+"))==NULL)
{
printf("open file error!\n");
return;
}
fprintf(fp,"姓名\t性别\t年龄\t地址\t电话号码\n");
for(i=0;i<=cou->num;i++)
{
fprintf(fp,"%s\t%s\t%s\t%s\t%s\n",
cou->count[i].name,
cou->count[i].sex,
cou->count[i].age,
cou->count[i].addr,
cou->count[i].tel);
}
printf("导出成功\n");
fclose(fp);
return;
}
int load_linkman(people cou)//载入通讯录。(载入测试数据)
{
FILE *fp;
int i;
if((fp=fopen("通讯录1.txt","rb"))==NULL)
{
printf("open file error!\n");
return(cou->num);
}
rewind(fp);
if(cou->num==0)
{
for(i=0;i
{
fscanf(fp,"%s%s%s%s%s\n",
cou->count[i].name,
cou->count[i].sex,
cou->count[i].age,
cou->count[i].addr,
cou->count[i].tel);
cou->num++;
}
printf("导入成功\n");
}
else
{
for(i=0;i
{
fscanf(fp,"%s%s%s%s%s\n",
cou->count[cou->num].name,
cou->count[cou->num].sex,
cou->count[cou->num].age,
cou->count[cou->num].addr,
cou->count[cou->num].tel);
cou->num++;
}
printf("导入成功\n");
}
fclose(fp);
return(cou->num);
}
void number_linkman(people cou)//通讯录容量记录。
{
printf("\t\t\t\t通讯录总条数1000条,已用条数%d,剩余可用条数%d\n",cou->num,1000-cou->num);
printf("\t\t\t\t注意:退出程序请按8号功能键导出联系人防止联系人丢失\n");
printf("\t\t\t\t注意:误清空后可以按12号功能键恢复\n");
printf("\t\t\t\t注意:清空后可恢复,删除不可恢复。\n");
printf("\t\t\t\t注意:请严格按照功能序号输入,否则程序可能出错。\n");
return;
}
void keyworld_search(people cou)//关键字查找。
{
char ch[20];
int i,j=0;
if(cou->num==0)
{
printf("通讯录为空,无法搜索\n");
return;
}
else
{
printf("请输入要查找的关键字>:");
scanf("%s",ch);
for(i=0;inum;i++)
{
if((strstr(cou->count[i].name,ch)!=NULL)||
(strstr(cou->count[i].sex,ch)!=NULL)||
(strstr(cou->count[i].tel,ch)!=NULL)||
strstr(cou->count[i].addr,ch)!=NULL)
{
printf("%s\t%s\t%s\t%s\t%s\n",
cou->count[i].name,
cou->count[i].sex,
cou->count[i].age,
cou->count[i].addr,
cou->count[i].tel);
j++;
}
}
if(j==0)
{
printf("未找到相关数据\n");
return;
}
else
{
printf("共找到%d条数据\n",j);
}
return;
}
}
void sort_linkman(people cou)//排序函数。
{
linkman temp;
int i,j,x;
if(cou->num==0)
{
printf("通讯录为空,无法排序\n");
return;
}
else
{
printf("\t\t\t\t*************功能选项***************\n");
printf("\t\t\t\t ---------------------------------- \n");
printf("\t\t\t\t| 1.按名字排序 |\n");
printf("\t\t\t\t| 2.按年龄排序 |\n");
printf("\t\t\t\t| 3.按性别分类 |\n");
printf("\t\t\t\t| 4.按地域分类 |\n");
printf("\t\t\t\t ---------------------------------- \n");
printf("请选择功能序号>:");
scanf("%d",&x);
switch(x)
{
case 1:
for(i=0;inum-1;i++)
{
for(j=0;jnum-1;j++)
{
if(strcmp(cou->count[j].name,cou->count[j+1].name)>0)
{
temp=cou->count[j];
cou->count[j]=cou->count[j+1];
cou->count[j+1]=temp;
}
}
}
printf("按名字排序完成\n");
break;
case 2:
for(i=0;inum-1;i++)
{
for(j=0;jnum-1;j++)
{
if(strcmp(cou->count[j].age,cou->count[j+1].age)>0)
{
temp=cou->count[j];
cou->count[j]=cou->count[j+1];
cou->count[j+1]=temp;
}
}
}
printf("按年龄排序完成\n");
break;
case