学生成绩信息管理系统

合集下载

学生成绩管理系统数据流程图及数据字典

学生成绩管理系统数据流程图及数据字典

学生成绩管理系统数据流程图及数据字典一、数据流程图学生成绩管理系统是一个用于管理学生的课程成绩的系统。

下面是该系统的数据流程图,展示了数据在系统中的流动和处理过程。

1. 学生信息管理流程:- 输入:学生信息(学生姓名、学号、性别、年级等)- 处理:将学生信息存储到学生信息表中- 输出:无2. 课程信息管理流程:- 输入:课程信息(课程名称、课程编号、学分等)- 处理:将课程信息存储到课程信息表中- 输出:无3. 成绩录入流程:- 输入:学生课程成绩信息(学号、课程编号、成绩)- 处理:将成绩信息存储到成绩表中- 输出:无4. 成绩查询流程:- 输入:学号- 处理:根据学号在学生信息表中查找学生姓名,并在成绩表中查询该学生的所有成绩信息- 输出:学生姓名及其对应的成绩信息5. 成绩统计流程:- 输入:课程编号- 处理:根据课程编号在课程信息表中查找课程名称,并在成绩表中统计该课程的平均成绩、最高成绩和最低成绩- 输出:课程名称及其对应的平均成绩、最高成绩和最低成绩二、数据字典数据字典是对系统中使用的数据元素进行定义和描述的文档。

下面是学生成绩管理系统的数据字典,包含了系统中使用的各个数据元素及其属性。

1. 学生信息表(StudentInfo):- 学号(StudentID):学生的惟一标识符,数据类型为整数- 学生姓名(StudentName):学生的姓名,数据类型为字符串- 性别(Gender):学生的性别,数据类型为字符串- 年级(Grade):学生所在的年级,数据类型为字符串2. 课程信息表(CourseInfo):- 课程编号(CourseID):课程的惟一标识符,数据类型为整数- 课程名称(CourseName):课程的名称,数据类型为字符串- 学分(Credit):课程的学分,数据类型为浮点数3. 成绩表(Score):- 学号(StudentID):学生的惟一标识符,数据类型为整数- 课程编号(CourseID):课程的惟一标识符,数据类型为整数- 成绩(Grade):学生在该课程中的成绩,数据类型为浮点数通过以上的数据流程图和数据字典,学生成绩管理系统可以实现学生信息的录入和管理、课程信息的录入和管理、成绩的录入、查询和统计等功能。

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

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

学生成绩管理系统c++课程设计学生成绩管理系统是一种用于记录和管理学生课程成绩的软件系统。

它能够帮助学校、教师和学生实时监控和分析学生的学业表现,为教育管理者提供决策支持,为学生提供个性化的学习建议。

在C++课程设计中,学生成绩管理系统可以实现以下功能:1. 学生信息管理:包括学生的基本信息(如姓名、性别、年龄、班级等),以及学生的学号、联系方式等。

系统可以提供添加、修改、删除和查询学生信息的功能。

2. 课程管理:包括课程名称、学分、授课教师等信息。

系统可以对课程进行添加、修改、删除和查询操作。

3. 成绩管理:系统可以记录学生的每门课程的成绩,并计算学生的综合成绩。

可以输入或导入成绩数据,支持对成绩进行修改、删除和查询操作。

系统还可以生成成绩报表和统计分析,帮助教师和学校了解班级或全校学生的成绩分布和趋势。

4. 学生选课管理:学生可以根据自己的兴趣或专业要求选择课程。

系统可以提供学生选课、退课的功能,并根据学生的选课情况进行课程调整和排课。

5. 教师管理:包括教师的基本信息、授课情况和成绩评定等。

系统可以对教师信息进行管理,支持教师信息的添加、修改、删除和查询操作。

6. 用户权限管理:系统可以对不同用户设置不同的权限,例如管理员可以对系统进行设置和管理,教师可以录入和修改成绩,学生可以查询自己的成绩等。

通过学生成绩管理系统,学校和教师可以更方便地管理学生的成绩,及时发现和解决学生学习中的问题。

学生可以方便地查询自己的成绩,了解自己的学业表现,及时调整学习策略。

同时,学生成绩管理系统也为教育管理者提供了数据支持,可以通过统计和分析成绩数据来评估教学效果,并为学校的教学改进提供参考依据。

在C++课程设计中,可以通过使用面向对象的编程思想,设计合适的类和数据结构来实现学生成绩管理系统的各项功能。

同时,还可以通过使用文件读写技术,将学生、课程和成绩等信息保存到文件中,实现数据的持久化存储。

在用户界面设计上,可以使用C++图形库或者命令行界面来实现用户与系统的交互。

学生成绩管理系统的设计与实现

学生成绩管理系统的设计与实现

学生成绩管理系统的设计与实现一、需求分析本学生成绩管理系统的主要功能为:•管理学生信息,包括姓名、性别、学号等基本信息;•录入学生成绩,包括各门课程的成绩;•统计学生成绩,包括按学生、按课程、按年级等多种方式统计;•生成成绩报告,包括成绩排名、平均成绩等信息;•生成数据分析报告,包括各门课程的分数分布、学生的成绩趋势等信息。

二、系统设计本系统采用MVC模式设计,主要分为Model、View、Controller三部分。

1. ModelModel层主要负责数据存储和处理。

