外卖订餐系统设计_第1页
外卖订餐系统设计_第2页
外卖订餐系统设计_第3页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

..v毕业论文Web的外卖系统的设计与实现摘要随着外卖订外卖在高校越来越普及,传统的订外卖给顾客跟外卖店带来不方便,如何使订外卖更快速,更方便已成为众多高校学生关注的问题了。本外卖订外卖管理系统是针对高校外卖店进行具体的需求分析,采用OOA(面向对象分析)和采用UML工具辅助开发分析,基于S2SH(Struts2+Spring+Hibernate)架构进行设计和开发。论文主要描述外卖订外卖管理系统的开发流程,分别从需求分析和系统设计、详细设计与系统实现这几个阶段进行描述。关键词:WEB;订外卖管理系统;S2SH;OOAABSTRACTWithmoreandmorepopularinuniversitiesordertake-out,duetothetraditionaltelephonereservationforcustomerstobringinconveniencetake-awaymeal,howtomakemorequickly,moreconvenienthasbeetheconcernofthestudents.Thetake-awaymealmanagementsystemincollegesanduniversitiesistheconcretetake-awaydemandanalysis,usingobject-orientedanalysis(OOA)andusingUMLtoolstoassistinthedevelopment,usingStruts2-Spring-Hibernateframeworktodesignanddevelopment.Thesismainlydescribestake-awaymealmanagementsystemprocess,separatelyfromthedemandanalysisandsystemdesign,detaileddesignandrealizationofthissystemaredescribedseveralstages.Keywords:WEB;mealmanagementsystem;S2SH;OOA目录第1章绪论11.1背景11.2**工业大学外卖订外卖行业实际情况的分析11.3外卖订外卖管理系统的可行性分析及其作用11.4系统简介2第2章外卖系统设计与实现的关键技术32.1引言32.2struts2技术介绍32.3hibernate技术介绍52.4spring技术介绍52.5数据源技术介绍72.6小结8第3章系统需求分析93.1引言93.2UML 93.3需求分析93.4系统功能93.5小结11第4章系统设计124.1引言124.2系统总体结构124.3系统架构方式124.4建立数据库表144.4.1系统信息数据库表设计154.4.2映射文件的编写164.5详细设计194.5.1类设计194.5.2外卖订外卖系统流程分析214.5.3时序图分析224.5.4系统主要界面设计27第5章系统实现305.1引言305.1开发工具和环境305.2环境搭配305.3编码实现315.3.1DAO层的编写325.3.2Service层的编写325.3.3Web层的编写335.3.4ajax的应用355.4小结37结论38参考文献40致41..v第1章绪论1.1背景随着社会的不断进步和创新,人们的生活方式也发生了很大的改变,其中外卖和餐饮行业以每年平均22%的速度不断增长,很快成为了中国国民经济中的发展行业最快的之一。随着人们生活水平的不断提高,在城市中工作人群的步伐也越来越快,有时候根本没有时间自己做饭,这样就促进了外卖行业的发展,在我国大学内餐饮行业中的外卖行业就是发展最为迅速的一个行业,在**工业大学每年都有几家新的负责外卖的餐厅的的产生。外卖订外卖也已经成为**工业大学学生生活中不可或缺的一部分活动了,并且订外卖的方式也随着大学学生们的要求不断提高,不断的创新化和成熟化。1.2**工业大学外卖订外卖行业实际情况的分析学生们通过打给外卖餐厅服务员来定外卖是**工业大学当前使用人数最多的订外卖方式,其中比较大的外卖店有攸县大碗菜、祝家庄、水晶锅等都是采用订外卖方式,但通过订外卖方式存在不少的缺陷和不足,比如:效率和时间的问题、打的费成本问题等等。对当前**工业大学外卖订外卖行业的实际情况分析如下:外卖订外卖店铺很多并且菜单丰富,店铺之间一直都在竞争。外卖店铺很多都是服务员接听客户的并手动记录下外卖的信息,特别是在放学期间,外卖店铺订外卖很多时,很容易发生店铺订外卖打不通的情况。外卖店铺在接听客户订外卖时,由于客户不熟悉外卖店铺的菜单,在于服务员沟通时会浪费很多的时间,容易造成外卖订外卖占线的情况。外卖店铺不能及时的获取学生的喜好,容易造成有的菜浪费,有的菜不够的情况。经过分析**工业大学的周围的外卖行业的实际情况,很容易发现我国国内大学校园周围的外卖店基本上数都是依靠服务员记录的管理方式,很少外卖店实行外卖订外卖管理的信息化,因此订外卖造成了不少的问题。1.3外卖订外卖管理系统的可行性分析及其作用根据以上分析得出传统的依靠打订外卖不仅会造成学生的不方便,另外也对外卖店铺的生意产生了不良影响。经过分析得出实行订外卖有以下几个缺点:在每天中午和晚上餐厅高峰期间,外卖店铺如果只有一台是不够的,很容易造成占线、餐馆服务员忙不过来、比较仓促、导致双方态度恶劣,引起不必要的麻烦。学生打一般不知道餐厅有什么菜,所以导致点餐很麻烦,也要浪费很多的时间,如果餐馆去学生发传单,也会造成额外的开销。学生通过订外卖,总是会产生一定的费用,这个费用也是额外的开销。通过以上综合的分析,实行打订外卖不仅不会促进外卖行业的发展,反而会成为外卖行业发展的绊脚石,所以实行订外卖管理的信息化是势在必行的,如果外卖管理系统对学生订外卖流程实行信息化管理,不仅给订外卖顾客带来了很大的方便,也会给外卖店铺带来了经济和效率收益。订外卖管理系统信息化给顾客和外卖店带来了双赢。对于顾客,不用再担心高峰期打订外卖失败了,顾客可以通过浏览器在在外卖店铺网上浏览相关菜单,还可以添加自己喜欢的菜单,在一定程度上解决了曾经的那种打订外卖造成菜单出错的现象。也为外卖店铺带来了很大的收益和长远的利益,也能减少外卖店的人力和财力和物力,通过外卖管理系统信息化也能使外卖店能够及时掌握学生客户市场的信息,及时推出新菜系和实行更有效的经营管理策略。1.4系统简介基于WEB的外卖系统主要针对的是大学校园的订外卖流程和对订单处理实行信息化而搭建出来的B/S外卖购物平台,学生客户可以通过浏览器上网访问外卖,也可以实现网上浏览菜单和订自己喜欢的菜单到购物车中,外卖店铺服务员通过后台管理登陆该系统实现对订单的处理操作,通过外卖信息化处理给学生客户订外卖带来方便,同时也给外卖店管理人员带来了长远利益。第2章外卖系统设计与实现的关键技术2.1引言基于WEB的外卖管理系统的设计与实现选取S2SH架构作为基本设计理念来设计和开发,因为S2SH是SSH的升级版,以前的SSH架构中的用到的MVC框架是struts,而S2SH中的MVC框架用到的是struts2,在Struts框架方面有很大的改进,struts2与struts在实际配置方面有很大的不同,其中struts2的配置更灵活、开发更加方便,研究人员利用其开发的插件与hibernate和spring都能达到无缝集成,另外本管理系统采用了三层架构,首先用struts2处理的前端,用hibernate封装对数据库的访问操作,使用spring对struts2、hibernate和业务逻辑层中进行数据对象的管理和连接,struts2、hibernate和spring三个框架有个字不同的职责,这样分层设计有利于系统项目开发的分工,也能使项目开发达到更高的灵活性和可维护性。S2SH三层架构如图1.1所示。图1.1S2SH三层架构图2.2struts2技术介绍Struts2是目前功能比较完善的Web系统常用的开发框架,Struts2框架是Struts1.X的升级和完善的版本,Struts2框架集合了Struts1.X框架和WebWork框架功能中的优点。相对比较Struts1.X,Struts2在功能上已经有了非常大的改进,首先是取消了ActionForm,其次是降低了框架组件之间的耦合度,Struts2中的Action部件只是普通的Java类(POJO),使用它可以给模块测试的工作带来了极大的简便。Struts2也提供了强大的整合能力,支持多种返回结果类型,改进了Struts1.X的标签库,引入OGNL表达式和值栈的概念,给开发者带来了更好的体验[1]。另外从全局功能的角度来看,Struts2在一定程度上是一个pull(拉)功能类型的MVC理论的框架,另外它与传统类型的MVC框架理论的区别方面就在于在Struts2中,在其中Action部件担任的是模型的部分,而不是控制器的部分,虽然它的部分功能仍然有一些重合。“pull”的动作由视图发起,它直接从Action里拉取所需的数据,而不是另外还需要一个单独的模型对象存在[2]。图1.2MVC/Struts2架构图图1.2描述了MVC/Struts2架构中的模型层、视图层和控制器层的流程。如图所示:控制器层通过Struts2分布Servlet过滤器来实现功能。模型层在功能上通过Action部件实现,视图层则通过结果类型和结果组合实现。值栈和OGNL提供了公共的线程和通道,在一定程度上可以使得不同组件之间可以相互的集成。Struts2框架的可取之处就是使用了Action部件代理,Action代理可以根据系统预先配置好的配置文件,加载一系列的Servlet拦截器。由拦截器将HttpServletRequest参数解析出来,传入到Action部件当中。同样,Action部件处理的数据也是通过Servlet拦截器传入HttpServletResponse,然后由HttpServletRequest将数据结果传给用户。其实,上面的处理过程是典型的AOP理论的方式,Struts2处理过程模型如图1.3所示。图1.3Struts2处理过程模型图2.3hibernate技术介绍Hibernate是一个优秀的轻量级的ORM框架,开发人员可以通过使用Hibernate框架。在一定程度上允许开发人员使用面向对象的方式对系统的数据库进行检索访问。这样就可以避免使用JDBC方式连接和访问数据库,不会造成面向对象编程与面向过程编程在数据库方面的冲突。在这种方式下,很多系统的设计应用的面向对象分析、面向对象设计和面向对象编程有很大的相同性,这样让系统的分析和设计更加简洁。Hibernate框架作为JavaEE持久化的标准框架,让然使用传统的POJO做为系统的持久化类。同时具有低侵入式的系统设计这样不会造成代码方面的污染。系统的持久化类无需继承任何Hibernate基类,或者实现任何Hibernate接口,提供了极好的代码复用[4]。Hibernate框架与数据库、应用程序关联关系如图1.4所示。图1.4Hibernate关联关系图虽然Hibernate这个框架还处于发展的阶段,产生的时间不长,但是已经成为当今社会编程方面最流行的持久层解决方案,和另一个持久层框架iBATIS比较来说,Hibernate框架更具有面向对象的特征;另外和传统的EntityE的持久层解决方案相比较,Hibernate框架则使用低侵入式的设计理念,也就是完全采用普通的Java对象(POJO)类型,而不必继承Hibernate的某个父类或实现Hibernate框架中的某个功能接口。Hibernate框架是面向对象的程序设计语言和连接关系数据库之间的纽带,另外Hibernate框架也允许程序员采用面向对象的方式来操作关系数据库。2.4spring技术介绍Spring框架是一个优秀轻量级的Web开发框架。Spring框架是一个分层的架构,由7个模块组成,如下图1.5所示。Spring框架中比较重要的模块是核心容器模块,其他模块构建在这个核心的模块容器之上,核心模块是其它模块的基础,核心容器定义创建、配置和管理Bean的方式和操作,核心模块容器提供了Spring框架的基本功能。其中主要组件是BeanFactory组件,BeanFactory组件是工厂模式的实现类。BeanFactory组件通过使用反转控制(IOC)模式,将应用程序的配置文件和依赖性规X与实际的应用程序代码分隔开来。图1.5spring七大模块图组成Spring框架的每个模块(或组件)在一定的程度上都可以单独存在的,或者也可以与其他一个或多个模块一起实现某种功能而存在。其中每个模块的功能如下:核心模块容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory组件,BeanFactory组件是工厂模式的实现类。BeanFactory组件使用控制反转(IOC)模式将应用程序的配置文件和依赖性规X与实际的应用程序代码分隔开来。Spring上下文模块:Spring上下文模块是一个配置文件,它的作用是向Spring框架提供上下文的信息。Spring上下文信息包括企业服务,例如JNDI组件、E组件、电子、国际化组件、校验组件和调度功能等。SpringAOP模块:通过配置管理特性,SpringAOP模块可以直接将面向对象的编程功能全部集成到了Spring框架之中。所以使用SpringAOP模块可以很简单地使Spring框架管理的任何对象支持都SpringAOP模块。SpringAOP模块为基于Spring的应用程序中的对象提供了事务管理服务等功能。程序开发人员通过使用SpringAOP模块,可以不用依赖E组件,就毫无问题地将声明性的事务管理等功能全都集合到应用程序代码中。SpringDAO模块:JDBCDAO模块中的抽象层概念提供了有很大实用性的异常理论结构,程序员可用该结构去统计异常处理和不同数据库供应商之间抛出的错误信息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。SpringDAO的面向JDBC的异常遵从通用的DAO异常层次结构。SpringORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有这些都遵从Spring的通用事务和DAO异常层次结构。SpringWeb模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,Spring框架支持与JakartaStruts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。SpringMVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText和POI[5]。2.5数据源技术介绍JNDI(JavaNamingandDirectoryInterface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的AP,通过名称将资源与服务进行关联[1]。在系统中使用JNDI连接池连接Oracle数据库。连接池是在内存中预设好一定数量的连接对象,以备用户在进行数据库操作时直接使用,与传统数据库连接比较,使用数据池技术数据库操作性能得到提升,通过连接池管理数据库的连接与释放、提高了系统资源的使用效率[1]。Java程序访问数据库时,只需要从连接池中取出空闲状态的数据库连接;当程序访问数据库结束,再将数据库连接放回连接池[1]。在系统服务器Tomcat中配置内容如下所示:Tomcat配置文件:<Resourcename="jdbc"auth="Container"type="javax.sql.DataSource"maxActive="8"maxIdle="4"maxWait="10000"username="shao"password="199451Shao"driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:localhost:1521:orclsh"/>其中标签的功能如下:Name:表示指定的jndi名称。Auth:表示认证方式,一般为Container。Type:表示数据源床型,使用标准的javax.sql.DataSource。maxActive:表示连接池当中最大的数据库连接。maxIdle:表示最大的空闲连接数。maxWait:当池的数据库连接已经被占用的时候,最大等待时间。Username:表示数据库用户名。Password:表示数据库用户的密码。driverClassName:表示JDBCDRIVER。url:表示数据库URL地址。2.6小结基于WEB的外卖订外卖系统的设计与实现主要分为管理员操作和客户操作,系统从需求分析到模型设计,再到代码编写都是按照MVC三层的设计理念,将系统简化为视图层(View)、控制层(Controller)和模型层(Model),并且在View层与Model层之间使用接口Service连接,Model层和Controller层之间使用DAO接口,降低了层与层之间的耦合度,为以后修改代码更加方便。同时在检索数据库时建立一个数据次,可以减少打开和关闭数据库的次数,有效地提高系统的运行效率,对经常登录的用户可以带来很快的反应速度。第3章系统需求分析3.1引言本系统采用OOA(面向对象分析)和UML(UnifiedModelingLanguage)工具为指导理论,第三章主要对系统的需求分析以及系统设计和功能等进行分析描述。3.2UMLUML(UnifiedModelingLanguage)是一种用来创建程序模型的图形语言(即带有语意的一种图形记号)[7],常用的UML图有对象类图、时序图、用例图、活动图和状态图。3.3需求分析软件需求分析是软件开发过程中生存期中非常重要的一步,是起到决定性作用的一步。需求分析是软件定义过程中一个必不可少的阶段,它的作用是让开发者明白系统需要做些什么,能完成什么功能。本外卖订外卖管理系统包括两个子系统,前台订外卖和后台管理,前台订外卖是供用户浏览菜系和提交订单进行订外卖;后台管理是供管理员进行外卖订单管理、菜系管理、菜单管理。外卖订餐管理系统主要的作用是满足学生和个人之间的吃饭需求,要解决目前餐厅信息阻塞,许多的资源机会而被流失,所以网上外卖订餐管理系统的出现很好的解决的这一问题。该系统分为前台和后台,前台是个人会员用的,个人通过注册成为会员,然后登录系统,可以查看餐厅大量的外卖信息,并可以选择自己喜欢的菜添加到购物车。系统后台管理是管理员对本系统进行管理的平台,管理员可以更新菜系信息和菜单信息,并可以对订餐的状态进行管理。3.4系统功能本系统采用面向对象分析方法,下面是对本系统的两个子系统进行分析说明。通过需求分析跟系统设计和功能的分析可以得出该系统的总体结构如图3.1所示。图3.1系统总体框架图前台管理系统供用户浏览菜系,进行菜单添加到购物车,用户可以对购物车进行增加、清除,用户提交订单后可以在订单列表查看外卖订单配送状态,用例如图3.2所示。图3.2用户用例图后台管理系统有菜系管理、订单管理、菜单管理三大模块。菜系管理:可以对菜系进行查看、添加、修改和删除。用例如图3.3所示。图3.3菜系管理用例图订单管理:可以对外卖订单的状态进行查看,改变。用例如图3.4所示。图3.4订单管理用例图菜单管理:可以对菜单进行查看、添加、修改和删除。用例如图3.5所示。图3.5菜单管理用例图3.5小结系统项目在开始之前首要任务就是系统需求的分析,根据搜集的需求分析得出系统的模型设计,在需求分析时要根据实际情况分析,往往需求的分析是否全面影响着后续系统的编写。第4章系统设计4.1引言本系统的设计采用OOA(面向对象分析)和利用UML工具辅助开发设计。4.2系统架构方式本系统使用MVC三层架构模式作为系统的设计理念,即视图层,业务逻辑层,数据访问层,三层之间都相互独立,视图层与业务逻辑层通过接口进行通信,业务逻辑层与数据访问层也是通过接口进行通信,数据访问层是直接跟数据库(DB)通信,可以直接操作数据库,这样系统设计具有很好的解耦性,每一层内容的逻辑的改变和更新不会影响到另一层的逻辑代码,这样对项目以后的可维护性及代码更新具有很大方便作用,三层架构流程如图4.1所示。图4.1三层架构图4.3数据库设计数据库设计包括了数据库需求分析、概念设计以及逻辑设计。数据库的需求分析是根据开发系统的功能对数据库进行需求分析来得出数据库需要的表以及表属性。概念设计是根据需求分析来设计数据库的实体结构图以及ER图。逻辑设计是根据概念设计中的ER模型设计数据库的表结构。4.3.1数据库需求分析本系统使用的是Oracle数据库,从系统的需求分可以看出,系统需要建立用户表、菜系表、购物车表、订单表。从功能模块看,还需要菜单表、订单详细表、购物车项表。系统的数据库包含如下:个人用户数据:用来存储个人信息,如账号,密码联系方式等。菜系数据:用来存储菜系信息,如菜系名称,菜系内容等。菜单数据:用来存放菜单信息,如菜单名称,介绍等。订单数据:用来存放订单信息,如**,地址等。购物车数据:用来存放外卖信息,如菜单数量,菜单价格等。订单详细数据:用来订单详细信息,如订单所属用户,订单项等。购物车项数据:用来存放购物车项信息,如菜单信息,数量等。4.3.2E-R模型在数据库的概念设计中以实体联系法建立E-R模型,用E-R模型表示概念结构,得到外卖订餐管理系统的概念模型。E-R模型的基本元素是:实体、联系和属性。实体是数据对象,是应用中能够区分的客观的存在的事物;联系表示一个或多个实体之间的关联关系;能够描述实体对象某一特征的属性称为实体属性,在实体中,能够唯一标识实体的作用的属性,它被称之为“实体标识符”。根据以上数据库的需求分析可以得到系统中需要的实体类型,进一步可以分析实体所需要的属性以及各实体之间的联系。系统中的实体结构图以及系统E-R模型图如图4.2至5.2所示。图4.2会员实体图会员实体属性有:会员ID、用户名、密码、等,这些都是不可少的;其中ID更是作为标识存在。图4.3订单实体图订单实体属性有:订单ID、订单时间、订单价格等,这些都是不可少的;其中ID更是作为标识存在。图4.4菜系实体图菜系实体属性有:菜系ID、菜系名称、菜系描述等,这些都是不可少的;其中ID更是作为标识存在。图4.5菜系实体图菜单实体属性有:菜单ID、菜单名称、菜单描述等,这些都是不可少的;其中ID更是作为标识存在。4.4建立数据库表很多程序员都是使用传统的数据库设计,就是首先设计E-R图,然后在通过E-R图生成数据表。使用MVC三层设计理念,就是先建立系统实体类和编写实体类的映射文件,接着通过实体类和映射文件之间的关系自动生成相关的数据库表。这种开发模式主要体现出来的是OOD思想,数据的持久化在某一方面都是非常机械呆板的,基本没有什么需要变动的,hibernate框架就把这些独特的行为抽象出来自动完成,并在转换的效率上进行优化等,让我们很容易的就能实现数据库的移植。本系统是采用先建立实体类和编写映射文件,然后根据之间的关系自动生成数据表的开发模式。系统设计的实体类如下表4.1所示。表4.1实体类设计表4.4.1系统信息数据库表设计如下表4.2所示:数据库表Category是存储外卖系统中菜系的信息。其中id字段是作为菜系的序号,name字段是作为菜系的名称,description字段是作为菜系的介绍。表4.2实体类Category如下表4.3所示:数据库表Order是存储外卖系统中外卖订单的信息。其中id字段作为订单的序号,Ordertime字段是作为订单的提交时间,price字段是作为订单的价格,state字段的作用是标记订单的状态,user_id字段作为订单所属用户的序号。表4.3实体类Order如下表4.4所示:数据库表User是存储该系统中注册客户的个人信息。其中id字段作为用户的序号,username字段是作为用户的登陆名,password字段作为用户登录的密码,cellphone字段的作用是存储用户的联系,address字段作为用户外卖配送的地址,sex字段是存储用户的性别信息,types字段存储用户的会员类型。表4.4实体类User如下表4.5所示:数据库表OrderItem是存储外卖系统中外卖订单项的信息。其中id字段作为订单项的序号,quantity字段是作为订单项的数量,price字段是作为订单项的价格,menu_id字段作为订单项中包含的菜单的序号,order_id字段作为订单项所属订单的序号。表4.5实体类OrderItem如下表4.6所示:数据库表Menu是存储外卖系统中外卖菜单的信息。其中id字段作为菜单的序号,name字段是存储菜单的名称信息,description字段是存储菜单的介绍信息,image字段的作用是存储菜单的实际图片,price字段的作用是作为菜单的售价,Category_id字段的作用是存储该菜单所属菜系类别的序号信息。表4.6实体类Menu4.4.2映射文件的编写在该系统中Web.xml文件的功能使初始化配置信息。context.xml文件的功能使配合JNDI连接数据库。Web.xml文件如下:<"xmlversion="1.0"encoding="UTF-8"><web-appxmlns:xsi=./2001/XMLSchema-instancexmlns="java.sun./xml/ns/javaee"xmlns:web="java.sun./xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="java.sun./xml/ns/javaeejava.sun./xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>FD</display-name><filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping><filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>HtmlFilter</filter-name> <filter-class>.filter.HtmlFilter</filter-class> </filter> <filter-mapping> <filter-name>HtmlFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping><listener> <listener-class>.filter.IndexListener</listener-class> </listener><servlet><servlet-name>UserServlet</servlet-name><servlet-class>.web.client.UserServlet</servlet-class></servlet><servlet><servlet-name>MenuServlet</servlet-name><servlet-class>.web.manager.MenuServlet</servlet-class></servlet><servlet><servlet-name>CategoryServlet</servlet-name><servlet-class>.web.manager.CategoryServlet</servlet-class></servlet><servlet><servlet-name>BaseServlet</servlet-name><servlet-class>.web.manager.BaseServlet</servlet-class></servlet><servlet><servlet-name>ManagerOrderServlet</servlet-name><servlet-class>.web.manager.ManagerOrderServlet</servlet-class></servlet><servlet><servlet-name>IndexServlet</servlet-name><servlet-class>.web.client.IndexServlet</servlet-class></servlet><servlet><servlet-name>BuyServlet</servlet-name><servlet-class>.web.client.BuyServlet</servlet-class></servlet><servlet><servlet-name>OrderServlet</servlet-name><servlet-class>.web.client.OrderServlet</servlet-class></servlet><servlet-mapping><servlet-name>UserServlet</servlet-name><url-pattern>/client/UserServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>MenuServlet</servlet-name><url-pattern>/manager/MenuServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>CategoryServlet</servlet-name><url-pattern>/manager/CategoryServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>BaseServlet</servlet-name><url-pattern>/BaseServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>ManagerOrderServlet</servlet-name><url-pattern>/manager/ManagerOrderServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>IndexServlet</servlet-name><url-pattern>/client/IndexServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>BuyServlet</servlet-name><url-pattern>/client/BuyServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>OrderServlet</servlet-name><url-pattern>/client/OrderServlet</url-pattern></servlet-mapping>context.xml文件如下:<"xmlversion="1.0"encoding="UTF-8"><Context><Resourcename="jdbc"auth="SH"type="javax.sql.DataSource"username="shao"password="199451Shao"driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin::1521:ORCLSH"maxActive="8"maxIdle="4"/></Context>4.5详细设计这一章节主要内容是描述了怎么样对系统的对象类进行分析和设计、系统的流程分析以及如何使用时序图对系统中的对象交互信息等进行详细的描述。4.5.1类设计类关系通过面向对象分析得出在本系统中用户跟订单、订单项,订单跟订单项,购物车跟订单项,菜系跟菜单都是一对多关系,用户跟购物车,订单跟购物车,菜单跟订单项都是一对一关系。其关联关系如图4.3所示。图4.3类关联图DAO与业务逻辑类设计1.UserDao与BusinessService设计如下图4.4所示:BusinessService依赖于UserDao。图4.4UserDao与逻辑类关联图CategoryDao与BusinessService设计如图4.5所示:BusinessService依赖于CategoryDao。图4.5CategoryDao与逻辑类关联图MenuDao与BusinessService类设计如下图4.6示:BusinessService依赖于MenuDao。图4.6MenuDao与逻辑类关联图OrderDao与BusinessService类设计如下图4.7示:BusinessService依赖于OrderDao。图4.7OrderDao与逻辑类关联图4.5.2外卖订外卖系统流程分析1.用户通过浏览器订购外卖流程:图4.8用户订购外卖流程图2.后台管理员订单处理流程:图4.9管理员订单处理流程图4.5.3时序图分析1.登录用例实现A、用户登录时序图图4.10用户登录时序图B、描述1)输入信息输入用户和密码,提交登录信息;2)表单验证当接收到提交表单UserServlet会调用userLogin(HttpServletRequestrequest,HttpServletResponseresponse)方法进行用户信息查询,并将用户登录信息封装传递到BusinessService中。3)获取BusinessService接口UserServlet类获取BusinessService接口,以便调用BusinessService中的方法userLogin(username,password)。4)查询用户信息在BusinessService中userLogin(username,password)会调用UserDaoImpl方法,根据用户名和密码在已经注册的数据库中查询是否存在该用户。5)返回结果如果用户名和密码输入正确进入系统主页面,否则提示用户名或密码输入错误。2.注册用户用例实现A、用户注册时序图图4.11用户注册时序图B、描述1)输入用户信息输入注册用户名、注册密码、性别、联系、居住地址、注册会员类型等信息。2)表单验证用户输入注册信息之后,点击注册系统会将用户表单信息提交到UserServlet中,UserServlet接收到用户注册表单之后会调用RegisterFormBean中的validate方法进行表单验证,主要验证用户名是否合法、用户设置的密码是否符合要求等。如果用户输入不合法就会转向message.jsp提示用户输入不合法,如果输入用户名已存在也会转向message.jsp并进行提示。3)获取BusinessService接口用户提交的注册表单经过RegisterFormBean中的validate方法进行表单验证通过之后,UserServlet通过BusinessService接口调用BusinessServiceImpl中的方法RegisterUser(Useruser),在user中封装着用户注册的信息4)保存到数据库在RegisterUser(Useruser)方法中通过创建UserDao对象调用UserDaoImpl中的方法add(user),将用户在注册界面输入的信息保存到数据库中,并返回注册成功的结果。5)返回结果当用户信息注册成功后,UserDaoImpl将会把用户注册成功的结果封装的返回到BusinessService,当BusinessServic接收到注册返回的结果之后将结果返回到UserServlet中,UserServlet将结果返回到WEB层,在页面中显示给用户注册结果。3.添加菜单到购物车并提交订单用例实现A、用户购买时序图图4.12用户购买时序图B、描述1)选择菜单通过浏览器浏览餐厅的菜单,可以浏览菜单的价格、配料和图片,选择自己要加入购物车的菜单,点击购买。2)表单验证当用户浏览之后点击购买之后将菜单信息提交到BuyServlet中,BuyServlet调用OrderServlet中的findOrder(request,response)方法检查用户是否已经登录,如果没有登录提示登录信息,如果用户已经登录,将登录结果返回到BuyServlet中。BuyServlet通过创建BusinessServiceImpl的对象调用buymenu(Cartcart,Menumenu,Stringaccess)方法。3)进入业务方法在buymenu(Cartcart,Menumenu,Stringaccess)方法中通过Cart类的对象调用add(Menumenu,Stringaccess)。4)转向CartCart是一个通用的购物车,将接收到的菜单信息添加到购物车中并将数据进行更新。5)返回到购物车界面转到listcart.jsp页面将数据显示给用户。6)提交订单用户可以点击购物车查看购物车里的菜单,也可以在购物车里对菜单的数量进行修改和删除,等到用户确认无误后点击结算就会提交订单。7)获取BusinessService接口调用BusinessService的createOrder(Cartcart,Useruser)方法进行订单的添加。8)添加到数据库调用OrderDao的add(Orderorder)方法将订单数据添加到数据库。9)返回结果返回到系统界面,用户可以在系统主界面点击”查看订单”,可以查看到订单的详情。4.管理员添加菜系用例实现A、管理员添加菜系时序图图4.13管理员添加菜系时序图B、描述1)登录系统后台管理员登录系统的后台。2)进行业务方法点击”菜系管理”下面的”添加菜系”,manager会调用CategoryServlet中的addCategoryUI(request,response),将要添加的菜系信息传输到CategoryServlet中。3)获取BusinessService接口使用CategoryServlet类获取BusinessService接口,调用接口中的addCategory(Categorycategory)方法。4)添加到数据库调用CategoryDao的addCategory(Categorycategory)方法将管理员新输入的菜系信息添加到数据库中。5)返回结果添加完成后,返回系统界面。5.管理员处理订单用例实现A、管理员处理订单时序图图4.14管理员处理订单时序图B、描述1)访问订单列表管理员登录后台系统后访问订单列表,可以查看订单的详细和对订单状态的修改和删除。2)进行业务方法管理员登录之后,管理员点击”查看订单”,系统会ManagerServlet中调用方法orderState(HttpServletRequestrequest,HttpServletResponseresponse)查询符合条件的订单列表,并显示出来。3)获取BusinessService接口ManagerOrderServlet类获取BusinessService接口,当管理员对订单操作时就会调用BusinessService关于操作订单状态的方法。4)更新到数据库管理员对订单的操作会调用OrderDao的update(Orderorder)方法更改订单数据的状态并更新到数据库。5)返回结果更改订单状态后,返回到系统界面。4.5.4系统主要界面设计客户登陆界面:客户通过浏览器访问系统前台页面,在登录处输入用户名、密码,点击”登录”按钮,如下图所示。图4.15客户登录界面图用户注册界面:用户输入用户名、密码、性别、手机、住址和客户类型进行注册,如下图所示。图4.16用户注册界面图添加菜系界面:管理人员输入菜系名、菜系介绍添加菜系,如下图所示。图4.17添加菜系界面图前台订外卖主界面:用户通过点击菜系类型,可以浏览不同类型菜系下的菜单,点击”购买”将菜单添加到购物车中,如下图所示。图4.18订外卖界面图购物车界面:用户可以对外卖数量进行更改和删除,也可以选择部分结算,如下图所示。图4.19购物车界面图详细界面:供用户查看订单详细信息,如下图所示。图4.20详细界面图第5章系统实现5.1引言系统设计理论使用S2SH架构理论的最大的特点就是就是可以使我们的系统代码具有良好的可维护性与可扩展性,在系统项目中许多逻辑模块可以集成项目在配置文件中,而不用硬编码在代码中。第五章主要介绍了怎样构建自己的S2SH环境以及如何编码实现预定的系统功能,以用户注册为例。5.1开发工具和环境本系统采用MyEclipse2013为开发工具,以JAVAEE6.0为开发平台,采用oracle11g数据库,系统服务器采用tomcat7.0。5.2环境搭配(1)要将必须的jar包放在工程路径下WEB-INF/lib文件夹下;(2)编写web.xml,包括对struts2过滤器、spring监听器与字符过滤器配置,如下所示。<"xmlversion="1.0"encoding="UTF-8"><web-appversion="2.5"xmlns="java.sun./xml/ns/javaee" xmlns:xsi="./2001/XMLSchema-instance" xsi:schemaLocation="java.sun./xml/ns/javaee java.sun./xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class>.order.util.EncodingFilter</filter-class> </filter> <filter-mapping><filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>添加struts.xml到类路径下,放到项目的src文件夹下,如下所示:<"xmlversion="1.0"encoding="UTF-8""><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts><packagename="vote"extends="struts-default"namespace="/Order"></package></struts>启动tomcat服务器如果后台没有打印异常信息,就证明环境搭配正确,服务器启动完毕。5.3编码实现本系统代码的编写顺序是先编写持久层(DAO),再编写业务逻辑层(Service),最后编写表现层(Web)。持久层包括实体类的编写、DAO的编写与配置文件的编写;业务逻辑层包括业务接口与业务实现类的编写,配置文件的编写;web层包括html的编写,jsp的编写,配置文件的编写。本系统的代码分配情况如下图所示。图5.1系统代码图5.3.1DAO层的编写在环境搭建好的情况下,各实体类的Dao接口方法也设计好的情况下,下面是对UserDaoImpl进行编写,其关键代码与说明如下。publicclassUserDaoImplimplementsUserDao{/**add添加用户*/ publicvoidadd(Useruser){ //TODOAuto-generatedmethodstub try{ QueryRunnerrunner=newQueryRunner(JNDI.getSource()); Stringsql="insertintouseres"+"(id,username,password,cellphone,address,sex,types)"+ "values(",",",",",",")"; Object[]params={user.getId(),user.getUsername(),user.getPassword(),user.getCellphone(),user.getAddress(), user.getGender(),user.getUsertype()}; runner.update(sql,params); }catch(Exceptione){ thrownewRuntimeException(e); } }/**find根据ID查找用户*/ Override publicUserfind(Stringid){ //TODOAuto-generatedmethodstub try{ QueryRunnerrunner=newQueryRunner(JNDI.getSource()); Stringsql="select*fromusereswnereid="; Object[]params={id}; System.out.println("statr"); return(User)runner.query(sql,params,newBeanHandler(User.class)); }catch(Exceptione){ thrownewRuntimeException(e); } }/**用户登录监测*/ Override publicUserfind(Stringusername,Stringpassword){ //TODOAuto-generatedmethodstub try{ QueryRunnerrunner=newQueryRunner(JNDI.getSource()); Stringsql="select*fromusereswhereusername="andpassword="; Object[]params={username,password}; return(User)runner.query(sql,params,newBeanHandler(User.class)); }catch(Exceptione){ thrownewRuntimeException(e); } }5.3.2Service层的编写下面是对BusinessServiceImpl类进行编写,其关键代码说明如下。publicclassBusinessServiceImplimplementsBusinessService{/***注册用户*/ publicvoidregisterUser(Useruser){ udao=DaoFactory.getInstance().createDao(UserDao.class); if(this.findUser(user.getId())!=null){ thrownewRuntimeException("用户已经存在!"); } udao.add(user);//add用户 }/***根据ID查找用户*/ publicUserfindUser(Stringid){ udao=DaoFactory.getInstance().createDao(UserDao.class); returnudao.find(id); } /** *用户登录 */ publicUseruserLogin(Stringusername,Stringpassword){ udao=DaoFactory.getInstance().createDao(UserDao.class); returnudao.find(username,password); }}5.3.3Web层的编写注册页面register.jsp页面的编写,其关键代码如下。<scripttype="text/javascript"> functiondosubmit(){ makePreference(); returntrue; } functionmakePreference(){ /*创建隐藏域对象并保存到表单中*/ varinput2=document.createElement("input"); input2.type="hidden"; ="method"; input2.value="add"; document.getElementById("userRegister").appendChild(input2); } </script></head><body><formid="userRegister"action="${pageContext.request.contextPath}/client/UserServlet"method="post"onsubmit="returndosubmit()"> 用户名:<inputtype="text"name="username"/><br/> 密码:<inputtype="password"name="password"/><br/> 性别:<inputtype="radio"name="gender"value="男"/>男 <inputtype="radio"name="gender"value="女"/>女<br/> 手机:<inputtype="text"name="cellphone"/><br/> 住址:<inputtype="text"name="address"/><br/>类型:<c:forEachvar="type"items="${usertype}"> <inputtype="radio"name="usertype"value="${type}">${type} </c:forEach><br/> <inputtype="submit"value="注册"> <inputtype="reset"value="重置"><br/> </form></body> 其页面效果如下图所示。图5.2系统注册界面图RegisterFormBean的编写,其关键代码与说明如下。publicclassRegisterFormBean{ //表单提交过来的信息都是String privateStringusername; //用户** privateStringpassword; //用户密码 privateStringcellphone; //用户手机 privateStringaddress; //用户地址 privateStringgender; //用户性别 privateStringusertype; //用户类型privateMap<String,String>errors=newHashMap<String,String>();privatebooleanisOK=true;//..以下省略相应的set**x()/get**x()方法; Override publicbooleanvalidate(){ checkUserName(); checkPassWord(); returnisOK; } /** *校验用户名,private类型 *matches方法告诉这个字符串是否在给定的正则表达式匹配。返回true则是匹配. */ privatevoidcheckUserName(){ if(this.username==null||this.username.trim().equals(")) { this.isOK=false; errors.put("username","用户名不能为空"); }else{ if(!this.username.matches("[a-zA-Z]{3,8}")){ this.isOK=false; errors.put("username","用户名必须是三到八位的字母"); } } } /** *校验密码 * */ privatevoidcheckPassWord(){ if(this.password==null||this.password.trim().equals(")){ this.isOK=false; errors.put("password","密码不能为空"); }else{ if(!this.password.matches("\\d{3,8}")){ this.isOK=false; errors.put("password","密码必须是三到八位的数字"); } } }}(3)struts.xml的编写<actionname="registerUser"class="registerUserAction"> <resultname="success"type="redirect"> /Order/listOnMenus.action </result> <resultname="input">/User/registerUser.jsp</result> <interceptor-refname="defaultStack"></interceptor-ref></action>(4)界面效果展示如果用户输入不合法进行提交就不能注册成功,其效果如下图所示。图5.3校验界面图5.3.4ajax的应用本系统适当的采用ajax技术来加强用户的体验,用户登录时输入用户名点击登录时就会检索数据库是否存在改用户,并校验用户密码。当

温馨提示

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

最新文档

评论

0/150

提交评论