编号:XH03JW035-11/0
毕 业 设 计 (论 文)
题目: 餐 饮 管 理 系 统
系 别: 信 息 技 术
班 级:
姓 名:
学 号:
指导教师:
20xx年3月18日
摘 要
在计算机软件普遍应用的今天,越来越多的软件与生活中的大小事件联系起来,各式各样的软件为我们的生活管理带来了便利。在加上软件开发平台的多样性与简便性,使得软件开发越来越简单,所能实现的功能越来越强大,管理越来越方便,但是成本却越来越低,这就使得各行各业把它们的传统管理方式转变为利用软件来管理。本论文运用C#编程语言在.NET平台上设计开发“餐饮管理系统”。实现了顾客开台、点菜、结帐等等要求的界面化管理,该系统操作简单,节省方便了管理员的工作。数据电子化存储,节省了数据存储的费用并增加了数据存储量。实现了餐饮业的科学管理。
关键词:.NET C# 餐饮管理
目 录
第一章 引言 ................................................................................................................................................ 4
第二章 餐饮管理系统的目标与分析 ........................................................................................................ 5
2.1 传统餐饮存在的问题 ..................................................................................................................... 5
2.2 餐饮管理系统的目标 ..................................................................................................................... 5
2.3 可行性分析 ..................................................................................................................................... 5
2.4 业务流程分析 .................................................................................................................................. 6
第三章 C#简介 ........................................................................................................................................... 9
3.1设计目标 ........................................................................................................................................... 9
3.2语言特性 ........................................................................................................................................... 9
3.3程序的执行 ..................................................................................................................................... 10
3.4标准化 ............................................................................................................................................. 11
3.5总结 ................................................................................................................................................. 11
第四章 设计开发项目 .............................................................................................................................. 11
4.1数据库设计 ................................................................................................................................... 11
4.2 登录模块的设计 ............................................................................................................................ 14
4.3主窗体设计 ..................................................................................................................................... 15
4.4开台模块设计 ................................................................................................................................. 19
4.5点菜模块设计 ................................................................................................................................. 20
4.6结账模块设计 ................................................................................................................................. 22
参考文献 .................................................................................................................................................... 24
第一章 引言
近年来,随着人民的生活水平的不断提高,餐饮业的消费持续增长,竞争愈来愈激烈。然而,传统餐饮企业的日常运作还是靠人工管理,从原材料入库到客人点单,再到结账基本上由人工完成记录,这样做不仅耗费人力资源而且容易导致记录丢失或重复等错误,造成管理水平低下。这就迫切需要标准的、高效率的计算机管理方式引导其发展,通过计算机管理该企业的日常运作,给管理者以决策参考的模型,来不断完善管理水平,提高工作效率。
当今世界已进入了在计算机信息管理领域中激烈竞争的时代,应用计算机已经变得十分普遍了,如同我们离不开的自行车、汽车一样。我们应该承认,谁掌握的知识多,信息量大,信息处理速度快,批量大,谁的效率就高,谁就能够在各种竞争中立于不败之地。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。越来越多的管理人员意识到信息管理的重要性。
作为计算机应用的一部分,使用计算机对餐饮企业信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高信息管理的效率,也是企业的科学化、正规化管理与世界接轨的重要条件。
本系统选择目前市场上价格比较低廉的数据库服务器产品: sql server2000及配套的平台Windows XP。而前台开发工具采用.NET,语言用C#,利用其可视化的开发环境、丰富的控件资源,快速开发出了餐饮管理信息系统应用程序。
第二章 餐饮管理系统的目标与分析
2.1 传统餐饮存在的问题
由于传统酒店的管理还处于人工管理阶段,所以酒店的管理效率不高。由于缺乏科学的管理和现代化的管理工具,传统酒店在管理上和业务的安排上都存在着不足。
1.包间的管理不够科学方便,使用情况不直观。
2.库管员不能随时掌握库存情况,不能及时发现商品缺货的情况,另外统计商品数量即费时又费力。
3.由于酒店的商品种类多,菜样多变,靠人工方式管理商品和菜品信息有很多不便。例如商品数量大导致查找商品信息困难等。
2.2 餐饮管理系统的目标
面对服务行业的高速发展和餐饮企业信息发展的过程中出现的各种情况,本系统应达到以下目标:
? 系统采用人机交互的方式,界面美观友好,信息查询灵活、方便,数据存储安全可靠。
? 实现对餐厅顾客开台、点菜/加菜、账目查询和结账等操作。
? 对用户输入的数据,进行严格的数据检验,尽可能的避免人为错误。
? 实现对消费账目自动结算。
? 实现对消费的历史记录进行查询,支持模糊查询。
? 系统应最大限度地实现易维护性和易操作性。
2.3 可行性分析
2.3.1 技术上的可行性
技术方面的可行性就是根据现有的技术条件,能否实现系统的各项要求。
1.设备:该系统对所需的硬件设备,如pc机配件的性能要求一般,现有设备的性能完全能够满足系统功能的要求。
2.软件上,本系统属于数据库应用程序,本系统需要一个数据库服务器及其运行的操作系统平台,根据客户的数据量并不是十分巨大,我们选择目前市场上价格比较低廉的数据库服务器产品:SQL Server2000及配套的平台Windows XP。而前台开发工具采用Microsoft Visual Studio 2005 ,利用其可视化的开发环境、丰富的控件资源,能快速开发出应用程序。
2.3.2 经济上的可行性
1.费用:本系统属于小型的餐饮管理系统,软硬件费用要求不高,一般的餐饮行业都能支付的了费用。
2.效用:实施该系统也能给公司带来长期效益,它可帮助领导实现管理方法的现代化、科学化,极大地提高餐饮企业的工作质量与工作效率,减少管理支出的费用,从而保证企业管理的可持续的良好发展。因此经济上具有了系统开发的可行性。
2.3.3 简要总结
经过细致地初步调查和严密地可行性分析,我们认为在现有条件下,为酒店开发餐饮管理信息系统是完全可行的。
2.4 业务流程分析
2.4.1 系统功能结构
为了实现对餐饮企业的基本管理,现对餐饮管理系统结构主要细分为四大模块。如图表 1.1:
图表 1.1
1.基础信息:
桌台信息:主要是针对桌台的基本信息进行查询以及增删改的操作。 职工信息:主要是对公司职工的基本信息进行查询以及增删改的操作。
2.辅助工具:
日历:显示日期工具,对日期进行查看。
计算器:通过调用系统的计算器来计算数据。
记事本:通过调用系统的记事本工具来记录数据。
3.系统维护:
权限管理:对所有用户的权限进行设置。
系统备份:对数据库进行备份,以便通过系统恢复来还原数据。 系统恢复:还原备份的数据。
4.系统设置:
口令设置:修改登录者的密码。
锁定系统:通过系统锁屏,通过密码才能解锁,增加系统的安全性。
2.4.2业务流程分析
为了反映系统内部各个部分的联系程度,就必须对组织的业务流程进行分析。业务流程图是分析业务功能流程的重要工具,它是一种描述系统内部各单位、人员之间业务关系、作业顺序和管理信息流向的图表。
首先要有一个登录模块对登录用户进行验证,如果验证成功则进入系统的主窗体,登录主窗体之后在根据登录的用户名判断是不是管理员,如果是管理员则可以操作所有的功能:系统维护、基础信息、系统设置、辅助工具、退出。如果不是管理员则只能查看基础信息、使用辅助工具和退出。
系统业务流程如图表2.1所示:
图表 2.1
第三章 C#简介
C#(发音为C Sharp)是由微软公司所开发的一种面向对象,且运行于.NET Framework之上的高级程序设计语言。并且成为ECMA与ISO标准规范。C#看似基于C++写成,但又融入其它语言如Delphi、Java、VB等。
3.1设计目标
ECMA标准列出的C#设计目标:
? C#旨在设计成为一种“简单、现代、通用”,以及面向对象的程序设计语言 ? 此种语言的实现,应提供对于以下软件工程要素的支持:强类型检查、数组维度检查、未初始化的变量引用检测、自动垃圾收集(Garbage Collection,指一种自动内存释放技术)。软件必须做到强大、持久,并具有较强的编程生产力。
? 此种语言为在分布式环境中的开发提供适用的组件开发应用。
? 为使程序员容易迁移到这种语言,源代码的可移植性十分重要,尤其是对于那些已熟悉C和C++的程序员而言。
? 对国际化的支持非常重要。
? C#适合为独立和嵌入式的系统编写程序,从使用复杂操作系统的大型系统到特定应用的小型系统均适用。
? 虽然C#程序在存储和操作能力需求方面具备经济性,但此种语言并不能在性能和尺寸方面与C语言或汇编语言相抗衡。
3.2语言特性
相对于C和C++,这个语言在许多方面进行了限制和增强:
? 指针(Pointer)只能被用于不安全模式。大多数对象访问通过安全的引用实现,以避免无效的调用,并且有许多算法用于验证溢出,指针只能用于调用值类型,以及受垃圾收集控制的托管对象。
? 对象不能被显式释放,代替为当不存在被引用时通过垃圾回收器回收。 ? 只允许单一继承(single inheritance),但是一个类可以实现多个接口(interfaces)。
? C#比C++更加类型安全。默认的安全转换是隐含转换,例如由短整型转换为长整型和从派生类转换为基类。而接口同整型,及枚举型同整型不允许隐含转换,非空指针(通过引用相似对象)同用户定义类型的隐含转换必段被显式的确定,不同于C++的复制构造函数。
? 数组声明语法不同("int[] a = new int[5]" 而不是 "int a[5]")。 ? 枚举位于其所在的命名空间中。
? C#中没有模版(Template),但是在C# 2.0中引入了泛型(Generic programming),并且支持一些C++模版不支持的特性。比如泛型参数中的类型约束。另一方面,表达式不能像C++模版中被用于类型参数。
? 属性支持,使用类似访问成员的方式调用。
? 完整的反射支持。
3.3程序的执行
C#并不被编译成为能够直接在计算机上执行的二进制本地代码。与Java类似,它被编译成为中间代码(Microsoft Intermediate Language),然后通过.NET Framework的虚拟机——被称之为通用语言运行时.NET CLR(Common Language Runtime)——执行。
所有的.Net编程语言都被编译成这种被称为MSIL(Microsoft Intermediate Language )的中间代码。因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。但是实际上,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。
在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区(Buffer)中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度明显加快。
3.4标准化
微软公司已经向ECMA申请将C#作为一种标准。在20xx年12月,ECMA发布了ECMA-334 C#语言规范。C#在20xx年成为一个ISO标准(ISO/IEC 23270)。现在有一些独立的实现正在进行,包括:
? 自由软件基金会的dotGNU Portable.NET
? Mono
? Baltie - C# IDE for children and young Baltie
3.5总结
利用C#的优点,加上.NET开发的安全性,和数据库的优势和.net的无缝结合,容易上手,易于实现快速开发,它有图形界面,它的界面设计跟服务器段编程分离,给我感觉很清晰,用它做出来的东西,容错性强,给人的感觉好!
第四章 设计开发项目
4.1数据库设计
在开发餐饮管理系统之前,分析了改系统的数据量,由于系统餐饮管理的数据较多,商品信息、消费信息以及账目清单会占用较大的空间。因此选择Microsoft SQL Server2000数据库存储这些信息,数据库命名为db_Mrcy,在数据库中创建了6个数据表用于不同的信息。
Tb_food表 存储食品的相关信息、tb_foodtype表 存储食品的类别、
tb_guestfood表 存储消费信息、tb_room表 存储餐厅桌台信息、tb_user表 存储管理用户信息、tb_waiter表 存储所有职工信息。
Tb_food表设置如图表4.1.1
图表 4.1.1
tb_foodtype表设置如图表
4.1.2
图表 4.1.2
tb_guestfood表设置如图表
4.1.3
图表 3.1.3
tb_room表设置如图表4.1.4
图表 4.1.4
tb_user表设置如图表
4.1.5
图表 4.1.5
tb_waiter表设置如图表
4.1.6
图表 4.1.6
4.2 登录模块的设计
为了使系统的安全性得到保障,为餐饮管理系统开发了登录模块。通过该模块能对登录用户进行验证,只有系统的合法用户才能进入系统的主界面。代码实现部分如下:
SqlConnection conn = BaseClass.DBConn.CyCon();
conn.Open();
SqlCommand cmd = new SqlCommand("select count(*) from tb_User where UserName='" + txtName.Text + "' and UserPwd='" + txtPwd.Text + "'", conn);
int i = Convert.ToInt32(cmd.ExecuteScalar());
if (i > 0)
{
cmd = new SqlCommand("select * from tb_User where UserName='" + txtName.Text + "'", conn);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
string UserPower = sdr["power"].ToString().Trim();
conn.Close();
frmMain main = new frmMain();
main.power = UserPower;
main.Names = txtName.Text;
main.Times = DateTime.Now.ToShortDateString();
main.Show();
this.Hide();
}
else
{
MessageBox.Show("用户名或密码错误");
conn.Close();
}
登录界面如图表4.2.1
图表 4.2.1
4.3主窗体设计
在餐饮管理系统中主窗体是由3部分组成的。第一部分是位于主窗体模块上端的系统菜单,主要实现链接系统功能菜单。第二部分是位于主窗体模块中间的桌台显示,主要用于显示餐厅中所有的桌台情况,包括桌台时候已使用、已使用桌台的客人数量等信息,方便了用户对桌台的管理。第三部分是位于主窗体模块下端的状态栏,主要用于显示系统当前状态信息。
部分代码实现如下:
private void 开台ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (lvDesk.SelectedItems.Count != 0)
{
string names = lvDesk.SelectedItems[0].SubItems[0].Text;
frmOpen openroom = new frmOpen();
openroom.name = names;
openroom.ShowDialog();
}
else
{
MessageBox.Show("请选择桌台");
}
}
private void frmMain_Activated(object sender, EventArgs e)
{
lvDesk.Items.Clear();
SqlConnection conn = BaseClass.DBConn.CyCon();
conn.Open();
SqlCommand cmd = new SqlCommand("select * from tb_Room", conn);
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
string zt = sdr["RoomZT"].ToString().Trim();
AddItems(zt);
}
conn.Close();
}
private void 点菜ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (lvDesk.SelectedItems.Count != 0)
{
string names = lvDesk.SelectedItems[0].SubItems[0].Text;
frmDC dc = new frmDC();
dc.RName = names;
dc.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;
frmSerch serch = new frmSerch();
serch.RName = names;
serch.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;
frmJZ jz = new frmJZ();
jz.Rname = names;
jz.ShowDialog();
}
else
{
MessageBox.Show("请选择桌台");
}
}
private void lvDesk_DoubleClick(object sender, EventArgs e)
{
frmDetails details = new frmDetails();
details.TableName = lvDesk.SelectedItems[0].SubItems[0].Text;
details.ShowDialog();
}
private void lvDesk_Click(object sender, EventArgs e)
{
string names = lvDesk.SelectedItems[0].SubItems[0].Text;
SqlConnection conn = BaseClass.DBConn.CyCon();
conn.Open();
SqlCommand cmd = new SqlCommand("select * from tb_Room where RoomName='" + names + "'", conn); SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
string zt = sdr["RoomZT"].ToString().Trim();
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;
}
conn.Close();
}
private void 取消开台toolStripMenuItem_Click(object sender, EventArgs e)
{
if (lvDesk.SelectedItems.Count != 0)
{
string names = lvDesk.SelectedItems[0].SubItems[0].Text;
SqlConnection conn = BaseClass.DBConn.CyCon();
conn.Open();
SqlCommand cmd = new SqlCommand("update tb_Room set RoomZT='待用',Num=0 where RoomName='" + names + "'", conn);
cmd.ExecuteNonQuery();
cmd = new SqlCommand("delete from tb_GuestFood where zhuotai='" + names + "'", conn); cmd.ExecuteNonQuery();
conn.Close();
frmMain_Activated(sender, e);
}
else
{
MessageBox.Show("请选择桌台");
}
}
private void 桌台信息ToolStripMenuItem1_Click(object sender, EventArgs e)
{
frmDesk desk = new frmDesk();
desk.ShowDialog();
}
private void 职员信息ToolStripMenuItem1_Click(object sender, EventArgs e)
{
frmUser users = new frmUser();
users.ShowDialog();
}
private void 日历ToolStripMenuItem1_Click(object sender, EventArgs e)
{
frmCalender calender = new frmCalender();
calender.ShowDialog();
}
private void 记事本ToolStripMenuItem1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("notepad.exe");
}
private void 计算器ToolStripMenuItem1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("calc.exe");
}
private void 权限管理ToolStripMenuItem1_Click(object sender, EventArgs e)
{
frmQxGl qx = new frmQxGl();
qx.ShowDialog();
}
private void 系统备份ToolStripMenuItem1_Click(object sender, EventArgs e) {
frmBF bf = new frmBF();
bf.ShowDialog();
}
private void 系统恢复ToolStripMenuItem1_Click(object sender, EventArgs e) {
frmHF hf = new frmHF();
hf.ShowDialog();
}
private void 口令设置ToolStripMenuItem1_Click(object sender, EventArgs e) {
frmPwd pwd = new frmPwd();
pwd.names = Names;
pwd.ShowDialog();
}
private void 锁定系统ToolStripMenuItem1_Click(object sender, EventArgs e) {
frmLock locksystem = new frmLock();
locksystem.Owner = this;
locksystem.ShowDialog();
}
主窗体界面如图表
4.2.2
图表 4.2.2
4.4开台模块设计
当顾客要进行消费的时候,首先要看一下是否还有可用的桌台,如果还有空闲的桌台,那么就要为顾客开台,只有在开台之后,才能为顾客点菜、查询和结账。所以开台模块在整个系统中是非常重要的。
部分代码实现如下:
private void frmOpen_Load(object sender, EventArgs e)
{
conn = BaseClass.DBConn.CyCon();
conn.Open();
SqlCommand cmd = new SqlCommand("select * from tb_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 tb_Waiter",conn);
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
cbWaiter.Items.Add(sdr["WaiterName"].ToString().Trim());
}
cbWaiter.SelectedIndex = 0;
sdr.Close();
conn.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)<=0)
{
MessageBox.Show("请输入用餐人数");
}
else
{
conn.Open();
string RoomName = cbNum.SelectedItem.ToString();
SqlCommand cmd1 = new SqlCommand("update tb_Room set GuestName='" + txtName.Text +
"',zhangdanDate='" + dateTimePicker1.Value.ToString() + "',Num='" + Convert.ToInt32(txtNum.Text) + "',WaiterName='" + cbWaiter.SelectedItem.ToString() + "',RoomZT='使用' where RoomName='" + name + "'", conn);
cmd1.ExecuteNonQuery();
conn.Close();
this.Close();
}
开台模块如图表
4.2.3
图表 4.2.3
4.5点菜模块设计
为顾客选定好桌台,并且开台之后。会根据顾客的需要点菜或购买茶水烟酒之类的消费品,在点菜模块中会显示餐厅特有的一些菜系,用户可以对不通的菜系进行选择。
部分代码实现如下:
private void frmDC_Load(object sender, EventArgs e)
{
this.Text = RName + "点/加菜";
TreeNode newnode1 = tvFood.Nodes.Add("锅底");
TreeNode newnode2 = tvFood.Nodes.Add("配菜");
TreeNode newnode3 = tvFood.Nodes.Add("烟酒");
TreeNode newnode4 = tvFood.Nodes.Add("主食");
SqlConnection conn = BaseClass.DBConn.CyCon();
conn.Open();
SqlCommand cmd = new SqlCommand("select * from tb_food where foodty='1'", conn); SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
newnode1.Nodes.Add(sdr[3].ToString().Trim());
}
sdr.Close();
cmd = new SqlCommand("select * from tb_food where foodty='2'", conn);
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
newnode2.Nodes.Add(sdr[3].ToString().Trim());
}
sdr.Close();
cmd = new SqlCommand("select * from tb_food where foodty='3'", conn);
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
newnode3.Nodes.Add(sdr[3].ToString().Trim());
}
sdr.Close();
cmd = new SqlCommand("select * from tb_food where foodty='4'", conn);
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
newnode4.Nodes.Add(sdr[3].ToString().Trim());
}
sdr.Close();
cmd = new SqlCommand("select * from tb_Waiter",conn);
sdr = cmd.ExecuteReader();
while (sdr.Read())
{
cbWaiter.Items.Add(sdr["WaiterName"].ToString().Trim());
}
cbWaiter.SelectedIndex = 0;
sdr.Close();
cmd = new SqlCommand("select RoomZT from tb_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();
}
点菜模块界面如图表 4.2.4
图表 4.2.4
4.6结账模块设计
顾客消费完毕,需要对顾客消费清单进行统计,即计算出消费的总额,这些都是通过结账模块实现的。结账模块主要功能是当顾客每次消费时将顾客消费的项目添加到数据库中,在用户结账时通过对数据库的查询,检索出顾客本次消费的商品名称及价格,然后计算出总额。
部分代码实现如下:
private void frmJZ_Load(object sender, EventArgs e)
{
this.Text = Rname + "结账";
groupBox1.Text = "当前桌台-" + Rname;
SqlConnection conn = BaseClass.DBConn.CyCon();
SqlDataAdapter sda = new SqlDataAdapter("select
foodname,foodsum,foodallprice,waitername,beizhu,zhuotai,datatime from tb_GuestFood where zhuotai='" + Rname + "'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 tb_GuestFood where zhuotai='" + Rname + "'", conn);
price = Convert.ToString(cmd.ExecuteScalar());
if (price == "")
{
lblprice.Text = "0";
btnJZ.Enabled = false;
}
else
{
cmd = new SqlCommand("select RoomBJF from tb_Room where RoomName='"+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");
}
else
{
btnJZ.Enabled = true;
lblprice.Text = price + "*95%"+"+"+bjf+"=" +
(Convert.ToDecimal(Convert.ToDouble(price) * Convert.ToDouble(0.95)) +
Convert.ToDecimal(bjf)).ToString("C");
}
conn.Close();
}
结账模块界面如图表
4.2.5
图表 4.2.5
参考文献
1.《C#入门经典》(第三版) Karli Watson Christian Nagel 等著 清华大学出版社
2.《编程的奥秘--.NET软件技术学习与实践》 金旭亮 著 电子工业出版社
3.《SQL Server2000数据库及应用》 徐人风 曾建华 编 高等教育出版出版社
4.《软件工程与实践》 杨文元 编著 厦门大学出版社
5.《精通C#数据库开发》王华杰,李律松,孙一波 等编著 清华大学出版社
6.《C#程序开发范例宝典》明日科技 编著 人民邮电出版社
7.《Visual Basic.NET项目开发宝典》岂兴明,矫津毅,银华强 编著电子工业出版社
8.《.NET软件测试指南》(美)鲁特,(美)斯维尼 著,杨浩 译清华大学出版社