c语言通讯录管理系统.docx
《c语言通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《c语言通讯录管理系统.docx(22页珍藏版)》请在冰点文库上搜索。
c语言通讯录管理系统
#include
#include
#include
typedefstruct/*公共部分*/
{
intscore;/*编号*/
charname[10];/*姓名*/
charnum[15];/*号码*/
charemail[20];/*邮箱*/
charage[8];/*年龄*/
charadds[20];/*住址*/
}Person;
Personpe[80],temp;
intmenu_select();/*界面函数陆*/
intInput(Personper[],intn);/*添加记录王*/
voidDisplay(Personper[],intn);/*显示函数公共*/
intDelete_a_record(Personper[],intn);/*删除函数赵应振*/
voidQuery_a_record(Personper[],intn);/*查询函数王嘉*/
voidChange(Personper[],intn);/*修改函数赵*/
voidWritetoText(Personper[],intn);/*打印保存公共*/
voidrank(intn);/*排序函数陆*/
voidmain()/*主函数陆*/
{
intn=0,i=0,k;
FILE*fp1;/*运行之前从文件中读取之前输入的项目*/
if((fp1=fopen("PersonInfo.dat","rb"))==NULL)/*如果没有文件,自动创建一个*/
{
fp1=fopen("PersonInfo.dat","wb");
}
do
{
k=fread(&pe[i],sizeof(Person),1,fp1);
i++;
n=i-1;
}while(k!
=0);/*文件读取完毕或错误时fread函数返回值为0。
资料来自csdn论坛*/
fclose(fp1);
for(;;)
{
switch(menu_select())
{
case1:
printf("\n\t添加记录到通讯录\n");/*添加记录*/
n=Input(pe,n);
break;
case2:
printf("\n\t\t\t通讯录记录表\n");/*显示记录*/
Display(pe,n);
break;
case3:
printf("\n\t从通讯录中删除记录\n");
n=Delete_a_record(pe,n);/*删除记录*/
printf("\t");
system("pause");
break;
case4:
printf("\n\t在通讯录中查找记录\n");
Query_a_record(pe,n);/*查找记录*/
printf("\t");
system("pause");
break;
case5:
printf("\n\t修改通讯录中的记录\n");
Change(pe,n);/*修改数据*/
printf("\t");
system("pause");
break;
case6:
printf("\n\t保存通讯录中的记录\n");
WritetoText(pe,n);/*保存数据*/
printf("\t");
system("pause");
break;
case7:
/*帮助信息*/
printf("\n\t使用帮助\n");
printf("\n\t#1.添加记录,用于输入你想添加的条目的信息,注意格式。
\n");
printf("\n\t#2.显示记录,用于显示当前所有条目。
\n");
printf("\n\t#3.删除记录,用于删除当前所有条目中的某一条。
\n");
printf("\n\t#4.查找记录,用于查找当前所有条目中的某一条,可以姓名模糊查找。
\n");
printf("\n\t#5.修改记录,用于修改当前所有条目中的某一条。
\n");
printf("\n\t#6.保存记录,用于保存当前所有条目和打印当前所有条目。
\n");
system("pause");
break;
case0:
printf("\n\t\t谢谢使用,再见!
\n");/*结束程序*/
printf("\n\t\t");
system("pause");
printf("\n\t\t");
exit(0);
}
}
}
intmenu_select()/*界面函数陆*/
{
charc,null[20];
do
{
system("cls");
printf("\t\t*****通讯录*****\n");
printf("\t\t┌───────┐\n");
printf("\t\t│1.添加记录│\n");
printf("\t\t│2.显示记录│\n");
printf("\t\t│3.删除记录│\n");
printf("\t\t│4.查询记录│\n");
printf("\t\t│5.修改记录│\n");
printf("\t\t│6.保存记录│\n");
printf("\t\t│7.功能帮助│\n");
printf("\t\t│0.退出程序│\n");
printf("\t\t└───────┘\n");
printf("\t提醒:
退出程序前,请保存记录。
\n");
printf("\t\t请您选择(0-7):
");
c=getchar();
gets(null);
}while(c<'0'||c>'7');
return(c-'0');
}
intInput(Personper[],intn)/*添加记录王*/
{
inttemp,i=0,j=0,k1=0,k2=0;/*temp为临时编号存储变量*/
charsign,null[20];/*k1为编号检测阀开关,k2为@符检测阀开关*/
while(sign!
='n'&&sign!
='n'-32)
{
printf("\t编号:
");/*编号的唯一:
by:
王嘉*/
do
{
while(0==scanf("\t%d",&temp))
{
while('\n'!
=getchar()){}
printf("\t输入无效!
请重新输入\n\t编号:
");
}
for(j=0;j{
if(temp==per[j].score)k1++;
}/*k1为两种情况0或1*/
if(k1==1)/*k1为1时,有重复并使k1归零进入循环*/
{
printf("\t编号重复,请重新输入\n\t编号:
");
k1=0;
}
elsebreak;/*k1为0时,无重复,结束循环*/
}while(k1==0);/*循环的终止条件是没有找出相同,k1=0*/
per[n+i].score=temp;/*临时到最终*/
printf("\t姓名:
");
scanf("\t%s",per[n+i].name);
printf("\t年龄:
");
scanf("\t%s",per[n+i].age);
printf("\t电话号码:
");
scanf("\t%s",per[n+i].num);
printf("\t通讯住址:
");
scanf("\t%s",per[n+i].adds);
printf("\t电子邮箱:
");
scanf("\t%s",per[n+i].email);
do/*Email的@符检测*/
{/*By:
陆文虎*/
for(j=0;j<20;j++)
{
if(per[n+i].email[j]=='@')k2++;
}
if(k2!
=1)
{
printf("\tEmail格式错误,未检测到合法@符,请重新输入\n\t电子邮箱:
");
scanf("\t%s",per[n+i].email);
k2=0;
}
}while(k2!
=1);
k2=0;
printf("\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&sign);
gets(null);
i++;
/*只能输入y和n(不区分大小写)*/
while(sign!
='y'&&sign!
='y'-32&&sign!
='n'&&sign!
='n'-32)
{
printf("\n\t选择错误,请重新选择\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&sign);
gets(null);
}
}
return(n+i);
}
voidDisplay(Personper[],intn)/*显示函数*//*公共*/
{
rank(n);/*调用排序函数。
*/
inti;/*格式*/
printf("----------------------------------------------------------------------\n");
printf("编号姓名年龄电话号码通讯地址电子邮箱\n");
printf("----------------------------------------------------------------------\n");
for(i=1;i{
printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email);
if(i>1&&i%10==0)
{
printf("\t-----------------------------------\n");
printf("\t");
system("pause");
printf("\t-----------------------------------\n");
}
}
printf("----------------------------------------------------------------------\n");
system("pause");
}
intDelete_a_record(Personper[],intn)/*删除函数赵应振*/
{
charch,name[20];
inti=0,j,tabi,deletescore,count1=0,count2=0;/*tabi为标记的i值,deletescore为选择删除的编号*/
printf("\t请输入想删除记录中的名字:
");
scanf("%s",name);
while(strcmp(per[i].name,name)!
=0&&i{
i++;
count2++;
}
if(i==n)
{
printf("\t通讯录中没有此人!
\n");
return(n);
}
for(i=0;i<=n;i++)/*同名人员删除问题*/
{/*统计并找出通讯录中存在相同姓名的条目*/
while(strcmp(per[i].name,name)==0&&i{
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t电子邮箱:
%s\n",per[i].email);
printf("\t-----------------------------------\n");
count1++;
i++;
}
}
if(count1==1)/*当姓名唯一时*/
{
printf("\t是否删除?
[y/n]");
fflush(stdin);
scanf("%c",&ch);
if(ch=='y'||ch=='y'-32)
{
for(j=count2;j{
per[j]=per[j+1];
}
printf("\t\t已经成功删除!
\n");
fflush(stdin);
return(n-1);
}
else
printf("\t未删除\n\t谢谢使用!
\n\t");
returnn;
}
else/*当姓名有两个或以上时,按编号删除。
*/
{
printf("\t\t请输入要删除人的编号!
\n\t\t");
scanf("%d",&deletescore);
for(i=0;i{
if(per[i].score==deletescore)
{
printf("\t-----------------------------------\n");
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t电子邮箱:
%s\n",per[i].email);
printf("\t-----------------------------------\n");
tabi=i;
}
}
printf("\t\t是否删除?
(y/n)\n\t\t");
fflush(stdin);
scanf("%c",&ch);
if(ch=='y'||ch=='y'-32)
{
for(j=tabi;j{
per[j]=per[j+1];
}
printf("\t\t\t已经成功删除!
\n");
fflush(stdin);
return(n-1);
}
else
printf("\t\t谢谢使用!
");
returnn;
}
}
voidQuery_a_record(Personper[],intn)/*查询函数by:
王嘉*/
{
intm;
printf("\t\n请选择查询方式:
\n");/*查找总菜单*/
printf("\t┌───────┐\n");
printf("\t│1--------姓名│\n");
printf("\t│2--------电话│\n");
printf("\t│3--------地址│\n");
printf("\t│4--------返回│\n");
printf("\t└───────┘\n");
printf("请选择:
");
scanf("%d",&m);
while(m!
=1&&m!
=2&&m!
=3&&m!
=4)
{
printf("输入错误,请重新选择:
");
getchar();
scanf("%d",&m);
}
if(m==1)
{
intx;
printf("\t\n请选择查询方式:
\n");/*查找二级菜单*/
printf("\t┌────────┐\n");
printf("\t│1------精确查找│\n");
printf("\t│2------模糊查找│\n");
printf("\t└────────┘\n");
printf("请选择:
");
scanf("%d",&x);
while(x!
=1&&x!
=2)
{
printf("\t输入错误,请重新选择:
");
getchar();
scanf("%d",&x);
}
if(x==1)/*精确查找单元*/
{
chars[20];
inti=0;
printf("\t请输入想查询的姓名:
");
scanf("\t%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t电话号码:
%s\n",per[i].num);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t电子邮箱:
%s\n",per[i].email);
};
if(x==2)/*模糊查找单元*/
{
chars[20];
inti=0,j=0;
printf("\t请输入想查询的姓名:
");
scanf("\t%s",s);
while(i{
if(strstr(per[i].name,s))/*使用strstr函数指向第一次出现*/
{
printf("%s",per[i].name);
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t电话号码:
%s\n",per[i].num);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t电子邮箱:
%s\n",per[i].email);
}
elsej++;
i++;
}
if(j==n)printf("\t通讯录中没有此人!
\n");/*如果找了n次没结果,则无此人*/
}
}
if(m==2)
{
chars[20];
inti=0;
printf("\t请输入想查询的电话:
");
scanf("\t%s",s);
while(strcmp(per[i].num,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t电子邮箱:
%s\n",per[i].email);
};
if(m==3)
{
chars[20];
inti=0;
printf("\t请输入想查询的地址:
");
scanf("\t%s",s);
while(strcmp(per[i].adds,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t电话号码:
%s\n",per[i].num);
printf("\t电子邮箱:
%s\n",per[i].email);
}
}
voidChange(Personper[],intn)/*修改函数赵*/
{
chars[20];
inti=0,j=0,temp,k1=0,k2=0;
printf("\t请输入想修改的记录中的名字:
");
scanf("%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
else
{
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t电话号码:
%s\n",per[i].num);
printf("\t电子邮箱:
%s\n",per[i].email);
printf("\n\t重新输入信息:
\n");
}
printf("\t编号:
");
do/*修改函数同样重复输入函数时的问题*/
{
while(0==scanf("\t%d",&temp))
{
while('\n'!
=getchar()){}
printf("\t输入无效!
请