local function definitions are illegal是什么意思???
程序代码:#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;
};
void initlist();
void load();
void listinsert();
void mainmenu();
void enter();
void searchmenu();
void display();
void search();
void save();
void delet();
typedef slnode *linklist;
linklist l;
int num=0;
FILE *fp;
void main()
{
initlist();
load();
listinsert();
while (l)
mainmenu();
}
void initlist()
{
l=new slnode;
l->next=l;
l->prior=l;
}
void load(){
if((fp=fopen("person","wb"))==NULL){
printf("通讯录不存在!\n");
exit(0);}
else{
printf("通讯录已建立!\n");
printf("按任意键进入主菜单!\n");
getch();
return;}
/* 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 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 mainmenu()//主菜单
{
char ch;
printf("******************************************************");
printf("******************欢迎进入通讯录系统******************");
printf("*********welcome to the address book system***********");
printf("****************** 1—添加新记录 *********************");
printf("****************** 2—查找联系人 *********************");
printf("****************** 3—删除联系人 *********************");
printf("****************** 4—保存退出 ***********************");
printf("****************** 5—不保存退出 *********************");
printf("**************** 按其它键刷新主菜单 ******************");
printf("******************************************************");
printf("\n\t\t请选择序号:");
ch=getch();
switch (ch){
case'1':enter();break;
case'2':searchmenu();break;
case'3':delet();break;
case'4':save();break;
case'5':exit(0);break;
default:mainmenu();}
}
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 searchmenu(){//查询菜单
char ch;
printf("******************************************************");
printf("**********************查询菜单************************");
printf("****************** 1—显示所有 ***********************");
printf("****************** 2—按姓名查询 *********************");
printf("**************** 按其它键返回主菜单 ******************");
printf("******************************************************");
printf("\n\t\t请选择序号:");
ch=getch();
switch (ch){
case'1':display();break;
case'2':search();break;
default:mainmenu();}
}
void display(){//显示所有
if(num!=0){
printf("************** 以下为通讯录所有信息 *******************");
for(int 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_____________________");}
printf("\n\t\t**********************************************");
getch();
return;
}
void search(){//按姓名查询信息
int i,j=0,a=0;
char name[20];
linklist p=l;
printf("\n\t\t***************** 按姓名查找 *******************");
printf("\n\t\t请输入姓名:");
scanf("%s",name);
for(i=a;i<num;i++,p=p->next,j++;){
if(strcmp(name,p->next->date.name)==0){
printf("查询到的信息:\n");
printf("姓名:%s\n",p->next->date.name);
printf("城市:%s\n",p->next->date.city);
printf("国家:%s\n",p->next->date.state);
printf("街道:%s\n",p->next->date.street);
printf("邮政编码:%s\n",p->next->date.eip);}
if(j==0) printf("\t\t 该通讯录没有该人!");
if((i+1)<num){
printf("是否继续查找相同名字的人员信息:(y/n)\n");
ch=getchar();
if(ch=='y'){a=i; continue;}
else return;}
else{
printf("按任意键返回主菜单\n");
getch();
return;}
}
}
void delet(){
int i,j,a=0,findmark=0,deletmark=0;
char ch,name[20];
printf("请输入要删除人员姓名:\n");
scanf("%s",name);
for (i=a;i<num;i++){
if(strcmp(person[i].name,name)==0){
findmark++;
printf("以下是您要删除的人员记录:\n");
printf("_______________________________\n");
printf("姓名:%s\n",person[i].name);
printf("街道:%s\n",person[i].street);
printf("城市:%s\n",person[i].city);
printf("邮编:%s\n",person[i].eip);
printf("国家:%s\n",person[i].state);
printf("_______________________________\n");
printf("是否删除?(y/n)\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)");
ch=getchar();
if(ch=='y'){a=i;continue;}
}
printf("\n\t\t是否继续删除?(y/n)");
ch=getchar();
if(ch=='y')
delet();
return;}
if((i+1)<num){
printf("\n\t\t是否继续删除相同姓名的人员信息?(y/n)");
ch=getchar();
if(ch=='y'){a=i;continue;}
}
}
else continue;
}
if((deletemark==0)&&(findmark==0)){
printf("\n\t\t有重名信息!");
return;
}
else if(findmark!=0){
printf("\n\t\t没有重名信息!");
printf("\n\t\t没有该人员的记录!");
return;}
}
void save(){//写入文件
if((fp=fopen("person","wb"))==NULL){
printf("文件打开失败!\n");}
for (int i=0;i<num;i++){
if(fwrite(&person[i],sizeof(struct record),l,fp)!=l){
printf("文件打开失败!\n");}
for(i=0;i<num;i++){
if(fwrite(&person[i],sizeof(struct record),l,fp)!=l)
printf("写入文件错误!\n");}
fclose(fp);
printf("通讯录文件已保存\n");
printf("按任意键退出程序\n");
exit(0);
}
}







