广州市宏正工程造价咨询有限公司 广州 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#的强大功能实现软件的核心算法和界面设计。
//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等技术设计用户界面,确保操作简便、界面美观。
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生成工具.