急,有奖竞答!!!!!
程序代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> struct record{ char name[20]; char street[20]; char city[20]; char eip[20]; char state[20]; }person[500]; struct slnode{ record date; struct slnode *next; struct slnode *prior; }; typedef slnode linklist; linklist* l; int num=0; FILE *fp; void mainmenu(); void searchmenu(); void enter(); void search(); void display(); void load(); void save(); void delet(); void listinsert(); void initlist(); void main() { initlist(); load(); listinsert(); while (l) mainmenu(); } void load() { if ((fp=fopen("person.bin","rb"))==NULL) { printf("\n\t\t通讯录文件不存在"); if ((fp=fopen("person","wb"))==NULL) { printf("\n\t\t建立失败"); exit(0); } else { printf("\n\t\t通讯录文件已建立"); printf("\n\t\t按任意键进入主菜单"); getch(); return; } exit(0); } fseek (fp,0,2); if(ftell(fp)>0) { rewind(fp); for(num=0;!feof(fp)&&fread(&person[num],sizeof(struct record),l,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("******************欢迎进入通讯录系统******************"); printf("*********welcome to the address book system***********"); printf("****************** 1—新添记录 ***********************"); printf("****************** 2—查找联系人 *********************"); printf("****************** 3—删除联系人 *********************"); printf("****************** 4—保存退出 ***********************"); printf("****************** 5—不保存退出 *********************"); printf("******************************************************"); printf("\n\t\t请选择:"); choic=getch(); switch (choic) { case'1':enter();break; case'2':searchmenu();break; case'3':delet();break; case'4':save();break; case'5':exit();break; default:mainmenu(); } } void searchmenu()//查询菜单 { char choic; system("cls"); printf("**********************查询菜单************************"); printf("****************** 1—显示所有 ***********************"); printf("****************** 2—按姓名查询 *********************"); printf("****************** 3—返回主菜单 *********************"); printf("******************************************************"); printf("\n\t\t请选择:"); choic=getch(); switch (choic) { case'1':display();break; case'2':search();break; case'3':mainmenu();break; } } void enter()//添加记录 { printf("***************** 请输入人员信息 *********************"); printf("\n\t\t姓名:"); scanf("%s",&person[num].name); printf("\n\t\t街道:"); scanf("%s",&person[num].street); printf("\n\t\t城市:"); scanf("%s",&person[num].city); printf("\n\t\t输入邮编:"); scanf("%s",&person[num].eip); printf("\n\t\t国家:"); scanf("%s",&person[num].state); num++; printf("\n\t\t是否继续添加?(Y/N):"); if(getch()=='y') enter(); return; } void display()//显示所有 { int i ; system("cls"); if(num!=0) { printf("************** 以下为通讯录所有信息 *******************"); for(i=0;i<num;i++) { printf("\n\t\t姓名: %s",person[i].name); printf("\n\t\t街道: %s",person[i].street); printf("\n\t\t城市: %s",person[i].city); printf("\n\t\t邮编: %s",person[i].eip); printf("\n\t\t国家: %s",person[i].state); printf("\t\t"); if(i+1<num) { printf("\n\t\t_____________________"); system("pause"); } } printf("\n\t\t**********************************************"); } else printf("\n\t\t通讯录中无任何记录"); printf("\n\t\t按任意键返回主菜单:"); getch(); return; } void save()//写入文件 { int i; if((fp=fopen("person","wb"))==NULL) { printf("\n\t\t文件打开失败"); } for (i=0;i<num;i++) { if(fwrite(&person[i],sizeof(struct record),l,fp)!=l) { printf("\n\t\t文件打开失败"); } for(i=0;i<num;i++) { if(fwrite(&person[i],sizeof(struct record),l,fp)!=l) printf("\n\t\t写入文件错误!\n"); } fclose(fp); printf("\n\t\t通讯录文件已保存"); printf("\n\t\t按任意键退出程序\n\t\t"); exit(0); } void listinsert()//增加一个结点 { linklist s,p=l; for(int i=0;i<num;i++) { s=new slnode; strcpy(s->date.name,person[i].name); strcpy(s->date.city,person[i].city); strcpy(s->date.street,person[i].street); strcpy(s->date.eip,person[i].eip); strcpy(s->date.state,person[i].state); s->prior=p->prior; s->next=p; p->prior->next=s; p->prior=s; p=p->next; } } void initlist() { l=new slnode; l->next=l; l->prior=l; } void search() { int j=0,a=0; linklist p=l; printf("\n\t\t***************** 按姓名查找 *******************"); char name[20]; printf("\n\t\t请输入姓名:"); scanf("%",name); for(int i=a;i<num;i++;p=p->next) { if(strcmp(name,p->next->date.name)==0) { if(strcmp(name,p->next->date.name)==0) { printf("查询到的信息:"); printf("\n"); printf("姓名:"); printf("%s",p->next->date.name); printf("\n"); printf("城市:"); printf("%s",p->next->date.city); printf("\n"); printf("国家:"); printf("%s",p->next->date.state); printf("\n"); printf("街道:"); printf("%s",p->next->date.street); printf("\n"); printf("邮政编码:"); printf("%s",p->next->date.eip); j++; } if(j==0) printf("\t\t 该通讯录没有该人!"); if((i+1)<num) { printf("\n\t\t 是否继续查找相同名字的人员信息:(y/n)"); if(get()=='y') { a=i; continue; } else return; } else { printf("\n\t\t按任意键返回主菜单"); getch(); return; } } } void delet() { int a=0; int findmark=0; int j; int deletmark=0; int i; char name[20]; printf("\n\t\t请输入要删除人员姓名:"); scanf("%s",name); for (i=a;i<num;i++) { if(strcmp(person[i].name.name)==NULL) { printf("\n\t\t以下是您要删除的人员记录:"); findmark++; printf("\n\t\t_______________________________"); printf("\n\t\t姓名:%s",person[i].name); printf("\n\t\t街道:%s",person[i].street); printf("\n\t\t城市:%s",person[i].city); printf("\n\t\t邮编:%s",person[i].eip); printf("\n\t\t国家:%s",person[i].state); printf("\n\t\t_______________________________"); printf("\n\t\t是否删除?(y/n)"); if(getch()=='y'){ for(j=i;j<num-1;j++) person[j]=person[j+1]; num--; deletemark++; printf("\n\t\t删除成功"); if((i+1)<num){ printf("\n\t\t是否继续删除相同姓名的人员信息?(y/n)"); if(getch()=='y'){ a=i;continue; } } printf("\n\t\t是否继续删除?(y/n)"); if(getch()=='y') delet(); return; } if((i+1)<num){ printf("\n\t\t是否继续删除相同姓名的人员信息?(y/n)"); if(getch()=='y'){ a=i;continue; } } } else continue; } if((deletemark==0)&&(findmark==0)){ printf(); return; } else if(findmark!=0){ printf("\n\t\t没有重名信息"); printf("\n\t\t没有该人员的记录"); return; } }