教师教学管理系统实验报告
管理信息系统实验报告范文

管理信息系统实验报告范文管理信息系统实验报告范文「篇一」一、实验目的1、能够正确运用系统分析的过程与方法,结合一个自选MIS项目,复习、巩固MIS分析的目的、MIS分析的内容、MIS分析方法和工具,提高系统分析实践能力。
2、熟悉业务流程图、数据流程图、数据字典的绘制。
3、熟悉Rational Rose工具的使用, 熟悉UML在MIS分析中的应用。
4、树立正确的系统分析思想,培养分析问题、解决问题的能力。
二、实验内容1、根据所述系统功能需求,开展实地调查或通过Internet查阅相关资料或结合个人经验,进行系统分析。
2、明确管理业务调查过程和方法,包括所选管理系统典型组织机构、管理功能及业务流程,优化并以图形建模。
3、明确数据流程的调查与分析过程,绘制数据流程图,编制数据字典。
4、学会使用Rational Rose软件来进行系统分析,使用UML描述分析系统的用例图、概念类图、顺序图、合作图、活动图和状态图。
三、操作步骤系统分析系统运行为C/S+B/S模式,包括图书的采访、编目、流通、查询、期刊管理、系统管理、字典管理、WEB检索与发布等八个子系统,内含操作员权限管理、读者管理、著者管理、出版社管理、图书分类管理、书商管理、订单管理,附带在线帮助系统和多媒体功效,具有技术先进、功能完备、用户友好、可靠性强、安全性高、扩展性强、适用于多操作系统和经济实用等特点。
系统同时支持Client/Server和Internet两种环境,能够适应图书馆自动化、网络化管理的需求。
图书馆管理系统系统特点:①系统采用客户机/服务器(Client/Server) + 浏览器/服务器(Browser/Server)模式,所有信息均存放在数据库服务器上,各客户机通过网络与数据库服务器通讯,WEB 服务通过ADO 模型访问数据库服务器,数据与应用安全地隔离,可确保数据存放的安全性。
② 开放的数据库结构,可让用户完成扩展功能,数据存储的可靠性和安全性提供了全面有效的保护。
教师教学实验报告范文

教师教学实验报告范文一、引言教师是社会的灵魂工程师,对于学生的教育和成长起着至关重要的作用。
为了提高教学质量和效果,不断探索新的教学方法和手段是每位教师的职责所在。
本篇教师教学实验报告将介绍我在新课程改革背景下,利用互动教学法进行语文教学的实践经验。
二、背景新课程改革强调学生的主体地位和能力培养,要求教师在教学中更多地注重学生的主动参与和自主学习。
因此,我选择了互动教学法,希望通过创设具有情境性、参与性和互动性的教学环境,提高学生的学习积极性和主动性。
三、教学目标本次教学的目标是培养学生的语文阅读能力和思维能力,通过阅读增进学生对文本的理解和表达能力,培养学生的语言表达能力和创造力。
四、教学内容本次教学的内容是一篇经典散文《红楼梦》中的片段。
通过对该片段的阅读和探讨,培养学生对文学作品的理解和欣赏能力。
五、教学设计1. 激发学生兴趣:通过展示精心准备的图片和音频,引发学生的好奇心和兴趣,激发他们对文本的阅读欲望。
2. 合作探究:将学生分为小组,每个小组负责一部分内容的阅读和解析,然后交流合作,共同完成整个片段的理解。
3. 提问引导:通过提出开放性问题,引导学生自主思考和探究,激发他们的思维和创造力。
4. 实践应用:通过角色扮演和小组讨论,让学生将文本中的角色和情节置身于现实中,激发他们的想象力和创造力。
六、教学过程1. 导入与激发:通过展示与文本有关的图片和音频,引起学生的兴趣和好奇心。
2. 小组阅读与探究:将学生分为小组,每个小组负责一部分内容的阅读和解析,并记录下自己的理解和问题。
3. 小组交流与合作:小组成员之间交流和讨论各自的理解和问题,共同解决困惑和疑问。
4. 整体共同理解:各小组派代表上台分享自己的理解和问题,其他小组成员进行追问和补充,达成共识。
5. 提问引导与思考:提出开放性问题,引导学生进行思考和探究,激发他们的思维和创造力。
6. 角色扮演与小组讨论:学生扮演文本中的角色,进行情景模拟和小组讨论,培养学生的想象力和表达能力。
教室管理实验报告总结

教室管理实验报告总结本次教室管理实验的目的是帮助我们理解和掌握教室管理的重要性,并通过实践来提升我们的管理能力。
在本次实验中,我担任了教室代理管理者的角色,并进行了一系列的管理操作和决策。
首先,我认识到教室管理对于一个良好的学习和工作环境的重要性。
通过对教室进行整理和布置,我提高了教室的组织性和美观度,从而增强了学生的学习动力。
我注意到,在整理教室时,每个物品都应有固定的存放位置,以便于日后寻找和使用。
同时,在教室内设置了一张公告板,用于传达重要信息和布置学习任务,以提高学生的工作效率。
其次,我意识到管理者的角色在组织和协调教室中的重要性。
我与其他同学合作,制定了一份教室使用规则,明确了学生们在教室中的行为准则和责任。
在教室管理过程中,我及时跟进学生的学习进度,鼓励并指导他们完成学习任务。
我还利用一些协作工具,如共享文档和在线日程安排,与其他同学保持及时的沟通和协作,以便更好地组织教室活动。
此外,我还学会了灵活应对各种情况并解决问题的能力。
在实践中,我遇到了一些教室管理方面的挑战,如学生之间的冲突、设备故障等。
我学会了冷静分析问题的根源,并采取相应的措施来解决问题。
例如,在学生冲突发生时,我采用了调解和倾听的方式,帮助学生们找到解决问题的方法。
在设备故障的情况下,我及时联系维修人员,并寻找其他替代方案,以确保教室的正常运转。
综上所述,通过参与教室管理实验,我深刻认识到教室管理的重要性以及管理者的角色和技能。
我学会了组织和布置教室、协调学生活动、解决问题的能力,并通过实践锻炼了这些技能。
这次实验对于我未来的管理工作和个人发展具有重要意义,我会继续努力提升自己的管理能力,为创造一个良好的学习和工作环境做出贡献。
教师教学实验报告

