各位大虾,看看我的这程序那出现了问题啊,可以运行,但不正确。。。
为什么保存到文件可以看见,但程序却不能读出来啊,而且删除函数也有点问题,帮忙解决一下啊#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 100
struct record
{ int num;
char name[10];
char tel[12],celtel[12],dw[20],email[20],qq[12];
}rec[SIZE];
int i,m=0; //m为当前通讯录中的记录数
char menu(); //选单
void list(); //显示
void search(); //查找
void app(); //增加
void dele(); //删除
void correct(); //修改
void save(); //保存
void load(); //读入
void main()
{ char choice;
while(1)
{ choice=menu();
switch(choice)
{case'1':printf("显示通讯录中的内容\n");
list();break;
case'2':printf("查找\n");
search();break;
case'3':printf("增加记录\n");
app();break;
case'4':printf("删除记录\n");
dele();break;
case'5':printf("修改通讯录\n");
correct();break;
case'6':printf("保存通讯录\n");
save();break;
case'7':printf("从文件中读取记录\n");
load();break;
case'8':printf("退出通讯录管理系统\n");
save();break;
default:printf("输入错误!!");
}
if(choice=='8')break;
printf("\n按任意键退出....\n");getchar();
}
}
char menu()
{ char c;
printf("\n\n*************简易通讯录*************\n");
printf(" 1.显示通讯录\n");
printf(" 2.按姓名查找\n");
printf(" 3.增加通讯录\n");
printf(" 4.删除通讯录\n");
printf(" 5.修改通讯录\n");
printf(" 6.保存到文件\n");
printf(" 7.从文件读取\n");
printf(" 8.退出此系统\n");
printf("************************************\n");
printf(" \n请选择………\n\n");
c=getchar();
getchar();
return c;
}
void list() //显示通讯录中的内容
{printf("编号姓名 电话\t\t手机 \t工作单位\t\tEMAIL \t\tQQ\n");
for(i=0;i<m;i++)
{ if(rec[i].name[0])
{
printf("%d、%-8s%-12s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name,rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
}
}printf("当前通讯录中有%d条记录\n",m);
}
void app() //添加通讯记录
{ char an;
puts("当前通讯录中的内容\n");
list();
do
{ rec[i].num=m+1;
printf("姓名:");
gets(rec[m].name);
printf("电话:");
gets(rec[m].tel);
printf("手机:");
gets(rec[m].celtel);
printf("工作单位:");
gets(rec[m].dw);
printf("EMAIL:");
gets(rec[m].email);
printf("QQ:");
gets(rec[m].qq);
puts("新纪录输入完成!");
printf("编号姓名 电话\t\t手机 \t工作单位\t\tEMAIL \t\tQQ\n");
printf("%d、%-8s%-12s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name,rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
m++;
puts("继续添加吗?(y/n)");
an=getchar();
getchar();
}while(an=='y');
}
void search() //查找
{ char xm[10];
printf("输入查找的姓名:");
gets(xm);
for(i=0;i<m;i++)
{ if(strcmp(xm,rec[i].name)==0)
{ printf("编号姓名 电话\t\t手机 \t工作单位\t\tEMAIL \t\tQQ\n");
printf("%d、%-8s%-12s%-12s%-18s%-18s%-12s\n",i+1,rec[i].name,rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);
} else
printf("无此记录...\n");
}
}
void dele() //删除记录
{ int a;
list();
do
{ printf("删除几号记录?");
scanf("%d",&a);
}while(a>m&&a>0);
if(a!=m-1)
for(i=a;i<m;i++)
{rec[i-1]=rec[i];rec[i-1].num=i;
break;}
m--;
list();
}
void correct() //修改通讯录
{char xm[10];
printf("输入要修改的姓名:");
gets(xm);
for(i=0;i<m;i++)
{ if(strcmp(xm,rec[i].name)==0)
{ printf("电话:");gets(rec[i].tel);
printf("手机:");gets(rec[i].celtel);
printf("工作单位:");gets(rec[i].dw);
printf("EMAIL:");gets(rec[i].email);
printf("QQ:");gets(rec[i].qq);
break;}
}printf("修改完成!\n");
list();
}
void save() //保存通讯录内容到文件中
{ FILE *fp;
if((fp=fopen("txl.txt","wb"))==NULL)
{printf("Can't open file");exit(0);}
list();
for(i=0;i<m;i++)
if(fwrite(&rec[i],sizeof(struct record),1,fp)!=1)
printf("File wrete error!\n");
fclose(fp);
}
void load() //从文件读记录到通讯录中
{ FILE *fp;
if((fp=fopen("txl.txt","rb"))==NULL)
{printf("Can't open file");exit(0);}
for(i=0;i<SIZE;i++)
{ if(fread(&rec[i],sizeof(struct record),1,fp)!=1)
{if(feof(fp))break;
printf("File wrete error!\n");}
}
list();
fclose(fp);
}