使用C#开发钢筋工程量指标检测工具软件的研究

(整期优先)网络出版时间:2024-11-22
/ 6

使用C#开发钢筋工程量指标检测工具软件的研究

董深广 郑晨君

广州市宏正工程造价咨询有限公司 广州 510663

摘要

本文旨在探讨使用C#编程语言开发一款钢筋工程量指标检测工具软件的过程、关键技术及其实用价值。开发该工具软件是为了方便钢筋工程量指标的检测,审核钢筋工程量,对钢筋工程量计量数据统一归档,方便查阅,提高工作效率。

C#作为一种强大的编程语言,具有良好的面向对象特性和丰富的库支持,为实现这一目标提供了有力的技术手段。本工具软件采用C# 作为开发语言,数据库采用 MySQL 8.4.0 Community数据库,应用Microsoft Visual Studio Community 2022 (64 位)-Current版本(17.10)作为开发环境实现。

关键词:C#编程语言MySQL数据库,C/S架构软件开发

引言

随着现代建筑业的快速发展,各类建筑的增多,使得钢筋工程量指标数据的检测和比对,对提高工作效率,快速发现错误尤为重要。钢筋工程量计算是建筑工程造价中的重要环节,其准确性直接影响到工程的投资成本及施工进度。随着计算机技术的不断进步,开发一款自动化、智能化的钢筋工程量指标大数据工具软件,已成为迫切需求。本文所研究的工具软件基于C#编程语言,结合数据库技术,实现对钢筋工程量的指标大数据保存和检测。

1.系统需求分析

1.1功能需求

在开发之前,对钢筋工程量指标检测工具软件的需求进行了详细的分析。主要包括以下几个方面:

(1)能够导入钢筋算量软件导出的工程量表格,进行构件工程量自动化分类统计。

(2)指标汇总,对计算出的构件工程量进行指标分类汇总。

(3)提供直观的用户查询界面,方便用户进行各种钢筋指标类型查找。

(4)具备数据存储和管理功能,能够保存历史数据,便于查询和对比分析。

1.2性能需求

高效性:录入、查询速度快,响应时间短。

准确性:查询结果准确,误差率低。

易用性:操作界面友好,用户容易上手。

2. 系统设计

2.1 系统架构

本系统采用C/S(客户端/服务器)架构,由客户端软件和服务器端数据库组成。客户端软件负责用户界面展示、数据输入、计算处理和结果显示等功能;服务器端数据库用于存储指标数据、返回查询结果等数据。

2.2 数据库设计

数据库设计包括数据表结构设计、索引设计等。主要数据表包括项目明细表、钢筋明细表、指标明细表、工程类别表、建筑分类表、构件名称表、指标分类表等。

2.3 关键技术

(1)编程语言:选择 C#作为主要编程语言,利用其丰富的类库和高效的运行性能。利用C#的强大功能实现软件的核心算法和界面设计。

IMG_256

//C#主窗体程序操作代码

using MySql.Data.MySqlClient;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Data.Odbc;

using static System.Windows.Forms.VisualStyles.VisualStyleElement;

(2)开发环境:使用 Visual Studio 作为集成开发环境,提供了便捷的代码编辑、调试和项目管理功能。

    public partial class gjzbmainForm : Form

    {

        MySqlDataAdapter fjxm_Sda = new MySqlDataAdapter();

        DataSet fjxm_Ds = new DataSet();

        DataTable fjxm_dt = new DataTable();

        DataSet ds1 = new DataSet();

        MySqlDataAdapter zbmx_Sda = new MySqlDataAdapter();

        DataSet zbmx_Ds = new DataSet();

        DataTable zbmx_dt;

        MySqlDataAdapter gjmx_Sda = new MySqlDataAdapter();

        DataSet gjmx_Ds = new DataSet();

        DataTable gjmx_dt;

        MySqlDataAdapter gclb_Sda = new MySqlDataAdapter();

        DataSet gclb_Ds = new DataSet();

        MySqlDataAdapter jzfl_Sda = new MySqlDataAdapter();

        DataSet jzfl_Ds = new DataSet();

        MySqlDataAdapter zbfl_Sda = new MySqlDataAdapter();

        DataSet zbfl_Ds = new DataSet();

        MySqlDataAdapter gjmc_Sda = new MySqlDataAdapter();

        DataSet gjmc_Ds = new DataSet();

        DataTable gjmc_dt = new DataTable();

        string add_B = "server=127.0.0.1;user=root;database=gjzb;port=3306;password=root";

}

