软件课程设计总结报告范文

2023-09-15

软件课程设计总结报告范文第1篇

本项目是将翻转课堂教学理念融入项目式教学, 使学生通过课前对网络课件的自主学习来减少教师课堂讲授时间, 增加学生课堂参与项目实践的时间, 以弥补项目式教学中课堂教学时间紧张的缺陷[1]。学生通过课前观看制作好的课程视频, 初步了解下次课要学的主要内容, 然后带着问题或疑难进入课堂, 变被动听课为主动学习, 这将收到处更好的学习效果。本项目的实施具有较强的理论及实践意义及价值[2]。

(1) 从理论方面, 可以开拓新的视野, 拓展教学模式, 丰富教学方法, 使教学及学习理论更好完善。

(2) 在实践方面, 通过对传统教学方法、教学理念、教学模式、师生主体关系等多方面的改进, 弥补以前课堂教学的单一性、呆板性。同时通过更加活跃的课堂教学方式, 激发学生的创新性、个性化思维, 为培养创新性、应用型人才打下基础。

二、现状分析

《软件工程》是计算机科学与技术专业的一门专业基础课。通过该课程的学习, 强调用工程的思想、概念、原理、技术和方法来开发和维护软件;要求学生了解结构化思想、掌握面向对象方法等软件开发技术, 掌握面向对象的软件需求分析、设计及实现的一般方法, 为今后更深入地学习和从事软件工程实践打下良好的基础。《软件工程》是一门理论性极强的课程, 在本专业内已进行了五年的多轮教学。在2008年首轮课程教学中, 由于授课教师大都只注重知识的传授, 而不重视学生对知识的内化, 出现教学内容枯燥、学生学习积极性差, 教师效果不好, 教师厌烦上该课的情况。后来自2009年开始, 经过本课程组多方改进, 通过多方式、多方法、多手段的教学改革, 如项目式、案例式、引导式教学法, 教学效果有了较大的提升, 但仍存在一些问题。 (1) 讲课内容过于理论化。目前该课程大部分时间仍然是老师讲授理论, 学生被动听课。事实上, 软件工程的理论并不是空洞的理论, 它的许多理论及规范均来自于实际需要和前人的经验总结。但老师往往理论讲得过多, 担心学生没有学够, 结果老师累死了, 学生还不愿意听。 (2) 理论与实践联系不够。教学中存在理论与实践脱节的现象, 没有一个具体的项目串联软件开发的全过程。虽然在讲述一些知识点中, 老师也有对应的项目及案例, 但不系统, 太零散。若能选择一个较为完整的软件开发项目, 围绕该项目讲述软件开发的全过程, 效果将会更好。 (3) 课时压缩严重。《软件工程》原学时数为64学时, 但由于新的培养计划要求, 将其压缩为32学时。太少的学时数, 单靠传统的课堂讲授在时间安排上明显不够。 (4) 学生对所学知识没有完全理解。学生对于老师所讲的理论知识, 由于没有实际项目支持, 掌握得不好, 往往刚刚讲过的内容, 然后提问仍然没有印象, 这说明学生对所学内容没有内化。针对这种现状, 本课程组现拟采取翻转课堂理念, 将所学知识融为一个集中型项目 (图书馆管理的设计与开发) 中, 通过学习该软件开发的全过程, 来完成自己的一个项目开发。在教学设计中, 将此项目开发的全过程录成视频, 让学生先看视频, 然后在其基础上通过教师辅导、引导来完成教学。

三、项目实施方案及实施计划

(一) 内容

(1) 选择开发一个合适的项目案例——图书馆管理系统的设计与开发。本改革项目是基于翻转课堂的项目式教学, 首先得选择好一个集理论、实践于一体的软件开发项目, 通过对该项目的规划、需求分析、项目设计、项目实现、项目测试及运行实施, 让学生真实体验软件开发的全过程。 (2) 基于翻转课堂的项目式教学模式的实践及实施。将教学改革方案落实在课堂教学过程当中才是真正的教学改革。教学改革实施贯穿整个过程。通过两轮的教学实践, 实施改革的教学设计过程。 (3) 改革实施后的教学效果及教学方式、手段的评价。通过实践之后, 一定要对教学效果进行评价。制定评价方案, 包括定性与定量、形成性评价和总结性评价, 对个人的评价和对小组的评价、自我评价和他人评价之间的良好结合。

(二) 改革目标

(1) 制定出符合个性化学习的《软件工程》教学大纲; (2) 探索翻转课堂下的项目式教学模式的教学过程及体系; (3) 构建基于翻转课堂的项目式教学模式的评价体系; (4) 将改革成果应用到实际教学活动中, 全面推行个性化学习方法。

(三) 拟解决的关键问题

(1) 软件系统开发项目及其子项目的选择; (2) 新的教学方案的视频资料的录入; (3) 新的教学方案中, 教师的角色定位及教学方法的运用。实施方案、实施方法、具体实施计划 (含年度进展情况) 及可行性分析。

四、实施方法

(一) 教学内容“项目化”

通过一个完整的项目 (图书管理系统的设计与开发) , 将所学知识全部融入该项目中。通过对该项目开发的全过程, 让学生有一种软件开发身临其境的感觉。

(二) 教学模式“翻转化”

传统教学过程通常包括知识传授和知识内化两个阶段, 知识传授是通过教师在课堂中的讲授来完成, 知识内化则需要学生在课后通过作业+操作或者实践来完成。在翻转课堂上, 这种形式受到了颠覆, 知识传授通过信息技术的辅助在课后完成, 知识内化则在课堂中经老师的帮助与同学的协助而完成。随着教学过程的颠倒, 课堂学习过程中的各个环节也随之发生了变化。

(三) 教学过程“阶段化”

利用课内课外相结合的方式, 将教学过程分为课前预习阶段、课堂讨论阶段和课后复习拓展阶段, 达到培养学生理论联系实际、提高实践动手能力的目的。

(四) 教学考核“过程化”

将原来开卷笔试的考核改为基于过程、成果式的考核。对各个同学采取分组完成项目的方式, 在完成项目开发的过程中, 对各个阶段形成的报告、文档进行过程化考核, 达到全程跟踪完成。

