社会实践课程设计

2022-11-21 版权声明 我要投稿

第1篇:社会实践课程设计

课程思政浸润下绿色化工创新创业设计与实践课程设计与实践

摘 要:课程思政指以构建全员、全程、全课程育人格局的形式使各类课程与思想政治理论课同向同行,形成协同效应,把“立德树人”作为教育的根本任务的一种综合教育理念。文章以绿色化工创新创业设计与实践课程为主体,打通第一课堂、第二课堂和第三课堂,使三个课堂有机融合,在不同的课程环节中设计不同的思想政治教育元素,充分发挥思想政治和创新创业育人的协同效应,为大力培养爱国爱疆、担当奉献的社会主义建设者和接班人而共同奋斗。

关键词:课程思政;创新创业;课程改革

一、国内外思想政治教育与创新创业教育协同育人研究现状

在国外,美国以法律的形式明文规定各级各类学校都必须开设通识课程,大学生也要必修美国历史课。因此,美国各大高校普遍开设通识课程,对学生进行思想政治间接教育。通过历史、人文等通识课程对学生进行思想、政治、道德和价值观的教育。而就课程思政与创新创业教育相融合方面,国外的资料相对较少。国外在创新创业教育中贯穿以学生为主体的教学思想,通过对学生个人素质的评估、训练与开发,使学生比较全面、客观地了解自己,引导其树立正确的价值观导向,确立自己在创新创业活动中的位置。其次在教学方法中以案例教学为主,用大量的知名企业家案例启发学生,用企业家精神教育激发学生的创新创业兴趣,引导学生依据个人情况对待创新创业问题,鼓励抓住商机、解决困难和问题。最后是模块化、分层次的课程结构,让学生可根据自身的特点和专长,选学有针对性的内容,通过实践动手环节进一步提升自己的综合素质和能力。

在我国,自2016年全国高校思想政治工作会议以来,大量学者教师开始探究思想政治教育与创新创业的融合,并涌现出大量的学术成果。特别是2020年5月教育部印发《高等学校课程思政建设指导纲要》,思想政治教育与创新创业教育研究未来将会进入高峰期。赵娟、何舒卉等从课程改革方案、教师队伍建设、教学方式转变和案例教學等方面对创新创业教育课程思政进行了探索。陈薇研究报道高校创新创业教育课程践行思政理念的路径为强化价值观引导、注重理论与实践结合、采用混合式教学和重视反馈调整。王江丽的研究则更注重思政与体验式“双创”相结合,在教育内容上强化“思政体验”,在教学中强化“学习体验”和“文化体验”。

由于我国的创新创业教育起步比较晚,创新创业教育理论体系还不够成熟,将思想政治教育融于创新创业教育的过程中仍存在一定的薄弱环节。本文探索将思想政治教育融入创新创业教育,开展绿色化工创新创业设计与实践课程中思想政治元素的设计与实践,充分发挥两者的协同育人效应。

二、在绿色化工创新创业设计与实践课程中开展思想政治教育的重要意义

(一)将思想政治教育与创新创业教育有机结合,推进课程思政,提高思想政治教育的实效性

习近平总书记在全国高校思想政治工作会议上强调,要用好课堂教学这个主渠道,各类课程都要与思想政治理论课同向同行,形成协同效应。本课程将创新创业教育与思想政治教育相结合,一方面通过专业学科带头人学术讲座培养学生的科学素养,树立求真、善思的科学品质,营造诚实守信的学术道德规范。同时,引导学生关注兵团领域“卡脖子”的技术要点,学会运用创新思想和创新工具,运用专业知识去解决兵团化工领域“痛点”问题,教育学生将“小我融入大我”,运用科学知识解决困扰兵团的痛点和难点,将学术论文写在兵团大地上,进一步贯彻落实立德树人的根本任务。

(二)服务于创新型国家建设的战略导向,促进新时期创新型人才、高素质复合型人才的培养

当前我国正在大力实施创新人才发展战略,实施创新驱动发展实际就是创新人才驱动发展战略。本课程旨在通过课程与实践的锻炼,进一步培养本科生的创新意识,提升学生的创新能力,培养新时期创新型人才。伴随着新工科建设的发展,对新工科人才的培养提出更高的要求。本课程拟采用课程+实践的形式,通过学科竞赛活动,培养学生团队协作、组织沟通、表达和逻辑思维等能力,进一步促进复合型、应用型人才的培养。

三、绿色化工创新创业设计与实践课程开展课程思政的主要途径

以绿色化工创新创业设计与实践课程为主体,以OBE理念为核心,以“三个课堂”为抓手,将思想政治教育元素有機地设计融入到课程教学的三个课堂中,充分发挥思想政治教育的浸润作用,积极探索思想政治教育和创新创业教育的协同育人模式。

(一)改革第一课堂,把握认知规律,增进思想政治教育认识

依托绿色化工创新创业设计与实践课程,根据创新创业教育的规律,将课程设计为“创意、创新、创业”3个模块;达成产生新想法、设计新产品、开办新企业的课程目标;提升学生发现问题的能力、分析解决问题的能力和领导的能力;教会学生使用商业画布、精益创业和创业复盘3种创业工具,打造课程教学的“3+3+3+3”模式。在此基础上,在不同的课程专题中结合专题特点有机地融入科学家精神、学术精神、兵团精神、企业家精神和工匠精神等思想政治元素要点,见表1,利用思想政治教育为创新创业教育课堂把握方向,通过大量科学家、企业家、先进人物的典型案例和影像资料,在媒体促进下激发学生创新思维,提升学生对创新创业教育中思想政治元素的认知,提高思想政治教育在创新创业中的认知水平。

在课程设计模块,组织课程组成员修改绿色化工创新创业设计与实践课程教学大纲,围绕思政主题对教学目标、教学内容、教学组织形式、课程考核和教学评价等内容进行设计。在授课过程中邀请多位教师参与教学,采用小组合作学习的课堂和PBL教学模式,让学生参与课堂教学,注重将社会热点与课程设计的思政要点融合,做到言传身教。在课外,围绕“以学生为中心”的主线开展课外活动和社会实践环节。在课程评价中,采用量化评价与质性评价相结合的方式,通过学生个人评价、小组互评以及座谈交流的方式,调动学生参与评价的积极性。通过课程评价再次完善教学设计,进一步优化课程设计。

(二)活跃第二课堂,加强情感体验,加强思想政治教育素养

在第一课堂的基础上,活跃第二课堂,作为第一课堂的补充,进一步加强学生的思想政治教育。在第二课堂中,主要通过两个途径开展实施,一是主题团日(班会)活动,二是依托学院“一系一品”学科竞赛活动,服务学生的成长成才。

主题团日(班会)活动是大学生思想政治教育的有效载体。为进一步增强思想政治教育的时效性,本课程通过第二课堂的每月一主题的团日(班会)活动,进一步对融入第一课堂的科学家精神、学术精神、兵团精神、企业家精神和工匠精神开展深入的研究和探讨,了解相关精神要素背后的故事,进一步发掘在创新创业课程中的思政元素,引导学生产生情感共鸣,帮助学生树立正确的人生观、世界观和价值观。与此同时,可以结合时事热点新闻要素,开展诸如化学与生活、化工与抗疫等主题的团日(班会)活动,教育引导学生将小我融入大我,加强学生的理想信念教育,以达到思想政治教育与创新创业教育协同育人事半功倍的作用。

学科竞赛作为“第二课堂”的有效载体,是创新推进思想政治教育的有效载体和形式。在学科竞赛中,本课程从学术讲座与培训、课程书撰写与实验研究、课程路演与结题答辩三个环节出发,形成一个闭环结构,培养锻炼学生的团队协作、组织沟通、表达、课程解决和工程创新等素养,促进学生达成毕业达成度,进一步服务学生的成长成才,夯实学院专业认证基础工作。通过学术报告讲座和培训,让学生了解当前化工领域的重点、难点和发展前景,激发学生学习的热情,增强学生专业学习的自豪感。通过讲述化工领域的“卡脖子”问题,引导学生关注国家大事,关注国家科技,积极投身于国家重点科研计划课程中,为实现美丽中国梦贡献自己的力量。以创新创业学分认定和第二课堂成绩单制度为契机,以学院梳理的“一系一品”的系列学科竞赛,见表2,积极引导学生参加各级各类学科竞赛活动。在学科竞赛培训、初赛、复赛和决赛四个流程环节中,授予学生方法,提升学生沟通能力、执行能力、管理能力、自学能力、创新工程实践能力、团队意识和职业素养等;培养学生源动力。

(三)延伸第三课堂,引导外在的行为,提升思想政治教育活力

社会实践活动是加强大学生思想政治教育的有力抓手,是当代青年大学生运用知识,施展才华,实践成才的好课堂,已经逐渐成为青年学生成长成才的有效途径。本课程社会实践在社会调研和暑期社会实践两个方面开展研究,通过社会调查和社会实践的外在行动,加深第一课堂的理论知识理解,延伸第二课堂,进一步在行为上引导学生,提升思想政治教育的活力。

