WIN32平台下学生成绩,课程情况显示程序

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define  N 15
#define  M  5
struct  student//每个学生成绩的信息,包括学生编号,姓名,5门课程成绩,平均分,名次。
{
 int    num;
 char   name[10];
 int    score[5];
 double ave ;
 int    mc;
}stud[N];
struct  kecheng//课程情况,包括课程编号,名字,学分,各科平均分,标准差,分数段信息。
{
 int    num;
 char   name[10];
 float  xuefen;
 float  gkave;
 double bzc;
 int    fsd[5];
}KC[M];
void ReadDat1()//读取文件内容(包含学生成绩信息)
{
 FILE*fp;
 int i,j;
 char  str1[100];
 fp=fopen("C://C课设//jj10901.txt","r");
 if(fp==NULL)
 {
  printf("cannot open the jj10901.txt file/n");
  exit(0);
 }

 fgets(str1,100,fp);
 printf("%5s",str1);
 for(i=0;i<N;i++)
 {
  fscanf(fp,"%d%s",&stud[i].num,stud[i].name);
  printf("%2d%10s",stud[i].num,stud[i].name);
  for(j=0;j<M;j++)
  {
   fscanf(fp,"%d",&stud[i].score[j]);
   printf("%8d",stud[i].score[j]);
  }
  printf("/n");
 }
 fclose(fp);
}
void ReadDat2()//读取课程内容(包含科目学分信息)
{
 FILE *fp;
 int i;
 char str2[100];
 fp=fopen("C://C课设//jj10901KC.txt","r");
    if(fp==NULL)
 {
  printf("cannot open the jj10901KC.txt file/n");
  exit(0);
 }
 fgets(str2,100,fp);
 printf("%4s",str2);
 for(i=0;i<M;i++)
 {
  fscanf(fp,"%d%s%f",&KC[i].num,KC[i].name,&KC[i].xuefen);
   printf("%2d%11s%13.1f/n",KC[i].num,KC[i].name,KC[i].xuefen);
 }
    fclose(fp);
}

void Jqave()//求取每个学生平均分
{
 int i,j;
 float s=0,sum;
 for(i=0;i<M;i++)
  s=s+KC[i].xuefen;
 for(i=0;i<N;i++)
 {
  sum=0;
  for(j=0;j<M;j++)
   sum=sum+stud[i].score[j]*KC[j].xuefen;
  stud[i].ave=(int)(sum*10.0/s+0.5)/10.0;
 }
}
void mc()//求取每个学生名次

{
 int i,j;
 for(i=0;i<N;i++)
 {
  stud[i].mc=1;
  for(j=0;j<N;j++)
   if(stud[i].ave<stud[j].ave)
    stud[i].mc++;
   printf("%d/n",stud[i].mc);
 }
}
void gkave()//求取各科平均分
{
 int i,j;
 float gksum;
 printf("        各科平均分/n");
 for(i=0;i<M;i++)
 {
  gksum=0;
  for(j=0;j<N;j++)
   gksum+=stud[j].score[i];
  KC[i].gkave=gksum/N;
  printf("%5s%10.2f/n",KC[i].name,KC[i].gkave);
 }
}
void bzc()//求取各科标准差
{
 int i,j;
 float  m;
 printf(" 科目    标准差/n");
 for(i=0;i<M;i++)
 {
  m=0;
  for(j=0;j<N;j++)
   m=(stud[j].score[i]-KC[i].gkave)*(stud[j].score[i]-KC[i].gkave)/N;
  KC[i].bzc=sqrt(m);
  printf("%5s",KC[i].name);
  printf("%8.2f/n",KC[i].bzc);
 }
}
void fsd()//求取各科分数段

{
    int i,j;
 for(j=0;j<M;j++)
 {
  KC[j].fsd[0]=0;
  KC[j].fsd[1]=0;
  KC[j].fsd[2]=0;
  KC[j].fsd[3]=0;
  KC[j].fsd[4]=0;
        for(i=0;i<N;i++)
  switch(stud[i].score[j]/10)
   {
      case 10:
      case 9:KC[j].fsd[0]++;break;
      case 8:KC[j].fsd[1]++;break;
      case 7:KC[j].fsd[2]++;break;
      case 6:KC[j].fsd[3]++;break;
      case 5:
      case 4:
      case 3:
      case 2:
      case 1:
      case 0:KC[j].fsd[4]++; break; 
    }
 }
 printf("分数段    90~100    80~90    70~80    60~70    0~60/n");
     for(j=0;j<M;j++)
  {
   printf("%5s",KC[j].name); 
      printf("%9d%9d%9d%9d%9d/n",KC[j].fsd[0],KC[j].fsd[1],KC[j].fsd[2],KC[j].fsd[3],KC[j].fsd[4]);
  }
}
void bjg()//求取不及格学生的名单
{
 int i,j;
 printf(" 姓 名  学号 不及格科目 课程学分 成绩/n");
 for(j=0;j<M;j++)
 {
  for(i=0;i<N;i++)
   if(stud[i].score[j]<60) 
     printf("%6s%5d%9s%9.1f%6d/n",stud[i].name,stud[i].num,KC[j].name,KC[j].xuefen,stud[i].score[j]);
 }
 printf("/n");
}  
void yds()//求取优等生信息

