PS代码效率并不是很高,仅供参考
//测试数据
/*3 1 100 1 小明 90 90 80 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
101 2 小红 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
102 3 小李 90 100 90 90 100 90 100 90 90 90 90 100 90 90 90 90 90 90 1 */
#include<stdio.h>
#include<windows.h>
struct score
{
int C;
int Math;
int Phy;
int Ide;
int PE;
int Introduce;
};
struct student
{
int Id;
int Classid;
int allscore;
char Name[20];
struct score Usually;
struct score Midterm;
struct score Endterm;
struct score FinallyScore;
}stu[10000],LOL;
struct classInfo
{
float studentCount;
float allscore;
float avescore;
int classid;
}stuClass[100],swap;
int showRewardList(int N,int n,int k)//奖学金同学列表
{
int flag=0;
for(int s=0;s<N;s++)//排序部分,这里按照班级顺序来排,输出也是按班输出。
{
for(int i=0;i<n;i++)
{
flag=0;
for(int j=0;j<N*n;j++)
{
if(stu[j].Classid==s+1)
{
if(stu[flag].allscore<stu[j].allscore&&stu[flag].Classid==s+1)
{
LOL=stu[j];
stu[j]=stu[flag];
stu[flag]=LOL;
}
flag=j;
}
}
}
for(int i=0,j=0;i<k;j++)//输出部分
{
if(stu[j].Classid==s+1)
{
i++;
printf("%d\t%s\t%d\t%d\n",
stu[j].Id,
stu[j].Name,
stu[j].Classid,
stu[j].allscore);
}
}
}
}
int studentSort(int N,int n)//学生成绩排行
{
for(int i=0;i<N*n;i++)
{
for(int j=0;j<N*n-i-1;j++)
{
if(stu[j].allscore<stu[j+1].allscore)
{
LOL=stu[j];
stu[j]=stu[j+1];
stu[j+1]=LOL;
}
}
}
}
int showStudentInfo(int id,int N,int n)//查询学生信息
{
for(int i=0;i<N*n;i++)
{
if(stu[i].Id==id)
{
printf("查询结果为:\n");
printf("学号\t姓名\t班级\t总分\n");
printf("%d\t%s\t%d\t%d",
stu[i].Id,
stu[i].Name,
stu[i].Classid,
stu[i].allscore);
break;
}
}
}
int classAllsort(int N)//所有班总分排名
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N-i;j++)
{
if(stuClass[j].allscore<stuClass[j+1].allscore)
{
swap=stuClass[j];
stuClass[j]=stuClass[j+1];
stuClass[j+1]=swap;
}
}
}
}
int classAvesort(int N)//所有班平均分排名
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N-i;j++)
{
if(stuClass[j].avescore<stuClass[j+1].avescore)
{
swap=stuClass[j];
stuClass[j]=stuClass[j+1];
stuClass[j+1]=swap;
}
}
}
}
int showClassRank(int N)//输出所有班总分排名
{
for(int i=0;i<N;i++)
{
printf("第%d名是第%d班\n",i+1,stuClass[i].classid);
}
}
int showStuRank(int N,int n)//输出学生排名
{
printf("\n学号\t姓名\t班级\t总分\n");
for(int i=0;i<N*n;i++)
{
printf("%d\t%s\t%d\t%d\n",stu[i].Id,stu[i].Name,stu[i].Classid,stu[i].allscore);
}
}
int imput(int N,int n)//输入部分
{
for(int i=0;i<n*N;i++)
{
scanf("%d%d%s%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
&stu[i].Id,
&stu[i].Classid,
&stu[i].Name,
&stu[i].Usually.C,
&stu[i].Usually.Math,
&stu[i].Usually.Phy,
&stu[i].Usually.Ide,
&stu[i].Usually.PE,
&stu[i].Usually.Introduce,
&stu[i].Midterm.C,
&stu[i].Midterm.Math,
&stu[i].Midterm.Phy,
&stu[i].Midterm.Ide,
&stu[i].Midterm.PE,
&stu[i].Midterm.Introduce,
&stu[i].Endterm.C,
&stu[i].Endterm.Math,
&stu[i].Endterm.Phy,
&stu[i].Endterm.Ide,
&stu[i].Endterm.PE,
&stu[i].Endterm.Introduce);
//各科成绩
stu[i].FinallyScore.C=stu[i].Usually.C*0.2+stu[i].Midterm.C*0.2+stu[i].Endterm.C*0.6;
stu[i].FinallyScore.Math=stu[i].Usually.Math*0.2+stu[i].Midterm.Math*0.2+stu[i].Endterm.Math*0.6;
stu[i].FinallyScore.Phy=stu[i].Usually.Phy*0.2+stu[i].Midterm.Phy*0.2+stu[i].Endterm.Phy*0.6;
stu[i].FinallyScore.Ide=stu[i].Usually.Ide*0.2+stu[i].Midterm.Ide*0.2+stu[i].Endterm.Ide*0.6;
stu[i].FinallyScore.PE=stu[i].Usually.PE*0.2+stu[i].Midterm.PE*0.2+stu[i].Endterm.PE*0.6;
stu[i].FinallyScore.Introduce=stu[i].Usually.Introduce*0.2+stu[i].Midterm.Introduce*0.2+stu[i].Endterm.Introduce*0.6;
//总成绩
stu[i].allscore=stu[i].FinallyScore.C+
stu[i].FinallyScore.Ide+
stu[i].FinallyScore.Introduce+
stu[i].FinallyScore.Math+
stu[i].FinallyScore.PE+
stu[i].FinallyScore.Phy;
//班总成绩
stuClass[stu[i].Classid-1].allscore+=stu[i].allscore;
//班人数
stuClass[stu[i].Classid-1].studentCount++;
}
//班级平均分
for(int i=0;i<N;i++)
{
stuClass[i].avescore=stuClass[i].allscore/stuClass[i].studentCount;
}
//给每个班打上编号
for(int i=0;i<N;i++)
{
stuClass[i].classid=i+1;
}
}
int menu(void)//朴实无华的菜单
{
system("color 2");
printf("\t\t\t");
for(int i=1;i<=26;i++)//上边框
{
Sleep(10);
printf("■");
}
for(int i=1;i<=15;i++)
{
printf("\n\t\t\t");
if(i==2)
{
for(int i=1;i<=50;i++)//学生信息标题
{
if(i==1||i==50)
{
Sleep(10);
printf("■");
}else if(i==18)
{
Sleep(40);
printf("学");
Sleep(40);
printf("生");
Sleep(40);
printf("考");
Sleep(40);
printf("试");
Sleep(40);
printf("信");
Sleep(40);
printf("息");
Sleep(40);
printf("系");
Sleep(40);
printf("统");
Sleep(40);
i+=15;
}
else
{
printf(" ");
}
}
}else if(i==4)
{
for(int i=1;i<=50;i++)//查询各班总分排名
{
if(i==1||i==50)
{
Sleep(10);
printf("■");
}else if(i==18)
{
Sleep(40);
printf("1、");
Sleep(40);
printf("查");
Sleep(40);
printf("询");
Sleep(40);
printf("各");
Sleep(40);
printf("班");
Sleep(40);
printf("总");
Sleep(40);
printf("分");
Sleep(40);
printf("排");
Sleep(40);
printf("名");
Sleep(40);
i+=18;
}
else
{
printf(" ");
}
}
}else if(i==5)
{
for(int i=1;i<=50;i++)//查询各班平均分排名
{
if(i==1||i==50)
{
Sleep(10);
printf("■");
}else if(i==18)
{
Sleep(40);
printf("2、");
Sleep(40);
printf("查");
Sleep(40);
printf("询");
Sleep(40);
printf("各");
Sleep(40);
printf("班");
Sleep(40);
printf("平");
Sleep(40);
printf("均");
Sleep(40);
printf("分");
Sleep(40);
printf("排");
Sleep(40);
printf("名");
Sleep(40);
i+=20;
}
else
{
printf(" ");
}
}
}else if(i==6)
{
for(int i=1;i<=50;i++)//查询个别学生信息
{
if(i==1||i==50)
{
Sleep(10);
printf("■");
}else if(i==18)
{
Sleep(40);
printf("3、");
Sleep(40);
printf("查");
Sleep(40);
printf("询");
Sleep(40);
printf("个");
Sleep(40);
printf("别");
Sleep(40);
printf("学");
Sleep(40);
printf("生");
Sleep(40);
printf("信");
Sleep(40);
printf("息");
Sleep(40);
i+=18;
}
else
{
printf(" ");
}
}
}else if(i==7)
{
for(int i=1;i<=50;i++)//输出学生排名
{
if(i==1||i==50)
{
Sleep(10);
printf("■");
}else if(i==18)
{
Sleep(40);
printf("4、");
Sleep(40);
printf("查");
Sleep(40);
printf("询");
Sleep(40);
printf("学");
Sleep(40);
printf("生");
Sleep(40);
printf("总");
Sleep(40);
printf("分");
Sleep(40);
printf("排");
Sleep(40);
printf("名");
Sleep(40);
i+=18;
}
else
{
printf(" ");
}
}
}else if(i==8)
{
for(int i=1;i<=50;i++)//输出奖学金推荐名单
{
if(i==1||i==50)
{
Sleep(10);
printf("■");
}else if(i==18)
{
Sleep(40);
printf("5、");
Sleep(40);
printf("查");
Sleep(40);
printf("询");
Sleep(40);
printf("奖");
Sleep(40);
printf("学");
Sleep(40);
printf("金");
Sleep(40);
printf("名");
Sleep(40);
printf("单");
Sleep(40);
i+=16;
}
else
{
printf(" ");
}
}
}else if(i==14)
{
for(int i=1;i<=50;i++)//退出系统
{
if(i==1||i==50)
{
Sleep(10);
printf("■");
}else if(i==18)
{
Sleep(40);
printf("9、");
Sleep(40);
printf("退");
Sleep(40);
printf("出");
Sleep(40);
printf("系");
Sleep(40);
printf("统");
Sleep(40);
i+=10;
}
else
{
printf(" ");
}
}
}else
{
for(int i=1;i<=50;i++)//空的两侧边框
{
if(i==1||i==50)
{
Sleep(10);
printf("■");
}else
{
printf(" ");
}
}
}
}
printf("\n\t\t\t");
for(int i=1;i<=26;i++)//尾行边框
{
Sleep(10);
printf("■");
}
}
int main(void)
{
int N,n,k,id;
int num;
printf("请输入学生信息\n");
scanf("%d%d",&N,&n);
imput(N,n);
scanf("%d",&k);
menu();
for(;;)
{
printf("\n\n请输入功能所对应序号:");
scanf("%d",&num);
if(num==1)
{
printf("班级总分排名为:\n");
classAllsort(N);
showClassRank(N);
}else if(num==2)
{
printf("班级平均分排名为:\n");
classAvesort(N);
showClassRank(N);
}else if(num==3)
{
printf("\n请输入学生的学号来查询:\n");
scanf("%d",&id);
showStudentInfo(id,N,n);
}else if(num==4)
{
printf("学生排名为:\n");
studentSort(N,n);
showStuRank(N,n);
}else if(num==5)
{
printf("获得奖学金的同学信息为:\n");
showRewardList(N,n,k);
}
else if(num==9)
{
printf("系统已关闭");
break;
}else
{
printf("序号不存在请重新输入\n");
}
}
return 0;
}