基于C#的餐厅点餐系统的设计与实现

摘 要
在深入研究中小餐饮企业工作流程的基础上,分析制约餐饮企业工作效率的各种因素,发现影响效率的主要因素是普遍使用手工登记菜谱的现象,本系统运用计算机系统来实现餐饮企业工作流的信息化管理,采用面向对象的开发方法以及C#语言,依靠Visual studio2010作为开发工具,使用Sql Server 2005网络数据库存储数据。实现了客户点餐、厨师配餐、收银管理、系统设置四大功能,解决餐饮企业中客户点餐速度慢、服务员登记不清晰、厨师配餐漏配、菜谱更新不及时且不直观、会员管理混乱的现象。

关键词:餐厅点餐;面向对象开发方法;C#

目 录
摘 要 I
第一章 绪论 1
1.1 现实背景和理论背景 1
1.2 研究目的和意义 2
1.2.1 目的 2
1.2.2意义 3
第二章 系统需求分析 4
1.引言 4
1.1编写目的 4
1.2项目背景 4
2.术语定义 5
3.参考资料 5
4.目前餐饮企业工作流程 5
5.所建议系统的工作流程 6
6.产品功能 7
7.软件需求描述 7
8.系统用例图 8
9.软件接口 9
第三章 系统设计 10
1.系统部署图设计 10
2.数据库设计 11
2.1命名规范 11
2.2安全设计 11
2.3概念设计 11
2.4物理设计 13
2.5函数设计 15
3.系统模块设计 16
4.系统架构设计 17
5.客户端系统目录结构 17
6.系统类图设计 18
7.主要模块设计 22
7.1登录模块设计 22
7.2点餐模块设计 24
第四章 系统实现 27
1:系统编码规范 27
1.1:类型的命名 27
1.2、方法和属性的命名 28
1.3、变量和常数 28
1.4、标签 29
1.5、名字空间 29
1.6、注释 30
2:模块功能实现 30
2.1登录模块实现 30
2.2点餐模块主要代码 31
2.3收银模块代码实现 33
2.4配餐模块代码实现 35
2.5.系统管理模块实现 35
第五章 系统测试 37
1 简介 37
1.1编写目的 37
1.2项目背景 37
1.3系统简介 37
1.4术语和缩写词 38
1.5参考资料 38
2 测试概要 38
2.1测试用例设计 38
2.2测试环境与配置 38
2.3测试方法(和工具) 39
3 测试结果及缺陷分析 39
3.1测试执行情况与记录 39
结论 45
文献 46
致 谢 49

第一章 绪论
1.1 现实背景和理论背景
1.1.1现实背景
我国的餐饮市场经过30多年的改革开放及发展,可以说我国正迎来一个餐饮业大发展的时期,市场潜在力量巨大,远景很是广阔。根据中国烹饪协会发布的2009年度餐饮业发展报告显示,即便在经济遭受重创的2009年,全社会餐饮业零售额达依然到17998亿元,同比增长16.8%。其中,每月的零售额均超过1300亿元,增长率稳定在14.4%至21.6%。在各类消费性支出中增幅居前,仅次于交通和通信支出。并且预计2012年餐饮市场还将继续增长,营业额也将达到20000亿元。
与此同时,我国餐饮业发展的质量和内涵也发生了重大变化。行业的经营领域和市场空间不断拓宽,经营档次和企业管理水平不断提高,经营业态日趋丰富,投资主体和消费需求多元化特点更加突出,网点数量和人员队伍继续扩大;餐饮市场更加繁荣,消费的个性化和特色化的趋势明显,追求健康营养和连锁规模发展成为主题。集团化、品牌化、产业化和国际化的发展步伐加快,餐饮现代化的进程不断推进。
近几年来,中国餐饮业的发展一直保持强劲快速增长同时,也看到目前餐饮行业普遍存在的问题。餐饮企业的发展一直处于自我摸索、自我运作、自我积累和自我完善为主的状态,利润低、承载重、支撑小、发展难的特点突出。餐饮企业在产品标准化技术设备开发、连锁管理体系的建立、专业人才的培养、吸纳资本投入、理论指导和信息交流等方面的条件十分不足,存在着技术开发与设备配套难、管理与人才难、配送渠道与发展资金难、沟通交流与合作难等深层次因素的制约,行业平台和基础支持力量不强,对企业发展产生较大的影响。

