当前位置:文档之家› C语言课程设计源程序(含注释)

C语言课程设计源程序(含注释)

#include
#include
#include
#define N 24
#define M 6
struct student
{
int num;
char name[15];
int score[M],Goodstu[4]; /*Goodstu判断是否是优等生*/
float jqave;
int rank;
}stu[N];
struct kecheng
{
int num;
char kcname[20];
float xuefen,ave; /*course[].ave[]课程标准差*/
int count[5]; /*course[].count[]统计各分数段人数*/
}course[M];
void ReadDat1()
{
printf("读入学生成绩信息jj100207\n");
int i,j;
char str1[100];
FILE *fp;
if((fp=fopen("h:\\jj100207.txt","r"))==NULL) /*修改*/
{
printf("Cannot open the file1!\n");
exit(0);
}fgets(str1,100,fp);
printf("%s",str1);
for(i=0;i{
fscanf(fp,"%d%s",&stu[i].num,stu[i].name);
printf("%4d%8s",stu[i].num,stu[i].name);
for(j=0;j{
fscanf(fp,"%d",&stu[i].score[j]);
printf("%8d",stu[i].score[j]);
}
printf("\n");
}
fclose(fp);
}
void ReadDat2()
{
printf("读入课程信息jj02KC\n");
FILE *fp=fopen("h:\\jj02KC.txt","r"); /*修改*/;
int k;
char str2[30];
fgets(str2,30,fp);
printf("%s",str2);
for(k=0;k{
fscanf(fp,"%d%s%f",&course[k].num,course[k].kcname,&course[k].xuefen);
printf("%-8d%-9s%4.1f\n",course[k].num,course[k].kcname,course[k].xuefen);
}
printf("\n");
fclose(fp);
}
void func1() /*计算班级平均成绩*/
{
int i,j;
float s=0,sum;
for(i=0;is+=course[i].xuefen; /*总学分*/
for(i=0;i{
sum=0;
stu[i].rank=1; /*假定初始名次为第一名*/
for(j=0;jsum+=stu[i].score[j]*course[j].xuefen;
stu[i].jqave=sum/s; /*加权平均分*/
}
for(i=0;i{
for(j=0;jif(stu[j].jqave>stu[i].jqave)stu[i].rank+=1; /*对比算名次rank*/
}
FILE *fp;
if((fp=fopen("h:\\MC100207.txt","w"))==NULL) /*修改*/
{
printf("Faile to build a new file!\n");
exit(0);
}
printf("创建MC100207.txt学生成绩排名文本文件\n");
printf("名次 学号 姓名 C语言 摄影 传播 电模 物理 线代 平均成绩\n");
fprintf(fp,"名次 学号 姓名 C语言 摄影 传播 电模 物理 线代 平均成绩\n");
for(i=0;i{
printf("%3d%4d%9s",stu[i].rank,stu[i].num,stu[i].name);
fprintf(fp,"%3d%4d%9s",stu[i].rank,stu[i].num,stu[i].name);
for(j=0;j{
printf("%5d",stu[i].score[j]);
fprintf(fp,"%5d",stu[i].score[j]); /*输出班级平均成绩*/
}
printf("%6.1f\n",stu[i].jqave);
fprintf(fp,"%6.1f\n",stu[i].jqave);
}
printf("\n");
fclose(fp);
}
void func2() /*统计平均分、标准差及各分数段人数*/
{
int i,j;
float b[M];
for(i=0;ib[i]=0; /*学生成绩与课程平均分差的平方*/
float sum[M];
for(j=0;j{
sum[j]=0; /*某课程的所有学生分数总和*/
for(i=0;isum[j]+=stu[i].score[j];
}
for(j=0;j{
for(i=0;ib[j]+=(stu[i].score[j]-sum[j]/N)*(stu[i].score

[j]-sum[j]/N); /*学生成绩与课程平均分差的平方*/
course[j].ave=(float)sqrt((double)(b[j]/N)); /*课程标准差*/
}
for(j=0;jfor(i=0;i<5;i++)
course[j].count[i]=0;
for(j=0;j{
for(i=0;i{
if(stu[i].score[j]>=90) course[j].count[0]+=1;
else if(stu[i].score[j]>=80) course[j].count[1]+=1;
else if(stu[i].score[j]>=70) course[j].count[2]+=1; /*把分数段分四组写入四个数组count[]*/
else if(stu[i].score[j]>=60) course[j].count[3]+=1; /*把每门课程的各分数段人数写入数组count[]*/
else course[j].count[4]+=1;
}
}
FILE *fp;
if((fp=fopen("h:\\KC100207.txt","w"))==NULL) /*修改*/
{
printf("Faile to build a new file!\n");
exit(0);
}
fprintf(fp,"编号 课程名称 课程学分 标准差 优秀 良好 中等 及格 不及格\n");
for(i=0;i{
fprintf(fp,"%-6d%-10s%-7.1f%7.1f",i+1,course[i].kcname,course[i].xuefen,course[i].ave);
for(j=0;j<5;j++)
fprintf(fp,"%5d",course[i].count[j]); /*写入各分数段人数*/
fprintf(fp,"\n");
}
fclose(fp);
}
void func3() /*打印每名同学的成绩条*/
{
int i,j;
float s=0,sum;
for(i=0;is+=course[i].xuefen; /*总学分*/
for(i=0;i{
sum=0;
stu[i].rank=1;
for(j=0;jsum+=stu[i].score[j]*course[j].xuefen;
stu[i].jqave=sum/s; /*学生加权平均分*/
}
for(i=0;i{
for(j=0;jif(stu[j].jqave>stu[i].jqave)stu[i].rank+=1; /*排名*/
}
FILE *fp;
if((fp=fopen("h:\\CJT100207.txt","w"))==NULL) /*修改*/
{
printf("Faile to build a new file!\n");
exit(0);
}
for(i=0;i{
fprintf(fp,"名次 学号 姓名 C语言 摄影 传播 电模 物理 线代\n");
fprintf(fp,"%3d%6d%8s",stu[i].rank,stu[i].num,stu[i].name);
for(j=0;jfprintf(fp,"%8d",stu[i].score[j]);
fprintf(fp,"\n");
}
fclose(fp);
}
void func4() /*屏幕显示不及格名单*/
{
int i,j;
printf("不及格课程学生名单\n");
printf("学号 姓名 不及格课程名称 课程学分 课程成绩\n");
for(i=0;ifor(j=0;jif(stu[i].score[j]<60)
{
printf("%-5d",stu[i].num);
printf("%-8s",stu[i].name);
printf("%10s",course[j].kcname);
printf("%12.1f",course[j].xuefen);
printf("%8d\n",stu[i].score[j]);
}
printf("\n");
}
void func5() /*屏幕显示优等生名单*/
{
int i,j;
float s=0,sum;
for(i=0;is+=course[i].xuefen; /*所有课程总学分*/
for(i=0;i{
sum=0;
stu[i].rank=1;
for(j=0;jsum+=stu[i].score[j]*course[j].xuefen;
stu[i].jqave=sum/s; /*每个学生的加权平均分*/
}
for(i=0;i{
for(j=0;jif(stu[j].jqave>stu[i].jqave)stu[i].rank+=1; /*算名次*/
}
printf("

优等生名单\n");
printf("学号 姓名 C语言 摄影 传播 电模 物理 线代 平均分 名次\n");
for(i=0;ifor(j=0;j<4;j++)
stu[i].Goodstu[j]=0; /*每个stu[].Goodstu[]的初始值为0*/
for(i=0;i{
for(j=0;jif(stu[i].jqave>=92||stu[i].rank<=5||(stu[i].jqave>=88&&stu[i].score[j]>=99)) break;
if(j{
printf("%4d",stu[i].num); /*stu[].Goodstu[]的值为1即为真则是优等生*/
printf("%9s",stu[i].name);
for(j=0;jprintf("%6d",stu[i].score[j]);
printf("%8.1f",stu[i].jqave);
printf("%5d\n",stu[i].rank);
printf("\n");
}
}
}
void menu()
{
int x;
do
{
printf("函数菜单:\n");
printf("1:优等生名单\n");
printf("2:不及格名单\n");
printf("3:输出文件 \n");
scanf("%d",&x);
switch(x)
{
case 0:printf("退出程序\n");break;
case 1:func5();break;
case 2:func4();break;
case 3:func1();
func2();
func3();
printf("文件已输出!\n");break;
//default:printf("输入错误,请重新输入!\n");
}
}while(x!=0);
}
void main()
{
ReadDat1();
ReadDat2();
menu();
}


相关主题
文本预览
相关文档 最新文档