C# 费用计算器(源码) 可计算项目材料数量,材料所需费用,所有材料总价,其他费用,利润金额等...

原创 小道  2018-11-28 23:00:00  阅读 344 次 评论 0 条
摘要:

制作本软件初衷:做本软件开始主要是为了计算 施工 项目资金减去所需的材料成本和人工成本是否有利润。软件部分使用动态创建控件。GroupBox控件限制在最多创建9个。PS:另一种方法可以先将界面调整完成,在通过使用GroupBox控件的 Visible 属性 隐藏控件。添加新材料 可以将控件显示。(具体没测试。)主界面:总平方数:这里输入施工总平方数,后期用于计算 材料所需数量。预支付金:这里可以输入 开发商支付 金额,后期用于减去成本总金额,得出利润值。新建计算 按钮:新建一个新的项目计算器。读

制作本软件初衷:做本软件开始主要是为了计算 施工 项目资金减去所需的材料成本和人工成本是否有利润。

软件部分使用动态创建控件。GroupBox控件限制在最多创建9个。

PS:另一种方法可以先将界面调整完成,在通过使用GroupBox控件的 Visible 属性 隐藏控件。添加新材料 可以将控件显示。(具体没测试。)

主界面:

总平方数:这里输入施工总平方数,后期用于计算 材料所需数量。

预支付金:这里可以输入 开发商支付 金额,后期用于减去成本总金额,得出利润值。


新建计算 按钮:新建一个新的项目计算器。

读取数据 按钮:用于读取以前保存的数据。


计算器界面:

总平方数:显示主界面 总平方数 数据,无法修改。

预支付金:显示主界面 预支付金 数据,无法修改。

总需金额:显示所有材料和其他费用的总和,无法修改。

其他费用:显示其他所需费用,用户输入。

费用说明:显示其他费用信息说明,用户输入。

利润金额:显示预支付金减去总需金额的值,无法修改。


需要材料-GroupBox 控件

材料名称:显示材料名称,用户输入。

单捆平方:显示单个产品可以使用多少平方,用户必须输入。

需要数量:显示 总平方/单捆平方 无法修改。

材料单价:显示产品单价,用户必须输入。

材料总价:显示 需要数量*产品单价 ,无法修改。

其他说明:显示材料其他说明,用户输入。


计算金额 按钮:用于计算 材料总价,总需金额,利润金额。

添加材料 按钮:用于添加新的材料。

保存数据 按钮:用于保存数据,以备下次读取使用。

返回首页 按钮:用于返回主界面。


以下为部分代码:

动态创建GroupBox代码:

        void CreateGBox(string text)//创建 GroupBox 控件
        {
            #region 创建 GroupBox 控件
            GroupBox Gbox = new GroupBox();//实例化

            Gbox.Name = "GBox" + GBoxN;//命名  比如:GBox0、GBox1、GBox2.....  后面需要此名字 获取 实例控件
            Gbox.Text = text + "-" + (GBoxN + 1);//标题
            Gbox.Width = 200;//宽度
            Gbox.Height = 200;//高度
            if (GBoxN < 3)//判断 GroupBox 控件 数量
            {
                int row = GBoxN / 3;
                Gbox.Left = GBoxN * 200 + 10;//设置 表示控件左边缘与其容器的工作区左边缘之间的距离(以像素为单位)
                Gbox.Top = row * 200 + 120; //设置 表示控件下边缘与其容器的工作区上边缘之间的距离(以像素为单位)。
            }
            else if (GBoxN < 6)
            {
                int list = GBoxN - 3;
                int row = GBoxN / 3;
                Gbox.Left = list * 200 + 10;
                Gbox.Top = row * 200 + 120;
                this.Width = 635;
                this.Height = 570;
            }
            else if (GBoxN < 9)
            {
                int list = GBoxN - 6;
                int row = GBoxN / 3;
                Gbox.Left = list * 200 + 10;
                Gbox.Top = row * 200 + 120;
                this.Width = 635;
                this.Height = 770;
            }
            else
            {
                MessageBox.Show("最多只能创建9个材料.", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);//提示
                return;//返回
            }

            Controls.Add(Gbox);//将 GroupBox 控件 添加到窗体上
            #endregion

            CreateControls(Gbox);//调用 创建控件(标签和文本框) 方法
            GBoxN++;//每创建一个 GroupBox 控件 自增1
        }


