网上点餐系统

二十一世纪是一个多元化的时代,我们所处的社会更是是集数字化,网络化,信息化的,以网络为核心的社会。随着网络的飞速发展,使得网络的应用日益的广泛。如电子商务,电子政务,网上医疗,网上娱乐,网络游戏,网络教学等[11]。高度发展的信息产业带动了互联网的高速发展,使之已经成为了人们生活中必不可少的部分。无论是军事,还是企业无论哪方面都已经离不开了网络。以前人们需要跑很远去菜市场,去餐厅,去实体店买自己想要的东西。不仅劳心劳力,而且价格还很贵。自从有了互联网,网络带给人们的是巨大的便捷与实惠。而本系统也是基于现在高度发展的网络环境,人们可以在家中用自己的电脑打开网站输入网址,就可以与商家购买所需的食物,商家还可以有送货上门服务。本文主要介绍了,系统地使用的软件工程相关知识,需求分析,可行性分析,概要设计,详细设计,测试等相关知识。数据库相关知识,数据库设计模式等。本系统开发利用了当前比较主流的开源框架strut2+hibernate+spring(ssh)。Struts2作为表示层框架,Hibernate作为数据持久层框架,Spring作为Web容器。结合数据库概念相关知识和基本的XML(可扩展性标记语言)知识。本系统的主要功能前端和后台两部分。 经测试,本系统设计界面友好,功能完善,使用ssh框架使得业务逻辑容易扩展,用户使用起来方便,简单易懂。关 键 词:信息化;strut2+hibernate+spring(ssh);软件工程;数据库系统ABSTRACTThe 21st century is the era of a diversified highly concentrated, and this era is is a digital, networked, information-based, network-centric society.With the rapid development of the network, so that network applications increasingly widespread. Such as e-commerce, e-government, online medical, online entertainment, online games, online teaching.Whet
 *好棒文|www.hbsrm.com +Q:  3_5_1_9_1_6_0_7_2 
her military or business no matter what aspect have been inseparable from the network.Before people need to run very far away markets, to the restaurant, go to the store to buy things they want. Not only dedicated, but the price is also expensive.Ever since the Internet, the network has brought to people is huge convenience and benefits.But this system is now based on a highly developed network environment, people can do at home with their computer open the site enter the URL, you can buy the necessary food and businesses, businesses can also have a home delivery service.This paper describes the software engineering knowledge of the systematic use of, demand analysis, feasibility analysis,Outline design, detailed design, testing and other related knowledge.The development and utilization of the current relatively mainstream open source framework.Strut2 serve as the control layer, hibernate achieve lasting access to the database, spring is responsible for managing and generating objects.Combined with database concepts and basic knowledge of XML (Extensible Markup Language) knowledge. The main function of this system front-end and back-office in two parts.The front end portion worry user login, registration, shopping carts, message boards, my order, individual centers and other modules. Background main message management, user management, order management menu management.KEY WORDS: Information Technology; Strut2 + Hibernate + Spring (ssh); Software Engineering; Database System摘要 - 2 -第1章 绪论 - 6 -1.1选题背景 - 6 -1.1.1 研发背景 - 6 -1.1.2 研发意义 - 6 -1.1.3 国内外发展现状 - 7 -1.2网上点餐系统结构 - 7 -1.2.1 前端功能模块 - 7 -1.2.2 后台管理模块 - 8 -1.3本文主要工作及结构 - 8 -1.3.1 本文所涉及的网上点餐系统功能包括: - 8 -1.3.2 解决的技术难点包括: - 9 -1.3.3 论文结构如下: - 9 -第2章 相关技术综述 - 10 -2.1 JavaEE 相关概述 - 10 -2.1.1 Java语言 - 10 -2.1.2 Jsp动态网页设计 - 11 -2.2 strut2+hibernate+spring框架相关技术 - 11 -2.2.1 struts2 - 11 -2.2.2 hibernate - 11 -2.2.3 spring - 12 -2.2.4 ssh框架 - 12 -2.3数据库相关概述 - 13 -2.3.1 数据库简介 - 13 -2.3.2 数据库应用 - 13 -第3章 系统需求分析 - 14 -3.1功能需求 - 14 -3.1.1 业务流程图 - 14 -3.1.2 功能需求列表 - 15 -3.2 数据需求 - 16 -3.3业务需求 - 17 -3.3.1 响应时间需求 - 17 -3.3.2 稳定性需求 - 17 -3.3.3 适应性需求 - 17 -第4章 概要设计 - 18 -4.1系统总体设计 - 18 -4.2模块设计 - 19 -4.3 数据库设计 - 21 -4.3.1 数据库E-R模型 - 21 -4.3.2 表设计 - 23 -4.4方案选择 - 25 -4.4.1 技术的使用 - 25 -4.4.2 开发工具选择 - 26 -第5章 详细设计与实现 - 27 -5.1 网上订餐系统各部分的设计与实现 - 27 -5.2 前端的设计与实现 - 28 -5.3 后台设计与实现 - 34 -第6章 系统测试 - 39 -6.1 测试的意义和作用 - 39 -6.2 测试的方法 - 39 -6.2.1 黑盒测试 - 39 -6.2.2 白盒测试 - 40 -6.3 测试结果 - 40 -6.3.1 内容测试 - 40 -6.3.2 功能测试 - 40 -第7章 结束语 - 41 -7.1总结 - 41 -7.2 展望 - 42 -参考文献 - 43 -致谢 - 45 -第1章 绪论1.1选题背景1.1.1 研发背景当今社会是一个多元化的时代,更是以网络为核心的信息社会。随着网络的飞速发展,使得基于网络的许多软件系统,和B/S应用日益广泛。无论是军事,还是企业哪方面都已经离不开了网络。以前人们需要跑很远去菜市场,去餐厅,去实体店买自己想要的东西。不仅劳心劳力,而且价格还很贵。 随着饮市场的发展,餐饮行业竞争越来越大,相对于大型饭店小型餐馆经营者要想在当前竞争日趋激烈的餐饮行业中占有一席之地,就必须增加自己的软实力。经济的发展,生活水平提高,生活方式的改变,网上餐饮业在第三产业中逐渐占有一定的地位。与此同时网上点餐解决了无店面、低成本、高收入,解决了因为店面小、租金高而无法提高收入的难题,完全改变传统销售模式成为全新的经营模式[14]。中国作为人口大国发展中国家然而且也早已进入了这个网络时代。经济的发展,改变了人们的工作节奏和生活方式。传统的购物方式也正在向虚拟网络方面发展,网购成为一种越来越受欢迎的新型消费方式。餐饮业也应该顺应新潮流。传统的订餐方式也逐渐失去了光环。餐饮业也因为网络进入了新的时代。1.1.2 研发意义 经济发展,社会进步,生活方式改变,但每天都避不了吃饭穿衣。通过对订餐流程的研究,对业务流程进行了全面的分析,可以通过网上订餐系统,不用自己出门,在家中或在办公室上网便可以买到自己喜欢的营养又实惠的美食。为了提高小型餐馆的工作效率,让小型餐馆的送餐业务比电话订购更加方便快捷。运用科学的设计方法,完善的业务实现,对订餐进行合理的管理。 网上点餐系统就是将所有餐饮业务由计算机来进行管理即由计算机来处理各类人工服务的工作,大大减少了小型餐馆的运行成本[2]。而且网上点餐系统还能为客户提供查看菜品信息、添加购物车点菜下单、确定送餐时间以及选择支付方式网上支付等服务。目前网上订餐业务已经比较成熟了。1.1.3 国内外发展现状 随着我国市场经济的快速发展,各行各业的发展场景充满活力,但是餐饮业仍采用手工管理模式,工作效率低。近年来,上班族和学生很热衷于网上订餐,方便又快捷。这些人往往都忙于工作,而且对计算机的理念更先进,能够接受在网上订餐,并经常上网订购[14]。登陆网上点餐系统,把自己喜欢的食物添加到购物车然后网上支付,完成订单,就等待送货人员将食物送到面前。1.2网上点餐系统结构1.2.1 前端功能模块 前端功能模块主要包括的功能有:登录注册模块,菜单浏览模块,订餐模块,支付模块,留言模块等功能,如下图1.1所示:图1.1 系统前端模块1.2.2 后台管理模块前端功能模块主要包括的功能有:登录模块,菜单管理模块,订单管理模块,用户管理模块,如下图1.2所示:图1.2 系统后台模块1.3本文主要工作及结构1.3.1 本文所涉及的网上点餐系统功能包括:前台功能包括如下几部分:登录功能:未注册的用户可以通过注册获取自己的帐号密码,再通过自己的账号和密码进行登录进入系统。浏览菜单:用户可以查看网页上的各种菜色。订餐下单:用户看中自己想要购买的菜品后,可以先将其点击加入购物车把菜品加入购物车再结账。(4) 支付模块:用户可以提交订单,填写送货地址及其他信息,付款,模拟一 个支付界面。(5) 客户留言:用户可以对菜品进行评价,或者对商家留言。后台功能包括如下几部分:(1) 登录模块:管理员通过预先设定好的账号和密码进行登录,登录后台系统。(2) 菜单管理:管理员可以上传新的菜品信息和也可以删除不需要的菜品信息。(3) 订单管理:管理员可以对用户提交的订单信息进行审核。(4) 用户管理:管理员具有可以对用户信息进行查询删除功能的权限。(5) 回复模块:管理员可以对顾客或者系统用户的的留言进行回复1.3.2 解决的技术难点包括:本系统所需要解决的技术难点包括,拦截器的实现,购物车的实现,XML文件配置学习,ssh框架的搭建。对于拦截器的实现由于之前没有接触过拦截器的概念 ,做起来会有点不知道是什么意思,当多看了别人写的例子之后这个问题也就迎刃而解了。购物车的实现,这个问题实在看了别人的程序之后模仿着写出来的,多写了几遍也就懂了其中的原理。XML文件信息配置,比较抽象,在多番查阅资料后这个问题也得到了解决。ssh框架的搭建这个比较难配,笔者使用的是myelipse自带的struts2,hibernate,spring由于其中的部分包冲突,一开始找不到错误,到处查阅资料,网上咨询,最后得到了解决。1.3.3 论文结构如下: 第一章,通过介绍当下,互联网应用的趋势,网络给人们带来了极大的便利,线下的餐饮店已经没有了竞争优势。以此为研发此项目的背景。介绍了研发次项目的意义。介绍了网上订餐系统的系统结构,功能模块技术难题等。,着重介绍了本文所涉及的各种系统、技术概念及方法,包括struts2,hibernate,spring.,拦截器的实现XML概念及技术概述。第三章,通过业务流程图和功能需求列表,大致介绍了网上点餐系统所要实现的功能,并对其中涉及到的特殊数据需求做了详细描述。后面还对本系统涉及的性能需求做了交代。第四章,介绍了网上点餐系统的整体框架及模块划分,对每个模块的功能和调用情况作了详细叙述。另外,这一章还把数据库部分的设计作了详细介绍,给出了E-模型以及具体的表设计,并在最后对选择开发方案做了概述。,先对整个系统各部分的详细设计做了概述,对各部分的实现作了截图并且添加了相应的说明和详细代码。 第六章,对网上点餐系统作了软件测试,并对测试的相关概念作了介绍。第七章,对全文作了总结,并作出相应的预测。第2章 相关技术综述2.1 JavaEE 相关概述2.1.1 Java语言 Java 是由sun公司推出的,它和c语言有所区别,c语言是面向过程的一种语言,而java是完全的面向对象的一种程序设计语言。与c语言相比,java舍弃了指针,在java中并不是使用指针而是使用引用。与c++语言相比C++支持类的多继承而Java采用类的单继承,多继承等。c语言中创建的内存是要程序员自己去销毁的,然而当程序两很大的时候就带来了麻烦,程序员会花费很大时间去检查内存泄露。而java引入了垃圾回收机制,垃圾回收机制是Java的主要特性之一[3]。程序员不必花太多时间去管理分配的内存,当内存没有被引用的时候java的垃圾回收机制会自动销毁无用的内存。Java1.5版本更是引入泛型编程自动封装和拆装等特性,泛型编程是面向对象的进一步发展,从更高的角度对世界进行抽象,为面向对象的不足之处提供了解决之道[2]。更加方便了开发。也引入了类型安全的枚举类型,不定长参数的。另外java由于运行机制比较小,所以他也适合在小型机上运行。 本文所涉及的系统,其后台部分主要是java部分编写。由于指针和释放内存等在c++里面才有的功能在java代码里面不需要,避免了非法占用内存操作,防止病毒的入侵。加上java的语言特性和浏览器功能项结合提高了系统的安全性。2.1.2 Jsp动态网页设计Jsp是一种类动态网页技术,似于ASP的技术,它是在传统html(标准通用标记语言)中插入java代码脚本语言和标签等形成的以jsp结尾的网页文件,使目前比较主流的动态网页技术标准。他的核心是java是由许多公司共同研发。全名称为Java Server Pages。中文名称java服务器页面。能在windows平台和其它多个平台下运行。他在html使用<%%>形式的标签,便可以访问后台的数据并在html中显示出来。本人所涉及的网上点餐系统Jsp主要用于显示,后台代码由java语言编写,html页面将需要由后台处理的数据通过表单传递给struts2的action处理,然后将处理结果存进session中。然后再jsp页面中通过session 的方法属性取出将要在jsp页面动态显示的数据,从而完成了数据的请求返回和显示过程。2.2 strut2+hibernate+spring框架相关技术2.2.1 struts2Strut2与struts1相比虽说是strut1的下一代产品,但是strue2和struts1却却有很大的区别。首先strut2框架是在struts1和webwork框架的基础上发展起来的[3]是他们合并的结果,但是struts2主要是以webwork技术为核心。Struts2其全新的体系结构与Struts 1差别巨大。Struts2有非常强大的拦截功能。程序员需要导入相应的struts2包便可以在web.xml里面配置好相应的请求便可以使用struts2.struts2有丰富的标签和国际化等功能。在本网上点餐系统中struts2主要充当控制层,过滤用户请求和调用业务逻辑接口等作用。2.2.2 hibernate传统系统我们访问数据库会需要我们使用大量的重复代码,这使得程序员的工作量偏大,而且消耗内存。而hibernate他是一个轻量级的框架[2],hibernate可以用在任何需要使用JDBC的场合。它使用时候操作的是对象,是数据库中表的一条数据,这体现了他面向的是对象而不是数据。主要的接口有session,sessionFactory,configuration,transaction.等。在本网上点餐系统中hibernate主要在dao接口的实现类中使用,对数据进行持久化的操作。2.2.3 spring Spring是一个轻量级开源的框架[6]。于2003年兴起的,它是一个java开发框架。他的主要思想是控制反转,依赖注入 切面编程--灵活插入代码依赖[5]-注入--通过配置装载类的实例,大大降低类与类之间的耦合,易于维护和扩展强大的事务管理功能 。Spring的bean工厂具有非常完美的效果,只需将java模型类配置的spring配置文件中,就可以在需要该类的地方进行注入。spring对其他框架的良好支持,一开始设计它的主要是用于解决用它来解决程序设计逻辑结构的复杂性。而使用spring所有的对象由spring的注入机制来实现。由spring来管理对象的生成。 2.2.4 ssh框架ssh框架是目前比较主流的javaee开源框架,struts2,hibernate,spring组成它强大而合理的框架系统大致可以分为四层。页面显示(表示层),业务逻辑层,数据访问层和域模块层。使用这个框架可以帮助开发人员高效率的大件逻辑清晰的,可复用性好,可扩展性强的web应用程序其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持[9]。使用spring开发具有以下的优势:1)对于中小型应用开发效率还是比较高的。2)ssh框架由于出现时间比较长,也比较成熟。3)结构清晰又spring充当容器提供统一的管理。4)低耦合,使得系统可扩展性强。2.3数据库相关概述2.3.1 数据库简介 数据库顾名思义就是数据的集合,然而却不仅仅限于集合。数据库包含了对数据的操作,管理等功能。数据的管理发展经历了 3个阶段,人工管理阶段,文件系统阶段和系统阶段[5].它们各自的特点。以下分别来介绍:人工管理阶段,没有对数据进行存储的机制,也没有文件的概念,数据不独立。文件系统阶段,由文件系统来管理和操作数据,数据具有了一定的独立性。数据库系统阶段,这个阶段,能 管理复杂的数据,并具有较高的数据处理能力,数据具有较高的独立性.2.3.2 数据库应用数据库就是大量数据的集合在一起进行管理,它用来存储数据的软件。从文件系统发展到现在的数据库管理系统都是对数据库执行一定的管理操作。目前比较主要的数据库是关系数据库 关系(R):世间事物并不是独立存在的,他们之间都有这许多的联系,存入数据库中的表也是一样,表与表之间也不是相互独立的,他们代表的是对象,是对象的属性,所以他们之间有一定的关系(R)。一个表中的数据通过关系可以找到与他有联系的另一个表中的数据。 管理系统(MS):它是一个可以对存入库中的数据进行操作:增加,删除,更新等的软件。数据库管理系统是由存入其中的数据,和这个软件中所包含的函数,等组成,这些数据的集合就是数据库。数据库中的数据是由表组织在一起的,表的每一行记录可以表示一个数据对象,每个字段表示对象的属性值。在今天这样一个数据量大,数据多元的时代,数据库已经遍及了人类社会的每一个角落。不管是公司,还是国家机关,医院等等都需要使用数据库。随着信息时代的发展,数据库也相应产生了一些新的应用领域,和一些新的数据库学科,如数据挖掘,大数据等。第3章 系统需求分析本章的重点是弄清系统的需求,通过业务流程图描述系统的具体操作流程,通过功能列表分析系统的具体功能要点。在数据需求部分,通过对系统中存在的数据进行分析,合理设置每一类数据的数据类型,以满足系统需求。在性能需求部分,对系统的响应时间、稳定性及适应性做了简介。3.1功能需求 3.1.1 业务流程图用户注册后便可以使用注册帐户登录系统进行订餐,查看订单,留言,查看购物车,修改个人信息,管理员进入后台模块进行用户管理,商品管理,留言管理,订单管理等,如下图所示: 图1.3系统业务流程图3.1.2 功能需求列表编号功能名称功能说明1登录用户输入用户名和密码,按登录按钮进行登录。若用户名未填写或登录密码错误,系统都将给出信息提示。当用户登录成功后,页面会自动跳转到网上订餐系统前端主界面或者后台。2注册 用户进入注册页面,输入正确的注册信息,输入为null或者错误会有正确的提示信息。注册成功会提示你注册成功返回登录。3客户留言留言可以分为登录状态下的留言和为登录状态下的留言,为登陆状态下会以游客的身份进行留言,点击我要留言按钮,出现留言文本框,输入内容,提交即可留言。登录情况和为登录类似,但是是以登陆者的名称进行留言。管理员在后台可以对留言信息进行回复。回复之后可以在前端留言界面看到回复的内容。4下订单用户可以在前端模块分类浏览菜品信息,对于菜单比较多的可以分页查看,看中要买的菜色,点击加入购物车按钮,将菜单信息加入购物车。你可以选择继续购物或者选择结帐。点击主页可以返回购物页面,点击结帐,进入输入客户信息页面,这时会出现默认的信息页面,可以直接提交这些默认信息也可以对默认信息进行修改。点击付款提交订单信息,购买成功,点击返回继续购物,或者点击退出系统,结束购物。5查看订单当用户还未购买东西时,点击我的订单,显示为Null当用户购买成功后进入我的订单栏目可以查看购买的订单信息,点击订单详情按钮,可以查看订单的所有信息。6个人中心当用户点击个人中心超链接进入个人中心页面,用户可以查看自己的注册信息,还可以根据自己的需要修改注册信息.7菜单管理管理员登陆后进入后台模块,点击菜单管理出现菜单页面,该页面有添加,删除,和更新菜单的功能,点击添加按钮进入添加菜单页面,输入新增的菜单的信息,点击提交按钮,即可新增.点击菜单页面的删除按钮可删除菜品.点击菜单图片进入菜单信息维护页面,可以修改菜单信息,点击保存按钮,即可保存更新信息.8用户管理当用户点击用户管理按钮时候,进入用户管理页面,该页面可以查询用户信息,点击删除按钮可以删除注册用户.9留言管理当用户点击留言管理按钮时,系统会将要进入留言管理页面,可以查看所有客户的留言信息,删除客户的留言信息,然后局部刷新页面,将最新的元数据记录列表显示出来。管理员点击留言回复按钮,进入回复页面,输入回复信息,提交,返回到留言界面。可以查看到管理员对用户的回复。普通用户可以在前端留言界面察查看留言回复。10订单管理 当用户点击订单管理按钮时候,进入订单管理页面,该页面可以查询订单信息,点击删除按钮可以删除注册用户订单.3.2 数据需求 本系统所需数据信息有菜单信息数据,用户信息数据,留言信息数据,订单信息数据,数据库信息等.数据需求列表序号信息数据项数据描述数据类型1菜单信息菜单编号菜单Id整型菜单类型菜单分类字符串型(长约30位)价格菜品价格浮点型图片地址图片url字符串型(长约50位)菜单描述菜品信息描述字符串型(长约50位)2用户的信息用户帐号用户登录帐号整型用户密码用户登录密码字符串型(长约200位)用户手机送餐电话字符串型(长约30位)用户地址送餐地址字符串型(长约30位)3留言信息留言编号留言编号整型留言时间客户留言时间字符串型(长约200位)留言内容管理员回复的内容字符串型(长约30位)用户姓名留言用户名称整型回复状态留言是否回复整型回复内容回复的内容日期类型4订单信息表信息订单编号订单的编号整形订单时间订单时间日期类型用户帐号下单用户的帐号字符串型(长约30位)5订单地址送餐地址字符串型(长约30位)订单内容订单的内容字符串型(长约30位)订单金额订单的总金额浮点型订单留言订单留言字符串型(长约30位)6菜单类别类别编号菜类的编号整形类别名称菜类的名称字符串型(长约30位)3.3业务需求3.3.1 响应时间需求本网上订餐系统是基于http协议的网络数据传送,在同一局域网内的系统反映速度主要体现在系统性,图片大小,网速等多方面的因素,这些方面对系统反映速度,生成页面的影响必须足够小,使得反映速度必须足够快。虽然可以用一个等待界面分散用户注意力,但是用户并不知道这个界面的生成与一般系统不同,有可能导致用户对此软件的不满情绪。根据用户需求以及技术的实际情况,计划界面生成时间不超过三秒钟,新增元素时间不超过半秒钟。所以对算法要进行优化设计,尽量使算法效率提高,运行速度加快。3.3.2 稳定性需求由于系统业务功能比较多,数据比较丰富,有时可能会产生跳转的时候,却还在原来的页面,这是由于使用了session作为会话的载体[21],这样当用户在同一浏览器下使用,如果session没有正确的关闭,会造成session中仍然保存着上一用户的session,导致会发生错乱。导致系统不稳定,所以在程序设计的时候一定要保证设计的科学性和理性。要解偶。当使用系统的用户较多的时候会给服务器带来压力,可能会导致系统的崩溃的!所以这也是程序设计者要考虑到的问题,设计的时候要使服务器能够批量,或者减轻压力。对于其他导致系统崩溃或者死机的情况要充分考虑。3.3.3 适应性需求 本订餐系统设计要保证使用方便,简单易懂。由于使用了sping管理了对象,使得对象的产生有了足够的独立性,易于扩展。并且能够在不同浏览器上均可以正常时哟年能够,系统是动态网页网站,所以必要的ie6及以上版本的支持。第4章 概要设计 本章首先介绍了网上订餐系统的整体框架,对各部分做了简要描述。然后从系统的顶层模块开始,逐一介绍了各个模块内部数据的具体传输。接下来,介绍了数据库的设计情况,对数据库的每张表都做了详细介绍。最后分析了系统开发时的要点,确定了需要使用的技术和开发工具。4.1系统总体设计 网上订餐系统一共分成2个大部分模块,包括前端功能模块和后台管理员模块,前端功能模块包括登录模块,包含注册登录功能。浏览模块包扩查询,分类显示菜品信息,订餐模块包括我的购物车,我的订餐,填写送餐信息模块,支付模块,包括支付和结账模块,留言模块,用户可以给系统留言如下图1.4所示:图1.4 系统前端后台管理员功能模块,包括菜单管理模块,新增菜单,更新菜单,删除菜单;用户管理模块包括查询用户信息,删除用户信息模块,订单管理模块,可以查询订单,和删除订单;留言回复模块,管理员对游客或者用户的留言进行回复如下图1.5所示:图1.5 系统后台4.2模块设计 本系统所有的处理操作可以分为主要两个部分9个模块,包括登录模块、注册模块、留言模块、订餐模块、用户模块,后台部分主要是对前端功能模块进行处理,这里就不列举了.订餐模块作为网上订餐系统最大的主体,它主要有,我的购物车和我的订单购车;用户注册和登录构成了登录模块,登录后即可访问相应的模块,进入菜单浏览页面,点击相应菜色加入购物车,点击购物车即可进入订餐模块。订餐完成后进入我的订单栏目即可进入我的订单。点击客户留言进入客户留言模块。用户登录注册模块: 用户进入主页面,如果已经注册,可以直接登录,没有注册可以点击注册按钮进行注册。注册完成即可登录,系统会根据登录帐号看是否为管理员,是则进入后台页面,不是则进入前端主页面。图1.6 登录模块流程图订餐模块:订餐模块作为网上点餐系统最大的主体,它主要有,我的购物车和我的订单购车;用户注册和登录构成了登录模块,登录后即可访问相应的模块,进入菜单浏览页面,点击相应菜色加入购物车,点击购物车即可进入订餐模块。订餐完成后进入我的订单栏目即可进入我的订单,如下图1.7所示: 图1.7订餐模块流程图个人中心模块:用户登录成功后点击个人中心页面,进入个人中心页面,可以查看个人信息,修改个人信息,修改个人信息后点击提交按钮可修改信息如下图1.8所示:图1.8个人中心模块流程图客户留言模块:客户在为登录的状态下,点击客户留言链接。进入客户留言页面,可以查看所有用户的留言信息,页面下方有我要留言按钮,点击我要留言会进入留言页面,输入留言信息,点击提交即可留言如下图1.9所示:图1.9客户留言模块流程图4.3 数据库设计4.3.1 数据库E-R模型 E-R图是实体-联系图,是描述现实世界概念结构模型的有效方法[9]。构成E-R图的基本要素是实体型、属性和联系。矩形表示实体型,椭圆形表示属性,菱形表示实体型之间的联系。主要数据表的E-R图:登录表E-R图如下图1.10所示:登陆表仅用于登陆验证,包含的字段有登陆帐号,密码。图1.10 登陆E-R图用户信息表E-R图如下图1.11所示:用户信息表包含了用户订餐所需的所有信息,包括地址电话等图1.11 用户信息E-R图订单信息E-R图如下图1.12所示:订单信息表包含的字段有订单编号,下单时间,用户名等字段。图1.12 订单信息E-R图菜品信息表E-R图如下图1.13所示:菜单信息表,包含菜单的所有信息包括菜单信息,类别等图1.13 菜品信息E-R图留言信息表E-R图如下图1.14所示:留言信息表包含留言编号,留言内容,留言时间,留言状态等字段:图1.14 留言信息E-R图订单详情信息表E-R图如下图1.15所示:订单详情表,包含每一份订单的详细信息,包括订单菜单项,数量,菜单项单价等字段:图1.15订单详情E-R图网上点餐系统信息表E-R图如下图1.16所示:数据库E-R图,展示了各个表之间的联系。图1.16 网上点餐系统数据库E-R图4.3.2 表设计用户表(UserInfo):设计的字段有帐号,密码,作为登录表使用。登录信息表(tb_UserInfo)汉语名称英文名称数据类型长度帐号User Idint20密码Psswordnvarchar502.用详细信息表(Detail):包含有帐号,手机号地址,用户姓名等信息。用户详细信息表(tb_UserInfo)汉语名称英文名称数据类型长度帐号User Idint20用户名User Namenvarchar50电话号码telephonenvarchar50用户地址Addressnvarchar503.菜品信息表:菜品信息包含菜品名称、菜品价格、菜品图片、特价菜品、菜品类别等信息。 菜品信息表(tb_courseInfo)汉语名称英文名称数据类型长度菜品编号course Idint10菜品名称courseNamenvarchar50菜品价格pricefloat10菜品图片imageUrlnvarchar50菜品类别catalogIdint10菜品描述CourseDetailnvarchar255 4.订单信息表(OrderInfo):订单信息包含订购人姓名、地址、联系电话、订单编号、订单时间等信息。订单表(tb_order)汉语名称英文名称数据类型长度订单编号orderIdint10订购人姓名userNamenvarchar50订购人地址orderAddressnvarchar50订购人电话user phonenvarchar50订单时间order Datedate20订购人帐号userIdint205.订单详情(orderDetail):订单信息包含订单项、菜名、菜的数量、订单编号、菜名编号等信息。订单表(tb_orderdetail)汉语名称英文名称数据类型长度菜单项itemIdint10菜名courseNamenvarchar50数量courseNumnvarchar50菜名编号courseIdint20订单编号orderIdint206.留言信息表(MessageInfo):留言信息表包含留言编号、用户名、留言内容、留言时间、留言状态,回复内容等信息。留言信息表(tb_messageInfo)汉语名称英文名称数据类型长度留言编号messageIdint10用户名 userNamenvarchar50内容 messageTextfloat50 留言状态liuYanStatenvarchar50回复内容replyint20回复时间liuYanDatedate204.4方案选择4.4.1 技术的使用本网上订餐系统中,主要的技术为JavaEE ,涵盖了javascrip脚本语言,htm静态网页语言,使用的开发框架为struts2+hibernate+spring(ssh)框架。对于软件工程这么学科来说,应用的可扩展性,和可维护性将会是框架设计最需要考虑的地方。对于业务经常需要改变或者添加的项目来说,框架的低耦合显得尤为重要。框架通常能很好的解决一个问题。然而,你的应用是分层的,可能每一个层都需要各自的框架。仅仅解决UI问题并不意味着你能够很好的将业务逻辑和持久性逻辑和UI 组件很好的耦合。之所以使用ssh框架式因为他有如下优势:1)对于中小型应用开发效率还是比较高的。2)ssh框架由于出现时间比较长,也比较成熟。3)结构清晰又spring充当容器提供统一的管理。4)低耦合,使得系统可扩展性强。4.4.2 开发工具选择网上订餐系统是典型的B/S结构,客户端选用较为成熟稳定的JSP技术,采用MyEclipse编程,服务器为Myeclipse自带的Tomcat,数据库为SqlServer2008R2。MyEclipse是一个功能很强大的用户开发,java,和javaweb的ide 。由于本系统采用ssh三层框架进行开发,但是手工搭建ssh框架会相当费时,而且开发效率也会严重降低。而MyEclipse支持也十分广泛,尤其是对各种开源产品的支持十分不错,他自带了struts2,hibernate,spring等,开发人员只需要添加支持便可以轻易搭建三层系统。MyEclipse 主要是用于javaweb的开发,它是对eclipse的扩展,利用它自带的功能我们能比较高效的开发一个应用程序。它完整的支了html,struts,spring,hibernate,jsp,css等。网上点餐系统主要以web编程为主,用到struts2、hibernate、spring、Javabean、Java等,故编程的开发工具选择MyEclipse。Tomcat 是在许多中小型系统,和用户比较少的系统中使用的web服务器,被广大的jsp初学者所使用。主要用于jsp的开发和调试。tomcat是apach的一个扩展,然而tomcat是独立的运行的是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,而本网上点餐系统由于并发访问的用户不是很大,所以我们选择了tomcat作为服务器。 数据库SqlServer是一般中小型企业比较习惯使用的数据库,首先因为操作简单功能也比较齐全,与之类似的还有Mysql数据库,其他数据库还有oracle数据库,等,但oracle数据库比较适合于商用,政府部分,因为它功能比较强大,而且能够处理数量比较大的数据。由于本系统属于数据量相对可能比较少,所以采用sqlserver数据库,来存取数据。第5章 详细设计与实现本章第一部分详细描述了网上订餐系统各部分的具体设计及实现,给出了所用的技术、部分关键函数的伪代码以及运行界面。第二部分详细介绍了系统所用到的关键技术,对ssh框架中的struts2+hibernate+spring分别作了解析。做出了最合理的设计方案。5.1 网上订餐系统各部分的设计与实现 网上订餐系统的代码主要写在jsp、javabean和xml文件中中。其中jsp主要负责显示功能,javabean作为数据模型并完成部分操作,对各类事物进行抽象,以便于能够实例化。struts中的Action作为服务器端的主要处理入口,负责处理前端页面传过来的数据,并交由dao类和数据库进行交互,而dao中主要使用hibernate来进行数据库持久访问,当然之前已经做好了映射工作。如下图所示:图2.1 系统框架图5.2 前端的设计与实现系统首页设计如下图所示:系统主页分为三个部分,左侧菜单部分,顶部标题部分,右侧登录部分,登录部分分为注册,和登录两部分。图2.2 系统主页拦截器实现:客户请求拦截器,当用户在未登录的情况下,点击系统的除主页和留言以外的功能模块,将会返回如下图2.3所示页面提示用户登录才可访问。图2.3 系统拦截器返回页面主要代码: //通过session取出存入里面的用户对象detail,如果user对象为null则返回Action.Login参数重新并返回到拦截器页面如果不为null则进入相应页面。public class MyFilter extends AbstractInterceptor{ @Override public String intercept(ActionInvocation arg0) throws Exception { Map session = arg0.getInvocationContext().getSession(); Detail user = (Detail) session.get("detail"); if(user==null) { return Action.LOGIN; } return arg0.invoke(); }}注册页面设计:点击主页登录部分的注册按钮,进入注册页面如下图2.4所示,输入注册信息,如果输入帐号以及存在回提示您输入的帐号已经存在请重新输入,当用户输入为空时会提示您输入不正确,请重新输入,输入正确之后会提示注册成功请返回登录,点击返回按钮进行登录。图2.4 注册页面主要代码:这段代码主要将注册页面的表单传过来的数据,通过userService对象的Regist方法进行注册业务。注册成功则返回登录,反之则提示错误信息。//action执行入口。 public String execute() { if(userService.Regist(userId,userName,userPassword,userAddress,userPhone)) { addFieldError("user", "注册成功,请返回登陆"); return "success"; } else { addFieldError("user", "帐号已存在,请重新注册"); return "input"; } }前端首页:当用户登录成功后回进入前端主页,可以查看菜单信息,分页显示菜单信息如下图2.5所示。图2.5 前端主页主要代码:下面这段代码主要实现从session里面获取菜单通过session.getAttribute("list")方法获取刚刚存在session里面的数据,然后对获取的数据进行分页处理。 ArrayList list = (ArrayList) session.getAttribute("list"); ArrayList newList = new ArrayList(); //以下是分页显示代码 主要原理是 每次请求页面时候,限制每次查询的数量.newList就是每次查询的数据量 int index; int rowNum = list.size(); int totalPage=0; if(rowNum!=0&&rowNum%4==0) { totalPage = rowNum/4+1; } else totalPage=rowNum/4+1; int currentPage = 1; //前一次的当前页 if (request.getParameter("currentPage") != null) currentPage = Integer.parseInt( request.getParameter("currentPage")); //移动请求 int move = 0; if (request.getParameter("move") != null) move = Integer.parseInt(request.getParameter("move")); currentPage = currentPage + move; if(currentPage*4>rowNum) index = list.size(); else index = currentPage*4; System.out.println(index); for(int i=(currentPage-1)*4;i session = actionContext.getSession(); HashMap map = (HashMap) session.get("cart"); if(map==null) { map=new HashMap(); courseInfo = ls.Query(courseId); cart = new CartInfo(); cart.setCourseInfo(courseInfo); cart.setCount(new Integer(1)); map.put(courseId.toString(), cart); session.put("cart", map); return "success"; } else { if (map.containsKey(courseId.toString())) { cart = (CartInfo) map.get(courseId.toString()); System.out.println(cart); cart.setCount(new Integer(cart.getCount()) + 1); System.out.println("hahahahhaha"); map.put(courseId.toString(), cart); session.put("cart", map); return "success"; } else { cart = new CartInfo(); courseInfo = ls.Query(courseId); cart.setCourseInfo(courseInfo); cart.setCount(new Integer(1)); map.put(courseId.toString(), cart); session.put("cart", map); return "success"; } } }我的订单页面:当用户把购物车中的商品提交支付之后,可以点击我的订单栏目查看我的订单如下图2.7所示.点击表格中订单详情可以查看每个订单的具体内容。图2.7 我的订单主要代码:我的订单页面后台代码,主要是通过orderService方法下的业务方法queryOrderAll(),查询数据库中的订单信息,并在前端页面显示。 if (getMenuId().equals("3")) { session.put("right","3"); } if(orderService.QueryOrderAll()) { return "success"; } return menuId; 个人中心:户登录成功后点击个人中心页面,进入个人中心页面,可以查看个人信息,修改个人信息,修改个人信息后点击提交按钮可修改信息。图2.8 个人中心主要代码:个人中心主要是通过userService对象下的逻辑方法finUser()查询数据库中的用户信息,并且返回给前端用户显示。 ActionContext actionContext = ActionContext.getContext(); Map session = actionContext.getSession(); Detail user = (Detail) session.get("detail"); userId=user.getUserId(); if(userService.FinUser(userId)) { return "success"; } return "error";5.3 后台设计与实现菜单管理:管理员登陆后进入后台模块,点击菜单管理出现菜单页面,该页面有添加,删除,和更新菜单的功能,点击添加按钮进入添加菜单页面,输入新增的菜单的信息,点击提交按钮,即可新增.点击菜单页面的删除按钮可,如下图2.9,2图.10,图2.11,图2.12所示:图2.9 菜单管理主要代码:管理员后台菜单浏览页面后台代码,通过ls对象的业务逻辑方法Query()查询数据库中的菜单信息,并显示: if(ls.Query(courseId)!=null) { CourseInfo courseInfo = ls.Query(courseId); ActionContext actionContext = ActionContext.getContext(); Map session = actionContext.getSession(); session.put("courseInfo", courseInfo); session.put("catalogId", catalogId); return "detail"; } return "error";删除菜品:管理员点击删除按钮,即可删除该菜品信息。图2.10 删除菜单主要代码:管理员点击删除按钮后,后台代码接收菜单编号,通过菜单编号找出菜单信息并删除,通过ls对象的delete方法实现删除。 if(ls.Delete(courseId)) { queryCourses(); return "success"; } return courseDetail;添加菜品:点击右上方的绿色添加按钮添加菜品,进入添加新菜品页面如下图.2.11所示,填写菜品信息点击提交即可:图2.11添加菜单主要代码:用户输入菜单的信息通过表单传到后台处理如下方代码,然后将其封装成菜单对象传给逻辑方法Insert()来进行新增处理。String realpath = ServletActionContext.getServletContext().getRealPath( "/images"); File dir = new File(realpath); if (!dir.exists()) { dir.mkdir(); } if (uploadFileContentType.equals("image/x-jpeg")) { uploadFileContentType = ".jpg"; } else if (uploadFileContentType.equals("image/pjpeg")) { uploadFileContentType = ".png"; } else if (uploadFileContentType.equals("image/x-gif")) { uploadFileContentType = ".gif"; } imageUrl = "food_pic" + new Timestamp().getDateTime() + uploadFileContentType; FileUtils.copyFile(uploadFile, new File(dir, imageUrl)); if(ls.Insert(courseName,imageUrl,price,courseDetail,catalogId)) { queryCourses(); return "success"; } return "error";更新菜品信息:点击菜单图片进入编辑页面如下图2.12所示,输入更改的信息点击保存按钮即可修改:图2.12更新菜单主要代码:用户输入菜单的信息通过表单传到后台处理如下方代码,然后将其封装成菜单对象传给逻辑方法Update(()来进行更新处理。String realpath = ServletActionContext.getServletContext().getRealPath( "/images"); File dir = new File(realpath); if (!dir.exists()) { dir.mkdir(); } if (uploadFileContentType.equals("image/x-jpeg")) { uploadFileContentType = ".jpg"; } else if (uploadFileContentType.equals("image/pjpeg")) { uploadFileContentType = ".png"; } else if (uploadFileContentType.equals("image/x-gif")) { uploadFileContentType = ".gif"; } imageUrl = "food_pic" + new Timestamp().getDateTime() + uploadFileContentType; FileUtils.copyFile(uploadFile, new File(dir, imageUrl)); if(ls.Update(courseName,imageUrl,price,courseDetail,catalogId,courseId)) { queryCourses(); return "success"; } return courseDetail;用户管理模块:当用户点击用户管理按钮时候,进入用户管理页面,该页面可以查询用户信息,点击删除按钮可以删除注册用户,如下图2.13所示.图2.13用户管理主要代码:用户管理功能代码如下,通过用户业务逻辑方法FinUsers()查询数据库中用户的信息,并将其存入session中加以一边前端代码获取显示。ActionContext actionContext = ActionContext.getContext(); Map session = actionContext.getSession(); if(getMenuId().equals("2")) { session.put("right","2"); } if(userService.FinUsers()) { return "success"; } return "error";订单管理模块: 当用户点击订单管理按钮时候,进入订单管理页面,该页面可以查询订单信息,点击删除按钮可以删除注册用户订单,如下图2.14所示:.图2.14订单管理主要代码:订单管理功能代码如下,通过用户业务逻辑方法QueryOrderAll()()查询数据库中用户订单的信息,并将其存入session中加以一边前端代码获取显示。 if (getMenuId().equals("3")) { session.put("right","3"); } if(orderService.QueryOrderAll()) { return "success"; } return menuId;客户留言模块:当用户点击留言管理按钮时,系统会将要进入留言管理页面,可以查看所有客户的留言信息,删除客户的留言信息,然后局部刷新页面,将最新的元数据记录列表显示出来。管理员点击留言回复按钮,进入回复页面,输入回复信息,提交,返回到留言界面。可以查看到管理员对用户的回复。普通用户可以在前端留言界面察查看留言回复。如下图2.15所示:图2.15留言管理主要代码:留言管理功能代码如下,通过用户业务逻辑方法GetAllLiuYan()()查询数据库中用户留言信息,并将其存入session中加以一边前端代码获取显示。if (menuId != null && menuId.equals("4")) { ActionContext actionContext = ActionContext.getContext(); Map session = actionContext.getSession(); session.put("right", "4"); } if (ls.GetAllLiuYan()) { System.out.println("第!"); return "success"; } return "error";第6章 系统测试6.1 测试的意义和作用 随着互联网的发展,越来越多的软件和系统被开发,软件设计复杂的程度也越来越高,软件在开发过程中由于软件开发是一个漫长的过程,从设计到实现,出现的错误和漏洞也越来越多。然而人们变得越来越重视软件的质量。软件测试就是为了提前发现软件在运行过程中的错误。主要对软件的、性能,稳定性、兼容性、功能、数据可靠性进行高要求的测试[10]。利用软件开发过程中各个阶段的程序内部结构和规格说明设计测试用例去发现程序中的错误与漏洞,尽量避免一些开发风险。6.2 测试的方法6.2.1 黑盒测试黑盒测试也称功能测试,黑盒测试在测试的时候,是把程序视为一个黑盒子,不能打开。然后不必考虑程序内部特性和内部结构,在程序的接口处进行测试,它是用来检测每个功能是否都实现了[24]。如果外部特性设计有问题或规格说明有问题,黑盒测试是测不出来的。因为黑盒测试不考虑内部逻辑结构,主要是针对软件界面和软件功能进行测试。6.2.2 白盒测试白盒测试也叫结构测试,白盒测试能够清楚盒子内部的东西以及里面是怎么运作的,是深入到代码的测试[24]。白盒测试通过检查软件内部逻辑结构,对软件中的逻辑路径进行覆盖测试。能检测出软件内部动作是否按照规格说明的规定正常进行。6.3 测试结果6.3.1 内容测试 表6.1 内容测试表测试需求测试说明测试序号测试结论完整性系统安装所需要的信息UD-01通过系统描述中所说明的功能UD-02通过系统维护所需要的信息UD-03通过正确性文档中所有的信息正确UD-04通过一致性文档与系统描述之间不矛盾UD-05通过易理解程度文档一般用户是容易理解的UD-06通过易浏览程度用户文档易于浏览UD-07通过UD-08通过6.3.2 功能测试表6.2 功能测试表测试模块测试内容测试说明测试序号测试结论用户注册模块用户注册界面进入注册页面F-01通过用户信息注册填写信息点击注册成功F-02通过管理员模块添加菜品信息输入新菜单信息成功添加F-03通过删除菜品信息点击删除菜品信息F-04通过修改用户信息修改用户注册信息F-05通过删除用户信息删除用户信息F-06通过订餐模块用户登录用户输入用户名和密码登录系统F-07通过浏览菜品信息点击菜单查看菜色F-08通过订单生成界面用户提交订单生成F-09通过订单支付页面用户进入支付宝页面付款F-10通过订单审核界面管理员审核用户的订单F-11通过第7章 结束语7.1 总结 在这次毕业设计中,我独立的完成了项目的分析与设计,美工和编码工作,最终完成了系统。由于之前在美术方面的功底比较差,所以花了很长的时间去搞美工,然而也没有作出什么比较漂亮的页面,这一点比较遗憾。再者我完成了对ssh框架的学习,并用这个框架来完成了本次毕业设计网站的开发。我耗费很多时间去学习相关书籍,也借鉴了很多相关开发实例,花了3-4周的时间终于把这个框架搞定。对于这个系统的设计开发我个人感觉是花了大量的时间却没有收到比较好的效果,首先是,框架搭建的不是很好。主要的原因是还不是很熟悉。业务逻辑也比较混乱。再者是,功能需求方面分析的不是很到位,中期检查中,老师指出了我的功能中的许多缺点和不足。我这才发现要做的还有很多,在此感谢老师提出的问题。还有就是美工方面,花了很长时间,但是天分不够设计出的页面还是比较丑陋。页面布局也不是很好,界面不友好,相信这系统很难会得到用户的喜欢。但这并不是我妥协的原因,我会更加的努力去做好美工方面的工作,争取做到尽善尽美。完成系统开发过程中还有以下的不足需要改善:(1)部分功能有实现好,例如客户留言还需要在完善。(2)美工方面不是很美观。 (3)系统的架构还是比较混乱主要是(ssh)中的控制部分。7.2 展望二十一世纪,由于经济发展迅速,人们的生活水平显著的提高,这样人们的生活方式也变得越来越快节奏。紧张的工作使得人们在家中进餐的情况会越来越少,这种情况下多数出现在现在的上班族,学生党等人群中。而他们也是这个社会的主体部分,这就给出家庭以外的餐饮业带来了勃勃生机,迅速发展。然而由于竞争形势的激烈,线下的餐饮如果想提高自己的竞争力,首先得从客户入手,由于方便,快捷,便宜是客户最关心的话题,所以就为线上餐饮带来了发展的机会。我们的这套网上点餐系统也正是这样的一种便民系统。方便商家可以在网上销出自己的商品。这是一个非常具有竞争力的行业,我相信这样的一套订餐系统将会在未来有更好的使用,它也会变得越来越完善。参考文献[1]赵红丽. 浅谈JAVA垃圾回收机制[J]. 海淀走读大学学报, 2004, (4).[2]刁绫, 陈磊. 基于Java的泛型编程[J]. 电脑知识与技术:学术交流, 2007, 1(2). [3]刘晓峰. Struts1框架与Struts2框架的对比分析[J]. 电大理工, 2010, (2):46-47. [4]罗红梅. 集成Hibernate、Spring和Struts的架构应用研究[D]. 电子科技大学, 2006.[5]刘玲. 基于Spring MVC的旅游电子商务平台构建[D]. 复旦大学, 2009. [6]尹金发. 基于Flex和J2EE技术的RIA系统的设计与实现[D]. 西南交通大学, 2008. [7] 邵菲菲. 浅谈数据库的发展沿革[J]. 企业文化旬刊, 2011, (8).[8] 葛萌, (2):40-43. DOI:doi:10.3969/j.issn.1002-2279.2014.02.013. 欧阳宏基. Struts2框架在信息发布系统中的应用研究[J]. 微处理机, 2014.[9]李勇. 基于Session会话的网站推荐系统研究[D]. 昆明理工大学, 2008.[10]陈心光. 一种电子政务应用软件的第三方测评策略及工具[D]. 中国科学院研究生院, 2011.[11]曲成义. 信息安全的挑战和对策[J]. 信息系统工程, 1999, (12):14-15.[12]孙华志. Java语言“与平台无关性”的实现[J]. 天津师范大学学报:自然科学版, 2002, (4):50-52.[13]于辉. 基于SaaS的CRM系统设计与实现[D]. 吉林大学, 2010.[14]周黎,张峰.基于Java的网上订餐系统[D].榆林学院,2010.5.[15]刘升华.Java从入门到精通[M].清华大学出版社,2009.9.[16]丁振凡.Java语言实用教程[M]. 北京邮电大学出版社,2008.1.[17]万忠、沈大林.JSP动态网站开发案例教程[M].中国铁道出版社,2012.3.[18]谢邦昌,苏志雄.SQL Server 2008 R2数据挖掘与商业智能基础及高级案例实战[M].水利水电出版社,2011.10.[19]孙更新,宫生文. Java程序开发大全[M].中国铁道出版社,2010.8.[20]高红岩. Struts实用开发指南[M]. 科学出版社,2007.7.[21]陈俊荣. 网页程序设计[M].清华大学出版社,2008.9.[22]李明革,孙佳帝. Java Web应用教程:网上购物系统的实现[M]. 中华人民大学出版社,2010.6.[23]张孝祥.Java就业培训教程[M].清华大学出版社,2003.1.[24]姜利群. Java网络编程实例教程[M]. 北京交通大学出版社,2005.1.[25]Bruce Eckel. Thing in Java(4th Edition)[M].Prentice Hall,2006.2.致谢在本次毕业设计中,我遇到了很多问题,如果没有老师与朋友的帮助不会这么顺利的完成。在此我要特别感谢我的指导老师吕嘉,我从他身上学到了很多东西。他工作认真负责,对学生也比较关心,而且老师的学术与理论水平更是让我受益匪浅,也非常的佩服。老师多次组织小组会议知道我们做毕设。对于我们毕业设计中的各种注意事项都提点到位。无论是在实践上还是理论上都给了我很多帮助和悉心的指导。在老师的督促和帮助下,我的系统和论文逐步完善,最后顺利完成。在做系统的过程中,我的技术也得到了一定的提高,学习能力得到了很大的提升,然而这都与老师的正确指导离不开。在此表示由衷的感谢。我也要感谢我的同学耐心的给我改错讲解,在与同学的讨论中我也学到了很多知识。
目录
用户文档有目录表

版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/dzxx/dzkxyjs/1769.html

好棒文