1.2 研究目的和意义
1.2.1 目的
在我们这个“食文化”高度发达的国度里,餐饮业毋庸置疑地成为第一大传统产业。然而,正是这历史悠久、规模庞大的产业,却也是信息化程度最慢和最低的产业之一。至今为止,绝大多数餐饮企业的经营方式仍然停留在“一张纸、一支笔、经理喊破嗓、员工跑断腿”的境地;而会计工作,也仍然是以一支笔或一个算盘,或最好的情况下一个计算器进行加减乘除,其本质仍然是以人脑计算为基础,不但工作量巨大,而且极易出错。笔者曾经见过生意极好的大排档,服务员进进出出地飞奔于户外桌台、大堂吧台和厨房之间,而经理则用计算器算得满头大汗的场景,蔚为壮观。且不说这种日复一日的重复、单调的劳动意义何在,单就消费计算方面的出错而引发的与客户之间的矛盾纠纷,就不可胜计。
其实在人类文明已经进入电子信息的时代,绝大多数重复、单调、可程式化的工作都已经可以交由计算机来完成。面对复杂和庞大的计算任务,计算机在效率和准确度方面是人脑所不能望其项背的。作为传统产业的餐饮业,同其他很多传统产业一样,同样可以引入信息化改造。
餐饮业的信息化改造内容,主要有:由传统的笔和纸点餐,改用电子点餐;由传统的人工计算、统计、管理,改用电脑进行计算、统计和管理;将现代的电子技术、无线技术、计算机技术和网络技术引入到餐饮行业中来,替代部分人工操作,加快餐饮企业的运转效率,提升餐饮企业的管理水平,使餐饮企业运作更规范、更科学、更高效。
在餐饮企业的信息化改造当中,无线点餐(点菜)系统,成为其核心内容,也是餐饮企业进行信息化改造的必由之路。
因此本论文研究的目的在于通过餐饮企业的信息化改造暨利用无线技术,替代传统的纸和笔进行电子点餐(点菜)操作,实现远距离地进行信息即时传递。当然,无线点餐(点菜)系统不只是可以进行点餐操作,同时通过配套的餐饮管理软件,还可以实现强大的统计和管理功能,使餐饮企业真正实现信息化。
1.2.2意义
能够有效地的提升 餐饮企业的档次和管理水平,做到科学管理、科学决策、高效运转、降低成本,进行信息化是必由之路。而采用无线点餐(点菜)系统取代传统的手工点餐,采用餐饮管理软件取代传统的人工统计和粗放型管理又是信息化当中的核心内容。
餐饮企业引进一套无线点餐(点菜)系统,成本大约在一万元左右(视配置情况而不同),大约相当于一个服务员一年的工资,但带来的便利性和管理水平的升级则是无与伦比的。无线点餐(点菜)系统所带来的运营效率的大幅度提高和人力成本的节约,远超其投资成本,对于餐饮企业信息化,可以说是不二的选择。

第二章 系统需求分析
2.1引言
2.1.1编写目的
本文档是餐厅点餐系统的项目需求说明书,对餐厅点餐系统的进行简要回顾,分析当前的业务流程,总结此类管理系统的基本特点以及总体功能,尽可能完整的概括和提取出全部需求。本文档对项目开发人员、设计人员及系统实施人员具有很重要的指导意义。
2.1.2项目背景
中国是举世闻名的美食大国,拥有五千年的饮食文化和巨大的餐饮市场,随着人民生活水平和生活方式的转变,餐饮业具有巨大的投资市场,被称为中国的黄金产业,但同样也应看到,餐饮业不仅面临着巨大的发展机遇,也面临着前所未有的挑战和考验。
餐饮业的不断发展,在经营管理上也逐步向电子化迈进,通过电脑信息系统管理餐饮业的内部事务,使得作业更加简单化、高效。以财务为中心,减轻一线操作人员的劳动强度,节省营业人员的交班时间,加强财务审核管理。提供多种点菜、结算、统计报表功能,提供分厨房直接打印前台点菜数据。在餐饮经营中,传统的纸制作业流程无法满足现代客户在信息娱乐及服务安保等方面的要求。而此系统的使用,使餐厅管理者便捷的进行经营娱乐的管理,大大增加的各店成本控制及销售额
2.2术语定义
所谓”翻台率【1】”是指在某期间里,指餐桌座位坐满及餐桌空荡的速度。 一个高翻台率意味更多用餐者吃了并且走了,而一个低的翻台率意味同样用餐者是在一段长时间里使用餐桌,或者餐桌座位是空的。
2.3目前餐饮企业工作流程
目前的中小餐饮企业采用最多的手工记账形式,其业务流程如图2.1所示

图2.1 手工业务流程分析
流程图简介:顾客到达餐厅有引领员引导到座位后,承上菜谱并登记客人所点食品,完毕后唱菜谱并由客人确认,征得客人同意后交给后台厨师及配餐人员,配餐人员根据大厅服务员提交的菜谱为客人配齐所有饮料、酒水、甜点等食物,厨师根据大厅服务员提供的菜谱按照先凉后热的顺序快速加工出美味可口的食物交友送餐人员及时送到指定的餐桌。客人用餐完毕后有服务员或者客户到收银处办理结算手续,客人如有会员卡的话,收银员应给予相应的优惠,结算完毕后有引领员送客人出餐厅,这样的工作方式当客流量增加的时候,必然会出现争抢菜谱,上错菜,漏上菜、忘记上菜以及计算失误等现象,轻则引起客户的不满,重则引起纠纷,因此有必要采用新的工作模式,来避免上述情况的发生。
2.5所建议系统的工作流程
基于传统餐饮企业手工操作所带来的种种弊端,一种新的利用计算机来管理信息的系统—餐厅点餐系统也就应运而生,那么该系统的工作流程如图2.2所示

图2.2自动化的点餐系统
2.6系统功能模块
根据所建议系统的业务流程图,分析出新系统的功能模块图如2.3所示

图2.3功能模块图
结合上述功能模块图,系统需求描述如下:
2.7软件需求分析
1.用户登陆
系统必须提供用户名及密码、角色的验证功能,并且根据不同的角色打开不同的子系统。
2.客户点餐
客户根据不同的服务类别(特价、凉菜、热菜、汤、酒水、饮料)选择不同的食物及数量,系统根据不同的食物计算出总价格,方便客人控制总价格,如果输入错误系统提供删除的功能。.
3.配餐管理
厨师根据最新的配餐信息,按照时间先后顺序配置食品,完成后提交给结算管理子系统中
4.结算管理
系统根据桌号自动计算出总价格,如果由会员卡系统自动验证卡号及会员身份并计算出相应的折扣及实付金额。
5.系统管理
系统提供上传菜谱图片、修改菜谱价格、注册用户、删除用户、会员注册、会员管理以及浏览客户留言、客户满意度统计功能
2.8系统用例图
系统用例【9】图是按照场景的形式对系统的功能做清晰地设计,具体用例有:登陆用例图2.4所示,点餐用例图2.5所示,配餐用例图2.6所示,结账用例图2.7所示,管理用例图2.8所示

图2.4登陆用例

图2.5点餐用例

扫描二维码关注公众号,回复: 15578988 查看本文章

图2.6配餐用例

图2.7结算用例

图2.8系统设置用例

2.9软件接口
Windows操作系统所提供的各种API【10】;
第三章 系统设计
3.1系统部署图设计
系统部署图是指系统的物理结构和软件结构在空间上的部署,本系统采用流行的C/S【11】结构,该结构是基于客户端与服务器的结构,原因是本系统的应用场景是中小规模的餐厅及餐馆,目前一期工程中不提供Web服务,仅限于企业内部办公室用,因此采用C/S结构是科学的也是合理的。具体结构见图3.1所示
图3.1系统部署图
上图中服务器是整个系统运行的基础,负责所有客户端的数据传输与存储,采用SqlServer2005服务器,网络传输采用的是WiFi(802.11)技术,客户端采用IPAD作为终端显示,但是目前需要安装虚拟Win7系统
3.2数据库设计
3.2.1命名规范
1:数据库名称以db开头
2:函数以F_开头
3:数据库表以T_开头
3.2.2安全设计
1:创建数据库登录账号dining
2:创建数据库db_dining的所有者用户Dining
3:配置账号映射:dining-dining
3.2.3概念设计
经过对系统的需求分析,发现系统中有以下实体:如图3.2—3.8所示以及他们之间的关系图3.9所示

图3.2用户实体-属性

图3.3意见实体-属性

图3.4会员实体-属性

图3.5餐单实体-属性

图3.6餐单明细实体-属性

图3.7菜谱实体-属性

图3.8实体-关系图
3.2.4物理设计
物理设计是数据库实体的物理实现,下面的图表分别对应概念设计中的每个实体。
1:T_CAIPU表,图3.9所示

图3.9菜谱表
2:T_CanMingXi,图3.10所示

图3.10餐单明细表
3:T_CanDan,图3.11所示

图3.11餐单表
4:T_Member,图3.12所示

图3.12会员表
5:T_User,图3.13所示

图3.13用户表
6:T_YiJian,图3.14所示

图3.14意见表
3.2.5函数设计
1: F_CaiJinEById,图3.15所示

图3.15计算价格函数
2: F_CaiMingById,图3.16所示

图3.16查找菜名函数
3: F_MemberLeavlByID,图3.17所示

图3.17会员级别函数
4: F_MemberNameByID,图3.18所示