(3)自动计算:导入钢筋算量软件导出的工程量表格,进行构件工程量自动化分类统计。

 foreach (DataRow row in zbfl_Ds.Tables[0].Rows)

{

     if (row["指标分类ID"] != null)

     {

         DataRow zbmx_row = zbmx_dt.NewRow();

         zbmx_row["指标分类ID"] = row["指标分类ID"].ToString();

         zbmx_row["指标名称"] = row["指标名称"].ToString();

         zbmx_dt.Rows.Add(zbmx_row);

     }

}

 DataRow gjmx_row = gjmx_dt.NewRow();

 MySqlConnection gjmx_Conn = new MySqlConnection(add_A);

 gjmx_Conn.Open();

 int rowCount;

 MySqlCommand gjmx_Count = new MySqlCommand("select max(工程明细ID) maxval from gjmx ", gjmx_Conn);

if (gjmx_Count.ExecuteScalar()==null)

{

     rowCount = 0;

}

else

{

     int.TryParse(gjmx_Count.ExecuteScalar().ToString(), out rowCount);

}

 gjmx_Conn.Close();

for (int i = 1; i < locatedRange_1.Rows.Length - 1; i++)

{

     gjmx_row["工程明细ID"] = rowCount + 1;

     gjmx_row["构件名称"] = locatedRange_1[i + 1, 1].Value;

     if (locatedRange_1[i + 1, 1].Value != "合计(t)")

     {

         float.TryParse(locatedRange_1[i + 1, 2].Value, out s1);

         sum += s1;

     }

     if (locatedRange_1[i + 1, 2].Value != "")

     {

         gjmx_row["钢筋重量_t"] = locatedRange_1[i + 1, 2].Value;

     }

     gjmx_dt.Rows.Add(gjmx_row);

     gjmx_row = gjmx_dt.NewRow();

     rowCount++;

}

 钢筋总重_textBox.Text = sum.ToString();

(4)数据存储:使用关系型数据库,存储工程数据。利用MySQL数据库管理系统存储和管理数据,提高数据访问效率和安全性。

 MySqlConnection gjzb_Conn1 = new MySqlConnection(add_A);

gjzb_Conn1.Open();

 DataSet fjxmDs1 = new DataSet();

 DataTable fjxmDt1 = new DataTable();

 MySqlDataAdapter fjxmSda1 = new MySqlDataAdapter();

 MySqlCommand fjxmCmd1 = new MySqlCommand("select * from fjxm where 项目ID=0", gjzb_Conn1);

fjxmSda1.SelectCommand = fjxmCmd1;

fjxmSda1.Fill(fjxmDs1);

fjxmDt1 = fjxmDs1.Tables[0];

(5)图形用户界面(GUI)设计:采用Windows Forms等技术设计用户界面,确保操作简便、界面美观。

IMG_256

3. 系统实现

3.1 数据输入与预处理

用户通过客户端软件导入钢筋工程量电子表格,自动识别构件名称和重量。

OpenFileDialog openFileDialog = new OpenFileDialog();

 openFileDialog.Title = "请选择文件";

 openFileDialog.Filter = "电子表格(*.xls)|*.xls|电子表格(*.xlsx)|*.xlsx";

 openFileDialog.FilterIndex = 1;

 openFileDialog.Multiselect = false;

float t2, ave, s1, sum = 0.0000f;

if (openFileDialog.ShowDialog() == DialogResult.OK)

