基于springmvc的购物系统论文20140508 下载本文

成都学院学士学位论文(设计)

基于SpringMvc的购物平台的设计与实现

专 业:软件工程 学 号:201010414511

学 生:任 宇 桐 指导教师:李立

摘要:随着信息化时代的蓬勃发展,网上购物平台作为电子商务的一种形式,正在高速的发展。当今社会已经越来越多的人开始接受并乐意于网上购物,网络购物正适应了当今社会快节奏地生活,使顾客足不出户便可以方便快捷轻松地选购自己喜欢的商品。

本文设计并开发了一个网上购物商场,该购物平台以品牌为中心进行管理,系统平台可以以加盟的方式提供各品牌的网络销售渠道,并通过该系统对品牌、商品等的管理。文中介绍了实现程序的相关技术与开发工作环境,详细阐述了整个系统的设计和架构、系统的整理流程以及各个模块的功能和关系。本设计使用MyEclipse开发环境结合Mysql、Tomcat,实现了对管理、品牌、类型、商品、订单等的管理,最后实现了一个稳定的、健壮等购物平台。 关键词:购物;平台;品牌;商品;MyEclipse

成都学院学士学位论文(设计)

The Design and Implementation of shopping platform

based on SpringMvc

Specialty: Software Engineering Student Number: 201010414511

Student: Ren Yutong Supervisor: Li li

Abstract: With the rapid development of the information age, online shopping as a form of e-commerce platform, is a high-speed development. Today's society more and more people begin to accept and be happy online shopping.Online shopping is adapted to the fast pace of life in today's society, so that customers can enjoy the convenience quickly and easily buy their favorite products.

This paper article is designed and developed an online shopping mall.The shopping platform to brand-centric management system platform can provide a way to join the brand's network of sales channels, and through the system management of the brand, produc and so on.This paper describes the realization of the program of technical and development work environment, elaborated on the relationship between functionality and overall system design and architecture, finishing systems and processes of each module. This design uses MyEclipse as a development environment, combined with the Mysql database, Tomcat server to achieve the management of brand, type, commodity, orders and so on.Finally achieve a stable, robust and other shopping platforms.

Key words: Shopping;Platform;Brand;MyEclipse

成都学院学士学位论文(设计) 目 录

绪 论 ........................................................................... 2 1 需求分析 ...................................................................... 4 1.1 功能需求分析 .............................................................. 4 1.1.1 商品浏览 .............................................................. 4 1.1.2 商品购买 .............................................................. 4 1.1.3 登录注册 .............................................................. 4 1.1.4 个人中心 .............................................................. 5 1.1.5 后台管理 .............................................................. 5 1.2 可行性分析 ................................................................ 5 1.2.1 经济可行性 ............................................................ 5 1.2.2 技术可行性 ............................................................ 5 1.2.3 操作可行性分析 ........................................................ 6 1.2.4法律可行性 ............................................................ 6 2 相关技术介绍 .................................................................. 7 2.1 JAVA语言介绍 .............................................................. 7 2.2 SPRING介绍 ................................................................ 7 2.3 SPRINGMVC介绍 .............................................................. 7 2.4 HIBERNATE介绍 .............................................................. 7 2.5 JAVASCRIPT介绍 ............................................................. 8 2.6 JQUERY介绍 ................................................................ 8 2.7 FREEMARKER介绍 ............................................................. 9 2.8 开发平台与工具介绍 ........................................................ 9 2.8.1 MyEclipse工具介绍 .................................................... 9 2.8.2 Mysql数据库介绍 ...................................................... 9 2.8.3 服务器Tomcat介绍 ..................................................... 9 3 数据库分析与设计 ............................................................. 10 3.1 数据库设计原则 ........................................................... 10 3.2 数据库结构设计 ........................................................... 10 3.3 ER关系图 ................................................................ 14 4 系统概要设计 ................................................................. 15 4.1 系统功能模块结构图分析 ................................................... 15

I

成都学院学士学位论文(设计) 4.2 系统功能流程图 ........................................................... 16 5.1 公共模块设计与实现 ....................................................... 17 5.1.1 程序目录结构 ......................................................... 17 5.1.2 系统整体架构 ......................................................... 17 5.1.3 baseDao介绍 ......................................................... 18 5.1.4 分页bean介绍 ........................................................ 19 5.2系统模块实现 ............................................................. 19 5.2.1 商品展示和购买模块 ................................................... 20 5.2.2 个人中心模块 ......................................................... 24 5.2.3 注册登录模块 ......................................................... 24 5.2.4 系统管理员后台管理模块 ............................................... 26 5.2.5 品牌管理员管理内容模块 ............................................... 29 6 重难点分析及解决方案 ......................................................... 32 6.1 HIBERNATETEMPLATE的应用 .................................................... 32 6.2 FREEMARKER的应用 .......................................................... 33 6.3 树形结构插件JQUERY ZTREE .................................................. 35 6.4 文件上传插件UPLOADFLY ..................................................... 37 6.5 AJAX分页 ................................................................. 37 7 系统测试 ..................................................................... 39 7.1 功能测试 ................................................................. 39 7.2 性能测试 ................................................................. 39 8 系统部署 ..................................................................... 40 结 论 .......................................................................... 41 参考文献 ....................................................................... 42 致 谢 .......................................................................... 43

II

成都学院学士学位论文(设计) 绪 论

研究的目的

随着社会以及信息技术的发展,如今的互联网已经深入到人们生活的方方面面,网上购物也成为一种年轻人甚至是老人和小孩的一种购物方式,运营商以及店家的努力,网上购物已经变得简单、方便、快捷,越来越多的人喜欢上这样一种购物方式。在国内淘宝、天猫、京东这几大网上商城合力促进了网上购物在中国的发展。

关于本课题的购物平台的设计是为了能够跟上广大人民网购的一个需求,系统会尽量设计得小巧,作为一个平台去适应不同内型的商品,在一定程度上增加购购物平台的商品信息处理量,细化分类,这样来给用户提供准确的商品信息,便于用户的查询等。该购物平台也拥有一些普遍的功能包括商品管理、订单管理等等,同时所有人都能够浏览所有商品,当需要购买商品的时候则需要登录。同时该系统站在一个平台的角度,以品牌为核心进行管理,通过系统以品牌加盟的形式产生管理员,一个品牌对应于一个管理账户,系统通过系统管理员对品牌管理员进行管理,这样该系统就同时站在商家以及消费者双方,为双方提供服务。

研究的意思

总体而言该设计将实现一个小巧灵活的购物平台,该平台能够让用户通过更加简洁的方式了解到具体的商品,从而实现一个能够适应大众化的购物平台,提高网站与用户的交互,做到更加的人性化。

国内现状

在我国,网上购物的理念后起与国外,但是发展速度也是惊人的,网上购物系统已经得到了很大的发展,在淘宝、天猫以及一些有名的团购网以及返利网的带动下,整个行业已经成熟。各种系统都在以客户为中心,给客户提供好的服务,在系统功能上也是取得了非常大的进度,这两天淘宝退出的双十一活动中,能够单日创下300亿的交易额,这体现了国内的主要的大商场有能力处理高并发等特殊情况,国内现有系统是非常健壮、稳定、可靠的。

随着人民生活水平的改善以及信息技术、电子商务等的快速发展,目前而言绝大多数的商家都已经在网上建起了在线商店或者在淘宝、天猫、东京商城上面上架,向消费者展示出一种新颖的购物理念,并且绝大多数人已经结束并且喜欢这样一种购物方式。

国外现状

在美、日等信息化程度较高的国家和地区,网络商店发展速度迅猛,美国的世界级超一流的零售商,如沃尔玛、凯玛特、家庭仓储、科罗格、J.C培尼等纷纷跻身于网络经商的行列。调查表明:美国的家庭己越来越习惯于在家中从网上购物。

2

成都学院学士学位论文(设计) 发展趋势

网上购物是信息时代的产物,会随着信息时代的发展继续发展,也会有越来越的的人选择和喜欢这种购物方式,在未来很有可能网上购物成为人们购物的首要方式,购物系统也会越发的完善和人性化。随着社会的发展对于平台以及双赢等思想也逐渐运用于该领域,比如一些返利网、折扣网、团购网等等已经在体现这方面的思想了,商家在追求销量的情况下开始向消费者让利。在未来这种营销的方式应该会在电商中不断的发展下去,逐渐提高消费者的受益的比例。