系统中的基本数据结构包括:•学生(Student):包括姓名、性别、学号等基本信息;•课程(Course):包括课程名称、学分等基本信息;•成绩(Score):包括学生、课程、成绩等信息。

在数据库中,学生、课程、成绩三个实体分别对应三个表,其中成绩表还包括学生和课程两个外键。

2. ViewView层主要负责与用户交互,显示数据和处理用户输入。

系统中的主要界面包括:•学生信息管理界面:用于添加、编辑和删除学生信息;•课程信息管理界面:用于添加、编辑和删除课程信息;•成绩录入界面:用于录入学生的成绩信息;•成绩查询界面:用于查询学生的成绩信息;•成绩统计界面:用于按学生、按课程、按年级等多种方式统计成绩信息;•成绩报告界面:用于生成成绩排名、平均成绩等信息;•数据分析界面:用于生成各门课程的分数分布、学生的成绩趋势等信息。

3. ControllerController层主要负责控制系统的流程、协调Model和View两层之间的交互。

Controller接收用户输入、调用Model进行数据处理、更新View显示数据。

三、系统实现本系统采用Python语言进行开发,使用了Flask框架、SQLAlchemy ORM库、Bootstrap前端框架等技术。

具体实现细节如下:1. 数据库设计from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()# 学生class Student(db.Model):__tablename__ = 'students'id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50), nullable=False)gender = db.Column(db.String(10), nullable=False)student_id = db.Column(db.String(20), nullable=False, unique=True)scores = db.relationship('Score', backref='student')# 课程class Course(db.Model):__tablename__ = 'courses'id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50), nullable=False)credit = db.Column(db.Float, nullable=False)scores = db.relationship('Score', backref='course')# 成绩class Score(db.Model):__tablename__ = 'scores'id = db.Column(db.Integer, primary_key=True)score = db.Column(db.Float, nullable=False)student_id = db.Column(db.Integer, db.ForeignKey('st udents.id'), nullable=False)course_id = db.Column(db.Integer, db.ForeignKey('cou rses.id'), nullable=False)我们使用了Flask框架自带的SQLite数据库,创建了一个名为students.db的数据库。

学生成绩管理系统设计与实现

学生成绩管理系统设计与实现

学生成绩管理系统设计与实现一、本文概述本文旨在深入探讨学生成绩管理系统的设计与实现过程。

随着信息技术的快速发展和普及,教育领域对于信息化、智能化的需求日益增强。

学生成绩管理系统作为学校教育管理信息化的重要组成部分,其设计与实现对于提高教育管理水平、优化教育资源分配、促进教育教学改革具有重要意义。

本文将首先介绍学生成绩管理系统的基本概念、功能和作用,随后详细阐述系统的设计原则、设计思路和设计方法,包括系统架构、数据库设计、用户界面设计等方面。

在此基础上,本文将进一步探讨学生成绩管理系统的实现过程,包括系统开发的编程语言、开发环境、关键技术等,以及系统测试、部署和维护的策略和方法。

本文将总结学生成绩管理系统的设计与实现过程中的经验教训,展望未来的发展方向和应用前景。

通过本文的阐述,希望能够为读者提供一个全面、深入的学生成绩管理系统设计与实现的理论指导和实践参考。

二、系统需求分析在设计和实现学生成绩管理系统之前,对系统需求进行深入分析是至关重要的。

系统需求分析阶段的目标是明确系统的功能需求、性能需求、安全需求以及用户需求,为后续的系统设计和实现提供明确的指导。

我们需要明确系统的功能需求。

学生成绩管理系统应能够实现对学生成绩的基本管理,包括成绩的录入、查询、修改、删除等操作。

同时,系统还应提供成绩统计和报表生成功能,以便于教师和管理人员对学生成绩进行分析和评估。

系统还应支持成绩的导入和导出功能,以便于与其他系统进行数据交换。

我们需要考虑系统的性能需求。

学生成绩管理系统应具备良好的性能和稳定性,能够处理大量数据的存储和访问。

同时,系统还应具备良好的响应速度,确保用户在进行成绩管理操作时能够获得流畅的体验。

系统的安全需求也是不可忽视的。

学生成绩管理系统应采取有效的安全措施,保护数据的机密性和完整性。

例如,系统应设置用户权限管理功能,对不同用户设置不同的访问权限,以防止未经授权的访问和数据泄露。

同时,系统还应采用加密技术,对敏感数据进行加密存储和传输,确保数据的安全性。

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