{
 int i,j;
 printf(" 姓 名  学号  平均成绩  名次   英语   数学   物理  电模  C语言/n");
 for(i=0;i<N;i++)
    {
  if((stud[i].ave>=92)||(stud[i].mc<=5)||(stud[i].ave>=88&&stud[i].score[j]>=99))
  {
   printf("%6s%5d%8.1f%8d",stud[i].name,stud[i].num,stud[i].ave,stud[i].mc);
        for(j=0;j<M;j++)
      printf("%7d",stud[i].score[j]);
           printf("/n");
  }
 }   
  
}
void Write1()//将学生新信息写入到文件中。
{
 FILE*fp;
 int i,j;
 if((fp=fopen("C://C课设<A href="file:////MC1090127.txt","w"))==NULL">//MC1090127.txt","w"))==NULL)
 {
  printf("Faile to build a new file!/n");
  exit(0);
 }
 fprintf(fp,"名次  学号    姓名     英语    数学     物理    电模    C语言   加权平均分/n");
 for(i=0;i<N;i++)
 {
  fprintf(fp,"%2d%6d%11s",stud[i].mc,stud[i].num,stud[i].name);
     for(j=0;j<M;j++)
     fprintf(fp," %7d",stud[i].score[j]);
     fprintf(fp,"%10.2f /n",stud[i].ave);
 }
 fclose(fp);
}
void Write2()//将学生新信息写入到文件中。
{
 FILE*fp;
 int i,j;
 fp=fopen("C://C课设//jj1090127.txt","w");
 if(fp==NULL)
 {
  printf("Faile to build a new file!/n");
  exit(0);
 }
 fprintf(fp,"编号   课程名称  课程学分  标准差  优秀  良好  中等  及格  不及格/n");
 for(i=0;i<M;i++)
 {
  fprintf(fp,"%2d%10s%9.2f%9.2f",i,KC[i].name,KC[i].xuefen,KC[i].bzc);
  for(j=0;j<M;j++)
   fprintf(fp,"%6d",KC[i].fsd[j]);
  fprintf(fp,"/n");
 }
 fclose(fp);
}
void Write3()//将课程新信息写入到文件中。

 FILE*fp;
 int i,j;
 if((fp=fopen("C://C课设<A href="file:////CJTMC1090127.txt","w"))==NULL">//CJTMC1090127.txt","w"))==NULL)
 {
  printf("Faile to build a new file!/n");
  exit(0);
 }
 for(i=0;i<N;i++)
 {
  fprintf(fp,"==============================成绩表==============================/n");
        fprintf(fp,"学号    姓名    英语    数学     物理    电模    C语言    名次/n");
       fprintf(fp,"%2d%10s",stud[i].num,stud[i].name);
            for(j=0;j<M;j++)
           fprintf(fp," %7d",stud[i].score[j]);
          fprintf(fp,"%8d",stud[i].mc);
             fprintf(fp,"/n");
       fprintf(fp,"/n");
 }
 fclose(fp);
}
void main()
{
ReadDat1();
    printf("/n");
    ReadDat2();
Jqave();
printf("/n");
mc();
printf("/n");
    gkave();
printf("/n");
bzc();
printf("/n");
printf("/n");
fsd();
printf("/n");
bjg();
printf("/n");
yds();
    Write1();
Write2();
Write3();
}

注:当对文件中的数据进行读取和输入时,格式不重要,都能得到正确的数值,例子如下:

int main(int argc, char* argv[])
{
 FILE * pf = fopen("123.txt","r+");
 fprintf(pf,"%3d%4d%5d%16s",1,2,3,"hello");
 int i,j,k;char ps[100]={0};
 fseek( pf, 0, SEEK_SET);
 fscanf( pf, "%4d%5d%4d%s", &i,&j,&k,ps );
 cout<<i<<endl<<j<<endl<<k<<endl<<ps<<endl;
 return 0;
}

 

你可能感兴趣的:(File,null,ini,Build,FP,平台)