摘要:针对《软件工程》课程理论性强, 课时少的情况, 用传统的讲授法难以达到预期的教学效果。本改革拟采取翻转课堂下的项目化教学。选择一个项目先进行课前设计, 让学生带着问题进入课堂。然后由教师引导开展课堂教学活动, 开展课堂活动包括任务分发、独立探索、团队协作、问题解答等。最后通过两轮的教学实践, 对课堂改革的教学效果进行评价。

关键词:项目式,翻转课程,软件工程

参考文献

[1] 邓娜, 叶志伟, 阮鸥等.“721”人才培养模式下软件工程翻转课堂教学模式初探[J].教育教学论坛, 2016 (42) :184-185.

软件课程设计总结报告范文第2篇

“工程基础软件与应用”是一门实用性很强的专业必修课, 通过网络多媒体交互教学的形式介绍工程基础软件的基本原理、操作、以及丰富的案例教学, 充分利用现代化的教学手段和多种教学资源, 可以为学生提供良好的自主学习环境, 使学生更好地熟悉和掌握工程基础软件的使用, 为今后从事机电工程项目设计和科学研究打下良好的基础。

本文采用J2EE技术设计实现了一套“工程基础软件与应用”交互式的网络教学系统, 并对该平台的设计思路、实现的关键技术等进行了详细阐述。该系统提供了完整的网络教学环境, 功能丰富、结构合理, 支持用户规模大、具有高度的稳定性。为学生提供良好的自主学习环境, 使教学效果和教学效率得到了很大的提高, 具有较大的实用。

1 网络教学系统的体系结构

J2EE所定义的开放式多层体系结构和对EJB、Servlet、JSP以及XML等技术的全面支持, 使软件开发商们和企业在开发和配置企业内部网应用程序时能够有效地利用J2EE结构。因此, 本文基于J2EE规范的体系结构, 将网络教学平台的体系结构分为四层, 分别是客户层、Web层、应用服务层和数据资源层。J2EE四层结构包括:客户层, 为教师、学生以及系统管理员提供方便直观的可视化图形接口;Web层, 响应客户请求, 为客户提供所请求的资料;业务层, 运行应用逻辑完成客户请求的计算和资料操作;数据层, 存储、管理资料信息。采用多层结构的方式, 将业务逻辑与其他分层分开, 大大减轻了Web层的负担, 使系统具有很强的伸缩性、通用性、兼容性和可操作性, 每一层都能专注于特定的角色和功能。

2 网络教学系统的功能设计

网络教学平台的主要功能是使教师可以利用多媒体、网络技术实现高质量教学资源、信息资源和智力资源的共享与传播;促进高水平的师生互动, 促进主动式、协作式、研究型的学习方式, 从而形成开放、高效的教学模式, 更好地培养学生的信息素养以及问题解决能力和创新能力;同时还能够对学生的学习行为进行监控和了解, 提高教学资源的利用水平和管理水平。对学生而言, 通过该系统可以充分利用学校的网络资源和知识资源, 促进自主学习和协作学习, 促进学习效果, 提高学习效率。

网络教学系统的功能设计框图如图1所示。教学系统首页提供所有通向系统内部频道的丰富和多样性的链接方式及通道。

(1) 信息中心:教师可以在此发布教学安排信息, 主要是有关上课、上机、考试时间安排及教学计划等信息。学生可以及时查看发布的课程通知。还包括教师对作业的布置与分发, 学生作业的递交, 作业批改和反馈。

(2) 在线学习:学生可以浏览教学大纲, 教学计划, 教学课件等内容;教师可以在此完成课件的上传、修改和删除。为了使学生能够系统地学习有关课程, 教学课件的基本内容以章节目录编组, 不同章节的相关内容进行链接设计, 使各部分内容互相交叉, 融为一体。同时实现了教材的电子化和多媒体化, 课件在知识组织方面进行了全新的设计, 实现了人、机之间直观、自然的交互, 极大的提高了学生的学习兴趣。

学生在学习过程遇到问题时, 可随时访问该系统中的自动答疑子系统, 系统将根据学生提交的问题描述对知识库进行搜索, 将对该问题的解答呈现给学生。

(3) 在线考试:本文针对“工程基础软件与应用”课程的特点完成了该模块的开发。

教师的在这里可以管理题库, 自动或人工试卷, 分配考生考试权限, 考场监控, 批阅试卷, 统计科目考试成绩。

学生将教师生成的试卷以word形式的下载后, 利用计算机上的工程基础软件, 如Matlab、EWB等, 开始答题, 最后将解题步骤及运行结果保存到word文件中。考生需要将该word文件和程序源文件分别上传到服务器。每个学生提交的文件都将被保存以备阅卷。

考试结束后, 教师能在线进行阅卷, 并能对所有成绩记录进行查询和修改、删除。另外, 还有成绩统计、分析的功能。

(4) 师生交流:在这里, 可以完成类似于BBS讨论区的功能。可以按主题分为几个板块, 可以进行动态的管理。教师可以把问题放在BBS论坛上, 使每位学生都能对问题发表意见, 予以回复, 同学间彼此看到自己对这些问题的理解, 真正做到了师生互动、生生互动。教师通过查看网上的回答, 能及时全面地掌握每个学生的情况, 并针对出现的问题, 及时调整策略, 从而提高课堂教学效率。

另外, 还可以通过聊天室和实时通信工具, 如MSN、QQ等, 来进行面对面的视频与语音的实时答疑交流。

(5) 资源中心:资源中心模块将有关课程内容、相关资料压缩成文件, 方便学生下载及下载后的仔细研究。

(6) 帐户管理:包括系统管理员、教师和学生管理。其中管理员可以对所有人员进行添加、修改、删除和查询, 同时还可以对教师的所有权限进行分配。

3 系统实现的关键技术

基于J2EE的网络教学系统主要的开发工具可以采用Dreamweave r+JBuilder+Weblogic+SQL Server 2000。SQL Server2000作为后台数据库来构架一个实用的应用程序。教学系统的体系结构采用Browser/Server模式, 将内容的生成和显示进行分离;并利用可重用的组件 (Java BeansEJB) , 降低了开发组件的复杂程度, 加快了总体开发速度, 提高了系统质量。