3

成都学院学士学位论文(设计) 1 需求分析

在本章中将详细介绍整个系统的需求,并且对系统的可行性作出分析,从而让读者了解本系统具体实现的功能以及在设计和实现上是否可行等。

1.1 功能需求分析

该系统为一个购物平台,拥有普通购物网站的大多数基本功能,如:商品的浏览、商品加入购物车、下订单、用户登录、管理个人中心以及管理员在后台对品牌、商品、商品的类型的管理功能等,本节会尽量按照软件工程[1]的思想来分析本系统。

1.1.1 商品浏览

所用的人都能够浏览本网站上的所有商品,商品按照品牌、商品类型、精品商品、特价商品、热销商品、单个商品等的方式将系统中的商品展示给消费者,并提供搜索功能,按照商品的名称等进行搜索。

1.1.2 商品购买

当消费者选择好商品以后,可以将商品加入到自己的购物车中,然后在购物车中进行交易支付,也可以在选择好商品的同时下订单,进行支付交易,当然所有的操作都是需要用户登录的。

1.1.3 登录注册

对于系统登录注册是针对于系统的角色而言的,本系统整体上分为三类角色。其一系统管理员,拥有对系统的简单的管理和管理员管理的功能,系统管理员有系统内置生成。其二是品牌管理员,一个品牌管理拥有一个品牌管理员账号,通过该账号管理该品牌下的所有的资源和信息,包括对自己信息的管理和品牌信息的管理以及品牌下商品类型的管理、商品信息、订单信息等的管理。其二是系统会员,也就是要通过该网站购物的会员,会员登录过后对个人中心进行管理,包括自身信息、登录密码、支付密码、购物车、订单等的管理。

对于注册则主要针对于品牌管理员和会员的注册,品牌管理员注册需要连同品牌信息一同注册,注册成功过后等待系统管理员的审核,审核通过过后就可以对自己品牌的各项信息进行管理。对于会员的注册需要用户名、密码、邮箱地址等,对于会员的注册则不需要系统管理员的审核。注册成功过后登录系统进入到个人中心能够完善自己的各项信息和其它的一些信息的管理。

4

成都学院学士学位论文(设计) 1.1.4 个人中心

会员购买商品时需要登录才能够购买商品,会员登录过后能够进入到个人中心,在个人中心中会员能够管理自己的基本信息,包括:用户名、邮箱地址、电话号码、收货地址等,同时能够管理自己的登录密码和支付密码,当购买商品的时候还能对自己的购物车和自己的购买记录进行查看和操作。

1.1.5 后台管理

系统管理员和品牌管理员都可以进入到系统后台,根据不同的角色管理不同的项。系统管理员拥有最高权限,但是并不是管理所有的内容,在本系统系统管理员最主要的功能则是对品牌管理员的管理,每一个注册的品牌管理员都需要通过系统管理员的审核才能够使用。品牌管理员相对系统管理员而言管理的内容要相对多许多,但是也都是管理本品牌的内容。品牌管理员的管理内容包括自己基本信息的管理、品牌信息的管理、类型的管理、商品的管理、订单的管理等。

1.2 可行性分析

在系统的设计和开发之前都会对系统有一个大体的认识并且通过总共分析来确定系统是否值得开发、系统是否能够很好的开发出来以及开发出来过后的实际效益等等。本节将通过经济可行性、操作可行性、技术可行性等方面对系统的可行性进行详细的分析。

1.2.1 经济可行性

设计和开发购物系统的硬件和软件以及服务器要求都不高,拥有一台普通的个人电脑或者PC机均可。要通过Java设计开发这套系统需要在个人电脑上配置Java的运行环境Jdk和Jre,同时配置服务器Tomcat、开发工具MyEclipse、数据库Mysql,这些都是免费的,所以在这个电脑普及率非常高的情况下,这套系统的开发经费几乎为0,所以在经济方面是可行的。

1.2.2 技术可行性

本系统的开发采用Spring和Hibernate作为核心,这两门技术是JavaEE最热门也是使用最广泛的两种框架,在网络上拥有大量的资料、资源,相对应的社区也是非常的活跃。另外这也是自己所熟悉的框架,平时自己在学习和工作中有大量的使用,所以在网站的后台开发方面问题不大。对于网站的前端而言,自己对于Javascript、Jquery、Css、Css3.0也有不少的了解,特别是对于Javascript和Jquery是很熟悉的,有足够的能力来处理好网站的布局、网站效果的实现、网站特效、数据请求处理等。

5

成都学院学士学位论文(设计) 另一发面该系统整体的业务逻辑与一般的购物系统的业务逻辑相似,业务逻辑处理起来也不复杂,所以在配合Hibernate对数据的操作上对于SQL的要求就更加的低了,所以在这方面也是可行的。

综上所述,在技术方面也是可行的。 1.2.3 操作可行性分析

整个系统的业务逻辑类似于大多数的购物商场,符合人们平时购物的习惯和操作习惯。整体业务逻辑上以品牌为核心展开,品牌下面包含类型,类型下面包含商品,整体流程非常清晰。另一方面,系统整体的风格为简洁风格,用户的注册、以及其它信息的添加和修改都非常的简洁已操作。综上所述,本系统操作上是可行的。

1.2.4法律可行性

该系统不触及任何的法律法规问题,为大众提供服务,不损坏任何的的利益,所以在法律上是可行的。

6

成都学院学士学位论文(设计) 2 相关技术介绍

2.1 Java语言介绍

Java是Sun公司推出的一种编程语言。它是一种通过解释方式来执行的语言,语法规则和C++类似。同时,Java也是一种跨平台的程序设计语言。用Java语言编写的程序叫做“Applet”(小应用程序),用编译器将它编译成类文件后,将它存在WWW页面中,并在HTML档上作好相应标记,用户端只要装上Java的客户软件就可以在网上直接运行“Applet”。Java非常适合于企业网络和Internet环境,现在已成为Internet中最受欢迎、最有影响的编程语言之一。Java有许多值得称道的优点,如简单、面向对象、分布式、解释性、可靠、安全、结构中立性、可移植性、高性能、多线程、动态性等。Java摈弃了C++中各种弊大于利的功能和许多很少用到的功能。Java可以运行于任何微处理器,用Java开发的程序可以在网络上传输,并运行于任何客户机上。

2.2 Spring介绍

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

2.3 Springmvc介绍

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow[2]里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

2.4 Hibernate介绍

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB[3]

7

成都学院学士学位论文(设计) 的J2EE架构中取代CMP,完成数据持久化的重任。

2.5 Javascript介绍

JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML(标准通用标记语言的子集)网页添加动态功能,比如响应用户的各种操作。它最初由网景公司(Netscape)的Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持类。JavaScript是Sun公司(已被oracle收购)的注册商标。Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。

Netscape公司在最初将其脚本语言命名为LiveScript。在Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”[2],因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自Self和Scheme[4]。JavaScript与Java名称上的近似,是当时网景为了营销[4]考虑与Sun公司达成协议的结果。为了取得技术优势,微软推出了JScript脚本语言。Ecma国际(前身为欧洲计算机制造商协会)创建了ECMA-262标准(ECMAScript)。现两者都属于ECMAScript的实现。尽管JavaScript作为给非程序人员的脚本语言,而非是作为给程序人员的编程语言来推广和宣传,但是JavaScript具有非常丰富的特性。

ECMAScript-262是JavaScript标准,基于网景(Netscape)公司提出JavaScript语言和微软公司提出的JScript语言

ECMA开始于1996年,在1997年7月,采纳了首个版本,1998年,该标准成为了国际ISO标准

2.6 Jquery介绍

Jquery是继prototype之后又一个优秀的Javascript框架。它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互[5]。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id

8

成都学院学士学位论文(设计) 即可。

2.7 FreeMarker介绍

FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据。

FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境,FreeMarker更适合作为Model2框架(如Struts)的视图组件,可以在模板中使用JSP标记库,FreeMarker是免费的。

2.8 开发平台与工具介绍 2.8.1 MyEclipse工具介绍

MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能。

2.8.2 Mysql数据库介绍

Mysql是最流行的关系型数据库管理系统,在WEB应用方面Mysql是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。

2.8.3 服务器Tomcat介绍

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是8.0。

9

成都学院学士学位论文(设计) 3 数据库分析与设计

