天天看点

南风超市管理系统

超市管理系统``

南风超市管理系统

制作成员:丁超,郭盛传,蒋东玲,徐家尧

我们是湖南工程职业技术学院的学生,改项目为大一阶段末项目答辩项目

本项目主要分为三大模块,登录注册页面,前台销售和积分兑换,后台人员管理

1.登入注册界面

本界面可实现管理员和收银员的登录,以及收银员的注册(PS:管理员只能数据库中自己添加)

南风超市管理系统

下面为收银员界面的展示

收银员登入成功后进行图片验证

南风超市管理系统

(登入成功后拖拽图片成功即可进入主界面)

实现登录部分代码展示如下

public void Button1_Click(object sender, EventArgs e)
        {
            //定义并储存用户名及密码
            string name = textBox1.Text.Trim();
            string passward = textBox2.Text.Trim();
            //链接数据库
            string password = textBox2.Text.Trim();
            if (comboBox1.Text=="")
            {
       

     MessageBox.Show("请输入登录方式");
        }
        else if (name==""||passward=="")
        {
            MessageBox.Show("账号密码不能为空","提示");
        }
        else if (comboBox1.Text == "收银员")
        {
            string  connstring = "server=.;database=commodity;user=sa;pwd=123456";
            ds = DBHelper.GetDataSet(sql);
            int a = ds.Tables[0].Rows.Count;
            //跳出图片验证,隐藏按钮
            if (a>0)
            {
                UserNamecs.UserName = textBox1.Text;
                panel1.Show();
                label5.Show();
                button1.Hide();
                button2.Hide();
                comboBox1.Hide();
                textBox1.Hide();
                textBox2.Hide();
            }
            else
            {
                MessageBox.Show("用户的账号密码不正确,请重新输入!", "提示");
            }
        }
           

//图片验证思路

两控件

panel 和picturebox

使用PS进行关键部分抠图,裁剪

对裁剪图片放入picturebox,被裁图片放入panel中,拖动pictbox到panel中指定位置区间实现验证成功,并跳转

关键代码如下

bool isMouseDown = false;
        System.Drawing.Point p1 = new System.Drawing.Point();
        System.Drawing.Point p2 = new System.Drawing.Point();
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            isMouseDown = true;
            p1 = PointToClient(Control.MousePosition);//记录鼠标坐标
            p2 = pictureBox1.Location;                //记录图片坐标
        }
        private void pictureBox1_MouseMove_1(object sender, MouseEventArgs e)
        {
            //鼠标坐标的相对改变值
            int a = PointToClient(Control.MousePosition).X - p1.X;
            int b = PointToClient(Control.MousePosition).Y - p1.Y;
            //图片坐标计算&赋值
            if (isMouseDown)
                pictureBox1.Location = new System.Drawing.Point(p2.X + a, p2.Y + b);//图片新的坐标 = 图片起始坐标 + 鼠标相对位移
        }
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            isMouseDown = false;
        }
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            int a = pictureBox1.Location.X;
            int b = pictureBox1.Location.Y;
            if ((a == 50 && b == 25) || (a == 51 && b == 25) || (a == 50 && b == 24) || (a == 49 && b == 25))
            {
                MessageBox.Show("成功");
                Main form2 = new Main();
                this.Hide();
                form2.ShowDialog();
                Application.Exit();
            }
        }
           
private void panel1_Paint(object sender, PaintEventArgs e)
        {
            int a = pictureBox1.Location.X;
            int b = pictureBox1.Location.Y;
            if ((a == 50 && b == 25) || (a == 51 && b == 25) || (a == 50 && b == 24) || (a == 49 && b == 25))
            {
                MessageBox.Show("成功");
                Main form2 = new Main();
                this.Hide();
                form2.ShowDialog();
                Application.Exit();
            }
        }
           

收银员注册界面

南风超市管理系统

验证码的实现代码

public class ValidCode
    {
        #region Private Fields
        private const double PI = 3.1415926535897932384626433832795;
        private const double PI2 = 6.283185307179586476925286766559;
        //private readonly int _wordsLen = 4; 
        private int _len;
        private CodeType _codetype;
        private readonly Single _jianju = (float)18.0;
        private readonly Single _height = (float)24.0;
        private string _checkCode;
        #endregion
        #region Public Property
        public string CheckCode
        {
            get
            {
                return _checkCode;
            }
        }
        #endregion
        #region Constructors
        /// <summary> 
        /// public constructors 
        /// </summary> 
        /// <param name="len"> 验证码长度 </param> 
        /// <param name="ctype"> 验证码类型:字母、数字、字母+ 数字 </param> 
        public ValidCode(int len, CodeType ctype)
        {
            this._len = len;
            this._codetype = ctype;
        }
        #endregion
        #region Public Field
        public enum CodeType { Words, Numbers, Characters, Alphas }
        #endregion
        #region Private Methods
        private string GenerateNumbers()
        {
            string strOut = "";
            System.Random random = new Random();
            for (int i = 0; i < _len; i++)
            {
                string num = Convert.ToString(random.Next(10000) % 10);
                strOut += num;
            }
            return strOut.Trim();
        }
        private string GenerateCharacters()
        {
            string strOut = "";
            System.Random random = new Random();
            for (int i = 0; i < _len; i++)
            {
                string num = Convert.ToString((char)(65 + random.Next(10000) % 26));
                strOut += num;
            }
            return strOut.Trim();
        }
        // 
        private string GenerateAlphas()
        {
            string strOut = "";
            string num = "";
            System.Random random = new Random();
            for (int i = 0; i < _len; i++)
            {
                if (random.Next(500) % 2 == 0)
                {
                    num = Convert.ToString(random.Next(10000) % 10);
                }
                else
                {
                    num = Convert.ToString((char)(65 + random.Next(10000) % 26));
                }
                strOut += num;
            }
            return strOut.Trim();
        }
        private System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)
        {
            System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);
            // 将位图背景填充为白色 
            System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);
            graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, destBmp.Width, destBmp.Height);
            graph.Dispose();
            double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;
            for (int i = 0; i < destBmp.Width; i++)
            {
                for (int j = 0; j < destBmp.Height; j++)
                {
                    double dx = 0;
                    dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;
                    dx += dPhase;
                    double dy = Math.Sin(dx);
                    // 取得当前点的颜色 
                    int nOldX = 0, nOldY = 0;
                    nOldX = bXDir ? i + (int)(dy * dMultValue) : i;
                    nOldY = bXDir ? j : j + (int)(dy * dMultValue);
                    System.Drawing.Color color = srcBmp.GetPixel(i, j);
                    if (nOldX >= 0 && nOldX < destBmp.Width
                     && nOldY >= 0 && nOldY < destBmp.Height)
                    {
                        destBmp.SetPixel(nOldX, nOldY, color);
                    }
                }
            }
            return destBmp;
        }
        #endregion
        #region Public Methods
        public Stream CreateCheckCodeImage()
        {
            string checkCode;
            switch (_codetype)
            {
                case CodeType.Alphas:
                    checkCode = GenerateAlphas();
                    break;
                case CodeType.Numbers:
                    checkCode = GenerateNumbers();
                    break;
                case CodeType.Characters:
                    checkCode = GenerateCharacters();
                    break;
                default:
                    checkCode = GenerateAlphas();
                    break;
            }
            this._checkCode = checkCode;
            MemoryStream ms = null;
            // 
            if (checkCode == null || checkCode.Trim() == String.Empty)
                return null;
            Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * _jianju)), (int)_height);
            Graphics g = Graphics.FromImage(image);
            try
            {
                Random random = new Random();
                g.Clear(Color.White);
                // 画图片的背景噪音线 
                for (int i = 0; i < 18; i++)
                {
                    int x1 = random.Next(image.Width);
                    int x2 = random.Next(image.Width);
                    int y1 = random.Next(image.Height);
                    int y2 = random.Next(image.Height);
                    g.DrawLine(new Pen(Color.FromArgb(random.Next()), 1), x1, y1, x2, y2);
                }
                Font font = new System.Drawing.Font("Times New Roman", 14, System.Drawing.FontStyle.Bold);
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
                if (_codetype != CodeType.Words)
                {
                    for (int i = 0; i < checkCode.Length; i++)
                    {
                        g.DrawString(checkCode.Substring(i, 1), font, brush, 2 + i * _jianju, 1);
                    }
                }
                else
                {
                    g.DrawString(checkCode, font, brush, 2, 2);
                }
                // 画图片的前景噪音点 
                for (int i = 0; i < 150; i++)
                {
                    int x = random.Next(image.Width);
                    int y = random.Next(image.Height);
                    image.SetPixel(x, y, Color.FromArgb(random.Next()));
                }
                // 画图片的波形滤镜效果 
                if (_codetype != CodeType.Words)
                {
                    image = TwistImage(image, true, 3, 1);
                }
                // 画图片的边框线 
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
                ms = new System.IO.MemoryStream();
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }
            return ms;
        }
        #endregion
    }
}
           

