APP下载

水准测量内业数据一键式处理系统设计与实现

2019-07-08张勇朱大明

软件导刊 2019年6期
关键词:水准测量

张勇 朱大明

摘 要:为改善水准测量内业数据处理、存储、分析及共享业务,结合C#编程语言和SQL server 2008设计并实现了水准测量内业数据一键式处理系统。系统在水准测量数据一键添加、一键计算上采用基于面向对象的程序设计(OOP)实现对象添加,大大降低了系统开发难度。运行测试表明,该系统能简单、智能地实现内业数据处理,满足常规水准测量数据业务需求。

关键词:面向对象的程序设计(OOP);C#;一键式系统;水准测量;数据概算

DOI:10. 11907/rjdk. 182318

中图分类号:TP319

文献标识码:A文章编号:1672-7800(2019)006-0106-05

Abstract:With the development of computer technology,information and integration pose challenges to traditional ways of working,it is a major development trend of information measurement. Leveling of internal data processing,data storage, data processing, data analysis, data reporting, data sharing cannot be done in the traditional way. To improve the above problems, a level measurement internal data one-button processing system in combination with C# programming language and SQL server 2008 is designed and implemented. The system adds one-click data to the level measurement data and one-click calculation of the data using the OOP object to add the database, which greatly rednced the difficulty of system development. The system operation test shows that this system makes the internal industry data processing simple and intelligent, and can meet the needs of internal level measurement data internal processing.

Key Words:object oriented programming; C#; one-button system; leveling; data estimate

0 引言

計算机技术的发展推动了一键式服务,大大减少了中间环节。柳华桥[1]等基于C#编程语言开发具备数据格式转换及数据平差处理等功能的软件系统;周奕君[2]等开发了基于PDA的水准测量电子手簿,实现测量数据的自动化处理以及Pocket Access数据库应用;姜庆峰[3]等采用目前主流的编程语言Visual C++,开发了基于PDA的水准测量记簿软件并应用于实际测量作业中,证明其可靠性与正确性;臧立娟[4]等在Windows CE系统支持下,应用C#编程语言开发水准测量电子手簿,实现了水准测量记录电子化、检核自动化、信息处理实时化;杨睿[5~6]等实现了测量数据获取、分析、处理与成果生成和信息共享的一体化系统;张晓章[7]等基于Windows Mobile 技术的PDA 作为记录器,以实现水准测量内外业一体化目标。前人在一体化设计方面已有大量研究,但在数据一键式操作方面还存在不足。本文设计的一键式内业数据处理系统对内业数据处理流程进行了优化,解决了数据的数字化存储,实现了处理、分析、报表以及数据共享等一键式操作。

1 内业数据处理

1.1 系统功能需求

测绘行业从模拟测绘、数字化测绘进入信息化测绘,实现信息获取实时化、处理自动化、服务网络化及应用社会化,是测绘学科研究的方向[8]。本文结合信息化测绘及自动化测绘技术,设计了水准测量内业数据一键式处理系统,具备数据存储、数据处理、数据分析、数据报表、数据共享等功能。

1.2 系统功能模块设计

水准测量内业数据一键式处理系统结构如图1所示。系统分为系统架构、数据管理、绘图管理、数据概算、数据查询、成果报表、数据共享7个模块,每个模块又包含多个子模块,图1很清晰地表达出每个子模块的关系,同时可以看出不同模块执行不同的事务。

1.3 系统业务流程

一键式内业数据处理系统重点涉及内业数据处理,因此只对PC端系统进行设计,系统业务流程如图2所示。

2 数据库分析与设计

数据库设计包括需求分析、概念设计、逻辑设计等,根据数据库需求分析,逐步分解挖掘出系统包含的实体,设计出数据存储表格,在数据库实体间利用表格建立关系。数据库设计由SQL Server2008完成,界面及功能由C#编程语言实现。

2.1 数据库概念设计

数据处理系统E-R图如图3所示。

2.2 数据库逻辑结构设计

数据库逻辑结构设计是将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适应于某种特定数据库管理系统所支持的逻辑数据模式。将E-R模型转换为关系模型,即将实体、属性和联系转换为相应的关系模型[9]。

(1)用户Admins(登录帐号(LoginId)登录密码(LoginPwd)登录名(AdminName))。

(2)测量数据Data(测站编(CZBH)后尺读数(HCSXDS)前尺读数(QCSXDS)方向与测尺(FXYCH)红面读数(HOMDS)黑面读数(HEMDS))。

