简单超市管理系统(C# Winform)

要完成的功能:
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

捐赠鼓励

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

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
非常好的主题!C# WinForm 人事管理系统可以帮助公司或组织管理员工的信息、薪资、考勤和福利等方面的内容。以下是一个简单的人事管理系统的设计思路: 1. 数据库设计:创建一个包含员工信息的数据库表,可以包括姓名、性别、出生日期、职位、部门、入职日期、联系方式等字段。另外还可以创建其他相关表,如部门表、职位表等,用于提高数据的组织性和可读性。 2. 登录界面:创建一个登录界面,要求用户输入用户名和密码来验证身份。可以使用数据库中的用户表来进行身份验证。 3. 主界面:登录成功后,显示主界面,其中包含菜单栏和工具栏。菜单栏可以包括员工信息管理、薪资管理、考勤管理、福利管理等功能模块。工具栏可以放置常用操作按钮,如添加员工、删除员工、编辑员工等。 4. 员工信息管理:提供添加、编辑、删除和查询员工信息的功能。可以通过表格或列表展示员工信息,并提供查询和排序功能。当点击某个员工时,可以显示其详细信息,并允许对其进行编辑或删除操作。 5. 薪资管理:提供设置员工薪资、调整薪资和查询薪资等功能。可以根据员工的职位和级别来设定基本工资,并允许进行个别调整。同时,可以根据时间范围查询员工的薪资历史记录。 6. 考勤管理:提供员工签到、签退和请假等功能。可以记录员工每天的上班时间和下班时间,并计算出勤情况。同时,可以记录员工的请假信息,并计算请假时长。 7. 福利管理:提供设置员工福利和查询福利信息的功能。可以设定各种福利,如补贴、奖金等,并为每个员工分配对应的福利。同时,可以查询员工的福利历史记录。 以上是一个简单的人事管理系统的设计思路,你可以根据需要进行功能的扩展和细化。希望这些信息对你有所帮助!如果你有任何其他问题,欢迎继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

全栈道

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

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

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

打赏作者

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

抵扣说明:

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

余额充值