数据挖掘系统结构

2024-12-03

数据挖掘系统结构(共12篇)

数据挖掘系统结构 篇1

0 引言

随着信息技术渗透到诊断、治疗、化验、检查等各个环节,出现了医院信息系统(HIS)、临床信息系统(CIS)、护理信息系统(NIS)、电子病历(EPR)以及医学图像存储和传输系统(PACS)等各种信息系统,能方便有效地对患者的各种数据进行采集、传输、存储,并进一步分析、处理、解释,以实现对患者的诊疗支持、决策支持、科研支持[1]。这些系统中存储者大量的相关数据,也蕴涵着不被人知的大量知识信息。这些知识信息需要通过统计和数据挖掘的方法从大量的数据中找出来。目前已有部分对这些数据进行挖掘的研究,主要有这样几个方面的应用,在医疗设备绩效预测中的应用[2],在医药信息整合方面的应用[3],在糖尿病并发症流行病学方面的应用[4],等等。这里要提出的是完全不同的另一方面的应用。

1 问题的提出

对于没有医学知识的广大患者,身体出现了某种病症,就需要去医院就医。接下来的一个问题就是,应该挂什么科的号呢?对于不常见的病,患者很难确定。比如:脚肿这一病症,有很多种疾病都可能引起脚肿。当患者就诊时,对于有经验的医生,会让病人描述自身的症状,并询问可能发生的相关的症状,以了解病人的病情,并根据病情,依据自己的经验及专业知识来进行诊断。从而比较准确的判断病人的病因,在相对小的范围内再做进一步的检查,然后确定病因。如果遇到一个庸医,他会将所有可能的病因都让病人检查一遍,即浪费病人的时间,又增加病人的经济负担,有时还会延误病人治疗的最佳时机。事实上在医院的临床信息系统(CIS)中存在许多有用的知识信息,如果能将这些有用的知识信息挖掘出来,并生成一个网络导诊专家系统,提供给广大患者使用,患者可以根据自己的症状,利用导诊专家系统,初步确定病因,再去医院就诊。这样即减轻了患者的经济压力,又提高了效率,节约患者大量的时间,同时也减轻医院患者太多的压力。

2 系统结构

导诊专家系统应具有以下功能:

对用户选定或输入的一个或多个病症,导诊专家系统能提出相关病症的询问,当用户回答了相关询问后,导诊专家系统可给出:(1)一个或多个可能的病因,最有可能的排在第一位,依此类推;(2)各种可能病因对应的科;(3)可能的发展趋势;(4)相关的饮食及体育锻炼等方面的建议。

以上提到的这些信息除(4)之外,其它信息均可对医院的临床信息系统(CIS)数据库挖掘得到。

2.1 数据来源

由于患者一般不会始终在同一家医院就诊,要从临床信息系统(CIS)中挖掘出某病症可能的发展趋势,数据就不能只取自同一家医院,而应该取自同一地区的所有医院,一个市或一个省的所有医院,这样才可能含盖每一个患者就诊的所有信息,从而可挖掘出某病症可能的发展趋势的信息,也可以判断出患者针对某病症的某次就诊是否治愈,如果没有治愈,患者会再次针对该病症就诊,当然不一定在同一家医院。

2.2 数据预处理

利用数据挖掘技术从长期积累的、大量的临床数据中发现有效的行为模式是生成导诊专家系统的关键。而取自不同医院的数据往往是不完整的、有噪声的和不一致的。直接用于挖掘将产生大量不正确的和无意义的知识信息。如何进行合适的数据预处理,提供符合挖掘需要的干净且严谨的数据是发现高质量知识信息的关键[4]。临床数据的特点:在性别、年龄、科室、用药项目、病症、临床行为等繁多属性中存在冗余、无用的属性及无挖掘意义的行为;需要通过合适的预处理方法确定行为间的关系,进而规范数据形式为后续挖掘工作奠定基础。

由于挖掘的目标不同,所要做的预处理也不同。针对导诊专家系统的挖掘目标所要做的数据预处理,归纳起来有以下几点:(1)对于取自不同医院的原始临床医学数据,以患者的身份证号码属性作为识别不同患者的标识,对每位患者的就医记录,以时间的先后顺序形成一个序列。(2)对每位患者的就医序列记录做去噪处理,以患者的姓名,年龄等属性作为去噪的依据。比如:同一序列中有不同姓名的记录,则根据年龄、职业等属性推断是姓名有错,则修正其姓名,否则是身份证号码属性错误,则做去噪处理。(3)对每个序列中与挖掘目标无关的就医记录做去噪处理。(4)对于序列中只包含一到两个就医记录的患者数据,并且记录的病症与挖掘目标无关,如:外伤处理等,做去噪处理。(5)对就医记录与挖掘目标无关的属性作去噪处理,如:姓名等。

2.3 数据的隐私保护

医学数据不可避免地涉及到患者的一些隐私信息,当这些隐私信息使患者在日常生活中遭遇到不可预料的侵扰时,就产生了隐私性问题。医学数据挖掘者有义务和职责在保护患者隐私的基础上进行科学研究,并且确保这些医学数据的安全性和机密性[5]。

在这个系统中,在对数据预处理完成后已将患者的姓名去除,而挖掘出的数据只包含与导诊有关的知识信息,不包含患者的身份证号。这样可对患者的隐私达到有效的保护。

2.4 数据挖掘

根据确定的挖掘目标选择合适的挖掘工具对预处理后的数据进行挖掘,挖掘得到的结果作为导诊专家系统的知识信息库。由于医院的临床信息数据库中的数据是随时间变化而不断增加的,所以需要定期对新增的数据作预处理并进行增益挖掘,从而保证导诊专家系统的知识信息库的知识信息完整及新鲜。

2.5 导诊专家系统结构

导诊专家系统结构如图1所示。图中的数据库1、数据库2、……、数据库n代表各医院的临床信息数据库,用户1、用户2、……、用户m代表广大患者。基于Web的导诊专家系统门户模块包含对挖掘得到的知识信息的可视化表达。

3 结束语

这一系统的实现,需要由政府部门出面,组织一个包括人工智能专家、数据挖掘专家、网络专家、医学专家、统计学专家等的队伍,购买相应的设备及软件,可以先在某一个省或市进行试点,待成熟后再推广到其它省市。这一系统的实现,将给广大民众带来极大的方便,也是市政建设的一项业绩。

摘要:论述了开发导诊专家系统的必要性,及导诊专家系统要具有的功能,说明导诊专家系统的知识主要来源于对各医院临床信息系统(CIS)数据库进行数据挖掘的结果,并给出数据预处理的方法步骤,最后给出导诊专家系统的结构。

关键词:数据挖掘,导诊,系统结构

参考文献

[1]张萌,梁正,祝思清.基于关联规则的数据挖掘在医疗诊断中的应用[J].山东科学,2008,(1):80-82.

[2]伍平阳,林意群,林木炎.基于数据挖掘技术的决策树算法在医疗设备绩效预测中的应用[J].中国组织工程研究与临床康复,2008年,(12)9:1689-1692.

[3]王欣.利用数据挖掘技术进行医药信息整合[J].齐齐哈尔医学院学报,2009,(30)11:1381-1382.

[4]王珏,杨鹤标.临床行为模式挖掘的数据预处理[J].计算机工程与设计2009,30(2):374-377.

[5]袁占花,李祥生.数据挖掘在医学信息系统中的应用[J].电脑开发与应用,2009,22(7):55-57.

数据挖掘系统结构 篇2

基础地理信息系统的空间数据规范与组织结构

基础地理信息系统在涵盖内容、数据结构和服务对象上都远远超出了数字地形图,它可以同时满足建设用图和地理信息系统(GIS)用户的需要,同时满足GIS用户的共同需要和特殊需要,具有丰富的数据提取、可视化输出、质量控制、历史数据保存再现功能.为了达到上述目的,空间要素的.规范和结构设计是至关重要的一步.阐述了对制定空间要素规范的原则、空间要素规范的对象、以及空间要素规范和结构应包含内容的一些看法.

作 者:孙红春 作者单位:同济大学测量与国土信息工程系,刊 名:同济大学学报(自然科学版) ISTIC EI PKU英文刊名:JOURNAL OF TONGJI UNIVERSITY年,卷(期):29(8)分类号:P228关键词:基础地理信息系统 空间要素 数据规范

数据挖掘系统结构 篇3

摘要:论述了一种适用于处理海量监测数据的结构性态监测信息管理系统(MIMS)的设计方案.基于三层浏览器/服务器架构搭建软件系统,利用多服务器协同工作机制提升系统性能.应用大数据技术,充分考虑海量监测数据对数据管理系统的高要求,选用MongoDB数据库作为数据管理平台,论述了数据库结构和采用的数据格式.最后以宁波南站结构性态监测为例,展示了系统的实现效果.结果表明该系统具有很好的扩展性和通用性,每天可接收远程数据约10 GB,能实现对海量监测数据的实时吞吐和高效组织管理.

关键词:结构性态监测;大数据;MongoDB数据库;多服务器协作;浏览器/服务器

中图分类号:TP274文献标识码:A

土木工程领域的结构健康监测研究始于上世纪70年代末.目前,对结构健康监测技术的研究大多集中在传感网络子系统设计及损伤识别和安全预警等方面.在结构性态监测软件的开发方面,近几年也出现了一些技术创新和实践成果,如土石坝安全监测软件[1]、桥梁结构健康监测系统软件[2]和上海中心大厦结构健康监测软件[3]等.但这些软件基本上都是针对特定结构开发,系统的可移植性、可维护性和可扩展性表现较差.在监测数据的组织管理方面,已有的结构性态监测软件大多是从海量的监测数据中获取有效的关键数据形成数据报告,不能实现全部监测数据的实时吞吐,并且存在数据采集与存储不同步的问题.

随着物联网、云计算和社交网络等新兴技术与服务的出现,数据类型和数据量正以惊人的速度扩张,如何更好地管理和利用大数据开始备受关注[4-6].在结构健康监测中应用大数据技术,对实时监测数据流进行统计分析,可以预测出数据发展的趋势,从而实现系统对结构损伤的识别、诊断和预测.达到这一目的的关键在于实现监测数据的实时吞吐和高效组织管理.由于土木工程结构健康监测与物联网的融合以前所未有的速度生成数据,这些数据即使经过过滤,只保留有效的数据,其数据量也是惊人的庞大.如何实现对海量监测数据的组织、存储、查询和分析,既是实现对结构全寿命周期跟踪式在线监测的前提,也是对结构进行有效的损伤识别和安全评定的基础.

针对以上问题,本文提出一种大数据技术下的结构性态监测信息管理系统(MIMS)设计方案.该方案以实现高效的数据管理和安全的数据共享为目的,实现监测数据实时或近实时的、动态的、数字化、网络化和可视化的管理.系统已应用于多个大型项目的结构健康监测,如宁波南站、上海中心大厦、兰州西站和上海世博轴阳光谷等.

1系统架构

目前,基于网络化的监测软件实现模式主要有两种方式,一种为客户机/服务器(Client/Server, C/S)模式,另一种为浏览器/服务器(Browser/Server, B/S)模式[7].

B/S模式是Web2.0兴起后的一种网络结构模式,该模式由服务器安装数据库和Web应用,承担系统的核心功能;客户机安装浏览器作为客户端,浏览器通过服务器端的Web应用间接同数据库进行数据交互.这一模式解决了传统C/S模式中专用客户端软件开发成本高,升级维护困难等问题(见图1).

该体系结构具有以下优点:

1)广域网/局域网都可使用,对客户端软硬件环境要求不高,只要有操作系统和浏览器即可;

2)各层在逻辑上相对独立,具有很好的灵活性、可重用性和可扩展性;

3)系统功能集中在服务器端,可随时进行更换或更新,从而实现无缝升级,降低系统维护成本;

4)可添加用户管理机制,利用业务逻辑层阻止未授权用户访问数据层,实现数据的安全管理;

5)浏览器即客户端,一方面可降低开发难度和成本,另一方面可充分利用页面制作技术与用户进行更加生动和丰富的交流.

2系统功能实现

2.1服务器软件

MIMS的功能主要包括数据的采集与接收、过滤与转换以及处理与查询,如图2所示.系统核心功能集中在服务器端.考虑到各功能环节对服务器有各自不同的要求,且具有不同步性,因此将各个功能模块设计成相互独立的服务器软件.

MIMS的运行模式是以系统的自动运行为主,一旦服务器软件或硬件出现故障,系统的运行将终止,如果不被及时发现并加以维护将会造成不可预计的数据损失乃至工程损失.因此,MIMS设计有独立的自检服务器软件,以实时监视服务程序,当有异常状态发生时,以邮件和短信的方式通知相关技术人员.

2.2多服务器协同机制

MIMS采用多服务器协同机制对服务器进行管理.Internet的快速增长要求服务器具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲,CPU,I/O处理能力成为瓶颈[8].通过提高硬件性能来提高单台服务器性能的效果有限,而采用多服务器协同工作机制和负载均衡技术可以很好地应对大量并发访问的情况.

MIMS中的各功能模块被设计成独立的服务器软件,这些软件可以在单台服务器上运行,但效率较低.为提高运算效率,可以采用多服务器协同系统来均衡服务器负荷,将各服务器软件设计在不同服务器中,并形成相互协作机制.如图3所示,服务器1负责将传感器网络传来的数据进行采集并存储于数据库;服务器2首先实现和服务器1的数据库同步,然后对这些数据进行过滤、筛选和转换并存储于另一个数据库中;服务器3同步已经过转换的数据,再根据客户浏览器通过Web服务器提交的指令对数据进行分析和处理.各服务器通过数据库的管控进行数据同步,以C/S模式相互访问,实现相互调用和协同工作.

3数据管理方案

3.1数据库

结构健康监测系统对数据库的要求非常高.已有的较为成熟的结构健康监测系统大都采用文件形式存储数据,也有一部分采用关系型数据库对监测数据进行管理.采用文件形式显然不能实现数据的实时存储与查询,且组织管理效率非常低,而关系型数据库的应用也受到诸多限制,一般只能实现对部分关键数据的存取,不能实现对海量监测数据的实时吞吐.目前,监测系统正在向网络化发展且监测数据的规模也在不断扩大,监测系统对数据库的要求越来越高.对海量监测数据的高效率存储访问以及对数据库的高并发读写和高可扩展性等要求已经成为传统的关系型数据库无法应对的难题[9-10].

近年来,随着大数据时代的到来,NoSql(Not Only SQL)数据库得到了迅速的发展, NoSql数据库具有传统关系型数据库无法比拟的高并发、高效率和高可扩展等特性,其中MongoDB数据库的表现尤为突出[11-12].MIMS采用高性能、易部署、易使用且存储数据方便的MongoDB数据库对监测数据进行管理,实现了对海量监测数据的实时吞吐和高效存储与查询.

3.2数据格式

3.2.1数据存储格式

