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