JDBC技术在J2EE结构的中间层与数据层的数据源之间提供了数据库独立的开放性连接, 使应用程序不仅可以对基于SQL标准的关系数据库系统进行访问, 而且还可以对其他类型的数据源进行访问。程序开发人员使用它可以连接任何提供了驱动程序的数据库系统, 这样就使程序员无需对特定的数据库系统的特点和细节有过多的了解, 从而简化和加快了开发过程。

4 结语

本系统采用了符合J2EE规范的体系结构, 具有良好的跨平台性、安全性、可扩展性。测试结果表明, 本系统界面友好、使用简单;课程导航设计明确、简单;教学设计以学生为中心;提供在线答疑、考试等各种功能模块和交流环境;具有优异的跨平台性和良好的安全性。该教学系统的设计, 立足于实际课程教学和教学改革的需要, 可极大激发学生的学习兴趣, 扩展学生掌握相关工程应用软件的实际能力, 促进教学质量的提高。

摘要:为了改变传统的教学方式, 提高教学的交互性和主动性, 利用J2EE技术架构了一个优良的“工程基础软件与应用”网络教学系统, 并讨论了系统设计的思想和实现的关键技术。测试结果表明, 该系统使用效果良好, 是一个较为完善的、稳定的、灵活的网络教学系统, 能够很好的提高教学效率和教学效果, 具有良好的应用前景。

关键词:网络教学系统,J2EE,B/S模式

参考文献

[1] 董宛, 武强.基于J2EE结构的教学系统的设计与实现[J].计算机工程与应用, 2003, 39 (25) :229~232.

[2] 成科扬.基于J2EE体系结构的高校毕业生就业信息系统的设计研究[J].计算机应用研究, 2005, 22 (5) :214~216.

[3] 胡安韩, 余凌凡.基于J2EE架构的办公自动化系统的研究与应用[J].计算机应用研究, 2005, 22 (9) :211~213.

[4] 郭春燕, 杨波.基于网络的教学支撑平台的设计与研究[J].济南大学学报 (自然科学版) , 2004, 18 (1) :72~75.

[5] 黄晓平, 吴杰, 张世永.网络教育管理系统架构设计[J].计算机工程与应用, 2003 (12) :18~22.

软件课程设计总结报告范文第3篇

目前许多高职院校在该课程的教学方式上, 一直都是教师教、学生学, 学完之后再上机, 教师辅导这种传统教学模式。其中以教师讲授和演示操作为主, 学生被动学习, 课堂缺乏互动性, 教学与实践相脱节达不到指定的教学目标。为此, 通过多年对该课程的教学尝试, 完成以企业任务为主线的模块化教学模式设计。

1 模块化教学模式的设计原则

模块化教学法是以现场教学为主、以技能培训为核心的一种教学模式。模块化教学就是先确定课程的职业岗位能力培养目标, 根据该目标将课程教学分解为若干模块, 在各个模块中以实际工作项目为导向, 设置典型工作任务, 学生在完成工作任务的同时学会和掌握本课程的基本知识和基本技能。从而达到预定的课程教学目标, 实现教学组织的灵活性。

为培养“实用型”和“操作型”技术人才的需要, 造就大批的复合型办公应用人才, 设置模块教学应遵循以下原则。

1.1 遵循实用性和系统性的原则

从现代办公实际业务出发, 遵循实用和系统的原则, 科学合理地划分教学内容模块。通过对职业岗位分析选择有代表性的典型工作项目, 将职业能力培养所需的理论知识和操作技能融于一个个工作任务中, 在强调知识的实用性同时, 也要注重内容的系统性。

1.2 设置模块要遵循复合型原则, 培养复合型人才

现阶段人才市场对高职毕业生的要求趋向于多元化的复合型人才。为了拓宽学生的就业渠道, 根据人才市场及经济发展的需要, 本课程的模块设置也要遵循复合型原则, 促使学生朝一专多能的方向发展。

1.3 设置模块应遵循发展性原则, 注重知识更新

计算机技术日新月异, 随着时代发展, 现代办公事务复杂多样。要满足现代办公需要就要随时淘汰一些陈旧的知识和模块, 不断创建具有时代特色的模块。

1.4 遵循模块设置与技能考核挂钩的原则

《办公软件应用》课程可以考取多种操作等级证书, 如有可能, 力争使模块内容与考核内容尽量一致。这样在模块教学结束后, 通过参加技能考核, 学生可以多取得一些证书, 为学生就业时提供方便。

2 模块化教学模式的内容设计

2.1 按职业岗位能力培养需要划分课程教学内容模块

从现代办公应用中所遇到实际问题出发, 以现代办公应用常用的文字编辑排版、数据分析处理、演示文稿的综合应用为主线, 科学合理地将课程教学内容划分为windows操作系统技术模块、word文字处理技术模块、excel电子表格处理技术模块、Power Point演示文稿技术模块、计算机网络技术模块等五个模块。

2.2 针对实际工作岗位设置工作项目, 注重应用能力的培养

本着既注重培养学生自主学习能力、创新意识, 又注意为今后的学习打下更好的基础的原则, 精心选择设置针对性、实用性极强的工作项目。学生每完成一个项目的学习, 就可以立即应用到实际中, 并具备触类旁通地解决以后工作中遇到的问题的能力。

2.3 以工作任务为主线, 构建完整的教学设计布局

遵循由浅入深、循序渐进、可操作性强的原则进行组织, 并将知识点融汇于各个工作任务中。以若干个工作任务为载体, 形成一个种类多样的任务群, 构建一个完整的教学设计布局, 并注意突出任务的趣味性、实用性和完整性。在引导学生完成每个工作任务后, 要进行相关的综合实训, 对于既是重点又是难点的知识, 还会在不同的工作任务中反复使用, 使学生能够举一反三, 灵活应用。学生在完成各项工作任务的同时, 就逐步掌握了办公软件的各项功能的应用。

2.4 交互式的技能训练

这是本课程课堂教学改革的主体环节。在这一环节中, 教师要把课程的职业能力培养目标分解成为对应于知识点或技能要点的若干子目标。教师根据各个子目标来设计工作任务, 教授学生的掌握独立操作技能。在交互式技能训练中, 体现学生主体地位, 教师只起到主导作用, 学生学习以人机之间的交互式技能训练为主要方式。在这个阶段, 教师除了依据模块中规定的教学目标进行必要的课堂讲授和演示外, 学生绝大部分时间是在教师的指导下进行上机学习训练, 重点培养学生自主学习能力, 以完全自然的、无拘束的方式学习特定的技能。通过上机实践和作业设计等一系列有针对性的技能训练和应用能力的培养, 使学生能将所学的知识和技能综合运用, 并加以发挥, 直至应用到其它执行同样任务的软件上。整个教学过程注重能力培养, 学习任务作业化。这种教学方法大大提高了学生独立操作的能力, 同时也为教师的因材施教、进行个性化指导提供了条件。