这里的数据存储格式是指数据保存在数据库或文件中的编排格式.其应满足一定条件:1)保证记录所需要的全部信息;2)充分利用存贮空间,提高存贮效率;3)采用统一的格式,方便与数据处理模块间的数据交换.MongoDB使用BSON(Binary Serialized Document Format)结构来存储数据,可以满足以上要求.BSON是一个轻量级的二进制数据格式,可以存储内嵌的文档对象和数组对象.MIMS采用以BSON格式存储的文档对象存储信息,其中每条记录包括测量点位(position)、传感器类型(dimTyp)、测量批次(batch)、测量时间(datetime)和测量值(value),示例如下:

{″position″:″SWGJ12″,″dimTyp″:″stress″,″batch″:null,″datetime″:newDate(2014,4,6,16,12,9),″value″:-23.396}.

3.2.2数据交换格式

为了整合资源,建立统一的信息化平台,MIMS中的数据交换采用统一的标准数据格式.格式标准化可以极大地提高对数据的管理效率,让用户快速简单地得到必要的数据.

当前比较流行的数据交换格式有XML(Extensible Markup Language),JSON(JavaScript Object Notation)和YAML(Yet Another Markup Language).由于数据存储格式已选用是类似JSON的BSON格式,为了方便与数据库的数据交互,MIMS数据交换格式选用JSON格式.JSON 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,可以满足本设计对数据格式的要求.

JSON简单说就是JavaScript中的对象和数组,对象数据结构为 {键:值, 键:值,…},键为对象的属性,值为对应的属性值,属性值的类型又可以是数字、字符串、逻辑值、数组或对象.数组数据结构为 [字段1, 字段2, 字段3,…],其中字段值的类型又可以是数字、字符串、逻辑值、数组或对象.利用对象、数组两种结构可以组合成多层嵌套的数据结构,如以下示例,最外层是包含″Stresses″和″Temperatures″两个属性的对象,他们的属性值又嵌套了多个子对象的数组.

{

″Stresses″: [

{″position″:″SWGJ11″,″value″:[-23.396, -23.63, -24.352 …]},

{″position″:″SWGJ12″,″value″:[-24.153, -24.953, -23.303 …]},

] ,

″Temperatures″: [

{″position″:″SWGJ11″,″value″:[31.1, 30.5, 31.9 …]},

{″position″:″SWGJ12″,″value″:[29.3, 30.2, 32.3 …]},

]

}.

4 应用实例—宁波南站结构性态监测系统

4.1工程结构概况

宁波南站站房采用南北地上进站、高架候车、地下出站的功能格局.新建站房共3个主要层面:地下一层(主要负担进出站功能)、站台层(地面层)和高架层(含商业夹层).地下二层(地铁2号线站厅层)和地下三层(地铁2的站台层)的土建工程大部分位于铁路站房下,详见图4.高架层东西向总长度114.0 m:该方向柱距不均匀,为24+21+24+21+24 m;南北向总宽度185.5 m,柱距为25+2×21.5+43+2×21.5+31.5 m. 地下一层、站台层东西向总长度66.0 m(柱距为21 m及24 m),南北向宽度185.5 m.

本工程的监测内容主要包括:1)施工和运营过程中钢结构关键部位的应力监测;2)运营过程中结构关键部位的振动加速度响应监测;3)运营过程中风敏感部位的风压监测;4)运营过程中整体结构所处风环境的风速监测.

4.2系统配置

宁波南站结构性态监测系统包含静态(应力应变)采集通道167个,动态(风速风向、风压力和加速度)采集通道87个.采用单台服务器配置即可满足性能要求.

服务器配置:2路处理器,每路采用主频1 800 MHz,L3缓存10 MB的4核心4进程处理器;安装内存为8.00 G;3块3TB硬盘作为RAID5.

数据库配置:采用MongoDB主从模式配置为采集端数据库(主)和分析端数据库(从).

网络传输配置:采集现场局域网带宽100 M,VPN远程传输带宽为3 M.

4.3系统展示

宁波南站结构性态监测系统功能包括首页、系统说明、系统管理、设备总览、实时监测和监测回放.首页包括登录、项目概述和监测分项简介,系统说明包括项目功能说明和监测点位详细说明,系统管理包括密码管理、角色管理和用户管理.设备总览画面如图5所示,包括监测设备的最新运行状态统计和测点设备的详细状态表,共分为应力应变统计、风荷载统计、风压统计和加速度统计.

实时监测是对所有动态点位(风速风向、风压力和加速度)和静态点位(应力)的实时监测.监测点位的选取方法如图6所示,将监测结构分为不同的监测区域,点击每个区域可弹出传感器布置细节图,以选取监测点位.静态点位取最新一天的监测数据,动态点位取最新30 s的监测数据,分别绘制时程图进行展示,如图7和图8所示.

监测回放是对所有监测点位历史监测数据的回放.选择要查询的时间段和监测点位(点位选取方法与实时监测页面相同)后会获取相应的历史监测数据显示在页面中,如图9所示为2014年2月1日至2014年3月1日的应变监测记录.在时程图上拖动鼠标选择相应区域后还可放大进行细节展示,如图10所示.图11展示了2014年9月22日2:15:00-2:30:00的风荷载监测统计数据.风压力和加速度监测画面和以上界面类似,不再赘述.

5结论

本文研究了大数据技术下的结构性态监测信息管理系统设计,从系统架构、系统功能实现和数据管理方案等三个层面论述了本结构性态监测信息管理系统的可行性和优越性.最后以宁波南站结构性态监测项目为例,展示了系统的应用效果.主要结论有:

1)应用三层B/S架构搭建的系统具有很好的扩展性和通用性,可方便灵活地加入各种数据分析功能,并且适用于多种工程结构的性态监测.

2)系统具有高度的伸缩性.根据项目对性能和经济性的不同需求,可选择配置一台服务器,或利用多台服务器协同工作.

3)基于大数据技术,以MongoDB数据库为数据管理平台,能实时吞吐海量的监测数据,每天可接收远程数据约10 GB,可同时供多方分析、查看和使用.系统设计时已考虑大数据分析,设有监测数据中心,通过多个监测项目以及长期的数据积累,可获得海量、高增长率和多样化的监测数据.

4) 网页设计采用基于HTML5的新一代WEB技术,用户界面简约大气,使用舒适方便,并兼容多种终端平台,如工作站、笔记本和平板电脑等.

5)目前系统各功能模块服务器均采用单台服务器,支持不多于300个动态采集通道,数据分析速率也有一定限制.若要进一步扩充采集通道、提高数据分析速率,可通过搭建服务器集群来实现.

参考文献

[1]刘德志, 李俊杰. 土石坝安全监测软件系统设计与实现[J]. 大连理工大学学报, 2006, 46(3): 407-412.

LIU Dezhi, LI Junjie. Design and implementation of earth rockfill dam security monitoring software system [J]. Journal of Dalian University of Technology, 2006, 46(3): 407-412.(In Chinese)

[2]WANG Jianguo, SU Meiyan, ZHAO Guomin, et al. Design and implementation of the earthquake precursor network running monitoring software based on C/S structure [C] // 2010 6th International Conference on Wireless Communications, Networking and Mobile Computing (WiCOM). Piscataway, NJ: IEEE Computer Society, 2010, 4: 1-4.

[3]胡笳, 李晗, 杨晖柱, 等. 上海中心大厦结构健康监测软件集成设计及应用[J]. 同济大学学报:自然科学版, 2014,42(3): 460-467.

HU Jia, LI Han, YANG Huizhu, et al. Integrated design and application of structural health monitoring software system of Shanghai Tower [J]. Journal of Tongji University: Natural Science,2014, 42(3): 460-467. (In Chinese)

[4]孟小峰,慈祥. 大数据管理:概念、技术与挑战 [J]. 计算机研究与发展, 2013, 50(1): 146-169.

MENG Xiaofeng, CI Xiang. Big data management: Concepts, techniques and challenges [J]. Computer Research and Development, 2013, 50(1): 146-169. (In Chinese)

[5]KAMBATLA K, KOLLIAS G, KUMAR V, et al. Trends in big data analytics [J]. Journal of Parallel and Distributed Computing, 2014, 74(7): 2561-2573.

[6]MARTINEZ M A, CUESTA C E, ARIAS M, et al. The solid architecture for realtime management of big semantic data [J]. Future Generation Computer Systems, 2015,47: 62-79.

[7]张燕. 基于C/S模式的远程数据监测系统设计[J]. 计算机与网络, 2008, 34(17): 68-70.

ZHANG Yan. Design of remote data monitoring system based on C/S model [J]. China Computer & Network, 2008, 34(17): 68-70. (In Chinese)

[8]罗天洪, 罗文军, 陈小安. 网络环境下协同设计的多服务器技术[J]. 重庆大学学报:自然科学版, 2006, 29(9): 5-9.

LUO Tianhong, LUO Wenjun, Chen Xiaoan. Multiserver technology for internetbased collaborative design [J]. Journal of Chongqing University: Natural Science,2006, 29(9): 5-9. (In Chinese)

[9]张文盛, 郑汉华. 基于MongoDB构建高性能网站技术研究[J]. 吉林师范大学学报:自然科学版, 2013, 34(1): 123-127.

ZHANG Wensheng, ZHENG Hanhua. Research on the construction of high performance Web site based on MongoDB technology [J]. Journal of Jilin Normal University: Natural Science, 2013, 34(1): 123-127. (In Chinese)

[10]PARKER Z, POE S, VRBSKY S V. Comparing NoSQL MongoDB to an SQL DB [C] //Proceedings of the Annual Southeast Conference. Savannah, GA: Association for Computing Machinery (ACM), 2013, 5: 1-6.

[11]BARBIERATO E,GRIBAUDO M, IACONO M. Performance evaluation of NoSQL bigdata applications using multiformalism models [J]. Future Generation Computer Systems, 2014, 37: 345-353.

机电数据结构分层系统设计分析 篇4

1 机电数据结构分层制作系统实现的技术

1) 采用了数据库技术。机电数据结构分层的整个过程所使用的数据库管理软件只是用来存储提取到的基本数据、根据关联处理规则分层后的数据表是Excel格式的文件载体, 处理结果依用户设置自动保存, 该软件使用SQL Server 2000数据库管理系统, 即可满足用户将来要求保存一定量数据的要求, 也能满足对这些基本数据的处理功能。

2) 采用了多线程编程技术。数据结构分层功能模块通过采用多线程编程技术, 提高应用程序响应度, 使处理器效率更高, 且占用较少的系统资源。

3) 桌面编程技术。当前桌面应用开发技术还是首推Delphi。Delphi是一个以面向对象程序设计为中心的应用程序开发工具, 具有基于窗体和面向对象的方法、高速的编译器及强大而成熟的组件技术等特性, 因此该软件是基于Delphi 7.0环境开发而成[2]。

2 机电数据结构分层制作系统设计思路

Delphi是一个高效的可视化数据库管理信息系统开发工具。利用Delphi控制Excel可以完成数据分层、格式复杂的报表等与excel相关的工作, 通常情况下, 对一些不常用到的Excel操作, 只需利用其自身函数强大的处理功能进行操作即可, 而对于一些经常用到且有规律可循的操作, 则可以利用Delphi快速应用程序开发工具编写程序控制Excel格式的文件, 更好地提高工作效率。

由于分层系统使用的后台数据库是SQL Server, 而SQL Server对源表格式的要求比较高, 因此在往系统中导入准备分层的机电数据表时, 应先将整个表的格式设置为文本格式, 并且在制作完成时, 进一步核查是否与模板要求相符, 将格式不符的进行更正。

机电数据结构分层文件中分层编号的数字表达形式能够非常直观地了解该产品与组件、组件与零部件之间的关联关系, 产品部分配件关联见表1。产品分层标识为0, 直属件采用0.1, 0.2, 0.3, …, 组件采用自然数1, 2, 3, …, 组件中的子件分为1.1, 1.2, …, 如果再细分则为1.1.1, 1.1.2, …, 分层文件中组件的多少及分层的级数反映了产品机构及装配的复杂程度。对于属于价值高、重要、可重复使用、可用于同类其他产品的重要零部件, 定为跟踪件, 其分层号与产品前均标识字母Z, 同产品一样作为资产进行全寿命跟踪管理, 其他零部件分层号前标识字母B, 这是为下一步关接生成而特殊设定的, 每个配件所要求反映的技术参数列事先根据系统要求设定。

3 系统界面配置及软件流程

3.1 系统界面配置

该软件界面配置 (见图1) 比较人性化, 实现了分层的个性化设置、页面高清显示颜色的设置、分层完成后关机设置等。“系统—设置—初始化数据库”, 可以通过此路径删除导入的所有机电数据表, 也可以在此界面进行删除。每次使用之前, 要进行初始化数据库操作。

机电数据表有5种形式的模板, 分别为无Z0主组件———无直属件和有直属件, 有Z0主组件——无直属件和有直属件, 对于多台设备分层情况, 像刮板输送机, 转载机和破碎机和液压支架就属于多台设备的情况, 根据软件要求规范成一种特殊形式的模板。

规范后的机电数据表导入后台数据库, 进行自动分层。整个分层过程清晰明了, 对数据的每次处理, 都会显示到“处理日志”中。分层结束后, 显示分层完成, 并将结果显示到页面中。将系统完成的结构分层文件与人工分层完成的结构分层文件通过VLOOKUP进行核对后, 其结果准确无误。对于处理同等数据量的机电数据表, 效率由原来的1周, 提高到30 min完成。

3.2 系统软件流程

系统软件的编程是基于下面的流程框图来编制的, 设备结构分层的实现主要有以下几个步骤:一是读取规范好的Excel表中的数据。将表中Z0数据节点、一级Z0主组件数据节点及基础数据父子数据表存入数据库临时表中, 以便对数据进行更深一步操作[3]。二是进行两次判断, 首先判断Z0主组件节点是否为空, 如果是显示分层结果, 如果不是查询是否有子节点;再次进行判断, 如果否再读取Z0主组件节点, 如果是生成父子数据, 该步是本程序中的一个重点。经过不断循环, 完整实现数据横向及纵向多层分层结构。三是从数据库中读出数据, 把分层结果写入Excel中, 其分层程序流程见第21页图2、图3。由于程序执行是按主组件与子组件的图号/件号来进行关联, 一旦数据表中前后相同组件的图号/件号不一致, 该程序将会关联错误, 导致错误的分层结果, 因此要充分发挥该系统的作用, 必须在数据源头把关, 并正确选择模板。

4 结束语

该煤矿设备数据结构分层系统自动化制作软件已应用于多个大型企业的数据结构分层处理工作, 郊果显著。通过采用该系统, 大幅度提高数据分层工作的效率和准确率, 并用较少的人力物力为企业提供了及时、准确的数据, 为企业适应市场竞争奠定了良好的基础, 国内很多大型企业都引入了企业信息管理系统, 这为系统的推广带来广阔的前景。

参考文献

[1]黄梯云.管理信息系统UMU[M].北京:高等教育出版社, 2000:209-212.

[2]赵胜.基于delphi7.0的excel关联数据整合的设计与应用[J].计算机光盘软件及应用, 2011 (10) :182-183.

数据挖掘系统结构 篇5

方法1