图3.18会员名称函数
3.3系统模块设计
在对系统需求分析的基础上一共设计了八大模块,分别是如下8个模块【11】。3.3.1系统登录模块
在该模块中主要实现用户身份的验证以及角色的检查,根据用户身份的不同分别登陆到不同的子系统中。
3.3.2系统点餐模块
本模块是系统的主要模块,在该模块中主要实现菜肴以及酒水饮料的点餐等功能,根据食品的分类把界面分为特价、凉菜、热菜、汤类、酒水、饮料不同的区域以及点菜区域。
3.3.3系统配餐模块
本模块面向的对象主要是厨师以及酒水饮料配餐员,实现的功能是按照下餐的时间先后顺序显示订餐列表,厨师按照餐单的详细列表配置不同的食品及其他。每个餐单完成后系统提交到收银区。
3.3.4系统收银模块
本模块面向的对象主要是收银人员,实现的功能是分别显示配餐完毕后的餐单,客户就餐后提供桌号以及会员卡,系统自动计算出优惠金额以及实付金额,收款后系统自动更新数据库。
3.3.5系统管理模块
本模块面向的对象主要是经理管理人员,实现的功能是有会员管理,菜谱管理、用户管理功能
3.3.4系统架构设计
本系统采用流行的C/S结构,既客户端/服务器端结构,客户端是基于.Net FrameWork平台的应用程序,服务器端是基于Sql Server 2005的数据库存储应用系统,采用面向对象【12】的开发语言C#【13】作为编程语言,使用Visual studio 2010作为开发工具以及应用流行的软件开发模型—瀑布模型【14】
3.5客户端系统目录结构
客户端目录结构按照模块的不同创建不同的文件目录,以便于文件的管理及今后的二次开发,截图如3.19所示

图3.19系统目录
目录结构描述:1:DianCan:客户点餐模块2:PeiCan:食品配餐模块3:JieZhang:收银结账模块4:Manage:系统管理模块5:Images:系统图片
3.6系统类图设计
根据系统中的实体,一共设计6个类,具体见下图3.20所示

图3.20系统类结构图
详细描述如下:
1.T_CaiPu菜谱类,该类中的属性及方法结构如3.21所示

图3.21菜谱类
T_CaiPu类是用来描述系统中的菜谱实体,其中的属性有id(菜谱编号)、c_name(菜谱名称)、c_Price(菜价)、c_type(类别)、c_image(照片)、is_Tejia(是否特价)、isEnable(是否启用)
2.T_User用户类,属性及方法如图3.22所示

图3.22用户类
T_user类用来描述系统使用者实体,其中的属性有id(记录编号)、userName(用户名)、userPwd(用户密码)、userRole(用户角色)、isEnable(是否启用)
3.T_YiJian(意见类):该类的属性及方法如图3.23所示

图3.23意见类
T_YiJian类是用来描述客户意见的实体,其中的属性有id(意见编号)、HJ_YJ(环境意见)、FW_YJ(服务意见)、FC_YJ(饭菜意见)、KH_LY(客户留言)
4.T_Member(会员类):该类的属性及方法如图3.24

图3.24会员类
T_Member类是用来描述客户级别的实体,其中的属性有id(会员编号)、member_Name(会员名称)、type_id(会员级别编号)、isEnable(是否启用)
5.T_CanDan(餐单类):该类的属性及方法如图3.25

图3.25餐单类
T_CanDan类是用来描述客户菜单的实体类,其中的属性有id(菜单编号)、desk_HM(桌位号)、xf_je(消费金额)、member_id(会员编号)、isJieZhang(是否结账)、xf_date(消费日期)、state(配餐状态)
6.T_Can_MingXi(餐单明细)类:该类的属性及方法如图3.26所示

图3.26餐单明细类
T_Can_MingXi类是用来描述菜单明细的实体,其中的属性有id(记录编号)、can_id(菜单编号)、cai_id(菜谱编号)、cai_SL(份数)、cai_JE(每类菜的金额)
3.7主要模块设计
3.7.1登录模块设计
登陆模块的功能就是验证用户名及密码是否有效,如果有效则再判断角色编号值(1:服务员角色2:厨师角色3:收银员角色4:管理员角色),根据不同的角色打开不同的窗口,该模块实现的前置条件是设置正确的服务器地址以及服务器处于启动状态,输入输出数据如表3.27所示
数据 数据输出类型 数据类型 约束
用户名 输入 字符串类型 4-10位的字母组成
密码 输入 字符串类型 4-6位的数字组成

表3.27登陆模块输入输出数据
具体实现代码如下所示:
//用户名
string un = this.txt_UserName.Text.Trim();
//密码
string pwd = this.txt_UserPwd.Text.Trim();

