C#简单超市管理系统含源码(.net C# web)

要完成的功能:
1.使用Asp.NET技术,完成超市商品管理系统
2.开发工具:VS2010
3.数据库:SQL Server 2008
功能模块:登录、账户管理、商品类别管理、商品信息管理
一、登录界面,在前端实现判断是否为空,如果为空则提示,不进行处理,在后台实现判断是否用户名和密码是否正确,再进行登录。

登录界面
二、登录之后进入商品管理界面。界面内,可以分类查询,检索(支持模糊查询),勾选删除,和新增功能,商品名称可以链接到商品详情界面,以及商品分类管理和用户信息管理两个超链接。

商品管理界面
三、新增界面可根据是否打折,打折价格控制打折价格是否能进行输入。
新增界面
四、商品详情页,可修改页面内的数据。

商品详情

商品详情页---这个地方再做的时候不传name,传ID
五、商品分类管理界面,通过Ajax判断类名是否存在,若无此类名再进行添加,如果类名已经存在,弹窗报错。
商品分类管理

商品分类管理
六、用户管理界面,跟商品管理界面功能相同。

用户管理界面







##开始动工
#####第一步:数据库的建立;

Commodity

CommoditySort

Users
######1.1 CommodityID为主键,SortID和CreateUserId为外键,都自动增长。
Commodity表

CommoditySort表
######1.2 建立关系

Commodity&CommoditySort

Commodity&Users

数据库关系图
#####第二步:项目的建立
######2.1 创建项目
新建项目
######2.2 添加应用
添加引用
######2.3 配置web.config

数据库配置
代码:

<add name="MainConn" connectionString="server=.;database=mySupermarketDemo;user=sa;pwd=0301;Max Pool Size = 512;"
      providerName="System.Data.SqlClient" />

#####第三步: 页面布局与功能的添加(登录界面)
######3.1 初步的搭建
基本布局

基本代码
知识点补充:

  • OnClientClick="return chec()"此处的return,可以直接得到是false或者true,如果是false则不进入后台执行;

