C#餐饮管理系统详细设计含所有窗体代码Word文档格式.docx
《C#餐饮管理系统详细设计含所有窗体代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《C#餐饮管理系统详细设计含所有窗体代码Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
在项目安装及调试阶段,用户培训、员工出差等费用支出需要2万元.在项目维护阶段预计需要投入3万元的资金.累计项目投入需要15万元资金.
(2)收益
用户提供项目资金35万元.对于项目运行后进行的改动,采取协商的原则根据改动规模额外提供资金。
因此从投资与收益的效益比上看,公司可以获得20万元的利润。
项目完成后,会给公司提供资源储备,包括技术、经验的累积,其后在开发类似的项目时,可以极大地缩短项目开发周期。
4.结论
根据上面的分析,在技术上不会存在问题,因此项目延期的可能性很小。
在效益上公司投入7个人、两个月的时间获利20万元,效益比较可观。
在公司今后发展上可以储备项目开发的经验和资源.因此认为该项目可以开发。
3系统设计
1.3。
1系统目标
本系统属于小型的餐饮管理系统,可以有效地对中小型餐厅消费进行管理。
本系统应达到以下目标:
●系统采用人机交互的方式,界面美观有好,信息查询灵活、方便,数据存储安全可考;
●实现对餐厅客户开台、点菜/加菜、账目查询和结账等操作;
●对用户数的数据进行严格的数据检验,尽可能地避免人为错误;
●实现对消费账目自动结算;
●实现对消费的历史记录进行查询、支持模糊查询;
●系统应最大限度地实现易维护性和易操作性.
2系统功能结构
餐饮管理系统功能结构如图1_1所示。
图1_1系统功能结构图
1.3.3业务逻辑编码规则
遵守程序编码规则所开发的程序,代码清晰、整洁、方便阅读,并可以提高程序的可读性,真正做到“见名知意"
.本节哦哪个数据库设计和程序编码两个方面介绍程序开发中的编码规则。
1.数据库对象命名规则
(1)数据库命名规则
数据库命名以字母db开头(小写),后面加数据库相关英文单词或缩写。
下面将举例说明,如表1_1所示。
表1_1数据库命名
数据库名称
描述
db_MrCy
餐饮管理系统数据库
(2)数据表命名规则
数据表命名以字母tb开头(小写),后面加数据库相关英文单词或缩写和数据表名,多个单词间用“_"
分隔。
下面将举例说明,如表1_2所示。
表1_2数据表命名
数据表名称
tb_food
点菜信息表
tb_foodtype
菜品类别信息表
(3)字段命名规则
字段一律采用英文单词或词组(可利用翻译软件)命名,如找不到专业的英文单词或词组,可以用相同意义的英文单词或词组代替。
下面将举例说明,表1_3为桌台信息表中的部分字段。
表1_3字段命名
RoomName
桌台名称
RoomJC
桌台位置
RoomZT
桌台状态
2.业务编码规则
(1)桌台编号
桌台的ID编号是餐饮管理系统中桌台的唯一标识,不同的桌台可以通过该编号来区分。
该编号是个字增序号,从数字1开始。
例如1、2、3。
(2)食品类别编号
食品类别编号用于区分食品的不同类别,不同的食品种类可以通过该编号来区分。
该编号是个字增序号,从数字1开始.例如1、2、3。
(3)员工编号
员工编号用于区分各个员工的信息,不同的员工可以通过该编号来区分(即使员工名称相同)。
例如1、2、3.
1.3.4系统预览
餐饮管理系统由多个窗体组成,下面仅列出几个典型窗体,
主窗体模块如图1_2所示,主要功能是连接系统功能菜单、显示所有桌台和现实系统当前状态.
图1_2主窗体模块
点菜模块如图1_3所示,主要功能是为顾客点菜.
图1_3点/加菜模块
开台模块如图1_4所示,主要功能是实现对指定的桌台进行开台操作。
图1_4开台模块运行结果
结账模块如图1_5所示,主要功能是对指定的桌台进行结账操作,同时,清空结账桌台的所有消费信息。
图1_5结账模块运行结果
3.5业务流程图
餐饮管理系统的业务流程图如图1_6所示.
图1_6餐饮管理系统的业务流程图
1.4数据库设计
4。
1数据库概要说明
在本系统中,采用的是SQLServer2008数据库,用来存储商品信息、桌台信息、员工信息、操作员信息等。
这里将数据库命名为db_MrCy,其中包含了6张数据表,用于存储不同的信息,如图1_7所示。
图1_7数据库结构
1.4.2数据库概念设计
通过对数据库进行的需求分析、业务流程设计及系统功能结构的确定,规划出系统中使用的数据库实体对象及实体E-R图.
由于商品的种类很多,因此需要对商品进行分类,这样就可以对商品分门别类地进行存储,在查询时可以根据商品类别进行查询,商品信息实体E—R图如图1_8所示.在数据库中建立一个商品类型信息表,用于存储商品的所有类别信息,商品类别信息实体E-R图如图1_9所示。
图1_8商品信息实体E-R图
图1—9商品类别信息实体E—R图
当顾客进行消费时,顾客会根据自己的需求消费不同的商品,系统将顾客消费的所有信息存储到数据表中,以便顾客结账时查询,在数据库中建立一个顾客消费信息表用于存储顾客的消费记录。
顾客消费信息实体E—R图图如1_10所示.
1_10顾客消费信息实体E-R图
餐厅中会有多个桌台供顾客选择,每个桌台会有不同的信息。
例如,大厅01号桌被顾客使用,顾客人数为5人等,方便操作员对桌台的操作,在数据库中建立一个桌台信息表用于存储所有桌台的详细信息。
桌台信息实体E—R图如图1_11所示.
图6_11桌台信息实体E-R图
为了对系统进行不同的管理,需要为系统建立管理用户.这些用户通过登录模块登录系统,登录成功之后会根据不同的权限对不同的功能模块进行管理,在数据库中建立一个用户信息表,用于存储登录用户信息。
用户信息实体E—R图如图1_12所示.
图1_12用户信息实体E—R图
在餐饮行业中,餐厅服务员起着及其重要的作用,但是由于服务人员数众多,如果不进行相应的信息记录,可能管理起来会非常困难。
因此,需要对服务人员的详细信息进行记录。
在数据库中建立一个志愿信息表用于存储所有服务人员的信息.支援信息实体E-R图图如1_13所示。
图1_13职员信息实体E—R图
3数据库逻辑设计
根据设计好的E—R图在数据库中创建各表,系统数据库中各表的结构如下.
1.tb_Food(商品信息表)
tb_Food表用于保存所有商品信息,该表的结构如表1_4所示。
表1_4商品信息表
字段名称
数据类型
字段大小
说明
ID
int
1
系统编号
foodty
char
10
类别编号
foodnum
商品代号
foodname
varchar
50
商品名称
foodprice
decimal
9
商品价格
2.tb_FoodType(商品类别信息表)
tb_FoodType表用于保存商品类别信息,该表的结构如表1_5所示。
表1_5商品类别信息表
4
foodtype
商品类别名称
3.tb_GuestFood(顾客消费信息表)
tb_GuestFood表用于保存顾客的消费信息,该表结构如表1_6所示。
表1_6顾客消费信息表
foodsum
消费数量
foodallprice
waitername
操作员姓名
beizhu
备注
zhuotai
消费桌台
datatime
消费时间
4.tb_Room(桌台信息表)
tb_Room表用于保存所有桌台信息,该表结构如表1_7所示。
桌台简称
RommBJF
桌台包间费
RoomWZ
RoomSZT
RoomType
桌台类型
RoomBZ
桌台备注
RoomQT
桌台其他信息
GuestName
顾客姓名
zhangdanDate
开台时间
Num
顾客人数
WaiterName
5.tb_User(用户信息表)
tb_User表用于保存所有系统用户信息,该表结构如表1_8所示.
表1_8用户信息表
UseName
用户登录名
UserPwd
用户登录密码
power
用户权限
6.tb_Writer(职员信息表)
tb_Writer表用于保存所有职员信息,该表结构如表1_9所示。
表1_9职员信息表
职员姓名
CardNum
身份证号码
WaiterNum
职员编号
Sex
性别
Age
年龄
Tel
电话
5公共类设计
为了节省系统资源,实现代码重用,可以在系统中设计一些公共类。
本系统中创建了一个DBConn公共类,该类封装了用于连接数据库的方法。
由于此类对数据库进行操作,所以需要引入一个命名空间,其主要代码如下:
自定义方法CyCon用于连接数据库,此方法返回一个SqlConnection对象,主要代码如下:
6系统登录模块设计
6。
1系统登录模块概述
为了使系统的安全性得到保障,大多数系统都开发登录模块。
只有通过登录模块,才能对登录用户进行验证,只有系统的合法用户才可以进入系统的主界面。
登录模块运行结果如图1_14所示。
图1_14登录模块运行结果
1.6。
2系统登录模块技术分析
运行本系统的登录模块,用户只需要输入用户名和密码,单击“登录”按钮进行验证。
登录模块以登录的用户和密码作为搜索条件,在数据库中进行查询。
使用SqlDataReader对象的HasRows属性判断登录用户名和密码是否正确.下面介绍SqlDataReader对象的HasRows属性.
HasRows属性用于获取一个bool型的值,该值指示SqlDataReader是否包含一行或多行,语法如下:
publicoverrideboolHasRows{get;
}
属性值:
如果SqlDataReader包含一行或多行,则为true;
否则为false。
例如,验证登录用户名和密码是否正确,可以通过以下代码实现:
6.3系统登录模块实现过程
该模块需要使用的数据表示:
tb_User
系统登录模块的具体实现步骤如下:
(1)新建一个Windows窗体,命名为frmLogin.cs,主要用于实现系统的登录功能,该窗体用的主要主要空间表如表1—10所示。
表1_10登录窗体用到的主要控件
控件类型
控件ID
主要属性设置
用途
txtName
无
输入登录用户名
txtPwd
PasswordChar属性设置为*
输入登录用户密码
btnSubmit
Text属性设置为“登录”
登录
btnCancel
Text属性设置为“取消”
取消
(2)由于餐饮系统使用MicrosoftSQLServer2012作为后台数据库,因为先要引用命名空间,以便在程序操作数据库,关键代码如下:
单击“登录"
按钮之后,登录模块首先判断是否输入了用户名和密码,如果没有输入用户名和密码将弹出提示框,提示用户输入登录系统的用户名和密码;
如果输入了用户名和密码,系统将判断输入的用户名和密码是否正确,关键代码如下:
当用户输入用户名和密码之后,还可以按Enter键登录系统,实现的原理是:
在输入密码的文本框的KeyPress事件下,判断是否按了Enter键,如果按了Enter键就会激发“登录”按钮的Click事件,关键代码如下:
单击“取消”按钮,退出系统登录,关键代码如下:
7开台模块设计
1.7.1开台模块概述
当顾客要进行消费时,首先要看一下是否还有可用的桌台,如果还有空闲的桌台,那么就要为顾客开台,只有在开台之后,才能为顾客点菜、查询和结账。
所以开台模块在整个系统中是非常重要的.
开台模块用于对指定的桌台进行开台操作,此功能是通过“开台”窗体实现的,如图1_15所示。
图1_15开台单窗体
1.7.2开台模块技术分析
在某个桌台上选择其中右键菜单中的“开台”命令,将根据该桌台的名称弹出相应的开台单窗体,在开台单窗体中用户可以对桌台编号、帐单日期、顾客名称、用餐人数、服务员和备注进行录入或更改。
数据录入或修改完毕后,单击“保存”按钮完成开台单的操作。
在开发此模块时,主要用到了数据库的更新技术,例如,将姓名为小吕的年龄修改为28,可以使用下面的代码实现:
Updatetb_lssetage=28wherename='
小吕’
7。
3开台模块实现过程
本模块使用的数据表示:
tb_Room、tb_Waiter
(1)新建一个Windows窗体,命名为frmOpen.cs,主要用于实现对指定的桌台进行开台操作的功能,该窗体用到的主要控件如表1_12所示。
表1_12开台单窗体中用到的主要控件
Text属性设置为Guest
输入顾客姓名
txtNum
输入用餐人数
txtBZ
输入开台单备注
cbNum
选择开台的桌台号
cbWaiter
选择开单的服务员
groupBox1
控制布局
dateTimePicker1
选择日期
btnSave
Text属性设置为“保存”
保存
btnExit
Text属性设置为“退出”
退出
(2)首先建立两个公共变量一边程序汇总调用,关键代码如下:
在窗体加载时,将数据库中所有的桌台信息和职员信息检索出来显示在ComboBox控件中,关键代码如下:
(3)在“用餐人数"
文本框中输入用餐人数,此数据必须保证为大于0的数字,关键代码如下:
(4)当数据输入完毕之后,单击“保存”按钮即可对指定的桌台进行开台操作,关键代码如下:
8点/加菜模块设计
8。
1点/加菜模块概述
为顾客选好桌台,并且开台之后,会根据顾客的需要点菜或购买茶水研究之类的消费品,在点/加菜模块中会显示餐厅特有的一些菜系,用户可以对不同的菜系进行选择.点/加菜模块运行结果如图1_16所示.
图1_16点/加菜模块运行结果
1.8。
2点/加菜模块技术分析
系统点/加菜模块主要利用TreeView控件显示所有的菜系,利用DataGridView控件显示顾客消费的所有信息,当单击某个菜系时,右侧将出现此菜系的所有详细信息,选择菜系后单击“保存"
按钮完成对指定桌台的点菜操作.
3点/加菜模块实现过程
本模块使用的数据表:
tb_Food、tb_Waiter、tb_Room、tb_GuestFood
点/加菜模块的具体实现步骤如下:
(1)新建一个Windows窗体,命名为frmDC。
cs,主要用于实现系统的点菜功能,该窗体用到的主要控件如表1_14所示。
表1_14点/加菜窗体中用到的主要控件
tvFood
显示餐厅所有菜系
Enabled属性设置为false
显示某个菜系的编号
显示某个菜系的名称
txtPrice
显示某个菜系的单价
txtPNum
Text属性设置为1
输入某个菜系的数量
txtAllPrice
显示点菜后的总价格
txtRemark
输入备注信息
选择职员
Text属性设置为“保存"
btnDelete
Text属性设置为“删除”
删除
dgvFoods
Columns属性中添加7列
用于显示已经点过的菜系的信息
(2)首先建立一个公共变量RName,用于接收指定桌台的名称,关键代码如下:
在窗体加载时,程序首先从数据库中检索出所有菜系名称并显示在TreeView控件中,以便用户选择,关键代码如下:
当用户双击某个菜系使,将在右侧显示该菜系的详细信息,以便用户能够准确选择,关键代码如下:
为了保证消费商品数量文本框中的数据必须为数字,在文本框的KeyPresss事件中添加代码控件输入数据的类型,关键代码如下:
为了保证消费商品的数量时,该商品的总价格会随之改变,实现的方法是在TextBox控件的TextChanged事件中添加代码,关键代码如下:
自定义一个GetData方法,用于显示所有的点菜信息,关键代码如下:
当点菜完毕后,单击“保存"
按钮可以对顾客消费的菜系进行保存,以便在结账时对消费金额进行查询,关键代码如下:
如果顾客点菜之后想退掉某个菜,就可以在显示所有消费信息的dataGridView1控件中欲删除的商品,单击“删除”按钮,即可将菜退掉,关键代码如下:
9结账模块设计
9。
1结账模块概述
顾客消费完毕后,需要对顾客消费清单进行统计,即计算出消费的总额,这些都是通过结账模块实现额。
结账模块主要功能是当顾客每次消费时将顾客消费的项目添加到数据库中,在用户结账时通过对数据库的查询,检索出顾客本次消费的商品名称及价格,然后计算出总额,如图1_19所示。
图1_19顾客结账
如果输入的金额小于消费的金额,单击“结账"
按钮结账,将弹出“金额不足"
的提示信息,如图1_20所示;
如果在“收银"
文本框中输入了错误的数据,将弹出图1_21所示的提示信息。
图1_20金额不足提示信息
图1_21提示输入的数据必须为数字
2结账模块技术分析
本系统的结账模块,首先从数据库中将顾客消费的所有项目检索出来显示到DataGridView控件上,以方便管理员校对消费金额,然后通过程序计算后将顾客消费的总额显示出来,当顾客结账时,输入顾客支付的金额,会出现相应的余额,以方便管理员为顾客退还余额.
在开发此模块式,主要用到SUM聚合函数以桌台名称为搜索条件,查询出消费的总额。
SUM聚合函数用于返回表达式中所有值得和,或只返回DISTINCT值。
SUM只能用于数字列。
空值将被忽略。
语法如下:
SUM([ALL|DISTINCT]expression)
●ALL:
对所有的值进行聚合函数运算,ALL是默认设置.
●DISTINCT:
指定SUM返回唯一值的和。
●EXPRESS:
是常量、列火函数,或者是算术、按位与字符串等运算符的任意组合。
Express是精确数字或近似数字数据类型分类(bit数据类型除外)的表达式,不允许使用聚合函数和子查询。
3结账模块实现过程
本模块使用的数据表:
tb_GuestFood、tb_Room。
结账模块的具体实现步骤如下:
(1)新建一个Windows窗体,命名为frmJZ。
cs,主要用于实现对指定的桌台进行结账操作的功能,该窗体用到的主要控件如表1_15所示。
略
(2)引用建立两个公共变量,分别用于接收住窗体模块中传递的桌台名称及根据名称查询消费的总额,关键代码如下:
当窗体加载时,首先显示结账的桌台名称,然后通过桌台名称检索出消费的所有账目显示到DataGridView控件上,最后将查询出消费的总金额显示到Label控件上,关键代码如下:
在输入顾客支付金额文本框的KeyPress事件下面添加代码,判断文本框中是否输入了正确的数据,关键代码如下:
当管理员在“收银"
文本框中输入顾客支付的金额后,系统将自动计算出退还顾客的金额,管家代码如下:
当顾客支付了消费金额后,单击“结账”按钮完成对顾客