餐饮管理系统设计文档
0背景:
随着餐饮行业的发展,餐饮行业的管理越来越趋向于精细化,自动化,智能化。餐饮业的管理开始注重细节,将利润与每个细节结合起来,力求资金的有效运转,因此要求餐饮管理系统能详细记录每次服务的内容以及时间。以便于从大量的数据中分析顾客的偏好,以及某一种菜品的销售与季节等其他因素的关系。力求菜品随顾客的口味变化。与此同时,顾客的要求逐渐趋向个性化,频繁的提前订餐及退订对于传统人工操作来说比较费时费力,而且容易出错。另外,随着各行各业支出管理的规范化,大多数顾客希望在消费后能得到自己的消费清单。
1.需求分析
1.1业务需求
(1)系统能够根据进入系统的用户的角色不同而赋予其不同的权限。具体分为系统管理员和业务操作员两大类。为方便系统初期的调试,存在超级用户,拥有所有权限。
(2)系统提供接口,供其他系统或其他语言开发的本系统的扩展部分接入。系统管理员可以更改系统的界面风格。
(3)人事管理模块能够对所有员工的姓名、性别、住址、身份证号、出生日期、学历、职位、联系电话、邮箱等信息进行增加、删除、修改、查询等操作。另外,人事管理模块还能对系统用户进行管理。
(4)菜单管理由具有厨师长权限的人负责,菜单管理的内容包括菜名、价格、分类等。同过增删改查对菜单进行动态的管理,能够很方便的增加新菜品;修改菜品价格等信息;删除过时的菜品;以及预览所有的菜品。其中菜名,价格等信息能够被点菜模块调用,而分类信息能用在报表统计模块中,统计出每种菜品在某一阶段的消费情况。
(5)报表统计
要求系统能够用图表直观的显示员工学历结构、顾客偏好菜品、库存信息及历史消费等。并能够将数据以word、excel等多种形式展现出来。
(6)库存管理模块能对企业的物料管理,实现对物料的物料名,数量,单价,分类等进行增删改查。
(7)订餐及收款模块包含预定、退订、点菜、结账等功能。席位共有20个,未预定时桌位的颜色是绿色的,点击预定后桌位变为黄色,并弹出顾客信息登记界面,包括客户的编号、姓氏、电话、已预订的桌位号以及预定时间,且已经预定的桌位不能再次订餐。点击退订能对已经定的桌位进行退订,退订后桌位颜色变为绿色,对于已经就餐的桌位不能退订。已预订或未预定的桌位均能点菜,点菜时弹出点菜界面,包括已点的菜品及每份菜的数量,点菜之后餐桌颜色变为红色。结账模块用来对已经就餐的餐桌结账,结账界面的信息包括桌号,消费清单,应付款。输入实收金额,自动计算找零金额。并显示当前的操作员及操作时间,点击完成将以上信息写入数据库,点击打印,弹出消费清单。
(8)系统功能导航能根据每个进入系统的用户角色提供其具有的权限,方便用户操作。
1.2性能需求
系统容量小,运行速度快,界面美观,人性化,操作方便,易于使用;经理及主管可拥有所有的权限(能同时操作管理和收款界面),收款员只能操作收款界面,其他人员则不能进入。
要求系统为c/s结构,数据库部署在服务器端,客户端从数据库读取数据或写入数据的速度要快。
1.3环境需求
硬件环境:服务器、客户机、网络交换机
软件环境:win7/xp平台sqlserver2005
开发环境:visualstdio2005
2.概念结构和逻辑结构设计方案
2.1数据库概念结构设计
本系统中涉及到的实体有:员工、系统用户、菜单、库存、预定、点菜、结账
(1)员工实体E-R图
(2)系统用户实体E-R图
(3)菜单实体E-R图
(4)库存实体E-R图
(5)预定实体E-R图
(6)点菜实体E-R图
(7)结账实体E-R图
(8)客户实体E-R图
(9)实体之间的关系
2.2数据库逻辑结构设计
(1)菜单表
属性名 |
数据类型 |
是否可以为空 |
说明 |
caihao |
int |
否 |
菜品编号(主键) |
caiming |
nvarchar(50) |
否 |
菜名 |
jiage |
money |
否 |
价格 |
fenlei |
nchar(10) |
是 |
(2)餐桌表
属性名 |
数据类型 |
是否可以为空 |
说明 |
zhuohao |
int |
否 |
餐桌编号(主键) |
zhuangtai |
int |
否 |
餐桌状态(1表示未预定,2表示已预订,3表示正在就餐) |
(3)订餐表
属性名 |
数据类型 |
是否可以为空 |
说明 |
khbh |
nvarchar(50) |
否 |
客户编号(主键) |
xs |
nvarchar(50) |
是 |
客户姓氏 |
dh |
bigint |
否 |
顾客电话 |
ydzw |
nvarchar(50) |
否 |
预定桌位 |
sj |
datetime |
否 |
预定时间 |
(4)结账表
属性名 |
数据类型 |
是否可以为空 |
说明 |
zhuohao |
int |
否 |
桌号(主键) |
xiaofeiqingdan |
nvarchar(max) |
否 |
消费清单 |
yingfukuan |
money |
否 |
应付款 |
shishou |
money |
否 |
实收 |
zhaoling |
money |
否 |
找零 |
caozuoyuan |
nchar(10) |
否 |
操作员 |
shijian |
datetime |
否 |
操作时间 |
(5)库存表
属性名 |
数据类型 |
是否可以为空 |
说明 |
wuliaohao |
int |
否 |
物料号(主键) |
pinming |
nvarchar(50) |
否 |
物品名称 |
shuliang |
float |
否 |
|
danjia |
money |
否 |
单价 |
fenlei |
nchar(10) |
否 |
(6)url表
属性名 |
数据类型 |
是否可以为空 |
说明 |
url0 |
nvarchar(max) |
是 |
系统管理员登陆界面的url |
url1 |
nvarchar(max) |
是 |
总经理登陆界面的url |
url2 |
nvarchar(max) |
是 |
人事经理登陆界面的url |
url3 |
nvarchar(max) |
是 |
厨师长登陆界面的url |
url4 |
nvarchar(max) |
是 |
库房主管登陆界面的url |
url5 |
nvarchar(max) |
是 |
会计主管登陆界面的url |
rul6 |
nvarchar(max) |
是 |
前台登陆界面的url |
(7)系统用户表
属性名 |
数据类型 |
是否可以为空 |
说明 |
user_id |
nvarchar(50) |
否 |
系统用户号(主键) |
pwd |
nvarchar(50) |
否 |
密码 |
username |
nvarchar(50) |
否 |
系统用户名 |
flag |
int |
否 |
系统用户角色标识 |
(8)员工表
属性名 |
数据类型 |
是否可以为空 |
说明 |
bianhao |
int |
否 |
员工编号(主键) |
xingming |
nvarchar(50) |
否 |
员工姓名 |
xingbie |
nchar(10) |
否 |
性别 |
zhuzhi |
nvarchar(50) |
否 |
员工住址 |
riqi |
datetime |
否 |
出生日期 |
shenfen |
nvarchar(18) |
否 |
身份证号 |
xueli |
nchar(10) |
否 |
学历 |
zhiwei |
nchar(10) |
否 |
职位 |
dianhua |
int |
否 |
电话 |
youxiang |
nvarchar(50) |
否 |
邮箱 |
3.系统总体结构设计方案
3.1在系统分析的基础上得到如下功能模块
模块功能说明:
(1)系统管理模块包括切换系统,系统设置,退出系统这几个功能。切换系统能弹出登录界面方便另外一位用户使用系统;系统设置包括用户密码修改、主界面网页设定、系统风格选择,用户在登入系统后可进入用户密码修改模块更改自己的密码;主界面网页设定的作用是更改每个角色登陆到系统看到的主菜单界面的网页的url,可以设定不同角色的用户进入系统后看到的网页内容是不同的。系统风格设置可以改变系统的风格,选择用户喜欢的风格。退出系统能关闭所有使用的资源,退出整个系统。
(2)人事管理模块包括员工信息管理和系统用户管理。其中,员工信息管理能对普通员工的信息执行增删改查等操作,系统用户管理能对系统用户的信息进行增删改查。
(3)菜单管理模块能够对菜单的编号、名称、价格、分类等执行增删改查操作。
(4)报表统计模块能对员工的学历信息以图表的形式统计并展现;通过大量的消费数据得出顾客喜欢的菜品以及喜欢的菜品组合,并用饼图进行反应,方便管理人员作出正确的决策;
库存信息统计能够很直观的反应当前库存的状况;历史账单统计能够让用户一览流水数据。除此之外,报表还可以以word、excel、pdf等形式导出。
(5)库存管理模块能够实现对物料的编号、名称、单价、数量、分类等的增删改查管理。
(6)订餐及收款模块包含预定、退订、点菜、结账等功能。席位共有20个,未预定时桌位的颜色是绿色的,点击预定后桌位变为黄色,并弹出顾客信息登记界面,包括客户的编号、姓氏、电话、已预订的桌位号以及预定时间,且已经预定的桌位不能再次订餐。点击退订能对已经定的桌位进行退订,退订后桌位颜色变为绿色,对于已经就餐的桌位不能退订。已预订或未预定的桌位均能点菜,点菜时弹出点菜界面,包括已点的菜品及每份菜的数量,点菜之后餐桌颜色变为红色。结账模块用来对已经就餐的餐桌结账,结账界面的信息包括桌号,消费清单,应付款。输入实收金额,自动计算找零金额。并显示当前的操作员及操作时间,点击完成将以上信息写入数据库,打印按钮的操作状态变为可操作,点击打印按钮能够打印顾客回执。
3.2系统操作流程
4.系统详细设计方案
4.1系统登录设计
Form1窗体
用户登陆模块是防止非法用户登陆的第一道防线,通过它可以保护后台数据库的安全性,当用户要进行系统操作时,首先要进入的就是身份验证界面,只有在密码正确的情况下才能进行以后的操作,如果输入的密码不正确,则不能进行登录对系统进行操作。同时系统能根据进入的用户的角色不同而分配不同的操作权限。本系统的记住密码功能使得用户不用每次都输入密码,在保证安全的前提下方便了用户的操作。下面是登录模块的主要代码:
PublicClassForm1
Dimuser_id,pswAsString
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
IfTextBox1.Text.Trim=""Then
MsgBox("请输入用户名",MsgBoxStyle.OkOnly+48,"注意")
Return'若用户名为空,返回,重新输入
EndIf
Callsqlcon()
If(TextBox1.Text.Trim=user_idAndTextBox2.Text.Trim=psw)Then
form2.Show()
Me.Hide()
Else
MsgBox("登录失败,请检查用户名及密码是否正确!",MsgBoxStyle.RetryCancel+48,"注意")
EndIf
EndSub
Subsqlcon()
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlcmdAsString="select*fromyonghuwhereuser_id="&TextBox1.Text.Trim
DimcmdAsNewOleDb.OleDbCommand(sqlcmd,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.Read=TrueThen
user_id=reader(0).ToString.Trim
psw=reader(1).ToString.Trim
EndIf
reader.Close()
con.Close()
EndSub
PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
DimflagAsInteger
DimusernameAsString=""
DimpasswordAsString=""
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlcmdAsString="select*fromuse_for_checkBox"
DimcmdAsNewOleDb.OleDbCommand(sqlcmd,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.Read=TrueThen
username=reader(0).ToString.Trim
password=reader(1).ToString.Trim
flag=reader(2)
EndIf
reader.Close()
con.Close()
Ifflag=1Then
CheckBox1.Checked=True
TextBox1.Text=username
TextBox2.Text=password
EndIf
EndSub
'窗口出现时,如果flag为1,复选框的状态为true,并自动填充用户名,密码
PrivateSubCheckBox1_CheckedChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesCheckBox1.CheckedChanged
IfCheckBox1.Checked=TrueThen
DimsqlcmdAsString="insertintouse_for_checkBoxvalues('"&TextBox1.Text.Trim&"','"&TextBox2.Text.Trim&"',"&1&")"
CallForm3.connection(sqlcmd)
ElseIfCheckBox1.Checked=FalseThen
DimsqlcmdAsString="deleteuse_for_checkBox"
CallForm3.connection(sqlcmd)
EndIf
EndSub
'复选框为true将此时的用户名及密码写入use_for_checkBox,为false时清空表
EndClass
4.2系统主界面设计
窗体Form2
系统主界面的菜单提供了进入其他模块的通道,左侧的角色功能导航使用TreeView控件来动态的生成每个角色对应权限的操作树状图,用户进入系统后能一目了然的了解自己能干什么以及某一功能所在的位置。窗体的右下大部分控件放置一个webbrowser控件,能够根据登入系统用户的角色不同而显示不同的网页,网页的url可由管理员在系统设置中设置。以下是实现form2功能的主要代码:
PublicClassform2
Dimflag%
Publicusername$
Dimmyuri0,myuri1,myuri2,myuri3,myuri4,myuri5,myuri6AsString
PrivateSubform2_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
Callgeturl()'获取url
SelectCaseflag
Case0
Callrole_navi0()
退出系统ToolStripMenuItem1.Enabled=True
系统用户管理ToolStripMenuItem.Enabled=True
'系统管理员所具有的权限
WebBrowser1.Url=NewUri(myuri0)
'重定向url
Case1
Callrole_navi1()
退出系统ToolStripMenuItem1.Enabled=True
系统用户管理ToolStripMenuItem.Enabled=True
员工信息管理ToolStripMenuItem.Enabled=True
菜单管理ToolStripMenuItem.Enabled=True
报表统计ToolStripMenuItem.Enabled=True
库存管理ToolStripMenuItem.Enabled=True
订餐及收款ToolStripMenuItem.Enabled=True
'总经理权限
WebBrowser1.Url=NewUri(myuri1)
Case2
Callrole_navi2()
员工信息管理ToolStripMenuItem.Enabled=True
'人事部经理权限
WebBrowser1.Url=NewUri(myuri2)
Case3
Callrole_navi3()
菜单管理ToolStripMenuItem.Enabled=True
'厨师长权限
WebBrowser1.Url=NewUri(myuri3)
Case4
Callrole_navi4()
库存管理ToolStripMenuItem.Enabled=True
'库房主管权限
WebBrowser1.Url=NewUri(myuri4)
Case5
Callrole_navi5()
报表统计ToolStripMenuItem.Enabled=True
'财务主管权限
WebBrowser1.Url=NewUri(myuri5)
Case6
Callrole_navi6()
订餐及收款ToolStripMenuItem.Enabled=True
'前台权限
WebBrowser1.Url=NewUri(myuri6)
EndSelect
Label2.Text&=username&"今天是:"&DateTime.Now.Date
'欢迎标语
EndSub
PrivateSub切换用户ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles切换用户ToolStripMenuItem.Click
Dimi%
i=MsgBox("是否切换?",MsgBoxStyle.OkCancel+32,"确认操作")
Ifi=MsgBoxResult.OkThen
Form1.Show()
Me.Close()
EndIf
EndSub
'切换用户
Subsqlcon()
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlcmdAsString="select*fromyonghuwhereuser_id="&Form1.TextBox1.Text.Trim
DimcmdAsNewOleDb.OleDbCommand(sqlcmd,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.Read=TrueThen
flag=reader(3)
username=reader(2)
EndIf
reader.Close()
con.Close()
EndSub
PrivateSub退出系统ToolStripMenuItem2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles退出系统ToolStripMenuItem2.Click
Dimi%
Ifi=MsgBoxResult.OkThen
Me.Close()
Form1.Close()
EndIf
EndSub
'退出系统操作
PrivateSubTimer1_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer1.Tick
Calllabelmove()
EndSub
Sublabelmove()
Label2.Left=Label2.Left+1
IfLabel2.Left>Me.RightThen
Label2.Left=0
EndIf
EndSub
PrivateSub菜单管理ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles菜单管理ToolStripMenuItem.Click
Form4.Show()
EndSub
PrivateSub订餐及收款ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles订餐及收款ToolStripMenuItem.Click
form5.Show()
EndSub
PrivateSub员工信息管理ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles员工信息管理ToolStripMenuItem.Click
Form3.Show()
EndSub
PrivateSub系统用户管理ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles系统用户管理ToolStripMenuItem.Click
Form9.Show()
EndSub
Subgeturl()
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlAsString="select*frommyurl"
DimcmdAsNewOleDb.OleDbCommand(sql,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.Read=TrueThen
myuri0=reader(0)
myuri1=reader(1)
myuri2=reader(2)
myuri3=reader(3)
myuri4=reader(4)
myuri5=reader(5)
myuri6=reader(6)
EndIf
reader.Close()
con.Close()
EndSub
'获取myurl中的url值
PrivateSub退出系统ToolStripMenuItem1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles退出系统ToolStripMenuItem1.Click
Form10.Show()
EndSub
PrivateSub库存管理ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles库存管理ToolStripMenuItem.Click
Form11.Show()
EndSub
PrivateSub报表统计ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles报表统计ToolStripMenuItem.Click
EndSub
Subrole_navi0()
Dimnd1,nd2,nd3,nd4AsNewTreeNode
nd1.Text="切换用户"
nd2.Text="系统设置"
nd3.Text="退出系统"
nd4.Text="系统用户管理"
TreeView1.Nodes.Add("系统管理")
TreeView1.Nodes.Add("人事管理")
TreeView1.Nodes.Item(0).Nodes.Add(nd1)
TreeView1.Nodes.Item(0).Nodes.Add(nd2)
TreeView1.Nodes.Item(0).Nodes.Add(nd3)
TreeView1.Nodes.Item(1).Nodes.Add(nd4)
EndSub
4.3人事管理模块设计
人事管理模块能对员工的员工编号、姓名、性别、住址、出生日期、身份证号、学历、职位、联系电话、邮箱等信息进行增删改查的操作。其中员工编号、姓名等共性很小的信息需用textBox输入,性别等信息采用comboBox输入,出生日期这一特殊数据形式采用datetimepicker输入。同时,为textBox1添加了keypress事件,当textBox1中输入内容后能快速的查询信息并填充到其他项,为删除、修改做准备。将数据源整体拖拽进窗体用来全部显示内容。以下是主要的实现代码:
PublicClassForm3
PrivateSubYuangongBindingNavigatorSaveItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)
Me.Validate()
Me.YuangongBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.CanteenDataSet)
EndSub
PrivateSubForm3_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
'TODO:这行代码将数据加载到表“CanteenDataSet.yuangong”中。您可以根据需要移动或移除它。
Me.YuangongTableAdapter.Fill(Me.CanteenDataSet.yuangong)
EndSub
PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton5.Click
StaticDimi%=0
i=i+1
If(i>=1)Then
PictureBox1.Hide()
Button5.Text="刷新"
Me.Refresh()
EndIf
EndSub
PrivateSubTextBox1_KeyPress(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.KeyPressEventArgs)HandlesTextBox1.KeyPress
IfAsc(e.KeyChar)=13Then
Callsearch()
EndIf
EndSub
PublicSubconnection(ByValsqlcmdAsString)'用于增删改
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimcmdAsNewOleDb.OleDbCommand(sqlcmd,con)
cmd.ExecuteNonQuery()
EndSub
Subsearch()'用来显示数据
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlcmdAsString="select*fromyuangongwherebianhao="&TextBox1.Text.Trim
DimcmdAsNewOleDb.OleDbCommand(sqlcmd,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.Read=TrueThen
TextBox2.Text=reader(1)
ComboBox1.Text=reader(2)
TextBox3.Text=reader(3)
DateTimePicker1.Text=reader(4)
TextBox4.Text=reader(5)
ComboBox2.Text=reader(6)
ComboBox3.Text=reader(7)
TextBox5.Text=reader(8)
TextBox6.Text=reader(9)
EndIf
reader.Close()
con.Close()
EndSub
'查询操作
PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.Click
IfTextBox1.Text=""Then
Return
EndIf
Callsearch()
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
Dimbianhao,xingming,xingbie,zhuzhi,riqi,shenfeng,xueli,zhiwei,dianhua,youxiangAsString
bianhao=TextBox1.Text.Trim
xingming=TextBox2.Text.Trim
xingbie=ComboBox1.SelectedItem
zhuzhi=TextBox3.Text.Trim
riqi=DateTimePicker1.Value.Date.ToString
shenfeng=TextBox4.Text.Trim
xueli=ComboBox2.SelectedItem
zhiwei=ComboBox3.SelectedItem
dianhua=Val(TextBox5.Text)
youxiang=TextBox6.Text.Trim
IfTextBox1.Text=""Then
MsgBox("至少有一项为空","注意")
Return
EndIf
DimbhAsString=""
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlAsString="select*fromyuangongwherebianhao="&TextBox1.Text.Trim
DimcmdAsNewOleDb.OleDbCommand(sql,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.Read=TrueThen
bh=reader(0)
EndIf
Ifbh=TextBox1.Text.TrimThen
MsgBox("已存在编号为"&bianhao&"的员工","注意")
Return
EndIf
'验证是否重名()
If(bianhao=""Orxingming=""Orxingbie=""Orzhuzhi=""Orriqi=""Orshenfeng=""Orxueli=""Orzhiwei=""Ordianhua=""Oryouxiang="")Then
MsgBox("至少有一项未填写","注意")
Return
EndIf
'验证填写项是否为空
DimsqlcmdAsString="insertintoyuangongvalues("&"'"&bianhao&"'"&","&"'"&xingming&"'"&","&"'"&xingbie&"'"&","&"'"&zhuzhi&"'"&","&"'"&riqi&"'"&","&"'"&shenfeng&"'"&","&"'"&xueli&"'"&","&"'"&zhiwei&"'"&","&dianhua&","&"'"&youxiang&"'"&")"
Callconnection(sqlcmd)
TextBox1.Text=""
TextBox2.Text=""
ComboBox1.Text=""
TextBox3.Text=""
TextBox4.Text=""
ComboBox2.Text=""
ComboBox3.Text=""
TextBox5.Text=""
TextBox6.Text=""
MsgBox("添加成功",MsgBoxStyle.OkOnly+64,"消息")
EndSub
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
IfTextBox1.Text=""Then
Return
EndIf
DimsqlcmdAsString="deletefromyuangongwherebianhao="&TextBox1.Text.Trim
Dimi%
i=MsgBox("确定要删除编号为"&TextBox1.Text.Trim&"的员工?","提示")
Ifi=MsgBoxResult.OkThen
Callconnection(sqlcmd)
TextBox1.Text=""
EndIf
EndSub
PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.Click
IfTextBox1.Text=""Then
Return
EndIf
Dimsqlcmd1AsString="updateyuangongsetxingming="&"'"&TextBox2.Text.Trim&"'"&"wherebianhao="&TextBox1.Text.Trim
Dimsqlcmd2AsString="updateyuangongsetxingbie="&"'"&ComboBox1.SelectedItem&"'"&"wherebianhao="&TextBox1.Text.Trim
Dimsqlcmd3AsString="updateyuangongsetzhuzhi="&"'"&TextBox3.Text.Trim&"'"&"wherebianhao="&TextBox1.Text.Trim
Dimsqlcmd4AsString="updateyuangongsetriqi="&"'"&DateTimePicker1.Value.Date.ToString&"'"&"wherebianhao="&TextBox1.Text.Trim
Dimsqlcmd5AsString="updateyuangongsetshenfeng="&"'"&TextBox4.Text.Trim&"'"&"wherebianhao="&TextBox1.Text.Trim
Dimsqlcmd6AsString="updateyuangongsetxueli="&"'"&ComboBox2.SelectedItem&"'"&"wherebianhao="&TextBox1.Text.Trim
Dimsqlcmd7AsString="updateyuangongsetzhiwei="&"'"&ComboBox3.SelectedItem&"'"&"wherebianhao="&TextBox1.Text.Trim
Dimsqlcmd8AsString="updateyuangongsetdianhua="&Val(TextBox5.Text)&"wherebianhao="&TextBox1.Text.Trim
Dimsqlcmd9AsString="updateyuangongsetyouxiang="&"'"&TextBox6.Text.Trim&"'"&"wherebianhao="&TextBox1.Text.Trim
Callconnection(sqlcmd1)
Callconnection(sqlcmd2)
Callconnection(sqlcmd3)
Callconnection(sqlcmd4)
Callconnection(sqlcmd5)
Callconnection(sqlcmd6)
Callconnection(sqlcmd7)
Callconnection(sqlcmd8)
Callconnection(sqlcmd9)
EndSub
'修改员工信息
EndClass
4.4菜单管理
Form4
菜单管理能对菜号、菜名、价格、分类等进行增删改查操作,其中菜号、菜名、价格对应的编辑框为textBox,分类对应的为comboBox。同时运用datagridview将对应表中的所有数据全部显示出来。以下是主要实现代码:
PublicClassForm4
PrivateSubCaidanBindingNavigatorSaveItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)
Me.Validate()
Me.CaidanBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.CanteenDataSet)
EndSub
PrivateSubForm4_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
'TODO:这行代码将数据加载到表“CanteenDataSet.caidan”中。您可以根据需要移动或移除它。
Me.CaidanTableAdapter.Fill(Me.CanteenDataSet.caidan)
EndSub
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
If(TextBox3.Text="")Then
MsgBox("不能为空","注意")
Return
EndIf
DimsqlcmdAsString="insertintocaidan(caihao,caiming,jiage,fenlei)values('"&TextBox3.Text.Trim&"','"&TextBox1.Text.Trim&"',"&Val(TextBox2.Text)&",'"&ComboBox1.SelectedItem&"')"
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlAsString="select*fromcaidanwherecaihao="&TextBox3.Text.Trim
DimcmdAsNewOleDb.OleDbCommand(sql,con)
DimreaderAsOleDb.OleDbDataReader
DimcmAsString=""
reader=cmd.ExecuteReader
Ifreader.Read=TrueThen
cm=reader(0)
EndIf
reader.Close()
con.Close()
Ifcm=TextBox3.Text.TrimThen
MsgBox("已存在菜号为"&TextBox3.Text.Trim&"的菜","注意")
Return
EndIf
If(TextBox1.Text=""OrComboBox1.SelectedItem=""OrTextBox2.Text=""OrTextBox3.Text="")Then
MsgBox("至少有一项未填写","注意")
Return
EndIf
CallForm3.connection(sqlcmd)
TextBox1.Text=""
TextBox2.Text=""
ComboBox1.Text=""
TextBox3.Text=""
EndSub
'添加模块
PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.Click
IfTextBox1.Text=""Then
Return
EndIf
DimsqlcmdAsString="deletefromcaidanwherecaihao="&TextBox3.Text.Trim
Dimi%
i=MsgBox("确定要删除菜号为"&TextBox3.Text.Trim&"的菜?","提示")
Ifi=MsgBoxResult.OkThen
CallForm3.connection(sqlcmd)
TextBox3.Text=""
EndIf
EndSub
'删除模块
PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton5.Click
IfTextBox3.Text=""Then
Return
EndIf
Dimsqlcmd1AsString="updatecaidansetcaiming="&"'"&TextBox1.Text.Trim&"'"&"wherecaihao="&TextBox3.Text.Trim
Dimsqlcmd2AsString="updatecaidansetfenlei="&"'"&ComboBox1.SelectedItem&"'"&"wherecaihao="&TextBox3.Text.Trim
Dimsqlcmd3AsString="updatecaidansetjiage="&"'"&TextBox2.Text.Trim&"'"&"wherecaihao="&TextBox3.Text.Trim
CallForm3.connection(sqlcmd1)
CallForm3.connection(sqlcmd2)
CallForm3.connection(sqlcmd3)
EndSub
'修改模块
PrivateSubButton6_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton6.Click
IfTextBox1.Text=""Then
Return
EndIf
Callmysearch()
EndSub
'查询模块
Submysearch()
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlAsString="select*fromcaidanwherecaihao="&TextBox3.Text.Trim
DimcmdAsNewOleDb.OleDbCommand(sql,con)
DimreaderAsOleDb.OleDbDataReader
DimcmAsString=""
reader=cmd.ExecuteReader
Ifreader.Read=TrueThen
TextBox3.Text=reader(0)
TextBox1.Text=reader(1)
TextBox2.Text=reader(2)
ComboBox1.Text=reader(3)
cm=reader(1)
EndIf
reader.Close()
con.Close()
If(cm="")Then
MsgBox("此项不存在","注意")
EndIf
EndSub
'查询子过程
PrivateSubTextBox3_KeyPress(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.KeyPressEventArgs)HandlesTextBox3.KeyPress
IfAsc(e.KeyChar)=13Then
Callmysearch()
EndIf
EndSub
PrivateSubButton7_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton7.Click
PictureBox2.Hide()
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
OpenFileDialog1.FileName="*.jpg"
OpenFileDialog1.InitialDirectory="D:\图片"
OpenFileDialog1.Filter="图片(*.jpg)|*.jpg|allfiles(*.*)|*.*"
OpenFileDialog1.FilterIndex=1
If(OpenFileDialog1.ShowDialog=Windows.Forms.DialogResult.OK)Then
PictureBox1.Image=Image.FromFile(OpenFileDialog1.FileName)
Else
EndIf
EndSub
'打开图片
EndClass
4.5报表统计设计
Form12、form13、form14、form15
报表统计功能利用visualstdio自带的报表生成向导生成四个crystalreport,分别统计员工学历结构、顾客偏好菜品、库存信息、历史流水账一览。并在对应窗体中添加crystalreportviewer来查看报表。系统生成的报表能导出为多种格式。
4.6库存管理设计
Form11
库存管理能对物料号、品名、数量、单价、分类等进行增删改查,利用datagridview显示全部的数据。主要实现代码如下:
PublicClassForm11
PrivateSubKucunBindingNavigatorSaveItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)
Me.Validate()
Me.KucunBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.CanteenDataSet)
EndSub
PrivateSubForm11_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
'TODO:这行代码将数据加载到表“CanteenDataSet.kucun”中。您可以根据需要移动或移除它。
Me.KucunTableAdapter.Fill(Me.CanteenDataSet.kucun)
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
IfTextBox1.Text=""Then
MsgBox("至少有一项为空","注意")
Return
EndIf
DimbhAsString=""
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlAsString="select*fromkucunwherewuliaohao="&TextBox1.Text.Trim
DimcmdAsNewOleDb.OleDbCommand(sql,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.Read=TrueThen
bh=reader(0)
EndIf
Ifbh=TextBox1.Text.TrimThen
MsgBox("已存在编号为"&TextBox1.Text.Trim&"的物料","注意")
Return
EndIf
'验证是否重名()
If(TextBox1.Text=""OrTextBox2.Text=""OrTextBox3.Text=""OrTextBox4.Text=""OrComboBox1.SelectedItem="")Then
MsgBox("至少有一项未填写","注意")
Return
EndIf
'验证填写项是否为空
DimsqlcmdAsString="insertintokucunvalues("&Val(TextBox1.Text)&","&"'"&TextBox2.Text.Trim&"'"&","&Val(TextBox3.Text)&","&Val(TextBox4.Text)&","&"'"&ComboBox1.SelectedItem&"'"&")"
CallForm3.connection(sqlcmd)
TextBox1.Text=""
TextBox2.Text=""
ComboBox1.Text=""
TextBox3.Text=""
TextBox4.Text=""
EndSub
PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton5.Click
PictureBox1.Hide()
EndSub
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
IfTextBox1.Text=""Then
Return
EndIf
DimsqlcmdAsString="deletefromkucunwherewuliaohao="&Val(TextBox1.Text)
Dimi%
i=MsgBox("确定要删除编号为"&Val(TextBox1.Text)&"的物料?","提示")
Ifi=MsgBoxResult.OkThen
CallForm3.connection(sqlcmd)
TextBox1.Text=""
EndIf
EndSub
'删除操作
PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.Click
IfTextBox1.Text=""Then
Return
EndIf
Dimsqlcmd1AsString="updatekucunsetpinming="&"'"&TextBox2.Text.Trim&"'"&"wherewuliaohao="&Val(TextBox1.Text)
Dimsqlcmd2AsString="updatekucunsetshuliang="&Val(TextBox3.Text)&"wherewuliaohao="&Val(TextBox1.Text)
Dimsqlcmd3AsString="updatekucunsetdanjia="&Val(TextBox4.Text)&"wherewuliaohao="&Val(TextBox1.Text)
Dimsqlcmd4AsString="updatekucunsetfenlei="&"'"&ComboBox1.SelectedItem&"'"&"wherewuliaohao="&Val(TextBox1.Text)
CallForm3.connection(sqlcmd1)
CallForm3.connection(sqlcmd2)
CallForm3.connection(sqlcmd3)
CallForm3.connection(sqlcmd4)
EndSub
'修改操作
PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.Click
Callsearch()
EndSub
Subsearch()
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlcmdAsString="select*fromkucunwherewuliaohao="&Val(TextBox1.Text)
DimcmdAsNewOleDb.OleDbCommand(sqlcmd,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.Read=TrueThen
TextBox2.Text=reader(1)
ComboBox1.Text=reader(4)
TextBox3.Text=reader(2)
TextBox4.Text=reader(3)
EndIf
reader.Close()
con.Close()
EndSub
PrivateSubTextBox1_KeyPress(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.KeyPressEventArgs)HandlesTextBox1.KeyPress
IfAsc(e.KeyChar)=13Then
Callsearch()
EndIf
EndSub
EndClass
4.6订餐及收款设计
(1)订餐及收款主窗口(form5)
主要实现代码:
PublicClassform5
Publicarray1(19)AsInteger'用来存放按钮上的数字,通过val转换为整型
DimiAsInteger=0'成员变量,统计被点击按钮的个数,并将值写入array数组
PubliczhAsInteger
Publicflag6AsBoolean=False
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
array1(i)=Val(Button1.Text)'点击后获取按钮文本,并使i加一
i=i+1
EndSub
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
array1(i)=Val(Button2.Text)
i=i+1
EndSub
PrivateSubButton10_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton10.Click
array1(i)=Val(Button10.Text)
i=i+1
EndSub
PrivateSubButton9_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton9.Click
array1(i)=Val(Button9.Text)
i=i+1
EndSub
PrivateSubButton21_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton21.Click
Dimbut()AsButton={Button1,Button2,Button3,Button4,Button5,Button6,Button7,Button8,Button9,Button10,Button11,Button12,Button13,Button14,Button15,Button16,Button17,Button18,Button19,Button20}
'便于操作,将按钮装入数组,实现动态替换背景图片
ForMe.i=0To19
If(array1(i)>=1Andgetstatus(array1(i))=2)Then
MsgBox("座位号为"&array1(i)&"的座位已预订","注意")
ElseIf(array1(i)>=1Andgetstatus(array1(i))=3)Then
MsgBox("座位号为"&array1(i)&"的座位正在就餐","注意")
ElseIf(array1(i)>=1Andgetstatus(array1(i))=1)Then
DimsqlcmdAsString="updatecanzhuosetzhuangtai=2wherezhuohao="&array1(i)
CallForm3.connection(sqlcmd)
'被点击过的按钮文本数大于一,将被点击过的按钮的状态在数据库中更改为2,表示预定
but(array1(i)-1).Image=My.Resources.huangse
'对数组进行操作,替换背景图片
Form6.Show()
EndIf
Next
i=0'将成员变量i的值置零,否则会发生数组越界
EndSub
PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.Click
array1(i)=Val(Button3.Text)
i=i+1
EndSub
PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.Click
array1(i)=Val(Button4.Text)
i=i+1
EndSub
PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton5.Click
array1(i)=Val(Button5.Text)
i=i+1
EndSub
PrivateSubButton6_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton6.Click
array1(i)=Val(Button6.Text)
i=i+1
EndSub
PrivateSubButton7_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton7.Click
array1(i)=Val(Button7.Text)
i=i+1
EndSub
PrivateSubButton8_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton8.Click
array1(i)=Val(Button8.Text)
i=i+1
EndSub
PrivateSubButton15_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton15.Click
array1(i)=Val(Button15.Text)
i=i+1
EndSub
PrivateSubButton14_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton14.Click
array1(i)=Val(Button14.Text)
i=i+1
EndSub
PrivateSubButton16_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton16.Click
array1(i)=Val(Button16.Text)
i=i+1
EndSub
PrivateSubButton12_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton12.Click
array1(i)=Val(Button12.Text)
i=i+1
EndSub
PrivateSubButton11_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton11.Click
array1(i)=Val(Button11.Text)
i=i+1
EndSub
PrivateSubButton20_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton20.Click
array1(i)=Val(Button20.Text)
i=i+1
EndSub
PrivateSubButton19_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton19.Click
array1(i)=Val(Button19.Text)
i=i+1
EndSub
PrivateSubButton18_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton18.Click
array1(i)=Val(Button18.Text)
i=i+1
EndSub
PrivateSubButton17_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton17.Click
array1(i)=Val(Button17.Text)
i=i+1
EndSub
PrivateSubButton13_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton13.Click
array1(i)=Val(Button13.Text)
i=i+1
EndSub
PrivateSubform5_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
Dimbut()AsButton={Button1,Button20}
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
Dimzt(19)AsInteger'定义一个数组用来存放桌子状态
con.Open()
DimsqlcmdAsString="selectzhuangtaifromcanzhuo"
DimcmdAsNewOleDb.OleDbCommand(sqlcmd,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Fork=0To19'循环读取将状态值存入数组中
Ifreader.Read=TrueThen
zt(k)=reader(0)
If(zt(k)=1)Then
but(k).Image=My.Resources.lvse
'为1表示桌子空闲
EndIf
If(zt(k)=2)Then
but(k).Image=My.Resources.huangse
'为2表示已预定
EndIf
If(zt(k)=3)Then
but(k).Image=My.Resources.hongse
'为3表示正在用餐中
EndIf
EndIf
Next
EndSub
'窗体启动的时候显示状态
PrivateSubButton22_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton22.Click
Dimbut()AsButton={Button1,Button20}
'便于操作,将按钮装入数组,实现动态替换背景图片
ForMe.i=0To19
If(array1(i)>=1Andgetstatus(array1(i))=3)Then
MsgBox(array1(i)&"号桌正在就餐不能退订","注意")
ElseIf(array1(i)>1Andgetstatus(array1(i))=2)Then
DimsqlcmdAsString="updatecanzhuosetzhuangtai=1wherezhuohao="&array1(i)
Dimsqlcmd1AsString="deletefromdingcanwhereydzwlike'%"&array1(i)&"%'"
CallForm3.connection(sqlcmd)
CallForm3.connection(sqlcmd1)
'被点击过的按钮文本数大于一,将被点击过的按钮的状态在数据库中更改为2,表示预定
but(array1(i)-1).Image=My.Resources.lvse
'对数组进行操作,替换背景图片
MsgBox("退订成功","消息")
ElseIf(array1(i)=1Andgetstatus(array1(i))=2)Then
DimsqlcmdAsString="updatecanzhuosetzhuangtai=1wherezhuohao="&array1(i)
Dimsqlcmd1AsString="deletefromdingcanwhereydzw='1'"
CallForm3.connection(sqlcmd)
CallForm3.connection(sqlcmd1)
'被点击过的按钮文本数大于一,将被点击过的按钮的状态在数据库中更改为2,表示预定
but(array1(i)-1).Image=My.Resources.lvse
'对数组进行操作,替换背景图片
MsgBox("退订成功","消息")
ElseIf(array1(i)>=1Andgetstatus(array1(i))=1)Then
MsgBox(array1(i)&"号桌没有预定,退订无效","注意")
EndIf
Next
i=0'将成员变量i的值置零,否则会发生数组越界
EndSub
Functiongetstatus%(ByValnum%)
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlcmdAsString="selectzhuangtaifromcanzhuowherezhuohao="&num
DimcmdAsNewOleDb.OleDbCommand(sqlcmd,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.ReadThen
getstatus=reader(0)
EndIf
EndFunction
PrivateSubButton23_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton23.Click
Dimbut()AsButton={Button1,Button20}
'便于操作,将按钮装入数组,实现动态替换背景图片
ForMe.i=0To19
If(array1(i)>=1Andgetstatus(array1(i))=3)Then
MsgBox("座位号为"&array1(i)&"的座位正在就餐","注意")
ElseIf(array1(i)>=1And(getstatus(array1(i))=1)Orgetstatus(array1(i))=2)Then
'被点击过的按钮文本数大于一,将被点击过的按钮的状态在数据库中更改为2,表示预定
but(array1(i)-1).Image=My.Resources.hongse
'对数组进行操作,替换背景图片
Form7.Show()
EndIf
Next
i=0'将成员变量i的值置零,否则会发生数组越界
EndSub
'点菜操作
PrivateSubButton24_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton24.Click
Dimbut()AsButton={Button1,Button20}
'便于操作,将按钮装入数组,实现动态替换背景图片
ForMe.i=0To19
If(array1(i)>=1And(getstatus(array1(i))=1)Orgetstatus(array1(i))=2)Then
MsgBox("座位号为"&array1(i)&"的座位没有点菜,不能结账","注意")
ElseIf(array1(i)>=1Andgetstatus(array1(i))=3)Then
DimsqlcmdAsString="updatecanzhuosetzhuangtai=1wherezhuohao="&array1(i)
zh=array1(i)'获取结账的桌号
CallForm3.connection(sqlcmd)
'被点击过的按钮文本数大于一,将被点击过的按钮的状态在数据库中更改为2,表示预定
but(array1(i)-1).Image=My.Resources.lvse
'对数组进行操作,替换背景图片
Form8.Show()
EndIf
Next
i=0'将成员变量i的值置零,否则会发生数组越界
EndSub
EndClass
(2)预定窗口(form6)
主要实现代码:
PublicClassForm6
PrivateSubForm6_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
Label6.Text=DateAndTime.Now.Millisecond.ToString'毫秒数作为客户编号
Label8.Text=DateTime.Now.ToString'获得当前时间
Fori=0To19
If(form5.array1(i)<>0)Then
Label7.Text&=""&form5.array1(i)
EndIf
Next
'获得预定的桌号
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimsqlcmdAsString="insertintodingcanvalues('"&Label6.Text&"',"&TextBox2.Text&",'"&Label7.Text.Trim&"','"&Label8.Text.Trim&"')"
CallForm3.connection(sqlcmd)
MsgBox(Label7.Text&"号桌预定成功","消息")
Me.Close()
EndSub
'将订餐信息写入数据库
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
Me.Close()
EndSub
EndClass
(3)点菜窗口(form7)
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
If(ComboBox1.Text="")Then
Return
EndIf
TextBox1.Text&=ListBox1.SelectedValue&""
sum(0)=sum(0)+getjiage(ListBox1.SelectedValue)*Val(ComboBox1.SelectedItem)
'价格总和等于每个菜的价格乘以数量
ComboBox1.Text=""
EndSub
Functiongetjiage!(ByValcaiming$)
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlcmdAsString="selectjiagefromcaidanwherecaiming='"&caiming&"'"
DimcmdAsNewOleDb.OleDbCommand(sqlcmd,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.ReadThen
getjiage=reader(0)
EndIf
EndFunction
Subinsert(ByValzhuohaoAsInteger,ByValcaimingAsString,ByValjiageAsSingle)
DimsqlcmdAsString="insertintoyidingcaidanvalues("&zhuohao&",'"&caiming&"',"&jiage&")"
CallForm3.connection(sqlcmd)
EndSub
'插入过程
PrivateSubButton21_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton21.Click
Dimtex()AsTextBox={TextBox1,TextBox2,TextBox3,TextBox4,TextBox5,TextBox6,TextBox7,TextBox8,TextBox9,TextBox10,TextBox11,TextBox12,TextBox13,TextBox14,TextBox15,TextBox16,TextBox17,TextBox18,TextBox19,TextBox20}
Dimlab()AsLabel={Label2,Label21,Label20,Label19,Label18,Label17,Label16,Label15,Label14,Label13,Label12,Label11,Label10,Label9,Label8,Label7,Label6,Label5,Label4,Label3}
Fork=0To19
If(tex(k).Text<>"")Then
Callinsert(Val(lab(k).Text),tex(k).Text.Trim,sum(k))
DimsqlcmdAsString="updatecanzhuosetzhuangtai=3wherezhuohao="&Val(lab(k).Text)
CallForm3.connection(sqlcmd)
EndIf'如果不为空则将桌号、菜名、总价等插入已定菜单表
Next
Forj=0To19
tex(j).Text=""
Next
'点击确定后所有的文本框清空,重新点菜
MsgBox("点菜成功!","消息")
Me.Close()
EndSub
PrivateSubButton22_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton22.Click
Me.Close()
EndSub
EndClass
(4)结账窗口(form8)
主要实现代码:
PublicClassForm8
PrivateSubForm8_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
DimconstrAsString="Provider=sqlOLEDB.1;Password=0;PersistSecurityInfo=True;UserID=sa;InitialCatalog=canteen;DataSource=liuxuecheng"
DimconAsNewOleDb.OleDbConnection(constr)
con.Open()
DimsqlcmdAsString="select*fromyidingcaidanwherezhuohao="&form5.zh
DimcmdAsNewOleDb.OleDbCommand(sqlcmd,con)
DimreaderAsOleDb.OleDbDataReader
reader=cmd.ExecuteReader
Ifreader.ReadThen
Label14.Text=reader(0)
Label8.Text=reader(1)
Label10.Text=reader(2)
EndIf
reader.Close()
con.Close()
Label12.Text=form2.username
Label13.Text=DateTime.Now.ToString
EndSub
PrivateSubTextBox1_KeyPress(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.KeyPressEventArgs)HandlesTextBox1.KeyPress
IfAsc(e.KeyChar)=13Then
If(Val(TextBox1.Text)-Val(Label10.Text)>=0)Then
Label11.Text=Val(TextBox1.Text)-Val(Label10.Text)
Else
MsgBox("金额不足!","注意")
EndIf
EndIf
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimsqlcmdAsString="insertintojiezhangvalues("&Val(Label14.Text)&",'"&Label8.Text.Trim&"','"&Label10.Text.Trim&"',"&Val(TextBox1.Text)&","&Val(Label11.Text)&",'"&Label12.Text.Trim&"','"&Label13.Text.Trim&"')"
CallForm3.connection(sqlcmd)
MsgBox("结账成功!","信息")
Dimsqlcmd_delAsString="deleteyidingcaidanwherezhuohao="&Val(Label14.Text)
CallForm3.connection(sqlcmd_del)
Button3.Enabled=True
EndSub
PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.Click
FileOpen(1,"C:\Users\Administrator\Desktop\课程设计\报表\tip.doc",OpenMode.Output)
WriteLine(1,Label1.Text&Label14.Text)
WriteLine(1,Label2.Text&Label8.Text)
WriteLine(1,Label3.Text&Label10.Text)
WriteLine(1,Label4.Text&TextBox1.Text&""&Label5.Text&Label11.Text)
WriteLine(1,""&Label6.Text&Label12.Text)
WriteLine(1,""&Label7.Text&Label13.Text)
FileClose()
Process.Start("C:\Users\Administrator\Desktop\课程设计\报表\tip.doc")
EndSub
'打印发票
EndClass
5.综合评价与结论
本系统采用c/s结构,结合vb.net与sql数据,对餐饮行业涉及到的各种数据进行处理和管理,在很大程度上满足了客户需求,能够对餐饮企业中涉及到的人事、采购、菜单、报表、订餐及收款等进行操作和数据的管理,方便了企业的日常业务处理,同时增强了企业的经营及服务能力。
6.体会与展望
(1)开发一个管理信息系统,重要的不是如何去用代码实现一个功能,而是系统的分析与设计,只有当准确的分析与合理的设计相结合时才能满足客户的需求。同时,前期的设计关乎到后期的开发速度和质量。
(2)在实现一个操作的时候更多的考虑的是如何确保程序的健壮性,比如向数据库中插入一条记录,要考虑是否已经存在,要是年龄还要考虑是否在一个合乎情理的区间,要是数据库规定某一字段不能为空,还要考虑如何提示用户。
(3)系统的一个功能实现后让别人测试是很有必要的,别人不规范的操作或许能给开发的人发现更多的bug
(4)本系统再根据企业实际情况加以修改能够运用到企业实际的生产运作。
7.文献信息
[1]龚沛曾.VisualBasic.NET程序设计教程[M].高等教育出版社.2010.
[2]微软公司.MicrosoftVisualBasic.NET语言参考手册[M].清华大学出版社.2002
[3]雷东升.基于c/s结构的多商户餐饮管理系统[J].中国科技论文在线.2008
[4]余金山,鲁斌.C/S体系结构的餐饮管理信息系统设计[1].华侨大学学报:自然科学版,2005