高分求大神帮忙见见这个成绩管理系统的代码
高分求大神帮忙看看这个成绩管理系统的代码
我用下面这个两个函数存入信息和读取信息,存入信息之后就关闭程序,然后再打开为什么就读取不了原先输入的信息呢?这个问题纠结了我很久。求帮忙
void save(struct Student stu[]) //存入学生成绩的函数
{
FILE *fp;
int i;
for(i=0;i<N;i++) //N是我定义的全局变量,学生的人数
{
printf("请输入第%d个学生的个人信息\n",i+1);
printf("姓名:");
scanf("%s",stu[i].name);
printf("学号:");
scanf("%d",&stu[i].num);
printf("性别:");
scanf("%s",stu[i].sex);
printf("数学:");
scanf("%f",&stu[i].math);
printf("C语言:");
scanf("%f",&stu[i].C);
printf("英语:");
scanf("%f",&stu[i].english);
stu[i].sum=(stu[i].math+stu[i].C+stu[i].english);
stu[i].aver=stu[i].sum/3;
}
fp=fopen("stu.dat","wb");
for(i=0;i<N;i++)
{
fprintf(fp,"%s %d %s %f %f %f %f %f",stu[i].name,stu[i].num,stu[i].sex,stu[i].math,stu[i].C,stu[i].english,stu[i].sum,stu[i].aver);
}
fclose(fp);
printf("个人信息已成功保存!");
}
void refer1(struct Student stu[]) //用姓名查找信息的函数
{
char str[10];
FILE *fp;
int i=0;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("查无此文件!");
welcom();
return;
}
printf("请输入姓名:");
gets(str);
while(stu[i].name!='\0')
{
if(strcmp(str,stu[i].name)==0)
{
printf("姓名\t学号\t性别\t数学\tC语言\t英语\t总分\t平均分\n");
fscanf(fp,"%s%d%s%f%f%f%f%f",&stu[i].name,&stu[i].num,&stu[i].sex,&stu[i].math,&stu[i].C,&stu[i].english,&stu[i].sum,&stu[i].aver);
printf("%s\t%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",stu[i].name,stu[i].num,stu[i].sex,stu[i].math,stu[i].C,stu[i].english,stu[i].sum,stu[i].aver);
} break;
i++;
}
fclose(fp);
}
------解决方案--------------------
就是在refer函数一开始,打开文件后就先把内容全读到stu[]数组里来,之后的查询直接在数组里查就行了
我用下面这个两个函数存入信息和读取信息,存入信息之后就关闭程序,然后再打开为什么就读取不了原先输入的信息呢?这个问题纠结了我很久。求帮忙
void save(struct Student stu[]) //存入学生成绩的函数
{
FILE *fp;
int i;
for(i=0;i<N;i++) //N是我定义的全局变量,学生的人数
{
printf("请输入第%d个学生的个人信息\n",i+1);
printf("姓名:");
scanf("%s",stu[i].name);
printf("学号:");
scanf("%d",&stu[i].num);
printf("性别:");
scanf("%s",stu[i].sex);
printf("数学:");
scanf("%f",&stu[i].math);
printf("C语言:");
scanf("%f",&stu[i].C);
printf("英语:");
scanf("%f",&stu[i].english);
stu[i].sum=(stu[i].math+stu[i].C+stu[i].english);
stu[i].aver=stu[i].sum/3;
}
fp=fopen("stu.dat","wb");
for(i=0;i<N;i++)
{
fprintf(fp,"%s %d %s %f %f %f %f %f",stu[i].name,stu[i].num,stu[i].sex,stu[i].math,stu[i].C,stu[i].english,stu[i].sum,stu[i].aver);
}
fclose(fp);
printf("个人信息已成功保存!");
}
void refer1(struct Student stu[]) //用姓名查找信息的函数
{
char str[10];
FILE *fp;
int i=0;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("查无此文件!");
welcom();
return;
}
printf("请输入姓名:");
gets(str);
while(stu[i].name!='\0')
{
if(strcmp(str,stu[i].name)==0)
{
printf("姓名\t学号\t性别\t数学\tC语言\t英语\t总分\t平均分\n");
fscanf(fp,"%s%d%s%f%f%f%f%f",&stu[i].name,&stu[i].num,&stu[i].sex,&stu[i].math,&stu[i].C,&stu[i].english,&stu[i].sum,&stu[i].aver);
printf("%s\t%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",stu[i].name,stu[i].num,stu[i].sex,stu[i].math,stu[i].C,stu[i].english,stu[i].sum,stu[i].aver);
} break;
i++;
}
fclose(fp);
}
C
------解决方案--------------------
就是在refer函数一开始,打开文件后就先把内容全读到stu[]数组里来,之后的查询直接在数组里查就行了