摘 要
在信息社会中,随着电脑与网络技术的日益发达,电子商务空前发展,许多商品的销售也逐渐从有形的市场转向虚拟的网络,为了满足人们购书的需求,网上书店应运而生。
网上书店系统的创建可以更好地解决人们因没有时间到书店而不能买到自己需要的书籍的问题,旨在书店与消费者之间架起一座高速、便捷的网上信息桥梁,从而节省用户的时间、方便他们购书,使其永远走在时代的前沿。
本毕业设计严格遵循软件开发流程,使用MVC模式,采用开源框架Struts、Spring、Hibernate进行开发,后端的数据库采用MySQL,通过JDBC驱动程序和数据库进行无缝连接,应用可以跨平台的Web应用技术JSP开发的网上购物系统—网上书店。设计的主要目的是了解Web应用程序的这些开源框架技术,熟练使用框架开发的流程。
系统的功能主要分为两部分:一是前台网上订购图书功能,包括用户注册登录、购物车、订单生成等;二是后台管理员对用户、图书、订单等的管理功能。
对管理员而言,用户、会员、图书管理等模块实现了添加、删除、修改、浏览的功能,订单管理模块实现了订单处理、查看、删除的功能。对会员而言,可以通过输入图书名称搜索图书,可以查看自己的购物车和订单信息。
本论文主要论述了网上书店系统的功能设计与实现过程,包括需求分析、系统设计、数据库设计及相关前后台页面的界面设计等。
关键词:网上书店,Struts,Spring,Hibernate,MVC,JSP
I
河南理工大学毕业设计(论文)说明书
Abstract
In the information society, with the computer and network technology increasingly developed, the unprecedented development of e-commerce, sales of many commodities markets have gradually shifted from the tangible virtual network, in order to meet the needs of people textbook, online bookstore came into being.
Online bookstore system can be created to better address the people because there is no time to the bookstore to buy their own needs and not the issue of books designed to build a bridge between consumers bookstore high-speed, convenient online information bridge, which saves users time facilitate their books, so that it always walk in the forefront of the times.
Graduation strictly follow the software development process, the use of the MVC pattern, using the open-source framework Struts, Spring, Hibernate for development, backend database using MySQL, and databases through JDBC drivers for seamless connectivity, applications can be cross-platform Web application technologies JSP development of the online shopping system - online bookstore. The main purpose of the design is to understand these open source Web application framework technology, skilled use of framework development process.
The main function of the system is divided into two parts: First, order books online reception features, including user registration login, shopping cart, order generation, etc.; Second, background administrator user, books, orders and other administrative functions.
For the administrators, users, membership, books management module, delete, modify, add browsing, order management module realizes the order processing, view, delete function. The membership, to search for books by entering the library name, you can view your shopping cart and order information.
This paper mainly discusses the online bookstore system function design and implementation process, including requirements analysis, system design, database design and associated front and back pages of the interface design. Keywords: online bookstore;Struts;Spring;Hibernate;MVC;JSP
II
河南理工大学毕业设计(论文)说明书
目 录
1 前言 ............................................................. 1
1.1 网上书店研究背景及意义 ..................................... 1 1.2 网上书店的研究现状 ......................................... 2 1.3 课题主要工作 ............................................... 2 2 系统技术及运行环境 ............................................... 3
2.1 主流技术框架 ............................................... 3
2.1.1 Struts框架 ............................................ 3 2.1.2 Spring框架 ............................................ 3 2.1.3 ORM中间件名流Hibernate ................................ 4 2.2 MySQL简介 .................................................. 4 2.3 MyEclipse简介 .............................................. 4 2.4 MVC设计模式 ................................................ 5 3 需求分析 ......................................................... 7
3.1 项目概述 ................................................... 7 3.2 用例图 ..................................................... 7 4 系统设计 ........................................................ 11
4.1 系统架构设计 .............................................. 11 4.2 模块设计 .................................................. 11
4.2.1 功能结构 .............................................. 11 4.2.2 功能详细说明 .......................................... 12 4.3 数据库设计 ................................................ 13
4.3.1 概念模型设计 .......................................... 13 4.3.2 逻辑模型设计 .......................................... 16
5 系统实现 ........................................................ 24
5.1 后台管理员登录模块设计 .................................... 24
5.1.1 数据校验 .............................................. 24 5.1.2 控制器类 .............................................. 26 5.2 购物车管理页面 ............................................ 27
III
河南理工大学毕业设计(论文)说明书
5.2.1 视图层 ................................................ 27 5.2.2 业务控制器 ............................................ 28 5.3 图书管理页面 .............................................. 34 5.4 书店前台界面设计 .......................................... 35 7 总 结 ........................................................... 37 致 谢 .............................................................. 39 参考文献 ........................................................... 40
IV
河南理工大学毕业设计(论文)说明书
1 前言
1.1 网上书店研究背景及意义
随着网络时代的发展,信息技术、数据库技术的不断发展,网络进程的加快,传统的购物方式已经越来越不能满足人们快节奏的生活需求,网上书店正是适应了当今社会快节奏的生活,打破地域与空间的限制,以一种全新的姿态步入我们的生活,给图书爱好者一个全新的购书体验。
它以其方便、快捷的优势冲击着传统的图书发行行业,与传统书店相比,网上书店的建立可以大大减少图书销售中的中间环节,节省大量的人力、物力,并且图书种类丰富,读者可以随时随地的查询及订购所需图书,节省了他们许多宝贵的时间。另外,还便于商家根据读者留言,为其提供个性化服务,极大地满足了读者的需求。
随着业务量的增长,客户量及图书量都会大幅度增加。这意味着,网上书店的访问量的提高,同时需要处理的数据量也更加庞大,这对网上书店系统的性能就有了更高的要求。
网上书店的管理者们发现,他们的系统越来越不堪重负,越来越不能够满足客户的需求。比如,现有的图书信息检索系统效率低下,按图书标题进行的一个简单搜索也要花费10秒钟。如此慢的响应速度,成了该系统的软肋。因此,“解决性能瓶颈,提高服务质量,并为在未来扩展客户服务范围打下良好基础”,成为管理者们的燃眉之急。
经过以上的分析,可得网上书店具有光明的前景。因此,构建一个应用系统之前,首先考虑的是采用哪种结构来实现这个应用系统,怎样设计可以实现组件之间的松散耦合,使其具有良好的灵活性,所以对项目开发框架的选择很重要。本课题在开发过程中使用轻量级架构SSH来处理页面逻辑、业务控制和对象的持久化工作,即用Struts来架构表示层,用Spring来架构业务层,而用Hibernate架构持久层,然后把这些框架无缝的整合起来,使系统的结构更加清晰,同时简化开发工作。使用MYSQL作为后台数据库,MYSQL是高性能、客户/服务器的RDBMS(关系型数据库管理系统),能够支持大吞吐量的事务处理,具有较高的安全性,也能与其他系统进行完好的交互操作。
1
河南理工大学毕业设计(论文)说明书
1.2 网上书店的研究现状
目前,国内外网上书店都很多,如国内的当当和卓越亚马逊,国外的亚马逊。 国外的网上书店由于起步早,现在已较为成熟,最具代表性的首推亚马逊网上书店。亚马逊具有高质量的综合书目数据库和方便的图书检索系统,经营的图书达400多万种,如今已成为全球的最大网上书店,控制着美国80%的网上图书销售市场。
相对来说,国内的网上书店起步晚,与国外有一定的差距。由于服务不完善、查询、分类形式单一,注重图书数量的丰富而忽略图书及相关知识和信息的提供,并且我国有许许多多的中小型书店仍只是采用传统书店的经营模式,而这种模式需要大量的人力、物力,且库存难以满足所有顾客的需求。随着人们日益增长的购书需求,图书数量剧增,有关购书的信息业成倍增长,这就需要有一个好的信息支持平台。面对庞大的信息量,有必要开发网上书店来提高管理工作的效率,也顺应了电子商务的潮流.
1.3 课题主要工作
网上书店系统主要采用JSP、MySQL、Struts等技术来实现,遵循软件开发流程,进行了需求分析、系统设计、数据库设计和代码实现。
它的主要功能是实现后台图书管理的自动化,图书新增、删除的及时化,会员及管理员信息的更新,订单的及时处理,围绕这些主要功能,本系统涉及到以下核心功能:图书管理、订单管理、会员管理等。
该系统设计的主要目标是:
设计一个网上书店系统,主要功能分为图书查询、订单、购物车和后台图书、管理员管理等。在订单模块中,用户能够将自己喜欢的图书添加至购物车,生成订单;在图书查询模块中,用户能输入需要查询的图书名称按条件查询;在图书管理模块中要求能完成如添加图书的分类、图书是否特价、图书的基本信息等日常管理功能。
2
河南理工大学毕业设计(论文)说明书
2 系统技术及运行环境
2.1 主流技术框架
所谓框架就是提供了一组统一的接口和编程方式的可重用组件,同时我们可以在框架中扩充我们自己的特定逻辑。
目前主流的技术框架如下:
2.1.1 Struts框架
Struts是最早的Java开源框架之一,也是现在Java Web框架的事实标准,现在的绝大多数Java Web应用程序都是基于Struts框架构建的。
Struts是MVC设计模式一个优秀的实现。Struts定义了通用的Controller(控制器),通过配置文件(一般是struts-config.xml)隔离了Model(模型)和View(视图),以Action的概念对用户请求做了封装,使代码更清晰易读。Struts还提供了自动将请求的数据填充到对象中以及页面标签等简单编码工具。Struts使开发大型Java Web项目成为可能。
2.1.2 Spring框架
Spring的出现改变了Java世界。它的目标是使现有的JavaEE技术更易用和促进良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面。它主要作为依赖注入容器和AOP实现存在。还提供了声明事务、对DAO层的支持等简化开发的功能。Spring还可以很方便地与Struts、Hibernate等技术集成,致力于Java EE应用的各层的解决方案,而不是仅仅专注于某一层的方案,可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。
Spring的核心概念是IoC(Inversion of Control),IoC的抽象概念是控制反转。它可以完成组件之间的依赖关系注入,使得组件之间的依赖关系达到最小,进而提高组件的重用性。
通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控
3
河南理工大学毕业设计(论文)说明书
制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用。
2.1.3 ORM中间件名流Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
对于对象——关系映射ORM(Object-Relation Mapping),它是用来将对象和对象之间的关系对应到数据库表与表之间的关系的一种模式。
现在,ORM工具有很多种,其中比较有影响力的一种就是Hibernate。
Hibernate的确是一个优秀的持久化框架,主要负责简化将对象数据保存到数据库中或从数据库中读取数据并封装到对象的工作。通过简单配置和编码即可替代JDBC繁琐的程序代码。Hibernate处理数据库操作的方式代表了当前的趋势。
2.2 MySQL简介
MySql是一个快速、多线程、多用户的SQL数据库服务器,其出现虽然只有短短的数年时间,但凭借着“开放源代码”的东风,它从众多的数据库中脱颖而出,支持正规的SQL查询语言和采用多种数据类型,能对数据进行各种详细的查询等特点。
MySQL的开发者为瑞典MySQL AB公司,它作为开放源码的小型关联式数据库管理系统,目前被广泛地应用在Internet上的中小型网站中。正因为其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,所以许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
2.3 MyEclipse简介
MyEclipse,是一个十分优秀的用于开发Java,J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。
4
河南理工大学毕业设计(论文)说明书
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完全支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate。
MyEclipse目前支持Java Servlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具。
本系统采用的开发环境为MyEclipse 8.5+MySQL Server 5.1+JSP。
2.4 MVC设计模式
MVC是模型(Model)、视图(View)和控制(Controller)的缩写,其目的实现Web系统的职能分工。其中Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现;View层用于与用户的交互,通常用JSP来实现;Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
MVC是一个设计模式,模式图如图2-1,它强制性的将应用程序的输入、处理和输出分开。MVC使应用程序被分成三个核心部件:模型、视图、控制器,它们各自处理自己的任务。
3、调用5、输出1、接收用户输入ViewController
图 2-1 MVC模式图 5
2-2、返回处理结果4、参照2-1、调用Model河南理工大学毕业设计(论文)说明书
模型组件:负责业务逻辑,模型包含应用程序的核心功能,模型封装了应用程序的状态。有时它包含的唯一功能就是状态,它对视图或控制器一无所知。
视图组件:负责表示业务范围的视图,视图提供模型的表示,它是应用程序的外观。视图可以访问模型的读方法,但不能访问写方法。此外,它对控制器一无所知。当更改模型时,视图应得到通知。
控制器组件:负责控制用户输入的流和状态,控制器对用户的输入作出反应。它创建并设置模型。
6
河南理工大学毕业设计(论文)说明书
3 需求分析
3.1 项目概述
随着Internet的飞速发展,网上购物已成为越来越多人首选的购物方式。商家可以通过这个电子商务平台销售自己的图书,消费者可以通过该系统订购自己要买的图书。
消费者通过网上书店系统的用户界面,可以浏览图书、查看图书的详细信息。在浏览图书的过程中,如果消费者对某本图书感兴趣,则可以将其添加到购物车。消费者随时可以查看购物车中的情况,并及时更新。购物活动完成后,消费者如需购买,必须结账生成订单。消费者可以搜索查询所需的书籍,如果不存在可以填写缺书登记,也可以给管理员留言。消费者可以针对某本图书发表自己的评论。
系统管理员从后台管理程序入口登录,如果验证通过,则具有管理员权限,可以进入后台管理系统,维护图书信息、管理订单、管理留言、管理用户等模块。
3.2 用例图
用例图用来确定需求的范围,这些需求是设计开发的依据。用例图将系统看作黑盒,从外部执行者的角度来理解系统。图中的用例是用户与计算机之间一次典型的交互作用,在UML中,用例表示为一个椭圆,执行者是指用户在系统中用类似人的图形来表示的,但执行者未必是人。例如,执行者可以是一个外界系统,该外界系统可能需要从当前系统中获取信息,与当前系统进行交互。
根据以上需求分析,我们利用Rational Rose画出系统的主要用例图,如图3-1所示。主要的角色包括系统管理员和顾客。
7
河南理工大学毕业设计(论文)说明书
图3-1 系统用例图
系统主要用例说明如下: 1. 会员登录和注册
会员登录是电子商务网站应用必须具备的功能之一。博友网上书店系统登录页面要求用户输入用户名和密码,在输入用户名和密码之后,系统将验证用户名和密码是否正确。如果验证成功,就使会员处于登录状态,否则,系统显示用户名和密码错误的信息。会员登录Use Case图如3-2所示。
图 3-2 会员登录用例图
另外,游客在登录页面中能够进行新会员注册,这时系统要求用户输入用户注册信息,包括用户名、电子邮箱、居住地址、邮政编码等内容。新会员注册Use Case图如
8
河南理工大学毕业设计(论文)说明书
图3-3所示,新会员注册要检验注册信息,然后成为会员,具有普通会员的功能。当用户登录后可以随时修改个人的注册信息。
图 3-3 新会员注册用例图
2. 浏览与搜索图书
用户可以通过系统浏览各种图书。在系统主页面提供了所有图书列表,通过单击某种图书的链接,用户可以查看该图书的名称、描述和单价等信息以及添加该图书到购物车的通道。用户还可以根据图书作者、图书名称搜索图书信息。
3. 维护购物车
当用户单击“添加到购物车”按钮时,图书会被自动添加到购物车中。在购物车页面,将列出用户的购物车中的所有图书,并且会列出每种图书的图书名、作者、出版社等相应信息。用户也可以修改、删除购物车的内容。
4. 填写/确认订单
当用户最终确定所选购的图书后,进入购物车页面,生成订单。生成订单是网上书店系统的最终目的,购物车的所有功能实现都是为最后生成一个客户满意的订单做基础。客户还可以点击“我的订单”,查看订单的状态。
9
河南理工大学毕业设计(论文)说明书
5.管理员后台登录
只有管理员才有权限进入后台,所以要设计管理员的登陆功能。管理员输入用户名和密码后,系统会检验用户名、密码和权限是否正确,校验成功后,进入后台系统,进行图书的管理操作和其他信息的维护。管理员Use Case图如图3-4所示。
图 3-4 管理员登录用例图
10
河南理工大学毕业设计(论文)说明书
4 系统设计
在分析了整个网站的需求以后,下面开始设计系统的整体架构。
4.1 系统架构设计
整个系统遵循多层次的架构模式,从上到下依次为视图层、控制器层、模型层、持久化层和数据库层,如图4-1所示。
层次间的依赖关系的原则应该是自顶向下的,即上层可以依赖下层,而下层应该尽量减少对上层的依赖,同时层次之间的交互应该体现延迟实现的原则,通过接口进行交互。例如在网上书店系统中使用Hibernate实现持久化层,若要采用其他机制实现持久化层时,不需要改动业务逻辑中的代码。
视图层和控制器层使用Struts2框架实现,持久化层使用Hibernate实现。
最后由Spring技术整合所有功能,配置数据源。并且管理组件与组件之间的关系,使整个系统有效地运行。
图4-1系统架构
4.2 模块设计
4.2.1 功能结构
根据用例分析,网上书店系统分为前台和后台两大部分。前台部分由用户使用,主要包括用户注册、登录和修改信息、购物车、生成及查询订单和留言板、图书查询等模块。后台部分由管理员使用,主要包括管理员登录、图书类别管理、图书信息管理、会员管理、订单处理、公告管理等模块。
系统的功能结构如图4-2所示:
11
河南理工大学毕业设计(论文)说明书
图4-2 博友网上书店系统功能结构图
4.2.2 功能详细说明
前台部分:
1、 用户注册、登录
用户进入书店首页,可以在页面顶端点击“注册”按钮。新用户注册进行数据校验成功后成为网站会员,可以登录到网站查询、浏览、购买图书。
图4-3 用户注册、登录功能图
2、图书浏览
当浏览网页的时候,可以单击某一图书,查看该图书的详细信息(包括图书名、厂家、市场价等)。
12
河南理工大学毕业设计(论文)说明书
3、查询图书
可以在网站的查询框中按图书名搜索图书也可以按作者查找图书。系统将查询结果(如果有此图书返回图书的详细信息,如果没有返回当前没有此图书的信息等)返回。
4、订购图书
在浏览图书时会员可以查看选中图书的详细信息并添加此图书到购物车,最后选择是否购买此图书。
5、订单查询
会员可以随时查看自己的购物车,查看自己的订单详细情况。 后台部分: 1、管理员登录
通过图书后台管理系统,输入具有相应模块的管理员权限的用户名和密码,数据校验成功后进入后台管理主界面,对相应模块的信息进行管理。
2、图书分类管理
管理员可以进入图书分类管理页面添加二级图书类别,对其进行管理。 3、会员级别管理
在会员级别管理页面添加指定用户为会员,设置级别属性及会员积分。 4、图书、会员、订单、公告、友情链接管理
管理员进入后台管理系统可以对这些模块进行添加、编辑、删除等操作。
4.3 数据库设计
4.3.1 概念模型设计
博友网上书店系统中的业务实体如下:
图书(book):代表一个图书实体,其主要属性有图书ID(id)、图书名称(bookName)、作者(author)、ISBN号(isbn)、出版社(publisher)、描述(description)、价格(price)、库存(stock)、图片(picture)、出版时间(pubDate)、图书类别ID(typeId)、优惠价(sprice)、是否特价(special)、发布状态(status)、图片保存路径(HtmlPath)。
图书类别(btype):图书类别ID(id)、一级图书分类ID(ParentID)、图书类别名称(typeName)。
13
河南理工大学毕业设计(论文)说明书
订单(orders):代表一个订单实体,其主要属性有订单ID(ID)、会员ID(MemberID)、购物车ID(CartID)、订单号(OrderNO)、订购日期(OrderDate)、订单状态(OrderStatus)。
会员(member):代表一个会员实体,其主要属性有会员ID(id)、会员级别ID(MemberlevelID)、登录账号(LoginName)、登录密码(LoginPwd)、真实姓名(MemberName)、电子邮箱(EMail)、居住地址(Address)、邮政编码(Zip)、电话(Phone)、注册日期(RegDate)、最后日期(LastDate)、登录时间(LoginTimes)、会员积分(Integral)。
会员级别(memberlevel):ID(id)、会员级别名称(LevelName)、会员积分(Integral)、优惠百分比(Favourable)。
购物车(cart):其主要属性有ID(id)、会员ID(MemberID)、金额(Money)、购物车状态(CartStatus)。
购物车商品选购记录表(cartselectedbook):ID(id)、购物车ID(CartID)、图书ID(BookID)、选购数量(Number)、价格(Price)、金额(Money)。
友情链接(link):ID(id)、链接名称(linkName)、链接地址(linkAddr)。 公告(notice):ID(id)、公告标题(noticeTitle)、公告内容(noticeContent)、公告日期(noticeDate)。
图书评论(remark):ID(id)、图书ID(bookId)、用户ID(userId)、评论题目(remarkTitle)、评论内容(remarkContent)、评论日期(remarkDate)。
用户留言(comment):ID(id)、用户ID(userId)、留言标题(commentTitle)、留言内容(commentContent)、留言日期(commentDate)。
管理员(admin):代表一个管理员实体,其主要属性有管理员ID(id)、管理员姓名(adminName)、管理员密码(adminPassword)、权限(power)。
为了描述各个模型,可以使用实体关系图,即E-R图(ERD,Entity Relationship Diagram)。用实体关系图描述实体模型能够预先精确定义数据需求,从而能够对以后的改动做出有效的规划。以上部分实体的E-R图如下所示。
14
河南理工大学毕业设计(论文)说明书
管理员信息实体如图4-4所示:
图4-4 管理员实体的E-R图
图书实体如图4-5:
图4-5 图书信息实体的E-R图
15
河南理工大学毕业设计(论文)说明书
订单实体如图4-6:
图4-6 订单信息的E-R图
4.3.2 逻辑模型设计
book、member、order等上述实体对象都需要持久化,它们在数据库中有对应的表。对应于数据模型,设计出的数据库一共分为12个表:图书表(book)、图书类别表(btype)、会员表(member)、会员级别表(memberlevel)、购物车表(cart)、购物车选购记录表(cartselectedbook)、订单表(orders)、图书评论表(remark)、用户留言表(comment)、管理员表(admin)、友情链接表(link)、公告表(notice)。数据库名称为bookshop,其建立的SQL语句如下:
create database if not exists „bookshop‟; 接下来创建数据表,以下是bookshop的数据字典定义: 1、图书表
表4-1图书表
字段名 id bookName author typeId 字段类型 字段长度 是否允许为空 int varchar varchar int 11 45 45 11 否 是 是 是 是否为主键 是 否 否 否 描述 图书ID 图书名称 作者 图书类别ID isbn publisher varchar varchar 64 64 是 是 16
否 否 ISBN号 出版社
河南理工大学毕业设计(论文)说明书
续表 4-1
字段名 字段类型 字段长度 是否允许为空 (20,0) 是 是 是 是 (8,2) 11 11 100 是 是 是 是 是 是否为主键 否 否 否 否 否 否 否 否 否 描述 图书描述 价格 库存 图片 出版日期 会员价 特价 状态 图片保存路径 description text price stock picture pubDate sprice special status HtmlPath double smallint 5 varchar datetime decimal int iInt varchar 32 约束:id作为主键,不允许重复,不允许为空。
2、图书类别表
表4-2 图书类别表
字段名 id 字段类型 字段长度 是否允许为空 是否为主键 int 11 11 否 是 是 是 否 否 描述 图书类别ID 上级类别ID 图书类别名 ParentID int typeName varchar 45
3、会员表
表4-3 用户表
字段名 字段类型 字段长度 是否允许为是否为主描述 空 键 是 否 否 否 会员ID 会员级别ID 会员登录名 会员登录密码
17
id int 11 11 否 是 是 是 MemberlevelID int LoginName LoginPwd varchar 20 varchar 50
河南理工大学毕业设计(论文)说明书
续表 4-3
字段名 EMail Address Zip Phone RegDate LoginTimes Integral
4、订单表
字段类型 字段长度 是否允许为空 是否为主键 描述 varchar 100 varchar 100 char 6 是 是 是 是 11 11 是 是 是 否 否 否 否 否 否 否 电子邮箱 居住地址 邮政编码 电话 注册日期 登录时间 会员积分 varchar 40 datetime int int 表4-4 订单表
字段名 字段类型 字段长度 是否允许是否为主描述 为空 键 是 否 否 否 否 否 订单ID 会员ID 订单ID 订单号 订购日期 订单状态 ID MemberID CartID OrderNO OrderDate int int int 11 11 11 否 是 是 是 是 是 varchar 20 datetime 11 OrderStatus int
5、会员级别表
表4-5会员级别表
字段名 ID 字段类型 字段长度 是否允许为空 是否为主键 int 11 20 11 11 否 是 是 是 是 否 否 否 描述 ID 会员级别名称 会员积分 优惠百分比 LevelName varchar Integral int Favourable int
18
河南理工大学毕业设计(论文)说明书
6、友情链接表
表4-6友情链接表
字段名 id 字段类型 字段长度 是否允许为空 是否为主键 描述 int 11 否 否 否 是 否 否 ID 链接名称 链接地址 linkName varchar 64 linkAddr varchar 128
7、公告表
表4-7公告表
字段名 字段类型 字段长度 是否允许是否为描述 为空 主键 是 否 否 否 ID 公告标题 公告内容 公告日期 id noticeTitle int varchar 11 64 128 否 否 否 否 noticeContent varchar noticeDate
8、购物车图书选购记录表
datetime 表4-8 购物车图书选购记录表
字段名 字段类型 字段长度 是否允许为空 是否为主键 ID int 11 11 11 11 否 是 是 是 是 是 是 否 否 否 否 否 描述 ID 购物车ID 图书ID 订购数量 金额 总价 CartID int BookID int Number int Price decimal (8,2) Money decimal (9,2)
19
河南理工大学毕业设计(论文)说明书
9.图书评论表
表4-9 图书评论表
字段名 id bookId userId remarkTitle 字段类型 字段长度 是否允许为空 是否为主键 描述 int int int 11 11 11 否 否 否 否 否 否 是 否 否 否 否 否 ID 图书ID 用户ID 评论题目 评论内容 评论日期 varchar 64 remarkContent varchar 128 remarkDate
10.用户留言表
datetime 表4-10用户留言表
字段名 id userId commentTitle 字段类型 字段长度 是否允许为空 是否为主键 描述 int int 11 11 否 否 否 否 否 是 否 否 否 否 ID 用户ID 留言标题 留言内容 留言日期 varchar 64 commentContent varchar 128 commentDate
11.管理员表
datetime 表4-11 管理员表
字段名 id adminName 字段类型 字段长度 是否允许为空 是否为主键 描述 int varchar 11 15 32 15 否 否 否 是 是 否 否 否 管理员ID 管理员姓名 管理员密码 权限 adminPassword varchar power
varchar 20
河南理工大学毕业设计(论文)说明书
12、友情链接表
表4-12友情链接表
字段名 ID memberID Money 字段类型 int int 字段长度 是否允许为空 是否为主键 描述 11 11 否 是 是 是 是 否 否 否 ID 会员ID 金额 购物车状态 decimal(9,2) 11 CartStatus int 创建数据表脚本:
在基本的数据表的结构确定后,就可以在mysql中完成数据表的创建工作,下面给出建立对应数据表的几个主要的SQL脚本。
(1)图书基本信息表: CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT, `bookName` varchar(45) DEFAULT NULL, `author` varchar(45) DEFAULT NULL, `typeId` int(11) DEFAULT NULL, `isbn` varchar(64) DEFAULT NULL, `publisher` varchar(64) DEFAULT NULL, `description` varchar(128) DEFAULT NULL, `price` decimal(8,2) DEFAULT NULL, `stock` int(5) DEFAULT NULL, `picture` varchar(100) DEFAULT NULL, `pubDate` datetime DEFAULT NULL, `sprice` decimal(8,2) DEFAULT NULL, `special` int(11) DEFAULT NULL, `status` int(11) DEFAULT NULL, `HtmlPath` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=gbk COMMENT='图书表';
21
河南理工大学毕业设计(论文)说明书
(2)管理员表: CREATE TABLE `admin` (
`id` int(11) NOT NULL AUTO_INCREMENT, `adminName` varchar(15) NOT NULL, `adminPassword` varchar(32) NOT NULL, `power` varchar(15) DEFAULT NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=gbk COMMENT='管理员'; (3)会员信息表: CREATE TABLE `member` (
`ID` int(11) NOT NULL AUTO_INCREMENT, `MemberlevelID` int(11) DEFAULT NULL, `LoginName` varchar(20) DEFAULT NULL, `LoginPwd` varchar(50) DEFAULT NULL, `MemberName` char(12) DEFAULT NULL, `Phone` varchar(40) DEFAULT NULL, `Address` varchar(100) DEFAULT NULL, `Zip` char(6) DEFAULT NULL, `RegDate` datetime DEFAULT NULL, `LastDate` datetime DEFAULT NULL, `LoginTimes` int(11) DEFAULT NULL, `EMail` varchar(100) DEFAULT NULL, `Integral` int(11) DEFAULT NULL, PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='注册会员表'; (4)订单表:
CREATE TABLE `orders` (
`ID` int(11) NOT NULL AUTO_INCREMENT, `MemberID` int(11) DEFAULT NULL, `CartID` int(11) DEFAULT NULL,
22
河南理工大学毕业设计(论文)说明书
`OrderNO` varchar(20) DEFAULT NULL, `OrderDate` datetime DEFAULT NULL, `OrderStatus` int(11) DEFAULT NULL, PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk COMMENT='订单表'; (5)图书类别表: /*图书类别表*/
CREATE TABLE `btype`( `id` int NOT NULL auto_increment, /*图书类别ID*/ `ParentID` int DEFAULT NULL, `typeName` varchar(45) DEFAULT NULL, /*图书类别名*/ PRIMARY KEY (`id`) /*设置id为主键*/ )ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='图书类别表';
23
河南理工大学毕业设计(论文)说明书
5 系统实现
5.1 后台管理员登录模块设计
超级管理员要维护图书、会员、订单等信息,需要进入后台管理系统登录页面,如图5-1所示,然后针对用户输入的数据,系统首先会进行数据校验,并给予提示。
图 5-1 管理员登录
5.1.1 数据校验
在Web应用程序中,为了防止客户端传来的数据引发程序的异常,需要对用户输入的数据进行验证,防止一些恶意的用户通过输入精心伪造的数据来攻击我们的系统,破坏系统的运行,窃取协同的机密资料。因此构建一个强有力的验证机制,是保障系统稳定运行的前提条件。
数据验证分为两个部分:一是验证输入数据的有效性,二是在用户输入了不正确的数据后向用户提示错误信息。以前做的系统是在Servlet中进行有效的服务器端校验,但是这种校验很繁琐,需要书写多行的校验代码才能完成一个表单的数据校验,而且这种方式开发效率低,校验不够规范。在本次毕设过程中,我们使用Struts2提供的基本验证框架来实现,主要是利用校验规则文件来对输入数据进行校验,Struts2中每个Action都可以对应一个校验文件,而且校验文件命名有一定的规范,对于管理员登录信
24
河南理工大学毕业设计(论文)说明书
息的校验,我采用了Action中某个方法的校验命名格式:
ActionClassName-ActionAliasName-validation.xml,并且通过ActionSupport的getText()方法获取国际化提示信息,管理员登录数据校验文件AdminAction-admin_login-validation.xml如下所示:
AdminAction-admin_login-validation.xml:
\"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd\"> true true 25 河南理工大学毕业设计(论文)说明书
国际化资源文件中关于管理员数据校验的信息如下所示:
图5-2 管理员登录数据校验国际化信息
如果输入的用户名和密码错误,提示信息如下图所示:
图 5-3 数据校验结果显示
5.1.2 控制器类
当用户名和密码都合法时,表单提交至控制器层的action类admin_login.action,该类具体实现如下:
AdminAction.java: /** 处理登录请求 */ public String login(){
Admin tempAdmin = adminservice.adminLogin(admin.getAdminName(),
admin.getAdminPassword());
if(tempAdmin!=null){
26
河南理工大学毕业设计(论文)说明书
ServletActionContext.getRequest().getSession().setAttribute(\"admin\",
tempAdmin);
}
return \"main\";
}else{ }
addActionError(getText(\"login_fail\")); return INPUT;
当从数据库中查询到有此用户名和密码后,页面自动跳转到后台管理系统主界面。
5.2 购物车管理页面
5.2.1 视图层
1、查看购物车cart.jsp页面
顾客在浏览图书详细信息时,通过单击“购买”按钮即可将图书放入购物车内。“购买”的响应按钮是由以下这段JS代码调用addToCart.action实现的:
购物车管理业务控制器CartAction.java的addToCart方法将指定的图书放入指定注册会员的购物车后再携带提示信息重定向到viewCart方法,viewCart方法提取当前会员的所有选购记录存入selList中,供cart.jsp展现给顾客,如下图所示。
if (!loginStatus)
alert('对不起,您尚未登录,请先登录后再选购图书,谢谢合作!');
else
window.location='addToCart.action?bookId='+bookid;
27
河南理工大学毕业设计(论文)说明书
图5-4 cart.jsp页面运行效果
2、购物车管理的国际化消息资源
messageResource_zh_CN.properties中与购物车管理相关的消息内容如下:
图5-5 购物车国际化信息
5.2.2 业务控制器
1、购物车管理业务控制器类
购物车管理业务控制器CartAction类采用模型驱动,直接使用持久化类Cart充当模型类,用于封装表单属性、请求参数及处理结果。
业务控制器CartAction.java部分代码如下:
/** 购物车处理控制器 */
28
河南理工大学毕业设计(论文)说明书
@SuppressWarnings(\"serial\")
public class CartAction extends ActionSupport implements ModelDriven /** 通过依赖注入CartService与BookService组件实例 */ CartService cartservice; BookService bookservice; /** 购物车管理所有请求中常用的参数值 */ private String actionMsg; //Action间传递的消息参数 private List private List //采用模型驱动 private Cart model=new Cart();//用于封装购物车属性模型 public Cart getModel() { } /** 处理购买请求 */ public String addToCart(){ Member member = return model; //选购的图书ID //选购数量 //选购记录ID (Member)ServletActionContext.getRequest().getSession().getAttribute(\"member\"); Cart cart = null; Book book = null; Cartselectedbook sel = null; double price = 0; if (member!=null){ 29 河南理工大学毕业设计(论文)说明书 //装载当前注册会员的购物车 cart = cartservice.loadCart(member); if (cart==null){//如果尚无购物车则为该用户创建一个购物车 } //装载被选购的图书 book = bookservice.loadBook(bookId); if (book!=null){//该图书有效 //检查是否已存在相同的选购记录 sel = cartservice.loadCartselectedbook(cart, book); if (sel==null){//不存在相同的选购记录 sel.setCart(cart); sel.setBook(book); sel.setNumber(1);//默认选购数量为1 //图书划价 cart = new Cart(); //购物车的初始状态为0,表示尚未结帐 cart.setCartStatus(0); //购物车默认总金额为0 cart.setMoney(Double.valueOf(0)); //购物车与当前注册会员进行关联 cart.setMember(member); //持久化购物车 if (!cartservice.saveOrUpdateCart(cart)){ addActionMessage(getText(\"cart_add_fail\")); } if (book.getSpecial().intValue()==1){//特价图书,购买价格即为特价 price = book.getSprice(); }else{//非特价图书,购买价格为优惠后的市场价 price = book.getPrice()*(100-member.getMemberlevel().getFavourable())/100; 30 河南理工大学毕业设计(论文)说明书 价 } sel.setPrice(price); sel.setMoney(price); //重新计算购物车总金额 //cart.setMoney(cart.getMoney().doubleValue()+price); cart.setMoney(cart.getMoney()+price); }else{//已存在相同的选购记录 sel.setNumber(sel.getNumber()+1);//选购数量加1 sel.setMoney(sel.getMoney()+sel.getPrice());//金额加一个单 //重新计算购物车总金额 //cart.setMoney(cart.getMoney().doubleValue()+sel.getPrice()); } //持久化购物车及其选购记录 if (cartservice.saveOrUpdateCart(cart)){ if (cartservice.saveOrUpdateCartselectedbook(sel)){ addActionMessage(getText(\"cart_add_succ\")); cart.setMoney(cart.getMoney()+sel.getPrice()); }else{ addActionMessage(getText(\"cart_add_fail\")); } }else{ } addActionMessage(getText(\"cart_add_fail\")); }else{//指定图书不存在 addActionMessage(getText(\"cart_add_fail\")); } }else{//会员尚未登录,无法进行在线购物 31 河南理工大学毕业设计(论文)说明书 } } addActionMessage(getText(\"cart_add_fail\")); return \"toViewCart\"; 2、Spring中配置业务控制器CartAction类 将Struts2的业务控制器CartAction委托给Spring容器负责从生成到消亡的生命周期管理,可充分利用Spring容器的IoC特性,实现高度解耦。在Spring3中配置业务控制器CartAction类使用原型模式,即设置scope=”prototype”; applicationContext.xml中配置业务控制器CartAction 3、Struts.xml中配置业务控制器CartAction类 用户的具体请求、业务控制器中的处理方法及结果展现视图之间的对应关系必须在Struts2的配置文件struts.xml中进行正确配置方能生效,对于那些具有一定命名规则的用户请求可以使用通配符实现动态方法的调用。 struts.xml中配置业务控制器CartAction viewCart / 32 河南理工大学毕业设计(论文)说明书 ${actionMsg} viewCart / ${actionMsg} viewCart / ${actionMsg} viewCart / ${actionMsg} 33 河南理工大学毕业设计(论文)说明书 4、最后订单提交成功页面如图5-6所示: 图 5-6 订单提交成功页面 5.3 图书管理页面 图书browseBook.jsp页面: 图书管理业务控制器BookAction.java的browseBook方法通过处理用户请求book_browseBook.actaion,取得图书列表并存入List实例bookList中,供browseBook.jsp展现给用户,如下图所示。 图5-7 browseBook.jsp页面运行效果 34 河南理工大学毕业设计(论文)说明书 当管理员将添加的图书发布之后,图书的状态如上图所示,那么与之对应,前台页面图书详细展示信息如下图所示: 图 5-8 图书详细信息展示页面 5.4 书店前台界面设计 1、书店欢迎页index.jsp如下图所示,页面分为用户登录和注册模块,购物车、订单模块、图书查询模块、图书分类、促销公告、图书显示等功能模块。 图5-9 网上书店系统前台页面 35 河南理工大学毕业设计(论文)说明书 2、用户登录之后,点击新书速递中的“购买”按钮,可以将图书添加至购物车,进入购物车管理页面,如图5-4所示,按照操作步骤,生成订单。点击页面顶部‘我的订单’,可以看到刚刚购买的图书的订单处理情况,如图5-10所示: 图5-10 顾客订单管理页面 3、图书查询:在页面顶端搜索图书文本框中输入所要查询的图书,如书名“纳兰词”,然后显示图书搜索结果页面: 图 5-11 图书查询结果界面显示 36 河南理工大学毕业设计(论文)说明书 7 总结 本次毕业设计的网上书店系统是基于开源框架SSH开发的,基本上实现了会员与管理员的功能需求,学生可以通过系统可以查询图书的基本信息、购物车中选购的图书信息,撤销订单、修改注册资料等操作。管理员可以通过系统对会员信息、图书信息等模块的增、删、改、查,各个模块的功能都已基本实现。 对于本文,首先介绍了网上书店这个系统所使用的一些框架及相关技术的一些简介,然后是需求分析、系统设计等。在设计过程中,对于平台的搭建花费了很多的时间和精力,但是却是整个设计中最重要的部分。平台的搭建是开发的前提。由于对于Struts标签等的应用及一些开发技术还不够熟练,使整个软件在运行时难免会遇到一些问题,所以本系统还仍有许多需要改进的地方。 基于轻量级架构SSH的网上书店系统设计的初衷是为了检验一下自己对框架知识学习的掌握认知程度,从整体来说不是很完善,实现的部分功能主要是后台管理系统、用户注册登录、购物车三个方面,还有许多功能没有实现,如:网上支付等, 如果时间允许有待改进相关的功能. 在这次毕业设计过程中,也遇到了很多问题,由于之前未曾接触过框架方面的知识,只是略懂MVC模式,而且网上书店它不仅包括后台的管理系统,还涉及前台的页面数据显示及购物车订单设计等内容,整个系统的规模,一个人做稍微庞大,同时它本身有一定的难度,需要更多的时间和精力投入。后来通过了解SSH的相关知识,对SSH有了大体的掌握,通过环境的搭建对SSH的好处有了更加深该的认识。需求的不清晰,让我困惑了很久,在后来的系统设计里做了很多返工,有时由于某个字段而更改大量的代码,这让我认识到了需求分析对系统开发的重要性,合格的需求可以让我们在此后的开发中减少很多不必要的工作。而且通过这次毕业设计,让我对整体的系统框架设计有了一个全局的认识,对struts业务控制、spring的依赖注入等内容有了更深的认识。更重要的是认识到了软件开发流程的重要性。 由于时间有限和本人在知识、经验方面的不足,在整个开发的过程中时间也比较仓促,在经过一个多月的努力之后,毕业设计才初见成效。在做的过程中,我深深地认识到知识是无穷尽的,一边学一边做,做到一个功能,总想着是不是有更好的方法可以让它更加完善,在这次做课程设计的过程中,使我深深的了解到自己的不足,有很多东西还有待去了解和学习。由于之前只是在MyEclipse里运行一些简单的小程序,当真正做 37 河南理工大学毕业设计(论文)说明书 项目的时候,真的是盲人摸象,所以我搜集了许多方面的书籍,一步一步做,发现MyEclipse这个环境不错,提供了许多插件,不用像Eclipse那样还要去安装。慢慢地,每碰到一个问题,就记录下来,逐个解决,虽说很忙碌,有时一个问题会纠结好几天,但是感觉自己学到了东西,心里仍是喜悦的。 网上书店系统做的虽说不是很好,功能也有待改进,但它是我用学到的知识一点点用心完成的。在做整个系统的过程中,使我受益匪浅,也许相对他人而言微不足道,但也能慰籍我的一片小小心灵。所以说关键还是得付出行动,写代码不是一看就会,而是只有勤于编写,运用到实际的系统中,才会掌握知识的精髓,未来我会努力去学习更多的知识来充实自己,完善自我,相信我以后会做的更好、更理想。 38 河南理工大学毕业设计(论文)说明书 致谢 首先,向两年来辛勤培养和教育、关心帮助我的恩师们表示最诚挚的敬意和感谢。 毕业设计是大学生活中的最后一个实践环节,它培养大学生综合运用所学知识和专业技能、理论联系实际、独立分析问题、解决实际问题的能力,从而使学生得到从事本专业工程技术和科学研究工作的基本训练。而计算机与科学与技术专业具有理论宽和应用能力强的特点,这就更加要求学生在实际工作中使用计算机解决问题的技能,培养学生的创新精神和创新能力。 在短暂的大学时光里,我非常感谢各位老师在我求学的过程中给予的教导和帮助,使我在各方面都不会感到无助。特别是在这一个月以来,在毕业设计及论文撰写期间,得到学校在师资、设备等方面的全力支持,使我能够顺利完成这个毕业设计,我衷心的感谢他们。 在整个毕业设计过程中,我得到了朱世松导师的悉心指导,毕业设计已经接近尾声,通过朱老师的指导以及同学、朋友们的帮助,使我顺利完成了毕业设计的课题。在毕业设计这段时间里,我认识到了自己的不足并努力的争取独立完成我的设计,最终收获很多学到了以前很多没有学到的知识,同时也巩固了所学过的知识。 感谢身边所有的朋友和同学,谢谢你们的关心与照顾,与你们一起度过的日子,将会是我一生最珍贵的回忆。 另外,还要感谢我的家人,没有你们,就没有我的今天,你们的支持与鼓励,永远是支撑我前进的最大动力。 最后,再次感谢所有帮助过我的人和仍在帮助我的人。 39 河南理工大学毕业设计(论文)说明书 参考文献 [1] 杨少敏,樊双灵.Struts2开发学习实录.清华大学出版社,2011. [2] 邱加永.Java程序设计标准教程.2010. [3] 布谢,邵维忠.UML 用户指南.机械工业出版社,2001.6 [4] 精通Java EE Eclipse Struts2 Hibernate Spring整合应用案例 [5] 博格斯,博格斯,邱仲潘.UML与Rational Rose 2002从入门到精通,电子工业出 版社,2002.7. [6] 陆凌牛,HTML 5与CSS 3权威指南 = HTML 5 and CSS 3: the definitive guide. 机械工业出版社,2011. [7] 卜炟,零基础学Struts.机械工业出版社,2009. [8] 卢翰,王国辉,JSP项目开发案例全程实录.清华大学出版社,2011. [9] 麦克法兰,李强.JavaScript实战手册.机械工业出版社,2009. [10] 秦小波.设计模式之禅 = The zen of design patterns.机械工业出版社,2010. [11] 陈雄华.精通Spring 2.x 企业应用开发详解.电子工业出版社,2007. [12] 王国辉,王毅. Java Web开发典型模块大全.人民邮电出版社. [13] 曹晓刚,唐勇.深入浅出hibernate.电子工业出版社. [14] Ryan Asleson.精通CSS:高级Web标准解决方案.人民邮电出版社. [15] 萨师煊.数据库系统概论,高等教育出版社,2000. [16] 张海藩.软件工程.人民邮电出版社,2002. [17] 王君学.网页制作基础FrontPage2002.人民邮电出版社,2001. [18] 阎宏.Java与模式.北京:电子工业出版社,2002. [19] 蔡剑景楠.Java Web应用开发:J2EE和Tomcat.北京:清华大学出版社,2005. [20] 孙卫琴,李洪成.Tomcat与Java Web开发技术详解.北京:电子工业出版 社,2004. 40 因篇幅问题不能全部显示,请点此查看更多更全内容