2.5 考核评价方法

这一环节是课堂教学改革的重点部分, 应建立一整套教学实施过程质量评估体系, 对模块化教学实施过程中“教”与“学”双方进行及时评价。教学评价可以分为过程评价、单元模块评价、期末课程评价三个层次。过程评价在教学过程中进行, 以学生在工作任务实施的过程中表现为评价依据来评价学习情况;单元模块评价在一个模块学习结束时进行, 主要以模块学习中学生完成的成果情况作为评价的依据。期末课程评价是对该课程教学实施过程的总体评价。可通过综合知识、技能测试或课程设计来完成。

3 模块化教学模式的优越性

3.1 改革了传统教学模式

跳出了依据教材而制订教学计划、实施教学进度的束缚, 走向了依据职业需求和产品生产过程来设计教学方案。

3.2 转变了办学理念

打破了以学科体系标准为主导来实施教学的框架, 走向了按职业资格技能标准为主导的教学实践, 实现了基础理论知识服务于专业技能需要的转变。

3.3 在教学方法上实现了重大突破

打破了学校本位、课堂本位, 走出校门进入企业, 部分项目在车间开展现场教学, 实行教室、实验室、实训基地三位一体的立体教学。转变教师角色, 充分发挥了学生的自主性、积极性和创造性。

3.4 有利于教师队伍整体素质的提高

实践性教学定位的重要性, 决定了教师队伍必须做到“双师型”的配置, 让学校的教师走向工厂具有教师和技术工人双重身份, 又要下大力引进工厂的专业技术人员走进教师队伍。让技术专家型教师队伍参加技术性人才培养目标的制定与人才培养过程, 提高人才培养的实用性与教育水平。

总而言之, 模块化教学模式具有较强的灵活性、针对性、现实性和经济性, 适用于模块性、操作技能性较强的课程教学, 对落实高职“以就业为导向, 以能力为本位”办学指导思想以及教学改革、课程开发具有深刻的意义。

摘要:本文阐述了高职《办公软件应用》课程的模块化教学模式设计以及实施模块化教学改革的优越性。

软件课程设计总结报告范文第4篇

20世纪30年代, 美国人柯利尔觉得工作在第一线的人员, 会根据实际情况, 做出分析和研究, 或许比等到专家研究后再实践来的更快, 更理想。他认为这种行为就叫行动研究法。实际上, 我们从事一线工作的人们往往是自己解决问题, 而不是等到专家们研究出成果才取解决问题。那些急需解决的问题, 很难等到全面研究结果。工作人员一般出现问题时, 就会马上提出解决方案, 边试边看效果, 不行再改, 再试, 直到解决问题。

教育行动研究是在20世纪50年代开始兴起的。教育行动研究就是指有计划有步骤的对教学实践中产生的问题由教师或研究人员共同合作边研究边行动以解决实际问题为目的的一种科学研究方法。

二、第一轮

笔者任教的高校环境艺术专业开设两个学期的计算机三维辅助设计课, 安排在二年级上学期和下学期。二年级上学期计算机三维辅助设计课的教学重点是3dsmax软件基础建模、材质、灯光、摄像机、渲染和室内效果图;二年级下学期为学习vray插件, 包括vray材质、vray灯光、vray摄像机和vray室内效果图制作及渲染。

笔者在第一轮行动研究前没有教授过该年级的学生, 因此开课前对所教学生一年级软件课程和相关专业课程的试卷和作业进行了分析, 并向一年级photoshop课程的两位教师请教, 而且做了兴趣调查问卷

调查问卷分析:

学情分析:在校大学生学过3dsmax软件的占13%, 未学过的占87%。在教课时以大部分未学过的为主, 将练结合速度放慢些, 以求调动这些学生的积极性和适应期理解能力。适当提高难度满足有些基础的学生需求。

在教法上:100%的学生选择结合实例的教学方式, 说明学生意识到软件课程进行实例教学的好处;62%的学生倾向于局部到整体的教学方法;38%学生喜欢从整体到局部的教学方式。因此, 教学中以室内效果图制作为主线, 以实例单体建模的方式, 把建模、材质、灯光、摄像机、渲染等等知识点贯穿进去。最后, 从整体出发进行室内效果图制作教学。

在学法上:65%的学生喜欢分组教学, 有35%的学生不喜欢分组教学。在第一周基础教学不分组, 学生可以充分的学习各个知识点。第二周开始分组后进行教学, 组间产生竞争, 组内进行协作, 发挥学生的互助能力, 培养他们的团队精神。

所以这次目的是提高学生学习软件的兴趣和, 解决方法为通过从学生感兴趣的热点问题中选择事物和身边事物作为模型实例, 边学例子边学基础知识, 用例子的形式把知识点串起来。

三、第二轮

分析小测验:全体学生都能够跟着学, 大家兴趣比较好的, 没有不学的。但有10%学生做的比较好, 10%学生做的很不理想, 大部分学生做的一般。

调查问卷分析:

从老师的知识面、专业知识、教学方法、课堂准备、内容设计、指导学生等方面来分析, 学生的满意程度超过了85%。

掌握课堂所学内容80%的学生达到了55%, 另有一半的学生只掌握了课堂所学内容的50%。只就要求从学生实际出发, 降低教学速度和改变教学策略, 因材施教, 学的比较快的学生适当加大练习难度和数量, 对于掌握知识比较慢的学生适当的降低作业要求, 以提高课堂效率。

从课堂学到什么的来看, 实际应用技巧68%、理论知识45%、学习方法26%、思考方式21%, 依次成递减。学生在课堂所掌握的知识成多元化发展, 然而学习方式、思考方式偏低, 在课堂教学和指导中加强学习方式、思考方式等方面的引导, 以此培养学生自学的能力。

