liat.h
#include <stdio.h>
#include <windows.h>
#include <string.h>
typedef struct massage//联系人信息
{
char age[10];
char number[15];
char name[15];
char sex[5];
char address[25];
}massage;
typedef struct list//通讯录
{
massage num[1000];
int count;
}list;
void inint_list(list* p);//清空通讯录
void add_people(list* p);//添加联系人
void sub_people(list* p);//删除联系人
void search_people(list* p);//查找联系人
void change_people(list* p);//修改联系人
void display_people(list* p);//打印通讯录
void bubble_sort_people(list* p);//按名字排序
list.c(实现函数)
#include "list.h"
#pragma warning(disable:4996)
list list1;
void main_menu()//主菜单页面
{
printf("***************************************\n");
printf("****1,(初始化/清空)通 讯 录**********\n");
printf("****2,添 加 联 系 人**********\n");
printf("****3,删 除 联 系 人**********\n");
printf("****4,查 找 联 系 人**********\n");
printf("****5,修 改 联 系 人**********\n");
printf("****6,打 印 通 讯 录**********\n");
printf("****7,排 序 通 讯 录**********\n");
printf("****8,保 存 通 讯 录**********\n");
printf("****9,加 载 通 讯 录**********\n");
printf("****0,退 出 通 讯 录**********\n");
printf("***************************************\n");
}
void inint_list(list* p)//清空通讯录的函数
{
int size=sizeof(p->num);
p->count=0;
memset(p->num,0,size);
}
int find_people(list* p,char* people_name)//辅助函数,查找是否存在某个联系人
{
int i=0;
for(i=0;i<(p->count);i++)
{
if(strcmp((p->num[i].name),people_name)==0)
{
return i;
}
}
return -1;
}
void change_menu()//修改联系人时的修改菜单
{
printf("*************************\n");
printf("***请选择要修改的选项****\n");
printf("**1,姓名****2,性别*******\n");
printf("**3,年龄****4,电话*******\n");
printf("**5,地址****0,返回上一级*\n");
printf("*************************\n");
}
void add_people(list* p)//添加联系人的函数
{
if((p->count)>1000)
{
printf("通讯录已满\n");
}
if((p->count)<=1000)
{
printf("请输入新联系人姓名\n");
scanf("%s",p->num[p->count].name);
printf("请输入新联系人性别\n");
scanf("%s",p->num[p->count].sex);
printf("请输入新联系人年龄\n");
scanf("%s",p->num[p->count].age);
printf("请输入新联系人电话\n");
scanf("%s",p->num[p->count].number);
printf("请输入新联系人地址\n");
scanf("%s",p->num[p->count].address);
(p->count)++;
}
}
void save(list* p)//把通讯录保存到文件里
{
int size=p->count;
int index=sizeof(massage);
FILE* op=fopen("save.massage","wb");
int i;
for(i=0;i<size;i++)
{
fwrite(&(p->num[i]),1,index,op);
}
printf("save successed!\n");
fclose(op);
}
void load(list* p)//加载已保存的文件的函数
{
int size=sizeof(massage);
FILE* lo=fopen("save.massage","rb");
int i=0;
while(!feof(lo))
{
fread(&p->num[i],size,1,lo);
i++;
}
p->count=i-1;
printf("load successed!\n");
fclose(lo);
}
void sub_people(list* p)//删除联系人的函数
{
int i=0;
char sub_people[15]={0};
int ret=0;
printf("请输入你要删除的人的姓名\n");
scanf("%s",sub_people);
ret=find_people(p,sub_people);
if(ret!=-1)
{
for(i=ret;i<(p->count)+1;i++)
{
p->num[i]=p->num[i+1];
}
p->count--;
printf("删除成功\n");
}
else
{
printf("通讯录中没有找到要删除的人\n");
}
}
void search_people(list* p)//查找联系人的函数
{
int i=0;
int ret=0;
char name[20]={0};
printf("请输入要查找人的姓名\n");
scanf("%s",name);
ret=find_people(p,name);
if(ret!=-1)
{
printf("性别是:%s\n",p->num[ret].sex);
printf("住址是:%s\n",p->num[ret].address);
printf("年龄是:%s\n",p->num[ret].age);
printf("电话号码是:%s\n",p->num[ret].number);
putchar(10);
}
else
{
printf("通讯录中没有要查找的人\n");
}
}
void change_people(list* p)//修改联系人的函数
{
char name[20]={0};
int ret=0;
int input=0;
printf("请输入想要修改的人的姓名\n");
scanf("%s",name);
ret=find_people(p,name);
if(ret!=-1)
{
printf("此人的信息如下:\n");
printf("姓名:%s\n",p->num[ret].name);
printf("性别:%s\n",p->num[ret].sex);
printf("年龄:%s\n",p->num[ret].age);
printf("住址:%s\n",p->num[ret].address);
printf("电话号码:%s\n",p->num[ret].number);
do
{
change_menu();
printf("请输入要修改的选项\n");
scanf("%d",&input);
switch(input)
{
case 1:printf("请输入新的姓名:\n");
scanf("%s",p->num[ret].name);
break;
case 2:printf("请输入新的性别:\n");
scanf("%s",p->num[ret].sex);
break;
case 3:printf("请输入新的年龄:\n");
scanf("%s",p->num[ret].age);
break;
case 4:printf("请输入新的电话:\n");
scanf("%s",p->num[ret].number);
break;
case 5:printf("请输入新的地址:\n");
scanf("%s",p->num[ret].address);
break;
case 0:printf("返回上一级\n");
break;
default:
printf("输入错误\n");
}
}
while(input);
}
else
{
printf("此人不存在\n");
}
}
void display_people(list* p)//打印通讯录的函数
{
int i=0;
printf("所有人的信息如下\n");
for(i=0;i<(p->count);i++)
{
printf("名字:%10s\n",p->num[i].name);
printf("性别:%10s\n",p->num[i].sex);
printf("年龄:%10s\n",p->num[i].age);
printf("电话:%10s\n",p->num[i].number);
printf("地址:%10s\n",p->num[i].address);
putchar(10);
}
}
void bubble_sort_people(list* p)//给通讯录排序
{
massage temp;
int i=0;
int j=0;
for(i=0;i<(p->count)-1;i++)
{
for(j=0;j<(p->count)-i-1;j++)
{
if(strcmp(p->num[j].name,p->num[j+1].name)>0)
{
temp=p->num[j];
p->num[j]=p->num[j+1];
p->num[j+1]=temp;
}
}
}
}
test.c(测试)
#include "list.h"
int main()//主函数
{
int choose=0;
inint_list(&list1);
do
{
main_menu();
printf("请选择\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
inint_list(&list1);
break;
case 2:
add_people(&list1);
break;
case 3:
sub_people(&list1);
break;
case 4:
search_people(&list1);
break;
case 5:
change_people(&list1);
break;
case 6:
display_people(&list1);
break;
case 7:
bubble_sort_people(&list1);
break;
case 8:
save(&list1);
break;
case 9:
load(&list1);
break;
case 0:
printf("退出通讯录\n");
break;
default:
printf("输入错误\n");
break;
}
}
while(choose);
system("pause");
return 0;
}