教师教学实验报告一、引言本实验报告对教师的教学实验进行了详细的记录和分析。
通过设计实验课程、实施教学、收集学生反馈和自我评估等过程,旨在改进教学策略和提升教学效果。
二、实验目的本次实验旨在探索有效的教学方法,提高学生的学习兴趣,促进他们的学术表现和综合素质的提升。
三、实验设计和执行1. 实验课程安排:本实验以高中数学课为对象,利用互动式授课、小组讨论和案例分析等教学方式,培养学生的自主学习能力和创新思维。
2. 实施教学:通过提前准备教案,安排合理的教学内容和顺序,保证教学流程的连贯性和完整性。
在实际教学过程中,注重与学生的互动,引导学生主动思考和解决问题。
同时,在课堂上充分利用多媒体教学,并鼓励学生积极参与课堂活动。
3. 学生反馈:在教学结束后,对学生进行了匿名问卷调研,收集了他们对这次实验课程的评价和建议。
学生的反馈对于我改进教学方法和提升教学质量具有重要意义。
4. 自我评估:通过观察课堂表现、听取学生反馈和进行教学录像回放等方式,对自己的教学过程进行评估和总结。
重点关注教学效果、学生参与度和教学内容的适应性等方面。
四、实验结果与分析1. 学生反馈结果:学生对本次实验课程的评价普遍较高,认为实验课程的设置新颖,能够激发他们的学习兴趣和深入思考。
他们认为老师的教学方式互动性强,课堂气氛活跃,有助于他们更好地理解和掌握知识。
同时,学生也提出了一些建议,如增加实践环节、增加案例分析的难度等,以进一步提高学生的参与度和学习效果。
2. 自我评估结果:通过观察和分析,我意识到自己在教学过程中的互动性和引导学生解决问题的能力方面做得比较好。
但是我也发现了一些不足之处,如教学内容的安排不够合理、教学资源的利用不够充分等。
基于这些问题,我将进一步完善课程设置和准备教材,以提高教学效果。
五、实验总结与改进通过本次教学实验,我认识到了教学过程中的优点和不足之处。
在今后的教学中,我将结合学生反馈和自我评估的结果,继续探索适合学生的教学方法,提高效率和效果。
教师教学实验报告

教师教学实验报告引言:教师教学实验是一个关于教师教学的研究活动,旨在改进教师的教学方法和提高学生的学习效果。
本文将从准备工作、实施过程、数据分析和总结四个方面,介绍一次教师教学实验的经过和心得体会。
一、准备工作:在进行教师教学实验之前,我们需要做一些准备工作。
首先,需要明确实验的目的和研究问题,确定实验的参与学生群体和教学内容。
其次,需要制定实验方案,包括具体的教学方法和实验流程。
同时,还需要收集相关资料和准备实验所需的教学材料和设备。
最后,需要进行实验前的调查和问卷调查,了解学生的学习情况和掌握基础知识的程度,以便更好地设计实验。
二、实施过程:实验的实施过程是整个教学实验的关键环节。
在实施过程中,我们需要根据实验方案进行教学,采用不同的教学方法,如讲授、讨论、实验等,激发学生的学习兴趣和主动性。
同时,我们还需要注意教学环境的创设,保证教学效果的最大化。
在实施过程中,我们还要不断地进行观察和记录,收集数据和材料,以便后续分析和评估。
三、数据分析:在教师教学实验的数据分析过程中,我们需要对实验结果进行统计和分析。
根据学生的表现和学习情况,我们可以对教学效果进行评估,并对教学方法进行调整和改进。
同时,我们还可以通过对数据的分析,发现学生的学习问题和困难,为后续的教学提供参考和指导。
四、总结:通过一次教师教学实验的经验,我深刻体会到了教师教学实验的重要性和意义。
在实验过程中,我不仅收获了教学经验和技巧,也提高了自身的教学能力和水平。
同时,我还从实验中发现了自身的不足和教学改进的方向。
因此,我将继续进行教师教学实验,并不断提高自己的教学水平,为学生成长和发展做出更大的贡献。
总结:教师教学实验是一项旨在改进教学方法和提高学生学习效果的研究活动。
通过准备工作、实施过程、数据分析和总结四个步骤,教师可以不断提高自己的教学水平,并为学生成长和发展做出更大的贡献。
教师教学实验的重要性和意义不可忽视,希望更多的教师能够积极参与教学实验,并不断完善自己的教学方法和教学效果。
学籍管理系统_实验报告