//判断用户名及密码是否为空
if (address == “” || un == “” || pwd == “”)
MessageBox.Show(“用户名、密码、地址不能为空”);
else
{
//判断用户名是否是字母及长度在4–10位
if (!Regex.IsMatch(un, “[a-zA-Z]{4,10}”))
{
MessageBox.Show(“不是字母或者长度不够”);
return;
}
else if (!Regex.IsMatch(un, “[0-9]{4,6}”))
{
MessageBox.Show(“请输入4-6位的数字”);
return;
}
dc = Program.GetDc(address);
//返回数据库中的最新更新
// dc = Program.ChangeDc(dc.T_user);
IQueryable<T_user> t_user = dc.T_user.
Where(u => u.userName == un && u.userPwd == pwd);
if (t_user!=null&&t_user.Count()==1)
{
this.Hide();
if (t_user.First().userRole == 1)
{//打开点餐窗口
MainMenu mm = new MainMenu();
mm.Show();
}
else if (t_user.First().userRole == 4)
{
//打开管理员
Manage.FrmManage frmManage = new Manage.FrmManage();
frmManage.Show();
}
else if (t_user.First().userRole == 2)
{
//打开厨师窗口
PeiCan.FrmZuoCai frmZuoCai = new PeiCan.FrmZuoCai();
frmZuoCai.Show();
}
else if (t_user.First().userRole ==3)
{
//打开结算窗口
Jiezhang.FrmJieZhang frm_JieZhang = new Jiezhang.FrmJieZhang();
frm_JieZhang.Show();
}
}
else
MessageBox.Show(“登录失败”);
3.7.2点餐模块设计
点餐模块是系统中重要的模块,主要实现客户餐单的创建以及所点菜品的保存,该模块的实现思路是首先系统分类显示今日特价、凉菜、热菜、汤类、酒水、饮料,客人按照所需登记桌位,选择菜品及分数(默认1份),系统自动计算总金额,如果有误客人则可以删除某类菜品,最后点击提交保存到数据库。那么该模块实现的前提条件是用户以服务员身份登录到系统,且数据库中有相应的菜品信息以及一定数量的桌位。此模块的输入输出数据如表3.28所示
数据 数据输出类型 数据类型 约束
菜名 输出 字符串类型 长度小于50
价格 输出 字符串类型 长度小于50
图片 输出 二进制类型
桌号 输入 字符串类型 长度小于50
菜名编号 输入 数字
份数 输入 数字
表3.28点餐模块输入输出数据
具体实现代码:
///
/// 系统显示菜谱
///
///
///
private void MainMenu_Load(object sender, EventArgs e)
{
dc = Program.dc;
cur_z = new Cursor(“images/图标/z.cur”);
cur_y = new Cursor(“images/图标/you1.cur”);
tj_list = new List();
lc_list = new List();
rc_list = new List();
t_list = new List();
js_list = new List();
yl_list = new List();
LoadImage(-1, true);
//默认显示特价
if(tj_list.Count!=0)
this.panelEx4.Style.BackgroundImage = tj_list[tj_index];
//加载桌位号
LoadDesk();
}
///
/// 修改菜谱
///
///
///
private void dgv_CanMingXi_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (dgv_CanMingXi.Columns[e.ColumnIndex].Name == “del”)
{
//获得菜谱ID
cai_id = this.dgv_CanMingXi.Rows[e.RowIndex].Cells[“caiid”].Value.ToString();
var mx = canDan.T_Can_MingXi.ElementAt(e.RowIndex);
canDan.xf_je -= mx.cai_JE;
canDan.T_Can_MingXi.RemoveAt(e.RowIndex);
//重新绑定控件
this.lbl_HJ.Text = “合计:” + canDan.xf_je + “元”;
BindingList<T_Can_MingXi> canList = new BindingList<T_Can_MingXi>(canDan.T_Can_MingXi.ToList());
this.dgv_CanMingXi.DataSource = canList;
}
}