数据库课程设计学生成绩管理系统
安全性加强
可以进一步加强系统的 安全性设计,如增加用 户权限管理、数据备份 与恢复等功能,确保数 据的完整性和安全性。
THANKS
感谢观看
情况下的容错处理。
性能测试用例
设计针对不同用户数量和不同数据量 的测试用例,以验证系统的性能和稳
定性。
安全测试用例
设计针对系统安全性的测试用例,如 用户权限验证、数据加密传输等。
测试执行与结果分析
测试执行
按照测试计划和测试用例进行测试,记录测试结果和发现的问题 。
问题跟踪与修复
对发现的问题进行跟踪,确保问题得到及时修复,并重新进行测试 验证。
测试方法
采用黑盒测试和白盒测试相结合的方法,包括功能测试、 性能测试、安全测试等。
测试范围
包括系统的所有功能模块,如学生信息管理、课程管理、 成绩录入与查询、报表生成等。
测试资源
包括测试人员、测试环境、测试数据等。
测试用例设计
功能测试用例
针对系统的每个功能模块设计测试用 例,包括正常情况下的操作以及异常
系统功能实现
课程信息管理
实现课程基本信息的录入、修 改、查询和删除功能。
报表生成
根据需求生成各类报表,如学 生成绩单、课程统计表等。
学生信息管理
实现学生基本信息的录入、修 改、查询和删除功能。
成绩录入与查询
实现学生成绩的录入、修改、 查询和删除功能,支持批量导 入成绩数据。
权限管理
实现不同用户角色的权限管理 ,确保系统的安全性和稳定性 。
常见问题与解决方案
数据库连接问题
检查数据库连接配置是否正确,确保数据库服务 正常运行,并尝试重新启动数据库服务或修复连 接问题。
系统性能下降

一个简单的学生成绩管理信息系统

一个简单的学生成绩管理信息系统

一个简单的学生成绩管理信息系统学生成绩管理信息系统在当今的数字化时代,有效的信息管理对于任何组织的成功至关重要。

对于学校来说,管理学生的成绩、出勤记录和其他相关信息已经成为一项复杂的任务。

为了解决这个问题,我们可以构建一个简单的学生成绩管理信息系统。

一、系统概述这个系统将使用一个数据库来存储和管理学生的基本信息,包括姓名、学号、班级等。

同时,系统将实现几个核心功能,包括学生成绩录入、成绩查询、报表生成和数据分析等。

二、系统功能1、学生信息管理:系统可以添加、编辑和删除学生的基本信息,包括姓名、学号、班级等。

2、成绩录入:教师可以轻松地输入每个学生的成绩,包括各科目的考试分数、平时作业成绩等。

3、成绩查询:学生和教师可以根据学号、姓名或时间段来查询成绩。

4、报表生成:系统可以自动生成各类报表,如班级成绩汇总表、个人成绩单等。

5、数据分析:系统可以对收集的数据进行深入分析,为提高教学质量提供参考。

三、技术实现这个系统可以使用各种编程语言和技术栈来实现。

例如,后端可以使用Python的Flask框架或Java的Spring框架,数据库可以使用MySQL 或MongoDB等。

四、安全性为了保证数据的安全性,系统应采取适当的安全措施,包括数据加密、用户权限管理等。

只有经过授权的用户才能访问和修改数据。

五、用户界面用户界面应该直观易用,可以使用HTML、CSS和JavaScript来创建友好的用户界面。

六、系统价值这个系统的价值在于它能够帮助学校更有效地管理学生成绩信息,提高工作效率。

通过数据分析,教师可以更好地理解学生的学习情况,从而调整教学策略,提高教学质量。

总结,一个简单的学生成绩管理信息系统不仅可以提高学校的管理效率,也为教师和学生提供了便捷的查询方式。

在未来的发展中,该系统还可以不断扩展功能,如纳入学生的出勤记录、课外活动参与情况等,从而成为一个全面的学生信息管理系统。

学生成绩管理系统

学生成绩管理系统

学生成绩管理系统简介学生成绩管理系统是一种用于管理学生的学业成绩和相关信息的软件系统。

它可以帮助学校、教师和学生有效地管理和查询学生的成绩,提供全面的成绩分析和统计功能,促进教学质量的提高。

功能学生成绩管理系统通常具有以下核心功能:1.学生信息管理:包括学生的基本信息、课程注册、班级信息等。

2.成绩录入:教师可以登录系统,录入学生成绩,并进行相应的成绩审核和修改。

3.成绩查询:学生、教师和学校管理者均可通过系统查询学生成绩,可以按照学生、班级、课程等维度进行灵活查询。

4.成绩统计与分析:系统可以对成绩数据进行统计和分析,生成各类成绩报告和分析图表,为教师和学校提供决策依据。

5.成绩排名:系统可以根据学生成绩进行排名,可以按照总分、班级、课程等维度进行排名。

6.数据导入导出:系统可以支持将学生成绩数据导入导出到Excel、CSV等格式,方便学校的数据管理。

优势学生成绩管理系统的应用带来诸多优势:1.提高工作效率:通过系统自动化处理和统计成绩数据,节省了大量的人力和时间成本。

2.提供准确的数据:系统可以准确地计算和记录学生成绩,避免了人工计算和录入带来的错误。

3.提供个性化服务:学生成绩管理系统可以根据学生的不同需求提供个性化的信息查询和分析功能,满足学生个性化的学习需求。

4.提供全面的分析和决策支持:系统可以生成各类成绩报告和分析图表,帮助教师和学校进行成绩分析和决策。

5.提高教学质量:通过系统对学生成绩进行全方位的管理和分析,有助于教师了解学生的学习状况,及时调整教学方法,提高教学质量。

使用场景学生成绩管理系统适用于各类学校、教育机构以及在线教育平台的学生成绩管理需求。

以下是几个典型的使用场景:1.学校管理者可以通过系统了解学校整体的学生成绩情况,进行综合分析和决策。

2.教师可以通过系统录入学生成绩、排名、查询历史成绩等,方便管理学生成绩和进行个性化教学。

3.学生可以通过系统查询自己的成绩、查看排名等,及时了解自己的学习状况。

学生成绩管理系统论文