随着教育信息化的发展,传统的手工学籍管理方式已经无法满足现代教育管理的需求。
为了提高学籍管理工作的效率和准确性,我们设计并实现了学籍管理系统。
本实验旨在通过实际操作,熟悉学籍管理系统的开发流程,掌握数据库设计、前端界面设计、后端逻辑处理等技能,并提升对教育信息化的认识。
二、实验内容与步骤1. 需求分析- 确定系统功能模块:学生信息管理、课程信息管理、成绩信息管理、查询统计、系统维护等。
- 分析用户需求:管理员、教师、学生等不同角色的操作需求。
2. 数据库设计- 设计学生信息表(学号、姓名、性别、出生日期、民族、政治面貌等)。
- 设计课程信息表(课程编号、课程名称、学分、开课学院等)。
- 设计成绩信息表(学号、课程编号、成绩等)。
- 设计教师信息表(教师编号、姓名、性别、职称等)。
3. 前端界面设计- 使用HTML、CSS、JavaScript等技术设计用户界面。
- 实现用户登录、菜单导航、数据录入、查询统计等功能。
4. 后端逻辑处理- 使用Java、Python等编程语言实现业务逻辑。
- 实现数据存储、查询、更新、删除等功能。
- 实现权限控制、数据备份与恢复等功能。
5. 系统测试- 进行单元测试、集成测试、系统测试等。
- 检查系统功能、性能、稳定性等方面是否符合要求。
1. 系统功能实现- 学生信息管理:可以录入、修改、删除学生信息,实现对学生信息的查询和统计。
- 课程信息管理:可以录入、修改、删除课程信息,实现对学生课程学习的统计和分析。
- 成绩信息管理:可以录入、修改、删除成绩信息,实现对学生成绩的查询和分析。
- 查询统计:可以按照学号、姓名、课程名称等条件查询学生信息、课程信息、成绩信息,并生成报表。
- 系统维护:可以修改用户密码、备份与恢复数据等。
2. 系统性能分析- 系统响应时间较短,用户操作流畅。
- 数据库存储效率较高,查询速度快。
- 系统稳定性良好,运行过程中未出现崩溃现象。
3. 系统优化建议- 优化数据库索引,提高查询效率。
学校管理系统实验报告(3篇)

第1篇一、实验目的本次实验旨在通过设计和实现一个学校管理系统,提高学校管理工作的效率和质量。
通过本实验,学生能够掌握数据库的基本操作、编程语言的使用以及系统设计的流程,从而培养学生的实际操作能力和综合应用能力。
二、实验内容1. 需求分析- 确定系统功能:包括学生信息管理、教师信息管理、课程信息管理、成绩管理、教务管理等。
- 确定系统用户:包括学生、教师、教务管理员等。
2. 系统设计- 数据库设计:设计学生表、教师表、课程表、成绩表等。
- 界面设计:设计用户登录界面、学生信息管理界面、教师信息管理界面等。
3. 系统实现- 数据库实现:使用MySQL数据库创建数据库和表。
- 编程实现:使用Java或Python等编程语言编写系统代码。
- 界面实现:使用Swing或Tkinter等图形界面库设计用户界面。
4. 系统测试- 功能测试:测试各个功能的正确性和稳定性。
- 性能测试:测试系统在高并发情况下的性能表现。
- 安全测试:测试系统的安全性,防止非法用户访问。
三、实验步骤1. 需求分析阶段- 通过查阅相关资料,了解学校管理的基本流程和需求。
- 与学校管理人员沟通,确定系统需要实现的功能。
2. 系统设计阶段- 使用E-R图或数据库设计工具设计数据库结构。
- 设计系统界面原型,确定用户界面布局。
3. 系统实现阶段- 使用数据库设计工具创建数据库和表。
- 使用编程语言编写系统代码,实现各个功能模块。
- 使用图形界面库设计用户界面。
4. 系统测试阶段- 编写测试用例,对系统进行功能测试、性能测试和安全测试。
- 根据测试结果,对系统进行修改和完善。
四、实验结果1. 系统功能实现- 学生信息管理:包括学生信息的增删改查、成绩查询、班级管理等。
- 教师信息管理:包括教师信息的增删改查、课程安排等。
- 课程信息管理:包括课程信息的增删改查、选课管理等。
- 成绩管理:包括成绩的录入、查询、统计等。
- 教务管理:包括教务工作的安排、通知发布等。
管理信息系统实验报告范文(通用5篇)

