第一篇:数据结构课程设计-学生成绩名次表
数据结构课程设计-学生成绩名次表
问题描述:建设一个年级(M个班)的学生参加某门课程的考试,每个班最多有N个学生,请输出各班的成绩名次表(M个)、以班级为单位的成绩名次表(1个)、以及以年级为单位的成绩名次表(1个)。
设计要求:
1.功能:每个班级的学生记录按学号顺序排列,每个学生记录至少包含排列名次、学号、成绩3个字段。
2.输入:随机产生M*N个成绩。3.输出:
(1)输出每个班级的成绩名次表,具有相同成绩的名次相同;(2)输出以班级为单位的成绩名次表。
(3)输出以年级为单位的成绩名次表,具有相同成绩的名次相同。
#include
int num;//学号
int score;//成绩
}DataType1;//学生结点信息 typedef struct banji { DataType1 *data;char classname[10];//班级名称
int classnum;//班级人数 }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].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 { 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 classorder(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].classname,b)==0) goto OK; if(x==M-1&&y==N-1) { printf(“你查找的班级不存在!n”); return-1; } } } OK: V=S[x][y].classnum; for(i = 0;i for(j = i+1;j { if(S[x][y].data[i].score< S[x][y].data[j].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].classname); if(k } printf(“n”); return 1;} int Allclassorder(Stu S[MAX1][MAX2], int N)//查询以班级为单位的成绩名次表 { int y,i,j,V,k;int c,p;DataType1 temp; 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;i for(j =i+1;j { if(S[c-1][y].data[i].score< S[c-1][y].data[j].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].classname); 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(“请输入你要查询哪个年级的名次表<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;y r[k++]=S[c-1][x].data[y]; } for(i = 0;i for(j = i+1;j { if(r[i].score< r[j].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': 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);} 学生成绩管理系统 数据结构课程设计 一、课程设计的内容与目的 利用所学数据结构理论知识完成“学生成绩管理系统”的设计。 通过课程设计提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。具体包括: 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 二、课程设计的要求与数据 1.系统功能需求分析: 1、输入功能:可以输入40位同学信息 2、增加功能,能增加学生的信息 3、浏览功能:完成对全部学生记录浏览 4、查询功能:采用散列查找完成按学号查找学生记录 5、排序功能:采用直接选择排序,将学生平均成绩从低到高排序输出 6、删除功能:可以删除学生信息 7、修改功能:可以对学生信息的各项信息进行修改 8、插入功能:完成数据的插入 9、统计功能:统计出各分数段学生人数(60分以下,60~70,71~80,...) 2.存储结构设计分析: 3.学生的信息:学生的信息采用结构体类型定义,每个元素表示一个学生的信息,包括学号,姓名及数据结构平均成绩4个数据项: (1)struct student {char num[11];char name[20];int score[8];float ave;}stu[N];(2)散列表的结点类型定义: typedef struct node {unsigned long int key;struct node * link;}HNode;3.源程序如下: #include第二篇:学生成绩管理数据结构课程设计报告