数据结构课程设计学生成绩名次表由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“学生成绩名次表实验”。
数据结构课程设计-学生成绩名次表
问题描述:建设一个年级(M个班)的学生参加某门课程的考试,每个班最多有N个学生,请输出各班的成绩名次表(M个)、以班级为单位的成绩名次表(1个)、以及以年级为单位的成绩名次表(1个)。
设计要求:
1.功能:每个班级的学生记录按学号顺序排列,每个学生记录至少包含排列名次、学号、成绩3个字段。
2.输入:随机产生M*N个成绩。3.输出:
(1)输出每个班级的成绩名次表,具有相同成绩的名次相同;(2)输出以班级为单位的成绩名次表。
(3)输出以年级为单位的成绩名次表,具有相同成绩的名次相同。
#include #include #include #include #define MAX1 5 #define MAX2 15 typedef struct student {
int num;//学号
int score;//成绩
}DataType1;//学生结点信息 typedef struct banji { DataType1 *data;char claname[10];//班级名称
int clanum;//班级人数 }Stu;//班级结点信息
int M;int Create(Stu S[MAX1][MAX2],int N){
int V;
int i,j,k;srand(time(NULL));
printf(“请输入你创建多少个年级:”);
scanf(“%d”,&M);
printf(“请输入你创建的一个年级有多少个班:”);
scanf(“%d”,&N);
for(i=0;i
for(j=0;j
{
printf(“---------------------创建第%d个年级第%d个班级的信息--------n”,i+1,j+1);
printf(“请输入第%d个年级第%d个班级的名称:”,i+1,j+1);
scanf(“%s”,S[i][j].claname);
printf(“请输入第%d个年级第%d个班级的人数:”,i+1,j+1);
scanf(“%d”,&V);
S[i][j].data=(DataType1 *)malloc(sizeof(DataType1)*V);
getchar();
S[i][j].clanum=V;
for(k=0;k
{
int x=S[i][j].data[k].num=(i+1)*1000+(j+1)*100+k;
printf(“产生该班第%d个学生的学号:%dn”,k+1,x);
int y=S[i][j].data[k].score=rand()%5+95;
printf(“随机产生该班该学生的成绩:%dn”,y);
}
} }
return N;
}
int claorder(Stu S[MAX1][MAX2], int N)//查询每个班级的成绩名次表 { int x,y,i,j,V,k,p=0;DataType1 temp;char b[10];printf(“请输入你要查询班级的名称:”);scanf(“%s”,b);
for(x=0;x
for(y=0;y
{
if(strcmp(S[x][y].claname,b)==0)
goto OK;
if(x==M-1&&y==N-1)
{
printf(“你查找的班级不存在!n”);
return-1;
}
} } OK: V=S[x][y].clanum;
for(i = 0;i
for(j = i+1;j
{
if(S[x][y].data[i].score
{
temp = S[x][y].data[i];
S[x][y].data[i] =S[x][y].data[j];
S[x][y].data[j] = temp;
}
}
printf(“%d班排名:n学号t成绩t名次t班级名称n”,y+1);
for(k=0;k
{p++;
printf(“%4dt%4dt%4dt%sn”,S[x][y].data[k].num ,S[x][y].data[k].score ,p ,S[x][y].claname);
if(k
}
printf(“n”);
return 1;}
int Allclaorder(Stu S[MAX1][MAX2], int N)//查询以班级为单位的成绩名次表
{ int y,i,j,V,k;int c,p;DataType1 temp;
printf(“请输入你要查询那个年级的全部班级名次表:”,M);scanf(“%d”,&c);if(c>M||c
printf(“输入错误!n”);
return-1;} printf(“----打印你要查询的第%d个年级的全部班级名次表----n”,c);
for(y=0;y
{
V=S[c-1][y].clanum;
for(i =0;i
for(j =i+1;j
{
if(S[c-1][y].data[i].score
{
temp = S[c-1][y].data[i];
S[c-1][y].data[i] =S[c-1][y].data[j];
S[c-1][y].data[j] = temp;
}
}
p=0;
printf(“%d班排名:n学号t成绩t名次t班级名称n”,y+1);
for(k=0;k
{
p++;
printf(“%4dt%4dt%4dt%sn”,S[c-1][y].data[k].num ,S[c-1][y].data[k].score ,p ,S[c-1][y].claname);
if(k
}
printf(“n”);
}
return 1;}
int gradeorder(Stu S[MAX1][MAX2], int N)//查询以年级为单位的成绩名次表 { int V;int c;int x,y,i,j,k=0,p=0;DataType1 r[100], temp;printf(“请输入你要查询哪个年级的名次表:”,M);scanf(“%d”,&c);
if(c>M||c
printf(“输入错误!n”);
return-1;}
for(x=0;x
{
V=S[c-1][x].clanum;
for(y=0;y
r[k++]=S[c-1][x].data[y];
}
for(i = 0;i
for(j = i+1;j
{
if(r[i].score
{
temp = r[i];
r[i] = r[j];
r[j] = temp;
}
} printf(“t--------第%d年级总排名-------n”,c);printf(“ 学号t成绩t名次n”);
for(i=0;i
{
p++;
printf(“%4dt%4dt%4dn”,r[i].num ,r[i].score ,p);
if(i
}
return 1;}
void showface()//显示桌面菜单
{
printf(“********欢迎进入彭强学生成绩名次表查询系统*******n”);
printf(“*1 创建年级和班级信息
2查询每个班级的成绩名次表*n”);printf(“*3 查询以班级为单位的成绩名次表
*n”);printf(“*4 查询以年级为单位的成绩名次表
0 退出管理系统 *n”);printf(“*************************************************n”);
}
void main(){ Stu S[MAX1][MAX2];
int N;
char i;do {
showface();//调用菜单函数
printf(“请选择菜单0—5:”);
scanf(“%s”,&i);switch(i){
case '1': N=Create(S,N);break;
case '2': claorder(S,N);break;
case '3': Allclaorder(S,N);break;
case '4': gradeorder(S,N);break;
case '0': exit(0);
break;
default:printf(“选择菜单错误,请重新选择!n”);} }while(i!=0);}