资源预览内容
第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
第9页 / 共15页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
洛阳理工学院课程设计报告课程名称数据结构课程设计设计题目成绩统计系统专 业计算机科学与技术课程设计任务书设计题目:给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓 名以及各科成绩组成。对学生的考试成绩进行有关统计,并打印统计表。设计内容与要求:(1)按总数高低次序,打印出名次表,分数相同的为同一名次;(2)按名次打印出每个学生的学号、姓名、总分以及各科成绩。课程设计评语成绩:指导教师:1问题描述给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩 组成。对学生的考试成绩进行有关统计,并打印统计表。2. 基本要求(1) 按总数高低次序,打印出名次表,分数相同的为同一名次;(2) 按名次打印出每个学生的学号、姓名、总分以及各科成绩。3、数据结构类型定义struct Stude ntchar m_Name20;un sig ned int m_ID;float m_Scorem;4总体设计(1 )模块划分:初始化函数:Node* In it();直接插入法排序函数:float* Sort();相同名次处理函数:int Del_Same();打印函数 void Display。;主函数:void main()2、组成框图:3、流程图欢迎进入成绩统计系统排序处理相同分数初始化函数:Node* Ini t();直接插入法:float* Sort();print!广沾输入第验L-MultipleiMultipkxIprinrtT成功数?_retiirnAradt.+iAradlej IA(rad nSi Agf ., 相同名次处理:int Del_Same(); 打印函数 void Display。;5. 详细设计1. 声明一个结构体:typedef struct Stude nt Node;2. 录入数据将复制形式修改为指针访问形式,计算成绩总和写入到sum中3. 打印,按名次从第一名到最后一名。4. 下直接插值排序法会用到哨兵,nSize表示grade中实际元素的个数。5. 处理相同成绩的名次将sumn中的不重复的元素放到graden中,函数返回grade中实际元素的个 数。测试数据:姓名语 文数学英 语物理黄54535251赵98979695李1009999986. 测试与调试1、输入数据:USERSADM1NISTRATORD.,J =回请駄第儿兀名宝生的信息; 请籥入姓名:请输入学号:0?录入第1/4门课程成绩汚4录入第2/4门课程成绩汚3录入第3/4门课程成绩:盟 录人第4/4门课程咸绩:1 请敷递會冬名学生的信息:请騎姓名:赵请输入学号二胴2.打印成绩 C:USERSADMINSTKATORDESICrOFVZZDebugzzzzxe录入第4门课程成绩:鹑 录入第3/4门课程成绩:肝 录入第4/4门课程成绩:弼 成功!嘖龙据录人完毕!=打E卩名次信息一“名nu 姓李赵Irt1 - n00 8 4名1 9 5=8 5=9 9 一-绩7. 源程序清单#in elude #in elude #in elude #in elude #in elude #define n 3/*学生数 */#define m 4/*课程数 */using n amespaee std;/- 声明一个结构-struet Stude ntchar m_Name20;un sig ned int m_ID;float m_Scorem;;typedef struct Stude nt Node;/-函数声明Node* Init(Node* stu,const int cN,float* Asum,int nSum);float* Sort(float* Agrade,int nSize);int Del_Same(float* Asum,i nt n Sum,float* Agrade,i nt n Greade);void Display(Student* stu,int nN,float* Asum,int nSum,float* Agrade,int n GreadeSize);/-函数实现/-录入数据Node* Init(Node* stu,const int cN,float* Asum,int nSum)char n ame20;un sig ned int id;float scorem;int i,j;for(i=0;i n;+i)printf(请输入第d/%d名学生的信息:n ”,i+1,n);printf(请输入姓名:”);sea nf(%s, name);printf(n请输入学号:”);sea nf(%d,&id);for(j=0;jm_Name, name);/修改成指针访问形式(stu+i)- mD=id;for(j=0;jm_Scorej=scorej;/ 计算成绩总和写入到sum中*(Asum+i)=O.O;for(j=0;jm_Scorej);/for( n)printf(”成功! 数据录入完毕!”);return stu;void Display(Node* stu,int nN,float* Asum,int nSum,float* Agrade,int nGreadeSize)/打印。按名次从第一名到最后一名。coutendl= =e ndl;cout=打印名次信息 =e ndl; cout= e ndl;cout名次=学号=姓名=总分=名科成绩=e ndl;for(i nt i=0;i nGreadeSize;+i)for(i nt j=O;j n;+j)if(Asumj=Agradei)coutsetw(10)lefti+1名次。setw(10)leftstuj.mD学号。setw(10)leftstuj.m_Name姓名。setw(10)leftAsumj;/总分。for(i nt k=0;km;+k)coutsetw(10)leftstuj.m_Scorek;名科成绩。coute ndl;float* Sort(float* Agrade,int nSize)/练习一下直接插值排序法。会用到 ”哨兵”。nSize表示grade中实际元素的个数。for(i nt i=1;i =0;)if(AgradenSizeAgradej)从大到小的顺序。一定要注意,是拿”哨兵”来与之比较才对的。Agradej+1=Agradej;j-;elsebreak;/for内Agradej+1=Agrade nSize;/从哨兵中取出这个值来/for 外retur n Agrade;int Del_Same(float* Asum,i nt n Sum,float* Agrade,i nt n Greade)/将sumn中的不重复的元素放到graden中,函数返回grade中实际元素的个数。int Find;/有无重复的标记:1为有,0为无。int nElem=1;/gread中的实际元素个数。Agrade0=Asum0;for(i nt i=0;i n Sum;+i)/sumfor(i nt j=0;j nElem;+j)/gradeif(Asumi=Agradej)/判断两个浮点数相等条件。Fin d=1;break;elseFin d=0;if(Fi nd=0)Agrade n Elem=Asumi;n Elem+;/for(最外)return n Elem;/void mai n()Node Stu n;Node* pStu;pStu=Stu; 声明n个Student对象的一个数组。float sumn,graden+1;因为想在grade中用到直接插值排序法,要用到 ”哨兵”。所以构造n+1.pStu=I nit(pStu, n,sum, n);int n Grade_size;n Grade_size=Del_Same(su m,n, grade ,n+1);float* pGrade=0;pGrade=Sort(grade ,n Grade_size);Display(pStu ,n,sum,n, grade ,n Grade_size);八、心得体会这次我抽到的题目很简单,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号