学生成绩管理系统源代码,直接复制到codeblocks就可以运行
备注:因加了功能,且为了普适性和重复利用函数,代码有900行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 30
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
long studentID;
char studentNAME[10];
char studentSEX;
DATE birthday;
float aver;
float zongfen;
int mingci;
float score[6];
}STUDENT;
void menu();
void Inputscore(STUDENT stu[],int n,int m);
void Averscore(STUDENT stu[],float sum[],int n,int m);
void Printscore(STUDENT stu[],int n,int m);
void Averscoree(STUDENT stu[],float averr[],float summ[],int n,int m);
void printscoree(STUDENT stu[],float averr[],float summ[],int n,int m);
void sorthightolowsum(STUDENT stu[],int n,int m);
void sortlowtohighsum(STUDENT stu[],int n,int m);
void sorthightolowdouble(STUDENT stu[],int n,int m,int q);
void sortlowtohighdouble(STUDENT stu[],int n,int m,int q);
void sorthightolowsingle(STUDENT stu[],int n,int m,int q);
void sortlowtohighsingle(STUDENT stu[],int n,int m,int q);
void sortstudentIDlowtohigh(STUDENT stu[],int n,int m);
void sortstudentnamelowtohigh(STUDENT stu[],int n,int m);
void findstudent(const STUDENT stu[],int n,int m,long w);
void findstudentt(const STUDENT stu[],int n,int m,char str[]);
void readfromfile(STUDENT stu[],int *n,int *m);
void printscore(STUDENT stu[],int n,int m);
void writetofile(STUDENT stu[],int n,int m);
void youxiubaifenbi(STUDENT stu[],int n,int m);
void printfquanbu(STUDENT stu[],int n,int m);
void ssorthightolowsum(STUDENT stu[],int n,int m);
void changexinxi(STUDENT stu[],int n,int m,int w);
void sorthightolowsumm(STUDENT stu[],int n,int m);
void zengjiaxuesheng(STUDENT stu[],float sum[],int n,int m,int xuesheng);
int main()
{
char arr[]="shuai";char arrr[]="bushuai";char answer[10];
int i=0,p=1;
for(i=0;i<3;i++)
{
if(i==2)
{
printf("对不起!\n");
return 0;
}
printf("这是宋辰轩编写的程序,在使用之前\n");
printf("请你回答一个问题,你认为编者帅不帅?请输入:shuai or bushuai\n");
scanf("%s",answer);
if(strcmp(answer,arr)==0)
{
printf("您的判断十分正确!\n");
break;
}
else
{
if(strcmp(answer,arrr)==0){
printf("判断错误,请您深思熟虑后继续输入该问题的答案\n");
printf("您还有最后%d次机会\n",p);}
if(strcmp(answer,arrr)!=0)
{
printf("请按正确格式输入问题的答案\n");
printf("您还有最后%d次机会\n",p);
}
p--;
}
}//我的登陆程序;
printf("**************************************\n");
printf("欢迎使用该程序,请完成程序初始化\n");
printf("**************************************\n");
//float aver[N];//平均分(学生)
float averr[N];//平均分(课程)
float sum[N];// 总分(学生)
float summ[N];//总分(课程)
int q=0;//(第几门课排序)
int y=0,e=0;//换学生的数据
int xuesheng=0;
long w;//找人的学号
//char ch;//(升序还是降序)
char str1[50],str2[50];
STUDENT stu[N],stu2;
int n,m;
m=3;
while(1)
{
int choice;//用户选择变量
menu();
printf("Please enter your choice\n");
scanf("%d",&choice);
if(choice==0)
{
printf("**************************************\n");
printf("谢谢使用!\n");
printf("**************************************\n");
return 0;
}
switch(choice)
{
case 1:{
printf("**************************************\n");
printf("有几个学生?\n");
scanf("%d",&n);
Inputscore(stu,n,m);
break;
}
case 2:
{
Averscoree(stu,averr,summ,n,m);//算出课程的总分和平均分
printscoree(stu,averr,summ,n,m);
break;
}
case 3:
{
Averscore(stu,sum,n,m);//算出学生的总分和平均分;
Printscore(stu,n,m);
break;
}
case 4:
{
Averscore(stu,sum,n,m);//算出学生的总分和平均分;
sorthightolowsum(stu,n,m);//总成绩从大到小的学生排序并且输出
break;
}
case 5:
{
Averscore(stu,sum,n,m);//算出学生的总分和平均分;
sortlowtohighsum(stu,n,m);//总成绩从小到大的学生排序并且输出
break;
}
case 6:
{
Averscore(stu,sum,n,m);//算出学生的总分和平均分;
sortstudentIDlowtohigh(stu,n,m);//按照学号排序
break;
}
case 7:
{
Averscore(stu,sum,n,m);//算出学生的总分和平均分;
sortstudentnamelowtohigh(stu,n,m);//按照姓名字典排序
break;
}
case 8:
{
scanf("%ld",&w);
sorthightolowsum(stu,n,m);//排名
findstudent(stu,n,m,w);//找人(学号)
break;
}
case 9:
{
scanf("%s",str1);
sorthightolowsum(stu,n,m);//排名
findstudentt(stu,n,m,str1);//找人(名字)
break;
}
case 10:
{
youxiubaifenbi(stu,n,m);//优秀百分比;
break;
}
case 11:
{
Averscore(stu,sum,n,m);//算出学生的总分和平均分;
sorthightolowsum(stu,n,m);//排名
printfquanbu(stu,n,m);//输出全部信息;
break;
}
case 12:
{
Averscore(stu,sum,n,m);//算出总分和平均分
ssorthightolowsum(stu,n,m);//排序(按照总分)
writetofile(stu,n,m);//写入文件;
break;
}
case 13:
{
readfromfile(stu,&n,&m);//读取文件;
Averscore(stu,sum,n,m);//算出总分和平均分
printscore(stu,n,m);//打印;
break;
}
case 14:
{
printf("请输入升序降序\n");
scanf("%s",str2);
if(strcmp(str2,"降序")==0){
printf("请输入要降序的科目(1、2、3)\n");
scanf("%d",&q);
sorthightolowdouble(stu,n,m,q);//从高到低排序(单科)
}
else {
printf("请输入要升序的科目(1、2、3)\n");
scanf("%d",&q);
sortlowtohighdouble(stu,n,m,q);//从低到高排序(单科)
}
break;
}
case 15:
{
int j;
printf("**************************************\n");
printf("根据输出的学生选择改哪名学生(以1开始)\n");
Averscore(stu,sum,n,m);//算出学生的总分和平均分;
sorthightolowsumm(stu,n,m);//排名
printfquanbu(stu,n,m);//输出全部信息;
scanf("%d",&y);
printf("学生为:\n");
printf("%2d",stu[y-1].mingci);
printf("%10ld%8s%3c%8d/%02d/%02d",stu[y-1].studentID,
stu[y-1].studentNAME,
stu[y-1].studentSEX,
stu[y-1].birthday.year,
stu[y-1].birthday.month,
stu[y-1].birthday.day);
printf(" ");
for(j=0;j<m;j++)
{
printf("%5.1f",stu[y-1].score[j]);
}
printf("%7.1f",stu[y-1].zongfen);
printf("%6.1f\n",stu[y-1].aver);
printf("请输入要改的信息:1代表序号、2名字、3性别 、4生日(年月日)、5课程分数(3门)、6总分、7平均分\n");
printf("请在1-7中作出选择,若不选,则输入8\n");
scanf("%d",&e);
if(e==1)
{
scanf("%ld",&stu2.studentID);
stu[y-1].studentID=stu2.studentID;
}
else if(e==2)
{
scanf("%s",stu2.studentNAME);
strcpy(stu[y-1].studentNAME,stu2.studentNAME);
}
else if(e==3)
{
scanf(" %c",&stu2.studentSEX);
stu[y-1].studentSEX=stu2.studentSEX;
}
else if(e==4)
{
printf("请输入年月日(例如2000 06 15)\n");
scanf("%d",&stu2.birthday.year);
scanf("%d",&stu2.birthday.month);
scanf("%d",&stu2.birthday.day);
stu[y-1].birthday.year=stu2.birthday.year;
stu[y-1].birthday.month=stu2.birthday.month;
stu[y-1].birthday.day=stu2.birthday.day;
}
else if(e==5)
{
int r=0;
printf("要改第几门?\n");
scanf("%d",&r);
scanf("%f",&stu2.score[r]);
stu[y-1].score[r]=stu2.score[r];
}
else if(e==6)
{
scanf("%f",&stu2.zongfen);
stu[y-1].zongfen=stu2.zongfen;
}
else if(e==7)
{
scanf("%f",&stu2.aver);
stu[y-1].aver=stu2.aver;
}
else if(e==8)
{
break;
}
else
{
printf("Wrong!\n");
exit(0);
}
printf("Change successfully\n");
printfquanbu(stu,n,m);//输出全部信息;
printf("若要保存,请按12生成文档\n");
printf("**************************************\n");
break;
}
case 16:
{
printf("请输入增加学生的数量:\n");
scanf("%d",&xuesheng);
zengjiaxuesheng(stu,sum,n,m,xuesheng);
}
}
}
return 0;
}
void Inputscore(STUDENT stu[],int n,int m)//输入学生数据
{
int i,j;
for(i=0;i<n;i++)
{
printf("请输入第%d个学生的信息\n",i+1);
printf("按照学号、姓名、性别(M/F)、生日(例如2000 06 15)、%d科成绩输入\n",m);
scanf("%ld",&stu[i].studentID);
scanf("%s",stu[i].studentNAME);
scanf(" %c",&stu[i].studentSEX);
scanf("%d",&stu[i].birthday.year);
scanf("%d",&stu[i].birthday.month);
scanf("%d",&stu[i].birthday.day);
for(j=0;j<m;j++)
{
scanf("%f",&stu[i].score[j]);
}
}
printf("\n");
}
void Averscore(STUDENT stu[],float sum[],int n,int m)//计算n个学生的m门课程平均分,存入stu[i].aver
{
int i,j,sumx[N];
for(i=0;i<n;i++)
{
sumx[i]=0;
for(j=0;j<m;j++)
{
sumx[i]=sumx[i]+stu[i].score[j];
}
sum[i]=sumx[i];
stu[i].aver=(float)sum[i]/m;
stu[i].zongfen=sum[i];
}
}
void Printscore(STUDENT stu[],int n,int m)//输出学生数据并且输出学生的平均分
{
int i,j;
printf("**************************************\n");
printf("The results are:\n");
for(i=0;i<n;i++)
{
printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
stu[i].studentNAME,
stu[i].studentSEX,
stu[i].birthday.year,
stu[i].birthday.month,
stu[i].birthday.day);
for(j=0;j<m;j++)
{
printf("%5.1f",stu[i].score[j]);
}
printf("\n");
printf("该学生的总分为:%6.1f\n",stu[i].zongfen);
printf("该学生的平均分为:%6.1f\n",stu[i].aver);
}
printf("\n");
printf("**************************************\n");
}
void Averscoree(STUDENT stu[],float averr[],float summ[],int n,int m)//课程的总分和平均分的计算
{
int i,j,sumxx[N];
for(i=0;i<m;i++)
{
sumxx[i]=0;
for(j=0;j<n;j++)
{
sumxx[i]=sumxx[i]+stu[j].score[i];
}
summ[i]=sumxx[i];
averr[i]=(float)summ[i]/n;
}
}
void printscoree(STUDENT stu[],float averr[],float summ[],int n,int m)//输出课程的总分和平均分
{
printf("**************************************\n");
int i;
for(i=0;i<m;i++)
{
printf("第%d门课的情况如下:\n",i+1);
printf("课程总分为:%6.1f 课程平均分为:%6.1f\n",summ[i],averr[i]);
}
printf("\n");
printf("**************************************\n");
}
void sorthightolowsum(STUDENT stu[],int n,int m)//按照总成绩对学生进行降序排序并且输出
{
STUDENT stuu1;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(stu[i].zongfen<stu[j].zongfen)
{
stuu1=stu[i];
stu[i]=stu[j];
stu[j]=stuu1;
}
}
}
printf("**************************************\n");
printf("降序的成绩\n");
for(i=0;i<n;i++)
{
printf("第%d名:",i+1);
stu[i].mingci=i+1;
printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
stu[i].studentNAME,
stu[i].studentSEX,
stu[i].birthday.year,
stu[i].birthday.month,
stu[i].birthday.day);
printf("%6.1f\n",stu[i].zongfen);
}
printf("\n");
printf("**************************************\n");
}
void sortlowtohighsum(STUDENT stu[],int n,int m)//按照总成绩对学生进行升序排序并且输出
{
STUDENT stuu1;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(stu[i].zongfen>stu[j].zongfen)
{
stuu1=stu[i];
stu[i]=stu[j];
stu[j]=stuu1;
}
}
}
printf("**************************************\n");
printf("升序的成绩\n");
for(i=0;i<n;i++)
{
printf("倒数第%d名:",i+1);
printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
stu[i].studentNAME,
stu[i].studentSEX,
stu[i].birthday.year,
stu[i].birthday.month,
stu[i].birthday.day);
printf("%6.1f\n",stu[i].zongfen);
}
}
void sorthightolowdouble(STUDENT stu[],int n,int m,int q)//全部单科从大到小的学生排序
{
STUDENT stuu2;
int j,k,p;
printf("**************************************\n");
printf("第%d科的成绩按照降序排序如下:\n",q);
for(j=0;j<n-1;j++)
{
for(k=j+1;k<n;k++)
{
if(stu[j].score[q]<stu[k].score[q])
{
stuu2=stu[j];
stu[j]=stu[k];
stu[k]=stuu2;
}
}
}
for(p=0;p<n;p++)
{
printf("%10ld%8s%3c%6d/%02d/%02d",stu[p].studentID,
stu[p].studentNAME,
stu[p].studentSEX,
stu[p].birthday.year,
stu[p].birthday.month,
stu[p].birthday.day);
printf("%6.1f\n",stu[p].score[q]);
}
printf("**************************************\n");
}
void sortlowtohighdouble(STUDENT stu[],int n,int m,int q)//全部单科从小到大的学生排序
{
STUDENT stuu2;
int j,k,p;
printf("**************************************\n");
printf("第%d科的成绩按照升序排序如下:\n",q);
for(j=0;j<n-1;j++)
{
for(k=j+1;k<n;k++)
{
if(stu[j].score[q]>stu[k].score[q])
{
stuu2=stu[j];
stu[j]=stu[k];
stu[k]=stuu2;
}
}
}
for(p=0;p<n;p++)
{
printf("%10ld%8s%3c%6d/%02d/%02d",stu[p].studentID,
stu[p].studentNAME,
stu[p].studentSEX,
stu[p].birthday.year,
stu[p].birthday.month,
stu[p].birthday.day);
printf("(被升序的成绩)%6.1f\n",stu[p].score[q]);
}
printf("**************************************\n");
}
void sorthightolowsingle(STUDENT stu[],int n,int m,int q)//单科从大到小的学生排序
{
STUDENT stuu2;
int j,k,p;
printf("第%d科的成绩按照降序排序如下:\n",q);
for(j=0;j<n-1;j++)
{
for(k=j+1;k<n;k++)
{
if(stu[j].score[q-1]<stu[k].score[q-1])
{
stuu2=stu[j];
stu[j]=stu[k];
stu[k]=stuu2;
}
}
}
for(p=0;p<n;p++)
{
printf("%10ld%8s%3c%6d/%02d/%02d",stu[p].studentID,
stu[p].studentNAME,
stu[p].studentSEX,
stu[p].birthday.year,
stu[p].birthday.month,
stu[p].birthday.day);
printf("%6.1f\n",stu[p].score[q-1]);
}
printf("\n");
}
void sortlowtohighsingle(STUDENT stu[],int n,int m,int q)//单科从小到大的学生排序
{
STUDENT stuu2;
int j,k,p;
printf("第%d科的成绩按照升序排序如下:\n",q);
for(j=0;j<n-1;j++)
{
for(k=j+1;k<n;k++)
{
if(stu[j].score[q-1]>stu[k].score[q-1])
{
stuu2=stu[j];
stu[j]=stu[k];
stu[k]=stuu2;
}
}
}
for(p=0;p<n;p++)
{
printf("%10ld%8s%3c%6d/%02d/%02d",stu[p].studentID,
stu[p].studentNAME,
stu[p].studentSEX,
stu[p].birthday.year,
stu[p].birthday.month,
stu[p].birthday.day);
printf("%6.1f\n",stu[p].score[q-1]);
}
printf("\n");
}
void sortstudentIDlowtohigh(STUDENT stu[],int n,int m)//按照学号从小到大排序
{
int i,j;
STUDENT stuu3;
printf("**************************************\n");
printf("按照学号从小到大的排序如下:\n");
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(stu[i].studentID>stu[j].studentID)
{
stuu3=stu[i];
stu[i]=stu[j];
stu[j]=stuu3;
}
}
}
for(i=0;i<n;i++)
{
printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
stu[i].studentNAME,
stu[i].studentSEX,
stu[i].birthday.year,
stu[i].birthday.month,
stu[i].birthday.day);
for(j=0;j<m;j++)
{
printf("%6.1f",stu[i].score[j]);
}
printf("%6.1f%6.1f",stu[i].zongfen,stu[i].aver);
printf("\n");
}
printf("\n");
printf("**************************************\n");
}
void sortstudentnamelowtohigh(STUDENT stu[],int n,int m)//按照字典排序
{
STUDENT stuu4;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(stu[i].studentNAME,stu[j].studentNAME)>0)
{
stuu4=stu[i];
stu[i]=stu[j];
stu[j]=stuu4;
}
}
}
printf("**************************************\n");
printf("按照字典字母先后排序:\n");
for(i=0;i<n;i++)
{
printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
stu[i].studentNAME,
stu[i].studentSEX,
stu[i].birthday.year,
stu[i].birthday.month,
stu[i].birthday.day);
for(j=0;j<m;j++)
{
printf("%6.1f",stu[i].score[j]);
}
printf("%6.1f%6.1f",stu[i].zongfen,stu[i].aver);
printf("\n");
}
printf("\n");
printf("**************************************\n");
}
void findstudent(const STUDENT stu[],int n,int m,long w)//找人-用学号
{
printf("请输入目标人物的学号\n");
int i,j=1;
int e;
for(i=0;i<n;i++)
{
if(w==stu[i].studentID)
{
printf("找到了!\n");
j=0;
printf("名次为:%d\n",stu[i].mingci);
printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
stu[i].studentNAME,
stu[i].studentSEX,
stu[i].birthday.year,
stu[i].birthday.month,
stu[i].birthday.day);
for(e=0;e<m;e++)
{
printf("%6.1f",stu[i].score[e]);
}
printf("%6.1f%6.1f",stu[i].zongfen,stu[i].aver);
printf("\n");
}
}
if(j==1)
{
printf("Error! Can't find!\n");
}
}
void menu()//菜单
{
printf("___________________________________________________________________________________\n");
printf("|1.Input record(录入姓名、学号等) |\n");
printf("|2.Caculate total and average score of every course(算课程总分和平均分) |\n");
printf("|3.Caculate total and average score of every student(算学生总分和平均分) |\n");
printf("|4.Sort in descending order by total score of every student(名次表从高到低) |\n");
printf("|5.Sort in ascending order by total score of every student(名次表从低到高) |\n");
printf("|6.Sort in ascending order by number(按学号) |\n");
printf("|7.Sort in dictionary order by name(按字典序) |\n");
printf("|8.Search by number(找人-学号) |\n");
printf("|9.Search by name(找人-姓名) |\n");
printf("|10.Statistic analysis for every course(按优秀、良好等统计过) |\n");
printf("|11.List record(输出全部信息) |\n");
printf("|12.Write to a file(写入文件) |\n");
printf("|13.Read from a file(读取文件) |\n");
printf("|14.Sort by single course(按照单科排序) |\n");
printf("|15.Change the information(修改信息) |\n");
printf("|16.Add student information(增加信息) |\n");
printf("|0.Exit(退出) |\n");
printf("|_________________________________________________________________________________|\n");
}
void readfromfile(STUDENT stu[],int *n ,int *m)//读取文件
{
FILE *fp;
int i,j;
if((fp=fopen("G://score.txt","r"))==NULL)
{
printf("Failure to open score.bin!\n");
exit(0);
}
printf("Open the score.txt successfully!\n");
fscanf(fp,"%d\t%d",n,m);
for(i=0;i<*n;i++)
{
fscanf(fp,"%10ld",&stu[i].studentID);
fscanf(fp,"%8s",stu[i].studentNAME);
fscanf(fp," %c",&stu[i].studentSEX);
fscanf(fp,"%6d/%2d/%2d",&stu[i].birthday.year,
&stu[i].birthday.month,
&stu[i].birthday.day);
for(j=0;j<*m;j++)
{
fscanf(fp,"%4f",&stu[i].score[j]);
}
//fscanf(fp,"%f",&stu[i].aver);
//fscanf(fp,"%4d",&stu[i].zongfen);
}
fclose(fp);
}
void printscore(STUDENT stu[],int n,int m)//打印分数
{
printf("**************************************\n");
int i,j;
for(i=0;i<n;i++)
{
printf("%10ld%8s%3c%6d/%02d/%02d",
stu[i].studentID,stu[i].studentNAME,
stu[i].studentSEX,stu[i].birthday.year,
stu[i].birthday.month,stu[i].birthday.day);
for(j=0;j<m;j++)
{
printf("%6.1f",stu[i].score[j]);
}
printf("%6.1f",stu[i].aver);
printf("%6.1f\n",stu[i].zongfen);
}
printf("**************************************\n");
}
void writetofile(STUDENT stu[],int n,int m)//写入文件
{
FILE *fp;
int i,j;
if((fp=fopen("G://score.txt","w"))==NULL)
{
printf("Failure to open score.txt!\n");
exit(0);
}
fprintf(fp,"%d\t%d\n",n,m);
for(i=0;i<n;i++)
{
fprintf(fp,"%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
stu[i].studentNAME,stu[i].studentSEX,stu[i].birthday.year,
stu[i].birthday.month,stu[i].birthday.day);
for(j=0;j<m;j++)
{
fprintf(fp,"%4.1f",stu[i].score[j]);
}
fprintf(fp,"%6.1f%4.1f\n",stu[i].aver,stu[i].zongfen);
}
printf("write in the score successfully!\n");
fclose(fp);
}
void findstudentt(const STUDENT stu[],int n,int m,char str[])//找人-用名字
{
int i,flag=1,e;
for(i=0;i<n;i++)
{
if(strcmp(str,stu[i].studentNAME)==0)
{
printf("**************************************\n");
printf("Find it!\n");
printf("排名为:%d\n",stu[i].mingci);
printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
stu[i].studentNAME,
stu[i].studentSEX,
stu[i].birthday.year,
stu[i].birthday.month,
stu[i].birthday.day);
for(e=0;e<m;e++)
{
printf("%6.1f",stu[i].score[e]);
}
printf("%5.1f%6.1f",stu[i].zongfen,stu[i].aver);
printf("\n");
printf("**************************************\n");
flag=0;
}
}
if(flag)printf("Error! Can't find!");
}
void youxiubaifenbi(STUDENT stu[],int n,int m)//按照优秀及其百分比输出
{
printf("**************************************\n");
int i,j;
for(i=0;i<m;i++)
{
int q1=0,q2=0,q3=0,q4=0,q5=0;
for(j=0;j<n;j++)
{
if(stu[j].score[i]>=90&&stu[j].score[i]<=100)
{
q1++;
}
if(stu[j].score[i]>=80&&stu[j].score[i]<=89)
{
q2++;
}
if(stu[j].score[i]>=70&&stu[j].score[i]<=79)
{
q3++;
}
if(stu[j].score[i]>=60&&stu[j].score[i]<=69)
{
q4++;
}
if(stu[j].score[i]>=0&&stu[j].score[i]<=59)
{
q5++;
}
}
printf("第%d门课程情况如下:\n",i+1);
printf("优秀(90-100)%d\t%3.2f%%\n良好(80-89) %d\t%3.2f%%\n中等(70-79) %d\t%3.2f%%\n及格(60-69) %d\t%3.2f%%\n不及格(0-59)%d\t%3.2f%%\n",
q1,(float)q1*1.0/n*100,q2,(float)q2*1.0/n*100,q3,(float)q3*1.0/n*100,q4,(float)q4*1.0/n*100,q5,(float)q5*1.0/n*100);
printf("\n");
}
printf("**************************************\n");
}
void printfquanbu(STUDENT stu[],int n,int m)//输出每个学生的全部信息,以及每门课程的总分和平均分
{
int i,j;
printf("**************************************\n");
printf("全部信息如下:\n");
printf("名次 序号 名字 性别 生日(年月日) 课程分数(3门) 总分 平均分\n");
for(i=0;i<n;i++)
{
printf("%2d",stu[i].mingci);
printf("%10ld%8s%3c%8d/%02d/%02d",stu[i].studentID,
stu[i].studentNAME,
stu[i].studentSEX,
stu[i].birthday.year,
stu[i].birthday.month,
stu[i].birthday.day);
printf(" ");
for(j=0;j<m;j++)
{
printf("%5.1f",stu[i].score[j]);
}
printf("%7.1f",stu[i].zongfen);
printf("%6.1f\n",stu[i].aver);
}
printf("\n");
printf("**************************************\n");
}
void ssorthightolowsum(STUDENT stu[],int n,int m)//按照总成绩对学生进行降序排序
{
STUDENT stuu1;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(stu[i].zongfen<stu[i].zongfen)
{
stuu1=stu[i];
stu[i]=stu[j];
stu[j]=stuu1;
}
}
}
for(i=0;i<n;i++)
{
stu[i].mingci=i+1;
}
}
void sorthightolowsumm(STUDENT stu[],int n,int m)//按照总成绩对学生进行降序排序并且输出
{
STUDENT stuu1;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(stu[i].zongfen<stu[j].zongfen)
{
stuu1=stu[i];
stu[i]=stu[j];
stu[j]=stuu1;
}
}
}
for(i=0;i<n;i++)
{
stu[i].mingci=i+1;
}
}
void zengjiaxuesheng(STUDENT stu[],float sum[],int n,int m,int xuesheng)//增加学生信息
{
int i,j;
for(i=0;i<xuesheng;i++)
{
printf("请输入第%d个学生的信息\n",n+i+1);
printf("按照学号、姓名、性别(M/F)、生日(例如2000 06 15)、%d科成绩输入\n",m);
scanf("%ld",&stu[i+n].studentID);
scanf("%s",stu[i+n].studentNAME);
scanf(" %c",&stu[i+n].studentSEX);
scanf("%d",&stu[i+n].birthday.year);
scanf("%d",&stu[i+n].birthday.month);
scanf("%d",&stu[i+n].birthday.day);
for(j=0;j<m;j++)
{
scanf("%f",&stu[i+n].score[j]);
}
}
printf("\n");
Averscore(stu,sum,n+xuesheng,m);
sorthightolowsum(stu,n+xuesheng,m);
printfquanbu(stu,n+xuesheng,m);
printf("若要保存,请选择12选项输出文件!\n");
printf("**************************************\n");
}
代码可能会有点赘余,刚开始学c的时候写的,我估摸了一下,一共900行代码,优化一下代码和实现能到500行吧
数据:
180801 李华 M 2000 06 15 97 90 68
180802 张景 M 2000 05 12 77 60 80
180803 艾柯 F 2001 04 32 80 88 78
180804 吉铎 M 2000 08 23 45 60 88
180805 方哲 M 2000 06 30 100 78 95
180806 杨明 M 1999 12 21 86 89 90
180807 科尔 F 2000 02 12 66 70 85
180808 王淼 M 1999 11 05 77 80 65
180809 章北 F 2000 06 05 88 78 80
180810 艾岙 M 1999 06 21 99 99 99