成绩统计系统数据结构课程设计

合集下载

运动会分数统计(数据结构课程设计)python

运动会分数统计(数据结构课程设计)python

运动会是学校中一项重要的活动,通过运动会可以增强学生的体质,增进师生之间的情感,同时也能够激发学生的运动热情和团队精神。

而对于运动会的分数统计来说,如何高效、准确地完成这项工作是非常重要的。

本文主要介绍了基于数据结构课程设计的运动会分数统计系统,使用Python语言实现。

二、系统设计1. 数据结构的选择在设计运动会分数统计系统时,需要考虑如何存储和管理参赛队伍和成绩信息。

由于参赛队伍和成绩信息的数量较大,因此需要选择适合高效查询和排序的数据结构。

本系统选择使用Python中的字典(dictionary)和列表(list)来存储和管理数据。

2. 数据的存储在系统中,每支队伍的信息包括队伍编号、队伍名称和各项比赛成绩等。

这些信息可以使用字典来存储,其中队伍编号作为键,队伍信息作为值。

而各项比赛成绩可以使用列表来存储,方便进行排序和统计。

3. 数据的输入为了方便输入参赛队伍和成绩信息,本系统提供了相应的输入界面,用户可以通过界面逐一输入每支队伍的信息。

程序也提供了批量导入功能,用户可以通过导入文件的方式一次性输入所有的参赛队伍和成4. 数据的统计和输出系统可以对输入的成绩信息进行统计和排序,可以按照总分或特定比赛项目的成绩进行排序,并将排名信息输出到文件中。

排名信息包括队伍名称、总分和各项比赛成绩,方便后续的奖励和表彰工作。

三、系统实现1. 数据结构类的设计为了方便对队伍和成绩信息进行管理,本系统设计了队伍(Team)和成绩(Score)两个类,分别用于存储队伍信息和比赛成绩。

2. 主程序的设计系统的主程序主要包括数据的输入、统计和输出三个功能。

用户可以通过交互式界面输入队伍和成绩信息,也可以通过命令行参数进行批量导入。

系统会对输入的成绩信息进行统计和排序,并将排名信息输出到指定的文件中。

3. 界面设计为了方便用户操作,系统提供了简洁清晰的交互式界面。

用户可以通过界面进行数据的输入和操作,也可以查看和导出排名信息。

学生成绩管理系统,数据结构课程设计

学生成绩管理系统,数据结构课程设计

课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目:学生成绩管理系统已知技术参数和设计要求:现有学生成绩信息文件1(cj1。

txt),内容如下姓名学号语文数学英语张明明 01 67 78 82李成友 02 78 91 88张辉灿 03 68 82 56王露 04 56 45 77陈东明 05 67 38 47…. 。

. 。

…学生成绩信息文件2(cj2.txt),内容如下:姓名学号语文数学英语陈果 31 57 68 82李华明 32 88 90 68张明东 33 48 42 56李明国 34 50 45 87陈道亮 35 47 58 77…. 。

.. .. …试编写一管理系统,其基本功能要求:实现对两个文件数据进行合并,生成新文件cj3.txt抽取出三科成绩中有补考的学生并保存在一个新文件cj4.txt对合并后的文件3。

txt中的数据按总分降序排序(至少采用两种排序方法实现)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)要求使用结构体,链或数组等实现上述要求。

采用多种方法且算法正确者,可适当加分。

要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)数据结构课程设计说明书一、需求分析1、问题描述现如今,学校人数的暴涨,对学生基本信息的录入,保存量越来越大,为了简化对工作人员的操作,故设计一个程序来完成对学生基本信息的录入,保存,编辑等简单操作。

2、基本任务(1)对学生信息表cj1和cj2进行合并;(2)把合并的信息生成cj3;(3)把cj3中有补考的学生信息生成cj4;(4)对合并后的文件3。

txt中的数据按总分降序排序;(5)输入一个学生姓名后,能查找到此学生的信息并输出结果。

二、概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计:1、主界面设计为了实现学生成绩管理系统的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。

数据结构课程设计-学生成绩管理系统

数据结构课程设计-学生成绩管理系统

广东学院《数据结构课程设计》题目:学生成绩管理系统学号:姓名:年级:计算机科学与技术6班学院:智能制造学院专业:指导教师:目录一、问题描述与基本要求 (3)1.1问题描述 (3)1.2基本要求 (3)二、数据结构的设计 (3)2.1数据结构的选择 (3)2.2单链表的定义 (3)2.3重要函数的定义及说明 (4)三、软件模块结构图....................... 错误!未定义书签。

3.1大体模块关系图 (13)3.2各模块具体分析..................... 错误!未定义书签。

四、程序流程图 (15)五、源程序 (17)六、调试分析............................. 错误!未定义书签。

6.1程序错误修改及完善的过程 (37)6.2最终程序所有功能运行结果........... 错误!未定义书签。

6.3测试数据 (39)七、用户使用手册 (40)八、心得体会............................. 错误!未定义书签。

一、问题描述与基本要求1.1问题描述设计一个学生管理系统,建立初始学生成绩,添加/插入,查找,修改,删除学生成绩。

1.2基本要求系统设计要求:1、能比较迅速地实现添加学生的学号,姓名和成绩2、能比较迅速地通过学生的学号或姓名查询、修改或删除学生成绩3、当有学生时,输出所有学生的成绩信息,包括语文,数学,英语的成绩二、数据结构的设计2.1数据结构的选择课程设计题目的要求是,要较简单迅速地实现添加、查询、修改、删除学生成绩的的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。

2.2单链表的定义先定义单链表结点的数据域,数据域包括学生姓名、学生学号、学生成绩等学生信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。

成绩查询系统课程设计

成绩查询系统课程设计

成绩查询系统课程设计一、课程目标知识目标:1. 学生理解成绩查询系统的基本原理和功能需求,掌握系统设计的基本流程;2. 学生掌握数据库查询语言SQL的基础操作,能够实现数据的增删改查;3. 学生了解数据结构和算法在成绩查询系统中的应用。

技能目标:1. 学生能够运用结构化分析方法,独立完成成绩查询系统的需求分析;2. 学生能够利用数据库管理软件,设计并实现成绩查询系统的数据库;3. 学生通过编程实践,掌握成绩查询系统的设计与实现,提高问题解决能力。

情感态度价值观目标:1. 培养学生对信息技术的兴趣和热情,激发学生主动参与系统开发的积极性;2. 培养学生良好的团队协作精神,提高沟通与协作能力;3. 增强学生的信息安全意识,培养学生对个人隐私和数据保护的重视。

课程性质:本课程为信息技术学科,结合实际应用,注重培养学生的实践能力和创新能力。

学生特点:六年级学生具有一定的信息技术基础和逻辑思维能力,对新鲜事物充满好奇心,但需引导提高专注力和耐心。

教学要求:结合学生特点,采用任务驱动法,以实际问题为导向,引导学生主动探究、实践,提高综合运用知识的能力。

在教学过程中,注重分层教学,关注个体差异,使每个学生都能在原有基础上得到提高。

通过课程学习,使学生达到上述课程目标,为后续学习奠定基础。

二、教学内容本章节教学内容主要包括以下三个方面:1. 成绩查询系统需求分析:- 理解系统需求的概念,学习如何运用结构化分析方法进行需求分析;- 分析成绩查询系统的功能需求,包括用户角色、功能模块和数据流;- 教材关联章节:第三章“系统分析”。

2. 成绩查询系统数据库设计:- 学习数据库基本概念,掌握数据库设计方法;- 应用SQL语言实现成绩查询系统的数据表设计及数据操作;- 教材关联章节:第四章“数据库设计与实现”。

3. 成绩查询系统设计与实现:- 掌握系统设计的基本流程,包括界面设计、功能模块划分和算法实现;- 学习编程实现成绩查询系统,提高编程实践能力;- 教材关联章节:第五章“系统设计与实现”。

成绩统计系统数据结构课程设计报告书

成绩统计系统数据结构课程设计报告书

洛阳理工学院课程设计报告课程名称数据结构课程设计设计题目成绩统计系统专业计算机科学与技术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 <stdio.h>#include <string>#include <float.h>#include <iostream> #include <iomanip> #define n 3/*学生数*/ #define m 4/*课程数*/ using namespace std; //---声明一个结构---- struct Student{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<n;++i){printf("请输入第%d/%d名学生的信息:\n ",i+1,n); printf("请输入姓名: ");scanf("%s",name);printf("\n请输入学号: ");scanf("%d",&id);for(j=0;j<m;++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<m;j++){(stu+i)->m_Score[j]=score[j];}//-------计算成绩总和写入到sum[]中-------- *(Asum+i)=0.0;for(j=0;j<m;++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) {//打印。

