这篇文章主要为大家详细介绍了C#实现简单的点餐系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文项目为大家分享了C#实现点餐系统,供大家参考,具体内容如下
项目介绍:一家店铺使用的外卖点餐系统
本项目分三大模块:登录注册模块,用户模块,店家模块
1.登录注册模块
登录分为用户登录和管理员登录(店家),管理员有且只有一个账号可以登录。用户登录需要先注册,注册必须用手机号注册。
登录界面效果图
登录主要就是判断,多加些判断就行了
登录代码展示:
#地区窗体效果
公共类Win32
{
public const int 32 AW _ HOR _ POSITIVE=0x 00000001;//从左到右打开窗口
public const int 32 AW _ HOR _ NEGATIVE=0x 00000002;//从右到左打开窗口
public const int 32 AW _ VER _ POSITIVE=0x 00000004;//从上到下打开窗口
public const int 32 AW _ VER _ NEGATIVE=0x 00000008;//从下到上打开窗口
public const int 32 AW _ CENTER=0x 00000010;//若使用了啊_隐藏标志,则使窗口向内重叠;若未使用啊_隐藏标志,则使窗口向外扩展。
public const int 32 AW _ HIDE=0x 00010000;//隐藏窗口,缺省则显示窗口。
public const int 32 AW _ ACTIVATE=0x 00020000;//激活窗口。在使用了啊_隐藏标志后不要使用这个标志。
public const int 32 AW _ SLIDE=0x 00040000;//使用滑动类型。缺省则为滚动动画类型。当使用噢_中心标志时,这个标志就被忽略。
public const int 32 AW _ BLEND=0x 00080000;//使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
[DllImport('user32.dll ',CharSet=CharSet .自动)]
公共静态外部bool动画窗口(
窗口句柄
int dwTime,//动画的持续时间
int dwFlags //动画类型
);
}
#结束区域
有效代码有效代码=新的有效代码(5,有效代码.代码类型。数字);//实例化这个对象
//窗体加载
私有void登录_加载(对象发送方,EventArgs e)
{
picValidCode .图像=位图FromStream(validCode .CreateCheckCodeImage());//点击图片更换验证码
Win32 .动画窗口(这个。句柄,500,Win32 .VER正);//窗体出现效果
}
//验证码图片
私有void picValidCode_Click(对象发送方,EventArgs e)
{
picValidCode .图像=位图FromStream(validCode .CreateCheckCodeImage());//点击图片更换验证码
}
//注册
私有无效链接标签2 _链接被点击(对象发送方,LinkLabelLinkClickedEventArgs e)
{
Enroll EN=new Enroll();
这个hide();
恩ShowDialog();
申请exit thread();
}
//登录按钮
私有空的登录按钮点击(对象发送方,EventArgs e)
{
Saveusername.name=用户名文本;
字符串sql=字符串。格式('从用户列表中选择*其中UserID=“{ 0 }”和user password=“{ 1 }”),用户名。文本,密码。正文);
SqlDataReader reader=DBHelper .获取datareader(SQL);
如果(用户名. Text==' ')
{
消息框.显示('请输入用户名!', '提示消息框按钮.好了MessageBoxIcon .星号);
}
else if(密码. Text==' ')
{
消息框.显示('请输入密码!', '提示消息框按钮.好了MessageBoxIcon .星号);
}
else if(!这个。txtvalidcode。文字。等于(有效代码.校验码))//验证是否输入正确
{
消息框.显示('请输入正确的验证码!',这个。正文);
这个。txtvalidcode。焦点();
这个。txtvalidcode。text=
读者. close();
返回;
}
else if(读者. Read())
{
保存用户名ID=reader['ID'].ToString();//获取身份证明用于个人中心修改信息
读者. close();
if (Saveusername.name=='Sweet ')
{
管理员界面106 . GLY甘氨酸=新管理员界面GLY();
这个hide();
gLY .ShowDialog();
申请exit thread();
}
XMB xMB=新XMB();
这个hide();
xMB .ShowDialog();
申请exit thread();
}
其他
{
消息框.显示('用户名或密码输入错误!', '提示消息框按钮.好了MessageBoxIcon .错误);
}
读者. close();
picValidCode .图像=位图FromStream(validCode .CreateCheckCodeImage());//点击图片更换验证码
}
//忘记密码
私有无效链接标签1 _ link clicked _ 1(对象发送方,LinkLabelLinkClickedEventArgs e)
{
忘记pwd忘记=新忘记pwd();
这个hide();
忘记吧ShowDialog();
申请exit thread();
}
#地区用于窗体移动
私有点mPoint//定义一个位置信息要点用于存储鼠标位置
私有void Login_MouseDown(对象发送方,MouseEventArgs e)
{
mPoint=新点(e.X,e . Y);
}
私有void Login_MouseMove(对象发送方,MouseEventArgs e)
{
if (e.Button==MouseButtons .左)
{
这个。位置=新点(这个.地点X e X m点. x,这个。位置Y . Y . m点. y);
}
}
#结束区域
私有void Login_FormClosed(对象发送方FormClosedEventArgs e)
{
Win32 .动画窗口(这个。句柄,500,Win32 .AW_BLEND|Win32 .AW _ HIDE);
}
私有void pictureBox3_Click(对象发送方,EventArgs e)
{
这个. close();
}
私有void pictureBox4_Click(对象发送方,EventArgs e)
{
这个WindowState=FormWindowState .最小化;//最小化
}
图片验证码代码展示:
公共类有效代码
{
#区域私有字段
private const double PI=3.1415926535897932384626433832795;
私人常数双PI2=6.283185307179586476925286766559;
//private readonly int _ words len=4;
私有整数长度
私有代码类型_代码类型
private readonly Single _ jianju=(float)18.0;
private readonly Single _ height=(float)24.0;
私有字符串_校验码
#结束区域
#地区公共财产
公共字符串校验码
{
得到
{
返回_校验码
}
}
#结束区域
#区域构造函数
///摘要
///公共构造函数
////摘要
///param name='len '验证码长度/param
///param name='ctype '验证码类型:字母、数字、字母数字/param
public ValidCode(int len,CodeType ctype)
{
这个. len=len
这个. codetype=ctype
}
#结束区域
#区域公共字段
公共枚举代码类型{单词,数字,字符,字母}
#结束区域
#区域私有方法
私有字符串生成器数字()
{
string strOut=
系统Random Random=new Random();
for(int I=0;i _ len我)
{
字符串编号=转换ToString(随机。接下来(10000)% 10);
strOut=num
}
返回斯特劳特.trim();
}
私有字符串GenerateCharacters()
{
string strOut=
系统Random Random=new Random();
for(int I=0;i _ len我)
{
字符串编号=转换ToString((char)(65 random .接下来(10000)% 26));
strOut=num
}
返回斯特劳特.trim();
}
//
私有字符串生成phas()
{
string strOut=
字符串编号="";
系统Random Random=new Random();
for(int I=0;i _ len我)
{
如果(随机。下一步(500) % 2==0)
{
数量=转换ToString(随机。接下来(10000)% 10);
}
其他
{
数量=转换ToString((char)(65 random .接下来(10000)% 26));
}
strOut=num
}
返回斯特劳特.trim();
}
私人系统画画。位图扭曲图像(位图srcBmp,bool bXDir,double dMultValue,double dPhase)
{
系统画画。位图destBmp=新位图(srcBmp .宽度,srcBmp .身高);
//将位图背景填充为白色
系统。绘图。图形图形=系统画画。图形。来自图片(dest BMP);
图表FillRectangle(新的实体画笔(系统。绘图。颜色。白色),0,0,destBmp .宽度,destBmp .身高);
图表dispose();
double dBaseAxisLen=bXDir?(双)destBmp .高度:(double)destBmp .宽度;
for(int I=0;我放弃了。宽度;我)
{
for(int j=0;j destBmp .身高;j)
{
double dx=0;
dx=bXDir?(PI2 *(double)j)/dBaseAxisLen:(PI2 *(double)I)/dBaseAxisLen;
dx=dPhase
双dy=数学sin(dx);
//取得当前点的颜色
int nOldX=0,nOldY=0;
nOldX=bXDir?I(int)(dy * dMultValue):I;
nOldY=bXDir?j:j(int)(dy * dMultValue);
系统画画。Color color=srcBmp .GetPixel(i,j);
if (nOldX=0 nOldX destBmp .宽度
nOldY=0 nOldY destBmp .高度)
{
destBmp .SetPixel(nOldX,nOldY,color);
}
}
}
返回destBmp
}
#结束区域
#区域公共方法
公共流CreateCheckCodeImage()
{
字符串校验码;
开关(_codetype)
{
案例代码类型。阿尔法战士:
校验码=生成alpha s();
打破;
案例代码类型。数字:
校验码=生成数字();
打破;
案例代码类型。字符:
校验码=生成字符();
打破;
默认值:
校验码=生成alpha s();
打破;
}
这个. checkCode=checkCode
MemoryStream ms=null
//
if (checkCode==null || checkCode .Trim()==String .空的)
返回空
位图图像=新系统画画。位图((整数)数学.天花板((校验码. Length * _jianju))、(int)_ height);
图形g=图形FromImage(图像);
尝试
{
Random Random=new Random();
g.透明(彩色。白色);
//画图片的背景噪音线
for(int I=0;i 18我)
{
int x1=random .接下来(图片。宽度);
int x2=随机。接下来(图片。宽度);
int y1=随机。接下来(图片。身高);
int y2=随机。接下来(图片。身高);
g.画线(新钢笔(颜色FromArgb(随机. Next()),1),x1,y1,x2,y2);
}
字体font=新系统。绘图。字体('时代新罗马',14,系统画画。字体样式。粗体);
LinearGradientBrush brush=new LinearGradientBrush(新矩形(0,0,图像.宽度,图像。高度)、颜色。蓝色,彩色。暗红色,1.2f,真);
if (_codetype!=代码类型.单词)
{
for(int I=0;我检查代码。长度;我)
{
g.拉绳(校验码Substring(i,1),font,brush,2 i * _jianju,1);
}
}
其他
{
g.拉绳(校验码,字体,画笔,2,2);
}
//画图片的前景噪音点
for(int I=0;i 150我)
{
int x=random .接下来(图片。宽度);
int y=random .接下来(图片。身高);
形象SetPixel(x,y,Color .FromArgb(随机. next()));
}
//画图片的波形滤镜效果
if (_codetype!=代码类型.单词)
{
image=TwistImage(image,true,3,1);
}
//画图片的边框线
g.绘制矩形(新钢笔(颜色。银色),0,0,图像。宽度- 1,图像。高度-1);
ms=新系统10 . IO。内存流();
形象。保存(毫秒,系统画画。成像。图像格式。gif);
}
最后
{
g . dispose();
形象dispose();
}
返回ms;
}
#结束区域
注册界面效果图
注册界面代码展示
短信验证码,用接口就能实现
TimeSpan dtTo=new TimeSpan(0,0,60);//设置计时器的开始时间
(同Internationalorganizations)国际组织值;//用来存储随机数
公共注册()
{
初始化组件();
}
//获取短信验证码
私有空的代码按钮点击(对象发送方,EventArgs e)
{
正则表达式rx=新regex(@'^0{0,1}(13[0-9]|15[0-9]|15[0-9]|18[0-9]|17[0-9])[0-9]{8}$');
如果(!rx .IsMatch(注册电话。正文))
{
注册电话. text=
消息框.显示('手机号格式不正确,请重新输入', '提示消息框按钮.好了MessageBoxIcon .星号);
}
其他
{
Random rad=new Random();//实例化随机数产生器拉德;
值=弧度。下一个(1000,10000);//用拉德生成大于等于1000,小于等于9999的随机数;
注意。注(报名电话。文字,数值);
定时器1。start();
dtTo=新的时间跨度(0,0,60);
}
}
//时间控件用来实现60秒倒计时
私有空定时器1_Tick_1(对象发送方,EventArgs e)
{
代码按钮启用=假
dtTo=dtTo .Subtract(new TimeSpan(0,0,1));//每隔一秒减一
代码按钮Text='(' dtTo .秒。ToString()')' '重新获取;
if (dtTo .TotalSeconds==0.0)//当倒计时完毕
{
这个code button . com。启用=真
代码按钮. Text='点击获取验证码;
这个。定时器1。stop();
定时器1。dispose();
}
}
//注册按钮
私有void FinishButton_Click(对象发送方,EventArgs e)
{
Bool Bool=Fac();
如果(布尔值)
{
字符串类型='普通用户;
string sex=
如果(无线电人。已检查)//判断单选按钮的文本
{
性=广播员。文本;
}
否则如果(女广播员。已检查)
{
性=女广播员。文本;
}
字符串sql=字符串。格式('插入到用户列表值(“{0}”、“{1}”、“{2}”、“{3}”、“{4}”、“{5}”),注册用户.文本,EnrollPwd .短信,性,注册。文本,注册地址。文字、类型);
bool sqlinsert=DBHelper .ExecuteNonQuery(SQL);
if (sqlinsert)
{
DialogResult结果=消息框.显示('注册成功!', '提示消息框按钮.好了MessageBoxIcon .问题);
这个hide();
log in LG=new log in();
LG .ShowDialog();
}
}
其他
{
返回;
}
}
///摘要
///用于注册界面里格式的判断
////摘要
///返回/返回
私有布尔Fac()
{
字符串sql=字符串格式(' select * from UserList where UserID=' { 0 } '),EnrollUser .正文);
SqlDataReader reader=DBHelper .获取datareader(SQL);
如果(注册用户.Text==' ')
{
消息框.显示('用户名不能为空!', '提示消息框按钮.好了MessageBoxIcon .星号);
读者. close();
返回错误的
}
else if (EnrollPwd .Text==' ')
{
消息框.显示('请输入密码!', '提示消息框按钮.好了MessageBoxIcon .星号);
读者. close();
返回错误的
}
else if (EnrollPwd .文字!=EnrollPwdY .正文)
{
消息框.显示('两次密码必须一样!', '提示消息框按钮.好了MessageBoxIcon .星号);
读者. close();
返回错误的
}
否则如果(注册电话.Text==' ')
{
消息框.显示('请输入手机号!', '提示消息框按钮.好了MessageBoxIcon .星号);
读者. close();
返回错误的
}
else if (EtxtValidCode .Text==' ')
{
消息框.显示('请输入验证码!', '提示消息框按钮.好了MessageBoxIcon .星号);
读者. close();
返回错误的
}
else if (int .解析(EtxtValidCode .正文)!=值)
{
消息框.显示('请输入正确的验证码!', '提示消息框按钮.好了MessageBoxIcon .星号);
读者. close();
返回错误的
}
else if(读者. Read())
{
DialogResult结果=消息框.显示('此用户已存在,是否前往登录?', '提示消息框按钮.是否MessageBoxIcon .问题);
if (result==DialogResult .是)
{
log in LG=new log in();
LG .ShowDialog();
读者. close();
这个. close();
返回错误的
}
其他
{
读者. close();
返回错误的
}
}
其他
{
读者. close();
返回真实的
}
}
//窗体加载事件
私有无效注册_加载(对象发送方,EventArgs e)
{
代码按钮. Text='点击获取验证码;
定时器1。区间=1000;//设置每次间隔一秒
}
忘记密码界面效果图
下面为用户界面的展示
简单介绍一下:由于菜品是有很多的而且不确定数量,所以必须动态加载,不能拖图片控件等。
用户功能实现思路:首先要知道每个用户只能看自己的,所以在登录时候就必须用一个东西接收用户输入的名字,以便在主界面显示出与该用户相匹配的数据。
购物车界面
购物车首先要有一个购物车表用来存储用户添加的商品,当用户结账以后,购物车表中该用户的信息就应全部清除。然后为该用户生成订单(存入信息到订单表),并将用户购买的商品存入订单详情表中。
动态加载菜品代码展示
私有void XMB_Load(对象发送方,事件参数e)
{
/*SetStyle(ControlStyles .UserPaint,true);
SetStyle(ControlStyles .AllPaintingInWmPaint,true);//禁止擦除背景。
SetStyle(ControlStyles .DoubleBuffer,true);//双缓冲*/
克林_热菜LinkColor=Color .灰色;
Win32 .动画窗口(这个。句柄,500,Win32 .AW _ CENTER);//窗体出现效果
订单_pl .可见=假;
Or_panel1 .可见=假;//隐藏订单控件
菜单_全部_全部AutoScroll=true//添加滚动条
这个。toolstrip状态标签1。Font=新字体('微软雅黑,12,字体样式.粗体);
toolStripStatusLabel1 .文本=字符串。格式('欢迎"{0}"使用甜食点餐系统! ',保存用户名。姓名);
这个。定时器2。start();
string SQL=' select * from Food _ table ';
数据集ds=DBHelper .获取数据集(SQL);
int xx=0;
int YY=0;
for(int I=0;我同意表[0]。行。数数;我)
{
Label FoodName=new Label();
标签食品价格=新标签();
图片盒图片=new PictureBox();
Button Button=new Button();//创建控件
食品名称.name=' food name _ ' I;
食品价格. name=' food price _ ' I;
图片. name=' picture _ ' I;
按钮. Name=ds .表格[0]。行[i]['FoodID'].ToString();//加入购物车按钮命名为菜品表的FoodID
食品名称.Text=ds .表格[0]。行[i]['FoodName'].ToString();
食品价格Text=' ' ds .表格[0]。Rows[i]['FoodPrice'].ToString() '/份;//控件文本属性赋值
按钮. Text='加入购物车;
食品名称.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(); ? ? ? ? ? ? }我们的项目大概就这么多了,还有一些小功能没有详细介绍了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。