学生成绩管理系统论文

学生成绩管理系统论文引言学生成绩管理系统是指通过信息化技术对学生学业成绩进行记录、分析和管理的一种系统。

在传统的学校教学中,教师往往需要通过手工记录学生的成绩情况,而学生成绩管理系统的出现极大地提高了教务工作的效率和准确性。

本论文将介绍学生成绩管理系统的设计与实现,并分析其在教育领域中的重要性。

设计与实现功能需求学生成绩管理系统主要包含以下功能:1.学生信息管理:包括学生基本信息的录入、修改和查询等操作。

2.课程管理:包括课程的添加、删除、修改和查询等操作。

3.成绩录入:教师可以录入学生的成绩信息。

4.成绩查询:学生、教师和教务管理人员可以通过系统查询学生的成绩。

5.成绩统计与分析:系统能够对学生成绩进行统计和分析,生成相应的成绩报表和图表,方便教师和教务管理人员进行评估和分析。

技术选型学生成绩管理系统的设计与实现使用了以下技术:1.后端开发:采用了Node.js作为后端开发语言,结合Express.js框架进行开发。

Node.js具有高效的异步IO和事件驱动机制,并且拥有强大的社区支持。

2.前端开发:采用了HTML、CSS和JavaScript进行前端开发,结合Bootstrap框架进行页面布局和样式设计。

3.数据库:采用了MongoDB作为数据库存储学生和成绩信息。

MongoDB是一种非关系型数据库,具有高性能、可扩展性和灵活的数据模型。

系统架构学生成绩管理系统的整体架构包括前端界面、后端逻辑和数据库三个部分。

前端界面通过浏览器与后端逻辑进行交互,后端逻辑通过与数据库的交互实现具体的功能。

系统架构图如下:系统架构图系统架构图实现过程学生成绩管理系统的实现过程如下:1.设计数据库:根据系统需求,设计MongoDB数据库的结构,包括学生信息表和成绩信息表。

2.实现后端逻辑:使用Node.js和Express.js框架开发后端逻辑,包括学生信息管理、课程管理、成绩录入和查询等功能。

3.实现前端界面:使用HTML、CSS和JavaScript开发前端界面,通过Ajax技术与后端进行数据交互,实现用户的操作和数据展示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:学生成绩信息管理系统用c语言实现学生管理系统,每个学生的信息包括:学号、姓名、性别、平时成绩、期末成绩。

系统能够完成学生信息的查询、更新、插入、删除、排序功能。

1、系统以菜单方式工作;2、学生信息录入功能(学生信息用文件保存)--输入;3、学生信息按条件查询功能—算法;●按学号查询●按姓名查询●按性别查询●按平时成绩查询●按期末成绩查询4、学生信息的删除与修改。

流程图:图1 函数功能模块图输入输出的要求(1)等候用户输入时,给出足够的提示信息,如:选择1,输入学生信息、选择2,查询学生信息。

(2)对输入值的类型,大小范围,字符串长度等,进行检查,对不合法的输入值给出出错信息。

(3)对删除数据给出方式,让用户进行确认删除。

1.概要设计1.抽象数据类型定义struct Student//创建结构体{………………………………};2.系统功能模块划分与设计(系统功能模块图)录入学生信息模块:输入1,判断学生信息是否存在,不存在输入1,继续上次输入,判断学生信息是否存在,运行结束。

输入2,判断学生信息是否存在,不存在输入2,清除数据重新输入,运行结束。

查询学生信息模块:查询学生信息,请输入选择查询方式。

输入1,按姓名查找学生信息输入2,按学号查找学生信息输入3,按性别查找学生信息输入4,按平时成绩查找学生信息输入5,按期末成绩查找学生信息运行结束删除学生信息模块:首先使用查询功能查询出需要修改/删除的记录,然后进行修改/删除操作无学生信息!请选项删除方式。

输入1,按照姓名删除输入2,按照学号删除运行结束修改,输出,排序学生信息输入4,修改学生信息,请输入需要修改的学生信息输入5,按姓名,成绩,平时成绩,期末成绩输出学生成绩。

输入6,将学生信息进行排序。

运行结束2.详细设计1、数据类型的定义struct Student//创建结构体{char num[20]; //学号char name[20]; //姓名char sex[5]; //性别int score; //平时成绩int QiMoscore; //期末成绩struct Student *next; //动态链表连接下一个结构体};2、主要模块的算法描述菜单模块通过while语句给出信息提示;清屏;绘制菜单(包含输入,查询,删除,修改,输出,排序);提示菜单选择并读入到变量;根据读入变量的值调用不同的模块函数;信息录入模块打开文件While(){ 清屏;按照提示输入各种信息;While显示各种信息;通过选择1.确认并继续 2.填写 3.修改 4.确认并返回选择四种功能;}}信息查询While(){ 通过菜单式的选择是学号查询还是姓名printf("\n----------请选择查询方式----------");printf("\n 1.按姓名查询");printf("\n 2.按学号查询");printf("\n 3.按性别查询");printf("\n 4.按平时成绩查询");printf("\n 2.按期末成绩查询");printf("\n 3.返回主菜单");printf("\n****************************\n");}如果选择学号进入学号模块通过输入学号If(学号存在继续){输出学生信息}Else 输出无此学生如果选择姓名进入姓名模块If(根据比较姓名判断学生是否存在){输出学生信息}Else 输出无此学生删除模块while( 继续删除 ){提示并读入待删除的学生的学生号;显示要删除的信息}删除成功信息修改模块输入要修改学生信息的学号:If (判断是否有此学生){ 菜单形式显示要修改的项目printf("\n1.姓名 2.学号 3.性别 4.平时成绩 5. 期末成绩 \n");printf("\n输入0可返回主页面 \n");}打开文件模块struct Student *read(){struct Student *p0, *p1, *head; FILE *fp;if ( ){return NULL;}if ( ){return 0;}do{if ( ){return NULL;}if ( ){return 0;}} while ( );}排序模块int paixu(struct Student *head)while(){while(){if(){}}}}}3.使用说明及编程体会使用说明该程序可以实现学生管理系统的信息排序、查询、更新、插入和删除。