成绩分析数据结构课程设计

成绩分析数据结构课程设计

成绩分析数据结构课程设计一、课程目标知识目标:1. 让学生掌握数据结构的基本概念,如线性表、树、图等,并了解它们在实际问题中的应用。

2. 使学生能够理解和分析不同数据结构的特点,如时间复杂度和空间复杂度。

3. 帮助学生掌握常见算法的实现原理,如排序、查找等,并能够运用到成绩分析中。

技能目标:1. 培养学生运用数据结构解决实际问题的能力,特别是针对成绩分析的数据处理。

2. 提高学生编写和优化算法的能力,以便对大量成绩数据进行有效分析。

3. 培养学生使用计算机工具(如编程语言和数据处理软件)进行数据结构相关操作的能力。

情感态度价值观目标:1. 激发学生对数据结构学习的兴趣,培养主动探索和积极思考的学习态度。

2. 引导学生认识到数据结构在解决问题中的重要作用,提高对数学和计算机科学的认识。

3. 培养学生的团队合作意识,学会在团队中分享、交流和协作,共同完成成绩分析任务。

课程性质:本课程属于计算机科学与数学相结合的学科,注重理论知识与实践操作的结合。

学生特点:学生已具备一定的数学基础和编程能力,但对数据结构的应用和深入分析尚处于初级阶段。

教学要求:结合学生特点,通过案例分析和实际操作,使学生在掌握数据结构基本知识的基础上,能够将其应用于成绩分析,提高解决实际问题的能力。

同时,注重培养学生的团队合作和创新能力。

在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。

二、教学内容1. 数据结构基本概念:线性表、栈、队列、树、图等,对应教材第1章。

- 线性表的应用实例:成绩排序、查找。

- 树的结构及其在成绩分类中的应用。

- 图的表示方法及其在成绩关系分析中的应用。

2. 算法分析:时间复杂度、空间复杂度,对应教材第2章。

- 分析不同排序算法的时间复杂度,如冒泡排序、快速排序等。

- 探讨查找算法的空间复杂度,如二分查找、哈希查找等。

3. 常见数据结构与算法的应用:对应教材第3-5章。

- 整理和优化成绩分析相关算法,如平均值计算、优秀率统计等。

数据结构-学生成绩管理系统课程设计

数据结构-学生成绩管理系统课程设计

“数据结构与算法”课程设计报告*课程设计题目;要求:完成学生成绩的录入、统计、查询、修改、删除、输出。

(一)需求和规格说明1、软件其本身应是一个大的分支系统,每个分支都对应系统的一项功能。

在数据通过系统主功能输入完成后,通过调用各个子功能对数据进行相应的处理,达到相应的目的。

2、系统中首相要解决的问题就是信息的存储,学生的信息包含多方面的内容,必须用类或结构体去存储。

原题目中要求学生学号num用int类型的变量来存储,但实际情况下此设计并不妥,所以在系统设计的过程中,我用了一个长度为10的char类型的数组来存储学号,基本满足了实际应用的基本要求。

实际设计时系统的数据表如下3、由于系统本身为一个管理系统,所以设计过程中应采用交互式的方式方便操作者的使用,由于没有采用图形界面,所以可以通过循环弹出功能菜单的方式实现。

4、在系统各项子功能实现的过程中,需要通过编写函数,调用库函数等方式以实现字符串操作、指针操作、文件操作等,以达到系统中各项功能的不同要求。

