数据结构课程设计学生成绩名次表.docx
《数据结构课程设计学生成绩名次表.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计学生成绩名次表.docx(9页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计学生成绩名次表.docx](https://file1.bdocx.com/fileroot1/2023-7/10/d160d3da-ef46-4ef0-96ba-8bd5482a7049/d160d3da-ef46-4ef0-96ba-8bd5482a70491.gif)
数据结构课程设计学生成绩名次表
数据结构课程设计-学生成绩名次表
问题描述:
建设一个年级(M个班)的学生参加某门课程的考试,每个班最多有N个学生,请输出各班的成绩名次表(M个)、以班级为单位的成绩名次表(1个)、以及以年级为单位的成绩名次表(1个)。
设计要求:
1.功能:
每个班级的学生记录按学号顺序排列,每个学生记录至少包含排列名次、学号、成绩3个字段。
2.输入:
随机产生M*N个成绩。
3.输出:
(1)输出每个班级的成绩名次表,具有相同成绩的名次相同;
(2)输出以班级为单位的成绩名次表。
(3)输出以年级为单位的成绩名次表,具有相同成绩的名次相同。
#include
#include
#include
#include
#defineMAX15
#defineMAX215
typedefstructstudent
{
intnum;//学号
intscore;//成绩
}DataType1;//学生结点信息
typedefstructbanji
{
DataType1*data;
charclassname[10];//班级名称
intclassnum;//班级人数
}Stu;//班级结点信息
intM;
intCreate(StuS[MAX1][MAX2],intN)
{
intV;
inti,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].classname);
printf("请输入第%d个年级第%d个班级的人数:
",i+1,j+1);
scanf("%d",&V);
S[i][j].data=(DataType1*)malloc(sizeof(DataType1)*V);
getchar();
S[i][j].classnum=V;
for(k=0;k{
intx=S[i][j].data[k].num=(i+1)*1000+(j+1)*100+k;
printf("产生该班第%d个学生的学号:
%d\n",k+1,x);inty=S[i][j].data[k].score=rand()%5+95;
printf("随机产生该班该学生的成绩:
%d\n",y);}
}
}
returnN;
}
intclassorder(StuS[MAX1][MAX2],intN)//查询每个班级的成绩名次表
{
intx,y,i,j,V,k,p=0;
DataType1temp;
charb[10];
printf("请输入你要查询班级的名称:
");
scanf("%s",b);
for(x=0;x{
for(y=0;y{
if(strcmp(S[x][y].classname,b)==0)
gotoOK;
if(x==M-1&&y==N-1)
{
printf("你查找的班级不存在!
\n");
return-1;
}
}
}
OK:
V=S[x][y].classnum;
for(i=0;ifor(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("%4d\t%4d\t%4d\t%s\n",S[x][y].data[k].num,S[x][y].data[k].score,p,S[x][y].classname);
if(k}
printf("\n");
return1;
}
intAllclassorder(StuS[MAX1][MAX2],intN)//查询以班级为单位的成绩名次表
{
inty,i,j,V,k;
intc,p;
DataType1temp;
printf("请输入你要查询那个年级的全部班级名次表<1-%d>:
",M);
scanf("%d",&c);
if(c>M||c<1)
{
printf("输入错误!
\n");
return-1;
}
printf("----打印你要查询的第%d个年级的全部班级名次表----\n",c);
for(y=0;y{
V=S[c-1][y].classnum;
for(i=0;ifor(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("%4d\t%4d\t%4d\t%s\n",S[c-1][y].data[k].num,S[c-1][y].data[k].score,p,S[c-1][y].classname);
if(k}
printf("\n");
}
return1;
}
intgradeorder(StuS[MAX1][MAX2],intN)//查询以年级为单位的成绩名次表
{
intV;
intc;
intx,y,i,j,k=0,p=0;
DataType1r[100],temp;
printf("请输入你要查询哪个年级的名次表<1-%d>:
",M);
scanf("%d",&c);
if(c>M||c<1)
{
printf("输入错误!
\n");
return-1;
}
for(x=0;x{
V=S[c-1][x].classnum;
for(y=0;yr[k++]=S[c-1][x].data[y];
}
for(i=0;ifor(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("%4d\t%4d\t%4d\n",r[i].num,r[i].score,p);
if(i}
return1;
}
voidshowface()//显示桌面菜单
{
printf("********欢迎进入彭强学生成绩名次表查询系统*******\n");
printf("*1创建年级和班级信息2查询每个班级的成绩名次表*\n");
printf("*3查询以班级为单位的成绩名次表*\n");
printf("*4查询以年级为单位的成绩名次表0退出管理系统*\n");
printf("*************************************************\n");
}
voidmain()
{
StuS[MAX1][MAX2];
intN;
chari;
do
{
showface();//调用菜单函数
printf("请选择菜单0—5:
");
scanf("%s",&i);
switch(i)
{
case'1':
N=Create(S,N);break;
case'2':
classorder(S,N);break;
case'3':
Allclassorder(S,N);break;
case'4':
gradeorder(S,N);break;
case'0':
exit(0);break;
default:
printf("选择菜单错误,请重新选择!
\n");
}
}while(i!
=0);
}