首先安装CodeBcks软件,选择“Create a new project”,在弹出来的窗口选择第四个,点击“G”。

接着选“C”,点击“Next工程的信息,点击“Next”,再点击“finish”。

然后在工具栏“File”中单击“New”选项,再点击“File”,选择第二个,点击“Go”,点击“Next”。

选择“C”,点击“Next”,输入路径,点击“Finish”,至此,C语言工程已经创建完毕。

将文件中的代码复制粘贴进工程,先静态检查一下有没有语法错误,然后进行编译,更深一步检查语法错误。

待编译通过时,运行程序,观察是否能够正常运行。

本系统主要是为了帮助学校更方便管理学生信息而设计的。

学生信息包括:学号、姓名、性别、平时成绩、期末成绩。

学号不可重复,要求格式一致。

姓名考虑重名的情况,可以重复。

性别只有男女两项。

点击排序,可以按照不同的关键字,对所有学生的信息进行排序,如期末成绩从高到底排序。

点击查询,可以按照指定条件查找学生,如学号、姓名等。

点击更新,可以按照学号对某个学生的一项或者多项信息进行修改。

点击插入,可以加入新学生的各项信息。

点击删除,可以按学号删除某个学生的信息。

编程体会通过这次课程设计,我们小组按照要求合作完成了学生管理系统。

虽然已经学习了一学期的《数据结构》,但是我们这样完整地做一个系统还是头一次。

这项课程设计对我们还是有难度的,我们翻阅课本、查找资料,多次尝试、多次修改,最后才完成了作业。

在这个过程中,我们不仅巩固了上课学习的知识,尤其是链表、排序和查找,还加深了我们对于课本知识的了解。

拿到这个课程的题目,我们首先对这个系统的功能进行了构思,将各部分分配到每个人的头上。

在编写过程中,我们用到了相当多的链表。

“链表的建立是一种动态生成的存储结构,链表中的每个结点占用的存储空间不是预先分配的,而是运行时用户根据需求向系统申请而生成的。

”这个链表的定义就是我们选择这种线性表的原因。

又实用了多种排序方式,很多用到了起泡排序。

C语言是计算机程序设计的重要理论基础,这个语言将在未来很长的一段时间里,跟我们的学习生活工作紧紧结合。

这就需要我们不仅要熟悉理论知识,还有拥有较强的实践能力。

在这次课程设计中,我们就通过动手,发现了很多理论上容易被忽视的细节,但是这些细节如果在实践中标真的忽视掉,程序将会出现很大的问题,我们在编程过程中对此体会很深。

使用这个系统学生信息,不仅检索迅速、查找方便,更大大提高了提高学生档案管理的效率。

未来我们将学到更多知识,我们将会作出比现在这个简易系统使用更简单、更美观、效率也更高的系统。

4.关键源程序(带注释)//学生管理系统//每个学生的信息包括:学号、姓名、性别、平时成绩、期末成绩。

系统能够完成学生信息的查询、更新、插入、删除、排序功能。

//基本要求://(1)排序:按不同关键字,对所有学生的信息进行排序;//(2)查询:按特定条件查找学生;//(3)更新:按学号对某个员工的某项信息进行修改;//(4)插入:加入新学生的信息;//(5)删除:按学号删除某位学生信息。

//选作内容:实现图形用户界面。

