⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xs.h

📁 用c语言编写的学生成绩管理程序。有不完美之处。
💻 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 + -