C#实现简单的点餐系统

本文项目为大家分享了C#实现点餐系统,供大家参考,具体内容如下

项目介绍:一家店铺使用的外卖点餐系统
本项目分三大模块:登录注册模块,用户模块,店家模块

1.登录注册模块

登录分为用户登录和管理员登录(店家),管理员有且只有一个账号可以登录。用户登录需要先注册,注册必须用手机号注册。

登录界面效果图

登录主要就是判断,多加些判断就行了

登录代码展示:

#region 窗体效果
        public class Win32
        {
            public const Int32 AW_HOR_POSITIVE = 0x00000001; // 从左到右打开窗口
            public const Int32 AW_HOR_NEGATIVE = 0x00000002; // 从右到左打开窗口
            public const Int32 AW_VER_POSITIVE = 0x00000004; // 从上到下打开窗口
            public const Int32 AW_VER_NEGATIVE = 0x00000008; // 从下到上打开窗口
            public const Int32 AW_CENTER = 0x00000010; //若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。
            public const Int32 AW_HIDE = 0x00010000; //隐藏窗口,缺省则显示窗口。
            public const Int32 AW_ACTIVATE = 0x00020000; //激活窗口。在使用了AW_HIDE标志后不要使用这个标志。
            public const Int32 AW_SLIDE = 0x00040000; //使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。
            public const Int32 AW_BLEND = 0x00080000; //使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern bool AnimateWindow(
          IntPtr hwnd, // handle to window
              int dwTime, // duration of animation
              int dwFlags // animation type
              );
        }
        #endregion
        ValidCode validCode = new ValidCode(5, ValidCode.CodeType.Numbers);//实例化这个对象
        
        //窗体加载
        private void Login_Load(object sender, EventArgs e)
        {
            picValidCode.Image = Bitmap.FromStream(validCode.CreateCheckCodeImage());//点击图片更换验证码
            Win32.AnimateWindow(this.Handle,500, Win32.AW_VER_POSITIVE);//窗体出现效果
        }

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

        //注册
        private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Enroll EN = new Enroll();
            this.Hide();
            EN.ShowDialog();
            Application.ExitThread();
        }

        //登录按钮
        private void LoginButton_Click(object sender, EventArgs e)
        {
            Saveusername.name = Username.Text;
            string sql = string.Format("select * from UserList where UserID='{0}'and UserPassword='{1} '", Username.Text, password.Text);
            SqlDataReader reader = DBHelper.GetDataReader(sql);
            if (Username.Text == "")
            {
                MessageBox.Show("请输入用户名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else if (password.Text == "")
            {
                MessageBox.Show("请输入密码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else if (!this.txtValidCode.Text.Equals(validCode.CheckCode))//验证是否输入正确
            {

                MessageBox.Show(" 请输入正确的验证码!", this.Text);

                this.txtValidCode.Focus();
                this.txtValidCode.Text = "";
                reader.Close();
                return;

            }
            else if (reader.Read())
            {
                Saveusername.ID = reader["ID"].ToString();//获取ID用于个人中心修改信息
                reader.Close();
                if (Saveusername.name=="Sweet")
                {
                    管理员界面.GLY gLY = new 管理员界面.GLY();
                    this.Hide();
                    gLY.ShowDialog();
                    Application.ExitThread();
                }
                XMB xMB = new XMB();
                this.Hide();
                xMB.ShowDialog();
                Application.ExitThread();
            }
            else
            {
                MessageBox.Show("用户名或密码输入错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            reader.Close();

            picValidCode.Image = Bitmap.FromStream(validCode.CreateCheckCodeImage());//点击图片更换验证码
        }

        //忘记密码
        private void linkLabel1_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ForgetPwd forget = new ForgetPwd();
            this.Hide();
            forget.ShowDialog();
            Application.ExitThread();
        }
        #region 用于窗体移动
        private Point mPoint;//定义一个位置信息Point用于存储鼠标位置
        private void Login_MouseDown(object sender, MouseEventArgs e)
        {
            mPoint = new Point(e.X, e.Y);
        }

        private void Login_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
            }
        }
        #endregion

        private void Login_FormClosed(object sender, FormClosedEventArgs e)
        {
            Win32.AnimateWindow(this.Handle, 500, Win32.AW_BLEND|Win32.AW_HIDE);
        }

        private void pictureBox3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void pictureBox4_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;//最小化
        }

图片验证码代码展示:

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

注册界面效果图

注册界面代码展示

短信验证码,用接口就能实现

 TimeSpan dtTo = new TimeSpan(0, 0, 60);//设置计时器的开始时间
        int value;//用来存储随机数
        public Enroll()
        {
            InitializeComponent();
        }

        //获取短信验证码
        private void CodeButton_Click(object sender, EventArgs e)
        {
            Regex rx = new Regex(@"^0{0,1}(13[0-9]|15[0-9]|15[0-9]|18[0-9]|17[0-9])[0-9]{8}$");
            if (!rx.IsMatch(EnrollTel.Text))
            {
                EnrollTel.Text = "";
                MessageBox.Show("手机号格式不正确,请重新输入", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else
            {
                Random rad = new Random();//实例化随机数产生器rad;
                value = rad.Next(1000, 10000);//用rad生成大于等于1000,小于等于9999的随机数;
                Note.NoTe(EnrollTel.Text, value);
                timer1.Start();
                dtTo = new TimeSpan(0, 0, 60);
            }
        }

        //时间控件用来实现60秒倒计时
        private void timer1_Tick_1(object sender, EventArgs e)
        {
            CodeButton.Enabled = false;
            dtTo = dtTo.Subtract(new TimeSpan(0, 0, 1));//每隔一秒减一
            CodeButton.Text = "(" + dtTo.Seconds.ToString() + ")" + "重新获取";

            if (dtTo.TotalSeconds == 0.0)//当倒计时完毕
            {
                this.CodeButton.Enabled = true;
                CodeButton.Text = "点击获取验证码";
                this.timer1.Stop();
                timer1.Dispose();
            }
        }

        //注册按钮
        private void FinishButton_Click(object sender, EventArgs e)
        {
            bool Bool = Fac();
            if (Bool)
            {
                string type = "普通用户";
                string sex = "";
                if (RadioMan.Checked)//判断单选按钮的text
                {
                    sex = RadioMan.Text;
                }
                else if (RadioWoman.Checked)
                {
                    sex = RadioWoman.Text;
                }
                string sql = string.Format("insert into UserList values('{0}','{1}','{2}','{3}','{4}','{5}')", EnrollUser.Text, EnrollPwd.Text, sex, EnrollTel.Text, EnrollAddress.Text, type);
                bool sqlinsert = DBHelper.ExecuteNonQuery(sql);
                if (sqlinsert)
                {
                    DialogResult result = MessageBox.Show("注册成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Question);
                    this.Hide();
                    Login LG = new Login();
                    LG.ShowDialog();
                }
            }
            else
            {
                return;
            }
        }

        /// <summary>
        /// 用于注册界面里格式的判断
        /// </summary>
        /// <returns></returns>
        private bool Fac()
        {
            string sql = string.Format("select * from UserList where UserID='{0}'", EnrollUser.Text);
            SqlDataReader reader = DBHelper.GetDataReader(sql);
            if (EnrollUser.Text == "")
            {
                MessageBox.Show("用户名不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                reader.Close();
                return false;
            }
            else if (EnrollPwd.Text == "")
            {
                MessageBox.Show("请输入密码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                reader.Close();
                return false;
            }
            else if (EnrollPwd.Text != EnrollPwdY.Text)
            {
                MessageBox.Show("两次密码必须一样!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                reader.Close();
                return false;
            }
            else if (EnrollTel.Text == "")
            {
                MessageBox.Show("请输入手机号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                reader.Close();
                return false;
            }
            else if (EtxtValidCode.Text == "")
            {
                MessageBox.Show("请输入验证码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                reader.Close();
                return false;
            }
            else if (int.Parse(EtxtValidCode.Text) != value)
            {
                MessageBox.Show("请输入正确的验证码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                reader.Close();
                return false;
            }
            else if (reader.Read())
            {
                DialogResult result = MessageBox.Show("此用户已存在,是否前往登录?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    Login LG = new Login();
                    LG.ShowDialog();
                    reader.Close();
                    this.Close();
                    return false;
                }
                else
                {
                    reader.Close();
                    return false;
                }
            }
            else
            {
                reader.Close();
                return true;
            }
        }

        //窗体加载事件
        private void Enroll_Load(object sender, EventArgs e)
        {
            CodeButton.Text = "点击获取验证码";
            timer1.Interval = 1000;//设置每次间隔一秒

        }

忘记密码界面效果图

下面为用户界面的展示

简单介绍一下:由于菜品是有很多的而且不确定数量,所以必须动态加载,不能拖图片控件等。
用户功能实现思路:首先要知道每个用户只能看自己的,所以在登录时候就必须用一个东西接收用户输入的名字,以便在主界面显示出与该用户相匹配的数据。

购物车界面

购物车首先要有一个购物车表用来存储用户添加的商品,当用户结账以后,购物车表中该用户的信息就应全部清除。然后为该用户生成订单(存入信息到订单表),并将用户购买的商品存入订单详情表中。

动态加载菜品代码展示

private void XMB_Load(object sender, EventArgs e)
        {
            /*SetStyle(ControlStyles.UserPaint, true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
            SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲*/
            linke_热菜.LinkColor = Color.Gray;
            Win32.AnimateWindow(this.Handle, 500, Win32.AW_CENTER);//窗体出现效果
            Order_pl.Visible = false;
            Or_panel1.Visible = false;//隐藏订单控件
            menu_all_全部.AutoScroll = true;//添加滚动条
            this.toolStripStatusLabel1.Font = new Font("微软雅黑", 12, FontStyle.Bold);
            toolStripStatusLabel1.Text = string.Format("欢迎“{0}”使用Sweet点餐系统!                                               ", Saveusername.name);
            this.timer2.Start();

            string sql = "select * from Food_table";
            DataSet ds = DBHelper.GetDataSet(sql);
            int xx = 0;
            int yy = 0;
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                Label FoodName = new Label();
                Label FoodPrice = new Label();
                PictureBox picture = new PictureBox();
                Button button = new Button();//创建控件
                FoodName.Name = "FoodName_" + i;
                FoodPrice.Name = "FoodPrice_" + i;
                picture.Name = "picture_" + i;
                button.Name = ds.Tables[0].Rows[i]["FoodID"].ToString();//加入购物车按钮命名为菜品表的FoodID
                FoodName.Text = ds.Tables[0].Rows[i]["FoodName"].ToString();
                FoodPrice.Text = "¥" + ds.Tables[0].Rows[i]["FoodPrice"].ToString() + "/份";//控件text属性赋值
                button.Text = "加入购物车";
                FoodName.AutoSize = true;
                FoodPrice.AutoSize = true;
                button.AutoSize = true;
                FoodName.Font = new Font("微软雅黑", 11);
                FoodPrice.Font = new Font("微软雅黑", 11);
                button.Font = new Font("微软雅黑", 6);
                button.BackColor = Color.Gray;
                button.ForeColor = Color.Transparent;
                button.FlatStyle = FlatStyle.Flat;
                button.Size = new Size(60, 10);
                picture.Location = new Point(100 * xx, 20 + yy);
                FoodName.Location = new Point(100 * xx, 100 + yy);
                FoodPrice.Location = new Point(100 * xx, 120 + yy);
                button.Location = new Point(100 * xx, 140 + yy);//控件定位
                picture.Image = Image.FromFile(Application.StartupPath + @"\FoodPhoto\" + ds.Tables[0].Rows[i]["PhotoName"].ToString());//显示图片,路径为可执行文件所在文件夹的FoodPhoto文件夹内的图片
                picture.SizeMode = PictureBoxSizeMode.StretchImage;
                picture.Size = new Size(150, 80);
                picture.BorderStyle = BorderStyle.FixedSingle;
                button.Cursor = Cursors.Hand;
                button.Click += new EventHandler(this.Button_Click);
                menu_all_全部.Controls.Add(FoodName);
                menu_all_全部.Controls.Add(FoodPrice);
                menu_all_全部.Controls.Add(picture);
                menu_all_全部.Controls.Add(button);//把控件绑定到panel中
                xx++;
                if (xx++ >= 4)
                {
                    xx = 0;
                    yy += 180;
                }
            }
        }

动态加载菜品解决窗体控件闪烁问题代码展示

protected override CreateParams CreateParams//解决窗体控件闪烁问题
        {
            get

            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;
                return cp;

            }

}

加入购物车按钮代码展示

 #region 购物车
        private void 购物车_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
             // 禁止用户改变DataGridView1的所有列的列宽
            dataGridView1.AllowUserToResizeColumns = false;
            //禁止用户改变DataGridView1所有行的行高
            dataGridView1.AllowUserToResizeRows = false;
            dataGridView1.Columns[0].ReadOnly = true; //禁止用户编辑第一列
            dataGridView1.Columns[1].ReadOnly = true; //禁止用户编辑第二列
            dataGridView1.Columns[2].ReadOnly = true;//禁止用户编辑第三列
            this.dataGridView1.AllowUserToResizeColumns = false; //禁止用户拖动标题宽度
            dataGridView1.AutoGenerateColumns = false;//取消自动生成列
            dataGridView1.RowHeadersVisible = false; //隐藏前面空白选择部分     
            string sql = string.Format("select FoodName,ShoppingCount,ShoppingPrice,ShoppingID from Food_table join Shopping_table on Food_table.FoodID=Shopping_table.FoodID join UserList on '{0}'=Shopping_table.UserID where UserList.UserID='{1}'", Saveusername.name,Saveusername.name);//三表查询
            dataGridView1.DataSource = DBHelper.GetDataSet(sql).Tables[0];
            double SumPrice = 0;//用来存储总金额
            if (DBHelper.GetDataSet(sql).Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < DBHelper.GetDataSet(sql).Tables[0].Rows.Count; i++)
                {
                    SumPrice += double.Parse(DBHelper.GetDataSet(sql).Tables[0].Rows[i][2].ToString());
                }
                Money_label.Text = "¥" + SumPrice.ToString() + "元";
            }
            dataGridView1.ClearSelection(); //取消默认选中
            if (show_shopping_pl.Visible == true)
            {
                show_shopping_pl.Visible = false;
            }
            else
            {
                show_shopping_pl.Visible = true;
            }
            if (Or_panel1.Visible == true)
            {
                Or_panel1.Visible = false;
            }
            if (Order_pl.Visible == true)
            {
                Order_pl.Visible = false;
            }
        }

        //清空购物车
        private void delete_label_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            DialogResult result = MessageBox.Show("是否清空购物车", "提示信息", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
            if (result == DialogResult.OK)
            {
                string sql = string.Format("delete from Shopping_table where UserID='{0}'", Saveusername.name);
                if (DBHelper.ExecuteNonQuery(sql))
                {
                    sql = string.Format("select FoodName,ShoppingCount,ShoppingPrice,ShoppingID from Food_table join Shopping_table on Food_table.FoodID=Shopping_table.FoodID join UserList on '{0}'=Shopping_table.UserID ", Saveusername.name);
                    dataGridView1.DataSource = DBHelper.GetDataSet(sql);
                    dataGridView1.AllowUserToAddRows = false;
                    Money_label.Text = "¥0元";
                    MessageBox.Show("成功清空购物车!", "提示", MessageBoxButtons.OK);
                }
            }
        }
        
        #endregion

主界面结账功能界面

结账部分代码展示

 private void Yes_Order_Load(object sender, EventArgs e)
        {
            Or_label1.Text = "["+Saveusername.name+"]" + ">确认购买";
            dataGridView1.RowHeadersVisible = false; //隐藏前面空白选择部分
            //                                         // 禁止用户改变DataGridView1的所有列的列宽
            //dataGridView1.AllowUserToResizeColumns = false;
            禁止用户改变DataGridView1所有行的行高
            //dataGridView1.AllowUserToResizeRows = false;
            dataGridView1.Columns[0].ReadOnly = true; //禁止用户编辑第一列
            dataGridView1.Columns[1].ReadOnly = true; //禁止用户编辑第二列
            dataGridView1.Columns[2].ReadOnly = true;//禁止用户编辑第三列
            this.dataGridView1.AllowUserToResizeColumns = false; //禁止用户拖动标题宽度
            dataGridView1.AutoGenerateColumns = false;//取消自动生成列
            dataGridView1.RowHeadersVisible = false; //隐藏前面空白选择部分     
            string sql = string.Format("select FoodName,ShoppingCount,ShoppingPrice,ShoppingID from Food_table join Shopping_table on Food_table.FoodID=Shopping_table.FoodID join UserList on '{0}'=Shopping_table.UserID where UserList.UserID='{1}'", Saveusername.name,Saveusername.name);//三表查询
            dataGridView1.DataSource = DBHelper.GetDataSet(sql).Tables[0];
             SumPrice = 0;//用来存储总金额
            if (DBHelper.GetDataSet(sql).Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < DBHelper.GetDataSet(sql).Tables[0].Rows.Count; i++)
                {
                    SumPrice += double.Parse(DBHelper.GetDataSet(sql).Tables[0].Rows[i][2].ToString());
                }
                Money_label.Text = "¥" + SumPrice.ToString() + "元";
            }
            dataGridView1.ClearSelection(); //取消默认选中
            string sql_1 = string.Format("select * from UserList where UserID='{0}'",Saveusername.name);
            DataSet ds = DBHelper.GetDataSet(sql_1);
            Name_label.Text = ds.Tables[0].Rows[0]["UserID"].ToString()+":";
            Tel_label.Text = ds.Tables[0].Rows[0]["UserTel"].ToString();
            Address_label.Text = ds.Tables[0].Rows[0]["UserAddress"].ToString();
            Yes_Money_label.Text = Money_label.Text;
        }
        private void Yes_pay_btn_Click(object sender, EventArgs e)
        {
            if (Address_label.Text=="")
            {
                MessageBox.Show("地址信息不完整,请填写完整!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            string Order_Data = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); //下单日期
            string OrderNumber = DateTime.Now.ToString("yyyyMMddhhmmss");//订单编号
            string sql = string.Format("select * from Shopping_table where UserID='{0}'",Saveusername.name);//查询购物车表
            DataTable table_shopping = DBHelper.GetDataSet(sql).Tables[0];
            if (table_shopping.Rows.Count>0)//购物车有数据就创建订单
            {
               string sql_order = string.Format("insert into Order_table values('{0}','{1}','{2}','{3}','{4}','{5}')",OrderNumber,Saveusername.name,SumPrice,Address_label.Text,Order_Data,Tel_label.Text);//创建订单
               string sql_state = string.Format("insert into OrderState_table values('{0}','{1}')",OrderNumber,"等待确认");//订单状态
                if (DBHelper.ExecuteNonQuery(sql_order)&&DBHelper.ExecuteNonQuery(sql_state))
                {
                    sql_order = string.Format("select top 1 * from Order_table where UserID='{0}' order by OrderID desc",Saveusername.name);
                    DataTable table_order = DBHelper.GetDataTable(sql_order);
                    for (int i = 0; i < table_shopping.Rows.Count; i++)//把数据逐条插入订单详情表
                    {
string sql_datailde = string.Format("insert into Datailedorder_table values('{0}','{1}','{2}','{3}')", int.Parse(table_shopping.Rows[i]["FoodID"].ToString()),int.Parse(table_shopping.Rows[i]["ShoppingCount"].ToString()),double.Parse(table_shopping.Rows[i]["ShoppingPrice"].ToString()),int.Parse(table_order.Rows[0]["OrderID"].ToString()));
                        //try
                        //{
DBHelper.ExecuteNonQuery(sql_datailde);
                        //}
                       /* catch (Exception)
                        {

                            MessageBox.Show("异常");
                            return
                        }*/
                        
                    }
                    string sql_delete = string.Format("delete from Shopping_table where UserID='{0}'",Saveusername.name);
                    DBHelper.ExecuteNonQuery(sql_delete);//创建订单后清空购物车
                   DialogResult result= MessageBox.Show("支付成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    if (result==DialogResult.OK)
                    {
                 string sql_select = string.Format("select * from Shopping_table where UserID='{0}'",Saveusername.name);
                    dataGridView1.DataSource = DBHelper.GetDataSet(sql_select).Tables[0];
                        Money_label.Text = "¥0元";
                        Yes_Money_label.Text = "¥0元";
                        XMB.GetXMB.Money_label.Text = "¥0元";
                    Order_Form order_ = new Order_Form();
                    XMB.GetXMB.Or_from(order_);
                        return;
                    }
                }
            }
            else
            {
                MessageBox.Show("未选择菜品", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }

订单功能界面

点击订单,出现订单详情

订单功能部分代码

private void Order_Form_Load(object sender, EventArgs e)
        {
            OR_panel.AutoScroll = true;//添加滚动条
            int xx = 0;
            int yy = 0;
            string sql = string.Format("select * from Order_table where UserID='{0}'",Saveusername.name);
            DataTable Or_table = DBHelper.GetDataTable(sql);
DataTable State = DBHelper.GetDataTable(string.Format("select OrderState from OrderState_table join Order_table on Order_table.OrderNumber=OrderState_table.OrderNumber where Order_table.UserID='{0}'",Saveusername.name));
            for (int i = 0; i < Or_table.Rows.Count; i++)
            {  
                Label OrderNumber = new Label();//编号
                Label ShoppingPrice = new Label();//价格
                Label SaleDate = new Label();//时间
                Label OrderState = new Label();//状态
                Label sweet = new Label();
                Panel panel = new Panel();
                PictureBox Db = new PictureBox(); //实例化一个控件
                Db.Name = "Db_PictureBox" + i;//设定名称
                OrderNumber.Name = "Label" + i;
                ShoppingPrice.Name = "Label" + i;
                SaleDate.Name = "Label" + i;
                OrderState.Name = "Label" + i;
                sweet.Name = "Label" + i;
                panel.Name = "Panel" + i;//设定名称
                panel.Text = Or_table.Rows[i]["OrderID"].ToString();//把订单ID赋给控件的Text,以便取消订单
                SaleDate.Text = Or_table.Rows[i]["SaleDate"].ToString();
                ShoppingPrice.Text = " ¥ " +  Or_table.Rows[i]["ShoppingPrice"].ToString();
                OrderNumber.Text = "订单编号: " + Or_table.Rows[i]["OrderNumber"].ToString();
                sweet.Text = "Sweet点餐";
                OrderState.Text = State.Rows[i]["OrderState"].ToString();
                sweet.Location = new Point(150,30);
                ShoppingPrice.Location = new Point(480,30);
                OrderState.Location = new Point(595,30);
                SaleDate.Location = new Point(150,70);
                OrderNumber.Location = new Point(450,70);
                Db.Location = new Point(15, 10 + yy);//设定位置
                panel.Location = new Point(5, 0 + yy);//设定位置
                sweet.AutoSize = true;
                OrderState.AutoSize = true;
                ShoppingPrice.AutoSize = true;
                SaleDate.AutoSize = true;
                OrderNumber.AutoSize = true;
                Db.Image = Image.FromFile(Application.StartupPath + @"\FoodPhoto\" + "sezhi.png");
                Db.SizeMode = PictureBoxSizeMode.StretchImage; //设定图像如何显示
                sweet.Font = new Font("微软雅黑", 11);
                OrderNumber.Font = new Font("微软雅黑", 11);
                OrderState.Font = new Font("微软雅黑", 11);
                ShoppingPrice.Font = new Font("微软雅黑", 11);
                SaleDate.Font = new Font("微软雅黑", 11);
                Db.Size = new Size(80, 80);
                panel.Size = new Size(683, 100);
                Db.BorderStyle = BorderStyle.FixedSingle; //设置边框样式
                panel.BorderStyle = BorderStyle.FixedSingle; //设置边框样式
                panel.BackColor = Color.White;
                SaleDate.ForeColor = Color.Red;
                ShoppingPrice.ForeColor = Color.Red;
                OrderNumber.ForeColor = Color.Green;
                OrderState.ForeColor = Color.Green;
                panel.Cursor = Cursors.Hand;
                OR_panel.Controls.Add(Db);
                OR_panel.Controls.Add(panel);
                panel.Controls.Add(OrderState);
                panel.Controls.Add(sweet);
                panel.Controls.Add(OrderNumber);
                panel.Controls.Add(SaleDate);
                panel.Controls.Add(ShoppingPrice);
                panel.Click += new EventHandler(this.panel1_MouseClick); //添加单击事件
                panel.MouseEnter += new EventHandler(this.panel1_MouseEnter); //添加单击事件
                panel.MouseLeave += new EventHandler(this.panel1_MouseLeave); //添加单击事件
                xx++;
                if (xx++ >= 1)
                {
                    yy += 110;
                    //aa += 10;
                }
            }
        }

接下来是管理员界面展示

1.菜品管理界面

菜品管理添加菜品关键代码

private void Food_in_tbn_Click(object sender, EventArgs e)
        {
            if (Fag() == false)
                return;
            string FilePath = Application.StartupPath + @"\FoodPhoto";//获取可执行文件所在位置的FoodPhoto文件夹路径
            if (Directory.Exists(FilePath) == false)
            {
                //判断文件夹是否存在如果不存在创建文件夹
                Directory.CreateDirectory(FilePath);//创建文件夹
            }
            string FileName = DateTime.Now.ToString("yyyyMMddhhmmss") + new Random().Next(1000, 9999);
            //以当前时间和1000到9999的随机数合起来作为文件的名字
            FileName += nj.Substring(nj.LastIndexOf("."));//截取图片的后缀名
            File.Copy(nj, FilePath + @"\" + FileName);//把图片复制到FoodPhoto文件夹
            string SQLst = string.Format("insert into Food_table values('{0}','{1}','{2}','{3}')", Add_Food_tb.Text,Add_money_tb.Text,Add_type_ctb.Text, FileName);
            if (DBHelper.ExecuteNonQuery(SQLst))
            {
                MessageBox.Show("菜品添加成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("保存失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public static string nj;
        public static string name;
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            //打开资源管理器选择图片
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            nj = "";
            name = "";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                nj = openFileDialog1.FileName;
                pictureBox1.Image = Image.FromFile(nj);
     }

}

2.订单管理界面

主要实现思路:动态加载控件,控件定位,查询数据库,修改表信息

3.销售统计界面

点击确认订单后会生成一个订单,效果图如下:

代码展示

 private void Button_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;//将触发此事件的对象转换为该对象
            OrderID = int.Parse(button.Name.ToString());
            string FilePath = @"D:\订单票据";//获取可执行文件所在位置的FoodPhoto文件夹路径
            if (Directory.Exists(FilePath) == false)
            {
                //判断文件夹是否存在如果不存在创建文件夹
                Directory.CreateDirectory(FilePath);//创建文件夹
            }
            string sql_12 = string.Format("select * from Order_table where OrderID='{0}'", OrderID);
            DataTable piao = DBHelper.GetDataTable(sql_12);
            for (int i = 0; i < piao.Rows.Count; i++)
            {
                StreamWriter sw = new StreamWriter(@"D:\订单票据\Sweet点餐"+piao.Rows[0]["OrderNumber"].ToString()+".txt");
                string a = "订单编号:"+piao.Rows[i]["OrderNumber"].ToString();
                string b = "订单内容:";
                sw.WriteLine(a);
                sw.WriteLine("-------------------------------------------");
                sw.WriteLine(b);
                string sql_13 = "select Food_table.FoodName,Datailedorder_table.ShoppingCount,Datailedorder_table.ShoppingPrice from Order_table join Datailedorder_table on Datailedorder_table.OrderID=Order_table.OrderID join Food_table on Food_table.FoodID=Datailedorder_table.FoodID where Order_table.OrderNumber='" + piao.Rows[i]["OrderNumber"] + "'";//查找需要的菜品名称,菜品购买的数量,每一种菜品购买的总金额
                DataTable table = DBHelper.GetDataTable(sql_13);
                for (int j = 0; j < table.Rows.Count; j++)
                {
                    string FoodName = table.Rows[i]["FoodName"].ToString();
                    string FoodCount = table.Rows[i]["ShoppingCount"].ToString();
                    string ShoppingPrice = table.Rows[i]["ShoppingPrice"].ToString();
                    sw.Write(" {0}",FoodName);
                    sw.Write("          x{0}", FoodCount);
                    sw.WriteLine("                            {0}",ShoppingPrice);
                }
                sw.WriteLine("-------------------------------------------");
                string sum = "总计:"+piao.Rows[i]["ShoppingPrice"].ToString();
                string c = "联系地址:";
                string Address = "联系地址:"+piao.Rows[i]["Address"].ToString();
                string User = "联系人:"+piao.Rows[i]["UserID"].ToString();
                string tel = "联系电话:"+piao.Rows[i]["UserTel"].ToString();
                sw.WriteLine(sum);
                sw.WriteLine();
                sw.WriteLine(c);
                sw.WriteLine("-------------------------------------------");
                sw.WriteLine(User);
                sw.WriteLine(tel);
                sw.WriteLine(Address);
                sw.Close();
            }

我们的项目大概就这么多了,还有一些小功能没有详细介绍了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#实现简单点餐系统

    本文实例为大家分享了C#实现简单点餐系统的具体代码,供大家参考,具体内容如下 实现简单点餐系统剖析 1.设计界面(给菜品的序号(index),名称(name),单价(money)加上Tag以便获取此控件中的数据).设计界面所涉及到的控件(FlowLayoutPAnel,label,button) 2.根据菜品数量来添加对应的菜品序号按钮(有几个菜品添加几个按钮)(用到foreach遍历循环) 3.通过2个foreach遍历控件来获取菜品的序号并将菜品的序号添加到按钮中 4.添加按钮单击事件(代码

  • C#实现简易点餐功能

    本文实例为大家分享了C#实现简易点餐功能的具体代码,供大家参考,具体内容如下 图示效果 实现过程 1.设计界面 2.设计控件及其属性 3.实现点击事件.显示事件以及运算 4实现功能 代码如下 private void Form1_Load(object sender, EventArgs e) { // 给FlowLayoutPanel控件添加tag属性,编号为index, 菜名为name,价格为money //根据菜品的数量 添加对应的序号按钮 foreach (Control item in

  • C#框架winform实现简单点餐系统

    本文实例为大家分享了C#框架winform实现简单点餐系统的具体代码,供大家参考,具体内容如下 一.编程思想 1.构思界面并进行设计 2.思考需要用到的控件以及控件需要更改的属性 3.构思将要触发的事件以及部分业务流程 4.通过点击菜品,进行添加,并计算价格 5.界面的美化以及功能的完善 二.编程核心 1.如何获取控件中的内容 2.点击按钮,查找并添加查找的内容 3.添加按钮对应的点击事件 4.如何一次性取出控件中的内容 5.主要用forEach遍历控件 6.数据类型的转换 7.控件Tag属性的

  • C#实现一个控制台的点餐系统

    本文实例为大家分享了C#点餐系统的具体代码,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 控制台操作尝试 { class Program { static void Main(string[] args) { int price = 0; Console.WriteL

  • C#实现在线点餐系统

    这个是C#大作业,写作业很用心,写了很久,所以留存一下.不是现在的是之前的的期末作业,现在才想着整理一下 实现功能: 1.商家登录:客户的登录.注册. 2.商家界面实现了对菜单的增.删.改.查:还有订单的查看.查询.结账(删除订单).查看已结账订单.关闭:退出系统. 3.用户界面实现了菜单的查看,查询,新建订单,选择餐桌,保存订单,增加菜品,退出. C#语言实现在线点餐系统,具体功能如下图 登录界面 using System; using System.Collections.Generic;

  • C#实现简单的点餐系统

    本文项目为大家分享了C#实现点餐系统,供大家参考,具体内容如下 项目介绍:一家店铺使用的外卖点餐系统本项目分三大模块:登录注册模块,用户模块,店家模块 1.登录注册模块 登录分为用户登录和管理员登录(店家),管理员有且只有一个账号可以登录.用户登录需要先注册,注册必须用手机号注册. 登录界面效果图 登录主要就是判断,多加些判断就行了 登录代码展示: #region 窗体效果         public class Win32         {             public const

  • 基于C语言实现点餐系统

    这是一个很简单的点餐系统,用到的知识也不复杂,所以对新手学习还是很有作用,贴上来给大家参考下. 完成了如下功能: 1.显示餐厅提示语: 2.打印菜单(输出菜品分类:主食.甜点.饮料.主菜.开胃菜): 3.选择ID进入菜品分类子目录: 4.进行具体选择(可重复选择同一样菜): 5.返回上级菜单(进行其他分类的选择): 6.完成点餐: 7.打印点餐信息(菜名.单价.数量.价格). 代码如下: #include <stdio.h> void main_munu(){ //打印主菜单 char a[6

  • 基于C语言代码实现点餐系统

    这是一个很简单的点餐系统,用到的知识也不复杂,所以对新手学习还是很有作用,贴上来给大家参考下. 完成了如下功能: 1.显示餐厅提示语: 2.打印菜单(输出菜品分类:主食.甜点.饮料.主菜.开胃菜): 3.选择ID进入菜品分类子目录: 4.进行具体选择(可重复选择同一样菜): 5.返回上级菜单(进行其他分类的选择): 6.完成点餐: 7.打印点餐信息(菜名.单价.数量.价格). 代码如下: #include <stdio.h> void main_munu(){ //打印主菜单 char a[6

  • Java实现简单点餐系统

    用Java实现简单点餐系统,供大家参考,具体内容如下 程序控制分析: 1.欢迎页循环:do-while2.Scanner 控制输入3.选择页循环:switch-case 要求: 订单信息:String 二维数组序号.姓名.餐品名称.份数.价格.总价.地址.时间(10-20).状态(已预定.已完成).热度(int型) 签收订单:改变订单状态,已预定可以签收,如果已经完成则不能再次签收. 删除订单:不能删除未完成订单,序号要随之改变. 我要点赞:对相应的餐品点赞,并展示. package Pract

  • C语言实现简单餐饮管理与点餐系统

    本文实例为大家分享了C语言实现餐饮管理与点餐系统的具体代码,供大家参考,具体内容如下 /*     项目名称:南航餐饮管理系统     组员:梁文新,刘青林,刘艺,施瑞文(组长) */     //当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员   //头文件  #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<wi

  • C语言实现餐厅点餐系统

    本文实例为大家分享了C语言实现餐厅点餐系统的具体代码,供大家参考,具体内容如下 这应该是比较简单的c语言程序了,因为学校c语言结课结的早,我当时才学到结构体指针,所以我就把我当时能运用的知识点全用在这个程序上了.虽说这个程序对当时的我来说是天花板,但是当我继续学习,我逐渐发现这个程序能升级的点实在是太多了.但我也一直没去完善.所以就硬着头皮把他发出来了. 代码涉及的知识点:顺序结构,选择分支结构,循环结构,数组,自定义函数,指针和结构体. 主要思路: 定义的一个结构体数组,包含了三个成员,分别是

  • JS实现简单的选择题测评系统代码思路详解(demo)

    包含内容:JS封装表单,JS校验表单 说是测评系统,感觉只能算是一个小小的Demo,很水,,没有数据库库,,仅使用JS做简单的选择题测评系统 -------------------------------------------------------------------------------- 一.设计思路 表单封装: [1]由于采用JS封装提交所以,不需要form标签 [2]放置多个input标签,作为输入项 [3]编写JS获取输入项,并通过get方式提交到另一个页面 校验表单(显示结

  • Python使用multiprocessing实现一个最简单的分布式作业调度系统

    mutilprocess像线程一样管理进程,这个是mutilprocess的核心,他与threading很是相像,对多核CPU的利用率会比threading好的多. 介绍 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上.一个服务进程可以作为调度者,将任务分布到其他多个机器的多个进程中,依靠网络通信. 想到这,就在想是不是可以使用此模块来实现一个简单的作业调度系统. 实现 Job 首先创建一个Job类,为了测试简单,只包含一

随机推荐