#include<stdio.h>#include<stdlib.h>#include<string.h>struct Student//创建结构体{char num[20]; //学号char name[20]; //姓名char sex[5]; //性别int score; //平时成绩int QiMoscore; //期末成绩struct Student *next; //动态链表连接下一个结构体};struct Student *creat(struct Student *head0){struct Student *head1, *p1, *p2, *t0, *t1;//定义指针实现两种输入方式 int m, n = 1, h; //m判断是否继续输入 n是记录输入的学生数 h是选择输入的方式//FILE *fp;printf("请选择:");printf("\n\n注意:首次输入请输入2\n\n");printf("1.继续上次输入: 2.清除数据并重新输入:");scanf("%d",&h);if (h==1){if(head0 == NULL){printf("\n\n上次无学生输入!!!\n");return NULL;}t0 = head0;while (t0 != NULL){t1 = t0;t0 = t0->next;}p1 = p2 = (struct Student*)malloc(1 * sizeof(struct Student)); if (p1 == NULL){printf("内存开辟失败!\n");return 0;}t1->next = p2;printf("请输入学生学号:");scanf("%s", p2->num);printf("请输入学生姓名:");scanf("%s", p2->name);printf("请输入学生性别:");scanf("%s", p2->sex);printf("请输入学生平时成绩:");scanf("%d", &p2->score);printf("请输入学生期末成绩:");scanf("%d", &p2->QiMoscore);printf("\n结束请输入 '0' 继续请输入 '1' :");scanf("%d", &m);while (m != 0){printf("--------------------------已输入了 %d 名学生的信息-----------------------\n", n);printf("\n");printf("\n");n = n + 1;p1 = (struct Student*)malloc(1 * sizeof(struct Student)); if (p1 == NULL){printf("内存开辟失败!\n");return 0;}p2->next = p1;p2 = p1;printf("请输入学生学号:");scanf("%s", (*p1).num);printf("请输入学生姓名:");scanf("%s", p1->name);printf("请输入学生性别:");scanf("%s", p1->sex);printf("请输入学生平时成绩:");scanf("%d", &p1->score);printf("请输入学生期末成绩:");scanf("%d", &p1->QiMoscore);printf("\n结束请输入 '0' 继续请输入 '1' :");scanf("%d", &m);}p1->next = NULL;printf("--------------------------共输入了 %d 名学生的信息-----------------------\n", n);printf("\n");printf("\n");return(head0);}if (h==2){head1 = p1 = p2 = (struct Student*)malloc(1 * sizeof(struct Student)); if (p1 == NULL){printf("内存开辟失败!\n");return 0;}printf("请输入学生学号:");scanf("%s", p1->num);printf("请输入学生姓名:");scanf("%s", p1->name);printf("请输入学生性别:");scanf("%s", p1->sex);printf("请输入学生平时成绩:");scanf("%d", &p1->score);printf("请输入学生期末成绩:");scanf("%d", &p1->QiMoscore);printf("\n结束请输入 '0' 继续请输入 '1' :"); //判断是否继续输入的标准scanf("%d", &m);while (m != 0){printf("--------------------------已输入了 %d 名学生的信息-----------------------\n", n);printf("\n");printf("\n");n = n + 1;p1 = (struct Student*)malloc(1 * sizeof(struct Student));if (p1 == NULL){printf("内存开辟失败!\n");return 0;}p2->next = p1;p2 = p1;printf("请输入学生学号:");scanf("%s", (*p1).num);printf("请输入学生姓名:");scanf("%s", p1->name);printf("请输入学生性别:");scanf("%s", p1->sex);printf("请输入学生平时成绩:");scanf("%d", &p1->score);printf("请输入学生期末成绩:");scanf("%d", &p1->QiMoscore);printf("\n结束请输入 '0' 继续请输入 '1' :");scanf("%d", &m);}p2->next = NULL; //使链表最后一位的next指向为空printf("--------------------------共输入了 %d 名学生的信息-----------------------\n", n);printf("\n");printf("\n");head0 = head1;return(head0); // 返回头}}int cha(struct Student *head)//查询学生的信息{struct Student *p1,*p2,*p3,*p4,*p5;char x1[20],x2[20],x3[20];int x4,x5;p1=p2=p3=p4=p5=head;int m1=0,m2=0,m3=0,m4=0,m5=0;int f;if(head==NULL){printf("\n无学生信息!\n");printf("\n输入0可返回主界面\n");int n;scanf("%d",&n);if(n==0){return 0;}}printf("请选择查询方式:\n1:按姓名查找\n2:按学号查找\n3:按性别查找\n4:按平时成绩查找\n5:按期末成绩查找\n");scanf("%d",&f);if(f==1){if(p1==NULL){printf("无学生信息!\n");}printf("请输入姓名:");scanf("%s",x1);while(p1!=NULL){if(strcmp(p1->name,x1)==0){printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");printf("%s\t%s\t%s\t%d\t\t%d\t",p1->num,p1->name,p1->sex,p1->score,p1->Q iMoscore);m1++;}elsep1=p1->next;if(m1==1){break;}}if(m1==0){printf("无此学生的信息!\n");}printf("\n输入6可返回主界面\n");scanf("%d",&f);if(f==6){return 0;}}if(f==2){if(p2==NULL){printf("无学生信息!\n");}printf("请输入学号:");scanf("%s",x2);while(p2!=NULL){if(strcmp(p2->num,x2)==0){printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");printf("%s\t%s\t%s\t%d\t\t%d\t",p2->num,p2->name,p2->sex,p2->score,p2->Q iMoscore);m2++;}elsep2=p2->next;if(m2==1){break;}}if(m2==0){printf("无此学生的信息!\n");}printf("\n输入6可返回主界面\n");scanf("%d",&f);if(f==6){return 0;}}if(f==3){if(p3==NULL){printf("无学生信息!\n");}printf("请输入性别:");scanf("%s",x3);while(p3!=NULL){if(strcmp(p3->sex,x3)==0){printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");printf("%s\t%s\t%s\t%d\t\t%d\t",p3->num,p3->name,p3->sex,p3->score,p3->Q iMoscore);m3++;}elsep3=p3->next;if(m3==1){break;}if(m3==0){printf("无此学生的信息!\n");}printf("\n输入6可返回主界面\n");scanf("%d",&f);if(f==6){return 0;}}if(f==4){if(p4==NULL){printf("无学生信息!\n");}printf("请输入平时成绩:");scanf("%d",x4);while(p4!=NULL){if(p4->score==x4){printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");printf("%s\t%s\t%s\t%d\t\t%d\t",p4->num,p4->name,p4->sex,p4->score,p4->Q iMoscore);m4++;}elsep4=p4->next;if(m4==1){break;}}if(m4==0){printf("无此学生的信息!\n");}printf("\n输入6可返回主界面\n");scanf("%d",&f);if(f==6)return 0;}}if(f==5){if(p5==NULL){printf("无学生信息!\n");}printf("请输入期末成绩:");scanf("%s",x5);while(p5!=NULL){if(p5->QiMoscore==x5){printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");printf("%s\t%s\t%s\t%d\t\t%d\t",p5->num,p5->name,p5->sex,p5->score,p5->Q iMoscore);m5++;}elsep5=p5->next;if(m5==1){break;}}if(m5==0){printf("无此学生的信息!\n");}printf("\n输入6可返回主界面\n");scanf("%d",&f);if(f==6){return 0;}}}int paixu(struct Student *head)//排序,将数据大的数据依次往后存{struct Student *p2;struct Student *p;struct Student *p1;//p2 = (struct Student*)malloc(1 * sizeof(struct Student));//p1 = (struct Student*)malloc(1 * sizeof(struct Student));p=head;p1=NULL;if(head==NULL){printf("\n无学生信息!\n");printf("\n输入0可返回主界面\n");int n;scanf("%d",&n);if(n==0){return 0;}}int l;printf("请输入: \n1;以平时成绩排序 \n2:以期末成绩排序\n\n"); scanf("%d",&l);printf("\n\n\n");if(l==1){while(p!=p1){while(p->next!=p1){if(p->score>p->next->score){strcpy((p2->num),(p->num));strcpy((p->num),(p->next->num));strcpy((p->next->num),(p2->num));strcpy((p2->name),(p->name));strcpy((p->name),(p->next->name));strcpy((p->next->name),p2->name);strcpy((p2->sex),(p->sex));strcpy((p->sex),(p->next->sex));strcpy((p->next->sex),(p2->sex));int a=p->score;p->score=p->next->score;p->next->score=a;int b=p->QiMoscore;p->QiMoscore=p->next->QiMoscore; p->next->QiMoscore=b;}p=p->next;}p1=p;p=head;}}if(l==2){while(p!=p1){while(p->next!=p1){if(p->QiMoscore>p->next->QiMoscore){strcpy((p2->num),(p->num));strcpy((p->num),(p->next->num)); strcpy((p->next->num),(p2->num));strcpy((p2->name),(p->name));strcpy((p->name),(p->next->name)); strcpy((p->next->name),p2->name);strcpy((p2->sex),(p->sex));strcpy((p->sex),(p->next->sex)); strcpy((p->next->sex),(p2->sex));int a=p->score;p->score=p->next->score;p->next->score=a;int b=p->QiMoscore;p->QiMoscore=p->next->QiMoscore; p->next->QiMoscore=b;}p=p->next;}p1=p;p=head;}}printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");p=head;while(p!=NULL){printf("%s\t%s\t%s\t%d\t\t%d\t",p->num,p->name,p->sex,p->score,p->QiMosc ore);printf("\n");p=p->next;}printf("\n输入0可返回主界面\n");scanf("%d",&n);if(n==0){return 0;}}int shuchu(struct Student *head)//利用头指针将信息逐个输出{int n;//int i,j;struct Student *p;p=head;if(p==NULL){printf("\n无学生信息!\n");printf("\n输入0可返回主界面\n");int n;scanf("%d",&n);if(n==0){return 0;}}printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");p=head;while(p!=NULL){printf("%s\t%s\t%s\t%d\t\t%d\t",p->num,p->name,p->sex,p->score,p->QiMosc ore);printf("\n");p=p->next;}printf("\n输入0可返回主界面\n");scanf("%d",&n);if(n==0){return 0;}}struct Student *shan(struct Student *head){struct Student *p1,*p2,*t1,*t2;char x[20],y[20];p1=p2=t1=t2=head;if(head == NULL){printf("\n无学生信息!\n");printf("\n输入0可返回主界面\n");int n;scanf("%d",&n);if(n==0){return 0;}}int f,n;printf("请选择删除方式\n1:按照姓名删除\n2:按照学号删除\n");scanf("%d",&f);if(f==1)//姓名{int n;//int i,j;struct Student *p;p=head;if(p==NULL){printf("失败!\n");printf("\n输入0可返回主界面\n");scanf("%d",&n);if(n==0){return 0;}}printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");p=head;while(p!=NULL){printf("%s\t%s\t%s\t%d\t\t%d\t",p->num,p->name,p->sex,p->score,p->QiMosc ore);printf("\n");p=p->next;}printf("\n\n");printf("请输入姓名:\n");scanf("%s",x);while(strcmp(p1->name,x)!=0&&p1->next!=NULL){p2=p1;p1=p1->next;//利用指针进行逐个检查}if(strcmp(p1->name,x)==0){if(p1==head)//如果删除的是第一个学生,那么头指针不可能直接被切掉只要将头指针向后移动一个单元即可{head=p1->next;printf("成功删除!\n");}else{p2->next=p1->next;//核心步骤printf("成功删除!\n");}}else{printf("无此学生!\n");}printf("\n输入0可返回主界面\n");scanf("%d",&n);return head;}else if(f==2){int n;//int i,j;struct Student *p;p=head;if(p==NULL){printf("失败!\n");printf("\n输入0可返回主界面\n");scanf("%d",&n);if(n==0){return 0;}}printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");p=head;while(p!=NULL){printf("%s\t%s\t%s\t%d\t\t%d\t",p->num,p->name,p->sex,p->score,p->QiMosc ore);printf("\n");p=p->next;}printf("/n/n");printf("请输入学号:\n");scanf("%s",y);while(strcmp(t1->num,y)!=0&&t1->next!=NULL){t2=t1;t1=t1->next;}if(strcmp(t1->num,y)==0){if(t1==head){head=t1->next;printf("成功删除!\n");}else{t2->next=t1->next;printf("成功删除!\n");}}else{printf("无此学生!\n");}printf("\n输入0可返回主界面\n");scanf("%d",&n);return head;}}struct Student *xiu(struct Student *head){int n;//int i,j;struct Student *p;p=head;if(p==NULL){printf("\n无学生信息!\n");printf("\n输入0可返回主界面\n");int n;scanf("%d",&n);if(n==0){return 0;}}printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");p=head;while(p!=NULL){printf("%s\t%s\t%s\t%d\t\t%d\t",p->num,p->name,p->sex,p->score,p->QiMosc ore);printf("\n");p=p->next;}struct Student *p1,*p2;char x[20];if(head==NULL){printf("无学生信息!\n");}p1=p2=head;printf("\n请输入要修改人的姓名:");scanf("%s",x);while(strcmp(x,p1->name)!=0&&p1->next!=NULL){p2=p1;p1=p1->next;}if(strcmp(x,p1->name)==0){printf("请填写修改后的信息!\n");printf("请输入学生学号:");scanf("%s", p1->num);printf("请输入学生姓名:");scanf("%s", p1->name);printf("请输入学生性别:");scanf("%s", p1->sex);printf("请输入学生平时成绩:");scanf("%d", &p1->score);printf("请输入学生期末成绩:");scanf("%d", &p1->QiMoscore);}printf("\n修改成功!\n");printf("\n输入0可返回主界面\n");scanf("%d",&n);return head;}void write(struct Student *p0) //写入文件{int m = 0, n = 0;// printf("\n本次无新学生信息存储!!!\n");FILE *fp;if(p0 == NULL){printf("\n\n\n存储信息为空!!!\n");if ((fp = fopen("stu.dat", "wb+")) == NULL) {printf("\n\n\n删除存储文件失败!!!\n");exit(0);}return;}if ((fp = fopen("stu.dat", "wb+")) == NULL){printf("\n\n\n文件打开失败!!!\n");return;}do{if ((fwrite(p0, sizeof(struct Student), 1, fp) != 1)) printf("\n\n\n文件写入失败!!!\n");else n++;p0 = p0->next;m++;} while (p0 != NULL );printf("\n\n\n应写入%d名学生信息,已写入%d名学生的信息!!!\n", m, n); fclose(fp);}struct Student *read() // 读取链表{// printf("\n本次读取学生信息!!!\n");struct Student *p0, *p1, *head;FILE *fp;if ((fp = fopen("stu.dat", "rb+")) == NULL){printf("\n\n\n文件打开失败!!!\n");return NULL;}rewind(fp);head = p0 = p1 = (struct Student*)malloc(1 * sizeof(struct Student)); if (p1 == NULL){printf("\n内存开辟失败!\n");return 0;}do{//p0=p2->next;p1->next = p0;p1 = p0;if ((fread(p1, sizeof(struct Student), 1, fp) != 1)){printf("\n\n\n文件为空,请先存入信息再读取!!!\n\n\n");return NULL;}p0 = (struct Student*)malloc(1 * sizeof(struct Student));if (p0 == NULL){printf("\n内存开辟失败!\n");return 0;}} while (p1->next != NULL );p1->next = NULL;free(p0);fclose(fp);return head;}int choose(struct Student *p1) //功能菜单选择{struct Student *head;int i;p1 = NULL;head = NULL;printf("\t\t\t***********************************\n");printf(" \n"); printf(" \t\t\t 学生信息管理系统 \n"); printf(" \n"); printf("\t\t\t***********************************\n");printf(" \t\t\t\t 1 输入学生信息\n");printf(" \t\t\t\t 2 查询学生信息\n");printf(" \t\t\t\t 3 删除学生信息\n");printf(" \t\t\t\t 4 修改学生信息\n");printf(" \t\t\t\t 5 输出学生信息\n");printf(" \t\t\t\t 6 排序学生信息\n");printf("\n");printf("\n\t\t\t \t\t 请输入所选择的操作:");scanf("%d", &i);switch (i){//只要有关于改动学生信息的操作都要经过write函数重新写入文件!! case 1:system("cls");head = read();head = creat(head);write(head);system("cls");break;case 2:system("cls");head = read();cha(head);system("cls");break;case 3:system("cls");head = read();head = shan(head); write(head);system("cls");break;case 4:system("cls");head = read();//all(head);head = xiu(head); write(head);system("cls");break;case 5:system("cls");head = read();shuchu(head);system("cls");break;case 6:system("cls");head = read();paixu(head);system("cls");break;break;}return 1;}int main(){struct Student *p1 = NULL; while(choose(p1))//一直调用 {}return 0; }。

相关文档
最新文档