请问如何将代码修改成链表,可以储存到磁盘文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h> //字符串处理
#include<windows.h>
int n=4;
struct student
{
int num; //学号
char name[10]; //名字
float score[3]; //成绩
}stud[100];
int i,choose,a,t=0;
long int num;
int main ()
{
void save(void);
void input(void);
void output(void);
void scoremodify();
void namemodify();
void scorecheck();
void namecheck();
void Addstudent();
void sclsearch();
while(1)
{
printf(" ********************************************************* \n");
printf(" >>欢迎进入学生成绩记录系统<< \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(" 【0】-------------------------- 退出 \n");
printf(" ********************************************************* \n");
printf(" 请输入相应菜单编号: ");
scanf("%d",&a);
switch(a)
{
case 1:
input(); //输入
save(); //保存
break;
case 2:
output(); //输出
printf("\n");
system("PAUSE");
system("CLS"); //清屏
break;
case 3:
Addstudent();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 4:
scorecheck();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 5:
namecheck();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 6:
scoremodify();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 7:
namemodify();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 8:
sclsearch();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 0:exit(0);
default: ;
}
}
return 0;
}
void save()
{
FILE *fp;
if ((fp=fopen("stu.dat","wb"))==NULL)/*以只写的方式打开文件*/
{
printf("无法打开文件!\n");
return ;
}
for(i=0;i<n;i++)
if (fwrite (&stud[i],sizeof(struct student),1,fp)!=1)/*写入字节为 1 的信息在文件中*/
printf("文件写入错误!\n");
fclose(fp);/*关闭文件*/
}
void input()//录入学生成绩
{
int i;
char a;
for(i=0;i<n;i++)
{
printf("\n 请输入学生成绩信息:\n");
printf("\n 请依次输入 学号 姓名 c语言成绩:\n");
scanf("%d%s%f",&stud[i].num,stud[i].name,&stud[i].score[0]);
printf("输入:y(继续),n(终止)!\n");
fflush(stdin); //清除输入缓存
scanf("%c",&a);
if(a=='n' || a=='N')
break;
}
n=i+1;
}
void Addstudent()
{
FILE *fp;
struct student s;
fp=fopen("stu.dat","ab");
if((fp=fopen("stu.dat","ab"))==NULL)
printf("File open error!\n");
else
{
printf("请输入所增加学生的 学号 姓名 c语言成绩:\n");
scanf("%d",&s.num );
scanf("%s",s.name);
scanf("%f",&s.score[0]);
fwrite (&s,sizeof(struct student),1,fp);
fclose(fp);/*关闭文件*/
}
printf("写入成功!\n");
}//end function Addstudent;
void output()
{
int i;
//float s;
FILE *fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
printf("\n 学号 姓名 c语言成绩\n");
for(i=0;fread(&stud[i],sizeof(struct student),1,fp)==1;i++)
{
printf("%d %10s % 10.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
fclose(fp);
n=i;
}
void scoremodify()
{
int number,i;
printf("请输入要修改信息的学生学号:");
scanf("%d",&number);
for(i=0;i<n;i++)
if(number==stud[i].num)
break;/*查找判断*/
if(i<n)/*查找判断*/
{
printf("请输入修改后的学生的信息:");
printf("\n 请输入学生的 c语言成绩:");
scanf("%f",&stud[i].score[0]);
printf("\n学号 姓名 c语言成绩\n");
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
save();
}
else
printf("没找到该学生的信息\n");
system("pause");system("cls");
}
void namemodify()
{
int i;
char name[10];
printf("请输入要修改信息的学生姓名:");
scanf("%s",&name);
for(i=0;i<n;i++)
if(strcmp(stud[i].name,name)==0)
break;/*查找判断*/
if(i<n)/*查找判断*/
{
printf("请输入修改后的学生的信息:");
printf("\n 请输入学生的 c语言成绩:");
scanf("%f",&stud[i].score[0]);
printf("\n学号 姓名 c语言成绩\n");
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
save();
}
else
printf("没找到该学生的信息\n");
system("pause");system("cls");
}
void namecheck()
{
char name[10];
printf("按照姓名查询请按\n");
printf("\n 请输入姓名:");
scanf("%s",&name);
printf("查询结果\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
if(strcmp(stud[i].name,name)==0)
{
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}
void scorecheck()
{
int b;
printf("按照学号查询请按\n");
{
printf("\n 请输入学号:");
scanf("%d",&b);
printf("查询结果\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
if(stud[i].num ==b)
{
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}
}
void sclsearch()
{
int i;
printf("90 分以上:\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=90)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
printf("80~89:\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=80&&stud[i].score[0]<90)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
printf("70~79:\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=70&&stud[i].score[0]<80)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
printf("60~69:\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=60&&stud[i].score[0]<70)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
printf("60 分以下:\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]<60)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}