#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;
}