int WINAPI WinMain(//主函数

HINSTANCE hInstance,// handle to current instance HINSTANCE hPrevInstance, // handle to previous instance

LPSTR lpCmdLine,// command line

int nCmdShow

// show state)

WNDCLASS wndcls;//创建一个窗口对象

wndcls.cbClsExtra=0;//窗口类附加字节,为该类窗口所共享。通常0。

wndcls.cbWndExtra=0;//窗口附加字节。通常设为0。

wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);//背景

wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);/光标

wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);//位图(图标)

wndcls.hInstance=hInstance;//当前应用程序事例句柄。

wndcls.lpfnWndProc=WinSunProc;// 窗口过程函数(回调函数)

wndcls.lpszClassName=“Weixin2003”;// 窗口名//类的名字

wndcls.lpszMenuName=NULL;//菜单名

wndcls.style=CS_HREDRAW | CS_VREDRAW;//窗口的类型

RegisterClass(&wndcls);//注册窗口

HWND hwnd;

hwnd=CreateWindow(“Weixin2003”,“

京”,WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);//定义窗口句柄并创建窗口

ShowWindow(hwnd,SW_SHOWNORMAL);//显示窗口

UpdateWindow(hwnd);//更新窗口

MSG msg;//定义消息对象

/*做消息循环*/while(GetMessage(&msg, //接收消息的窗口句柄。//从消息队列中取出一条消息 NULL, //消息标识。0,0))//做消息循环

{

TranslateMessage(&msg);//进行消息(如键盘消息)转换

DispatchMessage(&msg);/分派消息到窗口的回调函数处理,}

return 0;}

//回调函数原形为LRESULT CALLBACK WindowProc();

LRESULT CALLBACK WinSunProc(//对消息的响应函数(回调函数)

HWND hwnd,// handle to window

UINT uMsg,// message identifier

WPARAM wParam, // first message parameter LPARAM lParam

// second message parameter){

switch(uMsg){

case WM_CHAR:break;

case WM_LBUTTONDOWN:

MessageBox(hwnd,“mouse clicked”,“weixin”,0);

HDC hdc;

hdc=GetDC(hwnd);

TextOut(hdc,0,50,“计算机编程语言培训”,strlen(“计算机编程语言培训”));

ReleaseDC(hwnd,hdc);

break;

case WM_PAINT:

HDC hDC;

PAINTSTRUCT ps;

hDC=BeginPaint(hwnd,&ps);

TextOut(hDC,0,0,“维新培训”,strlen(“维新培训”));

EndPaint(hwnd,&ps);

break;

case WM_CLOSE:

if(IDYES==MessageBox(hwnd,“是否真的结束?”,“weixin”,MB_YESNO))

{DestroyWindow(hwnd);}

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd,uMsg,wParam,lParam);

}

总结:创建一个完整的窗口需要经过下面四个操作步骤: 一,设计一个窗口类;如:WNDCLASS wndcls;二,注册窗口类;

如:RegisterClass(&wndcls);

三,创建窗口;

如:CreateWindow(),CreateWindowEX();四,显示及更新窗口。如:ShowWindow(),UpdateWindow();二:VC++掌握的基础

①使用VC编程除了良好的C基础外还需要掌握两方面: ②消息本身。不同消息所代表的用户操作和应用程序的状态。

③对于某个特定的消息来说,要让OS执行某个特定的功能去响应消息。

二.1消息的分类:标准消息,命令消息,通告消息。

[标准消息]:除WM_COMMAND之外,所有以WM_开头的消息。

[命令消息]:来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。

通过标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。

[通告消息]:由控件产生的消息,如按钮的单击。

1)从CWnd派生的类,可以接收到[标准消息] [命令消息]和[通告消息]。2)从CCmdTarget派生的类,只能可以接收到[命令消息]和[通告消息]。

三:两种函数调用约定(__stdcall 和 __cdecl)

#define CALLBACK

__stdcall

//__stdcall 标准调用预定,是PASCAL 调用约定,象DELPHI使用的就是标准调用约定

#define WINAPIV

__cdecl // __cdecl 是C 语言形式的调用约定。

主要区别:函数参数传递顺序 和 对堆栈的清除上。

问题:除了那些可变参数的函数调用外,其余的一般都是__stdcall约定。但 C/C++编译默然的是__cdecl约定。所以如果在VC等环境中调用__stdcall约定的函数,必须要在函数声明的时加上__stdcall 修饰符,以便对这个函数的调用是使用__stdcall约定(如使用DELPHI编写的DLL时候)。(VC中可通过这途径修改:project|settings..|c/c++|...)

四:关于DC句柄获取(CpaintDC/CclientDC/CwindowDC在创建时默认)

(调用这些函数)a)使用BeginPaint(),EndPaint()对。注意只能在响应WM_PAINT消息时使用。

b)使用GetDc(),ReleaseDC()对。注意他们不能在响应WM_PAINT中使用。MFC中的运用为① HDC hdc=::GetDc(m_hWnd);::ReleaseDC(m_hWnd,hdc);获得全局DC。

② CDC *pDC=GetDC();ReleaseDC(pDC);

③ CClientDC dc(this);(自动调用GetDc(),ReleaseDC()); ④ CWindowDC dc(this);(自动调用GetDc(),ReleaseDC());

五:MFC程序框架的剖析

①寻找WinMain

人口:路径:visual c++安装目录下的:vc98|MFC|SRC|APPMODUL.CPP:

寻找CWinApp构造函数:MFC|SRC|APPCORE.CPP: ②MFC程序

线

CTEApp

theApp-> CWinApp::CWinApp()->_tWinMain(){//进入程->AfxEndDeferRegisterClass(LONG fToRegister)-> PreCreateWindow(创建、显示和更新窗口)pThread->Run(消息循环)-> PumpMessage(//取消息并处理)

类的运行顺序为:C*APP->CmainFram->C*View->C*Doc

六:消息映射的三步骤:

①在头文件中声明消息响应函数原型。如:afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

②在源文件中进行消息映射。如:ON_WM_LBUTTONDOWN()③源文件中进行消息响应函数的定义。如:void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){}

七:使用画笔、画刷、字体的步骤:(包括设计绘图模式SetROP2()

①CPen pen(PS_DOT,1,RGB(0,255,0));//构造画笔对象② CClientDC dc(this);③ CPen *pOldPen=dc.SelectObject(&pen);//将画笔选入DC后就可以作画了④dc.SelectObject(pOldPen);CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//构造透明画刷对象

FromHandle()将对象句柄转换为对象指针GetStockObject()取得一个以预定义的画笔、画刷、字体的句柄.类为Cpen Cbrush CFont

设计绘图模式: dc.SetROP2(R2_BLACK);(查MSDN).八:创建插入符:CDC类(文字等的输出类)

CClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);// 获取当前字体信息的度量

CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);ShowCaret();// void CreateCaret(CBitmap* pBitmap);//创建位图插入符

//static void PASCAL SetCaretPos(POINT point);//设计插入符号的位置

九:创建路径层:

BOOL BeginPath();//在这作图定义路径层剪切区域BOOL EndPath();

BOOL SelectClipPath(int nMode);//调用这个函数来使当前路径层剪切区域与新剪切区域进行互操作。

应用:当作图的时候,如果想要在整幅图形其中的某个部分和其它部分有所区别,我们可以把这部分图形放到路径层当中,然后指定调用指定互操作模式调用SelectClipPath(int nMode)函数来使路径层和覆盖在其上新绘图剪切区域进行互操作,达到特殊效果。

十:设置定时器

①SetTimer(1,100,NULL);//放置定时1器并发送WM_TIMER消息

②作WM_TIMER消息响应并对Void OnTimer(UINT nIDEvent)编写代码。

十一:CMenu类

CMenu 类重要函数:CMenu*GetMenu得到窗口菜单栏对象指针。

CMenu::GetSubMenu获得指向弹出菜单对象指针

// SetMenu(CMenu* pMenu)设置新菜单或移除菜单 DrawMenuBar()//重绘菜单

//其它菜单的功能设计用MSDN查函数

十二:创建自定义菜单

①CMenu menu;//

象②menu.LoadMenu(IDR_MAINFRAME);③SetMenu(&menu);

④menu.Detach();// 这里menu对象作为一个局部对象。使用Detach()从menu对象中分离窗口菜单句柄,从而当menu对象析构的时候窗口菜单资源不随之销毁。也可将menu;定义为全局对象。

十三:对弹出式菜单项的命令更新

①给菜单项添加UPDATE_COMMAND_UI消息响应②在响应函数中调用CcmdUI类的成员函数。十四:向系统添加(右键弹出式)菜单(上下文菜单)

1系统添加法:

① Project->Add to Project->Components and Controls->Visual C++ conpenets->pop-upMenue->Insert->选择类(不能选CmainFram)其中系统增加的内容:A一个菜单资源;B,在派生View类中增加了OnContextMenu()函数

2系统添加法:①用资源管理器添加一个菜单资源②在鼠标右键消息响应函数中,加载菜单资源,并获得要显示的子菜单指针,并用该指针调用TrackPopupMenu函数便完成任务 代码如下:CMenu menu;

menu.LoadMenu(IDR_MENU1);CMenu *pPopup=menu.GetSubMenu(0);

ClientToScreen(&point);//将一个坐标点或一个矩形区域坐标转换成屏幕坐标。

pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);//在指定位置以指定的方式显示弹出菜单。也可对菜单项做消息响应。

2动态添加菜单法:①在CmainFram类的OnCreate()中创建Cmenu对象调用其成员函数添加、插入、删除子菜单、菜单项②手动给动态菜单项添加响应函数一:在Resource.h中可以添加资源的ID二:在头文件中写消息函数原型三在代码文件中添加消息映射和添加消息响应函数(注意手动添加要放在ClassWizard的规定的外面)

十五:集合类:

COBArray,CStringArray,CDWordArray,CPtrArray,CStringArray,CUIntArray,CWordArray

十六:在CMainFrame中截获对菜单命令的处理

由于CWnd::OnCommand 是个虚函数,可以在框架类中重写OnCommand函数,从而可以截获菜单消息使它不再往下(VIEW类)路由。例:

BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam){ int MenuCmdId=LOWORD(wParam);//取命令ID CMenu2View *pView=(CMenu2View*)GetActiveView();//获取当前VIEW类指针

if(MenuCmdId>=IDM_PHONE1 && MenuCmdIdm_strArray.GetSize())//消息范围判断

{CClientDC dc(pView);

dc.TextOut(0,0,pView->m_strArray.GetAt(MenuCmdId-IDM_PHONE1));return TRUE;//函数返回,避免调用CFrameWnd::OnCommand函数,在CFrameWnd::OnCommand中截获的消息会交由VIEW类处理}

return CFrameWnd::OnCommand(wParam, lParam);

//调用基类OnCommand函数,在CFrameWnd::OnCommand中截获的消息会交由VIEW类处理}

十七:对话框类CDialog

1.重要函数与成员变量

一:每个窗口类创建的对象的同时都拥有一个窗口句柄m_hWnd的成员变量。二:GetDlgItem(IDC)== 关联一个变量; 通过控件ID 获得控件对象指针 三:GetWindowText(CString& rString)/ /获得窗口、安键文本(char类型)四:int atoi(const char *string);itoa()// 把一个字符串与INT 类型的数值转为 五

GetDlgItemText(IDC_EDIT1,ch1,10)==GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);在一个窗口控件中直接读取文本到字符数组中

六:INT GetDlgItemInt()//获得控件文本,并转换成数值类型 七:SetFocus()设计窗口、控件的焦点。GetFocus()

八;if(IDOK==dlg.DoModal())创建对话框后会等待用户作选择,就是DoModal、create的值。

九:对编辑框Edit控件写入内容后会发送EN_change消息,2.

问控件的六种方法:

一:GetDlgItem(IDC_EDIT2)->Get(Set)WindowText(ch2,10);二:Get(Set)DlgItemText(IDC_EDIT2,ch2)

三:Get(Set)DlgItemInt(IDC_EDIT2)

四:每个控件关联一个变量,直接对变量进行操作。调用UpdateData()对控件取设计值。

或:变量.GetWindowText(ch1,10);取得数据

五:通过SDK函数或变量的成员函数发送WM消息完成消息任务: ::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);六:直接给ID控件发送消息:

SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);

十八:创建扩展窗口(收缩、扩展窗口)

①创建一个图表框通过ID获得其矩形的位置,并通过CRect对象记录其矩形位置。

GetDlgItem(IDC_)->GetWindowRect(&rectSeparator);GetWindowRect(&rectLarge);

②创建两个CRect对象通过点的付值记录其矩形位置收缩、扩展时的矩形位置。③SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE 置窗口大小与位置

| SWP_NOZORDER);//设

//获得窗口大小十九:设计焦点事件(Tab Stop)

先对改变焦点事件做消息响应(如对回车ID_OK的响应)后

① GetFocus()->GetNextWindow()->SetFocus();//对最后一个不能判断。

②GetFocus()->GetWindow(GW_HWNDNEXT)->SetFocus();/对最后一个不能判断。

③GetNextDlgTabItem(GetFocus())->SetFocus();//最好

回车事件为窗口缺损消息由ONOK()响应,可通过对控件属性设计为缺损做消息响应以接收这个消息。廿:查看/改变对话框控件排列的秩序

在对话框资源界面中:Layout->Tab Order->改顺序。

廿一:逃跑按钮的巧妙实现

①创建多个Cbutton控件,并建立基于Cbutton类,类中包含一个本类的成员变量。

②将控件关联成这个类的一个变量,同时使自己的成员变量指向下个控件 ③ShowWindow(SW_HIDE);使自己隐藏,通过其成员变量m_pBtn->ShowWindow(SW_SHOW)使对方显示

廿二:如何制作属性页对话框和向导对话框CpropertySheet类CpropertyPage类

①创建属性页:insert->Resource->Dailog->选择后三个之一(如IDD_PROPPAGE_LARGE).②为各页添加控件并为各页创建以CpropertyPage(属性表单页类)为基类的属性表单页类.③以CPropertySheet为基类创建属性表单类,并在表单类中添加各表单页的对象。要加头文件。

④在表单类的构造函数中用AddPage(&m_prop1);添加各表页。

