设计模式课程大作业之订餐系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计模式文档
-订餐系统
姓名:
班级: 1113班
学号: 2011
小组:第11组
大连理工大学
Dalian University of Technology
一需求陈述
饭店点餐系统,包括三个部分,顾客点餐单元,厨师管理单元,管理员统计单元,服务员查看单元。主要面向用户为顾客,厨师,管理员。有助于节省人力,方便管理。
首先是顾客登录,这里分为普通顾客和VIP顾客,结账时普通顾客付全款而VIP顾客根据餐厅规定来进行相应的折扣。
顾客点餐主要放置在餐桌上,厨师管理模块在厨房,管理员统计模块在经理办公室,服务员查看模块摆放在大厅,所有模块访问同一台系统。
在顾客餐桌点餐模块,此模块供顾客使用,进入餐厅的用户选择某一空闲餐桌,餐桌上有点菜桌面,提供客户挑选菜肴,进入详细的菜品介绍模块后,可以在此菜品上根据个人喜好添加佐料,如加辣子、醋等,还可以添加不同的份数,将菜品加入菜单后可以编辑订单,详细地订单页面显示列用户当前所有的订餐和应付的钱数。当用户确定订单后可以呼叫服务员,服务员输入自己的编号,收银,确认并打印订单。
在厨师管理模块,厨师可以查看订菜列表,按照列表做菜,对于已做好的菜的状态进行修改为已制作。厨师还可以通过此模块向系统中添加新的菜色。
服务员查看已做好的菜及对应的桌号,送餐,并且将菜的状态置为已提供。
管理员模块,管理员可以统计总收入,可以统计每种菜的销量,可以估计用户的口味喜好。
与此同时我们的菜单还可以给出推荐搭配,优惠活动等。
同时订餐系统还要满足一定的性能需求,首先系统的反应速度应较快,系统界面应美观大方,风格统一,突出特色,功能设计应体现人性化思想,方便用户操作。顾客注册后需要登录系统需输入口令才能进行订餐服务。
对于管理员,在其查询订单的时候,可针对各种组合条件进行查询,而且查询效率要求高,能够及时相应查询请求。
另外,系统还应当满足信息的完整性以及系统的可扩展性。
二概要设计
由于项目是对订餐系统的模拟主要体现设计模式的思想,所以设计时并没有用到数据库,也没有相应的数据库设计。
首先是用例图,如下:
从图中可以知道顾客主要事件是编辑订单,确认订单和呼叫服务员;服务员主要负责收银,响应呼叫等;管理员在餐厅中制定活动,VIP折扣,推出优惠活动。
类图如下:
状态图如下:
显示餐厅主页显示菜单点击菜单列表
顾客选菜显示顾客订单返回
收银确认并打印订单
显示某种菜详细信
息
厨师查看界面刷新显示未完成菜列表(按提交时间
排序)
厨师修改菜的状态
添加新菜界面
服务员登陆状态
服务员更改订单状态为完成
更新系统销售数额
将新订单中的菜添加入未完成菜列表
将订单中菜置为已完成
返回
服务员退出
顾客
服务
系统
更新销售量
三个人任务描述
本次系统主要实现了五中设计模式:
food文件夹完成了装饰着模式;
ConnClient.Handle类完成了代理模式;
OrderList.DishLish类完成了单例模式;
CLient中的VIPUser和NorUser完成了访问者模式;
只要是有虚类,继承他的类基本都算是工厂模式比如说Client.TheClient;
在设计阶段我主要负责类图的设计(见概要设计),使用Visio 2013工具画图;代码实现阶段主要负责界面设计及实现和装饰着模式,完成了三个界面和food 类的编写;
登录界面和菜单详情界面如下:
菜单列表界面:
由于没有使用数据库,菜单列表和详细地数据读取都在界面代码中进行了实现,使用了C#中的Dictonary类进行列表项的添加,菜单类和菜品详情类如下,Dictionary
Dictionary
直接在里面添加成员如content.Add("香辣鸡", "我国特产,风味十足.........");
当程序运行时可以直接读取。
Food类装饰者模式实现体现在对一种食物用户可以选择调味品,如加酱油,加辣子等,具体食物都继承自抽象的食物类体现了工厂模式,食物对象对象接受所有来自客户端的请求,它把这些请求转发给真实的对象。食物类如下:
public abstract class Dish
{
public abstract void Operation();
}
所有食物都继承自Dish这个类如Material ,这里不再列举其他,
public class Material : Dish {
private string name;
public Material(string name){
= name;}
public override void Operation(){
DishName.SetNull();
DishName.MessStr = name;}
}
相同的调味品继承自Sauce这个类,而醋,辣子又继承这个调味品类同时完成对食物类的装饰。
public abstract class Sauce : Dish{
protected Dish dish;
public void setDish(Dish dish)
{
this.dish = dish;
}
public override void Operation()
{
if (dish != null)
{
dish.Operation();
}
}