说明学生掌握基础知识比较好, 这轮目的主要是解决课堂知识掌握程度提高问题和个别学生理解缓慢问题, 并讲授室内效果图制作。

解决方法:

因为环境艺术专业特点, 大的案例讲解一般持续时间比较长 (8个学时或更长) , 另外学生理解能力有快慢之分, 掌握技术速度也有不同, 为了解决这个问题, 对课程知识点采用案例的方式进行了系统的编写, 历时一年多现有小样, 在学生中和课堂上应用, 发现问题和错误, 进行调整和改正, 然后形成word格式的电子讲义的使用。学生可以在电脑或者手机上随时随地的对知识点进行温习, 具有查字典一样的功能, 学生反映良好, 并一直在提出要求和问题, 我们也在不停的修改和更新内容。

四、第三轮

作业分析:大部分学生做出墙体、门窗、顶、家具, 只有少部分同学速度比较慢和理解上有些问题。

调查问卷分析:

1) 调查结果显示:认为教师对学生的要求严格的学生达到90%以上, 认为备课充分、教学内容熟悉、知识点讲解清楚、教学方法灵活、教师知识广博和信息量大、专业指导认真负责等等分别达到90%以上。

2) 调查结果显示:通过这门课程的学习得到提高、基本掌握室内效果图制作流程达到90%以上。

3) 授课的深浅度和内容量:非常适合15%、很适合44%、适合41;这门课程有非常大的收获19%、很有收获58%、有收获23%。调查结果服从正态分布。大部分学生能够理解效果图制作过程, 并能掌握, 一小部分学生对效果图制作的重点节点掌握不清, 如材质参数设置等等。

针对课堂上出现的状况, 如学生记忆困难、易出错、高频率提问的一些典型知识点和案例, 采用翻转课堂的方法, 也就是提前录制好相关案例和知识点的视频, 进行剪辑, 生成4到8分钟的短片, 传到app上, 让学生自由下载和观看。这样学生可以更好的自学, 并把握住课上时间和老师进行探讨问题。

通过几轮的行动研究, 提出问题、分析问题、解决问题, 发现学生和老师的互动性更加频繁, 问题往往能及时发现及时解决, 满足了学生的学习热情, 掌握了知识, 也成功的完成了教与学的任务。当然, 这里的教与学是师生互动的。

摘要:这以高校环境艺术专业学生为对象, 对计算机三维辅助设计课程教与学的行动研究。行动研究具有一线教师参与、强调合作、教与学的实践三大特点。行动研究是侧重一线老师参加、团结协作、教和学的实践行动。该行动研究有效提高了软件课程的教学效果和教师专业研究素养, 成效明显。

关键词:环境艺术,计算机三位辅助设计,行动研究,教和学的实践

参考文献

[1] http://baike.baidu.com/link?url=cJSXEMFJAcdGA_1LQvQY_csktrJbKrAFQk-1NmHz6gTLyMW2qm0pxJSsRSA9aI9D_0bF6qyiJa8xBj_GAv_HtJnEkpWX_d1LnKfs-osTDa_DkfbBDwEf0Q0-9C24tqoA.

[2] .王艳艳.王勇.循环模式视角下的大学英语听力教学行动研究探析[J].外语教学理论与实践 (FLLTP) .2013年第1期:49-54.

软件课程设计总结报告范文第5篇

十、项目开发总结报告

1.引言............................. 1

1.1编写目的 .......................... 1

1.2项目背景 .......................... 1

1.3定义 ........................... 1

1.4参考资料 .......................... 2

2.开发结果 ............................ 2

2.1产品 ........................... 2

2.2主要功能及性能 ..................... 2

2.3所用工时 .......................... 2

2.4所用机时 .......................... 2

2.5进度 ........................... 2

2.6费用 ........................... 3

3.评价............................. 3

3.1生产率评价 ...................... 3

3.2技术方案评价 ......................... 3

3.3产品质量评价 ......................... 3

4.经验与教训 ...............................

31.引言

1.1编写目的

【阐明编写总结报告的目的,指明读者对象。】

1.2项目背景

【说明项目来源、委托单位、开发单位及主管部门。】

1.3定义

【列出报告用到的专门术语的定义和缩写词的原文。】

1.4参考资料

【列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括:a. 项目经核准的计划任务书、合同或上级机关的批文;

b. 项目开发计划;

c. 需求规格说明书;

d. 概要设计说明书;

e. 详细设计说明书;

f. 用户操作手册;

g. 测试计划;

h. 测试分析报告;

i. 本报告引用的其他资料、采用的开发标准或开发规范。】

2.开发结果

2.1产品

【可包括:

a. 列出各部分的程序名称、源程序行数(包括注释行)或目标程序字节数及程序总计数量、

存储形式;

b. 产品文档名称等。】

2.2主要功能及性能

2.3所用工时

【按人员的不同层次分别计时。】

2.4所用机时

【按所用计算机机型分别计时。】

2.5进度

【给出计划进度与实际进度的对比。】

2.6费用

3.评价

3.1生产率评价

【如平均每人每月生产的源程序行数、文档的字数等。】

3.2技术方案评价

3.3产品质量评价

软件课程设计总结报告范文第6篇

2014—2015学年第1学期

学 院: 计算机学院 专业班级: 软件工程5班 学 号: 130202051006 学生姓名: 陈洪阳 指导教师: 戴俊雅

成 绩:

时 间:

2015年 1月5日

实践1.猜数游戏 题目概述:

编程先由计算机“想”一个1~100 之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10 次,如果猜了10 次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

程序设计概要与分析:

在源程序的开头中包含stdlib和time库函数,这样我们就可以调用srand()和rand()函数,其中调用srand()提供一个种子,它是一个unsigned int类型,取值范围是0~65535,然后调用rand(),根据提供给srand()的种子值返回一个随机数,我们用rand()%100就把随机决定的数值范围确定在1~100之间,然后定义一个num,记录这个随机产生的随机数,定义input,来储存用户输入的猜数值,用times来记录猜的次数,用do while循环来执行用户猜的次数有10次,用if else条件语句来判断用户是否猜中,或猜得太大、太小,用一个while循环来做总嵌套,设置n的值一开始不为零,while循环的条件是当n的值不等于0,最后用户就可以修改n的值来决定是否退出。

程序代码:

#include #include #include

