成绩统计系统大数据结构课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
洛阳理工学院课程设计报告
课程名称数据结构课程设计
设计题目成绩统计系统
专业计算机科学与技术
1. 问题描述
给出n个学生的m门考试的成绩表,每个学生的信息由学号、以及各科成绩组成。对学生的考试成绩进行有关统计,并打印统计表。
2.基本要求
(1)按总数高低次序,打印出名次表,分数相同的为同一名次;
(2)按名次打印出每个学生的学号、、总分以及各科成绩。
3、数据结构类型定义
struct Student
{
char m_Name[20];
unsigned int m_ID;
float m_Score[m];
};
4. 总体设计
(1)模块划分:
<1>初始化函数:Node* Init();
<2>直接插入法排序函数:float* Sort();
<3>相同名次处理函数:int Del_Same();
<4>打印函数void Display();
<5>主函数:void main()
2、组成框图:
3、流程图
<1>初始化函数:Node* Init(); <2>直接插入法:float* Sort();
<3>相同名次处理:int Del_Same(); <4>打印函数void Display();
1.声明一个结构体:
typedef struct Student Node;
2.录入数据
将复制形式修改为指针访问形式,计算成绩总和写入到sum[]中。3.打印,按名次从第一名到最后一名。
4.下直接插值排序法
会用到"哨兵",nSize表示grade[]中实际元素的个数。
5.处理相同成绩的名次
将sum[n]中的不重复的元素放到grade[n]中,函数返回grade[]中实际元素的个数。
测试数据:
6. 测试与调试
1、输入数据:
2.打印成绩
7. 源程序清单
#include
#include
#include
#include
{
char m_Name[20];
unsigned int m_ID;
float m_Score[m];
};
typedef struct Student Node;
//------函数声明---------------------------
Node* Init(Node* stu,const int cN,float* Asum,int nSum);
float* Sort(float* Agrade,int nSize);
int Del_Same(float* Asum,int nSum,float* Agrade,int nGreade);
void Display(Student* stu,int nN,float* Asum,int nSum,float* Agrade,int nGreadeSize);
//------函数实现---------------------------
//----录入数据------
Node* Init(Node* stu,const int cN,float* Asum,int nSum)
{
char name[20];
unsigned int id;
float score[m];
int i,j;
for(i=0;i { printf("请输入第%d/%d名学生的信息:\n ",i+1,n); printf("请输入: "); scanf("%s",name); printf("\n请输入学号: "); scanf("%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_ID=id; for(j=0;j { (stu+i)->m_Score[j]=score[j]; } //-------计算成绩总和写入到sum[]中-------- *(Asum+i)=0.0; for(j=0;j { (*(Asum+i))+=((stu+i)->m_Score[j]); } }//for(n) printf("成功!~数据录入完毕!"); return stu; } void Display(Node* stu,int nN,float* Asum,int nSum,float* Agrade,int nGreadeSize) {//打印。按名次从第一名到最后一名。 cout< cout<<"============================打印名次信息 ================================="< cout<<"================================================ ========================="< cout<<"名次======学号============总分=====名科成 绩===="< for(int i=0;i { for(int j=0;j { if(Asum[j]==Agrade[i]) {