数据结构之学生成绩管理系统
数据结构在学生成绩管理系统设计中的应用

数据结构在学生成绩管理系统设计中的应用学生成绩管理系统是现代教育管理系统的一个重要组成部分,其目的是为了高校教师和学生提供一个集中存储和管理学生课程信息的平台。
在这个平台上教师可以查询、更新学生的课程成绩,而学生可以查询自己的课程成绩、排名等信息。
在学生成绩管理系统的设计中,数据结构扮演了非常重要的角色。
数据结构建立在计算机中存储和处理数据的基础之上,它将数据结构化,使得数据能够被更加高效地处理和管理。
合理地运用数据结构,不仅能够提高系统的运行效率,还能够提高数据的处理和操作效率。
学生成绩管理系统中常用的数据结构有数组、链表、树、图等。
以下就分别简单介绍这些数据结构在学生成绩管理系统设计中的应用。
1. 数组在学生成绩管理系统中,一个非常基本的需求就是按照学生学号和课程号存储学生成绩信息。
这个时候,可以使用数组来存储数据。
例如,可以定义一个二维数组score来存储学生的课程成绩,其中score[i][j]表示第i个学生的第j门课程的成绩。
这种方式可以方便地进行查询和修改。
但是在数据量较大的情况下,数组的缺点就显现出来了,比如数组长度固定,无法动态地调整大小;同时,大数据量的数组处理时,耗费的时间和空间也会很大。
因此,在实际应用中,需要根据具体情况选择合适的数据结构。
2. 链表链表是数据结构中常用的一种,它可以实现动态添加和删除数据的操作,非常适用于动态增长的情况。
在学生成绩管理系统中,链表可以用来存储学生的课程成绩信息。
在学生选课时,可以将选课信息以链表的形式存储。
每当学生选一门新课程,就可以新增一个节点。
如果学生退选某门课程,则可以将相应的节点删除。
另外,在查询学生课程成绩时,也可以使用链表。
查询时,可以从链表头开始,遍历整个链表,查找指定学号和课程号的成绩信息。
链表的查询时间复杂度为O(n),但是它可以随时插入和删除数据,非常方便实用。
3. 树树是一种常用的数据结构,它可以快速地查找数据,并且支持快速地插入和删除数据。
数据结构之学生成绩管理系统

数据结构之学绩管理系统【正文】1:引言1.1 编写目的本文档旨在设计一个学绩管理系统,来有效管理学生的各门课程成绩。
1.2 范围本文档将详细描述学绩管理系统的各个模块、功能和操作流程,并提供必要的设计和实现细节。
1.3 定义、缩略词和缩写- 学绩管理系统:用于管理学生的各门课程成绩的软件系统。
- 学生:指在学校注册并接受教育的个体。
- 课程:学生所学习的各门课程科目。
2:需求分析2.1 功能需求2.1.1 学生信息管理- 添加学生信息:包括学生姓名、学号、班级等基本信息。
- 修改学生信息:对已存在的学生信息进行修改操作。
- 删除学生信息:从系统中删除学生的信息。
2.1.2 成绩管理- 添加成绩:录入学生的各门课程成绩。
- 修改成绩:对已录入的成绩进行修改操作。
- 查询成绩:根据学生学号或姓名查询学生的成绩信息。
- 统计成绩:统计每门课程成绩的平均值、最高分和最低分。
2.2 性能需求2.2.1 响应时间- 系统应能够在用户输入操作后即时响应,保证操作的实时性。
2.2.2 数据存储- 系统应能够快速、可靠地存储和检索学生信息和成绩数据。
2.3 安全需求2.3.1 访问控制- 系统应设定不同用户角色,具备不同的访问权限。
- 管理员用户可以对学生信息和成绩数据进行修改和删除,普通用户仅可以查询和统计成绩。
2.3.2 数据保密性- 系统应保护学生个人信息和成绩数据的隐私,仅允许授权用户访问。
3:系统设计与实现3.1 系统架构3.1.1 前端设计- 使用界面简洁直观的图形化界面,方便用户操作。
- 考虑到不同平台的兼容性,采用跨平台的前端技术。
3.1.2 后端设计- 使用面向对象的编程语言实现系统的后端逻辑。
- 设计合理的数据结构和算法,以满足系统的性能需求。
3.2 数据库设计3.2.1 学生信息表- 设计学生信息表,包括学生姓名、学号、班级等字段。
- 为学号字段设置主键,确保唯一性。
3.2.2 成绩表- 设计成绩表,包括学生学号和各门课程成绩字段。
(2023)数据结构课设报告学生成绩管理系统(一)