(二)设计1、设计思路(1)、结构体的定义代码如下:struct data{char Name[n]; //姓名char Class[n]; //班级char Number[n]; //学号float cprog,media,eng,math,sport; //各科成绩float sum; //总分float ave; //平均数int order; //名次};typedef data *Infor;通过以上定义,将单个学生的各项基本信息封装到了一个名为Infor的结构体变量中。

另外,为了在系统中方便实现排序、查询、删除等功能,在头文件func.h 中又定义了一个Infor类型的数组stu[maxnum](maxnum为宏变量,大小为999),该数组默认可以存储999名学生的信息,如此一来,便大大简化了排序等功能的实现难度。

(2)、系统框架此系统大体框架由三个层次构成,依次为系统主菜单,主功能下设的子菜单及最底层菜单下的功能实现。

数据结构课程设计-《学生成绩管理系统》《参考版》

数据结构课程设计-《学生成绩管理系统》《参考版》

淮阴工学院数据结构课程设计报告选题名称:学生成绩管理系统系(院):ﻩ数理ﻩ学院ﻩﻩ专业:信息与计算科学ﻩﻩ班级:计科1102班姓名:徐连喜学号:1104101233指导教师:ﻩ周海岩ﻩﻩ学年学期:201ﻩ1~ 2012 学年第 1 学期2012年06月06日【摘要】21世纪,科学技术突飞猛进,经济知识和信息产业初见端倪,特别是信息技术和网络技术的讯速发展和广泛应用,对社会的政治,经济,军事,文化等领域产生越来越深刻。

学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要。

本论文叙述到的学生成绩管理系统是用IIS+ASP网页编程+ACCESS数据库+DREAMWEAVER MX 2004+SQL 查询语言实现的。

重点介绍了学生成绩管理系统的实现过程:包括系统分析,系统调查,功能设计,数据库设计,系统实现,系统测试和调试等。

本系统主要功能有查询学生成绩、单个添加学生成绩、批量添加学生成绩、删除学生成绩、管理页面和修改管理员密码等内容。

【关键词】成绩管理;成绩查询; C++ﻬ目录中文摘要。

1 1绪论。

41.1 选题背景。

51.2 需求分析。

62总体设计。

72.1程序设计组成框图。

82.2 模块功能说明。

92.3 程序流程图。

102.4 主要函数之间相互调用。

113 在设计过程中的感受。

12致谢。

13参考文献。

14附录:源程序清单。

151.绪论1.1 选题背景为了提高高校学生信息的管理效率,方便对学生信息进行管理、学校里面的学生和管理员方便去管理和查询学生信息,如再要进行查询,就得在众多的学生信息中查找自己的成绩信息,面对学院大量的学生信息,怎么可以即时而方便的管理,学生只要登录本系统就可以查找到自己的成绩信息,而管理员也方便去管理每学期的学生的成绩信息。

建立一个学生信息管理系统,使学生信息管理工作规范化,系统化,程序化,避免学生管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改学生信息是必须而且十分迫切的工作。

学生成绩管理系统数据结构-课程设计报告

学生成绩管理系统数据结构-课程设计报告

课程设计课程名称________数据结构__________题目名称_____学生成绩管理系统_____学生学院__________________________专业班级___________________学号_____________学生姓名_________ ___________指导教师__ __ ___ ________________2011年 7月 2日目录1 系统问题与功能分析31.1 课程设计内容31.2 系统功能需求分析31.3 数据结构设计32 系统设计42.1 总体设计42.2 详细设计52.2.1 界面设计52.2.2 各功能模块地设计53 系统编码设计73.1 预处理命令及结构体类型地声明73.2调用用户验证地函数83.3 调用menu函数83.4调用input函数103.5调用display函数113.6调用排序函数(Sort函数,heapsort函数和sift函数)123.6.1 调用Sort函数123.6.2调用sift函数(调整堆)133.6.3 调用heapsort函数143.7调用add_a_record函数153.8调用search_a_record函数173.9调用tongji函数194.0调用open_the_text函数224.1调用WritetoText函数234.2 调用end函数234.3 Main函数244系统运行285 简单总结386 附录391 系统问题与功能分析1.1 课程设计内容学生成绩管理系统注:此系统是在visual C++6.0环境下设计1.2 系统功能需求分析本系统应实现以下需求:功能需求:1、提供身份验证,和使用系统地权限设置、判定.2、(教师用户)能实现本班同学各学期各科成绩地录入、编辑,数据必须保存在文件中,以便反复使用.3、(学生用户或游客)提供对学号或姓名,各学期、各学科成绩地查询.4、(学生和教师用户)能按各学期、各学科分数排序输出(每一科都要能排序输出).5、(教师用户)能统计各科成绩分数段地分布(60以下、60~70、70~80、80~90、90~100)情况,并输出.性能需求:1、操作界面美观、友好,有必要地容错处理(如:能判定学号位数和只能由0~9数字字符组成、能判定合理地成绩0~100等);2、查询应根据查询条件合理选择先进地查询方法(其中必须保证至少有一种查找采用了散列查找);3、排序算法要求采用堆排序实现;4、分数段统计结果要求保存在单独地文件中;1.3 数据结构设计本系统需要处理地数据主要有:姓名、成绩等,相关数据地类型及说明如下:2 系统设计2.1 总体设计按系统分析地功能要求将系统划分为以下几个主要功能模块与结构:教师用户:(1)本模块功能是输入学生地各类信息(2)本模块地功能是显示学生地各类信息和规定输出格式(3)本模块地功能是实现学生信息地添加与修改.(4)本模块地功能是按姓名、学号、学科查询学生成绩情况,名单中包含学期、学号、姓名、课程名及成绩.(5)本模块地功能是统计学生成绩分段情况,统计结果可输出到文件.(6)本模块地功能是对学生信息按不同学科分数从高到低进行排序.(7)本模块地功能是打开、保存、关闭数据文件.学生用户:(1)本模块地功能是按姓名、学号、学科查询学生成绩情况,名单中包含学期、学号、姓名、课程名及成绩.(2)本模块地功能是对学生信息按不同学科分数从高到低进行排序.(3)本模块地功能是打开数据文件.游客用户:(1)本模块地功能是按姓名、学号、学科查询学生成绩情况,名单中包含学期、学号、姓名、课程名及成绩.(2)本模块地功能是打开数据文件.2.2 详细设计2.2.1 界面设计1、用户验证界面设计设计风格简洁明了,显示明白.2、菜单设计主菜单设计:主要运用一些简单符号,数字和文字清晰地表达出系统地主要功能,让使用者可以一目了然地了解系统功能,既美观又实用.子菜单设计:主要运用一些简单符号构成,将主菜单地功能细分化,让功能实现更加清晰简单,让使用者更好地使用系统.2、输入界面地设计以简单地风格设计输入界面,运用一些星星图形和直线,构成美观地输入界面,如3、信息显示界面地设计为把信息清晰地显示出来,采用对齐方式,运用直线把信息排列得整整齐齐.2.2.2 各功能模块地设计根据划分地功能模块,定义以下主要函数实现各功能:1、主函数main()主函数主要作用是控制调用其它函数协调工作,主要用switch语句来实现其功能.其流程图如下:2、memu函数本函数地功能是出现一个菜单界面,主要通过printf()函数实现菜单地设计,通过循环语句实现读入选择地功能.3、input函数本函数地功能是输入学生地各类信息,主要通过while,for地循环语句和repeat函数实现,主要运用strcmp函数实现对输入重复学号和重复姓名地错误提示,以及对输入不合理成绩地错误提示.4、display函数本函数地功能是显示学生地各类信息和规定输出格式,主要通过for地循环语句和printf()函数实现.5、sort函数本函数地功能是对学生地成绩进行排序,主要通过for地循环语句和指针实现,通过堆排序按各学科进行排序.6、add-a-record函数本函数地功能是添加一个学生地信息,主要通过while,for地循环语句和repeat函数实现,主要运用strcmp函数实现对添加重复学号和重复姓名地错误提示,以及对输入不合理成绩地错误提示.7、Modify函数本函数地功能是修改学生信息,主要通过while,for地循环语句和repeat函数实现,主要运用strcmp函数实现对输入重复学号和重复姓名地错误提示,以及对输入不合理成绩地错误提示.8、统计函数本函数地功能是统计学生个分数段地信息,信息中包含学期、学号、姓名、课程名及成绩,主要通过for及if地循环语句实现.9、search-a-record函数本函数地功能是查找需要了解地学生地信息,主要通过循环语句实现,包括for语句,while语句和if语句.10、open-the-text函数本函数地功能是打开需要导入地文件,主要通过“rb”,fopen,fscanf,fprintf和fclose 函数实现打开文件地功能11、write-to-text函数本函数地功能是保存信息输出到文件,主要通过“w”,fopen,fscanf,fprintf和fclose 函数实现保存文件地功能3 系统编码设计3.1 预处理命令及结构体类型地声明#include<stdio.h> /*引用库函数*/#include<string.h>#include <windows.h>#define N 1000struct user{int user_id。

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计学生成绩管理系统是一个用于管理学生学习成绩的软件系统。

它通常用于学校、教育机构或教师们来跟踪和记录学生的学习进展,并生成报告和分析数据。

在数据结构课程设计中,学生成绩管理系统需要设计合适的数据结构来存储和操作学生成绩数据。

在设计学生成绩管理系统时,可以使用以下数据结构:1. 数组:可以使用数组来存储学生成绩数据。

每个学生的成绩可以用一个数组元素表示,可以将学生按照学号或者其他标识符按顺序存储在数组中。

这样可以方便地通过索引来访问和修改学生成绩。

2. 链表:链表是另一种常用的数据结构,可以用于存储学生成绩数据。

每个学生的成绩可以用一个节点表示,节点可以包含学生的信息和成绩,同时包含指向下一个节点的指针。

这样可以方便地插入、删除和查找学生成绩。

3. 树:树可以用于组织学生成绩数据。

可以使用二叉搜索树或平衡二叉树来存储学生成绩,其中学生的学号或者姓名可以作为关键字。

这样可以方便地进行查找、插入和删除操作,并可支持对学生成绩进行排序。

以上是一些常用的数据结构,用于存储学生成绩管理系统的数据。

在具体的设计中,还可以根据实际需求选择其他合适的数据结构。

除了数据结构,学生成绩管理系统还可能包括其他功能,例如:1. 添加学生:可以通过输入学生的基本信息和成绩,将学生添加到系统中。

2. 删除学生:可以通过学生的学号或其他标识符,从系统中删除某个学生的信息和成绩。

3. 修改成绩:可以根据学生的学号或其他标识符,修改学生的成绩信息。

4. 查询成绩:可以根据学号、姓名或其他条件,查询学生的成绩信息。

5. 成绩统计和分析:可以对学生的成绩进行统计和分析,生成报告和图表,帮助教师或学校了解学生的学习情况。

以上只是学生成绩管理系统可能包含的一些基本功能,具体的设计和实现还需要根据实际需求和要求进行进一步的扩展和深入分析。

通过合适的数据结构和功能设计,可以实现一个高效、易用和功能完善的学生成绩管理系统。

学生成绩管理系统课程设计报告

学生成绩管理系统课程设计报告

学生成绩管理系统课程设计报告一、课程设计题目基本要求本次课程设计的题目是学生成绩管理系统,要求实现以下功能: 1. 学生成绩录入:学生成绩管理系统应允许用户输入学生的学号、姓名、三门课的成绩以及平均成绩。

2. 学生成绩查询:学生成绩管理系统应允许用户按学号、姓名、以及单科成绩查询学生的成绩记录。

3. 学生成绩统计:学生成绩管理系统应允许用户按学号、姓名、以及平均成绩进行统计,并输出统计结果。

4. 学生成绩排序:学生成绩管理系统应允许用户按三科平均成绩、单科成绩、学号进行排序,并输出排序结果。

5. 退出系统:学生成绩管理系统应提供退出系统的选项,用户选择退出后,应退出系统。

二、设计要求1. 使用结构体数组实现学生成绩管理系统的数据结构。

2. 使用函数、指针、算法、流程结构及文件等综合应用实现学生成绩管理系统的各项功能。

3. 实现学生成绩管理系统的界面设计,包括菜单、表格、单选框、复选框、下拉框等控件的使用。

4. 使用数据库技术实现学生成绩管理系统的数据存储功能。

5. 实现学生成绩管理系统的测试流程,包括测试用例的设计和测试。

三、数据结构设计描述1. 数据字典数据字典是学生成绩管理系统的数据结构描述,包括以下数据流条目和数据存储条目:数据流条目:- 全部记录:最新更新后所有关于学生成绩的记录。

- 学生成绩记录:存放学生所有可供查询的信息。

数据存储条目:- 学生成绩记录:存放学生所有可供查询的信息,以索引文件的形式组织。

2. 数据结构学生成绩管理系统的数据结构包括以下结构体:- struct student:定义学生结构体,包括学号、姓名、三门课的成绩以及平均成绩。

- struct record:定义成绩记录结构体,包括学号、姓名、三门课的成绩以及平均成绩。

- struct database:定义数据库结构体,包括学生成绩记录数组,以及查询、统计、排序等函数。

四、系统功能描述1. 菜单设计学生成绩管理系统应提供以下菜单:- 成绩录入- 成绩查询- 成绩统计- 成绩排序- 退出系统2. 功能实现学生成绩管理系统的各项功能应分别实现如下:- 成绩录入:实现学生成绩的录入功能。

数据结构之学生成绩管理系统

数据结构之学生成绩管理系统

学生成绩管理系统一、试验目旳1. 通过本次课程设计中学生成绩管理系统旳题目,掌握链表等数据构造旳基本操作方面旳知识,并能灵活旳处理某些基本旳问题,加深对其性质及各项操作旳理解;2. 将所学数据构造方面旳知识与一门详细旳语言——C语言来进行实现, 感受数据构造旳强大作用, 加深理解。

二、试验规定(1)管理系统中有五个规定: 输入查找修改插入删除存储(2)输入规定: 可以通过键盘输入和文献输入两种(3)查找规定:可以根据学生号查找单个学生旳信息, 也可以遍历所有学生信息(4)修改规定: 可以根据学生号修改单个学生所有信息(5)插入规定: 可以实现头插和尾插(6)删除规定: 可以根据学生号删除单个学生信息三、存储规定: 通过链表存储所有信息四、算法旳思想与算法实现环节1. 基本思想通过链表数据类型进行基本操作, 重要有三个模块: 分别是主函数模块、重要操作函数及基本操作函数。

其中, 主函数负责其他子函数旳调用实现以及基本界面旳操作重要函数包括:void StuInput(Student *); //学生成绩管理系统旳输入函数, 由主函数调用void StuSelect(Student *); //学生成绩管理系统旳查找函数, 由主函数调用void StuAlter(Student *); //学生成绩管理系统旳修改函数, 由主函数调用void StuInsert(Student *); //学生成绩管理系统旳插入函数, 由主函数调用void StuDelect(Student *); //学生成绩管理系统旳删除函数, 由主函数调用void StuSave(Student *); //学生成绩管理系统旳存储函数, 由主函数调用基本操作函数:void StuOutput(Student *p); //输出函数int StuImport(Student *head,Student *p); //输入函数void StuInputHand(Student *head); //学生成绩管理系统旳手动输入函数, 由输入函数调用void StuInputFile(Student *head); //学生成绩管理系统旳文献输入函数, 由输入函数调用void StuSelectErg(Student *head); //学生成绩管理系统旳遍历函数, 由查找函数调用void StuSelectNumFind(Student *head); //学生成绩管理系统旳按学号查找函数, 由查找函数调用void StuSelectSubFind(Student *head); //学生成绩管理系统旳按科目查找函数, 由查找函数调用2. 实现环节首先, 分析题目规定划分实现模块, 定义基本数据类型, 诸如构造体、链表等;另一方面, 针对上述旳基本操作实现详细需要进行旳操作, 详细实现每个环节需要进行旳基本操作, 即详细编写每个小函数实现功能;最终, 编写主函数对每个实现进行按需调用, 实现操作。

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计近年来,随着信息技术的快速发展,学生成绩管理系统在学校中得到了广泛应用。

学生成绩管理系统是一种基于数据结构的软件系统,旨在帮助学校更好地管理学生的学习成绩。

本文将介绍一个基于数据结构的学生成绩管理系统的设计。

首先,我们需要设计一个合适的数据结构来存储学生的学习成绩。

在这个系统中,我们可以使用一个二维数组来存储学生的成绩信息。

数组的行表示学生的学号,列表示不同科目的成绩。

这样,我们就可以方便地对学生成绩进行增删改查的操作。

接下来,我们需要设计一些基本的功能来实现学生成绩的管理。

首先是添加学生的成绩信息。

当学生入学时,管理员可以通过系统将学生的学号和成绩添加到数组中。

其次是删除学生的成绩信息。

当学生毕业或者转学时,管理员可以通过系统将学生的学号和成绩从数组中删除。

再次是修改学生的成绩信息。

当学生的成绩发生变化时,管理员可以通过系统修改学生的成绩。

最后是查询学生的成绩信息。

管理员可以通过系统查询学生的学号,然后系统会返回该学生的成绩信息。

除了基本的功能,我们还可以设计一些高级功能来提升学生成绩管理系统的实用性。

例如,我们可以设计一个成绩统计功能,用于统计学生的平均成绩、最高成绩和最低成绩。

这样,管理员可以更好地了解学生的学习情况。

另外,我们还可以设计一个成绩排名功能,用于按照成绩对学生进行排名。

这样,管理员可以更方便地找出成绩优秀的学生。

在实际应用中,我们还可以将学生成绩管理系统与其他系统进行集成。

例如,我们可以将学生成绩管理系统与学生信息管理系统进行集成,这样可以更方便地管理学生的学习情况。

另外,我们还可以将学生成绩管理系统与家长端进行集成,这样家长可以通过系统查看孩子的成绩情况,及时了解孩子的学习进展。

总之,学生成绩管理系统是一种基于数据结构的软件系统,可以帮助学校更好地管理学生的学习成绩。

通过合适的数据结构和功能设计,我们可以方便地对学生成绩进行增删改查的操作,并且可以提供一些高级功能来提升系统的实用性。

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计1. 介绍学生成绩管理系统是一种用于管理学生学业成绩的应用软件。

该系统能够帮助教师和学生方便地录入、查询和统计学生的各科成绩,以便更好地进行教学和学习工作。

本文将针对该系统的数据结构进行设计和实现。

2. 系统需求学生成绩管理系统需要满足以下功能要求:•学生信息管理:包括学生姓名、学号、专业等信息。

•课程信息管理:包括课程名称、课程编号、学分等信息。

•成绩信息管理:包括学生的各科成绩。

•信息查询:能够查询学生的个人信息、课程信息和成绩信息。

•成绩统计:能够对学生的各科成绩进行统计和分析。

3. 数据结构设计基于上述需求,我们可以设计以下数据结构:3.1 学生信息数据结构struct Student {int studentId; // 学号string name; // 姓名string major; // 专业};3.2 课程信息数据结构struct Course {int courseId; // 课程编号string name; // 课程名称int credit; // 学分};3.3 成绩信息数据结构struct Score {int studentId; // 学生学号int courseId; // 课程编号float score; // 成绩};3.4 数据存储结构设计3.4.1 学生信息存储使用数组或链表存储学生信息,可以根据学号快速查找和修改学生信息。

struct StudentNode {Student stu;StudentNode* next;};3.4.2 课程信息存储使用数组或链表存储课程信息,可以根据课程编号快速查找和修改课程信息。

struct CourseNode {Course crs;CourseNode* next;};3.4.3 成绩信息存储使用数组或链表存储成绩信息,可根据学生学号和课程编号查找和修改成绩信息。

struct ScoreNode {Score scr;ScoreNode* next;};4. 系统实现4.1 添加学生信息通过输入学生的学号、姓名和专业信息,创建一个学生结构体,并将其插入学生信息存储数据结构中。

数据结构课程设计报告-学生成绩管理系统(1)

数据结构课程设计报告-学生成绩管理系统(1)

学院:职业技术学院专业:计算机科学与技术姓名:学号: 1 班级:计科061班实习性质:课程设计实习地点:蔡家关校区国合楼二楼计算机房指导教师:曾劼成绩:学生成绩管理系统设计一、需求分析随着社会的发展,学校的规模不断的扩大,日常教学活动中提取相关信息,以反映教学情况。

传统的手工操作方式,易发生数据丢失,统计错误,劳动强度高,且速度慢。

使用计算机可以高速,快捷地完成以上工作。

在计算机联网后,数据在网上传递,可以实现数据共享,避免重复劳动,规范教学管理行为,从而提高了管理效率和水平。

学生成绩管理系统以计算机为工具,通过对学生成绩管理所需的信息管理,把管理人员和老师从繁琐的数据计算处理中解脱出来,使其有更多的精力从事教务管理政策的研究实施,教学计划的制定执行和教学质量的监督检查,从而全面提高教学质量。

信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。

计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。

为了适应现代社会人们高度强烈的时间观念,学生成绩管理系统软件为教学办公室带来了极大的方便。

该软件是以C语言为实现语言,其功能在系统内部有源代码直接完成。

通过操作目录,管理者和老师可以了解本软件的基本工作原理。

管理者和老师只需输入一些简单的汉字、数字,即可达到自己管理学生成绩的目标。

在学生成绩管理系统中,需要从大量的日常教学活动中提取相关信息,以反映教学情况。

传统的手工操作方式,易发生数据丢失,统计错误,劳动强度高,且速度慢。

使用计算机可以高速,快捷地完成以上工作。

在计算机联网后,数据在网上传递,可以实现数据共享,避免重复劳动,规范教学管理行为,从而提高了管理效率和水平。

通过本学生成绩管理系统,可以从一下几个方面减少老师的工作负担和提高学校的管理效率,实现学校的信息化和自动化。

1.应用学生成绩管理系统,把老师从繁杂的学生成绩了登记分数、统计分数、学生排名等等的工作职工解脱出来,把更多的时间和精力用来提高教学质量和学生的辅导工作上,提高学生的学生效率和成绩。

学生成绩管理系统《数据结构》课程设计

学生成绩管理系统《数据结构》课程设计

1 系统需求说明书1.1系统软件界面介绍1.1系统界面介绍本系统的软件界卖弄是使用C语言编译生成的一个系统操作菜单。

操作菜单界面总共有七个选项可以供用户操作选择,分别为策划给你记录入、成绩查询、成绩删除、成绩修改、成绩统计、成绩查询、显示所有信息、退出系统。

菜单页面下方有可供用户选择操作项目的指令,当用户选择并输入0-6中的任意数字,系统便会进入相应的功能操作。

如果出现错误操作,系统会给出输入错误请从新输入等提示或者自动跳出回到主菜单界面。

1.2系统设计要求本系统设计要求使用C语言以及数据与结构的知识点对系统进行编译。

要求学生熟练掌握数据结构的线性表和链表,以及C怨言的文件读一些操作,结构体、指针等知识点,并且学以致用,熟练应用。

在处理数据时要求采用线性表存放成绩信息,结点的数据域可包括:班级、学号、姓名、课程名称、选课学期和成绩,程序退出时采用文件的形式永久保存成绩信息。

1.3系统设计要求系统的设计主要从以下几大块进行设计体现:头文件的定义,包括数据结构中的函数头、结构体的定义,进行一个总体的规划布局。

将与学生有关的个人信息如班级、学号、姓名等都定义为一个节点型的数据然后在创建链表和指向各个数据的节点。

利用抽象数据类型将不同类型的数据进行管理!其次是主函数的定义和设计,主函数申请并创建一个链表,然后将系统所有的函数功能通过Switch条件语句进行统筹,从而实现对各个子函数的调用。

并且通过文件读写将系统的数据保存到文件当中。

最后便是系统中各个函数块的功能实现。

在写子函数时必须统筹兼顾,考虑到各个方面。

入系统类存的合理分配,如果内存一旦出错系统就回崩溃,信息就有可能出错。

2 系统的分析与设计2.1系统分析系统的主要工作流程图如下,当进入操作主菜单界面时,会有相应的不同的操作选项供用户选择,但操作完成后就晚会到系统主菜单。

图2.1 系统操作流程图2.2系统功能分析系统主要石油几大函数块来实现整个系统的功能。

学生成绩管理系统数据结构课程设计报告

学生成绩管理系统数据结构课程设计报告

学生成绩管理系统数据结构课程设计报告一、背景学生成绩管理系统是学校教务处常用的软件之一,旨在方便学校管理学生成绩信息。

数据结构是计算机科学中的基础课程,对于学生成绩管理系统的设计和实现有着重要意义。

本课程设计报告将针对学生成绩管理系统的数据结构设计展开讨论。

二、需求分析学生成绩管理系统需要存储学生的基本信息和成绩信息,可以进行成绩录入、查询、统计等操作。

系统需要能够高效地处理大量学生信息,并提供快速、准确的查询功能。

三、数据结构设计1. 学生信息存储为了高效地存储学生信息,可以使用链表数据结构。

每个学生信息包括学号、姓名、性别、班级等字段,可以设计一个学生结构体来存储这些信息。

链表节点可以包含一个学生结构体和指向下一个节点的指针,从而构成一个链表来存储所有学生信息。

typedef struct Student {int studentID;char name[50];char gender;char className[50];float score;struct Student* next;} Student;Student* head = NULL;2. 成绩信息存储成绩信息可以存储在一个数组中,数组的每个元素对应一个学生的成绩,可以通过学号索引到对应的成绩信息。

为了方便查询和统计,可以对成绩数组进行排序,例如按学号或成绩值排序。

float scores[1000];四、功能实现1. 成绩录入在管理系统中,可以提供成绩录入功能,输入学生的学号和成绩信息后,将成绩信息存储到成绩数组中。

2. 查询功能查询功能可以根据学生的学号或姓名查询学生的基本信息和成绩信息,可以使用链表和数组的结合来实现高效的查询功能。

3. 成绩统计系统可以根据输入的条件,如班级、科目等进行成绩统计,计算平均成绩、最高分、最低分等统计信息。

五、总结本设计报告对学生成绩管理系统的数据结构设计进行了详细讨论,包括学生信息和成绩信息的存储方式、功能实现等方面。

学生成绩管理系统c语言课程设计

学生成绩管理系统c语言课程设计

学生成绩管理系统c语言课程设计一、引言学生成绩管理系统是一种可以帮助学校或教育机构管理学生的成绩、课程和考试信息的软件。

本文将介绍一个基于C语言的学生成绩管理系统的设计过程。

二、需求分析在设计一个学生成绩管理系统之前,我们需要先进行需求分析。

以下是该系统需要满足的基本需求:1. 学生信息管理:包括添加、删除和修改学生信息,如姓名、性别、年龄等;2. 课程信息管理:包括添加、删除和修改课程信息,如课程名称、授课教师等;3. 成绩录入:可以录入每个学生在每门课程中的成绩;4. 成绩查询:可以查询某个学生在某门课程中的成绩以及某门课程所有学生的成绩排名等;5. 成绩统计:可以统计某个班级或某门课程所有学生的平均分、最高分和最低分等。

三、系统设计1. 数据结构设计为了实现上述需求,我们需要定义一些数据结构来存储相关信息。

以下是我们所定义的数据结构:(1)Student结构体:用于存储每个学生的基本信息,包括姓名、性别、年龄等。

typedef struct {char name[20];char sex[10];int age;} Student;(2)Course结构体:用于存储每门课程的基本信息,包括课程名称、授课教师等。

typedef struct {char name[20];char teacher[20];} Course;(3)Score结构体:用于存储每个学生在每门课程中的成绩。

typedef struct {int student_id;int course_id;float score;} Score;(4)Class结构体:用于存储某个班级的所有学生和所选的所有课程。

typedef struct {Student students[MAX_STUDENT_NUM];int student_num;Course courses[MAX_COURSE_NUM];int course_num;} Class;2. 功能实现在上述数据结构定义完成之后,我们可以开始实现各个功能模块。

数据结构课程设计 学生成绩管理系统

数据结构课程设计 学生成绩管理系统

任务书摘要管理信息系统正在向着网络化、智能化和集成化等趋势发展。

学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。

它对于一个学校是不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要。

学生成绩管理管理系统为用户提供充足的信息和快捷的查询手段,实现学生基本信息、成绩的录入,删除,查询,维护以及成绩的统计分析等几方面的功能,是现实问题的迫切要求。

本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化。

达到提高学生成绩管理效率的目的。

与传统管理方法相比有明显的优点:查找方便,可靠性高,保密性好,成本低。

彻底改变了以前繁杂的管理模式,实现全面的、相对集中的、职能化的信息综合管理。

计算机被用到信息管理系统的环境正是适应了当今时代飞速发展的信息时代。

人们深刻的认识到了计算机功能的强大,对于复杂的信息管理,计算机充分发挥着它的优越性。

检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低,这些优点极大地减轻了学院教学人员的工作量,缩小开支,提高了学生档案管理的效率和准确性,能够合理的安排时间,学生能够尽快的知道自己的考试成绩。

同时,学生管理系统的应用也为今天的教育在未来市场的竞争力有所提高。

目录1.引言 (16)3.1设计思路 (19)3.2程序设计结构图 (19)学生成绩系统中学生的成绩信息按照学号的顺序进行存放。

根据任务要求,下面将系统功能进行详细设3.3.函数实现说明 (20)4.程序运行结果 (21)5.软件使用说明 (23)6.结论 (24)参考文献 (25)附录:源代码 (25)# include <iostream> (25)# include <string> (25)# include <fstream> (25)using namespace std; (25)struct SCORE //定义存放学生成绩信息的结点 (25){ (25)int num; //学号 (25)string name; //姓名 (25)float math; //数学成绩 (25)float english; //英语成绩 (25)float computer; //就算计基础成绩 (26)float scoresum; //总成绩 (26)struct SCORE * next; //next为指向下一结点的指针 (26)}; (26)struct SCORE * head; //指向链表头结点的指针 (26)int studentSum=0; //学生总人数 (26)class record (26){ (26)public: (26)struct SCORE * InsertRecord(struct SCORE * h); //增加学生成绩信息 (26)struct SCORE * DeleteRecord(struct SCORE * h); //删除学生成绩信息 (26)struct SCORE * UpdateRecord(struct SCORE * h); //修改学生成绩信息 (26)void FindRecord(struct SCORE * h,int x,float s1,float s2); //根据某门课程的分数段查询学生成绩信息 (26)void FindRecord(struct SCORE * h,string x); //根据学生姓名查询成绩信息 26void FindRecord(struct SCORE * h,int x); //根据学生学号查询成绩信息26void StatisticRecord(struct SCORE * h,int x); //统计某门课程的及格学生人数、及格率,并显示不及格学生信息 (26)void StacRecordFine(struct SCORE * h); //统计三门课程成绩全为优秀的学生人数,并显示全为优秀的学生信息 (26)void StacRecordDisq(struct SCORE * h); //统计三门课程成绩全部不及格的学生人数,并显示全部不及格的学生信息 (26)void PrintRecord(struct SCORE * h); //输出所有学生成绩信息 (26)void SaveRecordFile(struct SCORE * h); //保存学生成绩信息到文件.26struct SCORE * LoadRecordFile(struct SCORE * h); //从文件中加载学生成绩信息26}; (26)struct SCORE * record::InsertRecord(struct SCORE * h) (26){ (26)struct SCORE * p1,*p2,*p3; //定义指针变量p1、p2、p3 (26)cout<<"\n请输入学生学号:"; (26)cin>>p3->num; //从键盘接收输入数赋值给结点的学号26cout<<"\n请输入学生姓名:"; (26)cin>>p3->name; //从键盘接收输入数赋值给结点的姓名26cout<<"\n请输入学生数学成绩:"; (26)cin>>p3->math; //从键盘接收输入数赋值给结点的数学成绩26 cout<<"\n请输入学生英语成绩:"; (26)cin>>p3->english; //从键盘接收输入数赋值给结点的英语成绩26cout<<"\n请输入学生的计算机基础成绩:"; (26)cin>>p3->computer; //从键盘接收输入数赋值给结点的计算机成绩26p3->scoresum=p3->math+p3->english+p3->computer; //计算结点的总成绩 (26)p3->next=NULL; //将要插入结点的指针域设置为空 (26)if(h==NULL) //当链表中没有结点时,将要加入的结点作为头结点 (26){ (26)h=p3; (27)return h; (27)} (27)p1=p2=h; (27)while(p1!=NULL&&p3->num>p1->num) //查找结点的学号大于要插入结点学号的第一个结点 (27)//指针p1表示符合条件的结点的指针,指针p2是指针p1的前一个结点指针 (27){ (27)p2=p1; (27)p1=p1->next; (27)} (27)if(p1==h) //插入位置为头结点前 (27){ (27)p3->next=p3; (27)h=p3; (27)return h; (27)} (27)else //插入位置为链表中间和链表尾部 (27){ (27)p2->next=p3; (27)p3->next=p1; (27)} (27)studentSum+=1; //学生人数加1 (27)return h; //返回链表的头结点 (27)} (27)void record::PrintRecord(SCORE * h) (27){ (27)if(h==NULL) (27){ (27)cout<<"\n抱歉,没有任何记录!\n"; (27)} (27)cout<<"\n学号\t姓名\t数学\t英语\t计算机\t总分"<<endl; (27)while(h) //输出链表中每个结点的学生成绩信息27 { (27)cout<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h->english<<"\t"<<h->computer<<"\t"<<h->s coresum<<endl; (27)h=h->next; (27)} (27)} (27)struct SCORE * record::DeleteRecord(struct SCORE * h) (27){ (27)struct SCORE * p1,* p2; (27)int num; (27)if(h==NULL) //链表为空 (28){ (28)cout<<"\n抱歉,没有任何记录!"; (28)return h; (28)} (28)p1=p2=h; //将链表的头结点指针h赋值给指针p1和指针p2 (28)cout<<"\n请输入要删除记录的学生学号"; (28)cin>>num; (28)while(p1!=NULL&&p1->num!=num) //查找结点的学号等于要删除学生学号的第一个结点 (28)//指针p1表示符合条件的结点的指针,指针p2是指针p1的前一个结点指针 (28){ (28)p2=p1; (28)p1=p1->next; (28)} (28)if(p1=NULL) //没有找到符合要求的结点 (28){ (28)cout<<"\n抱歉啊,表中没有该记录哦!"; (28)return h; (28)} (28)if(p1->num==num) (28){ (28)studentSum-=1; //学生人数减1 (28)if(p1==h) //删除的是头结点 (28)h=h->next ; (28)else //删除的是非头结点 (28)p2->next=p1->next; (28)delete p1; //释放p1 所指向的储存单元 (28)} (28)return h; (28)} (28){ (28)struct SCORE * p1; (28)int num; (28)if(h==NULL) //链表为空 (28){ (28)cout<<"\n抱歉,没有任何记录!"; (28)return h; (28)} (28)p1=h; //将链表的头结点指针h赋值给指针p1 28 cout<<"\n请输入要修改记录的学生学号!"; (28)cin>>num; (28)while(p1!=NULL&&p1->num!=num) //查找结点的学号等于要修改学生学号的指针结点 (28){ (29)p1=p1->next; //将p1指针移到下一个结点 (29)} (29)if(p1==NULL) //没有找到符合要求的结点 (29){ (29)cout<<"\n抱歉啊,表中没有该记录哦!"; (29)return h; (29)} (29)if(p1->num==num) //找到符合要求的结点,并修改学生的相关成绩 (29){ (29)cout<<"\n请重新输入学生的数学成绩:"; (29)cin>>p1->math ; (29)cout<<"\n请重新输入学生英语成绩:"; (29)cin>>p1->english ; (29)cout<<"\n请重新输入学生的计算机基础成绩:"; (29)cin>>p1->computer; (29)p1->scoresum=p1->math+p1->english+p1->computer; (29)} (29)return h; (29)} (29)void record::FindRecord(struct SCORE * h,int x,float s1,float s2) (29){ (29)if(h==NULL) //链表为空 (29){ (29)cout<<"\n抱歉,没有任何记录!"; (29)return; (29)} (29)cout <<"\n学号\t姓名\t数学\t英语\t计算机\t总分"<<endl; (29)while(h) (29){ (29)if(x==1) //查找数学成绩在if(h->math>=s1&&h->math<=s2) (29)cout<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h-> (29)english<<"\t"<<h->computer<<"\t"<<h->scoresum<<endl; (29)if(x==2) //查找英语成绩在某分数段的学生成绩信息 (29)if(h->english>=s1&&h->english<=s2) (29)cout<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h-> (29)english<<"\t"<<h->computer<<"\t"<<h->scoresum <<endl; (29)if(x==3) //查找计算机成绩在某分数段的学生成绩信息 (29)if(h->computer>=s1&&h->english<=s2) (29)cout<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h-> (29)english<<"\t"<<h->computer<<"\t"<<h->scoresum <<endl; (30)h=h->next; (30)} (30)} (30)void record::FindRecord(struct SCORE * h,int num) //根据学生学号查找学生成绩信息 (30){ (30)struct SCORE * p1; (30)if(h==NULL) //链表为空30 { (30)cout<<"\n抱歉,没有任何记录!"; (30)return; (30)} (30)p1=h; //将链表的头结点指针h 赋值给指针p1 (30)while(p1!=NULL&&p1->num!=num) //查找节点的学号等于要查找学生学号的指针结点 (30){ (30)p1=p1->next; (30)} (30)if(p1==NULL) //没有找到30 { (30)cout<<"\n抱歉,表中没有该记录哦!"; (30)return; (30)} (30)if(p1->num==num) //找到并显示信息30 { (30)cout<<"\n学号\t姓名\t数学\t英语\t计算机\t总分"<<endl; (30)cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->math<<"\t"<<p1-> (30)english<<"\t"<<p1->computer<<"\t"<<p1->scoresum<<endl; (30)} (30)} (30)void record::FindRecord(struct SCORE * h,string name) //根据学生姓名查找学生成struct SCORE * p1; (30)if(h==NULL) //链表为空30 { (30)cout<<"\n抱歉,没有任何记录"; (30)return ; (30)} (30)p1=h; (30)while(p1!=NULL&&p1->name!=name) (30){ (30)p1=p1->next; (30)} (31)if(p1==NULL) (31){ (31)cout<<"\n抱歉,表中没有该记录哦!"; (31)return; (31)} (31)if(p1->name==name) (31){ (31)cout<<"\n学号\t姓名\t数学\t英语\t计算机\t总分"<<endl; (31)cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->math<<"\t"<<p1-> (31)english<<"\t"<<p1->computer<<"\t"<<p1->scoresum<<endl; (31)} (31)} (31)void record::StatisticRecord(struct SCORE*h,int x) (31){ (31)struct SCORE*p=h; //将链表的头结点指针h复制给指针p (31)int count=0; //定义统计人数count变量并赋初始值为0 (31)if(p==NULL) //链表为空 (31){ (31)cout<<"\n抱歉,没有任何记录!"; (31)return; (31)} (31)while(p) (31){ (31)if(x==1) //统计数学成绩及格的学生人数 (31)if(p->math>=60) (31)count+=1; (31)if(x==2) //统计英语成绩及格的学生人数 (31)if(p->english>=60) (31)count+=1; (31)if(x==3) //统计计算机成绩及格的学生人数 (31)if(p->computer>=60) (31)} (31)if(x==1) //显示数学成绩及格的学生人数及及格率 (31){ (31)cout<<"数学成绩及格学生人数为"; (31)cout<<count; (31)cout<<",及格率为"; (31)cout<<count/(float)studentSum<<endl; (31)if(count<studentSum) (31)cout<<"\n学号\t姓名\t数学"<<endl; (31)else (32)cout<<"没有数学成绩不及格学生"<<endl; (32)} (32)else (32)if(x==2) //显示英语成绩及格的学生人数及及格率32 { (32)cout<<"英语绩及格学生人数为"; (32)cout<<count; (32)cout<<",及格率为"; (32)cout<<count/(float)studentSum<<endl; (32)if(count<studentSum) (32)cout<<"\n学号\t姓名\t英语"<<endl; (32)else (32)cout<<"没有英语成绩不及格的学生"<<endl; (32)} (32)else (32)if(x==3) //显示计算机成绩及格的学生人数及及格率32 { (32)cout<<"计算机成绩及格的学生人数为"; (32)cout<<count; (32)cout<<",及格率为"; (32)cout<<count/(float)studentSum<<endl; (32)if(count<studentSum) (32)cout<<"\n学号\t姓名\t计算机"<<endl; (32)else (32)cout<<"没有计算机成绩不及格的学生"<<endl; (32)} (32)p=h; (32)while(p) (32){ (32)if(x==1) //显示数学成绩不及格的学生信息 (32)if(p->math<60) (32)cout<<p->num<<"\t"<<p->name<<"\t"<<p->math<<endl; (32)的学生信息 (32)if(p->english<60) (32)cout<<p->num<<"\t"<<p->name<<"\t"<<p->english<<endl; (32)if(x==3) //显示计算机成绩不及格的学生信息 (32)if(p->computer<60) (32)cout<<p->num<<"\t"<<p->name<<"\t"<<p->computer<<endl; (32)p=p->next; (32)} (32)} (33)void record::StacRecordFine(struct SCORE*h) (33){ (33)struct SCORE *p=h; //将链表的头结点指针h 赋值给指针平p (33)int count=0; //定义统计人数count变量并赋初始值为0 (33)if(p==NULL) //链表为空33 { (33)cout<<"\n抱歉,没有任何记录!"; (33)return; (33)} (33)while(p) (33){ (33)if(p->math>=90&&p->english>=90&&p->computer>=90)//统计三门成绩全部为优秀的学生人数33count+=1; (33)p=p->next; //将指针移到下一结点33} (33)cout<<"三门成绩全为优秀的学生人数为"; (33)cout<<count<<endl; (33)cout<<"\n学号\t姓名\t数学\t英语\t计算机\t总分"<<endl; (33)p=h; //将链表的头结点指针h 赋值给指针p (33)while(p) (33){ (33)if(p->math>=90&&p->english>=90&&p->computer>=90) //显示三门成绩全部为优秀的学生信息 (33)cout<<p->num<<"\t"<<p->name<<"\t"<<p->math<<"\t"<<p-> (33)english<<"\t"<<p->computer<<"\t"<<p->scoresum<<endl; (33)p=p->next; (33)} (33)} (33)void record::StacRecordDisq(struct SCORE*h) (33){ (33)struct SCORE*p=h; //将链表的头结点指针hint count=0; //定义统计人数count变量并赋初值为0 (33)if(p==NULL) //链表为空33 { (33)cout<<"\n抱歉,没有任何记录!"; (33)return ; (33)} (33)while(p) (33){ (33)if(p->math<60&&p->english<60&&p->computer<60) //统计三门成绩全部为不及格的学生人数 (34)count+=1; (34)p=p->next; (34)} (34)cout<<"三门成绩全部不及格的学生信息为"; (34)cout<<count<<endl; (34)cout<<"全为不及格的学生信息为:"<<endl; (34)cout<<"\n学号\t姓名\t数学\t英语\t计算机\t总分"<<endl; (34)p=h; (34)while(p) (34){ (34)if(p->math<60&&p->english<60&&p->computer<60) //显示三门成绩全部为不及格的学生信息 (34)cout<<p->num<<"\t"<<p->name<<"\t"<<p->math<<"\t"<<p-> (34)english<<"\t"<<p->computer<<"\t"<<p->scoresum<<endl; (34)p=p->next; (34)} (34)} (34)void record::SaveRecordFile(struct SCORE *h) //将链表中的数据写入文件 (34){ (34)struct SCORE *p; (34)ofstream ofile; (34)ofile.open("score.dat",ios::out); //以写的方式打开文件score.dat,若该文件不存在,则创建score.dat文件 (34)if(!ofile) //文件打开错误34 { (34)cout<<"\n数据文件打开错误没有将数据写入文件!\n"; (34)return ; (34)} (34)ofile<<"学号\t姓名\t数学\t英语\t计算机\t总分"; (34)while(h) (34){ (34)ofile<<endl<<h->num<<"\t"<<h->name<<"\t"<<h->math<<"\t"<<h-> (34)p=h;h=h->next; (34)delete p; (34)} (34)ofile.close(); //关闭文件对象34} (34)struct SCORE * record::LoadRecordFile(struct SCORE *h) (34){ (34)ifstream ifile; //定义输入文件对象34ifile.open("score.dat",ios::in); //以读的方式打开文件score.dat (34)struct SCORE *p,*q; (35)if(! ifile) //文件打开错误35 { (35)cout<<"\n数据文件不存在,加载不成功!\n"; (35)return NULL; (35)} (35)char s[50]; (35)ifile.getline(s,50); //读取文件指针当前行数据 (35)while(! ifile.eof()) (35){ (35)studentSum=studentSum+1; //学生人数加1 (35)p=new SCORE; //创建新的score变量35 ifile>>p->num>>p->name>>p->math>>p-> (35)english>>p->computer>>p->scoresum; //将数据从文件中读取到新的结点中 (35)p->next=NULL; //新结点的指针域为空35if(h==NULL) //将新结点插入到链表中 (35)q=h=p; (35)else (35){ (35)q->next=p; (35)q=p; (35)} (35)} (35)ifile.close(); //关闭文件对象 (35)return h; (35)} (35)void SystemMenu(record r) //系统菜单,及处理用户的选择 (35){ (35)int choice; (35)while(1) (35)cout<<"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@"; (35)cout<<"\n\t1、添加学生成绩信息"; (35)cout<<"\n\t2、删除学生成绩信息"; (35)cout<<"\n\t3、修改学生成绩信息"; (35)cout<<"\n\t4、查询学生成绩信息"; (35)cout<<"\n\t5、显示所有学生成绩信息"; (36)cout<<"\n\t6、统计学生成绩信息"; (36)cout<<"\n\t0、退出系统"; (36)cout<<"\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@"; (36)cout<<"\n请根据提示选择操作:"; (36)cin>>choice; (36)switch(choice) (36){ (36)case 1: //增加学生成绩信息 (36)head=r.InsertRecord(head); (36)break; (36)case 2: //删除学生成绩信息 (36)head=r.DeleteRecord(head); (36)case 3: //修改学生成绩信息 (36)head=r.UpdateRecord(head); (36)case 4: //查询学生成绩信息 (36)while(1) (36){ (36)int c; (36)cout<<"\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"; (36)cout<<"\n\t1.根据学号查询学生成绩信息"; (36)cout<<"\n\t2.根据姓名查询学生成绩信息"; (36)cout<<"\n\t3.根据数学分数查询学生成绩信息"; (36)cout<<"\n\t4.根据英语成绩查询学生成绩信息"; (36)cout<<"\n\t5.根据计算机基础成绩查询学生成绩信息"; (36)cout<<"\n\t6.返回上级目录"; (36)cout<<"\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"; (36)//显示查询子菜单 (36)cout<<"\n请根据提示选择操作:"; (36)cin>>c; (36)if(c==1)//根据学号查询学生成绩信息 (36){ (36)int x; (36)cout<<"\n请输入需要查询的学生学号:"; (36)cin>>x; (36)if(c==1)//根据学生学号查询学生成绩信息 (36){ (36)int x; (36)cout<<"\n请输入需要查询的学生学号:"; (36)cin>>x; (36)r.FindRecord(head,x); (37)} (37)if(c==2)//根据学生姓名查询学生成绩信息 (37){ (37)string name; (37)cout<<"\n请输入需要查询的学生姓名:"; (37)cin>>name; (37)r.FindRecord(head,name); (37)}if(c==3)//根据数学分数查询学生成绩信息 (37){ (37)float s1,s2; (37)cout<<"\n请输入查询的数学最低分和最高分:"; (37)cin>>s1>>s2; (37)r.FindRecord(head,1,s1,s2); (37)} (37)if(c==4)//根据英语分数段查询学生成绩信息 (37){ (37)float s1,s2; (37)cout<<"\n请输入查询的英语最低分和最高分:"; (37)cin>>s1>>s2; (37)r.FindRecord(head,2,s1,s2); (37)} (37)if(c==5)//根据学号查询学生成绩信息 (37){ (37)float s1,s2; (37)cout<<"\n请输入查询的计算机基础最低分和最高分:"; (37)cin>>s1>>s2; (37)r.FindRecord(head,3,s1,s2); (37)} (37)if(c==6) //退出查询子菜单 (37)break; (37)} (37)break; (37)case 5: //输出所有学生成绩信息 (37)r.PrintRecord(head); (37)break; (37)case 6: //统计学生成绩信息 (37)while(1) (37){ (37) (37)cout<<"\n\t1.统计数学成绩及格学生人数,并显示不及格学生信息"; (37)cout<<"\n\t2.统计英语成绩及格学生人数,并显示不及格学生信息"; (37)cout<<"\n\t3.统计计算机成绩及格学生人数,并显示不及格学生信息"; (37)cout<<"\n\t4.统计三门功课都不及格的学生人数,并显示学生信息"; (37)cout<<"\n\t5.统计三门功课都优秀的学生人数,并显示学生信息(>=90)"; (38)cout<<"\n\t6.返回上级目录"; (38)cout<<"\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"; (38)//显示统计子菜单 (38)cout<<"\n请根据提示选择操作:"; (38)cin>>c; (38)if(c==1) //统计数学成绩及学生格人数,并显示不及格学生信息38 { (38)r.StatisticRecord(head,1); (38)} (38)if(c==2) //统计英语成绩及学生格人数,并显示不及格学生信息38 { (38)r.StatisticRecord(head,2); (38)} (38)if(c==3) //统计计算机成绩及学生格人数,并显示不及格学生信息38 { (38)r.StatisticRecord(head,3); (38)} (38)if(c==4) //统计三门功课都不及格的学生人数,并显示学生信息38 { (38)r.StacRecordFine(head); (38)} (38)if(c==5) //统计三门功课都优秀的学生人数,并显示学生信息 (38){ (38)r.StacRecordDisq(head); (38)} (38)if(c==6) //退出统计子菜单 (38)break; (38)} (38)break; (38)} (38)if(choice==0) //退出系统 (38)break; (38)} (38)} (38)int main() (38){ (38)head=NULL; (38)SystemMenu(r); //显示系统菜单,并处理用户的选择 (38)r.SaveRecordFile(head); //将链表中的数据写到文件中 (39)return 0; (39)} (39)1.引言数据结构在计算机科学界至今没有标准的定义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();5. 详细设计1.声明一个结构体:typedef struct Student Node;2.录入数据将复制形式修改为指针访问形式,计算成绩总和写入到sum[]中。

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

4.下直接插值排序法会用到"哨兵",nSize表示grade[]中实际元素的个数。

5.处理相同成绩的名次将sum[n]中的不重复的元素放到grade[n]中,函数返回grade[]中实际元素的个数。

测试数据:姓名语文数学英语物理黄54 53 52 51赵98 97 96 95李100 99 99 986. 测试与调试1、输入数据:2.打印成绩7. 源程序清单#include <stdio.h>#include <string>#include <float.h>#include <iostream> #include <iomanip>#define n 3/*学生数*/ #define m 4/*课程数*/ using namespace std; //---声明一个结构---- struct Student{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<n;++i){printf("请输入第%d/%d名学生的信息:\n ",i+1,n);printf("请输入姓名: ");scanf("%s",name);printf("\n请输入学号: ");scanf("%d",&id);for(j=0;j<m;++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<m;j++){(stu+i)->m_Score[j]=score[j];}//-------计算成绩总和写入到sum[]中--------*(Asum+i)=0.0;for(j=0;j<m;++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<<endl<<"=================================================================== ======"<<endl;cout<<"============================打印名次信息================================="<<endl;cout<<"========================================================================= "<<endl;cout<<"名次======学号======姓名======总分=====名科成绩===="<<endl;for(int i=0;i<nGreadeSize;++i){for(int j=0;j<n;++j){if(Asum[j]==Agrade[i]){cout<<setw(10)<<left<<i+1//名次。

<<setw(10)<<left<<stu[j].m_ID//学号。

<<setw(10)<<left<<stu[j].m_Name//姓名。

<<setw(10)<<left<<Asum[j];//总分。

for(int k=0;k<m;++k)cout<<setw(10)<<left<<stu[j].m_Score[k];//名科成绩。

}//cout<<endl;}}}float* Sort(float* Agrade,int nSize){//练习一下直接插值排序法。

会用到"哨兵"。

nSize表示grade[]中实际元素的个数。

for(int i=1;i<nSize;++i){Agrade[nSize]=Agrade[i];//将它放到哨兵里for(int j=i-1;j>=0;){if(Agrade[nSize]>Agrade[j])//从大到小的顺序。

一定要注意,是拿"哨兵"来与之比较才对的。

{Agrade[j+1]=Agrade[j];j--;}else{break;}}//for内Agrade[j+1]=Agrade[nSize];// 从哨兵中取出这个值来}//for 外return Agrade;}int Del_Same(float* Asum,int nSum,float* Agrade,int nGreade){//将sum[n]中的不重复的元素放到grade[n]中,函数返回grade[]中实际元素的个数。

int Find;//有无重复的标记:1为有,0为无。

int nElem=1;//gread[]中的实际元素个数。

Agrade[0]=Asum[0];for(int i=0;i<nSum;++i)//sum[]{for(int j=0;j<nElem;++j)//grade[]{if(Asum[i]==Agrade[j])//判断两个浮点数相等条件。

{Find=1;break;}else{Find=0;}}if(Find==0){Agrade[nElem]=Asum[i];nElem++;}}//for(最外)return nElem;}//------------void main(){Node Stu[n];Node* pStu;pStu=Stu;//声明n个Student对象的一个数组。

float sum[n],grade[n+1];//因为想在grade[]中用到直接插值排序法,要用到"哨兵"。

所以构造n+1.pStu=Init(pStu,n,sum,n);int nGrade_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语言写很简单。

如果想把本学期数据结构的知识应用到程序中还是很有挑战性的。

我采用的是直接插入排序法,刚开始把书上的程序照搬过来,结果发现有许多的错误。

改了很久才改对。

最难的是相同成绩处理的函数,我刚开始以为很简单,但是前面各个成绩采用的是指针结构体,很难处理,最后在网上查找了一下才对照着改正过来。

最后我学会的是可以先把数据输入数组内,在用指针直接指向数据就可以了,这样比输入数据时就用指针要简单的多。

相关文档
最新文档