管理信息系统实验报告范文管理信息系统实验报告范文一、实验报告的定义实验报告是在科学研究活动中人们为了检验某一种科学理论或假设,通过实验中的观察、分析、综合、判断,如实地把实验的全过程和实验结果用文字形式记录下来的书面材料。
二、管理信息系统实验报告范文(通用5篇)在经济飞速发展的今天,报告的用途越来越大,我们在写报告的时候要注意涵盖报告的基本要素。
那么什么样的报告才是有效的呢?以下是小编为大家收集的管理信息系统实验报告范文(通用5篇),希望能够帮助到大家。
管理信息系统实验报告1一、实验目的理解管理信息系统的组成和结构,管理信息系统的分类,管理信息系统的功能,管理信息系统的应用。
二、实验内容能通过因特网查询管理信息系统的应用介绍文档;查询管理信息系统在某企业或组织应用的案例。
(1)分析管理信息系统应用文档的组成;(2)分析所调查的管理信息系统案例的功能特点;(3)能对所调查的管理信息系统案例的应用进行分类;(4)分析所调查的管理信息系统案例所采用的技术;(5)总结并阐述你对管理信息系统的理解;(6)结合自己的生活学习实际,拟定一个管理信息系统应用项目。
三、操作步骤中国石油化工集团公司,Sinopec Group的管理信息系统应用案例:中国石化财务管理信息系统是为满足其各层单位的财务核算与管理需求而建立的财务管理信息系统。
该系统运行在各层单位财务核算部门,通过不同档次的服务器构架起总部与各炼油、化工分公司、子公司及生产厂的财务管理逻辑网;总部与各油田分公司、子公司及生产厂的财务管理逻辑网;总部与各省(市)、地、县石油公司的财务管理逻辑网三条主干网络,以实现符合国际会计准则的财务管理核算、科学决策和在线查询、对帐体系。
(1)管理信息系统应用文档的组成:中国石化财务管理信息系统采用客户机/服务器结构,服务器主要处理网络用户的请求并完成数据的处理统计,因此对服务器可用性、可靠性上提出了极高的要求,以保证数据的完整性和系统连续运作的能力;要求服务器具有强大的处理能力,以实现前端用户的流畅访问和本地数据的迅速统计处理;同时服务器应具有一定的扩展能力,以便用户能够根据业务的增长方便地升级系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通达学院程序设计报告( 2014 / 2015 学年第一学期)题目:教师教学工作管理系统专业学生姓名班级学号指导教师指导单位日期2014—12—17评分细则评分项成绩遵守机房规章制度(5分)上机时的表现(5分)学习态度(5分)程序准备情况(5分)程序设计能力(10分)团队合作精神(5分)课题功能实现情况(10分)算法设计合理性(10分)用户界面设计(10分)报告书写认真程度(5分)内容详实程度(10分)文字表达熟练程度(10分)回答问题准确度(10分)评分等级备注评分等级有五种:优秀、良好、中等、及格、不及格学生管理系统一、课题内容和要求请使用C/C++编写一系统,实现教师教学工作管理,软件的入口界面应包括如下几个方面。
(一)功能要求(1)基本信息维护要求:教师以及教学工作信息数据以文件的形式保存,能实现教师信息以及教学工作的维护。
此模块包括子模块有:增加教师信息,删除教师信息,修改教师信息。
(2)教学工作信息管理维护要求:1)输入/修改/删除教师上课信息,包括课程名称,任课教师,职称,上课时间,选课学生人数,课程编号,课程类型,课时数,并根据这些信息计算该课程的业绩点数(有相关公式)。
2)输入/修改/删除教师毕设信息,所带毕设学生名、学号、课题类型、课题名称、毕设总周数、指导教师信息,根据这些信息计算毕设工作业绩点数。
3)教学绩点统计:要求:输入教师姓名和时间,统计其在该时间内的所有教学工作信息。
统计所有教师指定学年内所有的业绩点,并按照由高到低进行排序。
(二)其他要求(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读。
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新模块。
二、需求分析系统管理模块,学生基本信息管理模块,课程管理模块,学生成绩管理模块和教工日常管理模块。
数据的操作主要是:数据添加、数据修改、数据查询。
三、概要设计四、详细设计#include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h>#define LEN sizeof(struct teacher)//宏定义结构体字节数 int n=0;struct teacher//定义结构体 {long num;//教师号 char name[20];//姓名 char sex[5];//性别 int age;//年龄char edu[20];//学历 char title[20];//职称 long wage;//工资char addr[100];//地址 char telep[15];//电话struct teacher *next;//指向下一个结点 }*head=NULL;教师日常教学管理系统基本情况所带毕业设计系统管理课程管理学生基本信息学生成绩管理教师日常信息注册新用户用户登录退出基本课程设置班级课程设置学生基本信息的录入成绩管理成绩查询成绩分析教工基本情况科研业务情况void key()//口令检查的函数{int i;long a;for(i=0;i<3;i++){printf("请输入口令(还可输入%d次):\n",3-i);scanf("%ld",&a);if(a==123456)//检查口令是否正确{printf("欢迎进入系统\n");break;}else printf("口令错误\n");}if(i==3)//判断可以输入口令的次数是否用完{printf("可使用的口令输入次数已用完,将自动退出!\n");exit(0);}}void save()//把数据存入文件的函数{FILE *fp;int i;char filename[20];struct teacher *p;printf("\n 是否把此次登录系统录入和修改后的教师信息保存到文件中\n");printf(" 1:【是】0:【否】\n 请选择:");scanf("%d",&i);while((i!=0)&&(i!=1))//判断输入的选择是否有效{printf("选择无效,请重新输入正确选项:");scanf("%d",&i);}if(i==1)//判断是否选择了要保存{printf("\n请输入要保存数据的文件名:");scanf("%s",filename);if((fp=fopen(filename,"wb"))==NULL){printf("\n无法打开文件\n");exit(0);}for(p=head;p!=NULL;p=p->next)if(fwrite(p,sizeof(struct teacher),1,fp)!=1)printf("\n此处数据有误\n");fclose(fp);}exit(0);}void read()//从文件读出数据的函数{struct teacher teach[299],temp;int i=0;FILE *fp;char filename[20];printf("\n请输入存有教师信息的文件名:");scanf("%s",filename);if((fp=fopen(filename,"rb"))==NULL){printf("\n无法打开文件\n");exit(0);}fseek(fp,-sizeof(struct teacher),2);/*将位置指针从文件末尾后退一个结构体的字节数*/fread(&temp,sizeof(struct teacher),1,fp);/*从所指向的文件中读出数据存储到结构体变量temp中*/fseek(fp,0,0);//将位置指针移到文件的开头if(fread(&teach[i],sizeof(struct teacher),1,fp)==1)/*判断文件开头读入的数据是否为空*/{printf("\n存有的教师信息如下:\n");while(teach[i].num!=temp.num)//进行循环读取文件{printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,",teach[i].num,teach[i].name,teach[i].sex,teach[i].age,teach[i].edu);printf("职称:%s\n 月薪:%ld,住址:%s,电话:%s\n",teach[i].title,teach[i].wage,teach[i].addr,teach[i].telep);i=i+1;fread(&teach[i],sizeof(struct teacher),1,fp);/*从文件中读入数据存储到结构体变量teach【i】中*/}//输出文件中的最后一个信息printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,",teach[i].num,teach[i].name,teach[i].sex,teach[i].age,teach[i].edu);printf("职称:%s\n 月薪:%ld,住址:%s,电话:%s\n",teach[i].title,teach[i].wage,teach[i].addr,teach[i].telep);fclose(fp);}else printf("该文件中无教师信息\n");//文件为空时输出此处}void creat()//录入教师信息的函数{struct teacher *p1,*p2,*p3;p1=p2=(struct teacher *)malloc(LEN);/*申请一个结构体字节数的空间用来存储一个教师的信息*/printf("请输入一位教师的教师号(结束录入请输入0):");scanf("%ld",&p1->num);if(p1->num!=0)//判断用户是要结束录入还是要存储信息if(head==NULL) head=p1;/*判断链表是否为空,是则将链表头指向p1*/else //链表不为空则将链表尾指向p1{p3=head;//p3用来记录链表的尾部while(p3->next!=NULL)/*若p3不是链表尾则将p3指向下一个结点*/p3=p3->next;p3->next=p1;//将最后一个结点指向p1}while(p1->num!=0)//判断用户是否结束录入功能{//录入该教师号的教师对应的信息printf("姓名: ");scanf("%s",p1->name);printf("性别:");scanf("%s",p1->sex);printf("年龄:");scanf("%d",&p1->age);printf("学历:");scanf("%s",p1->edu);printf("职称:");scanf("%s",p1->title);printf("月薪:");scanf("%ld",&p1->wage);printf("住址:");scanf("%s",p1->addr);printf("电话:");scanf("%s",p1->telep);n=n+1;//给统计录入的教师数n加一/*判断是否为第一个录入的信息,是则将链表头指向p1,否则将p2指向p1*/ if(n==1) head=p1;else p2->next=p1;p2=p1;//p2用来记录链表的最后一个结点p1=(struct teacher *)malloc(LEN);//重新申请空间printf("请输入一位教师的教师号(结束录入请输入0): ");scanf("%ld",&p1->num);}p2->next=NULL;//将最后一个结点指向空}void print()//输出教师信息的函数{struct teacher *p;int i;p=head;if(head!=NULL)//判断链表是否为空{printf("\n这%d位教师的信息为:\n",n);do{printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%s\n",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪:%ld,住址:%s,电话:%s\n",p->wage,p->addr,p->telep);p=p->next;//将下一个结点的首地址赋给p}while(p!=NULL);//到链表尾时结束循环}else//链表为空时执行以下部分{printf("\n你此次登录系统还没有录入教师信息,可进行以下操作:\n");printf(" 1:【浏览以前保存在文件中的教师信息】2:【开始录入教师信息】\n");printf(" 3:【退出系统】4:【返回菜单】\n");printf("请选择:");scanf("%d",&i);while((i<1)&&(i>4)){printf("选择无效,请重新输入正确选项:");scanf("%d",&i);}if(i==1) read();//调用从文件读取数据的函数if(i==2) creat();//调用录入信息的函数if(i==3) exit(0);//退出系统}}void del()//删除教师信息的函数{struct teacher *p1,*p2;long i;if(head==NULL)//判断链表是否为空{printf("\n还未录入过教师信息\n");//链表为空时输出return;}printf("请输入要删除教师信息的教师号:");scanf("%ld",&i);p1=head;while(i!=p1->num)//直到p1指向的结点是要删除的信息位置{if(p1->next==NULL) break;//p1的下个结点为空则退出循环p2=p1;//p2用来记录p1的前一个结点p1=p1->next;//p1指向下一个结点}if(i==p1->num)//判断p1是否为要删除的信息{if(p1==head) head=p1->next;/*若p1为头结点则将头指针指向p1的下一个结点*/else p2->next=p1->next;/*p1非头结点则将p1后面的结点连接到p1前一个结点的后面*/printf("\n已删除教师号为%ld的教师信息\n",i);n=n-1;//记录教师数的n要减一}//p1不是要删除的信息则表示要删除的信息不再链表中else printf("\n已录入的教师信息中没有教师号为%ld的\n",i);return;}void sort1()//按教师号进行排序的函数{struct teacher *p1,*p2,*p3,*p4;int i,j;if(head==NULL){printf("\n还未录入过教师信息\n");return;}if(head->next!=NULL) //判断是否只有一个信息{//用冒泡法排序p1=head;//p1记录用来比较的两个结点中的前面一个p2=head->next;//p2记录比较的两个结点中的后面个for(i=1;i<n;i++)//实现n-1趟比较的外循环{for(j=0;j<n-i;j++)//在每一趟中进行n-i次比较的内循环{if(p1->num>p2->num)/*比较相邻两个结点中教师号大小*/{//当p1的教师号大时则对调两个结点的位置if(p1==head) head=p2;else p3->next=p2;/*p1为头结点时则将头指针指向p2,否则就将p2连接到用来记录p1前一个结点的p3的后面*/p4=p2->next;//p4用来记录p2后面的结点p2->next=p1;//p1的结点换到原来p2的位置p1->next=p4;//原来p2后面的结点连接到p1p3=p2;//p3记录下p2的位置p2=p4;//p2指向原来位置的下一个结点}else/*p1中教师号没有打过p2中教师号,则将p1,p2都指向它们各自位置的下一个结点*/{p3=p1;//记录p1后移一位后它前个结点的位置p1=p2;p2=p2->next;}}p1=head;//p1指向链表头,开始下一趟外循环的准备p2=p1->next;//p2指向链表第二个结点}}printf("\n按教师号排序后的教师信息如下:\n");print();//调用教师信息浏览函数}void sort2()//按月薪排序的函数,算法跟按教师号排序的一样{struct teacher *p1,*p2,*p3,*p4;int i,j;if(head==NULL){printf("\n还未录入过教师信息\n");return;}if(head->next!=NULL){p1=head;p2=head->next;for(i=1;i<n;i++){for(j=0;j<n-i;j++){if(p1->wage>p2->wage){if(p1==head) head=p2;else p3->next=p2;p4=p2->next;p2->next=p1;p1->next=p4;p3=p2;p2=p4;}else{p3=p1;p1=p2;p2=p2->next;}}p1=head;p2=p1->next;}}printf("\n按月薪排序后的教师信息如下:\n");print();}void sort3()//按年龄排序的函数,算法跟按教师号排序的一样{struct teacher *p1,*p2,*p3,*p4;int i,j;if(head==NULL){printf("\n还未录入过教师信息\n");return;}if(head->next!=NULL){p1=head;p2=head->next;for(i=1;i<n;i++){for(j=0;j<n-i;j++){if(p1->age>p2->age){if(p1==head) head=p2;else p3->next=p2;p4=p2->next;p2->next=p1;p1->next=p4;p3=p2;p2=p4;}else{p3=p1;p1=p2;p2=p2->next;}}p1=head;p2=p1->next;}}printf("\n按年龄排序后的教师信息如下:\n");print();}void choose1()//选择排序方式的函数{int i;printf(" 排序方式\n");printf(" 1:【按教师号排序】2:【按年龄排序】\n");printf(" 3:【按月薪排序】\n");printf("请选择:");scanf("%d",&i);while((i<1)||(i>3)){printf("选择无效,请重新输入正确选项:");scanf("%d",&i);}switch(i){case 1:sort1();break;case 2:sort3();break;case 3:sort2();break;}}void search1()//按教师号查找的函数{struct teacher *p;long i;//存储用户输入的想要删除的教师号if(head==NULL){printf("\n还未录入过教师信息\n");return;}printf("请输入要查找的教师信息的教师号:");scanf("%ld",&i);for(p=head;p!=NULL;p=p->next)//p顺序指向结点与i比较,找出有i的数据的结点并输出if(p->num==i){printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%s\n",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪:%ld,住址:%s,电话:%s\n",p->wage,p->addr,p->telep);return;}printf("已录入的教师信息中不存在该教师号\n");}void search2()//按姓名查找的函数{struct teacher *p;char i[20];//记录用户输入的想要删除的姓名int j=0;//j用来记录找到了多少个信息if(head==NULL){printf("\n还未录入过教师信息\n");return;}printf("请输入要查找的信息的教师姓名:");scanf("%s",i);for(p=head;p!=NULL;p=p->next)if(strcmp(p->name,i)==0)//比较p指向的结点中的姓名跟i的是否一致,是则输出{printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%s\n",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪:%ld,住址:%s,电话:%s\n",p->wage,p->addr,p->telep);j=j+1;//每输出一个教师的信息则j加一}if(j==0) printf("已录入的教师信息中不存在该姓名的教师\n");}void search3()//按职称查找的函数,算法与按姓名查找的一样{struct teacher *p;char i[20];int j=0;if(head==NULL){printf("\n还未录入过教师信息\n");return;}printf("请输入要查找的信息的教师职称:");scanf("%s",i);for(p=head;p!=NULL;p=p->next)if(strcmp(p->title,i)==0){printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%s\n",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪:%ld,住址:%s,电话:%s\n",p->wage,p->addr,p->telep);j=j+1;}if(j==0) printf("已录入的教师信息中不存在该职称的教师\n");}void search4()//按年龄查找的函数,算法与按教师号查找的一样{struct teacher *p;int i,j=0;if(head==NULL){printf("\n还未录入过教师信息\n");return;}printf("请输入要查找的信息的教师年龄:");scanf("%d",&i);for(p=head;p!=NULL;p=p->next)if(p->age==i){printf("教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%s\n",p->num,p->name,p->sex,p->age,p->edu,p->title);printf(" 月薪:%ld,住址:%s,电话:%s\n",p->wage,p->addr,p->telep);j=j+1;}if(j==0) printf("已录入的教师信息中不存在该年龄的教师\n");}void choose2()//选择查找方式的函数{int i;printf(" 查询方式\n");printf(" 1:【按教师号查询】2:【按姓名查询】\n");printf(" 3:【按职称查询】4:【按年龄查询】\n");printf("请选择:");scanf("%d",&i);while((i<1)||(i>4)){printf("选择无效,请重新输入正确选项:");scanf("%d",&i);}switch(i){case 1:search1();break;case 2:search2();break;case 3:search3();break;case 4:search4();break;}}void menu()//菜单栏函数{int i;printf(" 菜单\n");printf(" 1:【教师信息录入】2:【教师信息输出】\n");printf(" 3:【教师信息删除】4:【查询个人信息】\n");printf(" 5:【排序】6:【退出系统】\n");printf("请选择: ");scanf("%d",&i);while((i<1)||(i>6)){printf("选择无效,请重新输入正确选项:");scanf("%d",&i);}switch(i){case 1:creat();break;case 2:print();break;case 3:del();break;case 4:choose2();break;case 5:choose1();break;case 6:save();}menu();}int shoudsave=0; /* */struct student{char num[10];/* 学号*/char name[20];char sex[4];int cgrade;int mgrade;int egrade;int totle;int ave;char neartime[10];/* 最近更新时间*/};typedef struct node{struct student data;struct node *next;}Node,*Link;void smenu(){printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");printf("\t5显示学生资料\t\t\t\t\t6统计学生资料\n");printf("\t7排序语文成绩\t\t\t\t\t8排序数学成绩\n");printf("\t9排序英语成绩\t\t\t\t\t10选出分段分数\n");printf("\t11保存学生资料\t\t\t\t\t12帮助信息\t\t\n");printf("\t0退出系统\t\t\t\t\t\t\t\n");printf("*************************************************************** *****************\n");}void printstart(){printf("-----------------------------------------------------------------------\n");}void Wrong()printf("\n=====>提示:输入错误!\n");}void Nofind(){printf("\n=====>提示:没有找到该学生!\n");}void printc() /* 本函数用于输出中文*/{printf("学号\t 姓名\t 性别语文成绩数学成绩英语成绩总分平均分\n");}void printe(Node *p)/* 本函数用于输出英文*/{printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->,p->data. sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);}Node* Locate(Link l,char findmess[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针*/{Node *r;if(strcmp(nameornum,"num")==0) /* 按学号查询*/{r=l->next;while(r!=NULL){if(strcmp(r->data.num,findmess)==0)return r;r=r->next;}}else if(strcmp(nameornum,"name")==0) /* 按姓名查询*/{r=l->next;while(r!=NULL){if(strcmp(r->,findmess)==0)return r;r=r->next;}return 0;}void Add(Link l) /* 增加学生*/{Node *p,*r,*s;char num[10];r=l;s=l->next;while(r->next!=NULL)r=r->next; /* 将指针置于最末尾*/while(1){printf("请你输入学号(以'0'返回上一级菜单:)");scanf("%s",num);if(strcmp(num,"0")==0)break;while(s){if(strcmp(s->data.num,num)==0){printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);printstart();printc();printe(s);printstart();printf("\n");return;}s=s->next;}p=(Node *)malloc(sizeof(Node));strcpy(p->data.num,num);printf("请你输入姓名:");scanf("%s",p->);getchar();printf("请你输入性别:");scanf("%s",p->data.sex);getchar();printf("请你输入语文成绩:");scanf("%d",&p->data.cgrade);getchar();printf("请你输入数学成绩:");scanf("%d",&p->data.mgrade);getchar();printf("请你输入英语成绩:");scanf("%d",&p->data.egrade);getchar();p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=p->data.totle / 3;/* 信息输入已经完成*/p->next=NULL;r->next=p;r=p;shoudsave=1;}}void Qur(Link l) /* 查询学生*/{int sel;char findmess[20];Node *p;if(!l->next){printf("\n=====>提示:没有资料可以查询!\n");return;}printf("\n=====>1按学号查找\n=====>2按姓名查找\n"); scanf("%d",&sel);if(sel==1)/* 学号*/{printf("请你输入要查找的学号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p){printf("\t\t\t\t查找结果\n");printstart();printc();printe(p);printstart();}elseNofind();}else if(sel==2) /* 姓名*/{printf("请你输入要查找的姓名:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p){printf("\t\t\t\t查找结果\n");printstart();printc();printe(p);printstart();}elseNofind();}elseWrong();}void Del(Link l) /* 删除*/{int sel;Node *p,*r;char findmess[20];if(!l->next){printf("\n=====>提示:没有资料可以删除!\n");return;}printf("\n=====>1按学号删除\n=====>2按姓名删除\n"); scanf("%d",&sel);if(sel==1){printf("请你输入要删除的学号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>提示:该学生已经成功删除!\n"); shoudsave=1;}elseNofind();}else if(sel==2){printf("请你输入要删除的姓名:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>提示:该学生已经成功删除!\n"); shoudsave=1;}elseNofind();}elseWrong();}void Modify(Link l){Node *p;char findmess[20];if(!l->next){printf("\n=====>提示:没有资料可以修改!\n"); return;}printf("请你输入要修改的学生学号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p){printf("请你输入新学号(原来是%s):",p->data.num); scanf("%s",p->data.num);printf("请你输入新姓名(原来是%s):",p->); scanf("%s",p->);getchar();printf("请你输入新性别(原来是%s):",p->data.sex);scanf("%s",p->data.sex);printf("请你输入新的语文成绩(原来是%d分):",p->data.cgrade); scanf("%d",&p->data.cgrade);getchar();printf("请你输入新的数学成绩(原来是%d分):",p->data.mgrade); scanf("%d",&p->data.mgrade);getchar();printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade); scanf("%d",&p->data.egrade);p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;p->data.ave=p->data.totle/3;printf("\n=====>提示:资料修改成功!\n");shoudsave=1;}elseNofind();}void Disp(Link l){int count=0;Node *p;p=l->next;if(!p){printf("\n=====>提示:没有资料可以显示!\n");return;}printf("\t\t\t\t显示结果\n");printstart();printc();printf("\n");while(p){printe(p);p=p->next;}printstart();printf("\n");}void Tongji(Link l){Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点*/ Node *r=l->next;if(!r){printf("\n=====>提示:没有资料可以统计!\n");return ;}pm=pe=pc=pt=pa=r;while(r!=NULL){if(r->data.cgrade>=pc->data.cgrade)pc=r;if(r->data.mgrade>=pm->data.mgrade)pm=r;if(r->data.egrade>=pe->data.egrade)pe=r;if(r->data.totle>=pt->data.totle)pt=r;if(r->data.ave>=pa->data.ave)pa=r;r=r->next;}printf("------------------------------统计结果--------------------------------\n"); printf("总分最高者:\t%s %d分\n",pt->,pt->data.totle);printf("平均分最高者:\t%s %d分\n",pa->,pa->data.ave); printf("英语最高者:\t%s %d分\n",pe->,pe->data.egrade); printf("数学最高者:\t%s %d分\n",pm->,pm->data.mgrade); printf("语文最高者:\t%s %d分\n",pc->,pc->data.cgrade); printstart();}void Chinese(Link l){Link ll;Node *p,*rr,*s;ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表*/ll->next=NULL;if(l->next==NULL){printf("\n=====>提示:没有资料可以排序!\n");return ;}p=l->next;while(p){s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息*/s->data=p->data;s->next=NULL;rr=ll;while(rr->next!=NULL && rr->next->data.egrade>=p->data.egrade) rr=rr->next;if(rr->next==NULL)rr->next=s;else{s->next=rr->next;rr->next=s;}p=p->next;}free(l);l->next=ll->next;printf("\n=====>提示:排序已经完成!\n");}void Maths(Link l) /*对数学排序*/{Link ll;Node *p,*rr,*s;ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表*/ll->next=NULL;if(l->next==NULL){printf("\n=====>提示:没有资料可以排序!\n");return ;}p=l->next;while(p){s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息*/s->data=p->data;s->next=NULL;rr=ll;while(rr->next!=NULL && rr->next->data.mgrade>=p->data.mgrade) rr=rr->next;if(rr->next==NULL)rr->next=s;else{s->next=rr->next;rr->next=s;}p=p->next;}free(l);l->next=ll->next;printf("\n=====>提示:排序已经完成!\n");}void English(Link l) /*对英语排序*/{Link ll;Node *p,*rr,*s;ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表*/ll->next=NULL;if(l->next==NULL){printf("\n=====>提示:没有资料可以排序!\n");return ;}p=l->next;while(p){s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息*/s->data=p->data;s->next=NULL;rr=ll;while(rr->next!=NULL && rr->next->data.cgrade>=p->data.cgrade) rr=rr->next;if(rr->next==NULL)rr->next=s;else{s->next=rr->next;rr->next=s;}p=p->next;}free(l);l->next=ll->next;printf("\n=====>提示:排序已经完成!\n");}void select(Link l){int i;int j,k;Node *pc = l; //用于指向分数最高的接点Node *r=l->next;if(!r){printf("\n=====>提示:没有资料可以筛选!\n");return ;}printf("输入课程名1.语文2.数学3.英语");scanf("%d",&i);if(i==1){printf("请输入筛选分数的上限:");scanf("%d",&j);printf("请输入筛选分数的下限:");scanf("%d",&k);printf("------------------------------筛选结果-----------------------------------------------------------\n");printf("学号\t 姓名\t 性别语文成绩数学成绩英语成绩总分平均分\n");printstart();while(r!=NULL){if(k<=(r->data.egrade)&&(r->data.egrade)<j)printe(r);r=r->next;}}else if(i==2){printf("请输入筛选分数的上限:");scanf("%d",&j);printf("请输入筛选分数的下限:");scanf("%d",&k);printf("------------------------------筛选结果-----------------------------------------------------------\n");printf("学号\t 姓名\t 性别语文成绩数学成绩英语成绩总分平均分\n");printstart();while(r!=NULL){if(k<=(r->data.mgrade)&&(r->data.mgrade)<j)printe(r);r=r->next;}}else if(i==3)printf("请输入筛选分数的上限:");scanf("%d",&j);printf("请输入筛选分数的下限:");scanf("%d",&k);printf("------------------------------筛选结果-----------------------------------------------------------\n");printf("学号\t 姓名\t 性别语文成绩数学成绩英语成绩总分平均分\n");printstart();while(r!=NULL){if(k<=(r->data.cgrade)&&(r->data.cgrade)<j)printe(r);r=r->next;}}elseWrong();}void Save(Link l){FILE* fp;Node *p;int flag=1,count=0;fp=fopen("c:\\student","wb");if(fp==NULL){printf("\n=====>提示:重新打开文件时发生错误!\n");exit(1);}p=l->next;while(p){if(fwrite(p,sizeof(Node),1,fp)==1){p=p->next;count++;}else{flag=0;break;}if(flag){printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count); shoudsave=0;}fclose(fp);}void main(){{key();menu();}void main()//主函数{key();menu();}Link l;/* 连表*/FILE *fp; /* 文件指针*/int sel;char ch;char jian;int count=0;Node *p,*r;printf("\t\t\t\t学生成绩管理系统\n \t\t\t 3106000849\t\t\t\t\n");l=(Node*)malloc(sizeof(Node));l->next=NULL;r=l;fp=fopen("C:\\student","wb");loop:menu();printf("请你选择操作:");scanf("%d",&sel);if(sel==0){if(shoudsave==1){ getchar();printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n");scanf("%c",&ch);if(ch=='y'||ch=='Y')Save(l);}}printf("\n=====>提示:你已经退出系统,再见!\n");return;switch(sel){case 1:Add(l);goto loop;break; /* 增加学生*/case 2:Del(l);goto loop;break;/* 删除学生*/case 3:Qur(l);goto loop;break;/* 查询学生*/case 4:Modify(l);goto loop;break;/* 修改学生*/case 5:Disp(l);goto loop;break;/*显示学生*/case 6:Tongji(l);goto loop;break;/*统计学生*/case 7:Chinese(l);goto loop;break;/*语文排序*/case 8:Maths(l);goto loop;break;/*数学排序*/case 9:English(l);goto loop;break;/*英语排序*/case 10:select(l);goto loop;break;/* 选择分段分数*/case 11:Save(l);goto loop;break;/* 保存学生*/case 12:printf("\t\t\t==========帮助信息==========\n");goto loop;break;}}五、测试数据及其结果分析1.调试调试是软件开发过程中的一个重要环节,也是最复杂,对软件开发者者来说也是最艰巨的任务。