2.3 系统功能分析2.3.1 系统功能实现本系统主要是实现网上浏览菜单、订餐、产生订单等功能的系统。
需要实现菜品信息的动态提示、购物车管理、客户信息注册、登录管理、订单处理、信息反馈等模块。
需要完成的主要任务如下:当客户进入网上订餐时,应该在主页面中分类显示最新的菜品信息,以供客户选择所需菜品,同时提供按菜品名称,快速查询所需菜品信息的功能。
当客户选择预定某个菜品时,应该能够将对应菜品信息,如:价格、数量记录到对应的购物车中,此时客户可以选择选择其他菜品或是查看自己的购物车,最后,在购物车中填写相应的送餐信息,提交订餐订单后,自动清除以生成订单的购物车中的信息。
餐厅服务人员根据订单信息,查看详细订单明细并根据实际情况处理订餐。
分析网上订餐系统,制订整个系统框架如下:网上订餐系统前台后台用户登录或游客注册信息浏览订餐查看历史订单留言板实时反映订餐请况处理订单前台信息浏览、添加、删除、修改审核注册用户系统管理订餐管理查看订单明细信息反馈和评分图2.1系统整体框架图2.3.2 系统需求分析用于需求建模的方法有很多种,最常用的包括数据流图(DFD)、实体关系图(ERD)和UML 三种方式。
UML(统一建模语言)是一种定义良好、易于表达、功能强大且普遍适用的建模语言。
它溶入了软件工程领域的新思想、新方法和新技术。
它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程[12]。
本系统使用UML中的用例图、活动图、状态图来对需求建模。
用例图通过描述“系统”和“活动者”之间的交互活动来描述系统的行为。
通过分解系统目标,用例图描述活动者为了实现这些目标而执行的所有步骤。
此方法最主要的优点,在于它是用户导向的,用户可以根据自己所对应的用例来不断细化自己的需求。
此外,使用用例还可以方便地得到系统功能的测试用例。
1.角色分析分析的第一步是定义用例,以描述系统的外部功能需求。
用例分析包括阅读和分析需求说明,此时需要与系统的潜在用户进行讨论。
根据上述需求,通过分析,网上订餐角色分为两大类:用户和系统管理员。
2.用例分析在确认角色的基础上,确认用例。
网上订餐系统中的用例有:用户管理、订单管理、登录系统、菜品信息管理等等。
本系统的用户用例图如图2.2所示。
进行的操作包括订餐服务、信息浏览、订单管理等。
图2.2 订餐用户使用例图管理员分为两类:一类是系统管理员用例图如图2.3所示。
管理员进行的操作(后台操作)包括用户管理,信息的浏览、添加、删除、修改等等。
图2.3 系统管理员使用例图另一类管理员是订餐管理人员,专门负责处理用户预约的订单,用例图如图2.4所示。
图2.4 订餐管理员使用例图除了用用例图描述系统需求以外,以下用活动图对系统的主要例进行说明,更具体地描述该用例与角色的交互。
1.用户登录图2.5 用户登录用户登录实现为本网站注册用户提供身份确认的功能,保证合法用户的应有权益。
而且是否登录也将决定用户能否订餐。
用户登录的前置条件是在登录前,用户必须完成“注册”。
2.订餐服务图2.6 订餐服务在订餐服务用例中,每个用户都有个购物车,用户可以将自己选定的菜品及其数量放入到购物车中,并且随时可以查看自己预定的菜品的数量和总价格。
本用例开始前用户必须登录到系统中。
如果用例成功,顾客可以浏览自己购物车中的信息并决定是购买还是删除。
3.查看历史订单:图2.7 查看历史订单注册用户可以查看自己的历史订单,在历史订单中,可以浏览曾经订购过的菜品,对于已经送餐后的菜品,可以进行评分和信息反馈,不能重复评论,某个菜品在这里的评分会影响其在整个网站中的推荐指数。
4.订单处理:图2.8 订单处理处理订单的过程是订餐管理人员参与的,当前台有新的订单生成时,会自动在后台的现有订单列表中显示出来,订餐管理人员可以点击查看未处理的订单,根据实际情况进行处理,或者删除不需要的订单记录。
3 数据库设计数据库设计一般分为六个阶段。
之前已经完成需求分析,现在需要进行概念设计、逻辑设计和物理设计,本章将叙述这三个阶段的设计思路和设计过程。
3.1 数据库需求分析用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输入和输出。
收集基本数据、数据结构以及数据处理流程,组成一份详细的数据字典,为具体设计铺垫[13]。
通过系统功能分析,针对网上订餐需求,总结为:1.分为一般用户和管理员用户,只有用户身份才能进行前台订餐,只有管理员身份才能进行后台管理;2.订单分成单张订单详情和总订单表,一张订单中含有多个订单明细;3.每一道菜品都从属于一种类型。
4.一个用户可以订购多个菜品。
5.一个用户对应多张订单表。
3.2 系统概要设计3.2.2 订餐系统E-R图E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型[14]。
构成E-R图的基本要素是实体型、属性和联系,其表示方法为,实体型:用矩形表示,矩形框内写明实体名;属性:用椭圆形表示,并用无向边将其与相应的实体连接起来;多值属性由双线连接;主属性名称下加下划线;联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型,系统E-R图如图3.1所示。
订单条目菜品留言版管理员菜单分类订单用户预定包含M1MN生成M1包含M1包含1M留言M1回复M1图3.1订餐系统E-R图以下是主要数据表的E-R图:图3.2 用户E-R图图3.3 订单条目E-R图图3.5 订单E-R图图3.6 菜单E-R图3.3 逻辑设计3.3.1 逻辑设计概述数据库的逻辑设计是概念模型向逻辑模型的转化,一般步骤是先将概念结构转化为关系模型,然后将转化来的关系模型向特定DBMS支持下的数据模型转换,最后对数据模型进行优化3.3.2 数据表的设计数据库的主要表详细结构如下:表3.1 订单条目表orderinfoField Type Null Key CommentID Int No Yes 标识递增订单ID Int No No 外键,对应于订单中的“订单ID”菜名Nchar(10)No No 默认值是“待送餐”数量Int No No单价Float Yes No评分Int Yes No 默认为“0分”Back 订单Yes No 顾客订餐的信息反馈表3.2 订单表orderlistField Type Null Key Comment订单ID Int No Yes 标识递增用户ID Int No No 外键,对应于用户表中的“用户ID”订单状态Nchar(10)No No 默认值是“待送餐”送餐地址Nvarchar(50)No No备注Nvarchar(MAX)Yes No订餐姓名Nvarchar(50)No No订餐时间Datetime Yes No金额总价Float Yes NocID Int No Yes 标识递增菜名Nvarchar(50)No No价格Float No No菜介绍Nvarchar(500)Yes NoScid Int Yes No 菜系id菜图片Nvarchar(1000)Yes No 存储的是图片的路径表3.4 菜分类表cuisineField Type Null Key Comment Scid Int No Yes 标识递增种类Nvarchar(50)No No 菜系名系列介绍Nvarchar(MAX)Yes No表3.5 用户表userField Type Null Key Comment 用户ID Int No Yes 标识递增uName Nvarchar(50)No No 登录名uPwd Nvarchar(50)No No 登录密码真实姓名Nchar(10)No No性别Nchar(10)No No 菜系id联系电话Nvarchar(50)Yes NoState Nvarchar(50)No No ID是否有效,默认值是“未审核”4.2 核心功能实现4.2.1 用户自定义控件说明1. listInfo.ascx该控件是用于在首页中显示不同菜系的介绍信息的,在控件中定义了一个Scid属性,在每次引用控件时,通过设置Scid的值来确定控件该显示那个菜系的信息。
2. Nav.ascx该控件作为导航在页面中引用的,控件的样式和超链接都已经设置好,在需要导航的页面直接引用即可。
3.PagingBar.ascx该控件是分页显示控件,在控件中定义了三个属性:CurrentPage,表示当前显示的是第几页,默认值是”1”;PageSize,表示一页显示几条数据,默认值为”10”;RecordCount,是显示信息的总条数,一般是从数据库绑定出的数据总条数来设定其值的。
4.scoer.ascx该控件用于显示菜单信息中的推荐指数,控件中定义了一个s属性,通过设定s的值,便可以显示出相应的推荐指数。
4.2.2 信息显示菜单信息,养生咨询,留言版等信息的显示是通过绑定数据库中相应表单中数据得到的。
当查看其中一项的具体信息时,是通过网页间传递的参数确定的,一般情况下,传递的参数是数据表中的主键值,这样使得信息有确定性。
在菜单表的显示中,网页间传递的参数是数据库中菜单表的主键cID,先显示之前,通Request.QueryString[“cID”]获得主键值后,再从数据库中绑定出相信菜名,价格和介绍信息,并在页面中显示出来。
养生咨询,留言板等的信息显示也是这个原理。
只是绑定数据的控件不同,得到的显示效果不尽相同。
4.2.3推荐指数推荐指数是菜单显示信息中的一个是非常重要意义的信息,其在一定程度上说明菜品的受欢迎程度,可以在顾客选购餐品时提供一个参考建议。
上面的内容中已经提到推荐指数的现实是通过设置scoer.ascx控件的s属性。
s属性的值是根据每个订餐用户用餐后对菜品的评分动态生成和改变的,该信息没有专门存储于数据库中。
图4.14是获取s的值的程序流程图获取cID 值cID 值在“订单条目”表中存在是否设定s 的值为“0”查询出“订单条目”中该cID 值的所有除“0”以外的评分根据查询出来的分数计算平均分将平均分赋值给“s ”显示推荐指数显示推荐指数图4.14 推荐指数显示4.2.4 分页显示算法由于网页的布局有限,数据库中的大量信息无法再一张网页上全部显示出来,运用分页显示的技术使得信息按照需要分页显示出来,并且显示效果更加清晰。
对于分页显示,在上述内容提到了分页控件PagingBar.ascx ,在需要显示的页面引用这个控件,就可以进行分页显示。
以下是分页显示实现的算法://设置分页控件(用到变量: 第几页 每页多少条数据 数据条数) int _currentPage; //当前在第几页int _pageSize = 10; //一页显示的记录数 = 10int RecordCount //数据条数总共的页数= RecordCount/_pageSize取得待显示页码:获取网页中传递的p 参数,默认当前显示页,既p=1;用urlParameter 保存网页中传递处p 以外的其他参数;设置超链接按钮:if 当前不是第一页,设置第一页的链接地址与上一页的链接地址if 当前不是最后一页,设置下一页和未页的链接地址4.2.5 购物车购物车模拟了现实生活中购物的情景,在用户进行订餐时,系统会为用户自动生成一个虚拟的购物车。