想给下面的小程序 加一个文件 储存数据 请问该怎么写?谢谢!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char no[20];//学号//
char name[20];
char cls[30]; //班级//
float grade[10];//四门单科成绩//
int num1;//名次//
float total;
float mark[10];//评分//
int num2;
}stu;
int search(stu t[],int n,char *s);//查找,参数为记录数组和记录条数以及姓名s//
void print(stu temp);//显示指定的一条记录//
int del(stu t[],int n);//删除记录//
int a_student(stu t[],stu T[],int n);//四门总成绩排序//
int b_student(stu t[],int n);//综合成绩排序//
int menu_select();//主菜单函数//
void list(stu t[],int n);//显示记录//
int insert(stu t[],stu a[],int n);//插入、录入//
void m_student(stu t[],int n);//修改数据//
int main()
{
int i;
char s[20];
stu adr[50],ad[50],a[50];//定义数组//
int length=0;//保存长度记录//
for(;;)//无限循环 //
{
switch(menu_select())
{
case 1:
length=insert(adr,ad,length);
break;
case 2:
a_student(adr,ad,length);
b_student(ad,length);
list(ad,length);
break;
case 3:
printf("请输入姓名或学号\n");
scanf("%s",s);
i=search(adr,length,s);
if(i==-1)
{
printf("未找到!\n");
}
else
{
print(ad[i]);
}
break;
case 4:
length=del(ad,length);
break;
case 5:
m_student(ad,length);
a_student(ad,a,length);
b_student(a,length);
break;
case 6:
exit(0);
}
system("pause");
}
return 0;
}
int search(stu t[],int n,char *s)//查找,参数为记录数组和记录条数以及姓名s//
{
int i;
for(i=0;i<n;i++)
{
if(strcmp(s,t[i].name)==0||strcmp(s,t[i].no)==0)//比较,记录中的姓名是否与待比较的姓名相同//
{
return i;//记录下标//
}
}
return -1;
}
void print(stu temp)//显示指定的一条记录//
{
printf("\n\n******************************************学生信息******************************************************\n");
printf("学号 姓名 班级 语文 数学 英语 物理 平均成绩 成绩排名 活动评分 考勤评分 评分成绩 评分排名\n");
printf("--------------------------------------------------------------------------------------------------------\n");
printf("%-20s%-20s%-10s",temp.no,temp.name,temp.cls);
printf("%-.1f %-.1f %-.1f %-.1f %-.1f %-2d ",temp.grade[0],temp.grade[1],temp.grade[2],temp.grade[3],temp.grade[4],temp.num1);
printf(" %-.1f %-.1f %-.1f %-2d\n",temp.mark[0],temp.mark[1],temp.mark[2],temp.num2);
printf("*****************************************************************************************************\n");
}
int del(stu t[],int n)//删除记录//
{
char s[20];//删除的姓名//
int ch=0;
int i,j;
printf("输入要删除的姓名\n");
scanf("%s",s);
i=search(t,n,s);//调用查找函数//
if(i==-1)
{
printf("未找到,无法删除\n");
}
else
{
print(t[i]);//输出该条消息//
printf("确认是否删除(1/0)\n");//确认是否删除//
scanf("%d",&ch);
if(ch==1)
{
for(j=i+1;j<n;j++)//删除该记录,实际后续记录前移//
{
strcpy(t[j-1].no,t[j].no);
strcpy(t[j-1].name,t[j].name);
strcpy(t[j-1].cls,t[j].cls);
t[j-1].grade[0]=t[j].grade[0];
t[j-1].grade[1]=t[j].grade[1];
t[j-1].grade[2]=t[j].grade[2];
t[j-1].grade[3]=t[j].grade[3];
t[j-1].grade[4],t[j].grade[4];
t[j-1].num1,t[j].num1;
t[j-1].mark[0],t[j].mark[0];
t[j-1].mark[1],t[j].mark[1];
t[j-1].mark[2],t[j].mark[2];
t[j-1].num2,t[j].num2;
}
n--;//记录数减一 //
}
}
return n;
}
int b_student(stu t[],int n)
{
int i,j,k;
stu te;
for(k=0;k<n-1;k++)
{
for(j=k+1;j<n;j++)
{
if(t[k].mark[2]<t[j].mark[2])//将每位学生的总成绩进行排名//
{
te=t[k];
t[k]=t[j];
t[j]=te;
}
}
}
for(i=0;i<n;i++)
{
t[i].num2=i+1;
}
}
int a_student(stu t[],stu T[],int n)
{
int i,j,k;
stu temp;
for(k=0;k<n-1;k++)
{
for(j=i+1;j<n;j++)
{
if(t[k].total<t[j].total)
{
temp=t[k];
t[k]=t[j];
t[j]=temp;
}
}
}
for(i=0;i<n;i++)
{
t[i].num1=i+1;
for(j=0;j<n;j++)
{
if(t[i].total==T[j].total)
{
T[j].num1=t[i].num1;
}
}
}
}
int menu_select()//主菜单函数//
{
int c;
system("cls");//清屏//
printf("\n\n\n 菜单:\n\n");
printf(" 1.录入学生信息\n");
printf(" 2.显示学生信息\n");
printf(" 3.查找信息 \n");
printf(" 4.删除同学信息\n");
printf(" 5.修改学生数据\n");
printf(" 6.程序结束\n");
printf(" \n");
do
{
scanf("%d",&c);//输入选项//
}
while(c<1||c>6);
return c;
}
void list(stu t[],int n)//显示记录//
{
int i,k;
system("cls");
printf("\n\n*****************************************学生信息*********************************************************\n");
printf("学号 姓名 班级 语文 数学 英语 物理 平均成绩 成绩排名 活动评分 考勤评分 评分成绩 评分排名\n");
printf("-------------------------------------------------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf("%-10s%-10s%-10s",t[i].no,t[i].name,t[i].cls);
printf("%-.1f %-.1f %-.1f %-.1f %-.1f %-2d ",t[i].grade[0],t[i].grade[1],t[i].grade[2],t[i].grade[3],t[i].grade[4],t[i].num1);
printf(" %-.1f %-.1f %-.1f %-2d\n",t[i].mark[0],t[i].mark[1],t[i].mark[2],t[i].num2);
if((i+1)%10==0)//判断输出是否达到10条记录//
{
system("pause");//冻结屏幕,便于观察程序的执行结果//
}
}
printf("*********************************************************************************************************\n");
}
int insert(stu t[],stu a[],int n)//插入、录入//
{
stu temp;
int i=0,j;
printf("请输入学号:\n");
scanf("%s",temp.no);
printf("请输入姓名:\n");
scanf("%s",temp.name);
printf("请输入班级:\n");
scanf("%s",temp.cls);
printf("请输入成绩:\n");
scanf("%f %f %f %f",&temp.grade[0],&temp.grade[1],&temp.grade[2],&temp.grade[3]);
printf("请输入评分:\n");
scanf("%f %f",&temp.mark[0],&temp.mark[1]);
temp.total=temp.grade[0]+temp.grade[1]+temp.grade[2]+temp.grade[3];//求每个学生的总成绩//
temp.grade[4]=temp.total/4;//计算平均成绩//
//试平均成绩、活动评分、考勤评分分别占综合测评总分的70%,15%,15%。//
temp.mark[2]=temp.grade[4]*0.70+temp.mark[0]*0.15+temp.mark[1]*0.15;
t[n]=temp;
a[n]=t[n];
n++;
return n;
}
void m_student(stu t[],int n)
{
int s=0,i;
char k[20];
stu T;
printf("修改的学号或姓名\n");
scanf("%s",k);
i=search(t,n,k);
if(i==-1)
{
printf("信息不存在\n");
}
else
{
printf("修改\n");
printf("请输入班级:\n");
scanf("%s",t[i].cls);
printf("请输入成绩:\n");
scanf("%f %f %f %f",&t[i].grade[0],&t[i].grade[1],&t[i].grade[2],&t[i].grade[3]);
printf("请输入评分:\n");
scanf("%f %f",&t[i].mark[0],&t[i].mark[1]);
t[i].total=t[i].grade[0]+t[i].grade[1]+t[i].grade[2]+t[i].grade[3];//求每个学生的总成绩//
t[i].grade[4]=t[i].total/4;//计算平均成绩//
//试平均成绩、活动评分、考勤评分分别占综合测评总分的70%,15%,15%。//
t[i].mark[2]=t[i].grade[4]*0.70+t[i].mark[0]*0.15+t[i].mark[1]*0.15;
}
printf("信息修改完毕\n");
}