(3)计算数据CLB(后距(HJ)前距(QJ)视距差(SJC)视距累计差(LJSJC)黑面后减前(HEHJQ) 红面后减前(HOHJQ)K+黑减红/基+K-减辅(k1)K+黑减红/基+K-减辅(k2) 高差中数(GCZS)测站名(CZBH)检核(JH))。

(4)高程GCB (测站编号(CZBH)高差数据(GCSJ)高程值(GCZ))。

(5)高差GCHAB(测站编号(CZBH)高差值(GCZ))。

(6)表头BT(测站编号(CZB)测量人员姓名(CLRY)计算人员姓名(JSRY)记录人员姓名(JLRY)日期(RIQI))。

3 系统实现

3.1 数据库实现

(1)用户登录验证表(Admins)(表1)用于存储用户登录验证信息,方便在登录系统时比对用户信息进行验证,保证系统安全。

(2)测量数据表(Data)(表2)用于存储水准测量外业产生的数据,对外业水准测量数据进行快速且无差异存储。

(3)数据计算表(CLB)(表3)用于存储一键计算产生的数据,对概算过程中产生的数据进行存储,同时为后续数据分析提供数据。

(4)高程表(GCB)(表4)用于存储计算产生的高程。

(5)高差表(GCHAB)(表5)用于存储计算产生的高差信息。

(6)表头(BT)(表6)为测量人员基本数据,为报表打印提供表头数据。

3.2 系统功能实现

3.2.1 数据库访问设计

(1)主要代码如下:

privat static stringconnString=ConfigurationManager.ConnectionStrings["connString"]. ToString();

(2)系统配置文件主要代码:

3.2.2 对数据库数据进行增、删、查、改代码

public static int Update(string sql)/GetSingleResult(string sql)/GetReader(string sql)//执行更新/单一结果/结果集