⑤在View中做消息响应做显示触发器。编代码:⑤.1构造表单对象(设计表单名)⑤.2调用propSheet.DoModal()或Create()显示页面。(注: 创建向导对话框在⑤.2前调用SetWizardMode()

⑥设计各页(上一步、下一步等)限制用户在不满足设定的条件时切换到其他属性页和向导页。:⑥.1 在各页中添加OnSetActive()虚函数⑥.2用表单指针调用SetWizardButtons()来设计。如:((CPropertySheet*)GetParent())->

SetWizardButtons(PSWIZB_NEXT);其响应函数为虚函数OnWizardNext/Back/Finish(查看MSDN)return –1不进入下一页。廿三:单选按钮操作方法:

①对所有单选按钮的第一个按钮属性设为Group,并为它们关联一个int类型的变量(使用时可按其编号访问)

②选择后(要按下一步或ok键)对按键作消息响应,用UpdateDate()对所选取值。

③对适当事件作消息响应通过一新的int类型的变量取这个关联的变量。

④使用选择值时作消息响应,通过变量作switch()case选择,通过str+=“程序员”等方式取值并将选择输出。

⑤使用完后在使用类的构造函数中对数组初始化

廿四:复选按钮操作方法:

①对所有复选按钮都关联一个Bool类型的变量(使用时可按其编号访问)

②选择后(要按下一步或ok键)对按键作消息响应,用UpdateDate()对所选取值。(就一个函数)

③对适当事件作消息响应通过Bool类型数组记录每个关联变量的值。

④使用选择值时作消息响应,通过Bool类型数组多次if(m_bLike[0])判断,通过str+=“程序员”等方式取值并将选择输出。

⑤使用完后在使用类的构造函数中用memset()对数组初始

廿五: 组合框操作方法:CcomboBox类

①做OnInitDialog()虚函数消息响应通过AddString()初始化选项值。

并通过((CComboBox*)GetDlgItem(IDC_COMBO2))->SetCurSel(0);负索引号值。

②对适当事件作消息响应通过引号。

int index=((CComboBox*)GetDlgItem(IDC_COMBO2))->GetCurSel();取得索

((CComboBox*)GetDlgItem(IDC_COMBO2))->GetLBText(index,m_strSalary);通过索引号将值存入字符串中。③对适当事件作消息响应通过新的CString类型变量记录这个字符串。

④使用选择值时作消息响应,通过CString类型变量以str+=“程序员”等方式直接使用。⑤使用完后在使用类的构造函数中对数组初始化

廿六:列表框操作方法:ClistBox类

①对所有复选按钮都关联一个CString类型的变量.并做OnInitDialog()虚函数消息响应通过AddString()初始化选项值。

((CListBox*)GetDlgItem(IDC_LIST1))->AddString(“北京”);

②对适当事件作消息响应通过新的CString类型变量记录关联变量的选择值。

③使用选择值时作消息响应,通过CString类型变量以str+=“程序员”等方式直接使用。④使用完后在使用类的构造函数中对数组初始化。

廿七:解决添加类成功后ClassWizard找不到其.h//.cpp文件

①在本工程目录下删除.CLW 文件;.CLW 为管理类信息的文件。②在工程中View->ClassWizard->是(输入这个文件名.CLW)

廿八:修改MFC AppWizard向导生成的框架程序窗口的大小和标题:在CMainFrame类中

在CMainFrame类中一法:在PreCreateWindow()中(窗口创建前)查MSDN的Frame-window styles

cs.cx=300;cs.lpszName=“http://”;

二法:在CMainFrame类的OnCreate()中:(窗口创建后)调用SetWindowLong()

SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW);

SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE)& ~WS_MAXIMIZEBOX);廿九:修改MFC AppWizard向导生成的框架程序窗口的图标:在CMainFrame类中

PreCreateWindow()一:中同窗口的创建相同:WNDCLASS wndcls;->设计->注册->修改

二cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW CS_VREDRAW,0,0,LoadIcon(NULL,IDI_WARNING));OnCreate()中三

OnCreate()中

加载系统图标:SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_ERROR));

四:加载自定义图标: m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));

SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[0]);

三十:修改MFC AppWizard向导生成的框架程序窗口的背景、光标:在CView类中

PreCreateWindow()中一法:cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL,IDC_CROSS),(HBRUSH)GetStockObject(BLACK_BRUSH),0);OnCreate()

:SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(BLACK_BRUSH));SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)LoadCursor(NULL,IDC_HELP));

背景

光标

卅一获得当前应用程序实例句柄的方法:

一:AfxGetInstanceHandle()二:theApp.m_hInstance三:AfxGetApp()->m_hInstance,卅一:.工具栏按钮编程和手动添加工具栏

CToolBar类 对菜单进行消息响应,对常用菜单在Resource的ToolBar中设计工具栏按钮,将其ID设计于菜单栏ID相同

手动添加工具栏查看MSDN的CToolBar类。也可查看CMainFrame::OnCreate()函数。

卅二:向应用程序导入图标资源:

将图标资源copy到本工程的.res目录下,insert->rousert->import导入图标资源

卅三:对菜单进行消息响应使自定义工具栏显示和隐藏:m_newToolBar为工具栏类对象。

1法:if(m_newToolBar.IsWindowVisible()){m_newToolBar.ShowWindow(SW_HIDE);} else{m_newToolBar.ShowWindow(SW_SHOW);}

RecalcLayout();

DockControlBar(&m_newToolBar);// 工具栏停靠函数 2法:ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);

卅四:对状态栏的状态指示器编程(编写时钟显示)CstatusBar类

①在String Table资源中加入ID资源并在CmainFrame的头文件中建立一个CstatusBar类对象。

②在CmainFrame类.cpp的static UINT indicators[]结构第一个ID后添加这个ID.就可显示这个String。

③在OnCreate()通过Cstring对象格式化记录要输出的内容。这里是时间.CTime t=CTime::GetCurrentTime();CString str=t.Format(“%H:%M:%S”);④ 通过

CSize sz=dc.GetTextExtent(str);取得屏幕输出要的宽度。

Int index=m_wndStatusBar.CommandToIndex(IDS_TIMER)//通过ID取得索引号并通过索引号设计窗格宽度 类对象.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);⑤类对象.SetPaneText(1,str);输出内容。

⑥在OnPaint()中重写代码,当窗口重绘时再只显示。

卅五:对状态栏的指示行的编程 ①在响应的类中作消息响应。并编代码。②通过Cstring对象格式化记录要输出的内容如

CString str;

str.Format(“x=%d,y=%d”,point.x,point.y);③显示(有四种方法)一:((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str);m_wndStatusBar为CstatusBar类对象

二:((CMainFrame*)GetParent())->SetMessageText(str);

三:((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str);四str);

AFX_IDW_STATUS_BAR为系统准备的状态栏ID号;

:GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(卅六:进度栏的编写:CprogressCtr类

①在头文件中建立一个CprogressCtrr类对象。并在OnCreate()中通过对象创建一个进度栏。②

卅七:发送自定义消息:

①在头文件中定义消息宏:#define UM_PROGRESS

WM_USER+1 ②作消息映射③在要响应消息处通过SendMessage(UM_PROGRESS)或PostMessage(UM_PROGRESS)发送消息调用函数做要做的任务。SendMessage(UM_PROGRESS)发送消息马上调用函数

ostMessage(UM_PROGRESS)发送消息到消息队列中,并继续运行进程。

卅八:为应用程序添加启动画面

①1系统添加法:① Project->Add to Project->Components and Controls->Visual C++ conpenets->Splash Screen->Insert->选择类(不能选CmainFram)

②在Ontimer()中对显示时间做设计。如果手动添加可参看这个方法。

卅九:使用标准颜色对话框,标准字体对话框(CcolorDialog类,CfontDialog类)

颜色对话框:①做消息响应并建立控件对象,CColorDialog dlg;②创建颜色对话框并通过对象的数据成员m_cc指向的结构取的选择的颜色dlg.m_cc.Flags|=CC_RGBINIT | CC_FULLOPEN;//设计标记if(IDOK==dlg.DoModal()){

COLORREF m_clr=dlg.m_cc.rgbResult;}通过rgbResult的记录输出客户的选择。就可以在画笔、画刷、字体设计颜色。

字体对话框(雷同):①做消息响应并建立控件对象,CFontDialog dlg;②创建字体对话框并通过对象的数据成员m_cf指向的结构变量lpLogFont的字体值初始化自定义字体CFont m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);就可为DC加载字体③为联系创建字体,要对m_font资源做判断,如果存在就释放资源在创建。

if(m_font.m_hObject)m_font.DeleteObject();查MSDN的类和它们的成员变量看事例。

四十:改变对话框的背景色,控件字体色、背景色(Cbutton除外)。

①做WM_CTLCOLOR消息响应,并创建一个CBRUSH对象,return这个对象来改变对话框的背景色 ②通过pWnd->GetDlgCtrlID()==ID—做判断,/用

pDC

调用SetTextColor(RGB(255,0,0));

SetBkMode(TRANSPARENT);SetBkColor(RGB(0,0,255));改变控件字体色、背景色,背景模式。

泗一:改变CButton控件字体色、背景色

①在工程中加入一个以CButton为基类的新类。并重载虚函数DrawItem();②在函数体中加入MSDN中CButton类的DrawItem()的示例代码。(改变背景色要自写代码)。

③在CButton控件中关联这个新类的变量,同时将控件属性Styles->Ower Draw选择上就可以改变字体色。改变背景色代码:有别人写的CSXBtn类和CButtonST类,以备:加载到工程中。

用CSXBtn类雷同上,CButtonST类如下:

①加载CButtonST到工程中,在CButton控件中关联这个新类的变量,重载:OnInitDialog()调用下面的函数

BOOL CSettingDlg::OnInitDialog()

{CDialog::OnInitDialog();m_btnST.SetActiveBgColor(RGB(0,0,255));m_btnST.SetActiveFgColor(RGB(255,0,0));}

泗二:在窗口中显示一幅位图。四步:

1、准备一副位图,响应WM_ERASEBKGND消息。

2、创建位图 bitmap.GetBitmap(&bmp);}

3、创建兼容DC CDC dcCompatible;dcCompatible.CreateCompatibleDC(pDC);

4、将位图选到兼容DC中

dcCompatible.SelectObject(&bitmap);在GetClientRect(&rect)取的客户矩形。

5、将兼容DC中的位图贴到当前DC中。pDC->BitBlt(rect.left,rect.top,rect.Width(), {或pDC->StretchBlt();} rect.Height(),&dcCompatible,0,0,SRCCOPY);

6、return TRUE;后也可在OnDraw()中又重绘。CBitmap

bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

{BITMAP

bmp;泗三:图形的保存和重绘

一法::

①在工程中添加一普通类,添加多个成员变量以保存图形的各要素,并添加带这几个参数的构造函数来初始化对象

②在绘图的View中建立CptrArray(或别的集合类)对象,在绘图函数中建立这个普通类的对象,没次绘图都记录这些数据并用

Add()添加到集合类对象中以保存图形。③在OnDraw()中用GetSize()取数组个数做循环,嵌套switch用GetAt(i)取图形类型重绘图形。for(int i=0;im_nDrawType)case X:}

二法:利用兼容DC实现图形的保存和重绘

①在View类中建一个CDC m_dc对象,在绘图响应函数中通过它建立一个兼容DC对象,并建一个兼容位图对象记录要保存的图片,将兼容位图选入兼容DC中,if(!CDC m_dcCompatible.m_hDC){ m_dcCompatible.CreateCompatibleDC(&dc);CRect rect;GetClientRect(&rect);CBitmap bitmap;

bitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());m_dcCompatible.SelectObject(&bitmap);

m_dcCompatible.BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);/*将原始设备颜色和象素拷贝到兼容DC中*/m_dcCompatible.SelectObject(pBrush);} ②可以用兼容DC在绘图函数中作图。③在重绘函数

OnDraw()中通过兼容DC将记录的兼容位图拷贝到矩形空间。CRect rect;GetClientRect(&rect);

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_dcCompatible,0,0,SRCCOPY);三法:CmetaFileDC 类: 查MSDN的介绍有步骤。

泗四:文件的操作,增加“打开、保存”文件对话框,注册表的读写

文件的操作:Cfile类 “打开、保存”文件对话框:CfileDialog类和m_ofn成员函数OPENFILENAME结构。

注册表的读写:查MSDN的Registry Functions

泗五:使用CArchive类对文件串行化(查MSDNCArchive类)①创建一个文件对象用于保存数据,同时创建一个CArchive ar 对象。

②通过ar>>将要输入的数据保存到文件中。同样也可通过ar<<将文件中的数据输出。

泗六:修改文挡标题的方法:

①法:在C*Doc类的OnNewDocument()中调用SetTitle()。注:在文挡、视图、框架创建是调用OnNewDocument(),所以可以添加代码设计它们。

②法:在资源String Table的IDR_MAINFRAME的第一二个n间修改字符。注:IDR_MAINFRAME包含的内容:主窗口名、文挡名、文挡类等。(查MSDN的CDOCTemplate::GetDOCString())

泗七:新类的串行化和文挡对图形的串行化处理过程:永久保存图形绘制图形:

第一步:实现新类对串行化的支持:(查MSDNCArchive类对CObject的串行化)①建立一个记录图形各要素的新类,并以CObject为基类。

②在新类中覆盖void Serialize(CArchive& ar)虚函数,并通过CArchive& ar对象实现存取。

③在新类头文件中加

DECLARE_SERIAL(新类名)的宏。

④在新类实现文件中加IMPLEMENT_SERIAL(新类名, CObject, 1)的宏。⑤在新类中重载一个不带参数的构造函数。(有初始化要素的构造函数)后这个类就支持串行化了。串行化完成。

《数据结构实验》教学探析 篇6

关键词:数据结构;实验;编程;教学

中图分类号:TP3-4 文献标识码:A文章编号:1007-9599 (2011) 06-0000-01

Teaching Research on Data Structure Experiment

Zhang Xiujian

(Guangzhou University Sontan Collehe,Guangzhou 511370,China)

Abstract:Data structure is a course that emphasizes that exercise of logical thinking and programming ideas.In this paper,we argue that the appropriate experimental program and integration of software engineering can improve student’s innovative ability.

Keyword:Data Structure;Experiment;Programming;Teaching

《数据结构》,是一门重要的理论学科。通过调研看出,该科目在各个院校的实验教学情况存在较大差异。学生学习理解过程缓慢,教师教学也不能得心应手,尤其是实验课,由于部分学生对编程语言掌握不熟练,实验内容抽象,而有较大畏难情绪,甚至不参加实验课。虽然曾经有些教师参考了任务驱动、实例教学等方法,但过于强调某种教法,也会影响教学效果。所以,该课程宜结合课程特点设计教学,切实通过贴近于实际的方法传道授业,结合实验落实教学效果是非常重要的。

一、数据结构课程实验教学中问题所在

(一)实验课时欠缺。有的学校压缩实验时间,让位于理论教学,这对学习效果的落实来说是本末倒置。没有足够的实验课时,学生就无法把理论知识加以系统地整理,进而在实验中消化吸收。

(二)综合性、创新性实验科目欠缺,系统性不强。开设的数据结构的实验课程中,虽然安排了相关知识点的实例,但是对设计的创新性和综合性上有待提高,要加强知识点的综合运作。

(三)没有很好地结合课堂教学和实验教学。作为一门比较抽象的理论教学课,尤其要重视课堂和实验教学相结合。实验中要突出该课程的实践性,教学中要注重理论和实践的结合。现在,不少教师只重视知识的灌输,在实验中任务不明确,要求不明晰,让学生在实验中迷失了对理论的进一步实践的方向。

二、实验教学的改革探索

