基于web技术的在线电子产品交易门户网站_第1页
基于web技术的在线电子产品交易门户网站_第2页
基于web技术的在线电子产品交易门户网站_第3页
基于web技术的在线电子产品交易门户网站_第4页
基于web技术的在线电子产品交易门户网站_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

摘要电子商务指利用简单、快捷、低成本的电子通讯方式,买卖双方通过网络进行各种商贸活动的一种商业交易模式。随着互联网的发展,以及人们消费观念和生活方式的改变,这种新型的商业模式逐渐融入了人们的生活中。通过企业的门户网站,人们可以足不出户的寻找自己所需的物品,通过对不同虚拟商城的访问,“顾客”可以找出性价比最高的商品,自己有极大地选择空间,通过下订单,你可以很快得到自己想要的物品,这给顾客节省很多时间和精力,对于厂家来说,可以极大的降低库存风险,根据客户需要,按需生产和采购,大大的提高了效益。本次毕业设计的题目就是设计并且实现一个基于web技术的在线电子产品交易门户网站。本系统主要以j2EE作为开发基础,使用了struts+hibernate+mysql等多种协议或技术,以Macromedia公司的Dreamweaver作为开发工具和界面美化工具。在功能方面也基本实现了电子门户网站应有的几个基本功能模块包括:管理员的登录,管理和维护;用户注册、登录、注销,个人信息的查询、修改;商品管理,购物车管理,订单管理,用户反馈;该系统界面简单、操作容易,容易维护。关键词:j2EE;struts;hibernate;Dreamweaver;mysql;tomcat;

Abstracte-commerceisanewbusinesstransaction,whichbothbuyersandsellersthroughasimple,fast,low-costelectronicmeansofcommunicationmethod.alongwiththedevelopmentoftheInternet,andpeople'sconsumptionandthewayoflifeChanges,thisnewbusinessmodelgraduallyintegrateintopeople'slives.Throughthedifferentvirtualmallvisit,peoplecanfindthemostcost-effectiveproductswithnotgoout,andtheyhavemunchself-choice.throughorders,peoplecanfindthethingswhichtheyneeded,andquicklygettheproductswhichtheyordered.Thisnewbusinessmodlecansavealotoftimeandenergyforbothcustormersandmanufacturers,andgreatlyreduceinventoryrisk.Themanufacturescanproduceandprocureaccordingtocustomerneeds,thiswascalledon-demandproductionandprocurementwhichgreatlyimprovedtheefficiency.Thissubjectofthisgraduationprojectisdesigningaweb-basedtechnologyofelectronicproductsonlinetradingportal.Thissystemismainlytoj2EEasabasisforthedevelopment,andalsousethestruts+hibernate+mysqltechnologiesandotherorders.ThisprojectuseMacromedia'sDreamweaverasthedevelopmenttoolsandinterfaceslandscapingtools.Thebasicfunctionoftherealizationelectronicportalshouldhaveafewbasicmodulesinclude:administratorlogin,managementandmaintenance;userstoregister,login,write-offs,personalinformationenquiries,amendmentstotheCommodityManagement,themanagementCart,Ordermanagement,theuserfeedback;interfaceofthesystemsimple,easytouse,easytomaintain.

Keywords:j2EE;struts;hibernate;mysql;tomcat;

TOC\o"1-3"\h\u摘要 IAbstract II1.绪论 12.开发环境及开发工具的介绍 22.1关于WEB 22.2关于J2EE 22.3.1J2EE的问世 22.3.2J2EE的优势 32.3.3J2EE的发展 32.4关于Struts 32.4.1Struts简介 32.4.2Struts的主要功能 32.4.3Struts工作原理 32.5mysql数据库 52.5.1mysql的定义 52.5.2mysql的安装和配置 52.6Tomcat服务器 72.6.1TomCat服务器简介 72.6.2Tomcat的特点 72.6.3Tomca的优势 72.6.3Tomcat服务器的安装和配置 82.7HTML语言简介 102.7.1Html语言的定义 102.7.2Html语言的特点 113hibernate数据库编程 123.1为什么引入hibernate 123.2使用Hibernate的好处 123.3Hibernate的工作原理 124电子产品交易系统需求分析 144.1系统界面要求 144.2电子产品交易系统的模块划分 144.3电子产品交易系统角色及其功能分 144.4电子产品交易系统功能分析 145电子产品交易系统总体设计 165.1设计思想概述 165.2数据库部分 165.3数据库表的E-R图 195.4系统的类设计 265.5系统的用例图 275.6系统的业务流程 286电子产品交易系统的详细设计 306.1电子产品交易系统模块的划分 306.2电子产品交易系统部分主要模块流程及的具体实现 306.2.1购物车管理模块 306.2.2后台部分 376.3电子产品交易系统的测试 44总结 45致谢 46参考文献 47附录一:英文资料原文 48附录二:英文资料译文 581.绪论在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。Internet上发布信息主要是通过WEB系统来实现的,随着社会的发展,信息受到人们的重视和关注,人们对WEB系统的关注和要求也越来越多,互联网已完全融入到人们的生活中,深深地影响了人们的生活,改变了人们的生活方式,一个比较具有代表性的例子,人们不用为了买一个手机而跑遍全市所有的数码卖场,只有鼠标轻轻的点击,通过几分钟的网上冲浪,在轻松惬意之间一切就搞定,只需在家等着送货员把货送来就行了,十分方便,现在又无法统计的电子交易网站,它们的界面十分友好,流程清晰,你不必担心自己是个新手而不知如何购物,越来越多的人们有过网上购物的经历,但人们对于一个电子门会网站是如何构建的可能都十分陌生,通过这次毕业设计,我将细致的分析如何在基于j2EE协议,运用hibernate,struts,mysql等技术实现一个电子门户网站的。这次设计,成功地实现了一个电子门户网站所必需的几个功能,例如用户模块:用户可以登陆一个网站,可以进行注册,修改个人信息,可以讲自己需要的东西放入购物车生成订单,系统可以保存用户的信息,保存订单,并且用户还可以在网站上留言,系统管理员可以管理用户的留言,可以处理用户的订单,并且可以管理用户,在管理员模块中,设有超级管理员和普通管理员,管理员的权限不同,超级管理员可以管理普通管理员的权限,在系统中,购物车是临时生成的,并不保存在数据库中,只有用户确认购买后才生成订单后才将订单保存。

