基于BS模式的网上购物系统_第1页
基于BS模式的网上购物系统_第2页
基于BS模式的网上购物系统_第3页
基于BS模式的网上购物系统_第4页
基于BS模式的网上购物系统_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

摘要随着Internet技术的发展,越来越多的交易活动都在网络上进行,网上购物已经成为一种时尚.鉴于此我们针对图书的网上交易开发了一个网上图书订购系统.本系统以页面的方式向顾客展示网上书城的书籍,并需要顾客注册为网上书城的会员,为会员提供购物和留言的功能.购物时为顾客提供购物车和定单功能;游客有浏缆商品和浏缆留言板的功能.为网站管理员提供对各个版块的管理功能.本系统使用eclipse作为开发工具,基于B/S模式,采用MVC框架对整体进行设计,以跨平台语言java作为低层代码实现语言.M(model)层使用Hibernate技术访问数据库,数据库使用的是MySql数据库;C(controller)层主要用struts技术实现;而使用jsp来实现V(view)层的界面设计;使用Tomcat作为本系统Server端服务器.关键词:雪域书城、Hibernate、Struts、jsp、java、Mysql、TomcatAbstractAlongwiththeInternettechnology'sdevelopment,moreandmoretransactionactivitiescarriesonthenetwork,on-lineshoppingalreadybecameonefashion.Inviewofthefactthatthiswehavedevelopedon-linebooksordersysteminviewofthebookson-linetransaction.Thissystembypage'swaytothecustomerdemonstratedthaton-linebookcitythebooks,andneedthecustomerregistrationforon-linebookcitymember,providestheshoppingandthemessagefunctionforthemember.Whenshoppingprovidestheshoppingcartandtheorderformfunctionforthecustomer;Thetouristhastheclearcablecommodityandtheclearcablemessagecenter'sfunction.Providesforthewebsitemanagertoeachsectormanagementfunction.Thissystemuseseclipsetotakethedevelopmentkit,inthepatternisbasedontheB/Spattern,thewholeusestheMVCframe,realizesthelanguagebycrossplatformlanguagejavaastheunderlyingbedcode.TheM(model)levelusestheHibernatetechnologytovisitthedatabase,whatdatabaseuseistheMySqldatabase;TheC(controller)levelmainlyrealizeswiththestrutstechnology;ButusesjsptorealizetheV(view)levelcontactsurfacedesign;UsesTomacttotakethissystemServerendserver.keyword:Snowterritorybookcity,Hibernate,Struts,jsp,java,Mysql目录TOC\o"1-3"\h\u摘要 1Abstract 21绪论 52开发环境和开发工具简介 62.1eclipse概述: 6eclipse项目简介: 62.2java语言简介 62.2.1Java语言特性 62.2.2丰富的类库 62.3jsp概述: 72.4.1JSP的技术原理 73开发所用框架 73.1Hibernate概述: 7(1)持久化与关系数据库 7(2)对象/关系阻抗不匹配 8(3)阻抗不匹配的几个典型方面 8(4)对象/关系映射 83.2struts技术原理: 83.2.1struts整体框架: 83.2.2struts工作原理: 94系统需求分析 94.1系统主要功能详细描述 94.2系统角色及其功能分析 104.3系统功能模块设计 105总体设计 114.1系统用例图: 144.1.1用户用例图: 144.2DB层设计: 154.1.2各类E-R图: 15图2.3.6 185.2DAO层设计 215.3SERVICE层设计 215.4WEB层设计 226系统详细设计 236.1前台部分 236.1.1前台总体框架 23使用Hibernate连接数据库: 24部分数据库表的结构设计: 25部分数据库建表语句: 256.1.2用户管理模块 326.1.3修改密码: 336.1.4购物车模块 346.1.6留言板模块 387致谢 428参考文献 429附录一中英文对照文献 441绪论互联网的浪潮席卷了我们生活的每一寸空间,从全球咨询,到奇闻异事;从时事要闻到衣食住行;只有我们想不到的没有在网络上找不到的.由此可见互联网给我们工作、生活、学习所带来的翻天覆地的变化。随着Internet的迅猛发展,电子商务也以不可思义的速度融入到我们的生活中,以他便利,安全,可靠的优点冲击着传统的交易方式,网上购物已经被越来越多的人接受,并逐渐成为一种时尚.Internet技术得到持续、猛烈的发展,已经成为计算机产业的一个技术热点,越来越多的企业开始关注网络,许多人正在或正准备学习网络知识,进行网络开发或创建自己的网站。本次毕业设计是基于B/S模式的网上购物系统,采用MVC框架.使用到的技术主要包括Hibernate,Struts等基于java的开源框架,使用jsp进行动态网页的设计.使用mysql数据库对数据进行存储,应用服务器使用的是Tomcat服务器.本次网上购物系统是由我和另外两人组成的三人小组共同开发完成的,本系统主要分为用户管理,留言管理,产品管理,定单管理,购物车管理,管理员管理6个模块;我负责对其中的用户管理,留言管理,购物车管理3个模块进行开发.在此次毕业论文中,首先对开发中所有到的相关技术进行了简单介绍:包括elipse的体系结构和安装,以及开发环境的配置;Java语言的特征和他的应用前景;Hibernate的工作原理,配置文件和他的优点;Jsp的技术原理;Struts的整体框架和工作原理.然后是对需求分析和详细设计,包括数据库的结构设计;使用Hibernate连接数据库,以及对本人所作模块的展示和部分实现代码.2开发环境和开发工具简介2.1eclipse概述:eclipse项目简介:

eclipse是一个开放源码社区,专注于开发框架和示范工具的通用平台,从而使得构建和部署软件更简单且成本有效.这个大型联盟包括主要软件供应商,解决方案提供商,企业,教研机构和个人,他们密切合作,一起创建一个生态系统,以便用补充的产品,能力和服务增强和形成eclipseeclipse为三类支持者提供价值

基于eclipse的产品的用户将获益于:提供对整个eclipse生态系统中研究和知识的访问;经受开放源码社区详细审查而产生的高质量软件;eclipse一致接口导致的重用技术的能力.eclipse平台是一个具有一组强大服务的框架,这些服务支持插件,比如JDT和插件开发环境(PDE).它由几个主要的部分构成:平台运行库,工作区,工作台,团队支持和帮助.

2.2java语言简介2.2.1Java语言特性Java是一个广泛使用的网络编程语言,它是一种新的计算概念。首先,作为一种程序设计语言,它简单、面向对象、不依赖于机器的结构、具有可移植性、鲁棒性、安全性、并且提供了并发的机制、具有很高的性能。其次,它最大限度地利用了网络,Java的小应用程序(applet)可在网络上传输而不受CPU和环境的限制。另外,Java还提供了丰富的类库,使程序设计者可以很方便地建立自己的系统。Java语言有下面一些特点:简单、面向对象、分布式、解释执行、鲁棒、安全、体系结构中立、可移植、高性能、多线程以及动态性。2.2.2丰富的类库Java提供了大量的类以满足网络化、多线程、面向对象系统的需要。(1.)语言包提供的支持包括字符串处理、多线程处理、例外处理、数学函数处理等,可以用它简单地实现Java程序的运行平台。(2.)实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。(3.)输入输出包用统一的"流"模型来实现所有格式的I/O,包括文件系统、网络、输入(4.)低级网络包用于实现Socket编程。(5.)抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件,包括窗口、菜单、滚动条、对话框等,使得Java可以移植到不同平台的机器。(6.)网络包支持Internet的TCP/IP协议,提供了与In-ternet的接口。它支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。2.3jsp概述:2.4.1JSP的技术原理JSP语言及其特点在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。JSP页面看上去象标准的HTML和XML页面,并附带有JSP引擎能够处理和抽取的额外元件。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给用户。程序片段可以操作数据库、重新定向网页以及发送E-mail等,这就是建立动态网站所需要的功能。所有程序都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低。它基于强大的Java语言,具有良好的伸缩性,在网络数据库应用开发领域具有得天独厚的优势。JSP技术加速了动态Web页面的开发:3开发所用框架3.1Hibernate概述:Hibernate是一个用于开发Java应用的对象/关系映射框架。它通过在数据库中为开发人员存储应用对象,在数据库和应用之间提供了一座桥梁,开发人员不必编写大量的代码来存储和检索对象,省下来的精力更多的放在问题本身上。(1)持久化与关系数据库持久化的常见定义:使数据的存活时间超过创建该数据的进程的存活时间。数据持久化后可以重新获得它;如果外界进程没有修改它,它将与持久化之前相同。对于一般应用来说,持久化指的是将数据存储在关系数据库中。

关系数据库是为管理数据而设计的,它在存储数据方面很流行,这主要归功于易于使用SQL来创建和访问。

关系数据库使用的模型被称为关系模型,它使用二维表来表示数据。这种数据逻辑视图表示了用户如何看待包含的数据。表可以通过主码和外码相互关联。主码唯一的标识了表中的一行,而外码是另一个表中的主码。(2)对象/关系阻抗不匹配关系数据库是为管理数据设计的,它适合于管理数据。然而,在面向对象的应用中,将对象持久化为关系模型可能会遇到问题。这个问题的根源是因为关系数据库管理数据,而面向对象的应用是为业务问题建模而设计的。由于这两种目的不同,要使这两个模型协同工作可能具有挑战性。这个问题被称为对象/关系阻抗不匹配(Object/relationalimpedancemismatch)或简称为阻抗不匹配(3)阻抗不匹配的几个典型方面在应用中轻易实现的对象相同或相等,这样的关系在关系数据库中不存在。

在面向对象语言的一项核心特性是继承,继承很重要,因为它允许创建问题的精确模型,同时可以在层次结构中自上而下的共享属性和行为。而关系数据库不支持继承的概念。

对象之间可以轻易的实现一对一,一对多和多对多的关联关系,而数据库并不理.解这些,它只知道外码指向主码。(4)对象/关系映射前页列举了一些阻抗不匹配的问题,当然开发人员是可以解决这些问题,但这一过程并不容易。对象/关系映射(Object/RelationalMapping)就是为解决这些问题而开发的。

ORM在对象模型和关系模型之间架起了一座桥梁,让应用能够直接持久化对象,而不要求在对象和关系之间进行转换。Hibernate就是ORM工具中最成功的一种。它的主要优点是简单,灵活,功能完备和高效。3.2struts技术原理:3.2.1struts整体框架:基于struts的MVC模式即Model-View-Controller的缩写,是一种常用的设计模式。MVC减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。Struts是MVC的一种实现,它将Servlet和JSP标记(属于J2EE规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。3.2.2struts工作原理:控制:struts需要用到一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充ActionFrom(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问javabean或调用EJB。最后动作类把控制权传给后续的JSP文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。基于struts的MVC模式的三层模式介绍如下:视图(View):主要由JSP生成页面完成视图,Struts提供丰富的JSP标签库:Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。模型(Module):模型以一个或多个javabean的形式存在。这些bean分为三类:ActionForm、Action、JavaBeanorEJB。ActionForm通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用JavaBean或EJB等。控制(Controller):在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。4系统需求分析4.1系统主要功能详细描述(1)用户可以注册,登录。(2)登录用户可以查看用户资料,修改密码,添加收货人,删除收货人。(3)所有用户可以浏览商品列表及每个商品的详细信息。(4)所有用户可以进行查询本站所拥有的自己需要的物品。(5)所有用户可以查看用户留言列表,登录用户可以留言。(6)登录用户可以进行购物,并会像超市的购物车一样放入自己需要的物品以便后面的下单。(7)登录用户可以对自己的购物车进行相关操作。(8)登录用户可以在进行购物后,进行下单,网站可以对定单进行处理。(9)用户只能查看自己已经有的定单,并能看到每个定单的详细信息。(10)后台管理员可以对用户进行添加,删除,修改和查询操作。(11)后台管理员可以对商品进行添加,删除,修改和查询操作。(12)后台管理员可以查看所有的用户对应的定单。并能对每个定单进行删除操作。(13)后台管理员可以对用户留言进行删除操作。4.2系统角色及其功能分析系统主要用户有三类:游客,登陆用户,管理员。游客主要可以用的功能是:查看所有商品,搜索商品,查看商品详细信息,查看用户留言列表。登录用户主要可以用的功能:查看修改自己的资料,查看所有商品,搜索商品,查看商品详细信息,购买商品,下定单,查看定单,查看用户留言列表,留言。管理员主要功能:操作普通管理员信息,操作用户信息,操作产品信息,操作定单信息,操作用户留言信息。4.3系统功能模块设计功能结构图如下:网上购网上购书系统网上购书系统前台功能后台功能用户管理用户购买书用户留言个人资料管理留言板管理商品管理用户信息管理链接信息管理留言管理订单管理管理员身份验证功能模块设计图从图中可以看出,网上购物系统可以分为前台和后台两个部分,前台部分由用户使用,主要包括用户注册,生成订单,购物车管理,查看购物车,查看留言,订购产品,订单查询和发布留言7个模块;后台部分由管理员使用,主要包括管理员身份验证,商品管理,处理订单,用户信息管理,留言管理,连接信息管理6个模块。5总体设计网上书城系统是基于B/S架构。实现网上售书的电子商务网站。系统使用Java语言开发,利用到Hibernate和Struts等开源框架,整个系统分成多层,有效实现了系统各部分的低偶合.整个系统主要有:表现层.业务层.数据访问层。利用软件分层把系统偶合度降低。在数据访问层,使用接口和和实现分离。上层的服务只依赖于底层的接口,底层的实现方式改变不会影响到上层的服务。这样就会最大程度的降低了软件各部分之间的偶合。便于以后修改底层的实现。在分层的基础上。有将软件分模块,从而使系统横向上面分模块,纵向上面分层次。整个软件的层次是:表现层业务层数据访问层DB整个软件根据系统需求分析,可得出系统两种用户的业务流程图。前台用户操作业务流程为:开始浏览用户留言信息览商品列表登录浏览商品详细信息登录NN登录YY添加商品进购物车用户留言购物车生成定单退出结束在用户业务流里面,首先用户连接到主界面,主界面显示所有商品,并且提供商品的搜索服务,在主界面可以直接连接到用户留言列表界面,在主界面还可以连接到用户登录界面。用户在主界面可以浏览所有的商品,也可以查看商品的详细信息,在用户主界面和商品详细信息界面,用户可以将商品添加进购物车,此操作只有登录用户可以使用,非登录用户选自添加进购物车会被拦截到未登录界面。用户在留言主界面可以进行留言。非登录用户不能留言。用户可以点击购物车,进入购物车界面,在购物车界面,用户可以对购物车里的商品进行删除操作,也可以将购物车中的商品修改数量,还可以清空购物车。也可以在购物车界面选择继续购物,连接到主界面继续选择商品。用户还可以在购物车界面进行下单操作。将购物车里的商品生成定单。在生成定单之前.需要用户添加收获人地址,一个用户可以添加多个收货人地址.生成定单后,用户可以查看自己的定单。后台管理员的业务流程为:开始登录管理员主界面有权限N权限出错页面Y管理员管理用户管理产品管理定单管理留言管理退出结束在后台中,管理员可以直接进入管理员入口登录管理员管理界面。在管理员管理的主界面显示的是管理员所有的操作。管理员可直接选择操作进入不同的管理界面,对管理员管理主要有超级管理员来实现,其他管理员没有此操作。用户管理界面直接显示所有用户的列表,在用户管理界面。管理员可以选择添加和删除用户,在产品管理界面,管理员可以添加和删除产品。定单管理界面。管理员可以删除定单。留言管理界面。管理员可以删除留言。4.1系统用例图:4.1.1用户用例图:4.1.2管理员用例图:4.2DB层设计:4.1.2各类E-R图:(1)User(用户):User有11个属性,分别是:userid,username,password,createtime,addr,telephone,e_ma,gender,age,state,role.User的E-R如图2.3.1所示.UsernnamePasswordstateUsernnamePasswordstateUserUserUseridRoleCreatetimeUseridRoleCreatetime图2.3.1(2)UserItem(收货人):UserItem有7个属性,分别是:user_item_id,item_name,item_address,item_email,item_mobilelphone,item_officephone,item_postcode.UserItem的E-R图2.3.2所示.Item_addressUser_item_idItem_nameItem_addressUser_item_idItem_nameItem_emailItem_emailUseritemUseritemItem_mobilephoneItem_mobilephoneItem_postcodeItem_officephoneItem_postcodeItem_officephone图2.3.2(3)Message(用户留言):Message有4个属性,分别是:Messageid,title,content,usernameMessage的E-R图如图2.3.3所示.contentmessageIdtitlecontentmessageIdtitleUsernameUsernameMessageMessage图2.2.3(4)Module(管理员权限):module有2个属性,分别是:moduleId,moduleName Module的E-R图如图2.3.4所示:Module_nameModule_idModule_nameModule_idModuleModule图2.2.4(5)Admin(管理员):Admin有5个属性,分别是:adminid,adminname,password,email,telAdmin的E-R图如图2.2.5所示:passwordadminidadminnamepasswordadminidadminnameAdminAdmintelemailtelemail图2.2.5(6)Catalog(书籍分类)Catalog有3个属性,分别是:catalogid,catalogname,descriptionCatalog的E-R图如图2.3.6所示:descriptiondescriptioncatalognamecatalogidcatalognamecatalogidCatalogCatalog图2.3.6(7)Product(商品):Product有11个属性,分别是:name,isbn,printer,author,price,productid,booknum,state,imagepath,description,createtimeProduct的E-R图如图2.3.7所示.nameisbnnameisbnprinterauthorbooknumdescriptionImagepathcreatetimepricestateProductidproduct图2.3.7`(8)Order(定单):Order有5个属性,分别是:orderid,totalprice,orderstate,payinfo,createtime.Order的E-R图如图2.2.8所示:orderstateorderidtotalpriceorderstateorderidtotalpriceorderorderpayinfocreatetimepayinfocreatetime图2.2.8(9)OrderItem(定单条目):OrderItem有2个属性,分别是:order_item_id,qualityOrderItem的E-R图如图2.3.9所示:qualityqualityorder_item_idorder_item_idorder_itemorder_item图2.3.9(10)对各个类的E-R图进行,并标出他们之间的对应关系,得到整体E-R图.其中一个User(用户)可以有多个Message(留言),可以添加多个UserItem(收获人),可以创建多个Order(定单);一个UserItem(收获人)可以创建多个Order(定单);一个Order(定单)可以增加多个OrderItem(定单条目);一个Product(商品)可以存在于多个OrderItem(定单条目)中;一个Catalog(商品类型)中可以有多个此类的Product(商品);一个Admin(管理员)可以有多个Module(权限),一个Module(权限)可以为多个Admin(管理员)所有.MessageMessageTalknTalkuserItemaddUser1userItemaddUser1n1createcreate1createncreateorderordern1addaddcreateProductHaveorderItemncreateProductHaveorderItemn1ncatalog1cataloghavemoduleadminhavemoduleadminmn5.2DAO层设计在数据访问层,将全部使用接口和实现分离,这样便于以后更换数据库,降低了数据访问层与数据库之间的偶合度。在这层中,主要是对数据库的表操作。我们利用的是Hibernate技术。这是一种ORM技术,可以将关系数据库中存的每条记录都对应成一个实体,由于所有数据库中的表都只通过DAO来访问,所以在DAO中要有每个表的入口。因此,要为每和实体类对应一个DAO。5.3SERVICE层设计Service主要是系统的业务逻辑,也就是系统的实际的业务逻辑活动,是系统的真正的核心,这一层主要都是一些业务。同时这一层中应该加上事务,因为,对数据库的操作可能出现异常,而Service完全依赖于DAO,所以当数据库出现异常后,这里可以对未完成的事务进行回滚。5.4WEB层设计WEB层主要是用来接收用户请求,并通过请求的不同选择相应的服务来处理请求,再把结果表现给用户。这样在WEB中把请求,服务和表现分开。我们在Java的开源框架中选择Struts来做WEB层,我们首先利用Action来接收请求,在Action中有不同的方法来处理不同的请求,再在Action中调用相应的Service来处理请求。对执行结果进行判断后,选择不同的JSP来进行表现。Struts中这种开发我们成为MVC模式,下面是MVC模式的图解,以及在本系统中的具体作用: C控制层 ActionnewRequestreturnM模型层浏览器forward/redirectResponseV视图层Jsp6系统详细设计6.1前台部分6.1.1前台总体框架前台部分由用户使用,包括用户注册,购物车管理,留言板管理,个人资料管理等几个部分。(1)模块功能介绍用户管理:为了便于网站的管理,必须有一套完整的用户管理体系。该网站用户管理模块由用户注册,用户登陆,修改密码部分组成。购物车:所选商品须通过购物车进行保存,然后生成订单。查看用户资料:为了方便用户为自己或他人购买书籍,用户登陆后即可添加收获人信息。留言板:用户登录以后可以查看和添加留言信息,对于游客可以查看留言信息.雪域书店首页雪域书店首页Index.jsp用户注册pages/register.jsp留言板pages/listmessage.jsp产品列表pages/listproduct.jsp用户登录pages/login.jsp用户注册pages/register.jsp留言板pages/listmessage.jsp产品列表pages/listproduct.jsp用户登录pages/login.jsp查看用户资料biz/userinfo.jsp修改密码biz/updatepassword.jsp用户留言biz/addmessage.jsp查看用户资料biz/userinfo.jsp修改密码biz/updatepassword.jsp用户留言biz/addmessage.jsp加入购物车biz/cartlist.jsp添加收获人地址biz/adduseritem.jsp查看定单biz/orderinfo.jsp添加收获人地址biz/adduseritem.jsp查看定单biz/orderinfo.jsp生成定单biz/orderlist.jsp生成定单biz/orderlist.jsp退出退出(2)数据库操作:使用Hibernate连接数据库:<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <propertyname="hibernate.show_sql">true</property> <propertyname="hibernate.format_sql">true</property> <propertyname="dialect">org.hibernate.dialect.MySQLDialect</property> <propertyname="connection.url"><!—使用mysql数据库所用的URL和数据库字符的设置--> jdbc:mysql://:3306/angd?useUnicode=true&characterEncoding=utf8 </property> <!--所使用的数据库的用户名和密码--> <propertyname="connection.username">root</property> <propertyname="connection.password"></property> <propertyname="connection.driver_class">com.mysql.jdbc.Driver</property><!—使用到的实体类映射文件路径--> <mappingresource="com/tarena/bookshop/entity/User.hbm.xml"/> <mappingresource="com/tarena/bookshop/entity/UserItem.hbm.xml"/> <mappingresource="com/tarena/bookshop/entity/Message.hbm.xml"/> </session-factory></hibernate-configuration>部分数据库表的结构设计: 表1是对e_user的描述列名说明类型备注userid用户IDint不允许空,主健username用户姓名varchar不允许空password用户密码varchar不允许空 表2是对e_user_item的描述列名说明类型备注user_item_id收货人每项IDint不允许空,主健item_name收货人的名字varchar可以为空item_address收货人的地址varchar可以为空item_postcode收货人的邮编varchar可以为空item_officephone固定电话varchar可以为空item_mobilephone移动电话varchar可以为空item_email收货人人邮箱varchar可以为空userid用户IDint不允许空,外健 表3是对e_message的描述列名说明类型备注messageId留言IDint不允许空,主健tile标题varchar不允许空content留言信息varchar不允许空部分数据库建表语句:#Host:localhostDatabase:angd##Serverversion5.0.15-nt--DROPDATABASEIFEXISTS`angd`;--CREATEDATABASE`tarena`/*!40100DEFAULTCHARACTERSETgbk*/;--USE`angd`;droptablee_message;droptablee_user_item;droptablee_user;####Tablestructurefortablee_user#CREATETABLE`e_user`(`userid`int(11)NOTNULLauto_increment,`username`varchar(30)NOTNULL,`password`varchar(15)defaultNULL,`createtime`datedefaultNULL,`state`int(11)default'0',`role`int(11)default'0',PRIMARYKEY(`userid`))DEFAULTCHARACTERSETutf8;##Dumpingdatafortablee_user###Tablestructurefortablee_user_item#CREATETABLE`e_user_item`(`user_item_id`int(11)NOTNULLauto_increment,`item_name`varchar(30)defaultNULL,`item_address`varchar(100)defaultNULL,`item_postcode`varchar(10)defaultNULL,`item_officephone`varchar(50)defaultNULL,`item_mobilephone`varchar(20)defaultNULL,`item_email`varchar(50)defaultNULL,`userid`int(12)NOTNULL,PRIMARYKEY(`user_item_id`),KEY`userid`(`userid`))DEFAULTCHARACTERSETutf8;createtablee_message(messageIdintegerauto_increment,tilevarchar(32),content varchar(32),primarykey(messageId));(3)网站前台首页的运行结果如图1所示:图1首页主要是向用户展示书店的书籍,并利用分页技术显示多余的书籍.在头部的左上角显示用户的状态.显示主页的JSP页面如下,他是通过form表单向Action传送数据,Action端利用request接送数据. <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@pageimport="com.ahut.bookshop.entity.Product"%><!--jsp:directive.pageimport="com.tarena.bookshop.entity.Product"/--><%@taglibprefix="c"uri="/jsp/jstl/core"%><%@taglibprefix="html"uri="/tags-html"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html> <head> <metahttp-equiv="Content-Language"content="zh-cn"> <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"> <metaname="description"content="雪域书城"> <title>雪域书城</title> <LINKhref="<%=request.getContextPath()%>/css/style.css" rel=stylesheet> <scriptlanguage="JavaScript" src="<%=request.getContextPath()%>/js/tarena.js"></script> </head> <bodybackground="<%=request.getContextPath()%>/images/bg.gif" onLoad="MM_preloadImages('<%=request.getContextPath()%>/images/index_on.gif','<%=request.getContextPath()%>/images/reg_on.gif','<%=request.getContextPath()%>/images/order_on.gif','<%=request.getContextPath()%>/images/top/topxmas/jp_on.gif','<%=request.getContextPath()%>/images/top/topxmas/download_on.gif','<%=request.getContextPath()%>/images/top/topxmas/bbs_on.gif','<%=request.getContextPath()%>/images/top/topxmas/designwz_on.gif')" topmargin="0"leftmargin="0"rightmargin="0"bottommargin="0"> <jsp:includeflush="true"page="/common/header.jsp"></jsp:include> <tablecellspacing=1cellpadding=3align=centerwidth="90%" class=tableBorder2> </table> <br> <formmethod="post"name="searchform" action="<%=request.getContextPath()%>/page/product.do"> <tablecellpadding=3cellspacing=1align=centerwidth="90%" class=tableborder1> <tr> <tdvalign=middlealign=centerheight=25 background="<%=request.getContextPath()%>/images/top_r.gif"width=""> <fontcolor="000000"face="隶书"size=3><b>搜索</b></font> </td> </tr> <tr> <tdclass=tablebody2valign=middlealign=centerwidth="" height="30"> 搜索: <inputtype="text"name="text"maxlength="30"/> <inputtype="radio"name="radio"value="author"/> 作者名 <inputtype="radio"name="radio"value="bookname"/> 书名 <inputtype="radio"name="radio"value="printer"/> 出版社 <inputtype="radio"name="radio"value="createtime"/> 出版日期    <selectname="catalog"> <optionvalue="0"selected>--种类--</option> <optionvalue="1">程序设计</option> <optionvalue="2">文学书籍</option> <optionvalue="3">英语书籍</option> </select> 种 类 <inputtype="hidden"name="method"value="searchProduct"> <inputtype="button"value="开始搜索"class="button" onclick="javascript:searchform.submit();"/> </td> </tr> </table> </form> <tablecellspacing=1cellpadding=3align=centerwidth="90%" class=tableBorder2> <tr> <tdheight=25valign=middle> <imgsrc="<%=request.getContextPath()%>/images/Forum_nav.gif" align="absmiddle"> <fontcolor="">共有${size}个结果:</font> </td> </tr> </table> <br> <!--hrcolor="red"width="97%"--> <tablewidth="100" height="60%" align="center" class=tableborder1> <!--tr> <tdvalign=middlealign=centerheight=25 background="<%=request.getContextPath()%>/images/bg2.gif"width=""> <fontcolor="#ffffff"><b>序号</b></font> </td> <tdvalign=middlealign=centerheight=25 background="<%=request.getContextPath()%>/images/bg2.gif"width=""> <fontcolor="#ffffff"><b>产品名称</b></font> </td> <tdvalign=middlealign=centerheight=25 background="<%=request.getContextPath()%>/images/bg2.gif"width=""> <fontcolor="#ffffff"><b>价格</b></font> </td> <tdvalign=middlealign=centerheight=25 background="<%=request.getContextPath()%>/images/bg2.gif"width=""> <fontcolor="#ffffff"><b>操作</b></font> </td> </tr--> <c:iftest="${!emptyproducts}"> <c:forEachvar="product"items="${products}"varStatus="status"> <trheight="40"> <!--tdclass=tablebody2valign=middlealign=centerwidth=""> ${status.count} </td--> <tdrowspan="2"width="100"> <a href='<%=request.getContextPath()%>/page/product.do?method=listDetail&productid=${ductid}'> <imgborder="0" src="<%=request.getContextPath()%>/${product.imagepath}" width="127"height="180"> </a> </td> <tdclass=tablebody1align=leftalign=centerwidth="40%"><h1>书名: <a href='<%=request.getContextPath()%>/page/product.do?method=listDetail&productid=${ductid}'>${} </a> </h1> </td> <tdclass=tablebody2align=leftalign=centerwidth="20%">作者: ${product.author} </td> <tdclass=tablebody2align=leftalign=centerwidth="20%">价格:¥ ${product.price} 元 </td> <tdclass=tablebody1align=leftalign=centerwidth="20%">操作: <!--将商品加入购物车中--> <a href="<%=request.getContextPath()%>/biz/cart.do?method=addCart&productid=${ductid}"> <imgborder="0" src="<%=request.getContextPath()%>/images/car_new.gif" width="97"height="18"></a> </td> </tr> <trheight="100"> <tdcolspan="4"class=tablebody2valign=middlealign="left"width="">简介: ${product.description} </td> </tr> <trheight="20"bgcolor="#EFEFEF"> <tdcolspan="5"> </td> </tr> </c:forEach> <tr> <!--这一行专门用来做分页显示的--> <tdclass="tablebody2"colspan="5"align="center"> ${navigation} </td> </tr> </c:if> </table> <!--当没有搜索到结果时,应给用户一个友好的提示--> <c:iftest="${emptyproducts}"> <tablecellpadding=3cellspacing=1align=centerwidth="97%" > <tr> <tdclass=tablebody2align=center> <fontcolor="red"><h2>对不起!没有搜索到您需要的商品!请重试!</h2></font> </td> </tr> </table> </c:if> <jsp:includeflush="true"page="/common/footer.jsp"></jsp:include> </body></html>6.1.2用户管理模块对于前台页面的用户来说,用户管理主要是注册,登录;以及登录以后的修改密码和查看用户资料。其流程图如图所示:首页登录首页登录登录修改密码查看用户资料注册注册NYYYNN(1)用户注册当用户第一次登录时首先要注册,成为会员后,才可以使用购物车购买物品,进行留言.用户可以通过单击首页的注册按键来打开注册页面进行会员注册操作,用户注册页面的运行结果如图2所示.图2注册用户名如果已经存在,则给出用户提示信息,保证用户在本系统的用户名都是独一无二的.并利用验证码技术防止恶意注册.(2)用户登录用户登录窗口的超链接设置在首页上,由超链接转到用户登录界面,主要用来接收用户输入的用户名和密码,并更新用户在网站中的状态信息.会员登录窗口的运行结果如图3所示:图3若用户名或密码错误给出相应的提示信息,若登录成功则进入主也面,此时在页面头部右上角会出现登录的用户名.:6.1.3修改密码:用户资料修改在前台主页右上角,单击“修改密码”链接,进入用户修改密码页面.利用旧密码再次验证用户的登录密码,通过两此输入新密码确认用户的新密码.若成功则将用户的新密码更新到数据库;不成功则给出相应的错误信息.其运行结果如图4:所示.:图4其核心代码如下:publicActionForwardupdatepassword(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse) throwsException{ UserServiceuserService=newUserService(); Stringpassword1=request.getParameter("password1").trim(); Stringpassword2=request.getParameter("password2").trim(); Stringpassword3=request.getParameter("password3").trim(); HttpSessionsession=request.getSession(); Useruser=(User)session.getAttribute("user"); if(!password1.equals(user.getPassword())){ Stringmessage="旧密码错误,请重新输入"; request.setAttribute("message",message); returnmapping.findForward("updatepassword"); }elseif(!password2.equals(password3)){ Stringmessage="两次密码输入不一致,请重新输入"; request.setAttribute("message",message); returnmapping.findForward("updatepassword"); } user.setPassword(password2); userService.modifyUser(user); returnmapping.findForward("updatepassword_success"); }6.1.4购物车模块在超市购物,可以根据自己的需要将很多的物品挑选到购物车(篮)中。而在网上虚拟的购物商城中,通常都会采用一种被称做“购物车”的技术来模拟现实生活。这种技术用起来十分方便,不但可以随时添加,查看,修改,清空购物车中的内容,还可以随时去收银台结帐。游客和登录用户都可以在首页浏览本系统的商品,并查看商品详细信息。要想购买商品必须先登录。本系统为每个登录用户提供一个购物车,用户在本系统购买商品时可以像在超市中一样把要买的商品放入购物车。在购物车界面用户可以选择继续购物,删除不满意的商品,最后确认定单进入定单管理界面。其流程图如图所示:首页(浏览商品)登录首页(浏览商品)登录登录加入购物车删除一个商品继续购物确认定单提交定单(1)添加购物车、添加购物车就是把用户选中的商品放在购物车中。当用户在前台首页中单击商品展示区的“”按钮时,系统会将该商品的详细信息展示在查看物品清单页中,运行结果如图5所示:图5可以修改书籍的数量,然后点保存修改就可.点击"确认定单"进入定单管理模块.其代码实现如下所示: <tablecellpadding=3cellspacing=1align=centerclass=tableborder1> <tr> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>序号</b></font> </td> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>产品名称</b></font> </td> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>价格</b></font> </td> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>数量</b></font> </td> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>合计</b></font> </td> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>操作</b></font> </td> </tr> <c:iftest="${!emptyducts}"> <c:forEachvar="carproducts"items="${cart.cartProducts}"varStatus="status"> <tr> <formmethod="post" action="<%=request.getContextPath()%>/biz/cart.do"name="f1"> <inputtype="hidden"name="productid"value="${ductid}"> <inputtype="hidden"name="number"value="${carproducts.num}"> <inputtype="hidden"name="method"value="modify"> <tdclass=tablebody2valign=middlealign=centerwidth=""> ${status.count} </td> <tdclass=tablebody1valign=middlewidth="">    ${} </td> <tdclass=tablebody2valign=middlealign=centerwidth=""> ${duct.price} </td> <tdclass=tablebody1valign=middlealign=centerwidth=""> <inputtype="text"name="num"value="${carproducts.num}"size="4" onblur="javascript:if(this.value<1){alert('对不起,产品数量不能小于1');this.focus();}else{number.value=this.value;}"/> </td> <tdclass=tablebody2valign=middlealign=leftwidth="">    ${carproducts.total} </td> <tdclass=tablebody1valign=middlealign=centerwidth=""> <inputtype="button"value="删除"class="button" onclick="ja

温馨提示

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

评论

0/150

提交评论