第四章 系统实现
4.1系统编码规范
系统编码实现采用目前流行的面向对象的编程语言—C#,因此为了今后的系统扩展及测试维护,所以按照微软统一发布的C#编码规范,具体内容如下:
4.1.1类型的命名
1.类名,以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如:Class Indicator当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾:Class ColorSetException Class CauseExceptionAttribute 当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如 Class ScreenClass Class SystemClass。当类只用于作为其他类的基类,根据情况,以Base结尾:MustInherit Class IndicatorBase,如果定义的类是一个窗体,那么名字的后面必须加后缀Form,如果是Web窗体,必须加后缀Page:Class PrintForm : Inherits Form '* Windows窗体Class StartPage : Inherits Page '* Web窗体
2.枚举和结构:同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如:Enum ColorButtons '以复数结尾,表明这是一个枚举Structure CustomerInfoRecord '以Record结尾,表明这是一个结构体
3.委派类型:普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能:Delegate Sub DataSeeker (ByVal SeekString As String),用于事件处理的委派类型,必须以EventHandler结尾,如:Delegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs)
4.接口:与其他类型不同,接口必须要由I作为前缀,并用形容词命名,突出表现实现接口的类将具有什么能力:Interface ISortable
5.模块:模块不是类型,他的名称除了必须以名词命名外,必须加以后缀Module:Module SharedFunctionsModule,上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。
4.1.2方法和属性的命名
1.方法:无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。Sub Open(ByVal CommandString As String),Function SetCopyNumber(ByVal CopyNumber As Integer),参数需要指明ByVal还是ByRef,这一点写起来会让程序边长,但非常必要。如果没有特别情况,都使用ByVal。参数的命名方法,参考后面“变量的命名方法”。需要重载的方法,一般不写Overloads,根据需要编写重载的方法。
2.属性:原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名:Property Concentration As Single,Property Customer As CustomerTypes
3.事件:事件是特殊的属性,只能在事件处理上下文中使用。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间:Event Click As ClickEventHandler,Event ColorChanged As ColorChangedEventHangler
4.1.3变量和常数
常数以表明常数意义的名词命名,一般不区分常数的类型:Const DefaultConcentration As Single = 0.01,在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例子:
Dim Index As Integer
Dim NextMonthExpenditure As Decimal
Dim CustomerName As String
不能起太长的名字,应该尽量简洁,如下面的例子:
Dim VariableUsedToStoreSystemInformation As String '* 错误,太复杂了
Dim SystemInformation As String '* 正确,简单明了
Dim sysInfo As String '* 错误,过于简单
特殊情况可以考虑一个字母的变量:
Dim g As Graphic
对于控件,应该指明控件的类型,方法是直接在变量后面加以类名:
Friend WithEvents NextPageButton As Button '* 按钮
Friend WithEvents ColorChoicerPanel As Panel '* 面版
Friend WithEvents CardFileOpenDialog As FileOpenDialog '* 文件打开对话框
等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码:
btnCancel.Text = “&Cancel”
CancelButton.Text = “&Cancel”
显然后者更能使阅读者明白变量的类型是一个按钮。
4.1.4标签
标签就是用于Goto跳转的代码标识,由于Goto并不推荐使用,所以标签的使用也比较苛刻。标签必须全部大写,中间的空格用下划线_代替,而且应该以_开头,比如:_A_LABEL_EXAMPLE:如此定义标签是为了与其他代码元素充分区别。
4.1.5名字空间
通常,一个工程使用一个名字空间,通常不需要用Namespace语句,而是在工程选项的“Root Namespace”中指定,使用根名字空间可以使代码更加整齐,容易修改,这一点是VB十足的优点。名字空间的语法是:公司名.产品名[.组件名的复数]
如:Namespace Ninputer.VirtualScreen
Namespace Ninputer.CardEditor.CustomeControls
随便起一个名字空间的名字绝对不是一个好主意,一定要遵守上述规定。
4.1.6注释
注释的规则繁多,这里仅提到其中一点:正常的注释以’开头,单独的’只用来注释暂时不用的代码
这是普通的注释
'* 这段代码在调试正确后加入
'If UseHighSpeed(g) = True Then …
这样能够方便的采用代码注释工具控制代码的使用。
4.2模块功能实现
4.2.1登录模块实现
登陆功能根据用户输入的用户名及密码与数据库中的信息进行比对,如果验证成功,则根据角色的不同进入不同的子系统,系统角色按照职位的不同划分为服务员、厨师、收银员、经理四个固定角色,每个角色的权限不同功能不一样。系统实现截图如4.1、4.2所示

图4.1用户名密码为空验证截图

图4.2验证密码位数截图
4.2.2点餐模块主要代码
点餐模块代码实现的思路是首先客人浏览菜谱选择不同的食品,系统先把该食品放入到购物车中,客户可以对放入购物车中的食品删除,不能重复点同一类的食品,对放入购物车中的食品系统自动计算出总价格,待确认无误后统一提交到数据库,系统实现截图如4.3—4.6所示

图4.3查询空桌位

图4.4热菜截图

图4.5酒水截图

