#include<stdio.h>struct person{char name[8];char sex[10];char QQ[15];char tel[15];char addr[50];};char filename[20]="E:\\txl.txt";FILE *fp;void creat();void output();void search();void append();void modify();void del();main( ){int m;creat();while(1){printf("★**************************************************************★\n");printf("§*******************★欢迎使用通讯录管理系统★*****************§\n");printf("§**************************************************************§\n");printf("§§§§\n");printf("§§§§\n");printf("§§§§\n");printf("§§☆添加,请按1 §§\n");printf("§§☆查找,请按2 §§\n");printf("§§☆修改,请按3 §§\n");printf("§§☆删除,请按4 §§\n");printf("§§☆输出,请按5 §§\n");printf("§§☆退出,请按0 §§\n");printf("§§§§\n");printf("§§§§\n");printf("§§§§\n");printf("★**************************************************************★\n");printf("◆请选择操作类型(0-5):\n");scanf("%d",&m);if(m>=0&&m<=5){switch(m){case 1: append();break;case 2: search();break;case 3: modify();break;case 4: del();break;case 5: output();break;case 0: exit();}printf("\n\n操作完毕,请再次选择!");}elseprintf("\n\n选择错误,请再次选择!");}}/*输入模块creat( ):创建通讯录的子函数。
*/void creat(){struct person one;if((fp=fopen(filename,"at+"))==NULL){printf("\n不能建立通讯录!");exit();}fprintf(fp,"%-10s%-15s%-18s%-20s%-30s\n","姓名","性别","QQ","电话号码","住址"); printf("\n请输入姓名、性别、QQ、电话号码及住址(以0结束)\n");scanf("%s",);while(strcmp(,"0")){scanf("%s%s%s%s",one.sex ,one.QQ,one.tel,one.addr);fprintf(fp,"%-10s%-15s%-18s%-20s%-30s\n",,one.sex ,one.QQ,one.tel,one.addr);scanf("%s",);}fclose(fp);}/*输出模块output( ):输出通讯录中联系人通讯信息的子函数*/void output(){struct person one;if((fp=fopen(filename,"r"))==NULL){printf("\n不能打开通讯录!");exit();}printf("\n\n%40s\n","通讯录");while(!feof(fp)){fscanf(fp,"%s%s%s%s%s\n",,one.sex,one.QQ,one.tel,one.addr);printf("%-10s%-15s%-18s%-20s%-30s\n",,one.sex ,one.QQ,one.tel,one.addr);}fclose(fp);}/*添加模块append( ):向通讯录中添加某人通讯信息的子函数*/void append(){struct person one;if((fp=fopen(filename,"a"))==NULL){printf("\n不能打开通讯录!");exit();}printf("\n请输入添加的姓名、性别、QQ、电话号码及住址\n");scanf("%s%s%s%s%s",,one.sex ,one.QQ,one.tel,one.addr);fprintf(fp,"%-10s%-15s%-18s%-20s%-30s\n",,one.sex ,one.QQ,one.tel,one.addr); fclose(fp);}/*查找模块search( ):在通讯录中查找某人通讯信息的子函数*/void search(){int k=0;char namekey[8];struct person one;printf("\n请输入姓名:");scanf("%s",namekey);if((fp=fopen(filename,"rb"))==NULL){printf("\n不能打开通讯录!");exit();}while(!feof(fp)){fscanf(fp,"%s%s%s%s%s\n",,one.sex ,one.QQ,one.tel,one.addr);if(!strcmp(namekey,)){printf("\n\n已查到,记录为:");printf("\n%-10s%-15s%-18s%-20s%-30s",,one.sex,one.QQ,one.tel,one.addr);k=1;}}if(!k)printf("\n\n对不起,通讯簿中没有此人的记录。
");fclose(fp);}/*修改模块modify( ):在通讯录中修改某人通讯信息的子函数*/void modify(){int m,k=0;long offset;char namekey[8];struct person one;printf("\n请输入姓名:");scanf("%s",namekey);if((fp=fopen(filename,"r+"))==NULL){printf("\n不能打开通讯录!");exit();}while(!feof(fp)){offset=ftell(fp);fscanf(fp,"%s%s%s%s%s\n",,one.sex,one.QQ,one.tel,one.addr);if(!strcmp(namekey,)){k=1;break;}}if(k){printf("\n已查到,记录为:");printf("\n%-10s%-15s%-18s%-20s%-30s",,one.sex,one.QQ,one.tel,one.addr);printf("\n请输入新姓名、性别、QQ、电话号码及住址:");scanf("%s%s%s%s%s",,one.sex,one.QQ,one.tel,one.addr);fseek(fp,offset,SEEK_SET);printf("%ld",ftell(fp));fprintf(fp,"%-10s%-15s%-18s%-20s%-30s\n",,one.sex,one.QQ,one.tel,one.addr);}elseprintf("\n对不起,通讯录中没有此人的记录。
");fclose(fp);}/*删除模块delete( ):在通讯录中删除某人通讯信息的子函数*/void del(){int m=0,k=0;long offset1;char namekey[8], valid[4];struct person one;printf("\n请输入姓名:");scanf("%s",namekey);if((fp=fopen(filename,"r+"))==NULL){printf("\n不能打开通讯录!");exit();}while(!feof(fp)){offset1=ftell(fp);fscanf(fp,"%s%s%s%s%s\n",,one.sex,one.QQ,one.tel,one.addr);if(!strcmp(namekey,)){k=1;break;}}if(k){printf("\n已查到,记录为");printf("\n%-10s%-15s%-18s%-20s%-30s",,one.sex,one.QQ,one.tel,one.addr);printf("\n确实要删除,按1;不删除,按0:");scanf("%d",&m);if(m){fseek(fp,offset1,SEEK_SET);printf("%ld",ftell(fp));fprintf(fp,"%-10s%-15s%-18s%-20s%-30s\n","","","","","");}elseprintf("\n对不起,通讯录中没有此人的记录。