(2023)数据结构课设报告学生成绩管理系统(一)数据结构课设报告学生成绩管理系统一、背景介绍为了方便教师管理学生的成绩,提高数据处理的效率和准确性,我们团队开发了一款可以管理学生成绩的系统。
二、需求分析•教师可以登录系统,并进行学生信息的录入、修改、查询和删除。
•教师可以录入、修改、查询和删除学生的成绩。
•学生也可以登录系统,并查看自己的成绩。
•教师和学生的密码需要进行加密存储,并能够找回密码。
三、设计方案1. 数据结构设计我们采用链表的数据结构,实现学生信息和成绩的存储。
- 学生信息:学号、姓名、密码。
- 学生成绩:科目、成绩。
2. 模块划分•登录模块:实现教师和学生的登录、密码加密和找回密码。
•学生信息管理模块:实现学生信息的录入、修改、查询和删除。
•成绩管理模块:实现成绩的录入、修改、查询和删除。
•学生成绩查询模块:实现学生查看自己成绩的功能。
3. 界面设计我们采用Java Swing库实现图形化界面,美观易用。
四、开发过程1. 环境配置我们使用Java语言进行开发,并采用MySQL数据库存储数据。
开发工具为Eclipse和Navicat。
2. 实现过程在开发过程中,我们分别完成了登录模块、学生信息管理模块、成绩管理模块和学生成绩查询模块。
同时,我们进行了严格的测试和优化,保证了系统的稳定性和用户体验。
五、总结通过本次课设,我们学习到了如何设计、实现一款简单的大型软件。
同时,我们也深入理解了数据结构的应用和开发过程中需要注意的问题。
未来,我们将继续学习和提升自己的技术水平,为社会创造更多有用的产品。
六、存在的问题和改进计划1. 学生信息和成绩输入需要更为便捷目前的输入方式需要逐一输入每个学生的信息以及成绩,如果要录入多个学生的信息,效率不高。
我们计划实现批量导入的功能,可以通过Excel表格导入学生信息和成绩。
2. 安全性还需要更高的保障目前我们只是简单使用密码加密保护了教师和学生的账户信息,如果系统被攻击者入侵,那么所有的账户信息和成绩信息都会暴露,对学生隐私和数据安全造成极大威胁。
学生成绩管理系统+数据结构

3.4更新维护。.。。.。..。。。。.。.。....。.。.。......。。.。。...。.。......。。。。。...。。。。。.。。.。..。。。.。.。....。..。。.。。.。..。.。..。...。。....。。.。..。...。..。.。... 7
3。9统计。.。。.。。。。。.。。...。.。。。。。。..。...。.。.。。。。。。.。。。..。。。.。.。.。.。。。.。。..。。.。.。。.。。。。。.。。....。。。。.。。。。.。。。.。...。..。.。....。。.。.。。.。.。.。。....。.. 9
3.10图表.。.。。。...。。..。...。。。.。。.。。..。。..。。..。。..。.。。.。。.。。。。...。..。。。.。。....。.。.。。。.。。。。。。.。。.。。。.。。。.。。.....。。.。。.。.。...。。。。。。。.。....... 11 4 系统连编与运行 ..。。。。..。。。..。.....。。....。。.。.。。。。.。.。。..。。.。。...。。。.。..。...。..。。...。..。。。.。...。.。。。..。..。。。。...。..。.。。。。....。。..。。.. 13 5 总 结。.。。。。。.....。.....。。。。.。..。。。。。。..。。..。..。。.。...。.。。...。.。.。.。。。..。。....。.。..。..。...。。。。。.。.。。。.。。。....。.。.。.。..。.。。。。。.。..。.。.。。。。.。 14 6 参考文献。。。....。.。。...。。.。..。。........。.。......。。。...。。.。。.。。..。。..。。...。。.。..。。。....。.。...。。。。...。....。...。..。。.。....。。.。..。。。。。。。.。。。.. 15
数据结构之学生成绩管理系统