社会调查:在第一课堂教学中,课程设置社会调查环节,让学生结合自己所学的课程知识组建团队,确定创新创业课程主题,围绕主题在石河子周边开展社会调查。通过社会实践调查,一方面了解自己课程涉及的行业市场,同时可以更加直观地感受新中国成立70多年来,我国在经济、社会和文化等领域发生的翻天覆地的变化,进一步感受祖国的伟大飞跃,进一步坚定学生的“四个自信”。

社会实践:课程通过暑期社会实践环节,在班级中组建三支暑期社会实践队伍,分别围绕化工企业行、化工校友寻访、追寻塔里木油田精神三个主题组建暑期社会实践队伍,见表3。通过走访化工企业,了解当前化工企业的发展现状,感悟化工魅力;通过拜访化工领域的劳动模范,号召学生向劳模学习,发扬工匠精神;通过兵团化工企业校友寻访,了解兵团当前化工领域的难点和痛点,以期学生能够通过学习深造,考研读博来研究困扰兵团化工领域发展的瓶颈,引导学生将论文写在兵团大地上。希望广大学生以校友为榜样,毕业以后留在新疆,扎根兵团,建设兵团,为兵团的新型工业化贡献一己之力。最后通过走访参观塔里木油田,进一步了解塔里木油田的开发史,了解胡杨精神,教育引导学生发扬胡杨精神、兵团精神,培养爱国爱疆、担当奉献的新时代毕业生。

四、课程思政浸润下绿色化工创新创业设计与实践课程设计与实践取得成效

(一)焕发思想政治教育活力,引导学生扎根边疆成长成才

通过第一课堂授课教学、第二课堂主题团日与学科竞赛实践、第三课堂社会实践三个层次让思想政治教育元素有机地融合在创新创业教育的三个课堂中。在学科竞赛中,进一步引导学生立足兵团实际,启发学生发现当前兵团化工行业的痛点问题,鼓励学生运用学院科研课程和创新创业思维去发掘创新创业课程,使得创新创业课程更接“地气”。通过社会实践课程,让学生进一步了解兵团,認识兵团,进而让学生留在兵团,扎根兵团。更重要的是,根据创新创业和思想政治教育教学的规律,教育引导学生在认知、情感和行为方面发生显著变化,让思想政治教育内化于心,外化于行。

(二)思想政治教育与创新创业教育有机结合,形成创新创业教育微生态

以思想政治教育与创新创业教育相结合为突破口,加强学生思想政治教育,提升创新创业型人才培养的能力和水平,有助于一流人才培养,加快我校的“双一流”建设。同时,有助于正向引导大学生克服消极择业的情绪,消除迷茫就业的思想,树立正确的职业生涯规划观念,激发大学生创新创业斗志,提升勇于创新创业的勇气,从而树立正确、科学的择业观、就业观和创业观,提高大学生群体的核心竞争力。更重要的是,通过三个课堂的有机衔接,以创新创业行为和理念信仰相结合的方式,使当代大学生内化理论知识,提高分析和解决现实问题的能力,同时具备基本的创新创业基本能力,这样不仅可以大幅提升思政工作的实效性,还创新了思政工作的方式,更好地满足了学生的就业与发展要求,提升思想政治教育与创新创业教育的实效性,形成了创新创业教育的微生态,努力营造了全员育人的良好氛围。

五、结束语

将思想政治融入创新创业教育中,遵循认知、情感和行动的教育学规律,将创新创业行为与理想信念相结合,进一步满足学生就业与选择的机会,将思想政治教育内化于心、外化于行,提升思想政治教育的时效性。发挥思想政治与创新创业教育的协同作用,通过主题团日活动和学科竞赛活动,培养和锻炼学生团队协作、组织协调、表达沟通的能力,引导大学生克服消极择业的情绪,树立正确的职业生涯规划观念,激发大学生创新创业斗志,从而树立正确的择业观、就业观和创业观,提高大学生群体的核心竞争力。

高等教育的时代性强调高等教育要与时代“同频共振”。本课程依托三个课堂,特别是学科竞赛和暑期社会实践课程的开展,让学生了解兵团精神,将小我融入大我,引导毕业生扎根兵团,建设兵团,将学术论文写在兵团大地,进一步培养学生的家国情怀,进而达到服务于国家重大战略需要的目的,为创新型国家建设提供人才保证,进一步提升创新创业型人才培养的能力和水平,助力一流人才培养。

参考文献:

[1]陈薇,潘英.高校创新创业教育课践行课程思政理念的关键问题与解决路径[J].佳木斯大学社会科学学报,2020,38(2):185-188.

[2]王江丽.基于“课程思政”视角的体验式“双创”教育模式研究[J].工程技术研究,2020,5(7):245-246.

[3]李克伟,卢伯年.课程思政视域的创新创业教育新发展[J].中学政治教学参考,2020(9):102.

[4]李太军.思政教育对培养学生创新创业能力的作用初探[J].创新创业理论研究与实践,2020,3(4):182-183.

[5]张明进,李晓东.课程思政视域下应用型院校创新创业教育改革路径探索[J].创新创业理论研究与实践,2019,2(24):87-89.

基金项目:2018年兵团科技局(知识产权局)“兵团工业转型升级形势下化工类创新人才培养基地”(2018CB001);2020年度石河子大

学教育教学改革课程“课程思政浸润下《绿色化工创新创业设计与实践》课程设计与实践”(JGY2020-5);2020年石河子大学通识教育选修课课程“绿色化工创新创业设计与实践”(TXKZC2020-1);2019年石河子大学教育教学改革课程“新工科背景下化工类专业创新创业实践教育模式探索”(ZG00760401);2019年石河子大学化学化工学院大学生思想政治教育专项课程“新工科专业科研育人模式的探索与实践”(SHYL-SZ201906);2019年石河子大学化学化工学院教育教学改革课程“基于‘竞赛+课程’的大学生主动实践能力的培养”(JG-201907)

作者简介:王安东(1990-),男,汉族,山东泰安人,硕士,讲师,研究方向为大学生思想政治教育及创新创业。

作者:王安东 陈龙 罗丹

第2篇:机械设计课程设计改革与实践

[摘 要] 机械设计课程设计是机械类各专业学生在学完“机械设计”课程之后进行的一个重要实践性环节,在培养学生科研创新能力和综合设计能力方面有着极其重要的作用。文章结合多年教学经验,分析并总结了机械设计课程设计教学现状和存在的问题,从选题、教学、设计和考核四个环节进行改革与实践,并提出具体改革措施。

[关键词] 机械设计;课程设计;教学改革

