软件工程设计试验文档格式.docx
《软件工程设计试验文档格式.docx》由会员分享,可在线阅读,更多相关《软件工程设计试验文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
f、状态栏:
显示和标注当前软件的运行或操作状态。
软件系统界面如下:
1.3.技术路线
1.3.1开发环境:
MapObjects2.0环境,开发工具:
VisualBasic6.0,Visio程序流程设计软件
1.3.2技术路线
先在Visio程序流程设计软件中把软件系统的部分结构路线设计出来,然后再用VisualBasic6.0软件设计界面和编写代码。
1.4.软件结构设计
软件划分为:
文件操作:
在文件操作功能中可以实现,打开、新建、保存、打印、关闭功能。
数据加载:
可以实现加载空间数据、加载本地数据。
图形操作:
可以实现放大、缩小、平移、全图、漫游。
属性查询;
可以实现多条件查询、模糊查询
空间查询:
可实现点查询、普通空间查询、缓冲区查询。
其他:
图层渲染、地图输出、工具、帮助。
2.系统详细设计及实现
2.1.核心模块的详细设计
其核心模块为:
属性查询、空间查询
2.1.1功能说明
属性查询:
属性查询中以条件查询为主,选择要查选的图层,并添加查询条件,检出该图形范围内的对象以及相应的属性。
同时能实现查询位置定位、显示、清除、闪烁等功能。
空间查询中主要以点查询、线查询、多边形查询等普通空间查询为主,在空间上指给定一个点或一个几何图形,检索出该图形范围内的空间对象以及相应的属性,查询结果以列表显示。
2.1.2接口设计
由于MapObjects是建立在vb基础上,所以在这里不设置接口。
2.1.3模块的算法描述
设计的条件查询功能界面:
在条件查询功能中最重要的是查询空间代码的实现,这里要把查询的结果显示在下面的表格中,同时还要描述表格里要填充的内容,当然,清除、闪烁、取消这些功能也是构成条件查询功能的重要部分,但相对而言,不怎么难。
代码:
'
用表显示选中图形
PublicSubDisplaySelFeature()
IfNotpRcsIsNothingThen
DimtDescAsMapObjects2.TableDesc
DimiAsInteger
SettDesc=pRcs.TableDesc
DimrecscountAsInteger
'
记录指针移动到属性数据表选择中的记录上
Fori=0TorecNo-1
pRcs.MoveNext
Nexti
EndSub
闪烁
Form1.Map1.FlashShapepRcs("
shape"
).Value,3
对于查询条件录入的填写,先要在选择查询图层,选择之后图层相应的字段就要显示在“字段名列表”中,同理选择“字段名列表”属性要显示在“字段值列表”中。
Text1.Text=List1.List(List1.ListIndex)
Text1.Text=Text1.Text+List2.List(List2.ListIndex)
而“从Road选择”中是显示选择条件,当双击“字段名列表”、“字段值列表”、“表达式构造按钮”时,所构成的条件就显示在这里。
pFldName=List1.List(List1.ListIndex)
List2.Clear
pRcs.MoveFirst
WhileNotpRcs.EOF
List2.AddItempRcs.Fields(pFldName).ValueAsString
Wend
设计的空间查询功能界面:
在空间查询中最主要的部分就是编写汇入几何体的部分,这里包括点、线、面、多边形要素。
SettheShape=pSel("
).Value
IfpSel("
).Type=moPointThen
SetRect2=Form1.Map1.Extent
shapeX=pSel("
).Value.X
shapeY=pSel("
).Value.Y
deltax=shapeX-Rect2.Center.X
deltay=shapeY-Rect2.Center.Y
Rect2.Offsetdeltax,deltay
Rect2.ScaleRectangle0.1
Form1.Map1.Extent=Rect2
Else
SetRect=pSel("
).Value.Extent
Rect.ScaleRectangle1.1
Form1.Map1.Extent=Rect
EndIf
SetRect2=Nothing
SettheShape=Nothing
要实现空间查询,当然选择图形、查询方式、居中、闪烁以及显示每一步都要编写。
cboMethod.AddItem"
重叠"
cboMethod.AddItem"
有一个公共点"
边缘相交"
有一条公共边"
有公共点或边缘相交"
有交集"
内交"
内交,但边缘不相交"
特征包含形"
形包含特征"
特征完全包含形"
形完全包含特征"
特征包含形的第一个点"
形包含特征的中心"
特征和形相同"
cboMethod.ListIndex=5
2.1.4部件程序结构图
条件查询程序图:
空间查询程序图:
2.2.系统的开发实现
提交Windows下可运行的原型系统及源代码
条件查询:
DimlyrAsMapObjects2.MapLayer
DimpRcsAsNewMapObjects2.Recordset
将查询结果在属性表窗口中显示出来
PrivateSubMSFlexGrid1_Click()
DisplaySelFeature
DimRectAsRectangle,Rect2AsRectangle
DimshapeXAsDouble,shapeYAsDouble
DimdeltaxAsDouble,deltayAsDouble
DimtheShapeAsObject,pinPointAsMapObjects2.Point
DimrecNoAsInteger
recNo=MSFlexGrid1.Row-1
pRcs.MoveFirst
SettheShape=pRcs("
IfpRcs("
shapeX=pRcs("
shapeY=pRcs("
SetRect=pRcs("
**********************************************************
以下代码用来填充msgflexgrid
DimmAsInteger
DimnAsInteger
DoWhileNotpRcs.EOF
recscount=recscount+1
Loop
MsgBoxrecsCount
Form3.MSFlexGrid1.Cols=tDesc.FieldCount+1
Form3.MSFlexGrid1.Rows=recscount+1
Form3.MSFlexGrid1.AllowUserResizing=flexResizeColumns
Form3.MSFlexGrid1.Clear
Form3.MSFlexGrid1.CellAlignment=flexAlignLeftCenter
Forr=1TotDesc.FieldCount
Form3.MSFlexGrid1.ColWidth(r)=tDesc.FieldLength(r-1)*72
Nextr
tofilledthefieldsnameintogrid
Form3.MSFlexGrid1.TextMatrix(0,0)="
特征ID"
Forr=1Torecscount
Form3.MSFlexGrid1.TextMatrix(r,0)=r
Forr=0TotDesc.FieldCount-1
Form3.MSFlexGrid1.TextMatrix(0,r+1)=tDesc.FieldName(i)
Form3.MSFlexGrid1.ColAlignment(r)=flexAlignLeftCenter
Form3.MSFlexGrid1.ColWidth(r)=1200
Form3.MSFlexGrid1.ColAlignment(0)=flexAlignCenterCenter
Form3.MSFlexGrid1.ColWidth(0)=680
Form=1Torecscount
Forn=0TotDesc.FieldCount-1
Form3.MSFlexGrid1.TextMatrix(m,n+1)=pRcs.Fields(tDesc.FieldName(n)).Value
Nextn
Next
Form3.MSFlexGrid1.Refresh
PrivateSubCombo1_Click()
Setlyr=Form1.Map1.Layers(Combo1.ListIndex)
SetpRcs=lyr.Records
DimpTdscAsMapObjects2.TableDesc
SetpTdsc=pRcs.TableDesc
List1.Clear
Fori=0TopTdsc.FieldCount-1
List1.AddItempTdsc.FieldName(i)
PrivateSubCommand10_Click()
Text1.Text=Text1.Text+"
)"
PrivateSubCommand11_Click()
Not"
PrivateSubCommand12_Click()
Like"
PrivateSubCommand13_Click()
ponoff=True
Form1.Map1.Refresh
PrivateSubCommand14_Click()
Text1.Text="
"
Form3.MSFlexGrid1.Clear
SetpRec=Nothing
Form3.MSFlexGrid1.Refresh
PrivateSubCommand15_Click()
MovePoint
flash_shape
PrivateSubflash_shape()
OnErrorResumeNext
移动
PrivateSubMovePoint()
PrivateSubForm_Load()
DimpLyrAsNewMapObjects2.MapLayer
ForEachpLyrInForm1.Map1.Layers
Combo1.AddItempLyr.Name
NextpLyr
Combo1.ListIndex=0
Text1.Text="
ponoff=False
空间查询;
OptionExplicit
ExecuteSearch
DisplaySelFeature
Form1.Map1.Refresh
PrivateSubCommand1_Click()
DimRectAsRectangle,Rect2AsRectangle
pSel.MoveFirst
pSel.MoveNext
PrivateSubCommand2_Click()
***************************************************************
Form1.Map1.FlashShapepSel("
**************************************************************
SetWindowPosMe.hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVEOrSWP_NOSIZE
DimlayerAsNewMapObjects2.MapLayer
ForEachlayerInForm1.Map1.Layers
Combo1.AddItemlayer.Name
Nextlayer
初始化空间搜索方法
3.总结与展望
设计阶段是在VB中创建应用程序的最重要的部分。
首先需要为应用程序设计一用户界面,然后对每个功能模块编写代码。
但设计代码的结构是一项很复杂的工作,不易掌握。
构造应用程序的方法不同,可能会造成应用程序的性能以及代码的可维护性、可使用性不同。
在此次课程设计中,我们针对MO二次开发过程中遇到的问题进行了如下总结:
(一)实验难点
1.对Visio软件运用不熟悉,在设计流程图,以及设计部分程序图是很吃力。
2.VB编程是实验中的一大难点,每个功能都要通过编写代码来实现,对加载的每个功能函数需要不断的修改和调试。
(二)注意事项
1.在构建不同的窗体模块时,要注意模块之间的链接;
2.每个模块有多个过程,每个过程是一个可执行的代码片段,要划分清晰每个子过程、函数过程或是属性过程,以便程序的调试、检查;
3.在很多情况中存在多个对象共享的重复过程,这样可创建一个共享的子过程,以方便调用,来增加程序的可读性和可维护性;
4.应用每一个变量前需要进行定义,以保证程序可读;
5.在调试程序时可通过设置断点来进行追踪分析;
6.在工具栏设计中,Toolbar里按钮的索引号要与ImageList的图像编号链接一致,按钮样式要设为“tbrButtonGroup”,否则无法对地图实现各项操作;
7.在实现“打开”功能前,需加入CommonDialog控件,否则无法实现;
心得体会:
在这次上机实习中,我们使用VB和MO中的Text,Label,Toolbar,Command,,list,Listview,Map,Legend等控件创建了一个用户界面,并通过编程实现了MO的一些主要功能。
通过软件的设计,我们熟悉了VB的工作环境,初步掌握了该软件的基本操作与用法,学会了用属性窗口及代码设置对象(窗体和控件)属性的方法,学会了如何用对象建立界面及在代码编辑器中输入程序代码的基本操作,基本掌握了用VB开发应用程序的一般步骤。
在这里,构建基本软