成绩统计系统大数据结构课程设计文档格式.docx
- 文档编号:18530344
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:11
- 大小:43.44KB
成绩统计系统大数据结构课程设计文档格式.docx
《成绩统计系统大数据结构课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《成绩统计系统大数据结构课程设计文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
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、流程图
<
直接插入法:
float*Sort();
相同名次处理:
intDel_Same();
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
6.测试与调试
1、输入数据:
2.打印成绩
7.源程序清单
#include<
stdio.h>
string>
float.h>
iostream>
iomanip>
#definen3/*学生数*/
#definem4/*课程数*/
usingnamespacestd;
//---声明一个结构----
//------函数声明---------------------------
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<
n;
++i)
{
printf("
请输入第%d/%d名学生的信息:
\n"
i+1,n);
请输入:
"
);
scanf("
%s"
name);
\n请输入学号:
%d"
&
id);
for(j=0;
j<
m;
++j)
{
\n录入第%d/%d门课程成绩:
"
j+1,m);
%f"
score[j]);
}
\n"
//---赋值过程---------------
strcpy((stu+i)->
m_Name,name);
//修改成指针访问形式.
(stu+i)->
m_ID=id;
j++)
m_Score[j]=score[j];
//-------计算成绩总和写入到sum[]中--------
*(Asum+i)=0.0;
(*(Asum+i))+=((stu+i)->
m_Score[j]);
}
}//for(n)
成功!
~数据录入完毕!
returnstu;
}
voidDisplay(Node*stu,intnN,float*Asum,intnSum,float*Agrade,intnGreadeSize)
{//打印。
按名次从第一名到最后一名。
cout<
endl<
========================================================================="
endl;
============================打印名次信息================================="
名次======学号============总分=====名科成绩===="
for(inti=0;
nGreadeSize;
for(intj=0;
if(Asum[j]==Agrade[i])
setw(10)<
left<
i+1//名次。
stu[j].m_ID//学号。
stu[j].m_Name//。
Asum[j];
//总分。
for(intk=0;
k<
++k)
stu[j].m_Score[k];
//名科成绩。
//cout<
float*Sort(float*Agrade,intnSize)
{//练习一下直接插值排序法。
。
nSize表示grade[]中实际元素的个数。
for(inti=1;
nSize;
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;
nSum;
++i)//sum[]
nElem;
++j)//grade[]
if(Asum[i]==Agrade[j])//判断两个浮点数相等条件。
Find=1;
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成绩 统计 系统 数据结构 课程设计