(一)教学模式的改变。基于数据结构课程理论难于理解的特点,要突出实验课的效果,要注重“课堂.一章的基础性实验.综合实验”相结合的框架。注意从逻辑机构到存储结构,再到实现基本算法,继而具体应用的方法,一以贯之地落实到数据结构教学中去。算法的讲授要先分析算法,再运用编程语言演练算法,最后进一步分析算法。如能采用多媒体演示算法的步骤,会使学生更加清晰地理解。课堂教学始终要把应用的要求作为做种目标,辅以实验训练,加强学生动手编程和自我创新的能力。

(二)基础实验环节要重视。实验环节要让学生进一步理解数据结构的特点,明确相关概念,熟练各种基本算法的实现。枯燥的理论讲述的再多,也不如配合实验让学生一练,所以教学要重视基础实验环节。要想获得扎实的教学效果,教师要提供实验编程语言,Turbo C、Visual C++、Delphi等都可以。根据教材确定实验方案,明确实验目的、内容、要点和必备注意事项,最后安排几个演练题目,比如矩阵的遍历、数据的折半查找等。实验课程要贴近学生的编程水平,不可偏离太过。实验中,学生有章可循,对要点有较强的针对性,实验效率就会大大提高,使学生真正能举一反三。

(三)课程实验要理论应用相结合。实验要注意结合原理和应用,让学生在解决实际问题时学会调用学过的知识点,养成动手练习语言编程的习惯,所以,这个层面的综合实验要求要高于普通的课下练习和基础实验,更贴近于应用。平时虽然侧重练习简单的算法程序,但综合实验课是软件设计的高级训练阶段,融合了问题的分析,系统结构设计、操作界面设计、编程技能技巧,是软件设计的系统工程。教师分阶段拟定数据机构在实践中的各种应用,比如:汉诺塔问题、约涩夫环问题、Huffman Coding方式、班级信息管理系统等,把任务分配给学生,让学生组织课题公关。课题的结题要提供课题表述、基本要求、实验数据、实现结果和关键实现步骤等内容,这能协助学生破题解题,以免形成错误的认识,同时也讲解了程序设计的基本路线,确保实验目标的实现。最后每个课题组都集中展示实验过程接结果。试试证明,这样的实验环节,综合了数据结构知识、编程语言技能和软件工程思想,让学生系统地理解各门课程的联系,融合相关专业课的精髓,锻炼了学生的团队合作互助精神,提高了组织能力和管理水平

三、重点组织好教学实验的各个环节

(一)实验题目的设计。鉴于实验环节教学时间的限制,学生的编程基础和技能较为薄弱,所以,设计和拟定合适的实验题目尤为重要。实践题目应该由易到难循序渐进:

1.常用算法练习。主要讲解各章节知识点,深入贯彻算法理论的理解;2.基础性应用练习。主要让学生针对单一的数据结构解决应用难题,其难度中等;3.综合应用题目练习。要涵盖多个章节的内容,系统性强,难度较高,可以组织学生成立课题组,在课外实验环节共同研讨解决,再集中展示。课题的设计要注意:(1)常用算法的练习要有一定代表性,重点练习各个章节的知识点,难度较小,目的在于理论知识的掌握。课堂教学要和实验环节对应,学生在试验中重点演练课上讲授的内容。(2)基础性应用练习难度要适中,既要带动基础薄弱的学生,又要注意发挥基础好的学生的能动性,可以加以延伸,或是鼓励提供多种解决方法,进行不同思路的性能的比较,让各个层面的学生都能参与实验。(3)综合应用练习题不宜太难,但要引起学生的兴趣,宜于结合实际中的事物或应用系统,让学生宜于接受和理解,这样才能促进学生的积极性。

(二)实验环境的搭建。现在很多学校选取谭浩强教授出版的《数据结构(c语言版)》作为教材,应用C语言进行数据结构的设计语言,用TC搭建实验环境。而在实际教学中,应用C语言讲解数据结构常常对算法设计和实现上较为突出,对数据结构的系统性容易忽视。如果用C++进行数据结构的实验练习,可以注重其整体性和系统性,先定义数据结构的类,再分析其逻辑特性,然后把存储结构延伸到算法的实现中去,能帮助学生构建数据机构的概念。

(三)实验过程的组织与实施。实验中可以采取学生分组、一人负责的机制进行实验。提倡互动探讨和交流,既能让学生接触更多的实验题目,也能提高学生的团队合作精神。

(四)实验结果的检验和考核。对实验结果,教师要辅以必备的检查来进行督导。对于实验报告的书面汇报,要设计题目、要求、步骤、结构、程序代码和改进方法,以及最后的体会等。教师通过实验报告书可以详细了解学生的实验情况,进而发现共性的问题集中解决。

(五)实验问题的总结与弥补。通过实验,教师对于学生学习中存在的问题要进行系统总结和分析加以更正,有些不良的编程习惯,教师要着重强调。

四、结束语

《数据结构》的实验课注重学生动手能力的培养,强调创新思维的养成,通过实验,结合应用案例,能够进一步提高该课程的教学质量,加深学生对知识点的理解,具有积极的现实意义。

参考文献:

[1]程满玲.数据结构课程教学模式改革的探索与研究[J].武汉商业服务学院学报,2007,3

数据挖掘系统结构 篇7

当今社会的教育已经有了非常大的变革, 计算机的出现给我们的生活和学习带来了很大的方便, 随着计算机领域中技术水平的快速发展以及计算机在现代社会的逐渐普及, 现在国内的高校甚至是一些中学教育阶段就已经将计算机这个工具应用到了课堂教学、在线考试以及远程教育等。通过计算机的网络连接人们可以进行异地教育教学和培训, 给教育教学带来了很大的方便。这些应用背景为在线考试系统的发展产生提供了一定的基础[1]。如今, 计算机的硬件技术发展已经到了较难突破的阶段, 很难继续有新的大的突破, 结合我国现阶段计算机教育还处于不成熟的阶段, 但是随着软件的开发技术不断发展逐步走向成熟, 这就为计算机考试系统应用到学校的教学考试中去提供了先决条件, 当然随着需求变化, 也给软件设计人员提出了更高的设计要求[2]。

在科技飞速发展的社会, 计算机的逐步普及以及这个领域技术的不断发展逐步趋向成熟, 使得在线考试系统代替纸质考试成为了可能。在线考试系统为学校的教务工作减轻了负担, 节省了人力和物力, 大大提高了教学的效率[3]。

在以往的各种类型的考试中, 我们一直沿用着传统的模式, 这种模式经过我们长时间的实践被认为是最有效的考试模式。这种考试模式由五个基本的步骤组成:第一步是由老师出卷, 第二步是进行考试, 第三步是由老师进行阅卷, 第四步是对成绩进行统计, 第五步是对考试的结果进行分析。在信息技术快速发展的当今社会, 这种考试过程显得烦琐而且低效, 并且安全性不高, 成本相对较高, 这些缺陷使得人们越来越需要一种新的考试方式。网络考试的出现极大的改变了这种现状, 它可以说是对传统考试的一种延伸与变革, 我们利用网络考试, 可以不受时间和空间的限制, 考生可以在网络覆盖的任何地方任何时间进行考试, 这样就大大提高了考试的效率, 简化了考试的流程, 还能提高考试工作的安全性, 更好的排除考试中的人为因素, 全面的提高考试的管理水平。与传统的考试过程相比, 在网络上进行考试存在着极大的优越性, 主要包括:保密性好、客观公正、更加准确、更加快捷、组织成本低、考务效率高。

基于以上分析, 采用在线考试模式, 通过网络实现无纸化考试将成为未来的主流考试方式。通过在线考试, 可由系统自动完成从试题管理, 到出卷、评卷、成绩分析, 到学生查询考试成绩等基本功能。

从系统的安全性和易维护性考虑, 本系统选择Web实现技术, 即将系统做成一种B/S模式[4], 可以让用户通过浏览器直接访问位于服务器上的试题以及对系统进行远程维护和功能扩展。当前, 存在很多种实现服务器程序的技术, 本系统选用当前比较流行的网络编程技术JSP作为主要实现手段, 配合struts、hibernate、spring等技术, JSP作为一种Web实现技术[5], 它具有高效率和高安全性的优点, 再加上实现模式的特点, 正符合了考试系统所要求的实时性和保密性, 保证了考试的公平性。另外, JSP拥有Java语言的"一次写成, 处处可用"的特点, 可以将系统轻松地移植到其它平台运行, 所以将JSP作为本系统的实现技术是完全可行的[6]。

该文主要介绍了在线考试系统的核心功能及实现方法, 研究了在线考试系统中题库管理及组卷等。主要功能包括:题库管理、试卷管理、考试管理、学生考试, 试卷评阅、成绩管理、用户管理等模块。

2 需求分析

2.1 功能需求

首先, 因为考试对象是特定的对象, 所以考生进入系统应该进行身份验证。考生进入考试系统后, 可以查询到需要参加的考试项目。在线考试是基于网络环境的, 考生所要完成的试卷应该是从服务器的数据库随机抽取试题后动态生成的, 不过也可以人工生成试卷。另外, 系统还应该自动控制考试时间, 时间到了会停止考生答卷, 并要求考生交卷。考生提交试卷后, 客观题由计算机自动判分, 主观题由老师手工评分, 得到成绩后显示出来。考试完毕后, 可以返回登录界面或继续考试。此外, 应该能够方便、快捷的对在线考试系统进行管理, 用户只有在试卷结束后才能查询到自己的成绩。因此, 在线考试系统需要有如下的综合需求[7]:

1) 适当的用户权限

综合考虑各种因素后, 在考试系统中的用户有三种:系统管理员、学生和教师, 合法用户在登录时, 首先要进行身份验证。用户在经过合法的授权后, 可以使用考试系统。根据用户的身份不同, 系统可以自动的分配给各种用户不同的资源。系统管理员主要负责系统后台的管理, 包括题库管理、试卷管理、科目管理、学生信息管理、老师信息管理等。学生可以进行登录、参加考试。老师登录系统后, 可以在线阅卷的操作。

2) 适当的网络环境

本系统必须在网络环境下运行, 这样学生就可以随时随地通过网络访问本系统进行考试和查询成绩, 教师可以随时登录网络来进行阅券操作, 系统管理员可以通过网络来进行各项管理工作, 包括安排考试、管理题库、管理用户、进行试卷分析等。

3) 完善的考试功能

作为在线考试系统, 首先应该具备的, 就是与考试相关的基本功能, 让考生能够在线完成考试的所有操作。

参加考试:包括登录系统、查询考试项目、进入考试等功能。在考试时, 清晰地列出题目, 并对考试的结束时间进行提示, 在考试结束时, 具备交卷功能。

学生管理:在登录系统后, 我们需要对学生的信息进行维护和管理。

科目管理:管理科目的一些信息, 包括科目录入、删除等操作。

题库管理:管理员登录后对题库进行维护, 可以进行题目的添加, 修改和删除操作。

试卷管理:从服务器题库中自动抽取题目, 形成试卷。

考卷评分:除了客观题由系统自动进行评分以外, 对于主观题由老师登录系统, 对题目进行评分操作。

2.2 性能需求

1) 实用性

对于在线考试系统的开发, 首先应该考虑其实用价值。必须满足学校师生的需求, 在考试时方便快捷, 后期维护和管理简单易行。在系统的完善上, 我们要首先新建一个版本, 然后在实践运用中, 发现更多的需求, 然后对原始版本进行不断的升级和完善, 直到完全达到用户的需要求目标。

2) 可靠性

服务质量的高低, 很大程度上取决于, 用户是否能够在最快的时间内得到访问信息的回应, 当用户访问Internet上的程度或信息时, 是否能够在最短的时间内将用户需要的信息提供给用户。对于考试系统来说, 经常会出现同时有上百上千人访问的情况, 如果可靠性不高, 发生系统崩溃, 将会带来巨大的人力和物力的损失, 同时在考试过程中, 如果系统出现延迟, 也会给考试带来影响[8]。

3) 可扩展性

当用户需求不断增长, 考试系统必须具有可扩展性才能满足业务复杂性的要求。Web系统一般都是动态变化的, 随着用户需求的增加, 业务增长的需要, 系统的规模不断扩大, 并呈现指数级的增长趋势。这种快速增长将会表现为支持的用户的数量不断增加, 同时提供的用户服务的复杂性和集成性也在增加。考试系统也是一种Web系统, 它的扩展性更为重要, 因为考试系统的功能是需要不断完善的, 必须能够随着考生的要求和技术的发展而不断改进。

4) 安全性

所谓安全性, 和所有的系统一样, 我们必须保护系统中的数据不被窃取, 系统的基础结构不会被人恶意的攻击和破坏。保证系统的安全性, 就是保证信息的机密性, 完整性和可靠性, 采取充分的保护措施, 保障系统安全, 预防安全风险, 这是任何系统都必须做到的基本要素。

5) 可管理性

可管理性是指对系统的管理是方便可靠的。为了保证系统的正常运行和管理, 我们要保证以下几点:首先, 要保证系统的基础结构完整, 从而系统的服务能够正常工作;其次要有适当的工具和管理人员。因为通过考试系统的主机是放在学院机房中, 但是对考试教务的管理员也许并不在远程教育学院中, 因此, 必须做到系统的管理和监控能够远程完成。

3 总体设计

在系统的总体设计中, 首先要将系统进行模块化。所谓模块化, 就是指用不同的模块来实现系统所要实现的不同的功能, 然后将这些模块组织和连接起来, 成为一个整体, 从而实现整个系统所要求的功能。

将系统模块化可以提高系统的可读性、可维护性, 降低系统的复杂性, 但是每个模块在设计时要注意保持其相对独立性, 每个模块之间的接口应尽量简单, 并且联系尽量要少, 这样才是高质量的系统结构。

由上章得需求分析, 可以设计出本系统的总体结构包括三个子系统:管理员模块、学生模块、老师模块。系统结构如图1所示。

4 数据库结构设计

根据在线考试系统的需求, 设计对应的数据表及功能如下:

根据以上的需求分析, 在确定了各个表字段及主键的基础上, 建立表与表之间的联系, 对应的关系图如下:

5 总结

本系统按照软件工程的思想, 采用了B/S模式, 通过问题定义、可行性研究、需求分析、总体设计、详细设计、测试的过程, 对在线考试系统的整个开发过程做了详细的阐述, 同时, 遵循结构化程序设计, 对软件开发步骤做了详细的规划。

这里, 阐述了学生用户的需求和应用B/S设计模式的软件体系结构, 进一步熟悉了JSP及相关相关技术, 了解了开发平台的应用工具相关技术如SQL Server 2000、css等实现技术。该在线考试系统能够追踪到数据的始终。完成了考试系统从需求到实现的开发过程, 达到预期目的要求。

将来所要做的工作主要有以下几个方面:

1) 系统采用B/S模式, 其应用范围较C/S模式较广, 将来考虑采用B/S与C/S混和模式进行改进升级。

2) 进一步优化数据库设计、完善编码方案, 提高编码质量, 提高系统性能和技术指标。

3) 根据学校师生的实际需求, 不断完善和升级系统, 实现更多的功能, 更好的适应考试发展的需要。

参考文献

