張勇 朱大明


摘 要:為改善水準測量內業數據處理、存儲、分析及共享業務,結合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
{string sql = "select HJ,QJ,SJC,LJSJC,HEHJQ,HOHJQ,k1,k2,GCZS,CZBH,JH from CLB";
SqlDataReader objReader = SQLHelper.GetReader(sql);
List
while (objReader.Read())
{ ?list.Add(new CLB()
{CZBH = objReader["CZBH"].ToString(),
···(類似代碼)JH = objReader["JH"].ToString()});}
objReader.Close();
return list;}
(2)顯示在系統界面實現主要代碼。
{ List
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.
(責任編輯:杜能鋼)