餐饮管理系统之桌台管理
在餐饮管理中,桌台的管理是必不可少的,这里的管理是指对餐桌的查询、增加、删除、修改。
一、桌台信息表的设计:
在这个模块中需要在数据库Restaurant中添加“桌台信息”表,根据实际情况可将桌台的属性:名称、位置、状态作为表的属性列,,再增加一列编号作为该表的主键(可将其作为标识列即每新加一列就将其值自动加1)。。。
表的列的设计如下图所示:
编辑初始的信息如下图所示(注意:在编辑行信息时因为“编号”是标识列,故不能给赋值),,下图是因为后来程序运行后经过增加、删除后才截的图故而截的图的编号不是从1开始的。。。
在程序的主界面设计中增加“桌台信息”菜单,该菜单下有增加、查询这两个子菜单。在点击增加时会弹出“增加餐桌”窗体,即对“增加”这个子菜单添加click事件,代码如下:
private void 增加ToolStripMenuItem_Click(object sender, EventArgs e) { AddDesk adddesk = new AddDesk(); adddesk.ShowDialog(); }
二、桌台的增加:
- 界面设计
在增加桌台时,,因为编号自动加1,,新增加的桌台状态肯定是“空闲”的,故而只需填写名称、位置信息即可,所以在增加桌台的界面中只需设计名称、位置即可。界面如下:
将名称框中填写想要的名称,选择好位置后点击确认,将该新的桌台信息加入数据库。
- 加入数据库
在对数据库进行操作之前要将界面的信息获取保存下来,,代码如下
string name = txb_addName.Text.Trim();//获取输入的名称
string location = null;
foreach (object sd in this.Controls)//获取选择的位置
{
RadioButton rbt = sd as RadioButton;
if (rbt != null && rbt.Checked == true)
{
location = rbt.Text.Trim();
break;
}
}
要将数据加入数据库,要增加命名空间 using System.Data.SqlClient,否则程序会不识别SqlConnection等类型的变量,具体步骤:
第一,使用SqlConnection对象连接数据库;
//使用SqlConnection对象连接数据库,Data Source为服务器,,Initial Catalog为要用的数据库的名称,, //Integrated Security=SSPI 表示在windows验证模式下的打开Sql(在使用SQL server2008软件时是有身份验证) string strConn = @"Data Source=.;Initial Catalog=Restaurant;Integrated Security=SSPI; "; SqlConnection conn = new SqlConnection(strConn); conn.Open();
第二,建立SqlCommand对象,负责SQL语句的执行和存储过程的调用;
string sqlcommond = string.Format(@"insert into 桌台信息(状态,名称,位置)values('空闲','{0}','{1}')",name,location);//插入数据是数字就无 ''。。。 SqlCommand cmd = new SqlCommand(sqlcommond, conn);
第三,对SQL或存储过程执行后返回的“结果”进行操作。
cmd.ExecuteNonQuery();//执行SQL语句 MessageBox.Show("成功插入桌台!!"); conn.Close();
三、桌台查询:
- 界面设计
无论是删除还是更新桌台信息,都必须先将想要删、改的桌台查询出来之后才能进行后续的步骤,,故而将删、改和查询放到一个界面中。查询条件按名称、位置、状态来查询,查询结果放到控件listview中。界面如下:
- 按条件查询
在查询之前要连接数据库,代码见增加桌台是的连接数据库代码。
在查询中设计了一些小技巧,当选择条件为空时,将数据库中桌台信息表中的所有行都输出;当只是填写了一部分条件时,就将符合这条件的信息输出;当所有的条件都选择了,就只将满足所有条件的信息输出。根据界面信息对SQL查询命令进行调整,代码如下:
string strname = txb_searchname.Text;//名称 string strlocation = cbx_searchlocation.Text;//位置 string strstatus = cbx_searchstatus.Text;//状态 string sqlcommond = "select * from 桌台信息";//都没填时查全部信息 if(strname==""&&strlocation==""&&strstatus!="") { sqlcommond = string.Format(@"select * from 桌台信息 where 状态 ='" + strstatus + "'");//注意where两侧要有空格 } else if(strname==""&&strlocation!=""&&strstatus=="") { sqlcommond = string.Format(@"select * from 桌台信息 where 位置 ='" + strlocation + "'");//注意where两侧要有空格 } else if (strname != "" && strlocation == "" && strstatus == "") { sqlcommond = string.Format(@"select * from 桌台信息 where 名称 ='" + strname + "'");//注意where两侧要有空格 } else if (strname != "" && strlocation != "" && strstatus == "") { sqlcommond = string.Format(@"select * from 桌台信息 where (名称 ='" + strname + "') and(位置 ='" + strlocation + "')");//注意where两侧要有空格 } else if (strname != "" && strlocation == "" && strstatus != "") { sqlcommond = string.Format(@"select * from 桌台信息 where (名称 ='" + strname + "') and(状态 ='" + strstatus + "')");//注意where两侧要有空格 } else if (strname == "" && strlocation != "" && strstatus != "") { sqlcommond = string.Format(@"select * from 桌台信息 where (位置 ='" + strlocation + "') and(状态 ='" + strstatus + "')");//注意where两侧要有空格 } else if (strname != "" && strlocation != "" && strstatus != "") { sqlcommond = string.Format(@"select * from 桌台信息 where (名称 ='" + strname + "')and(位置 ='" + strlocation + "') and(状态 ='" + strstatus + "')");//注意where两侧要有空格 }
将读取的数据库的数据保存在listview中,先新定义一个listviewitem类型的变量it,将数据库中的一行数据保存在it中,再将在it加入到listview1中,知道将满足条件的桌台都输出完为止,之后关闭数据库,代码如下:
//建立SqlCommand对象,负责SQL语句的执行和存储过程的调用; SqlCommand cmd = new SqlCommand(sqlcommond,conn); //对SQL或存储过程执行后返回的“结果”进行操作 SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; SqlDataReader dr = cmd.ExecuteReader(); listView1.Items.Clear();//再次按查询时将上次的查询结果清除 while (dr.Read()) { //MessageBox.Show("1111"); //构建一个ListView的类型的变量,存入数据库数据,以便添加到listView1的行数据中 ListViewItem it = new ListViewItem(); it.Text = dr["编号"].ToString(); it.SubItems.Add(dr["名称"].ToString()); it.SubItems.Add(dr["位置"].ToString()); it.SubItems.Add(dr["状态"].ToString()); //将lt数据添加到listView1控件中 listView1.Items.Add(it); } conn.Close();
- 更新桌台信息
在更新桌台信息时,将原有的信息先显示在更新窗体对应的控件中,这就需要两个窗体之间传送信息。在本模块中是在接收窗体中定义公有string类型的变量num、defname、deflocation,在生成信息的窗体中给公有变量赋值,以此传递信息。具体代码如下
if (listView1.SelectedItems.Count > 0)//将选择的信息传递给更新桌台窗体 { UpdateDesk updesk = new UpdateDesk(); updesk.num = listView1.SelectedItems[0].SubItems[0].Text; updesk.defname = listView1.SelectedItems[0].SubItems[1].Text; updesk.deflocation = listView1.SelectedItems[0].SubItems[2].Text; updesk.ShowDialog(); string str = listView1.SelectedItems[0].SubItems[0].Text; //MessageBox.Show(str); listView1.SelectedItems.Clear();//将选择的项改为未选择 } else { MessageBox.Show("请选择你要更新的桌台!"); }
在更新桌台窗体中,因为编号是标识列故而不能进行修改,可以将标号的文本框属性ReadOnly值改为True,界面如下
为了方便用户清晰的知道更新的是哪一个桌台,在初始化更新桌台窗体时,给对应的位置赋初值,这就用到了传来的信息了。代码如下
private void UpdateDesk_Load(object sender, EventArgs e) { //根据选择要写改的桌台,给赋初值 txb_num.Text = num; txb_updateName.Text = defname; foreach (object sd in this.Controls) { RadioButton rbt = sd as RadioButton; if (rbt != null && rbt.Text== deflocation) { rbt.Checked = true; break; } } }
再点击确认后,将更新相应的数据库,(只要对数据库进行操作就必须连接数据库,第二部分中有详细说明,方法不在赘述)。
更新数据库的代码如下
private void btn_addOK_Click(object sender, EventArgs e) { string name = txb_updateName.Text.Trim(); int num = Convert.ToInt32( txb_num.Text); string location = null; foreach (object sd in this.Controls) { RadioButton rbt = sd as RadioButton; if (rbt != null && rbt.Checked == true) { location = rbt.Text.Trim(); break; } } string strConn = @"Data Source=.;Initial Catalog=Restaurant;Integrated Security=SSPI; "; SqlConnection conn = new SqlConnection(strConn); conn.Open(); //建立SqlCommand对象,负责SQL语句的执行和存储过程的调用; string sqlcom = string.Format(@"update 桌台信息 set 名称 = '"+name+"',位置 = '"+location+"' where 编号 = '"+num+"'");//插入数据是数字就无 ''。。。 SqlCommand cmd = new SqlCommand(sqlcom, conn); cmd.ExecuteNonQuery(); MessageBox.Show("成功更新桌台!!"); conn.Close(); }
- 删除桌台
在删除桌台时从数据库中删除后,在listview中也要一并删除。删除listview中选中的一行,需要获取选中的行的索引,然后通过listview1.items.remove(listview1.tems[索引值])。具体删除代码如下:
private void btn_delete_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { int num = Convert.ToInt32(listView1.SelectedItems[0].SubItems[0].Text); string strConn = @"Data Source=.;Initial Catalog=Restaurant;Integrated Security=SSPI; "; SqlConnection conn = new SqlConnection(strConn); conn.Open(); string sqlcommond = string.Format(@"delete from 桌台信息 where 编号 = '" + num + "'"); //建立SqlCommand对象,负责SQL语句的执行和存储过程的调用; SqlCommand cmd = new SqlCommand(sqlcommond, conn); //对SQL或存储过程执行后返回的“结果”进行操作 SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; cmd.ExecuteReader(); MessageBox.Show("成功从数据库中删除"); conn.Close(); //删除选择项 int lisnum = listView1.Items.IndexOf(listView1.FocusedItem); listView1.Items.Remove(listView1.Items[lisnum]); } else { MessageBox.Show("请选择你要删除的桌台!"); } }