[1]郝玉龙.J2EE编程技术[M].北京:清华大学出版社, 2008:20-30.

[2]汪永明.基于B/S模式的在线考试系统[J].微机发展, 2004, 14 (1) .

[3]冯长江.在线考试系统[M].北京:机械工业出版社, 2008:1-30.

[4]李冬芬, 黄金波, 赵景文.基于JSP的在线考试系统设计[J].宁波职业技术学院学报, 2010 (5) .

[5]王浩亮.基于J2EE轻量级框架的通用在线考试系统研究与实现[J].电脑编程技巧与维护, 2011 (3) :1-24.

[6]陈琦, 刘儒德.信息技术教育应用[M].北京:人民邮电出版社, 1997:28-23.

[7]向学哲.JSP程序设计教程[M].北京:人民邮电出版社, 2007:29-45.

数据挖掘系统结构 篇8

随着我国城市经济发展水平的提高、城市规模的扩大以及城市现代化建设的高速发展,城市地下管网变得越来越复杂,越来越庞大,种类也越来越多。但由于历史的原因,多数城市存在着地下管网资料不全、埋深程度复杂等情况,再加之管网埋于地下,存在一定的隐蔽性,给管网设计、施工和维护造成了很多困难。城市建设与旧城改造施工过程中破坏地下的管网设施的现象时有发生,给城市工业生产、居民生活都带来了严重的影响。新区发展也急需合理的利用城市地下空间。因此迫切要求加强对地下管网的规划管理工作。由于目前地下管网系统的复杂性和多变性,利用传统手工收集管网资料、绘制管网图的方法很难满足规划和管理的实时要求,经常是资料刚刚收集完,图纸刚刚绘好,实际情况就已经发生变化了,因此必须在一次性探明城市地下管线赋存状态的情况下,借助计算机信息技术、网络技术、大型数据库技术、GIS技术,建立综合地下管网信息系统,实现从管网数据采集、建立数据库到完成系统功能、辅助地下管网规划管理全过程的操作,对地下管网的空间信息和属性实行科学的管理并反过来为城市的发展服务。

一个GIS应用系统能否成功,系统平台的选取及空间数据结构的规划设计是两大关键因素。在此我们主要探讨城市地下管网地理信息系统空间数据库的结构,因为一切算法的实现都是基于一定的数据结构,一切系统功能的建立也依赖于数据库的结构,除此之外,数据库的结构还直接关系到数据的查询与更新的效率。

1数据库结构的需求分析

地下管网空间数据库作为地理信息系统的应用,其功能也可以按照通用GIS平台的划分方法分成四类:录入编辑功能,查询统计功能、制图功能和分析功能如图1所示。

地下管网赋存于地下,尽管是杂乱无序的,但其仍有如下特点:

① 不同管线的互不交叉性,这样,我们就可以按照专业管线的分类分层去管理这些数据。

② 管线仅仅存在管段和结点,即同类管线之间只存在结点与管段的拓扑关系。

③ 管线在地下呈三维空间分布,而地理信息系统多是以二维空间来表示地理位置,尽管可以有其高程属性,但大部分的GIS难以以三维方式表示空间数据。这也是地下管网系统有别于其它系统的特点。

了解了以上数据结构的特点后,我们就可以根据结构简单、低冗余度和易于管理等原则设计地下管线空间数据库结构。

2GIS平台的选取

目前,应用最多的GIS平台,在软件的设计上差异比较大。有一类平台,其线状对象自带结点层,往往都能自动建立地理对象间的拓扑关系,这类平台最适合建立地下管网信息系统,Arcinfo、Maptitude等就属于这类平台。另一类平台是,其线状对象没有自己的结点层,结点需另建点层作为线层的结点,结点和管段之间没有有机的联系,其关系依靠关键的属性字段去关联,这类平台需手工建立线对象之间的拓扑关系,MapInfo、MapGIS等就属于这类平台。

由美国麻省理工大学开发的Maptitude GIS平台,其特点是线对象自带结点数据,对象(点对象除外)之间的数据拓扑直接存储于数据结构中,最适合作为地下管网空间数据的运行平台。

3数据库结构设计

3.1数据库图层设计

根据城市现有的地下管线类型可以划分为以下不同的图层:给水、排水、电力、通信、热力、燃气、广播电视及其工业管体八类专业管线及其必要的参照图层:道路、居民地、独立地物、注记等如图2所示。

3.2层内拓扑及三维数据结构设计

地下管网在层内的数据有两种:结点和管段。任意一管段都有两个结点和其它管段相关联。因此可以抽象为:某类型的管网为点和线两要素构成。其结点按其性质可以划分为:

① 变径点:管线直径发生变化的结点如图3-a所示;

② 变深点:管线在该点存在两个赋存深度如图3-b所示;

③ 交叉点:平面位置上的管线网络结点如图3-c所示;

④ 由上述三角结点任意组合而成的综合结点如图3-d所示;

⑤ 管网附属设施点,如入孔、检查井等如图3-e所示。

从上面列举的五种类型的结点可以看出,地理信息系统对于解决变深的结点上存在着GIS系统本身不能解决的问题。因为实际上变深处存在着两个结点,但在GIS系统中由于其平面坐标相同,在垂直方向上的管段是无法用GIS等表示的。但在管线统计、分析中又不能忽略该段管线,故对变深点增加变深字段,并规定向下为正,向上为负。

4管段任意点高程的获取方法

从数据结构可以看出,线段对象的数据结构仅有线长及其属性信息而无起始点的三维空间位置。在纵横断面等需要获取管线任意点高程时,可以通过线与结点之间的拓扑关系取得结点的三维空间信息,然后利用线性关系计算任意点的三维空间坐标。

假设线段起始结点的空间坐标分别为(X1,Y1,Z1)、(X2,Y2,Z2),线段上一点距起点的空间距离为L,则该点空间坐标为:

X=K*(X2-X1)+X1

Y=K*(Y2-Y1)+Y1

Z=K*(Z2-Z1)+Z1

其中K=L/SQR((X2-X1)^2+(Y2-Y1)^2+(Z2-Z1)^2)

5结束语

数据库结构的规划设计直接关系到整个系统的成败。城市地下管网地理信息系统的成功开发,充分体现了本文所设计的数据简洁、冗余度低和易于管理的特性。这种数据结构虽然是针对城市具体的实际情况而设计的,但对所有的管网空间数据建库都具有普遍的意义。城市地下管网类型十分复杂,有些特殊部门还需要特殊的结构,但这些都应属于局部细节上的变化,整体数据结构的框架应该是不变的。

摘要:基于G IS的城市地下管网系统是一种三维空间信息系统,必须选用三维G IS平台。由于不同的管线互不交叉,因此可以对其进行分层分类管理。地下管网的数据分为结点和管段两种类型。对于变深结点的表示可以通过增加变深字段来实现。管线上任意点的高程数据可以通过线与结点之间的拓扑关系取得该结点的三维空间信息后利用线性关系计算的办法获得。

关键词:地下管网,GIS,数据结构

参考文献

[1]周凤林,等.城市地下管线探测技术手册.中国建筑工业出版社,1998.

数据挖掘系统结构 篇9

作业场所职业危害监管是政府实施职业卫生管理, 保障广大劳动者职业健康权益的重要手段[1]。作业场所职业危害监管信息系统是一个面向用人单位和各级职业危害监管部门, 以用人单位的职业危害相关信息为基础的软硬件一体化的网络管理信息系统[2,3]。作业场所职业危害监管信息系统主要是通过大量的数据来获得作业场所职业危害监管信息, 为政府监管决策提供依据[4,5]。职业危害监管信息系统可分为数据层面、业务处理逻辑层面和表示层面三个层面。数据层面可用相对独立的数据库管理系统管理;表示层面是系统对最终用户的表示, 它可采用人机界面管理系统管理;业务逻辑层面是中间层, 管理系统的处理逻辑。其中:数据层面是基础, 也是信息系统的核心[6]。此外, 供企业使用的职业危害监管信息系统部分是整个信息系统的基础, 是职业危害基础数据信息获得的重要渠道[2]。作业场所职业危害监管信息系统企业级数据库是作业场所职业危害信息基础数据的载体。企业职业危害监管信息的统计、分析和汇总, 以及政府作业场所职业危害监管基础信息的来源均由职业危害监管信息系统企业级数据库中的数据得到。作业场所职业危害监管信息系统企业级数据库的设计直接关系到企业和政府职业危害基础数据统计、汇总和分析的完整性、准确性和有效性, 以及基础数据共享性。因此, 设计职业危害监管信息系统企业级数据库合理的数据结构为建立及时有效、高度共享、全国统一的职业危害监管信息系统奠定基础[7]。

2 数据库数据结构设计

2.1 数据库数据结构设计方法

数据元是数据层面最基本的数据, 由这些数据元按照一定的次序和个数构成的整体结构, 即数据结构。数据结构是刻画数据库数据模型最重要的方面。数据结构规范化理论 (Normalization Theory) 是数据库数据结构设计的理论基础。从实用角度看, 符合第三数据结构规范化形式的数据结构就是合理的数据结构[8]。新奥尔良方法是规范化设计方法中比较著名的设计方法, 而且设计过程中采用基于E-R模型的数据库设计方法和基于3NF (第三范式) 的设计方法等设计方法。因此, 本文采用基于3NF的新奥尔良方法对职业危害监管信息系统企业级数据库数据结构进行设计。

2.2 数据结构规范化理论

第一数据结构规范化形式, 是指满足关系的最基本要求, 每个分量必须是不可分的数据项, 即一个数据结构中没有重复出现的数据项或数据项组, 这样的数据结构就是一个符合第一数据结构规范化形式的数据结构。

第二数据结构规范化形式, 是指一个符合第一数据结构规范化形式的数据结构中的非关键字数据项都完全函数依赖于整个关键字。即一个数据结构中没有重复出现的数据项或数据项组, 且非关键字数据项的取值都与整个关键字有联系, 它就是一个符合第二数据结构规范化形式的数据结构。因此, 对于只有一个关键字数据项的数据结构, 如果它满足第一数据结构规范化形式的要求, 那么也一定满足第二数据结构规范化形式的要求。

第三数据结构规范化形式, 是指一个符合第二数据结构规范化形式的数据结构中的非关键字数据项间既不部分依赖于关键字, 也不传递依赖于关键字, 彼此独立, 即非关键字数据项的取值不存在函数依赖关系。它是一个符合第三数据结构规范化形式的数据结构。

2.3 数据结构合理设计步骤

采用新奥尔良方法设计数据库数据结构, 根据数据结构规范化理论, 数据结构合理化的步骤可以分为以下几个步骤:

第一, 了解事务的逻辑关系, 确定对象实体及描述实体的数据, 把含有重复数据项的数据结构, 通过在重复数据项中指定新的关键字方法, 转化为符合第一数据结构规范化形式的数据结构。

第二, 只有一个关键字的符合第一数据结构规范形式的数据结构满足第二数据结构形式。如果数据结构中包含两个或两个以上的关键字通过分解数据结构的方法, 将包含两个或两个以上的关键字数据结构分解成几个数据结构中非关键字数据项都完全函数依赖于整个关键字的数据结构。使其成为一个符合第二数据结构规范化形式的数据结构。

第三, 如果符合第二数据结构规范化形式的数据结构中非关键字数据项彼此独立, 没有函数依赖关系, 则该数据结构符合第三数据结构规范化形式。如果数据结构中非关键字数据项间存在函数依赖关系, 则通过消除存在函数依赖关系数据项的方法, 使非关键字数据项间不存在函数依赖关系, 将其转换成一个符合第三数据结构规范化形式的数据结构。

2.4 职业危害监管信息系统企业级数据库数据结构合理设计

作业场所职业危害监管信息系统企业级数据库设计实体数据较多, 包括接害人员、作业场所、防护措施、职业危害因素检测、职业危害管理措施、职业卫生培训、职业健康监护档案等。其中一名作业人员可能在多个作业场所作业, 一个作业场所可能存在多种职业危害因素, 一种职业危害因素又可能配备多种个人防护用品, 而一种个体防护用品又多次发放, 关系复杂, 是数据库数据结构设计的重点和难点, 同时也是职业危害监管信息系统企业级数据库的突出特点。因此, 本文以接害人员、作业场所、接触的职业危害因素、作业场所工程防护和警示标识、个人防护用品以及个人防护用品的防护记录为例来阐述作业场所职业危害监管信息系统企业级数据库数据结构合理设计的过程和方法。

为了有效的实施管理, 首先结合作业场所职业危害的具体情况选择一组描述作业场所接触职业危害监管实体的数据, 如接触职业危害人员姓名、性别、作业场所、接触的职业危害因素、作业场所的工程防护和警示标识、配备的个体防护用品以及个人防护用品的发放记录等, 来管理监管对象。为了能够唯一标识接触职业危害人员, 避免重名, 还要增加人员的身份证号。

考虑到一名作业人员可能在多个作业场所工作, 即身份证号相同, 但作业场所可能会不同, 要设立作业场所信息, 如作业场所代码、上岗时间、离岗时间、接触的职业危害因素、工程防护等。得到数据结构A。

A接害人员―作业场所-接触职业危害因素―配备个体防护用品

*身份证号

姓名 性别

作业场所

作业场所代码 上岗时间

离岗时间 接触的职业危害因素

日接触时间 工程防护

警示标识

接触的职业危害因素

配备的个体防护用品名称

个体防护用品型号 个体防护用品发放时间

个体防护用品发放数量

由数据结构A可以明显看出, 存在重复数据项“接触的职业危害因素”, 不复合第一数据结构规范化形式。一个作业场所可能存在多种职业危害因素, 一种职业危害因素又可能配备多种个人防护用品, 而一种个体防护用品又可能多次发放。如果按数据结构A建立数据文件或数据库, 必然按接触最多的职业危害因素、发放最多的个体防护用品的作业场所的数据项为设计基准, 将造成大量的空数据项, 占用过多的存储空间。为了去除重复数据项“接触的职业危害因素”, 可以采用增加关键字“作业场所代码”的办法, 将数据结构A转换成数据结构B。

B接触职业危害人员―作业场所-接触职业危害因素―配备个体防护用品

*身份证号

姓名 性别

*作业场所代码

上岗时间 离岗时间

接触的职业危害因素

日接触时间 工程防护

警示标识

配备的个体防护用品名称

个体防护用品型号 个体防护用品发放时间

个体防护用品发放数量

同理, 一个作业场所可能存在多种职业危害因素, 一种职业危害因素又可能配备多种个人防护用品, 而一种个体防护用品又可能多次发放。按照数据结构A转换成数据结构B的方法, 增加了“职业危害因素”、“个体防护用品”和“个体防护用品发放时间”三个关键字, 将数据结构B转换成数据结构C。

C接触职业危害人员―作业场所-接触职业危害因素―配备个体防护用品

*身份证号

姓名 性别

*作业场所代码

上岗时间 离岗时间

工程防护 警示标识

*职业危害因素

日接害时间

*个体防护用品代码

个体防护用品名称 个体防护用品型号

*个体防护用品发放时间

个体防护用品发放数量

