基于C#开发web网页管理系统模板流程-主界面统计功能完善

发布于:2024-06-12 ⋅ 阅读:(21) ⋅ 点赞:(0)

前言

紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善_c#web程序设计-CSDN博客

统计功能是管理系统很常见的功能,例如仓库管理系统要统计某时间段的出入库以整合利润情况,再例如论文管理系统要统计男女生的分数情况等等

不可否认的是其实现思路与上一篇实现的出库管理功能中的【查询】按钮的功能基本相同,都是通过编写按钮的脚本,实现select查询sql语句,然后将查询的结果通过合适的控件显示出来


一,新建tj(统计的拼音)文件夹

希望你养成这个好习惯,将不同功能的脚本分门别类的放在不同的文件夹中

创建一个【包含母版页的Web窗体】,将其命名为tjgl.aspx(统计管理)

点击添加后再弹出的【选择母版页】窗口中选择唯一一个母版页Site.Master


二,添加控件并配置控件

按具体需求添加控件并给出配置

表格的设置就不赘述了,相信看到这里的你应该都懂这些套路了

用到的控件,【DropDownList】,,【Button】,和一个【Panel

前两样都是老朋友,【Panel】的作用是方便我们能显示查询的结果

然后我们添加一些【Label】控件,来显示对应的想要的结果,你可以做一些个性化的设置,例如将利润标红显示,在属性的【Font】对字体大小进行设置,【ForeColor】设置颜色,很简单,你试试就知道了


三,DropDownList配置

(一)下拉菜单选择货品

我们希望*按货品统计*之后的下拉菜单的选项中,能够自动显示出数据库中拥有的货品,该怎么做?希望你还有印象,因为这个问题在上一篇中是完整实现过的!

为货品号这个字段的下拉式菜单添加一个新的数据源,流程和前面配置数据源时基本一致

到【配置Select语句】这个窗口时注意切换成货品表

自定义语句只需要一条查询语句,此处的查询语句读者根据自己的管理系统来决定想要查询的内容

此处采用一种“货品号和货品名绑定显示”的查询机制,因此使用了如下这条SQL语句

select hno, concat(hno, hname) as hpm from hpb

(二)下拉菜单选择年份

同理,需要只显示数据库中出现过出入库操作的年份

年份的数据源配置,其它都是一样的,主要是*自定义Select语句*

select distinct year(rk_date) as rkn from rkb union
select distinct year(ck_date) as ckn from ckb

解释一下这里的sql,分别是查询入库表*rkb*中的入库日期的年份*year(rk_date)*和出库表*ckb*中的出库日期的年份*year(ck_date)*,查询结果只要一个(即不重复,因此用distinct关键字),as关键字为查询字段重命名

最后用union关键字将两条语句的结果取并集

(三)下拉菜单选择月份

这个是最简单的,毕竟每年12月是固定的

我们选择*编辑项*

添加并修改节点的文本(这里如果想修改成具体的*一月*这种中文选项,需要在后续的脚本做格外处理)

(四)效果展示


四,所有控件脚本

在设置脚本前先添加三个【CheckBox】控件,并在它们的【Text】属性中输入一个空格(让名字为空)

打开【rkgl.aspx.cs】文件,将下面的代码复制到该文件中,即可实现所有控件的功能,实现思路见代码注释!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Odbc;        //ODBC命名空间

namespace ckgl.admin.tj {
    public partial class tjgl : System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {

        }

        protected void Button1_Click(object sender, EventArgs e) {
            OdbcConnection con = DB.Lianjie();
            con.Open();
            //这里有两天sql,sql1用于查询入库相关、sql2查询出库相关
            string sql1 = " select IFNULL(sum(hno),0) as rksl, IFNULL(sum(rk_zprice), 0) as rkje from rkb where ";  //IFNULL用于判断求和是否位null,如果是则取0,否则null会影响字符串转整数
            string sql2 = " select IFNULL(sum(hno),0) as cksl, IFNULL(sum(ck_zprice), 0) as ckje from ckb where ";
            //然后根据对应的CheckBox来决定sql要怎么查询
            if (CheckBox1.Checked == true) {//按货品统计,查询货品号
                sql1 += " hno='" + DropDownList1.Text + "' and ";
                sql2 += " hno='" + DropDownList1.Text + "' and ";
            }
            if (CheckBox2.Checked == true) {//按年份统计,查询出入库年份
                sql1 += " year(rk_date)=" + DropDownList2.Text + " and  ";
                sql2 += " year(ck_date)=" + DropDownList2.Text + " and  ";
            }
            if (CheckBox3.Checked == true) {//按月份统计,查询出入库年份
                sql1 += " month(rk_date)=" + DropDownList3.Text + " and ";
                sql2 += " month(ck_date)=" + DropDownList3.Text + " and ";
            }
            sql1 += " '1'='1' ";
            sql2 += " '1'='1' ";//依旧是复合查询的关口,需要将最后一个and关键字吞掉使sql语法正确
            OdbcCommand mycommand1 = new OdbcCommand(sql1, con);
            OdbcCommand mycommand2 = new OdbcCommand(sql2, con);
            OdbcDataReader sdr1 = mycommand1.ExecuteReader();
            OdbcDataReader sdr2 = mycommand2.ExecuteReader();
            //结果查到了,接下来提取需要显示的关键数据,以下变量分别代表——
            //入库总数-出库总数-入库总额-出库总额-库存量-总利润
            int rkzs = 0, ckzs = 0, rkze = 0, ckze = 0, kcl = 0, zlr = 0;
            if (sdr1.Read()) {
                //如果sql1查询入库相关有结果,那么将其中的入库总数和入库总额记录下来
                rkzs = Convert.ToInt32(sdr1["rksl"]);
                rkze = Convert.ToInt32(sdr1["rkje"]);
            }
            if (sdr2.Read()) {
                //如果sql2查询出库相关有结果,那么将其中的出库总数和出库总额记录下来
                ckzs = Convert.ToInt32(sdr2["cksl"]);
                ckze = Convert.ToInt32(sdr2["ckje"]);
            }
            kcl = rkzs - ckzs;//库存量 = 入库总数 - 出库总数
            zlr = ckze - rkze;//总利润 = 出库总额 - 入库总额
            //最后对相应的Label标签设置文本,即可显示出结果!
            Label1.Text = rkzs.ToString();
            Label2.Text = ckzs.ToString();
            Label3.Text = rkze.ToString();
            Label4.Text = ckze.ToString();
            Label5.Text = kcl.ToString();
            Label6.Text = zlr.ToString();
            con.Close();

        }

        protected void Button2_Click(object sender, EventArgs e) {
            //重置的常规操作,这么多篇了,相信你能明白!
            CheckBox1.Checked = false;
            CheckBox2.Checked = false;
            CheckBox3.Checked = false;
            Label1.Text = Label2.Text = Label3.Text = Label4.Text = Label5.Text = Label6.Text = "";
        }

    }
}


五,添加菜单

在母版页【Site.Master】中添加相应的出入库菜单,这一步博主偷懒一下罢~你一定会的!