森林经理学实验报告D.docx
《森林经理学实验报告D.docx》由会员分享,可在线阅读,更多相关《森林经理学实验报告D.docx(18页珍藏版)》请在冰豆网上搜索。
森林经理学实验报告D
森林资源二类调查数据库系统
分析设计说明书
森林资源二类调查数据库系统
设计说明书
1.1背景
森林资源信息是指反映林木生长状况、生长环境及其生长紧密相关的营林技术措
施、方针政策等信息。
森林具有生长、消亡和再生长的能力,随着森林的自然生长、枯损和
人为生产活动的开展,森林资源时刻都在变化着;再加上森林资源分布广,生长周期长、信
息量大等特点,使得传统的森林资源信息管理难度很大,效率也十分低下,难以满足现代林
业发展的需要。
利用现代信息管理技术则可以很好地解决这些问题。
森林资源二类调查的任务是了解森林资源的状况,而其目的是:
掌握森林资源的动态变化规律,为制定下一阶段林业发展规划,编制森林采伐限额,建立和完善地方森林资源监测体系,考核“造林绿化”和保护森林资源目标完成结果等提供科学依据。
1.2目标
根据森林资源保护与利用需要,利用关系数据模型,可视化技术,面向对象的方法以GIS技术,对系统进行了数据设计及功能设计,建立系统框架,完成了结构设计。
并选择二类调查数据进行了系统的实际建立工作,最终Powerbuilder程序设计语言和qlServer2008完成了计算机森林资源管理地理信息系统的界面设计和程序设计,实现系统主要的空间信息管理和属性信息管理功能。
1.3环境
硬件环境:
多媒体计算机
IntelPentium4或100%的兼容处理器(CPU)
1GB以上的内存(RAM)
320GB以上的硬盘可用空间
256色或更高的显示适配器及兼容监视器
DVD-RW驱动器
MicrosoftWindows7
与MicrosoftVideoforWindows或AppleQuickTime兼容的视频采集卡(可选)
软件环境:
Windows7、PowerBuilder12.1,SqlServer2008R2
素材资料:
实验指导书、图书馆书籍、网络搜索
2.1系统功能需求
1、数据的采集和输入:
把分散在各处的数据进行收集并将整理好的数据通过一定的设备输入到信息系统中。
这一步工作的质量是整个信息系统是否正确发挥作用的关键。
2、数据的存储:
管理中的大量数据处理通过共享并且需要多次使用。
这就要求将大量的数据存储起来,通常这些数据被保存在外部存储介质中,以便需要随时进行存取和更新。
3、数据的加工处理:
数据的加工处理是信息系统的一项重要功能。
进入信息系统的数据,都需要经过加工处理,才能产生有用的信息。
4、数据传输:
为了把数据或信息从一个子系统传送到另一个子系统,或者在信息系统内部进行数据的处理都涉及数据的传输问题。
5、数据传输:
包括计算机系统内和系统外的传输,计算机传输即以计算机为中心,通过通信线路与其它近、远程终端连接、形成联机系统或通过通信线路将微小型等计算机联网。
除计算机传输外还有人工和盘片传输。
人工传输是以各种单据、报表、计划等文字形式传输。
盘片传输是将要传输的数据录入到磁盘或其它外存进行传输。
数据的传输速度和准确程度是数据传输的主要性能指标。
6、信息输出:
信息系统输出功能的完善与否,输出与格式直观方便与否,直接关系到
信息的使用效果和信息系统效能发挥。
因而对系统输出的信息,又尽量使其易读易懂,符合
信息使用者的习惯和要求。
7、信息维护:
信息的维护就是保护信息处于适用状态。
2.2系统总体设计
2.2.1功能结构
(1)模块划分
本系统有以下功能模块:
1)用户登录模块
2)主界面模块
3)数据插入模块
4)数据检索修改模块
5)数据查询模块
6)数据统计导出模块
7)帮助模块
(2)模块功能描述
1)用户登录:
用户只需要在用户名密码中输入自己相应的帐号密码按登录按钮既可登录系统,弹出主界面,若用户名密码错误,则会提示登录错误。
单击取消按钮可以退出程序。
2)主界面菜单功能
在主界面用户将鼠标移到菜单上的项,会弹出该项的子项,单击一项,便可以弹出相应窗口执行相应操作。
,就如单击打印输出按钮,就弹出“森林资源二类调查系统打印输出”界面。
3)数据录入功能
用户可以自己输入东南县2011表中的所有字段,也可以填写部分。
关键字为必填,应为是该表的主键。
其它的字段也有约束,程序已经实现表单验证功能,一旦用户输入不符合预定的要求,系统将向用户发出警告,并把光标跳转到错误行,提示用户再修改。
然后,用户可以单击添加按钮将该表单中的临时输入内容写入Datawindow,然后单击确认按钮便提交到数据库,完成数据的插入。
如果还想再看下刚刚填写的数据是否真正插入到了数据库,可以单击检索按钮,程序便会向数据库中读取刚刚插入的数据,以便用户核对。
要是用户觉得插入错误,想删除刚刚插入的数据,只要单击删除按钮既可。
4)数据检索与修改功能
在检索数据页面,单击检索按钮,便可以显示数据库中“东南县2001”表的所有行,关键字设定为不可修改,应为它作为主键,根据它才可以实现其它字段的修改。
当用户选择关键字右边的任何一行所对应的列时,光标都会变为可编辑状态。
用户可以根据需要修改其中的数值。
(各数值代表的意义可以参考森林资源代码如:
林种:
用材林210,经济林230,薪炭林220,防护林120,(商品林)特种用途林110,110有林地120疏林130灌木林地140无立木林地150苗圃地210乔内荒地220乔外荒地……等等)修改完的数据只是存储在Datawindow中,所以必须单击提交按钮完成修改。
5)查询功能
上图所示的查询结果是由如图提示框中的语句产生的,用户在查询条件栏中需要通过下拉框需要查询的列,查询操作符,再在后面的文本框中输入一个值,程序便会自动合成一个查询表达式,并通过这个查询表达式从数据库中检索那一部分数据显示在DataWindow中。
6)统计输出功能
打开此模块,左侧将会有七张导出表供选择,用户可以选择其中一条,点击插入数据,下面的文本条中显示查询语句,并会以MessageBox提示数据库中插入表和录入数据的成功与否。
如果提示成功,用户可以点击转换输出按钮,数据库中相应表的数据会以文本文件形式导出,并以DataWindow形式在右侧显示,以方便用户查阅。
用户可以任选一张表,重复上述操作。
2.2.2数据描述
(1)数据库表结构建立
打开PowerDesigner
单击菜单Sybase->新建模型->conceptmodel(概念模型)
在右侧栏点选Entity,新建两个表,并双击打开,code最好用英文,m强制输入,p主码
其中一张表是小班表,另一张是林种表。
建立它们的字段如下图所示。
点选右侧工具栏的Releationship从树种表到小班表拖出一条直线。
转换数据库:
Tools–>physicaldatamodel.在dbms里选择sql2000
数据库->updatamodefromdatabase选择selecion里的datasource
(2)基本查询语句
Selectsum(面积)from小班where地类=’纯林’and权属=’国有’and森林类别=’公益林’
Select权属,森林类别,sum(面积)from小班where地类=’纯林’groupby权属,森林类别
(3)数据分类:
森林类别:
生态公益林,商品林
林地所有权:
国有,集体,人工
林地所有权,林木所有权,起源,林种,优势树木,地类,森林类别
起源:
飞播,天然,人工
(4)类别代号
100-200生态公益林200以上商品林
林种:
用材林210,经济林230,薪炭林220,防护林120,(商品林)特种用途林110,
110有林地120疏林130灌木林地140无立木林地150苗圃地210乔内荒地220乔外荒地……
3.1开发工具
PowerBuilder美国Sybase公司研制的一种新型、快速开发工具,是客户机/服务器结构下,基于Windows3.x、Windows95和WindowsNT的一个集成化开发工具。
它包含一个直观的图形界面和可扩展的面向对象的编程语言PowerScript,提供与当前流行的大型数据库的接口,并通过ODBC与单机数据库相连。
SQLServer2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQLServer版本。
这篇文章详细介绍了MicrosoftSQLServer2008中的新的特性、优点和功能……在现今数据的世界里,公司要获得成功和不断发展,他们需要定位主要的数据趋势的愿景。
微软的这个数据平台愿景帮助公司满足这些数据爆炸和下一代数据驱动应用程序的需求。
微软将继续投入和发展以下的关键领域来支持他们的数据平台愿景:
关键任务企业数据平台、动态开发、关系数据和商业智能。
3.2数据库的建立
在控制面板里性能维护->管理工具
选择:
数据源->创建新数据源,选择exceldriver(*.xls)数据源名自己设置myexcel97-2000点确定后双击myexcel97-2000,选择数据源,点击工作簿,选择东南县.excel
选择updatamodelfromdatabase选择selecion的usingadatasource->ODBCmachine下拉框里选excle点击modify,再选择工作簿,
最后单击确定->Connect既可自动的创建数据库并建表。
首先,通过SqlServer的企业管理器,右键点击数据库->新建数据库,设置数据库名MyForest
打开SqlServer自带的“导入导出数据”,数据源选择excel97-2000,选择文件名为东南县:
下一步使用sql身份验证,填入相应的用户名密码
数据库选择刚刚新建的为MyForest或者新建一个数据库名为TreeManagement
导入完成后,测试导入的数据库,结果如下:
3.3Powerbuilder连接数据库
(1)在Powerbuilder工具栏中点击dbprofile,进入
(2)双击ODBODBC下Utilities下的CreateODBCDataSource,进入
(3)选择文件数据源(F),点击下一步,进入
(4)选择SQLServer,点击下一步,进入
(5)填写数据源名称(自己随意给定,这里给fmsys),如果需要,单击浏览按钮,选择保存数据源的位置;点击下一步,在新界面中点击完成,进入
(6)在上面填入描述(描述也可以空着)和服务器名称(必须填,就是你目前登录的SQLServer服务器,就是你的机器名);点击下一步,进入
(7)选择“实用用户输入登录ID和密码的SQLServer验证(S)”,输入正确的登陆ID和密码,这里均为fmsys;然后点击下一步,进入
(8)在以上界面中,确认默认数据库名为fmsys,否则应选中“更改默认数据库名为(D)”,更改数据库名;点击下一步,进入
(9)在此不修改其他内容,点击完成,进入
(10)点击测试数据源,弹出测试结果
(11)点击确定,返回以上界面(ODBCMicrosoftSQLServer安装);
点击界面中的确定。
至此,数据源创建完毕。
(12)选择ODBODBC,单击右侧的New建立自己的数据库首选项
(12)在弹出的对话框中DataSource选择刚刚建立的fmsys名称填Forest
(13)选择Preview选项卡,保存链接字符串以备后用。
(14)点选DBProfiles中的Forest右侧Connect。
3.4用户登录模块实现
(1)用户界面如图所示:
(2)在SQLServer中的MyForest数据库中建立Users这张表,用来管理登录的用户的基本信息。
代码如下:
createtableusers(
useridintprimarykey,
usernamevarchar(20),
userlevelint,
passwdvarchar(50)notnull
);
go
insertintousersvalues(1,'张',1,'张');
insertintousersvalues(2,'王',1,'王');
insertintousersvalues(3,'zhang1',1,'zhang1');
(3)PowerBuilder的界面设计中插入静态字段、文本框以及按钮等,做一个基本的登录的界面:
(4)在登录按钮的单击事件中:
首先定义字符串类型的in_userid,in_passws,db_userid,db_passws,用来读取这两个文本框中的用户名和密码字段,然后通过查询数据库中已有的userid和passwd,若在数据库中出现说明用户名密码输入正确,用户即可点击登录按钮直接登录,若输入错误,则不能进入系统。
3.5.主界面与菜单实现
(1)在powerbuilder工具栏中点击new,进入
(2)选择workspace,单击OK
(3)填写文件名fmsys,然后保存,即完成workspace的建立。
然后重新点击powerbuilder工具栏中点击new,进入
(4)选择target标签,在该界面中选中第一个图标(Application),即建立应用,点击OK,进入
(5)在以上界面中,先输入应用名(ApplicationName),然后点击库名(Library),应用程序文件名(Library)以及路径会自动生成,同时生成的还有Target(目标)文件名及其路径,这里不作修改,点击Finish。
(6)以上界面为一个应用程序框架,其程序入口为fmsys.pbl下的应用(application)
。
在application的事件中可以编写应用程序要执行的代码,这是程序运行最开始要执行的代码。
一般在这里写连接数据库和打开主窗口的代码。
双击myexercise1,右边的事件open下面的scripts窗口中写入从前面临时文本保存的数据库链接参数。
//ProfileForest
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="ConnectString='DSN=fmsys;UID=sa;PWD=000000'"
ConnectUsingSQLCA;
IFSQLCA.SQLCODE<>0THEN
MessageBox("","数据库链接错误,错误是:
"+SQLCA.SQLERRTEXT)
ENDIF
(7)创建一个新窗体,在新窗口中插入标题:
点击Insert✍control✍statictext,再在窗口上点击鼠标,即在窗口上插入了静态文本对象。
编辑字体、字号、位置,结果如下:
(8)新建标题选择Menu,单击OK,得以下界面(即菜单)
(9)在菜单项根部点右键在弹出菜单中选择InsertSubMenuItem可以增加子菜单。
重复此过程,添加“查询”、“统计”、“帮助”三个菜单项。
最后结果如。
(10)在窗口对象属性中,选择
右边按钮或直接输入菜单名。
按
选择,则有
(11)从已有菜单中选择,按OK
至此,菜单m_main已经添加于窗口w_main之上。
3.6.修改模块实现
(1)新建一个Grid的数据窗口
(2)在快速选择对话框中选择东南县2001表中的所有字段。
(3)设置Datawindow的字体颜色及行背景颜色。
(4)调整字体和位置:
鼠标单击数据窗口对象中的“关键字”,再按ctl-a,选择数据窗口对象中所有的对象,选中者四角有小黑点。
然后在属性中选择Font,将12号字改为8号字。
用鼠标拖动网格线,调整行距。
(5)调整完毕,按保存
。
保存数据窗口对象名为d_input。
(6)通过数据窗口空间将数据窗口对象加入窗口对象
(7)在窗口上插入数据窗口控件
点击菜单Insert✍Control✍DataWindow,然后在窗口空白处点击,得数据窗口控件。
通过鼠标适当调整其大小,位置
(8)插入静态文本作标题输入“森林资源二类调查数据录入”,调整字体、颜色、字号等,最后得。
检索数据
双击myexercise1,打开窗口命令
修改代码为
//ProfileForest
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="ConnectString='DSN=fmsys;UID=sa;PWD=000000'"
ConnectUsingSQLCA;
IFSQLCA.SQLCODE<>0THEN
MessageBox("","数据库链接错误,错误是:
"+SQLCA.SQLERRTEXT)
else
Open(w_main)
ENDIF
else
Open(w_main)
在w_input打开事件中
输入
//把最开始用的数据库连接参数SQLCA接过来
Dw_1.SetTransObject(SQLCA);
插入一个命令按钮
双击
按钮进入代码模式
输入代码
//检索按钮代码
Dw_1.retrieve();
(9)设置菜单代码
(10)修改数据窗口对象的更新属性
10.1双击左边列表中的d_input
10.2在菜单中选择Rows✍Updateproperties在界面中选中“AllowUpdates”,选择tabletoupdate(要更新的表名),在Updateblecolumns中选中除关键字以外的所有列,选择uniquekeycolumn为关键字字段。
(11)点击taborder按钮
,设置taborder如下
(12).在数据窗口对象中设置域检查,满足最基本的检查要求
12.1在固定小班号的ValidationExpression中双击,弹出编辑框
12.2输入isNumber(gettext()),意为检查输入的是否为数字。
然后用右边的Verify按钮检查语法是否正确。
如果正确,单击OK,回到上面的编辑界面。
12.3在同一行的ValidationMessage列中双击,在弹出对话框中输入出错提示信息“输入错误,必须为数字,请重新输入!
”
12.4字符型域检查字符串长度是否符合要求,这里以关键字为例;
仍然在数据窗口对象d_input的编辑状态,双击窗口下部“关键字”行的ValidationExpression列,出现对话框。
在对话框中输入:
Len(gettext())=9
在同一行的ValidationMessage中输入“长度必须为9位,请重新输入!
”
数值型域设置取值的上下限或范围,这里以坡向为例(坡向代码为1-9);
12.5仍然在数据窗口对象d_input的编辑状态,双击窗口下部“坡向”行的ValidationExpression列,出现对话框。
在对话框中输入:
number(gettext())>0andnumber(gettext())<=9。
3.7.录入模块实现
(1)单击new,选择PBObject标签页,在其中选定FreeForm风格
(2)选择东南县2001表中所有的列。
点击确定
(3)按OK,直至Finish,结果为
(4)调整界面上各列的位置、字体、宽度等,得以下结果
(5)设计用户录入界面
添加
intnum
num=dw_1.scrolltorow(dw_1.rowcount())
num=dw_1.insertrow(num)
dw_1.scrolltorow(num)
确定
dw_1.update();
打开
dw_1.setTransObject(SQLCA)
dw_1.Retrieve()
删除
dw_1.deleterow(0)
检索
stringsql_str
longnum
dw_1.retrieve()
sql_str="selectcount(*)fromeastsouth"
num=getnumber(sql_str)
st_2.text="东南县2011小班数="
sle_1.text=string(num)
退出
close(w_input)
3.8.查询模块实现
(1)设计用户界面如下图所示
(2)新建实例变量
(3)向第一个下拉框ddlb_1中填写代码
is_selected_colname=this.text
向第二个下拉框中填写代码
is_selected_operator=this.text
第三个单行文本sle_1中填写代码
id_value=this.text
从而捕获到了用户在这三个控件中填写的内容,并存入实例变量。
(4)当用户点击按钮“确定”的时候触发查询事件,代码如下
strings1,s2
s1=is_original_select+"Where"+is_selected_colname+is_selected_operator+string(id_value)
messagebox("",s1)
dw_1.setSQLSelect(s1)
dw_1.retrieve()
sle_records.text=string(dw_1.rowcount())
首先是建立一个查询语句。
应用刚刚读取的实例变量is_selected_colname、is_selected_operator和id_value。
合成查询语句如select*From东南县2001where细班号>4然后用dw_1.setSQLSelected(s1)执行查询,将查询结果在dw_1中显示dw_1.retrieve(),然后将记录数目填入sle_records.text,用户可以看见查到了几条记录。
3.9.统计输出模块实现
(1)设计用户界面如下图所示
(2)定义全局变量Stringcolname_tab0x[]表示每一张输到数据库的表中的字段名
Stringcoltype_tab0x[]为其字段的变量类型Intcolnum_tab0x表示字段个数,这些全局变量的定义,都是为了下面的函数中的调用提供方便。
(3)就以table03为例,首先设定建表函数create_tab03(),stringss
这里先定义一个建表语句ss,引用全局变量中的字段名,字段类型,组合起来执行,便实现了往数据库中插入表的操作。
ss="createtableTable03("+colname_tab03[1]+""+coltype_tab03[1]。
。
。
ExecuteImmediate:
ss;
returnSQLCA.SQLCODE
(4)然后是往建好的表中插入原始数据
1.定义游标C1执行查询select林种,地类,龄组,sum(小班面积),sum(活立木蓄积)from东南县2001groupby林种,地类,龄组
定义游标C2执行查询selectdistinct林种from东南县2001orderby林种
2.FetchC1Into:
foresttype(林种)[i],:
landtype(用地类型)[i],:
agegroup(龄组)[i],:
area(面积)[i],:
volume(蓄积)[i];
FetchC2Into:
ft(林种)[i];得到所有的林种
3.将获得林种按顺序填入