CSE48301C上机实验指导书(C++)
- 格式:pdf
- 大小:1.15 MB
- 文档页数:43
《可编程控制器》实验指导书实验课程类别:课程内实验实验课程性质:必修适用专业:自动化适用课程:《可编程控制器》、《电气控制与PLC》实验用PLC机型:欧姆龙CPM1A和CPM2A开课院、系及教研室:电气信息学院自动化及电气工程教研室PLC硬件的连接和软件的使用1.PLC实验系统硬件的组成和线路的连接整个实验系统由PLC系统和实验区组成。
PLC系统包括OMRON型PLC主机CPM1A一台、适配器CPM1-CIFO1一个、串口线一根(包括9芯针、孔接头各一个)。
实验区包括开关量输入区、混料实验区、交通灯实验区、电机控制实验区和电梯(直线)实验区等,每个实验区有不同的输入按键、指示灯和相应的插孔。
另外,实验面板上还有一排输入端子排DIGITAL INPUT 00~23、公共端子接实验箱的1M、2M、3M、4M;输出端子排DIGITAL OUTPUT 00~15,公共端子接实验箱的1L、2L;另有插接线若干。
开关量信号单元介绍:输入信号分为不带自锁按键和带自锁按键,各有8个,共16个,按键按下时是高电平还是低电平由公共端决定,不带自锁按钮的公共端是COMS1,带自锁按键的公共端是COMS2。
输出信号是2组输出指示灯和一个蜂鸣器声音信号,其中一组指示灯的信号是低电平点亮,标示为LED1-LED4,另一组指示灯的信号是高电平点亮,标示为LED5-LED8。
声音信号的接口标示为BEEP,接通低电平信号时蜂鸣器响。
具体线路的连接如下:(1)电源开关下的两根线为220V电源线,与PLC主机的L1和L2相连。
(2)PLC输入端的0CH(0通道)00~11端子分别与实验面板上端子排的INPUT00~11相连,1CH(1通道)00~05端子分别与实验面板上端子排的INPUT12~17相连。
(3)PLC输出端的10CH(输出0通道)00~07端子分别与实验面板上端子排的OUTPUT00~07相连,11CH(1通道)00~03端子分别与实验面板上端子排的OUTPUT10~13相连。
《C#程序设计》实验指导书主编:郭祖华孙冬卫娟1上机实验指导2上机实验指导网络应用开发的例子非常多,为了让读者对应用编程的各方面都有一个大概的认识,本上机实验指导以实际业务处理为素材,根据课程进度选取了有代表意义的部分内容,经过简化和变形处理,整理为一个个单独的实验。
考虑到学习者学习的进度,在安排每个上机实验内容时,功能需求及实现步骤均与实际的业务处理有非常大的差别,而且有些步骤是多余的,或者实现的办法不是最简单的。
但是完成实验的目的不仅仅是为了实现需要的功能,还要通过这些步骤领会涉及的多种技巧。
另外,由于各个实验之间既有独立性,又相互关联,所以读者按照实验顺序完成一个个实验后,即能对网络应用编程形成一个连贯的思路,又能快速掌握和巩固涉及的技术。
1.上机实验环境操作系统:Windows XP SP2或者Windows 2000 SP4开发工具:VS2005 Professional简体中文版内存要求:至少256MB。
2.实验报告要求(1)使用专用的统一的实验报告纸,要求字迹工整,内容清晰,注意填写必要的信息:姓名、学号、班级和辅导教师。
(2)必须认真填写实验题目、实验目的等;实验步骤中要求列出当次实验中自己认为有意义的操作过程及各种必要的数据输入输出情况;写出主要的功能模块划分、设计界面及关键源代码,以及上机调试过程中遇到的问题和解决办法。
1.1 实验一创建简单的.NET应用程序1.实验目的熟悉VS2005开发环境,掌握如何在此开发环境下开发简单的.NET应用程序,以及调试程序的基本操作技巧。
2.建议用时建议用2小时完成本实验,或者根据自己的理解情况调整实际需要的时间。
3.实验内容分别创建不同类型的.NET应用程序项目,体会基本的设计与编程方法。
4.实验要求(1)通过实验掌握【工具箱】、【属性】窗口、【解决方案资源管理器】等的用法和基本操作技巧。
(2)通过实验观察各种应用程序的程序结构及特点;(3)通过实验观察生成的可执行文件的存放位置,掌握项目备份与恢复的方法;(4)通过实验掌握利用断点进行程序调试的方法。
《可编程控制器原理及应用》实验指导书杭州电子工业学院自动化分院2000年11月可编程控制器是采用微机技术的通用工业自动化装置,近几年来,在国内得到迅速推广普及。
正改变着工厂自动控制的面貌,对传统的技术改造、发展新型工业具有重大的实际意义。
本实验指导书旨在帮助学生通过实验更好的掌握PLC的结构特点、工作原理和编程方法,从而为今后在工程上的应用打下坚实的基础。
全书分为三个部分:第一部分是以三菱可编程序控制器配THPLC-A型教学实验设备为实验对象;第二部分是以三菱可编程控制器配SAC-PC教学实验设备为实验对象;第三部分则是实验参考。
在实验前学生应根据选定的实验设备参考相应的指导书内容进行预习,实验过程中应严格按照实验要求操作,注意安全,实验后书写实验报告。
第一部分三菱可编程序控制器配THPLC-A型教学实验设备实验一可编程控制器的基本指令编程练习 (3)实验二装配流水线控制的模拟 (6)实验三三相异步电动机的星/三角形换接启动控制 (8)实验四LED数码显示控制 (10)实验五五相步进电动机控制的模拟 (12)实验六十字路口交通灯控制的模拟 (14)实验七液体混合装置控制的模拟 (16)实验八电梯控制系统的模拟 (18)实验九机械手动作的模拟 (21)实验十四节传送带控制的模拟 (23)实验十一二台PLC的通讯 (25)实验十二多台PLC的通讯 (28)第二部分三菱可编程控制器配SAC-PC教学实验设备实验一可编程控制器的基本指令编程练习 (29)实验二十字路口交通信号灯控制实验 (33)实验三混料罐控制实验 (35)实验四传输线控制实验 (37)实验五小车自动选向、定位控制实验 (39)实验六电梯控制实验 (41)实验七刀具库管理控制实验 (43)第三部分附录一、实验仪器和设备介绍二、实验参考1、基本顺控指令表2、步进梯形指令3、功能指令表4、PLC网络的通讯技术三、实验报告格式第一部分三菱可编程序控制器配THPLC-A型教学实验设备实验一可编程控制器的基本指令编程练习一、实验目的1、熟悉PLC实验装置。
第1章概述1.1安装.NET Framework SDK实验题目:下载并安装.NET Framework SDK实验目的:1)学习从网络下载.NET Framework SDK2)熟悉.NET Framework SDK的安装过程实验步骤:1)下载Microsoft .NET Framework 2.0 版可再发行组件包。
2)下载Microsoft .NET Framework 2.0 软件开发工具包。
3)安装Microsoft .NET Framework 2.0 版可再发行组件包。
(文件名:dotnetfx.exe)4)安装下载Microsoft .NET Framework 2.0 软件开发工具包。
(文件名:setup.exe)1.2 编辑、编译和运行C#程序实验题目:编辑、编译和运行习题6解答给出的C#应用程序。
实验目的:1)了解C#应用程序的本结构。
2)熟悉C#应用程序的编译和运行过程。
实验步骤:1)录入习题6解答给出的程序源代码并保存。
2)编译该应用程序。
3)运行该应用程序。
参考答案:新建一个普通的文本文件,重命名并且把.txt属性改成.cs。
比如WelcomeToCS.cs。
然后在文件上面点击右键选择打开工具,用编辑工具(UltraEdit-32等)打开,录入习题6解答给出的源代码。
//WelcomeToCS.csusing System;class WelcomeToCS{static void Main(){Console.WriteLine("Welcome to C#!");}}建立源程序文件WelcomeToCS.cs后,就需要使用编译程序csc.exe编译它。
为了编译这个程序,应进入SDK命令提示窗口,并在保存文件WelcomeToCS.cs的目录下输入命令:例如:源程序文件放在c盘的07文件夹下面(图1.1)。
我们先打开SDK命令提示窗口(步骤:开始→所有程序→Microsoft .NET Framework SDK v2.0→SDK 命令提示),显示如图1.2。
《PLC原理与应用》实验指导书机电工程系检测教研室南阳理工学院2008-09注意1.PLC应用是一门实践性很强的技术,进实验室之前必须预习实验内容,以提高实验效率。
2.学生必须遵守操作规程,按照指导教师的要求进行实验,爱护实验设备,否则造成设备损坏必须赔偿。
目录一 PLC各部分的名称和机能 (1)二 SAC-PLC实验台的组成及应用 (4)三手持编程器的使用 (7)(一) CQM1-PR001简介 (7)(二)程序的输入 (8)(三)其它操作参考 (16)四实验内容 (19)实验一手持编程器的使用 (20)实验二混料罐控制 (22)实验三传输线控制 (26)五实验参考程序 (28)实验一手持编程器的使用 (28)实验二混料罐的控制 (29)实验三传输线控制 (32)一 PLC各部分的名称和机能(一)CPU单元下面以OMRON公司的十点输入输出型的CPU单元为例来说明。
其外形图如图1-1所示,各部分的名称和机能说明如下:图1-1 十点输入输出型CPU单元各部分名称图1.电源输入端子连接电源(AC100~240V或DC24V)2.功能接地端子3.保护接地端子为防止触电,必须接地4.外部供应电源端子作为输入设备用DC24V电源使用(仅AC电源型)。
5.输入端子连接输入电路。
6.输出端子连接输出回路。
7.状态显示LED灯亮、闪烁表示单元状态如表1-1所示。
表1-1 状态显示LED表示的状态表1-2 故障发生时输入LED的状态8.输入LED输入端子的接点ON时,LED变亮。
故障发生时LED的状态如表2-2所示。
9.输出LED输出端子的接点ON时,LED变亮。
10.模拟设定电位器根据实际操作,在CH250、CH251存储0~200的值。
11.外设端口连接编程工具或者RS-232C适配器,RS-422适配器。
12.扩展连接器(只有30点和40点的单元有)连接扩展I/O单元(输入12点/输出8点),扩展I/O单元最多连接3台。
第一章可编程控制器简介可编程控制器是采用微机技术的通用工业自动化装置,近几年来,在国内已得到迅速推广普及。
正改变着工厂自动控制的面貌,对传统的技术改造、发展新型工业具有重大的实际意义。
可编程控制器是60年代末在美国首先出现的,当时叫可编程逻辑控制器,目的是用来取代继电器,以执行逻辑判断、计时、计数等顺序控制功能。
其基本设计思想是把计算机功能完善、灵活、通用等优点和继电器控制系统的简单易懂、操作方便、价格便宜等优点结合起来,控制器的硬件是标准的、通用的。
根据实际应用对象,将控制内容写入控制器的用户程序内,控制器和被控对象连接也很方便。
随着半导体技术,尤其是微处理器和微型计算机技术的发展,到70年代中期以后,已广泛地使用微处理器作为中央处理器,输入输出模块和外围电路都采用了中、大规模甚至超大规模的集成电路,这时的已不再是仅有逻辑判断功能,还同时具有数据处理、调节和数据通信功能。
可编程控制器对用户来说,是一种无触点设备,改变程序即可改变生产工艺,因此可在初步设计阶段选用可编程控制器,在实施阶段再确定工艺过程。
另一方面,从制造生产可编程控制器的厂商角度看,在制造阶段不需要根据用户的订货要求专门设计控制器,适合批量生产。
由于这些特点,可编程控制器问世以后很快受到工业控制界的欢迎,并得到迅速的发展。
目前,可编程控制器已成为工厂自动化的强有力工具,得到了广泛的普及推广应用。
可编程序控制器,英文称Programmable Controller,简称PC。
但由于PC容易和个人计算机(Personal Computer)混淆,故人们仍习惯地用PLC作为可编程序控制器的缩写。
它是一个以微处理器为核心的数字运算操作的电子系统装置,专为在工业现场应用而设计,它采用可编程序的存储器,用以在其内部存储执行逻辑运算、顺序控制、定时/计数和算术运算等操作指令,并通过数字式或模拟式的输入、输出接口,控制各种类型的机械或生产过程。
PLC是微机技术与传统的继电接触控制技术相结合的产物,它克服了继电接触控制系统中的机械触点的接线复杂、可靠性低、功耗高、通用性和灵活性差的缺点,充分利用了微处理器的优点,又照顾到现场电气操作维修人员的技能与习惯,特别是PLC的程序编制,不需要专门的计算机编程语言知识,而是采用了一套以继电器梯形图为基础的简单指令形式,使用户程序编制形象、直观、方便易学;调试与查错也都很方便。
Micro830 PLC实验指导书陈山羊指导老师:张翼成计算机与电子信息学院罗克韦尔自动化实验室2013年5月前言广东石油化工学院罗克韦尔自动化实验室成立于2013年1月,耗资一千多万元人民币,该实验室含有电脑、Micro830 PLC、PowerFlex4M交流变频器各60台,中型PLC如CompactLogix L35E、大型PLC如ControlLogix L65等多台,还有自动灌装生产流水线一套,无油梁长冲程抽油机模型一套,电梯模型多套。
在学校和学院各位领导和老师的共同努力下建立起来。
为我校的教学事业和热爱PLC的同学提供了很好的硬件设施和学习环境。
由于实验室是在年初成立的,就其学习资料资源严重缺乏,作为第一批学员的我深有感触学习过程中的艰辛。
我觉着自己有一份责任,那就是不断地补充这些资源。
通过两个月对Micro830控制器和PowerFlex4M交流变频器的学习,并在实验过程中总结出一些学习经验,又加上查阅大量资料,本着简单易懂,又不失学习内容的原则,我致力于编写微型PLC实验指导用书。
该实验指导书上的所有例题和实验内容均经过严谨地验证。
我希望能为来实验室学习的同学或教学任务提供帮助,并殷切希望每位同学都能学好PLC。
本实验指导用书先对硬件和软件作些简单的介绍(建议先学软件,再看硬件),在此基础上提供一些实验项目,任课老师可根据各专业的教学大纲以及教学计划的安排,选做部分或全部的实验项目。
本实验指导书在编写过程中,得到王涛老师、张翼成老师等的大力支持,并且得到09届尚旭旭师兄、梁天师兄、罗剑峰师兄和王祥师兄的帮助,在此谨致衷心的感谢。
由于本人水平有限,不足与失误在所难免,本人将不断的补充与修改,更希望读者提供宝贵意见和建议。
目录前言 (2)目录 (3)第一章实验设备的介绍 (4)第一节Micro830可编程序控制器的介绍 (4)一Micro830可编程序控制器硬件特性 (4)二Micro830可编程序控制器的I/O配置 (5)三Micro830控制器的外部交流电源 (7)第二节Power Flex 4M交流变频器介绍 (9)一.Power Flex 4M交流变频器的I\O端子接线 (9)二Power Flex 4M 集成式键盘操作 (10)第三节编程软件Connected Components workbench介绍 (12)第二章实验练习 (15)实验一基本指令练习 (15)实验二计时器 (18)实验三计数器 (20)实验四比较指令与算术运算指令 (25)实验五循环与移位指令 (32)实验六交通信号灯的PLC设计 (38)实验七变频器的简单使用一 (40)实验八变频器的简单使用二 (44)实验九变频器简单实用三 (47)实验十三相异步交流电动机的启动控制线路 (49)实验十一小车自动往返的PLC控制 (53)实验十二RS485通信 (55)参考文献 (63)第一章实验设备的介绍第一节Micro830可编程序控制器的介绍一Micro830可编程序控制器硬件特性Micro830控制器是一种经济型砖式控制器,它具有嵌入式输入和输出根据控制类型,它可容纳2~5个插件模块。
可编程控制器(PLC)实验指导书(上机版)实验一礼花之光(认识实验)一、实验目的用PLC构成闪光灯控制系统合上启动按钮后,灯光按以下规律显示:L1、L2、L9-L1、L5、L8-L1、L4、L7-L1、L3、L6-L1-L2、L3、L4、L5-L6、L7、L8、L9-L1、L2、L6-L1、L3、L7-L1、L4、L8-L1、L5、L9-L2、L3、L4、L5-L6、L7、L8、L9-L1、L1、L9 ……如此循环,周而复始.二、实验要求:1.理解如下程序并上机调试。
理解移位指令及中间继电器的作用。
2.改变灯光显示规律,编程实现。
3.撰写实验报告,写出指令表程序并对以上程序做出详细解释。
实验程序实验二三相异步电动机Y/Δ换接启动及正反转控制在电机进行正反向的转、换接时,有可能因为电动机容量较大或操作不当等原因使接触器主触头产生较为严重的起弧现象,如果在电弧还未完全熄灭时,反转的接触器就闭合,则会造成电源相间短路。
用PLC来控制电机起停则可避免这一问题。
一、实验目的1、掌握自锁、互锁、定时等常用电路的编程2、利用基本顺序指令编写电机正反转和Y/△启动控制程序。
3、掌握电机星/三角换接启动主回路的接线。
4、学会用可编程控制器实现电机星/三角换接降压启动过程的编程方法。
二、实验原理要实现三相鼠笼型异步电动机的正反转控制,只要把三相线当中的任意两相调换一下位置就可以了。
如图2所示:假如接触器KM1闭合时电动机正转,则当接触器KM1断开,接触器KM2闭合时,电动机就会反转。
对于正常运行时定子绕组接成三角形的鼠笼型异步电动机,在启动时,为了保护电动机,一般采用Y/△降压启动方法来达到限制启动电流的目的。
Y/△降压启动的原理如图1所示:在启动过程中将电动机定子绕组接成星形,即接触器KMY闭合。
此时电动机每相绕组承受的电压为额定电压的3/1,启动电流为三角形接法时启动电流的1/3。
接触器KMY闭合的同时定时器开始定时,定时时间到,接触器KMY断开,接触器KM△闭合。
工厂电器控制实验指导书专业:姓名:学号:机械电子工程实验室2005年11月30日实验一电动机正、反转控制一、实验目的1、熟练掌握正、反转控制线路的接线方法。
2、掌握正、反转控制线路的工作原理及应用。
二、电机正、反转控制电路的工作原理实验控制电路见图1图1电动机正、反转控制电路三、仪器及材料1.熔断器板1块 2. 二相熔断器板1块3. 交流接触器板2块4. 热继电器板1块5.按钮板1块6. 三相交流电动机1个7. 导线与短接桥若干四、实验步骤1)检查各电器元件的质量情况,了解其使用方法。
2)按电气原理图1-a)正确连接线路,先接主回路,再接控制回路。
3)自己检查无误后,并经指导老师检查认可后合闸通电试验。
4)操作和观察电动机单方向起停情况。
5)操作正转起动按钮,待电动机正常运转后,直接按下反转起动按钮,使电动机反方向运转。
6)操作正转起动按钮,待电动机正常运转后,很轻地按一下反方向起动按钮,看电动机运转状态是否有变化,为什么?7)实验中出现不正常现象时,应断开电源,分析故障,如一切正常,可请指导老师人为地制造故障,由同学分析排除故障,再试验。
五、设计思考题1)若在实验中发生故障、应画出故障现象的原理图,并分析故障原因及排除方法。
2)在电动机正反转实验中,如出现按下反转起动按钮,电动机旋转方向不变,分析故障原因?实验二行程开关进行自动往返控制一、实验目的1、熟练掌握行程开关进行自动往返控制线路的接线方法。
2、掌握行程开关进行自动控制的工作原理。
3、掌握行程开关结构和应用方法。
二、开关进行自动往返控制电路的工作原理3-a) 3-b)图3 自动往返行程控制三、仪器及材料1.三相熔断器板1块2. 二相熔断器板1块3.交流接触器板2块4.热继电器板1块5.按钮板1块6.行程开关板1块7.三相交流电动机 1个 8.导线与短接桥若干四、实验步骤1)检查各电器元件的质量情况,了解其使用方法。
2)按电气原理图3正确连接线路,先接主回路,再接控制回路。
北京化工大学信息科学与技术学院软件体系结构上机实验指导书(C++)程 勇北京化工大学信息科学与技术学院二零一四年十二月软件体系结构上机实验指导书程 勇北京化工大学信息科学与技术学院二零一四年十二月目 录实验一软件体系结构风格(主子例程风格) (5)1.1实验目的 (5)1.2实验内容 (5)1.3实验要求 (5)1.4实验过程 (5)1.5报告撰写 (10)实验二软件体系结构风格(对象风格) (11)2.1实验目的 (11)2.2实验内容 (11)2.3实验要求 (11)2.4实验过程 (11)2.4.1 stdafx.h (11)2.4.2 stdafx.cpp (12)2.4.3 OOPStyle.h (12)2.4.4 OOPStyle.cpp (13)2.4.5 KWIC.cpp (19)2.5报告撰写 (23)实验三设计模式(工厂模式和单例模式) (24)3.1实验目的 (24)3.2实验内容 (24)3.2.1 工厂模式 (24)3.2.2 单例模式 (25)3.3实验要求 (25)3.4工厂模式实验过程 (25)3.4.1 Factory.h (25)3.4.2 Factory.cpp (26)3.4.3 Main.cpp (27)3.5单例模式 (28)3.5.1 Singleton.h (28)3.5.2 Singleton.cpp (29)3.5.3 Main.cpp (30)3.6报告撰写 (30)实验四设计模式(观察者模式和组合模式) (31)4.1实验目的 (31)4.2实验内容 (31)4.2.1 观察者模式 (31)4.2.2 组合模式 (32)4.3实验要求 (33)4.4观察者模式实验过程 (33)4.4.1 Observer.h (33)4.4.2 Observer.cpp (35)4.4.3 Main.cpp (38)4.5组合模式实验过程 (39)4.5.1 Composite.h (39)4.5.2 Composite.cpp (40)4.5.3 Main.cpp (43)4.6报告撰写 (43)实验一 软件体系结构风格(主子例程风格)1.1 实验目的(1)理解和掌握软件体系结构风格设计与实现;(2)理解不同软件体系结构的特点;1.2 实验内容(1)理解KWIC 关键词索引系统问题;(2)采用主/子程序体系结构风格实现KWIC关键词索引系统;1.3 实验要求熟练掌握基于主/子程序体系结构风格的KWIC 关键词索引系统;所需软件如下:(1)WinXP或者Windows7;(2)Visual Studio 2008(3)C实验课后完成实验报告的心得体会内容,并及时提交实验报告。
1.4 实验过程KWIC问题作为一个早年间在ACM的Paper提出的一个问题,被全世界各个大学的软件设计课程奉为课堂讲义或者作业的经典。
可以进一步参考论文“On the Criteria to be used in Decomposing Systems into Modules”。
设计并实现一个软件系统,具体功能如下:该软件系统由命令行指定要进行处理的英文文本文件(.txt)的目录和文件名以及输出结果文件的目录和文件名。
面向过程的主子程序实现,参考代码如下:h1.hh2.hfun.cmain.c实验结果:输入文件this is a boythat is a girl输出结果:1.5 报告撰写(1)独立完成实验报告;(2)按时保质保量提交纸质版和电子版作业(电子版主要是源代码,其他写在纸质版上),纸张必须是化工大学实验报告用纸,而且必须用蓝色笔书写;(3)纸质版和电子版都以班为单位上交(由课程学习委员负责),电子版发到buctcourse@实验二 软件体系结构风格(对象风格) 2.1 实验目的(1)理解和掌握软件体系结构风格设计与实现;(2)理解不同软件体系结构的特点;2.2 实验内容(1)理解KWIC 关键词索引系统问题;(2)采用面向对象体系结构风格实现KWIC关键词索引系统; 2.3 实验要求熟练掌握基于面向对象体系结构风格的KWIC关键词索引系统;所需软件如下:(1)WinXP或者Windows7;(2)Visual Studio 2008(3)C实验课后完成实验报告的心得体会内容,并及时提交实验报告。
2.4 实验过程参考代码如下:2.4.1 stdafx.h// stdafx.h : 标准系统包含文件的包含文件,// 或是常用但不常更改的项目特定的包含文件//#pragma once#include <iostream>#include <tchar.h>// TODO: 在此处引用程序要求的附加头文件2.4.2 stdafx.cpp// stdafx.cpp : 只包括标准包含文件的源文件// KWIC.pch 将成为预编译头// stdafx.obj 将包含预编译类型信息#include "stdafx.h"// TODO: 在 STDAFX.H 中//引用任何所需的附加头文件,而不是在此文件中引用2.4.3 OOPStyle.h#pragma once/** OOPStyle.h*/#include <string>#include <iostream>#include <fstream>#include <vector>using namespace std;class CKWICItem{};class CKWIC{public:CKWIC(void);~CKWIC(void);void LoadFile(string filename);void Process();void OutputResult();private:bool IsNoisyCh(char ch);void PreProcess();void CyclingShift(vector<string> &linelist);void SortLines(vector<string> &linelist);void Output(ostream &out);string m_filename;vector< vector<string> > m_line_list;};2.4.4 OOPStyle.cpp#include "StdAfx.h"#include "oopstyle.h"#include <algorithm>#include <fstream>using namespace std;extern char g_outputfile[256];CKWIC::CKWIC(void){}CKWIC::~CKWIC(void){}/**** LoadFile ‐ 从文件中读取每一行* @filename 要读取的文件路径** 该函数从目标文件中读取每一行到成员变量m_line_list中,* m_line_list保存了每一行的vector数组变量,每一个vector* 保存从文件中读取的字符串以及后面要经过移位产生的字符串。
*/void CKWIC::LoadFile(string filename){ifstream in(filename.c_str(),ios::in);if(!in)return ;//保存文件名m_filename = filename;//循环读取文件中的每一行到链表中string temp;while(getline(in,temp,'\n')){vector<string> lines;lines.push_back(temp);m_line_list.push_back(lines);}in.close();}/*** IsNoisyCh ‐ 判断字符是否为空格或噪音字符 * @ch** 判断@ch是否为空格或噪音字符*/bool CKWIC::IsNoisyCh(char ch){if(ch == ' ' || ch == '\t'|| ch == '\n' || ch == '\0'|| ch == ',' || ch == '!'|| ch == '?' || ch == ';'){return true;}elsereturn false;}/** PreProcess ‐ 对字符串预处理*** 该函数对字符串作预处理,其中的内容包含去掉字符串前面的空格* 去掉字符串后面的空格,把字符串中多个空格减少为一个*/void CKWIC::PreProcess(){vector< vector<string> >::iterator it_item;for(it_item = m_line_list.begin(); it_item!= m_line_list.end(); it_item++){string temp = (*it_item).back();//清空当前字符串(*it_item).back().clear();string::iterator it_str = temp.begin();//找到第一个不是空白字符的位置while(IsNoisyCh(*it_str)) it_str++;//除去中间多余的空白字符while(it_str!=temp.end()){//如果不是空白字符则添加if(!IsNoisyCh(*it_str)){(*it_item).back().push_back((*it_str));}else{//如果是空白字符则找到下一个不是空白字符的位置并加入一个空格while(it_str!=temp.end() && IsNoisyCh((*it_str))) it_str++; (*it_item).back().push_back(' ');it_str‐‐;}it_str++;}//cout<<(*it_item).back()<<endl;}}/**** Process ‐ KWIC的处理处理函数*** 该函数包含三个过程* 1.对从文件中读取的每一行字符串进行预处理* 2.对从文件中读取的每一行进行循环移位* 3.对所得到的循环移位的字符串序列按字母表排序**/void CKWIC::Process(){//预处理PreProcess();//循环移位vector< vector<string> >::iterator it;for(it = m_line_list.begin(); it!= m_line_list.end(); it++){this‐>CyclingShift(*it);}//字符串排序for(it = m_line_list.begin(); it!= m_line_list.end(); it++){this‐>SortLines(*it);}}/**** CyclingShift ‐ 对字符串循环移位*** @linelist 要循环移位的字符串链表** 从字符串链表中的第一个字符串开始循环移位字符串* 并把循环移位的结果添加到字符串链表中**/void CKWIC::CyclingShift(vector<string> &linelist){int len = linelist.front().length();while(true){//取出最后一个移位后的字符串,如果只有一个说明是没有移位的字符串string temp = linelist.back();//从开始位置找到第一个空格的位置int index = temp.find(' ');if(index == ‐1)break;//取出从开始位置到第一个空格位置的字符串string leftsub = temp.substr(0,index);//取出从第一个空格下一个空格位置开始的字符串string rightsub = temp.substr(index + 1,len ‐ index ‐ 1);//在末尾添加一个空格rightsub.push_back(' ');//组合成移位后的字符串string str_shift = rightsub + leftsub;//cout<<str_shift<<endl;//如果这个字符串等于字符串链表中的第一个字符串即原始字符串则退出循环if(str_pare(linelist.front()) == 0)break;else //否则在链表中添加一个新的字符串linelist.push_back(str_shift);}}/**** SortLines ‐ linelist** @linelist 要进行排序的链表** 该函数对字符串进行排序,排序过程使用STL的sort函数 **/void CKWIC::SortLines(vector<string> &linelist){sort(linelist.begin(),linelist.end());}/**** OutputResult ‐ 输出KWIC的结果** 输出KWIC的结果,以及文件信息**/void CKWIC::OutputResult(){if(strlen(g_outputfile)){ofstream out(g_outputfile,ios::out);if(!out)return;Output(out);out.close();}elseOutput(cout);}void CKWIC::Output(ostream &out){// out<<"KWIC Result:"<<endl;vector< vector<string> >::iterator it;for(it = m_line_list.begin(); it!=m_line_list.end(); it++){out<<"==============================="<<endl;int size = (*it).size();for(int i=0; i<size; i++){out<<i<<":"<<(*it).at(i)<<endl;}}out<<endl;out<<"*******************************************"<<endl;out<<"Source file:"<<m_filename<<endl;out<<"Total:"<<m_line_list.size()<<" lines in the file."<<endl;}2.4.5 KWIC.cpp// KWIC.cpp : 定义控制台应用程序的入口点。