首页 基于S2SH电子商城毕业设计论文

基于S2SH电子商城毕业设计论文

举报
开通vip

基于S2SH电子商城毕业设计论文 目录 - 1 -摘 要 - 2 -Abstract - 3 -1. 引 言 - 4 -2. 设计目的与任务 - 4 -3. 需求分析 - 5 -4. 系统设计 - 5 -4.1分层模式 - 5 -4.2开发技术与工具 - 10 -4.3总体设计 - 10 -4.3.1系统总体结构 - 12 -4.3.2流程图 - 13 -4.4 详细设计 - 13 -4.4.1数据库设计 - 17 -4.4.2 系统开发规范及说明 - 19 -4.4.3具体模块设计 ...

基于S2SH电子商城毕业设计论文
目录 - 1 -摘 要 - 2 -Abstract - 3 -1. 引 言 - 4 -2. 设计目的与任务 - 4 -3. 需求分析 - 5 -4. 系统设计 - 5 -4.1分层模式 - 5 -4.2开发技术与工具 - 10 -4.3总体设计 - 10 -4.3.1系统总体结构 - 12 -4.3.2流程图 - 13 -4.4 详细设计 - 13 -4.4.1数据库设计 - 17 -4.4.2 系统开发 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 及说明 - 19 -4.4.3具体模块设计 - 26 -5. 程序清单 - 26 -5.1 数据库脚本 - 29 -5.2项目实现部分代码 - 45 -6. 程序调试与体会 - 46 -7. 运行结果 - 54 -8. 结 论 - 54 -9. 致 谢 - 54 -10. 参考文献 摘 要 随着信息化网络的发展,网络对人们的生活影响越来越大,网上购物也逐渐成为一种趋势,这对电子商场的发展起到了很好的推进作用。本文主要通过对电子商城的应用环境和主要实现功能进行分析,叙述了本电子商城的设计与实现过程。该系统是基于多层企业级应用 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 JAVA EE技术开发的WEB应用,以典型的MVC模式架构为基础。采用JaveEE5轻量级框架SSH与前台Ajax技术相结合来实现,在设计过程中全方位的应用软件工程的开发思想,对项目进行UML建模包括各模块的类图、时序图等。系统基于B/S分布式结构,适应范围广阔。 关键词:电子商城;SSH;Ajax;框架 Abstract With the development of information networks, the network plays an increasing role in people's lives, and online shopping is becoming a trend, which wonderfully facilitates the development of electronic store. This article is focused on the analysis of the applied environment of electronic mall and the main achievement function, for the purpose of describing the design and implement process of E-mall.The system is based on the web application developed with multi-standard enterprise application standard JAVA EE,framed with classical MVC model architecture,and realized through the combination of  lightweight framework SSH and front desk Ajax technology. In the design process a full range of application development software engineering development ideas was used in theUML modeling of the project,which included class diagrams, sequence diagrams. The system is based on B / S distributed architecture to meet a broad range of requirements. Key words: Electronic Mall, SSH, Ajax, Framework 1. 引 言 随着网上购物的迅猛发展,电子商城大量涌现,而电子商城的出现不仅改变了人们传统的购物方式,也逐渐的影响着人们的消费观,一个好的电子商城不仅能给客户带来方便,更能给企业带来巨大的财富。本商城主要利用JavaEE与Ajax技术进行开发,具有很强的安全性、可靠性和可扩展性。其前台实现了从商品选购到订单提交整个业务流程,后台实现了对整个系统的管理,就整体功能而言,能满足基本的网上购物需求,能让用户感到便捷、快速,让企业管理、维护更简单。 2. 设计目的与任务 随着信息化技术在生活中的应用越来越广泛,网上购物也逐渐成为人们的一种生活方式。本系统正是基于这样一种环境下应运而生。本电子商城分为前、后台两部分,前台主要实现会员的网上购物业务流程,后台则由各种管理员对商城会员、商品、定单等内容进行管理。 3. 需求分析 本电子商城分为前后台两部分,前台主要包括非会员和会员用户,后台分为商品管理员、订单管理员、会员管理员和系统管理员。在系统中依据用户的权限执行相应的功能。系统用例图如下所示: 图3-1 系统用例图 4. 系统设计 4.1分层模式 本系统是基于B/S模式开发的JAVA EE多层体系结构WEB应用。系统开发主要分为以下几层:表示层、业务层、DAO层、持久层。业务层和DAO层都通过接口与其它层进行连接从而减小了各层之间的耦合度,实现高内聚、低耦的思想。分层结构图如下所示: 图4-1系统分层结构 4.2开发技术与工具 主要开发工具为:MyEclipse8.6、Mysql6.0、Tomcat6.0、PowerDesigner12。 主要技术包括:JavaEE轻量级框架S2SH、MD5算法、Log4j、Ajax、JSON。 S2SH集成框架是Struts、Spring 和Hibernate 三种技术的有机融合, 是目前应用最广泛的Java EE 架构。在S2SH集成框架中,Struts 的作用是提供MVC 模型, 将界面、业务逻辑和数据分离, 并提供一个高可扩展的架构。Spring作为核心,向上整合MVC框架,向下整合ORM框架,使用Spring的IoC容器来管理各组件之间之间的依赖关系,Spring的声明事务将负责逻辑层组件的事务管理。而Hibernate 提供了一个抽象的数据服务视图,将用户对数据库的访问进行高度抽象。 Struts 是目前创建Web 应用最常用的表现层MVC 框架实现,是Jakarta Apache 的一个开源项目。基于Model2 的Struts 框架利用控制器和定制标签库将应用中的模型和视图分离,达到了层间松散耦合的效果,同时提高系统的灵活性、重用性和维护性。作为开源项目,Struts 经受了大量实践的检验,功能越来越强大,体系也日臻完善,并且对其他技术和框架显示出良好的融合性。 图4-2 Struts2.0 MVC结构图 Spring 由Rod Johnson 创建,它是为了解决企业应用开发的复杂性而创建的。Spring 使用基本的JavaBean 来完成以前只可能由EJB 完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java 应用都可以从Spring 中受益。简单来说,Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 图4-3 Spring功能图 Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC 进行了非常轻量级的对象封装,使得Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate 可以应用在任何使用JDBC 的场合, 既可以在Java 的客户端程序使用, 也可以在Servlet/JSP 的Web 应用中使用。 图4-4 Hibernate运行图 AJAX是Asynchronout JavaScript and XML的缩写,它并不是一门新的语言或技术,实际上是几项技术按一定的方式组合在一起,在共同的协作中发挥各自的作用,它包括:使用XHTML和CSS标准化呈现;使用DOM实现动态显示和交互;使用XML和XSLT进行数据交换和处理;使用XMLHttpRequest进行异步数据读取;最后用JavaScript绑定和处理所有数据。AJAX的一个最大的特点是无需刷新页面便可向服务器传输或读写数据(又称无刷新页面),这一特点要得益于XMLHTTP组件XMLHttpRequest对象。这样就可以像再发桌面应用程序只同服务器进行数据层面的交换,而不用每次都刷新界面,也不用每次将数据处理的工作提交给服务器来做,这样即减轻了服务器的负担又加快了响应速度、缩短了用户等候时间。 图4-5 Ajax模型 JSON(JavaScript Object Notation,JavaScript对象标记)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition-December 1999)的一个子集。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。而AJAX可以利用JSON更加有效地接收数据,因为JSON特殊的属性。在Struts 2的showcase中的AJAX部分,JSON的结果输出是通过Freemaker模板实现。这种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 在简易性和灵活性上都比不上JSON插件。 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 4.3总体设计 4.3.1系统总体结构 本系统分为前台和后台两部分,前台提供一条网上购物业务流程的功能实现,主要实现模块见图4-6;后实现对前台功能信息的管理,主要实现模块见图4-7。 前台功能模块: 图4-6 前台功能模块 后台功能模块: 图4-7 后台功能模块 4.3.2流程图 前台主要分为非会员用户和会员用户,其中只有会员用户才能实现在线购物,而非会员用户必需进行注册。后台用户主要分为商品管理员、会员管理员、定单管理员、系统维护员,不同的管理员实现不同的功能。 前台流程图: 图4-8 前台流程图 后台流程图: 图4-9后台流程图 4.4 详细设计 4.4.1数据库设计 本系统数据库开发主要基于Mysql6.0数据库管理工具,包括8个数据库表如下所示: · 数据字典 表4-1 e_shop数据表清单 表名 解释 ADMIN 管理员表 CART 购物车表 EVALUATE 商品 评价 LEC评价法下载LEC评价法下载评价量规免费下载学院评价表文档下载学院评价表文档下载 表 MEMBER 会员表 MERCHANTABLE 商品表 ORDERS 定单表 RECORD 记录表 TYPES 类别表 表4-2 后台管理员表(ADMIN) ADMIN(admin) 是否主键 字段名 字段描述 数据类型 长度 可空 约束 缺省值 备注 是 ADMIN_ID 管理员编号 INT(2) 2 ADMIN_NAME 管理员名 VARCHAR(50) 50 ADMIN_PWD 管理员密码 VARCHAR(30) 20 ADMIN_TYPE 管理员种类 INT(1) 1 表4-3购物车表(CART) CART(cart) 是否主键 字段名 字段描述 数据类型 长度 可空 约束 缺省值 备注 是 CART_ID 购物车编号 INT(5) 5 CART_MEM_ID 会员编号 INT(5) 5 是 CART_MER_ID 商品编号 INT(6) 6 是 CART_NUM 商品数量 INT(3) 3 是 表4-4商品评价表(EVALUATE) EVALUATE(evaluate) 是否主键 字段名 字段描述 数据类型 长度 可空 约束 缺省值 备注 是 EVAL_ID 评价编号 INT(3) 3 EVAL_MEM_ID 会员编号 INT(5) 5 是 EVAL_MER_ID 商品编号 INT(6) 6 是 EVAL_DATE 评价日期 VARCHAR(20) 20 是 EVAL_CONTENT 评价内容 VARCHAR(200) 200 是 表4-5会员表(MEMBER) MEMBER(member) 是否主键 字段名 字段描述 数据类型 长度 可空 约束 缺省值 备注 是 MEM_ID 会员编号 INT(5) 5 MEM_NAME 会员名称 VARCHAR(50) 50 MEM_PWD 会员密码 VARCHAR(30) 20 MEM_TEL 联系电话 VARCHAR(15) 15 是 MEM_ADDRESS 联系地址 VARCHAR(50) 50 是 MEM_REGIST_DATE 注册日期 VARCHAR(10) 10 是 MEM_POST 邮编 VARCHAR(10) 10 是 MEM_EMAIL EMAIL VARCHAR(20) 20 是 MEM_CART_ID 购物车编号 INT(5) 5 是 表4-6商品表(MERCHANTABLE) MERCHANTABLE(merchantable) 是否主键 字段名 字段描述 数据类型 长度 可空 约束 缺省值 备注 是 MER_ID 商品编号 INT(6) 6 MER_NAME 商品名称 VARCHAR(50) 50 MER_TYPE_ID 商品种类 INT(3) 3 是 MER_PLACE 出产地 VARCHAR(50) 50 是 MER_PRICE 价格 DECIMAL(8,2) 8 MER_DISCOUNT 折扣 DECIMAL(2,1) 2 是 MER_PICTURE 图片 VARCHAR(50) 50 是 MER_DESC 描述 VARCHAR(50) 50 是 MER_PRODUCTER 厂家 VARCHAR(60) 60 是 MER_LEAVE_DATE 出厂时间 VARCHAR(10) 10 是 MER_ADD_DATE 添加时间 VARCHAR(10) 10 是 MER_NUM 销售数量 INT 0 表4-7定单表(ORDERS) ORDERS(orders) 是否主键 字段名 字段描述 数据类型 长度 可空 约束 缺省值 备注 是 ORDER_ID 定单编号 INT(6) 6 ORDER_DATE 定单日期 VARCHAR(20) 20 是 ORDER_MEM_ID 会员编号 INT(5) 5 是 ORDER_STATUS 定单状态 INT(1) 1 是 ORDER_SEND_TIME 发送时间 VARCHAR(60) 60 是 ORDER_REMARK 定单备注 VARCHAR(100) 100 是 ORDER_SUM 价钱总和 DECIMAL(8,2) 8 是 表4-8记录表(RECORD) RECORD(record) 是否主键 字段名 字段描述 数据类型 长度 可空 约束 缺省值 备注 是 RECORD_ID 记录编号 INT(6) 6 RECORD_MER_ID 商品编号 INT(6) 6 是 RECORD_MER_NUM 商品数量 INT(3) 3 是 RECORD_ORDER_ID 定单编号 INT(6) 6 是 表4-9类别表(TYPES) TYPES(types) 是否主键 字段名 字段描述 数据类型 长度 可空 约束 缺省值 备注 是 TYPE_ID 类别编号 INT(3) 3 TYPE_NAME 类别名称 VARCHAR(30) 30 是 TYPE_DESC 类别描述 VARCHAR(100) 100 是 · 数据库概念设计 将抽象的需求转为数据库概念结构,即概念模式。 图4-10概念图 · 数据库物理设计 依据所用的数据库由概念模型生成相应的物理模型,如下图所示。 图4-11 物理图 4.4.2 系统开发规范及说明 1. 系统目录及说明如下图 依据架构思想,将开发类主要分为action、bean、dao、service逻辑包。action包含所有的控制层类,bean包含所有领域对象及相应的ORM映射文件,dao包含所有的持久层抽象类,service包含所有业务层类。另一方面根据系统开发所需建立filter(过滤器)包、listener(监听器)包、tool(工具)包。具体如下图所示: 图4-12 系统目录图 2. Struts配置文件 图4-13 Struts配置文件图 4.4.3具体模块设计 1. 模块分析与设计: 整个系统主要包括商品信息模块、会员模块、购物车模块、订单模块、商品类别、后台管理员模块。 商品信息模块: 本模块主要用来显示、查询和商品评论的功能。主要涉及的类和方法如下类图。其中PageServiceImpl为分页实现类,在整个系统中属于一个公共组件,故在各模块中不再重复介绍。另一方面各模块各层之间类的关系也大致相同,都可以参考以下类图。 图4-14商品模块类图 表4-10 商品模块主要应用类 类名 含义 MerchantableAction 作为其控制层内容,调用相应的业务方法 HeadService 业务层抽象类,其实现类中包含相应的业务方法 MerchantableDAO 包含相应的持久层方法 表4-11 MerchantableAction类 方法 含义 showByType() 调用业务层方法按类别显示商品 showById() 调用业务层方法显示某种商品 research() 调用业务层方法查询商品 showAllMer() 调用业务层方法显示所有商品 deleteMer() 调用业务层方法删除商品 updateMer() 调用业务层方法修改商品信息 saveMer() 调用业务层方法保存商品信息 表4-12 HeadService 方法 含义 findById() 调用持久层方法按商品编号查询商品 findByType() 调用持久层方法按种类查询商品 researchMer() 按条件查询商品 deleteMer() 删除商品 updateMer() 修改商品 saveMer() 保存商品 表4-13 MerchantableDAO类 方法 含义 findAllByKeyword() 按关键字查询所有商品 findByTypes() 按各类查询商品 findById() 按商品编号查询商品 delete() 删除商品 findAll() 查询所有商品 saveOrUpdate() 保存或修改商品 findByNum() 依据数量查询 findPartByTyps() 依据种类查询部分商品 会员模块: 在本模快中用到了两控制层类LoginAction和LoginJsonAction,前者用于普通的控制调用业务层方法,同时返回相应的业务逻辑视图。后者则是用Struts和Json相结合应用的,首先是能过Ajax提交数据当相应的action,然后调用业务层方法处理完成返回并不是返回某个逻辑视图,而是将返回的信息通过Json进行数据转换,前台通过Ajax接收数据。 表4-14 会员模块主要应用类 类名 含义 LoginAction 普通形式的控制器,调用相应的业务层方法 LoginJsonAction Ajax提交时使用的控制器 UserService 业务层类,包含各种相应的业务处理方法 MemberDAO 包含相应的持久层方法 表4-15 LoginAction类 方法 含义 modifyPwd() 调用业务层方法修改会员密码 modifyAddress() 调用业务层方法修改会员地址等信息 regist() 调用业务层方法注册 showMem() 调用业务层方法后台显示所有会员 delMem() 调用业务层方法删除会员 表4-16 LoginJsonAction类 方法 含义 execute() 调用业务层方法会员登录校验 表4-17 UserService类 方法 含义 modifyPwd() 修改会员密码 modifyAddress() 修改会员地址等信息 save() 保存会员 delMem() 删除会员 表4-18 MemberDAO类 方法 含义 findByNameAndPwd() 按用户名和密码查询用户 saveOrUpdate() 保存或修改会员信息 findAll() 查询所有会员 delete() 删除会员 购物车模块: 同上面的会员模板,在此模块中也有两个控制类CartAction和CartJsonAction。 表4-19 购物车模块主要应用类 类名 含义 CartAction 普通形式的控制器,调用相应的业务层方法 CartJsonAction Ajax提交时使用的控制器 HeadService 业务层类,包含各种相应的业务处理方法 CartDAO 包含相应的持久层方法 表4-20 CartAction类 方法 含义 execute() 调用业务层方法查询会员相应的购物车 update() 调用业务层方法修改购物车 delete() 调用业务层方法删除购物车 表4-21 CartJsonAction类 方法 含义 add() 添加商品到购物车 表4-22 HeadService类 方法 含义 findCartByMember() 依据会员查询相应的购物车 updateCart() 修改购物车 deleteCart() 删除购物车中的商品 addMerToCart() 将商品加入购物车 表4-23 CartDAO类 方法 含义 findByMember() 依据会员查询相应的购物车 updateCart() 修改购物车 delete() 删除购物车中的商品 saveCart() 将商品加入购物车 订单模块 表4-24 订单模块主要应用类 类名 含义 OrderAction 控制器调用相应的业务层方法 HeadService 业务层类,包含各种相应的业务处理方法 OrderDAO 包含相应的持久层方法 表4-25 OrderAction类 方法 含义 execute() 调用业务层方法显示订单 addOrder() 调用业务层方法添加 historyOrder() 调用业务层方查看历史订单 modifyOrder() 调用业务层方法进入修改订单 deleteOrder() 调用业务层方法删除订单 showOrders() 调用业务层方法显示所有订单 submit() 调用业务层方法确认定单、发货 表4-26 HeadService类 方法 含义 addOrder() 添加订单 findHistoryOrder() 查寻历史订单 deleteOrde 删除订单 updateOrders() 修改订单 表4-27 OrderDAO类 方法 含义 findById() 据编号查询订单 findHistoryOrder() 查寻历史订单 delete() saveOrUpdate() 保存或修改订单 商品类别模块: 表4-28 商品类别模板应用类 类名 含义 TypesAction 控制器调用相应的业务层方法 HeadService 业务层类,包含各种相应的业务处理方法 TypesDAO 包含相应的持久层方法 表4-29 TypesAction类 方法 含义 getAllType() 调用业务层方法获取类别 deleteType() 调用业务层方法删除 addType() 调用业务层方法添加种类 updateType() 调用业务层方法修改种类 recommend() 调用业务层方法推荐某类商品到首页 cancelRecommend() 调用业务层方法取消推荐 表4-30 HeadService类 方法 含义 findByReCommend 查询推荐的商品 findAllTypes() 查询所有类别 deleteType() 删除类别 saveType() 保存类别 updateType() 修改类别 表4-31 TypesDAO类 方法 含义 findByRecommend() 查询被推荐的类别 findById() 据编号查询所有类别 findAll() 查询所有类别 saveOrUpdate() 保存或修改类别 delete() 删除类别 后台管理员模块: 表4-32 后台管理员主要应用类 类名 含义 AdminAction 控制器调用相应的业务层方法 UserService 业务层类,包含各种相应的业务处理方法 AdminDAO 包含相应的持久层方法 表4-33 AdminAction类 方法 含义 valAdmin() 调用业务层方法校验用户 save() 调用业务层保存管理员 update() 调用业务层方法修改管理员权限 delete() 调用业务层方法删除管理员 modifyPwd() 调用业务层修改管理员密码 exit() 注销 表4-34 UserService类 方法 含义 validateAdmin() 校验用户 saveAdmin() 保存管理员 updateAdmin() 修改管理员 delAdmin() 删除管理员 表4-35 AdminDAO类 方法 含义 findAdminByNameAndPwd 据用户名与密码查询用户 saveOrUpdate() 保存或保存管理员 Delete() 删除管理员 findById() 依据编号查询管理员 2. 时序图举例 时序图通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,时序图中的每条消息对应了一个类操作或状态机中引起转换的触发事件。以下列出了本商城中的登录时序图与购物时序图,其它功能时序图与其两者基本相似,只是处理的对象不同,故此不在赘述。 图4-15 登录时序图 图4-16 购物时序图 5. 程序清单 5.1 数据库脚本 具体实现脚本: #管理员表 CREATE TABLE admin( admin_id INT(2) AUTO_INCREMENT, admin_name VARCHAR(50) NOT NULL, admin_pwd VARCHAR(30) NOT NULL, admin_type INT(1) NOT NULL, CONSTRAINT PK_ADMIN_ID PRIMARY KEY (admin_id) ); #会员表 CREATE TABLE member( mem_id INT(5) AUTO_INCREMENT, mem_name VARCHAR(50) NOT NULL, mem_pwd VARCHAR(30) NOT NULL, mem_tel VARCHAR(15), mem_address VARCHAR(50), mem_regist_date VARCHAR(10), mem_post VARCHAR(10), mem_email VARCHAR(20), mem_cart_id INT(5), CONSTRAINT PK_MEMBER_ID PRIMARY KEY (mem_id) ); #商品种类 CREATE TABLE types( type_id INT(3) AUTO_INCREMENT, type_name VARCHAR(30), type_desc VARCHAR(100), type_recommend int default 0, CONSTRAINT PK_TYPES_ID PRIMARY KEY (type_id) ); #商品信息表 CREATE TABLE merchantable( mer_id INT(6) AUTO_INCREMENT, mer_name VARCHAR(50) NOT NULL, mer_type_id INT(3), mer_place VARCHAR(50), mer_price DECIMAL(8,2) NOT NULL, mer_discount DECIMAL(2,1), mer_picture VARCHAR(50), mer_desc VARCHAR(50), mer_producter VARCHAR(60), mer_leave_date VARCHAR(10), mer_add_date VARCHAR(10), mer_num int default 0, CONSTRAINT PK_MERCHANTABLE_ID PRIMARY KEY(mer_id), CONSTRAINT FK_MERCHANTABLE_TYPE_ID FOREIGN KEY (mer_type_id) REFERENCES types(type_id) ); #商品评价表 CREATE TABLE evaluate( eval_id INT(3) AUTO_INCREMENT, eval_mem_id INT(5), eval_mer_id INT(6), eval_date VARCHAR(20), eval_content VARCHAR(200), CONSTRAINT PK_EVALUATE_ID PRIMARY KEY (eval_id), CONSTRAINT FK_EVALUATE_MEN_ID FOREIGN KEY (eval_mem_id) REFERENCES member (mem_id), CONSTRAINT FK_EVALUATE_MER_ID FOREIGN KEY (eval_mer_id) REFERENCES merchantable(mer_id) ); #购物车 购物车号即为会员编号 CREATE TABLE cart( cart_id INT(5) AUTO_INCREMENT, cart_mem_id INT(5), cart_mer_id INT(6) unique, cart_num INT(3), CONSTRAINT PK_CART_ID PRIMARY KEY (cart_id), CONSTRAINT FK_CART_ID FOREIGN KEY (cart_mem_id) REFERENCES member(mem_id), CONSTRAINT FK_CART_MER_ID FOREIGN KEY (cart_mer_id) REFERENCES merchantable (mer_id) ); #订单表 CREATE TABLE orders ( order_id INT(6) AUTO_INCREMENT, order_date VARCHAR(20), order_mem_id INT(5), order_status INT(1), order_send_time varchar(60), order_remark varchar(100), order_sum DECIMAL(8,2), CONSTRAINT PK_ORDER_ID PRIMARY KEY (order_id), CONSTRAINT FK_ORDER_MEM_ID FOREIGN KEY (order_mem_id) REFERENCES member(mem_id) ); #购物记录 CREATE TABLE record( record_id int(6) AUTO_INCREMENT, record_mer_id int(6), record_mer_num int(3), record_order_id int(6), CONSTRAINT PK_RECORD_ID PRIMARY KEY (record_id), CONSTRAINT FK_RECORD_MER_ID FOREIGN KEY (record_mer_id) REFERENCES merchantable (mer_id), CONSTRAINT FK_RECORD_ORDER_ID FOREIGN KEY (record_order_id) REFERENCES orders (order_id) ); 5.2项目实现部分代码 1. applicationContext.xml配置文件 org.hibernate.dialect.MySQLDialect update true true com/eshop/bean/Admin.hbm.xml com/eshop/bean/Cart.hbm.xml com/eshop/bean/Evaluate.hbm.xml com/eshop/bean/Member.hbm.xml com/eshop/bean/Merchantable.hbm.xml com/eshop/bean/Orders.hbm.xml com/eshop/bean/Record.hbm.xml com/eshop/bean/Types.hbm.xml 2. daoContext.xml配置文件 3. struts.xml配置文件 index.jsp index.action index.jsp member/modifyPwd.jsp member/modifyAddress.jsp registSucc.jsp member/modifyPwd.jsp showByType.jsp showById.jsp result.jsp showById.jsp {1}.jsp /head/login.jsp mycart.jsp account.jsp finish.jsp historyOrder.jsp modifyOrder.jsp modifyOrder.jsp {1}.jsp jsp/index.jsp login.jsp login.jsp {1}.jsp image/bmp,image/png,image/gif,image/jpeg 30000 /image merInfo.jsp saveMerInfo.jsp mer!showAllMer?page=1 modifyMer.jsp modifyResult.jsp uploadError.jsp {1}.jsp typeInfo.jsp typeInfo.jsp typeInfo.jsp orderInfo.jsp orderInfo.jsp memInfo.jsp memInfo.jsp adminInfo.jsp adminInfo.jsp modifyAdminResult.jsp modifyPwd.jsp /back/login.jsp /back/login.jsp {1}.jsp 4. 业务层HeadServiceImpl类 package com.eshop.service.impl; import java.util.ArrayList; import java.util.List; import java.util.Random; import com.eshop.bean.Cart; import com.eshop.bean.Evaluate; import com.eshop.bean.Member; import com.eshop.bean.Merchantable; import com.eshop.bean.Orders; import com.eshop.bean.Record; import com.eshop.bean.Types; import com.eshop.dao.CartDAO; import com.eshop.dao.EvaluateDAO; import com.eshop.dao.MerchantableDAO; import com.eshop.dao.OrdersDAO; import com.eshop.dao.RecordDAO; import com.eshop.dao.TypesDAO; import com.eshop.service.HeadService; import com.eshop.tool.DateTime; public class HeadServiceImpl implements HeadService{ private TypesDAO typesDAO; private MerchantableDAO merchantableDAO; private CartDAO cartDAO; private EvaluateDAO evaluateDAO; private OrdersDAO ordersDAO; private RecordDAO recordDAO; public RecordDAO getRecordDAO() { return recordDAO; } public void setRecordDAO(RecordDAO recordDAO) { this.recordDAO = recordDAO; } public OrdersDAO getOrdersDAO() { return ordersDAO; } public void setOrdersDAO(OrdersDAO ordersDAO) { this.ordersDAO = ordersDAO; } public EvaluateDAO getEvaluateDAO() { return evaluateDAO; } public void setEvaluateDAO(EvaluateDAO evaluateDAO) { this.evaluateDAO = evaluateDAO; } public TypesDAO getTypesDAO() { return typesDAO; } public void setTypesDAO(TypesDAO typesDAO) { this.typesDAO = typesDAO; } public MerchantableDAO getMerchantableDAO() { return merchantableDAO; } public void setMerchantableDAO(MerchantableDAO merchantableDAO) { this.merchantableDAO = merchantableDAO; } public CartDAO getCartDAO() { return cartDAO; } public void setCartDAO(CartDAO cartDAO) { this.cartDAO = cartDAO; } public List findAllTypes() { return typesDAO.findAll(); } public List findAllMerchantable() { return this.merchantableDAO.findAll(); } public Merchantable findById(String id) { return merchantableDAO.findById(Integer.parseInt(id)); } public List findByType(String type) { Types t = new Types(); t.setTypeId(Integer.parseInt(type)); return merchantableDAO.findByTypes(t); } public int addMerToCart(String id, Member member, String price, String num) { Cart cart = new Cart(); Merchantable merchantable = merchantableDAO.findById(Integer.parseInt(id)); if(cartDAO.findByMer(merchantable).size() == 0){ cart.setCartNum(Integer.parseInt(num)); cart.setMerchantable(merchantable); cart.setMember(member); cartDAO.save(cart); return 1; } return 0; } public List findCartByMember(Member member) { return cartDAO.findByMember(member); } public List findPartByType(String type) { Types t = new Types(); t.setTypeId(Integer.parseInt(type)); List list = merchantableDAO.findByTypes(t); List list2 = new ArrayList(); Random d = new Random(); int num; int i=0; while(i < (list.size()>5? 5: list.size())){ num = d.nextInt(list.size()); if(!list2.contains(list.get(num))) { i++; list2.add(list.get(num)); } } return list2; } public List findByMerId(String merId) { Merchantable m = new Merchantable(); m.setMerId(Integer.parseInt(merId)); return this.evaluateDAO.findByMerId(m); } public void saveEval(String merId, String content2,Member member, String date) { Evaluate evaluate = new Evaluate(); Merchantable m = new Merchantable(); m.setMerId(Integer.parseInt(merId)); evaluate.setMerchantable(m); evaluate.setMember(member); evaluate.setEvalContent(content2); evaluate.setEvalDate(date); this.evaluateDAO.save(evaluate); } public void updateCart(String cartId, String num) { Cart cart = cartDAO.findById(Integer.parseInt(cartId)); cart.setCartNum(Integer.parseInt(num)); cartDAO.update(cart); } public void deleteCart(String cartId) { Cart cart = cartDAO.findById(Integer.parseInt(cartId)); cartDAO.delete(cart); } public void addOrder(Member member, String time, String remark,double sum) { String date = DateTime.getDate(); Orders orders = new Orders(); orders.setMember(member); orders.setOrderDate(date); orders.setOrderStatus(0); orders.setTime(time); orders.setRemark(remark); orders.setSum(sum); ordersDAO.saveOrUpdate(orders); //将购买的商品添加到记录表,应该在后台管理员确认后再加入记录表 List carts = cartDAO.findByMember(member); for(Cart cart : carts){ Record record = new Record(); record.setMerchantable(cart.getMerchantable()); record.setOrders(orders); record.setRecordMerNum(cart.getCartNum()); recordDAO.save(record); } //定单提交之后就需要删除购物车中的商品 cartDAO.deleteAll(); } public List findHistoryOrder(Member member,int status) { return ordersDAO.findByHistoryOrder(member, status); } public void deleteOrder(String orderId) { Orders orders = ordersDAO.findById(Integer.parseInt(orderId)); orders.setOrderId(Integer.parseInt(orderId)); ordersDAO.delete(orders); } public List researchMer(String type, String keyword) { //查询所有类别 if(Integer.parseInt(type) == 0){ return merchantableDAO.findAllByKeyword(keyword); } //按各类查询 Types types = new Types(); types.setTypeId(Integer.parseInt(type)); return merchantableDAO.findByKeyword(types, keyword); } public void saveMer(Merchantable mer) { merchantableDAO.saveOrUpdate(mer); } public void deleteMer(String id) { Merchantable mer = merchantableDAO.findById(Integer.parseInt(id)); merchantableDAO.delete(mer); } public void deleteType(String id) { Types type = new Types(); type.setTypeId(Integer.parseInt(id)); typesDAO.delete(type); } public void saveType(Types type) { typesDAO.saveOrUpdate(type); } public void updateType(String id, String typeName, String typeDesc) { Types type = typesDAO.findById(Integer.parseInt(id)); type.setTypeName(typeName); type.setTypeDesc(typeDesc); typesDAO.saveOrUpdate(type); } public void updateOrder(String orderId) { Orders order = ordersDAO.findById(Integer.parseInt(orderId)); order.setOrderStatus(1); ordersDAO.saveOrUpdate(order); //确认发货后,将商品购买数量加1 List records = recordDAO.findByOrderId(orderId); for(Record r : records){ List mers = merchantableDAO.findByExample(r.getMerchantable()); Merchantable m = null; if(mers.size() != 0){ m = mers.get(0); } int num = m.getMerNum() + r.getRecordMerNum(); m.setMerNum(num); merchantableDAO.saveOrUpdate(m); } } public List findMerByNum() { return merchantableDAO.findByNum(); } public List findByReCommend() { List types = typesDAO.findByRecommend(); List list = new ArrayList(); if(types.size() != 0){ for(Types t : types){ list.add(merchantableDAO.findPartByTypes(t.getTypeId())); } return list; } return null; } public void updateType(String id, int type) { Types t = typesDAO.findById(Integer.parseInt(id)); if(type == 1){ t.setTypeRecommend(1); }else{ t.setTypeRecommend(0); } typesDAO.saveOrUpdate(t); } } 6. 程序调试与体会 在本项目的开发中遇到了很多的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,有从前台页面在不同浏览器中不兼容问题到后台数据库设计问题。在遇到这些问题时我们一直坚持不懈,通过在网上查询资料、同学间交流、求助老师等途径,我们还是解决了许多的问题。在解问题的过程中也让我们发现,一个项目有一个好的架构是非常重要的,当遇到问题时我们能从这个好的架构中更迅速的发现并解决问题,这对项目而言就有了较高的可维护性。同时我们通过本次课程设计从中也收获到了许多快乐,体会到了编程的乐趣。 7. 运行结果 下面以图片的形式显示部分页面的显示效果。 前台页面效果图: 图7-1 前台首页 图7-2分类显示 图7-3商品加入购物车 图7-4修改购物车 图7-5订单页面 图7-6 查询显示 图7-7账户首页 图7-8历史订单 图7-9密码修改 图7-10个人信息修改 后台显示效果图: 图7-11 登录页面 图7-12会员管理页面 图7-13商品管理页面 图7-14商品添加页面 图7-15商品分类页面 图7-16管理员密码修改页面 图7-17订单管理页面 图7-18后台管理员页面 8. 结 论 通过本次课程设计我们加深了对JavaEE5开发的思想的理解,对SSH三大框架的整合开发有了进一步的熟悉,对团队之间合作的重要性都有了共识。从开发中遇到的问题也让我们发现要将学到的知识很好的应用到实际开发中,还需要不断的努力。让我们明白到只有实践应用才能很好的检验我们对知识的掌握程度。 9. 致 谢 在课程设计完成之际,我们首先要向指导谢小婷老师表示最真挚的谢意。谢老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我们收益匪浅。无论在理论上还是在实践中,都给与我们很大的帮助,使我得到不少的提高,这对于我们以后的工作和学习都是一种巨大的帮助,感谢她耐心的辅导。同时还要感谢各位同学给予我们的帮助,感谢这个团队的协同合作,正是有了这些帮助才使得我们能够顺利的完成这次的课程设计。 由于我们的学识有限,加之时间比较仓促,可能存在某些不足之处,真诚的欢迎老师、同学提出宝贵的意见,我们将认真听取、改正努力提高自己。 10. 参考文献 [1]李刚.轻量级JavaEE企业应用实战.北京: 电子工业出版社,2009.9 [2]徐会生.康爱媛, 何启伟,深入浅出ExtJ.北京:人民邮电出版社,2010.5 [3]孙卫琴.精通Struts:基于MVC的Java Web设计开发.北京: 电子工业出版社,2004 [4] 邓子云,张赐.Jsp网络编程从基础到实战.北京:电子工业出版社,2005 [5]郭志学.易学设计模式.北京:人民邮电出版社,2009.4 [6] 周鑫炎.基于Ajax的网络作业管理系统的设计[J]. 重庆工学院学报(自然科学),2008,22(9):132-135 [7] 张海藩.软件工程导论(第5版)[M].北京:清华大学出版社,2008 [8] 杨 磊,陈凌云.精通Eclipse Web开发—Java体系结构、工具、框架及整合应用[M].北京:人民邮电出版社,2006.10 [9] 郝玉龙,尹建平.JAVAEE Web开发实例精解[M].北京:清华大学出版社,北京交通大学出版社.2008.3 [10] 李绪成.Java EE5实用教程—基于Weblogic和Eclipse[M].北京:电子工业出版社,2007.2. [11] 郭广军.刘安丰,阳西述.Java程序设计教程[M]. 武汉:武汉大学出版社,2008.7 [12] (美)梅茨克尔(Metsker,S.J. ). (美)韦克(Wake,W.C. ). Design Patterns in Java (2nd Edition) [M].北京:人民邮电出版社,2007.6. [13] Abraham Silberschatz, Henry F.Korth, S.Sudarshan. Database System Concepts (Fifth Edition) [M]. 北京:高等教育出版社,2006.6 [14] Dava Crane, Eric Pascarelo,Darren James 著.AJAX实战.人民邮电出版社,2006.4 PAGE _1349382839.vsd � 电子商城后台� 商品信息管理� 商 品 信 息� 后台用户管理� 会员管理� 订单管理� 商品分类管理� 商 品 添 加� 分 类 信 息 用 户 信 息 会 员 信 息 订 单 信 息 密 码 信 息 _1349384773.vsd � � 前台 会员?� 信息浏览� 注册� 添加商品至购物车 提交定单� 登录� 是 否 商品评论� 修改购物车� 个人账户信息� _1349385566.vsd � � 后台� 登录� 商品信息管理 权限� 系统维护 会员信息管理 定单信息管理 商品管理员 定单管理员 会员管理员 系统管理员 _1348997067.vsd � 电子商城前台� 商品信息� 商 品 信 息 查 询� 商 品 信 息 显 示� 订单� 购物车� 会员信息� 会 员 信 息 修 改 会 员 登 录 会 员 注 册 购 物 车 商 修 改 购 物 车 商 品 删 除 购 物 车 商 品 添 加 订 单 删 除 订 单 修 改 订 单 提 交 商 品 评 价�
本文档为【基于S2SH电子商城毕业设计论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
北溟愚鱼
暂无简介~
格式:doc
大小:3MB
软件:Word
页数:0
分类:工学
上传时间:2018-09-23
浏览量:15