• 2.79 MB
  • 2022-04-22 13:50:03 发布

网上商城的设计与实现毕业论文.doc

  • 40页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'重庆科技学院本科生毕业设计目录网上商城的设计与实现毕业论文目录1绪论11.1研究的目的和意义11.2国内外研究现状分析11.3课题研究方法21.4研究设想及预期结果32相关技术介绍42.1关于JavaWeb的介绍42.2关于Struts2的介绍42.3关于SSH的介绍52.4关于JavaScript和Jquery的介绍52.5关于数据库连接池的介绍62.6关于MySQL的介绍63系统需求分析83.1系统目标功能分析83.2系统可行性分析93.3系统开发设备需求93.4项目实现途径103.5数据存储的实现104数据库设计114.1数据库整体设计114.2数据库表设计115系统设计155.1系统整体设计流程图156系统实现176.1三层架构设计17 重庆科技学院本科生毕业设计目录6.2创建与数据库的连接176.3事物管理186.4系统部分主要功能模块的界面与编程实现217系统测试337.1系统部分功能测试338总结36参考文献37致谢38 重庆科技学院本科生毕业设计1绪论1绪论1.1研究的目的和意义网上商城的悄然兴起,是商业经济发展到一定阶段的产物,也是顺应新的消费需求和技术进步的必然结果。上海市商业经济研究中心副主任齐晓斋分析说,与传统的百货商店、连锁超市、大卖场、便利店等有形商铺相比,网上商城业具有一定的先天优势。一是地段。对于以往的实体店铺来讲,商店的位置,地段的优势,几乎可以决定未来经营的成功与失败,但在城市的商业网络资源,特别是优质的商业网络资源已是十分稀缺,而网上商城是没有限制的地段;二是经营成本。借助快速发展的科学技术,网上商城通常能够节省从生产到销售过程当中的许多步骤,从而极大地降低经营成本与交易成本,给消费者、商家待来双赢的局面;三是风险。对于个人来说,由于网上商店等网上商城投入的资金相对较低,经营和管理比较灵活,即使遇到商业危机,也能及时改变自己的经营和管理方式来规避风险。随着社会经济的发展及消费水平的提高,人们希望得到更加方便、更加快捷的购物方式,同时也乐于尝试各种新的购物方式。在这一市场需求的推动下,企业将会对商品零售的方式进行创新,而先进的技术为其创新提供了重要的支撑与平台。通过对互联网的特点以及对国内外相关电子商务网站的现状进行研究与分析,本毕业设计以基于Web的电子购物网站的开发与实现作为主题。目的在于设计并实现一个在网络环境下能够运行的集商品上架、商品信息管理、货品浏览及查询、订单、购物车和配送等功能于一体的网上商城,为一些打算网上开设店铺的商家提供服务。1.2国内外研究现状分析在我国,网上购物从无到有也不过短短几年时间。我国第一家网上购物发生在1996年,燕莎友谊商场首次通过网上商城售出一个景泰蓝,虽然货款的支付不是在网上进行的,但这毕竟为我国零售业奏出了网上购物的先声。现在,在北京,上海,深圳市等,200多家商场开设网上商店,旗舰店等,还有一些城市处于观望阶段。网上购物的真正意义上的,即在网上付款,我们目前可以随处可见,比如天猫、京东等。深圳某家虹商城去年5月开设了第一家实施计划和网上支付的网店,在线消费者可以凭借中国招商银行“一卡通”,可以很方便地购物,并且商家会在24小时内送货上门。商家通过投资经营网上商店的目的是赚钱,但从网上商店目前的运营情况来看,上网38 重庆科技学院本科生毕业设计1绪论者大多数并不是去网上购物而是消遣时间、对于真正需求购物的人们却不愿意在网上进行购物,他们对网上购物这种方式处于怀疑的态度,所以网上商店生意渗淡目前俨然成为各大网上商店共同的困惑。比如:上海的第一个网上商店购物中心——上海亿样购物中心,由于管理不善,经营不到一半的关闭,一些大型零售商场在北京,其网上商店也“门庭冷落”。结算方式的原始落后是网上购物致命的弱点。在国外,计算机一般都与银行的帐户相联,消费者与网上商城只需通过网上银行打交道,不必当面进行现金的交易。在我国目前,除了淘宝拍拍网上购物结算的几个网上商店外,大部分商家业务结算只能以“送货上门、到货付款”或“邮寄上门、贷款邮资先付”的方式。这样不仅浪费了人们的时间和精力,而且限制了人们对某些商品的需求和地域的限制。因此,安全、快捷、方便的电子支付手段将是今后网上商店健康发展的主要决定性要素。以下是CNNIC(中国互联网络信息中心)发布的B2C电子商务发展报告,进一步分析了目前我国网上购物的现状。90%选择网上购物的人都认为网上购物可以节约时间和精力,这说明随着生活节奏的加快,人们越来越希望拥有简单快捷的购物方式。随着消费者对消费者的需求增加,使网上购物商城必须经过精心的打算,提供专业的产品和服务,差异化的市场。以卓越网和铛铛网为例,最近根据不同的消费者和消费者的需求,开通了计算机、外语、文学和艺术四个专业商城,这不仅体现了卓越网“以客户为中心”的经营理念,相信这也是中国在线购物中心的未来发展趋势。尽管网络版权、阅读习惯仍是制约未来网络出版、网上商城发展的障碍,但网络环境给出版业带来了深刻的革命,已成大势所趋。网上购物与传统商店都在努力保持商品发布新的利润空间。目前的情况是,大部分商城对网上商城的了解是不足够的,只是初步参与电子商务和网站建设,网络上的其他产品,一对一,跨越时间,空间和其他特性,并没有充分利用,可以预计,随着网络深入到人们的生活中,以及网络技术的快速发展,相信以技术、服务为品牌支撑的网上商城在不远的未来会成为市场的宠儿和业态创新的引领者。1.3课题研究方法通过在网上查找相关资料,了解了设计的思路,熟悉了开发的环境之后,通过分析网上商城的开发流程与具体业务,为本次毕业设计打下了坚实的基础。结合自身对Java语言的掌握情况,本设计决定采用Java语言进行编程实现。在决定了使用何种语言进行开发后,我想通过这次的设计与开发提高自身的水平和能力,在架构体系上就大胆的尝试了SSH框架,并结合MVC的思想进行本次系统的开发。而网页的部分布局,是从网上下载的成熟模版,并结合本毕业设计的需求,进行了部分UI界面的设计及实现。38 重庆科技学院本科生毕业设计1绪论1.4研究设想及预期结果本系统预期实现的功能及结果主要包括:1)管理员可以进行对商品信息的添加,修改,删除;2)管理员可以进行的商品目录添加,修改,删除,再对商品信息的添加时,动态加载目前存在数据库中的目录,在删除的时候,如果此目录下存在商品将不能删除此目录,在修改的时候,如果目录名称发生变化,在商品表中的目录也必须变;5)管理员实现对会员信息的管理。6)管理员可以同过商品的销量,以及商品的数量来设置商品的下架,是否热卖。7)管理员要对物流信息进行管理;8)管理员可以对订单进行查看,会员也可以看到自身的订单;9)管理员可以对首页的广告进行管理,实现广告的添加,修改,删除等;10)管理员在后台可以对帖子进行审核,删除;11)会员可以进行对商品信息的搜索12)会员可以进行商品的购买,添加到购物车,购物车查看;13)会员登陆到后台可以对自己的订单进行查看14)用户可以进行会员的注册以及会员自身的信息修改;15)会员登录后可以进行有关本系统的帖子的一个发布供能,但发布后,需通过管理员的审核,同时也可以对已审核通过的帖子进行回复,可以查看帖子的回复内容;38 重庆科技学院本科生毕业设计2相关技术介绍2相关技术介绍2.1关于JavaWeb的介绍JavaWeb,是用Java技术来解决相关web互联网领域的技术总和。Javaweb开发的web项目通常包括两个部分:Web服务器和客户端。Java在客户端的应用有javaapplet不过在JavaApplet现在已很少使用在客户端应用程序,Java客户端在服务器中的应用是非常丰富的,如servlert,JSP和第三方架等。Javaweb发展目前俨然成为一个强大的驱动力,推动着Web领域的快速发展。2.2关于Struts2的介绍Struts2是Struts1的下一代产品,是在struts1和WebWork的技术基础上进行了合并的全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构差别巨大。Struts1结构简单、小巧,是由Apache推出。但其与Jsp/Servlet耦合紧密,制约了发展。而Struts2以WebWork为核心,采用拦截器的机制来处理客户端发的请求,这样的设计来自于WebWork的开发理念,使业务逻辑控制器能够与ServlertAPI完全分离出来,所以在某种程度上可以认为Struts2为WebWork的升级版本。尽管从Struts1到Struts2有着很多的变化,然而相对WebWork,Struts2的变化很小。当Web服务器收到客户端的请求(HttpServletRequest),这就意味客户端初始化了一个指向servlert容器的请求,servlert容器将请求进过一些过滤链,包括(ActionContextCleanUp)过滤器,然后经过Otherfilters(SiteMesh,etc),接下来需要调用FilterDispatcher核心控制器,然后它询问ActionMapper来决定这个请求是否调用某个Action,如果要调用Action,此时ActionMapper返回一个收集Action详细信息的ActionMaping对象,来决定调用哪个Action。在决定调用那个Action后,接下来FilterDispatcher将请求委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager)从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation实例,ActionInvocation实例使用命名模式来调用,在调用Action之前会依次的调用所用配置拦截器(InterceptorN),一旦执行结果返回结果字符串,ActionInvocation负责查找结果字符串对应的(Result),然后执行这个Result,Result会调用一些模版(JSP)来呈现页面,之后通过递归的做法,前面的拦截器38 重庆科技学院本科生毕业设计2相关技术介绍(InterceptorN)会再被执行(顺序和Action执行之前相反),最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和核心控制器(FilterDispatcher)。2.3关于SSH的介绍集成SSH框架的系统,从架构上分为四层:展现层、业务逻辑处理层、数据持久层和实体模型层,可以使开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。具体做法是:用面向对象的分析方法,根据业务需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO(DataAccessObjects)接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring做管理,管理struts和hibernate。系统的基本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负责接收请求(Request)和传送响应(Response),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。在业务层中,管理服务组件的SpringIoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需做很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高开发效率。2.4关于JavaScript和Jquery的介绍JavaScript:Javascript是一种网页编程技术,用来向HTML页面添加交互的行为,是一种基于事件驱动的解释性脚本语言。它是由Netscape的LiveScript发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当服务器需要验证数据,由于网络速度很慢,只有28.8Kbps,太多的验证步骤,浪费时间对服务器高效工作造成了一定的干扰。因而Netscape的浏览器Navigator加入了Javascript38 重庆科技学院本科生毕业设计2相关技术介绍,提供了数据验证的基本功能。Jquery:Jquery是继prototype以后又一个优良的Javascript框架。它是轻量级的js库,它兼容CSS3,还兼容各类浏览器。Jquery的设计思想是将原始的dom对象封装成一个Jquery对象,通过调用Jquery对象的方法来实现对原始的dom对象的操作。jQuery使用户能更方便地处理HTML、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时随着客户端技术的发展,Jquery提供很多成熟的插件来供我们选择,比如本系统使用的Jquery.msgbox.js等。jQuery能够使用户的html页面保持代码和html内容分离,有利用代码的重用性。其操作也很简洁,不用再在html里面插入一堆js来调用命令了,只需定义id便能实现以往JS所实现的功能。2.5关于数据库连接池的介绍在JavaWeb中,数据库连接是一种很耗时、有限的资源,这一点在并发高的网页应用程序中体现得尤为突出。在高并发的情况下,如果没有采用连接池技术,就意味着每个用户的操作,程序本身就要对这个用户提供一条数据库的连接。如此的话,数据库的链接的个数将是无法统计的,同时对于一个数据库它的链接数是有限制的。如果超过这个临界点就会导致数据库的奔溃,从而导致程序本身运行不下去。所以对数据库连接的管理显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是为了解决这个问题而提出来的。数据库连接池负责分配、管理和释放数据库连接,它可以使应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能,提高了程序本身的伸缩性和健壮性。2.6关于MySQL的介绍MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码38 重庆科技学院本科生毕业设计2相关技术介绍这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。38 重庆科技学院本科生毕业设计3系统需求分析3系统需求分析3.1系统目标功能分析信息化飞速发展的时代,由于网络技术的发展及相关硬件设施性能的提高,秉承“时间就是金钱的理念”,为了满足人们在网上能够方便、快捷的进行购物,以及当前无店零售模式的兴起,导致越来越多的商家打算将自己的商品进行在线销售的计划,因此,拟设计并实现本系统。该系统的目标在于,帮助一些小规模的商铺进行商品的在线销售及管理功能。通过对京东商城,天猫等网上购物网站的了解,再对小规模商铺商品在线销售功能的分析,本系统需实现的基本功能主要包括:1)会员的注册:能对会员的用户名以及密码,邮箱进行简单的验证。在填写用户名的同时验证是否存在相同的用户名,如果存在则提示用户名已存在,取消注册。反之注册成功2)会员的管理:能够对会员的信息的进行修改,删除功能。3)商品的浏览:能进行商品的模糊搜索,在未登录的情况下也可以进行此操作。4)商品的购买:如果用户没用登录则提示用户没有登录,并提示用户去登录。此时用户可以选择不登录,或者去登录。只用用户在进行登录后,才能进行商品的购买。在用户登录后,分为两种购买方式:直接购买和加入购物车。直接购买:则直接进入订单的编辑页面;加入购物车:可以将某个商品加入到用户自己的购物车。5)购物车:在购物车中用户可以对自己所有添加到购物车的中商品进行编辑。例如:商品的数量的编辑,以及对购物车的商品进行删除。在提交到订单的时候,可以进行选择性的购买。6)订单编辑页面:此时,用户可以对自已所要购买的商品的数量进行修改。注意,在修改商品的数量的时候,交易金额的总计要随着商品的数量发生相应的变化。在订单编辑完成后提交时要对一些信息进行验证,比如收货人,联系电话是否填写等。7)会员后台:会员能够对自身的某些信息进行修改,比如密码等。能够对自己交易的订单进行查询。8)论坛:用户登录后,可以对商铺以及某些商品的信息的评论,可以发帖。但发贴后需要管理员后台的审核。通过管理员审核后,会员可以通过帖子主题的搜索看到自己的帖子,同时用户也可以对他人的帖子进行回复。9)商品信息的添加:管理员可以进行商品的信息的添加,商品图片的上传等。38 重庆科技学院本科生毕业设计3系统需求分析在添加商品的时候,要根据商品的目录以及品牌来验证是否已存在此商品。如果存在则提示管理员无需重复添加;10)商品信息的管理:管理员可以对所有的商品进行查询,可以利用商品的名称,目录,品牌等信息进行商品的查询。同时也可以商品信息进行上架下架操作,是否热卖以及删除的操作。11)商品目录管理:管理员可以对商品的目录进行添加和删除以及修改,在修改的时候,其所有在目录下的所有的商品也必须进行修改。在删除时,如果此目录下有商品则不能进行目录的删除。12)物流的管理:管理员可以新增物流,修改物流的名称,删除物流等功能。在添加的时候,要根据物流名称验证是否存在相同的物流,如果有则无需再添加。在订单编辑页面,填写物流时,都需要从物流表中动态获取。13)广告管理:管理员可以进行广告的添加,删除,修改广告的链接。管理可以设置其优先显示某个广告。14)帖子的审核:管理员可以在后台进行帖子的审核,删除。3.2技术可行性分析JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。3.3系统开发设备需求1.硬件环境:1)一台安装了windowXP或者window7的电脑;2.软件环境:38 重庆科技学院本科生毕业设计3系统需求分析1)Myeclipse软件;2)JDK1.6;3)chrom浏览器;4)MySQL数据库;3.4项目实现途径1.前期调研,了解相关技术及实现方案;2.明确设计目标,了解设计要求;3.比较分析并确定实现方案,并进行可行性分析;采用Java语言等相关技术进行设计、实现,在体系架构上以MVC为指导思想,利用SSH框架进来开发,数据库采用MySQL数据库。4.搭建开发环境;5.根据设计思想及方案进行开发与实现;6.系统排错及调优;7.总结。3.5数据存储的实现本系统采用了MySQL数据库,数据库名称为:netshop。在建立表时,没有采用主外键的联系来建立表,因为本系统中用到最多的操作是查询,为了提高查询的效率,本系统在建表的时候采用了冗余数据来提高系统的查询效率。38重庆科技学院本科生毕业设计3系统需求分析38 重庆科技学院本科生毕业设计4数据库设计4数据库设计38重庆科技学院本科生毕业设计4数据库设计4.1数据库整体设计本系统数据库采用MySql数据库,系统数据库名称为netshop,共包含9张表,其中包括:用户信息表、广告管理表、购物车、商品目录表、帖子管理表、物流表、商品表、回复表、订单表等。4.2数据库表设计1)tb_user(用户信息表)用户信息表中保存会员的信息以及管理员的信息如表4.1所示:表4.1用户信息表字段名数据类型长度是否主键描述IdVarchar200是类别IdpassWordVarchar30否密码userNameVarchar30否用户名userTypeVarchar3否用户类型identyVarchar18否身份证realNameVarchar30否真是姓名emailVarchar30否邮箱imageVarchar30否图片URLbirthdaydate否生日sexVarchar1否性别stateVarchar1否状态2)tb_advertisement(广告管理表)广告管理表中保存管理员增加的广告。如表4.2所示:38 重庆科技学院本科生毕业设计4数据库设计表4.2广告管理表字段名数据类型长度是否主键描述IdVarchar200是类别主键imageUrlVarchar200否图片链接isRightVarchar1否是否为右广告isLeftVarchar1否是否为左广告UrlVarchar200否广告链接地址3)tb_cart(购物车)购物车中保存用户的在购物车中保存的商品,为了使系统的性能得到提高,采用了冗余数据,如表4.3所示:表4.3购物车表字段名称类型长度是否主键描述IdVarchar200是类别IdMidVarchar200否用户IdpNameVarchar200否商品名称pPriceVarchar200否商品单价pStockNameVarchar200否商品目录名称pBrandNameVarchar200否商品品牌名称pCountVarchar20否商品数量pImageUrlVarchar200否商品图片路径pidVarchar200否商品Id4)tb_drectory(商品目录表)商品目录表中保存着店铺的所有商品目录,如表4.4所示:表4.4商品目录表字段名称类型长度是否主键描述IdVarchar200是类别idpDirectoryVarchar200否目录名称pStateVarchar1否目录状态38 重庆科技学院本科生毕业设计4数据库设计5)tb_forum(帖子管理表)在帖子管理表中保存着用户发表的帖子,如表:4.5所示:表4.5帖子管理表字段名称类型长度是否主键描述IdVarchar200是类别IdTitleVarchar200否帖子主题ContentVarchar500否帖子内容UidVarhcar200否用户IduNameVarchar30否用户名称createTimeDate否创建时间IsPsssPassVarchar1否是否审核6)tb_logistics(物流表)在物流表中保存新增的物流信息,如表4.6所示:表4.6物流表字段名称类型长度是否主键描述IdVarchar200是类别idNameVarhcar200否物流名称TelephoneVarchar200否联系电话7)tb_order(订单表)在订单表中保存订单信息,如表:4.7所示:表4.7订单表字段名称类型长度是否主键描述IdVarchar200是类别IdPidVarchar200否商品IdCreatetimeDate否创建日期UseridVarchar200否用户IdPstateVarchar1否状态pcountVarchar20否商品数量PhoneVarchar11否收货联系电话38 重庆科技学院本科生毕业设计4数据库设计logisIdVarchar200否物流IdlogisNameVarchar200否物流名称addressVarcahr200否收货地址logistelephoneVarchar200否物流联系电话8)tb_product(商品表)商品表中保存商品的信息,如表:4.8所示:表4.8商品表字段名称类型长度是否主键描述IdVarchar200是类别IdpNameVarchar200否商品名称pCountVarchar200否商品数量pDirectoryVarchar200否商品目录pBrandNameVarchar200否商品品牌pPriceVarchar200否商品单价pMarketVarchar200否商品市场pStateVarchar1否商品状态pProviderVarchar200否商品厂商pImageUrlVarchar200否商品图片isHotVarchar1否是否热卖9)tb_replay(回复表)回复贴保存帖子回复的内容,如表4.9所示:表4.9帖子回复表字段名称类型长度是否主键描述IdVarchar200是类别IdFidVarchar200否帖子IdcontentVarchar500否回复内容UidVarchar200否用户idCreatetimeDate否回复日期uNameVarchar30否用户名38重庆科技学院本科生毕业设计4数据库设计38 重庆科技学院本科生毕业设计6系统实现5系统设计5.1系统整体设计流程图1.普通会员(买方)购物流程图,如下图5.1所示:图5.1会员购物流程图2.管理员功能模块图,如下图5.2所示:图5.2管理员功能图3.会员信息的注册流程图,如下图5.3所示:图5.3注册流程图38 重庆科技学院本科生毕业设计6系统实现4.论坛发帖如下图5.4所示:图5.4论坛发帖流程图5.管理员审核帖子如下图5.5所示:图5.5管理员审核帖子流程图6.会员订单查看业务流程图,如图5.6所示:图:5.6会员订单查看业务流程图38 重庆科技学院本科生毕业设计6系统实现6系统实现本系统采用的Java语言开发,MVC设计思想,三层架构的B/S模式,采用SSH开源框架与Mysql数据库技术实现,同时利用了JavaScript、Jquery、数据库连接池等技术。下面对系统的开发过程进行详细说明。6.1三层架构设计本系统采用了三层架构的B/S模式,所谓的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据持久层层(DAL)。这样设计架构的目的即为了“高内聚,低耦合”。表现层(UI):通俗讲就是展现给用户的界面,即用户在使用系统的时候他能看见的所有界面;业务逻辑层(BLL):针对具体模块的操作,也可以说是对数据持久层的操作,对业务逻辑的处理;数据持久层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。在本系统三层架构具体为:XXX.jsp(UI),XXXAction.java(业务逻辑层),XXXDAO.java(数据访问层)6.2创建与数据库的连接本系统的数据持久层用的是hibernate,利用Spring来管理并且采用数据库连接池技术(DBCP).采用数据库Spring管理数据库的连接是为了方便以后系统的二次开发。而采用数据库连接池技术是为了提高系统的性能,因为数据库的连接是一个非常耗时的操作,不断获取的新的连接会给系统增加很大的性能开销。不能保证系统在多用户的操作下,而不是数据库当掉。而连接池就很好解决了这个问题,我们可以设置连接的初始化获取连接的个数,当某个用户操作本系统向数据库获取了一条连接,在获取这个连接的后,这条连接便被放入到了连接池中,不会因用户的操作终止而关闭,这样连接池中就有了一条数据库的连接,当下一个用户访问数据库时,便不再获取新的连接。这样就极大的提高了系统的性能。源代码如下:38 重庆科技学院本科生毕业设计6系统实现6.3事物管理本系统对于事物的管理采用了Spring的声明式的事物管理。在DAO中不再进行事物的开启与管理,Spring声明式事务管理是利用面向切面的编程思想,在本系统,作用与每个Action上,并指定需要开启事物管理的Method和事物的传播特性。这样可以让编程更加的简洁,不用在去事物何时开启,何时关闭,极大的简化了编程。源码如下:38 重庆科技学院本科生毕业设计6系统实现38 重庆科技学院本科生毕业设计6系统实现6.4系统部分主要功能模块的界面与编程实现1)登录模块的实现用户在首页的右上方点击登录按钮,就可以跳转到登录的页面,此时用户可以输入正确的用户名以及密码便可以成功登录,成功登录之后系统自动跳转到首页。在这里利用ajax提交表单来访问后台的LoginAction中的方法,先根据用户输入的用户名和密码,查询数据库中的表,看是否存在此用户,如果存在,将用户信息存入session中并返回“0”,否则返回“1”。在客户端判断Ajax返回的数据。如果为“0”则跳转到首页,否则提示用户用户名或密码错误(本系统在提示上,使用了JqueryMsgbox.js插件)如图6.1,图6.2所示:图:6.1首页登录按钮图:6.2登陆页面源代码如下:publicvoidLogin(){if(user==null){AjaxString.resultAjax("1");}else{Mapsession=ServletActionContext.getContext().getSession();user=loginDao.isExistUser(user);if(user==null){AjaxString.resultAjax("1");38 重庆科技学院本科生毕业设计6系统实现}else{if(session.get("user")!=null){AjaxString.resultAjax("2");}else{session.put("user",user);AjaxString.resultAjax("0");}}}}//ajax提交后台判断是否登陆$.ajax({type:"post",url:"login/login!Login.action",data:$("#form1").serialize(),async:false,success:function(data){if(data=="1"){$.msgbox("您输入的用户名或者密码不正确,请重新输入!",{type:"error",buttons:[{type:"cancel",value:"确定"}]});}elseif(data=="2"){$.msgbox("你以登录无须重复登录!!",{type:"info",buttons:[{type:"cancel",value:"确定"}]});window.location.href="login/login!toMain.action";}else{window.location.href="login/login!toMain.action";38 重庆科技学院本科生毕业设计6系统实现}}});});2)会员注册模块的实现在会员注册页面,使用了一个开源的form表单验证框架(formValidator)。它自带的样式会使界面看起来更加的友好。这个框架可以使表单的验证更加简单。在表单提交的时候,它会自动调用Js来验证我们输入的内容是否合法。当用户输入的验证信息正确后,便将数据提交到后台,保存到数据库中。如图6.3所示:图:6.3注册页面源代码如下://注册页面验证$.formValidator.initConfig({formID:"form1",theme:"Default",//ArrowSolidBoxsubmitOnce:true,onSuccess:function(){returnsubmit();}});vartitles1="请输入用户名称由2-10个汉字!";$("#fname").formValidator({onShow:titles1,oncorrect:"1",onFocus:titles1,oncorrect:"OK"}).inputValidator({min:2,onError:titles1}).inputValidator({max:25,onError:titles1}).functionValidator({fun:function(val,elem){38 重庆科技学院本科生毕业设计6系统实现varpattern=/[u4e00-u9fa5_]{2,10}/;if(!pattern.test(val)){return"用户名格式不正确,请检查!";}if(val.indexOf("")!=-1){return"用户名格式不正确,不能存在空格!";}if(val.length>8){$(this).attr("readonly",true);}returntrue;}});3)首页的实现在首页,显示了商铺的所有商品目录和目录下的部分商品,以及热卖商品、广告。通过访问后台IndexAction中的Menthod来获取这些数据并动态加载出来。其在JSP上利用Struts2标签迭代出来。效果如图6.4所示:图:6.4首页页面设计源代码如下:IndexAction:publicStringtoIndex(){//获取所有的目录drectories=productDao.getDrectories();38 重庆科技学院本科生毕业设计6系统实现//获取右广告right=advertisementDao.getRight();//获取做广告left=advertisementDao.getLeft();//获取所有商品products=indexDao.getProducts();//将目录放入session中session.put("stockNames",drectories);productsList=indexDao.getMapOfProducts();return"success";}4)商品搜索模块的实现用户可以通过页面的搜索功能模块,输入商品的名称进行商品的搜索。其实现原来为通过获取输入的内容“华为”,再通过对商品表的模糊查询来获取所有符合条件的商品。如图6.5、6.6所示:图:6.4.4.1商品搜索设计图:6.5商品搜索结构显示源代码如下:publicStringgetListProducts()throwsUnsupportedEncodingException{if(product!=null&&page>1&&product.getPbrandName()!=null&&!"".equals(product.getPbrandName().trim())){brandName=newString(product.getPbrandName().getBytes("ISO-8859-1"),"utf-8");38 重庆科技学院本科生毕业设计6系统实现System.out.println(brandName);product.setPbrandName(brandName);}if(product!=null&&page>1&&product.getPdirectory()!=null&&!"".equals(product.getPdirectory().trim())){stockName=newString(product.getPdirectory().getBytes("ISO-8859-1"),"utf-8");System.out.println(stockName);product.setPdirectory(stockName);}if(product!=null&&page>1&&product.getPname()!=null&&!"".equals(product.getPname().trim())){Stringname=newString(product.getPname().getBytes("ISO-8859-1"),"utf-8");System.out.println(name);product.setPname(name);}drectories=productDao.getDrectories();totalpage=productDao.getTotalPage(product,pageSize);products=productDao.getProducts(product,page,pageSize);for(Productproduct:products){product.setSalTotal(Integer.parseInt(productDao.getSaleTotal(product.getId()))>0?productDao.getSaleTotal(product.getId()):0+"");}return"success";}publicListgetProducts(finalProductproduct,finalintpage,finalintpageSize){finalStringBufferhql=newStringBuffer("fromProduct");finalListparams=newArrayList();if(product!=null){38 重庆科技学院本科生毕业设计6系统实现hql.append("where1=1");if(product.getPname()!=null&&!"".equals(product.getPname())){hql.append("andpnamelike?");params.add("%"+product.getPname()+"%");}if(product.getPdirectory()!=null&&!"".equals(product.getPdirectory())){hql.append("andpdirectorylike?");params.add("%"+product.getPdirectory()+"%");}if(product.getPbrandName()!=null&&!"".equals(product.getPbrandName())){hql.append("andpbrandNamelike?");params.add("%"+product.getPbrandName()+"%");}}return(List)this.getHibernateTemplate().execute(newHibernateCallback(){@OverridepublicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException{Queryquery=session.createQuery(hql.toString());for(inti=0;i