[

“机械设计”是高等工科院校机械类各专业学生必修的一门技术基础课程。是衔接先修的公共基础课和后续专业课的桥梁与纽带。机械设计课程设计可培养学生理论联系实际的设计思想,提高学生综合运用所学基本理论知识,结合生产实际,解决工程实际问题的能力,培养学生创新能力和综合设计能力。

目前机械设计课程设计教学中仍存在一些不足,例如设计题目比较单一、设计过程千篇一律、部分学生只是机械式地进行模仿设计,缺乏积极主动的思考。为了适应培养应用型人才的需求,必须要对课程设计进行相应的改革与探索,提高课程设计教学质量。

一 机械设计课程设计存在的不足

1 课程设计题目过于单一

多年来,我校机械类各专业的机械设计课程设计选题都是带式运输机的传动装置设计,一般为二级直齿(或斜齿)圆柱齿轮减速器的设计。给定的原始数据为运输带的工作拉力、工作速度、卷筒直徑、工作条件等,要求每个学生独立完成设计。我们知道,机械类各专业的培养目标是不相同的,如果所有专业都进行带式运输机的减速器装置设计,是不能很好地反映专业特点的。另外,由于是几个专业多个班级同时进行课程设计,这样会出现一些学生的题目相同或非常相近,客观上这也是造成抄袭现象严重的原因之一。

2 学生解决工程实际问题的能力较差

在机械设计课程设计的过程中,需要综合运用一些先修课程,如“工程材料”、“机械制图”、“工程力学”、“机械精度设计”等课程。学生对于这些先修课程理论知识的掌握程度并不好,综合应用能力比较差,课程设计质量不高。

例如:在设计计算过程中轴的强度计算时,需要用到工程力学中的弯矩、扭矩的计算,学生往往处理不好,出现许多问题。又例如:装配图及零件的绘制中,不能正确应用工程制图基本知识进行绘制,出现许多制图错误;装配图不标注尺寸;齿轮及轴等零件图中涉及到尺寸精度、几何精度、表面粗糙度的标注时,数值大小不知道如何确定,甚至根本就不标注;标准件简化图不规范等。

另外,有些学生对待课程设计的态度不端正,对课程设计重视不够,对所使用的参考资料及文献盲目模仿、照搬照抄。

3 细节处理上存在诸多问题

这也是导致设计质量不高的主要原因,例如在轴的结构设计时,阶梯轴的轴向尺寸和径向尺寸的确定、轴上零件的轴向固定及周向固定等问题上总是出现很多错误;有些学生设计计算说明书中的零件的设计尺寸与零件图尺寸不相符,零件图与装配图上的零件不一致。此类细节问题有很多,表明学生工程设计的能力比较差。

4 设计手段存在不足

为了适应现代社会的发展及工程实际需要。先进的计算机绘图逐渐取代了传统的手工绘图。计算机绘图软件具有无纸化、高效快捷、易保存等优点,解决了传统手工设计修改难、修改费时等缺点。但是计算机绘图软件中易保存、易拷贝的特点也会造成学生抄袭现象严重。

二 课程设计教学改革与探索

机械设计课程设计是学生第一次进行较全面的设计能力训练。通过课程设计,让学生将所学课程的基本理论知识融合在一起,利用机械设计手册、查阅资料,设计一般简单机械。

1 改革课程设计题目

设计题目是课程设计的核心问题,选择题目时,一是要满足教学大纲的基本要求;二是要保证设计工作量合适,学生能在规定的时间内顺利完成。

在课程设计选题上要改变以往题目的单一疆化,对于学生而言,过难或过于复杂的题目都是不现实的,因此在题目选择上,仍将减速器设计作为课程设计的主要题目。减速器的类型非常多,除设计用于带式运输机的减速器外,还要设计用于破碎机、提升机的减速器等;除圆柱齿轮减速器外,还可以设计圆锥——圆柱齿轮减速器、蜗杆传动减速器等。

除保留减速器设计外,还选取了一些与工程实际关系密切的课题作为设计课题,让学生参与到教师的科研课题中,选作一些与工程实际关系密切,能培养学生科研创新能力的课题。另外也可让少数同学自主选题,与指导教师进行交流讨论,题目确定后可自行设计,教师定期进行辅导。

在题目分配方面,可考虑学生的综合素质来分配题目,尽量调动大多数学生学习的积极性,培养学生的创新意识。

2 改革教学顺序和教学方法

第一, 改变传统的机械设计课程教学模式,传统的教学模式是先课堂教学后课程设计。我们提前将课程设计任务书下发给每一位同学,让学生预先了解设计内容。将课程设计环节融于机械设计课程教学的整个过程中。学生在课外逐渐完成传动零件的设计计算和标准件的选择,教师给予指导并进行阶段性检查,这样可以增加学生的设计时间,提高设计质量。

为保证教学内容与课程设计进度相配合,将课程内容的教学顺序作以下调整:先讲授传动零件(如齿轮传动、带传动等)设计计算,再讲授轴的结构设计与轴承的计算,最后讲授连接件(螺纹连接、键连接等)的设计。整个过程中要同时进行设计说明书的编写及草图绘制。教学与设计同步进行。使教师与学生在机械设计课程的教学过程中始终围绕“设计”这个主线进行教与学,充分发挥学生主观能动性,有利于学生能及时将所学知识消化及应用。

第二,大多数学生对机械结构缺乏感性认识,在设计开始,安排学生进行减速器的拆装实验并组织学生观看各种机械结构视频,使学生对各种机械结构产生更加深入的感性认识,为课程设计打下坚实的基础。

第三,机械设计课程设计与实验课等实践性教学环节不同,有其自身的特殊性。设计过程中,要将学生作为设计的主体,教师起组织、引导、检查和把关的作用,要为学生营造良好的实践环境,注重调动学生的创造性。学生设计中碰到问题时,要多查阅资料、经常与同学进行探讨,不断地修改找到问题所在。这样,不但能培养学生的独立意识以及协作能力,还能提高他们解决实际问题的能力、科技创新能力。

3 改革设计方法及设计手段

随着科技的迅速发展,计算机技术已广泛地应用到各个领域,我们也要求学生应用计算机先进技术手段来进行课程设计。因为机械设计是机械原理的后续课程,在之前的机械原理教学中,我们就提示学生要利用课余时间学習一些常用计算机设计软件,如应用较广的计算机辅助设计软件Pro/E、UG等,为课程设计能够顺利进行作好前期准备。

设计过程中,根据学生综合素质,如基本理论知识的掌握程度,分析问题以及解决问题的能力,计算机软件操作能力等方面,来分层次要求。CAD软件使用熟练的,可用此软件进行二维绘图;会熟练运用Pro/E、UG等软件的学生,可用该软件进行三维实体建模,虚拟装配、运动仿真。分层次要求,可以给学生提供更大的创作空间,调动学生积极性。

4 改革考核方式

第一,对机械设计课程设计要进行独立考核,有单独的学分,这样可以增加学生的重视程度。

第二,现场答辩是机械设计课程设计主要的考核形式之一。为了保证答辩能够顺利进行,成立了由几位教师组成的答辩小组,每个学生先要简单自述设计过程、方法及步骤,然后由答辩小组老师提出问题,学生进行回答。答辩小组根据现场答题情况给出学生答辩环节的成绩。答辩结束后,还会要求学生修改课程设计说明书及图纸中出现的错误。

第三,课程设计成绩采用综合评价标准,这样有助于全面、真实地评价学生课程设计质量和教学效果,使学生端正学习态度,避免应付了事。把考核成绩分成几大块,其中平时出勤情况及设计过程中的表现共占10%,设计计算说明书占35%,图纸完成质量占35%,现场答辩成绩占20%。

课程设计是高校教学中一个重要的实践教学环节。机械设计课程设计是机械类各专业学生实践能力培养的重要内容。通过课程设计的学习,可以培养学生的计算机绘图技能、资料查阅能力,提高学生的整体设计能力和科研创新能力,能为学生后续课程学习以及毕业设计等奠定坚实的基础,对今后从事专业技术工作有着极其重要的意义和深远的影响。

参考文献

[1]濮良贵.机械设计(第九版)[M].北京:高等教育出版社,2013.

[2]何秀媛,等.高职“机械设计课程设计”教学改革的几点建议[J].教育探索,2009(9).

[3]李淼林.应用型本科“机械设计课程设计”教学改革初探[J].科技信息,2010(9).

作者:李宪芝 杨锡军 王新荣 姜国栋 陈思羽

第3篇:程序设计课程实践教学课程体系改革与实践

摘要:本文介绍了在实践教学课程体系的建设过程中我们所采取的步骤和方法,重点讨论了.NET课程体系、Java 课程体系、C++课程体系,同时给出了在教学中引入软件开发项目的流程。实践教学作为课程体系改革的一项重要的内容,从教学的实际情况现状出发,采取任务驱动、案例教学等教学方法,构建起基于工作过程的实践教学体系。

关键词:程序设计;实践教学;任务驱动

1引言

随着我国高校教学改革的不断深入,与之并重的实验教育与管理的改革也受到了越来越多的关注,尤其是高校的软件专业。程序设计课程的实践教学现状随着编程思想的不断完善及普及,越来越多的大中型软件采用工程的观点进行开发。许多计算机相关专业都将程序设计作为专业基础必修课程。由于该学科实践性很强,要求学生必须具有较高的实际操作能力和软件编程能力,而这些能力的培养,主要来自于实验课的教学。

实验教学的目的是培养学生的实践能力、动手能力、综合能力,它是全面提高学生综合素质的主要手段。但在以往的教学中,课程内容一般以语言体系教学为重点,主要培养学生对语言的基本运用能力。由于编程思想与学生以往学习方法差异较大,学生在学习上有一定难度。同时由于教学中用到的实例程序与实际工程应用联系不够紧密,学生在学习过程中仍然是“只见树木不见森林”,不能很好地将所学习到的知识融入到实际工作中。正因为如此,我们成立了课程建设与改革项目组,对实践教学课程体系进行积极探索和研究,让学生多在实践中去学习,发现问题,锻炼项目开发能力,并且营造企业环境,体会和熟悉工作环境,接受针对职业生涯的实践培训,构建基于工作过程的实践教学体系。由于实践教学在该学科中的地位显得尤为重要,因此,摸索出一套适合于高校软件专业实践教学与管理的模式,成为人才培养的关键。我们结合学校新一轮教学培养计划的修改,对程序设计类课程实践教学行了一系列的改革,其目的就是为了满足当前社会对软件人才的需求,培养出创新型和应用型人才。

2构建程序设计实践教学体系

2.1实践课程总体目标

程序设计课程的实践教学坚持以动手能力为本位的设计原则,使学生对相应的技术体系有深入的理解与掌握,能够使用体系中的技术独立开发的项目。倡导以学生为主体的教育理念,重点训练学生的分析问题、解决问题的能力。注重学生职业素质的培养和学习兴趣的培养。使学生对企业的项目的开发及管理模式有深入的理解及体验,具有更强的项目开发及团队合作能力

具体方法是采用企业项目开发管理模式,结合案例教学、项目驱动等教学方法。让所有学习者通过模块化的,循序渐进的学习,具备坚实的技术基础,获得良好的技术素质,优秀的技术应用能力。模拟企业工作模式和工作流程的软件项目开发,突出教师指导作用,培养学生利用各种手段独立解决问题的能力。让学生通过专业素养的熏陶及培训,获得良好的职业素养、规范的专业工作习惯以及较强的工作能力。进一步强化学生掌握基本知识和基本技能,增强学生学习编程语言的自信心,为后续课程的展开奠定基础。

2.2实践教学课程体系介绍

实践教学课程体系以企业真实开发需求为基础,从项目案例开发为主线,配合灵活的模块化课程设置,根据学员不同的起点,搭建合适的学习路线。在循序渐进的前提下保证任何阶段都相对完整地、有体系地训练学员的职业能力。实践教学课程体系如图1所示。

作者简介:李兰,女,青岛理工大学计算机工程学院,副教授,主任。

图1实践教学课程体系

(1) 基础课程。通过模块化,按照企业实际技能需求,设计了学员在开发中必须掌握的各种技术技能,学会知识的应用;

(2) 实战训练。通过覆盖相对应于基础模块的知识点,使学员理解所学知识、验证所学知识、利用所学技术实现相应难度的企业真实项目,并且通过体验完整项目开发逐步理解和掌握从需求、设计到实现、部署的整个软件生命周期过程。

(3) 考核体系。通过全程考核体系随时了解学员成长动态,并引入企业竞争机制,使学员真切体验真实工作状态,锻炼和培养良好职业素养。

2.3实践教学具体内容

按照“项目导向,任务驱动”教学模式设计实践项目,以程序开发技能训练为实践教学内容,强化知识与能力,在实训项目的选择上,根据技能型专业人才培养目标、岗位需求和前后续课程的衔接,以职业能力为主线,以岗位需求为依据,以工作过程为导向,针对软件开发的工作流程,进行相应的职业能力分解,精选企业真实项目。教师在教学过程中可以根据实践教学计划选择实训项目。实践教学内容主要包括以下三个方向:

(1).NET课程体系

课程体系阶段划分为三阶段。

第一阶段基础知识:通过该阶段的学习,应掌握坚实的技术基础,灵活的技术应用能力,逻辑思维能力,主动学习能力。通过该阶段的学习,应掌握坚实的技术基础,灵活的技术应用能力,逻辑思维能力,主动学习能力;历史地了解.NET技术的来龙去脉,通过回顾开发技术和语言等的发展,了解到.NET技术为什么会产生,它和以往的技术有什么不同;通过横向对比现有的其他各种技术,在更深的层面理解.NET框架技术; 掌握C# 2.0语言,深刻理解面向对象编程的基本原理及概念;学习并掌握最基本的.NET技术包括字符串处理、集合、ADO.NET 2.0、ASP.NET 2.0、XML与Web Service、Windows Form开发等;熟练使用最新的微软开发工具Visual Studio 2005及SQL Server 2005;编码量和动手练习达到一定量。亲手编写对应每一个技术要点的练习代码,达到一定的代码量,提升编码熟练度;学生能够自主学习,通过学习使用MSDN Library、微软官方网站提供的技术资源、其他网站提供的技术与资源,明了去哪里获得微软公司的产品和技术信息,包括最新的产品和技术信息,让他们可以拥有自己学习和跟踪微软技术的能力。

第二阶段项目开发:通过该阶段的学习,学生可以综合运用第一阶段所学的基础知识,掌握各种主流开发技能,具备独立思考和解决项目开发问题的能力,能够娴熟应用已掌握的各项技能。通过项目实例的分析及开发,使学生可对第一阶段所学基础知识以及高级的开发技能及概念有更综合的认识及运用;通过结构良好的项目实例的分析,学习良好的编码规范、系统结构以及技术的综合运用;通过项目实例的开发,使学生提升开发技能,可以独立开发智能客户端及Web等各种不同类型的项目;培养学员对于新技术的好奇心和对于技术的渴望感,激发他们用所学到的丰富多样的类库和技术去尝试编写属于自己的项目应用。

第三阶段项目实战:通过本阶段的学习,学员可以了解CMMI规范下的项目开发流程,以及企业中实际的项目开发及管理过程,能够很好的协助团队进行开发;面对大型企业项目开发,能获取和分析需求,掌握系统设计思想,掌握需求开发及需求管理的相关技能,熟悉面向对象的分析及设计以及UML等技术在企业及开发中的运用;能够很好的协助团队进行开发。订单式培训方向学员熟悉专业知识,掌握行业客户特点,并具备相应行业开发经验。

(2)JAVA课程体系

JAVA课程体系主要包括“JAVA程序设计”、“JSP开发技术”和“网络应用项目实践”等主干课程。“JAVA程序设计”是JAVA课程体系中的核心课程,它的教学效果直接影响到后续课程的教学。对JAVA教学从培养目标到课程定位,从课程体系到教学方式必须要进行全面的改革,以往的教学是以教师讲为主,学生听为辅,实验课是学生照着教材“敲代码”。这样培养出来的学生缺乏自主探索知识的能力,没有软件工程思想的体现,脱离了实际应用,缺乏运用知识解决实际问题的能力。因此,如何进行“JAVA程序设计”课程改革,使其适合学生学习的特点,符合教学的要求,是一个亟待解决的问题。

我们在教学中采取分阶段,逐级提升教学内容,让学生从做中学,学中做,达到课程的教学目标。

第一阶段基础知识:通过该阶段的学习,应掌握坚实的JAVA技术基础,灵活的技术应用能力,逻辑思维能力,主动学习能力以及对于面向对象编程的深刻理解。完整地了解JAVA技术的来龙去脉,通过回顾开发技术和语言等的发展,了解到JAVA技术在企业级开发上的优势所在;掌握JAVA语言,深刻理解面向对象编程的基本原理及概念;学习并掌握最基本的JAVA技术包括字符串处理、集合框架、JDBC、异常体系、多线程、I/O、泛型编程、网络编程等;学习并熟练配置和使用主流的JAVA开发工具Eclipse等;编码量和动手练习达到一定量。亲手编写对应每一个技术要点的练习代码,达到一定的代码量,提升编码熟练度;学员能够自主学习,通过学习使用开源项目库、国外JAVA技术站点提供的技术资源、其他网站提供的技术与资源,证明了如何获取有效的JAVA技术信息和资源,让他们可以拥有自己学习和跟踪JAVA技术的能力。

第二阶段主流开发技术与项目实践:通过该阶段的学习,学员可以综合运用第一阶段所学的基础知识,掌握各种主流开发技能,熟练使用Struts、Hibernate、Spring等J2EE开发框架,具备独立思考和解决项目开发问题的能力,了解企业级项目的架构知识。能够娴熟应用已掌握的各项技能;通过项目实例的分析及开发,使学员掌握当今企业开发的主流框架和技术,可对这些高级的开发技能及概念有更综合的认识及运用;通过结构良好的项目实例的分析,学习良好的编码规范、系统结构以及技术的综合运用;通过项目实例的开发,使学员提升开发技能,可以独立开发多框架整合的N层企业级项目;培养学生对于新技术的好奇心和对于技术的渴望感,激发他们深入研究用所学到的丰富多样的框架和形成有效的技术分析思维方式。

第三阶段项目实战:通过本阶段的学习,学员可以了解CMMI规范下的项目开发流程,以及企业中实际的项目开发及管理过程,能够很好的协助团队进行开发;面对大型企业项目开发,能获取和分析需求,掌握需求开发及需求管理的相关技能,掌握系统设计思想,理解企业及开发中的架构及模式等设计方法及技能;熟悉面向对象的分析及设计以及UML等技术在企业及开发中的运用;订单式培训方向学生熟悉行业知识,掌握行业客户特点,并具备相应行业开发经验。

(3)C++课程体系

学习C++编程技术,必须了解和掌握C++制订的各种规则,然后应用这些规则写程序,也就容易了。与Basic和C等语言相比,C++的规则确实多出许多,掌握它必须付出努力!然而一旦掌握了这些规则,对于学习掌握面向对象编程技术,乃至于学习JAVA,C#及VB.net之类的编程语言,也就容易多了。

第一阶段基础知识:通过该阶段的学习,应掌握坚实的技术基础,灵活的技术应用能力,逻辑思维能力,主动学习能力。介绍C++对象模型,熟练运用封装、继承、多态等方法,初步掌握C++语言,能运用代码进行窗口的编写;学习并掌握最基本的C++技术包括GDI、定时器、dll、注册表等;掌握TCP/IP协议基本概念;编码量和动手练习达到一定量。亲手编写对应每一个技术要点的练习代码,达到一定的代码量,提升编码熟练度。

第二阶段模拟演习阶段:由老师讲解,学习仿效。一方面稳固第一阶段的知识点,另一方面,学习编程规范,开拓思路。通过实际演练的方式分析讲解一个项目的具体实现,该项目主要的功能是开发一个在线棋牌游戏的一个构架,会使用到第一阶段的全部知识点。第二阶段的学习主要是通过一个具体的项目,消化吸收先前学过的知识。这个阶段的实践内容是参照联众网络游戏的一个构架。这个阶段学习的新内容是数据库的开发。通过项目实例的分析及开发,使学员初步了解网络游戏设计的需求说明、网络游戏User Case框图建立及游戏客户端类图设计。通过项目实例的开发,使学员提升开发技能,能进行游戏客户端设计及游戏服务器端数据库处理等方面的开发培养学员对于新技术的好奇心和对于技术的渴望感,激发他们深入研究用所学到的丰富多样的框架和形成有效的技术分析思维方式。

第三阶段实战演习阶段:通过本阶段的学习,学员可以了解CMMI规范下的项目开发流程,面对大型企业项目开发,能获取和分析需求,掌握系统设计思想,能够很好的协助团队进行开发。可以独立的使用C++技术开发游戏项目。让学生通过对棋牌游戏的了解,提出该游戏的需求,并在此基础上,制定出游戏要开发的大致模块。以文档的形式提交。老师在此过程中讲解如何进行需求分析。对于每个模块,在框架的基础上进行细分设计,并提交详细设计分析报告以及开发周期。需要老师讲解如何进行详细设计的,以及可行性分析。进行编码的编写和调试,并实现项目的总体功能。

3程序设计实践教学改革的效果

我们是从2007年开始采用这套实践教学改革方案,从2003级、2004级学生在校学习情况来看,情况良好,有75%的学生在毕业时直接进入软件公司,经过了两年多的实践教学,在课程开发组成员的共同努力下,学生了解企业级编程中的常用技术及必须掌握的难点、重点;了解企业级编程中所涉及到的知识在系统中的具体应用位置,及它们之间的相互关系;教师按照项目管理的要求及项目开发流程,以项目组的形式带领学生进行项目开发实战,让学生充分了解整个开发过程,在过程中掌握实用技术及方法,增加解决处理问题的能力及经验。改变了教师从传授理论为主,变为促进学生技能的形成为主,强化学生动手操作能力;学生则由被动学习转为主动学习,增强了自主学习意识和创新思维能力。

4结束语

为了培养应用型、创新型人才,课程教学的改革是必不可少的环节,对于程序设计类课程,实践环节非常重要,因此,采用“循序渐进”、“环环相扣”的方式组织教学内容,形成合理的知识链,不但使得学生初步具备了工作岗位需求的专业技能和职业素养,而且为学生在职场上的可持续发展打下坚实的基础。为“项目导向”、“任务驱动”、“案例教学”,成立“创新工作室”提供了学习平台,在实际的教学实践环节中发挥了巨大的作用。

Programming Practical Teaching Curriculum Reform and Practice

LI Lan, REN Feng-hua

(College of Computer Engineering, Qingdao Technological University, Qindao 266033, China)

Key words: programming; the practice of teaching; task-driven

作者:李 兰 任凤华

第4篇:课程设计项目实践

项目实践、设计与产品制作

本专题实践是专为电气工程专业的高年级学生,进入专业学习前所进行的专题培训,目的是为了更好地使学生适应专业学习和毕业设计,重点培养同学们动手实践和自我规划课题的能力。

专业专题实践分硬件和软件两类。其中硬件类实践是在微机原理与应用、单片机、DSP等课程基础上,结合实际的小项目,通过项目调研、方案设计、实验调试、总结报告,进行具体项目的综合训练。在整个实践过程中,希望同学们有意识地注意以下几个方面的训练:调研,方案设计,系统,控制软件方法设计,调试,总结。

同学们首先要站在宏观角度审视一个具体项目,通过调研,制定技术方案;然后按照所确定的技术路线进行相应的设计、制作、编程、调试和测试,最后进行总结和提高。希望同学们以非常认真的态度,珍惜难得的实践机会,认真完成实践任务。

需要提醒的是,专业专题实践不同于其它课程,它是项目型教学,主要是发挥同学们自己的主观能动性,自主学习性,不要依赖教师。在实践中教师是在宏观上辅导(如帮助分析方案和解答疑惑问题),所起的作用是辅助性的。更多的是需要靠同学们自己主动去调研、设计方案、实验、总结。项目型实践课程与平时的实验课不同,实验课有详细、具体的实验指导书,告诉同学们具体的实验步骤。项目实践课并不给出具体详细实践步骤和方法,需要同学们自己通过调研、与老师或同学讨论、合理分工完成。这里不仅培养同学们的自主学习(自主研发)精神和能力,也培养大家主动型的学习习惯,同时更是培养大家相互协作精神、发现问题和解决问题的能力以及研究性学习的能力。

一、实践要求

1. 每个实验项目3人一组,分工进行,提倡好的合作精神; 2. 专题实践以设计、实践为主,共四周时间;

3. 爱护设备,不随意更换设备,如有要求,请与老师联系;

4. 做硬件实验时,注意断电操作,即所有的接线、改线及拆线操作均应在不带电的状态下进行,严禁带电操作;

5. 坚持复查制度,例如通电前的复查:一人接线另一人检查,重要结果和现象复查实行二人制;

6. 每天实验完毕(包括中午),请恢复桌椅原位,,保持实验室的整洁,关闭所用实验设备电源,再离开实验室;

7. 注意人身、实验仪器和设备安全,防止发生事故。万一发生事故,应立即切断电源,保护人员,保存现场,并立即向教师报告,检查事故原因,总结并吸取教训;

8. 电热设备(如烙铁)用毕必须随手拔下电源插头,以免过热引起火灾;平时注意实验板上的带电情况,测量和调试中防止触电、短路;注意示波器高频探头的地极是通过示波器电源插头的中心端接地的,切勿将该地极与交流电源的火线相接,否则将发生短路事故;

9. 参考文献或芯片、器件手册阅读量要求:20篇以上; 10. 要求每日记录工作日志和实验情况,参见简要工作日志格式。

二、实践报告及成绩评定

1. 以小组(3人名义)形式需要完成3份报告:(1)开题报告;(2)中期报告;(3)结题报告。报告要求见后面要求。 注意:

2. 每人需要完成1份个人小结,第5周五前前提交,延期扣分。报告格式见后面要求。 3. 实施2次检查,(1)中期检查,第2周周5;(2)结题检查,第4周周5。 4. 成绩评定依据:

开题10分;中期考核10分;态度10分; 项目工作完成情况40分:

项目完成的质和量是考核的重点,还要考核同学们专题实践的主动性,项目组成员之间的合作情况,仪器设备、芯片的正确使用情况,项目验收时汇报和答辩情况等; 项目报告30分:

报告质量情况、总结的深度是考核的重点,兼顾认真程度和格式等。建议结题报告按学位论文格式完成,要求有:摘要、综述(文献阅读、任务分析、工作安排等)、正文论述、项目结论、参考文献等。

鼓励同学们自主创新,如有专利、论文等的思路或草稿,可以考虑适当加分。

.结题报告格式(每组只交一份,第2周末交) 要求按毕业设计论文模板书写结题报告。报告包括以下内容: 1. 报告摘要;

2. 课题论述:包括专题实验目的,文献阅读、项目的综述,项目要求、技术要点、难点;

3. 设计方案说明,包括设计方案研究、分析、总体方案思路,所采取的技术路线,工作和时间安排,人员分工;

4. 设计内容,包括具体的项目设计,软硬件设计,调试,讨论;

资源:单片机的选择论述,软件资源的利用等; 硬件:电路原理图、PCB图(如果有的话); 软件:结构、流程、源程序和程序注释; 调试:调试过程、问题的发现和解决;

5. 课题实验、调试记录,完成情况,存在问题及可能的解决方案,工作总结; 6. 项目结论(实验结果和结论、成果、遗憾、后续工作);

7. 附录(包括列出所用软件工具、找到的各种电子参考资料、参考文献等)

个人实践小结(每人交一份),第2周末交

主要写个人对项目的理解、投入、贡献、收获,并对自己的项目工作做简单评估,按五个等级自评:优(90~100),良(80~89),中(79~70),及格(60~69),差(60以下)。请实事求是评价个人工作,过高或过低评价都不推荐。

项目1 微机继电保护的设计与实现

一.实验目的

学习和实践交流信号数据采集和微机保护算法,学习微机保护的软、硬件原理,设计微机保护原理型样机,使用学校现有单片机教学实验箱或实验板完成原理型微机继电保护装置并实现其主要功能。

二.实验任务

1. 学习一种单片机(如Intel80

51、MC、ARM、瑞萨9等)或DSP(240

7、28

12、28335等)原理和使用,学习其编程方法;

2. 学习A/D转换技术,搭建单片机外围模拟交流信号(A/D转换器外围信号)采集环节,用信号发生器模拟继电保护电流信号(互感器输出),测试瞬时性继电保护(如电流速断)动作特性(动作和返回,返回系数0.9); 3. 设计交流信号的数据采集和微机保护算法,设计数字滤波算法,编写继电保护软件,常用有效值算法,例如半周波积分算法、差分算法、傅立叶算法等;

4. 编写实时显示程序,实现显示功能:显示交流信号有效值(折算出虚拟CT原边电流,例如100/5A,5A/2V),如能设计通讯,使用PC机做上位监控计算机实时显示测量值最好;

5. 编写延时过电流保护逻辑的微机保护软件,并实现延时过电流保护; 6. 设计实验电路板(原理图和PCB电路板),并评估。

三.相关资料和实验平台

1. 单片机或DSP实验主板,单片机或DSP资料和datasheet; 2. 继电保护、微机继电保护参考书;

3. 微机继电保护参考文献,软件流程和交流采样算法文献; 4. 实验板、部分外围芯片(如运放)、信号发生器、示波器等 5. C++编程或Lab View界面编程语言。

四.提示

请同学编写继电保护软件,主要是设计交流数据采集策略和算法,让单片机实时显示被采集的交流信号有效值,比较保护定值,决定保护动作(驱动指示灯实时点亮)。

五.选题对象

限已经选修数字和模拟电子电路、单片机课程的同学,学习过微机继电保护最好。 3人一组,合理分工。

项目2 变频器的设计与实现

暂缓

一、实验目的

学习变频调速原理,学习正弦波PWM控制方法,掌握设计和实现变频调试器的方法。 本任务拟采用纸上谈兵方式进行,主要是考核同学们具体任务的分析问题和解决问题的能力。要求给出设计方案、方法、作出设计、以及实现方式。

二. 实验任务

1. 利用IPM设计变频器的主电路;

2. 利用瑞萨单片机、MSP430或DSP设计变频器的控制系统(主要是PWM); 3. 调试变频器的软、硬件系统,最终能带三相小型异步电机;

4. 设计相关的控制算法、控制软件,产生变频PWM信号或功率输出,实现:

(1) 变频器的变频输出、V/F特性(V/F=const);

(2) 电机的起动和停止特性、电机运行中的变频控制、调压控制等; (3) 评估逆变器输出波形。

三. 实验平台和有关资料

1. 变频器样机(供设计参考,该样机资料有限,开放性较差,能开发的余地小); 2. 提供变频器主电路板及相关器件,可在此基础上完成变频器主电路系统;

3. 自选单片机(实验室已有的)做控制平台,依据该单片机Datasheet编写相关控制软件并调试;

4. 相关的一些网站:TI公司 DSP网站上面有许多介绍变频器控制的软件、方法、甚至源代码;三菱公司网站,介绍IPM模块、整流模块;

一些变频器网站介绍变频器:如http://等; 5. 图书馆可借阅一些变频器相关书籍、文献。

四. 选题对象

限已经选修过电力电子、数字和模拟电子电路、单片机课程的同学。

第5篇:课程设计实践心得

一、课程设计的目的

掌握电力系统潮流计算的基本原理。 掌握并熟练运用MATLAB仿真软件。

采用MATLAB仿真软件,做出系统接线图的潮流计算仿真结果。

二、课程设计要求

1、在读懂程序的基础上画出潮流计算基本流程图

2、通过输入数据,进行潮流计算输出结果

3、对不同的负荷变化,分析潮流分布,写出分析说明。

4、对不同的负荷变化,进行潮流的调节控制,并说明调节控制的方法,并列表表示调节控制的参数变化。

5、打印利用MATLAB进行潮流分析绘制的系统图,以及潮流分布图。

三、课程设计基本内容

1. 对给定的网络查找潮流计算所需的各元件等值参数,画出等值电路图。

2. 输入各支路数据,各节点数据利用给定的程序进行在变电所在某一负荷情况下的潮流计算,并对计算结果进行分析。

3. 跟随变电所负荷按一定比例发生变化,进行潮流计算分析。 1) 4个变电所的负荷同时以2%的比例增大; 2) 4个变电所的负荷同时以2%的比例下降;