动态创建 标签 和 文本框:

        void CreateControls(GroupBox gBox)//创建 标签和文本框
        {
            for (int i = 0; i < 6; i++)
            {
                #region 创建标签
                Label LB = new Label();//实例化
                LB.Name = "LB" + GBoxN + i;//命名
                switch (i)//判断
                {
                    case 0:
                        LB.Text = "材料名称:";
                        break;
                    case 1:
                        LB.Text = "单捆平方:";
                        break;
                    case 2:
                        LB.Text = "需要数量:";
                        break;
                    case 3:
                        LB.Text = "材料单价:";
                        break;
                    case 4:
                        LB.Text = "材料总价:";
                        break;
                    case 5:
                        LB.Text = "其他说明:";
                        break;
                }

                LB.Width = 70;//宽
                LB.Height = 12;//高
                LB.Left = 20;
                LB.Top = i * 30 + 20;
                gBox.Controls.Add(LB);//添加到 GroupBox 控件
                #endregion

                #region 创建文本框
                TextBox Txt = new TextBox();//实例化
                Txt.Name = "T" + GBoxN + i;//命名 比如 T00、T01、T10、T21...(T后面第一个数可以判断是哪个GroupBox 控件,第二个数判断是第几个文本框)  后面需要 获取实例控件
                Txt.Width = 100;//宽
                Txt.Height = 12;//高
                Txt.Left = 90;
                Txt.Top = i * 30 + 16;
                if (i == 0)
                {
                    Txt.Text = "材料" + (GBoxN + 1);
                }
                if (i == 2 || i == 4)
                {
                    Txt.ReadOnly = true;
                }
                if (i == 1 || i == 3)
                {
                    Txt.BackColor = Color.Gold;
                }
                gBox.Controls.Add(Txt);//添加到 GroupBox 控件
                #endregion
            }
        }