{

     Workbook wb = new Workbook();

     wb.LoadFromFile(openFileDialog.FileName);

     Worksheet sheet_0 = wb.Worksheets[0];

     CellRange locatedRange_0 = sheet_0.AllocatedRange;

     Worksheet sheet_1 = wb.Worksheets[1];

     CellRange locatedRange_1 = sheet_1.AllocatedRange;

    int s = 1;

     for (int i = 0; i < locatedRange_0.Rows.Length; i++)

     {

         for (int j = 0; j < locatedRange_0.Rows[i].ColumnCount; j++)

         {

             string Str_A = locatedRange_0[i + 1, j + 1].Value;

             string Str_B = "";

             if (Str_A.Length != 0)

                 Str_B = Str_A.Substring(0, 4);

             if (Str_B == 项目名称label.Text && s == 1)

             {

                 项目名称_textBox.Text = "";

                 int L = Str_A.Length;

                 Str_B = Str_A.Substring(5, L - 5);

                 if (Str_B.Length != 0)

                     项目名称_textBox.Text = Str_B;

                 s++;

                 continue;

             }

             if (Str_B == 结构类型label.Text)

             {

                 结构类型_textBox.Text = "";

                 int L = Str_A.Length;

                 Str_B = Str_A.Substring(5, L - 5);

                 if (Str_B.Length != 0)

                     结构类型_textBox.Text = Str_B;

                 continue;

             }

             if (Str_B == 地上层数label.Text)

             {

                 地上层数_textBox.Text = "";

                 int L = Str_A.Length;

                 Str_B = Str_A.Substring(5, L - 5);

                 if (Str_B.Length != 0)

                     地上层数_textBox.Text = Str_B;

                 continue;

             }

             if (Str_B == 地下层数label.Text)

             {

                 地下层数_textBox.Text = "";

                 int L = Str_A.Length;

                 Str_B = Str_A.Substring(5, L - 5);

                 if (Str_B.Length != 0)

                     地下层数_textBox.Text = Str_B;

                 continue;

             }

             if (Str_B == "建筑面积")

             {

                 建筑面积_textBox.Text = "";

                 int L = Str_A.Length;

                 Str_B = Str_A.Substring(8, L - 8);

                 if (Str_B.Length != 0)

                     建筑面积_textBox.Text = Str_B;

                 continue;

             }

         }

     }

3.2 计算处理

系统根据输入的构件数据和预存储的指标分类,自动进行钢筋指标工程量的计算,并自动汇总指标数据。

for (int i = 1; i < locatedRange_1.Rows.Length - 1; i++)

{

    gjmx_row["工程明细ID"] = rowCount + 1;

    gjmx_row["构件名称"] = locatedRange_1[i + 1, 1].Value;

    if (locatedRange_1[i + 1, 1].Value != "合计(t)")

    {

        float.TryParse(locatedRange_1[i + 1, 2].Value, out s1);

        sum += s1;

    }

    if (locatedRange_1[i + 1, 2].Value != "")

    {

        gjmx_row["钢筋重量_t"] = locatedRange_1[i + 1, 2].Value;

    }

    gjmx_dt.Rows.Add(gjmx_row);

    gjmx_row = gjmx_dt.NewRow();

    rowCount++;

}

钢筋总重_textBox.Text = sum.ToString();

3.3 指标数据输出

系统对计算出的钢筋工程量进行指标检测,如钢筋含量、分配合理性等,并生成详细的指标明细表和钢筋构件工程量表。

f2 = 0.00f;

for (int i = 0; i < gjmx_dataGridView.RowCount; i++)

{

    gjmx_dataGridView.Rows[i].Cells["项目ID"].Value = n1;

    float.TryParse(gjmx_dataGridView.Rows[i].Cells["钢筋重量_t"].Value.ToString(), out f2);

    sum = sum + f2;

    foreach (DataRow row in gjmc_Ds.Tables[0].Rows)

    {

        if (row["构件名称"].ToString() == gjmx_dataGridView.Rows[i].Cells["构件名称"].Value.ToString())

        {

            gjmx_dataGridView.Rows[i].Cells["构件名称ID"].Value = row["构件名称ID"].ToString();

        }

    }

    if ((string)gjmx_dataGridView.Rows[i].Cells["构件名称"].Value == "")

        gjmx_dataGridView.Rows.RemoveAt(i);

}

钢筋总重_textBox.Text = sum.ToString("0.0000");

float.TryParse(钢筋总重_textBox.Text, out f2);

fjxm_dataGridView.Rows[0].Cells["钢筋总重_t"].Value = f2;

ave = (sum / f1) * 1000;

单方重量_textBox.Text = ave.ToString("0.0000");

float.TryParse(单方重量_textBox.Text, out f3);

fjxm_dataGridView.Rows[0].Cells["单方重量_kg"].Value = f3;

3.4 建立数据库连接,将工程数据和计算结果进行存储。

 DataSet zbmxDs1 = new DataSet();

 DataTable zbmxDt1 = new DataTable();

 MySqlDataAdapter zbmxSda1 = new MySqlDataAdapter();

 MySqlCommand zbmxCmd1 = new MySqlCommand("select * from zbmx where 项目ID=0", gjzb_Conn1);

zbmxSda1.SelectCommand = zbmxCmd1;

zbmxSda1.Fill(zbmxDs1);

zbmxDt1 = zbmxDs1.Tables[0];

 foreach (DataRow row in zbmx_Ds.Tables[0].Rows)

{

     DataRow zbmxRow1 = zbmxDt1.NewRow();

     zbmxRow1["指标明细ID"] = row["指标明细ID"].ToString();

     zbmxRow1["项目ID"] = row["项目ID"].ToString();

     zbmxRow1["指标分类ID"] = row["指标分类ID"].ToString();

     zbmxRow1["指标重量_t"] = row["指标重量_t"].ToString();

     zbmxDt1.Rows.Add(zbmxRow1);

}

MySqlCommandBuilder zbmxCmdbuilder1 = new MySqlCommandBuilder(zbmxSda1);

try

{

     zbmxSda1.Update(zbmxDt1);

}

catch (Exception ex)

{

     MessageBox.Show(ex.Message);

}

gjzb_Conn1.Close();

3.5 实现数据的查询、修改、删除等操作,方便用户进行数据管理和分析。

 private void 建筑工程分类信息ToolStripMenuItem_Click(object sender, EventArgs e)

{

     jzgcflForm jzgcflform = new jzgcflForm();

     jzgcflform.ShowDialog();

}

private void 钢筋指标分类信息ToolStripMenuItem_Click(object sender, EventArgs e)

{

     gjzbfl_Form gjzbfl_form = new gjzbfl_Form();

     gjzbfl_form.ShowDialog();

}

private void 钢筋数据录入ToolStripMenuItem_Click(object sender, EventArgs e)

{

     gjmx_Form gjmx_form = new gjmx_Form();

     gjmx_form.ShowDialog();

}

private void 查询项目button_Click(object sender, EventArgs e)

{

string str = '%' + 项目名称comboBox.Text + '%';

MySqlConnection gjzb_Conn = new MySqlConnection(add_A);

gjzb_Conn.Open();

MySqlCommand fjxm_Cmd = new MySqlCommand("select 项目ID,项目名称,建筑分类名称,结构类型,地上层数,地下层数,建筑面积,钢筋总重_t,单方重量_kg,项目日期" +

   " from fjxm,jzfl where fjxm.建筑分类ID=jzfl.建筑分类ID and 项目名称 like " + "'" + str + "'", gjzb_Conn);

fjxm_Sda.SelectCommand = fjxm_Cmd;

fjxm_Sda.Fill(fjxm_Ds);

fjxm_dataGridView.DataSource = fjxm_Ds.Tables[0];

fjxm_dt = fjxm_Ds.Tables[0];

gjzb_Conn.Close();

项目名称comboBox.Text = "";

}

4. 系统测试

通过测试,确保系统的功能完善、性能稳定、操作简便。

5. 结论与展望

本文研究了使用C#开发一款钢筋工程量指标检测工具软件的过程和关键技术。该工具软件能够显著提高钢筋指标计算的准确性和效率,减少错误,为数据管理提供有力支持。

参考文献

王小科,徐薇 等编著. C#从入门到精通(第二版). 北京: 清华大学出版社,2010.

Christian Nage,Bill Evje,Jay Glym等著,李铭 译. C#高级编程(中文第七版). 北京: 清华大学出版社,2010.

明日科技,王小科,王军,赵会东 编著. 十年典藏版 C#编程宝典.人民邮电出版社,201X.

Microsoft. Visual Studio IDE 文档. 微软公司,202X.

Microsoft. Windows 窗体控件. 微软公司,202X.

唐汉明 等著. 深入浅出MySQL:数据库开发、优化与管理维护(第2版). 北京:人民邮电出版社,2014.

王飞飞 等编著. MySQL数据库应用从入门到精通(第二版). 中国铁道出版社,2014.

中华人民共和国住房和城乡建设部.建设工程工程量清单计价规范(GB50500-2013).

广州市建设工程造价管理站.2019年度广州市房屋建筑工程技术经济指标.

广州市建设工程造价管理站.广州市房屋建筑工程2019年度参考造价.

文心一言、豆包 等AI生成工具.