数据结构C要比数据结构A和数据结构B好, 减少了数据冗余和用户输入、修改、删除的工作量, 提高了工作效率, 同时也提高了数据的完整性, 符合第一数据结构规范化形式。但数据结结构C中要修改个人防护用品的型号时, 该个人防护用品的所有发放记录都要进行修改;如果增加作业人员, 但还未给其发放个体防护用品, 那么数据无法插入, 出现插入异常;相反, 如果删除作业人员个体防护用品发放记录, 则连同作业人员姓名、性别、作业场所信息和接触的职业危害信息一起删除, 出现删除异常。同时由数据结构C可以发现:

(1) “姓名”、“性别”取决于关键字“身份证号”, 与其它关键字无关; (2) “工程防护”、“警示标识”、“职业危害因素”和“日接害时间”取决于关键字“作业场所代码”, 与其它关键字无关; (3) “上岗时间”和“离岗时间”取决于关键字“身份证号”和“作业场所代码”, 与其它关键字无关; (4) “个体防护用品名称”和“个体防护用品型号”取决于关键字“个体防护用品代码”, 与其它关键字无关; (5) “个体防护用品发放数量”取决于关键字“身份证号”、“职业危害因素”“个体防护用品代码”和“个体防护用品发放时间”, 与其它关键字无关。

因此, 数据结构C不符合第二数据结构规范化形式, 仍存在缺点。如, 同一种个人防护用品会经常发放, 而每次发放都有这种个体防护用品对应的人员、作业场所、个人防护用品等信息, 造成数据重复, 给用户的输入、修改和删除都带来不便。可将数据结构C分解成几个分数据结构, 使分数据结构中非关键字的取值完全取决于关键字, 因此, 将数据结构C分解成数据结构D、E、F、G和H后, 取消了数据结构C中非关键字的取值部分依赖于关键字或传递依赖于关键字, 使数据结构D、E、F、G和H中非关键字的取值完全取决于关键字, 这样数据结构D、E、F、G和H就符合第二数据结构规范化形式。

D接触职业危害的人员

*身份证号

姓名 性别

E作业场所-职业危害信息

*作业场所代码

*职业危害因素

日接害时间 工程防护 警示标识

F人员-作业场所信息

*身份证号

*作业场所代码

上岗时间 离岗时间

G个人防护用品信息

*个体防护用品代码 个体防护用品名称

个体防护用品型号

H个人防护用品发放记录

*身份证号

*职业危害因素

*个体防护用品代码

*个体防护用品发放时间

个体防护用品发放数量

符合第二数据结构规范化形式的数据结构D、E、F、G和H中, 非关键字数据项之间不存在相互联系, 这说明非关键字数据项不存在数据冗余, 符合第三数据结构规范化形式, 是合理的数据结构。如果满足第二数据结构规范化形式的数据结构中非关键字数据项之间存在联系, 只要消除存在函数依赖关系的数据项, 就使其成为满足第三数据结构规范化形式的数据结构。因此, 数据结构D、E、F、G和H就是合理的数据结构。虽然数据库文件或数据结构增多, 但消除了数据冗余、插入和删除异常、修改复杂的缺点, 数据结构简单、存取方便、特别是降低了修改的复杂度, 从而进一步提高了系统数据的完整性、准确性和有效性。

3 结论

依据数据结构规范化理论, 对作业场所职业危害监管信息系统企业级数据库中重点和难点部分的数据结构进行合理设计, 得到了职业危害监管信息系统企业级数据库中重点和难点部分的数据结构D、E、F、G和H, 并以此为例阐述了数据结构合理设计的方法和步骤。

参考文献

[1]张忠彬, 孙庆云, 郭金玉, 等.作业场所职业危害监管影响因素及其量化研究[J].中国安全生产科学技术, 2008, 4 (2) :35~39

[2]李戬, 孙庆云, 陈建武, 等.职业危害监管信息系统研究与设计[J].综合劳动卫生职业病杂志, 2008, 26 (3) :188~190

[3]李戬, 孙庆云, 陈建武, 等.我国职业卫生信息系统应用与展望[J].中国安全科学学报, 2008, 18 (2) :118~123

[4]Tamara Dean.信息系统与Internet[M].北京:机械工业出版社, 1999, 121~130

[5]李晓堂, 管万伟, 夏光伟.作业场所职业危害监督管理工作探讨[J].中国安全生产科学技术, 2008, 4 (2) :156~158

[6]王斌君, 孙丕龙.数据元标准在信息化中作用的再认识[J].中国人民公安大学学报 (自然科学版) , 2005, 45 (3) :75~78

[7]陈建武, 孙庆云, 李戬.作业场所职业危害监管信息系统基础数据结构标准化需求分析[J].中国安全科学学报, 2007, 10 (10) :145~150

数据挖掘系统结构 篇10

引言

随着现代雷达技术的飞速发展, 功能模块的复杂化与多样化, 软件设计开发技术日新月异也导致系统代码规模越来越大。作为现代雷达系统计算机控制、显示监控、数字信号处理等主要功能模块的组成部分, 软件系统在当今雷达发展中所扮演的角色非常重要, 因此, 如何通过高效、稳定的软件测试手段来保证雷达软件系统的质量和可靠性显得尤为重要。传统方法以小组为单位的手工测试模式虽然简单易行, 却无法避免成本高, 执行速度慢, 覆盖率低等缺点, 面对高度发展的雷达软件系统显得捉襟见肘, 很难形成强有力的质量保障体系, 无法满足大型、复杂的软件测试需求, 为解决此类问题, 自动化测试技术应运而生。

自动化测试就是通过由资深软件测试从业人员精心设计和开发的测试工具或者其他手段, 按照测试执行前制定的测试计划和测试用例自动完成测试相关工作的测试流程。针对雷达软件开展自动化测试不仅能够提高雷达整机软件质量, 增强对软件功能、性能、余量等方面的测试能力, 而且可以节省研发经费, 缩短软件产品的开发周期, 保证雷达运行的整体稳定性和可靠性。

研究内容

通常情况下为实现高效率的软件自动化测试, 必须依赖先进的测试工具及相关测试数据生成工具, 虽然这些工具本身并不直接执行测试实例, 但他们有各自的功能, 如利用工具产生测试数据, 为测试提供准备数据等。在实际测试执行的过程中使用各种测试工具、测试源集合产生的测试文件有两种方法, 一是人工方法, 由测试人员人工生成, 如文档、测试脚本、测试输入/输出数据等文件, 属于传统测试途径;二是直接由测试工具自动产生, 如实际输出、报告、日志等文件, 其优点在于测试工具可以独立存在, 根据特定功能的测试需求, 并且能在测试中调入测试件文件或是测试完成后自动保存测试结果文件, 这样才能有效实现自动测试。利用自动数据生成技术实现软件自动化测试的流程如图1所示。

目前, 国内外都是集成化的大型测试工具, 如Rational Functional Tester、Borland Silk系列工具、Win Runner等, 它们虽然功能覆盖面广, 提供的测试类型众多, 但也带来操作执行步骤繁琐, 系统臃肿缺乏灵活性和针对性, 而且价格昂贵, 导致通用性不强, 因此往往只有其中的部分功能得到使用, 造成测试人员的使用困难和资源浪费, 特别是雷达系统对于大多数的波束和数据信息都是以报文的格式进行读取、截获和传送, 对测试数据的格式定义以及报文信息内容也有着严格的要求, 因此基于以上内容, 设计了基于程序结构的测试数据自动生成系统。

测试数据自动生成即测试数据的搜索或组合优化问题, 通常具有不连续、不可微和非线性等特征, 目前常用方法为采用遗传算法、神经网络等技术。本文系统的综述了近年来软件测试领域数据自动生成的研究和存在的问题, 提出基于程序结构的自动生成方法, 在提供测试数据自动生成的功能同时可对截获的测试数据进行解析, 大大提高软件测试数据生成效率, 更好的适应了信息格式发生变更的情况。最后对未来雷达系统软件自动化测试中数据产生技术的发展进行了展望。

测试数据信息解析

该系统软件通过读取项目软件源程序的头文件或对测试人员自定义的测试数据结构体文件进行解析, 从信息结构体文件中解析信息结构体数据并保存在自定义的信息格式数据结构中, 根据通信协议的规则自动生成软件测试数据, 并能按照用户需求自定义组合的方式对测试数据的含义和有效性进行验证, 然后将结果数据在交互式用户界面上进行显示, 直观、简洁, 最后, 测试人员根据自己的实际需求可对生成的测试数据和解析结果进行选择性的保存在自定义路径下。同时, 本测试系统允许测试人员在用户交互界面的显示框中使用清空功能对指定的数据或类型等信息进行清空操作。

测试数据的准备阶段, 分析报文数据结构, 提取有效字符位信息, 并结合相对应的接口文档内容, 对测试项的测试数据进行整理归类, 最终获得包含测试数据信息的结构体文件。而在实际开展软件测试活动时, 传统通过测试人员手工设计构造测试数据往往要花费大量的人力、时间和成本来设计测试数据, 并且由于不同项目之间的通信协议的格式与结构不尽相同, 测试数据的复用性与实用性也比较差。

为了避免由于程序员编程习惯的差异性带来的代码识别率及程序语言读取效率低下等问题, 本文提出了统一的信息结构体格式, 具体的格式定义如下所示:

其中结构体名、“{”、“}”等符号单独占用一行, 且所读入的信息结构体每行都可根据需求标注相应的注释。

本文设计的系统软件对所有数据类型及数组、指针等数据结构均能提供良好的支持, 包括 (char, int, short, float, double等) 。当读取的文件内部存在结构体嵌套的情况, 要求被嵌套的结构体须在使用嵌套结构体的结构体之前出现, 如下这类情况所示:

其中, 在GPS_MSG嵌套使用了MSG_HEADER结构体, 要求信息结构体文件中MSG_HEADER结构体位置在GPS_MSG结构体之前。

系统可根据测试人员自主选定的信息结构体自动解析信息结构体文件。分别按照测试数据类别、名称、数据类型和注释等方面进行逐行读取, 并依此将结构体包含的数据内容放入指定空间中进行存储, 此阶段为后文中的测试数据的自动识别与产生提供理论依据。同时我们需要注意的是, 对于输入数据, 按位输入的信息项应是相邻的, 并且按位输入信息项包含的位数相加应和定义的关键字位数应该相等, 否则软件无法实现对结构体文件的正确解析。

考虑到实际执行测试时, 会对添加的结构体内容进行需求性变更, 这里采用行插入法即在每行被解析的报文末端, 手工添加所需内容, 系统会自动对添加的内容进行识别和保存, 保证测试数据生成过程的自由度和匹配度人为可控。结构体的解析原理图如图2所示。

测试数据自动生成

针对性较强, 数据量不大且对数据的产生要求操作直观、简洁, 因此使用基于程序的局部优化方法来实现测试数据的自动识别与产生。它的特点在于:结合程序本身设计参数结构体模型, 从而适应对不同环境、场合下测试数据的需求;并且采用局部优化策略, 对数据结构、参数定义等不断更新, 对实际输出数据和预期输出数据进行比较的同时, 用来实现测试输出数据反馈校正, 并最终产生可用于静态分析的测试数据。其意义在于:由于采用局部优化策略, 使得计算量大大减小;同时采用校正机制, 在局部优化的基础上保证了数据的正确性和稳定性, 解决了测试数据重复利用率差, 产生消耗资源多等问题。

获取接口、通信协议以及消息代码等约束条件, 对结构体文件或程序头文件按位筛选识别, 对于大量的测试数据, 采用局部优化策略减少计算量, 提高计算效率, 根据测试数据生成规范, 通过在用户交互式界面进行操作, 测试数据的自动生成, 具体流程如图3所示。

实验结果与分析

实验选择某型雷达的单个配置项软件程序进行测试数据的自动生成, 直接选择打开包含结构体信息的文件后, 系统自动对其中的结构体信息进行读取和解析, 同时在系统的主界面下拉框中依次显示需要解析的结构体名称, 鼠标操作即可在实现程序结构的自动解析并将内容显示在下端显示界面上, 如图4所示。

在交互式用户界面右侧的“输出显示方式”栏中根据实际的输出需求进行选择, 默认缺省值为“无校验”和“校验和”两种方式。如果需要临时对输入的结构体信息其中某项或多项进行更改, 采用行插入法对每行后输入的数值进行更新和存储。完成设置后, 点击生成按钮, 系统便会自动生成测试数据以供下一步测试执行使用。

系统软件会自动对测试数据的内容进行读取和分类, 对数据产生的结果进行解析和保存。如图5所示, 结果显示框中, 上栏为无校验时的结果, 下栏为加校验和时的结果。

自动生成的测试数据可以按照需求的文档格式保存在指定路径中, 在后期设计测试用例时, 直接选择相应的测试数据进行执行即可, 简洁、方便, 从根本上解决了人工设计测试数据的难题。

经过实际对本系统使用前后, 针对某个软件配置项的测试结果对测试成本及人员需求等资源的耗费进行统计和整理后, 如表1所示。

我们发现通过使用本测试数据自动生成系统, 不仅缩短了测试时间, 提高测试效率, 而且测试数据的准确率和测试结果的有效率都有了显著的提高, 极大改善了测试数据自动生成的途径。

结语

《数据结构》程序教学模式探索 篇11

关键词:数据结构;程序;教学模式;探索

中图分类号:G642文献标识码:A文章编号:1009-3044(2007)18-31759-02

The Research of Program Teaching Patterm on Data Strucure

MO Jia-qing

(Dept. of Computer Science, Zhaoqing University, Zhaoqing 526061, China)

Abstract:The current teaching status of Data Structure is analysed and the teaching pattern which emphasizes on ability of programming based on comprehension is presented. Some research has been carried on ,such as curriculum introduction, systematic structure of Data Structure, setting of experiment subject,providing aid-studying system, curriculum design and approval. The teaching effect shows these methodes can improve the the student abilities on computer program designing effectively.

Key words:data structure; program; teaching patterm; research

1 引言

《数据结构》是信息技术专业的核心课程,它的内容主要是介绍如何根据具体情况合理地选择逻辑结构(表、树、图等)去组织数据,并设计一定的物理存储结构(顺序、链式等)有效地存储这些数据,同时设计正确的算法并对算法作出分析和评价。它在培养计算机专业学生严谨的逻辑思维能力和培养良好的编程开发能力方面有着不可替代的作用,因此成为高校计算机专业研究生招生入学考试和软件设计师认证考试的首选课程。

《数据结构》内容广泛,涉及到的知识点众多,而且逻辑性和抽象性和动态性都很强,理论和实践紧密结合,因此对学生而言学习难度大,对教师而言授课难度高。教学过程出现众多问题,具体表现如下:

(1)学生由于没有编制过大程序和项目开发的经验,虽然知道《数据结构》的重要性,但是对于学习目的不明确。

(2)学生未能将所学内容融会贯通,没能将各大知识点的区别与联系弄清楚。