下面为验证码的判断

if (!this.txtValidCode.Text.Equals(validCode.CheckCode))//验证是否输入正确
            {
                MessageBox.Show(" 请输入正确的验证码!", this.Text);
                this.txtValidCode.Focus();
                this.txtValidCode.Text = "";
                return;
            }
           

验证码的点击切换

private void picValidCode_Click(object sender, EventArgs e)
        {
            picValidCode.Image = Bitmap.FromStream(validCode.CreateCheckCodeImage());//点击图片更换验证码
        }
           

下面为管理员界面的展示

南风超市管理系统

该界面的主要功能有对收银人员的添加和查看以及删除

(主要功能不一一展示,直接上图)

南风超市管理系统
南风超市管理系统
南风超市管理系统
南风超市管理系统

销售请款曲线图代码如下

public class GraphEdit
    {
        /// <summary>
        /// 画板宽度
        /// </summary>
        public int BoardWidth { get; set; }
        /// <summary>
        /// 画板高度
        /// </summary>
        public int BoardHeight { get; set; }
        /// <summary>
        /// 画板背景颜色
        /// </summary>
        public Color BoardColor { get; set; }
        /// <summary>
        /// 画图区域颜色
        /// </summary>
        public Color AreasColor { get; set; }
        /// <summary>
        /// 曲线图颜色
        /// </summary>
        public Color GraphColor { get; set; }
        /// <summary>
        /// 坐标轴颜色
        /// </summary>
        public Color AxisColor { get; set; }
        /// <summary>
        /// 刻度线颜色
        /// </summary>
        public Color ScaleColor { get; set; }
        /// <summary>
        /// 当前绘制的图
        /// </summary>
        public Bitmap CurrentImage { get; set; }
        /// <summary>
        /// 垂直(纵向)边距(画图区域距离左右两边长度)
        /// </summary>
        public int VerticalMargin { get; set; }
        /// <summary>
        /// 平行(横向)边距(画图区域距离左右两边长度)
        /// </summary>
        public int HorizontalMargin { get; set; }
        public int YScaleCount { get; set; }
        public GraphEdit(int width, int height, Color boradColor)
        {
            this.BoardWidth = width;
            this.BoardHeight = height;
            this.BoardColor = boradColor;
            //默认值
            this.XScaleCount = 12;
            this.YScaleCount = 5;
        }
        /// <summary>
        /// 获得当前数据画出的曲线面积图
        /// </summary>
        /// <param name="data">需要绘制的数据</param>
        /// <param name="xRange">X轴范围(data数据里面的实际范围)</param>
        /// <param name="yRange">Y轴范围(data数据里面的实际范围)</param>
        /// <param name="isFill">是否需要面积填充</param>
        /// <returns>当前的曲线面积图</returns>
        public Image GetCurrentGraph(List<Point> data, float xRange, float yRange, bool isFill)
        {
            CurrentImage = new Bitmap(BoardWidth, BoardHeight);
            Graphics g = Graphics.FromImage(CurrentImage);
            g.SmoothingMode = SmoothingMode.AntiAlias;   //反锯齿
            g.Clear(BoardColor);
            //1.确定曲线图区域
            int iAreaWidth = BoardWidth - 2 * HorizontalMargin;              //画图区域宽度
            int iAreaHeight = BoardHeight - 2 * VerticalMargin;              //画图区域高度
            Point pAreaStart = new Point(HorizontalMargin, VerticalMargin);  //画图区域起点
            Point pAreaEnd = new Point(BoardWidth - HorizontalMargin, BoardHeight - VerticalMargin);             //画图区域终点
            Point pOrigin = new Point(HorizontalMargin, BoardHeight - VerticalMargin);  //原点
            Rectangle rectArea = new Rectangle(pAreaStart, new Size(iAreaWidth, iAreaHeight));
            SolidBrush sbAreaBG = new SolidBrush(AreasColor);
            g.FillRectangle(sbAreaBG, rectArea);
            sbAreaBG.Dispose();
           //2.确定坐标轴
           Pen penAxis = new Pen(AxisColor, 5);
            penAxis.EndCap = LineCap.ArrowAnchor;
            g.DrawLine(penAxis, pOrigin, new Point(pAreaStart.X, pAreaStart.Y - VerticalMargin / 2));
            g.DrawLine(penAxis, pOrigin, new Point(pAreaEnd.X + HorizontalMargin / 2, pAreaEnd.Y));
            penAxis.Dispose();
            //3.确定刻度线和标签
            Pen penScale = new Pen(ScaleColor, 1);
            int fontSize = 8;
            for (int i = 0; i <= XScaleCount; i++)
            {
                int x = i * (iAreaWidth / XScaleCount) + pAreaStart.X;
                g.DrawLine(penScale, x, pAreaStart.Y, x, pAreaEnd.Y);
                string lbl = (i * (xRange / XScaleCount)).ToString();
                if (xRange == 30)   //如果按照一天分钟时间显示
                    lbl = (i * (xRange / XScaleCount) / 1).ToString();
                if (i != 0)
                { g.DrawString(lbl, new Font("微软雅黑", fontSize, FontStyle.Regular), new SolidBrush(AxisColor), new Point(x - fontSize, pAreaEnd.Y + VerticalMargin / 9)); }
            }
            for (int i = 0; i <= YScaleCount; i++)
            {
                int y = pAreaEnd.Y - (i * (iAreaHeight / YScaleCount));
                g.DrawLine(penScale, pAreaStart.X, y, pAreaEnd.X, y);
                string lbl = (i * (yRange / YScaleCount)).ToString();
                g.DrawString(lbl, new Font("微软雅黑", fontSize, FontStyle.Regular), new SolidBrush(AxisColor), new Point(pAreaStart.X - (fontSize * lbl.Length) - HorizontalMargin / 9, y - fontSize / 2));
                //4.画曲线面积
            //4.1得到数据
            //4.2数据排序 :为了能顺序画出图,需要对X轴上的数据进行排序  冒泡排序
            List<Point> listPointData = SortingData(data);
            //4.3.数据转换:将实际的数据转换到图上的点
            List<Point> listPointGraphics = new List<Point>();//图上的点
            foreach (Point point in listPointData)
            {
                Point p = new Point();
                p.X = pAreaStart.X + Convert.ToInt32((iAreaWidth / xRange) * point.X);     //120为实际值的取值范围0-120
                p.Y = pAreaStart.Y + (iAreaHeight - Convert.ToInt32((iAreaHeight / yRange) * point.Y)); //1000为实际值取值范围0-1000
                listPointGraphics.Add(p);
            }
            //4.3将点的集合加入到画曲线图的路径中
            GraphicsPath gpArea = new GraphicsPath();
            //第一个点  //起点要从X轴上开始画 结束点也要画回X轴:即在开始点和结束点要多画一次原点的Y
            //gpArea.AddLine(new Point(listPointGraphics[0].X, pOrigin.Y), listPointGraphics[0]);
            //中间点
            for (int i = 0; i < listPointGraphics.Count - 1; i++) //注意:超出数组界限时,编译器不会出错
            {
                gpArea.AddLine(listPointGraphics[i], listPointGraphics[i + 1]);
            }
            //最后一个点
            //gpArea.AddLine(listPointGraphics[listPointGraphics.Count - 1], new Point(listPointGraphics[listPointGraphics.Count - 1].X, pOrigin.Y));
            SolidBrush brush = new SolidBrush(GraphColor);//定义单色画刷 
            if (isFill)
            {
                g.FillPath(brush, gpArea);   //填充
            }
            else
            {
                g.DrawPath(new Pen(GraphColor, 5), gpArea);  //边缘 
            }
            gpArea.CloseFigure();  //是否封闭
            return CurrentImage;
        }
        /// <summary>
        /// 数据排序
        /// </summary>
        /// <param name="lp"></param>
        /// <returns></returns>
        private List<Point> SortingData(List<Point> lp)
        {
            for (int i = 0; i < lp.Count - 1; i++)
            {
                for (int j = 0; j < lp.Count - 1 - i; j++)// j开始等于0,  
                {
                    if (lp[j].X > lp[j + 1].X)
                    {
                        Point temp = lp[j];
                        lp[j] = lp[j + 1];
                        lp[j + 1] = temp;
                    }
                }
            }
            return lp;
        }
    }                
           
GraphEdit graphEdit;
        Color boardColor = Color.FromArgb(17, 81, 138);//指定绘制图的背景色  
        Thread toUpdate;                               //刷新线程
        private void LoadingUI()
        {
            graphEdit = new GraphEdit(640, 350, boardColor);
            graphEdit.HorizontalMargin = 50;                                   //横水平边距
            graphEdit.VerticalMargin = 80;                                     //竖垂直边距
            graphEdit.AreasColor = Color.FromArgb(100, 0, 0, 0);         //画图区域颜色
            graphEdit.GraphColor = Color.FromArgb(255, 110, 176);        //曲线面积颜色
            graphEdit.AxisColor = Color.FromArgb(255, 255, 255);         //坐标轴颜色
            graphEdit.ScaleColor = Color.FromArgb(20, 255, 255, 255);          //刻度线颜色
            graphEdit.XScaleCount = 30;          //X轴刻度线数量
            graphEdit.YScaleCount = 10;          //Y轴刻度线数量
            toUpdate = new Thread(new ThreadStart(Run));
            toUpdate.Start();
        }
        private void Run()
        {
            while (true)
            {
                Image image = graphEdit.GetCurrentGraph(this.GetBaseData(), XRange, YRange, false);  // 如果是面积曲线图将最后一个参数设为true
                Graphics g = this.CreateGraphics();  //指定使用那个控件来接受曲线图
                g.DrawImage(image, 0, 0);
                g.Dispose();
                Thread.Sleep(5000);                 //每2秒钟刷新一次  
            }
        }
        float XRange = 30;   //X轴最大范围(0-1440)
        float YRange = 10000;    //Y轴最大范围(0-500)
        /// <summary>
        /// 得到(数据库)数据
        /// </summary>
        /// <returns></returns>
        private List<Point> GetBaseData()
        {
            Random r = new Random();
            List<Point> result = new List<Point>();  //数据            
            DataSet das = new DataSet();
            string sqls = "select * from xiaostime";
            das = DBHelper.GetDataSet(sqls);
            int ao = das.Tables[0].Rows.Count;
            for (int i = 0; i <ao-1; i++)
            {
                Point p;
                string sql = "select money from xiaostime where DATEDIFF(DD,time,GETDATE()-" + i + ")=0";
                object o = DBHelper.ExecuteScalar(sql);
                int oo = Convert.ToInt32(o);
                if (i > 0)
                    p = new Point(i + 2, oo);
                else
                    p = new Point(i+1, oo);
                result.Add(p);
            }
            return result;
        }
        private void Form1_FormClosing_1(object sender, FormClosingEventArgs e)
        {
            try
            {
                toUpdate.Abort();
            }        
            catch (Exception)
            {
                Environment.Exit(0);
            }
        }
           

接下来为收银员登入的主界面

南风超市管理系统

该界面包括对商品的添加,库存的查看,提醒查询,炒作人员,营业报表,前台销售,换班系统,以及积分商品的兑换

(主要展示前台销售)

前台销售

南风超市管理系统

前台销售部分可先根据关键字或者商品编号进行查询,点击表中商品获取商品编号,名称,价格,输入购买数量加入下面的购物车。共计金钱会随着商品的添加而不断变化

最后可进行会员的判断,如果是会员进行95折进行打折。

实收金额要大于共计金额,否则支付失败

销售成功后会添加到销售报表之中并可以打印小票

(实现功能如下图)

南风超市管理系统
南风超市管理系统
南风超市管理系统

(PS:营业报表产生数据)

南风超市管理系统

代码展示

1.获取商品信息

try
            {
                this.shoppingid_tb.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
                this.name_tb.Text = dataGridView1.Rows[e.RowIndex].Cells["name"].Value.ToString();
                this.price_tb.Text = dataGridView1.Rows[e.RowIndex].Cells["price"].Value.ToString();
            }
            catch (Exception)
            {
                MessageBox.Show("不能这么操作","提示");
            }
           

2.添加商品进入购物车

try
            {
                int much = int.Parse(dataGridView1.SelectedRows[0].Cells["much"].Value.ToString());
                int shulian = Convert.ToInt32(shuliang_tb.Text);
                if (much > shulian)
                {
                    DataSet sa = new DataSet();
                    string sqlcheck = "select * from saleInfo where shoppingid='" + shoppingid_tb.Text + "'";
                    sa = DBHelper.GetDataSet(sqlcheck);
                    int f = sa.Tables[0].Rows.Count;
                    if (f > 0)
                    {
                        string sqlupdate = "update saleInfo set number=number+'" + shulian + "'where shoppingid='" + shoppingid_tb.Text + "'";
                        DBHelper.ExecuteNonQuery(sqlupdate);
                        string sqlstr1 = "select SUM(price * number) from saleInfo ";
                        //更新应付金额
                        object o = DBHelper.ExecuteScalar(sqlstr1);
                        taotol_tb.Text = o.ToString();
                        DataSet ds = new DataSet();
                        string sql = "select * from saleInfo";
                        ds = DBHelper.GetDataSet(sql);
                        dataGridView2.AutoGenerateColumns = false;
                        dataGridView2.DataSource = ds.Tables[0];
                    }
                    else
                    {
                        string number = shoppingid_tb.Text.Trim();
                        string sqlstr = "insert into saleInfo values('" + number + "','" + name_tb.Text + "','" + shuliang_tb.Text + "','" + price_tb.Text + "','" + much + "')";
                        bool a = DBHelper.ExecuteNonQuery(sqlstr);
                        if (a == true)
                        {
                            string sqlstr1 = "select SUM(price * number) from saleInfo ";
                            //更新应付金额
                            object o = DBHelper.ExecuteScalar(sqlstr1);
                            double oo = Convert.ToDouble(o);
                            taotol_tb.Text = o.ToString();
                            DataSet ds = new DataSet();
                            string sql = "select * from saleInfo";
                            ds = DBHelper.GetDataSet(sql);
                            dataGridView2.AutoGenerateColumns = false;
                            dataGridView2.DataSource = ds.Tables[0];
                        }
                        else
                        {
                            MessageBox.Show("添加失败", "提示");
                        }
                    }
                }
                else
                {
                    MessageBox.Show("库存不足,请补货", "提示");
                }
            }
            catch (Exception)
            {
                MessageBox.Show("不能这样操作");
            }
           

3.消费金额判断,减少库存,增加积分,打印小票等

private void button3_Click(object sender, EventArgs e)
        {
            //判断余额
            double s = double.Parse(shishou_tb.Text.ToString());
            double y = double.Parse(taotol_tb.Text.ToString());
            try
            {
                if (s < y)
                {
                    MessageBox.Show("余额不足", "提示");
                }
                else
                {
                    double a = s - y;
                    MessageBox.Show("支付成功,找回" + a + "元", "提示");
                    //打印小票
                    string info = null;
                    for (int i = 0; i < dataGridView2.Rows.Count - 1; i++)
                    {
                        string nb1 = dataGridView2.Rows[i].Cells[1].Value.ToString();
                        string nb2 = dataGridView2.Rows[i].Cells[2].Value.ToString();
                        string nb3 = dataGridView2.Rows[i].Cells[3].Value.ToString();
                        info += "南风超市"+"\r\n商品编号:" + nb1 + "\r\n商品名称:" + nb2 + "\r\n购买数量:" + nb3;
                    }
                    info += "\r\n\r\n经办人:" + UserNamecs.UserName  + "\r\n实付金额:" + s + "\r\n应付金额:" + y + "\r\n找回:" + a;
                    Random re = new Random();
                    using (StreamWriter st = new StreamWriter(@"F:\小票\小票:" + re.Next(1, 10000) + ".txt", false, Encoding.UTF8))
                    {
                        st.Write(info);
                        st.Flush();
                    }
                    //统计积分
                    string sqljifen = "UPDATE customer set customer.jifen=a.jifen+" + y + " from customer a,saleexcel b where a.tel='" + textBox3.Text + "'";
                    bool sdd = DBHelper.ExecuteNonQuery(sqljifen);
                    //统计累计消费
                    string leiji = "UPDATE customer set customer.shopping=a.shopping+" + y + " from customer a,saleexcel b where a.tel='" + textBox3.Text + "'";
                    DBHelper.ExecuteNonQuery(leiji);
                    //日销售表
                    //查
                    DataSet dataSet = new DataSet();
                    string saql = "select * from xiaostime where DATEDIFF(DD,time,GETDATE())=0";
                    dataSet = DBHelper.GetDataSet(saql);
                    int ss = dataSet.Tables[0].Rows.Count;
                    if (ss > 0)
                    {
                        //修改
                        string sqlud = "update xiaostime set money=money+'" + y + "'where DATEDIFF(DD,time,GETDATE())=0";
                        DBHelper.ExecuteNonQuery(sqlud);
                    }
                    else
                    {
                        //添加
                        string sqlck = "insert into xiaostime values(GETDATE(),'" + y + "')";
                        DBHelper.ExecuteNonQuery(sqlck);
                    }
                    //工资
                    DataSet dmoney = new DataSet();
                    string sqlmoney = "select * from gz where name='" + UserNamecs.UserName + "'";
                    dmoney = DBHelper.GetDataSet(sqlmoney);
                    int qian = dmoney.Tables[0].Rows.Count;
                    if (qian > 0)
                    {
                        string qiangai = "update gz set tic =tic+'" + y / 10 + "' where name='" + UserNamecs.UserName + "'";
                        DBHelper.ExecuteNonQuery(qiangai);
                        string qia = "update gz set zon=tic+money";
                        DBHelper.ExecuteNonQuery(qia);
                    }
                    else
                    {
                        string qiana = "insert into gz(name) values('" + UserNamecs.UserName + "')";
                        DBHelper.ExecuteNonQuery(qiana);
                    }
                    //减少商品数量
                    int kucun = 0;
                    //int shul = Convert.ToInt32(shuliang_tb.Text);
                    for (int i = 0; i < this.dataGridView2.Rows.Count - 1; i++)
                    {
                        //string[] app = new string[i];
                        //app[i] = dataGridView2.Rows[0].Cells["colshoppingid"].Value.ToString();
                        string app = dataGridView2.Rows[i].Cells["colshoppingid"].Value.ToString();
                        string app1 = app;
                        int shul = Convert.ToInt32(dataGridView2.Rows[i].Cells["colnumber"].Value.ToString());
                        int shu2 = shul;
                        if (kucun >= 0)
                        {
                            string A = "update commodity set stock=stock-" + shu2 + "where number='" + app1 + "'";
                            bool row = DBHelper.ExecuteNonQuery(A);
                        }
                        //清空会员号码
                        textBox3.Text = "";
                        panel1.Hide();
                        panel2.Hide();
                        //显示按钮
                        button2.Show();
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("不能这样操作");
            }
            //刷新购物车,实现清空购物车
            string sql = "delete saleInfo";
            bool b = DBHelper.ExecuteNonQuery(sql);
            DataSet ds = new DataSet();
            string sqls = "select * from saleInfo";
            ds = DBHelper.GetDataSet(sqls);
            dataGridView2.AutoGenerateColumns = false;
            dataGridView2.DataSource = ds.Tables[0];
            shishou_tb.Text = "";
            taotol_tb.Text = "";
            shoppingid_tb.Text = "";
            name_tb.Text = "";
            price_tb.Text = "";
            shuliang_tb.Text = "";
            textBox5.Text = "";
            //加入销售情况到销售报表
            string sql2 = "insert into saleexcel values('" + UserNamecs.UserName + "','" + y + "','" + textBox3.Text + "',getdate())";
            bool r = DBHelper.ExecuteNonQuery(sql2);
           

3.会员查询

private void button2_Click_1(object sender, EventArgs e)
        {
            DataSet da = new DataSet();
            string sql = "select * from customer where tel='"+textBox3.Text+"'";
            da = DBHelper.GetDataSet(sql);
            int a = da.Tables[0].Rows.Count;
            if (a>0)
            {
                panel1.Show();
                panel2.Hide();
                button2.Hide();
                double money = Convert.ToDouble(taotol_tb.Text)*0.95;
                taotol_tb.Text = money.ToString();
            }
            else
            {
                panel2.Show();
                panel1.Hide();
            }
        }
           

4,购物车的清空

private void Sale_FormClosing(object sender, FormClosingEventArgs e)
        {
            //关闭自动清空购物车
            string sql = "delete saleInfo";
            bool b = DBHelper.ExecuteNonQuery(sql);
            DataSet ds = new DataSet();
            string sqls = "select * from saleInfo";
            ds = DBHelper.GetDataSet(sqls);
            dataGridView2.AutoGenerateColumns = false;
            dataGridView2.DataSource = ds.Tables[0];
            shishou_tb.Text = "";
            taotol_tb.Text = "";
            shoppingid_tb.Text = "";
            name_tb.Text = "";
            price_tb.Text = "";
            shuliang_tb.Text = "";
            textBox5.Text = "";
        }
           
//购物车右键删除
        private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //右键删除
            string id = dataGridView2.Rows[0].Cells["AID"].Value.ToString();
            string sql = "delete saleInfo where ID='" + id + "'";
            if (DBHelper.ExecuteNonQuery(sql) == true)
            {
                string sqlstr = string.Format("select  * from saleInfo");
                DataSet ds = new DataSet();
                ds = DBHelper.GetDataSet(sqlstr);
                dataGridView2.AutoGenerateColumns = false;
                dataGridView2.DataSource = ds.Tables[0];
                //更新应付金额
                string sqlstr1 = "select SUM(price * number) from saleInfo";
                object o = DBHelper.ExecuteScalar(sqlstr1);
                taotol_tb.Text = o.ToString();
            }
            else
            {
                MessageBox.Show("删除商品失败,请重试!", "提示");
            }
        }
           

5.窗体加载事件

private void Sale_Load(object sender, EventArgs e)
        {
            //显示当前时间
            Timer = new Timer();
            Timer.Interval = 1000;
            Timer.Tick += new EventHandler(Timer_Tick);
            Timer.Start();
            Win32.AnimateWindow(this.Handle, 350, Win32.AW_CENTER);
            string sql = string.Format("select * from commodity ");
            DataSet ds = new DataSet();
            ds = DBHelper.GetDataSet(sql);
            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.DataSource = ds.Tables[0];
            //应付金额的查找
            string sqlstr = "select SUM(price * number) from saleInfo";
            object o = DBHelper.ExecuteScalar(sqlstr);
            //获取应付金额
            taotol_tb.Text = o.ToString();
        }
           

积分兑换模块

说明:会员每产生一元消费就会累加一积分

详情如下图

南风超市管理系统
南风超市管理系统
南风超市管理系统
南风超市管理系统
南风超市管理系统

我们的项目基本功能大致就是这些,还有许多小功能,如商品添加,会员添加,换班操作,当前操作人员,提醒查询就不一一演示了,动动小脑瓜,复杂问题也能简单解决

over