{ SqlConnection conn = new SqlConnection(connString);

SqlCommand cmd = new SqlCommand(sql, conn);

try{ conn.Open();

(1)int result =cmd.ExecuteNonQuery();//执行更新数据操作

(2)object result = cmd.ExecuteScalar();//获取单一结果查询

(3) return cmd.ExecuteReader(CommandBehavior.CloseConnection);//返回一个结果集的查询:

return result;}

catch (Exception ex)

{ throw ex;//写入系统日志}

finally{ conn.Close();}}

3.2.3 用戶登录设计

当用户提交认证后,将输入的数据与数据库中用户表信息数据进行比较,正确则进入主界面,否则弹出提示。主要代码如下:

private void btnLogin_Click(object sender, EventArgs e)

{if (this.txtLoginPwd.Text.Trim().Length==0)//数据验证示例

{MessageBox.Show(“请输入登录密码!”, “登录提示”);return;}

Admin objAdmin = new Admin()//封装用户信息到用户对象

{ LoginId = Convert.ToInt32(this.txtLoginId.Text.Trim()),LoginPwd = this.txtLoginPwd.Text.Trim() };

try {objAdmin = objAdminService.AdminLogin(objAdmin);//提交用户信息

if (objAdmin == null){ MessageBox.Show(“登录账号或密码错误!”,“登录提示”);}

else{ Program.currentAdmin=objAdmin;//保存用户对象

this.DialogResult=DialogResult.OK;//设置登录成功信息提示

this.Close();}}

catch (Exception ex){MessageBox.Show(ex.Message,“登录失败!”);}}

3.2.4 数据管理实现

此模块包含添加数据、测量数据管理两个子模块。添加数据模块子模块用于添加一二等和三四等水准测量数据,且将数据一键提交给数据库。测量数据管理子模块,通过访问数据库将测量数据展示在系统界面中,且本模块可以对数据库中的数据进行修改、删除、查询、排序等操作,以保证输入数据正确有效。数据添加时本模块采用基于OOP实现对象的一键提交,对数据验证后进行测量基本信息的封装,最后提交存储。主要代码如下:

(1)定義一个DataService类用于添加数据对象。

public class DataService

{public int AddData(Data objData)

{ string sql = “insert into Data(CZBH,HCSXDS,QCSXDS,FXYCH,HOMDS,HEMDS)”;

sql += "values('{0}',{1},'{2}','{3}','{4}',{5})";

sql = string.Format(sql, objData.CZBH,objData.HCSXDS, objData.QCSXDS, objData.FXYCH, objData.HOMDS, objData.HEMDS);

try

{return SQLHelper.Update(sql); }

catch (Exception ex)

{throw new Exception(“保存数据出现问题!” + ex.Message); } }

(2) 数据验证、封装对象、提交对象实现。

private void Add_Click(object sender, EventArgs e)

{

//数据验证

if (this.txtBianHao.Text.Trim().Length == 0)

{ MessageBox.Show(“请填写测站编号”, “验证提示”);

this.txtBianHao.Focus();

return; }(省略部分类似代码)

//封装对象

Data objData = new Data()

{ CZBH = this.txtBianHao.Text.Trim(),

···(类似代码)HEMDS = this.txtfzfh.Text.Trim(),};

//提交对象

try {int result = objDataService.AddData(objData);

if (result == 1){DialogResult dresult = MessageBox.Show(“数据添加成功!继续添加么?”, “添加询问”,MessageBoxButtons.OKCancel,MessageBoxIcon.Question);}

Else MessageBox.Show(“添加失败!”, “添加提示”);}

catch(Exception ex)

{MessageBox.Show(ex.Message,“提示”,MessageBoxButtons.OK,MessageBoxIcon.Error);}}}

3.2.5 绘图管理模块实现

绘图子模块用于绘制图形、图形修改、图形一键提交,可视化表示站点关系。

3.2.6 数据概算模块实现

此模块包含三大模块,分别为一二等数据(基础数据)概算模块、三四等数据(基础数据)概算模块、总概算模块。一二等数据(基础数据)概算子模块用于对一二等数据的计算,计算出后视距、前视距、前后视距差、前后视距累计差、高差、平均高差等基础数据,同时一键计算且提交数据库;三四等数据(基础数据)概算模块用于对三四等数据的计算,计算出后视距、前视距、前后视距差、前后视距累计差、高差、平均高差等基础数据,最后提交数据库;总概算模块用于对前两个子模块提交的数据进行概算,计算出各个测站改正、闭合差及检验平差结果的正确性,一键提交数据库为报表打印提供数据准备。

(1)三四等数据计算核心代码。

{this.textBox5.Text=(int.Parse(this.textBox9.Text)*100-int.Parse(this.textBox4.Text)*100).ToString();//后视距      this.textBox7.Text=(int.Parse(this.textBox2.Text)*100-int.Parse(this.textBox3.Text)*100).ToString();// 前视距 ···(类似代码)依次算出前后视距差、前后视距累计差、高差、平均高差等基础数据}

(2)计算数据一键提交数据库。将数据提交数据库存储,此处代码与数据管理中数据添加近似,此处省略。

3.2.7 数据查询模块实现

此模块包含查询与分析、测量数据查错两个子模块。其中查询与分析模块用于数据的查询、数据检核分析、不合格数据的修改、删除等;测量数据查错子模块用于对不合格数据的删除、修改及各类查错(前距查错、后距查错、视距查错、累计视距查错、检核查错)。数据查询模块难点在于数据从数据库获取并显示于系统界面,主要功能实现代码如下:

(1)定义一个类用于数据加载。

public List GetCLB(string czm)

{string sql = "select HJ,QJ,SJC,LJSJC,HEHJQ,HOHJQ,k1,k2,GCZS,CZBH,JH from CLB";

SqlDataReader objReader = SQLHelper.GetReader(sql);

List list = new List();

while (objReader.Read())

{  list.Add(new CLB()

{CZBH = objReader["CZBH"].ToString(),

···(类似代码)JH = objReader["JH"].ToString()});}

objReader.Close();

return list;}

(2)显示在系统界面实现主要代码。

{ List list = objCLBService.GetCLB(null);

this.dgv1.AutoGenerateColumns=false;//禁止生成不需要的列

this.dgv1.DataSource = objCLBService.GetCLB(null); }

3.2.8 成果报表模块

此模块包含打印高程成果表、打印数据提交表两大子模块。其中打印高程成果表子模块用于加载高程数据,同时一键打印生成高程报表;打印数据提交表子模块,访问数据库显示所有基础数据及平差数据,选择所需数据后点击一键报表打印生成数据提交表,实现示例如图4所示,代码如下:

(1)定义一个打印类。

public void ExecutePrint(Data objData)

{Microsoft.Office.Interop.Excel.Application excelApp=new Application();//定义一个Excel工作簿

string excelBookPath = Environment.CurrentDirectory+"\\tjb.xlsx";//获取已经创建好的工作簿路径

excelApp.Workbooks.Add(excelBookPath);//将现有工作簿加入已经定义的工作薄集合

Worksheet objSheet = (Worksheet)excelApp.Worksheets[1];//获取第一个工作簿

objSheet.Cells[10, 1] = objData.CZBH;···(类似代码); //在当前的Excel中写入数据(一行数据报表示例)

excelApp.Visible = true;excelApp.Sheets.PrintPreview(true);//打印浏览

excelApp.Quit(); excelApp = null;//释放对象}

(2)打印。

private void PrintTJB_Click(object sender, EventArgs e)

{if(this.dataGridView1.RowCount==0)

{ MessageBox.Show(“没有打印数据”, “打印提示”);

return;}//数据验证

StringCZBH=this.dataGridView1.CurrentRow.Cells["CZBH"].Value.ToString();Data objData = objDataService.GetDataByCZBH(CZBH);//获取要打印数据对象

ExcelPrint.Excelprint1 objPrint=new ExcelPrint.Excelprint1();

objPrint.ExecutePrint(objData);}//调用Excel模板实现打印

3.2.9 数据共享模块

此模块用于对系统用户的添加,实现数据的无差别访问及无差别共享,只要拥有本系统的使用权限就可对数据库内数据实时访问,同时可对数据进行增、删、查、改。

4 软件开发

4.1 系统运行环境

水准测量内业处理一键式系统运行环境:操作系统Windows2007;环境支持:Microsoft.NET Framework4.0或以上版本,Microsoft Excel 2003或以上。

4.2 系统主界面

系统主界面如图5所示。

5 结语

水准测量内业处理一键式系统实现数据纸质存储转为数字化存储,解决了纸质数据不宜保存、易丢失的问题。传统水准测量方式获得的数据在共享时存在滞后问题,本系统用SQL Server 2008实现数据存储,只需拥有本系统的使用权限即可实时对数据进行增、删、查、改,不受时间和空间限制。现有水准测量内业处理系统在进行内业数据处理时,需要对内业处理步骤进行详细划分,分块进行数据处理。本系统将处理步骤优化,数据加载、数据计算、数据存储、数据分析、数据报表打印、数据共享都设计成一键式,实现了一键出结果的智能化内业处理。基于OOP实现对象的添加,使程序设计与实现更加简单。通过对三(四)等符合水准路线进行一键式系统测试,表明系统达到了智能化、信息化、便捷化,以及稳定、快捷、适用、高效的目标。

参考文献:

[1] 柳华桥,梅连辉. 基于C#的数字水准仪数据处理系统开发研究[J]. 测绘地理信息,2014,39(1):60-63.

[2] 周奕君,童小华. 基于掌上电脑(PDA)的水准测量电子手簿研究与关键技术开发[J]. 测绘与空间地理信息,2008,31(1):17-20.

[3] 姜庆峰,程喆,卢群. 基于PDA的水准测量电子记簿软件设计与实现[J]. 测绘技术装备,2016(3):90-92.

[4] 臧立娟,李俊,张元元. 水准测量电子手簿设计与实现[J]. 实验室科学,2012,15(5):56-58.

[5] 杨睿,尹晖. Smart Survey水准测量一体化系统设计与开发[J]. 测绘工程,2009 (6):49-52.

[6] 杨睿. 徕卡DNA水准仪串口通信及水准测量一体化系统[J]. 测绘信息与工程,2009,34(3):14-15.

[7] 张晓章,郑岘,喻成,等. 基于Android手机和PC平台的水准测量内外业一体化系统开发[J]. 城市勘测,2017(2):137-139.

[8] 周星,乔朝飞,周德军,等. 信息化测绘关键技术预测[J]. 测绘科学,2008, 33(4):68-69.

[9] 聂松,刘英. 基于C#的企业人事管理系统设计与实现[J]. 软件导刊,2018(1):126-128.

[10] 石玉芳,卜耀华. 数据库应用技术[M]. 北京:清华大学出版社,2015.

[11] 罗志清. 测量学[M]. 昆明:云南大学出版社,2010.

[12] 郭基凤,高亮,韩玉民,等. 基于C#的管理信息系统开发[M]. 第2版. 北京:清华大学出版社,2017.

[13] 杨剑光. 基于C#的企业人事管理系统的设计与实现[D]. 西安: 西安电子科技大学,2013.

[14] 王海城. 水准测量内外业PDA一体化系统开发[C]. 中国水力发电工程学会六届二次理事会暨学术研讨会,2008:62-64.

(責任编辑:杜能钢)

猜你喜欢

水准测量
三四等水准测量教学的测站图示法
浅析建筑物沉降观测方法
水准测量在高层沉降观测中的应用思考
SDCORS高程代替等级水准测量的研究
全站仪进行水准测量的可行性分析
城市桥梁工程跨河水准测量的方法
大学测量学教材中水准测量原理的改进