图4.6菜单截图
4.2.3收银模块代码实现
收银模块实现的思路是根据会员编号系统自动计算出优惠金额及实付金额。具体代码如下。
double yh=0;
//获得会员编号
mid = this.txt_Member_id.Text.Trim();
if (xf_je == null || xf_je == “”)
{
MessageBox.Show(“请选择餐单”);
}
else if ( mid== “”)
{
MessageBox.Show(“请输入会员编号”);
}
else
{
//验证会员信息
if (dc.T_Member.Count(m => m.id.ToString() == mid) == 0)
{
MessageBox.Show(“无此会员”);
}
else
{
//显示会员信息
this.lbl_Member_Info.Text =“会员信息:”+ dc.F_MemberNameByID(Convert.ToInt32(mid)) + “:” + dc.F_MemberLeavlNameByID(Convert.ToInt32(mid)) +
“–” + dc.F_MemberLeavlByID(Convert.ToInt32(mid)) + “级”;
//计算优惠
yh= Convert.ToInt32(xf_je) * (10 - dc.F_MemberLeavlByID(Convert.ToInt32(mid)).Value) * 0.1d;
this.txt_YH.Text = String.Format(“{0:C2}”,yh);
//计算实付金额
this.txt_SF.Text = String.Format(“{0:C2}”, Convert.ToDouble(xf_je) - yh);
isMember = true;//是会员
}
}
系统实现截图如4.7所示

图4.7客户结账截图
4.2.4配餐模块代码实现
配餐模块功能实现的思路主要是显示最新的餐单,并且显示出该餐单的详细内容,厨师或者配餐员配餐完毕后,系统修改惨淡的状态,并及时更新最新的餐单.
4.2.5.系统管理模块实现
系统管理模块主要实现菜谱、用户、桌位、留言、会员的添加、编辑、删除、查询功能,具体如图4.8-4.10所示

图4.8系统管理截图

图4.9编辑菜谱截图

图4.10桌位管理截图

第五章 系统测试
5.1 测试目的
通过科学的方法尽可能多的发现系统中的缺陷,主要测试系统功能是否与需求说明书规定的功能性需求与肺功能性需求相符,系统功能是否实现,系统是否捕获异常数据并正确输出数据。
5.2 测试方法
本次测试用例设计主要采用黑盒测试【15】方法,功能模块及集成测试采用的具体方法有等价类划分【16】、边界值划分、正交分解、因果图分析和错误猜测【17】。在系统测试时依据业务流程采用回归测试【18】。
5.3测试环境
1.服务器地址:172.16.1.4
2.操作系统:Windows VISTA
3.CPU: Intel® Pentium®4 CPU 3.00HZ
4.硬盘可用空间:160GB
5.数据库:Microsoft SQL Server 2005
6.测试对象:FengShaDuMIS.exe

5.4 测试结果
系统经过大量的黑盒测试,在功能及性能上达到设计要求,下面是测试后的系统截图。
1.登录模块测试测试情况如图5.1所示

图5.1登陆测试截图
2.点餐模块此时情况如图5.2、5.3所示

图5.2点餐主界面截图

图5.3点菜测试截图
3.配餐模块测试情况如图5.4所示

图5.4厨师配餐测试截图
4.收银模块测试图5.5所示

图5.5收银模块测试截图
5.系统管理模块测试图5.6—5.8所示

图5.6菜谱管理测试图

图5.7会员管理测试图

图5.8用户管理测试截图
6.留言管理测试图5.9—5.10所示

图5.9客户留言测试截图

图5.10留言统计截图

结论
本文从瀑布模型开发过程的原理出发,在分析餐饮系统工作流程的基础上,讨论并建立了餐厅点餐系统的工作流模型,采用C#4.0+DotNet Bar7.0+Ling+Sql Server 2005实现了餐厅点餐信息管理系统,运用黑盒测试原理对该系统进行的单元测试及集成测试表明。该系统实现了:(1)客户点餐(2)厨师配餐(3)收银管理(4)系统设置。本系统的问题主要表现在菜谱的及时更新方面,如经理在营业期间对菜谱价格做了及时调整,客人在点餐的时候会遇到价格没有及时更新的情况,另外本系统在资金结算方面还不够人性化,如不支持银行卡结算,这些问题是本系统今后改进的方向。