int main() {

int n=1; while(n!=0) {

srand((unsigned)time(NULL)); int num,input; int times=0; num=(rand()%100)+1; printf("在1~100间猜一个数 "); scanf("%d",&input); do{

if(input==num){

} else if(input>num){

} else if(input

}

}

} printf("你猜的数太小了,请再猜一个 "); scanf("%d",&input); times++; }while(times<9); if(times>=9)printf("你已经猜了10次都猜不中,你输了 "); printf("继续下一轮新的猜数请按1,退出请按0 "); scanf("%d",&n); return 0; 运行结果示例:

选择继续下一轮新的猜数,猜了10次都没猜中

心得体会:

要懂得如何生成一个随机数,并且要确定它的范围在1~100之间,同时我们还要用do while循环体把猜数的次数控制在10次,每当我们输入猜想的数时就要做出判断,看看是否猜中,或者猜得太大或太小,输出提示信息。也懂得了通过修改while判断循环里面的条件,使得循环体里面的程序受我们修改的条件控制,可以继续循环执行或者不再继续执行。

实践2.成绩排名次 题目概述:

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30 人参加考 试,学号可以用输入的序号代替。考试后要求: (1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分; (4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

程序设计与概要:

定义存储学生信息的结构体,包括学生编号,姓名,各科成绩,总分,平均分还有名次。该结构体命名为student,然后定义结构体数组student s[],首先输入准备录入学生信息的人数,用amount来记录人数,用一个for循环,从0~amount-1,依次输入每个学生的各种信息,如学号,姓名,数学、英语和物理成绩。用grade[]数组来存这三科的成绩,如grade[0]存储数学成绩,grade[1]存储英语成绩。输入之后,再用一个for循环把每个同学的总分求出来,总分再除去3求出该名同学的平均分。按总分成绩由高到低排出名次,用两个for循环嵌套,第一个循环从0~amount,表示从第一个同学开始拿出来比较,第二个循环从1~amount,表示除了之前取出的同学以外的每一个同学,如果前一位同学的总分小于后一个同学的话,就交换两人的信息,第二个循环比较之后,便会把总分最高的同学的信息储存在第一个,然后我们设置排名rank的值为1,rank++,进行筛选第二名的,之后对应地把rank的值设给学生的总分排名

打印学生信息,输出表格的基本框架后,用一个for循环,依次输出每个学生的信息,最后还有根据学号查询学生信息,用户输入要查询的学生学号,在for循环里面依次比较,如果找到学号与用户输入相同的,便输出该名学生的信息。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;

void input(student s[]); void title();

void list(student s[]); int main() { input(s); int i=0; for(i=0;i

//要求1 计算总分 平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3; } //要求2 按总成绩排序

int rank=1; student t; for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++; } //要求3 打印名次表

title(); list(s); //要求4 查询

int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i

if(number==s[i].num)

{

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system("pause"); return 0; }

void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 "); for(int i=0;i

printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);

scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } }

void title() {

printf(" 学生成绩表 ");

printf("----------------------------- ");

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("----------------------------- "); }

void list(student s[]) { //n表示人数

int i;//rank=1; for(i=0;i

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf("----------------------------- "); } }

运行结果示例:

确定录入人数之后,依次输入每个学生的信息

打印出名次表:

输入学生的学号,查询学生信息:

心得体会:

懂得了用结构体将不同的数据类型结合在一起,然后定义结构体数组,使得每个数组中的成员都具有不同的数据类型变量。而且同属于一个数据类型,也可以定义数组来表示相同的类型但是有多个不同值,比如成绩这个变量。也懂得了用for循环语句求总分,用for循环语句将数组从头到尾输出。

实践3.单科成绩统计 题目概述:

学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过 30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实

现下列功能:(1)统计不及格人数并打印不及格学生名单;

