随着社会不断地进步,报告使用的频率越来越高,报告具有语言陈述性的特点。那么我们该如何写一篇较为完美的报告呢?这里我整理了一些优秀的报告范文,希望对大家有所帮助,下面我们就来了解一下吧。
办公软件综合实训报告篇一
一、实习目的
进一步了解java开发的相关知识,掌握java开发的基本技术,丰富java开发的实战经验。学习sql的基础知识及正确的运用方法,和有用的相关技术,提高自己的工作效率。通过实习,培养我们综合运用java语言的面向对象编程能力;培养我们动手能力;培养我们良好编程规范、编程方法;以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力;增强自己的团队协作意识,了解软件开发的思考角度和主要流程。为毕业之后能够更快地进入工作状态并且能够更好的工作,打好一定的基础。
二、实习单位及岗位介绍
1、实习单位介绍
2、实习岗位介绍
我的岗位是java软件工程师。实习期间参与人力资源管理系统的开发,根据开发规范和流程独立完成模块设计、编码、测试。编写相关应用系统的开发文档、数据库设计文档等。较为详细和系统的掌握了软件开发的知识体系。把所学知识与解决实际问题相联系,培养了自己发现问题、分析问题和解决问题的能力,从而提高了自己从事实际工作的能力。
三、实习内容及过程
1、java基础知识
java的基础知识对于一个java软件工程师来说就好比是人的灵魂,现在的公司在招聘的时候很多都不在乎你会不会流行的技术,如(struts、hibernate、spring、ibatis等)。他看重的是你的基础扎不扎实,对于网易、腾讯等大公司来说更是如此,我们在开发过程中运用了大量的java基础知识,如类、对象、方法、成员变量、静态变量、封装、继承、多态、异常、接口、抽象类、io流等等,所以一个系统对于java编程基础的依赖便不言而喻。
2、mysql、oracle数据库
mysql是最流行的开放源码sql数据库管理系统,它是由mysql ab公司开发、发布并支持的。mysql ab是由多名mysql开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。oracle则是以稳定性着称,在访问量和数据大量交换的服务器中,oracle占了大臂的江山,在开发中主要用到了数据库的查询语句、数据库的关系、事物等。
3、servlet和jsp
一个servlet就是java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展web服务器的应用程序。java servlet技术为这些应用程序定义了一个特定于http的 servlet类。javax、servlet和javax、servlet、http包为编写servlet提供了接口和类。所有的servlet都必须实现servlet接口,该接口定义了生命周期方法。
jsp是由sun microsystems公司倡导、许多公司参与一起建立的一种动态技术标准。在传统的网页html文件(*、htm,*、html)中加入java程序片段(scriptlet)和jsp标签,就构成了jsp网页java程序片段可以操纵数据库、重新定向网页以及发送e-mail等,实现建立动态网站所 需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持java,也可以访问jsp网页。
java servlet是jsp技术的基础,而且大型的web应用程序的开发需要javaservlet和jsp配合才能完成。现在许多web服务器都支持servlet,即使不直接支持servlet的web服务器,也可以通过附件的应用服务器和模块来支持servlet,这得益于java的跨平台特性。另外,由于servlet内部以线程方式提供提供服务,不必对于每个请求都启动一个进程,并且利用多线程机制可以同时为多个请求服务,因此servlet的效率非常高。
4、三大框架
struts 2是struts的下一代产品,是在 struts 1和webwork的技术基础上进行了合并的全新的struts 2框架。其全新的struts 2的体系结构与struts 1的体系结构差别巨大。struts 2以webwork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与servlet api完全脱离开,所以struts 2可以理解为webwork的更新产品。虽然从struts 1到struts 2有着太大的变化,但是相对于webwork,struts 2的变化很小。
hibernate是一个开放源代码的对象关系映射框架,它对jdbc进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库。hibernate可以应用在任何使用jdbc的场合,既可以在java的客户端程序使用,也可以在servlet/jsp的web应用中使用,最具革命意义的是,hibernate可以在应用ejb的j2ee架构中取代cmp,完成数据持久化的重任。
spring 也表示是一个开源框架,是为了解决企业应用程序开发复杂性由rod johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 j2ee 应用程序开发提供集成的框架。spring使用基本的javabean来完成以前只可能由ejb完成的事情。然而,spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何java应用都可以从spring中受益。
5、管理系统的开发
四、实习总结及体会
通过这次实习机会,我主要学习了以上这些java编程的技术,同时也明白了身处公司中如何更好地与同事配合,毕竟在软件开发中,你不可能一个人干完一个系统,大家都是通过svn等团队管理工具互相配合完成编程任务。在实习之前,我对软件开发的过程只有一个模糊地印象,以为只要把代码编写完之后就算
基本上一个项目开发完毕了。然而通过这次实习,彻底颠覆了我的认知,我当时的认知无疑是非常幼稚和可笑的,完全的软件开发过程不只只是编写代码,在编写代码之前还有好多的事情要做,比如文档的编写、对项目进行需求分析、数据库设计等等。代码编写完成之后还要进行测试,以及人员的培训,这些都是必须做,也是必不可少的项目,甚至比代码的编写还重要。
我在开发期间遇到很多问题,但是我会试着到网络去找答案,如果实在找不到我会试着问问我的上级,或者跟一些朋友讨论一下,如果发现了这个问题的答案我会及时把它记录下来,方便以后遇到问题可以随时翻阅,我相信好记性不如烂笔头这句话,我也相信如果一个程序员写的代码没有错误那只能证明他没写过代码,虽然我比较懒,但我现在有空的时候都会对着电脑敲代码,我相信手感是敲出来的,你看10遍都不如你敲一遍来得印象深刻。
通过这次实习,我认识到了一个软件开发的完整的过程,为我今后进行实际的工作奠定了坚实的基础。首先,进入公司,你就是一名职业人,不再是一名学生,你要具备一名职业人应具备的素养,不迟到不早退是必然的,而且还要时刻严格要求自己,公司的规定要严格遵守。然后,在技术上也有了很大的提高,学习了很多公司自己的框架和工具,这都是一些前辈的宝贵经验。而且所作的软件应用性更强。所以,在今后的学习中我会严于律己,认真学习有关软件编程的课,为以后的工作打好坚实的基础。
实习报告
一、实习目的
根据所学课程的理论知识,结合企业的运营实际,选定企业管理中的某一具体问题进行调查研究,并撰写调查报告,反映问题的具体表现,其中包含的企业管理理论,以及对问题的解决方案建议。使学生进一步熟悉企业运作实践和调查报告写作方法,同时提高观察问题、分析问题、解决问题的能力。
二、企业实习地点
北京xx科技有限公司
三、实习时间
2013年7月29日——2013年9月8日
四、实习内容
1、网站开发及建设
2、电子商务的基础工作
五、实习总结
在internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。因此网站建设在internet应用上的地位显而易见,它已成为政府、企事业单位信息化建设中的重要组成部分,从而倍受人们的重视。
计算机将具备更多的智能成分,它将具有多种感知能力、一定的思考与判断能力及一定的自然语言能力。除了提供自然的输入手段(如语音输入、手写输入)外,让人能产生身临其境感觉的各种交互设备已经出现,虚拟现实技术是这一领域发展的集中体现。今天人们谈到计算机必然地和网络联系起来,一方面孤立的未加入网络的计算机越来越难以见到,另一方面计算机的概念也被网络所扩展。二十世纪九十年代兴起的internet在过去如火如荼地发展,其影响之广、普及之快是前所未有的。从没有一种技术能像internet一样,剧烈地改变着我们的学习、生活和习惯方式。全世界几乎所有国家都有计算机网络直接或间接地与internet相连,使之成为一个全球范围的计算机互联网络。人们可以通过internet与世界各地的其它用户自由地进行通信,可从internet中获得各种信息。人们已充分领略到网络的魅力,internet大大缩小了时空界限,通过网络人们可以共享计算机硬件资源、软件资源和信息资源。“网络就是计算机”的概念被事实一再证明,被世人逐步接受。
(一)、实习过程遇到的困难
1为了以后我们能够在工作中顺利做事,辛苦的找来实习项目,这是一个建设门户网站的项目名称是“网贸通”,网站分为近三十个板块,然后我们可以选择那些没有完成的项目来做,我们组选的是“在线管理子平台”这一块。由于不经常接触企业管理的内容,范围比较广而且内有多而杂,所以给我们的搜集带来很大的困难。
2、在建设网站之前我们必须先要把我们的网站策划方案拿出来,所以实习的前两天我们一直在讨论关于网站策划的问题。讨论到网站主题色、网页布局、栏目分类等一些问题时大家都有不同的意见,所以我们是经过自信分析才决定下来网站的一些问题。
3、在网站的建设当中大家会遇到一些想象不到的问题,例如:用ps技术美化图片文字时遇到的技术问题,用flash做出来的动态广告不是我们想要达到的效果,有时网页之间链接不上,遇到这些技术上的问题
(二)、如何解决问题:
在遇到这些问题是我们都感觉太累太复杂了,所以也有想过放弃,想过只不过是一个作业,想办法完成就可以了。可是再看看我们为了这份作业忙了这么些日子也应该要一些更多的收获,这才在老师和同学的帮助下完成了此次实习任务。在实习的过程中我们也体会到了,不应该为完成作业而去做作业,应该把它当做自己的工作,自己有义务去完成它,在完成工作的过程中真真正的学到一些东西,才是最主要的。
通过学习实践和公司技术人员的指导。使我真正对所学的软件融会贯通,熟练在手。制作网页用的软件是dreamweaver,fireworks,flash软件。dreamweaver大大加速了网络时代电子交易应用中的项目交付。它提供了网页和表单的动态生成到企业级的解决方案,如电子商店,库存管理系统和企业内部局域网的数据库应用等功能。fireworks是目前最流行的网页图象制作软件。只要将dreamweaver的默认图象编辑器设为fireworks,那么在fireworks中制作完成网页图象后将其输出就会立即在dreamweaver中更新。fireworks还可以安装使用所有的photoshop滤镜,并且可以直接导入psd格式图象。更方便的是它不仅结合了photoshop位图功能以及coreidraw矢量图的功能,而且提供了大量的网页图象模板供用户使用,例如,网页上很流行的阴影和立体按纽等效果,只需单击一下就可以制作完成。当然,其最方便之处是,它可以将图象切割,图象映射,悬停按纽,图象翻转等效果直接生成html代码,或者嵌入到现有的网页中,或者作为单独的网页出现。flash是目前最流行的矢量动画制作软件,与其他wed动画软件相比,它具很多优点。制作的是矢量图形。只要用少量矢量数据就可以描述一个复杂的对象,而占用的储存空间只是位图的几千分之一,非常适合在网格上使用。同时,矢量图象不会随浏览器窗口大小的改变而改变画面质量。使用插件方式工作。用户只需安装一次插件,以后就可以快速启动并观看动画,而不比像java那样每次都要启动虚拟机。flash插件也不大,只有170kb左右,很容易下载并安装。还提供其他一些增强功能。例如,支持位图,声音,渐变色和alpha透明等。拥用了这些功能,用户就完全可以建立一个全部由flash制作的站点。flash影片也是一种流式文件。这就是说,浏览者在观看一个大动画时,可以不必等到影片全部下载到本地再观看,而是可以随时观看,即使后面的内容还没有完全下载,也可以开始欣赏动画。主图是一个网页的门面,它能体现出这个网页的整体风格。
六、实习心得
经过为期一个多月的专业实习,令我更深一步的了解和学习了网站设计。在实习当中我们进行分工作业,大家团结起来一起完成实习任务。实习当中我们的意见产生过分歧,制作当中遇到过技术上的问题,可是大家共同面对困难,一起解决问题,所以我们要相信团队的力量啊。
我们组做的是“网贸通”中的在线管理子平台,刚开始接到任务时就感觉这个板块不好做,因为大家对办事这块不太了解,而且这一块要涉及到各个方面的内容,范围比较广,收集内容时工作量较大。特别是有一个便民提示,要收集到大家生活中的热点话题,然后在解决问题,任务量比较大。所以刚开始大家都摸不着头绪,后来大家一起讨论,在老师的帮助下完成了任务。所以在实习中能学到很多课外知识,对这段时间的学习我收获很多,体会最深的就是大家讨论问题时,各抒己见,然后再分析问题得出结果,有时因为一个问题大家花上一天的时间讨论,不放弃的精神啊。
这次实习,是进行实战性工作,所以大家都在努力的做,也希望能够对以后的生活和工作有所帮助。感谢老师给我们这次实习的机会,让我们深刻的了解到做好一个网站不是一朝一夕就能完成的,它要求有很大的耐性和较强的创新能力。所以在以后的学习工作中我们要加强自己各方面知识和能力的培养,做好每一件事。
办公软件综合实训报告篇二
河北工业大学
计算机科学与软件学院
《生产实习》课程讲座实习报告
学院:
系(专业):班级:学号:学生姓名:题目:it应用的发展现状及发展趋势
it应用的发展现状及发展趋势it应用的发展现状
20世纪70年代,微处理器和微型计算机的生产和发展,一方面是由于军事工业、空间技术、电子技术和工业自动化技术的迅速发展,日益要求生产体积小、可靠性高和功耗低的计算机,这种社会的直接需要是促进微处理器和微型计算机产生和发展的强大动力;另一方面是由于大规模集成电路技术和计算机技术的飞速发展,1970年已经可以生产1kb的存储和通用异步收发器(uart)等大规模集成电路产品并且计算机的设计日益完善,总线结构、模块结构、堆栈结构、微处理器结构、有效的中断系统及灵活的寻址方式等功能越来越强,这为研制微处理器和微型计算机打下了坚实的物质基础和技术基础。因而,自从1971年微处理器和微型计算机问世以来,它就得到了异乎寻常的发展,大约每隔2~4年就更新换代一次。至今,经历了三代演变,并进入第四代。微型计算机的换代,通常是按其cpu字长和功能来划分的。
1.1 现代计算机的应用技术发展史
1.1.1.始于微型机时代的嵌入式应用
电子数字计算机诞生于1946年,在其后漫长的历史进程中,计算机始终是供养在特殊的机房中,实现数值计算的大型昂贵设备。直到20世纪70年代,微处理器的出现,计算机才出现了历史性的变化。以微处理器为核心的微型计算机以其小型、价廉、高可靠性特点,迅速走出机房;基于高速数值解算能力的微型机,表现出的智能化水平引起了控制专业人士的兴趣,要求将微型机嵌入到一个对象体系中,实现对象体系的智能化控制。例如,将微型计算机经电气加固、机械加固,并配置各种外围接口电路,安装到大型舰船中构成自动驾驶仪或轮机状态监测系统。这样一来,计算机便失去了原来的形态与通用的计算机功能。为了区别于原有的通用计算机系统,把嵌入到对象体系中,实现对象体系智能化控制的计算机,称作嵌入式计算机系统。因此,嵌入式系统诞生于微型机时代,嵌入式系统的嵌入性本质是将一个计算机嵌入到一个对象体系中去,这些是理解嵌入式系统的基本出发点。
1.1.2现代计算机技术的两大分支
由于嵌入式计算机系统要嵌入到对象体系中,实现的是对象的智能化控制,因此,它有着与通用计算机系统完全不同的技术要求与技术发展方向。通用计算机系统的技术要求是高速、海量的数值计算;技术发展方向是总线速度的无限提升,存储容量的无限扩大。而嵌入式计算机系统的技术要求则是对象的智能化控制能力;技术发展方向是与对象系统密切相关的嵌入性能、控制能力与控制的可靠性。
早期,人们勉为其难地将通用计算机系统进行改装,在大型设备中实现嵌入式应用。
然而,对于众多的对象系统(如家用电器、仪器仪表、工控单元„„),无法嵌入通用计算机系统,况且嵌入式系统与通用计算机系统的技术发展方向完全不同,因此,必须独立地发展通用计算机系统与嵌入式计算机系统,这就形成了现代计算机技术发展的两大分支。
如果说微型机的出现,使计算机进入到现代计算机发展阶段,那么嵌入式计算机系统的诞生,则标志了计算机进入了通用计算机系统与嵌入式计算机系统两大分支并行发展时代,从而导致20世纪末,计算机的高速发展时期。
1.2 客观存在的两种应用模式
嵌入式计算机系统起源于微型机时代,但很快就进入到独立发展的单片机时代。在单片机时代,嵌入式系统以器件形态迅速进入到传统电子技术领域中,以电子技术应用工程师为主体,实现传统电子系统的智能化,而计算机专业队伍并没有真正进入单片机应用领域。因此,电子技术应用工程师以自己习惯性的电子技术应用模式,从事单片机的应用开发。这种应用模式最重要的特点是:软、硬件的底层性和随意性;对象系统专业技术的密切相关性;缺少计算机工程设计方法。
虽然在单片机时代,计算机专业淡出了嵌入式系统领域,但随着后pc时代的到来,网络、通信技术得以发展;同时,嵌入式系统软、硬件技术有了很大的提升,为计算机专业人士介入嵌入式系统应用开辟了广阔天地。计算机专业人士的介入,形成的计算机应用模式带有明显的计算机的工程应用特点,即基于嵌入式系统软、硬件平台,以网络、通信为主的非嵌入式底层应用。
2it应用技术的发展趋势
2.1计算机应用技术向集成化、综合化、智能化发展
计算机应用技术是计算机技术、通讯技术、自动化技术、信息技术与各应用领域专业技术相互结合,多学科相互渗透的复合技术。近年来,计算机单项应用技术,如cad、cat、cam、cae、cnc、fms、plc、dcs、capp、mis、oa、dss、ai等,逐年扩大应用,并日益向集成化与综合化方向发展。断续生产过程计算机集成制造系统(cims),连续生产过程计算机集成生产系统(cips)是工业自动化的主要发展方向。我国“863”自动化领域cims主题已取得26项科研成果,已有一批试点企业正在建设cims,1994年将取得实质性进展。不少大中型企业和乡镇企业都以实现cims局部集成系统及低成本cims系统作为技术改造目标;机械、电子、航空、汽车工业企业正在建立cad/cam系统、capp与mis系统;冶金、化工、电力、石化部门的不少企业已采用引进的dcs系统实现过程在线控制;企业计算机管理系统也已取得阶段成果。今后,将实现mis与dcs的集成;cad/cam/capp/mis的集成,局部集成的cims及在工作站、微机局部网络基础上实现的低成本cims,将在我国逐步得到推广。工厂综合自动化、办公室综合自动化、调度指挥自动化、管理控制一体化是计算机应用综合的发展趋势,在部分大中型企业、乡镇骨干企业试点基础上将逐步推广。文字、声音、图形、图像、动画、活动影像等多
媒体技术在文教、卫生、出版、工业、交通、影视及政府等部门的应用将取得较快的发展人工智能专家系统在工业控制、mis、oa决策支持系统、调度指挥系统及医疗辅助诊
断系统中逐步推广;农业专家系统(施肥,品种选育,病虫害测报,棉花、小麦、水稻栽培等)已取得成效并得到进一步推广;智能传感器、仪器仪表在仪表工业中的比重将增加;智能机器人已取得一批科研成果,1994年可望在产品化、商品化方面取得进展。
2.2计算机应用系统网络化,国家级大型信息系统工程将取得进展
计算机应用系统向网络化发展,微型机局部网络在计算机各个应用领域、科学与工程设计计算、工业生产过程控制、信息检索处理、业务管理、企业(工矿企业、宾馆饭店、商场等)、政府机关办公自动化中得到了日益广泛地应用。全国科研单位、大专院校网络化程度有很大提高,局部网络在研究院所、高等院校将基本得到普及。全国十几个大型信息系统工程都已基本建成,全国性的计算机通信网络,如国家经济信息系统、银行电子化联行系统卫星通信网、铁路运营管理系统、气象预报系统、民航飞机订票系统、电网调度系统以及科技情报联机检索系统等,中央各部委都建立了不同规模的专用网,实现了大中小型机与微机异种机联网。今后,将不断扩充与完善网络功能,部分设备将更新换代,并在数据库建设上下功夫。中央已决定建设国家公用经济信息网;全国卫星通讯网、邮电部
公用数据网将加快步伐;全国银行电子工程、国家对外经济贸易信息网等“三金”工程在1994年将全面展开试点工作。通过“金卡”、“金关”、“金桥”工程的实施与建设,全国公用数据通讯网、专用网将有更大发展,并为推进我国全社会的信息化打下牢固基础。
2.3计算机在传统产业技术改造中的应用将稳步增长
传统工业技术改造的主要内容是采用微电子技术改造生产机械设备,提高微电子技术装备(传感器、检测仪表、控制计算机、plc、分布式控制系统、直流交流调速系统等)在固定资产中所占的比重,如每年提高1个百分点。机床改造采用数显仪表、数控装置(经济型数控系统、全功能数控及高档数控系统)实现各类机床的计算机控制,老机床数控化率1994~1995年将达15~18%,新机床数控化率达5~8%(数量)和15~20%(产值)。工业炉窑改造,采用微型机实现炉窑节能控制,std总线工控机、at总线工控机、vme总线工控机均可用于控制锅炉、加热炉、电炉等工业炉窑。有的可采用分布式控制系统控制燃烧过程、炉温度及烟道气含量等。技术成熟,控制系统已实现商品化,大力组织推广可取得节能8~10%的效果。工业炉窑微机控制普及率要达到大中型企业50~60%,中小型企业15~20%是可以实现的。化工、冶金、轻工、建材、石化、电力等生产过程采用计算机控制后,已能实现优质、高产、低耗。单机控制或分布式控制系统过去大量依赖进口,还
需要在推广应用中不断提高性能价格比,提高软硬件商品化程度,搞好技术服务,进一步促进计算机控制的普及推广。计算机在商业流通领域的应用前景广阔。目前,在商业批发、储运、零售企业计算机信息管理方面,上海、北京、广州、西安等地已有一些商业企业建立了计算机信息管理系统,并已初见成效。鞍山三个大中型商场应用信用卡、储蓄卡进行了电子货币转账消费试点。1994年将推广计算机、电子收款机、商店前后台网络服务系统的应用,扩大电子货币转账服务系统的试点,各种计算机、电子收款机、收购机在商业部门的年装机量将以30%的速度增长。计算机在企业管理、会计电算化、饭店宾馆管理、医院管理中的应用亦将比1993年有进一步发展。工作站的应用、微机局部网络的应用将有较大的进展。
办公软件综合实训报告篇三
去公司实习毕业之后就需要写好实习报告!下面小编为大家介绍软件生产实习报告范本,希望能帮到大家!
软件生产实习报告1一、关于实习公司
我所实习的南京xxx软件有限公司简称xxx公司,公司成立于xxxx年,主营软件开发和信息系统集成,专门从事工程建设项目管理信息系统开发和实施,具有自主知识产权的项目管理软件产品xxx项目管理系列软件(包括xxx投资控制合同管理软件、xxx进度控制计划管理软件、xxx质量控制安全管理软件、xxx项目管理门户、xxx城建项目管理平台等),并已经在全世界第一大桥苏通长江大桥、国内最大的开发区苏州工业园区以及南水北调工程实施和应用,目前正与南京城建集团合作,开发城建项目管理平台。
二、实习的内容
今年xxx月xxx日开始,我正式走进xxx开始了实习工作,并被调到了江苏省建筑质量检测中心,参加正在进行的一个检测项目。由于我才大三,本身对企业的经营方式等都很陌生,公司让我们的王工带我学习,以师傅带徒弟的方式,指导我的日常实习。在王工的热心指导下,我依次对此次项目的业务流程和大概框架进行了了解,并积极参与相关工作,注意把书本上学到的理论知识对照实际工作,用理论知识加深对实际工作的认识,用实践验证大学所学确实有用。以双重身份完成了学习与工作两重任务。跟公司同事一样上下班,协助同事完成部门工作;又以学生身份虚心学习,努力汲取实践知识。我心里明白我要以良好的工作态度以及较强的工作能力和勤奋好学来适应公司的工作,完成公司的任务。
三、实习的提高与收获
实习收获,主要有四个方面:
一是通过直接参与企业的运作过程,学到了实践知识,同时进一步加深了对理论知识的理解,使理论与实践知识都有所提高,圆满地完成了本科教学的实践任务。
二是提高了实际工作能力,为就业和将来的工作取得了一些宝贵的实践经验。
三是一些学生在实习单位受到认可并促成就业。
四是为毕业后的正式工作做好了准备。
四、结语
到公司实习并没有我想象中的难以融入,通过慢慢的学习,发现在公司用的到得知识在我们的学校学习中都会遇到。至暑期结束,从不懂到渐渐的做了几个检测项目。学到不少的东西。实习生活还没结束,开学了我还是会继续留在公司我的学习和探索。
软件生产实习报告21、概述
实习是一种有用的实践,是理论联系实际,应用和巩固所学专业知识的一项重要环节,是培养我们能力和技能的一个重要手段。八月初,我们来到大连东软实训中心进行为期20天的实习,我们要做的是物流配送管理系统,我要做的是配送中心管理模块。它的主要功能是完成对商品、库房和供应商的管理,缺货查询和进货安排。由于大家负责不同的模块编写,作为组长的我需要充分考虑各个模块之间的交互,系统风格一致性等问题。
为此,项目启动之前我们小组6人开会讨论了整体的业务流程,明确了数据库表之间的关联和各个模块之间的接口。在项目验收阶段我们顺利地通过了答辩,圆满完成了预期目标,虽然和优秀的小组开发的系统还有一些差距,但是我们发挥了每个人的能力,结果也令我们满意。
2、感受与体会
在为期20天大连东软实训中心的实习过程中,我每天都感觉很充实,从基础知识的巩固,项目整个的开发过程,我都认真学习,勤于思考,并且不断动手实践,我感到收获很大。
这是我们在学习专业课程之后走向工作岗位之前的不可缺少的实践环节。它对于培养我们的动手能力有很大的意义。这次实习旨在培养学生综合运用所学的软件工程专业基础理论、基本技能和专业知识分析问题和解决问题的能力,培养我们的专业素质、应用科学的思维方法和计算技巧,使我们了解科学研究工作的一般程序和方法,撰写科技论文的能力;培养我们直接参与科研活动、科研文献和资料的调研,对研究工作以及相关的研究结果分析、综合的能力;重点培养我们积极的创新精神、严肃认真的科学态度和严谨求实的工作作风,增强我们的综合素质以及对毕业后工作岗位的适应能力;有利于扩大我们的知识面,并掌握一些软件工程技术的发展前沿。
这次实习让我们走出校园,切身体会公司的企业文化,感受到了和学校里面不一样的学习方式和氛围,也可以从中学到很多社会经验,了解了很多行业需求和动态,使我们视野更加开阔。
我是java开发方向的,前一周时间主要是老师给我们讲解java的基础知识,web实用页面的设计方法,oracle数据库的使用,这些知识有些我们在课堂上学过,这次是系统的讲解,为我们之后的项目开发打下了良好的基础。
对于像我这样软件工程专业的学生,java语言是我们的立身之本,然而在学习的过程中我发现自己的基础知识掌握不是很牢固,学过的知识存在遗忘的现象。就像老师强调的那样,我需要注重学习的细节,不能模棱两可。
在web开发技术是我的薄弱环节,以前只知其然不知其所以然,在讲解过程中,我了解了在javaee框架下对于一个b/s架构的网络应用程序是如何基于http协议进行通信的。掌握了请求和响应是如何发送和处理,过滤器的使用,session技术原理等等。
之后我们六个人一组开始了项目开发。我们要做的是物流配送管理系统,物流配送管理系统是一套专门针对配送行业实现销售管理的软件系统,全面适用于物流配送领域中的各级各类经营企业。时间紧任务重,对我们来说是个不小的挑战。我们先根据需求确定功能点,根据功能点我们搭建了每个模块的静态界面,通过实现前台跳转我们逐渐明晰了流程,也顺利通过了评审。
在开发过程中我们也遇到了很多问题,由于小组6个人实践能力不同,大家的进度就很难统一。还有一个就是版本控制的问题,为了避免工程修改冲突,我们为每个人建立了了自己的开发包,大家将自己开发的文件放置其中。我们用到的struts和hibernate框架里面有些文件需要公用,这样我们决定在项目整合的时候统一修改。这样我们就避免了很多不必要的麻烦。
由于我们选用了我们比较熟悉的开发工具和框架,所以我开发起来比较流畅,技术上没有遇到太大的问题。在开发过程中我们建立了很好的信任关系,良好的沟通机制,让我们每个组员有问题马上分析和解决。我们也充分体会到了,团队合作开发中每个人应该承担不仅仅是自己的责任还有团队的利益。
在实习过程中,实训中心还为我们安排了几次专题讲座。在项目管理和质量管理讲座中,张老师为我们讲述了软件行业一条非常重要的项目管理标准—— cmmi,能力成熟度模型。它用于指导软件公司开发出合理高效的产品。我们需要掌握这些标准,使自己的技术和方法在以后的工作中处于行业的领先地位。通过职业生涯规划的讲座,我深切了解到生涯规划是确定人每个阶段发展的方向,立足于本职工作,不断自我管理,最终达到职业目标的一种方法。还有面试技巧训练,这些对于目前尚未走向工作岗位的我们大学生来说,是大有裨益的。
3、总结通过这次实习让我理论联系实际,在团队软件工程的开发、数据库的设计、分析问题解决问题的能力上有了很大的提高,积累了开发经验,达到了实习效果,让我得到了难能可贵的锻炼。
办公软件综合实训报告篇四
软件实习报告范文
软件>实习报告>范文
(一)一、实习目的进一步了解java开发的相关知识,掌握java开发的基本技术,丰富java开发的实战经验。学习sql的基础知识及正确的运用方法,和有用的相关技术,提高自己的工作效率。通过实习,培养我们综合运用java语言的面向对象编程能力;培养我们动手能力;培养我们良好编程规范、编程方法;以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力;增强自己的团队协作意识,了解软件开发的思考角度和主要流程。为毕业之后能够更快地进入工作状态并且能够更好的工作,打好一定的基础。
二、实习单位及岗位介绍
1、实习单位介绍
中软国际长沙etc是中软国际etc继北京总部基地之后,在全国建立的第一家分基地,也是湖南省政府招商引资的重点支持项目之一。中软国际长沙etc凭借对服务外包行业人才需求的深刻理解,以及在服务外包人才>培训领域的丰富经验、良好的企业及院校合作资源,成为支持软件产业高速发展的人才战略组成部分,同时也是软件及外包业务快速发展的重要人才支持平台。
中软国际在专业学科建设、师资培养、实践教学、就业服务、基地共建等多个领域进行了卓有成效的合作和模式创新,为提升院校竞争力和知名度发挥了重要作用。长沙etc从20**年4月份启动以来,至20**年4月,以接纳包括哈尔滨工业大学等知名院校在内的共计55所院校,培训学员数量5400多人。
2、实习岗位介绍
我在中软国际长沙etc实习期间的岗位是java软件工程师。实习期间参与>人力资源管理系统的开发,根据开发规范和流程独立完成模块设计、编码、测试。编写相关应用系统的开发文档、数据库设计文档等。较为详细和系统的掌握了软件开发的知识体系。把所学知识与解决实际问题相联系,培养了自己发现问题、分析问题和解决问题的能力,从而提高了自己从事实际工作的能力。
三、实习内容及过程
1、java基础知识
java的基础知识对于一个java软件工程师来说就好比是人的灵魂,现在的公司在招聘的时候很多都不在乎你会不会流行的技术,如(struts、hibernate、spring、ibatis等)。他看重的是你的基础扎不扎实,对于网易、腾讯等大公司来说更是如此,我们在开发过程中运用了大量的java基础知识,如类、对象、方法、成员变量、静态变量、封装、继承、多态、异常、接口、抽象类、io流等等,所以一个系统对于java编程基础的依赖便不言而喻。
2、mysql、oracle数据库
mysql是最流行的开放源码sql数据库管理系统,它是由mysql ab公司开发、发布并支持的。mysql ab是由多名mysql开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。oracle则是以稳定性着称,在访问量和数据大量交换的服务器中,oracle占了大臂的江山,在开发中主要用到了数据库的查询语句、数据库的关系、事物等。
3、servlet和jsp
一个servlet就是java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展web服务器的应用程序。java servlet技术为这些应用程序定义了一个特定于http的 servlet类。javax、servlet和javax、servlet、http包为编写servlet提供了接口和类。所有的servlet都必须实现servlet接口,该接口定义了生命周期方法。
jsp是由sun microsystems公司倡导、许多公司参与一起建立的一种动态技术标准。在传统的网页html文件(*、htm,*、html)中加入java程序片段(scriptlet)和jsp标签,就构成了jsp网页java程序片段可以操纵数据库、重新定向网页以及发送e-mail等,实现建立动态网站所 需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持java,也可以访问jsp网页。
java servlet是jsp技术的基础,而且大型的web应用程序的开发需要javaservlet和jsp配合才能完成。现在许多web服务器都支持servlet,即使不直接支持servlet的web服务器,也可以通过附件的应用服务器和模块来支持servlet,这得益于java的跨平台特性。另外,由于servlet内部以线程方式提供提供服务,不必对于每个请求都启动一个进程,并且利用多线程机制可以同时为多个请求服务,因此servlet的效率非常高。
4、三大框架
struts 2是struts的下一代产品,是在 struts 1和webwork的技术基础上进行了合并的全新的struts 2框架。其全新的struts 2的体系结构与struts 1的体系结构差别巨大。struts 2以webwork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与servlet api完全脱离开,所以struts 2可以理解为webwork的更新产品。虽然从struts 1到struts 2有着太大的变化,但是相对于webwork,struts 2的变化很小。
hibernate是一个开放源代码的对象关系映射框架,它对jdbc进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库。
hibernate可以应用在任何使用jdbc的场合,既可以在java的客户端程序使用,也可以在servlet/jsp的web应用中使用,最具革命意义的是,hibernate可以在应用ejb的j2ee架构中取代cmp,完成数据持久化的重任。
spring 也表示是一个开源框架,是为了解决企业应用程序开发复杂性由rod johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 j2ee 应用程序开发提供集成的框架。spring使用基本的javabean来完成以前只可能由ejb完成的事情。然而,spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何java应用都可以从spring中受益。
5、xx管理系统的开发
四、实习总结及体会
通过这次实习机会,我主要学习了以上这些java编程的技术,同时也明白了身处公司中如何更好地与同事配合,毕竟在软件开发中,你不可能一个人干完一个系统,大家都是通过svn等团队管理工具互相配合完成编程任务。在实习之前,我对软件开发的过程只有一个模糊地印象,以为只要把代码编写完之后就算
基本上一个项目开发完毕了。然而通过这次实习,彻底颠覆了我的认知,我当时的认知无疑是非常幼稚和可笑的,完全的软件开发过程不只只是编写代码,在编写代码之前还有好多的事情要做,比如文档的编写、对项目进行需求分析、数据库设计等等。代码编写完成之后还要进行测试,以及人员的培训,这些都是必须做,也是必不可少的项目,甚至比代码的编写还重要。
我在开发期间遇到很多问题,但是我会试着到网络去找答案,如果实在找不到我会试着问问我的上级,或者跟一些朋友讨论一下,如果发现了这个问题的答案我会及时把它记录下来,方便以后遇到问题可以随时翻阅,我相信好记性不如烂笔头这句话,我也相信如果一个程序员写的代码没有错误那只能证明他没写过代码,虽然我比较懒,但我现在有空的时候都会对着电脑敲代码,我相信手感是敲出来的,你看10遍都不如你敲一遍来得印象深刻。
通过这次实习,我认识到了一个软件开发的完整的过程,为我今后进行实际的工作奠定了坚实的基础。首先,进入公司,你就是一名职业人,不再是一名学生,你要具备一名职业人应具备的素养,不迟到不早退是必然的,而且还要时刻严格要求自己,公司的规定要严格遵守。然后,在技术上也有了很大的提高,学习了很多公司自己的框架和工具,这都是一些前辈的宝贵经验。而且所作的软件应用性更强。所以,在今后的学习中我会严于律己,认真学习有关软件编程的课,为以后的工作打好坚实的基础。
软件实习报告范文
(二)一、实习单位简介
xxx市xxx科技有限公司于xx年在xxx正式成立,作为xxx的用友软件代理期间长期致力于企事业单位信息化管理软件的咨询与服务代理。我们的梦想就是要用信息技术推动商业和社会进步,做客户信赖的长期合作伙伴,以专业的能力、诚信负责的态度,不断创造先进产品长期优质服务客户,帮助客户持续成功,以此赢得客户的信赖,与客户建立并保持长期合作伙伴关系。奉行专业主义,据此为客户创造价值,并实现梦想。以 “及时、真诚、专业”为不懈追求的目标。
二、实习过程
经过两年的在校学习,我在xxx年6月18日来到了xx科技有限公司,开始了为期一年的实习生活。我应聘的职位是软件工程师,不过在试用期的三个月里,我首先是作为一名销售人员来了解公司和用友软件。虽然在学校的时候也学习过用友软件,但到了公司才发现,自己对软件的了解真的是太浅显了。刚上班的时候,对于自己的工作和这个行业甚至是一片茫然,不知道该如何下手。所以我努力的充实自己,不断地去学习。公司的学习氛围也很浓,经常会有统一的培训,对我们这些新人进行指导,让我感觉自己就好像是一块水绵,在不断地吸取着知识。
在做销售的过程中,我主要是进行电话销售,寻找商机。虽然没有什么商业成果,但我的>收获也很大。从不会在电话里和人沟通,到后来的可以顺畅的和人对话。我的沟通能力提升了很多。认识到要做一名出色的营销人员必须具备以下素质。首先,要具备4种深刻的意识:市场意识,效率意识,服务意识,创新意识。只有具备上面四种意识,才能洞察市场,提高效率,完善服务,不断创新。
其次,要具备2种理念:树立市场第一的理念,树立服务至上的理念。只有树立正确的理念,才能支配正确的行为,才能把事情做正确。没有市场就没有所谓的产品,所以要树立市场第一的理念。现在的竞争已经不再是产品的竞争,很多时候已经变成了服务的竞争,有服务的理念,才会把顾客摆在第一位,只有以顾客为中心了,才能提高顾客的满意度。
每天够公司都会开早会,大家轮流做主持。有时念得是一则小>故事,有时做的是小游戏,有时讲的是工作的方法,也有同事会把自己工作的总结和大家分享。感觉每次的早会都会让我们有所收获,不论是感动还是知识。我刚主持早会的时候很紧张,因为这是我来公司后的第一次,虽然自己觉得不太好,但大家很关照我,也给了我鼓励。我很开心自己所在的公司是个>温暖的大家庭。
在来到公司的第二个月,我很幸运的参加了用友软件黑龙江办事处举办的为期两天的沙盘培训。在培训中模拟了加工企业的经营历程,从未如此近的了解到一个企业的流程。当时很多伙伴都参加了培训,当时每6人为一组,每组都相当于一个公司。在模拟中我担任了公司的财务经理,很深刻的体会到了要确保公司可以正常运转的不易。模拟开始时每个公司都有500万的注册资金,每8分钟为一个周期,前15周的运营费用为每周 20万,第16周开始是每周30万。模拟生产过程中假设产能无限,当天可完成,库存容量无限,而产品价格也会有变动。公司自己不足时可出具资产负债表进行贷款,利率10%,提前扣除,模拟结束时进行还款。
当模拟的号声想起的时候,大家都紧张了起来,整间屋子里都是喧闹的声音,每个人都在奔波于采购、生产和销售的工作中。在我的组里,我的伙伴们很清楚的知道自己需要做什么。大家都在努力的做好自己份内的事,而且刚认识的人需要在最短的时间内进行磨合,我看到了大家在工作中的坚持和妥协,每个人都想为自己的团队做出努力。上午的经营进行的并不顺利,但大家已经逐步进入了状态,虽然在上午结束进行总结时我们的团队并不领先,但我们都很有信心,我们会在接下来的训练中变得更好。
因为公司在前12周期的经营策略出现问题,导致资金流断裂,只好向银行贷款300万。我当时在反省,为什么会出现这样的问题,结果就是,我们的公司没有让资金在公司内部快速流转起来,产生了积压。下午开始了第13周期的模拟,针对上午出现的问题和得出的结论,我们对公司做出了相应的调整。
将公司内部存货迅速出售,而且在接订单和采购方面也要进行更系统的操作,每次的订单和采购都会进行详细的计算。因为时间的缘故,我们的模拟并没有按照原定的周期来进行,只走到了27周期就突然宣布结束了,但是真的很紧张,因为大家还在预想着要在最后几个周期来打一个翻身仗,但是现在只能听结果了。我并没有对结果抱太大的希望,因为感觉结果并不好,之前有好几个队伍领先于我们的。所以我紧张的等待。当最后听到第一名是我们团队的时候,我真的激动了,一天的努力有了很好的结果。这是对我们最大鼓励。奖品并不是最重要的,重要的是我们成功了,而且我因为这次的合作收获了很多。了解到>企业管理的五个核心是:快速订单相应、确保及时交付、降低赊销风险、完善内控体系、降低库存占用。
软件实习报告范文
(三)一、实习目的本实习的主要目的是通过实习,让学生了解用友软件---财务部分的基本结构及基本操作流程,同时掌握其主要模块的初始化设置与基本的操作方法,以便将来更好、更快地适应社会的工作岗位的工作需要。用友软件是一个较为规范的管理软件,学习与掌握它也可为将来学习与掌握其他类型的财务软件打下良好的基础。
二、实习时间
20**年4月14日至20**年5月2日为期三周的的时间。
三、实习地点
中南林业科技大学西校区科技楼四楼商学院企业管理特色专业实验室计算机房。
四、实习单位概况
五、实习步骤
1、系统管理和基础设置
系统管理的主要功能是对于用友u8管理系统的各个产品进行统一的操作管理和数据维护,主要包括了帐套管理、帐管理、用户及权限的集中管理与系统运行安全的统一管理。
2、总账系统的使用:总帐系统初始设置;总账管理系统日常业务处理;总账管理系统期末处理。
总账系统初始化是为总账系统日常业务处理工作做准备,主要包括设置系统参数、设置>会计科目体系、录入期初余额、设置凭证类别、设置结算方式等。
3、ufo报表管理
ufo报表系统既可以编制对外报表,又可以编制各种内部报表。主要任务是设计报表的格式和编制公式,从总账系统或从其他业务系统中取得有关会计信息,自动编制各种会计报表,对报表进行审核、汇总,生成各种分析图,并按预算格式输出各种会计报表。
4、工资管理
薪资管理是以职工个人的薪资原始数据为基础,计算应发工资、扣款小计和实发工资等,编制工资结算单;按部门和人员类别进行汇总,进行个人所得税计算; 2提供多种方式的查询、打印薪资发放表、各种汇总表及个人工资条;进行工资费用分配与计提,并实现自动转账处理。
5、固定资产管理
固定资产系统主要提供资产管理、折旧计算、统计分析等功能。
6、应收应付款管理
应收款管理系统主要实现企业与客户之间业务往来账款的核算与管理,在应收账款管理系统中,以销售发票、费用单、其他应收单等原始为依据,记录销售业务及其他业务所形成的往来款项,处理应收款项的收回、坏账、转账等情况,提供票据处理功能,实现对应收款的管理。
六、实习中注意的事项
1、实习与实际应用系统在分工上会有所不同,因此,学生在实习中是一个多角色主体,要根据不同的要求,适时地变换自己的角色。
2、实习中必须熟练地掌握系统管理基本原理与功能,并及时对每次实习的内容进行备份,否则实习无法开展下去。
3、要重视系统初始化工作。由于系统初始化与模块初始化的某些参数设置不合理,有可能会导致整个系统以后无法继续使用下去,或重新返工。所以处理的基本原则是:严格按资料上的要求进行设置,没有的一般取默认设置或请问老师。
4、建立系统时,各部分一定要设置与输入密码,并在笔记中作上记录,以免遗忘,同时也要保密,防止其他使用或破坏自己的数据。同学之间不要删除他人的备份数据。
七、收获与体会
(一)宏观地认识了用友erp>财务管理系统
我的专业是会计,之前修学过初、中、高级财务会计学等相关财会类课程,熟悉会计行业的手工做账。这学期刚好能学习用友erp财务管理软件系统,通过比较性的学习,从宏观层面上认识和掌握了财务管理系统中总账系统、ufo报表系统、薪资管理系统、固定资产系统、应收款管理系统、应付款管理系统。同时,也加深了对专业知识在企业用友软件的运用的体会,巩固了专业基础知识。
(二)了解erp财务管理系统在企业的实际应用在当今的社会,中国越来越多的大中型企业都引入了erp财务管理软件系统。传统的手工做账也将会逐渐转变为电算化操作。erp财务管理系统是建立在会计原理的基础上,又因企业所处的行业、发展的规模而又所不同。企业对erp系统的引入必须高度重视,认真做好流程重组、员工培训等工作,并选择适合自身的erp软件。
(三)谈谈在做实验中遇到的困难、解决方法和>心得体会
1、注意帐套备份
在实验中,帐套备份很重要。我在做到试验五薪资管理部分,因电脑问题,帐套莫名其妙的损坏了。好在,本人有每章实验都备份帐套的习惯,才避免重新开始的麻烦。
2、填制凭证时,填对时间很关键
在填制本实验三总账系统日常业务的时候,前面填制凭证的日期搞错,后面填制的凭证时间就变成了没法修改。只能把前面填制的凭证删除掉,再重新填制所有的凭证。所以,在erp实验中有很多的细节都是必须引起重视。
3、清楚各个操作员的权限
要清楚了解各个操作员的权限和操作次序,比如在做“修改第2号付款凭证的金额为51000元”的时候(凭证已经审核),是要先取消出纳签字,然后取消审核,最后再由财务会计重新修改的(因为之前在总账系统的选项中没有选中“允许修改、作废他人填制的凭证”)。而且修改后,也要先出纳签字,再审核凭证(也可以先审核再出纳签字)。
4、已冲销凭证仍需审核、出纳签字后记账,然后在将所有未记账的凭证记账后再进行月末转账工作。如果漏了上面的工作,接下来的ufo报表系统中的资产负债表也就会出现年末的资产≠负债+所有者权益。
5、要学会自我变通
在实验八的应付款系统的日常业务处理中,录入的专用发票中是缺少单位、材料等资料。自己必须根据前面学过的类似知识,自己到企业应用平台的“设置”/“基本档案”/“存货”中补充“存货单位”、“存货档案”及“存货类别”等信息,这样才能继续操作下去。具备“举一反
三、触类旁通、驾轻就熟”的能力,将会在以后的企业工作中有很大的帮助。
(四)总结实验
通过这次的实验,我对erp有了更深的了解,同时也有了一些自己的一些看法: 在上机操作过程中,首先,要明确实验目的。只有明确了实验目的,我们才能明确整个实验的方向。然后对于实验指导书中给出的实验原理,我们要认真思考,我们要做到尽量真正地理解,并能自己将它们形象地想象出来实际工作中是什么情形,而不应不加思索地实验指导书中的步骤做出来。再者,要有虚心请教的态度,与同学积极交流看法,加深理解,讨论的过程也是消化吸收的过程。
在上机中要对不懂的地方积极相互请教,而我觉得在进行实验之前,也应积极参与讨论,对于一些问题,应仔细听取其他同学的看法以及老师的讲解以加深对实验的理解。在上机操作过程中,要集中精力,正确地操作。对于实验过程中出现的问题,不懂的地方,一定要自己认真思索或请教老师,以便搞懂整个实验过程。做完实验后,要仔细回顾一下实验过程,以确定自己有没有理解操作,而不要急于离开实验室。
用友erp财务管理系统是时代发展的产物。在未来的社会,交易分工越来越细,经济的发展不会停滞不前,erp财务管理系统软件也将是飞速发展。现在的用友erp也在u8的基础上推出了一款全新用友u9。这些都要求我们要与时俱进,不断提高专业知识和素质,适应高速发展的经济形势和适合企业现代管理的要求,成为社会上真正有用的人才。
在这次实习之前,我们刚刚结束下厂实习,利用这次下厂实习的机会,我们代表立信会计事务所有限公司赴陕西宝鸡审计国家电网公司下属全资子公司陕西省电力公司下属各分公司的农电业务。在审计的流程中,我们关注到国家电网公司采用有德国人量身定做的erp系统,高度>自动化的内部控制对我们执行审计业务提出了更高的要求,因此我们应当弄懂erp的原理和操作流程才能更好的执行控制测试与实质性程序。
我很高兴通过这次erp上机实验学到了很多知识,最后感谢这段时间老师和同学的帮助,也希望自己在今后的学习和未来的工作中能灵活运用现在所学,成为当今时代需要的人才。
办公软件综合实训报告篇五
软件综合实习报告
题目:最小生成树算法
院(系):
计算机学院
专
业:
计算机科学与技术
姓
名:
班级学号:
2012 年 9 月 12 日
目录 一 . 系统需求分析与总体设计
............................................................................1
1.1 需求分析 ……………………………………………………………………………………………………………… 1
1.1.1 问题描述…………………………………………………………………………………………………………1
1.1.2 问题分析…………………………………………………………………………………………………………1
1.1.3 方案选择…………………………………………………………………………………………………………1
1.1.4 开发平台…………………………………………………………………………………………………………2
1.2 系统总体设计 …………………………………………………………………………………………………….2
二 . 详细设计与系统实现
.......................................................................................2
2.1 prime 算法动态演示模 …….……………….…………………………………………………………….2
2.1.1 基本思想…………………………………………………………………………………………………………2
2.1.2 设计与实现……………………………………………………………………………………………………..3
2.2
kruskal 算法动态演示模块 ……………………………………………………………………….4
2.2.1 基本思想…………………………………………………………………………………………………………4
2.2.2 设计与实现………………………………………………………………………………………………………4
2.3
并查集实现 kruskal 算法动态演示模块 ………………………………………………..4
2.3.1 基本思想…………………………………………………………………………………………………………5
2.3.2 设计与实现………………………………………………………………………………………………………5
2.4 深 度优先搜索实现 kruskal 算法动态 演示模块 ……………………………….6
2.4.1 基本思想…………………………………………………………………………………………………………6
2.4.2 设计与实现………………………………………………………………………………………………………7
2.5
广度优先搜索实现 kruskal 算法动态演示模块 ……………………………….7
2.5.1 基本思想…………………………………………………………………………………………………………7
2.5.2 设计与实现………………………………………………………………………………………………………8
2.6 画图模块 ………………………………………………………………………………………………………………..8
三 .系统测试
..................................................................................................................9
3.1 测试数据 ……………………………………………………………………………… 9
3.2primme 的测试结果 ………………………………………….…………………… 9
3.2kruskal 算法的测试结果 ………………………………………….………..….10
3.3 并查集实现kruskal 算法的测试结果 …………………………………….10
3.4 深度优先搜索实现kruskal 算法的测试结果 ………………………….11
3.5 广度优先搜索实现kruskal 算法的测试结果 ………………………….11
3.6 效率分析 …………………………………………………………………………….12
四 . 总结
...........................................................................................................................12
参考资料 …………………………………………………………………………………………………………………….13
一. 系统需求分析与总体设计 1 1.1 需求分析
1.1.1 问题描述 在一个具有几个顶点的连通图 g 中,如果存在子图 g“ 包含 g 中所有顶点和一部分边,且不形成回路,则称 g” 为图 g 的生成树,代价最小生成树则称为最小生成树(minimal spanning tree)。
许多应用问题都是一个求无向连通图的最小生成树问题。例如:要在 n 个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同;另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。
基本的要求是实现两种算法:通过实现kruskal算法和prim算法来得到图的最小生成树。并对两种算法进行分析和比较。较高的要求是在边通分量的查询与合并的过程中,采用广度优先搜索算法(breadth first search)、深度优先搜索算法(depth first search)和并查集(union-find set)这三种方法,并进行分析和比较算法时间复杂度。
测试数据如下:
图(1)
1.1.2 问题分析 通过问题的描述,可知这一道题目主要涉及,面向对象的分析与设计,数据结构和算法。通过这些利用知识实现 kruskal 算法和 prim 算法从而得到图的最小生成树。除此之外,在最小生成树的求解过程中会对边通分量进行查询和合并,由题可知要对边通分量进行查询和合并要使用广度优先搜索算法(breadth first search)、深度优先搜索算法(depth first search)和并查集(union-find set)这三种方法。
为了更好、更生动的表示这些算法的运算过程,在这里如果使用动态显示算法的求解过程将会是最好的选择。对于不同的算法其求解最小生成树时运算的效率是不同的,因此还需要对各种算法时间复杂度进行分析和比较,从而更加深入的理解算法,从而方便我们在不同的场合采用不同的实现算法。
1.1.3 方案选择 通过对题目的分析,对于如何将广度优先搜索算法(breadth first search)、深度优先搜132 5 4 6 5 6 5 2 4 4 71 7 1
索算法(depth first search)和并查集(union-find set)这三种方法运用到对边通分量进行查询和合并中有不同的结合方法。在这里我选择了将这三种搜索算法融合到 kruskal 算法,因为我觉得在 kruskal 算法对边通分量进行查询和合并中使用这三种方法更合理且更容易实现,因此也实现了将这三种搜索算法融合到 kruskal 算法从而实现对图的最小生成树的查找。
对于运用图形学的知识实现算法的动态运行效果。可以知道使用 mfc 通过单文档画图来实现算法动态显示运行效果或者使用对话框来实现算法动态显示运行效果,为了方便起见,我选择的是通过 mfc 建立单文档来实现这一效果。
1.1.4 开发平台 使用的系统是 windows07,开发工具 vc++6.0 2 1.2 系统总体设计
由于这是对图进行相关的操作,因此涉及图的存储问题,在这里使用的是邻接矩阵这一数据结构来实现图的存储。在对图进行相关操作寻找最小生成树时,得到的生成树中的边采用的是结构体的存储方式,在实现的过程中相关变量和数据的存储也主要通过数组、结构体来实现了。
在深度优先搜索算法(breadth first search)中使用了栈这一数据结构来实现边的连通分量的查询,对广度优先搜索算法(depth first search)的实现使用了队列这一数据结构,这里的队列和栈都是通过编程实现。
这里主要分为六个模块,即 prime 算法模块、kruskal 算法模块、用并查集实现 kruskal算法的模块、kruskal 算法和深度优先搜索算法结合的模块、kruskal 算法和广度优先搜索算法结合的模块以及画图操作的相关模块。设计与实现中由于所体现的重点不同,因此下面的说明主要围绕着此题的重点,即最小生成树的生成过程。
对于最小生成树生成过程中边相关变量的存储均是通过定义一个边(edge)的结构体变量进行存储的,而关于点的存储则是通过定义数组进行相应的存储,由于不同的实现方法采用的初始值不一样,因此使用的数组会有所不同。
对于算法运行时的动态显示运行过程这一要求主要通过将相关的画圆、画线等相关画图的操作扦插到相关的算法中,在算法的运行过程中再通过对相关条件的判断从而决定是否执行画圆、画线等操作。在这些算法运行过程中实现的画图操作主要通过调用一个公用的函数进行画图的相关操作。
二. 详细设计与实现 e 2.1 prime 算法动态演示模块
2.1.1 基本思想
prime 算法的基本思想是以图中的某一个顶点作为起始顶点,然后从起始顶点出发不断 的从还没有遍历到的顶点中选择与已经遍历到的顶点存在之间权值最小边的顶点,并将新遍历的点不断的添加到已经遍历的顶点集合中。通过这样的一个遍历过程与画图的相关操作结合来实现最小生成树生成过程的动态演示。
对于无向连通图 g(v,e),在 prime 算法中,将图 g 顶点集合分为两个集合 v1(g)和v2(g),v1(g)用来存储当前已经遍历到的顶点,即最小生成树中的顶点 v(mst),v2(g)
用来存储还没有遍历到的顶点。对于已经选择的顶点之间的边存储在最小生成树的边的集合中 e(mst)。
prime 算法的具体过程如下:
设最小生成树中点的集合 v(mst)和边的集合 e(mst)的初态均为空。首先从图 g 的顶点 集 v(g)中任选一个顶点,把它加到最小生成树 mst 的顶点集 v(mst)中。然后,依次选出 n-1条符合以下条件的边(vi,vj)。
(1)(vi,vj)e(g),v 是 v(mst)的顶点,而 vj 是还未加入 v(mst)的顶点。此时(vi,vj)一定均未加入 e(mst)。通过判断先找出所有这样的边。
(2)(vi,vj)是关联于 v(mst)中顶点的边中权值最小的边。选出满足该条件的边,将
vj 加入 v(mst),(vi,vj)加入 e(mst),之后画出相应的边和新添加进去的顶点。
下面主要通过题目中给出的例子(如图 1)对 prime 算法进行详细的解析:
(1)将 1 作为起始顶点添加到 v(mst),找到与之相连的符合条件的边(v1,v2),将权值为 5 的边添加到 e(mst)中,并将顶点 2 添加到 v(mst)中并画出此边。
(2)集合 v(mst)此时已经有两个顶点了,即 1、2,找到与之相连的符合条件的边(v2,v3)将权值为 1 的边添加到 e(mst)中,并将顶点 3 添加到 v(mst)中并画出此边。
(3)集合 v(mst)此时已经有三个顶点了,即 1、2、3,找到与之相连的符合条件的边(v2,v4)将权值为 2 的边添加到 e(mst)中,并将顶点 4 添加到 v(mst)中并画出此边。
(4)集合 v(mst)此时已经有四个顶点了,即 1、2、3、4,找到与之相连的符合条件的边(v4,v5)将权值为 3 的边添加到 e(mst)中,并将顶点 5 添加到 v(mst)中并画出此边。
(5)集合 v(mst)此时已经有五个顶点了,即 1、2、3、4、5,找到与之相连的符合条件的边(v4,v6)将权值为 4 的边添加到 e(mst)中,并将顶点 6 添加到 v(mst)中并画出此边。
(6)集合 v(mst)此时已经有六个顶点了,即 1、2、3、4、5、6,找到与之相连的符合条件的边(v6,v7)将权值为1的边添加到e(mst)中,并将顶点7添加到v(mst)中并画出此边。
至此图 g 中所有的点均已添加到了 v(mst),最小生成树生成完毕,其权值为 16。
2.1.2 设计与实现 对于 prime 算法的动态演示,主要是关乎两个函数的实现一个是画图函数的实现,另 外一个就是如何判断何时进行画图操作并进行相关操作的画图函数,在这里主要通过两个函数实现一个是与 kruskal 算法动态实现的公用的画图操作函数,另外一个就是 prime 算法寻找最小生成树的实现。这里仅给出语言描述的实现过程,源代码的实现在后面的附录中将会给出。
prime 算法的设计与实现 如下所述:
(1)对所画区域刷新。
(2)
mst 顶点初始值={序号为 0 的顶点},其边所在的结构体数组 e[n-1]的值也为空。lowcost的初始值为邻接矩阵中第0行的值,这样初始时lowcost中就存放了从集合v(mst)中顶点 0 到集合 v(g)-v(mst)中各个顶点的权值。
(3)循环 n-1 次 2.1 从 lowcost 中寻找具有最小权值的边。根据 lowcost 的定义,这样的边其一个顶点必然为集合 v(mst)中的顶点,其另一个顶点(设第 k 个顶点)必然为集合 v(g)-v(mst)中的顶点,将相应的边添加到 e[n-1]中。
2.2 存第 k 个顶点的数据和相应边的权值到 mst 中,并将 lowcost[k]置为-1,表示第k 个顶点从集合 v(g)-v(mst)加入了集合 v(mst)中
2.3 当第 k 个顶点加入到集合 v(mst)后,若存在一条边(k,j),其中 k 是集合 v(mst)的顶点,j 是集合 v(g)-v(mst)的顶点,且边(k,j)权值较原先 lowcost[j]的代价更小,则用这个权值修正原先 lowcost[j]中的权值。
2.4 当最小生成树生成完毕时,则调用 draw(e)函数画出生成的过程。
l 2.2 kruskal 算法动态演示模块
2.2.1 基本思想 kruskal 算法通常是在已知 v(mst)=v(g),e(mst)的初态为空时对图 g 进行相关处理的到最小生成树的。首先将图中所有边按权值递增顺序排列,依次选定取权值较小的边,但要求后面选取的边不能与前面选取的边构成回路,若构成回路,则放弃该条边,再去选后面权值较大的边。每次挑选边成功了即画出此边。在 n 个顶点的图中,选够 n-1 条边即可。具体如下:
(1)
构造一个只有 n 个顶点没有边的非连通图 t,图中的每个顶点为一个连通分量。
(2)
在原图 g 中的边中选择具有最小权值的边,若该边的两个顶点落在不同的连 通分量上,则将此边加入到 t 中;否则,则将此边舍去(此后永不选入此边),重新选择一条权值最小的边并进行画图的操作处理。
(3)如此反复下去,直到所有顶点在同一个连通分量上为止。
下面主要通过题目中给出的例子(如图 1)对 kruskal 算法进行详细的解析:
(1)在图 g 的边的集合 e 中按存储次序选择权值最小的边,即(2,3)由于边(2,3)在(6,7)前面存储,所以此处选择的边(2,3)并画出此边,其权重为 1。
(2)在图 g 的边的集合 e 中按存储次序选择权值最小的边,即(6,7)由于边(6,7)在(2,3)后面存储,所以后选择边(6,7)并画出此边,其权重为 1。
(3)在图 g 的边的集合 e 中选择权值最小的边(2,4)并画出此边,其权重为 2。
(4)在图 g 的边的集合 e 中选择权值最小的边(4,5)并画出此边,其权重为 3。
(5)在图 g 的边的集合 e 中选择权值最小的边(4,6)并画出此边,其权重为 4。
(6)在图 g 的边的集合 e 中选择权值最小的边(1,2)并画出此边,其权重为 5。
至此通过 kruskal 算法得到最小生成树及生成过程,其最小生成树的权值为 16。
2.2.1 模块设计与实现 kruskal 算法的实现主要包含两个部分,即带权值的边的排序和判断选取的边的两个顶点是否属于同一个连通分量。因此首先将图 g 的顶点集合 v 分为 n 个等价类,每个等价类包括一个顶点;然后以权值的大小为顺序处理各条边,如果某条边连接两个不同等价类的顶点,则这条边被添加到 mst(选取的边不与前面选取的边构成回路),两个等价类被合并为一个;反复执行此过程,直到只剩下一个等价类。
kruskal 算法的设计与实现如下所述(具体的代码实现见附录):
(1)对所画区域进行刷新。
(2)设置查找到的顶点集合 find[n]所有的值为-1,存储边的集合 e[n-1]为空集。
(3)判断找到的边的数目是否小于顶点的数目减一,即 n-1,如果是则从没有被选中的边中选取权值最小的边,如果放入存储边的集合中不构成回路则添加进去,否则舍去此边。
(4)如果不符合(2)中的判断则不断的重复直到选取的边等于 n-1。
(5)当最小生成树生成完毕时,则调用 draw(e)函数画出生成的过程。2.3 并查集实现 l kruskal 算法动态演示模块
2.3.1 基本思想 并查集处理问题的主要思想是在处理时使用搜索与合并运算对相关集合进行处理。最初 把每一个对象看做是一个单元集合,然后依次按顺序读入一个等价对后,将等价对中的两个元素所在的集合合并。在此过程中不断的重复使用一个搜索运算,从而确定此元素在哪一个集合中,当读入一个等价对 a≡b 时,首先检测 a 和 b 是不是属于同一个集合,如果是,则不用合并;如果不是,则使用一个合并运算把 a 和 b 合并到同一个集合中,使得这两个集合中的任意两个元素都是等价的(依据等价的传递性)。
在此处实现 kruskal 算法时主要使用并查集对相关顶点进行搜索和合并,从而实现了使用并查集实现 kruskal 算法。在程序中也实现了并查集的动态演示,通过 kruskal 算法调用并查集的函数,在函数中 对相关的顶点信息进行判断从而实施相应的画图操作。
下面通过题目的例子(如图 1)对 kruskal 算法利用并查集实现过程中相应集合的变化进行了详细的解析:
(1)最初的集合有 7 个,这 7 个集合中均只有一个元素分别为{1}、{2}、{3}、{4}、{5}、{6}、{7}。画出初始状态。
(2)在图 g 的边的集合 e 中按存储次序选择权值最小的边,即(2,3)由于边(2,3)在(6,7)前面存储,所以此处选择的边(2,3)其权重为 1。此时集合变为{1}、{2、3}、{4}、{5}、{6}、{7}。通过判断画出发生改变的集合{2、3}。
(3)在图 g 的边的集合 e 中按存储次序选择权值最小的边,即(6,7)由于边(6,7)在(2,3)后面存储,所以后选择边(6,7),其权重为 1。此时集合变为{1}、{2、3}、{4}、{5}、{6、7}。通过判断画出发生改变的集合{6、7}。
(4)在图 g 的边的集合 e 中选择权值最小的边(2,4)并画出此边,其权重为 2。此时集合变为{1}、{2、3、4}、{5}、{6、7}。通过判断画出发生改变的集合{2、3、4}。
(5)在图 g 的边的集合 e 中选择权值最小的边(4,5)并画出此边,其权重为 3。此时集合变为{1}、{2、3、4、5}、{6、7}。通过判断画出发生改变的集合{2、3、4、5}。
(6)在图 g 的边的集合 e 中选择权值最小的边(4,6)并画出此边,其权重为 4。此时集合变为{1}、{2、3、4、5、6、7}。通过判断画出发生改变的集合{2、3、4、5、6、7}。
(7)在图 g 的边的集合 e 中选择权值最小的边(1,2)并画出此边,其权重为 5。此时集合变为{1、2、3、4、5、6、7}。通过判断画出发生改变的集合{1、2、3、4、5、6、7}。
至此 kruskal 算法利用并查集查找、合并的过程结束,通过 kruskal 算法得到最小生成树及生成过程,其最小生成树的权值为 16。
2.3.2 设计与实现 kruskal 算法利用并查集实现查找、合并的设计与实现也是首先选择权值最小的边,其次是利用并查集来对所要选择的那些顶点进行查找、合并。在 kruskal 使用并查集时首先对其进行边集合的排序,接着利用并查集对图 g 中的顶点进行初始化,每一个顶点当做一个集合,同时给其一个相关的变量标志其集合中顶点的数目;然后利用并查集判断此时的顶点所在集合是不是相同,如果不相同则合并这两个顶点所在的集合。
并查集的实现主要包含三个方面,即并查集的初始化、查找和集合的合并,下面主要介绍并查集这三个过程的设计与实现。
(1)对所画区域进行刷新。
(2)初始化过程:为了方便并查集的描述与实现,通常把先后加入到一个集合中的元素表示成一个树形结构,并用根节点来代表这个集合。这里定义一个 parent[n]的数组,parent[i]中存储的就是结点 i 所在的树中的结点 i 父亲结点的序号,并查集的初始化中所有的结点的 parent 值均为-1,即每个结点就是根节点,只包含它本身这一个元素。
(3)查找:主要是查找并返回结点 i 所属集合的根节点。在此函数中如果只靠一个循环来得到结果,则对于合并中得到的层次比较深的集合,查找会很费时。这里通过压缩路径的方法来加快后续的查找速度,主要是通过增加一个 while 循环,每次都把从结点 i 到集合根节点的路径上经过的结点直接设置为根结点的子结点。
(4)合并:两个集合合并时,任何一方均可作为另一方的子孙。在这里采用的是加权合并,即把两个集合中元素个数少的根结点作为元素个数多的根节点的子结点。这样处理可以减少树中深层次元素的个数,减少后续查找时间。在每一次的合并过程结束时,将会画出合并之后的集合。
2.4 深度优先搜索实现 l kruskal 算法动态演示模块
2.4.1 基本思想 深度优先搜索主要是在图的遍历中使用此方法对整个图进行遍历来访问整个图中所有节点的一种遍历方法。通常是利用递归来实现图中结点的遍历。其基本思想是:对于一个无向连通图,从某一个起始结点 vi 出发,访问与它相连的一个结点 vj,且 vi、vj 这两个结点之间的边(vi、vj)是所有以 vi 为连接结点的边中权值最小的;然后再从 vj 出发寻找与 vj 相连的顶点,且它们之间的边是所有以 vi 为连接结点的边中权值最小的,不断的重复直到找到访问完所有的结点为止。
在这个算法的实现过程中,边通分量的查找虽然是深度优先搜索为主,但是是以最小生成树的的生成过程为主,因此这里所采用的画图操做运行的情况和使用一般的方法实现kruskal 算法的运行过程是一样的,在这里不再给予详细的说明,如有必要则可以参照 kruskal的生成最小生成树的过程。对于深度优先搜索方法的实现这里使用的方法是通过利用栈这一数据结构来实现的。下面仅给出在边已经通过权值大小进行排序之后,边通分量的查找的过程和查找之后集合的合并情况(1)得到图 g 中最小权值的边(2,3),因为(2,3)排在(6,7)的前面,所以先判断它的两个结点,判断点 2 和点 3 是否已经访问过了,由于数组 check 中相应的值为 0,说明没有被访问过,因此合并这两个结点为一个集合{2、3}。同时通过深度优先搜索对这两个结点分别进行判断及标记已经访问过了。
(2)继续向下查找得到边(6,7),判断点 6 和点 7 是否已经访问过了,由于数组 check中相应的值为 0,因此合并这两个结点,得到新的集合{6、7}。同时通过深度优先搜索对这两个结点分别进行判断及标记已经访问过了。
(3)继续向下查找得到边(2,4),判断点 2 和点 4 是否已经访问过了得知点 2 已经被访问过了,点 4 没有,因此得到新的集合{2,、3、4}。同时通过深度优先搜索对着两个结点分别进行判断是否需要标记,可知点 4 此时被标记访问过了。
(4)继续向下查找得到边(4,5),判断点 4 和点 5 是否已经访问过了得知点 4 已经被访问过了,点 5 没有,因此得到新的集合{2,、3、4、5}。同时通过深度优先搜索对着两个结点分别进行判断是否需要标记,可知点 5 此时被标记访问过了。
(5)继续向下查找得到边(4,6),判断点 4 和点 6 是否已经访问过了得知点 4 已经被访问过了,点 6 没有,因此得到新的集合{2,、3、4、5、6、7}。同时通过深度优先搜索对着两个结点分别进行判断是否需要标记则知均不需要。
(6)继续向下查找得到边(5,6),判断点 5 和点 6 是否已经访问过了得知已经被访问过了,因此得到不进行集合的合并,继续向下查找相应的边。
(7)继续向下查找得到边(1,2),判断点 1 和点 2 是否已经访问过了得知点 2 已经被
访问过了,点 1 没有,因此得到新的集合{1、2,、3、4、5、6、7}。同时通过深度优先搜索对着两个结点分别进行判断是否需要标记,可知点 1 此时被标记访问过了。
至此通过利用深度优先搜索进行边通分量查询的 kruskal 算法运行完毕,通过对比可知和使用普通的查找算法得到的运行结果是一致的。
2.4.2 设计与实现 在这里采用 kruskal 算法得到最小生成树的过程中,在对边连通分量的查询时使用了深度优先搜索的方法来查询当前得到的具有最下权值的边的两个顶点是不是已经存在于被访问过的结点的集合中,如果是的则进行下一次查询,否则的话则将没有访问过的结点加入已经访问过的结点的集合中。
深度优先搜索的实现主要利用栈这一数据结构来实现。因此主要包含两个方面,即栈这一数据结构中相关函数的设计与实现,以及如何实现深度优先搜索算法判断变量通分量的设计与实现。由于对栈已经比较熟悉,在这里仅作简要的说明。
(1)栈:
这里使用到的与栈相关的操作主要有栈中数据的初始化 stackinitiate、将数据压入栈的操作 stackpush、将数据弹出栈的操作 stackpop、判断栈是否为空的操作stacknotempty 和得到栈顶元素的操作 stacktop。
(2)查找与合并:在深度优先搜索中首先判断是否需要标记此节点,如果需要标记此节点则将此节点标记为以访问过,并添加到已经访问过的结点的集合中,并将相应的边存入e[]中;如果是要进行判断两个结点是不是都已经访问过了,及是否属于同一个集合利用栈来不断的搜索其中一个结点所在的集合中是否有另一个结点,如果存在则舍弃当前所选择的边,否则选择此边为最小生成树的一边。
下面给出 kruakal 算法利用深度优先搜索进行边连通分量查询和合并从而得到最小生成树的的设计与实现步骤:
(1)对所画区域进行刷新。
(2)对已经排好序的边进行选择,对没有访问过的最小权值的边的两个结点进行判断,检查是否已经被访问过了,如果有一个没有被访问过,则将和此边相应的顶点进行深度优先搜索的判断之后进行标记,同时存储所选择的这个边和相应的顶点。
(3)如果都已经被访问过了,则利用深度优先搜索判断这两个节点是否属于同一个集合,如果是的话则抛弃此边,如果不是的话则对其进行标记,并画出此边和相对应的点。
(4)选择下一条没有被访问过的边重新进行(1)、(2)的判断,直到所有的顶点均已被访问过且在同一个集合中,即已经添加到了最小生成树中则最小生成树生成完毕。
(5)当最小生成树生成完毕时,则调用 draw(e)函数画出生成的过程。
2.5 广度优先搜索实现 l kruskal 算法动态演示模块
2.5.1 基本思想 广度优先搜索主要是在图的遍历中使用此方法对整个图进行遍历来访问整个图中所有节点的一种遍历方法。通常是利用队列这一数据结构来实现图中结点的遍历。其基本思想是:对于一个无向连通图,从某一个起始结点 vi 出发,依次访问与它相连的所有未访问过的结点 vj1、vj2……vjn,然后在顺序访问 vj1、vj2……vjn 的所有还未访问过的邻接顶点;再从这些邻接顶点出发,再访问它们的所有未访问过的邻接顶点,……,不断重复直到图 g 中所有的顶点都被访问过为止。
kruskal 算法利用广度优先搜索进行边通分量的查询和合并的的实现过程中,边通分量的查找和合并虽然是广度优先搜索为主,但是总体是以最小生成树的的生成过程为主,因此
这里所采用的画图操做运行的情况和使用一般的方法实现 kruskal 算法的运行过程是一样的,在这里不再给予详细的说明,如有必要则可以参照 kruskal 的生成最小生成树的过程。对于广度优先搜索方法的实现这里使用的方法是通过利用队列这一数据结构来实现的。
这里采用的广度优先搜索主要是用来检索边的邻接顶点是不是在同一个集合中,由于使用 kruskal 算法时最初已经对边进行了一个排序,所以每一次所选用的边和通过广度优先搜索对邻接顶点进行判断的结果是一样的,在这里不再给予详细的说明,kruskal 算法结合广度优先搜索具体的运算过程和 kruskal 算法结合深度优先搜索的运算过程是一样的,在这里不再列出。由于本题的重点是最小生成树的生成,在这里不再给出广度优先搜索具体的搜索过程。
2.5.2 设计与实现 在这里采用 kruskal 算法得到最小生成树的过程中,在对边连通分量的查询时使用了广度优先搜索的方法来查询当前得到的具有最下权值的边的两个顶点是不是已经存在于被访问过的结点的集合中,如果是的则进行下一次查询,否则的话则将没有访问过的结点加入已经访问过的结点的集合中。
广度优先搜索的实现主要利用队列这一数据结构来实现。因此主要包含两个方面,即队列这一数据结构中相关函数的设计与实现,以及如何实现深度优先搜索算法判断变量通分量的设计与实现。由于对队列已经比较熟悉,在这里仅作简要的说明。
(1)队列:
这里使用到的与队列相关的操作主要有栈中数据的初始化 queueinitiate、将数据存入队列的操作 queueappend、将数据从队列中删除的操作 queuedelete、判断队列是否为空的操作 queuenotempty。
(2)查找与合并:在广度优先搜索中首先判断是否需要标记此节点,如果需要标记此节点则将此节点标记为以访问过,并添加到已经访问过的结点的集合中;如果是要进行判断两个结点是不是都已经访问过了,及是否属于同一个集合利用栈来不断的搜索其中一个结点所在的集合中是否有另一个结点,如果存在则舍弃当前所选择的边,否则选择此边为最小生成树的一边。
下面给出 kruakal 算法利用广度优先搜索进行边连通分量查询和合并从而得到最小生成树的的设计与实现步骤:
(1)对所画区域进行刷新。
(2)对已经排好序的边进行选择,对没有访问过的最小权值的边的两个结点进行判断,检查是否已经被访问过了,如果有一个没有被访问过,则将和此边相应的顶点进行广度优先搜索的判断之后进行标记,同时画出所选择的这个边和相应的顶点。
(3)如果都已经被访问过了,则利用广度优先搜索判断这两个节点是否属于同一个集合,如果是的话则抛弃此边,如果不是的话则对其进行标记,并画出此边和相对应的点。
(4)选择下一条没有被访问过的边重新进行(1)、(2)的判断,直到所有的顶点均已被访问过且在同一个集合中,即已经添加到了最小生成树中则最小生成树生成完毕。
(5)当最小生成树生成完毕时,则调用 draw(e)函数画出生成的过程。
2.6 画图模块
这一模块主要是实现如何动态的演示程序运行的效果,主要涉及的有三个方面,第一个方面是使用不同的算法实现最小生成树的绘制过程,第二个方面是画图区域的刷新,第三个方面是并查集的绘制过程。
对于最小生成树的绘制过程有一个函数承担,主要是实现程序在调用 prime 算法、kruskal 算法、深度优先搜索实现的 kruskal 算法和广度优先搜索实现的 kruskal 算法的过程中
相关运行过程的绘制,此处主要通过判断最小生成树中所存储的边来进行绘制。
画图区域的刷新主要是为了实现同一块区域可以画多次不同的运行过程,有两个函数承担。由于并查集的绘制和最小生成树的绘制没有太大的关联,因此在这里采用了单独绘制并查集实现 kruskal 算法中并查集的合并过程。
三. 系统测试 3.1 测试数据
图(2)
上图是利用程序直接得到的原图形,此测试数据中有七个顶点,有十条边。通过这些可知其生成的最小生成树只能有七个顶点、六条边。通过观察可知这六条边应为(2,3)、(6,7)、(2,4)、(4,5)、(4,6)、(1,2)。
3.2primme 的测试结果
图(3)
通过上面 prime 算法的解析结果和运行结果发现其运行结果与分析中应该得到的结果是一致的,由于画图和判断中采用的有延长运行时间的函数,因此这里只通过理论分析得出prime 算法的运行效率。
3.2kruskal 算法的测试结果
图(4)
通过上面 kruskal 算法的解析结果和运行结果发现其运行结果与分析中应该得到的结果是一致的,由于画图和判断中采用的有延长运行时间的函数,因此这里只通过理论分析得出kruskal 算法的运行效率。
3.3 并查集实现 kruskal 算法的测试结果
图(5)
此图中首先给出了最初集合的状况,紧接着给出了每一次进行边通分量查找合并过程中发生变化的集合的状况。通过此图并结合上面对并查集的分析可知与其运行一致。
3.4 深度优先搜索实现 kruskal 算法的测试结果
图(6)
在这里没有对深度优先搜索的过程给予动态显示,主要是模拟了深度优先搜索实现kruskal 算法的过程,也即最小生成树的生成过程。通过对比前两种 kruskal 算法的实现过程可知其运行是一致的。
3.5 广度优先搜索实现 kruskal 算法的测试结果
图(7)
通过与其他方法实现 kruska 算法进行对比,可知结果是一致的。由此也说明一个问题,即对于使用不同的方法来实现这一算法,改变的只是其效率,但是整体的运行情况是不会发生改变的。因此在实现的过程中应该尽量选择效率比较高的方法来实现算法。
对于广度优先搜索每个顶点至多进一次队列。遍历图的过程实质上是通过边或弧找邻接 点的过程。因此广度优先搜索遍历图的时间复杂度和深度优先搜索遍历相同,两者不同之处仅在于对顶点访问的顺序不同。对于使用 kruskal 算法和深度优先搜索结合的算法,对边的遍历至多是 e 次,故其总代价为 o(n^2*e)。
3.6 效率分析 prime 算法实现的函数主要是一个两重循环,其中每一重循环的次数均为顶点个数 n,所以该算法的时间复杂度为 o(n^2)。
kruskal 算法的时间复杂度与选取的排序函数有关,这里采用的是不是对其进行排序 而是在每一次循环中找余下的边中权值最小的边,找到最小的边之后将对其相应的点进行标记,已知点的个数为 n 边的个数为 e,所以它的时间复杂度为最坏的情况下为 o(e^2),如果边已经很有序的话,也就是最好的情况下的时间复杂度为 o(n^2)。
kruskal 运用并查集实现中使用了路径压缩,find 和 union 函数几乎是常数假设可能对几乎所有边都判断过了,则最坏情况下算法时间代价为 o(eloge),即堆排序的时间通常情况下只找了接近顶点数目那么多边的情况下,mst 就已经生成,时间代价接近于 o(nloge)
深度优先搜索对每一条边处理一次,每个顶点访问一次以邻接矩阵作存储结构:处理所 有的边需 o(n n^2)的时间,故总代价为 o(n^2)。对于使用 kruskal 算法和深度优先搜索结合的算法,对边的遍历至多是 e 此故其总代价为 o(n^2*e)。
四. 总结 这个题目的主要要求是通过使用不同的算法求出图的最小生成树,并且通过画图动态的显示出来其不同的算法在求解最小生成树时的运行步骤。在我的程序中已经实现了对给出的这一例子使用 prime 算法、kruskal 算法求解最小生成树的运算过程的动态显示,除此之外,对于还实现了在边通分量的查询与合并的过程中,采用广度优先搜索算法(breadth first search)、深度优先搜索算法(depth first search)和并查集(union-find set)三种方法来实现对此例中图的最小生成树的求解,主要是将这三种搜索方法与 kruakal 结合来实现对最小生成树的求解。
虽然通过例子实现了使用题目中要求的算法来求解最小生成树,但是没能实现给用户一个友好的界面来方便求解各种不同的图的最小生成树,只能通过改变程序里面相关的存储变量来实现对不同图的最小生成树的求解。同时由于对于作图这方面不是很熟练,没能实现对图的动态扩充,所以只能是实现对一定数目,一定边数的图的求解。为了我的程序更加完美我会继续努力,从而实现图的动态扩充,同时让程序更为简练。
在最初选择题目的时候,总是觉得自己对使用 mfc 来画图这一方面不是很熟悉,担心自己做不出来。在实现在边通分量的查询与合并的过程中,采用广度优先搜索算法(breadth
first search)、深度优先搜索算法(depth first search)和并查集(union-find set)三种方法来实现对此例中图的最小生成树的求解,这一方面最初也是相当的纠结,不知道该从什么方面下手。因为在学习数据结构的时只知道广度优先搜索算法(breadth first search)、深度优先搜索算法(depth first search)是用来遍历图的,平时没有在搜索的过程中使用此种算法,不知道该从何下手,通过老师的讲解多多少少悟出了点,之后反复的思考最终通过使用队列实现了在边通分量的查询与合并的过程中,采用广度优先搜索算法(breadth first search),通过使用栈实现了在边通分量的查询与合并的过程中,深度优先搜索算法(depth first search)。
这让我意识到学习到的知识一定要活用才能创造出更好的方法,只是使用它通常的用途是远远不够的。
虽然做的时候还是很多都不熟悉,但是我知道如果我不尝试这去做的话就真的什么也做不出来了。虽然最后做的和自己最初设想的有所差异,但是题目中的要求我都完成了,还是小有成就感的。所以通过这次的实习,让我认识到只要去尝试,去努力没有什么是不可以做的。
参考文献:
[1]朱战立,数据结构—使用 c 语言(第四版),电子工业出版社 2010 年 11 月 [2]王桂平、王衍、任嘉辰,图论算法理论、实现及应用,北京大学出版社,2011 年 1 月 [3]孙鑫、余安萍,vc++深入详解,电子工业出版社 2011 年 5 月