2.开发环境及开发工具的介绍2.1关于WEBWEB是一组原则:互联网作为平台,利用集体智慧,数据,没有软件发布周期,轻量级编程,软件超越单一设备,丰富的用户体验WEB的主要特点就是用户可以通过浏览器从WEB系统上获取信息,用户既是WEB系统的消费者(信息获取者),同时也是这个系统的内容制造者。WEB的主要特点就是用户可以通过浏览器从WEB系统上获取信息,而在WEB2.0中,用户的角色则被提高到了一个不同的位置,它更加重视用户的交互作用,用户既是WEB系统的消费者(信息获取者),同时也是这个系统的内容制造者。 2.2关于J2EEJ2EE(Java2PlatformEnterpriseEdition)是使用Java技术开发企业级应用的一种事实上的工业标准(Sun公司出于其自身利益的考虑,至今没有将Java及其相关技术纳入标准化组织的体系),它是Java技术不断适应和促进企业级应用过程的产物。目前,Java平台有三个版本:适用于小型设备和智能卡的J2ME(Java2PlatformMicroEdition)、适用于桌面系统的J2SE(Java2PlatformStandardEdition)和适用于企业级应用的J2EE(Java2PlatformEnterpriseEdition)。2.3.1J2EE的问世Sun推出J2EE的目的是为了克服传统Client/Server模式的弊病,迎合Browser/Server架构的潮流,为应用Java技术开发服务器端应用提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。J2EE是一个标准,而不是一个现成的产品。各个平台开发商J2EE规范分别开发了不同的J2EE应用服务器,J2EE应用服务器是J2EE企业级应用的部署平台。由于它们都遵循了J2EE规范,因此,使用J2EE技术开发的企业级应用可以部署在各种J2EE应用服务器上。为了推广并规范化使用J2EE架构企业级应用的体系架构,Sun同时给出了一个建议性的J2EE应用设计模型:J2EEBlueprints。J2EEBlueprints提供了实施J2EE企业级应用的体系架构、设计模式和相关的代码,通过应用J2EEBlueprints所描述的体系模型,能够部分简化架构企业级应用这项复杂的工作。J2EEBlueprints是开发人员设计和优化J2EE组件的基本原则,同时为围绕开发工作进行职能分工给出了指导性策略,以帮助应用开发设计人员合理地分配技术资源。2.3.2J2EE的优势主要有以下几点:1.高效的开发2.持续性服务3.支持异构环境4.可伸缩性5.稳定的可用性2.3.3J2EE的发展为了推广并规范化使用J2EE架构企业级应用的体系架构,Sun同时给出了一个建议性的J2EE应用设计模型:J2EEBlueprints。J2EEBlueprints提供了实施J2EE企业级应用的体系架构、设计模式和相关的代码,通过应用J2EEBlueprints所描述的体系模型,能够部分简化架构企业级应用这项复杂的工作。2.4关于Struts2.4.1Struts简介Struts已逐步越来越多运用于商业软件,是一种非常优秀的J2EEMVC实现方式。Struts用JavaServlet/JavaServerPages技术,开发Web应用程序的开放源码的framework。2.4.2Struts的主要功能1.包含一个controllerservlet,能将用户的请求发送到相应的Action对象。2.JSP自由tag库,并且在controllerservlet中提供关联支持,帮助开发员创建交互式表单应用。3.提供了一系列实用对象:XML处理、通过JavareflectionAPIs自动处理JavaBeans属性、国际化的提示和消息。Struts项目的目标是为创建Javaweb应用提供一个开放源代framework。Strutsframework的内核是基于例如JavaServlets,JavaBeans,ResourceBundles,和XML,以及各种JakartaCommons包的标准技术的灵活的控制层。Struts提供了它自身的控制器组件,并整合了其他技术,以提供模型和视图。Struts已逐步越来越多运用于商业软件,是一种非常优秀的J2EEMVC实现方式。2.4.3Struts工作原理MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化,MVC可以让整个逻辑很清晰,这种思想和思维和人的思维很接近,很容易被理解。MVC的工作原理如图2-1所示:图2-1Struts是MVC的一种实现,它将Servlet和JSP标记(属于J2EE规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理,如图2-2所示:图2-21.Controller:在XML文件Struts-config.xml中,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充ActionFrom(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问javabean或调用EJB。最后动作类把控制权传给后续的JSP文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。2.视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP标签库:Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。3.模型:模型以一个或多个javabean的形式存在。这些bean分为三类:ActionForm、Action、JavaBeanorEJB。ActionForm通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用JavaBean或EJB等。2.5mysql数据库数据库(Database)是一系列信息资源的集合。在一个数据库中,与一个项目有关的所有信息都可以叫做一条记录(Record)。每一条记录都是由一系列的字段(Field)组成的。一系列记录的集合就构成了数据表格(Table)。对于一个简单的“平面文件”的数据库来说,它仅包含了一个数据表格,而对一个“关系型”数据库来说,它却包含两个或两个以上的数据表格,表格的各字段之间存在这一种或多种关系(有时可以把这种关系叫做“链接”)。2.5.1mysql的定义MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言—结构化查询语言(SQL)进行数据库管理。

由于MySQL是开放源代码的,因此任何人都可以在GeneralPublicLicense的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。它使用系统核心提供的多线程机制提供完全的多线程运行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等编程语言的编程接口(APIs),支持多种字段类型并且提供了完整的操作符支持查询中的SELECT和WHERE操作。2.5.2mysql的安装和配置以下是部分截图:图2-3安装时一般采用默认路径:图2-4图2-5为了支持中文,在下面的列表框中学者jb2312(切记)图2-62.6Tomcat服务器2.6.1TomCat服务器简介Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。

Tomcat中采用了Servlet容器:Catalina,完整的实现了Servlet2.3和Jsp1.2规范。Tomcat提供了各种平台的版本供下载,可以从其官方网站上下载其源代码版或者二进制版。由于Java的跨平台特性,基于Java的Tomcat也具有跨平台性。2.6.2Tomcat的特点在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。另外Tomcat也提供了一个应用:manager,访问这个应用需要用户名和密码,用户名和密码存储在一个xml文件中。通过这个应用,辅助于Ftp,你可以在远程通过Web部署和撤销应用。当然本地也可以。

2.6.3Tomca的优势Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache.我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet.这种集成只需要修改一下Apache和Tomcat的配置文件即可。

2.6.3Tomcat服务器的安装和配置在开始安装之前,先准备J2SDK和TOMCAT两个软件,如果已经安装了J2SDK,就只需TOMCAT即可。变量名:CATALINA_HOME

变量值:d:\Tomcat5.0

另外可再增加一个环境变量

变量名:CLASSPATH

变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tool.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet-api.jar;%CATALINA_HOME%\common\lib\jsp-api.jar安装J2SDK

设置环境变量,方法如下:

右击“我的电脑”==》属性==》高级==》环境变量==》新建...

变量名:JAVA_HOME

变量值:d:\j2sdk1.4.2_04

安装TOMCAT

运行jakarta-tomcat-5.0.28.exe按照提示安装,图2-7图2-8图2-9安装完成后,打开tomcat服务器,启动浏览器,在地址栏上输入:http://localhost:8080/若出现以下界面说明安装成功。图2-102.7HTML语言简介2.7.1Html语言的定义HTML(HyperTextMarkupLanguage超文本标记语言)是一种用来制作超文本文档的简单标记语言。用HTML编写的超文本文档称为HTML文档,它能独立于各种操作系统平台(如UNIX,WINDOWS等)HTML语言是通过利用各种标记(tags)来标识文档的结构以及标识超链接(Hyperlink)的信息。虽然HTML语言描述了文档的结构格式,但并不能精确地定义文档信息必须如何显示和排列,而只是建议Web浏览器(如Mosiac,Netscape等)应该如何显示和排列这些信息,最终在用户面前的显示结果取决于Web浏览器本身的显示风格及其对标记的解释能力。这就是为什么同一文档在不同的浏览器中展示的效果会不一样。HTML标记语法和文档结构2.7.2Html语言的特点HTML的标记总是封装在由小于号(<)和大于号(>)构成的一对尖括号之中。1.单标记某些标记称为“单标记”,因为它只需单独使用就能完整地表达意思,这类标记的语法是:<标记>;最常用的单标记是<P>,它表示一个段落(Paragraph)的结束,并在段落后面加一空行。2.双标记另一类标记称为“双标记”,它由“始标记”和“尾标记”两部分构成,必须成对使用,其中始标记告诉Web浏览器从此处开始执行该标记所表示的功能,而尾标记告诉Web浏览器在这里结束该功能。始标记前加一个斜杠(/)即成为尾标记。这类标记的语法是:<标记>内容</标记>;其中“内容”部分就是要被这对标记施加作用的部分。例如你想突出对某段文字的显示,就将此段文字放在一对<EM></EM>标记中: <EM>texttoemphasize</EM>3.标记属性许多单标记和双标记的始标记内可以包含一些属性,其语法是: <标记属性1属性2属性3…>4.文档结构除了一些个别的标记外,HTML文档的标记都可嵌套使用。通常由三对标记来构成一个HTML文档的骨架,它们是: <HTML> <HEAD> 头部信息 </HEAD> <BODY> 文档主体,正文部分 </BODY> </HTML>其中<HTML>在最外层,表示这对标记间的内容是HTML文档。<HEAD>之间包括文档的头部信息,如文档总标题等,若不需头部信息则可省略此标记。我们还会看到一些Homepage省略<HTML>标记,因为.html或.htm文件被Web浏览器默认为是HTML文档。<BODY>标记一般不省略,表示正文内容的开始。

3hibernate数据库编程3.1为什么引入hibernate在B/S项目的开发中,和数据库的交互式不可避免的,J2EE的规范中提供了JDBC的接口来操作数据库,对于JDBC,开发人员可以获取数据库连接,然后向数据库发送SQL语句,并返回数据库操作的结果集,然后封装成对象返回给上层的应用程序。这就造成开发人员不但要求能够编写程序,熟悉业务逻辑,还要求开发人员同时能够担任DBA,对开发人员的要求很高;同时,当引入新的项目时,很多地方必须废弃,因为我们的代码中不光是业务逻辑,其中也嵌入了许多和底层有关的一些SQL代码;另外这些嵌入在代码中的SQL语句也影响了我们程序的可测试性,我们在对代码进行调试的时候,既要测试代码,同时我们还要测试SQL语句。为了解决这些问题,引入了hibernate3.2使用Hibernate的好处1、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和AppServer,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP(Bean-Managed

Persistence)里面的访问数据库的代码。2、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和ApplicationServer没有任何关系,也不存在兼容性问题。3、Hibernate不能用来直接和EntityBean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是EntityBean的替代者出现的。4、由于是对JDBC的轻易级封闭,内存消耗少,最快的运行效率。5、开发效率高,Eclipse、JBuilder等主流JAVA集成开发环境对Hibernate有很好的支持,在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人。6、分布式,安全检查,集群,负载均衡的支持。Hibernate的工作原理Hibernate的工作就是为Object和Ralational之间提供一个映射,其工作流程如下面的图所示。图3-11.

启动Hibernate,如果在系统中添加Hibernate的支持,此处加载由系统自动完成。2.

读取hibernate.cfg.xml或者perties文件的配置信息,并将其加载为实例。3.

构建SessionFactory实例(包含二级缓存)。4.

从SessionFactory中取得Session对象,从而可以调用其方法,对数据库进行操作,实现ORM的功能。Hibernate可以通过一个XML的mapping文件把一个POJO(Plainoldjavaobject)和数据库中的表对应起来,在这个XML文件(一般命名为*.hbm.xml)中,我们可以配置好Object和数据库中标的映射关系,然后把这个mapping加入到hibernate.cfg.xml中,这样Hibernate在启动时就可以加载这些mapping,并可以根据配置文件对对象实现自动的加载,并且可以对这些Object实习自动的维护。Hibernate还提供查询语句(HQL)供应用程序使用,Hibernate对数据访问实现封装,还可以对查询语句的发送实现管理,达到优化的目的,能够有效减少数据库的访问频率。4电子产品交易系统需求分析4.1系统界面要求系统的初始界面门户首页,列出当前商品列表,用户可以浏览和检索商品但不能做其他操作,当用户注册后从新登陆后就可以进行购物,用户登录流程如图所示.4.2电子产品交易系统的模块划分本系统实现了一个电子门户网站所具有的基本功能,包括用户注册、用户登录、查找商品、提交订单购买商品,个人资料修改、提交留言,管理员的登录,管理员管理操作等……。4.3电子产品交易系统角色及其功能分电子产品交易系统应具有4个角色:(1).注册用户(2).超级管理员(3)普通管理员(4).普通的网站浏览者(即游客)4.4电子产品交易系统功能分析1、普通管理员应该具有的功能(1).产品管理包括网数据库中增加商品,修改商品的价格,数量,状态等属性….(2).对用户的管理包括添加新用户、修改用户密码、删除用户. (3)对用户订单的管理,进行发货,确认订单有效性……(4)对用户留言的管理………。2、超级管理员应具有的功能超级管理员可以管理普通管理员,其权限最高,除了具有普通管理员的用户管理,订单管理以外还有管理普通管理员的权限。 3、普通用户网站的普通浏览者(即游客)只能浏览商品。4、注册应具有的功能普通浏览者只要注册为网站用户后,获得自己的帐号,设置自己的密码就具有以下功能:登录,登出,向购物车中添加商品,生成并提交订单。添加或修改个人明细资料。

5电子产品交易系统总体设计5.1设计思想概述本电子产品交易系统是基于B/s架构下的多层结构应用系统。在此系统中每个软件都有自身的特点,因此不可能提供一个适用于所有软件的结构体系。总的来说,采用分层结构的设计思想,可以让每个层由一组相关的类或组件构成,共同完成特定的功能。层与层之间存在自上而下的依赖关系,上层组件会依赖下层组件的API,而下层组件则不依赖于上层组件。例如:表述层依赖于业务逻辑层,而业务逻辑层依赖于数据库层。并且每个层对对上层公开API,但具体的实现细节对外透明。当某一层发生变化,只要API不变,不会影响其他层的实现。如图下图:图5-1/在数据库层,该系统使用开源的mysql数据库,持久层用到Hibernate技术,业务逻辑层用普通javabean实现,表述层运用基于struts的MVC设计模式。5.2数据库部分e_order表用来保存客户的订单信息,设计出e_order表如表5.2e_order列名类型长度描述orderidint11订单IDtotalpriceNUMBER16总价钱orderstateNUMBER1订单状态payinfoDATE付款方式CreatetimeDATE创建日期useridVARCHAR220用户IDUser_item_idNUMBER8用户明细ID图5-2e_order_item表用来保存客户订单中的订单项信息,设计出e_order_item表如表5.3e_order_item列名类型长度描述order_item_idNUMBER16订单条目IDProductidNUMBER16商品对象IDOrderidVARCHAR220订单对象IDqualityNUMBER8数量numNUMBER8商品数量 图5-33.e_user表用来保存用户个人信息,设计出e_user表如表图5-4e_user列名类型长度描述user_idint11用户IDusernamevarchar30用户namepasswordvarchar15用户密码图5-44.e_user_item表用来保存用户个人明细,设计出e_user_item表如表图5-5e_user_item列名类型长度描述User_item_idint11用户IDItem_namevarchar30用户nameItem_addressvarchar15用户密码Item_postcodevarchar20邮编Item_officephvarchar50办公室电话Item_mobilephvarchar20手机Item_emailvarchar20电邮useridInt12用户Id图5-55.e_product表用来保存商品,设计出e_product表如表图5-6e_product列名类型长度描述productidint11产品modlevarchar30产品型号namevarchar15品牌名companyvarchar20出品公司weightdouble50产品重量pricedouble20价格statevarchar20产品状态createtimedate出厂日期CatalogidInt10产品类型descriptionvarchar1000产品描述图5-66.e_catalog表用来保存商品类型,设计出e_catalog表如表图5-7e_catalog列名类型长度描述catalogidint11类型IDcaatlognamevarchar30类型名descriptionvarchar100描述图5-77.e_module表用来保存权限信息,设计出e_module表如表图5-8e_module列名类型长度描述Module_idint11权限IDModule_namevarchar30权限名图5-88.e_admin表用来保存管理员,设计出e_admin表如表图5-9e_admin列名类型长度描述Admin_idint11类型IDAdmin_namevarchar30类型名passwordvarchar100描述TelVarchar20电话emailvarchar20电邮图5-99.e_admin_rights表用来保存管理员权限,设计出e_admin_right表如表图5-10e_admin列名类型长度描述admin_idint11管理员IDMod_idint30权限ID5.3数据库表的E-R图User表保存了用户的基本信息:姓名(name)和密码(password),其子表由e_user_item(用户明细),user和user_item的关系是一对多,一个用户可以有多个明细,将用户的电话地址等信息放在明细表中。图5-11其建表语句如下:CREATETABLE`e_user`(`userid`int(11)NOTNULLauto_increment,`username`varchar(30)NOTNULL,`password`varchar(15)defaultNULL,PRIMARYKEY(`userid`))DEFAULTCHARACTERSETutf8;下面是用户明细表的E-R图,图5-12对应建表语句如下: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;商品是由类型的,如数码产品由电脑,手机,mp3等,其作为product类的父表,故设计e_catalog如下:图5-13CREATETABLE`e_catalog`(`catalogid`int(11)NOTNULLauto_increment,`catalogname`varchar(100)NOTNULL,`description`varchar(100)defaultNULL,PRIMARYKEY(`catalogid`))DEFAULTCHARACTERSETutf8;e_admin表用来保存管理员,管理员信息主要有:姓名(adminname),密码(password),电话(tel),邮箱(email):管理员的权限是通过一个中间表e_adm_rights实现的,图5-14Admin的见表语句如下:createtablee_admin(admin_idintegerauto_increment, admin_namevarchar(32), passwordvarchar(32),telvarchar(32),emailvarchar(32),primarykey(admin_id))DEFAULTCHARACTERSETutf8;权限表,用来保存权限,它不直接和管理员联系,而是通过中间表e_adm_rights,这样最大限度地做到解耦合。图5-15其建表语句如下:createtablee_module(module_idintegerauto_increment,module_namevarchar(32),primarykey(module_id))DEFAULTCHARACTERSETutf8;;中间表e_admin_rights表用来保存管理员的权限,图5-16建表语句:createtablee_adm_rights(adm_idintegerreferencese_admin(admin_id),mod_idintegerreferencese_module(module_id),primarykey(adm_id,mod_id));e_order表用来保存用户的订单,主要属性有orderid(订单ID),orderstate(订单状态),payinfo(付款方式),User_item_id(订单所对应的用户明细的ID,userid订单所对应的用户的ID。图5-17Order表的见表语句如下:CREATETABLE`e_order`(`orderid`int(11)NOTNULLauto_increment,`totalprice`doubledefault'0',`orderstate`int(11)default'0',`payinfo`int(11)defaultNULL,`createtime`datedefaultNULL,`userid`int(11)NOTNULL,`user_item_id`int(11)NOTNULL,PRIMARYKEY(`orderid`),KEY`user_item_id`(`user_item_id`),KEY`userid`(`userid`))DEFAULTCHARACTERSETutf8;(以上代码创建表r_order,该表主要用来保存一个订单,并且引用用户表主键,用户名细表主键为外键,与user和user_item表为一对多的关系) 在实际运用中一个order对应多个order_items,设计order_item如下:图5-18其建表语句如下:CREATETABLE`e_order_item`(`order_item_id`int(11)NOTNULLauto_increment,`productid`int(11)NOTNULL,`orderid`int(11)NOTNULL,`quality`int(11)NOTNULL,PRIMARYKEY(`order_item_id`),KEY`productid`(`productid`),KEY`orderid`(`orderid`))DEFAULTCHARACTERSETutf8;产品表保存了产品的详细信息,设计如下:图5-19以下是其建表语句: CREATETABLE`e_product`(`productid`int(10)NOTNULLauto_increment,`module`varchar(50)NOTNULL,`name`varchar(100)defaultNULL,`company`varchar(50)defaultNULL,`price`doubledefaultNULL,`weight`int(4)defaultNULL,`catalogid`int(10)NOTNULL,`description`varchar(1500)defaultNULL,`imagepath`varchar(100)defaultNULL,`createtime`datedefaultNULL,`state`int(2)default'0',PRIMARYKEY(`productid`),KEY`catalogid`(`catalogid`))DEFAULTCHARACTERSETutf8;最后介绍一下message表,它保存了用户的留言信息。图5-20见表语句如下:createtablee_message(messageIdintegerauto_increment,useridint(11);tilevarchar(32),content varchar(32),createDatedatedefaultNULL,;primarykey(messageId));

5.4系统的类设计这是类的关系图从类关系图上可以看到:一个用户可以有多个明细(主要保存了用户收货地址,用户电话,用户邮箱等)在生成订单时,选择其中一条用户明细保存到订单中去,订单有多个订单项组成,订单订单项与产品关联,订单项保存了产品ID,订购数量,该订单条目总价格。用户可以对应多个留言类。产品和产品类型类关联,一个产品只能有一种类型,类型类是产品类的父类。在这个类关系图中,管理员类没有列出来,管理员类和权限类通过中间类(即管理员权限类)衔接在一起。管理员可以管理用户,产品,留言,和普通管理员。图5-21上图是表与表之间的关系图,图中反映出类之间的依赖关系。5.5系统的用例图 通过这张用户的用例图,我们可以看到用户所能做的业务,用户可以登录和退出系统,用户还可以注册为网站的会员成为注册用户,用户登陆以后可以修改个人信息,可以增加用户明细。关于产品操作方面,用户无论注册与否都可以浏览和检索产品,若用户登陆以后就可以将产品放入购入购物车中,进而生成订单。用户可以管理自己的购物车,可以在购物车中增加或删除商品,还可以修改放入购物车中的商品的数量等,当用户决定购买后,购物车中的商品被提交到订单项中,用户在确认订单之前还可以修改订单条目,比如返回购物车修改订购产品数量,增删所修改产品等,还可以选择或添加收货地址,可以选择付款方式,当用户确认无误后,这些信息将被提交到数据库中,订单即被生成。用户还可以在网站上留言。图5-22这张是管理员的用例图,通过这张图我们可以看到,管理员登陆系统后可以进行管理员管理,用户管理,产品管理,订单管理,留言管理等,这都是对超级管理员而言,管理员是有权限之分的,超级管理员可以添加普通管理员,可以修改普通管理员信息,比如修改普通管理员的权限密码等,特定全线的管理员只能至星期对应权限的操作,比如一个知具有用户管理权限的管理员就不能操作产品管理。对于一个超级管理员,他具有最大权限,在管理员管理中,它可以对普通管理员进行增删改查,在用户管理中,它可以修改用户的个人资料,可以将某个用户删除等,当然也可以查看用户列表,在订单管理中,管理员可以查看订单列表,处理用户提交的订单。留言管理模块,管理员可以讲用户的留言删除。图5-235.6系统的业务流程图5-24图5-25图5-26

6电子产品交易系统的详细设计6.1电子产品交易系统模块的划分在本次设计中,本人完成以下模块的设计:购物车模块管理员模块产品管理6.2电子产品交易系统部分主要模块流程及的具体实现6.2.1购物车管理模块 购物车管理模块主要功能有如下几个部分:创建购物车 当客户访问客户端,并且进入登录界面进行登录操作时,这时会系统会给客户创建一个购物车放入服务器的Session会话中。使客户在整个会话中都拥有一个相同的购物车。这里主要运用了Http协议中的会话机制,将购物车保存在客户的会话中,这样在整个客户游览不同页面商品的过程中,都会使用同一个购物车对象。 具体执行步骤:从客户的请求对象中获取Session会话对象从会话对象中获取购物车对象判断是购物车对象是不是空的,如果是空是就创建一个 /* *在监听到session被创建之后,就立即向session中添加一个购物车Car; */ publicvoidsessionCreated(HttpSessionEventarg0){ HttpSessionsession=arg0.getSession(); Cartcart=newCart(); session.setAttribute("cart",cart); } /* *从session中获得购物车 */ Cartcart=(Cart)session.getAttribute("cart"); if(cart==null){ cart=newCart(); }向购物车中添加一个商品项图6-1 客户在查看网页上的一个商品时,当向服务器发送一个“添加到购物车”的请求时,会执行这个功能。功能执行过程:从客户请求对象中获取商品的ID调用业务层的方法根据商品ID去数据查询商品的信息,返回商品对象从商品对象中获取商品名,商品价格,来构建一个商品项对象从Session会话中获取购物车对象调用业务层的方法来根据购物车对象和商品项对象来执行添加操作将些商品项对象放入到购物车中功能流程图:图6-2部分实现代码: /* *从数据库中把商品取到; */ ProductServiceproductService=(ProductService)ServiceFactory .getInstance().getService(Globals.PRODUCT_SERVICE); Integerid=Integer.parseInt(request.getParameter("productid")); Productproduct=productService.getProductById(id); /* *在向购物车中添加商品的时候会判断商品是否已经存在, *已存在的就不让在加入了; */ if(cart.isExist(id)){ message="该商品已经存在!请<aonclick='javascript:history.go(-1)'>返回</a>!"; request.setAttribute("message",message); returnmapping.findForward("error"); }else{ /* *向购物车添加一个商品; */ cart.addCart(product); session.setAttribute("cart",cart); returnmapping.findForward("addcartsuccess"); } }修改购物车中一个商品项图6-3 在客户查看购物车时,想修改自己的购买商品时,会执行这个功能。由于商品的名称和价格都是系统管理人员设置的,所以客户都不可以修改,客户只能修改他/她所购买商品的数量。修改所选购的商品数量时,相应的商品项的小计和购物车的总计都会保持实时的更新。 功能的执行步骤:将ActionForm转换为ItemForm对象从ItemForm对象中获取商品ID从Session会话中获取购物车对象根据商品ID去调用业务层的方法去修改商品项修改小计将些商品项对象放入到购物车中 功能流程图: 图6-4 部分实现代码: productid=Integer.parseInt(request.getParameter("productid")); intnum=Integer.parseInt(request.getParameter("num")); HttpSessionsession=request.getSession(); Cartcart=(Cart)session.getAttribute("cart"); cart.modifyNum(productid,num);查看购物车图6-5客户选取了所有的商品后,来向服务器发送“购物车”请求时,会执行此功能,系统根据会话中的购物车中的商品项,来获取客户所选选商品的一个集合,在JSP页面上对这个集合中的商品项进行显示。功能的执行步骤:从客户的请求对象中获取购物车对象从购物车对象中获取所有的商品项将所有的商品项对象加载到请求对象中发送给客户端功能流程图:图6-6部分实现代码:<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="javascript:window.location='<%=request.getContextPath()%>/biz/cart.do?method=remove&productid=${ductid}';"> <inputtype="submit"value="保存修改"class="button"> </td> </tr> </c:forEach>删除购物车中的一个商品项客户在查看购物车时,当向服务器发送一个“删除商品项”的请求时,会执行这个功能。删除商品项时,系统会自动更新购物车的总计值。 图6-7功能执行过程:1从客户请求对象中获取商品的ID2调用业务层的方法根据商品ID去数据查询商品的信息,返回商品对象3从Session会话中获取购物车对象4调用业务层的方法根据商品ID去删除购物车对象中的商品项5将购物车重新加入到Session会话中,来更新Session会话中的购物车对象部分代码实现://删除购物车中一个商品项 ItemFormitemForm=(ItemForm)form; Cartcart=null; cart=(Cart)request.getSession().getAttribute("cart"); if(cart==null){ returnmapping.findForward("error"); } try{ CartManagercm=newCartManager(); Integerpid=itemForm.getPid(); cm.removeItem(cart,pid); Set<Item>items=cm.getAllItems(cart); doublecost=cm.getCost(cart); request.setAttribute("items",items); request.setAttribute("cost",cost); // /** *按商品号删除订单项 *@paramcart购物车 *@paramid商品号 */ publicvoidremoveItem(Cartcart,Integerid)throwsBizException{ Set<Item>items=cart.getItems(); for(Itemitem:items){ if(item.getPid().equals(id)){ cart.deleteItem(item); break; } } }清空购物车 图6-8客户在查看购物时不要想要所有所选的商品时,向服务器发送“清空购物车”请求时会执行此功能。 执行此功能的步骤:从请求对象中获取Session会话从Session会话中获取购物车对象将购物车对象传给业务层的方法去清空购物车中的所有商品项 功能流程图: 图6-9 部分实现代码: /* *也就是从session中把购物车清除掉; */ publicActionForwardremoveall(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse) throwsException{ HttpSessionsession=request.getSession(); Cartcart=(Cart)session.getAttribute("cart"); session.removeAttribute("cart"); returnmapping.findForward("success"); }6.2.2后台部分后台功能只允许具有管理员权限的用户使用,它是实现前台功能的基础。主要包括管理员身份验证,订单信息管理模块,添加商品模块,查询用户信息管理模块组成后台功能介绍(1)功能模块细分:管理员身份验证:为合法用户提供一个后台入口。订单信息管理模块:网站管理者对用户订单的执行和编辑状态。添加商品模块:向商品表插入前台首页展示的商品信息。查询用户信息管理模块:查询注册所有用户,对一些非法或失信用户进行删除操作。公告信息管理模块:网站向用户发送最新公告信息。(2)后台首页运行结果网站后台首页运行结果,如图6-10所示。图6-101管理员登录在前台首页单击管理员入口,将转到管理员登录页面。该页面的功能是对管理员身份验证,用户输入用户名和密码后单击“登录”按键,系统将判断用户名和密码的有效性,如果通过验证则转到后台首页,反之则提示错误。管理员登录页面的运行结果如下图6-11所示。图6-11管理员登陆代码实现如下 publicActionForwardadminLogin(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ ActionForwardforward=mapping.findForward("error"); Stringname=request.getParameter("name"); Stringpassword=request.getParameter("password"); try{ AdmincurrentAdmin=adminService.login(name,password); if(currentAdmin==null){ returnforward=mapping.findForward("error"); } request.getSession().setAttribute("currentAdmin",currentAdmin); forward=mapping.findForward("success"); }catch(Exceptione){ e.printStackTrace(); returnforward=mapping.findForward("error"); } returnforward; }当管理员进入系统后就可以根据其权限,进行指定的操作,系统使用了过滤器执行此功能 HttpSessionsession=httpServletRequest.getSession(); AdmincurrentAdmin=(Admin)session.getAttribute("currentAdmin"); SethadModules=currentAdmin.getModules(); IntegermoduleId=Integer.parseInt(request.getParameter("moduleId")); for(Iteratorit=hadModules.iterator();it.hasNext();){ Modulem=(Module)it.next(); if(m.getModuleId().equals(moduleId)){ chain.doFilter(request,response); return; } } 2管理员管理图6-12如果该管理员具有管理员管理的权限,那么他可以看到管理员列表,可以增加管理员,可以删除一个管理员,还可以修改一个管理员的权限,其中修改管理员权限地实现如下:修改一个管理员的信息: try{ Adminadmin=adminService.findAdminById(adminId); admin.setPassword(password1); admin.setEmail(email); admin.setTel(tel); Collectionmodules=null; modules=moduleService.findAll(); Setmods=newHashSet(); if(modulesId==null){ returnforward=mapping.findForward("success"); } for(inti=0;i<modulesId.length;i++){ IntegermoduleId=Integer.parseInt(modulesId[i]); for(Objecto:modules){ Modulemodule=(Module)o; if(moduleId.equals(module.getModuleId())){ mods.add(module); } } } admin.setModules(mods); adminService.modify(admin); Collectionadmins=adminService.findAll(); HttpSessionsession=request.getSession(); session.setAttribute("admins",admins); 增加管理员的窗口如xxxxxxxxxxxxxxx 代码实现如下:Stringadminname=request.getParameter("adminName"); StringloginPassword1=request.getParameter("password1"); StringloginPassword2=request.getParameter("password2"); Stringemail=request.getParameter("email"); Stringtel=request.getParameter("tel"); String[]modulesId=request.getParameterValues("modules"); Adminadmin=newAdmin(); admin.setAdminname(adminname); admin.setPassword(loginPassword1); admin.setEmail(email); admin.setTel(tel); Collectionmodules=null; try{ modules=moduleService.findAll(); Setmods=newHashSet(); for(inti=0;i<modulesId.length;i++){ IntegermoduleId=Integer.parseInt(modulesId[i]); for(Objecto:modules){ Modulemodule=(Module)o; if(moduleId.equals(module.getModuleId())){ mods.add(module); } } } admin.setModules(mods); adminService.addAdmin(admin); Collectionadmins=adminService.findAll(); request.getSession().setAttribute("admins",admins);以下商品管理,用户管理,留言管理的实现方法和此类似,不再赘述,只说明其业务方法。3商品管理单击导航区的“产品管理”超链接,系统将打开添加商品页面,该页面主要用于商品信息添加到数据库表中,以提供前台首页商品展示类别展示所需要的数据依据。目录添加页面的运行结果如图图6-13所示。 图6-13为了减少错误,在提交商品信息时,需要对数据的合法性进行验证,输入的商品价格不能是空字符型,而输入的图片只支持Gif格式等,这些任务可以用Bean来实现的,也可以由脚本语言Javascript编写,以下是脚本语言函数check()来完成的。为了确保信息在数据表中的唯一性,在

温馨提示

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

评论

0/150

提交评论