本文项目为大家分享了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)
{
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);
//}
}
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();
}
我们的项目大概就这么多了,还有一些小功能没有详细介绍了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。