(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下: 分段 人数 图形 <60 3(10%)*** 60‐69 8(…) ******** 70‐79 7(…) ******* 80‐89 8(…) ******** >=90 4(…) ****

程序设计与概要:

定义一个结构体stu,里面有学生的姓名和成绩,然后定义一个s[]数组存放每个学生的姓名和成绩,输入函数中用一个for循环来依次输入每个学生的姓名,还有输入成绩,用if条件语句判断输入的成绩是否为负数,如果是就退出整个输入函数,同时,我们还用if条件语句来判断输入的成绩处于哪个分数阶段,定义n

1、n

2、等整形变量来存储各个分数段的总人数,变量num来存放输入的学生共有多少人,变量sum是将每个学生的成绩都加在一起,最后用sum/num就等于全班该门成绩的平均分,我们用一个for循环语句,判断每个学生的成绩是否小于60分,如果是就输出他的姓名,这样就可以打印出不及格学生的名单了。同样的,用一个for循环语句,判断每个学生的成绩是否大于等于平均分,如果是就变量count+1,用来记录成绩大于或等于平均分的学生人数,同时可将成绩大于平均分的同学姓名输出,这样就打印出了成绩在大于等于平均分的学生名单了。最后是输出分数段,用前面记录各个分数段人数的n值除以总人数再乘以100%就得出比例,每一个分数段都用一句for循环语句,根据n值的大小输入对应数目的*。

程序代码:

#include #include #define M 30 struct stu { char name[20]; int score; }; stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0; int count=0; void input(stu s[]); void getnotpass(stu s[]);

void getavg(stu s[]); void percent(stu s[]); int main() { /*stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0;*/ input(s); getnotpass(s); getavg(s); percent(s); return 0; } void input(stu s[]) { for(i=0;i

printf("请输入第%d个学生的姓名和成绩 ",i+1);

scanf("%s%d",&s[i].name,&s[i].score);

if(s[i].score<0)

break;

if(s[i].score>=0&&s[i].score<60)

n1++;

if(s[i].score>=60&&s[i].score<70)

n2++;

if(s[i].score>=70&&s[i].score<80)

n3++;

if(s[i].score>=80&&s[i].score<90)

n4++;

if(s[i].score>90)

n5++;

num++;

sum+=s[i].score; } printf("学生信息录入完毕 "); } void getnotpass(stu s[]) { printf("不及格人数为:%d ",n1); printf("不及格人员名单如下: "); for(i=0;i

if(s[i].score>=0&&s[i].score<60)

printf("%s ",s[i].name); } printf(" "); ave=sum/num; } void getavg(stu s[]) { for(i=0;i

if(s[i].score>=ave)count++; } printf("成绩在全班平均分及平均分之上的学生人数为:%d ",count); printf("成绩在全班平均分及平均分之上的学生名单如下: "); for(i=0;i

if(s[i].score>=ave)

printf("%s ",s[i].name); } printf(" "); } void percent(stu s[]) { printf("各分数段的学生人数及所占的百分比如下: "); printf("分段 人数 图形 "); printf("<60 %d(%.0f%%) ",n1,(float)n1/(float)num*100); for(i=0;i=90 %d(%.0f%%) ",n5,(float)n5/(float)num*100); for(i=0;i

运行结果示例:

依次输入每个学生的姓名和成绩,当输入成绩为负时,便退出整个输入:

统计不及格人数还有打印不及格学生名单:

统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单:

以直方图方式统计各分数段的学生人数及所占的百分比:

心得体会:

懂得了在for循环体内用if条件判断语句判断输入的值为负值时退出循环体。用变量计数器把符合要求的计数起来,最后可以得出符合要求的值共有多少个,也懂得了用for循环从所有值里进行筛选符合条件的值出来,更懂得了在求百分比时候要强制类型转换,把int类型的计算结果给转换为float单精度类型。

实践4.函数与文件训练 题目概述:

将实践练习2 中的第2题利用函数的思想进行修改,并将学生的成绩等信息输出到文件中。要求函数参数中

包含结构体数组或指针。输出到ASCII 文件的信息包括每个学生的学号、三门成绩和名次,每人一行。

程序设计与概要:由于我的实践2中就已经用了函数,所以我只需要把学生的成绩等信息输出到文件中。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;

void input(student s[]); void title(); void list(student s[]); int save();//输出到文件中 int main() { input(s); int i=0; for(i=0;i

//要求1 计算总分 平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3; }

//要求2 按总成绩排序

int rank=1; student t; for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++; } save(); //要求3 打印名次表

title(); list(s); //要求4 查询

int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i

if(number==s[i].num)

{

printf("学号 姓名 数学 英语 C语言 总分 平均分 排名 ");

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system("pause"); return 0; } void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 ");

for(int i=0;i

printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);

scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } } int save() {

FILE *fp; fp=fopen("f:student.txt","w"); if(!fp) {

printf("can not open file! ");

exit(1); } char c[]="学号 数学 物理 英语 排名 "; fputs(c,fp); for(int i=0;i

fprintf(fp,"%u %d %d %d %d ",s[i].num,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].rank); } fclose(fp); } void title() {

printf(" 学生成绩表 ");

printf("----------------------------- ");

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("----------------------------- "); }

void list(student s[]) { int i; for(i=0;i

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf("----------------------------- "); } }

运行结果示例:

首先输入准备录入的学生人数,然后依次输入每个学生的信息:

打印出按总成绩排序后的学生信息表,以及根据学号查询:

在f盘中找到文件并打开:

心得体会:

懂得了用如何运用文件,把向程序中输入的数据全部输出到文件中去。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

实践5. 实践4(1)(2) 题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

1. 定义至少包含以上学生信息和学院代码的结构体类型和指针(或数组)变量。 2. 函数实现从文件中输入信息到定义的数据中。

程序设计与概要:

定义一个结构体,名为student,里面的内容有学生的学号,姓名,性别,还有那个学院,以及10门成绩,构造结构体数组,student stu[100],用于存储100名学生的信息。定义读取文件中内容的函数,FILE *fp代表文件,调用fopen函数,通过文件所在位置以及文件名打开特定的文件,r表示只对文件进行读取,接着调用fscanf函数,把第一个位置的数据赋给学生的学号,用while循环体,循环的条件是调用feof判断文件是否读取结束,如果没有则返回0,用!feof()来让没读取结束的文件继续读取,接着再把同一行后面的数据分别赋给学生的姓名,性别代码和所属学院代码,再用一个for循环,把同一行后面10个数据分别赋给学生的10门成绩。一行读取完毕后,意味着已经读取完一个学生的所有个人信息,定义一个I值来存储已经读取学生的人数,每读完一人就i+1,再读取下一行的第一个数据赋给下一个学生作为他的学号。通过while循环把文件中的全部信息读取出来赋给所有学生,函数最后返回的是读取学生的人数i。定义结构体名为sxy,用于存储性别代码和代码对应的性别,可以在后面输出的时候,把对应的性别代码转变为用中文表示性别。定义一个结构体名为scode,用于存储学院代码和代码对应的学院名称,可以在最后输出的时候,把学院代码对应的学院名称输出。再定义一个输出函数,通过for循环,从0~i-1,把i个学生的全部信息输出,所以我们在主函数里面先调用读取文件中内容的函数之后再调用输出函数即可。

程序代码:

#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); struct student { int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; float ave;

}; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k; n=readData("f:StudentInfo.txt",stu); m=readDataxy("f:SexInfo.txt",s1); k=readDataco("f:CodeInfo.txt",s2); if(n==-1||n==0)

return 0; if(m==-1||m==0)

return 0; if(k==-1||k==0)

return 0; printStudent(stu,s1,s2,n,m,k);

system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; fp=fopen(filename,"r"); if(!fp) {

printf("error1");

return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);

for(j=0;j<10;++j)

fscanf(fp,"%d",&stu[i].scores[j]);

++i;

fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error2");

return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s1[i].sex);

++i;

fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error3");

return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s2[i].dept);

++i;

fscanf(fp,"%d",&s2[i].id); }

return i; } void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(j=0;j<10;++j)

printf("%4d",stu[i].scores[j]);

printf(" "); } }

运行结果示例:

心得体会:

懂得了从文件中输入信息到定义的数据中。就是要先构造与文件信息中相对应的结构体数组,然后用打开文件,需要知道文件的具体位置还有文件名,”r”就是表示只采取读取操作,用while循环,循环条件的判断标准就是用feof来判断文件是否读取到文件尾部,用fscanf把每个数据赋给对应的变量。其中最难解决的就是一开始学生文件里面的信息,学生性别用代号表示,学生所在学院也用代码显示,这样一来我们把文件中的信息赋给定义好的结构体

