#include<stdio.h>
#include <string.h>
struct student /*定义一个学生信息结构体*/
{
int num;
char name[10];
char sex;
int age;
float score[5];
};
struct student std1[10]; /*定义两个包含10个学生的以上结构的结构体数组std1[10]和std2[10]*/
struct student std2[10];
void input_data() /*实现将10个学生的数据信息读入到数组std1[10]中。(input_data( )函数)*/
{
int i;
printf("please enter the message of ten students/n");
printf("num name sex age computer programmer maths English PE/n");
for(i=0;i<10;i++)
scanf("%d %s %c %d %f %f %f %f %f",&std1[i].num,std1[i].name,&std1[i].sex,&std1[i].age,
&std1[i].score[0],&std1[i].score[1],&std1[i].score[2],&std1[i].score[3],&std1[i].score[4]);
}
void output_data() /*实现将10个学生的数据信息输出到屏幕中。(output_data( )函数)*/
{
int i;
FILE *fp;
printf(" num name sex age computer programmer maths English PE/n");
fp=fopen("std.dat","rb");
for(i=0;i<10;i++)
{ fread(&std1[i],sizeof(struct student),1,fp);
printf("%5d %-10s %-3c %4d %4f %4f %4f %4f %4f/n",std1[i].num,std1[i].name,std1[i].sex,
std1[i].age,std1[i].score[0],std1[i].score[1],std1[i].score[2],std1[i].score[3],std1[i].score[4]);
}
fclose(fp);
}
void data_write() /*将数组std1[10]中的数据写入一个名为std.dat的二进制文件中。(data_write( )函数)*/
{
FILE *fp;
int i;
if((fp=fopen("std.dat","wb"))==NULL)
{printf("cannot open file/n");
return;
}
for(i=0;i<10;i++)
if(fwrite(&std1[i],sizeof(struct student),1,fp)!=1)
printf("file write error/n");
fclose(fp);
}
void data_read() /*从文件std.dat中将数据读入到数组std2[10]中。(data_read( )函数)*/
{
FILE *fp;
int i;
if((fp=fopen("std.dat","rb"))==NULL)
{printf("cannot open infile/n");
return;}
for(i=0;i<10;i++)
fread(&std2[i],sizeof(struct student),1,fp);
fclose(fp);
}
void average1() /*统计1*/
{
float *p,aver1,sum1=0.0;
int m;
printf("enter the number of score:");
scanf("%d",&m); /*输入课程号*/
p=&std2[0].score[m];
for(;p<=&std2[9].score[m];p=p+5)
sum1=sum1+(*p); /*统计某门课程的总分*/
aver1=sum1/10; /*统计某门课程的平均分*/
printf("the sum and average of Score %d are:/n",m);
printf("sum1=%f/n",sum1);
printf("aver1=%f/n",aver1);
}
void average2() /*统计2*/
{
float aver[10],sum2=0.0;
int i;
for(i=0;i<10;i++) /*统计每个学生的总分和平均分*/
{
sum2=std2[i].score[0]+std2[i].score[1]+std2[i].score[2]+std2[i].score[3]+std1[i].score[4];
aver[i]=sum2/5;
printf("the sum and average of Student %d are:/n",i);
printf("sum2=%f/n",sum2);
printf("aver[i]=%f/n",aver[i]);
}
}
main() /*定义一个主函数,在主函数中调用以上四个函数,实现对学生数据信息的文件读写
和数组数据的输入输出功能,以菜单方式实现功能选择。(main( )函数)*/
{
char ch;
printf("****menu****/n");
printf("1.input_data();data_write() (please enter '1')/n");
printf("2.output_data() (please enter '2')/n");
printf("3.data_read()from file;void average1();void average2() stat. (please enter '4')/n");
printf("5.exit(0) (please enter '5')/n");
ch=getchar();
switch(ch)
{case'1':input_data();data_write();break;
case'2':output_data();break;
case'3':data_read();average1();average2();break;
case'5':exit(0);
}
}
请高手帮帮!