
学习《软件工程》心得和体会
软程学习心得在期的软件工程课程的学习中,我们学习了十一章容。
第一章软软件工程的概念,这一章主要讲解的是一些概念性和基础性的内容,例如软件的概念、特性,软件危机的主要表现,软件工程的概念以及软件生存期、典型生存期模型等等。
第二章软件工程方法与工具,这一章主要对软件工程方法进行介绍,包括三种方法:传统方法、面向对象方法、形式化方法。
还引出了工具UML。
第三章软件需求获取与结构化分析方法,本章详细介绍了需求获取与需求分析阶段的任务以及结构化分析方法,画分层的数据流图、E-R图以及状态图式本节的重点。
第四章结构化分析方法,这一章重点讲解了使用变换型映射方法和事务型映射方法生成初始的模块结构以及模块结构的改进。
第五章编码,这一章重点讲解了编码的风格及规范,还告诉我们编码规范说带来的好处,并告诫我们将来一点要形成好的编码风格。
第六章软件测试方法,本章讲解了软件测试相关的概念及重要性,软件测试与开发各个阶段的关系;还介绍了白盒测试技术以及黑河测试技术。
第七章统一建模语言UML概述,本章详细介绍了UML的基本模式、事物、关系及建模时用到的各种图进行了介绍。
第八章面向对象分析,这一章主要讲解了面向对象分析的3种模型,包括功能模型、静态模型和动态模型。
第九章软件体系结构与设计模式,本章对软件体系结构的基本概念、典型风格等进行了讲解。
第十章面向对象设计,本章的重点是对面向对象分析时建立的对象模型进行调整和细化。
第十一章软件维护,本章主要介绍软件维护的任务、软件维护活动以及软件维护方法进行了介绍。
要学习软件工程,学会如何系统的思考,以及养成良好的编码习惯,想学好软件工程,就必须知道软件工程的目标、过程和原则: 软件工程目标:生产具有正确性、可用性以及开销合宜的产品。
正确性指软件产品达到预期功能的程度。
可用性指软件基本结构、实现及文档为用户可用的程度。
开销合宜是指软件开发、运行的整个开销满足用户要求的程度。
这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。
软件工程过程主要包括开发过程、运作过程、维护过程。
它们覆盖了需求、设计、实现、确认以及维护等活动。
需求活动包括问题分析和需求分析。
问题分析获取需求定义,又称软件需求规约。
需求分析生成功能规约。
设计活动一般包括概要设计和详细设计。
概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。
详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。
实现活动把设计结果转换为可执行的程序代码。
确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。
维护活动包括使用过程中的扩充、修改与完善。
伴随以上过程,还有管理过程、支持过程、培训过程等。
软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。
我们学习了详细设计的方法,其原则是过程描述是否易于理解、复审和维护,进而过程描述能够自然地转换成代码,并保证详细设计与代码完全一致。
包括程序流程图、N-S图、PAD图、HIPO图程序流程图:程序流程图又称之为程序框图,它是软件开发者最熟悉的一种算法表达工具。
它独立于任何一种程序设计语言,比较直观和清晰地描述过程的控制流程,易于学习掌握。
在流程图中只能使用下述的五种基本控制结构:顺序型;选择型;while型循环;until型循环;多情况型选择。
N-S图:一种符合结构化程序设计原则的图形描述工具,称为盒图,又称为N-S图。
在N-S图中,为了表示五种基本控制结构,规定了五种图形构件。
顺序型;选择型;WHILE重复型;UNTIL重复型;多分支选择型。
PAD图:它是用结构化程序设计思想表现程序逻辑结构的图形工具。
PAD也设置了五种基本控制结构的图示,并允许递归使用。
HIPO图:HIPO图是由一组IPO图加一张HC图组成。
它是美国IBM公司在软件设计中使用的主要表达工具。
HC图既是层次图,用于表示软件的分层结构。
HC图中的每一个模块,均可用一张IPO图来描述。
IPO 图由输入、处理和输出三个框组成,需要时还可以增加一个数据文件框,这种图形的优点,是能够直观地显示输入—处理—输出三者之间的联系。
还有测试方法:按照测试过程是否在实际应用环境中来分,有静态分析与动态测试。
测试方法有分析方法(包括静态分析法与白盒法)与非分析方法(称黑盒法)。
静态分析技术:不执行被测软件,可对需求分析说明书、软件设计说明书、源程序做结构检查、流程分析、符号执行来找出软件错误。
动态测试技术:当把程序作为一个函数,输入的全体称为函数的定义域,输出的全体称为函数的值域,函数则描述了输入的定义域与输出值域的关系。
还学习了其他很多工具、语言、方法等,虽然不是都学得很透彻,但我相信在今后的学习中一定会慢慢的完善的。
软件工程对于初学者来说,知识基础较薄弱,对一些应用操作、概念、工具方法等理解起来较为困难,要能从整体概念上较好地理解和把握、学好软件工程,不是仅仅把几本专业书籍细致地看几遍,然后上机练习几次就可以成功,学习过程中要注意多看多练要注意结合实际,更要多思考,面对错误不要一范就问,要尝试自己去解决。
但是还要注意什么都学,肯定是什么都学不透的,要集中精力打攻坚战,学习软件工程首先要明白自己的学习目标究竟是什么,根据自己的实际工作出发,有针对性的在相应的学习方向上进行提高,制定出详细的学习规划。
还要注意与其他科目的相辅相成,就像我们在学习面向对象分析的时候要结合大一学习的面向对象及其方法学这一专业科目进行研究拓展;在学习语言时,要看看与C语言的联系,多思多想,把从各个科目学到的知识通汇贯通。
在软件工程的学习中,我了解到了软件并非是一些代码这么简单,在开发软件的过程中,编写代码的工作量其实只占不到所有工程量的30%,而后期的管理和维护更是占了60%到80%之多。
一个完整的项目规划须包括,软件的定义,可行性分析报告,项目开发计划,软件需求说明书,概要设计说明书,详细设计说明书,用户操作手册,测试计划,测试分析报告,开发进度报告,项目开发总结报告,软件维护手册,软件问题报告,软件修改报告,等多个文档,每个文档都要上级验收审查,而文档数量众多,要做好这点真的不是很容易,而恰恰写好文档正能保证完成软件工程其中一个目的的关键,既研究如何用最小的开销做出生存期较长的软件,再加上各个阶段都要进行周密的策划、详细的分工部署和人员安排,且各阶段要据具体情况不断的反复才能达成,所以代码只是开发软件这个浩大的工程的一个小小的过程。
而编码的学习中,我更了解到形成自己独特的规范的编码风格是非常重要的事。
因为这影响到了软件后期繁重的维护,大家都要阅读你的程序,如果你写的程序毫无规范可言,那么别人怎么能读懂你的程序
读不懂程序,维护又从何谈起呢
所以,我们在今后的学习中,一定要注意这方面的培养,在写程序的过程中,要逐步的在规范的基础上形成属于自己的风格,即方便自己的修改,也方便日后他人的阅读。
在学习中,我们还要注意比较三种方法的优缺点,例如:传统方法虽然使软件摆脱了混乱和无序,但其在适应需求变化的方面不够灵活,而且传统方法要么面向行为,要么面向数据,缺乏两者的有机结合。
而面向对象方法的程序设计和问题求解更符合人们日常自然的思维习惯,适合大型、复杂及交互性比较强的系统。
形式化方法则是一中基于形式化数学变换的软件开发方法,它可将系统的规格说明转换为可执行的程序。
在今后的学习中要注意多读书、多思考、多练习、多讨论,不断熟悉书本的基础,并以此为基础将其扩散开来,应用于今后的实践。
不断锻炼自己,向一名合格的程序设计师迈进。
XX课程学习心得体会
XX课程学习心得体会 经过潘老师讲授软件工程实践后,感觉对软件工程这门学科有了深一层的认识。
软件工程是一门重视实际操作的科学。
对于软件产品,无非是产品定义、设计代码、调试维护几个步骤,看似简单,可是实际操作却复杂困难,它不比其它行业产品可预见可触及,所以学好软件工程能为以后从事软件开发行业打好基础。
在软件实践这门课中,讲到了有效利用现有资源进行软件编程的方法。
提到软件开发也可以像练习书法一样,采用临贴的方式,借鉴他人的优秀代码资源。
临摹优秀软件是学习软件开发的一个重要方法。
正如一首诗中说的:“熟读唐诗三百首,不会写来也会吟”。
软件开发也是一个道理。
为了真正地掌握软件开发的技巧,“临贴”是个不错的起步方法。
以前总是觉得,既然编写一个程序,就应该完全靠自己,那样写出来才有成就感,才算是自己的程序,可是这门课程教会我原来适当地借鉴别人的东西,也不算抄,相反,还可以提高效率,节省时间。
这可真是与以往的观点不一样了。
具体如下: “软件编程,拿来主义的作用很大: 1、源代码交换方便。
2、可行的例程序用处大。
3、借鉴现成少走弯路。
” 不过借鉴别人的东西可是有说法的,可不是盲目地抄袭,下面是一些提到的途径: 1、既有系统:借鸡下蛋,买来就用; 2、书本例子:简单修改、直接使用; 3、联机或联网帮助:帮助文档、官方支持; 4、开放软件源代码:LinuxApacheEclipse… 5、互联网资
关于《工程制图基础》的学习心得
工程制图心得体会工程制门课程共两个学期,在大一一年的内完成,上半学要学习看图绘图等基础知识,下半学期主要学习CAD绘图软件以及上学期知识的应用。
这门课是对学生空间想象能力的训练,需要的不是解题方法、技巧之类的东西,而是将物体在脑海中构想出来的能力,这种能力不一定每个人天生都有,但是通过长期的学习、观察和练习,是可以达到熟能生巧的效果的。
学长学姐通过自己的亲身体验,在此总结出了一些学习工图的心得体会,希望对学弟学妹有所帮助。
1、上课走神是大忌在学习这门课程的时候老师的引导是极其重要的,没有老师的指导很容易走进思维的死胡同,它不像其他课程一样谁都可以自学,由于它的特殊性,如果落下一节课,靠自己课后好几个小时可能都补不回来。
老师上课时讲例题的过程就是帮助我们在脑海中建立空间立体的过程,跟上老师的解题思路,自己一边思考一边听老师的讲解,来纠正自己空间想象的误区,一点点训练空间想象的能力。
《工程制图》课本前面的点线面部分可能很难,但这正是锻炼我们空间想象能力的基础部分,大家也许会在刚开始构想空间位置关系时感到头脑晕头转向,但不要放弃,在老师讲解过之后,大家如果还有不清晰的空间位置关系图,一定要自己再思考,按照老师教的思路理清空间关系,因为“想”这个过程对大家的进步才是最关键的。
2、平时留心多观察要学好工程制图,建立和培养较好的空间想象力是前提,这就需要大家多注意观察实体模型,尝
高分急求 CAD实习报告 需要1000字以上的 有没有
一、课程实习的目的: 把握Auto CAD用于工程制图的基本操作,了解工程图纸绘制的格式和要求,能够用Auto CAD绘制二维的工程图纸。
二、课程实习的任务: 1.学习Auto CAD的基本绘图操作。
2.绘制平面工程图纸。
3.了解工程图纸的一般要求和格式 三、课程设计的要求: 本课程实习以CAD软件为例,介绍计算机辅助设计的功能和应用,并作一定的实践操作。
要求学生了解Auto CAD的主要功能,把握Auto CAD用于工程制图的基本操作,了解工程图纸绘制的格式和要求,能够用Auto CAD绘制二维的工程图纸。
四、意义: 随着传统CAD系统在工业界的应用以及现代设计问题的复杂化、智能化,人们不再仅仅满足于用计算机取代人进行手工绘图。
所幸随着计算机图形学、人工智能、计算机网络等基础技术的发展和计算机集成制造、并行工程、协同设计等现代设计理论和方法的研究,使得CAD系统也由单纯二维绘图向三维智能设计、物性分析、动态仿真方向发展,参数化设计向变量化和VGX(超变量化)方向发展,几何造型、曲面造型、实体造型向特征造型以及语义造型等方向发展;另一方面,伴随着CAD软件复杂程度的增加和各个不同应用系统间互操作的现实需要,人们希望CAD系统具有极佳的开放性,同时又能“搭积木”似的自由拼装形成不同的功能配置,软件工程技术非凡是组件开发技术的研究应用和逐渐成熟为解决这一问题提供了坚实的基础。
五、平面图的画图步骤: 1.建立建筑模板 2.绘制轴线和墙线 3.绘制窗体结构 4.绘制门结构 5.绘制柱结构 6.绘制楼梯结构 7.标注尺寸 8.标志图号 9.打印出图 六、心得体会: 通过这几天的学习,使我对CAD有了进一步的了解,一开始觉得它不是一个轻易学好的软件,觉得用处不是很大。
但几天的学习下来,使我对这个软件的看法彻底改变了,不但用处很大,我们可以用它作出工程、建筑等方面的图画来,而且易学,就是把那些基本的套路把握熟悉了以后就很简单了,还有要害的一点就是对自己要画的东西一定要熟悉的,否则一些要害性的标本就画得不恰当了。
计算机绘图的目标就是要使设计的结果在生产实践是发挥作用。
目前的设计结果基本上以纸基图纸的方法进入到生产中,同时,在设计单位,纸基的图纸也是图纸档案治理的主要对象。
虽然计算机辅助设计的发展方向是达到设计、生产的无纸化,但除了极少数巨型的制造企业外,绝大多数普通的设计生产单位还是以纸基图作为组织设计生产的依据。
因此,怎样将CAD设计产生的电子格式的图纸转换成为描绘在规定幅面上的纸基格式的图纸,是一个与生产实际结合得非常紧密的问题,在某种意义上来说,这一步与图形的修改、编辑等绘图过程同等重要。
最后还要感谢学校领导和老师给我们这次学习的机会,多把握一项技能,就多一次选择,多一次在激烈竞争的社会中生存下去的机会。
----------------------------- 在****实习的这两个多月的时间里,我学到的东西很多。
首先对于电脑绘图不熟悉的我有很大的帮助,现在的我用Auto CAD绘图的速度快了很多。
而且知道了很多快捷方式的运用。
以下就是我在CAD实习过程中知道的一些小技巧。
首先我用的是Auto CAD2006。
第一、如何在cad中画有函数的曲线?先在EXCEL中根据函数编好数据表,然后把生成的数据复制,在CAD中使用PLINE命令,将生成的数据粘贴上去就可以了。
第二、画图时最好把各种不同类的图形和线条放在不同的图层,特别是比较大型的图.这样修改时可以把不需要修改的图层关掉,只留下要修改的图层,这样就好办多了.所以本人觉得多建些同类的图层是很好的,否则一但有个地方画错了那头就大了,特别是复杂的、大型的图。
第三、创建图形 1、动态图块的操作 ◇选择多种图形的可见性 图块定义可包含特别符号的多个外观形状。
在插入后,用户可选择使用哪种外观形状。
例如,一个单一的块可保存水龙头的多个视图、多种安装尺寸,或多种阀的符号。
◇ 使用多个不同的插入点 在插入动态图块时,可以遍历图块的插入点来查找更适合的插入点插入。
这样可以消除用户在插入图块后还要移动块。
◇ 贴齐到图中的图形 在用户将块移动到图中的其它图形附近时,图块会自动贴齐到这些对象上。
◇ 编辑图块几何图形 指定动态图块中的夹点可使用户能移动、缩放、拉伸、旋转和翻转块中的部分几何图形。
编辑图块可以强迫在最大值和最小值间指定或直接!提问者评价xiexie,fengeinil
如何成为一个程序员
1、 程序员意要编程序。
果你仅仅想得到一份高薪水作,喝喝咖啡就等发薪水,我奉劝你还是另找一份更合适的工作,譬如练摊,真的,兄弟,这份工作不适合你)2、你是学文的还是学理的,编程序也许需要浪漫,但更需要逻辑和严谨。
(说坦白点就是,在你没有找到乐趣以前,它很枯燥)3、你有对新技术追求的热情吗
你有刨根问底的探索精神吗
(热情绝对是最重要的
你仔细思考一下自己的性格适合当程序员吗
)4、当程序员决不是什么好差事,时刻需要学习,需要思考。
(直到你成为那个可以引导别人去学习和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)5、程序员的未来很迷茫。
(但我认为关键看你自己
我希望你是一个有追求的人,不仅仅是混碗饭吃。
因为真正的乐趣在于创造;如果你能改变软件业的历史,那才是英雄;不想成为Bill Gates,不想成为Dennis Ritchie和 Bjarne Stroustrup,我会说你没有追求。
有个关于程序员未来的笑话,也许你还没听过,你该听一听,摘抄如下:一个程序员对自己的未来很迷茫,于是去问上帝。
“万能的上帝呀,请你告诉我,我的未来会怎样
”上帝说“我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的”于是他去问Lippman。
Lippman说“程序员的未来就是驾驭程序员”这个程序员对这个未来不满意,于是他又去问上帝。
“万能的上帝呀,请你告诉我,我的未来会怎样
”上帝说“我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的”于是他去问Gates。
Gates说“程序员的未来就是榨取程序员”这个程序员对这个未来不满意,于是他又去问上帝。
“万能的上帝呀,请你告诉我,我的未来会怎样
”上帝说“我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的”于是他去问侯捷。
侯捷说“程序员的未来就是诱惑程序员”这个程序员对这个未来不满意,于是他又去问上帝。
“万能的上帝呀,请你告诉我,我的未来会怎样
”上帝摇摇头“唉,我的孩子,你还是别当程序员了”)6、当程序员还是很有乐趣的。
(当你学到新知识时,当你有新的思想见解时,当你有新的产品问世时,和知己探讨你的成果时…我问你,觉得这些是乐趣吗
)7、当程序员不易也不难。
(世间事有难易乎
为之…;不为…。
你有决心和信心吗
)8、你真的要当程序员
是你自己的想法
9、你舍得花钱买书吗
(读好书绝对是学习编程的最佳捷径。
你一定会说,现在电脑书籍真他XX的贵,没法子,谁让知识和技术在人家的脑袋,在人家的书里呢;等你写书时可以把价格定低一点,记着还有好多没钱但想买书的兄弟很困难呀。
要舍得买书,买好书,不好的的书不如不读,其害大于其益,关于买什么书,你可以问高手或看候捷的书评;准备一个小本子记录你想买的书的名字,逛书店时看看,如果好就买下,记住要读,别光买不看。
) 10、我告诉你,程序就是:任何有目的的、预想好的动作序列,它是一种软件。
11、编程序就是编写程序。
12、你想好了吗
(如果你想好了还是决定要当程序员,可以继续往下读;否则,你可以继续寻找别的出路了。
)(三) 一个程序员应该具备的基础知识和概念1、计算机是有什么组成的,CPU是什么东西,其工作原理是什么。
(对于这些以及下面将要提到的概念我不会告诉你什么答案,你可以看相应的教材,关于教材我会在下一部分详述,记住理解最重要
)2、机器语言和微指令集的概念。
3、程序的概念。
4、汇编语言是低级语言但不是机器语言。
5、高级语言主要有那些
(C,C++,Basic,Pascal,Fortran,C#,Java等等;如果你是中国软件业的英雄,你也写一门语言,最好不用英语) 6、编译程序和解释程序的概念和其原理。
(编译器是高手和专家编写的)7、HTML、XML等是标识性语言。
8、Prolog是人工智能语言。
9、操作系统OS的概念和原理。
(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,还有一些实时OS,嵌入OS,编这些的绝对是高手)10、Windows编程说白了就是Windows API的调用。
(中国的程序员很多只是会编windows程序,用的是VB,我的建议是这些程序员顶多只是低级编码员,我称其是coder)11、VC++、VB、BC、BCB、Delphi、VF等都只是编程的工具和环境,不是编程语言。
12、面向结构的设计概念。
13、面向对象的概念。
(好好理解,兄弟,这个东西还是很重要的)14、软件工程的概念和原理。
(如果你想当老总就需要好好研究了,系统分析员比编码员要高一个等级,薪水也高哟)15、数据库的概念。
(要熟悉一些著名的数据库系统和语言的名字,如Orcle,SQL,DB2,DyBase等)16、了解网络概念。
17、了解多媒体概念。
18、熟悉和掌握数据结构和基本算法。
19、是不是要求太高了,别着急慢慢来,进步在不知不觉之中。
(一旦开始学习,一个月以后你就会有一个基本的概念;两个月以后你就会感觉自己有了全面的基础知识;当你知道编程序是怎么回事时,说明你已经入门了。
也有很多人编了很多年程序还没有入门呢,你不会希望自己步其后尘吧。
要有信心和耐心。
沉不住气怎么能成大事
)(四) 教材推荐――-推荐的教材主要还是针对概念来的,最好选用名校的教学用书。
1、《计算机组成原理》(熟悉)2、《数据结构》(掌握)3、《操作系统》(了解->熟悉)4、《The C language》(掌握)5、《编译原理》(了解原理)6、《汇编语言》(了解)7、《计算机网络》(了解)8、《软件工程》(了解)9、《关系数据库》(熟悉)10、《The C++Languege 》(掌握)11、《面向对象设计》(掌握;结合C++学习)(五)一些经验和体会1、真正的程序员用C++;(一位专家说的)2、动手去编程序;3、动脑去思考;4、要有良好的编程风格;5、读书,读好书,尽量读原版书
(我反复强调这一点,读书要有选择,坚持读好书,名家出的经典书,不要浪费实践在一些粗制滥造的书上面;坚持博览群书)6、有自己的学习计划;7、总结自己的经验教训;(准备一个笔记本,记录错误和心得)8、不要怕学新东西;9、要有软件工程的思想;10、善于发现问题,然后去寻找答案;11、向高手请教;(要虚心直到你成为高手)12、和同行交流;(不善于交流肯定不行)13、懂得软件的实质,不要被千变万化的表象所迷惑;14、真正要学习用的是编程语言和方法,不是什么库,什么类,什么工具;(学用那些什么库都比较简单,但光会这些库,我觉得还远远不够)15、学习wiodows编程主要是学习windows OS和win32 API;16、有空了解一下嵌入式开发;17、有空了解一下PDA软件开发;18、了解一下.NET框架和C#语言,也许它是你新的衣食父母;19、要有耐心,不要作浮躁的人; 20、对程序加注释,并保留你的老程序;21、学到的东西越多,了解的越多,你就越接近专家;22、有空去逛逛CSDN,那里有你很多知己;23、要有信心成为一个优秀的程序;(六)一些好书的推荐1、《The C Programming language》 (Keinighan & Dennis Ritchie 1988)2、《The C++ Programming Languague》(Bjarne Stroustrup 1997)3、《Inside The C++ Object Model》 (lippmans)4、《Effective C++》 (同上)5、《More Effective C++》 (同上)6、《Exceptional c++》7、《C++面向对象高效编程》8、《设计模式》9、《Thinking In C++》10、《The Standard C++ Bible》(一般推荐)11、《The Art of Computer Programming 》12、《Programming Windows》 (Charles Petzold)13、《VC++5.0技术内幕》14、《MFC 深入浅出》15、《软件需求》16、《Advanced Windows》17、《C++ primer》18、《win32程序员参考手册》19、《用TCP\\\/IP进行网际互连》20、《COM 本质论》(七)学习计划――-这个学习计划是我个人定的,也共享给大家参考一下,共同进步吧。
1、《计算机组成原理》2、《操作系统》3、《数据结构》4、《汇编语言》5、《 C 》6、《 C++ 》7、《VC 技术内幕》8、《Programming Windows》9、《深入浅出MFC》10、《Advanced Windows》11、《Inside The C++ Object Model》12、《Thinking in C++》13、《Effective C++》14、数据库15、网络16、嵌入式OS和编程17、硬件单片机18、.NET和C#19、软件工程20、UNIX和Linux
数据结构课设报告+哈夫曼编译器+C语言+源码
中南数据结构课程设计报告题目哈夫曼编学生姓名孙毅教师杨希学院信息与工程学院专业班级信息安全1401班二○一六年十一月目录一、课程设计目的3二、课程设计的内容32.1、问题描述32.2、基本要求3三、问题描述,解决的方法33.1从键盘读入字符集大小n,以及n个字符和权值,建立哈夫曼树。
33.2利用已建好的哈夫曼树对文件正文进行编码,将结果存入相关文件中。
53.3利用已建好的哈夫曼树将编码文件中的代码进行译码,结果存入文件中。
63.4输出代码文件,以紧凑格式显示。
73.5以直观的方式输出哈夫曼树,同时将此字符形式的哈夫曼树写入文件中。
7四、程序模块功能,程序设计组成框图、流程图84.1程序模块功能84.2程序设计框图84.3流程图9五、调试与测试。
调试方法,测试结果的分析与讨论,遇到的主要问题及采取的解决措施。
105.1调试方面105.2测试结果方面10六、测试结果,用几组测试数据进行测试算法设计的正确性106.1第一组数据如下106.2第二组测试数据如下:14七、本次课程设计的心得体会16八、附录:源程序清单17一、课程设计目的数据结构是计算机专业的核心课程,是计算机科学的算法理论基础和软件设计的技术基础,实践性强,课程设计是加强学生实践能力的一个重要手段。
课程设计要求学生在完成程序设计的同时能够写出规范的设计报告,培养学生分析问题、解
从编程菜鸟到编程高手的路应该怎么走
林锐的<<高质量C\\\/C++编程>>你看了这本书会有些认识的.下面是本书的前言部分.....软件质量是被大多数程序员挂在嘴上而不是放在心上的东西
除了完全外行和真正的编程高手外,初读本书,你最先的感受将是惊慌:“哇
我以前捏造的C++\\\/C程序怎么会有那么多的毛病
” 别难过,作者只不过比你早几年、多几次惊慌而已。
请花一两个小时认真阅读这本百页经书,你将会获益匪浅,这是前面N-1个读者的建议。
一、编程老手与高手的误区 自从计算机问世以来,程序设计就成了令人羡慕的职业,程序员在受人宠爱之后容易发展成为毛病特多却常能自我臭美的群体。
如今在 Internet 上流传的“真正”的程序员据说是这样的: (1) 真正的程序员没有进度表,只有讨好领导的马屁精才有进度表,真正的程序员会让领导提心吊胆。
(2) 真正的程序员不写使用说明书,用户应当自己去猜想程序的功能。
(3) 真正的程序员几乎不写代码的注释,如果注释很难写,它理所当然也很难读。
(4) 真正的程序员不画流程图,原始人和文盲才会干这事。
(5) 真正的程序员不看参考手册,新手和胆小鬼才会看。
(6) 真正的程序员不写文档也不需要文档,只有看不懂程序的笨蛋才用文档。
(7) 真正的程序员认为自己比用户更明白用户需要什么。
(8) 真正的程序员不接受团队开发的理念,除非他自己是头头。
(9) 真正的程序员的程序不会在第一次就正确运行,但是他们愿意守着机器进行若干个 30 小时的调试改错。
(10) 真正的程序员不会在上午 9:00 到下午 5:00 之间工作,如果你看到他在上午 9:00 工作,这表明他从昨晚一直干到现在。
…… 具备上述特征越多,越显得水平高,资格老。
所以别奇怪,程序员的很多缺点竟然可以被当作优点来欣赏。
就象在武侠小说中,那些独来独往、不受约束且带点邪气的高手最令人崇拜。
我曾经也这样信奉,并且希望自己成为那样的“真正”的程序员,结果没有得到好下场。
我从读大学到博士毕业十年来一直勤奋好学,累计编写了数十万行 C++\\\/C 代码。
有这样的苦劳和疲劳,我应该称得上是编程老手了吧
我开发的软件都与科研相关(集成电路 CAD 和 3D 图形学领域),动辄数万行程序,技术复杂,难度颇高。
这些软件频频获奖,有一个软件获得首届中国大学生电脑大赛软件展示一等奖。
在 1995 年开发的一套图形软件库到 2000 年还有人买。
罗列出这些“业绩”,可以说明我算得上是编程高手了吧
可惜这种个人感觉不等于事实。
读博期间我曾用一年时间开发了一个近 10 万行 C++ 代码的 3D 图形软件产品,我内心得意表面谦虚地向一位真正的软件高手请教。
他虽然从未涉足过 3D 图形领域,却在几十分钟内指出该软件多处重大设计错误。
让人感觉那套软件是用纸糊的华丽衣服,扯一下掉一块,戳一下破个洞。
我目瞪口呆地意识到这套软件毫无实用价值,一年的心血白化了,并且害死了自己的软件公司。
人的顿悟通常发生在最心痛的时刻,在沮丧和心痛之后,我作了深刻反省,“面壁”半年,重新温习软件设计的基础知识。
补修“内功”之后,又觉得腰板硬了起来。
博士毕业前半年,我曾到微软中国研究院找工作,接受微软公司一位资深软件工程师的面试。
他让我写函数 strcpy 的代码。
太容易了吧
错
这么一个小不点的函数,他从三个方面考查: ( 1 )编程风格; ( 2 )出错处理; ( 3 )算法复杂度分析(用于提高性能)。
在大学里从来没有人如此严格地考查过我的程序。
我化了半个小时,修改了数次,他还不尽满意,让我回家好好琢磨。
我精神抖擞地进“考场”,大汗淋漓地出“考场”。
这“高手”当得也太窝囊了。
我又好好地反省了一次。
我把反省后的心得体会写成文章放在网上传阅,引起了不少软件开发人员的共鸣。
我因此有幸和国产大型 IT 企业如华为、上海贝尔、中兴等公司的同志们广泛交流。
大家认为提高质量与生产率是软件工程要解决的核心问题。
高质量程序设计是非常重要的环节,毕竟软件是靠编程来实现的。
我们心目中的老手们和高手们能否编写出高质量的程序来
不见得都能
就我的经历与阅历来看,国内大学的计算机教育压根就没有灌输高质量程序设计的观念,教师们和学生们也很少自觉关心软件的质量。
勤奋好学的程序员长期在低质量的程序堆中滚爬,吃尽苦头之后才有一些心得体会,长进极慢,我就是一例。
现在国内 IT 企业拥有学士、硕士、博士文凭的软件开发人员比比皆是,但他们在接受大学教育时就“先天不足”,岂能一到企业就突然实现质的飞跃。
试问有多少软件开发人员对正确性、健壮性、可靠性、效率、易用性、可读性(可理解性)、可扩展性、可复用性、兼容性、可移植性等质量属性了如指掌
并且能在实践中运用自如
。
“高质量”可不是干活小心点就能实现的
我们有充分的理由疑虑: ( 1 )编程老手可能会长期用隐含错误的方式编程(习惯成自然),发现毛病后都不愿相信那是真的
( 2 )编程高手可以在某一领域写出极有水平的代码,但未必能从全局把握软件质量的方方面面。
事实证明如此。
我到上海贝尔工作一年来,陆续面试或测试过近百名“新”“老”程序员的编程技能,质量合格率大约是 10 %。
很少有人能够写出完全符合质量要求的 if 语句,很多程序员对指针、内存管理一知半解, …… 。
领导们不敢相信这是真的。
我做过现场试验:有一次部门新进 14 名硕士生,在开欢迎会之前对他们进行“ C++\\\/C 编程技能”摸底考试。
我问大家试题难不难
所有的人都回答不难。
结果没有一个人及格,有半数人得零分。
竞争对手公司的朋友们也做过试验,同样一败涂地。
真的不是我“心狠手辣”或者要求过高,而是很多软件开发人员对自己的要求不够高。
要知道华为、上海贝尔、中兴等公司的员工素质在国内 IT 企业中是比较前列的,倘若他们的编程质量都如此差的话,我们怎么敢期望中小公司拿出高质量的软件呢
连程序都编不好,还谈什么振兴民族软件产业,岂不胡扯。
我打算定义编程老手和编程高手,请您别见笑。
定义 1 :能长期稳定地编写出高质量程序的程序员称为编程老手。
定义 2 :能长期稳定地编写出高难度、高质量程序的程序员称为编程高手。
根据上述定义,马上得到第一推论:我既不是高手也算不上是老手。
在写此书前,我阅读了不少程序设计方面的英文著作,越看越羞惭。
因为发现自己连编程基本技能都未能全面掌握,顶多算是二流水平,还好意思谈什么老手和高手。
希望和我一样在国内土生土长的程序员朋友们能够做到: ( 1 )知错就改; ( 2 )经常温故而知新; ( 3 )坚持学习,天天向上。
二、本书导读 首先请做附录B的C++\\\/C试题(不要看答案),考查自己的编程质量究竟如何。
然后参照答案严格打分。
( 1)如果你只得了几十分,请不要声张,也不要太难过。
编程质量差往往是由于不良习惯造成的,与人的智力、能力没有多大关系,还是有药可救的。
成绩越差,可以进步的空间就越大,中国不就是在落后中赶超发达资本主义国家吗
只要你能下决心改掉不良的编程习惯,第二次考试就能及格了。
( 2)如果你考及格了,表明你的技术基础不错,希望你能虚心学习、不断进步。
如果你还没有找到合适的工作单位,不妨到上海贝尔试一试。
( 3)如果你考出85分以上的好成绩,你有义务和资格为你所在的团队作“C++\\\/C编程”培训。
希望你能和我们多多交流、相互促进。
半年前我曾经发现一颗好苗子,就把他挖到我们小组来。
( 4)如果你在没有任何提示的情况下考了满分,希望你能收我做你的徒弟。
编程考试结束后,请阅读本书的正文。
本书第一章至第六章主要论述C++\\\/C编程风格。
难度不高,但是细节比较多。
别小看了,提高质量就是要从这些点点滴滴做起。
世上不存在最好的编程风格,一切因需求而定。
团队开发讲究风格一致,如果制定了大家认可的编程风格,那么所有组员都要遵守。
如果读者觉得本书的编程风格比较合你的工作,那么就采用它,不要只看不做。
人在小时候说话发音不准,写字潦草,如果不改正,总有后悔的时候。
编程也是同样道理。
第七章至第十一章是专题论述,技术难度比较高,看书时要积极思考。
特别是第七章“内存管理”,读了并不表示懂了,懂了并不表示就能正确使用。
有一位同事看了第七章后觉得“野指针”写得不错,与我切磋了一把。
可是过了两周,他告诉我,他忙了两天追查出一个Bug,想不到又是“野指针”出问题,只好重读第七章。
光看本书对提高编程质量是有限的,建议大家阅读本书的参考文献,那些都是经典名著。
如果你的编程质量已经过关了,不要就此满足。
如果你想成为优秀的软件开发人员,建议你阅读并按照 CMMI 规范做事,让自己的综合水平上升一个台阶。
上海贝尔的员工可以向网络应用事业部软件工程研究小组索取 CMMI 有关资料,最好能参加培训。
三、版权声明 本书的大部分内容取材于作者一年前的书籍手稿(尚未出版),现整理汇编成为上海贝尔网络应用事业部的一个规范化文件,同时作为培训教材。
由于 C++\\\/C 编程是众所周知的技术,没有秘密可言。
编程的好经验应该大家共享,我们自己也是这么学来的。
作者愿意公开本书的电子文档。
版权声明如下: ( 1 )读者可以任意拷贝、修改本书的内容,但不可以篡改作者及所属单位。
( 2 )未经作者许可,不得出版或大量印发本书。
( 3 )如果竞争对手公司的员工得到本书,请勿公开使用,以免发生纠纷。
预计到 2002 年 7 月,我们将建立切合中国国情的 CMMI 3 级解决方案。
届时,包括本书在内的约 1000 页规范将严格受控。
欢迎读者对本书提出批评建议 。