本节将从数据库以及数据表的设计和实现方面详细的介绍整个系统的数据库的设计和实现,并对整个系统的业务逻辑做初步的介绍,在数据库设计方面会尽量的多参与一些在购物平台[7]方面非常优秀的实习。

3.1 数据库设计原则

(1)尽可能的减少数据冗余和重复

合理的数据库表的设计应该是在满足需求的前提下,使数据的重复量最小,应尽量按照关系数据库系统理论方法去设计一个数据库,减少数据的冗余。

(2)结构设计与操作设计相结合

在设计数据库结构时,有时为了编程实现的简捷和思路的清晰,往往故意增加一些冗余数据。考虑到选择的机器型号和档次等因素,如果增加的冗余数据不会明显增加存储空间和降低处理效率,并且对编程实现有很大帮助,往往可以采用这类方法[15]。

(3)数据结构具有相对稳定性

数据结构的相对稳定性,可以作为新、旧信息系统的转换依据。 3.2 数据库结构设计

表3-1 管理员表(admin)

字段名 id name passWord header role isEnable

类型 Integer Varchar Varchar Varchar Int Int

是否是主外键 是 否 否

否 否 否

索引 是 是 否 否 否 否

是否为空 Not-null Not-null Not-null

Not-null Not-null

字段描述 主键ID 登录账号 登录密码 管理员头像 系统角色 是否可用

参照表 — — — — — —

表 3-1 管理员表(admin)管理员表,该表用于存放管理员信息,其中id为主键,不能为空并且自动增长作为索引,另外管理员登录密码经过MD5加密,保证用户信息的安全性,header为用户的头像的路径。Role为系统角色,本系统的后台管理有两种角色超级管理员和普通管理员,role为0表示超级管理员,role为其它值则表示品牌管理员,role对于存放的是品牌的ID。isEnable由于表示用户是否可用,注册的品牌管理员是不可用,需要经过超级管理员的审核,通过该字段超级管理员能够对品牌管理员实现假删除,是品牌管理员不可用。

10

成都学院学士学位论文(设计) 表3-2 会员表(member)

字段名 Id name passWord payPassWord

email address phone createDate alertDate loadDate

类型 Integer Varchar Varchar Varchar Varchar Varchar Varchar DateTime DateTime Datetime

是否是主外键

是 否 否 否 否 否 否 否 否 否

索引 是 否 否 否 否 否 否 否 否 否

是否为空 Not-null Not-null Not-null Not-null Not-null

Not-null Not-null Not-null

字段描述 主键ID 用户名 登录密码 支付密码 邮箱地址 收货地址 电话号码 创建时间 修改时间 登录时间

参照表 — — — — — — — — —

表 3-2 会员表(member)用于存放会员的基本信息,如:用户名、密码(同样经过md5加密)、邮箱地址等,其中id为主键,不能为空并且自动增长作为索引。另外本表中存放的电话号码、用户名、收货地址是作为会员在购物的基本信息,但购物是用户可以修改,最后具体的联系方式、收货地址这些与这些数据没有直接的关系。

表3-3 商品类型表(goodsType)

字段名 Id

Name ParentId level trademarkId isEnable

类型 Integer Varchar Integer Int Integer Int

是否是主外键

是 否 否 否 否 否

索引 是 否 否 否 否 否

是否为空 Not-null Not-null Not-null Not-null Not-null Not-null

字段描述 主键ID 类型名称 父类型id 分类等级 品牌id 是否可用

参照表 — — — — — —

表 3-3 商品类型表(goodsType),用于存放商品的类型信息,其中id为主键,不能为空自动增长,name用于存放类型的名称。该表的设计是按照二叉树数据结构来设计的一个无限分类的表结构,parentId用于记录当前类型的父类型的ID值,level则表示分类的等级。trademarkId外键关联品牌表,用于记录当前的商品类似是属于哪一个品牌的,便于以品牌为核心进行管理。

表3-4 品牌信息表(trademark)

字段名 Id Name Remarks icon flag isEnable

类型 Integer Varchar Varchar Varchar Int Int

是否是主外键

是 否 否 否 否 否

索引 是 是 否 否 否 否

是否为空 Not-null Not-null

Not-null Not-null

字段描述 主键ID 品牌名称 品牌简介 品牌图表 品牌类型 是否可用

参照表 — — — — — —

表3-4品牌信息表(trademark),用于存放品牌的基本信息,其中id为主键,不能

11

成都学院学士学位论文(设计) 为空自动增长,其它的字段存储品牌的名称、简介、图标、类型等。其中flag为品牌的类型,这些类型为系统内置的类型,所有的品牌的类型都必须从这些类型中选取,品牌的类型主要有一下几类:日用百货、服饰、电器/家电、数码、家具建材、汽车/配件、饰品这七大类,基本上这七大类也能够很好的包含绝大多数品牌和商品。最后isEnable同样是用于处理假删除的,因为有着购物车和订单的信息不方便直接删除,所以与之有关的数据都是采用的假删除的方式来处理的。

表3-5 商品信息表(goodsInfo)

字段名 Id name remarks goodsTypeId trademarkId

unit imageUrl marketPrice memberPrice isrefinement isHost isDiscount createDate alertDate isEnable adminId

类型 Integer Varchar Varchar Integer Integer Varchar Varchar Float Float Boolean Boolean Boolean DateTime DateTime Int Integer

是否是主外键

是 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否

索引 是 是 否 否 否 否 否 否 否 否 否 否 否 否 否 否

是否为空 Not-null Not-null

Not-null Not-null

Not-null Not-null Not-null Not-null

字段描述 主键ID 商品名称 商品介绍 商品类型id 品牌id 计数单位 商品图片 市场价格 会员价格 是否精品 是否热卖 是否特价 创建时间 修改时间 是否可用 创建者

参照表 — — — — — — — — — — — — — — — —

表3-5商品信息表(goodsInfo),用于存放商品的基本信息,保存商品的名称、简介、图片路径、销售价格等等。其中id为主键,不能为空自动增长,其次在本表中有着两个字段分别是goodsTypeId和trademarkId,这两改字段分别用于外键关联商品的类型和商品的品牌,对于商品外键关联了商品类型过后也是可以知道商品所属的品牌的,但是为了便于查询和操作,本表结构同样关联了商品的品牌。adminId用于管理品牌管理员,注明该商品信息的创建者。最后isEnable同样是用于处理假删除的。

12

成都学院学士学位论文(设计) 表3-6 购物车信息表(shopCart)

字段名 Id

goodsInfoId memberId amount price createDate isEnable 类型 Integer Integer Integer Int Float DateTime Int 是否是主外键

是 否 否 否 否 否 否 索引 是 否 否 否 否 否 否 是否为空 Not-null Not-null Not-null Not-null Not-null Not-null Not-null 字段描述 主键ID 商品Id 会员Id 购买数量 购买单价 创建时间 是否可用 参照表 — — — — — — —

表 3-6购物车信息表(shopCart),该表用于存放用户购物车的基本信息,包括商品信息ID、会员ID、购买数量、购买单价、创建时间等等。其中id为主键,不能为空并且自动增长。goodsInfoId用于关联商品信息表,表示加入购物车的商品,memberId外键关联会员表,用于区分是哪一个会员添加的购物车信息。amount为购买数量,price为购买单价,最后isEnable同样是用于处理假删除的。

表3-7 订单信息表(orderInfo)

字段名 Id OrderID goodsInfoId memberId Amount Price totalPrice receiverName receiverPhone receiverAddress

status createDate alertDate isEnable 类型 Integer Varchar Integer Integer Int Float Float Varchar Varchar Varchar Int DateTime DateTime Int 是否是主外键

是 否 否 否 否 否 否 否 否 否 否 否 否 否 索引 是 否 否 否 否 否 否 否 否 否 否 否 否 否 是否为空 Not-null Not-null Not-null Not-null Not-null Not-null Not-null Not-null Not-null Not-null Not-null Not-null Not-null Not-null 字段描述 主键ID 订单号 商品ID 会员Id 购买数量 购买单价 购买总价 收货人姓名 收货人电话 收货地址 状态 创建时间 修改时间 是否可用 参照表 — — — — — — — — — — — — — —

表 3-7订单信息表(orderInfo),该表用于存放订单的相关的信息,包括订单号、商品ID、会员ID、购买数量、购买单价、购买总价、收货人相关信息、购物状态等等。其中id为主键,不能为空并且自动增长。goodsInfoId用于关联商品信息表,表示加入购物车的商品,memberId外键关联会员表,用于区分是哪一个会员添加的购物车信息。amount为购买数量,price为购买单价。receiverName、receiverPhone、receiverAddress分别存放着收货人姓名、收货人联系方式、收货地址。Status表示购物状态,最要分为三种状态,分别为: 确认支付、已经发货、确认收货,最后isEnable同样是用于处理假

13

成都学院学士学位论文(设计) 删除的。

3.3 ER关系图

图3-1 ER关系图

图3-1ER关系图为本系统ER模型图,该图清晰地反映了各个主表之间对应关系,以及各张表的表结构,对设计系统有很大的帮助。其中member表与表orderInfo和表shopCart为一对多的对应关系,表shopCart与表member、表goodsInfo为多对一的关系,表orderInfo与表member、表goodsInfo为多对一的关系,表goodsInfo与表goodsType、表admin、表trademark是多对一的关系。

14

成都学院学士学位论文(设计) 4 系统概要设计

本章将通过对系统功能模块图和系统流程图的分析来阐述程序的总体设计。 4.1 系统功能模块结构图分析

图4-1系统功能模块图

如图4-1系统功能模块图系统功能模块图所示,整个系统主要包含商品购买、登录注册、个人中心、后台管理四个部分。对于商品的购买而言,所有的人都能够浏览系统中的所有的商品并选择自己想要购买的商品,对于商品的购买有两种方式,可以在选择商品的时候就进行购买,也可以将商品加入到自己的购物车中然后在购物车中付费购买商品,当然后面对于将商品加入购物车以及购买商品都是需要会员登录的。对于注册和登录而言,根据不同的系统角色,则有不同的注册和登录的方式。本系统中分为三类角色:系统管理员、品牌管理员、会员,其中系统管理员是系统内置的用户,不能通过注册产生,品牌管理员通过注册产品,在品牌管理员注册的时候需要将自己的品牌信息一起注册,注册成功过后等待系统管理员的审核。品牌管理员登录系统成功过后则管理自己的基本信息和商品信息,包括:品牌信息、商品类型、商品信息、订单信息等。对于系统会员也是通过注册产生,注册时需要简单的用户名和密码以及邮箱地址,注册成功过后不需要等待管理员的审核便可以登录,登录成功过后能够对自己的个人中心进行管理,包括对自己的基本信息的管理、登录密码、支付密码的管理以及购物车和订单的管理。对于后台管理则需要要根据管理员的权限来确定,系统管理员主要是管理品牌管理

15

成都学院学士学位论文(设计) 员,品牌管理员主要是管理品牌下的商品类型、商品信息、订单等等。整个系统的架构采用

4.2 系统功能流程图

图 4-2 系统功能流程图

如图4-2 系统功能结构图所示,本系统所有人都可进行浏览和查看商品信息,当需要将商品加入到购物车或者需要购买商品的时候则需要会员登录系统才行,在登录的时候会对用户的用户名和密码进行判断,登录成功过后才能将商品加入到购物车中和商品的购买,同时也可以进入到个人中心管理个人的各项信息。如果还没有会员账号则可以注册一个,通过成功过后即可登录系统。在商品的购买过程中会检测用户是否登录,用户没有登录则提示用户进行登录,如果用户已经登录则处理商品的数据,然后进行购买,在购买支付的过程中会检测用户的账户余额,如果余额不足就作出提示,反之则直接购买商品成功。

管理员分为两类系统管理员和品牌管理员,系统管理员主要管理品牌管理员,审核管理员、删除等,系统管理员由系统内置。品牌管理员有注册生成,注册成功则等待系统管理员的审核,注册失败则返回注册页面进行重新注册。品牌管理员通过审核过后就可以登录到系统后台。

16

成都学院学士学位论文(设计) 5 系统详细设计与实现

5.1 公共模块设计与实现

本节从以下几个方面进行介绍,详细的说明整个程序的架构和一些公共模块: 5.1.1 程序目录结构

图5-1项目目录结构图

如图5-1项目目录结构图所示,图中展示了该系统的代码以及各项资源。从src目录下的org.cde.edu.shop目录下能够很好的理解整个系统的核心架构,在系统架构中采用Dao、Service、Controller的处理方式,结合页面的View,便是典型的MVC模式。Dao和Service主要通过Hibernate处理数据持久层,Controller作为核心控制器,处理系统的业务逻辑。

右边部分是项目Webroot目录结构,在该目录结构下存放的是页面以及页面的资源。 5.1.2 系统整体架构

该系统采用的MVC的编程模式,MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式[9],把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。在本系统的架构中是以Html作为视图层,通过FreeMarker作为页面标签来处理和展示数据,同时在一定程度上使用Jquery的Ajax处理数据的交互并结合Jquery的DOM操作来实现页面效果。控制器则是采用的SpringMvc,通过

17

成都学院学士学位论文(设计) SpringMvc作为核心控制器处理系统的所有的业务逻辑。模型层则是JavaBean,结合Dao与Service中的Hibernate来处理数据[8]。

5.1.3 baseDao介绍

BaseDao是整个系统与数据库交互,处理数据的核心接口,在该接口中声明了许多的方法,通过BaseDaoImp来实现,以此作为整个系统的核心,在实现类中是通过Spring的HibernateTemplate来调用各种方法来处理数据的。HibernateTemplate是Spring对Hibernate的Session的进一步封装,使用HibernateTemplate 非常简单。创建Hi bernateTemplate 实例后,注入一个SessionFactory 的引用,就可执行持久化操作。SessionFactory 对象可通过构造参数传入,或通过设值方式传入。下面对该结构中的部分方法做一定的介绍。

(1) 根据条件获取一条数据的方法,在basedao中声明了两个方法来实现该功能: public T getEntity(String property,Object value); public T getEntity(String[] properties,Object[] values);

在这两个方法中第一个是传入一个属性值和属性名称,根据这一个条件去查询相应的数据,只返回一条数据。第二个方法则是多条件查询,该方法两个参数都是数组,第一个数组是String类型,存放的是字段名数组。该方法的第二个参数是Object类型的数组,存放的是对应字段的值。在具体的方法实现中通过对数组的循环生成查询的hql语句。

(2) 根据条件获取数据集合的方法,在BaseDao中同样声明了两个方法,两个方法如下:

public List getList(String property,Object value); public List getList(String[] properties,Object[] values);

第一个方法需要两个参数,一个是字段名称另一个是字段名称对应的值,通过该值去查询相应的最近最后返回一个list集合。第二个方法同样是须需要两个参数,第一个参数是String类型的数组,存放的是字段名数组。该方法的第二个参数是Object类型的数组,存放的是对应字段的值。在具体的方法实现中通过对数组的循环生成查询的hql语句,最后方法返回一个list集合。

(3) 分页查询方法

public Pager findByPager(Pager pager,String hql);

该方法实现了分页查询的,主要应用于前段页面需要显示列表的时候数据过大进行

18

成都学院学士学位论文(设计) 分页操作的,每次只查询当前页的数据。该方法需要两个参数,第一个是分页基类Pager,另外一个则是查询的hql语句。为了做到灵活多变以及实现各种条件的查询,这儿的查询语句用调用的方法提供,根据不同的业务逻辑程序设计者自己实现。

(4) 为针对发展的查询条件同样的basedao中声明了两个方法来实现这样的功能,两个方法都只需要传入一个hql语句,通过具体的实现,两个方法分别返回一条数据和一个list数据集合。方法声明如下:

public List getListBySql(String hql);

public T getEntityBySql(String hql); (5) 验证是否存在方法

public Boolean isExists(String property,Object value);

该方法声明要实现的功能是判断某个值是否存在。该方法需要两个参数,一个是字段名称,另一个则是字段对应的值,最后方法返回Boolean的true和false。 5.1.4 分页bean介绍

绝大多数系统对于数据过大都会采用分页,在该系统中也采用了常规的分页,分页的各种数据是通过pager这个javabean来保存的。在Pager中有一下几个参数:

private Integer pageNumber = 1;// 当前页码

private Integer pageSize = 15;// 每页记录数 private Integer totalPage = 0;// 总记录数 private Integer pageCount = 0;// 总页数 private String keyWord; //查询关键字r private List list;// 数据List

如上代码所示,pageNumber记录的是当前页,pageSize记录的每一页显示的数据条数,totalPage记录的是总的数据条数,pageCount记录的是总的页数。这些数据都是分页所需要的基本数据。keyWord存放的是搜索关键字用于查询使用,对于这个关键字的设计是这样考虑和实现的,单条件查询keyWord中就存放单个值,多条件查询则将查询条件封装成json格式,由后台解析在组成hql语句,以此来实现多条件查询搜索。List属性是用来存放查询返回的数据的。

5.2系统模块实现

在本节中将对系统的具体的功能的设计和实现做详细的介绍,并对系统完成过后所取得的一些效果进行展示。

19

成都学院学士学位论文(设计) 5.2.1 商品展示和购买模块

本系统是以品牌为中心进行展示和管理的,系统内置7大类型,在7大类型下面有着各种各样的品牌,在品牌才是各种商品的类型。这种逻辑关系很好的体现了系统作为一个平台的特点。

图5-2 网站首页图

如图5-2网站首页图所示,整个导航条按照日用百货、服饰、电器/家电、数码、家具建材、汽车/配件、饰品这七大类来进行展示,在页面的右边则是这七大类下的品牌的导航,通过这儿能够跳转到某一个品牌的展示页去浏览和选购商品。在品牌的展示页首先是通过Ajax展示所有的商品,在品牌的展示页能够通过该品牌下的类型来筛选商品信息。对于首页显示的数据大部分来自于Jquery的Ajax请求,然后通过Jquery操作Dom生成而来,核心代码如下:

//查询 日用百货 的所有品牌

trademarks = trademarkService.getList(\if(trademarks!=null && trademarks.size()>0){ //将信息存放到object中 object.put(\

object.put(\//将object放入到array中 array.add(object); }

以上代码是查询某一主类型下的品牌信息,最后将主类型以及主类型下的品牌信息封装到一个JsonObject中,然后存放到JsonArray数组中。最后将7个主类型的品牌获

20

成都学院学士学位论文(设计) 取完,JsonArray中的数据就是前段显示所需的数据。

//循环遍历data数据,生成品牌信息

for(var i=0;i

//显示7个主类型

html = '

'+data[i].title+'

';

$(\trademarks = data[i].trademarks; //显示主类型下的品牌信息列表 for(var j=0;j

trademark = trademarks[j];

html = '

}}

$(\

以上代码是通过Ajax请求前面所介绍的方法,从那个方法中获取到数据,然后循环

遍历出7个主要的类型,判断类型下面是否存在品牌,如果 不存在品牌则不显示该类型,存在品牌则显示,并在该类型下面循环遍历出所有的品牌。

选择自己要选购的商品点击商品进入单件商品的展示和购买页,页面如下:

图5-3 商品购买页

如图5-3 商品购买页所示,在这一页中用户可以清楚的查看到商品的信息,鼠标移

21

成都学院学士学位论文(设计) 动到左边的商品图片上面能够清晰的查看商品的每一个细节。对于大图的查看在此处使用的是easyzoom的插件,对于图片的生成意见插件的初始化是通过如下代码来完成的,代码如下:

//获取图片的路径

var images = $(\if(images!=null){ }

在本页的中间部分则是商品的一些信息和销售价格等,同时提供了购买数量的操作和立即购买、加入购物车的操作,最右边则是推荐的同类商品。在这儿,用户可以直接购买商品也可以将商品加入到购物车。在这个两个操作之前都会检查用户是否已经登录,如果用户没有登录,页面将跳转到登录界面,登录成功过后将返回该页面,用户可继续操作。以上操作多数通过Javascript来实现的,核心代码如下:

//生成提示信息

var html = \您正在将\件,单价为\的\商品加入到购物车,

//解析图片的路径 images = eval(images); images = eval(\//设置图片路径

$(\$(\//初始化插件

$('a.zoom').easyZoom();

是否确认加入?\

//进行提示

if(confirm(html)){//确认加入购物才

var url = \

var date = \ajax(url,date,function(data){

//加入成功 if(data.status==1){

22

成都学院学士学位论文(设计)

}

});

alert(\加入购物车成功,你可以在个人中心查看并付费\

}else{ }

alert(\加入购物车失败\

当用户点击立即购买时,系统会根据商品信息以及用户设计的购买数量生成提示信息,提示用户是否购买。当用户确认购买过后需要用户输入部分信息,如下图所示:

图5-4 支付页

如图5-4支付页所示,在进行最后支付下订单的时候需要用户补全信息和输入支付密码,其中的信息来自于会员的基本信息,此处可做修改,在订单中以字符串存放,与会员表没有实质性关系。在填写完信息过后系统通过Jquery的Ajax将数据提交给服务器。在服务器端首先通过如下代码:

DigestUtils.md5Hex(payPassWord).equals(member.getPayPassWord()) float price = goodsInfo.getMemberPrice(); price = price*number; if(price<=member.getCash()){}

首先检测支付密码是否正确,在支付密码的检测过程中使用了DigestUtils的md5Hex方法对密码进行加密。当支付密码正确过后再检测余额是否足够完成此次交易,不足则返回页面并作出提示,足够的进行购买。这里采用的是一个模拟的支付方式,并不涉及真实的金钱交易。对于选择加入购物车操作的话,系统会将该商品按照用户选择的数量

23

成都学院学士学位论文(设计) 加入到自己的购物车中。

5.2.2 个人中心模块

用户登录成功过后可以进入到个人中心,在个人中心用户可以对自己的一些基本信息、密码、购物车、订单等进行管理,如下图所示:

图5-5 个人中心图

如图5-5 个人中心图所示,在个人中心用户可以对个人信息、购物车信息、订单信息进行管理。在个人信息管理中可以修改个人信息、修改登录密码、修改支付密码;在购物车信息中用户能够查看自己的购物车中的商品,并且能够进行支付购买。订单信息管理中用户能够查看自己的购买记录,能够了解到购买的商品的发货状态,当收货过后需要在这里确认收货。

5.2.3 注册登录模块

对于本系统而言,会员与品牌管理员都是通过注册产生的,会员、品牌管理员、系统管理员都拥有登录功能,登录成功过后根据不同的角色有不同的管理项。在会员注册的时候需要填入的有信息分别为用户名、密码、邮箱地址,密码是经过MD5加密保存到数据中的,并且用户名和邮箱地址都不能为空。品牌管理员的注册相对而言内容会多一些,在账户的注册的过程中需要新添加品牌,管理员账号和品牌信息一起添加来完成的,如下图:

24

成都学院学士学位论文(设计)

图5-6 品牌管理员注册图

如图5-6品牌管理员注册图所示,在注册的时候需要填入基本的用户信息用户名和密码,同时还需要添加品牌的信息,包括品牌的名称、品牌类型、品牌图标等等。用户名、密码、品牌名称不能为空,这些约束条件是通过Javascript和Jquery验证的。对于品牌图标的上传,使用的是上传插件,上传插件中的部分事件配置如下:

//检测FLASH失败调用 'onFallback' : function() {

},

//上传到服务器,服务器返回相应信息到data里 'onUploadSuccess' : function(file,data, response) { },

//把文件名传给后台

'onUploadStart' : function(file) {

$(\$(\

alert(\您未安装FLASH控件,无法上传图片!请安装FLASH控件后再试。\

$(\对于系统的登录会员和管理员的操作基本相同,只有在登录成功过后对应的处理项

25

成都学院学士学位论文(设计) 不同。在这三种系统角色登录的时候都需要填写用户名、密码、验证码,并且在前端会对这些内容采用Javascript和Jquery做简单的验证,保证填写的信息不为空。表单提交到后台,首先判断验证码是否正确,不正确则直接返回,验证码正确过后再查询数据库看数据是否存在,需要说明的是由于密码采用过MD5加密,所以在进行密码比对前也需要对输入的密码进行MD5加密。登录核心代码如下:

if(check.equals(s_code)){ //验证码相等

if(StringUtils.isNotEmpty(password)){ }

//根据用户名和密码查询用户

Admin admin = adminService.getEntity(new

String[]{\

if(admin!=null){ //用户存在

session.setAttribute(\return \

password = DigestUtils.md5Hex(password);

}else { //用户不存在

model.addAttribute(\用户名或密码错误或者用户不可用\return \

}}else { //验证码不等 }

model.addAttribute(\验证码错误\return \

5.2.4 系统管理员后台管理模块

对于后台管理模块根据管理员不同的系统角色有着不同的功能模块系统管理员管理这一部分内容,品牌管理员管理着一部分内容,下面是系统管理员的管理内容,如图所示:

26

成都学院学士学位论文(设计) 图5-7 系统管理员管理内容图

如图5-7系统管理员管理内容图所示,系统管理员总共拥有四个大的功能模块,分别是个人信息管理,管理员管理、品牌信息管理、商品信息管理。其中的个人信息管理包括头像的修改和密码维护,因为系统管理员账号是系统内置的账号,所以系统管理员的账号是不提供修改的。对于头像的修改是采用Ajax的方式上传文件,最后改变现有头像Img标签中的Src路径来显示图片的显示。对于header部分的头像的修改是采用Javascript的如下代码来实现的,基本思想是通过Window对象获取父级的frame,window.parent.frames['topFrame'].document.getElementById('header').src,通过上面的代码就能修改header里的头像了。对于密码的维护,需要输入原始密码和新密码,新密码需要输入两次,当原始密码输入正确的时候,才将新密码加密并更新到数据库。

图5-8 品牌管理员管理图

如图5-8品牌管理员管理图所示为品牌管理员管理的功能模块,列表信息中清晰的展示了管理员的一些基本信息和管理员账号是否可用。在该模块中拥有两个功能,其一是管理员信息的修改,这儿并不能对平品牌管理员的信息进行修改,而是对品牌管理员的状态进行调整,基本上都是审核通过和回复账户的可用行。其二是删除品牌管理员,在本系统中大本分数据是采用假删除的思想来处理的,在这儿也是这样处理的。当执行

27

成都学院学士学位论文(设计) 删除操作的时候,实际上是对isEnable进行修改,然后更新数据,使用户不可用。核心代码如下:

//通过<#list>标签循环遍历显示数据

<#list pager.list as admin>

${(admin.id)!} ${(admin.name)!}

//判断是否审核

<#if (admin.isEnabled==0) >未审核<#else>可用

//显示操作的图标

图5-9 品牌信息管理图

如图5-9品牌信息管理图所示,对于品牌的管理同样只有修改和删除功能,系统管理员对于品牌的管理其实也不是必须,由于品牌是作为整个系统的管理管理,所以在系统的管理项中也添加了对品牌的管理,但是并不提供对品牌的添加功能。

28

成都学院学士学位论文(设计) 图5-10 商品信息管理图

如图5-10 商品信息管理图所示,商品信息管理分为商品信息管理和下架商品信息管理,在此处同样只提供了修改和删除两个功能,删除同样是通过isEnable来实现的假删除。下架商品的管理则是isEnable为0的商品,这项功能只是一个展示功能,让管理员了解到哪些商品已经下架。

5.2.5 品牌管理员管理内容模块

对于品牌管理员而言则是管理自己品牌下的所有的商品以及一些其它的信息,在这一节中将详细的介绍这些内容,对于系统管理员模块中已经有介绍的模块则做简单介绍。

图5-11 品牌管理员管理图

如图5-11品牌管理员管理图所示,品牌管理员拥有着四个管理模块,分别是个人信息管理、类型信息管理、商品信息管理、订单信息管理。

对于个人信息管理模块中是个人头像的修改和密码的维护,这两个功能模块与系统管理员的相同,在系统管理员管理中已经详细的做过介绍。

29

成都学院学士学位论文(设计)

图5-12 商品类型管理图

如图5-12商品类型管理图所示,商品类型管理采用的是树形结构来展示的,这也很好的体现了商品类型无限分类的表结构。该树形结构的根节点是品牌名称,所有的商品类型都是该品牌的子类型。在树形结构上点击右键能够显示出右键菜单,该菜单中包含添加节点、修改节点、删除节点三个功能选项,点击添加节点就会弹出右边点的添加界面来实现节点的添加。树的初始化代码如下:

loadTree: function() { //加载树()

//通过Ajax获取数据

$.ajax({

url: \type: \dataType: \cache: false,

success: function(data) {//数据获取成功、初始化树形结构 }

tree.zTree = $(\

});},

对于商品的管理,品牌管理员拥有添加商品信息、修改商品信息、删除商品信息、管理下架商品信息等功能,在系统管理员管理内容中已经做过介绍,在此处就不在详细介绍。

30

成都学院学士学位论文(设计)

图5-13 订单信息管理图

如图5-13 订单信息管理图所示,订单信息管理中能够很清楚的了解到每一次订单的商品名称、购买单价、购买数量、消费总金额和状态。当还未发货时能够通过列表中的操作来模拟发货的功能。

31

成都学院学士学位论文(设计) 6 重难点分析及解决方案

6.1 HibernateTemplate的应用

HibernateTemplate是org.springframework.orm.hibernate3包下的一个类,是Spring对JDBC更加深层次的封装,极大的方便了通过Hibernate对数据库的操作[10]。

本系统中对HibernateTemplate的使用都是封装在BaseDaoImp中的,该类继承自HibernateDaoSupport[11],HibernateDaoSupport需要注入一个SessionFactory,在BaseDaoImp中我通过setSuperSessionFactory(SessionFactory sessionFactory)方法将SessionFactory注入到该类中。HibernateDaoSupport类中有一个getHibernateTemplate的方法,通过该方法能够获取到HibernateTemplate,获取到HibernateTemplate过后,则通过它来操作数据库,下面对BaseDaoImp中用到的几个方法做简单的介绍。

HibernateTemplate对于简单的Save、Update、Delete这些方法,同样是传入一个实体对象,就能够完成相应的操作,另外一个方法是Find方法,这个方法需要一个HQL格式的查询语句,并且这个方法直接返回一个List数据集合,这样就可以通过HibernateTemplate完成简单的增删查改功能了。在BaseDaoImp这个类中使用最多的方法是FindByNamedParam方法,并且这个方法有多种的重载形式,在本系统中主要是了了两种,在本系统使用的这两种都需要三个参数并且都是返回一个List集合,第一种是org.springframework.orm.hibernate3.HibernateTemplate.findByNamedParam(String queryString, String[] paramNames, Object[] values) throws DataAccessException

有如上代码可以看出该方法需要的第一个参数是一个查询语句,该查询语句类似于Hibernate的HQL语句[12],只是在查询语句中使用的是paramName=:paramName这种格式,第二个参数是一个String类型的数组,该数字存放的是字段名称的集合,第三个参数为一个Object的数组,存放的是每一个字段所对应的Value值,按照相应的规定传入三个参数,HibernateTemplate内部会自动的封装好相应的查询语句,最后通过查询得到一个List的数据集合,并且返回给该方法的调用者。需要说明的是这个方法会抛出一个DataAccessException异常,DataAccessException是RuntimeException,是一个无须检测的异常,不要求代码去处理这类异常,遵循了Spring的一般理念:异常检测会使代码到处是不相关的catch或throws语句,使代码杂乱无章;并且NestedRuntimeException的子类,是可以通过NestedRuntimeException的getCause()方法获得导致该异常的另一个异常。

32

成都学院学士学位论文(设计) 在BaseDaoImp中还是用了FindByNamedParam方法的另一个重载方法,这个方法同样需要三个参数并且返回一个List数据集合,同样会抛出DataAccessException异常,org.springframework.orm.hibernate3.HibernateTemplate.findByNamedParam(String queryString, String paramName, Object value) throws DataAccessException在这个方法的三个参数与前面的那个方法的参数有一定的相似,第一个参数同样是一个查询语句,语句中需要查询的字段同样按照paramName=:paramName的方式进行设置,第二个参数则是字段的名称,第三个参数则是一个Object类型的Value值。最后按照正确的查询语句和对应的值,就可以获取到相应的数据集合。

在BaseDaoImp中有一个是分页查询的方法,在该方法中使用了HibernateTemplate的executeFind方法,该方法需要HibernateCallback action作为参数,最后返回一个List数据集合,HibernateCallback是一个回调函数,在这个回调函数中对于分页查询的具体实现如下:

new HibernateCallback() {

public Object doInHibernate(Session session) throws HibernateException, SQLException {

}

如上代码所示,在executeFind中创建了一个HibernateCallback的实例对象,在该对象中中有一个doInHibernate的方法,该方法会把Hibernate的Session传入其中,通过session.createQuery(hql)获取到Hibernate的Query对象,通过设置query.setFirstResult(first); query.setMaxResults(max);来实现分页查询,最后通过List list = query.list();获取到List数据集合并将数据集合返回,至此通过HibernateTemplate很好的实现了分页查询。

6.2 Freemarker的应用

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。在本系统中还是较多的使用了FreeMarker的各种标签[13],下面对在项目中使用FreeMarker

33

}

Query query = session.createQuery(hql); query.setFirstResult(first); query.setMaxResults(max); List list = query.list(); return list;

成都学院学士学位论文(设计) 以及系统中所涉及到的标签做简单的介绍:

要使用FreeMarker需要将其整合到系统的架构中,本系统的核心架构为SpringMvc,在SpringMvc的配置中通过如下配置来将FreeMarker整合到系统中的,代码如下:

class=\

该段配置代码是在SpringMvc的dispatcher-servlet.xml配置文件中配置的,这段配置主要是去加载FreeMarker的配置文件freemarker.properties,在这文件中对Freemarker的字符集等进行了设置。

class=\

这段配置是对FreeMarker的模板的路径进行配的,通过这儿的配置可以看出所有的模板都是存放在html目录下的,简而言之就是SpringMvc在返回视图的时候,会在html目录下寻找相应的模板也就是页面。

class=\

value=\

34

成都学院学士学位论文(设计) 以上代码是对FreeMarker解析器的配置,由以上配置代码可知解析器设定为后缀名为.html的文件即Html文件,同时还设置了编码集等。通过这三个配置就成功的将FreeMarker整合到系统中了。

在整个系统中使用了几种简单的标签来获取和处理并显示数据,最常用的则是${},

通过${}可以直接获取到SpringMvc中的model中的数据,为避免因为数据为空而导致错误,可以使用${(value)!},此种格式的作用是当value不为空的时候显示value值,当value为空时显示“!”后面的内容这样就不会因为数据为空而产生错误。在系统中使用较多的标签还有<#if>标签,该标签是用来作为判断使用的,可以在该标签中使用各种判断条件,比如: <#if (totalPage > 0) >这句代码的意思是判断totalPage是否大于0,<#if totalPage ??>这句代码的意思是判断totalPage是否存在。另外使用较为常见的还有<#list>标签,该标签使用来处理List数据集合的,比如:<#list list as goodsInfo>这段代码的作用是循环遍历list集合,每次循环对应的数据取别名为goodsInfo,然后通过goodsInfo就可以获取到相应的数据。

6.3 树形结构插件Jquery Ztree

对于商品类型这种无限分类的表结构的处理,在本系统中采用的是树形结构来展示,对于树形结构系统采用了Ztree。Ztree是Jquery的一个插件[14],这个插件目前发展很好得到了很好的发展,实现起来整体效果也非常的不错。

对于Ztree的使用首先需要陪着好树形结构的参数也就是对象中的setting,然后通过Jquery的Ajax从后台获取数据,最后通过$(\data);初始化树形结构,这样基本的结构就建立起来了。在Ztree中有几个必计较重要的配置参数,下面做简单的介绍。Ztree中的setting配置是整个的核心配置,对于树形结构是否展开、以何种形式展示都可以在这个setting中配置。根据系统的功能需求,这儿需要特别介绍一点,在setting中有一个callback,callback是一个回调函数,在该回调函数当中有一个rightClick,这是一个右键单击事件,在该事件中显示了右键菜单。在右键菜单中有三个功能按钮,分别为:新增类型、修改类型、删除类型,在显示右键菜单前会根据tree.pNode.id的值来做判断,当该值如果等于0则表示是根节点,该节点表示的是品牌信息,不能进行删除和修改该,所以通过如下代码tree.showItem([\来完成树形结构的创建的。在Ztree中的配置中较为重要的还有init,这是Ztree的初始化事件,在该事件中对Ztree的右键菜单的三个功能做了事件绑定。对于右键菜单的显示和隐藏是通过Ztree的showRightMenu事件来处理的。在该事件中会做条件判断,当

35

成都学院学士学位论文(设计) tree.pNode.id的值大于0事则表示商品类型信息,商品信息类型便能够有添加、修改和删除的功能,在程序中通过以下代码来显示三个功能按钮代码如下:tree.showItem([\\\。对于右键菜单的隐藏是通过hideItem来配置的,在该配置中设置了右键菜单的隐藏。

下面对节点的添加、修改、删除的实现做简单介绍:

addNode中实现的是节点的添加,首先是调用showNode()方法,在该方法中创建一个弹出层用于设置类型的名称,然后通过Ajax将父节点的ID和类型名称提交给后台,后台将类型保存。当Ajax请求成功过后将弹出层的数据清空并隐藏弹出层,然后就在树形结构中添加一个节点,节点的添加是通过如下代码来实现的tree.zTree.addNodes(tree.pNode, [{ //添加节点id: goodsType.id, pId: tree.pNode.id, name: nodeName, isParent: false}]);。Ztree有一个addNodes的方法,在此处向该方法中传入了两个参数一个是父级节点,在此处通过tree.pNode来获取的,另外一个参数是options配置信息,在这儿主要设置了ID、PID、NodeName、IsParent这几个参数,这样就完成了新的商品信息类型和节点的添加。

showNode中实现的是节点的更新,在该方法中同样首先调用的是showNode()方法,并且向该方法中传入了节点的名称,在弹出层中用于显示和修改,节点的名称是通过Ztree的tree.pNode.name获取得到的。在弹出成中修改好以后点击确定,将新的类型名称和类型的ID通过Jquery的Ajax传入到后台进行数据更新,数据更新成功过后清除弹出层中的数据并将弹出层隐藏,最后更新树形结构。对于树形结构的修改,首先对name的修改是通过tree.pNode.name = newName实现的,要更新页面还需要调用Ztree的updateNode方法,如下代码:tree.zTree.updateNode(tree.pNode, true),在该方法中需要两个参数,一个是当前的节点,第二个是一个Boolean类型的值,这儿传入true,表示立即更新,这样就实现了一个商品类型的更新从页面的更新到数据库的更新。

deleteNode中实现的是节点的删除,在该方法中首先通过tree.pNode.isParent判断该节点是否为父节点,然后通过window.confirm作出不同的提示信息,提示管理员是否进行删除。当tree.pNode.isParent为True时删除该节点包括以下的节点,反正则删除该节点,对于数据库中的数据是通过Jquery的Ajax来实现删除的。最后调用tree.zTree.removeNode(tree.pNode)中的removeNode方法并将当前节点传入其中进行节点的删除,最后调用tree.zTree.refresh(),来刷新Ztree的树形结构,自此节点删除完成。

36

成都学院学士学位论文(设计) 6.4 文件上传插件Uploadfly

Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示,并且支持大文件的上传,在本系统中该插件主要用于商品图片、各种图标的上传。下面从该插件的使用、配置等几方面做详细的介绍:

首先要使用该插件的话需要引入相关的Javascript和Css文件,需要引入的Javascript文件有swfobject.js、jquery.uploadify.js、jQuery.js,Css文件有uploadify.css,然后是对该插件进行配置,配置文件需要在$(\中进行设置,下面对较为重要的几个配置项进行介绍。

配置项Auto是配置文件选择后是否自动上传,如果设置为True,则表示立即上传,设置为False,表示不自动上传。Multi使用与配置该插件是否支持多文件上传,设置为True表示支持多文件上传,设置为False表示单文件上传。Swf为插件加载的Flash插件,在文件上传的过程中需要使用到。queueID为该插件上传文件时请求的路径。fileTypeExts设置的是允许上传的文件的类型,在此处为上传的文件为图片,所以设置的文件类型为:'*.jpg;*.gif;*.jpeg;*.png;*.bmp;'。在该插件的配置项中配置着许多的触发事件。 onUploadStart事件表示的是在文件开始上传的时候触发,在该事件中通过如下的代码:$(\: file.name,})将文件的名称提交给后台,其中文件名称是通过file.name来获取的。onUploadSuccess事件是在文件上传成功的时候触发,在该事件中可以进行一些操作,在本系统中主要是对图片的处理,通过如下代码修改Img的Src $(\。至此已经对该插件做了大体的介绍,对于简单的事件和配置项便不再做介绍。

6.5 Ajax分页

在本系统中有两种分页的方式一种是后台管理中的信息列表中的分页,这也是常规的分页,是通过查询结合Pager这个JavaBean来实现的,在此处不做详细介绍。另外一种分页方式则是通过Jquery的Ajax实现的分页,这是在商品展示中采用的分页,这种方式的好处是能够异步加载数据,页面实现局部刷新。下面对Jquery的Ajax的分页做详细的介绍:

要使用Jquery的Ajax分页需要引入一个Javascript插件,并且设置相应的CSS样式还需要在页面中设置

37

成都学院学士学位论文(设计) pageNav.go()方法,并且将点击的页面传入到这个方法中,对于分页过后还有相应操作的则需要去重写pageNav.go()方法,在本系统中对于该方法的重写主要体现在Jquery对DOM的操作上。在该方法的重写中代码较多,不便于粘贴出来,该方法中的答题流程是首先通过Ajax请求数据,然后将数据解析通过Jquery操作将数据展示到页面上。

在分页查询的服务器端的处理也是非常的简单的,想通过查询条件生成相应的查询语句,让后通过如下代码实现分页查询,代码如下:

Query query = session.createQuery(hql) ; query.setFirstResult((pageNumber-1)*20); query.setMaxResults(20);

如上代码,通过Hibernate Session的createQuery[15]方法获取到Hibernate的Query对象,该对象有两个方法是用于处理分页的,一个是setFirstResult,需要传入一个Int类型的参数,表示查询的起始页,另外一个方法是setMaxResults,也需要一个Int类型的参数,该方法表示的是最大的返回结构数,也就是每页的查询数量。最后通过Query对象获取到数据集合返回给页面,这样就实现了分页的查询。

38

成都学院学士学位论文(设计) 7 系统测试

7.1 功能测试

对于功能测试本系统主要体现在测试用例的编写上,采用的是JUnit4进行测试的。在本系统中首先建立了一个BaseTestCase的基类,基类代码如下: @RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations={\public class BaseTestCase {}

如上代码所示,首先通过@RunWith设置测试由SpringJUnit4ClassRunner进行操作管理,SpringJUnit4ClassRunner是对JUnit4的进一步封装。然后通过@ContextConfiguration注解设置locations为classpath:beans.xml,这句注解的意思是加载Spring的配置文件,这样测试的基类就建立好了。

对于其它的测试用例都是继承成BaseTestCase这一个基类,在测试用例上同样需要添加

@RunWith(SpringJUnit4ClassRunner.class)注解。下面用一个测试方法来讲解测试的过程,该

方法如下: @Test

public void getAll(){

List members = memberService.getAll(); for(Member member:members){ }

member.setPassword(DigestUtils.md5Hex(\memberService.update(member);

如上代码所示,需要在方法上添加@Test注解就行了,然后在整个方法体中做测试的操作,对于该测试方法可以通过Run Test进行测试,Junit进行会根据测试的情况给出测试结果。

7.2 性能测试

通过简单的测试可知系统的性能良好,各个页面间的跳转反应迅速,对于数据的存取和解析效率也非常的搞,同时Jquery的Ajax获取数据效果也不错,整体页面流程,数据交换号。

39

成都学院学士学位论文(设计) 8 系统部署

本系统的开发是采用的MyEclipse发开工具,服务器采用的是Tomcat,这两种工具在Windows下面都十分的容易操作。在程序的开发的过程中需要在本地建立Tomcat服务器,然后通过Myeclipse建立起与Tomcat之间的联系,在Myeclipse中可以通过Run On Service将项目发布到Tomcat中并启动Tomcat服务器。在MyEclipse中还有一种方法可以将项目添加到服务器中,该方法是在Tomcat服务器上右键将项目添加到Tomcat中,然后重启服务器即可。

对于将项目发布到服务器中的方法也非常的简单,对于Java代码而言只需要向服务器更新编译后的Class文件即可,就是将classes文件夹下的文件更新到服务器相应的目录下即可。对于其它的资源文件直接将其向服务器更新即可。

40

成都学院学士学位论文(设计) 结 论

本篇论文主要介绍了基于SpringMvc的购物平台的设计与实现,在论文主要从需求分析、相关技术、数据库分析与设计、概要设计、详细设计、重难点分析、系统测试、项目部署等几个方面详细的介绍了该系统的设计与实现。

在需求分析中对系统的一些功能模块做了简单的介绍,分别冲商品的浏览、商品的选购、登录、注册、个人中心、后台管理等几个模块详细的介绍了系统的需求。在需求分析中对系统的可行性从经济可行性、技术可行性、操作可行性、法律可行性等几方面详细的分析了系统,最后才确定系统是可行的。在相关技术的介绍中,本文对使用到的技术一个工具都简单的有所介绍和分析。在使用的技术中详细的介绍了Spring、SpringMvc、Hibernate、Javascript、Jquery、Freemarker等,这些技术中既有处理服务器的Spring和Hibernate也有处理页面效果的Javascript、CSS。对于开发工具的介绍就主要介绍了Myeclipse开发工具,MyEclipse是本系统所有代码的编辑器,在工具的介绍中同样对数据库Mysql、服务器Tomcat做了详细的介绍。在数据设计中从数据库的设计原则、数据库的结构设计、ER关系图三方面详细的介绍了数据库的分析与设计。在系统的概要设计中是通过系统功能模块与系统功能流程这两方面来详细介绍的。在详细设计中是通过对公共模块的设计与实现和系统模块的实现这两大方面来介绍的。在重难点中分析中总共分析了5个部分,这五部分包含了Java服务器开发、页面标签的使用、插件的使用、Javascript的运用等多方面。最后事对系统的测试和部署的简单的介绍。

在整个系统的设计与实现的过程中虽然遇到不少的问题,但是最终都很好的完成了本系统的设计与实现,并且取得了一定的效果。当然系统在设计方面还存在许多的不足的方面需要改进,同时程序也有一定量的Bug,这些都还需要修改与完善

41

成都学院学士学位论文(设计) 参考文献

[1] 张海藩.软件工程导论[M].北京:清华大学出版社,2003

[2] 程显生,郭艳光.基于Spring和Hibernate数据访问技术研究与应用[J].制造业自动

化,2011,33(5):152-154,178

[3] 陈辉,赵洪升,张艳春等.Struts+Spring+Hibernate框架的整合实现[J].河南大学学报(自

然科学版),2010,40(6):642-645

[4] 李林,施伟伟.JavaScript程序设计教程[M].北京:人民邮电出版社,2008 [5] 朱印宏.犀利开发jQuery内核详解与实践[M].北京:清华大学出版社,2010 [6] 徐锋,陈暄.UML面向对象建模基础[M].北京:中国水利水电出版社,2006 [7] 朱龙梅.浅论在线购物系统的分析与设计[J].陕西教育(高教),2013,(7):116-117 [8] 习胜丰,汪材林.在线购物系统的设计与实现[J].湖南城市学院学报(自然科学

版),2009,18(3):71-73

[9] 黄莉.基于MVC的在线购物系统设计与实现[J].计算机光盘软件与应

用,2010,(9):147,146

[10] 刘伟,张利国.Hibernate开发与实战[M].北京:电子工业出版社,2009 [11] Craig Walls, Ryan Breidenbach. Spring in Action[M]. Montana USA: Manning

Publications, 2007

[12] Mak G, Guruzu S. Hibernate Recipes[M]. California: Apress, 2010

[13] Brown S, Dalton S, Jepp D. Pro JSP 2[M]. Fourth Edition. California: Apress, 2005 [14] Bear Bibeault. Yehuda Katz. jQuery in Action[M]. Montana USA: Manning Publications,

2008

[15] Bloch J. Effective Java[M]. Second Edition. New Jersey -- NJ: Addison-Wesley, 2008

42

成都学院学士学位论文(设计) 致 谢

在毕业设计完成之际,我由衷的感谢我的毕业设计导师李立老师,在从确定选题到完成毕业设计的整个过程中,李立老师对我提供了许多的帮助,经常督促我的毕业设计和毕业论文的完成进度。并且经常对我毕业设计提出宝贵的建议和意见,同时对于我的不足也能够及时的发现并提出来。李立老师勤奋的工作作风、严谨的治学态度、积极进取的精神面貌,都将成为我今后治学、工作和做人的榜样。另外,我在程序设计过程中遇到问题时也得到了其他同学的热情帮助,他们提出了有益的建议和意见。在此我对所有帮助过我的老师和同学表示衷心的感谢和良好的祝愿!

在此我也由衷的感谢公司在我毕业设计这段时间并没有给我太多的工作压力,同时感谢公司的同事对我热心的帮助。

43