保存数据代码:

        void Save()//整理数据
        {
            string data = "本文件为=费用计算器数据保存文件,请勿修改.\r\n";//声明一个字符串变量 用于最后写入文本文档
            data += "GBoxN=" + (GBoxN - 1) + "\r\n";// GBoxN 数据.
            data += "总平方数=" + txtSum.Text + "\r\n"; //总平方数据
            data += "预支付金=" + txtPay.Text + "\r\n";//预支付金
            data += "其他费用=" + txtOther.Text + "\r\n";//其他费用
            data += "费用说明=" + txtExplain.Text + "\r\n";//费用说明
            for (int i = 0; i <= (GBoxN - 1); i++)
            {
                GroupBox GB = (GroupBox)Controls["GBox" + i];
                TextBox TxtB0 = (TextBox)GB.Controls["T" + i + "0"];
                TextBox TxtB1 = (TextBox)GB.Controls["T" + i + "1"];
                TextBox TxtB3 = (TextBox)GB.Controls["T" + i + "3"];
                TextBox TxtB5 = (TextBox)GB.Controls["T" + i + "5"];
                data += "[" + GB.Text + "=数据]\r\n";
                data += "材料名称" + i + "=" + TxtB0.Text + "\r\n";//材料名称
                data += "单捆平方" + i + "=" + TxtB1.Text + "\r\n";//单捆平方
                data += "材料单价" + i + "=" + TxtB3.Text + "\r\n";//材料单价
                data += "其他说明" + i + "=" + TxtB5.Text + "\r\n";//其他说明
            }

            CreateSave(data);//调用方法
        }
        void CreateSave(string data)//将数据写入文本文档
        {
            using (SaveFileDialog SF = new SaveFileDialog())//实例化
            {
                SF.Title = "保存数据";
                SF.Filter = "文本文档(*.txt)|*.txt";
                SF.DefaultExt = "txt";
                SF.AddExtension = true;
                SF.InitialDirectory = Application.StartupPath;//保存地址默认打开为当前软件所在目录
                SF.RestoreDirectory = true;
                SF.FileName = "数据保存"+DateTime.Now.ToString("yyyyMMddHHmmss");
                if (SF.ShowDialog() != DialogResult.OK)
                {
                    MessageBox.Show("请确定数据保存位置和文件.", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                using (StreamWriter sw = new StreamWriter(SF.FileName))
                {
                    sw.Write(data);//将 字符串内容 写入文本文档
                }
            }
            MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }


读取数据代码:

        void OpenData()//读取文本文档
        {
            using (FileStream FS = File.OpenRead(path))//实例化
            {
                using (StreamReader sr = new StreamReader(FS))
                {
                    int GBoxNum = -1;//声明变量
                    int countline = 0;//用于统计错误行号
                    int errorcount = 0;//用于统计最后错误数量
                    string line = null;//声明变量
                    while ((line = sr.ReadLine()) != null)//判断读取的行是否为空。
                    {
                        countline++;
                        string[] str = line.Split(new char[] { '=' });//按=进行分割,存入 数组中
                        if (str.Length < 2)//判断数组大小是否小于2
                        {
                            errorcount++;
                            if (MessageBox.Show("第 [" + countline + "] 行的 [" + str[0] + "] 部分数据已损坏,未加载成功.\r\n是否跳过本条数据继续加载?", "数据错误", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.No)//判断是否单击了 提示框的 No 按钮
                            {
                                System.Environment.Exit(0);//强制关闭所有窗体
                            }
                            continue;//结束本次循环
                        }
                        #region 用于判断输出基本信息
                        switch (str[0])//判断读取数据的 第一个元素的值
                        {
                            case "GBoxN":
                                GBoxNum = Convert.ToInt32(str[1]);//转换成整型
                                if (GBoxNum > 9 || GBoxNum < 0)//判断数量大小
                                {
                                    MessageBox.Show("数据错误,已无法使用.", "数据错误", MessageBoxButtons.OK, MessageBoxIcon.Error);//提示
                                    return;
                                }
                                for (int i = 0; i <= GBoxNum; i++)//根据 GBoxNum 值 创建GroupBox 控件
                                {
                                    CreateGBox("需要材料");
                                }
                                break;
                            case "总平方数":
                                txtSum.Text = str[1];//总平方数
                                break;
                            case "预支付金":
                                txtPay.Text = str[1];//预支付金
                                break;
                            case "其他费用":
                                txtOther.Text = str[1];//其他费用
                                break;
                            case "费用说明":
                                txtExplain.Text = str[1];//费用说明
                                break;
                        }
                        #endregion

                        #region 用于循环输出 GroupBox 控件上的 文本框的值
                        for (int i = 0; i <= GBoxNum; i++)//循环
                        {
                            GroupBox GB = (GroupBox)Controls["GBox" + i];
                            TextBox TxtB0 = (TextBox)GB.Controls["T" + i + "0"];
                            TextBox TxtB1 = (TextBox)GB.Controls["T" + i + "1"];
                            TextBox TxtB3 = (TextBox)GB.Controls["T" + i + "3"];
                            TextBox TxtB5 = (TextBox)GB.Controls["T" + i + "5"];

                            if (str[0] == ("材料名称" + i))
                            {
                                TxtB0.Text = str[1];//材料名称
                            }
                            else if (str[0] == ("单捆平方" + i))
                            {
                                TxtB1.Text = str[1];//单捆平方
                            }
                            else if (str[0] == ("材料单价" + i))
                            {
                                TxtB3.Text = str[1];//材料单价
                            }
                            else if (str[0] == ("其他说明" + i))
                            {
                                TxtB5.Text = str[1];//其他说明
                            }
                        }
                        #endregion
                    }
                    if (errorcount == 0)
                    {
                        MessageBox.Show("数据已加载完成.", "完成加载", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show("数据已加载.其中有 " + errorcount +" 行错误.", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
        }


软件截图:

image.pngimage.pngimage.pngimage.pngimage.pngimage.png


在使用中可能会有未知BUG,如有发现希望能留言给我。



费用计算器来源:本站
已经过安全软件检测无毒,请您放心下载。
 



如需本软件完整源码请留言!仅限学习交流使用!


本文地址:https://daobk.com/post/124.html
版权声明:本文为原创文章,版权归 小道 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?