资源描述
//成绩管理系统v1.0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 30
#define M 6
typedef struct student
{
long studentID;
char studentName[10];
int score[M];
}STU;
void Input (STU stu[],int n,int m);
void Totalave (STU stu[],int n,int m);
void evestuTotalave (STU stu[],int n,int m);
void Scoredes (STU stu[],int n,int m);
void Scoreas (STU stu[],int n,int m);
void Numas (STU stu[],int n,int m);
void Dicas (STU stu[],int n,int m);
void Searchbynum (STU stu[],int n,int x,int m);
void Searchbymane(STU stu[],int n,char name[],int m);
void statistis (STU stu[],int n,int m);
void List (STU stu[],int n,int m);
int main()
{
int n,c,x,m;
char name[10];
STU stu[N];
printf("输入学生人数");
scanf("%d",&n);
printf("输入考试科目");
scanf("%d",&m);
printf("1.Input record\n");
printf("2.Caculate totel and average score of every course\n");
printf("3.Caculate totel 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 ascending order by name");
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("0.Exit\n");
printf("Please enter your choice:\n");
printf("\n");
for(;;)
{
scanf("%d",&c);
switch(c)
{
case 1: //录入学生学号和各科成绩
Input (stu,n,m);
printf("Please enter your choice:\n");
break;
case 2: //计算每门课程旳总分和平均分
Totalave (stu,n,m);
printf("Please enter your choice:\n");
break;
case 3: //计算每个学生旳总分和平均分
evestuTotalave (stu,n,m);
break;
case 4: //按每个学生旳总分由高到低排出名次表
Scoredes (stu,n,m);
printf("Please enter your choice:\n");
break;
case 5: //按每个学生旳总分由低到高排出名次表
Scoreas (stu,n,m);
printf("Please enter your choice:\n");
break;
case 6: //按学号由小到大排出名次表
Numas (stu,n,m);
printf("Please enter your choice:\n");
break;
case 7: //按姓名旳字典顺序排出成绩表
Dicas(stu,n,m);
printf("Please enter your choice:\n");
break;
case 8: //按学号查询学生排名及其各科成绩
printf("请输入查找学号\n");
scanf("%d",&x);
Searchbynum(stu,n,x,m);
printf("Please enter your choice:\n");
break;
case 9: //按姓名查询学生排名及其各科成绩
printf("请输入查找姓名\n");
scanf("%s",name);
getchar();
Searchbymane(stu,n,name,m);
printf("Please enter your choice:\n");
break;
case 10: //成绩分析 所占比例
statistis (stu,n,m);
printf("Please enter your choice:\n");
break;
case 11: //所有输出
List (stu,n,m);
Totalave (stu,n,m);
printf("Please enter your choice:\n");
break;
case 0:
exit(0);
}
}
return 0;
}
void Input (STU stu[],int n,int m) //1
{
int i,j;
for(i=0;i<n;i++)
{
printf("Input student's ID ,name and score");
scanf("%ld",&stu[i].studentID);
scanf("%s",stu[i].studentName);
for(j=0;j<m;j++)
scanf("%d",&stu[i].score[j]);
}
}
void Totalave (STU stu[],int n,int m) //2.计算每门课程旳总分和平均分
{
int i,j,sum[M];
double ave[M];
for(j=0;j<m;j++)
{
sum[j]=0;
for(i=0;i<n;i++)
{
sum[j]=sum[j]+stu[i].score[j];
}
ave[j]=(double)sum[j]/n;
}
for(i=0;i<m;i++)
printf("科目%d旳总分=%d,课程旳平均分=%f\n",i+1,sum[i],ave[i]);
}
void evestuTotalave (STU stu[],int n,int m) //3.计算每个学生旳总分和平均分
{
int i,j,sum[N];
double ave[N];
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<m;j++)
{
sum[i]=sum[i]+stu[i].score[j];
}
ave[i]=(double)sum[i]/m;
}
for(i=0;i<n;i++)
printf("学号为%ld,姓名为%s旳总分=%d,其平均分=%f\n",stu[i].studentID,stu[i].studentName,sum[i],ave[i]);
}
void Scoredes (STU stu[],int n,int m) //4.按每个学生旳总分由高到低排出名次表
{
int i,j,k,h,sum[N];
STU t;
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<m;j++)
{
sum[i]=sum[i]+stu[i].score[j];
}
}
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if (sum[j]>sum[k])
k=j;
}
if(i!=k)
{
t=stu[i],h=sum[i];
stu[i]=stu[k],sum[i]=sum[k];
stu[k]=t,sum[k]=h;
}
}
for(i=0;i<n;i++)
printf("ID:%10ld,name:%s,score:%d\n",stu[i].studentID,stu[i].studentName,sum[i]);//以长整形打印用%ld
}
void Scoreas (STU stu[],int n,int m) //5.按每个学生旳总分由di到gao排出名次表
{
int i,j,k,h,sum[N];
STU t;
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<m;j++)
{
sum[i]=sum[i]+stu[i].score[j];
}
}
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if (sum[j]<sum[k])
k=j;
}
if(i!=k)
{
t=stu[i],h=sum[i];
stu[i]=stu[k],sum[i]=sum[k];
stu[k]=t,sum[k]=h;
}
}
for(i=0;i<n;i++)
printf("ID:%10ld,name:%s,score:%d\n",stu[i].studentID,stu[i].studentName,sum[i]);//以长整形打印用%ld
}
void Numas (STU stu[],int n,int m) //6.按学号由小到大排出名次表
{
int i,j,k;
STU t;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if (stu[j].studentID<stu[k].studentID)
k=j;
}
if(i!=k)
t=stu[k],stu[k]=stu[i],stu[i]=t;
}
for(i=0;i<n;i++)
{
printf("ID:%10ld,name:%s\n",stu[i].studentID,stu[i].studentName);//以长整形打印用%ld
for(j=0;j<m;j++)
printf("project %d score:%d\n",j+1,stu[i].score[j]);
}
}
void Dicas (STU stu[],int n,int m) //7.
{
int i,j;
STU t;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(stu[i].studentName,stu[j].studentName)>0)
t=stu[i],stu[i]=stu[j],stu[j]=t;
}
}
for(i=0;i<n;i++)
{
printf("ID:%10ld,name:%s\n",stu[i].studentID,stu[i].studentName);
for(j=0;j<m;j++)
printf("project:%d,score:%d\n",j+1,stu[i].score[j]);
}
}
void Searchbynum (STU stu[],int n,int x,int m) //8.按学号查询学生排名及其各科成绩
{
int i,j,c=1,find=0,sum[N];
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<m;j++)
sum[i]=sum[i]+stu[i].score[j];
}
for(i=0;i<n;i++)
{
if(stu[i].studentID==x)
{
find=1;
break;
}
}
if(find==0)
printf("not find\n");
else
{
for(j=0;j<n;j++)
{
if(sum[j]>sum[i])
c++;
}
printf("ID:%10ld name:%s\n",stu[i].studentID,stu[i].studentName);//以长整形打印用%ld
for(j=0;j<m;j++)
printf("project %d score:%d\n",j+1,stu[i].score[j]);
printf("all score: %d,order:%d\n",sum[i],c);
}
}
void Searchbymane(STU stu[],int n,char name[],int m) //9
{
int i,j,c=1,find=0,sum[N];
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<m;j++)
sum[i]=sum[i]+stu[i].score[j];
}
for(i=0;i<n;i++)
{
if(strcmp(stu[i].studentName,name)==0)
{find=1;
break;}
}
if(find==0)
printf("not find\n");
else
{
for(j=0;j<n;j++)
{
if(sum[j]>sum[i])
c++;
}
printf("ID:%10ld,name:%s\n",stu[i].studentID,stu[i].studentName);//以长整形打印用%ld
for(j=0;j<m;j++)
printf("project %d score:%d\n",j+1,stu[i].score[j]);
printf("all score: %d,order:%d\n",sum[i],c);
}
}
void statistis (STU stu[],int n,int m) //10.
{
int a=0,b=0,c=0,d=0,e=0,i,j;
double A,B,C,D,E;
for(j=0;j<m;j++)
{
for(i=0;i<n;i++)
{
if(stu[i].score[j]>=90)
a++;
else if(stu[i].score[j]>=80)
b++;
else if(stu[i].score[j]>=70)
c++;
else if(stu[i].score[j]>=60)
d++;
else
e++;
}
A=(double)a/n*100;
B=(double)b/n*100;
C=(double)c/n*100;
D=(double)d/n*100;
E=(double)e/n*100;
printf("project %d\n",j+1);
printf("优秀人数%d,比例:%f%%\n",a,A);
printf("良好人数%d,比例:%f%%\n",b,B);
printf("中档人数%d,比例:%f%%\n",c,C);
printf("及格人数%d,比例:%f%%\n",d,D);
printf("不及格人数%d,比例:%f%%\n",e,E);
}
}
void List (STU stu[],int n,int m) //11.
{
int i,j,sum[N];
double ave[N];
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<m;j++)
{
sum[i]=sum[i]+stu[i].score[j];
}
ave[i]=(double)sum[i]/m;
}
for(i=0;i<n;i++)
{
printf("ID:%10ld,name:%s\n",stu[i].studentID,stu[i].studentName);
for(j=0;j<m;j++)
{
printf("score:%d\n",stu[i].score[j]);
}
printf("总分=%d\n平均分%f\n",sum[i],ave[i]);
}
}
展开阅读全文