3) 1和4号变电所的负荷同时以2%的比例下降,而2和3号变电所的负荷同时以2%的比例上升;

4. 在不同的负荷情况下,分析潮流计算的结果,如果各母线电压不满足要求,进行电压的调整。(变电所低压母线电压10KV要求调整范围在9.5-10.5之间;电压35KV要求调整范围在35-36之间)。

5. 轮流断开环网一回线,分析潮流的分布。

6. 利用MATLAB软件,进行绘制系统图进行上述各种情况潮流的分析,并进行结果的比较。

7. 最终形成课程设计成品说明书。

四、问题分析

1、节点设置及分类

2设为节点1,10,根据系统图可知此系统为两端供电网路,将母线1,将变电所

1、

2、

3、4的高低压侧分别设为节点

2、

3、

4、

5、

6、

7、

8、9。并且,将节点1设为平衡节点,将节点10设为PV节点,其余节点设为PQ节点。

2、参数求取

设定基准值SB100MVA,UB220KV,所以ZB资料,计算发电厂、变压器及线路的参数。

(1)运用下列公式计算变压器参数:

SBUB2484根据题目原始

PUU%URX100S 1000S22kNKNT2TNNZ(2)计算线路参数

RTXTTZTZZTB

ZRjX(rjx)L

(3)变电所负荷分别为:

