急,有奖竞答!!!!!
程序代码:#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;
}
}