(3)学生由于C语言基础不扎实,对结构、指针、参数传递等概念掌握不好,在做作业或实验时如果题目要求与教材内容相差较大,无法入手,导致信心受到打击、畏难情绪增加。此后,为应付作业,出现抄袭别人作业,或直接上网搜索现成程序的情况。

(4)虽然教师自己对教材内容很熟悉,能够将各知识点讲得很透彻,但是没考虑到学生的实际学习状况和接收能力,出现学生越学越难,理论与实践越脱节,越学越不想学的情况。

(5)目前高校扩招,入学的学生素质有所下降,逻辑思维能力和自学能力不强,也是造成教学效果不理想的原因之一。

《数据结构》的教学目标之一是提高学生的软件编制能力,而上述问题的出现使得这个目标大打折扣,因此迫切需要运用新的有针对性的教学模式。

2 《数据结构》程序教学模式

2.1 加强技能,克服程序语言造成的困难

《数据结构》中大量运用了指针、地址、结构体、函数参数传递等知识,而这些知识又是C语言中的重点和难点。如果学生对这些内容掌握不好的话,学习《数据结构》将受到很大制约。因此在开学时,教师先帮助学生重点复习C语言中与数据结构相关的知识点,实现从C语言到数据结构的平滑衔接。复习的题目形式可以是选择、填空、编程题等。

目前高校普遍采用清华大学严蔚敏编著《数据结构》(C语言版)作为教材,该教材侧重于用类C语言描述各种数据结构和算法,从头到尾并没有一个完整的C语言程序,并且该教材为使学生能方便地调用教材中的算法函数,教材中的算法函数均采用了C++的“引用”作为参数,这种“引用”参数貌似C语言中的地址,而教材并没有着重强调。作者的初衷是好的,但此举对于接触过C++的初学者造成极大困惑。学习几周后,学生发现程序调试困难,实验过程障碍重重,导致信心受到打击、畏难情绪不断增加。因而有必要让学生熟悉C++中的“引用”。

以教材上的构造空链表算法函数为例,函数参数使用“引用”调用和不使用“引用”的比较,帮助学生掌握“引用”并明白使用“引用”的好处。

typedef struct

{ElemType *elem;

int length;

int listsize;

} SqList;

使用“引用”传递参数定义函数:

Status InitList_SqA(SqList &L) {//构造空链表

L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if (!L.elem) return ERROR; // 存储分配失败

L.length = 0; // 空表长度为0

L.listsize = LIST_INIT_SIZE; // 初始存储容量

return OK;

}

调用方式如下:

SqList LA;

InitList_SqA(LA);

使用指针传递参数定义函数:

Status InitList_SqB(SqList *L) { //构造空链表

L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if (!L->elem) return ERROR;// 存储分配失败

L->length = 0;// 空表长度为0

L->listsize = LIST_INIT_SIZE; // 初始存储容量

return OK;

}

调用方式如下:

SqList LB;

InitList_SqB(&LB),

可以看到,运用“引用”作为参数,教材上的函数基本上可以原封不动地使用,而使用指针传递参数,则需要对教材上的函数作大量修改。

另外教材为使算法描述更为简洁,算法函数内部一律省略了变量定义,这对学生的学习也造成了很大困难。因此还需要作一些针对性的训练,如通过填空题等形式补充完整函数,并适当评讲。

2.2 理解课程体系结构,融会贯通

《数据结构》课程的内容由简单到复杂,循序渐进。从一般的线性表开始,到后面的非线性的树和更复杂的图,都是讨论各种数据结构的逻辑结构和保存这种逻辑结构所采用的物理结构,以及在这种存储结构上的相关运算。理解这个体系结构,有助于学生从整体上更深入地掌握数据结构。

2.3 完善框架程序,培养自信

自信心是激发学生创新能力的积极情感和重要前提。为培养学生克服困难的自信心,笔者针对各种数据结构类型设计了不同的框架程序,让学生在实验过程中逐步完善,添加新功能,最终形式一个大的系统。例如针对线性表,笔者设计了线性表功能框架文本界面,其中的菜单功能分别为链表创建、链表插入、链表删除、链表合并,其中链表合并又为一个链表合并至另一链表尾部、合并过程相同元素保留和不保留三个功能,让学生逐步将单独的小功能添加至该界面中。又例如,在学习二叉树这一章内容时,笔者设计了二叉树功能框架菜单,菜单包括二叉树创建、先序遍历、中序遍历、后序遍历、左右子树交换、计算树高度和叶子数量等,让学生逐步完善。通过这种不断添加小功能,最终形成一个大的系统的实验方法,使学生具有一定的成就感,自信心不断增强。

2.4 提供学习辅助系统,减轻实验负担

《数据结构》的不少实验是验证性实验,为完成实验,学生需要大量调用教材上的算法函数或对这些函数作一定的修改。为了让学生提高实验效率,将主要精力集中于程序调试而不是文字录入,笔者设计了《数据结构》学习辅助系统。该系统把各章的算法函数分门别类,供学生做实验时复制至其程序中,以减轻实验负担。另外该系统还给出了一些调用这些算法函数的完整程序,供学生参考。

2.5 分组课程设计,培养团队合作精神

课程设计是体现《数据结构》理论和实践紧密结合的重要环节。通过课程设计,不但锻练学生描述概念、构建数据结构、设计算法的能力,而且锻练学生运用自己所学知识通过高级程序语言解决实际问题的能力。

课程设计的题目一般选择综合设计类型,如风景区景点路径查询、简单114查号台等。要求学生首先进行需要分析,明确目标如何,需要实现那些功能;其次是进行概要设计和数据结构设计,定义各功能模块和其内部流程、抽象数据结构,最后编码调试并写成小论文。

由于单个学生完成任务存在较大困难,课程设计还需要分组。分组时要考虑学生的实际情况,要考虑各个小组实力均衡,具体做法是把学习成绩较好的学生和成绩靠后的学生安排在同一组。课程设计完成后,还安排答辩。答辩的形式是随机抽查小组内的一个成员,由该成员代表小组进行答辩,该成员的成绩就是该小组的成绩。要求学生回答系统设计思想、总体架构、开发过程碰到什么困难、整个系统有何优缺点等。通过这种形式,可防止出现课程设计只是由小组内水平高的学生单独完成,而其他成员基本不参与的情况。这种答辩形式可以极大地调动了学生的积极性。为了不让自己拖小组的后腿,学生们相互学习,热烈讨论,表现出极大的参与热情。最后的结果是小组所有成员水平有了很大提高,培养了团队合作精神。

3 结束语

运用高级语言进行程序设计是一个创造性的过程。《数据结构》课程的教学目标之一就是要提高计算机专业学生的程序设计语言能力。笔者在《数据结构》教学过程中的上述措施,目的就是要解决学生在学习过程中由语言所造成的困难,最终提高其程序设计能力。教学实践也证明,上述措施提高了学生C语言技能,降低由程序语言造成的难度;而且针对性的训练可让学生很快地掌握调用教材上的算法函数,理解了教材的知识体系结构。程序功能整合使学生有成就感和增强自信,需要答辩的课程设计使锻练了学生运用所学理论解决实际问题的能力,也培养了团队合作精神。这种侧重程序的教学模式取得良好的教学效果。

参考文献:

[1]严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,2006.

[2]严蔚敏,吴伟民. 数据结构题集(C语言版)[M]. 北京:清华大学出版社,2004.

[3]黄扬铭. 数据结构[M]. 北京:科学出版社,2005.

数据挖掘系统结构 篇12

(1)支持大数据库、多用户的高性能的事务处理。

(2)Oracle遵守数据存取语言、操作系统、用户接口和网络通信协议的工业标准。

(3)实施安全性控制和完整性控制。

(4)支持分布式数据库和分布处理。

(5)具有可移植性、可兼容性和可连接性。

因此Oracle已成为B/S架构中底层dbms首选。

要了解Oracle的体系结构必须了解数据库的内部结构,也就是Oracle数据库的存储结构,包括数据的逻辑存储结构和物理存储结构。逻辑存储结构指数据概念上的组织,如数据库或表;物理存储结构是数据库实际的数据存储单元,如文件和数据块。

1 Oracle物理存储结构

1.1 数据文件

Oracle数据库的每个表空间包括一个或多个数据文件。Oracle数据库中所有的数据信息都存放在数据文件中,数据文件是存储在文件系统中实际的物理文件。数据文件用来存储数据库中的全部数据,如存储数据库表中的数据和索引数据。通常为后缀名为.dbf格式的文件。

数据文件可以存放两种类型的数据。用户数据:用户应用系统的数据。系统数据:管理用户数据和Oracle系统本身的数据。用户建立的表名、列名,这些数据自动被存放在系统表空间对应的system01.dbf;Oracle系统内部的数据字典、表如DBA_USERS、DBA_DATA_FILES等存放的数据属于Oracle系统内部的数据-à存放在系统表空间对应的system01.dbf。

查询当前数据库的所有的表空间及其对应的数据文件。

Select file_name,tablespace,bytes from dba_data_files;

需要注意的是:

(1)一个数据文件只能属于一个表空间。

(2)数据文件创建后可改变大小。

(3)创建新的表空间需创建新的数据文件。

(4)数据文件一旦加入到表空间,就不能从表空间移走,也不能和其他表空间发生联系。

Oracle数据库、表空间和数据文件之间的关系如图1所示。

1.2 日志文件

日志文件(又称重做日志文件),用于记录数据库所做的全部变更(如增加、删除、修改)及由Oracle内部行为而引起的数据库变化信息。目的:记录数据的改变,提供数据库的恢复。一个Oracle数据库至少需要两组重做日志文件。日志按照有序循环的方式被使用。即当一组日志文件被填满后,循环覆盖下一组日志文件,不断循环。当所有日志文件都被写满后,就回到第一个日志文件。

根据在事务信息将被覆盖时,是否应该将文件归档,数据库分为以下两种归档模式:ARCHIVELOG(归档日志)或NOARCHIVELOG(非归档日志)模式。归档文件的后缀为ARC。ARCHIVELOG模式:采用生成归档日志的模式;NOARCHIVELOG模式:不生成归档日志。

查询日志信息通过数据字典v$logfile,语句为Select member from v$logfile。

1.3 控制文件

Oracle数据库系统在运行前要首先转到控制文件。以检查数据库是否良好。每个Oracle数据库都有相应的控制文件,用于打开、存取数据库。它们是较小的二进制文件,其中记录了数据库的物理结构。控制文件名字通常为Ctr*.ctl格式。

控制文件中的内容只能够由Oracle本身来修改。每个数据库必须至少拥有一个控制文件。一个数据库也可以同时拥有多个控制文件,但是一个控制文件只能属于一个数据库。

控制文件用以记录与描述数据库的外部结构。

可以通过数据字典v$controlfile查找控制文件信息。

1.4 配置文件

配置文件是一个ASCII文本文件,记录Oracle数据库运行时的一些重要参数。名字通常为*.ora格式。如SPfile.ora文件,数据库实例初始化文件init SID.ora,listener.ora文件,sqlnet.ora文件,tnsnames.ora文件。

2 逻辑存储结构

Oracle数据库的逻辑存储结构主要从表空间(TA-BLESPACE)、段(SEGMENT)区(EXTENT)、数据块(BLOCK)4个方面考虑。

2.1 表空间

Oracle数据库在逻辑上可以划分为一系列的逻辑空间,用于存放数据库表、索引、回滚段等对象,每一个逻辑空间就可以称为一个表空间。表空间是存储模式对象的容器,一个数据库对象只能存储在一个表空间中(分区表和分区索引除外)。

一个表空间对应一个或多个数据文件,数据文件大小决定了表空间的大小。一个数据文件只能从属于一个表空间。如果表空间只对应一个数据文件,该表空间中所有的对象都存储在此数据文件中。如果表空间对应于多个数据文件,可将一个对象的数据存储在该表空间的任意一个数据文件中,也可将同一个对象的数据分布在表空间的多个数据文件中。

Oracle系统安装成功后,自动建立多个表空间。

SYSTEM表空间用于存放Oracle系统内部表和数据字典的数据。如表名、列名、用户名。不建议用户创建的表、索引等存放在system表空间。system表空间对应的数据文件为system01.dbf和systemo2.dbf。

SYSAUX表空间是Oracle 10g新增加的表空间,主要存放Oracle系统内部的常用样例用户的对象。一般不存储用户的数据,由系统自动维护。

撤消表空间:UNDO表空间是存储撤销信息的表空间。当对数据库表进行修改时,Oracle系统自动使用UNDO表空间临时存放修改前的数据(Before Image)。

用户可以根据应用系统的规模及其所要存放对象创建多个表空间,以区分用户数据和系统数据。

查询表空间通过SQL>select*from dba_data_files;实现。查询表空间的空闲信息可以通过SQL>select*from dba_free_space;实现。

2.2 段

设计数据库结构时需要将表、索引或簇存储在一个已存在的表空间上,表、索引或簇都是占空间的对象,Oracle把占空间的对象统一称为段(Segment)。数据库模式对象在逻辑上是以段来占据表空间的大小。一个非分区表就是一个segment,分区表的一个分区是一个segment。index,cluster,index partition,temporary segment,undo segment等都是一个segment。

段基本可以分为以下4种:数据段(Data Segment),索引段(Index Segment),回滚段(Rollback Segment),临时段(Temporary Segment)。

可以通过SQL>select*from user_extents;语句来查询用户的数据段信息。

2.3 区

段由多个区(extents)组成。区是磁盘空间分配的最小单位,磁盘按区划分,每次至少分配一个区。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。

可以通过字典dba_tablespaces查询表空间中区的信息。可以通过字典user_tables查询段中区的信息。可以通过字典user_extents查询区的分配状况。

2.4 数据块(BLOCK)

区由一组连续(块的编号地址相邻)的Oracle数据块(block)构成。数据库块也称逻辑块或Oracle块,它对应磁盘上一个或多个物理块,它的大小由初始化参数db_block_size(在文件init.ora中)决定。Oracle创建数据文件时实际上是将磁盘的操作系统块重新格式化成Oracle数据块,并且每个Oracle数据块都有唯一的标识。一般Oracle数据块是操作系统块的整数倍。如(Os)block=2048B(Oracle)block=8192B。

3 Oracle物理结构和逻辑结构之间的关系

如图2所示。

需要注意的是:表空间和数据文件是物理存储上的一对多的关系。表空间和段是逻辑存储上的一对多的关系。段不直接和数据文件发生关系。一个段可以属于多个数据文件。

4 结语

一个Oracle数据库可以有多个实例,但是一个实例却不可能对应多个数据库,在一般的情况下都是用单节点数据库,即一个实例仅仅对应一个数据库。论述了Oracle体系结构中的两个核心内容物理存储结构和逻辑存储结构以及它们之间的关系。Oracle体系结构中还包括Oracle实例的组成,主要由内存SGA和后台进程组成。

参考文献

[1]赵慧勤,李秀兰.Oracle数据库应用系统的优化策略.计算机工程与应用,2003,(27):213-215.

[2]吕华,杜忠军.数据库性能优化.计算机应用,2003,23(5l):172-174.

上一篇:正切函数下一篇:人民的中国梦