使用jq获取输入框的值
var user = $(“#tbUserName”).val();

  • SqlParameter,DataSet,DbHelperSQL 注意单词拼写与大小写
  • ds.Tables[0].Rows.Count > 0,判断是否存在数据
  • Session[“UserId”] = ds.Tables[0].Rows[0][“UserId”]; 获取某行某列
  • DbHelperSQL.GetSingle(sql) != null 判断是否能获取到一条数据,此处的作用于ds.Tables[0].Rows.Count是一致的。

######3.2 添加样式和点击登录按钮的功能(这样吧,听说以后要用easyUI,现在就在这个demo上做测试吧,哈哈……算了,easyUI好丑啊……)

登录界面

不输入用户名

不输入密码

后台的用户名和密码验证

*小知识点:*top 1的用处:选出第一条记录,常与order by联合使用。如下:


当有重复数据是,可根据top后面的数字进行选择,也可以通过top 1只挑出一条记录。
######部分核心代码:
Login.aspx

<script type="text/javascript">

//        判断输入是否为空
        function checkUserInfo(){
            if($("#txtUserName").val() == ""){
                alert("请输入用户名");
                return false;
            }
            if($("#txtPassword").val() == ""){
                alert("请输入密码");
                return false;
            }
        }
    </script>

Login.aspx.cs

protected void btnLogin_Click(object sender, EventArgs e)
        {
            //编写sql语句,此处的top 1 就是选出查询的第一条记录,此处可避免查出内容相同的两条语句
            //利用参数,防止sql注入
            string sql = "SELECT TOP 1 * FROM Users  WHERE UserName = @UserName AND Password = @Password";
            //设置参数
            SqlParameter[] pms = { 
                                    new SqlParameter("@UserName",SqlDbType.NVarChar,50),
                                    new SqlParameter("@Password",SqlDbType.NVarChar,50)
                                 };
            //为参数赋值
            pms[0].Value = txtUserName.Text;
            pms[1].Value = txtPassword.Text;
            /*
             *注意:DataSet 是个数据集,可以把它当做临时数据库来看。DataTable 是DataSet临时数据库里的临时表,
             * 一个DataSet 里可以有多个DataTable,就像一个数据库里可以有多个表一样
             */
            DataSet ds = DbHelperSQL.Query(sql, pms);        //执行查询,并将数据放置在一个数据集中
            //判断表中是否存在数据,如果有数据则登录成功,如果没哟数据,则登录失败
            if (ds.Tables[0].Rows.Count > 0)
            {
                Session["UserId"] = ds.Tables[0].Rows[0]["UserID"];//为userid设置缓存,为了之后的插入数据和防止用户跳过登录直接进入
                Response.Redirect("CommodityManage.aspx");//跳转页面
            }
                //验证失败弹出提示框
            else
            {
                Response.Write("<script>alert('用户名或密码错误,请重新登录');</script>");
            }
        }

#####第四步 页面布局与功能添加(商品管理界面)
######4.1 传参方式与数据绑定方式

<asp:TemplateField HeaderText="商品名称">
                    <ItemTemplate>
                        <a target="_blank" href='CommodityEdit.aspx?cid=<%# Eval("CommodityID") %>'>
                            <%#Eval("CommodityName") %>
                        </a>
                        <%--<asp:HyperLink ID="Commodity" runat="server"  
                             NavigateUrl='<%#"CommodityEdit.aspx?cid="+DataBinder.Eval(Container.DataItem,"CommodityID")%> '>
                            <%# Eval("CommodityName") %>
                        </asp:HyperLink>--%>
                    </ItemTemplate>
                </asp:TemplateField>

######4.2 gridview 的代码----注意里面的DataKeyNames

 <%--gridview数据展示--%>
        <asp:GridView ID="gvCommodity" runat="server" AutoGenerateColumns="False" DataKeyNames="CommodityID">
            <Columns>
                <asp:TemplateField HeaderText="选择">
                    <ItemTemplate>
                        <asp:CheckBox ID="cbSelection" runat="server" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="商品名称">
                    <ItemTemplate>
                        <a target="_blank" href='CommodityEdit.aspx?cid=<%# Eval("CommodityID") %>'>
                            <%#Eval("CommodityName") %>
                        </a>
                        <%--<asp:HyperLink ID="Commodity" runat="server"  
                             NavigateUrl='<%#"CommodityEdit.aspx?cid="+DataBinder.Eval(Container.DataItem,"CommodityID")%> '>
                            <%# Eval("CommodityName") %>
                        </asp:HyperLink>--%>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="SortName" HeaderText="类别名称" />
                <asp:BoundField DataField="CommodityPrice" HeaderText="价格" />
                <asp:CheckBoxField DataField="IsDiscount" HeaderText="是否打折" ReadOnly="True" />
                <asp:BoundField HeaderText="打折价格" DataField="ReducedPrice" />
            </Columns>
        </asp:GridView>

CommosdityManage.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;
using RL.DBUtility;
using System.Text;
using System.Data.SqlClient;

namespace mySupermarketDemo
{
    public partial class CommodityManage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindDrop();
                BindData();
            }

        }
        // 绑定下拉框
        private void BindDrop()
        {
            //获取分类ID和分类名称
            string sql = "SELECT SortID,SortName FROM dbo.CommoditySort";
            DataSet ds = DbHelperSQL.Query(sql);//将查询结果放入数据集ds中
            ddlSort.DataSource = ds;//将数据源放至下拉菜单中
            DataRow drNew = ds.Tables[0].NewRow();//方法,新建一行
            drNew["SortID"] = 0;//为新增的一行添加两个属性
            drNew["SortName"] = "全部";
            ds.Tables[0].Rows.InsertAt(drNew,0);//将新增的一行添加到ds中
            ddlSort.DataTextField = "SortName";//为下拉菜单设置初始值
            ddlSort.DataValueField = "SortID";
            ddlSort.DataBind();
        }
        //绑定数据
        private void BindData()
        {
            //首先获取选定值得ID
            int typeId = int.Parse(ddlSort.SelectedValue);
            string goodName = txtCName.Text;
            //采用字符串构造器的方式,写sql语句
            StringBuilder sbSql = new StringBuilder();
            sbSql.AppendLine("SELECT c.CommodityID,c.CommodityName ,t.SortName,c.CommodityPrice,c.IsDiscount,c.ReducedPrice ");
            sbSql.AppendLine("FROM dbo.Commodity AS c");
            sbSql.AppendLine("INNER JOIN dbo.CommoditySort AS t");
            sbSql.AppendLine("ON c.SortID = t.SortID");
            sbSql.AppendLine("WHERE 1=1");
            if (typeId != 0)
            {
                sbSql.AppendLine("AND c.SortID = @SortID");
            }
            if (!string.IsNullOrEmpty(goodName))
            {
                sbSql.AppendLine("AND c.CommodityName LIKE @GoodName");
            }
            SqlParameter[] pms = {
                                     new SqlParameter("@SortID",SqlDbType.Int,4),
                                     new SqlParameter("@GoodName",SqlDbType.VarChar,50)
                                 };
            pms[0].Value = typeId;
            pms[1].Value = "%" + goodName + "%";
            DataSet ds = DbHelperSQL.Query(sbSql.ToString(), pms);
            gvCommodity.DataSource = ds;
            gvCommodity.DataBind();
        
        }
        //触发搜索按钮事件
        protected void btnSearch_Click(object sender, EventArgs e)
        {
            BindData();
        }
        //触发删除按钮事件
        protected void btnDelete_Click(object sender, EventArgs e)
        {
            StringBuilder sbIds = new StringBuilder();
            //获取gridview里的checkbox是否被选中
            foreach (GridViewRow gvr in gvCommodity.Rows)
            {
                CheckBox cbSelect = gvr.FindControl("cbSelection") as CheckBox;
                if (cbSelect.Checked)
                {
                    sbIds.Append(gvCommodity.DataKeys[gvr.RowIndex]["CommodityID"] + ",");
                }
            }
            //todo Delete From Table Where ID IN (1,2,3,4..)
            sbIds.Remove(sbIds.Length-1,1);//移除最后一个逗号
            //判断选中了一个,还是选中了多个进行删除
            if (sbIds.Length - 1 > 1)
            {
                sbIds.Insert(0, "DELETE FROM dbo.Commodity WHERE CommodityID in (");
                sbIds.Insert(sbIds.Length,")");
            }
            else
            {
                sbIds.Insert(0, "DELETE FROM dbo.Commodity WHERE CommodityID = ");
            }
            DbHelperSQL.ExecuteSql(sbIds.ToString());
            Response.Write("<script>alert('删除成功');</script>");
            Response.Redirect("CommodityManage.aspx");
        }
    }
}