变电所1

SL=50+j30.987

变电所2

SL=40+j27.79 变电所3

SL=50+j30.987

变电所4

SL=60+j37.18

3、计算变压器分接头变比

变压器有5个抽头,电压调节范围为UN2*2.5%,UN对应的分接头开始时设变压器高压侧接主接头,降压变压器5个分接头时的非标准变比k*以备调压时选用

对变电所低压母线为35KV时,非标准变比与10KV时相同。

4、计算方法

利用牛顿拉夫逊法进行求解,用MATLAB软件编程,可以求解系统潮流分 布根据题目的不同要求对参数进行调整,通过调节变压器变比和发电厂的电压,求解出合理的潮流分布,最后用PSAT进行潮流分析,将两者进行比较。

5、牛顿—拉夫逊法

(1)牛顿—拉夫逊法概要

首先对一般的牛顿—拉夫逊法作简单的说明。已知一个变量X函数为:

到此方程时,由适当的近似值X(n1)(0)220(15%)100.95511220 220(12.5%)10k*20.93211220 22010k*30.90911220 220(12.5%)10k*40.88611220 220(15%)10k*50.86411220 k*1f(X)0

出发,根据:

(n)X反复进行计算,当X的牛顿—拉夫逊法。

(n)Xf(X(n))(n1,2,......)f(X(n))

