C#简单超市管理系统

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

C#简单超市管理系统_第1张图片
登录界面

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

C#简单超市管理系统_第2张图片
商品管理界面

三、新增界面可根据是否打折,打折价格控制打折价格是否能进行输入。


C#简单超市管理系统_第3张图片
新增界面

四、商品详情页,可修改页面内的数据。

C#简单超市管理系统_第4张图片
商品详情
2789632-216c87d4b41c9cf4.png
商品详情页---这个地方再做的时候不传name,传ID

五、商品分类管理界面,通过Ajax判断类名是否存在,若无此类名再进行添加,如果类名已经存在,弹窗报错。


C#简单超市管理系统_第5张图片
商品分类管理
C#简单超市管理系统_第6张图片
商品分类管理

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

C#简单超市管理系统_第7张图片
用户管理界面






开始动工

第一步:数据库的建立;
C#简单超市管理系统_第8张图片
Commodity
C#简单超市管理系统_第9张图片
CommoditySort
C#简单超市管理系统_第10张图片
Users
1.1 CommodityID为主键,SortID和CreateUserId为外键,都自动增长。
C#简单超市管理系统_第11张图片
Commodity表
C#简单超市管理系统_第12张图片
CommoditySort表
1.2 建立关系
C#简单超市管理系统_第13张图片
Commodity&CommoditySort
C#简单超市管理系统_第14张图片
Commodity&Users
C#简单超市管理系统_第15张图片
数据库关系图
第二步:项目的建立
2.1 创建项目
C#简单超市管理系统_第16张图片
新建项目
2.2 添加应用
C#简单超市管理系统_第17张图片
添加引用
2.3 配置web.config
C#简单超市管理系统_第18张图片
数据库配置

代码:


第三步: 页面布局与功能的添加(登录界面)
3.1 初步的搭建
C#简单超市管理系统_第19张图片
基本布局

C#简单超市管理系统_第20张图片
基本代码

知识点补充:

  • 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好丑啊……)
C#简单超市管理系统_第21张图片
登录界面
C#简单超市管理系统_第22张图片
不输入用户名
C#简单超市管理系统_第23张图片
不输入密码
C#简单超市管理系统_第24张图片
后台的用户名和密码验证

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

C#简单超市管理系统_第25张图片
C#简单超市管理系统_第26张图片

当有重复数据是,可根据top后面的数字进行选择,也可以通过top 1只挑出一条记录。

部分核心代码:

Login.aspx


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("");
            }
        }
第四步 页面布局与功能添加(商品管理界面)
4.1 传参方式与数据绑定方式

                    
                        
                            <%#Eval("CommodityName") %>
                        
                        <%--
                            <%# Eval("CommodityName") %>
                        --%>
                    
                
4.2 gridview 的代码----注意里面的DataKeyNames
 <%--gridview数据展示--%>
        
            
                
                    
                        
                    
                
                
                    
                        
                            <%#Eval("CommodityName") %>
                        
                        <%--
                            <%# Eval("CommodityName") %>
                        --%>
                    
                
                
                
                
                
            
        

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("");
            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验证是否已经存在)

前端代码:


后台代码:

 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);

            }
        }

效果展示:


C#简单超市管理系统_第27张图片
C#简单超市管理系统_第28张图片
2789632-3b18269684ea9294.png
公众号.png

你可能感兴趣的:(C#简单超市管理系统)