📄 xs.h
字号:
#include "stdio.h"
struct studata
{int num;
long stunum;
char sex;
float score[5];
};
int len=sizeof(struct studata);
char chmenu()
{char ch;
printf ("\n\t0. 列出男生成绩(0)"
"\n\t1. 列出女生成绩(1)"
"\n\t2. 列出个人平均成绩比较高的学生成绩信息"
"\n\t3. 列出固定学生个人成绩信息"
"\n\t4. 列出每个人的平均成绩信息"
"\n\t5. 列出每个科目平均成绩信息"
"\n\t6. 查找个人平均成绩最高的学生信"
"\n\t7. 查找单一科目信息"
"\n\t8. exit\n");
do {printf ("please choose(0-8):\n");
ch=getchar();
}
while(ch<'0'||ch>'8');
return (ch);
}
void creat (FILE *fp)
{struct studata stu={0};
int i;
do{printf("输入 序号(0 to end),学号,性别(0 or 1),四门科目成绩:\n");
scanf("%d,%ld,%c",&stu.num,&stu.stunum,&stu.sex);
if(stu.num==0) break;
for(i=0;i<4;i++)
scanf("%f",&stu.score[i]);
fwrite(&stu,len,1,fp);
}while(1);
return;
}
void list0(FILE *fp)
{struct studata stu={0};
int i;
while(fread(&stu,len,1,fp))
{if(stu.sex=='0')
{ printf("\t%-4d%-8ld%c",stu.num,stu.stunum,stu.sex);
for(i=0;i<4;i++)
printf("%9.2f",stu.score[i]);
printf("\n");
}
}
printf("\n");
return;
}
void list1(FILE *fp)
{struct studata stu={0};
int i;
while(fread(&stu,len,1,fp))
{if(stu.sex=='1')
{ printf("\t%-4d%-8ld%c",stu.num,stu.stunum,stu.sex);
for(i=0;i<4;i++)
printf("%9.2f",stu.score[i]);
printf("\n");
}
}
printf("\n");
return;
}
void averindi (FILE *fp,FILE *fp2)//列出个人平均成绩比较高的学生成绩信息
{struct studata stu={0};
int i;
float sum;
while(fread(&stu,len,1,fp))
{stu.score[4]=0;
sum=0;
for(i=0;i<4;i++)
sum=sum+stu.score[i];
stu.score[4]=sum/4;
fwrite(&stu,len,1,fp2);
}
}
void aversub (FILE *fp)//列出每个科目平均成绩信息
{struct studata stu={0};
int i,p,j;
float sum[4]={0};
for(j=0;fread(&stu,len,1,fp);j++)
for(i=0;i<4;i++)
sum[i]=sum[i]+stu.score[i];
p=j;
for(i=0;i<4;i++)
{sum[i]=sum[i]/p;
printf("score[%d] aver of the %d student:%f\n",i,p,sum[i]);
printf("\n");
}
}
void hgidav (FILE *fp,FILE *fp2)//列出个人平均成绩比较高的学生成绩信息
{struct studata stu={0};
int i;
float score;
printf("Enter the begin score:");
scanf("%f",&score);
averindi(fp,fp2);
rewind(fp2);
while(fread(&stu,len,1,fp2))
if(stu.score[4]>=score)
{printf("\t%-4d%-8ld%c",stu.num,stu.stunum,stu.sex);
for(i=0;i<5;i++)
printf("%9.2f",stu.score[i]);
printf("\n");
}
return;
}
void aridav (FILE *fp,FILE *fp2)//列出固定学生个人成绩信息
{struct studata stu={0};
int i,j,p,k,s;
float a[40],t;
averindi(fp,fp2);
rewind (fp2);
for (i=0;fread(&stu,len,1,fp2);i++)
a[i]=stu.score[4];
p=i;
for(i=0;i<p-1;i++)//选择排序
{k=i;
for(j=i+1;j<p;j++)
if(a[j]>a[k]) k=j;
if(k!=i)
{t=a[i];
a[i]=a[k];
a[k]=t;
}
}
rewind(fp2);
for(i=0;i<p;i++)
{while(fread(&stu,len,1,fp2))
if(a[i]== stu.score[4])
{printf("\t%-4d%-8ld%c",stu.num,stu.stunum,stu.sex);
for(s=0;s<5;s++)
printf("%9.2f",stu.score[s]);
printf("\n");}
rewind(fp2);
}
printf("\n");
}
void idavhigh (FILE *fp,FILE *fp2)//查找个人平均成绩最高的学生信
{struct studata stu={0};
float max=0;
int maxp ,i;
averindi(fp,fp2);
rewind(fp2);
for(i=0;fread(&stu,len,1,fp2);i++)
if(stu.score[4]>max)
{max=stu.score[4];
maxp=i;
}
fseek(fp2,maxp*len,0);
fread(&stu,len,1,fp2);
printf("The aver indi highest is:\n");
printf("%-4d%-8ld%c",stu.num,stu.stunum,stu.sex);
for(i=0;i<5;i++)
printf("%9.2f",stu.score[i]);
printf("\n");
}
void subhiest (FILE *fp)//查找单科科目最高分的学生信息
{struct studata stu={0};
int i,ch2,maxp;
float max=0;
printf("Enter your wonder score number(0-3):");
scanf("%d",&ch2);
for(i=0;fread(&stu,len,1,fp);i++)
if(stu.score[ch2]>max)
{max=stu.score[ch2];
maxp=i;
}
fseek(fp,maxp*len,0);
fread(&stu,len,1,fp);
printf("The highest one is:\n");
printf("%-4d%-8ld%c",stu.num,stu.stunum,stu.sex);
for(i=0;i<4;i++)
printf("%9.2f",stu.score[i]);
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -