外卖订餐系统的设计与实现论文.doc_第1页
外卖订餐系统的设计与实现论文.doc_第2页
外卖订餐系统的设计与实现论文.doc_第3页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北北京京师师范范大大学学珠珠海海分分校校 本科生毕业论文 论文题目:论文题目:外外卖订卖订餐管理系餐管理系统统的的设计设计与与实现实现 2010 年 4 月 30 日 北京师范大学珠海分校学位论文写作声明和使用授权说明北京师范大学珠海分校学位论文写作声明和使用授权说明 学位论文写作声明学位论文写作声明 本人郑重声明: 所呈交的学位论文,是本人在导师的指导下,独立进行研究工作 所取得的成果。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经 发表或撰写过的作品或成果。对本文的研究做出重要贡献的个人和集体,均已在文中 以明确方式标明。本声明的法律结果由本人承担。 论文作者签名: 日期: 年 月 日 学位论文使用授权说明学位论文使用授权说明 本人完全了解北京师范大学珠海分校关于收集、保存、使用学位论文的规定,即: 按照学校要求提交学位论文的印刷本和电子版本;学校有权保存学位论文的印刷本和 电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制 手段保存论文;在不以赢利为目的的前提下,学校可以将学位论文编入有关数据库,提 供网上服务。 (保密论文在解密后遵守此规定) 论文作者签名: 导师签名: 日期: 年 月 日 北京师范大学珠海分校信息技术学院 1 摘摘 要要 随着外卖订餐在高校越来越普及,传统的电话订餐给顾客跟外卖店带来不方便, 如何使订餐更快速,更方便已成为众多高校学生关注的问题了。本外卖订餐管理系统 是针对高校外卖店进行具体的需求分析,采用 OOA(面向对象分析)和采用 UML 工具 辅助开发分析,基于 S2SH(Struts2+Spring+Hibernate)架构进行设计和开发。论文 主要描述外卖订餐管理系统的开发流程,分别从需求分析和系统设计、详细设计与系 统实现这几个阶段进行描述。 关键词关键词:订餐管理系统 S2SH OOA 北京师范大学珠海分校信息技术学院 2 ABSTRACT With more and more popular in universities order take-out, due to the traditional telephone reservation for customers to bring inconvenience take-away meal, how to make more quickly, more convenient has become the concern of the students. The take-away meal management system in colleges and universities is the concrete take-away demand analysis, using object- oriented analysis (OOA) and using UML tools to assist in the development, using Struts2-Spring-Hibernate framework to design and development. Thesis mainly describes take-away meal management system process, separately from the demand analysis and system design, detailed design and realization of this system are described several stages. KeyKey words:words: meal management system S2SH OOA 北京师范大学珠海分校信息技术学院 3 目目 录录 一、绪论 .1 1.1 背景 .1 1.2 北师大珠海分校外卖订餐的现状分析 .1 1.3 外卖订餐管理系统的可行性分析与作用 .1 1.4 系统简介 .2 二、相关技术的介绍 .3 2.1 STRUTS2 技术介绍 3 2.2 HIBERNATE技术介绍 4 2.3 SPRING技术介绍 .5 2.4 DWR技术介绍 .6 三、系统需求 .8 3.1 UML 7 3.2 需求分析 .8 3.3 系统功能 .8 四、系统设计 11 4.1 系统总体结构 11 4.2 系统架构方式 11 4.3 HIBERNATE自动建表.11 4.4 详细设计 17 4.4.1 类设计 .17 4.4.2 流程分析 .19 4.4.3 时序图分析 .20 4.4.4 主要界面设计 .26 五、系统实现 30 5.1 开发工具与环境30 5.2 环境搭配30 5.3 编码实现32 5.3.1 DAO 层的编写 33 5.3.2 Service 层的编写 34 5.3.3 WEB 层的编写.35 5.3.4 DWR 应用.38 结 论 42 参考文献 43 致 谢 44 北京师范大学珠海分校信息技术学院 第 1 页 共 44 页 一 、绪 论 1.11.1 背景背景 进入 21 世纪以来,餐饮行业以年均 20%的增长速度,成为国民经济中的发展 最快的行业之一。随着人们生活水平的不断提高,人们甚至想要不出门就能吃到可 口的饭菜这就是外卖。在我国高校内餐饮行业外卖行业更是发展最快的一个行 业,在北师大珠海分校每年都有几间新的外卖店的产生。外卖订餐已经成为北师大 珠海分校学生生活中不可缺的一部分,而订餐的方式也随着学生们的要求提高,不 断的多样化和成熟化。 1.21.2 北师大珠海分校外卖订餐行业的现状分析北师大珠海分校外卖订餐行业的现状分析 依靠电话订餐是北师大目前最主要的订餐方式,如比较大的外卖店关东、喜苑、 红梦缘都是使用电话订餐方式,此种订餐方式有不少的缺陷,比如:时效问题、打电 话的成本等等。目前北师大外卖订餐行业的现状分析如下: (1) 外卖店数量众多,各店竞争较大。 (2) 外卖店多数实行人工方式订餐,即打电话订餐登记。这种订餐方式造成订餐很 不方便特别在订餐高峰期,经常出现打电话打不通的现象。 (3) 外卖店多数没有实行市场分析,一些菜式在顶峰期出现缺菜现象,而一些菜式 却出现积累现象,造成了资源的浪费和经济损失。 (4) 外卖店没有对外卖进行财务管理,造成对店内资金管理不明确和店员滥用资金 的可能。 (5) 无法为店内管理层提供准确的决策信息,掌握及时的市场消息。 通过分析北师大的外卖行业的现状,不难发现国内高校的外卖店大多数都是依靠 手工的管理方式,没有实行外卖订餐管理的信息化,所以造成了不少问题。 1.31.3 外卖订餐管理系统的可行性分析及其作用外卖订餐管理系统的可行性分析及其作用 依靠传统的电话订餐实行外卖订餐不仅造成学生的方便,也对外卖店的经营产生了 不良影响。实行电话订餐有以下几个缺点:一、在订餐高峰期,一架电话根本那么多 的订餐顾客,有时候要多次拨打才能接通,这种情况下有时也造成双方语气匆忙,态 度暴躁,给订餐带来极大的不便;二、点菜不方便,学生如果没有点菜单,很难点菜, 另外外卖店得每栋宿舍每间地派传单,无疑又是一笔不小的开资了;三、学生必须支 付打电话的成本,虽然有些外卖店有校园短号但对于一些没开通校园短号的学生也不 是很方便。 通过上面分析,电话订餐已成为一种阻碍外卖行业发展的落后方式了,实行订餐 管理的信息化迫在眉睫,利用外卖订餐管理系统对外卖流程实行信息化,不仅给订餐 顾客带来了方便更给外卖店带来了经济利益。外卖订餐管理给顾客和外卖店带来了双 赢。对于顾客,不用再担心高峰期打电话订餐失败了,顾客可以在网站浏览相关菜式, 添加喜欢的菜式,解决了以前的那种电话订餐造成订错菜式的现象。对于外卖店更是 带来了长远的利益,减少外卖店的人力和财力,通过订餐管理系统使外卖店能够及时 北京师范大学珠海分校信息技术学院 第 2 页 共 44 页 掌握市场信息,推销新菜式和实行更有效的经营策略。 1.41.4 系统简介系统简介 本系统主要针对高校的外卖订餐流程和对订单处理实行信息化而构建出来的 B/S 平台,学生通过浏览器上网访问订餐网站可以实现网上浏览菜式和订餐功能,店员通 过后台管理登陆实现对订单的处理,通过信息化处理给学生订餐带来方便更给外卖店 管理人员带来了长远利益。 北京师范大学珠海分校信息技术学院 第 3 页 共 44 页 二 、相关技术介绍 本外卖订餐管理系统选取 S2SH 架构来设计和开发,S2SH 是 SSH 升级版,以前的 SSH 架构中的用到的 MVC 框架是 struts,而 S2SH 中的 MVC 框架用到的是 struts2,struts2 与 struts 有很大的区别,配置更灵活,开发更方便,利用其开发的 插件与 hibernate,spring 能达到无缝集成,本系统采用三层架构,用 struts2 处理 前端,hibernate 封装对数据库的访问,spring 对 struts2、hibernate 和业务逻辑层 中进行对象的管理,三个框架各司其职,有利于项目开发的分工,使项目开发达到更 灵活性和可维护性。S2SH 三层架构如图 1 所示: Spring Hibernate Struts2 DAO Action ServiceDB 图 1:S2SH 三层架构 2.12.1 struts2struts2 技术介绍技术介绍 Struts2 是目前比较成熟的 Web 开发框架, Struts 2 框架是 Struts 1.X 的替代 版本,Struts 2 框架整合了 Struts 1.X 框架和 WebWork 框架的优点。相对 Struts 1.X,Struts 2 已经有了非常大的改变,去掉了 ActionForm,降低了框架组件之间的 耦合性,Struts 2 的 Action 只是普通的 Java 类(POJO) ,给模块测试工作带来了极大 的方便。Struts 2 提供了强大的整合能力,支持多种返回结果类型,改进了 Struts 1.X 的标签库,引入 OGNL 表达式和值栈的概念,给开发者带来了更好的体验1。从全局的 角度来看 ,Struts2 是一个 pull(拉)类型的 MVC(或者 MVC2)框架,它与传统类型 的 MVC 框架的不同之处就在于在 Struts2 中,Action 担任的是模型的角色,而非控制 器的角色,虽然它的角色仍然有些重叠。 “pull”的动作由视图发起,它直接从 Action 里拉取所需的数据,而不是另外还需要一个单独的模型对象存在2。 北京师范大学珠海分校信息技术学院 第 4 页 共 44 页 图 2: MVC / Struts2 架构 图 2 描述了 Struts2 架构中的模型、视图和控制器。控制器通过 Struts2 分发 Servlet 过滤器(也就是人们常说的拦截器)来实现,模型通过 Action 实现,视图则 通过结果类型和结果组合实现。值栈和 OGNL 提供了公共的线程和链接,并使得不同组 件可以相互集成。Struts 2 设计的精巧之处就是使用了 Action 代理,Action 代理可 以根据系统的配置,加载一系列的拦截器,由拦截器将 HttpServletRequest 参数解析 出来,传入 Action。同样,Action 处理的结果也是通过拦截器传入 HttpServletResponse,然后由 HttpServletRequest 传给用户。其实,该处理过程是 典型的 AOP(面向切面编程)的方式,Struts 2 处理过程模型如图 3 所示: 图 3: Struts2 处理过程模型 北京师范大学珠海分校信息技术学院 第 5 页 共 44 页 2.22.2 hibernatehibernate 技术介绍技术介绍 Hibernate 是一个优秀的 ORM 框架,通过使用 Hibernate 框架,允许开发人员使 用面向对象的方式对数据库进行访问,避免采用 JDBC 访问,造成面向对象编程与面向 过程编程的冲突。在这种方式下,企业应用的面向对象分析、面向对象设计和面向对 象编程一脉相承,让系统分析、设计更加简洁。 Hibernate 作为 Java EE 持久化的标准方案,使用传统的 POJO 作为系统的持久化 类,具有低侵入式设计,不会造成代码污染。系统的持久化类无需继承任何 Hibernate 基类,或者实现任何 Hibernate 接口,提供了极好的代码复用4。Hibernate 与数据库、 应用程序关联关系如图 4 所示: 图 4: Hibernate关联关系图 虽然 Hibernate 这个框架问世的时间不长,但已经成为目前最流行的持久层解决 方案,较之另一个持久层框架 iBATIS,Hibernate 更具有面向对象的特征;较之传统 的 Entity EJB 的持久层解决方案,Hibernate 则采用低侵入式的设计,即完全采用普 通的 Java 对象(POJO) ,而不必继承 Hibernate 的某个超类或实现 Hibernate 的某个 接口。Hibernate 是面向对象的程序设计语言和关系数据库之间的桥梁,Hibernate 允 许程序开发者采用面向对象的方式来操作数据库。 2.32.3 springspring 技术介绍技术介绍 Spring 是一个优秀的 Web 开发框架。它是一个分层的架构,由 7 个模块组成,如 图 5 所示。其中比较重要的是核心容器模块,其他模块构建在这个核心容器之上,核 心容器定义创建、配置和管理 Bean 的方式,它提供 Spring 框架的基本功能。其主要 组件是 BeanFactory,它是工厂模式的实现。BeanFactory 通过使用反转控制(IOC) 模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开 北京师范大学珠海分校信息技术学院 第 6 页 共 44 页 图 5 spring 七大模块 组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多 个模块联合实现。每个模块的功能如下: 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将 应用程序的配置和依赖性规范与实际的应用程序代码分开。 Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。 Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度 功能。 Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集 成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。 通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用 程序中。 Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理 异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并 且极大地降低了需要编写的异常代码数量(例如打开和关闭连接) 。Spring DAO 的 面向 JDBC 的异常遵从通用的 DAO 异常层次结构。 Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系 工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。 Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。 Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。 Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通 过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。5 北京师范大学珠海分校信息技术学院 第 7 页 共 44 页 2.42.4 DWRDWR 技术介绍技术介绍 DWR 是一种 AJAX 解决方案。DWR 包括一个 java 库,以及一套 javascript,使得 我们可以用一种非常简单的方式,在页面上使用 javascript 直接调用后台的 java 对 象 。 DWR 的 javascript 库包括几个部分:dwr 的 javascript 引擎(即对 AJAX 调用的 封装) 、dwr 提供的一些非常有用的辅助 javascript 函数库、以及 dwr 自动帮我们生成 的专门用于调用后台 JavaBean 方法的 javascript 库。DWR 在运行的时候,动态生成一 个 javascript 库,这个库是对后台 javabean 调用的封装,我们可以直接使用这个库 来实现直接调用 JavaBean 的目的6,其流程图6所示: web界面 JavaScript DWRJavaScript库 服务器 DWRServlet 远程JavaBean 图6:DWR 调用过程 三三 、系统需求、系统需求 本系统采用 OOA(面向对象分析)和 UML(Unified Modeling Language)工具为指 导,本章主要对系统的需求以及系统功能进行分析描述。 北京师范大学珠海分校信息技术学院 第 8 页 共 44 页 3.13.1 UMLUML UML(Unified Modeling Language)是一种用来创建程序模型的图形语言(即带 有语意的一种图形记号)7,常用的 UML 图有类图、时序图、用例图、活动图和状态图。 3.23.2 需求分析需求分析 本外卖订餐管理系统包括两个子系统,前台订餐和后台管理,前台订餐是供用户 浏览菜式和提交订单进行订餐;后台管理是供餐厅管理人员进行外卖订单管理、菜式 管理、统计报表管理、系统管理。 3.33.3 系统功能系统功能 本系统采用面向对象分析方法,下面是对本系统的两个子系统进行分析说明。 (1) 前台管理系统 前台管理系统供用户浏览菜式,进行菜式添加到购菜车,用户可以对购菜车进行 更新、清除,用户提交订单后可以在订单列表查看外卖状态,用例如图 7 所示: 图 7:用户用例图 (2) 后台管理系统 后台管理系统有菜式管理、外卖订单管理、统计报表管理和系统管理四大模块。 顶层用例:后台管理有两大角色即店长跟店员,店长拥有系统全部权限,店员只 能操作菜式管理跟外卖订单管理两大模块。其顶层用例如图 8: 北京师范大学珠海分校信息技术学院 第 9 页 共 44 页 图 8::顶层用例 菜式管理:可以对菜式进行查看、添加、修改和删除。用例如图 9 所示。 图 9 菜式管理用例图 外卖订单管理:可以对外卖订单的状态进行查看,改变。用例如图 10 所示: 北京师范大学珠海分校信息技术学院 第 10 页 共 44 页 图 10 外卖订单管理用例图 (3) 统计报表管理 菜式统计报表:对每月的菜式进行统计,可以查看哪些菜式在本月份销量比较好。 用户统计报表:对用户进行统计,可以对其经常订餐的用户实行优惠政策。 (4) 系统管理 用户维护:可以查看所有已注册的用户,查看该用户的所有订单列表,和删除该用 户。 店员维护:可以对店员进行添加、删除、更新。 修改密码:输入旧密码,如果旧密码输入不正确会进行提示叫你重新输入,输入正 确后再输入新密码和确认新密码可进行修改。用例图如图 11 所示: 图 11 系统管理用例 北京师范大学珠海分校信息技术学院 第 11 页 共 44 页 四四 、系统设计、系统设计 本系统的设计采用 OOA(面向对象分析)和利用 UML 工具辅助开发设计。 4.14.1 系统总体结构系统总体结构 通过前一章的需求分析跟功能分析可以得出本系统总体结构如图 12 所示: 外卖订餐管理系统 前台订餐 后台管理 用户登录、注册、浏览 菜式、提交订单 订单管理 统计报表 菜式管理 系统管理 图 12 系统总体框架图 4.24.2 系统架构方式系统架构方式 本系统采用三层架构模式,即展现层,业务逻辑层,数据访问层,各层之间都独 立,展现层与业务逻辑层接口通信,业务逻辑层与数据访问层接口通信,数据访问层 直接跟数据库打交道,这样具有很好的解耦性,每一层逻辑改变不会影响到另一层, 对项目以后的可维护性及团队开发具有很大的作用,三层架构流程如图 13 所示: 展现层 浏览器 业务逻 辑层 数据访 问层 数据库 图 13 三层架构 4.34.3 HibernateHibernate 自动建表自动建表 传统的数据库设计都是先经过建立 E-R 图,然后通过 E-R 图生成数据表。而 Hibernate 开发团队提倡我们用另外一种开发模式,就是先建立实体类和编写实体类映 射文件,然后通过实体类和映射文件自动生成数据表。这种开发模式也是体现出来 OOD 思想,数据的持久化这些都是非常机械的,基本没有变动的,hibernate 就是把这些行 北京师范大学珠海分校信息技术学院 第 12 页 共 44 页 为抽取出来自动完成并在效率上做一优化等,让我们轻松实现数据库的移植。这样我 们在开发中更关注于类中的设计而不必受到数据库的牵制,因为数据库本身就跟面向 对象存在阻抗。国内有位领域驱动设计(DDD)专家曾经发表了一遍文章数据库已死 , 在文章中他阐述了数据库成为了大多数企业应用的主要瓶颈,也成为了运行环境中最 不具伸缩性的一层,他认为软件开发应集中在领域分析,数据库应该是为领域服务而 不能让我们的领域层受牵制于数据库。本系统是采用建立实体类和编写映射文件来生 成数据表的开发模式。 (1)实体类 POJO 设计 类名功能说明 User用户 Admin管理员 Item订单项 Menu菜式 Order订单 实体类 User 属性类型属性说明 id Integer username String 姓名 password String 密码 ordersList 订单列表 实体类 Admin 属性类型属性说明 id Integer username String 姓名 password String 密码 typeInteger 管理员类型 实体类 Item 属性类型属性说明 id Integer itemName String 订单项名称 itemPricedouble 订单项价格 itemNumberInteger 订单项数量 itemTypeInteger 订单项类型 itemIntroductionString 订单项描述 北京师范大学珠海分校信息技术学院 第 13 页 共 44 页 orderOrder 所属订单 实体类 Menu 属性类型属性说明 id Integer name String 菜式名称 pricedouble 菜式价格 typeInteger 菜式类型 stateInteger 菜式状态 itemIntroductionString 菜式简介 实体类 Order 属性类型属性说明 id Integer phone String 电话号码 addressString 宿舍地址 totaldouble 总价 stateInteger 订单状态 dateDate 订单日期 barcodeOrder 订单流水号 userUser 所属用户 itemsList 所有订单项 (2) hibernate 映射文件编写 User.hbm.xmlUser.hbm.xml 北京师范大学珠海分校信息技术学院 第 14 页 共 44 页 Admin.hbm.xmlAdmin.hbm.xml Item.hbm.xmlItem.hbm.xml 北京师范大学珠海分校信息技术学院 第 15 页 共 44 页 Menu.hbm.xmlMenu.hbm.xml 北京师范大学珠海分校信息技术学院 第 16 页 共 44 页 Order.hbm.xmlOrder.hbm.xml 北京师范大学珠海分校信息技术学院 第 17 页 共 44 页 4.44.4 详细设计详细设计 本节阐述了如何对本系统的对象类进行分析设计、系统流程分析以及如何用时序 图对系统中的对象交互进行描述。 4.4.1 类设计 (1) 类关系 通过面向对象分析得出在本系统中用户跟订单、订单项,订单跟订单项,购菜车 跟订单项都是一对多关系,用户跟购菜车,订单跟购菜车都是一对一关系。其关联关 系如图 14 所示: 图 14 类关联 (2)DAO 与业务逻辑类设计 1. AdminDao 与 AdminService 类设计 北京师范大学珠海分校信息技术学院 第 18 页 共 44 页 2. UserDao 与 UserService 类设计 3. MenuDao 与 MenuService 类设计 北京师范大学珠海分校信息技术学院 第 19 页 共 44 页 4. OrderDao 与 OrderService 类设计 4.4.2 流程分析 1. 前台用户订购外卖流程: 北京师范大学珠海分校信息技术学院 第 20 页 共 44 页 2. 后台管理员订单处理流程: 4.4.3 时序图分析 用户登录用例实现 A、时序图 北京师范大学珠海分校信息技术学院 第 21 页 共 44 页 B、描述 1)输入信息 输入用户和密码,提交表单 2)表单验证 LoginUserAction 会调用 validate 方法进行表单验证,如果用户输入不合 法就会转向 login.jsp 提示用户输入不合法 3)进入业务方法 LoginUserAction 进入 execute 方法进行登录验证 4)获取 userService 接口 LoginiUserAction 类获取 UserService 接口,以便调用 UserServcie 关于 登录 checkLogin 的方法。 5)登录 调用 userDao 的 checkLogin 方法进行登录验证。 6)返回结果 如果用户名和密码输入正确进入系统主页面,否则提示用户名或密码输入 北京师范大学珠海分校信息技术学院 第 22 页 共 44 页 错误。 用户修改密码用例实现 A、时序图 B、描述 1)输入信息 输入原密码、新密码和确认新密码,都不能为空,新密码与确认新密码要 一致。 2)表单验证 updatePasswordAction 会调用 validate 方法进行表单验证,如果用户输入 不合法就会转向 updatePassword.jsp 提示用户输入不合法,如果用户原密码 输入错误或新密码与确认新密码不一致也会转向 updatePassword.jsp 并进行 提示。 3)进入业务方法 UpdatePasswordAction 调用业务方法 execute()进行修改密码。 4)获取 userService 接口 UpdatePasswordAction 类获取 UserService 接口,以便调用 UserServcie 关于修改密码 updateUser 的方法。 5)保存到数据库 调用 userDao 将用户数据更新到数据库。 北京师范大学珠海分校信息技术学院 第 23 页 共 44 页 6)返回结果 修改成功后,返回到系统主页面。 注册用户用例实现 A、时序图 B、描述 1)输入用户信息 输入用户名,用户密码,确认密码。 2)表单验证 RegisterUserAction 会调用 validate 方法进行表单验证,如果用户输入不 合法就会转向 register.jsp 提示用户输入不合法,如果输入用户名已存在也 会转向 register.jsp 并进行提示。 3)进入业务方法 RegisterUserAction 调用业务方法 execute()进行添加用户。 4)获取 userService 接口 RegisterUserAction 类获取 UserService 接口,以便调用 UserServcie 关 于修改密码 addUser(User)的方法。 5)保存到数据库 调用 userDao 的 addUser 方法将用户数据保存到数据库。 北京师范大学珠海分校信息技术学院 第 24 页 共 44 页 6)返回结果 注册成功后,返回到主页面。 添加菜式到购菜车并提交订单用例实现 A、时序图 B、描述 1)选择菜式 选择要添加的菜式,可以多选。 2)表单验证 CommonMenuAction 会调用 validate 方法进行表单验证,如果用户没选择菜 式或还没登陆就提交就会提示用户输入还没选择菜式或还没登陆。 3)进入业务方法 CommonMenuAction 进入业务方法 execute 进行添加菜式到购菜车,在 execute 方法中调用 showMenuCatr 方法进行菜式添加到购物车。 4)转向 CommonMenuCart CommonMenuCart 是一个通用的购菜车,将数据进行更新。 5)返回到购菜车界面 调用 CommonMenuCart 的 execute 方法将数据显示给用户。 北京师范大学珠海分校信息技术学院 第 25 页 共 44 页 6)提交订单 用户输入电话号码,宿舍地址进行提交订单。 7)进入数据验证 AddOrderAction 调用 validate() 方法进行验证,如果用户输入不合法 会进行提示。 8)获取 OrderService 接口 调用 OrderService 的 addOrder(Order)方法进行订单的添加。 9)添加到数据库 调用 OrderDao 的 addOrder(Order)方法将订单数据添加到数据库。 10)返回结果 返回到订单界面,供用户查看。 管理人员处理订单用例实现 A、时序图 B、描述 1)访问订单列表 管理人员访问订单列表,对订单的状态进行改变 2)进行业务方法 ChangeStateActon 会进入自己的业务方法 execute()进行状态的改变 北京师范大学珠海分校信息技术学院 第 26 页 共 44 页 3)获取 OrderService 接口 ChangeStateAction 类获取 OrderService 接口,以便调用 OrderServcie 关 于更改订单状态的方法。 4)更新到数据库 调用 OrderDao 的 update(Order)方法订单数据更新到数据库。 5)返回结果 更改状态后,返回到订单列表界面。 4.4.4 系统主要界面设计 管理人员登陆界面:管理人员输入用户名、密码很选择管理员类型进行登录,如下图 所示: 添加菜式界面:管理人员输入菜式名、价钱、类型、状态和菜式简介进行添加菜式, 如下图所示: 北京师范大学珠海分校信息技术学院 第 27 页 共 44 页 用户注册界面:用户输入用户名、密码和确认密码进行注册,如下图所示: 前台订餐主界面:用户将要订购的菜式进行选中并点击放入到餐盒按钮,如下图所示: 北京师范大学珠海分校信息技术学院 第 28 页 共 44 页 餐盒界面:用户可以对外卖数量进行更改和删除,也可以清空餐盒,输入送餐电 话跟宿舍地址提交订购账单就可以进行订餐,如下图所示: 北京师范大学珠海分校信息技术学院 第 29 页 共 44 页 外卖订单界面:供用户查看订单详细信息,如下图所示: 订单列表查看界面:供用户查看订单状态,如下图所示: 北京师范大学珠海分校信息技术学院 第 30 页 共 44 页 五五 、系统实现、系统实现 采用 S2SH 架构最大益处就是就是使我们的代码具良好的可维护性与可扩展性,项 目中许多逻辑可以编写在配置文件中而不用硬编码在代码中。本章介绍了如何构建自 己的 S2SH 环境以及如何编码实现功能。因为本文篇幅有限,下面以用户注册功能为例, 描述了如何通过 struts2+spring+hibernate 实现出来,其它功能实现原理基本一样。 5.15.1 开发工具和环境开发工具和环境 本系统采用 MyEclipse6.5 为开发工具,以 JAVA EE5.0 为开发平台,采用 MySQL5.0 数据库,应用服务器采用 tomcat6.0。 5.25.2 环境搭配环境搭配 在编码实现之前要先把 S2SH 环境先搭配好,搭配 S2SH 环境有以下几个步骤: (1) 要将必须的 jar 包放在工程路径下 WEB-INF/lib 文件夹下; (2) 编写 web.xml,包括对 struts2 过滤器、spring 监听器与字符过滤器配置, 如下所示: contextConfigLocation classpath:applicationContext.xml org.springframework.web.context.ContextLoaderListener struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 北京师范大学珠海分校信息技术学院 第 31 页 共 44 页 /* encodingFilter com.order.util.EncodingFilter encodingFilter /* (3) 对 applicationContext 配置文件的编写,配置 dbcp 数据池、sessionFactory 和 hibernate 实体映射文件的管理,如下所示: hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=false 北京师范大学珠海分校信息技术学院 第 32 页 共 44 页 hibernate.cache.use_second_level_cache=true hibernate.cache.use_query_cache=false vider_class=org.hibernate.cache.EhCacheProvider com/order/bean/Menu.hbm.xml com/order/bean/Order.hbm.xml com/order/bean/Item.hbm.xml com/order/bean/User.hbm.xml com/order/bean/Admin.hbm.xml (4)添加 struts.xml 到类路径下,放到项目的 src 文件夹下,如下所示: (5)启动 tomcat 服务器如果后台没有打印异常信息,就证明环境搭配正确,服务器 启动完毕后通过 hibernate 的自动建表方式能自动给我们生成数据表。 5.35.3 编码实现编码实现 本系统代码的编写顺序是先编写持久层(DAO) ,再编写业务逻辑层(Service) ,最 后编写表现层(Web) 。持久层包括实体类的编写、DAO 的编写与配置文件的编写;业务 逻辑层包括业务接口与业务实现类的编写,配置文件的编写;web 层包括 Action 的编 写,jsp 的编写,配置文件的编写。本系统的代码分配情况如下图所示: 北京师范大学珠海分校信息技术学院 第 33 页 共 44 页 5.3.1 DAO 层的编写 前面设计中我们所有实体类和 hibernate 映射文件都已经编写好了,各实体类的 Dao 接口方法已经设计好了,下面是对 UserDaoImpl 进行编写,其关键代码与说明如下: public class UserDaoImpl extends HibernateDaoSupport implements UserDao /添加用户 public void addUser(User user) this.getHibernateTemplate().saveOrUpdate(user); / 进行登录验证 public User checkLogin(String username, String password) List ul = this.getHibernateTemplate().find( “from User user where user.username=? and user.password=?“, new String username, password ); if (null != ul return null; /根据输入的用户名查询用户 public boolean getUserByUsername(String username) List ul = this.getHibernateTemplate().find( “from User user where user.username=?“, new String username ); if (null != ul else return false; /更新用户 public void updateUser(User user) this.getHibernateTemplate().update(user); /根据 userId 查询用户 public User getUserById(Integer userId) return (User) this.getHibernateTemplate().get(User.class, userId); /得到用户列表 public List listUsers() return (List)this.getHibernateTemplate().find(“from User user order by user.id desc“); 编写完毕后在 applicationContext.Xml 进行配置,利用 spring 的 ioc 注入 sessionFactory 实例,配置如下所示: 5.3.2 Service 层的编写 前面业务逻辑接口方法已经设计好,下面是对 UserServiceImpl 类进行编写,其关 键代码说明如下: public class UserServiceImpl implements UserService 北京师范大学珠海分校信息技术学院 第 35 页 共 44 页 private UserDao userDao; public UserDao getUserDao() return userDao; /利用spring的ioc功能注入userDao实例 public void setUserDao(UserDao userDao) this.userDao = userDao; /注册用户方法 public void addUser(User user) this.userDao.addUser(user); /查看用户是否已经存在 public boolean checkUserExist(String username) return this.userDao.getUserByUsername(username); /进行用户登录验证 public User checkLogin(String username, String password) return this.userDao.checkLogin(username, password); /对用户进行更新信息 public void updateUser(User user) this.userDao.updateUser(user); public boolean getUserByIdAndPassword(Integer userId, String password) User user = this.userDao.getUserById(userId); if (password.equals(user.getPassword() return true; return false; 编写完毕后,在 applicationContext.xml 进行配置,利用 spring 的 ioc 注入 userDao 实例,具体配置如下所示: 北京师范大学珠海分校信息技术学院 第 36 页 共 44 页 5.3.3 Web 层的编写 (1)注册页面 registerUser.jsp 页面的编写,其关键代码如下: 用户名 (用户名长度必须至少为5) 密码 (密码长度必须在6-12之间) 确认密码 (密码长度必须在6-12之间) 其页面效果如下图所示: 北京师范大学珠海分校信息技术学院 第 37 页 共 44 页 (2)RegisterUserAction 的编写,其关键代码与说明如下: public class RegisterUserAction extends ActionSupport private String username; private String password; private String password2; private UserService userService; private String flag; /以下省略相应的setXxx()/getXxx()方法; /action的业务方法 Override public String execute() throws Exception ActionContext context=ActionContext.getContext(); Map session=(Map)context.get(“session“); User user = new User(); user.setUsername(username); user.setPassword(password); this.userService.addUser(user);/注册新用户 user=this.userService.checkLogin(username, password); session.put(“user“, user);/将用户信息放在session里 return SUCCESS; /进入execte()方法之前会先调用v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论