#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct record
{
char name[20];
char age[20];
char phone[20];
char e_mail[20];
}
contact[500];
int NO=0;
FILE *fp;
void mainmenu();
void newrecord();
void browsemenu();
void searchmenu();
void searchname();
void searchphone();
void modifymenu();
void deletemenu();
void deleteall();
void deletesingle();
void deletename();
void deletephone();
int loadfile();
void savefile();
void main()
{
printf("\n\t\t :) 欢迎使用通讯录管理系统");
printf("\n\t\t 文件导入中......请稍后......\n\n\n\n\n");
system("cls");
loadfile();
while(1)
{
mainmenu();
}
}
void mainmenu()
{
char choice;
system("cls");
printf("\n\t\t 主菜单 ");
printf("\n\t\t 1-新建菜单 ");
printf("\n\t\t 2-浏览菜单 ");
printf("\n\t\t 3-查找菜单 ");
printf("\n\t\t 4-修改菜单 ");
printf("\n\t\t 5-删除菜单 ");
printf("\n\t\t 6-退出 ");
printf("\n\t\t************************");
printf("\n\t\t 请选择: ");
choice=getch();
switch (choice)
{
case '1':newrecord();break;//61
case '2':browsemenu();break;
case '3':searchmenu();break;
case '4':modifymenu();break;
case '5':deletemenu();break;
case '6':exit(0);
default:mainmenu();
}
}
void newrecord()
{
printf("\n\t\t 请输入联系人信息 \n");
printf("\n\t\t 输入姓名:");
scanf("%s" ,&contact[NO].name);
printf("\n\t\t 输入年龄:");
scanf("%s" ,&contact[NO].age);
printf("\n\t\t 输入电话号码:");
scanf("%s" ,&contact[NO].phone);
printf("\n\t\t 输入电子邮件:");
scanf("%s" ,&contact[NO].e_mail);
NO++;
savefile();
printf("\n\t\t 是否继续添加?(y/n)");
if (getch()=='y')
newrecord();
return;
}
void browsemenu()
{
int i;
system("cls" );
if(NO!=0)
{
printf("\n\t\t 以下为通讯录所有信息 ");
for(i=0;i<NO;i++)
{
printf("\n\t\t姓名: %s",contact[i].name);
printf("\n\t\t年龄: %s",contact[i].age);
printf("\n\t\t电话号码: %s",contact[i].phone);
printf("\n\t\t电子邮件: %s",contact[i].e_mail);
printf("\t\t");
if(i+1<NO)
{
printf("\n\t\t______________");
system("pause");
}
}
printf("\n\t\t ");
}
else
printf("\n\t\t 通讯录中无任何纪录");
printf("\n\t\t 按任意键返回主菜单: ");
getch();
return;
}
void searchmenu()
{
char choice; //130
system("cls");
printf("\n\t\t 查找菜单 ");
printf("\n\t\t 1-按姓名查找 ");
printf("\n\t\t 2-按电话查找 ");
printf("\n\t\t 3-返回主菜单 ");
printf("\n\t\t ");
printf("\n\t\t 请选择:");
choice=getch();
switch (choice)//144
{
case '1':searchname();break;
case '2':searchphone();break;
case '3':mainmenu();break;
}
}
void searchname()
{
int mark=0;
int i;
int a=0;
char name[20];
printf("\n\t\t 按姓名查找 ");
printf("\n\t\t请输入姓名:");
scanf("%s",name);
for(i=a;i<NO;i++)
{
if(strcmp(contact[i].name,name)==0)//163
{
printf("\n\t\t 以下是你查找的联系人信息 ");
printf("\n\t\t姓名: %s",contact[i].name);
printf("\n\t\t年龄: %s",contact[i].age);
printf("\n\t\t电话号码: %s",contact[i].phone);
printf("\n\t\t电子邮件: %s",contact[i].e_mail);
printf("\n\t\t ");
printf("\n\t\t 按任意键返回主菜单: ");
mark++;
getch();
return;
return;
}
}
if(mark==0)
{
printf("\n\t\t没有该姓名的联系人纪录");
printf("\n\t\t按任意键返回主菜单");//182
getch();
return;
}
}
void searchphone()
{
int mark=0;
int i;
int a=0;
char phone[10];
printf("\n\t\t 按电话查找 ");
printf("\n\t\t请输入电话:");
scanf("%s",phone);
for(i=0;i<NO;i++)
{
if(strcmp(contact[i].phone,phone)==0)
{
printf("\n\t\t 以下是您查找的联系人信息 ");
printf("\n\t\t姓名: %s",contact[i].name);
printf("\n\t\t年龄: %s",contact[i].age);
printf("\n\t\t电话号码: %s",contact[i].phone);
printf("\n\t\t电子邮件: %s",contact[i].e_mail);
printf("\n\t\t ");
printf("\n\t\t 按任意键返回主菜单: ");
mark++;
getch();
return;
}
}
if(mark==0)
{
printf("\n\t\t没有该联系人信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
void modifymenu()
{
int mark=0;
int a=0;
int i,k;
int t=0;
char choice;char name[20];
struct record modify;
system("cls");
printf("\n\t\t 请输入您要修改的姓名:");
scanf("%s" ,name);
for(i=a;i<NO;i++)
{
if (strcmp(contact[i].name,name)==0)
{
k=i;mark=1;
modify=contact[i];
printf("\n\t\t 以下是您将修改的联系人信息 ");
printf("\n\t\t姓名: %s",contact[i].name);
printf("\n\t\t年龄: %s",contact[i].age);//246
printf("\n\t\t电话号码: %s",contact[i].phone);
printf("\n\t\t电子邮件: %s",contact[i].e_mail);
printf("\n\t\t 是否继续? (y/n) ");
if(getch()=='n')
modifymenu();
else
{
printf("\n\t\t 选择您要修改的选项:");
printf("\n\t\t(1).姓名");
printf("\n\t\t(2).年龄");
printf("\n\t\t(3).电话号码");
printf("\n\t\t(4).电子邮件");
printf("\n\t\t(5).返回");
printf("\n\t\t 请选择:");
choice=getch();
switch(choice)
{
case '1': printf("姓名:"); scanf("%s",contact[i].name); break;//270
case '2': printf("年龄:"); scanf("%s" ,contact[i].age); break;
case '3': printf("电话号码:"); scanf("%s" ,contact[i].phone); break;
case '4': printf("电子邮件:"); scanf("%s" ,contact[i].e_mail); break;
case '5': mainmenu(); break;
default: modifymenu();
}
printf("\n\t\t 您的修改结果为:");
printf("\n\t\t 姓名: %s",contact[i].name);
printf("\n\t\t年龄: %s",contact[i].age);
printf("\n\t\t 电话号码: %s",contact[i].phone);
printf("\n\t\t电子邮件: %s" ,contact[i].e_mail);
printf("\n\t\t确认修改? (y/n)");
if(getch()=='n')
{
contact[i]=modify;
printf("\n\t\t修改未保存!");
}
else
printf("n\t\t修改未保存!");
savefile();
mark=0;
printf("\n\t\t 是否继续修改?(y/n)");
if (getch()=='y')
modifymenu();
}
}
}
if (mark==0)
{
printf("\n\t\t没有该联系人纪录");
printf("\n\t\t 是否继续修改?(y/n)");
if (getch()=='y')
modifymenu();
}
return;
}
void deletemenu()
{
char choice;
if(NO==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t 按任意键返回主菜单");
getch();
return;
}
system("cls");
printf("\n\t\t***************删除菜单***************");
printf("\n\t\t************** 1-删除所有*************");
printf("\n\t\t************** 2-删除单个*************");
printf("\n\t\t************** 3-返回主菜单***********");
printf("\n\t\t***********************************");
printf("\n\t\t 请选择: ");
choice=getch();
switch(choice)
{
case '1':deleteall();break;
case '2':deletesingle();break;
case '3':mainmenu();break;
default:mainmenu();
}
}
void deleteall()
{
printf("\n\t\t确认删除?(y/n)");
if(getch()=='y')
{
if((fp=fopen("contact","w"))==0)
{
printf("\n\t\t不能打开文件,删除失败");
loadfile();
}
NO=0;//341
printf("\n\t\t 纪录已删除,按任意键返回主菜单");
getch();
fclose(fp);
return;
}
else
return;
}
void deletesingle()
{
char choice;
printf("\n\t\t 1-按姓名删除");
printf("\n\t\t 2-按号码删除");
printf("\n\t\t 3-返回删除菜单");
printf("n\t\t 请选择: ");
choice=getch();
switch (choice)
{
case '1':deletename();break;
case '2':deletephone();break;
case '3':deletemenu();break;
}
}
void deletename()
{
int i,j;
int mark=0;
char name[20];//369
printf("\n\t\t 请输入要删除联系人姓名: ");
scanf("%s",name);
if(NO==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
for(i=0;i<NO;i++)
{
if (strcmp(contact[i].name,name)==0)
{
printf("\n\t\t 以下是您将删除的联系人信息 ");
printf("\n\t\t姓名: %s",contact[i].name);
printf("\n\t\t年龄: %s",contact[i].age);
printf("\n\t\t电话号码: %s",contact[i].phone);
printf("\n\t\t电子邮件: %s",contact[i].e_mail);
printf("\n\t\t 是否删除? (y/n) ");
if(getch()=='y')
{
for (j=i;j<NO-1;j++)
contact[j]=contact[j+1];
NO--;
mark++;//395
printf("\n\t\t 删除成功");
savefile();
printf("\n\t\t是否继续删除?(y/n)");
if(getch()=='y')
deletename();//400
return;
}
else
return;
}
continue;
}
if (mark==0)
{
printf("\n\t\t 没有该联系人的纪录");
printf("\n\t\t 是否继续删除?(y/n)");
if (getch()=='y')
deletename();
return;//414
}
}
void deletephone()
{
int i,j;
int mark=0;
char phone[20];
printf("\n\t\t请输入要删除电话号码: ");
scanf("%s",phone);
if(NO==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t 按任意键返回主菜单");
getch();
return;
}
for (i=0;i<NO;i++)
{
if (strcmp(contact[i].phone,phone)==0)
{
printf("\n\t\t 以下是您要删除的联系人纪录: ");
printf("\n\t\t姓名: %s",contact[i].name);
printf("n\t\t 年龄: %s" ,contact[i].age);
printf("n\t\t 电话号码: %s",contact[i].phone);//440
printf("\n\t\t电子邮件: %s",contact[i].e_mail);
printf("\n\t\t 是否删除? (y/n) ");
if(getch()=='y')
{
for (j=i;j<NO-1;j++)
contact[j]=contact[j+1];
NO--;
mark++;
printf("\n\t\t 删除成功");
savefile();
printf("\n\t\t是否继续删除?(y/n)");
if(getch()=='y')
deletephone();
return;
}
else
return;
}
continue;
}//460
if (mark==0)
{
printf("\n\t\t 没有该联系人的纪录");
printf("\n\t\t 是否继续删除?(y/n)");
if (getch()=='y')
deletename();
return;
}
}
int loadfile()
{
int NO=0;
FILE*fp;
if((fp=fopen("contact.txt","t"))==0)
{
printf( "n\n\n\n\n\t\t电话簿文件不存在");
if((fp=fopen("contact.txt","wb"))==0)
{
printf("\n\t\t\t\t 建立失败");
exit(0);
}//483
else
{
printf("\n\t\t\t电话簿已建立");
printf("\n\t\t\t按任意键进入主菜单");
getch();
return(NO);
}
exit(0);
}
fseek(fp,0,2);if(ftell(fp)>0)
{
rewind(fp);
for(NO=0;!feof(fp) && fread(&contact[NO],sizeof(struct record),1 ,fp);NO++);
printf("\n\n\n\n\t\t\t :) 文件导入成功");
printf("\n\t\t\t\t按任意键返回主菜单");
getch();
return(NO);//500
}
printf("\n\n\n\n\t\t\t\t :)文件导入成功");
printf("\n\t\t\t电话簿文件中无任何纪录");
printf("\n\t\t\t按任意键返回主菜单");
getch();
return(NO);
}
void saefile()
{
int i;
if ((fp=fopen("student.txt","wb"))==0)
{
printf("\n\t\t文件打开失败!n");
}
for (i=0;i<NO;i++)
{
if (fwrite(&contact[i],sizeof(struct record),1,fp)!=1)
{
printf("\n\t\t写入文件错误!\n");
}
}
printf("\n\t\t已成功保存至文件!n");fclose(fp);
}