#include #include #include #include struct record { char nativeplace[20]; char name[20]; char phone1[20]; char phone2[20]; char e_mail[30]; }student[500]; int num=0;//外部变量num为文件中的纪录数 FILE *fp; void welcome(); //欢迎 void mainmenu(); //主菜单 void newrecord(); //新添纪录 void modify(); //修改联系人 void modifyname(); //姓名修改 void modifyphone1(); //电话号码1修改 void modifyphone2(); //电话号码2修改 void searchmenu(); //查询菜单 void searchbynativeplace(); //按籍贯查询 void searchbyname(); //按姓名查询 void searchbyphone1(); //按电话1查询 void searchbyphone2(); //按电话2查询 void deletemenu(); //删除菜单 void deleteall(); //删除所有 void deleteone(); //删除单个 void showall(); //显示所有 void readfromfile(); //读取文件 void writetofile(); //写入文件 void deletebynativeplace(); //按籍贯删除 void deletebyname(); //按姓名删除 void listbynativeplace(); //按籍贯排序 void listbyname(); //按姓名排序 void listmenu(); //排序菜单 int main() //主函数 { welcome(); readfromfile(); while (1) { mainmenu(); } } void welcome()//欢迎界面 { printf("\n\n\n\n\n\n"); printf("\t\t\t============通讯录程序设计==============\n"); printf("\n\n\n"); printf("\t\t\t 欢迎使用! \n"); printf("\n\n\n"); printf("\t\t\t===============按任意键=================\n"); getch(); return; } void writetofile()//写入文件 { int i; if ((fp=fopen("student.bin","wb"))==NULL) { printf("\n\t\t文件打开失败"); } for (i=0;i0) /*文件不为空*/ { rewind(fp); /*文件位置指针移动到文件开始位置*/ for (num=0;!feof(fp) && fread(&student[num],sizeof(struct record),1,fp);num++); printf("\n\t\t文件导入成功"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } printf("\n\t\t文件导入成功"); printf("\n\t\t通讯录文件中无任何纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return; }//文件导入完毕 void mainmenu()//主菜单 { char choic; system("cls"); printf("\n\t\t******************* 主菜单 ********************"); printf("\n\t\t********** 1-新添记录 2-修改记录 *************"); printf("\n\t\t********** 3-查询菜单 4-删除记录 *************"); printf("\n\t\t********** 5-记录排序 6-保存退出 *************"); printf("\n\t\t********** 7-不保存退出 *************"); printf("\n\t\t************************************************"); printf("\n\t\t请选择:"); choic=getch(); switch (choic) { case '1':newrecord();break; case '2':modify();break; case '3':searchmenu();break; case '4':deletemenu();break; case '5':listmenu();break; case '6':writetofile();break; case '7':exit(0); default:mainmenu(); } } void newrecord()//添加记录 { printf("\n\t\t**************** 请输入联系人信息 ****************\n"); printf("\n\t\t输入籍贯:"); scanf("%s",&student[num].nativeplace); printf("\n\t\t输入姓名:"); scanf("%s",&student[num].name); printf("\n\t\t输入电话号码1:"); scanf("%s",&student[num].phone1); printf("\n\t\t输入电话号码2:"); scanf("%s",&student[num].phone2); printf("\n\t\t输入e-mail:"); scanf("%s",&student[num].e_mail); num++;/*统计联系人个数*/ printf("\n\t\t是否继续添加?(Y/N):"); if (getch()=='y') newrecord(); return; }//结束添加新联系人 void deletemenu()//删除菜单 { char choic; if(num==0) { printf("\n\t\t对不起,文件中无任何纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } system("cls"); printf("\n\t\t******************* 删除菜单 *******************"); printf("\n\t\t*********** 1-删除所有 2-删除单个 ***********"); printf("\n\t\t*********** 3-返回主菜单 ***********"); printf("\n\t\t************************************************"); printf("\n\t\t请选择:"); choic=getch(); switch (choic) { case '1':deleteall();break; case '2':deleteone();break; case '3':mainmenu();break; default:mainmenu();break; } } void deleteall()//删除所有 { printf("\n\t\t确认删除?(y/n)"); if (getch()=='y') { fclose(fp); if ((fp=fopen("student.bin","wb"))==NULL) { printf("\n\t\t不能打开文件,删除失败"); readfromfile(); } num=0; printf("\n\t\t记录已删除,按任意键返回主菜单"); getch(); return; } else return; } void deletebyname()//按姓名删除 { int a=0; int findmark=0; int j; int deletemark=0; int i; char name[20]; printf("\n\t\t请输入要删除姓名:"); scanf("%s",name); for (i=a;i=0); student[j+1]=tmp; } } printf("\n\t\t排序成功,是否显示?(y/n)"); if (getch()=='y') showall(); return; } void listbyname()//按姓名排序 { int i,j; struct record tmp; for (i=1;i=0)); student[j+1]=tmp; } } printf("\n\t\t排序成功,是否显示?(y/n)"); if (getch()=='y') showall(); return; }