C#实现简单的点餐系统

这篇文章主要为大家详细介绍了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);
                        /

本文标题为:C#实现简单的点餐系统

基础教程推荐