数据结构之学生成绩管理系统在当今数字化的时代,学生成绩管理是学校教育教学工作中的重要组成部分。
一个高效、准确且易于使用的学生成绩管理系统对于学校的教学管理和学生的发展都具有重要意义。
接下来,让我们深入探讨一下这个系统的各个方面。
首先,我们来谈谈学生成绩管理系统的需求分析。
学校需要能够方便地录入学生的基本信息,如姓名、学号、班级等。
同时,对于每门课程的成绩,包括平时成绩、考试成绩、实验成绩等,都要有清晰准确的记录。
此外,系统还应支持不同的成绩计算方式,例如加权平均、算术平均等,以满足不同课程的要求。
老师能够快速查询和统计学生的成绩,了解学生的学习情况,为教学提供参考。
学生也应该能够查看自己的成绩,了解自己的学习进度和不足之处。
在设计学生成绩管理系统时,数据结构的选择至关重要。
对于学生的基本信息,我们可以使用线性表,如数组或链表来存储。
数组的优点是可以通过下标快速访问元素,但插入和删除操作较为复杂;链表则在插入和删除操作上具有优势,但访问速度相对较慢。
根据实际需求,如果学生信息的变动较少,我们可以选择数组;如果需要频繁地添加或删除学生信息,链表可能更为合适。
对于课程成绩的存储,我们可以使用树形结构,如二叉树或二叉搜索树。
二叉树可以方便地进行排序和查找操作,二叉搜索树则能够快速地查找特定的成绩信息。
另外,我们还可以使用哈希表来存储学生的成绩,通过哈希函数将学生的学号或姓名映射到一个特定的存储位置,从而实现快速的查找和访问。
在实现学生成绩管理系统时,我们需要考虑系统的功能模块。
首先是用户登录模块,确保只有授权的用户能够访问系统。
然后是学生信息管理模块,用于添加、修改、删除和查询学生的基本信息。
成绩录入模块是核心之一,老师可以通过这个模块输入学生的各项成绩。
成绩查询模块则要满足老师和学生不同的查询需求,老师可以查看全班或整个年级的成绩统计情况,学生可以查看自己的个人成绩。
成绩统计分析模块能够对成绩进行各种统计计算,如平均分、最高分、最低分、成绩分布等,为教学评估提供数据支持。
数据结构在学生成绩管理系统设计中的应用

数据结构在学生成绩管理系统设计中的应用学生成绩管理系统是一种用来管理和记录学生学习成绩的软件系统。
在设计学生成绩管理系统时,合理的数据结构设计是至关重要的。
数据结构可以帮助我们组织和管理大量的学生数据,提高系统的效率和性能。
下面将详细介绍数据结构在学生成绩管理系统设计中的应用。
最重要的数据结构是数组。
数组是一种线性数据结构,可以连续存储相同类型的数据。
在学生成绩管理系统中,我们可以使用数组存储学生的基本信息,如学号、姓名、班级等。
通过数组,我们可以方便地对学生进行排序、检索和修改等操作。
数组还可以用来存储学生的成绩信息,例如每门课程的成绩,通过数组的索引快速访问学生的成绩。
树是一种非常有用的数据结构,在学生成绩管理系统中也有广泛的应用。
树是一种分层的数据结构,可以用于组织和管理具有层次结构的数据。
在学生成绩管理系统中,我们可以使用树来组织和管理学生的班级和专业信息。
每个节点可以包含班级的名称、人数、平均成绩等信息。
通过树的层级关系,我们可以方便地查询班级和专业的平均成绩。
图也是学生成绩管理系统中常用的数据结构之一。
图是一种非线性的数据结构,可以用来表示不同实体之间的关系。
在学生成绩管理系统中,我们可以使用图来表示学生与课程之间的关系,例如学生选择了哪些课程。
通过图的节点和边,我们可以方便地查询学生选择的课程和相关成绩。
在学生成绩管理系统中,还可以使用其他数据结构如队列、堆等。
队列可以用来解决学生申请加入班级的管理问题,堆可以用来快速找到最高分或最低分的学生。
数据结构在学生成绩管理系统设计中起着至关重要的作用。
合理选择和设计数据结构,可以提高系统的效率和性能,使学生成绩管理更加方便和准确。
也需要根据具体系统需求和规模进行选择和设计,以满足学生成绩管理的功能和性能要求。
数据结构在学生成绩管理系统设计中的应用

数据结构在学生成绩管理系统设计中的应用【摘要】学生成绩管理系统设计中的数据结构应用是十分重要的。
本文从学生成绩管理系统概述开始介绍了数据结构在系统中的存储和组织方式,以及链表、树结构和哈希表在系统中的具体应用。
通过对比和分析不同数据结构的特点和优势,可以看出数据结构在学生成绩管理系统设计中的重要性和优势所在。
未来,随着技术的不断发展,学生成绩管理系统也会迎来新的挑战和机遇,数据结构在此过程中将起到关键作用。
深入理解和灵活运用数据结构,将有助于提高学生成绩管理系统的效率和性能,为教育管理工作带来更多便利和效益。
【关键词】数据结构、学生成绩管理系统、存储、组织、链表、树结构、哈希表、重要性、优势、发展。
1. 引言1.1 数据结构在学生成绩管理系统设计中的应用数据结构在学生成绩管理系统设计中的应用是指利用各种数据结构来存储和组织学生成绩数据,以便更有效地管理和分析学生成绩信息。
在学生成绩管理系统中,使用合适的数据结构能够提高系统的效率和性能,使得数据的存储和检索更加方便和快捷。
通过合理设计和应用数据结构,可以实现对学生成绩数据的统一管理和快速查询,提高教学管理工作的效率和质量。
2. 正文2.1 学生成绩管理系统概述学生成绩管理系统是一个涉及学生个人信息、课程信息、成绩信息等多种数据的系统。
它的主要功能是帮助学校管理学生成绩信息,包括学生的平时成绩、考试成绩以及综合评价等。
学生成绩管理系统可以帮助学校更好地了解学生的学习情况,及时发现问题并进行教育干预,提高学生成绩水平和学校的教学质量。
学生成绩管理系统通常包括学生信息管理、课程信息管理、成绩信息管理等模块。
在学生信息管理模块中,学校可以录入学生的基本个人信息,包括姓名、学号、性别、班级等。
在课程信息管理模块中,学校可以录入各个课程的基本信息,包括课程名称、授课教师、上课时间等。
在成绩信息管理模块中,学校可以录入学生的各门课程的平时成绩、考试成绩以及最终成绩。
学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计学生成绩管理系统是一个用于管理学生学习成绩的软件系统。
它通常用于学校、教育机构或教师们来跟踪和记录学生的学习进展,并生成报告和分析数据。
在数据结构课程设计中,学生成绩管理系统需要设计合适的数据结构来存储和操作学生成绩数据。
在设计学生成绩管理系统时,可以使用以下数据结构:1. 数组:可以使用数组来存储学生成绩数据。
每个学生的成绩可以用一个数组元素表示,可以将学生按照学号或者其他标识符按顺序存储在数组中。
这样可以方便地通过索引来访问和修改学生成绩。
2. 链表:链表是另一种常用的数据结构,可以用于存储学生成绩数据。
每个学生的成绩可以用一个节点表示,节点可以包含学生的信息和成绩,同时包含指向下一个节点的指针。
这样可以方便地插入、删除和查找学生成绩。
3. 树:树可以用于组织学生成绩数据。
可以使用二叉搜索树或平衡二叉树来存储学生成绩,其中学生的学号或者姓名可以作为关键字。
这样可以方便地进行查找、插入和删除操作,并可支持对学生成绩进行排序。
以上是一些常用的数据结构,用于存储学生成绩管理系统的数据。
在具体的设计中,还可以根据实际需求选择其他合适的数据结构。
除了数据结构,学生成绩管理系统还可能包括其他功能,例如:1. 添加学生:可以通过输入学生的基本信息和成绩,将学生添加到系统中。
2. 删除学生:可以通过学生的学号或其他标识符,从系统中删除某个学生的信息和成绩。
3. 修改成绩:可以根据学生的学号或其他标识符,修改学生的成绩信息。
4. 查询成绩:可以根据学号、姓名或其他条件,查询学生的成绩信息。
5. 成绩统计和分析:可以对学生的成绩进行统计和分析,生成报告和图表,帮助教师或学校了解学生的学习情况。
以上只是学生成绩管理系统可能包含的一些基本功能,具体的设计和实现还需要根据实际需求和要求进行进一步的扩展和深入分析。
通过合适的数据结构和功能设计,可以实现一个高效、易用和功能完善的学生成绩管理系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构之学生成绩管理系统学生成绩管理系统一、实验目的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. 实现步骤首先,分析题目要求划分实现模块,定义基本数据类型,诸如结构体、链表等;其次,针对上述的基本操作实现具体需要进行的操作,具体实现每个环节需要进行的基本操作,即具体编写每个小函数实现功能;最后,编写主函数对每个实现进行按需调用,实现操作。
3.流程图四.代码:#include<stdio.h>#include<malloc.h>#include<string.h>struct Student{char name[10];char subject[10];int num;int grade;Student *next;};void StuMain(); //学生成绩管理系统的主函数,由main函数调用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 StuOutput(Student *p) //打印函数,将链表的该节点信息输出{printf("学生姓名:");printf("%s ",p->name);printf("学生号:");printf("%d ",p->num);printf("科目: ");printf("%s ",p->subject);printf("学生成绩:");printf("%d \n",p->grade);}int StuImport(Student *head,Student *p){Student *Opinion=(Student *)malloc(sizeof(Student)); //用来判断输入节点中学生号是否有重复Opinion=head->next;printf("学生姓名:\n");scanf("%s",p->name);printf("学生号:\n");scanf("%d",&p->num);printf("科目:\n");scanf("%s",p->subject);if(Opinion!=NULL){if(Opinion->num==p->num&&!strcmp(Opinion->subject,p->subject)){printf("该学生这门科目已有成绩,请重新输入\n");return 1;}Opinion=Opinion->next;}printf("学生成绩:\n");scanf("%d",&p->grade);return 0;}void main(){StuMain();}void StuMain(){char decide='y'; //定义while变量,函数是否继续进行int num=1; //定义switch变量,函数跳转到哪个子函数Student *head; //定义链表的头指针head=(Student *)malloc(sizeof(Student)); //给头指针开辟空间head->next=NULL; //初始化头指针while(decide!='n'){printf(" ***************************************************\n");printf(" ********** 1 输入 2 查找 3 修改 4 插入 ********\n");printf(" ********** 5 删除 6 存储 7 退出 ********\n");printf(" ***************************************************\n");scanf("%d",&num);switch(num){case 1:StuInput(head);break;case 2:StuSelect(head);break;case 3:StuAlter(head);break;case 4:StuInsert(head);break;case 5:StuDelect(head);break;case 6:StuSave(head);break;default:decide='n';break;}};}void StuInputHand(Student *head); //学生成绩管理系统的手动输入函数,由输入函数调用void StuInputFile(Student *head); //学生成绩管理系统的文件输入函数,由输入函数调用void StuInput(Student *head) //学生成绩管理系统的输入函数,由主函数调用{char decide='y'; //定义while变量,函数是否继续进行int num; //定义switch变量,函数跳转到哪个子函数while(decide!='n'){printf(" ***************************************************\n");printf(" ** 1 手动输入 2 文件输入 3 退出 **\n");printf(" ***************************************************\n");scanf("%d",&num);switch(num){case 1:StuInputHand(head);break;case 2:StuInputFile(head);default:decide='n';break;}}}void StuInputHand(Student *head) //学生成绩管理系统的手动输入函数,由输入函数调用{if(head->next==NULL){Student *point=(Student *)malloc(sizeof(Student)); //链表中最后一个节点,只在该函数中存在point->next=NULL;int decide=1;while(decide!=0){Student *p=(Student *)malloc(sizeof(Student));p->next=NULL;StuImport(head,p);if(head->next==NULL){head->next=p;point=p;}else{point->next=p;point=p;}printf("是否继续:1/0\n");scanf("%d",&decide);}}elseprintf("管理系统中已存在信息,若想输入学生信息,请转插入子系统");}void StuInputFile(Student *head) //学生成绩管理系统的文件输入函数,由输入函数调用{if(head->next!=NULL){printf("学生管理系统中已有信息,请跳转到插入选项\n"); return ;}FILE *fp;printf("请输入文件名(包括物理地址)\n");char filename[10];scanf("%s",filename);if((fp=fopen(filename,"r"))==NULL){printf("can not open file\n");return;}Student *point=(Student *)malloc(sizeof(Student));Student *Opinion=(Student *)malloc(sizeof(Student)); //用来判断输入节点中学生号是否有重复while(!feof(fp)) {Opinion=head->next;Student *p=(Student *)malloc(sizeof(Student));p->next=NULL;fread(p,sizeof(Student),1,fp);if(Opinion!=NULL){if(Opinion->num==p->num&&!strcmp(Opinion->subject,p->subject)){printf("该文件中有重复学生信息,请验明再传输\n");head->next=NULL;return ;}Opinion=Opinion->next;}if(head->next==NULL){head->next=p;point=p;}else{point->next=p;point=p;}};Opinion=head->next;while(Opinion->next!=NULL){Opinion=Opinion->next;if(Opinion->next->next==NULL)Opinion->next=NULL;};fclose(fp);printf("传输成功\n");}void StuSelectErg(Student *head); //学生成绩管理系统的遍历函数,由查找函数调用void StuSelectNumFind(Student *head); //学生成绩管理系统的按学号查找函数,由查找函数调用void StuSelectSubFind(Student *head); //学生成绩管理系统的按科目查找函数,由查找函数调用void StuSelect(Student *head) //学生成绩管理系统的查找函数,由主函数调用{char decide='y'; //定义while变量,函数是否继续进行int num; //定义switch变量,函数跳转到哪个子函数while(decide!='n'){printf(" ***************************************************\n");printf(" **** 1 遍历 2 学号查找 3 科目查找 4 退出 ****\n");printf(" ***************************************************\n");scanf("%d",&num);switch(num){case 1:StuSelectErg(head);break;case 2:StuSelectNumFind(head);break;case 3:StuSelectSubFind(head);break;default:decide='n';break;}}}void StuSelectErg(Student *head) //学生成绩管理系统的遍历函数,由查找函数调用{Student *p=(Student *)malloc(sizeof(Student));p=head->next;int i=1;while(p!=NULL){printf("第%d位学生信息:\n",i);StuOutput(p);p=p->next;i++;}}void StuSelectNumFind(Student *head) //学生成绩管理系统的查找子系统,有查找函数调用{int num;printf("输入想要查找学生的学生号:\n");scanf("%d",&num);Student *p=(Student *)malloc(sizeof(Student));p=head->next;int i=1;while(p!=NULL){if(num==p->num){StuOutput(p);i++;}p=p->next;}if(i==1)printf("没有该学生信息");}void StuSelectSubFind(Student *head) //学生成绩管理系统的按科目查找函数,由查找函数调用{char Sub[10];printf("输入想要查找科目:\n");scanf("%s",Sub);Student *p=(Student *)malloc(sizeof(Student));p=head->next;int i=1;while(p!=NULL){if(!strcmp(Sub,p->subject)){StuOutput(p);i++;}p=p->next;}if(i==1)printf("没有该学生信息");}void StuAlter(Student *head) //学生成绩管理系统的修改函数,由主函数调用{int num;printf("输入想要查找学生的学生号:\n");scanf("%d",&num);char Sub[10];printf("输入想要查找科目:\n");scanf("%s",Sub);Student *p=(Student *)malloc(sizeof(Student));p=head->next;int i=1;while(p!=NULL){if(num==p->num&&!strcmp(Sub,p->subject)){printf("输入修改成绩:\n");scanf("%d",&p->grade);printf("修改成功\n");i++;}p=p->next;if(i==1)printf("没有该学生信息");}}void StuInsert(Student *head) //学生成绩管理系统的插入函数,由主函数调用{Student *point=(Student *)malloc(sizeof(Student));point=head->next;while(point->next!=NULL)point=point->next; //找到尾结点char decide='y'; //定义while变量,函数是否继续进行int num; //定义switch变量,函数跳转到哪个子函数while(decide!='n'){printf(" ***************************************************\n"); printf(" **** 1 头插 2 尾插 3 退出 ****\n");printf(" ***************************************************\n"); scanf("%d",&num);Student *p=(Student *)malloc(sizeof(Student));switch(num){case 1:StuImport(head,p);p->next=head->next;head->next=p;printf("插入成功\n");break;case 2:StuImport(head,p);point->next=p;p->next=NULL;printf("插入成功\n");break;default:decide='n';break;}}}void StuDelect(Student *head) //学生成绩管理系统的删除函数,由主函数调用{int num;printf("输入想要删除学生的学生号:\n");scanf("%d",&num);char Sub[10];printf("输入想要删除科目:\n");scanf("%s",Sub);Student *p=(Student *)malloc(sizeof(Student));p->next=head->next;int i=1;while(p->next!=NULL){if(num==p->next->num&&!strcmp(Sub,p->next->subject)){StuOutput(p->next);printf("是否删除:1/0\n");scanf("%d",&i);if(num==head->next->num&&!strcmp(Sub,head->next->subject)){head->next=head->next->next;}else{p->next=p->next->next;}i=2;printf("删除成功\n");break;}p=p->next;}if(i==1)printf("没有该学生信息\n");}void StuSave(Student *head) //学生成绩管理系统的存储函数,由主函数调用{FILE *fp;char filename[10];printf("请输入存储文件名(包括物理地址)\n");scanf("%s",filename);Student *p=(Student *)malloc(sizeof(Student));p=head->next;if((fp=fopen(filename,"w"))==NULL){printf("cannot open file");return;}printf("input data:/n");while(p!=NULL){fwrite(p,sizeof(Student),1,fp); /* 成块写入文件*/p=p->next;}fclose(fp);}。