vb.net+sql 餐饮管理系统

来源:互联网 发布:html class no js 编辑:程序博客网 时间:2024/04/30 16:48

餐饮管理系统设计文档

0背景:

随着餐饮行业的发展,餐饮行业的管理越来越趋向于精细化,自动化,智能化。餐饮业的管理开始注重细节,将利润与每个细节结合起来,力求资金的有效运转,因此要求餐饮管理系统能详细记录每次服务的内容以及时间。以便于从大量的数据中分析顾客的偏好,以及某一种菜品的销售与季节等其他因素的关系。力求菜品随顾客的口味变化。与此同时,顾客的要求逐渐趋向个性化,频繁的提前订餐及退订对于传统人工操作来说比较费时费力,而且容易出错。另外,随着各行各业支出管理的规范化,大多数顾客希望在消费后能得到自己的消费清单。

1. 需求分析

1.1业务需求

1)系统能够根据进入系统的用户的角色不同而赋予其不同的权限。具体分为系统管理员和业务操作员两大类。为方便系统初期的调试,存在超级用户,拥有所有权限。

2)系统提供接口,供其他系统或其他语言开发的本系统的扩展部分接入。系统管理员可以更改系统的界面风格。

3)人事管理模块能够对所有员工的姓名、性别、住址、身份证号、出生日期、学历、职位、 联系电话、邮箱等信息进行增加、删除、修改、查询等操作。另外,人事管理模块还能对系统用户进行管理。

4)菜单管理由具有厨师长权限的人负责,菜单管理的内容包括菜名、价格、分类等。同过增删改查对菜单进行动态的管理,能够很方便的增加新菜品;修改菜品价格等信息;删除过时的菜品;以及预览所有的菜品。其中菜名,价格等信息能够被点菜模块调用,而分类信息能用在报表统计模块中,统计出每种菜品在某一阶段的消费情况。

5)报表统计

要求系统能够用图表直观的显示员工学历结构、顾客偏好菜品、库存信息及历史消费等。并能够将数据以wordexcel等多种形式展现出来。

6)库存管理模块能对企业的物料管理,实现对物料的物料名,数量,单价,分类等进行增删改查。

7)订餐及收款模块包含预定、退订、点菜、结账等功能。席位共有20个,未预定时桌位的颜色是绿色的,点击预定后桌位变为黄色,并弹出顾客信息登记界面,包括客户的编号、姓氏、电话、已预订的桌位号以及预定时间,且已经预定的桌位不能再次订餐。点击退订能对已经定的桌位进行退订,退订后桌位颜色变为绿色,对于已经就餐的桌位不能退订。已预订或未预定的桌位均能点菜,点菜时弹出点菜界面,包括已点的菜品及每份菜的数量,点菜之后餐桌颜色变为红色。结账模块用来对已经就餐的餐桌结账,结账界面的信息包括桌号,消费清单,应付款。输入实收金额,自动计算找零金额。并显示当前的操作员及操作时间,点击完成将以上信息写入数据库,点击打印,弹出消费清单。

8)系统功能导航能根据每个进入系统的用户角色提供其具有的权限,方便用户操作。

1.2性能需求

系统容量小,运行速度快,界面美观,人性化,操作方便,易于使用;经理及主管可拥有所有的权限(能同时操作管理和收款界面),收款员只能操作收款界面,其他人员则不能进入。

要求系统为c/s结构,数据库部署在服务器端,客户端从数据库读取数据或写入数据的速度要快。

1.3环境需求

硬件环境:服务器、客户机、网络交换机

软件环境:win7/xp 平台 SQL server 2005

开发环境:visual stdio 2005

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

nvarcharmax

消费清单

yingfukuan

money

应付款

shishou

money

实收

zhaoling

money

找零

caozuoyuan

nchar10

操作员

shijian

datetime

操作时间

5)库存表

属性名

数据类型

是否可以为空

说明

wuliaohao

int

物料号(主键)

pinming

nvarchar50

物品名称

shuliang

float

数量

danjia

money

单价

fenlei

nchar(10)

分类

6url

属性名

数据类型

是否可以为空

说明

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

nvarchar50

密码

username

nvarchar50

系统用户名

flag

int

系统用户角色标识

8)员工表

属性名

数据类型

是否可以为空

说明

bianhao

int

员工编号(主键)

xingming

nvarchar(50)

员工姓名

xingbie

nchar(10)

性别

zhuzhi

nvarchar50

员工住址

riqi

datetime

出生日期

shenfen

nvarchar18

身份证号

xueli

nchar10

学历

zhiwei

nchar10

职位

dianhua

int

电话

youxiang

nvarchar50

邮箱

3. 系统总体结构设计方案

3.1在系统分析的基础上得到如下功能模块


模块功能说明:

1)系统管理模块包括切换系统,系统设置,退出系统这几个功能。切换系统能弹出登录界面方便另外一位用户使用系统;系统设置包括用户密码修改、主界面网页设定、系统风格选择,用户在登入系统后可进入用户密码修改模块更改自己的密码;主界面网页设定的作用是更改每个角色登陆到系统看到的主菜单界面的网页的url,可以设定不同角色的用户进入系统后看到的网页内容是不同的。系统风格设置可以改变系统的风格,选择用户喜欢的风格。退出系统能关闭所有使用的资源,退出整个系统。

2)人事管理模块包括员工信息管理和系统用户管理。其中,员工信息管理能对普通员工的信息执行增删改查等操作,系统用户管理能对系统用户的信息进行增删改查。

3)菜单管理模块能够对菜单的编号、名称、价格、分类等执行增删改查操作。

4)报表统计模块能对员工的学历信息以图表的形式统计并展现;通过大量的消费数据得出顾客喜欢的菜品以及喜欢的菜品组合,并用饼图进行反应,方便管理人员作出正确的决策;

库存信息统计能够很直观的反应当前库存的状况;历史账单统计能够让用户一览流水数据。除此之外,报表还可以以wordexcelpdf等形式导出。

