精彩文档
〔2016届〕
本科毕业设计〔论文〕资料
题目名称 : 基于 Web的外卖系统的设计与实现 学院〔部〕 :
计算机与通信学院
专业 :
计算机科学与技术 学生某某 :
邵辉 班级 : 计算机1202 学号: 指导教师某某 : 曾志高 职称: 副教授 最终评定成绩 :
某某工业大学教务处
word
2016届
精彩文档本科毕业设计〔论文〕资料第一局部 毕业论文
word
精彩文档
〔2016届〕
本科毕业设计〔论文〕资料
题目名称 : 基于 Web的外卖系统的设计与实现 学院〔部〕 :
计算机与通信学院
专业 :
计算机科学与技术 学生某某 :
邵辉 班级 : 计算机122 学号: 指导教师某某 : 曾志高 职称: 副教授 最终评定成绩 :
2016年5月
word
某某工业大学
本科毕业论文〔设计〕诚信声明
本人X重声明:所呈交的毕业论文〔设计〕,题目《基于 Web的外卖系统的设计与实现》是本人在指导教师的指导下,进展研究工作所取得的成果。对本文的研究作出重要贡献的个人和集体,均已在文章以明确方式注明。除此之外,本论文〔设计〕不包含任何其他个人或集体已经发表或撰写过的作品成果。本人完全意识到本声明应承当的责任。
作者签名: 邵辉
日 期: 2016 年 5 月 20 日
精彩文档
word
摘 要
随着外卖订外卖在高校越来越普与,传统的订外卖给顾客跟外卖店带来不方便,如何使订外卖更快速,更方便已成为众多高校学生关注的问题了。本外卖订外卖管理系统是针对高校外卖店进展具体的需求分析,采用OOA〔面向对象分析〕和采用UML工具辅助开发分析,基于S2SH〔Struts2+Spring+Hibernate〕架构进展设计和开发。论文主要描述外卖订外卖管理系统的开发流程,分别从需求分析和系统设计、详细设计与系统实现这几个阶段进展描述。
关键词:WEB;订外卖管理系统;S2SH;OOA
精彩文档
word
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 bee 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.
Key words: WEB; meal management system; S2SH; OOA
精彩文档
word
目 录
第1章绪论1 1.1 背景1
1.2 某某工业大学外卖订外卖行业实际情况的分析1 1.3 外卖订外卖管理系统的可行性分析与其作用1 1.4 系统简介2
第2章外卖系统设计与实现的关键技术3 2.1 引言3
2.2 struts2技术介绍3 2.3 hibernate技术介绍5 2.4 spring技术介绍5 2.5 数据源技术介绍7 2.6 小结7 第3章系统需求分析9 3.1 引言9 3.2 UML9 3.3 需求分析9 3.4 系统功能9 3.5 小结11 第4章系统设计12 4.1 引言12
4.2 系统总体结构12 4.3 系统架构方式12 4.4 建立数据库表14
4.4.1 系统信息数据库表设计15 4.4.2 映射文件的编写17 4.5 详细设计19 4.5.1 类设计19
4.5.2 外卖订外卖系统流程分析21 4.5.3 时序图分析22 4.5.4 系统主要界面设计27 第5章系统实现30 5.1 引言30
精彩文档
word
5.1 开发工具和环境30 5.2 环境搭配30 5.3 编码实现31
5.3.1 DAO层的编写32 5.3.2 Service层的编写33 5.3.3 Web层的编写34 5.3.4 ajax的应用36 5.4 小结38 结论39 参考文献41 致谢42
精彩文档
word
第1章 绪 论
1.1 背景
随着社会的不断进步和创新,人们的生活方式也发生了很大的改变,其中外卖和餐饮行业以每年平均22%的速度不断增长,很快成为了中国国民经济中的开展行业最快的之一。随着人们生活水平的不断提高,在城市中工作人群的步伐也越来越快,有时候根本没有时间自己做饭,这样就促进了外卖行业的开展,在我国大学内餐饮行业中的外卖行业就是开展最为迅速的一个行业,在某某工业大学每年都有几家新的负责外卖的餐厅的的产生。外卖订外卖也已经成为某某工业大学学生生活中不可或缺的一局部活动了,并且订外卖的方式也随着大学学生们的要求不断提高,不断的创新化和成熟化。
学生们通过打给外卖餐厅服务员来定外卖是某某工业大学当前使用人数最多的订外卖方式,其中比拟大的外卖店有攸县大碗菜、祝家庄、水晶锅等都是采用订外卖方式,但通过订外卖方式存在不少的缺陷和不足,比如:效率和时间的问题、打的费本钱问题等等。对当前某某工业大学外卖订外卖行业的实际情况分析如下:
外卖订外卖店铺很多并且菜单丰富,店铺之间一直都在竞争。
外卖店铺很多都是服务员接听客户的并手动记录下外卖的信息,特别是在放学期间,外卖店铺订外卖很多时,很容易发生店铺订外卖打不通的情况。
外卖店铺在接听客户订外卖时,由于客户不熟悉外卖店铺的菜单,在于服务员沟通时会浪费很多的时间,容易造成外卖订外卖占线的情况。
外卖店铺不能与时的获取学生的喜好,容易造成有的菜浪费,有的菜不够的情况。 经过分析某某工业大学的周围的外卖行业的实际情况,很容易发现我国国内大学校园周围的外卖店根本上数都是依靠服务员记录的管理方式,很少外卖店实行外卖订外卖管理的信息化,因此订外卖造成了不少的问题。
1.3 外卖订外卖管理系统的可行性分析与其作用
根据以上分析得出传统的依靠打订外卖不仅会造成学生的不方便,另外也对外卖店铺的生意产生了不良影响。经过分析得出实行订外卖有以下几个缺点:
在每天中午和晚上餐厅顶峰期间,外卖店铺如果只有一台是不够的,很容易造成占线、餐馆服务员忙不过来、比拟仓促、导致双方态度恶劣,引起不必要的麻烦。
学生打一般不知道餐厅有什么菜,所以导致点餐很麻烦,也要浪费很多的时间,如果餐馆去学生发传单,也会造成额外的开销。
学生通过订外卖,总是会产生一定的费用,这个费用也是额外的开销。
精彩文档
word
通过以上综合的分析,实行打订外卖不仅不会促进外卖行业的开展,反而会成为外卖行业开展的绊脚石,所以实行订外卖管理的信息化是势在必行的,如果外卖管理系统对学生订外卖流程实行信息化管理,不仅给订外卖顾客带来了很大的方便,也会给外卖店铺带来了经济和效率收益。订外卖管理系统信息化给顾客和外卖店带来了双赢。对于顾客,不用再担心顶峰期打订外卖失败了,顾客可以通过浏览器在在外卖店铺网上浏览相关菜单,还可以添加自己喜欢的菜单,在一定程度上解决了曾经的那种打订外卖造成菜单出错的现象。也为外卖店铺带来了很大的收益和长远的利益,也能减少外卖店的人力和财力和物力,通过外卖管理系统信息化也能使外卖店能够与时掌握学生客户市场的信息,与时推出新菜系和实行更有效的经营管理策略。
1.4 系统简介
基于WEB的外卖系统主要针对的是大学校园的订外卖流程和对订单处理实行信息化而搭建出来的B/S外卖购物平台,学生客户可以通过浏览器上网访问外卖,也可以实现网上浏览菜单和订自己喜欢的菜单到购物车中,外卖店铺服务员通过后台管理登陆该系统实现对订单的处理操作,通过外卖信息化处理给学生客户订外卖带来方便,同时也给外卖店管理人员带来了长远利益。
精彩文档
word
第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所示。
2.2 struts2技术介绍
Struts2是目前功能比拟完善的Web系统常用的开发框架,Struts2框架是Struts 1.X的升级和完善的版本,Struts 2框架集合了Struts 1.X框架和WebWork框架功能中的优点。相比照拟Struts 1.X,Struts2在功能上已经有了非常大的改良,首先是取消了ActionForm,其次是降低了框架组件之间的耦合度,Struts 2中的Action部件只是普通的Java类〔POJO〕,使用它可以给模块测试的工作带来了极大的简便。Struts2也提供了强大的整合能力,支持多种返回结果类型,改良了Struts 1.X的标签库,引入OGNL表达式和值栈的概念,给开发者带来了更好的体验[1]。另外从全局功能的角度来看,Struts2在一定程度上是一个pull〔拉〕功能类型的MVC理论的框架,另外它与传统类型的MVC框架理论的区别方面就在于在Struts2中,在其中Action部件担任的是模型的局部,而不是控制器的局部,虽然它的局部功能仍然有一些重合。“pull〞的动作由视图发起,它直接从Action里拉取所需的数据,而不是另外还需要一个单独的模型对象存在[2]。
精彩文档
word
图1.2 MVC/Struts2架构图
图1.2描述了MVC/Struts2架构中的模型层、视图层和控制器层的流程。如下列图:控制器层通过Struts2分布Servlet过滤器来实现功能。模型层在功能上通过Action部件实现,视图层如此通过结果类型和结果组合实现。值栈和OGNL提供了公共的线程和通道,在一定程度上可以使得不同组件之间可以相互的集成。Struts2框架的可取之处就是使用了Action部件代理,Action代理可以根据系统预先配置好的配置文件,加载一系列的Servlet拦截器。由拦截器将HttpServletRequest参数解析出来,传入到Action部件当中。同样,Action部件处理的数据也是通过Servlet拦截器传入HttpServletResponse,然后由HttpServletRequest将数据结果传给用户。其实,上面的处理过程是典型的AOP理论的方式,Struts2处理过程模型如图1.3所示。
Action代理拦截器1拦截器2拦截器3Action类 图1.3 Struts2处理过程模型图
精彩文档
word
2.3 hibernate技术介绍
Hibernate是一个优秀的轻量级的ORM框架,开发人员可以通过使用Hibernate框架。在一定程度上允许开发人员使用面向对象的方式对系统的数据库进展检索访问。这样就可以防止使用JDBC方式连接和访问数据库,不会造成面向对象编程与面向过程编程在数据库方面的冲突。在这种方式下,很多系统的设计应用的面向对象分析、面向对象设计和面向对象编程有很大的一样性,这样让系统的分析和设计更加简洁。
Hibernate框架作为Java EE持久化的标准框架,让然使用传统的POJO做为系统的持久化类。同时具有低侵入式的系统设计这样不会造成代码方面的污染。系统的持久化类无需继承任何Hibernate基类,或者实现任何Hibernate接口,提供了极好的代码复用[4]。Hibernate框架与数据库、应用程序关联关系如图1.4所示。
图1.4 Hibernate关联关系图
虽然Hibernate这个框架还处于开展的阶段,产生的时间不长,但是已经成为当今社会编程方面最流行的持久层解决方案,和另一个持久层框架iBATIS比拟来说,Hibernate框架更具有面向对象的特征;另外和传统的Entity E的持久层解决方案相比拟,Hibernate框架如此使用低侵入式的设计理念,也就是完全采用普通的Java对象〔POJO〕类型,而不必继承Hibernate的某个父类或实现Hibernate框架中的某个功能接口。Hibernate框架是面向对象的程序设计语言和连接关系数据库之间的纽带,另外Hibernate框架也允许程序员采用面向对象的方式来操作关系数据库。
2.4 spring技术介绍
Spring框架是一个优秀轻量级的Web开发框架。Spring框架是一个分层的架构,由7个模块组成,如如下图1.5所示。Spring框架中比拟重要的模块是核心容器模块,其他模块构建在这个核心的模块容器之上,核心模块是其它模块的根底,核心容器定义创建、配置和管理Bean的方式和操作,核心模块容器提供了Spring框架的根本功能。其
精彩文档
word
中主要组件是BeanFactory组件,BeanFactory组件是工厂模式的实现类。BeanFactory组件通过使用反转控制〔IOC〕模式,将应用程序的配置文件和依赖性规X与实际的应用程序代码分隔开来。
图1.5 spring七大模块图
组成Spring框架的每个模块〔或组件〕在一定的程度上都可以单独存在的,或者也可以与其他一个或多个模块一起实现某种功能而存在。其中每个模块的功能如下:
核心模块容器:核心容器提供 Spring 框架的根本功能。核心容器的主要组件是 BeanFactory组件,BeanFactory组件是工厂模式的实现类。BeanFactory组件使用控制反转(IOC)模式将应用程序的配置文件和依赖性规X与实际的应用程序代码分隔开来。
Spring 上下文模块:Spring 上下文模块是一个配置文件,它的作用是向Spring框架提供上下文的信息。Spring上下文信息包括企业服务,例如JNDI组件、E组件、电子、国际化组件、校验组件和调度功能等。
Spring AOP模块:通过配置管理特性,Spring AOP模块可以直接将面向对象的编程功能全部集成到了Spring框架之中。所以使用Spring AOP模块可以很简单地使Spring 框架管理的任何对象支持都Spring AOP模块。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务等功能。程序开发人员通过使用Spring AOP模块,可以不用依赖E组件,就毫无问题地将声明性的事务管理等功能全都集合到应用程序代码中。
Spring DAO模块:JDBC DAO模块中的抽象层概念提供了有很大实用性的异常理论结构,程序员可用该结构去统计异常处理和不同数据库供给商之间抛出的错误信息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量〔例如打开和关闭连接〕。Spring DAO的面向JDBC的异常遵从通用的 DAO 异常层次结构。
Spring ORM:Spring框架插入了假如干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从Spring的通用事务和DAO 异常层次结构。
精彩文档
word
Spring Web 模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,Spring 框架支持与Jakarta Struts的集成。Web模块还简化了处理多局部请求以与将请求参数绑定到域对象的工作。
Spring MVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText和POI[5]。
JNDI〔Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的AP,通过名称将资源与服务进展关联[1]。在系统中使用JNDI连接池连接Oracle数据库。连接池是在内存中预设好一定数量的连接对象,以备用户在进展数据库操作时直接使用,与传统数据库连接比拟,使用数据池技术数据库操作性能得到提升,通过连接池管理数据库的连接与释放、提高了系统资源的使用效率[1]。Java程序访问数据库时,只需要从连接池中取出空闲状态的数据库连接;当程序访问数据库完毕,再将数据库连接放回连接池[1]。在系统服务器Tomcat中配置内容如下所示: Tomcat配置文件:
其中标签的功能如下: Name:表示指定的jndi名称。 Auth:表示认证方式,一般为Container。 Type:表示数据源床型,使用标准的javax.sql.DataSource。 maxActive:表示连接池当中最大的数据库连接。 maxIdle:表示最大的空闲连接数。 maxWait:当池的数据库连接已经被占用的时候,最大等待时间。 Username:表示数据库用户名。 Password:表示数据库用户的密码。 driverClassName:表示JDBC DRIVER。 url:表示数据库URL地址。 2.6 小结 基于WEB的外卖订外卖系统的设计与实现主要分为管理员操作和客户操作,系统从需求分析到模型设计,再到代码编写都是按照MVC三层的设计理念,将系统简化为视图层(View)、控制层(Controller)和模型层(Model),并且在View层与Model层之间使用接口 精彩文档 word Service连接,Model层和Controller层之间使用DAO接口,降低了层与层之间的耦合度,为以后修改代码更加方便。同时在检索数据库时建立一个数据次,可以减少打开和关闭数据库的次数,有效地提高系统的运行效率,对经常登录的用户可以带来很快的反响速度。 精彩文档 word 第3章 系统需求分析 3.1 引言 本系统采用OOA(面向对象分析)和UML〔Unified Modeling Language〕工具为指导理论,第三章主要对系统的需求分析以与系统设计和功能等进展分析描述。 3.2 UML UML〔Unified Modeling Language〕是一种用来创建程序模型的图形语言〔即带有语意的一种图形记号〕,常用的UML图有对象类图、时序图、用例图、活动图和状态图。 [7] 3.3 需求分析 软件需求分析是软件开发过程中生存期中非常重要的一步,是起到决定性作用的一步。需求分析是软件定义过程中一个必不可少的阶段,它的作用是让开发者明白系统需要做些什么,能完成什么功能。 本外卖订外卖管理系统包括两个子系统,前台订外卖和后台管理,前台订外卖是供用户浏览菜系和提交订单进展订外卖;后台管理是供管理员进展外卖订单管理、菜系管理、菜单管理。 外卖订餐管理系统主要的作用是满足学生和个人之间的吃饭需求,要解决目前餐厅信息阻塞,许多的资源机会而被流失,所以网上外卖订餐管理系统的出现很好的解决的这一问题。 该系统分为前台和后台,前台是个人会员用的,个人通过注册成为会员,然后登录系统,可以查看餐厅大量的外卖信息,并可以选择自己喜欢的菜添加到购物车。 系统后台管理是管理员对本系统进展管理的平台,管理员可以更新菜系信息和菜单信息,并可以对订餐的状态进展管理。 3.4 系统功能 本系统采用面向对象分析方法,下面是对本系统的两个子系统进展分析说明。 通过需求分析跟系统设计和功能的分析可以得出该系统的总体结构如图3.1所示。 精彩文档 word 外卖订餐管理系统 前台订餐 后台管理 用户登录、注册、浏览菜式、提交订单 菜式管理 订单管理 统计报表 系统管理 图3.1 系统总体框架图 前台管理系统供用户浏览菜系,进展菜单添加到购物车,用户可以对购物车进展增加、去除,用户提交订单后可以在订单列表查看外卖订单配送状态,用例如图3.2所示。 浏览菜系和菜单登录添加到购物车用户注册查看购物车用户查看订单提交订单 图3.2 用户用例图 后台管理系统有菜系管理、订单管理、菜单管理三大模块。 菜系管理:可以对菜系进展查看、添加、修改和删除。用例如图3.3所示。 添加菜系查看菜系管理员删除菜系更新菜系 图3.3 菜系管理用例图 订单管理:可以对外卖订单的状态进展查看,改变。用例如图3.4所示。 精彩文档 word 删除订单查看订单明细管理员确认发货修改订单配送状态 图3.4 订单管理用例图 菜单管理:可以对菜单进展查看、添加、修改和删除。用例如图3.5所示。 添加菜单查看菜单管理员更新菜单删除菜单 图3.5 菜单管理用例图 3.5 小结 系统项目在开始之前首要任务就是系统需求的分析,根据搜集的需求分析得出系统的模型设计,在需求分析时要根据实际情况分析,往往需求的分析是否全面影响着后续系统的编写。 精彩文档 word 第4章 系统设计 4.1 引言 本系统的设计采用OOA〔面向对象分析〕和利用UML工具辅助开发设计。 4.2 系统架构方式 本系统使用MVC三层架构模式作为系统的设计理念,即视图层,业务逻辑层,数据访问层,三层之间都相互独立,视图层与业务逻辑层通过接口进展通信,业务逻辑层与数据访问层也是通过接口进展通信,数据访问层是直接跟数据库(DB)通信,可以直接操作数据库,这样系统设计具有很好的解耦性,每一层内容的逻辑的改变和更新不会影响到另一层的逻辑代码,这样对项目以后的可维护性与代码更新具有很大方便作用,三层架构流程如图4.1所示。 浏览器展现层业务逻辑层数据访问层数据库 图4.1 三层架构图 4.3 数据库设计 数据库设计包括了数据库需求分析、概念设计以与逻辑设计。数据库的需求分析是根据开发系统的功能对数据库进展需求分析来得出数据库需要的表以与表属性。概念设计是根据需求分析来设计数据库的实体结构图以与ER图。逻辑设计是根据概念设计中的ER模型设计数据库的表结构。 本系统使用的是Oracle数据库,从系统的需求分可以看出,系统需要建立用户表、菜系表、购物车表、订单表。从功能模块看,还需要菜单表、订单详细表、购物车项表。系统的数据库包含如下: 1. 个人用户数据:用来存储个人信息,如账号,密码联系方式等。 2. 菜系数据:用来存储菜系信息,如菜系名称,菜系内容等。 3. 菜单数据:用来存放菜单信息,如菜单名称,介绍等。 4. 订单数据:用来存放订单信息,如某某,地址等。 5. 购物车数据:用来存放外卖信息,如菜单数量,菜单价格等。 6. 订单详细数据:用来订单详细信息,如订单所属用户,订单项等。 7. 购物车项数据:用来存放购物车项信息,如菜单信息,数量等。 在数据库的概念设计中以实体联系法建立E-R模型,用E-R模型表示概念结构,得 精彩文档 word 到外卖订餐管理系统的概念模型。 E-R模型的根本元素是:实体、联系和属性。实体是数据对象,是应用中能够区分的客观的存在的事物;联系表示一个或多个实体之间的关联关系;能够描述实体对象某一特征的属性称为实体属性,在实体中,能够唯一标识实体的作用的属性,它被称之为“实体标识符〞。 根据以上数据库的需求分析可以得到系统中需要的实体类型,进一步可以分析实体所需要的属性以与各实体之间的联系。系统中的实体结构图以与系统E-R模型图如图4. 2至5.2所示。 用户名密码地址会员ID会员性别联系电话客户类型 图4.2 会员实体图 会员实体属性有:会员ID、用户名、密码、等,这些都是不可少的;其中ID更是作为标识存在。 订单时间订单价格订单序号订单订单状态所属用户ID 订单实体属性有:订单ID、订单时间、订单价格等,这些都是不可少的;其中ID更是作为标识存在。 精彩文档 word 序号菜系菜系名称菜系描述 菜系实体属性有:菜系ID、菜系名称、菜系描述等,这些都是不可少的;其中ID更是作为标识存在。 菜单名称菜单描述菜单序号菜单菜单图片所属菜系序号菜单价格 菜单实体属性有:菜单ID、菜单名称、菜单描述等,这些都是不可少的;其中ID更是作为标识存在。 4.4 建立数据库表 很多程序员都是使用传统的数据库设计,就是首先设计E-R图,然后在通过E-R图生成数据表。使用MVC三层设计理念,就是先建立系统实体类和编写实体类的映射文件,接着通过实体类和映射文件之间的关系自动生成相关的数据库表。这种开发模式主要表现出来的是OOD思想,数据的持久化在某一方面都是非常机械呆板的,根本没有什么需要变动的,hibernate框架就把这些独特的行为抽象出来自动完成,并在转换的效率上进展优化等,让我们很容易的就能实现数据库的移植。本系统是采用先建立实体类和编写映射文件,然后根据之间的关系自动生成数据表的开发模式。系统设计的实体类如下表4.1所示。 精彩文档 word 表4.1 实体类设计表 类名 User Order OrderItem Category Menu Cart CartItem 功能说明 用户类 订单类 订单项类 菜系类 菜单类 购物车类 购物车项类 4.4.1 系统信息数据库表设计 如下表4.2所示:数据库表Category是存储外卖系统中菜系的信息。其中id字段是作为菜系的序号,name字段是作为菜系的名称,description字段是作为菜系的介绍。 表4.2 实体类Category 字段名 id name description 类型 Varchar2(30) Varchar2(30) varchar2(200) 是否为空 —— 否 否 是否主键 是 —— —— 备注 序号 菜系名称 菜系描述 如下表4.3所示:数据库表Order是存储外卖系统中外卖订单的信息。其中id字段 作为订单的序号,Ordertime字段是作为订单的提交时间,price字段是作为订单的价格,state字段的作用是标记订单的状态,user_id字段作为订单所属用户的序号。 表4.3 实体类Order 字段名 id ordertime price state user_id 类型 Varchar2(40) date number number Varchar2(100) 是否为空 —— 否 否 否 否 是否主键 是 —— —— —— —— 备注 序号 订单时间 订单价格 订单状态 所属用户id 如下表4.4所示:数据库表User是存储该系统中注册客户的个人信息。其中id字段 作为用户的序号,username字段是作为用户的登陆名,password字段作为用户登录的密码,cellphone字段的作用是存储用户的联系,address字段作为用户外卖配送的地址,sex字段是存储用户的性别信息,types字段存储用户的会员类型。 精彩文档 word 表4.4 实体类User 字段名 id username password cellphone address sex types 类型 Varchar2(40) Varchar2(40) Varchar2(40) Varchar2(40) Varchar2(100) Varchar2(4) Varchar2(20) 是否为空 —— 否 否 否 否 否 否 是否主键 是 —— —— —— —— —— —— 备注 序号 用户名 密码 地址 性别 客户类型 如下表4.5所示:数据库表OrderItem是存储外卖系统中外卖订单项的信息。其中id字段作为订单项的序号,quantity字段是作为订单项的数量,price字段是作为订单项的价格,menu_id字段作为订单项中包含的菜单的序号,order_id字段作为订单项所属订单的序号。 表4.5 实体类OrderItem 字段名 id quantity price menu_id order_id 类型 Varchar2(50) date number varchar2(60) varchar2(50) 是否为空 —— 否 否 否 否 是否主键 是 —— —— —— —— 备注 序号 数量 购物项价格 菜单序号 所属订单序号 如下表4.6所示:数据库表Menu是存储外卖系统中外卖菜单的信息。其中id字段 作为菜单的序号,name字段是存储菜单的名称信息,description字段是存储菜单的介绍信息,image字段的作用是存储菜单的实际图片,price字段的作用是作为菜单的售价,Category_id字段的作用是存储该菜单所属菜系类别的序号信息。 表4.6 实体类 Menu 字段名 id name description image price Category_id 类型 Varchar2(30) Varchar2(30) varchar2(100) varchar2(100) number Varchar2(30) 是否为空 —— 否 否 否 否 否 是否主键 是 —— —— —— —— —— 备注 序号 菜单名称 菜单描述 菜单图片 菜单价格 所属菜系序号 精彩文档 word 4.4.2 映射文件的编写 在该系统中Web.xml文件的功能使初始化配置信息。context.xml文件的功能使配合JNDI连接数据库。 Web.xml文件如下: 精彩文档 word context.xml文件如下: word type=\"javax.sql.DataSource\" username=\"shao\" password=\"199451Shao\" driverClassName=\"oracle.jdbc.driver.OracleDriver\" url=\"jdbc:oracle:thin:127.0.0.1:1521:ORCLSH\" maxActive=\"8\" maxIdle=\"4\"/> 4.5 详细设计 这一章节主要内容是描述了怎么样对系统的对象类进展分析和设计、系统的流程分析以与如何使用时序图对系统中的对象交互信息等进展详细的描述。 4.5.1 类设计 类关系 通过面向对象分析得出在本系统中用户跟订单、订单项,订单跟订单项,购物车跟订单项,菜系跟菜单都是一对多关系,用户跟购物车,订单跟购物车,菜单跟订单项都是一对一关系。其关联关系如图4.3所示。 用户User1111菜系Category1购物车Cart111订单Order*1111*1**菜单Menu1*1购物车项CartItem*订单项OrderItem* 图4.3 类关联图 DAO与业务逻辑类设计 如如下图4.4所示:BusinessService依赖于UserDao。 精彩文档 word < 2. CategoryDao 与 BusinessService设计 如图4.5所示:BusinessService依赖于CategoryDao。 < 3. MenuDao 与 BusinessService类设计 如如下图4.6示:BusinessService依赖于MenuDao。 < word 图4.6 MenuDao与逻辑类关联图 4. OrderDao 与BusinessService类设计 如如下图4.7示:BusinessService依赖于OrderDao。 < 4.5.2 外卖订外卖系统流程分析 1.用户通过浏览器订购外卖流程: 浏览菜单列表查看订单添加到购物车提交订单是购物车页面结算是是否登录否是否正确输入用户名和密码提示用户登录否提示用户名或密码错误 图4.8 用户订购外卖流程图 精彩文档 word 2.后台管理员订单处理流程: 登录后台系统输入用户名和密码修改订单状态提示错误是否正确是进入系统后台查看订单列表 图4.9 管理员订单处理流程图 4.5.3 时序图分析 1.登录用例实现 A、用户登录时序图 用户:registerTrue.jsp访问登录页面提交表单UserServletBusinessServiceUserDaoImpluserLogin(request,response)userLogin(username, password)find(String username, String password)是否存在用户是否登录显示登录成功界面用户密码是否正确 B、描述 1〕输入信息 输入用户和密码,提交登录信息; 2〕表单验证 精彩文档 word 当接收到提交表单UserServlet会调用userLogin(HttpServletRequest request,HttpServletResponse response)方法进展用户信息查询,并将用户登录信息封装传递到BusinessService中。 3〕获取BusinessService接口 UserServlet类获取BusinessService接口,以便调用BusinessService中的方法userLogin(username,password)。 4〕查询用户信息 在BusinessService中userLogin(username,password)会调用UserDaoImpl方法,根据用户名和密码在已经注册的数据库中查询是否存在该用户。 5〕返回结果 如果用户名和密码输入正确进入系统主页面,否如此提示用户名或密码输入错误。 2.注册用户用例实现 A、用户注册时序图 用户:register.jsp访问注册页面提交表单UserServletRegisterFormBeanBusinessServiceUserDaoImplvalidate()校验成功registerUser(User user)add(user)是否成功添加是否成功添加是否成功添加显示结果 B、描述 1〕输入用户信息 输入注册用户名、注册密码、性别、联系、居住地址、注册会员类型等信息。 2〕表单验证 用户输入注册信息之后,点击注册系统会将用户表单信息提交到UserServlet中,UserServlet接收到用户注册表单之后会调用RegisterFormBean中的validate方法进展表单验证,主要验证用户名是否合法、用户设置的密码是否符合要求等。如果用户输入不合法就会转向message.jsp提示用户输入不合法,如果输入用户名已存在也会转向message.jsp并进展提示。 精彩文档 word 3〕获取BusinessService接口 用户提交的注册表单经过RegisterFormBean中的validate方法进展表单验证通过之后,UserServlet通过BusinessService接口调用BusinessServiceImpl中的方法RegisterUser(User user),在user中封装着用户注册的信息 4〕保存到数据库 在RegisterUser(User user)方法中通过创建UserDao对象调用UserDaoImpl中的方法add(user),将用户在注册界面输入的信息保存到数据库中,并返回注册成功的结果。 5〕返回结果 当用户信息注册成功后,UserDaoImpl将会把用户注册成功的结果封装的返回到BusinessService,当BusinessServic接收到注册返回的结果之后将结果返回到UserServlet中,UserServlet将结果返回到WEB层,在页面中显示给用户注册结果。 3.添加菜单到购物车并提交订单用例实现 A、用户购置时序图 用户:访问categorypage.jspBuyServletOrderServletBusinessServiceCart提交findOrder(request,response)校验结果buymenu(Cart cart,Menu menu,String access)add(Menu menu,String access)是否提交成功是否提交成功是否提交成功显示结果 图4.12 用户购置时序图 B、描述 1〕选择菜单 通过浏览器浏览餐厅的菜单,可以浏览菜单的价格、配料和图片,选择自己要参加购物车的菜单,点击购置。 2〕表单验证 当用户浏览之后点击购置之后将菜单信息提交到BuyServlet中,BuyServlet调用OrderServlet中的findOrder(request,response)方法检查用户是否已经登录,如果没有登录提示登录信息,如果用户已经登录,将登录结果返回到BuyServlet中。BuyServlet通过创建BusinessServiceImpl的对象调用buymenu(Cart cart,Menu 精彩文档 word menu,String access)方法。 3〕进入业务方法 在buymenu(Cart cart,Menu menu,String access)方法中通过Cart类的对象调用add(Menu menu,String access)。 4〕转向Cart Cart是一个通用的购物车,将接收到的菜单信息添加到购物车中并将数据进展更新。 5〕返回到购物车界面 转到listcart.jsp页面将数据显示给用户。 6〕提交订单 用户可以点击购物车查看购物车里的菜单,也可以在购物车里对菜单的数量进展修改和删除,等到用户确认无误后点击结算就会提交订单。 7〕获取BusinessService接口 调用BusinessService的createOrder(Cart cart,User user)方法进展订单的添加。 8〕添加到数据库 调用 OrderDao的add(Order order) 方法将订单数据添加到数据库。 9〕返回结果 返回到系统界面,用户可以在系统主界面点击〞查看订单〞,可以查看到订单的详情。 4.管理员添加菜系用例实现 A、管理员添加菜系时序图 管理员:访问manager.jspCategoryServletBusinessServiceCategoryDaoaddCategoryUI(request,response)addCategory(Category category)add(Category category)是否添加成功是否添加成功是否添加成功显示结果 图4.13 管理员添加菜系时序图 B、描述 精彩文档 word 1〕登录系统后台 管理员登录系统的后台。 2〕进展业务方法 点击〞菜系管理〞下面的〞添加菜系〞,manager会调用CategoryServlet中的addCategoryUI(request,response),将要添加的菜系信息传输到CategoryServlet中。 3〕获取BusinessService接口 使用CategoryServlet类获取BusinessService接口,调用接口中的addCategory(Category category)方法。 4〕添加到数据库 调用CategoryDao的addCategory(Category category)方法将管理员新输入的菜系信息添加到数据库中。 5〕返回结果 添加完成后,返回系统界面。 5.管理员处理订单用例实现 A、管理员处理订单时序图 管理员:ManagerOrderServlet访问listorder.jspManagerOrderServletBusinessServiceOrderDaoorderState(request,response)操作订单操作订单是否操作成功是否操作成功是否操作成功显示结果是否操作成功 图4.14 管理员处理订单时序图 B、描述 1〕访问订单列表 管理员登录后台系统后访问订单列表,可以查看订单的详细和对订单状态的修改和删除。 2〕进展业务方法 管理员登录之后,管理员点击〞查看订单〞,系统会ManagerServlet中调用方法orderState(HttpServletRequest request,HttpServletResponse response)查询符合条件的订单列表,并显示出来。 精彩文档 word 3〕获取BusinessService接口 ManagerOrderServlet类获取BusinessService接口,当管理员对订单操作时就会调用BusinessService关于操作订单状态的方法。 4〕更新到数据库 管理员对订单的操作会调用OrderDao的update〔Order order〕方法更改订单数据的状态并更新到数据库。 5〕返回结果 更改订单状态后,返回到系统界面。 4.5.4 系统主要界面设计 客户登陆界面:客户通过浏览器访问系统前台页面,在登录处输入用户名、密码,点击〞登录〞按钮,如如下图所示。 图4.15 客户登录界面图 用户注册界面:用户输入用户名、密码、性别、手机、住址和客户类型进展注册,如如下图所示。 添加菜系界面:管理人员输入菜系名、菜系介绍添加菜系,如如下图所示。 精彩文档 word 图4.17 添加菜系界面图 前台订外卖主界面:用户通过点击菜系类型,可以浏览不同类型菜系下的菜单,点击〞购置〞将菜单添加到购物车中,如如下图所示。 图4.18 订外卖界面图 购物车界面:用户可以对外卖数量进展更改和删除,也可以选择局部结算,如如下图所示。 图4.19 购物车界面图 详细界面:供用户查看订单详细信息,如如下图所示。 精彩文档 word 图4.20 详细界面图 精彩文档 word 第5章 系统实现 5.1 引言 系统设计理论使用S2SH架构理论的最大的特点就是就是可以使我们的系统代码具有良好的可维护性与可扩展性,在系统项目中许多逻辑模块可以集成项目在配置文件中,而不用硬编码在代码中。第五章主要介绍了怎样构建自己的S2SH环境以与如何编码实现预定的系统功能,以用户注册为例。 5.1 开发工具和环境 本系统采用MyEclipse 2013为开发工具,以JAVA EE6.0为开发平台,采用oracle 11g数据库,系统服务器采用tomcat7.0。 5.2 环境搭配 (1) 要将必须的jar包放在工程路径下WEB-INF/lib文件夹下; (2) 编写web.xml,包括对struts2过滤器、spring监听器与字符过滤器配置,如下所示。 精彩文档 word (3)添加struts.xml到类路径下,放到项目的src文件夹下,如下所示: \"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN\" \"struts.apache.org/dtds/struts-2.0.dtd\"> (4)启动tomcat服务器如果后台没有打印异常信息,就证明环境搭配正确,服务器启动完毕。 5.3 编码实现 本系统代码的编写顺序是先编写持久层〔DAO〕,再编写业务逻辑层〔Service〕,最后编写表现层〔Web〕。持久层包括实体类的编写、DAO的编写与配置文件的编写;业务逻辑层包括业务接口与业务实现类的编写,配置文件的编写;web层包括html的编写,jsp的编写,配置文件的编写。本系统的代码分配情况如如下图所示。 精彩文档 word 图5.1 系统代码图 5.3.1 DAO层的编写 在环境搭建好的情况下,各实体类的Dao接口方法也设计好的情况下,下面是对UserDaoImpl进展编写,其关键代码与说明如下。 public class UserDaoImpl implements UserDao{ /** add 添加用户*/ public void add(User user) { // TODO Auto-generated method stub try { QueryRunner runner=new QueryRunner(JNDI.getSource()); String sql=\"insert into useres\"+\"(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 (Exception e) { throw new RuntimeException(e); } } /* * find 根据ID查找用户*/ Override public User find(String id) { 精彩文档 word // TODO Auto-generated method stub try { QueryRunner runner=new QueryRunner(JNDI.getSource()); String sql=\"select * from useres wnere id=?\"; Object[] params={id}; System.out.println(\"statr\"); return (User)runner.query(sql, params, new BeanHandler(User.class)); } catch (Exception e) { throw new RuntimeException(e); } } /** 用户登录监测*/ Override public User find(String username, String password) { // TODO Auto-generated method stub try { QueryRunner runner=new QueryRunner(JNDI.getSource()); String sql=\"select * from useres where username=? and password=?\"; Object[] params={username,password}; return (User) runner.query(sql, params, new BeanHandler(User.class)); } catch (Exception e) { throw new RuntimeException(e); } } 5.3.2 Service层的编写 下面是对BusinessServiceImpl类进展编写,其关键代码说明如下。 public class BusinessServiceImpl implements BusinessService{ /** * 注册用户 */ public void registerUser(User user) { udao=DaoFactory.getInstance().createDao(UserDao.class); if(this.findUser(user.getId())!=null){ throw new RuntimeException(\"用户已经存在!\"); } udao.add(user);//add用户 } /** * 根据ID查找用户 */ public User findUser(String id){ udao=DaoFactory.getInstance().createDao(UserDao.class); return udao.find(id); } /** * 用户登录 */ public User userLogin(String username, String password) { udao=DaoFactory.getInstance().createDao(UserDao.class); return udao.find(username, password); 精彩文档 word }} 5.3.3 Web层的编写 (1)注册页面register.jsp页面的编写,其关键代码如下。 其页面效果如如下图所示。 精彩文档 word 图5.2 系统注册界面图 (2)RegisterFormBean的编写,其关键代码与说明如下。 public class RegisterFormBean { //表单提交过来的信息都是String private String username;//用户某某 private String password;//用户密码 private String cellphone;//用户手机 private String address;//用户地址 private String gender;//用户性别 private String usertype;//用户类型 private Map private boolean isOK=true; //..以下省略相应的setXxx()/getXxx()方法; Override public boolean validate(){ checkUserName(); checkPassWord(); return isOK; } /** * 校验用户名,private类型 * matches方法告诉这个字符串是否在给定的正如此表达式匹配。返回true如此是匹配. */ private void checkUserName(){ 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\用户名必须是三到八位的字母\"); 精彩文档 word } } } /** * 校验密码 * */ private void checkPassWord(){ 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 的编写 〔4〕界面效果展示 如果用户输入不合法进展提交就不能注册成功,其效果如如下图所示。 图5.3 校验界面图 5.3.4 ajax的应用 本系统适当的采用ajax技术来加强用户的体验,用户登录时输入用户名点击登录时就会检索数据库是否存在改用户,并校验用户密码。 当用户需要注销登录时,使用ajax局部刷新页面. 精彩文档 word (1)用户登录中ajax的使用 〔3〕界面效果展示: 用户在登录系统首页时,出现的界面效果如如下图所示。 图5.4 登录界面图 5.4 小结 基于WEB的外卖订外卖系统设计过程中严格按照三层理论设计,用户通过浏览器浏览餐厅菜单,相当于从客户端发送请求到Servlet容器,Servlet容器解析该请求之后创建Servlet实例,调用init()方法、调用service()方法,Servlet实例将响应的信息发给Servlet容器,servlet容器将响应的信息打包之后发送到客户端,客户端将响应的信息通过浏览器显示出来,当用户完毕这个会话过程,Servlet容器会调用destory()方法销毁Servlet实例。在系统设计中为了提高客户体验的满意程度,在客户登录时使用ajax实现局部刷新的功能,使用户登录不必等待太久时间。 精彩文档 word 结 论 经过了将近三个月的时间,从开始做系统的需求分析到现在的论文完毕,中间发生了很多也学到了很多书本上学习不到的东西。甚至有好几次都想过放弃,从一开始的毫无头绪到后来慢慢的有了一定的经验之后,就觉得不是那么的难了,也就更有劲头去做,去静下心来好好的分析和设计。由于系统题目是《基于WEB的外卖订外卖系统的设计与实现》,所以我把客户对象定位于在校大学生。首先开始需求分析,对周围外卖订外卖实际情况的总结和分析得出,大学生很多人都喜欢外卖订外卖,首先是方便,可以在宿舍等待就可以,有的时候课程比拟多还可以提前一个小时订外卖,等回到宿舍之后就可以拿到自己的外卖,很是方便。但是大学生对外卖订外卖这一方面也有很多的建议,比如有很多的外卖订外卖都是订外卖的,餐厅在比拟繁忙的时候很容易出错,很容易引起客户的不满,如何实现外卖订外卖的信息化是势在必行的。 经过了需求分析之后,开始着手系统的系统分析,我是按照MVC三层设计理论来设计系统,首先是设计Dao层,经过分析设计了UserDao、OrderDao、MenuDao和CategoryDao,这些Dao接口里分别添加了对User、Order、Menu和Category相关的抽象方法。经过了完整的系统分析之后,根据系统分析的结果设计数据库表,经过最后的设计,在数据库中新建了五个数据库表,分别是Users、Menu、Category、Order和OrderItem。系统设计了Dao层和数据库后,开始设计数据逻辑层,也是系统中最为复杂的局部。根据学校毕业课题的要求分析,外卖订外卖系统应该分为用户登录和管理员登录,用户和管理员有不同的权限等,同时客户可以注册为会员,客户和会员可以通过浏览器浏览外卖订外卖系统中的菜单,只要登录系统才可以提交外卖订单,管理员在后台可以实现对菜单的管理和外卖订单的管理等。在系统实现的过程中,遇到了很多的问题,系统在调试的时候也会出现很多bug,可是经过向别人请教或者上网查资料,在根据自己的实际情况去解决这些问题。在系统连接数据库这一方面,如果直接将系统与数据库连接,那么每一次系统对数据库的操作都会打开和关闭数据库一次,这样会造成系统反响时间延长,不利于客户对系统的体验,经过查资料知道,为了解决这个问题,可以使用数据源的方式去连接数据库,在此之前也没有接触过数据源方式连接,只好去上网查一些资料。为了实现数据源方式连接系统,在系统中新建了一个JNDI.java文件,主要操作是使用JNDI获取数据源对象并返回,比如代码中的 Context Context enCtx = (Context) new InitialContext().lookup(\" java:p/env\");DataSource ds=(DataSource) enCtx.lookup(\"jdbc\");return ds的作用就是根据配置文件获取数据源,并将获得的数据源对象返回给系统,这样就实现了数据源方式连接系统,提高了系统的反响速度和客户对系统的体验。 但是毕竟是之前没有经验编写外卖订外卖系统,再加上系统的开发时间有限,系统仍然有很多的不足和缺陷,系统中很多的模块没有完善功能,比如管理员对会员的管理模 精彩文档 word 块、后台管理员功能的细分、客户订外卖模块功能不能多项选择等,还有系统没有实现定位和导航功能,但是我一直相信,只要自己努力学习,这些问题都会解决。系统整体按照三层理论开发,并且层与层之间使用接口降低耦合,为以后系统的维护提供很大的方便。 精彩文档 word 参考文献 [1] [2] BudiKurniawan(加拿大). 深入浅出Struts2[M]. 人民邮电,2009 [3] struts2的工作流程. mamacmm.javaeye./blog/494396 [4] [5] [6] DWR的介绍与简单应用. longdechuanren.javaeye./blog/627129 [7] 沙洛维,特罗特. 设计模式解析(第2版) [8] [9] [10] [11] [12] [13] [14] 吴洁著.XML应用教程〔第2版〕[M].:清华大学,2007.05:99-110 胡崧著. HTML 从入门到精通[J].:中国青年,2007:10-15. 叶允明等.分布式Web Crawler的研究:结构,算法和策略[J].电子学报, X岭等.一种高性能分布式Web Crawler的设计与实现[J].某某交通大学学报,Ester M,Gorb M,Kriegel H.Focused. Web crawling:a generic framework for 2002,30(Z1):26-29 2003,37(3):454-457 specifying the user interest and for adaptive crawling strategies[C].Proc of the International Conferece on Very Large Database,n2001,23(10):30-32 [15] Brewington B E, Cybenko G. How dynamic is the Web? In:Proceedings of the Conference. Amsterdam. the 9th International World Wide Web Netherlands,2000,257-276 精彩文档 word 致 谢 大学四年随着这篇论文也逐渐走进了尾声,为期三个月的毕业设计也根本画上了句号,在这次毕业设计过程中,非常感谢曾志高教师的带领和帮助,经过大学四年的接触和了解,曾志高教师是一位非常认真负责的教师,对待学生总是能循序渐进的引导和帮助。从刚进入大学就接触到了曾教师,那时候曾教师是负责我们C语言课程的教师,C语言也是我刚开始接触计算机语言的第一课,随着和曾教师交流的加深,慢慢的认识到这才是一位真正的〞教师〞,也给我很大的触动。 在毕业设计期间,曾教师每周都会召集我们去开会,一方面是检查和督促我们的系统设计,另一方面也是为了帮助我们解决系统中面临的问题,也会和我们像朋友一样交流聊天,换句话就是可以无障碍的〞零距离〞沟通,也总能交给我们很多人生的经验,能使我们少走很多的弯路。同时在大学期间自学了Java Web,中间也使用Java语言写小系统,也感谢计算机与通信学院给我们营造的学习气氛。 在学习中通过培养对计算机编程的兴趣,逐渐找到自己在大学四年的方向和目标,也明确了自己以后人生的道路,在这个过程中少不了周围教师和同学朋友的帮助,再次真的感谢那么帮助我、鼓励我的教师、朋友们! 学生签名: 日 期: 年 月 日 精彩文档 因篇幅问题不能全部显示,请点此查看更多更全内容