满足适当的收敛条件就是上面方程的根。这样的方法就是所谓

(n)这一方法还可以做下面的解释,设第n次迭代得到的解语真值之差,即X时,则:

把f(X(n))在X(n)的误差为附近对用泰勒级数展开

)f(X(n)f(X(n))0

)f(X(n)f(X(n))22!f(X(n))......0

上式省略去2以后部分

f(X(n))f(X(n))0

(n)X的误差可以近似由上式计算出来。

f(X(n)) (n)f(X)比较两式,可以看出牛顿—拉夫逊法的休整量和X用同样的方法考虑,给出n个变量的n个方程:

(n)的误差的一次项相等。

f1(X1,X2,,Xn)0f(X,X,,X)0212n fn(X1,X2,,Xn)0对其近似解X得修正量X可以通过解下边的方程来确定:

11f1f1f1,,Xn)f1(X1,X2xxx12nf(X,X,,X)X1f2n212f2f2X2x1x2 xnXfnfnfnnfn(X1,X2,,X)nxnx1x2fn,X2,,Xn的值。式中等号右边的矩阵都是对于X1这一矩阵称为雅可比(JACOBI)

xn,X2,,Xn后,得到如下关系 矩阵。按上述得到的修正向量X1XnXn Xn,X2,,Xn更接近真实值。这一步在收敛到希望的值以前重复进行,一般要反这比X1复计算满足

maxX1n1X1n1,X2n1X2n1,,Xnn1Xnn1

为预先规定的小正数,Xnn1是第n次迭代Xn(2)牛顿法的框图及求解过程

用牛顿法计算潮流时,有以下的步骤: ①给这各节点电压初始值e(0),f(0);

的近似值。

②将以上电压初始值代入公式,求修正方程的常数项向量P(0),Q(0),(V2)(0); ③将电压初始值在带入上述公式,求出修正方程中系数矩阵的各元素。 ④解修正方程式e(0),f(0);

f(0)f(0);

⑥将e(1),f(1)在带入方程式,求出P(1),Q(1),(V2)(1); ⑤修正各节点电压e(1)e(0)e(0),f⑦检验是否收敛,即maxPi(1)(k),Qi(k)

如果收敛,迭代到此结束,进一步计算各线路潮流和平衡节点功率,并打印输出结果。如果不收敛,转回②进行下次迭代计算,直到收敛为止。

五、问题求解

电压是衡量电力系统电能质量的标准之一。电压过高或过低,都将对人身及其用电设备产生重大的影响。保证用户的电压接近额定值是电力系统调度的基本任务之一。当系统的电压偏离允许值时,电力系统必须应用电压调节技术调节系统电压的大小,使其维持在允许值范围内。本文经过手算形成了等值电路图,并编写好了程序得出节点电压标幺值,使其满足所要求的调整范围。

我们首先对给定的程序输入部分作了简要的分析,程序开始需要我们确定输入节点数、支路数、平衡母线号、支路参数矩阵、节点参数矩阵。

(1)为了保证整个系统潮流计算的完整性,我们把凡具有母线及发电机处均选作节点,这样,可以确定有10个节点,节点号见等值电路图。

(2)确定完节点及编号后,各条支路也相应确定了,网络中总计有13条支路,我们对各支路参数进行了计算。根据所给实际电路图和题中的已知条件,有以下公式计算各输电线路的阻抗和对地支路电容的标幺值和变压器的阻抗标幺值。选择电压基准值为UB=220KV和功率基准值SB=100MVA,所以ZB

六、误差分析

UB=484。 SB以系统在正常运行的情况下为例。利用PSAT软件,比对MATLAB中的B

1、B2矩阵,得到各个节点的电压状况。将PSAT软件运行的结果对MATLAB运行的结果进行校验。同时利用该软件对图形颜色的变化的描绘和数据对结果进行呈现。得到PSAT软件运行的结果各节点的电压标幺值,并与MATLAB程序运行得到的结果进行比较。

七、心得体会及总结

此次课程设计使我在潮流计算、MATLAB的使用方面均有所提高,但也暴露出了一些问题;理论知识的储备还是不足,对MATLAB的性能和特点还不能有一个全面的把握,对MATLAB中PSAT工具箱使用不够熟悉,相信通过以后的学习能弥补这些不足,从而达到一个新的层次。潮流计算是电力系统的最基本、最常用的分析计算。用以研究系统规划和运行中提出的各种问题。对规划中的电力系统,通过潮流计算可以检验所提出的电力系统规划方案能否满足各种运行方式的要求;对运行中的电力系统,通过潮流计算可以预知各种负荷变化和网络结构的改变会不会危及系统的安全,系统中所有母线的电压是否在允许的范围以内,系统中各种元件(线路、变压器等)是否会出现过负荷,以及可能出现过负荷时应事先采取哪些预防措施等。实际的情况远比我们计算的情况复杂,这让我深刻了解了潮流计算的重要性。精准的潮流计算不仅可以使电网处于稳定且平衡的状态,这对电网的安全运行起到关键性的作用,还可以实现运行的经济性。所以我认为学好电力系统的关键在于学好潮流计算,电力系统的安全运行不是儿戏,一个很小的失误就可能造成整个电网的崩溃,这给国家和社会带来的危害和损失之大是可想而知的。学好电力系统这门课、学好潮流计算是我们电专业学生的当务之急。没有坚实的基础就不可能建造出高楼大厦,所以,要想在以后的工作岗位上有所成就,就必须打好基础,努力提高自己的专业素养。

通过此次课程设使得我更加扎实的掌握了有关潮流计算和MATLAB方面相关的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正不断领悟和不断获取。最终的检测调试环节本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了。在设计中遇到了很多问题,最后在老师的指导下。终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决。只有这样,才能成功的做成想做的事,才能在今后的道路上披荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦。也永远不可能得到社会及他人对你的认可。

课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课;一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计。我掌握了MATLAB中各种元器件的识别和使用,熟悉了和了解了潮流计算的基本原理。以及如何提高实验的求解精度和收敛性能。掌握了MATLAB软件的方法和技术。

我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力。在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践、再学习、再实践。这对于我们的将来也有很大的帮助。以后不管有多苦,我想我们都能变苦为乐。找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。

回顾起此课程设计,至今我仍感慨颇多。从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识。而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的。只有把所学的理论知识与实践相结合起来从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。

实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量。只有互相之间默契融洽的配合才能换来最终完美的结果。此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询。只要认真钻研、动脑思考、动手实践,就没有弄不懂的知识,收获颇丰。 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,MATLB已经成为当前电力系统重要的仿真软件之一。因此作为二十一世纪的电气专业的大学来说掌握MATLB的开发技术是十分重要的。回顾起此次课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西。同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论。

与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处。对以前所学过的知识理解得不够深刻,掌握得不够牢固。比如说MATLAB中原理图的搭建以及潮流计算的基本原理掌握得不好。通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题。最后在陈老师的辛勤指导下,终于游逆而解。同时,在陈老师的身上我学得到很多实用的知识。

整个设计通过了软件调试和图形搭建以及程序设计。我想这对于自己以后的学习和工作都会有很大的帮助。在这次设计中遇到了很多实际性的问题,在实际设计中才发现书本上理论性的东西与在实际运用中的还是有一定的出入的。所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。对于教材管理系统,其程序是比较简单的,主要是解决程序设计中的问题。而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在MATLAB图形的搭建和参数的设置。其中很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。其次,这次课程设计让我充分认识到团队合作的重要性,只有分工协作才能保证整个项目的有条不紊。另外在课程设计的过程中,当我们碰到不明白的问题时,陈老师总是耐心的讲解,给我们的设计以极大的帮助,使我们获益匪浅。因此非常感谢老师的教导。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名电气工程专业的学生,这次课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课程懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解。但是通过这次的课程设计的沟通和各个小组同学探讨,渐渐对这门课程逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。

第6篇:创新实践课程设计要求

《创新实践》课程设计基本步骤

1、 需求分析

以无歧义的陈述说明程序设计的任务,强调的是程序要做什么。明确规定:输入的形式和输入值的范围;输出的形式;程序所能达到的功能;测试的数据(包括正确的输入和错误的输入及其相应的输出结果)。

2、 概要设计

说明程序中用到的所有抽象数据类型的定义,主程序的流程以及各程序模块之间的层次关系。

3、 详细设计与实现

实现概要设计中定义的所有数据类型和模块。对算法进行时空分析(包括基本操作和主要算法的时空复杂度的分析),可能情况下的改进设想。

4、 测试与调试

测试程序并解决调试过程中遇到的问题,记录如何解决的以及对设计实现的回顾讨论和分析,写出测试报告。

《创新实践》课程设计题目

一、 输油管道问题

某石油公司计划建设一条由东向西的主输油管道,该管道要穿过一条有n口油井的油田。从每口油井都要一条输油管道沿最短路径(从南向北)与主管道相连。如果给定n口油井的位置,即它们的x坐标(东西向)和y坐标(南北向),应如何确定的主管道的位置,使得各油井到主管道的距离之和最小?说明可以在线性时间内确定主管道的位置,给定n口油井的位置,编程计算各油井到主管道的距离之和。

二、 某人有n元的资金,计划从网上购物,他将每个喜欢的物品规定了一个重要度,分为5等,用整数1-5表示,第5等最重要,假设他知道每种产品的价格(价格为整数元),请为他设计一个购物单使得每件物品的价格与重要度的成绩之和最大。

三、 设计一款万年历软件,能够根据用户的设置显示正确的年、月、日、星期、特殊节日、农历节气等信息。

四、 选课方案设计

学生实行学分制,以本校学生学分管理机制为参考,每个学生需修满180学分,减去必修学分,制定一个选课方案,假设课程之间有先修关系,例如《数据结构》的先修课程为《C—语言程序设计》、《离散数学》等,给出本专业学生的课程先修关系设计实现选课方案辅助系统

五、 使用Wireshark软件捕获数据包,并将其保存为Wireshark/tcpdump/ *.pcap格式的文件。然后编写一个程序解析捕获到的文件,统计各IP地址、各MAC地址的收发分组数、收发字节数,按照从大到小的顺序输出统计结果,请上网搜索 libpcap 文件格式。

六、 编写一个ARP欺骗程序,对指定的IP地址发起欺骗,使其无法和网关通信。

七、 编写一个可视化的蚁群算法寻路程序。

八、 Tinyos无线传感器网络仿真实验

九、关联规则挖掘及应用

关联规则是发现大量数据中项集之间有趣的关联或相关联系。其中超市购物篮分析是典型的管理规则分析,通过购物篮分析,获取顾客购买交易中的隐藏信息,用以提高超市销售业绩,促销效果,甚至是商品摆放的方式。数据挖掘技术正是针对这种需要,用于隐含数据挖掘。可以掌握一些基本关联规则分析算法,通过实现加深理解,并测试效果。 设计并实现一套关联规则挖掘系统,对测试数据集进行实验,获取实验对比结果,并进行分析。

十、聚类分析应用研究

聚类分析是数据分析的重要方法之一,目的是将给定的观测数据集分组。要求:掌握基本的聚类方法,通过对其实现,加深理解,并测试其效果。

事实上,聚类可以分为基于划分的方法、基于层次的方法、基于密度的方法、基于网格的方法、模糊聚类等等。每一类中又包含多个方法。因而可以选择其中一类的方法进行探讨研究。

十一、文本挖掘算法设计与实现

通过对文本数据库进行分析,提取有用的信息,获得文档重要性和相关性排列,或查找多文档的模式或趋势。其是目前数据挖掘研究的热点之一,也是目前网络搜索公司的重要技术之一。

以上题目可以使用任意编程语言实现。

第7篇:综合实践活动课程设计(原创)

综合实践活动课程主题设计

活动主题:

重拾民俗民风,弘扬传统文化

综合实践活动课程设计

活 动 主 题

重拾民俗民风,弘扬传统文化

一、课 题 产 生 的 背 景:

首先,现在的城市满街都是麦当劳、肯德基,我们大多数同学也是热衷于这些看似快捷方便的快餐。而伴随着快餐而起的的是当代社会相当流行的快餐文化,它包括网络文化、盲目旅游、带料的影视文化等等。这种快餐文化反映出的是国民在快捷的社会生活中的盲目和浮躁。他们没有时间也不愿意占用自己的某个时间来沉静地思考,他们愿意接受的只是视觉等感觉上的冲击。与此同时,我们的民俗文化则成了快餐文化的牺牲品:除了卖粽子的人外,有多少人知道粽子应该如何包?有多少同学能讲出寒食节的来历?又有多少小学生懂得过年时自己放鞭炮看烟火的意义何在?

其次,我们的文化传统在我们的漠视的同时却渐渐吸引了众多来自于世界羡艳的目光——日本继承了中国传统文化中的“成人礼”并沿用至今,韩国响应端午节弄出了端午祭,吉尔吉斯斯坦与中国大争诗仙李白的国籍。这种种各各真的代表的只是一个礼仪一个节日一个出名的人物吗?诚然不是,在这些东西的背后蕴藏的是一个国家的文化底蕴,一个民族的深厚的历史积淀和传统文化。

基于以上两点我们不得不重视起我们的民俗文化,值得欣慰的是,我国陆续在世界各国建立起了孔夫子学院。尽管如此,儿童仍是我们的未来,只有在他们的心底种下一颗重视民俗的种子才能让我们的文化得到传承。于是,我们带着这个宗旨来展开关于民俗民风的主题活动。

二、课 题 目 标:

1. 熟悉中国各地大多数的民俗,了解世界其他民族的一些民俗文化

2. 通过调查、分析、学习实践能获得某些关于民俗文化的技能。

3. 培养学生重视民俗文化,保护民俗文化的感情,并对身边的父母邻居产生影响。

4. 对如何保护民俗,保护中国传统文化提出自己的意见。

5. 培养学生在发现、探究、自主合作的学习实践中,增长知识,培养兴趣,逐步养成善于研究、勤于分析动手、勇于创新的良好习惯。

三、课 题 活 动 的 对 象:

小学六年级某一班级学生

四、活 动 时 间:半学期

五、活 动 内 容:

本主题活动共设计了《谁是民俗“百晓生”?》、《人人都有民俗情》,《大家动手现民风》、《保护民俗民风,弘扬传统文化》这四个阶段。。

《保护民俗民风,弘扬传统文化》是让学生通过这次的调查采访和动手实践等理解民俗民风背后的文化,不仅使学生自己能尊重民俗民风,也能辐射到身边的家长好友。

六、活 动 过 程 设 计:

活动一:课时(2)节

活动主题:谁是民俗“百晓生”

活动形式:自我收集信息,小组比赛

活动内容:是学生运用查阅资料、走访、问卷等研究方法搜集出世界各国的民俗民风,使学生对这个概念有初步的了解进而引起学生的兴趣。

活动目标:1.培养学生调查、咨询、自我探究的能力。

2.通过对民俗的收集提高学生对主题的理解。

3.激发学生的兴趣。

活动过程:1.在教师的帮助下学生进行分组,并选出组长,负责组织工作。

2.老师组织各个小组的同学一起观看幻灯片,位同学讲述民俗民风的

定义。

3.老师布置任务,让各组同学同个调查、查阅、问卷等手段来收集民

俗民风。

4.以比赛的形式,各小组派代表来比比哪个小组收集到民风民俗的最

活动二:课时半个月

活动主题:人人都有民俗情

活动形式:进入社会,自我探究与调查

活动内容:1.是让学生谈谈在日常生活中,如端午节、清明节等日子中所体会到

的民俗民风并能说出一两个自己与民俗民风间的故事,也可以通过

与老人交谈、查阅资料来比较古今的民俗民风的异同。

2.是让学生调查当今社会不注重民俗的种种现象。

活动目标:1.让学生对主题进行思考,对自己的生活进行反思和总结,

2. 通过思考和倾听,理解民俗民风背后的含义

3.走进生活和社会细心观察,同差社会点滴,提高学生的各方面素质活动过程:1.各小组的同学相互交流,确立理出自己小组的活动主题,可以是自

己对的民俗民风的感受或者是经历过的和民俗有关的小故事,也可

以是历代的民度对比等等。

2.每个小组的同学根据自己的主题进行讨论,可以做问卷,访谈等。

3. 组织学生到博物馆参观并为学生讲解相关的民俗文化。

活动三:课时一个月

活动主题:大家动手现民风

活动形式:回归课堂,展开“主题PARTY”,总结主题

活动内容:是让学生通过自己的形式来演绎民俗民风,可以动手制作、团体表演

也可演奏、绘画等等。

活动目标:1.让学生再现民情民风,更深刻地理解文化内涵

2.用自己的形式表现主题,手、脑、口三者相结合,从多个角度锻炼

学生,培养学生动手动脑的能力。

3.通过调查访问后将自己的感想表达出来,真正将民俗文化内化于心

活动过程:1.给一周时间大家准备排练

2.老师组织,选定教室,和同学一起进行相关的教室布置。

3.展开“主题PARTY”,同学们尽情表演

4.表演结束后,为如何重让视民俗民风和传统文化引起世人的注意讨

论出几条具有建设性的意见。

5.由各小组为委派代表总结此次活动,并提出相关意见。

6.教师总结这场主题活动。

7.委派专员做记录。

8.布置任务:叫每个小组的调查报告和对此次活动的总结。

七、学 生 活 动 中 可 能 遇 到 的 困 难:

1. 不能很清晰的明白民俗的概念。

2. 不知道如何收集有用信息。

3. 不会分析处理信息。

八、活 动 总 结:

本次活动主要围绕“重拾民俗民风,弘扬传统文化” 这一主题,以讨论—调查—再讨论的形式,以学生为主体,教师为指导的宗旨展开的。

本主题活动共设计了《谁是民俗“百晓生”?》、《人人都有民俗情》,《大家动手现民风》三个阶段,分别为确定主题,收集信息,分析处理信息,成果展示和最后的汇报总结。共历时半个学期。

活动过程中,同学们被分为了几个小组,并选出组长,负责组织工作。首先,我们的老师为大家介绍我们的主题,让同学们在收集信息的过程中认识主题并激发学生的一定的兴趣,初定是两节课的时间。然后,有为期两周的,是同学们收集信息进入社会的时间,同学可根据自己的经历或访谈或查阅道德别人的经历来为大家讲述的民俗民风的故事,并谈谈自己的感受,最后通过为期半个月的观察找出社会上不注重民俗民愤和传统文化的实例。再请老师带领学生进入图书馆,进一步了解节日与文化的关系。接着,通过一次“主题PARTY”,给同学们机会自行对得到的信息进行分析处理,以各种文艺形式表现出来,如:包粽子,剪纸,

写对联,民族乐器演奏,多人小话剧再现民情民风,一笔绘民俗等等。表演结束后,有同学将内化于心的民俗文化总结一下,并讨论出如何如何让大家重视民俗的建议。最后、由组长总结此次活动,老师加以点评。

这样一次历时半个学期的综合实践活动,为了培养同学们对生活的观察能力,自己动手能力,收集并处理信息的能力。教师作为指导,只对同学们进行必要的引导活动,一切都交给同学们自己完成。

活动过程中,最困难的一个环节,正是让学生将民俗内化与自己的精神世界。而这个时候,学生是需要老师的引导的。

这样一次综合实践活动,希望能真正的起到作用,达到当初制定的目的,令同学们明白中国民俗民风的博大精深,让学生能发自内心地喜爱民俗,热爱中国的文化。

第8篇:《C程序设计实践》课程设计指导

一、课程设计目的

1、通过课程设计,熟练掌握Visual C++ 6.0 开发环境的使用,提高程序调试能力;

2、通过课程设计,提高学生分析问题、解决问题的能力;

3、通过课程设计,复习巩固C语言的循环结构、指针、数组、结构体、文件等方面的知识,并在实践中加以运用。

4、通过课程设计,提高学生查阅资料、吸收和运用新知识的能力。

二、课程设计要求

每个学生在下列课题中至少选一题,并独立完成。

1、学生成绩管理系统

2、学生档案管理系统

3、同学通信录管理系统

4、职工档案管理系统

5、职工工资信息管理系统

6、小型图书信息管理系统

7、超市商品信息管理系统

8、实验室设备信息管理系统

9、试题(选择题)信息管理系统

10、列车时刻表信息管理系统

每课题均须具有以下功能:

1、信息录入,包括记录的追加和插入;

2、信息删除;

3、信息修改;

4、信息排序和查询;

5、信息的保存和装载;

6、简单的帮助。

三、设计方法及过程

1、问题分析

包括系统所要完成的功能、数据结构分析,如问题处理过程中使用的结构体及包含的成员等,文件的类型、存储的内容等,输入/输出的格式等。

2、系统功能设计及模块(函数)划分

根据分析结果,画出系统结构图,确定系统的功能模块,包括模块的名字、接口(即函数的参数、返回值)及功能,模块间的调用关系。

3、模块的算法设计

设计每个功能模块的算法,可以用伪代码或流程图表示。

4、编码

代码的编写要符合规范,程序中对各个模块的功能、模块主要实现部分都需要加上注释,以增加程序的可读性,便于软件维护。

5、调试

四、设计报告

课程设计完成后,每位同学要写出《程序设计及C语言》课程设计报告,打印并上交(同时上交源代码),作为成绩的评定依据之一。报告的内容包括:问题分析、系统功能设计及模块(函数)划分、模块的算法设计、源代码及设计总结五个部分。

第9篇:C语言课程设计实践报告

北京理工大学珠海学院 C语言程序设计实践报告

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循环输出即可。

参考文献:

[1] 张克军:《程序设计基础》,科学出版社。

上一篇:数控铣床项目实施方案下一篇:企业顾问聘用协议书