成绩统计系统数据结构课程设计.docx
- 文档编号:1173230
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:9
- 大小:72.91KB
成绩统计系统数据结构课程设计.docx
《成绩统计系统数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《成绩统计系统数据结构课程设计.docx(9页珍藏版)》请在冰豆网上搜索。
成绩统计系统数据结构课程设计
洛阳理工学院
课程设计报告
课程名称数据结构课程设计
设计题目成绩统计系统
专业计算机科学与技术
课程设计任务书
设计题目:
给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。
对学生的考试成绩进行有关统计,并打印统计表。
设计内容与要求:
(1)按总数高低次序,打印出名次表,分数相同的为同一名次;
(2)按名次打印出每个学生的学号、姓名、总分以及各科成绩。
课程设计评语
成绩:
指导教师:
1•问题描述
给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。
对学生的考试成绩进行有关统计,并打印统计表。
2.基本要求
(1)按总数高低次序,打印出名次表,分数相同的为同一名次;
(2)按名次打印出每个学生的学号、姓名、总分以及各科成绩。
3、数据结构类型定义
structStudent
{
charm_Name[20];
unsignedintm_ID;
floatm_Score[m];
};
4•总体设计
(1)模块划分:
<1>初始化函数:
Node*Init();
<2>直接插入法排序函数:
float*Sort();
<3>相同名次处理函数:
intDel_Same();
<4>打印函数voidDisplay。
;
<5>主函数:
voidmain()
2、组成框图:
3、流程图
欢迎进入成绩统计系统
排
序
处理相同分数
<1>初始化函数:
Node*Init();
<2>直接插入法:
float*Sort();
print!
广沾输入第验L-
Multiplei
Multipkx
I
prinrtT成功]~数?
_
retiirnA^radt.
++i
A^radle[j~I
A(^rad^[nSi]■Agf■.,°
<3>相同名次处理:
intDel_Same();<4>打印函数voidDisplay。
;
5.详细设计
1.声明一个结构体:
typedefstructStudentNode;
2.录入数据
将复制形式修改为指针访问形式,计算成绩总和写入到sum[]中
3.打印,按名次从第一名到最后一名。
4.下直接插值排序法
会用到"哨兵",nSize表示grade[]中实际元素的个数。
5.处理相同成绩的名次
将sum[n]中的不重复的元素放到grade]n]中,函数返回grade[]中实际元素的个数。
测试数据:
姓名
语文
数学
英语
物理
黄
54
53
52
51
赵
98
97
96
95
李
100
99
99
98
6.测试与调试
1、输入数据:
请输入学号:
07
录入第1/4门课程成绩汚4
艮入第2/4门课程成绩汚3录入第3/4门课程成绩:
盟A人第4/4门课程咸绩:
E1
请输入学选施
7.源程序清单
#inelude
#inelude
#inelude
#inelude
#inelude
#definen3/*学生数*/
#definem4/*课程数*/
usingnamespaeestd;
//---声明一个结构----
struetStudent
charm_Name[20];
unsignedintm_ID;
floatm_Score[m];
};
typedefstructStudentNode;
//------函数声明
Node*Init(Node*stu,constintcN,float*Asum,intnSum);
float*Sort(float*Agrade,intnSize);
intDel_Same(float*Asum,intnSum,float*Agrade,intnGreade);
voidDisplay(Student*stu,intnN,float*Asum,intnSum,float*Agrade,intnGreadeSize);
//------函数实现
//----录入数据
Node*Init(Node*stu,constintcN,float*Asum,intnSum)
{
charname[20];
unsignedintid;
floatscore[m];
inti,j;
for(i=0;i { printf("请输入第%d/%d名学生的信息: \n”,i+1,n); printf("请输入姓名: ”); seanf("%s",name); printf("\n请输入学号: ”); seanf("%d",&id); for(j=0;j { printf("\n录入第%d/%d门课程成绩: ",j+1,m); scanf("%f",&score[j]); } printf("\n"); //---赋值过程 strcpy((stu+i)->m_Name,name);//修改成指针访问形式 (stu+i)->m」D=id; for(j=0;j { (stu+i)->m_Score[j]=score[j]; } //计算成绩总和写入到sum[]中 *(Asum+i)=O.O; for(j=0;j { (*(Asum+i))+=((stu+i)->m_Score[j]); } }//for(n) printf(”成功! ~数据录入完毕! ”); returnstu; } voidDisplay(Node*stu,intnN,float*Asum,intnSum,float*Agrade,intnGreadeSize) {//打印。 按名次从第一名到最后一名。 cout< cout<<"============================打印名次信息================================="< cout<<"名次======学号======姓名======总分=====名科成绩 ===="< for(inti=0;i { for(intj=O;j { if(Asum[j]==Agrade[i]) { cout< < < < for(intk=0;k cout< } 〃cout< } } } float*Sort(float*Agrade,intnSize) {//练习一下直接插值排序法。 会用到”哨兵”。 nSize表示grade[]中实际元素的个数。 for(inti=1;i { Agrade[nSize]=Agrade[i];〃将它放到哨兵里 for(intj=i_1;j>=0;) { if(Agrade[nSize]>Agrade[j])〃从大到小的顺序。 一定要注意,是拿”哨兵” 来与之比较才对的。 { Agrade[j+1]=Agrade[j]; j--; } else { break; } }//for内 Agrade[j+1]=Agrade[nSize];//从哨兵中取出这个值来 }//for外 returnAgrade; intDel_Same(float*Asum,intnSum,float*Agrade,intnGreade) {//将sum[n]中的不重复的元素放到grade[n]中,函数返回grade[]中实际元素的个数。 intFind;//有无重复的标记: 1为有,0为无。 intnElem=1;//gread[]中的实际元素个数。 Agrade[0]=Asum[0]; for(inti=0;i { for(intj=0;j { if(Asum[i]==Agrade[j])//判断两个浮点数相等条件。 { Find=1; break; } else { Find=0; } } if(Find==0) { Agrade[nElem]=Asum[i]; nElem++; } }//for(最外) returnnElem; } // voidmain() { NodeStu[n]; Node*pStu; pStu=Stu;〃声明n个Student对象的一个数组。 floatsum[n],grade[n+1];〃因为想在grade[]中用到直接插值排序法,要用到”哨兵”。 所 以构造n+1. pStu=Init(pStu,n,sum,n); intnGrade_size; nGrade_size=Del_Same(sum,n,grade,n+1); float*pGrade=0; pGrade=Sort(grade,nGrade_size); Display(pStu,n,sum,n,grade,nGrade_size); } 八、心得体会 这次我抽到的题目很简单,但是这是指用基础的C语言写很简单。 如果想把本学期数据结构的知识应用到程序中还是很有挑战性的。 我采用的是直接插入排序法,刚开始把书上的程序照搬过来,结果发现有许多的错误。 改了很久才改对。 最难的是相同成绩处理的函数,我刚开始以为很简单,但是前面各个成绩采用的是指针结构体,很难处理,最后在网上查找了一下才对照着改正过来。 最后我学会的是可以先把数据输入数组内,在用指针直接指向数据就可以了,这样比输入数据时就用指针要简单的多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成绩 统计 系统 数据结构 课程设计