5)库存管理模块能够实现对物料的编号、名称、单价、数量、分类等的增删改查管理。

6)订餐及收款模块包含预定、退订、点菜、结账等功能。席位共有20个,未预定时桌位的颜色是绿色的,点击预定后桌位变为黄色,并弹出顾客信息登记界面,包括客户的编号、姓氏、电话、已预订的桌位号以及预定时间,且已经预定的桌位不能再次订餐。点击退订能对已经定的桌位进行退订,退订后桌位颜色变为绿色,对于已经就餐的桌位不能退订。已预订或未预定的桌位均能点菜,点菜时弹出点菜界面,包括已点的菜品及每份菜的数量,点菜之后餐桌颜色变为红色。结账模块用来对已经就餐的餐桌结账,结账界面的信息包括桌号,消费清单,应付款。输入实收金额,自动计算找零金额。并显示当前的操作员及操作时间,点击完成将以上信息写入数据库,打印按钮的操作状态变为可操作,点击打印按钮能够打印顾客回执。

3.2系统操作流程


4. 系统详细设计方案

4.1 系统登录设计

Form1窗体


用户登陆模块是防止非法用户登陆的第一道防线,通过它可以保护后台数据库的安全性,当用户要进行系统操作时,首先要进入的就是身份验证界面,只有在密码正确的情况下才能进行以后的操作,如果输入的密码不正确,则不能进行登录对系统进行操作。同时系统能根据进入的用户的角色不同而分配不同的操作权限。本系统的记住密码功能使得用户不用每次都输入密码,在保证安全的前提下方便了用户的操作。下面是登录模块的主要代码:

Public Class Form1

    Dim user_id, psw As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If TextBox1.Text.Trim = "" Then

            MsgBox("请输入用户名", MsgBoxStyle.OkOnly + 48, "注意")

            Return  '若用户名为空,返回,重新输入

        End If

        Call sqlcon()

        If (TextBox1.Text.Trim = user_id And TextBox2.Text.Trim = psw) Then

            form2.Show()

            Me.Hide()

        Else

            MsgBox("登录失败,请检查用户名及密码是否正确!", MsgBoxStyle.RetryCancel + 48, "注意")

        End If

    End Sub

    Sub sqlcon()

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sqlcmd As String = "select * from yonghu where user_id=" & TextBox1.Text.Trim

        Dim cmd As New OleDb.OleDbCommand(sqlcmd, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read = True Then

            user_id = reader(0).ToString.Trim

            psw = reader(1).ToString.Trim

        End If

        reader.Close()

        con.Close()

    End Sub

    '从yonghu表中获取用户名及密码

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim flag As Integer

        Dim username As String = ""

        Dim password As String = ""

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sqlcmd As String = "select * from use_for_checkbox"

        Dim cmd As New OleDb.OleDbCommand(sqlcmd, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read = True Then

            username = reader(0).ToString.Trim

            password = reader(1).ToString.Trim

            flag = reader(2)

        End If

        reader.Close()

        con.Close()

        If flag = 1 Then

            CheckBox1.Checked = True

            TextBox1.Text = username

            TextBox2.Text = password

        End If

    End Sub

    '窗口出现时,如果flag为1,复选框的状态为true,并自动填充用户名,密码

    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged

        If CheckBox1.Checked = True Then

            Dim sqlcmd As String = "insert into use_for_checkbox values('" & TextBox1.Text.Trim & "','" & TextBox2.Text.Trim & "'," & 1 & ")"

            Call Form3.connection(sqlcmd)

        ElseIf CheckBox1.Checked = False Then

            Dim sqlcmd As String = "delete use_for_checkbox"

            Call Form3.connection(sqlcmd)

        End If

    End Sub

    '复选框为true 将此时的用户名及密码写入use_for_checkbox,为false时清空表

End Class

4.2 系统主界面设计

窗体Form2


系统主界面的菜单提供了进入其他模块的通道,左侧的角色功能导航使用TreeView控件来动态的生成每个角色对应权限的操作树状图,用户进入系统后能一目了然的了解自己能干什么以及某一功能所在的位置。窗体的右下大部分控件放置一个webbrowser控件,能够根据登入系统用户的角色不同而显示不同的网页,网页的url可由管理员在系统设置中设置。以下是实现form2功能的主要代码:

Public Class form2

    Dim flag%

    Public username$

    Dim myuri0, myuri1, myuri2, myuri3, myuri4, myuri5, myuri6 As String

    Private Sub form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Call sqlcon() '获取flag标记

        Call geturl() '获取url

        Select Case flag

            '根据用户的flag标记,决定用户权限及登录时主界面的网页

            Case 0

                Call role_navi0()

                '动态生成角色导航内容

                退出系统ToolStripMenuItem1.Enabled = True

                系统用户管理ToolStripMenuItem.Enabled = True

                '系统管理员所具有的权限

                WebBrowser1.Url = New Uri(myuri0)

                '重定向url

            Case 1

                Call role_navi1()

                退出系统ToolStripMenuItem1.Enabled = True

                系统用户管理ToolStripMenuItem.Enabled = True

                员工信息管理ToolStripMenuItem.Enabled = True

                菜单管理ToolStripMenuItem.Enabled = True

                报表统计ToolStripMenuItem.Enabled = True

                库存管理ToolStripMenuItem.Enabled = True

                订餐及收款ToolStripMenuItem.Enabled = True

                '总经理权限

                WebBrowser1.Url = New Uri(myuri1)

            Case 2

                Call role_navi2()

                员工信息管理ToolStripMenuItem.Enabled = True

                '人事部经理权限

                WebBrowser1.Url = New Uri(myuri2)

            Case 3

                Call role_navi3()

                菜单管理ToolStripMenuItem.Enabled = True

                '厨师长权限

                WebBrowser1.Url = New Uri(myuri3)

            Case 4

                Call role_navi4()

                库存管理ToolStripMenuItem.Enabled = True

                '库房主管权限

                WebBrowser1.Url = New Uri(myuri4)

            Case 5

                Call role_navi5()

                报表统计ToolStripMenuItem.Enabled = True

                '财务主管权限

                WebBrowser1.Url = New Uri(myuri5)

            Case 6

                Call role_navi6()

                订餐及收款ToolStripMenuItem.Enabled = True

                '前台权限

                WebBrowser1.Url = New Uri(myuri6)

        End Select

        Label2.Text &= username & "  今天是:  " & DateTime.Now.Date

        '欢迎标语

    End Sub

    Private Sub 切换用户ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 切换用户ToolStripMenuItem.Click

        Dim i%

        i = MsgBox("是否切换?", MsgBoxStyle.OkCancel + 32, "确认操作")

        If i = MsgBoxResult.Ok Then

            Form1.Show()

            Me.Close()

        End If

    End Sub

    '切换用户

    Sub sqlcon()

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sqlcmd As String = "select * from yonghu where user_id=" & Form1.TextBox1.Text.Trim

        Dim cmd As New OleDb.OleDbCommand(sqlcmd, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read = True Then

            flag = reader(3)

            username = reader(2)

        End If

        reader.Close()

        con.Close()

    End Sub

    '连接数据库查询用户名及标识

    Private Sub 退出系统ToolStripMenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 退出系统ToolStripMenuItem2.Click

        Dim i%

        i = MsgBox("是否退出?", MsgBoxStyle.OkCancel + 32, "确认操作")

        If i = MsgBoxResult.Ok Then

            Me.Close()

            Form1.Close()

        End If

    End Sub

    '退出系统操作

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Call labelmove()

    End Sub

    Sub labelmove()

        Label2.Left = Label2.Left + 1

        If Label2.Left > Me.Right Then

            Label2.Left = 0

        End If

    End Sub

    Private Sub 菜单管理ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 菜单管理ToolStripMenuItem.Click

        Form4.Show()

    End Sub

    Private Sub 订餐及收款ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 订餐及收款ToolStripMenuItem.Click

        form5.Show()

    End Sub

    Private Sub 员工信息管理ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 员工信息管理ToolStripMenuItem.Click

        Form3.Show()

    End Sub

    Private Sub 系统用户管理ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 系统用户管理ToolStripMenuItem.Click

        Form9.Show()

    End Sub

    Sub geturl()

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sql As String = "select * from myurl"

        Dim cmd As New OleDb.OleDbCommand(sql, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read = True Then

            myuri0 = reader(0)

            myuri1 = reader(1)

            myuri2 = reader(2)

            myuri3 = reader(3)

            myuri4 = reader(4)

            myuri5 = reader(5)

            myuri6 = reader(6)

        End If

        reader.Close()

        con.Close()

    End Sub

    '获取myurl中的url值

    Private Sub 退出系统ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 退出系统ToolStripMenuItem1.Click

        Form10.Show()

    End Sub

    Private Sub 库存管理ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 库存管理ToolStripMenuItem.Click

        Form11.Show()

    End Sub

    Private Sub 报表统计ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 报表统计ToolStripMenuItem.Click

    End Sub

    Sub role_navi0()

        Dim nd1, nd2, nd3, nd4 As New TreeNode

        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)

    End Sub

4.3人事管理模块设计


人事管理模块能对员工的员工编号、姓名、性别、住址、出生日期、身份证号、学历、职位、联系电话、邮箱等信息进行增删改查的操作。其中员工编号、姓名等共性很小的信息需用textbox输入,性别等信息采用combobox输入,出生日期这一特殊数据形式采用datetimepicker输入。同时,为textbox1添加了keypress事件,当textbox1中输入内容后能快速的查询信息并填充到其他项,为删除、修改做准备。将数据源整体拖拽进窗体用来全部显示内容。以下是主要的实现代码:

Public Class Form3

    'bug:将数据库中的日期显示到界面上

    Private Sub YuangongBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        Me.Validate()

        Me.YuangongBindingSource.EndEdit()

        Me.TableAdapterManager.UpdateAll(Me.CanteenDataSet)

    End Sub

    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'TODO: 这行代码将数据加载到表“CanteenDataSet.yuangong”中。您可以根据需要移动或移除它。

        Me.YuangongTableAdapter.Fill(Me.CanteenDataSet.yuangong)

    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        Static Dim i% = 0

        i = i + 1

        If (i >= 1) Then

            PictureBox1.Hide()

            Button5.Text = "刷新"

            Me.Refresh()

        End If

    End Sub

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

        If Asc(e.KeyChar) = 13 Then

            Call search()

        End If

    End Sub

    Public Sub connection(ByVal sqlcmd As String) '用于增删改

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim cmd As New OleDb.OleDbCommand(sqlcmd, con)

        cmd.ExecuteNonQuery()

    End Sub

    Sub search() '用来显示数据

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sqlcmd As String = "select * from yuangong where bianhao=" & TextBox1.Text.Trim

        Dim cmd As New OleDb.OleDbCommand(sqlcmd, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read = True Then

            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)

        End If

        reader.Close()

        con.Close()

    End Sub

    '查询操作

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        If TextBox1.Text = "" Then

            MsgBox("请输入要查询的员工编号", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Call search()

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim bianhao, xingming, xingbie, zhuzhi, riqi, shenfeng, xueli, zhiwei, dianhua, youxiang As String

        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

        If TextBox1.Text = "" Then

            MsgBox("至少有一项为空", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Dim bh As String = ""

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sql As String = "select * from yuangong where bianhao= " & TextBox1.Text.Trim

        Dim cmd As New OleDb.OleDbCommand(sql, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read = True Then

            bh = reader(0)

        End If

       

        If bh = TextBox1.Text.Trim Then

            MsgBox("已存在编号为" & bianhao & "的员工", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        '验证是否重名()

        If (bianhao = "" Or xingming = "" Or xingbie = "" Or zhuzhi = "" Or riqi = "" Or shenfeng = "" Or xueli = "" Or zhiwei = "" Or dianhua = "" Or youxiang = "") Then

            MsgBox("至少有一项未填写", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        '验证填写项是否为空

        Dim sqlcmd As String = "insert into yuangong values(" & "'" & bianhao & "'" & "," & "'" & xingming & "'" & "," & "'" & xingbie & "'" & "," & "'" & zhuzhi & "'" & "," & "'" & riqi & "'" & "," & "'" & shenfeng & "'" & "," & "'" & xueli & "'" & "," & "'" & zhiwei & "'" & "," & dianhua & "," & "'" & youxiang & "'" & ")"

        Call connection(sqlcmd)

        TextBox1.Text = ""

        TextBox2.Text = ""

        ComboBox1.Text = ""

        TextBox3.Text = ""

        TextBox4.Text = ""

        ComboBox2.Text = ""

        ComboBox3.Text = ""

        TextBox5.Text = ""

        TextBox6.Text = ""

        MsgBox("添加成功", MsgBoxStyle.OkOnly + 64, "消息")

        '将内容清空,并提示添加成功

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        If TextBox1.Text = "" Then

            MsgBox("请输入要删除的员工编号", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Dim sqlcmd As String = "delete from yuangong where bianhao=" & TextBox1.Text.Trim

        Dim i%

        i = MsgBox("确定要删除编号为" & TextBox1.Text.Trim & "的员工?", MsgBoxStyle.OkCancel + 32, "提示")

        If i = MsgBoxResult.Ok Then

            Call connection(sqlcmd)

            TextBox1.Text = ""

            MsgBox("删除成功", MsgBoxStyle.OkOnly + 64, "消息")

        End If

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        If TextBox1.Text = "" Then

            MsgBox("请输入要修改的员工号", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Dim sqlcmd1 As String = "update yuangong set xingming =" & "'" & TextBox2.Text.Trim & "'" & "where bianhao=" & TextBox1.Text.Trim

        Dim sqlcmd2 As String = "update yuangong set xingbie =" & "'" & ComboBox1.SelectedItem & "'" & "where bianhao=" & TextBox1.Text.Trim

        Dim sqlcmd3 As String = "update yuangong set zhuzhi = " & "'" & TextBox3.Text.Trim & "'" & "where bianhao=" & TextBox1.Text.Trim

        Dim sqlcmd4 As String = "update yuangong set riqi =" & "'" & DateTimePicker1.Value.Date.ToString & "'" & "where bianhao=" & TextBox1.Text.Trim

        Dim sqlcmd5 As String = "update yuangong set shenfeng =" & "'" & TextBox4.Text.Trim & "'" & "where bianhao=" & TextBox1.Text.Trim

        Dim sqlcmd6 As String = "update yuangong set xueli =" & "'" & ComboBox2.SelectedItem & "'" & "where bianhao=" & TextBox1.Text.Trim

        Dim sqlcmd7 As String = "update yuangong set zhiwei =" & "'" & ComboBox3.SelectedItem & "'" & "where bianhao=" & TextBox1.Text.Trim

        Dim sqlcmd8 As String = "update yuangong set dianhua =" & Val(TextBox5.Text) & "where bianhao=" & TextBox1.Text.Trim

        Dim sqlcmd9 As String = "update yuangong set youxiang =" & "'" & TextBox6.Text.Trim & "'" & "where bianhao=" & TextBox1.Text.Trim

        Call connection(sqlcmd1)

        Call connection(sqlcmd2)

        Call connection(sqlcmd3)

        Call connection(sqlcmd4)

        Call connection(sqlcmd5)

        Call connection(sqlcmd6)

        Call connection(sqlcmd7)

        Call connection(sqlcmd8)

        Call connection(sqlcmd9)

        MsgBox("员工信息修改成功", MsgBoxStyle.OkOnly + 64, "消息")

    End Sub

    '修改员工信息

End Class

4.4菜单管理

Form4


菜单管理能对菜号、菜名、价格、分类等进行增删改查操作,其中菜号、菜名、价格对应的编辑框为textbox,分类对应的为combobox。同时运用datagridview将对应表中的所有数据全部显示出来。以下是主要实现代码:

Public Class Form4

    Private Sub CaidanBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        Me.Validate()

        Me.CaidanBindingSource.EndEdit()

        Me.TableAdapterManager.UpdateAll(Me.CanteenDataSet)

    End Sub

    Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'TODO: 这行代码将数据加载到表“CanteenDataSet.caidan”中。您可以根据需要移动或移除它。

        Me.CaidanTableAdapter.Fill(Me.CanteenDataSet.caidan)

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        If (TextBox3.Text = "") Then

            MsgBox("不能为空", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Dim sqlcmd As String = "insert into caidan (caihao,caiming,jiage,fenlei) values('" & TextBox3.Text.Trim & " ','" & TextBox1.Text.Trim & "'," & Val(TextBox2.Text) & ", '" & ComboBox1.SelectedItem & "' )"

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sql As String = "select * from caidan where caihao= " & TextBox3.Text.Trim

        Dim cmd As New OleDb.OleDbCommand(sql, con)

        Dim reader As OleDb.OleDbDataReader

        Dim cm As String = ""

        reader = cmd.ExecuteReader

        If reader.Read = True Then

            cm = reader(0)

        End If

        reader.Close()

        con.Close()

        If cm = TextBox3.Text.Trim Then

            MsgBox("已存在菜号为" & TextBox3.Text.Trim & "的菜", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        If (TextBox1.Text = "" Or ComboBox1.SelectedItem = "" Or TextBox2.Text = "" Or TextBox3.Text = "") Then

            MsgBox("至少有一项未填写", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Call Form3.connection(sqlcmd)

        TextBox1.Text = ""

        TextBox2.Text = ""

        ComboBox1.Text = ""

        TextBox3.Text = ""

        MsgBox("添加成功", MsgBoxStyle.OkOnly + 64, "消息")

    End Sub

    '添加模块

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        If TextBox1.Text = "" Then

            MsgBox("请输入要删除的菜号", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Dim sqlcmd As String = "delete from caidan where caihao=" & TextBox3.Text.Trim

        Dim i%

        i = MsgBox("确定要删除菜号为" & TextBox3.Text.Trim & "的菜?", MsgBoxStyle.OkCancel + 32, "提示")

        If i = MsgBoxResult.Ok Then

            Call Form3.connection(sqlcmd)

            TextBox3.Text = ""

            MsgBox("删除成功", MsgBoxStyle.OkOnly + 64, "消息")

        End If

    End Sub

    '删除模块

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        If TextBox3.Text = "" Then

            MsgBox("请输入要修改的菜号", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Dim sqlcmd1 As String = "update caidan set caiming =" & "'" & TextBox1.Text.Trim & "'" & "where caihao=" & TextBox3.Text.Trim

        Dim sqlcmd2 As String = "update caidan set fenlei=" & "'" & ComboBox1.SelectedItem & "'" & "where caihao=" & TextBox3.Text.Trim

        Dim sqlcmd3 As String = "update caidan set jiage = " & "'" & TextBox2.Text.Trim & "'" & "where caihao=" & TextBox3.Text.Trim

        Call Form3.connection(sqlcmd1)

        Call Form3.connection(sqlcmd2)

        Call Form3.connection(sqlcmd3)

        MsgBox("菜单信息更新成功!", MsgBoxStyle.OkOnly + 64, "消息")

    End Sub

    '修改模块

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

        If TextBox1.Text = "" Then

            MsgBox("请输入要查询的菜名", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Call mysearch()

    End Sub

    '查询模块

    Sub mysearch()

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sql As String = "select * from caidan where caihao= " & TextBox3.Text.Trim

        Dim cmd As New OleDb.OleDbCommand(sql, con)

        Dim reader As OleDb.OleDbDataReader

        Dim cm As String = ""

        reader = cmd.ExecuteReader

        If reader.Read = True Then

            TextBox3.Text = reader(0)

            TextBox1.Text = reader(1)

            TextBox2.Text = reader(2)

            ComboBox1.Text = reader(3)

            cm = reader(1)

        End If

        reader.Close()

        con.Close()

        If (cm = "") Then

            MsgBox("此项不存在", MsgBoxStyle.OkOnly + 48, "注意")

        End If

    End Sub

    '查询子过程

    Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress

        If Asc(e.KeyChar) = 13 Then

            Call mysearch()

        End If

    End Sub

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

        PictureBox2.Hide()

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        OpenFileDialog1.FileName = "*.jpg"

        OpenFileDialog1.InitialDirectory = "D:\图片"

        OpenFileDialog1.Filter = "图片(*.jpg)|*.jpg|all files(*.*)|*.*"

        OpenFileDialog1.FilterIndex = 1

        If (OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK) Then

            PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)

        Else

            MsgBox("没有选择文件")

        End If

    End Sub

    '打开图片

End Class

4.5报表统计设计

Form12、form13、form14、form15


报表统计功能利用visual stdio自带的报表生成向导生成四个crystalreport,分别统计员工学历结构、顾客偏好菜品、库存信息、历史流水账一览。并在对应窗体中添加crystalreportviewer来查看报表。系统生成的报表能导出为多种格式。

4.6库存管理设计

Form11


库存管理能对物料号、品名、数量、单价、分类等进行增删改查,利用datagridview显示全部的数据。主要实现代码如下:

Public Class Form11

    Private Sub KucunBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        Me.Validate()

        Me.KucunBindingSource.EndEdit()

        Me.TableAdapterManager.UpdateAll(Me.CanteenDataSet)

    End Sub

    Private Sub Form11_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'TODO: 这行代码将数据加载到表“CanteenDataSet.kucun”中。您可以根据需要移动或移除它。

        Me.KucunTableAdapter.Fill(Me.CanteenDataSet.kucun)

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If TextBox1.Text = "" Then

            MsgBox("至少有一项为空", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Dim bh As String = ""

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sql As String = "select * from kucun where wuliaohao= " & TextBox1.Text.Trim

        Dim cmd As New OleDb.OleDbCommand(sql, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read = True Then

            bh = reader(0)

        End If

        If bh = TextBox1.Text.Trim Then

            MsgBox("已存在编号为" & TextBox1.Text.Trim & "的物料", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        '验证是否重名()

        If (TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Or ComboBox1.SelectedItem = "") Then

            MsgBox("至少有一项未填写", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        '验证填写项是否为空

        Dim sqlcmd As String = "insert into kucun values(" & Val(TextBox1.Text) & "," & "'" & TextBox2.Text.Trim & "'" & "," & Val(TextBox3.Text) & "," & Val(TextBox4.Text) & "," & "'" & ComboBox1.SelectedItem & "'" & ")"

        Call Form3.connection(sqlcmd)

        TextBox1.Text = ""

        TextBox2.Text = ""

        ComboBox1.Text = ""

        TextBox3.Text = ""

        TextBox4.Text = ""

        MsgBox("添加成功", MsgBoxStyle.OkOnly + 64, "消息")

        '将内容清空,并提示添加成功

    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        PictureBox1.Hide()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        If TextBox1.Text = "" Then

            MsgBox("请输入要删除的物料号", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Dim sqlcmd As String = "delete from kucun where wuliaohao=" & Val(TextBox1.Text)

        Dim i%

        i = MsgBox("确定要删除编号为" & Val(TextBox1.Text) & "的物料?", MsgBoxStyle.OkCancel + 32, "提示")

        If i = MsgBoxResult.Ok Then

            Call Form3.connection(sqlcmd)

            TextBox1.Text = ""

            MsgBox("删除成功", MsgBoxStyle.OkOnly + 64, "消息")

        End If

    End Sub

    '删除操作

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        If TextBox1.Text = "" Then

            MsgBox("请输入要修改的物料号", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        Dim sqlcmd1 As String = "update kucun set pinming =" & "'" & TextBox2.Text.Trim & "'" & "where wuliaohao=" & Val(TextBox1.Text)

        Dim sqlcmd2 As String = "update kucun set shuliang =" & Val(TextBox3.Text) & "where wuliaohao=" & Val(TextBox1.Text)

        Dim sqlcmd3 As String = "update kucun set danjia = " & Val(TextBox4.Text) & "where wuliaohao=" & Val(TextBox1.Text)

        Dim sqlcmd4 As String = "update kucun set fenlei =" & "'" & ComboBox1.SelectedItem & "'" & "where wuliaohao=" & Val(TextBox1.Text)

        Call Form3.connection(sqlcmd1)

        Call Form3.connection(sqlcmd2)

        Call Form3.connection(sqlcmd3)

        Call Form3.connection(sqlcmd4)

        MsgBox("物料信息修改成功", MsgBoxStyle.OkOnly + 64, "消息")

    End Sub

    '修改操作

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        Call search()

    End Sub

    Sub search()

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sqlcmd As String = "select * from kucun where wuliaohao=" & Val(TextBox1.Text)

        Dim cmd As New OleDb.OleDbCommand(sqlcmd, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read = True Then

            TextBox2.Text = reader(1)

            ComboBox1.Text = reader(4)

            TextBox3.Text = reader(2)

            TextBox4.Text = reader(3)

        End If

        reader.Close()

        con.Close()

    End Sub

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

        If Asc(e.KeyChar) = 13 Then

            Call search()

        End If

    End Sub

End Class

4.6订餐及收款设计

(1)订餐及收款主窗口(form5)


主要实现代码:

Public Class form5

    Public array1(19) As Integer '用来存放按钮上的数字,通过val转换为整型

    Dim i As Integer = 0 '成员变量,统计被点击按钮的个数,并将值写入array数组

    Public zh As Integer

    Public flag6 As Boolean = False

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        array1(i) = Val(Button1.Text) '点击后获取按钮文本,并使i加一

        i = i + 1

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        array1(i) = Val(Button2.Text)

        i = i + 1

    End Sub

    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click

        array1(i) = Val(Button10.Text)

        i = i + 1

    End Sub

    Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click

        array1(i) = Val(Button9.Text)

        i = i + 1

    End Sub

    Private Sub Button21_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button21.Click

        Dim but() As Button = {Button1, Button2, Button3, Button4, Button5, Button6, Button7, Button8, Button9, Button10, Button11, Button12, Button13, Button14, Button15, Button16, Button17, Button18, Button19, Button20}

        '便于操作,将按钮装入数组,实现动态替换背景图片

        For Me.i = 0 To 19

            If (array1(i) >= 1 And getstatus(array1(i)) = 2) Then

                MsgBox("座位号为" & array1(i) & "的座位已预订", MsgBoxStyle.OkOnly + 48, "注意")

            ElseIf (array1(i) >= 1 And getstatus(array1(i)) = 3) Then

                MsgBox("座位号为" & array1(i) & "的座位正在就餐", MsgBoxStyle.OkOnly + 48, "注意")

            ElseIf (array1(i) >= 1 And getstatus(array1(i)) = 1) Then

                Dim sqlcmd As String = "update canzhuo set zhuangtai=2 where zhuohao=" & array1(i)

                Call Form3.connection(sqlcmd)

                '被点击过的按钮文本数大于一,将被点击过的按钮的状态在数据库中更改为2,表示预定

                but(array1(i) - 1).Image = My.Resources.huangse

                '对数组进行操作,替换背景图片

                Form6.Show()

            End If

        Next

        i = 0 '将成员变量i的值置零,否则会发生数组越界

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        array1(i) = Val(Button3.Text)

        i = i + 1

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        array1(i) = Val(Button4.Text)

        i = i + 1

    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        array1(i) = Val(Button5.Text)

        i = i + 1

    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

        array1(i) = Val(Button6.Text)

        i = i + 1

    End Sub

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

        array1(i) = Val(Button7.Text)

        i = i + 1

    End Sub

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click

        array1(i) = Val(Button8.Text)

        i = i + 1

    End Sub

    Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click

        array1(i) = Val(Button15.Text)

        i = i + 1

    End Sub

    Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click

        array1(i) = Val(Button14.Text)

        i = i + 1

    End Sub

    Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click

        array1(i) = Val(Button16.Text)

        i = i + 1

      

    End Sub

    Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click

        array1(i) = Val(Button12.Text)

        i = i + 1

    End Sub

    Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click

        array1(i) = Val(Button11.Text)

        i = i + 1

    End Sub

    Private Sub Button20_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button20.Click

        array1(i) = Val(Button20.Text)

        i = i + 1

    End Sub

    Private Sub Button19_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button19.Click

        array1(i) = Val(Button19.Text)

        i = i + 1

    End Sub

    Private Sub Button18_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button18.Click

        array1(i) = Val(Button18.Text)

        i = i + 1

    End Sub

    Private Sub Button17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button17.Click

        array1(i) = Val(Button17.Text)

        i = i + 1

    End Sub

    Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click

        array1(i) = Val(Button13.Text)

        i = i + 1

    End Sub

   

    Private Sub form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim but() As Button = {Button1, Button2, Button3, Button4, Button5, Button6, Button7, Button8, Button9, Button10, Button11, Button12, Button13, Button14, Button15, Button16, Button17, Button18, Button19, Button20}

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        Dim zt(19) As Integer '定义一个数组用来存放桌子状态

        con.Open()

        Dim sqlcmd As String = "select zhuangtai from canzhuo"

        Dim cmd As New OleDb.OleDbCommand(sqlcmd, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        For k = 0 To 19 '循环读取将状态值存入数组中

            If reader.Read = True Then

                zt(k) = reader(0)

                If (zt(k) = 1) Then

                    but(k).Image = My.Resources.lvse

                    '为1 表示桌子空闲

                End If

                If (zt(k) = 2) Then

                    but(k).Image = My.Resources.huangse

                    '为2 表示已预定

                End If

                If (zt(k) = 3) Then

                    but(k).Image = My.Resources.hongse

                    '为3 表示正在用餐中

                End If

            End If

        Next

    End Sub

    '窗体启动的时候显示状态

    Private Sub Button22_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button22.Click

        Dim but() As Button = {Button1, Button2, Button3, Button4, Button5, Button6, Button7, Button8, Button9, Button10, Button11, Button12, Button13, Button14, Button15, Button16, Button17, Button18, Button19, Button20}

        '便于操作,将按钮装入数组,实现动态替换背景图片

        For Me.i = 0 To 19

            If (array1(i) >= 1 And getstatus(array1(i)) = 3) Then

                MsgBox(array1(i) & "号桌正在就餐不能退订", MsgBoxStyle.OkOnly + 48, "注意")

            ElseIf (array1(i) > 1 And getstatus(array1(i)) = 2) Then

                Dim sqlcmd As String = "update canzhuo set zhuangtai=1 where zhuohao=" & array1(i)

                Dim sqlcmd1 As String = "delete from dingcan where ydzw like '%" & array1(i) & "%'"

                Call Form3.connection(sqlcmd)

                Call Form3.connection(sqlcmd1)

                '被点击过的按钮文本数大于一,将被点击过的按钮的状态在数据库中更改为2,表示预定

                but(array1(i) - 1).Image = My.Resources.lvse

                '对数组进行操作,替换背景图片

                MsgBox("退订成功", MsgBoxStyle.OkOnly + 64, "消息")

            ElseIf (array1(i) = 1 And getstatus(array1(i)) = 2) Then

                Dim sqlcmd As String = "update canzhuo set zhuangtai=1 where zhuohao=" & array1(i)

                Dim sqlcmd1 As String = "delete from dingcan where ydzw = '1'"

                Call Form3.connection(sqlcmd)

                Call Form3.connection(sqlcmd1)

                '被点击过的按钮文本数大于一,将被点击过的按钮的状态在数据库中更改为2,表示预定

                but(array1(i) - 1).Image = My.Resources.lvse

                '对数组进行操作,替换背景图片

                MsgBox("退订成功", MsgBoxStyle.OkOnly + 64, "消息")

            ElseIf (array1(i) >= 1 And getstatus(array1(i)) = 1) Then

                MsgBox(array1(i) & "号桌没有预定,退订无效", MsgBoxStyle.OkOnly + 48, "注意")

            End If

        Next

        i = 0 '将成员变量i的值置零,否则会发生数组越界

    End Sub

    Function getstatus%(ByVal num%)

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sqlcmd As String = "select zhuangtai from canzhuo where zhuohao=" & num

        Dim cmd As New OleDb.OleDbCommand(sqlcmd, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read Then

            getstatus = reader(0)

        End If

    End Function

    '用来获取按钮状态的函数

    Private Sub Button23_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button23.Click

        Dim but() As Button = {Button1, Button2, Button3, Button4, Button5, Button6, Button7, Button8, Button9, Button10, Button11, Button12, Button13, Button14, Button15, Button16, Button17, Button18, Button19, Button20}

        '便于操作,将按钮装入数组,实现动态替换背景图片

        For Me.i = 0 To 19

            If (array1(i) >= 1 And getstatus(array1(i)) = 3) Then

                MsgBox("座位号为" & array1(i) & "的座位正在就餐", MsgBoxStyle.OkOnly + 48, "注意")

            ElseIf (array1(i) >= 1 And (getstatus(array1(i)) = 1) Or getstatus(array1(i)) = 2) Then

                '被点击过的按钮文本数大于一,将被点击过的按钮的状态在数据库中更改为2,表示预定

                but(array1(i) - 1).Image = My.Resources.hongse

                '对数组进行操作,替换背景图片

                Form7.Show()

            End If

        Next

        i = 0 '将成员变量i的值置零,否则会发生数组越界

    End Sub

    '点菜操作

    Private Sub Button24_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button24.Click

        Dim but() As Button = {Button1, Button2, Button3, Button4, Button5, Button6, Button7, Button8, Button9, Button10, Button11, Button12, Button13, Button14, Button15, Button16, Button17, Button18, Button19, Button20}

        '便于操作,将按钮装入数组,实现动态替换背景图片

        For Me.i = 0 To 19

            If (array1(i) >= 1 And (getstatus(array1(i)) = 1) Or getstatus(array1(i)) = 2) Then

                MsgBox("座位号为" & array1(i) & "的座位没有点菜,不能结账", MsgBoxStyle.OkOnly + 48, "注意")

            ElseIf (array1(i) >= 1 And getstatus(array1(i)) = 3) Then

                Dim sqlcmd As String = "update canzhuo set zhuangtai=1 where zhuohao=" & array1(i)

                zh = array1(i) '获取结账的桌号

                Call Form3.connection(sqlcmd)

                '被点击过的按钮文本数大于一,将被点击过的按钮的状态在数据库中更改为2,表示预定

                but(array1(i) - 1).Image = My.Resources.lvse

                '对数组进行操作,替换背景图片

                Form8.Show()

            End If

        Next

        i = 0 '将成员变量i的值置零,否则会发生数组越界

    End Sub

End Class

(2)预定窗口(form6)


主要实现代码:

Public Class Form6

    Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Label6.Text = DateAndTime.Now.Millisecond.ToString '毫秒数作为客户编号

        Label8.Text = DateTime.Now.ToString '获得当前时间

        For i = 0 To 19

            If (form5.array1(i) <> 0) Then

                Label7.Text &= " " & form5.array1(i)

            End If

        Next

        '获得预定的桌号

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim sqlcmd As String = "insert into dingcan values('" & Label6.Text & "','" & TextBox1.Text.Trim & "'," & TextBox2.Text & ",'" & Label7.Text.Trim & "','" & Label8.Text.Trim & "')"

        Call Form3.connection(sqlcmd)

        MsgBox(Label7.Text & "号桌预定成功", MsgBoxStyle.OkOnly + 64, "消息")

        Me.Close()

    End Sub

    '将订餐信息写入数据库

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Me.Close()

    End Sub

End Class

(3)点菜窗口(form7)


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If (ComboBox1.Text = "") Then

            MsgBox("没有选择数量", MsgBoxStyle.OkOnly + 48, "注意")

            Return

        End If

        TextBox1.Text &= ListBox1.SelectedValue & " "

        sum(0) = sum(0) + getjiage(ListBox1.SelectedValue) * Val(ComboBox1.SelectedItem)

        '价格总和等于每个菜的价格乘以数量

        ComboBox1.Text = ""

    End Sub

    Function getjiage!(ByVal caiming$)

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sqlcmd As String = "select jiage from caidan where caiming='" & caiming & "'"

        Dim cmd As New OleDb.OleDbCommand(sqlcmd, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read Then

            getjiage = reader(0)

        End If

    End Function

    '从菜单表中获取价格

    Sub insert(ByVal zhuohao As Integer, ByVal caiming As String, ByVal jiage As Single)

        Dim sqlcmd As String = "insert into yidingcaidan  values (" & zhuohao & ",'" & caiming & "'," & jiage & ")"

        Call Form3.connection(sqlcmd)

    End Sub

    '插入过程

    Private Sub Button21_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button21.Click

        Dim tex() As TextBox = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13, TextBox14, TextBox15, TextBox16, TextBox17, TextBox18, TextBox19, TextBox20}

        Dim lab() As Label = {Label2, Label21, Label20, Label19, Label18, Label17, Label16, Label15, Label14, Label13, Label12, Label11, Label10, Label9, Label8, Label7, Label6, Label5, Label4, Label3}

        For k = 0 To 19

            If (tex(k).Text <> "") Then

                Call insert(Val(lab(k).Text), tex(k).Text.Trim, sum(k))

                Dim sqlcmd As String = "update canzhuo set zhuangtai=3 where zhuohao=" & Val(lab(k).Text)

                Call Form3.connection(sqlcmd)

            End If '如果不为空则将桌号、菜名、总价等插入已定菜单表

        Next

        For j = 0 To 19

            tex(j).Text = ""

        Next

        '点击确定后所有的文本框清空,重新点菜

        MsgBox("点菜成功!", MsgBoxStyle.OkOnly + 64, "消息")

        Me.Close()

    End Sub

    Private Sub Button22_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button22.Click

        Me.Close()

    End Sub

End Class

(4)结账窗口(form8)


主要实现代码:

Public Class Form8

    Private Sub Form8_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim constr As String = "Provider=SQLOLEDB.1;Password=0;Persist Security Info=True;User ID=sa;Initial Catalog=canteen;Data Source=liuxuecheng"

        Dim con As New OleDb.OleDbConnection(constr)

        con.Open()

        Dim sqlcmd As String = "select * from yidingcaidan where zhuohao=" & form5.zh

        Dim cmd As New OleDb.OleDbCommand(sqlcmd, con)

        Dim reader As OleDb.OleDbDataReader

        reader = cmd.ExecuteReader

        If reader.Read Then

            Label14.Text = reader(0)

            Label8.Text = reader(1)

            Label10.Text = reader(2)

        End If

        reader.Close()

        con.Close()

        '获取结账的桌号,菜单,价格

        Label12.Text = form2.username

        Label13.Text = DateTime.Now.ToString

    End Sub

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

        If Asc(e.KeyChar) = 13 Then

            If (Val(TextBox1.Text) - Val(Label10.Text) >= 0) Then

                Label11.Text = Val(TextBox1.Text) - Val(Label10.Text)

            Else

                MsgBox("金额不足!", MsgBoxStyle.OkOnly + 48, "注意")

            End If

        End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim sqlcmd As String = "insert into jiezhang values(" & Val(Label14.Text) & ",'" & Label8.Text.Trim & "','" & Label10.Text.Trim & "'," & Val(TextBox1.Text) & "," & Val(Label11.Text) & ",'" & Label12.Text.Trim & "','" & Label13.Text.Trim & "')"

        Call Form3.connection(sqlcmd)

        MsgBox("结账成功!", MsgBoxStyle.OkOnly + 64, "信息")

        Dim sqlcmd_del As String = "delete yidingcaidan where zhuohao=" & Val(Label14.Text)

        Call Form3.connection(sqlcmd_del)

        Button3.Enabled = True

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.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")

    End Sub

    '打印发票

End Class

5.综合评价与结论

本系统采用c/s结构,结合vb.netsql数据,对餐饮行业涉及到的各种数据进行处理和管理,在很大程度上满足了客户需求,能够对餐饮企业中涉及到的人事、采购、菜单、报表、订餐及收款等进行操作和数据的管理,方便了企业的日常业务处理,同时增强了企业的经营及服务能力。 

6.体会与展望

1)开发一个管理信息系统,重要的不是如何去用代码实现一个功能,而是系统的分析与设计,只有当准确的分析与合理的设计相结合时才能满足客户的需求。同时,前期的设计关乎到后期的开发速度和质量。

2)在实现一个操作的时候更多的考虑的是如何确保程序的健壮性,比如向数据库中插入一条记录,要考虑是否已经存在,要是年龄还要考虑是否在一个合乎情理的区间,要是数据库规定某一字段不能为空,还要考虑如何提示用户。

3)系统的一个功能实现后让别人测试是很有必要的,别人不规范的操作或许能给开发的人发现更多的bug

4)本系统再根据企业实际情况加以修改能够运用到企业实际的生产运作。

7.文献信息

[1]龚沛曾.Visual Basic.NET程序设计教程[M].高等教育出版社.2010.

[2]微软公司.Microsoft Visual Basic.NET语言参考手册[M].清华大学出版社.2002

[3]雷东升.基于c/s结构的多商户餐饮管理系统[J].中国科技论文在线.2008

[4]余金山,鲁斌. C/S 体系结构的餐饮管理信息系统设计[1].华侨大学学报:自然科学版, 2005

原创粉丝点击