餐饮管理系统数据库课程设计论文
河南科技大学 课 程 设 计 说 明 书
课程名称 程序设计方法课程设计 题 目酒店餐饮管理系统的设计
院 系 经济与管理学院 班 级 信管122 学生姓名 韦一 指导教师 靖恒昌 日 期 2012年12月20日
课程设计任务书
(指导教师填写)
课程设计名称 程序设计方法课程设计 学生姓名 韦一 专业班级 信管122 设计题目 酒店餐饮管理系统 一、课程设计目的
该课程设计是信息管理本科集中实践性环节之一,是学习完《数据库基础与应用》和《程序设计方法》课程后进行的一次全面的综合练习。其目的是通过本课程设计使学生对具体问题应用《程序设计方法》课程中所学的方法与技术,进行需求分析及软件设计的过程,不仅对程序设计方法课程中的所有知识点进行一个全面的复习巩固,更重要的是增强学生解决实际问题的能力。 二、设计内容、技术条件和要求
(1)本环节要求学生根据程序设计方法整个课程的所学内容, 自己独立设计完成一个比较复杂的小型管理系统。
(2)所设计的小型管理系统要求功能比较完善,应包含输入输出、查询、插入、删除、打印等基本功能
(2)程序内容自己灵活设计,包括规划自己的数据库和设计程序功能和界面设计。
(3)数据库中不能少于两个表。
(5)程序应功能完善,界面友好,容错性好,操作方便。 三、时间进度安排 系统分析与规划 半周 系统设计与调试 一周 撰写课程设计说明书 半周 四、主要参考文献
郑阿奇,PowerBuilder 实用教程(第二版),电子工业出版社 董军,王玉,康祥顺,PowerBuilder 案例开发集锦,电子工业出版社 张长富,PowerBuilder9.0实例教程,电子科技大学出版社
指导教师签字: 2012 年 12 月 23 日
需求分析
通过实际了解,要求本系统具有以下功能:
系统采用人机交互的方式,界面美观友好,信息查询灵活、方便,数据存储 安全可靠。
实现对餐厅顾客开台、点菜/加菜、账目查询和结账等操作。
对用户输入的数据,进行严格的数据检验,尽可能的避免人为错误。 实现对消费账目自动结算。
实现对消费的历史记录进行查询。
实现对餐厅人员流动进行管理以及能够管理餐厅桌台信息。
系统应最大限度地实现易维护性和易操作性。餐饮管理系统的用例图,如下图2.1所示。
图2.1 餐饮管理系统的用例图
项目规划
餐饮管理系统主要由用户登录、桌台信息管理、服务员信息管理、修改密码、开台、取消开台、点/加菜、消费查询、数据库管理和退出等模块组成,具体规划如下。
(1) 用户登录模块
该模块主要用于实现验证用户是否合法,只有合法用户才能有权登录,只有登录成功情况下才能进入系统功能主界面,并且在登录的同时能验证登录人员的管理权限,根据权限显示其能管理范围。
(2) 桌台信息管理模块
该模块主要用于管理桌台的信息,可以设置桌台名称,桌台位置,桌台占用所需价钱。
(3) 服务员信息管理模块
该模块主要用于方便对服务人员的信息进行管理。 (4) 修改密码模块
该模块主要用于实现对登录人员的密码进行管理,长时间不更换密码是不安全的,增加此模块能增加系统的安全性。
(5) 开台模块
该模块主要用于实现对顾客进行开台,已经占用的桌台不能被再次分配,方便分配未占用的桌台给顾客
(6) 取消开台模块
该模块主要用于实现对已经开台的桌台进行取消开台。 (7) 消费查询模块
该模块主要用于实现客户能够查询自己已消费清单情况,进行核对自己的消费。
(8) 结账模块
该模块主要用于实现对客户的消费进行自动汇总,显示消费金额,能进行找零计算。
(9) 数据库管理模块
该模块主要用于实现对系统数据库的备份,防止系统在死机的情况下丢失大量重要信息。
餐饮管理系统的业务流程图如图3.1所示。
系统功能结构
系统功能结构图如图3.2所示。
数据表概要说明
为了对本系统后台数据库中的数据表有一个更清晰的认识,在此设计了一个数据表树形结构图,该结构图包括系统所有数据表,如图所示。
数据表树状结构图
部分数据表E-R 图
本里中规化出的实体主要有菜品信息实体、顾客点菜信息实体、桌台信息实体、用户登录信息实体和服务员信息实体。其中部分实体的E-R 图如下所示。
用户表实体E-R 图
菜品信息实体E-R 图
桌台信息实体E-R 图
员工信息实体E-R 图
顾客点菜信息实体E-R 图
数据表的结构
(1) food表(菜品信息表)
表food 用于保存菜品的基本信息,该表的结构如图所示。
菜品信息表
(2) guestfood表(顾客点菜信息表)
表guestfood 用于保存顾客点菜的详细信息,该表的结构如图所示。
(3) room表(桌台信息表)
表room 用于保存桌台的一些有关信息,该表的结构如图4.9所示。
桌台信息表
(4) userlogin 表(登录人员信息表)
表userlogin 用于保存登录用户基本信息,表的结构如图4.10所示。
登录用户信息表
(5) waiter表(餐厅服务人员信息表)
表waiter 用于保存餐厅服务人员的一些基本信息,表的结构如图所示。
餐厅服务人员信息表
系统登录模块的设计与实现
系统登录主要用于对进入餐饮管理系统的用户进行安全性检查,以防止非法用户进入该系统。在登录时,只有合法的用户,才可以进入该系统。系统登录窗体如图4.12所示。
系统登录
代码设计
单击【确定】按钮,程序执行判断用户输入的用户名和密码是否正确,如果正确,则成功登录餐饮管理系统,并将用户名、用户使用权限、用户登陆时间传到主窗体中,同时分别使用Names 、power 、Times 全局变量进行接受。否则,弹出“用
户名或密码错误”信息提示。【确定】按钮的Click 事件代码如下:
private void btnSure_Click(object sender, EventArgs e)
{
if (txtUserName .Text == "" ) //判断用户名是否为空
{
MessageBox .Show(" 用户名不能为空" , " 警告" , MessageBoxButtons .OK, MessageBoxIcon .Warning);
}
else
{
if (txtPwd.Text == "" ) //判断密码是否为空
{
MessageBox .Show(" 请输入密码" , " 警告" , MessageBoxButtons .OK, MessageBoxIcon .Warning);
}
else //用户名及密码不为空的情况下执行如下代码
{
SqlConnection conn = connectToDatabase .restaurantManagementConn (); conn.Open();
SqlCommand cmd = new SqlCommand ("select count(*) from UserLogin where
UserName='" + txtUserName .Text + "' and UserPwd='" + txtPwd .Text + "'" , conn);
int i = Convert .ToInt32(cmd.ExecuteScalar());
if (i > 0)
{
cmd = new SqlCommand ("select * from UserLogin where UserName='" + txtUserName .Text + "'" , conn);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
string UserPower = sdr["Power" ].ToString().Trim();
conn.Close();
formMain main = new formMain ();
main.power = UserPower;
main.Names = txtUserName .Text ;
main.Times = DateTime .Now.ToShortDateString();
main.Show();
this .Hide();
}
else
{
MessageBox .Show(" 用户名或密码错误" );
}
}
}
}
主窗体的设计与实现
在正确验证用户的用户名和密码以后,就显示出餐饮管理系统的主窗体。主窗体主要用于显示系统所具有的功能,例如菜单栏里显示了基础信息、辅助工具、系统设置、退出系统、系统维护等几个功能模块。用户可以选择相应的按钮对应的子功能对系统进行不同的操作,餐饮管理系统的主窗体如图4.13所示。
主窗体
主窗体实现的几个重要功能实现代码如下:
//接收从login 窗体传来的信息,以下四个定义的变量是以后代码用到的全局变量
public string power;
public string Names;
public string Times;
private SqlDataReader sdr;
//以下是窗体加载时执行的代码
private void formMain_Load(object sender, EventArgs e)
{
StatusLabeUser.Text = Names;
StatusLabeLoginTime.Text = Times;
switch (power)
{
case "0" : StatusLabePower.Text = " 超级管理员" ; break ;
case "1" : StatusLabePower.Text = " 经理" ;
TSMenuItemSystemMaintenance.Enabled = false ;
break ;
}
}
private void formMain_Activated(object sender, EventArgs e)//窗体激发时执行如下代码
{
lvDesk.Items.Clear();
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
SqlCommand cmd = new SqlCommand ("select * from Room", conn);
sdr = cmd.ExecuteReader();
while ( sdr .Read())
{
string status = sdr["RoomStatus" ].ToString().Trim();
AddItems(status );//根据桌台使用与否,选择图片显示桌子是否在被用中
}
conn.Close();
}
private void AddItems(string status)
{
if (status == " 使用" )
{
lvDesk.Items.Add(sdr["RoomName" ].ToString(), 1);
}
else
{
lvDesk.Items.Add(sdr["RoomName" ].ToString(), 0);
}
}
//右键中单击开台会执行如下代码
private void 开台ToolStripMenuItem_Click(object sender, EventArgs e) {
if (lvDesk.SelectedItems.Count != 0)
{
string names = lvDesk.SelectedItems[0].SubItems[0].Text;
formOpen frm = new formOpen ();
frm.name = names;
frm.ShowDialog();
}
else
{
MessageBox .Show(" 请选择一个桌台进行开台" );
}
}
//右键中单击取消开台会执行如下代码
private void 取消开台ToolStripMenuItem_Click(object sender, EventArgs e) {
if (lvDesk.SelectedItems.Count != 0)
{
string names = lvDesk.SelectedItems[0].SubItems[0].Text;
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
SqlCommand cmd = new SqlCommand ("update Room set RoomStatus='待用',Num=0 Where RoomName='" + names + "'" , conn);
cmd.ExecuteNonQuery();
cmd = new SqlCommand ("delete from GuestFood where DiningTable='" + names + "'" , conn); cmd.ExecuteNonQuery();
conn.Close();
formMain_Activated(sender, e);
}
else
{
MessageBox .Show(" 请选择桌台" );
}
}
其他右键功能代码在源代码中,代码设计思想和开台代码类似。
//单击listview 控件中的一项内容时会执行如下代码,这里我们将listview 的name 定义为lvDesk private void lvDesk_Click(object sender, EventArgs e)
{
string names = lvDesk.SelectedItems[0].SubItems[0].Text;
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
SqlCommand cmd = new SqlCommand ("select * from Room where RoomName='" + names + "'" , conn);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
string status = sdr["RoomStatus" ].ToString().Trim();//将选中桌台的状态信息提取出来 sdr.Close();
if (status == " 使用" )
{
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 (status == " 待用" )
{
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 ;
}
conn.Close();
}
//双击listview 控件中的一项内容时会执行如下代码
private void lvDesk_DoubleClick(object sender, EventArgs e) {
deskInfo desk = new deskInfo ();
desk .tableName = lvDesk.SelectedItems[0].SubItems[0].Text;
desk.ShowDialog();
}
//单击menustrip 控件中基础信息下的桌台信息管理按钮会执行如下代码
private void TSMenuItemTableInfo_Click(object sender, EventArgs e)
{
deskInfoManagement desk = new deskInfoManagement ();
desk.ShowDialog();
}
menustrip 控件中的其他按钮的代码设计思路与上面的单击menustrip 控件中基础信息下的桌台信息管理按钮类似都是初始化一个相应窗体的对象,显示窗体。
注:其他代码详见系统设计文档。
右键菜单中的几个重要功能的介绍
右键菜单功能中顾客可以选择开台,取消开台,点菜,查询消费记录以及结账,下面介绍其中三个重要功能的实现代码,有开台,点菜以及结账,窗体运行结果分别如图4.14、图4.15和图4.16所示。
开台窗体
点菜窗体
结账窗体
凭证信息录入窗体的主要实现代码如下:
实现代码
public string name;
public SqlConnection conn;
private void formOpen_Load(object sender, EventArgs e)
{
conn = connectToDatabase .restaurantManagementConn();
conn.Open();
SqlCommand cmd = new SqlCommand ("select * from Room", conn);
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
cbNum.Items.Add(sdr["RoomName" ].ToString().Trim());
}
cbNum.SelectedItem = name.Trim();
sdr.Close();
cmd = new SqlCommand ("select * from Waiter", conn);
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
cbWaiter.Items.Add(sdr["WaiterName" ].ToString().Trim());
}
cbWaiter.SelectedIndex = 0;
sdr.Close();
}
private void txtNum_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar != 8 && !char .IsDigit(e.KeyChar)) && e.KeyChar != 13)
{
MessageBox .Show(" 请输入数字" );
e.Handled = true ;
}
}
private void btnSave_Click(object sender, EventArgs e)
{
if (txtNum.Text == "" || Convert .ToInt32(txtNum.Text)
{
MessageBox .Show(" 请输入用餐人数" );
}
else
{
string RoomName = cbNum.SelectedItem.ToString();
SqlCommand cmd1 = new SqlCommand ("update Room set GuestName='" + txtName.Text + "',PaymentDate='" + dateTimePicker1.Value.ToString() + "',Num='" +
Convert .ToInt32(txtNum.Text) + "',WaiterName='" + cbWaiter.SelectedItem.ToString() + " ',RoomStatus='使用' where RoomName='" + name + "'" , conn);
cmd1.ExecuteNonQuery();
this .Close();
}
}
public string RName;
public int i = 0;
private void formOrder_Load(object sender, EventArgs e)//formOrder窗体加载时执行下列语句 {
// TODO: 这行代码将数据加载到表“restaurantManageDataSet.GuestFood”中。您可以根据需要
移动或移除它。
this .guestFoodTableAdapter.Fill(this .restaurantManageDataSet.GuestFood);
//向treeview 节点添加四类菜
TreeNode newnode1 = tvFood.Nodes.Add(" 煲汤" );
TreeNode newnode2 = tvFood.Nodes.Add(" 肉菜" );
TreeNode newnode3 = tvFood.Nodes.Add(" 素菜" );
TreeNode newnode4 = tvFood.Nodes.Add(" 主食" );
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
//表中foodtype 为1的是“煲汤”类的菜
SqlCommand cmd = new SqlCommand ("select * from food where FoodType='1'", conn); SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
//将属于“煲汤”类的菜从数据表中找出,加到treeview 节点上
newnode1.Nodes.Add(sdr[3].ToString().Trim()); }
sdr.Close();
cmd = new SqlCommand ("select * from food where FoodType='2'", conn);
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
newnode2.Nodes.Add(sdr[3].ToString().Trim());
}
sdr.Close();
cmd = new SqlCommand ("select * from food where FoodType='3'", conn);
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
newnode3.Nodes.Add(sdr[3].ToString().Trim());
}
sdr.Close();
cmd = new SqlCommand ("select * from food where FoodType='4'", conn);
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
newnode4.Nodes.Add(sdr[3].ToString().Trim());
}
sdr.Close();
cmd = new SqlCommand ("select * from Waiter", conn);//找出所有服务员信息
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
//将WaiterName 字段信息找出添加到cbWaiter.Items 上
cbWaiter.Items.Add(sdr["WaiterName" ].ToString().Trim()); }
cbWaiter.SelectedIndex = 0;
sdr.Close();
cmd = new SqlCommand ("select RoomStatus from Room where RoomName='" + RName + "'" , conn);
string zt = Convert .ToString(cmd.ExecuteScalar());
if (zt.Trim() == " 待用" )
{
groupBox1.Enabled = false ;
groupBox2.Enabled = false ;
groupBox3.Enabled = false ;
groupBox4.Enabled = false ;
}
conn.Close();
GetData();
tvFood.ExpandAll();
}
private void GetData()//以下代码用来将GuestFood 表中信息查询出来捆绑到DataGridView 上 {
SqlConnection conn = connectToDatabase .restaurantManagementConn();
SqlDataAdapter sda = new SqlDataAdapter ("select foodname,foodsum,foodallprice,waitername, textOfDetails,diningTable,datetime from GuestFood where diningtable='" + RName
+ "'order by ID desc", conn);
DataSet ds = new DataSet ();
sda.Fill(ds);
dgvFoods.DataSource = ds.Tables[0];
}
//对treeview 上节点执行双击操作时会执行以下代码
private void tvFood_DoubleClick(object sender, EventArgs e) {
string foodname = tvFood.SelectedNode.Text;//将双击项名称取出赋值给foodname
if (foodname == " 煲汤" || foodname == " 肉菜" || foodname == " 素菜" || foodname == " 主食" ) {
}
else
{
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
SqlCommand cmd = new SqlCommand ("select * from food where foodname='" + foodname + "'" , conn);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
txtNum.Text = sdr["foodnum" ].ToString().Trim();
txtName.Text = foodname;
txtprice.Text = sdr["foodprice" ].ToString().Trim();
conn.Close();
if (txtpnum.Text == "" )
{
MessageBox .Show(" 数量不能为空" );
return ;
}
else
{
txtallprice.Text = Convert .ToString(Convert .ToInt32(txtprice.Text)
* Convert .ToInt32(txtpnum.Text));
}
}
}
private void btnDelete_Click(object sender, EventArgs e)//单击删除按钮时执行如下代码
{
if (dgvFoods.SelectedRows.Count > 0)
{
string names = dgvFoods.SelectedCells[0].Value.ToString();
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
SqlCommand cmd = new SqlCommand ("delete from GuestFood where foodname='" + names + "' and diningTable='" + RName + "'" , conn);
cmd.ExecuteNonQuery();
conn.Close();
GetData();
}
}
private void btnSave_Click(object sender, EventArgs e)
{
if (txtName.Text == "" || txtNum.Text == "" || txtprice.Text == "" )
{
MessageBox .Show(" 请将选择菜系" );
return ;
}
else
{
if (txtpnum.Text == "" )
{
MessageBox .Show(" 数量不能为空" );
return ;
}
else
{
if (Convert .ToInt32(txtpnum.Text)
{
MessageBox .Show(" 请输入消费数量" );
return ;
}
else
{
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
i++;
SqlCommand cmd = new SqlCommand ("insert into GuestFood(id,
FoodNum,foodname,foodsum,foodallprice,waitername,textOfdetails,diningtable ,datetime) values('"+i +"','" + txtNum.Text.Trim() + "','" + txtName.Text.Trim() + "','" + txtpnum.Text.Trim() + "','" + Convert .ToDecimal(txtallprice.Text.Trim()) + "','" + cbWaiter.SelectedItem.ToString() + "','" + txtDetails.Text.Trim() + "','" + RName + "','" + DateTime .Now.ToString() + "')" ,conn);
cmd.ExecuteNonQuery();
conn.Close();
GetData();
}
}
}
}
实现代码
public string name;
public string price;
public string roomPrice;
private void formInvoicing_Load(object sender, EventArgs e)
{
// TODO: 这行代码将数据加载到表“restruantManageDataSet2.GuestFood”中。您可以根据需要
移动或移除它。
this .guestFoodTableAdapter.Fill(this .restruantManageDataSet2.GuestFood);
this .Text = name + " 结账" ; //将窗体标题显示当前哪一桌要结账
SqlConnection conn = connectToDatabase .restaurantManagementConn();
SqlDataAdapter sda = new SqlDataAdapter ("selec tFoodName,FoodSum,FoodAllPrice
,WaiterName,TextOfDetails,DiningTable,dateTime from GuestFood where DiningTable='" + name + "'order by ID desc", conn);
DataSet ds = new DataSet ();
sda.Fill(ds);
dgvRecord.DataSource = ds.Tables[0];
conn.Open();
SqlCommand cmd = new SqlCommand ("select sum(foodallprice) from GuestFood where DiningTable='" + name + "'" , conn);//将消费总额计算出来
price = Convert .ToString(cmd.ExecuteScalar());//用price 接收总额
if (price == "" ) //无消费情况下
{
lblprice.Text = "0" ; //将总消费后标签内容设为0
btnPay.Enabled = false ; //结账按钮不可用
}
else //存在消费情况下执行如下代码
{
cmd = new SqlCommand ("select RoomPrice from Room where RoomName='" + name + "'" , conn);
roomPrice = cmd.ExecuteScalar().ToString();
if (roomPrice == "0" )
{
btnPay.Enabled = true ;
lblprice.Text = price + "*95%" + "+" + roomPrice + "=" +
(Convert .ToDecimal(Convert .ToDouble(price)*Convert .ToDouble(0.95))).ToString("C" ); //菜品消费打九五折,包间不打折
}
else
{
btnPay.Enabled = true ;
lblprice.Text = price + "*95%" + "+" + roomPrice + "=" +
(Convert .ToDecimal(Convert .ToDouble(price) * Convert .ToDouble(0.95)) + Convert .ToDecimal(roomPrice )).ToString("C" );
}
conn.Close();
}
}
//收银文本框内容变化时会执行如下代码
private void txtmoney_TextChanged(object sender, EventArgs e) {
if (price == "" )
{
lbl0.Text = "0" ;
}
else
{
if (txtmoney.Text == "" )
{
txtmoney.Text = "0" ;
lbl0.Text = "0" ;
}
else
{
lbl0.Text = Convert .ToDecimal(Convert .ToDouble(txtmoney.Text.Trim())
- Convert .ToDouble(price) * Convert .ToDouble(0.95) -
Convert .ToDouble(roomPrice )).ToString("C" ); //显示找零值
}
}
}
private void btnPay_Click(object sender, EventArgs e)
{
if (txtmoney.Text == "" || lbl0.Text == "0" )
{
MessageBox .Show(" 请先结账" );
return ;
}
else
{
if (lbl0.Text.Substring(1, 1) == "-" )
{
MessageBox .Show(" 金额不足" );
return ;
}
else //结账完成后将结账后的顾客消费内容清除,将餐桌状况设置为待用
{
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
SqlCommand cmd = new SqlCommand ("delete from GuestFood where DiningTable='" + name + "'" , conn);
cmd.ExecuteNonQuery();
cmd = new SqlCommand ("update Room set RoomStatus='待用',Num=0,WaiterName='' where RoomName='" + name + "'" , conn);
cmd.ExecuteNonQuery();
conn.Close();
this .Close();
}
}
}
餐饮服务人员信息管理模块的设计
餐饮服务人员信息管理窗体主要是对服务人员信息进行管理。可实现对服务人员信息的查询、增加、改变与删除。
餐饮服务人员信息管理窗体运行结果如图4.17所示。
服务人员信息管理窗体
服务人员信息管理窗体的主要实现代码如下:
private void BindData()//将查询信息绑定到datagridview 控件上
{
SqlConnection conn = connectToDatabase .restaurantManagementConn();
SqlDataAdapter sda = new SqlDataAdapter ("select WaiterName,CardNum,WaiterNum,
Sex,Age,Tel,ID from Waiter order by ID desc", conn);
DataSet ds = new DataSet ();
sda.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
txtname .Text = dataGridView1.SelectedCells[0].Value.ToString();
txtID .Text = dataGridView1.SelectedCells[1].Value.ToString();
txtNum.Text = dataGridView1.SelectedCells[2].Value.ToString();
cmbGender .Text = dataGridView1.SelectedCells[3].Value.ToString();
txtAge .Text = dataGridView1.SelectedCells[4].Value.ToString();
txtTel .Text = dataGridView1.SelectedCells[5].Value.ToString();
btnNew.Enabled = true ;
btnRevise.Enabled = true ;
btnQuit.Enabled = true ;
}
private void btnSave_Click(object sender, EventArgs e)//单击保存按钮会执行如下代码
{
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
SqlCommand cmd = new SqlCommand ("select count(*) from Waiter where WaiterName='" + txtname .Text + "'" , conn);
int i = Convert .ToInt32(cmd.ExecuteScalar());//执行查询语句,查看执行语句后影响的行数 if (i > 0)
{
//根据各个文本框中输入内容更新数据库中waiter 表
cmd = new SqlCommand ("update Waiter set WaiterName='" + txtname.Text + "',CardNum='" + txtID.Text + "',WaiterNum='" + txtNum.Text + "',Sex='" +
cmbGender.SelectedItem.ToString() + "',Age='" + txtAge.Text + "',Tel='" + txtTel.Text + "' where ID='" + dataGridView1.SelectedCells[6].Value.ToString() + "'" , conn);
cmd.ExecuteNonQuery();
conn.Close();
BindData();
btnNew.Enabled = true ;
btnQuit.Enabled = true ;
btnSave.Enabled = true ;
}
else
{
//应用sql 语句向waiter 表中添加一行数据
cmd = new SqlCommand ("insert into Waiter(WaiterName,CardNum,WaiterNum,
Sex,Age,Tel,ID) values('" + txtname.Text.Trim() + "','" + txtID.Text.Trim() + "','" +
txtNum.Text.Trim() + "','" + cmbGender.SelectedItem.ToString() + "','" + txtAge.Text.Trim() + "','" + txtTel.Text.Trim() + "','" + txtNum.Text.Trim() + "')" , conn);
cmd.ExecuteNonQuery();
conn.Close();
BindData();
btnNew.Enabled = true ;
btnQuit.Enabled = true ;
btnSave.Enabled = true ;
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
//将单击选中的datagridview 控件上的一行内容从数据表中删除
SqlCommand cmd = new SqlCommand ("delete from Waiter where ID='" +
dataGridView1.SelectedCells[6].Value.ToString() + "'" , conn);
cmd.ExecuteNonQuery();
conn.Close();
BindData();
}
代码不全,其他代码见源代码
数据库管理模块的设计
数据库管理模块主要用来对数据库进行备份与回复,防止机器在down 掉的时候数据信息会全部丢失,利用此功能可以大大减少损失,将数据恢复到最近记录的数据备份。
本模块实现时的运行窗体如图
4.18
4.18 数据库管理模块窗体
数据库管理窗体的主要实现代码如下
private void button1_Click(object sender, EventArgs e)
{
try
{
string strg = Application .StartupPath.ToString();//获取启动了可执行文件的路径
strg = strg.Substring(0, strg.LastIndexOf("\\"));
strg += @"\Data"; //将路径字串和\Data连接,为了将备份文件存在\data根目录下 string sqltxt = @"BACKUP DATABASE restaurantManage TO Disk='" + strg + "\\" + txtDatabaseName .Text + ".bak" + "'" ; //aql语句,实现数据库文件备份
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
SqlCommand cmd = new SqlCommand (sqltxt, conn);
cmd.ExecuteNonQuery();
conn.Close();
if (MessageBox .Show(" 备份成功" , " 提示" , MessageBoxButtons .OK,
MessageBoxIcon .Exclamation) == DialogResult .OK)
{
this .Close();
}
}
catch (Exception ex)
{
MessageBox .Show(ex.Message.ToString());
}
}
private void btnQuit_Click(object sender, EventArgs e)
{
this .Close();
}
private void tabPage2_Click(object sender, EventArgs e)//单击回复数据库选项卡会执行如下代码 {
string strg = Application .StartupPath.ToString();
strg = strg.Substring(0, strg.LastIndexOf("\\"));
strg += @"\Data";
txt2DataName.Text = strg + "\\" + "Backup.bak" ; //将备份文件路径显示到txt2DataName .Text上 }
private void btnRecovery_Click(object sender, EventArgs e)
{
try
{
string str = "use master restore database restaurantManage from Disk='" +
txt2DataName .Text .Trim () + "'" ; //sql语句用来执行数据库的恢复
SqlConnection conn = connectToDatabase .restaurantManagementConn();
conn.Open();
SqlCommand cmd = new SqlCommand (str, conn);
cmd.ExecuteNonQuery();
if (MessageBox .Show(" 恢复成功" , " 提示" , MessageBoxButtons .OK,
MessageBoxIcon .Exclamation) == DialogResult .OK)
{
this .Close();
}
}
catch (Exception ex)
{
MessageBox .Show(ex.Message.ToString());
}
}
程序设计方法课程设计评分表
评阅教师签字: 年 月 日