#####第五步:页面布局与功能添加(商品添加与商品信息修改界面)
注意这段代码:

 private int cId = 0;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString.AllKeys.Contains("cid"))
            {
                cId = int.Parse(Request.QueryString["cid"]);
            }
            if (!IsPostBack)
            {
                BindDrop();
                if (cId != 0)
                {
                    ShowInfo(cId);
                }
            }
        }

先定义一下私有变量,再获取参数,因为系统默认当没有参数传入时,参数为0;
######第六步:页面布局与功能添加(商品分类管理与用户管理,使用ajax验证是否已经存在)
前端代码:

<script  language="javascript" type="text/javascript">
        $(function () {
            $("#btnAdd").click(function () { //点击事件
                var name = $("#txtName").val();
                var password = $("#txtPassword").val();
                $.ajax({
                    url: "UsersManageHandler.ashx",
                    type: "POST",
                    data: { name: name, password: password },
                    success: function (data) {
                        if (data != '') {
                            alert(data);
                        } else {
                            location.reload();
                        }
                    }

                }

                );
            });
        });
        
    </script>

后台代码:

 public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.ContentType = "text/plain";
            //获取用户名
            string name = context.Request["name"];
            string password = context.Request["password"];
            //sql代码
            string sql = "SELECT UserID,Password FROM Users where UserName = @name";
            SqlParameter[] pms = {
                                   new SqlParameter("@name",SqlDbType.NVarChar,50)
                                 };
            pms[0].Value = name;
            DataSet ds = DbHelperSQL.Query(sql, pms);//执行sql语句,并利用DataSet将数据填充到本地内存中
            int myInt = Convert.ToInt32(ds.Tables[0].Rows.Count);
            //判断是否符合条件
            if (myInt > 0 || (name == null || name.Length == 0))
            {
                context.Response.Write("请检查输入是否规范");
            }
            else
            {
                string sqlMyInsert = "INSERT INTO Users(UserName,Password) values (@UserName,@Password);";
                SqlParameter[] pmsMyInsert = { 
                                        new SqlParameter("@UserName",SqlDbType.NVarChar,50),
                                        new SqlParameter("@Password",SqlDbType.NVarChar,50)
                                     };
                pmsMyInsert[0].Value = name;
                pmsMyInsert[1].Value = password;
                DbHelperSQL.ExecuteSql(sqlMyInsert, pmsMyInsert);

            }
        }

效果展示:

关于我

  • 一个推崇全栈开发的前端开发人员

  • 微信: itrzzh

  • 公众号:全栈道

  • 个人网站:https://www.iotzzh.com

  • 知识星球:全栈道

  • B站:https://space.bilibili.com/285025688

  • 抖音:全栈道

  • github:https://github.com/iotzzh

  • gitee: https://gitee.com/iotzzh

捐赠鼓励

开源不易,如果《全栈道》对你有些帮助,可以请作者喝杯咖啡,算是对开源做出的一点点鼓励吧!

  • 62
    点赞
  • 247
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值