机器人炒菜是全自动的,但是,即使是所有的事情都由机器人来处理,还是需要人来负责收银以及处理机器的一切异常(处理器可能会因为湿度,温度等原因发生一些不可预料的故障)。为了提高员工结账,管理客户的效率,我想到了这一套系统,平台为WindowsXP,开发组件包括VisualStudio2010+MicrosoftSQLServer2005,用到的语言是C#,主要是考虑到C#的界面美观,并且,在之后可能会有一些联网的扩展,用C#的可扩展性和可维护性均较强。
二.数据库表格规划
经分析,主要由以下六个E-R实体图组成,结合公司的实际,我会做出一些修改,tb的意思是table(表单),分别为商品信息(tb_food),顾客消费信息(tb_GuestFood),桌台信息(tb_Room),职员信息(tb_Waiter),用户信息(tb_User),商品类别信息(tb_foodtype),下面一一介绍其主键以及其它的属性(主键必须唯一地标识这个元素):
商品信息:主键为编号(ID),然后是类别编号(Foodty),商品代号(foodnum),商品名(foodname),商品价格(foodprice)。
商品类别信息:主键为类别编号(ID),然后是类别名(foodtype)。
三.项目的具体模块分析以及与炒菜机器人的结合
(1)实现人机交互,界面美观,信息灵活,数据库安全可靠(用的是SQLServer),操作简单。
(2)具备餐厅顾客的开台,点菜,加菜,账目查询和结账的功能,并且集员工的管理于一体(必要的时候可以将员工的财务管理系统和餐饮管理系统合二为一)。
(3)能够对顾客的消费历史记录进行查询。
(4)在后期可以考虑和机器人的处理器的联网,这样,便可以在客户点菜的同时将菜谱输入进机器人的程序中,方便了一体化的操作。
四。构成模块(这里以结构图的方式展现菜单(menu)的功能)构成模块
限于位置原因,后面四个子菜单的信息在此列出:
(1)系统维护——权限管理,系统备份,系统恢复。
(2)系统设置——口令设置,锁定系统。
(3)帮助——关于。
(4)退出——退出系统。
五.软件初体验
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
namespaceMrCy
{
publicpartialclassLogin:Form//窗体结构
publicLogin()
InitializeComponent();//初始化
}
privatevoidForm1_Load(objectsender,EventArgse)
txtName.Focus();//设置焦点到txtName
privatevoidtxtPwd_KeyPress(objectsender,KeyPressEventArgse)
if(e.KeyChar==13)
btnSubmit_Click(sender,e);
privatevoidbtnSubmit_Click(objectsender,EventArgse)
if(txtName.Text=="")//如果用户名为空
MessageBox.Show(“请输入用户名”,“警告”,MessageBoxButtons.OK,MessageBoxIcon.Warning);
else
if(txtPwd.Text=="")//如果密码为空
MessageBox.Show(“请输入密码”,“警告”,MessageBoxButtons.OK,MessageBoxIcon.Warning);
SqlConnectionconn=BaseClass.DBConn.CyCon();
conn.Open();
SqlCommandcmd=newSqlCommand("selectcount(*)fromtb_UserwhereUserName='"+txtName.Text+"'andUserPwd='"+txtPwd.Text+"'",conn);
inti=Convert.ToInt32(cmd.ExecuteScalar());
if(i>0)
cmd=newSqlCommand("select*fromtb_UserwhereUserName='"+txtName.Text+"'",conn);
SqlDataReadersdr=cmd.ExecuteReader();
sdr.Read();
stringUserPower=sdr["power"].ToString().Trim();
conn.Close();
Mainmain=newMain();
main.power=UserPower;//这里以数字设置了power
main.Names=txtName.Text;
main.Times=DateTime.Now.ToShortDateString();
main.Show();
this.Hide();
MessageBox.Show("用户名或密码错误");
privatevoidbtnConcel_Click(objectsender,EventArgse)
if(MessageBox.Show("确定退出系统吗?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Asterisk)==DialogResult.OK)
Application.Exit();
源代码如下:
publicpartialclassMain:Form
publicMain()
InitializeComponent();
publicSqlDataReadersdr;
publicstringpower;
publicstringNames;
publicstringTimes;
privatevoidfrmMain_Load(objectsender,EventArgse)
//这里根据具体的权限处理权限信息
switch(power)
case"0":toolStripStatusLabel13.Text="超级管理员";break;
case"1":toolStripStatusLabel13.Text="经理";break;
case"2":toolStripStatusLabel13.Text="一般用户";break;
toolStripStatusLabel10.Text=Names;
toolStripStatusLabel16.Text=Times;
if(power=="2")
系统维护SToolStripMenuItem.Enabled=false;
基础信息MToolStripMenuItem.Enabled=false;
if(power=="1")
//对使用和待用状态的不同处理,主要是对桌台点击鼠标右键时,对应的某些选项进行了加灰色处理。(点击鼠标右键时对应的内容如下)
(图为桌子在使用状态下的点击结果)
privatevoidAddItems(stringrzt)
if(rzt=="使用")
lvDesk.Items.Add(sdr["RoomName"].ToString(),1);
lvDesk.Items.Add(sdr["RoomName"].ToString(),0);
privatevoid开台ToolStripMenuItem_Click(objectsender,EventArgse)
if(lvDesk.SelectedItems.Count!=0)
stringnames=lvDesk.SelectedItems[0].SubItems[0].Text;
Openopenroom=newOpen();
openroom.name=names;
openroom.ShowDialog();
MessageBox.Show("请选择桌台");
privatevoidfrmMain_Activated(objectsender,EventArgse)
lvDesk.Items.Clear();
SqlCommandcmd=newSqlCommand("select*fromtb_Room",conn);
sdr=cmd.ExecuteReader();
while(sdr.Read())
stringzt=sdr["RoomZT"].ToString().Trim();
AddItems(zt);
privatevoid点菜ToolStripMenuItem_Click(objectsender,EventArgse)
DCdc=newDC();
dc.RName=names;
dc.ShowDialog();
privatevoid消费查询ToolStripMenuItem_Click(objectsender,EventArgse)
Serchserch=newSerch();
serch.RName=names;
serch.ShowDialog();
privatevoid结账ToolStripMenuItem_Click(objectsender,EventArgse)
JZjz=newJZ();
jz.Rname=names;
jz.ShowDialog();
//这里是具体的对加灰的处理
privatevoidlvDesk_DoubleClick(objectsender,EventArgse)
Detailsdetails=newDetails();
details.TableName=lvDesk.SelectedItems[0].SubItems[0].Text;
details.ShowDialog();
privatevoidlvDesk_Click(objectsender,EventArgse)
SqlCommandcmd=newSqlCommand("select*fromtb_RoomwhereRoomName='"+names+"'",conn);
sdr.Close();
if(zt=="使用")
this.contextMenuStrip1.Items[0].Enabled=false;
this.contextMenuStrip1.Items[1].Enabled=true;
this.contextMenuStrip1.Items[3].Enabled=true;
this.contextMenuStrip1.Items[5].Enabled=true;
this.contextMenuStrip1.Items[6].Enabled=true;
if(zt=="待用")
this.contextMenuStrip1.Items[0].Enabled=true;
this.contextMenuStrip1.Items[1].Enabled=false;
this.contextMenuStrip1.Items[3].Enabled=false;
this.contextMenuStrip1.Items[5].Enabled=false;
this.contextMenuStrip1.Items[6].Enabled=false;
privatevoid取消开台toolStripMenuItem_Click(objectsender,EventArgse)
SqlCommandcmd=newSqlCommand("updatetb_RoomsetRoomZT='待用',Num=0whereRoomName='"+names+"'",conn);
cmd.ExecuteNonQuery();
cmd=newSqlCommand("deletefromtb_GuestFoodwherezhuotai='"+names+"'",conn);
frmMain_Activated(sender,e);
MessageBox.Show("×àì¨");
privatevoid桌台信息ToolStripMenuItem1_Click(objectsender,EventArgse)
Deskdesk=newDesk();
desk.ShowDialog();
privatevoid职员信息ToolStripMenuItem1_Click(objectsender,EventArgse)
Userusers=newUser();
users.ShowDialog();
privatevoid日历ToolStripMenuItem1_Click(objectsender,EventArgse)
Calendercalender=newCalender();
calender.ShowDialog();
privatevoid记事本ToolStripMenuItem1_Click(objectsender,EventArgse)
System.Diagnostics.Process.Start("notepad.exe");
privatevoid计算器ToolStripMenuItem1_Click(objectsender,EventArgse)
System.Diagnostics.Process.Start("calc.exe");
privatevoid权限管理ToolStripMenuItem1_Click(objectsender,EventArgse)
QxGlqx=newQxGl();
qx.ShowDialog();
privatevoid系统备份ToolStripMenuItem1_Click(objectsender,EventArgse)
BFbf=newBF();
bf.ShowDialog();
privatevoid系统恢复ToolStripMenuItem1_Click(objectsender,EventArgse)
HFhf=newHF();
hf.ShowDialog();
privatevoid口令设置ToolStripMenuItem1_Click(objectsender,EventArgse)
Pwdpwd=newPwd();
pwd.names=Names;
pwd.ShowDialog();
privatevoid锁定系统ToolStripMenuItem1_Click(objectsender,EventArgse)
Locklocksystem=newLock();
locksystem.Owner=this;
locksystem.ShowDialog();
privatevoid关于ToolStripMenuItem1_Click(objectsender,EventArgse)
AboutBox1ab=newAboutBox1();
ab.ShowDialog();
privatevoid退出系统ToolStripMenuItem1_Click(objectsender,EventArgse)
if(MessageBox.Show("è·¨í3±μí3e£","ìáê",MessageBoxButtons.OKCancel,MessageBoxIcon.Exclamation)==DialogResult.OK)
privatevoid系统维护ToolStripMenuItem_Click(objectsender,EventArgse)
(图为桌子在待使用状态下的点击结果)
点击开台之后,系统便进入到开台界面:
publicpartialclassOpen:Form
publicOpen()
publicstringname;
publicSqlConnectionconn;
privatevoidfrmOpen_Load(objectsender,EventArgse)
conn=BaseClass.DBConn.CyCon();
cbNum.Items.Add(sdr["RoomName"].ToString().Trim());
cbNum.SelectedItem=name.Trim();
cmd=newSqlCommand("select*fromtb_Waiter",conn);
cbWaiter.Items.Add(sdr["WaiterName"].ToString().Trim());
cbWaiter.SelectedIndex=0;
privatevoidtxtNum_KeyPress(objectsender,KeyPressEventArgse)
if((e.KeyChar!=8&&!char.IsDigit(e.KeyChar))&&e.KeyChar!=13)
MessageBox.Show("请输入数字");//IsDigit函数用来检验
e.Handled=true;
privatevoidbtnSave_Click(objectsender,EventArgse)
if(txtNum.Text==""||Convert.ToInt32(txtNum.Text)<=0)
MessageBox.Show("请输入用餐人数");
stringRoomName=cbNum.SelectedItem.ToString();
SqlCommandcmd1=newSqlCommand("updatetb_RoomsetGuestName='"+txtName.Text+"',zhangdanDate='"+dateTimePicker1.Value.ToString()+"',Num='"+Convert.ToInt32(txtNum.Text)+"',WaiterName='"+cbWaiter.SelectedItem.ToString()+"',RoomZT=’使用’whereRoomName='"+name+"'",conn);
cmd1.ExecuteNonQuery();
this.Close();
privatevoidbtnExit_Click(objectsender,EventArgse)
保存了开台信息之后,便可以进入点菜和加菜环节
publicpartialclassDC:Form
publicDC()
InitializeComponent();//窗体初始化
publicstringRName;
privatevoidfrmDC_Load(objectsender,EventArgse)
this.Text=RName+“点/加菜”;
//这里的逻辑可以根据具体的炒菜机器人进行适当修改
TreeNodenewnode1=tvFood.Nodes.Add("锅底");
TreeNodenewnode2=tvFood.Nodes.Add("配菜");
TreeNodenewnode3=tvFood.Nodes.Add("烟酒");
TreeNodenewnode4=tvFood.Nodes.Add("主食");
SqlCommandcmd=newSqlCommand("select*fromtb_foodwherefoodty='1'",conn);
newnode1.Nodes.Add(sdr[3].ToString().Trim());
cmd=newSqlCommand("select*fromtb_foodwherefoodty='2'",conn);
newnode2.Nodes.Add(sdr[3].ToString().Trim());
cmd=newSqlCommand("select*fromtb_foodwherefoodty='3'",conn);
newnode3.Nodes.Add(sdr[3].ToString().Trim());
cmd=newSqlCommand("select*fromtb_foodwherefoodty='4'",conn);
newnode4.Nodes.Add(sdr[3].ToString().Trim());
cmd=newSqlCommand("selectRoomZTfromtb_RoomwhereRoomName='"+RName+"'",conn);
stringzt=Convert.ToString(cmd.ExecuteScalar());
if(zt.Trim()=="待用")
groupBox1.Enabled=false;
groupBox2.Enabled=false;
groupBox3.Enabled=false;
groupBox4.Enabled=false;
GetData();
tvFood.ExpandAll();
privatevoidtreeView1_DoubleClick(objectsender,EventArgse)
stringfoodname=tvFood.SelectedNode.Text;
if(foodname=="锅底"||foodname=="配菜"||foodname=="烟酒"||foodname=="主食")
SqlCommandcmd=newSqlCommand("select*fromtb_foodwherefoodname='"+foodname+"'",conn);
txtNum.Text=sdr["foodnum"].ToString().Trim();
txtName.Text=foodname;
txtprice.Text=sdr["foodprice"].ToString().Trim();
if(txtpnum.Text=="")
MessageBox.Show("数量不能为空");
return;
txtallprice.Text=Convert.ToString(Convert.ToInt32(txtprice.Text)*Convert.ToInt32(txtpnum.Text));
privatevoidtxtpnum_TextChanged(objectsender,EventArgse)
if(Convert.ToInt32(txtpnum.Text)<1)
MessageBox.Show("数量不能为小于1的数字");
privatevoidGetData()//连数据库
SqlDataAdaptersda=newSqlDataAdapter("selectfoodname,foodsum,foodallprice,waitername,beizhu,zhuotai,datatimefromtb_GuestFoodwherezhuotai='"+RName+"'orderbyIDdesc",conn);
DataSetds=newDataSet();
sda.Fill(ds);
dgvFoods.DataSource=ds.Tables[0];
privatevoidtxtpnum_KeyPress(objectsender,KeyPressEventArgse)
MessageBox.Show("请输入数字");
privatevoidbtnDelete_Click(objectsender,EventArgse)
if(dgvFoods.SelectedRows.Count>0)
stringnames=dgvFoods.SelectedCells[0].Value.ToString();
SqlCommandcmd=newSqlCommand("deletefromtb_GuestFoodwherefoodname='"+names+"'andzhuotai='"+RName+"'",conn);
//这里解决一些按钮的异常
if(txtName.Text==""||txtNum.Text==""||txtprice.Text=="")
MessageBox.Show("请选择菜系");
if(Convert.ToInt32(txtpnum.Text)<=0)
MessageBox.Show("消费数量不能小于等于0");
SqlCommandcmd=newSqlCommand("insertintotb_GuestFood(foodnum,foodname,foodsum,foodallprice,waitername,beizhu,zhuotai,datatime)values('"+txtNum.Text.Trim()+"','"+txtName.Text.Trim()+"','"+txtpnum.Text.Trim()+"','"+Convert.ToDecimal(txtallprice.Text.Trim())+"','"+cbWaiter.SelectedItem.ToString()+"','"+txtbz.Text.Trim()+"','"+RName+"','"+DateTime.Now.ToString()+"')",conn);
在这里,我们暂时缓一下,处理一下数据库的联结问题,因为这里选择的是SQLServer,所以采用如下代码:
namespaceMrCy.BaseClass
classDBConn
publicstaticSqlConnectionCyCon()
returnnewSqlConnection("server=(local);database=eat;uid=sa;pwd=888888");
关于结账,我们有如下的界面:(消费查询暂时有一些问题,是否是同一个界面我暂时也不知道)
publicpartialclassJZ:Form
publicJZ()
publicstringRname;
publicstringprice;
publicstringbjf;
privatevoidfrmJZ_Load(objectsender,EventArgse)
this.Text=Rname+"结账";
groupBox1.Text="当前桌台-"+Rname;
SqlDataAdaptersda=newSqlDataAdapter("selectfoodname,foodsum,foodallprice,waitername,beizhu,zhuotai,datatimefromtb_GuestFoodwherezhuotai='"+Rname+"'orderbyIDdesc",conn);
dgvRecord.DataSource=ds.Tables[0];
SqlCommandcmd=newSqlCommand("selectsum(foodallprice)fromtb_GuestFoodwherezhuotai='"+Rname+"'",conn);
price=Convert.ToString(cmd.ExecuteScalar());
if(price=="")
lblprice.Text="0";
btnJZ.Enabled=false;
cmd=newSqlCommand("selectRoomBJFfromtb_RoomwhereRoomName='"+Rname+"'",conn);
bjf=cmd.ExecuteScalar().ToString();
//这里涉及了一个打折的优惠活动,可以根据公司内部的具体优惠活动进行打折处理。
if(bjf=="0")
btnJZ.Enabled=true;
lblprice.Text=price+"*95%"+"+"+bjf+"="+(Convert.ToDecimal(Convert.ToDouble(price)*Convert.ToDouble(0.95))).ToString("C");
lblprice.Text=price+"*95%"+"+"+bjf+"="+(Convert.ToDecimal(Convert.ToDouble(price)*Convert.ToDouble(0.95))+Convert.ToDecimal(bjf)).ToString("C");
privatevoidtxtmoney_KeyPress(objectsender,KeyPressEventArgse)
privatevoidtxtmoney_TextChanged(objectsender,EventArgse)
lbl0.Text="0";
if(txtmoney.Text=="")
txtmoney.Text="0";
lbl0.Text=Convert.ToDecimal(Convert.ToDouble(txtmoney.Text.Trim())-Convert.ToDouble(price)*Convert.ToDouble(0.95)-Convert.ToDouble(bjf)).ToString("C");
privatevoidbtnJZ_Click(objectsender,EventArgse)
if(txtmoney.Text==""||lbl0.Text=="0")
MessageBox.Show("请先结账");
if(lbl0.Text.Substring(1,1)=="-")
MessageBox.Show("金额不足");
SqlCommandcmd=newSqlCommand("deletefromtb_GuestFoodwherezhuotai='"+Rname+"'",conn);
cmd=newSqlCommand("updatetb_RoomsetRoomZT='待用',Num=0,WaiterName=''whereRoomName='"+Rname+"'",conn);