文献
[1] 甘华蓉, 餐饮管理与实务,北京,对外经济贸易大学出版社,2009年,109-120页
[2] 苗凤君, 局域网技术与组网工程,北京,清华大学出版社,2010年,150-151页
[3] 李大军,POS系统应用,北京,清华大学出版社,2004年, 10-13页
[4] 武仁杰,Web程序设计,北京,中国铁道出版社,2009年, 5-6页
[5] 徐士良,葛兵,计算机软件技术基础,北京,清华大学出版社,2010年 ,25-31页
[6] 彭爱华,刘晖,王盛麟, Windows 7 使用详解,北京,人民邮电出版社,2010年, 2-3页
[7] 钱哨,李挥剑,李继哲,C# WinForm 实践开发教程,北京,水利水电出版社,2010年, 15-18页
[8] 蒋瀚洋,李月军,庞娅娟,SQL Server 2005数据库管理与开发教程,北京,人民邮电出版社,1-8页
[9] Grady Booch,Ivar Jacobson,James,Rumbaugh,The Unified Modeling Language User Guide[M]. Addison-Wesley,1998年,156页
[10] 佩措尔德,Windows程序设计,北京,清华大学出版社,2010年, 245-256页
[11] Bertand Meyer,Object Oriented Software Construction [M].Prentice Hall,1998年,5页
[12] Jim Arlow,Ila Neustadt,UML and the Unified Process:Practical Object-Oriented Analysis and Design[M].Addison Wesley,2002年,95页
[13] 王小科,吕双,C#从入门到精通,北京,清华大学出版社,2008年,3-4页
[14] 陆慧恩,软件工程,北京,人民邮电出版社,2007年,9-10页
[15] 孙涌、现代软件工程、北京,北京希望电子出版社,2002年, 111页
[16] 邓良松,刘海岩,陆丽娜,软件工程,西安,西安电子科技大学出版社,2004年,56-57页
[17] 周苏,王文,软件工程学教程,北京,科学出版社,2002年,74-75页
[18] 王少峰,面向对象技术UML教程,北京,清华大学出版社,2004年,23-50页

致 谢
时间过得真快,一眨眼的功夫,专业课已经结束了,总的来说项目从选题到最后的完成,经历了很多。我从中获益匪浅,取得了一些成绩并且也发现了自己的不足之处。
1.选择熟悉的开发语言及技术比一味求新立异更重要,在接到项目选题的时候,马上想到的开发语言是微软的面向对象的C#语言,虽然Java也是新一代面向对象的开发语言,但是在UI设计及效率方面存在一定的不足,因此在联想到餐厅点餐系统的应用范围仅限于单位局域网之内,所以最终选择了C#开发语言,最后项目能够顺利完成,也得益于.NET开发平台的高效性。
2.创建系统模型是加强团队合作和沟通,提高系统开发效率的有效手段。刚开始接到系统开发任务的时候,不知道从哪里下手,也不知道要做什么,即使上网下载一些软件也不知道怎么做,后来在阅读了《面向对象技术与UML》之后,经过分析与研究,结合瀑布模型、迭代增量、螺旋模型各自的特点,我认为创建软件模型是最直接、最容易理解、也最容易操作的一种软件开发方法,因为这种方法是建立在对需求不了解,对业务规则不熟悉的情况下,最容易与开发人员、客户等沟通的最有效手段,事实也证明了这种方法的正确性,这个餐厅点餐系统用了不到两周的时间1.0版本就已经完成了。
3.每日一总结是发现问题、控制进度的重要手段,虽然制定了详细的开发计划,但是在执行过程中也会遇到意想不到的事情,比如请假,技术障碍等等,通过每日的总结就可以发现问题的症结所在,是认识的问题就提高认识,是技术的问题就及时请教老师或者上网查资料等等,遇到请假耽误工期的情况就及时调整开发进度,实践证明项目能够顺利完成离不开计划的周密及进度的及时调整。
4.新技术未必是最好的,成熟稳定的技术才是首选。在确定框架之前,上网也搜索了许多相关的技术,大部分ORM框架需要配置文件以及安装新的组件,这些新的技术固然有他的优势,但是对与我而言毕竟是一个新的挑战,一开始我也试着学习新的技术,尝试能不能在项目中应用新的技术,后来发现学习的时间较长,消化吸收并达到熟练的地步困难重重,经过权衡选择还是选择了微软开发工具自带的ORM工具Ling to Sql,经过测试大大提高了编码效率。
虽然通过这个项目,我的经验更加丰富了,个人编程能力,沟通能力等都有了一定提高,但是我也感觉到了自己的诸多不足。主要有(1)缺乏相应行业的项目开发经验,因此需求提取的不完整以及业务逻辑的不准确,今后多积累项目开发经验。(2)缺乏必要的管理经验和有效的沟通手段, 在项目开发初期因为认识不够,导致项目拖拖拉拉,后来加强了自我约束及时跟同学们沟通和联系,进度慢慢干上去了,最终完成了项目。(3)界面美工是项目开发过程中最重要的一项工作,因本人理工出身缺乏必要的艺术细胞和审美观,因此对界面的色彩搭配及布局等设计无法达到专业级水平,所以到现在总觉得界面设计不尽人意,因此在今后的项目开发过程中,最好请一些专业的美工来设计,应该是最好的选择。
最后衷心感谢孙飞显老师给予我的大力帮助,特别是在遇到技术问题的时候,不管何时孙老师都会耐心的给我帮助,知道我完成这个项目及毕业论文的设计,在此衷心的对孙老师说一声“老师您辛苦了”.

猜你喜欢

转载自blog.csdn.net/ambiguous__/article/details/130798205
今日推荐