成绩统计系统数据结构专业课程设计_第1页
成绩统计系统数据结构专业课程设计_第2页
成绩统计系统数据结构专业课程设计_第3页
成绩统计系统数据结构专业课程设计_第4页
成绩统计系统数据结构专业课程设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

洛阳理工学院

课程设计报告

课程名称数据构造课程设计____________

设计题目_________成绩记录系统______________

专业计算机科学与技术____________

课程设计任务书

设计题目:给出n个学生m门考试成绩表,每个学生信息由学号、姓名以及

各科成绩构成。对学生考试成绩进行关于记录,并打印登记表。

设计内容与规定:

(1)按总数高低顺序,打印出名次表,分数相似为同一名次;

(2)按名次打印出每个学生学号、姓名、总分以及各科成绩。

课程设计评语

成绩:

指引教师:_______________

年月日

1.问题描述

给出n个学生m门考试成绩表,每个学生信息由学号、姓名以及各科成绩构成。

对学生考试成绩进行关于记录,并打印登记表。

2.基本规定

(1)按总数高低顺序,打印出名次表,分数相似为同一名次;

(2)按名次打印出每个学生学号、姓名、总分以及各科成绩。

3、数据构造类型定义

structStudent

(

charm_Name[20];

unsignedintn_lD;

floatmScore[m];

);

4.总体设计

(1)模块划分:

<1>初始化函数:Node*Init();

<2>直接插入法排序函数:float*Sort();

<3>相似名次解决函数:intDel_Samet);

<4>打印函数voidDisplay();

<5>主函数:voidmain()

2、构成框图:

3、流程图

<1>初始化函数:Node*Init();<2>直接插入法:float*Sort():

T

<3>相似名次解决:intDelSame();<4>打印函数voidDisplay();

I

5.详细设计

1.声明一种构造体:

typedefstructStudentNode;

2.录入数据

将复制形式修改为指针访问形式,计算成绩总和写入到sum口中。

3.打印,按名次从第一名到最后一名。

4.下直接插值排序法

会用至「哨兵〃,nSize表达grade[]中实际元素个数。

5.解决相似成绩名次

将sum[n]中不重复元素放到grade[n]中,函数返回grade口中实际元素个数。

测试数据:

姓名语文数学英语物理

黄54535251

赵98979695

李100999998

6.测试与调试

1、输入数据:

■•C:\USERS\ADMINETRATOR\D..,〔0I回I区

请辄人第1/3名至生的信息:

请酶人姓名:I

请输入学号:。7

不入第1/4门课程成绩”4

,入第

2/4门课程成绩;53

9入第

3/4门课程成绩:53

麋入第

4/4门课程成绩

i叫霍翁萨的信息:

;青输入学号:。4

in

2.打印成绩

■'C:\USERS\ADMINISTRATOR\DESKTOP\ZZZ\Debug\zzzz.exe"

录入第2/4门课程成绩:99

录入第3/4门课程成绩:99

录入第4/4门课程成绩:98

成功!啜据录入完毕!

打印名次信息

13李699

239

4赵989?965

37黄545353

51

1t

7.源程序清单

#include<stdio.h>

#include<string>

include<float.h>

^include<iostre<un>

#include<iomanip>

ttdcfinon3/*学生数*/

ftdefinem4/*课程数*/

usingnamespacestd;

//—声明一种构造----

structStudent

(

charmName[20];

unsignedintm_ID;

floatmScore[m];

};

typedefstructStudentNode;

//------函数声明-----------------------------

Node*Init(Node*stu,constintcN,float*Asum,intnSum);

float*Sort(float*Agrade,intnSize);

intDelSame(float*Asum,intnSum,float*Agrade,intnGreade);

voidDisplay(Student*stu,intnN,float*Asum,intnSum,float*Agrade,int

nGreadeSize);

//------函数实现----------------------------

//——录入数据------

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”,

printf(”请输入姓名:");

scanfname);

printf(〃\n请输入学号:”);

scanf&id);

for(j=0;j<m;++j)

(

printf("\n录入第%d/%d门课程成绩:",j+1,m);

scanf&score[j]);

printf('\n");

//—赋值过程---------------

strcpy((stu+i)->m_Name,name);//修改成指针访问形式.

(slu+i)->二id;

for(j=0;j<m;j++)

(

(stu+i)->m_Score[j]=scorG[j];

}

//-------计算成绩总和写入到sum口中--------

*(Asum+i)=O.0;

for(j=0;

(

(*(Asuni+i))+=((stu+i)->m_Score[j]);

}

)//for(n)

printf("成功!~数据录入完毕!〃);

returnstu;

)

voidDisplay(Node*stu,intnN,float*Asum,intnSum,float*Agrade,intnGroadcSize)

{//打印。按名次从第一名到最后一名。

cout((end]〈<=================================================================

======/z«cndl;

cout<<"======================41印名次信息

================================<<end]:

cout<<========================================================================

"<<endl;

cout<<〃名次=====学号======姓名=二==总分===名科成绩

===*<<endl;

for(inti=0;i<nGreadeSize;++i)

(

for(intj=0;j<n;++j)

(

if(Asum[j]==Agrade[i])

(

cout«setw(10)<<left«i+l〃名次。

«setw(10)«left«stu[j].m」D〃学号。

«setw(10)«left«stu[j].m_Name〃姓名。

«sotw(10)<<left«Asum[j];〃总分。

for(intk=0;k<m;++k)

cout«setw(10)«left«stu[j].m_Score[k];//名科成绩。

)

//cout«cndl;

}

)

}

float*Sort(float*Agrade,intnSize)

(〃练习一下直接插值排序法。会用到"哨兵"。nSize表达grade口中实际元素个数.

for(inti=l;i<nSize;++i)

(

Agrade[nSize]=Agrade[i]://将它放到哨兵里

for(intj=i-l;j>=0;)

if(Agradc[nSize]>Agrade[j])〃从大到小顺序。一定要注意,是拿“哨兵”来与

之比较才对。

Agrade[j+l]=Agrado[j];

}

else

(

break;

}

}//for内

Agrade[j+1]=Agrade[nSize];//从哨兵中取出这个值来

)//for外

returnAgrade;

}

intDel_Same(float*Asurn,intnSum,float*Agrade,intnGreade)

{〃将sum[n]中不重复元素放到gradein]中,函数返回grade口中实际元素个数。

intFind;〃有无重复标记:1为有,0为无。

intnElem=l;〃gread口中实际元素个数。

Agrade[O]=Asum[O];

for(inti=0;i<nSum;++i)//sum[]

(

for(intj=0;j<nElem;++j)//grade[]

{

if(Asum[i]==Agradc[j])〃判断两个浮点数相等条件。

(

Find=l;

break;

)

else

(

Find=0;

)

}

if(Find==0)

Agrade[nElem]=Asum[i];

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论