通讯录包含信息
struct People
{
char name[20]; //姓名
char num[20]; //电话
char address[20]; //家庭住址
};
菜单
printf("************************************菜单********************************\n");
printf(" \n");
printf(" 1.输入联系人\n");
printf(" 2.显示通讯录\n");
printf(" 3.查找联系人\n");
printf(" 4.删除联系人\n");
printf(" 5.保存文件\n");
printf(" \n");
增
void input(struct People stu[],int n) //添加联系人的信息
{
printf("请输入联系人的姓名:\n");
scanf("%s",&stu[n].name);
printf("请输入联系人的电话:\n");
scanf("%s",&stu[n].num);
printf("请输入联系人的家庭住址:\n");
scanf("%s",&stu[n].address);
}
删
void dele(struct People stu[],char name2[],int n) //删除联系人的信息
{
int end;
end=find(stu,name2,n);
if(end==-1)
{
printf("没有此联系人\n");
}
else
{
printf("要删除的家属用户%s为第%d个\n",stu[end].name,end+1);
for(int i=end;i<n-1;i++)
{
stu[i]=stu[i+1];
}
printf("删除成功\n");
}
show(stu,n-1);
}
查
int find(struct People stu[],char name1[],int n) //查找联系人的信息
{
int p=0;
for(int j=0;j<n;j++)
{
if(strcmp(stu[j].name,name1)==0) //作比较
{
p=j;
return p;
}
}
return (-1);
}
保存文件
void keep(struct People stu[],int n) //保存文件
{
FILE*fp;
if((fp=fopen("D:\\CC\\联系人的信息","w"))==NULL)
{
printf("此文件无法打开\n");
exit(0);
}
for(int i=0;i<n;i++)
{
fprintf(fp,"%s %s %s \n",stu[i].name,stu[i].num,stu[i].address);
}
fclose(fp); //关闭文件
}
总代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct People
{
char name[20];
char num[20]; //电话
char address[20];
};
void input(struct People stu[],int n) //添加联系人的信息
{
printf("请输入联系人的姓名:\n");
scanf("%s",&stu[n].name);
printf("请输入联系人的电话:\n");
scanf("%s",&stu[n].num);
printf("请输入联系人的家庭住址:\n");
scanf("%s",&stu[n].address);
}
void show(struct People stu[],int n) //显示联系人的信息
{
for(int i=0;i<n;i++)
{
printf("联系人的信息为:\n");
printf("姓名:%s 电话:%s 家庭住址: %s \n",stu[i].name,stu[i].num,stu[i].address);
}
}
void output_one(struct People stu[],int end) //输出某一个联系人的信息
{
printf("您要查找的联系人的信息为:\n");
printf("姓名:%s 电话:%s 家庭住址: %s \n",stu[end].name,stu[end].num,stu[end].address);
}
int find(struct People stu[],char name1[],int n) //查找联系人的信息
{
int p=0;
for(int j=0;j<n;j++)
{
if(strcmp(stu[j].name,name1)==0) //作比较
{
p=j;
return p;
}
}
return (-1);
}
void dele(struct People stu[],char name2[],int n) //删除联系人的信息
{
int end;
end=find(stu,name2,n);
if(end==-1)
{
printf("没有此联系人\n");
}
else
{
printf("要删除的家属用户%s为第%d个\n",stu[end].name,end+1);
for(int i=end;i<n-1;i++)
{
stu[i]=stu[i+1];
}
printf("删除成功\n");
}
show(stu,n-1);
}
void keep(struct People stu[],int n) //保存文件
{
FILE*fp;
if((fp=fopen("D:\\CC\\联系人的信息","w"))==NULL)
{
printf("此文件无法打开\n");
exit(0);
}
for(int i=0;i<n;i++)
{
fprintf(fp,"%s %s %s \n",stu[i].name,stu[i].num,stu[i].address);
}
fclose(fp); //关闭文件
}
void menu(struct People stu[]) //菜单
{
int number=1,numb,record,n=0;
while(number>=1)
{
printf("************************************菜单********************************\n");
printf(" \n");
printf(" 1.输入联系人\n");
printf(" 2.显示通讯录\n");
printf(" 3.查找联系人\n");
printf(" 4.删除联系人\n");
printf(" 5.保存文件\n");
printf(" \n");
printf("请根据菜单输入数字\n");
scanf("%d",&numb) ;
switch(numb)
{
case 1: //添加联系人的信息
{
system("cls");
printf("请输入您要输入联系人的个数(不多于%d个):\n",100-n);
scanf("%d",&record);
while(record--)
{
input(stu,n++);
}
show(stu,n);
break;
}
case 2: //显示联系人的信息
{
system("cls") ;
show(stu,n);
break;
}
case 3: //查找联系人的信息
{
system("cls");
char name1[20];
printf("请输入要查找的联系人的姓名:\n");
scanf("%s",name1);
int end;
end=find(stu,name1,n);
if(end==-1)
{
printf("查找失败\n");
}
else
{
printf("查找成功\n");
output_one(stu,end);
}
break;
}
case 4: //删除联系人的信息
{
system("cls");
printf("请输入您要删除的联系人:\n");
char name2[20];
scanf("%s",name2);
dele(stu,name2,n);
n=n-1;
system("cls");
show(stu,n);
break;
}
case 5: //保存进文件中
{
system("cls");
keep(stu,n);
break;
}
}
printf("*****************************************\n"); //判断是否退出系统
printf("是否退出系统?\n");
printf("如果退出系统,请按 0 ;否则请按 1 \n");
scanf("%d",&numb);
if(numb==0)
break;
printf("*****************************************\n");
}
}
int main()
{
system("color F5"); //背景和字体颜色(F为白色背景,5为紫色字体)
struct People stu[100];
menu(stu); //菜单调用
return 0;
}
易错点
1.for循环之后不要习惯性加分号
2.注意int的范围,不要使它溢出