数组之后,用for循环把结构体数组一个一个输出后,显示的是性别代码和学院代码,我们要把代码都改为相对应的值,所以我们同样定义性别的结构体数组,学院的结构体数据,之后用for循环把性别数组里面的代号和学生数组中的性别代码想比较,用strcpy函数,相同的就把代码对应的性别赋给学生数组里面定义好的性别字符数组。同理的,学院代码相对同的就把代码对应的学院名称赋给学生数组里面定义好的学院字符数组。

实践6.实践4(3)(4)(5) 题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

3. 函数实现排序(1):学生平均成绩的降序排序,并输出所有信息到显示屏。 4. 函数实现排序(2):学生姓名的升序排序,并输出所有信息到显示器。

5. 函数实现查询(1):根据学号查询学生信息,并输出该生信息,并输出所有信息到显示器。

程序设计与概要:

同上个实践一样构造结构体名为student,用来存储学生的信息,如学生姓名,性别代号,学号,学院代号和成绩等。构造结构体名为sxy用来存储性别代号和性别名称,构造结构体名为scode用来存储学院代号和学院名称。用三个不同的函数来实现读取三个不同文件中的内容,把文件里面的内容放到以上构造的三个结构体里面去,定义输出函数,用for循环把每个学生的性别代号同sxy结构体数组中的代号对应,把代号对应的性别名称赋给每个学生的性别sex属性值中,把每个学生的学院代号同scode结构体数组中的代号对应,把代号对应的学院名称赋给每个学生的学院sdept属性值中,最后再用一个for循环把从第一个学生到最后一个学生的全部信息输出。实现要求3中的根据学生平均成绩的降序排序,要求在从文件中读取成绩之后要计算出总分然后再除以10门成绩得出平均分,然后定义一个函数,用双重for循环,把第一个学生同其他学生比较平均分,如果比下一个同学的平均分低就交换两个的位置,否则就继续与下一个同学比较,直到第一层的for循环结束退出为止。再用for循环把排序后的学生信息从第一位到最后一位输出即可。实现要求4中的根据学生姓名的升序排序,要求也是用双重for循环,用函数strcmp比较两个学生的姓名,把第一个学生的姓名同下一个同学比较,如何比下一个同学大,就交两个学生的位置,否则就继续与下一个同学比较,直到第二层的for循环结束,意味一个同学的位置确定,继续第一层for循环的下一个同学,直到第一个层的for循环结束,就意味所有同学比较完毕,再用for循环语句把从第一个位置的同学到最后一个位置的同学,把他们的信息输出。实现要求5的查询要求,需要我们从键盘上输入要查询的学生的学号,然后用for循环从我们的学生结构体数组中遍历一遍,如果有找到学号同输入的学号相同的学生,便把他的所有信息输出,否则则输出不存在该名学生。

程序代码:

#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); void search(struct student *stu,int n); void sortbyname(struct student *stu,int n); void sortbyave(struct student *stu,int n); struct student

{ int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; double ave; }; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k,b; while(1) {

system("cls");

printf("1.显示学生信息 ");

printf("2.姓名升序排序 ");

printf("3.平均成绩降序 ");

printf("4.学号查询学生信息 ");

printf("0.退出 ");

printf(" 输入需要查询的序号:");

scanf_s("%d",&b);

switch(b)

{

case 1:

n=readData("f:StudentInfo.txt",stu);

m=readDataxy("f:SexInfo.txt",s1);

k=readDataco("f:CodeInfo.txt",s2);

if(n==-1||n==0)

return 0;

if(m==-1||m==0)

return 0;

if(k==-1||k==0)

return 0;

printStudent(stu,s1,s2,n,m,k);

break;

case 2:

sortbyname(stu,n);

break;

case 3:

printf("按平均成绩降序排序如下:");

sortbyave(stu,n);

printStudent(stu,s1,s2,n,m,k);

break;

case 4:

search(stu,n);

break;

case 0:

return 0;

} system("pause"); } system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; double sum; fp=fopen(filename,"r"); if(!fp) {

printf("error");

return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);

for(j=0;j<10;++j)

{

fscanf(fp,"%d",&stu[i].scores[j]);

sum=stu[i].scores[j];

}

stu[i].ave=sum/10;

++i;

fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error2");

return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s1[i].sex);

++i;

fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error3");

return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s2[i].dept);

++i;

fscanf(fp,"%d",&s2[i].id); } return i;

} void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(j=0;j<10;++j)

printf("%4d",stu[i].scores[j]);

printf(" "); } } void search(struct student *stu,int n) { int m,col=0; printf("请输入你要查询学生的学号: "); scanf("%d",&m); for(int i=0;i

if(stu[i].id==m)

{

col=1;

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

printf("%4d",stu[i].scores[j]);

}

} } if(col==0) printf("不存在该名学生信息 "); } void sortbyname(struct student *stu,int n) { student temp; for(int i=0;i

for(int j=0;j

{

if(strcmp(stu[i].name,stu[j].name)>0)

{

temp=stu[i];

stu[i]=stu[j];

stu[j]=temp;

}

} } printf("按姓名的升序排序如下! "); for(int i=0;i

printf("%8d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

printf("%4d",stu[i].scores[j]);

}

printf(" "); } } void sortbyave(struct student *stu,int n) { int i,j,flag; student s; for (j=0;j

flag=0;

for (i=0;i

{

if (stu[i].ave

{

s=stu[i];

stu[i]=stu[i+1];

stu[i+1]=s;

flag=1;

}

}

if(flag==0) break; } }

运行结果示例: 开始的菜单界面:

输入1便会显示文件中所有学生的信息:

输入2便会实现学生姓名升序排序,且把排序后的学生所有信息输出:

输入3便会实现学生平均成绩降序排序,且把排序后的学生所有信息输出:

输入4便会实现根据学号查询学生信息:

心得体会:

懂得了运用双重for循环比较全体成员,如题目中所要求的姓名升序排序还有平均成绩降序,比较平均成绩可以用值的大小进行比较,但是比较姓名的大小就要用strcmp函数进行比较,如果有需要交换位置的,就定义一个同类型的中间值,作为交换的协助者,帮助完成两个值的交换,完成整个过程之后,把交换完成后的全体成员从头到尾用for循环输出即可。

参考文献:

上一篇:如何提高培训的实效性范文下一篇:让奇迹在你生命中发生范文