智术园
近年来,随着Internet的迅速崛起,互联网已日益成为收集提供信息的最佳渠道并逐步进入传统的流通领域。于是电子商务开始流行起来。网上购物网站作为B2B,B2C(BusinesstoCustomer,即企业对消费者),C2C(CustomertoCustomer,即消费者对消费者)电子商务的前端商务平台,在其商务活动全过程中起着举足轻重的作用。尤其是购物商城的出现,为新一代的购物形式提供了一种全新的购物平台。本文主要考虑的是如何建设B2C的网上购物网站。
网络的日益普及和迅猛的发展,市场竞争日益激烈,利用网络进行服务和管理已经成为一种趋势.网络的发展给用户带来了很大的方便,风起云涌的网站在炒足了”概念”之后,都纷纷转向了”务实”,而”务实”比较鲜明的特点之一:是绝大多数的网站都在试图做实实在在的”网上交易”,所谓网上交易就是利用计算机技术、网络技术和远程通信技术,实现整个商务(买卖)过程中的电子化、数字化和网络化,
网上购物是一种具有交互功能的商业信息网站。它向用户提供静态和动态两类信息资源。所谓静态信息是指那些比经常变动或更新的资源,如公司简介、管理规范和公司制度等等;动态信息是指随时变化的信息,如商品报价,会议安排和培训信息等。网上购物网站具有强大的交互功能,可使商家和用户方便的传递信息,完成电子贸易或EDI交易。这种全新的交易方式实现了公司间文档与资金的无纸化交换。
随着社会的不断进步及网络经济时代的蓬勃发展,互联网已逐步深入人心,人们不再满足于传统的购物方式, “ 网上购物 ” 这种新型的购物方式已经为更多的人所接受 。我国的计算机技术起步较晚,而近几年随着经济的发展,计算机价格的下降和人们生活水平的提高,计算机技术在我国已经得到了普及,不论单位还是家庭都拥有了计算机,计算机已成为人们工作和生活的重要组成部分。所以传统的购物已经不能满足人们的需要,而网络购物的商品的种类多样性,价格的低廉,恰好为网上购物提供了良好的基础,另外我国国内的网络的快速发展和良好的群众基础为网上购物这种新的购买形式提供了良好的群众基础。所以网上购物方式日益被大家所接受。
在最近一段时间里,我也查了一些关于网上购物的信息。有 60.4% 的网站属于企业网站,可见如今企业都将网站作为推广自己的重要手段。其次是个人网站。而政府部门的网站占到 4.4% 。但是,另有调查显示,将近 75% 的企业的网站每天的点击率在 200 次以下,更有 51.5% 的企业网站的点击率不足 50 次,仅有 8.6% 的企业网站的点击率每天超过 1000 次。这说明,做好一个网站,做出网站的特色也企业信息与新闻相结合来吸引人观看是一个非常重要的问题。
另外,作为信息、新闻传播的传统模式的报刊业也将目光和精力投入到网络网站上来。毫无疑问,高速,海量的信息传输对报刊业也是巨大的刺激。此外,随着电子时代的迅速发展, MP3 等电子产品已受到广大的消费群体高度的关注。生产制造 MP3 的厂商作为新时代产业的一个主要部分,当然也会紧随着时代的发展来使自己在市场与行业中更具竞争力。利用电子商务的模式,在介绍推广自己的同时,以新的一种渠道销售自己的产品,也愈发被关注。因此,设计一个具有电子商务功能的企业网站具有非常好的开发与应用前景。随着信息化的浪潮席卷全球,传统的商务模式受到巨大的冲击。越来越多的企业和个人消费者。
在 Internet 开放的网络环境下,一种基于 B/S(Browser/Server) 应用模式,实现消费者网上购物,商户之间的网上交易和在线电子支付的新型的商业运营模式 — 送电子商务应运而生。电子商务在中国也发展了一段时间,目前在国内也有很多电子商务的平台,通过分析国内的电子商务网站可知,目前国内的电子商务做的都是集合型,一个平台中各个方面的商务领域似乎都有涉及到。像比较有名的一些网购平台,如:京东商城,淘宝网,拍拍网等电子商务网站,涉及的门类都很多,而且他们都有一个共通的特点就是只有产品的展示与订购,很少有厂家企业的介绍。目前中国能用上电子商务平台的都是一些大中型的企业,而大部分的中小型,特别是小型企业还是用着以前的生意模式,靠朋友,靠关系,靠老客户来维持企业,这种模式在过去的时代会有一定的优势,但在信息网络时代这种模式缺乏主动性,往往会使企业处在被动的状态。像阿里巴巴这样的大型电子商务平台是能很好地帮助企业做宣传,联系客户,但是阿里巴巴基本上是 面对大中型的企业,每年的管理费用都非常高,对于一些中小企业要承受一笔高的资金是很困难的。为了能够上中小型企业特别是小型企业能够用上电子商务平台,我们特地开发此系统,使中小型企业也能做到生产,宣传,销售一条龙 。
这使得对开发网上购物系统的技术要求更高了。传统的基于 JSP , Servlet 以及 JavaBean 技术所开发的系统扩展能力不强,不能够满足人们快速增长的需求,并且显示页面有时要进行逻辑处理,降低了运行效率。此外,对数据库的处理往往较复杂,特别是与数据库的连接浪费了大量的时间。这使得使用 SSH 这三个开源框架的优点被很好的体现出来了。开源框架的设计思路是将整个系统的实现分为三层:表现层、业务逻辑层、持久层。表现层主要是负责前台的显示,业务逻辑层主要负责处理业务逻辑以及页面的转向,持久层主要负责后台与数据库的连接以及交换数据。这样大大增加了系统的扩展性,能够即使的调整系统功能来满足用户的需求;使得结构更加严谨,每层完成指定的任务,减轻显示页面的工作量,增加了它们的执行效率。此外增加了持久层,也就增加了更多的安全性 。
针对B/S模式网络商城系统的建设与应用,提出Struts+Spring+Hibernate(SSH) 技术架构的解决方法,给出其在 Web 系统快速设计与开发中的具体实现过程,结果证明,SSH技术架构在构建复杂业务系统中提高了开发效率和系统的可维护性,同时增强了系统的可扩展性。
本文将重点研究基于SSH框架的网络商城平台设计与实现,其中将包括对该系统的分析、设计、编码及测试等进行研究,一切按照软件工程思想进行必要分析与相应的实现说明。
本毕业设计主要是介绍基于SSH的易买网商城的设计与实现。项目建立准备条件的设计等,该项目主要有以下内容:
第一章:开发背景
第二章:需求分析,可行性分析、功能分析、关键技术本章都做了详细的介绍
第三章:项目网站分析及概要设计。本章在第一章的基础上,创建流程图、时序图、功能图
第四章:项目网站分析及概要设计,具体介绍了此项目开发的具体步骤和方法
第五章:总结与展望
本网站是以业务需求为基础,网站需要完成的以下任务:网站需要让供应商、客户以及浏览者能看到商城的信息及动态,另一个重要的内容就是能够显示出该商城现有的各类型商品及其详细信息;由于消费者的需求在增长和变化,商城在面对面销售的基础上也要随之发展出相应的服务,如在线订购等技术。另外,企业营销商除了能与普通客户一样浏览网站之外,还需要对网站进行管理。企业需要定期更新现有商品的详细信息、商城动态和联系方式,必要时还要对企业的介绍做更改。对于消费者通过网站提交的各种订单能够进行处理以方便销售。
因此,本文基于以上原则,在对商城进行可行性分析时,主要从技术可行性、经济可行性以及管理可行性三个方面进行分析
为了提高商城的服务质量和水平,扩大商城的宣传力度,而且应客户的普遍要求,商城的领导非常支持这种商城信息化的建设,将为网站的开发提供充足的物质保障,有效保证网站整个开发过程的顺利实施。而且,商城信息网站建成之后,将会极大提高商城的服务质量和水平,完善商城与客户之间的沟通渠道,扩大商城的宣传和影响,为提高商城的经济效益是有很大帮助的。因此,对于商城信息管理网站的经济性分析也是可行的。
根据调查的资料,现在聘用一支团队设计并建设企业商务型网站的费用为5300元左右,另外每年交纳600元占用网站空间和网站维护费。为了使网站建成后能达到增加企业经济效益的效果,寻找一支创新与技术优秀的团队最多需要增加3000元的一次性投资。这样看来一个成功的网站建成后为这个营销商带来的效益将会远大于成本。但架设好一个网络中的服务器,以满足互联网中浏览者对速度的需求,这样每年服务器与网络线路和设备的维护费用将是企业不得不重点考虑的因素。如何做好经济可行性分析,需要通过仔细的调查与投资和行业方面的专业人士分析。
针对商城网站的技术可行性,首先对商城信息管理网站的结构模式进行分析。就目前的技术情况而言,大多数网站主要采用响应式结构模式。对于响应式网站而言,目前是网站的发展趋势,它是一种基于浏览器的结构模式,网站如果采用响应式模式开发的话,就不再需要特别去安装网站的客户端,客户只需登录网络,直接进入平台主页,独立运行和操作,因此采用响应式模式开发的网站更加快捷方便,使得网站对于计算机的依赖性明显下降,更加适合商城信息管理网站的应用,可以让客户随时随地登录网站了解商城信息,完成操作,这无疑对提高商城的服务水平和质量是有很大帮助的。而对于采用C/S模式开发的网站而言,它与响应式的最大区别在于,在使用网站之前必须先行在所要使用的计算机上安装网站客户端,这样相对于响应式模式来说,其灵活性和便捷性大大降低,而且网站的维护也较响应式模式的网站麻烦,而且随着产品的升级可能会造成硬件性能不足的情况出现,进而影响网站的使用而出现各种各样的问题,不利于网站日后的升级和维护。因此,本网站采用Web进行开发。
本网站的设计和开发将全面提高商城对客户和商品信息的管理,提高整体的办公效率,进而提高商城水平和服务质量的提高。通过商城信息管理网站将更加快捷的将各种信息传递给客户,并将客户的反馈信息及时反馈给商城,实现商城和客户的良好互动。而且减少人工操作的环节,减少工作人员的工作量,提高整个商城的管理水平和质量。
基于SSH的商城信息管理网站面向普通用户,即普通用户普通用户为商城的大众客户,通过该网站与商城进行信息交流;集合以上所有的业务分析,用户有这些功能。
第一个注册登录页面,网站登录进去之后就可以显示出登录页面输入用户名以及密码后注册成功就可登录,这里是登录注册的一个功能
第二个是首页界面,这里的话就是主页的一个模块,可以看到前端的主界面的一些相关容以及功能按钮之类的
第三个就是个人信息管理模块,这里是用户的基本资料,还有可以修改用户资料
第四个就是注销管理,这里就是我们可以注销我们的账户
第五个就是订单管理,这里主要就是我们订单管理的列表,就是我们的购买的商品的列表相关性信息
第六个就是购物车管理,这里我们可以把喜欢的商品加入购物车,然后进入购物车中选择下单
J2EE ( Java 2 Platform, Enterprise Edition )是由 SUN 公司开发的一套以 Java2 平台标准版为基础的应用规范,其作用是用于企业应用软件的开发、部署和管理。 J2EE 保留了标准版中的诸多优点,比如“编写一次、随处运行”的跨平台性、与数据库连接的接口 JDBC API ,在 Internet 应用中维持数据完整性的安全模式等,同时还具有其他显著的特性,比如支持 EJB , Servlet , JSP 和 XML 等技术。并且 J2EE 提供了事务处理,对象生存控制,并发控制,资源共享等系统服务,只要利用简单的配置就可以完成以上服务,开发者因此可以从复杂且困难的系统设计中解脱出来,而将主要精力放在业务逻辑的设计上, J2EE 为企业提供了一个能够明显缩短开发时间的软件开发体系结构。
框架是一种可复用的软件,它需要具备灵活的结构以便于扩展。选择一个好的开发框架进行开发能够极大地增加系统的可维护性,进而提高开发的效率。使用合适的框架 , 可以节省设计人员的精力。 J2EE 多层结构的出现将面向对象技术推向了新的高点。 SSH 集成框架支持多种主机类型、多操作系统、多数据库。并且生成的页面和组件代码完全符合 J2EE 标准,开发人员可以开发出更为强大更具特色的应用系统 。
SSH 三层架构的出现 , 有效地解决了传统架构存在的问题。其架构模型与传统 J2EE 架构的关键区别在于各层的内部实现方式不同。 SSH 架构分为 Web 层、业务逻辑层、数据持久层。 Web 层使用 Struts 结构完成数据的获取和回复,业务逻辑层通过使用 Spring 的配置文件来进行逻辑控制并对数据的处理,数据持久层使用 Hibernate 框架来进行应用程序与数据库的数据交换。 SSH 集成框架实现了分层结构设计的技术要求, 使每一层的功能和职责定义十分清楚,通过接口在层与层之间进行连接,增强了系统的稳定性,安全性,可扩展性,有效提高了系统开发速度,降低了层与层间的耦合度。具体包括:
Web 层用来管理用户的请求和响应,提供了一个控制器将调用委托给业务层进行处理,将来自于其他层的处理纳入到 Struts Action 中,并且执行 UI 校验
业务逻辑层用来处理应用层的业务逻辑和业务校验,提供同其他层进行连接的接口,协调业务对象之间的依赖性,从表现层提供给业务层上下文以获得业务服务,管理从业务层到表现层的功能实现
数据持久层用来实现对象的映射关系, Hibernate 是通过 HQL 查询语言,或者使用 API 存储、更新和删除存储在数据库中的信息
SSH 三层架构体系如图 2.1 所示。
Hibernate 是一种对象关系映射框架,其本身是开放源代码的,它是一种强大高效的持久层查询服务器,它以面向对象的思维,解决数据库的操作问题, Hibernate 高效的保证了运行效率、内存消耗以及开发效率,并自动封装了事务控制,安全性代码等功能 。同时 Hibernate 还是一种非强迫性的解决方案,能与一些数据库和 Java 服务器进行平稳的集成 。 Hibernate 的强大缓存机制能一定程度上的缓解服务器端频繁读取数据库的压力,这也是 Hibernate 广泛使用得重要原因之一。它轻量级的封装了 JDBC 对象,从而使得代码编写者在操作数据库时可以使用对象编程思想。 Hibernate 既可以在 Java 的客户端程序中使用,也可以在 Web 应用程序中使用,可以说任何使用 JDBC 的场合都能够使用 Hibernate 。更为重要的是,在应用 EJB 的 J2EE 架构中, Hibernate 可以取代 CMP 从而完成数据持久化。 Hibernate 实现了面向对象的业务模型和商业逻辑的最优结合,它不仅可以管理 Java 对象和数据库的映射,还可以查询数据并且获取数据,极为显著的缩短了开发时使用 SQL 和 JDBC 的数据处理时间。
Hibernate 将 Java 中的对象与对象关系映射至关系模型数据库中的表格与表格之间的关系, Hibernate 提供了这个过程中自动对应转换的方案。 Hibernate 的体系结构如图 2.2 所示。
Hibernate 的核心接口一共有 5 个,包括: Session , Session Factory , Configuration , Transaction , Query 和 Criteria 接口。主要的组件有三个,分别为:连接管理组件,事务管理组件,对象 / 关系映射组件。
Hibernate 提供的持久化服务是一个接口,它由业务逻辑调用。其优势在于使得开发者可以把被持久化的对象实现成与持久化环境无关的类。
总之, Hibernate 是一个优秀并且开放源代码的 Java 对象持久层轻量级封装框架,它既可以在 Java 应用程序中用来取代大部分 JDBC 代码,也可以整合到 J2EE 系统中作为持久层框架。
审美原则:好的创意必须具有审美性。一种创意如果不能给浏览者以好的审美感受,就不会产生好的效果。创意的审美原则要求所设计的内容健康、生动、符合人们审美观念。
目标原则:创意自身必须与创意目标相吻合,创意必须能够反映主题、表现主题。网页设计必须具有明确地目标性。网页设计的目的是为了更好的体现网站内容。
本网站简单的系统总流程图大致情况如图 3.1 所示。
简易流程图结构图
购物车流程图
修改密码流程图
根据上商家的实际需求,开发一个通用的SSH网络商城购物系统。网络商城系统按角色分配的总的功能需求,如图 3.4 所示。
网络商城系统按角色划分,每个角色都有着本身的功能需求,下面我们将按游客、普通用户这两个角色来细分该平台系统的功能需求。
游客的功能需求,如图 3.5 所示。
注册用户:系统为任何用户提供普通用户注册功能
浏览商品:游客可登陆平台,查看各种商品及资讯信息
购物车功能:添加商品至购物车、从购物车中删除、购物车结算总价(不可以提交订单)
查询商品:可根据类别查询平台的商品信息及资讯信息,提供模糊查询功能
资讯浏览:可查看系统最新资讯和公告信息
其他功能:匿名留言功能、投诉举报功能等
普通用户的功能需求(如图 3.6 所示)。
点击功能条的用户注册/登录功能进入功能界面,登陆界面如图4.1所示,注册界面如图4.2所示,登陆后显示客户的详细信息。
程序运行效果图如图4.1所示:
登录页面
注册页面
在登陆页面输入用户名和密码以后,当点击提交按钮后,就会跳转到loginservice中,在该service中会对用户名,密码进行判断,验证通过进入对应的页面。
登录界面代码实现:
1. <div class="shadow">
2. <em class="corner lb"></em> <em class="corner rt"></em>
3. <div class="box">
4. <h1>欢迎回到易买网</h1>
5. <form id="loginForm" method="post" action="user_login.action"
6. onsubmit="return checkForm()">
7. <table>
8. <tr>
9. <td class="field">用户名:</td>
10. <td><input class="text" type="text" id="userName"
11. name="user.userName" value="" />
12. </td>
13. </tr>
14. <tr>
15. <td class="field">登录密码:</td>
16. <td><input class="text" type="password" id="password"
17. name="user.password" value="" />
18. </td>
19. </tr>
20. <tr>
21. <td class="field">验证码:</td>
22. <td><input class="text" style="width: 60px;margin-right: 10px;"
23. type=text value="" name="imageCode" id="imageCode"><img
24. onclick="javascript:loadimage();" title="换一张试试" name="randImage"
25. id="randImage" src="image.jsp" width="60" height="20" border="1"
26. align="absmiddle">
27. </td>
28. </tr>
29.
30. <tr>
31. <td></td>
32. <td><label class="ui-green"><input type="submit"
33. name="submit" value="立即登录" /> </label>
34. <font id="error" color="red"></font>
35. </td>
36. </tr>
37. </table>
38. </form>
39. </div>
40. <div id="register" class="wrap">
41. <div class="shadow">
42. <em class="corner lb"></em>
43. <em class="corner rt"></em>
44. <div class="box">
45. <h1>欢迎注册易买网</h1>
46. <ul class="steps clearfix">
47. <li class="current"><em></em>填写注册信息</li>
48. <li class="last"><em></em>注册成功</li>
49. </ul>
50. <form id="regForm" method="post" action="user_register.action" onsubmit="return checkForm()">
51. <table>
52.
53. <tr>
54. <td class="field">用户名(*):</td>
55. <td><input class="text" type="text" id="userName" name="user.userName" onblur="checkUserName(this.value)" /> <font id="userErrorInfo" color="red"></font></td>
56. </tr>
57. <tr>
58. <td class="field">登录密码(*):</td>
59. <td><input class="text" type="password" id="password" name="user.password" /></td>
60. </tr>
61. <tr>
62. <td class="field">确认密码(*):</td>
63. <td><input class="text" type="password" id="rePassWord" name="rePassWord" /></td>
64. </tr>
65.
66. <tr>
67. <td class="field">性别(*):</td>
68. <td>
69. <input type="radio" name="user.sex" value="男" checked="checked"/>男
70. <input type ="radio" name="user.sex" value="女"/>女
71. </td>
72. </tr>
73. <tr>
74. <td class="field">出生日期:</td>
75. <td>
76. <input type="text" id="birthday" name="user.birthday" class="Wdate" onClick="WdatePicker()"/>
77. </td>
78. </tr>
79. <tr>
80. <td class="field">身份证号:</td>
81. <td><input class="text" type="text" id="dentityCode" name="user.dentityCode" /></td>
82. </tr>
83. <tr>
84. <td class="field">Email:</td>
85. <td><input class="text" type="text" id="email" name="user.email" /></td>
86. </tr>
87. <tr>
88. <td class="field">手机号码(*):</td>
89. <td><input class="text" type="text" id="mobile" name="user.mobile" /></td>
90. </tr>
91. <tr>
92. <td class="field">收获地址(*):</td>
93. <td><input class="text" type="text" id="address" name="user.address" /></td>
94. </tr>
95. <tr>
96. <td></td>
97. <td><label class="ui-green"><input type="submit" name="submit" value="提交注册" /></label></td>
98. </tr>
99. <tr>
100. <td> </td>
101. <td><font id="error" color="red"></font> </td>
102. </tr>
103. </table>
104. </form>
105. </div>
106. </div>
107. <div class="clear"></div>
108. </div>
这就是商城的首页页面,展现出商城的商品。
程序运行效果图如下所示4.3、4.4、4.5所示:
主界面01
主界面02
主界面03
展示实现代码:
1. package com.java1234.service.impl;
2.
3. import java.util.LinkedList;
4. import java.util.List;
5.
6. import javax.annotation.Resource;
7.
8. import org.springframework.stereotype.Service;
9.
10. import com.java1234.dao.BaseDAO;
11. import com.java1234.entity.PageBean;
12. import com.java1234.entity.ProductBigType;
13. import com.java1234.service.ProductBigTypeService;
14. import com.java1234.util.StringUtil;
15.
16. @Service("productBigTypeService")
17. public class ProductBigTypeServiceImpl implements ProductBigTypeService{
18.
19. @Resource
20. private BaseDAO<ProductBigType> baseDAO;
21.
22. @Override
23. public List<ProductBigType> findAllBigTypeList() {
24. return baseDAO.find(" from ProductBigType");
25. }
26.
27. @Override
28. public List<ProductBigType> findProductBigTypeList(
29. ProductBigType s_productBigType, PageBean pageBean) {
30. List<Object> param=new LinkedList<Object>();
31. StringBuffer hql=new StringBuffer("from ProductBigType");
32. if(s_productBigType!=null){
33. if(StringUtil.isNotEmpty(s_productBigType.getName())){
34. hql.append(" and name like ?");
35. param.add("%"+s_productBigType.getName()+"%");
36. }
37. }
38. if(pageBean!=null){
39. return baseDAO.find(hql.toString().replaceFirst("and", "where"), param, pageBean);
40. }else{
41. return baseDAO.find(hql.toString().replaceFirst("and", "where"), param);
42. }
43. }
44.
45. @Override
46. public Long getProductBigTypeCount(ProductBigType s_productBigType) {
47. List<Object> param=new LinkedList<Object>();
48. StringBuffer hql=new StringBuffer("select count(*) from ProductBigType");
49. if(s_productBigType!=null){
50. if(StringUtil.isNotEmpty(s_productBigType.getName())){
51. hql.append(" and name like ?");
52. param.add("%"+s_productBigType.getName()+"%");
53. }
54. }
55. return baseDAO.count(hql.toString().replaceFirst("and", "where"), param);
56. }
57.
58. @Override
59. public void saveProductBigType(ProductBigType productBigType) {
60. // TODO Auto-generated method stub
61. baseDAO.merge(productBigType);
62. }
63.
64. @Override
65. public void delete(ProductBigType productBigType) {
66. // TODO Auto-generated method stub
67. baseDAO.delete(productBigType);
68. }
69.
70. @Override
71. public ProductBigType getProductBigTypeById(int id) {
72. return baseDAO.get(ProductBigType.class, id);
73. }
这里是用户的个人信息资料,可以修改信息
程序运行效果图如下所示4.6、4.7:
个人信息
修改个人信息
展示实现代码:
1. package com.java1234.service.impl;
2.
3. import java.util.LinkedList;
4. import java.util.List;
5.
6. import javax.annotation.Resource;
7.
8. import org.springframework.stereotype.Service;
9.
10. import com.java1234.dao.BaseDAO;
11. import com.java1234.entity.PageBean;
12. import com.java1234.entity.User;
13. import com.java1234.service.UserService;
14. import com.java1234.util.StringUtil;
15.
16. @Service("userService")
17. public class UserServiceImpl implements UserService{
18.
19. @Resource
20. private BaseDAO<User> baseDAO;
21.
22. @Override
23. public void saveUser(User user) {
24. // TODO Auto-generated method stub
25. baseDAO.merge(user);
26. }
27.
28. @Override
29. public boolean existUserWithUserName(String userName) {
30. String hql="select count(*) from User where userName=?";
31. long count=baseDAO.count(hql, new Object[]{userName});
32. if(count>0){
33. return true;
34. }else{
35. return false;
36. }
37. }
38.
39. @Override
40. public User login(User user) {
41. List<Object> param=new LinkedList<Object>();
42. StringBuffer hql=new StringBuffer("from User u where u.userName=? and u.password=?");
43. param.add(user.getUserName());
44. param.add(user.getPassword());
45. if(user.getStatus()==2){
46. hql.append(" and u.status=2");
47. }
48. return baseDAO.get(hql.toString(), param);
49. }
50.
51. @Override
52. public List<User> findUserList(User s_user, PageBean pageBean) {
53. List<Object> param=new LinkedList<Object>();
54. StringBuffer hql=new StringBuffer("from User");
55. if(s_user!=null){
56. if(StringUtil.isNotEmpty(s_user.getUserName())){
57. hql.append(" and userName like ? ");
58. param.add("%"+s_user.getUserName()+"%");
59. }
60. }
61. hql.append(" and status=1");
62. if(pageBean!=null){
63. return baseDAO.find(hql.toString().replaceFirst("and", "where"), param, pageBean);
64. }else{
65. return null;
66. }
67. }
68.
69. @Override
70. public Long getUserCount(User s_user) {
71. List<Object> param=new LinkedList<Object>();
72. StringBuffer hql=new StringBuffer("select count(*) from User");
73. if(s_user!=null){
74. if(StringUtil.isNotEmpty(s_user.getUserName())){
75. hql.append(" and userName like ? ");
76. param.add("%"+s_user.getUserName()+"%");
77. }
78. }
79. hql.append(" and status=1");
80. return baseDAO.count(hql.toString().replaceFirst("and", "where"), param);
81. }
82.
83. @Override
84. public void delete(User user) {
85. // TODO Auto-generated method stub
86. baseDAO.delete(user);
87. }
88.
89. @Override
90. public User getUserById(int id) {
91. return baseDAO.get(User.class, id);
92. }
93.
94. }
这里主要就是商品的详情页、购物车、付款等页面
程序运行效果图如下所示4.8、4.9、4.10所示:
商品详情页页面
展示实现代码:
1. <div class="spacer"></div>
2. <div class="last-view">
3. <h2>最近浏览</h2>
4. <dl class="clearfix">
5.
6. <dt>
7. <img src="images/product/2.jpg" class="imgs" style="height: 50px;width: 50px;">
8. </dt>
9. <dd>
10. <a href="product_showProduct.action?productId=291" target="_blank">Vero Moda透视拼接修身包边圆领蕾</a>
11. </dd>
12.
13. </dl>
14. </div>
15. </body>
16. </html>
17. </div>
18.
19.
20.
21. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
22. <html>
23. <head>
24. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
25. <title>Insert title here</title>
26. <script type="text/javascript">
27. function addShoppingCart(productId){
28. if('zengyao'==''){
29. alert("请先登录,然后购物!");
30. }else{
31. $.post("shopping_addShoppingCartItem.action",{productId:productId},
32. function(result){
33. var result=eval('('+result+')');
34. if(result.success){
35. alert("已成功加入购物车!");
36. location.reload();
37. }else{
38. alert(result.error);
39. }
40. }
41. );
42. }
43. }
44.
45. function goBuy(productId){
46. if('zengyao'==''){
47. alert("请先登录,然后购物!");
48. }else{
49. window.location.href="shopping_buy.action?productId="+productId;
50. }
51. }
52. </script>
53. </head>
54. <body>
55. <div id="product" class="main">
56. <h1>Vero Moda透视拼接修身包边圆领蕾</h1>
57. <div class="infos">
58. <div class="thumb">
59. <img class="img" src="images/product/2.jpg" />
60. </div>
61. <div class="buy">
62. <br/>
63. <p>
64. 商城价:<span class="price">¥499</span>
65. </p>
66. <p>库 存:99</p>
67. <br/>
68. <div class="button">
69. <input type="button" name="button" value="" onclick="goBuy(291)" /><br/>
70. <a href="javascript:addShoppingCart(291)">放入购物车</a>
71. </div>
72. </div>
购物车页面
展示实现代码:
1. <script>
2. $(function(){
3.
4. $(".add").click(function(){
5. var t=$(this).parent().find('input[class=text_box]');
6. t.val(parseInt(t.val())+1);
7. var product_id=$(this).parent().find('input[id=product_id]').val();
8. var price=$("#price_"+product_id).html();
9. $("#productItem_total_"+product_id).html(price*t.val());
10.
11. refreshSession(product_id,t.val());
12. setTotal();
13. });
14. $(".text_box").blur(function(){
15. var t=$(this).parent().find('input[class=text_box]');
16. if(parseInt(t.val())<0){
17. t.val(0);
18. }
19. var product_id=$(this).parent().find('input[id=product_id]').val();
20. var price=$("#price_"+product_id).html();
21. $("#productItem_total_"+product_id).html(price*t.val());
22.
23. refreshSession(product_id,t.val());
24. setTotal();
25. });
26.
27. function setTotal(){
28. var s=0;
29. $(".productTr").each(function(){
30. var n=$(this).find('input[class=text_box]').val();
31. var price=$(this).find('label[class=price_]').html();
32. s+=n*price;
33. });
34. $("#product_total").html(s);
35. }
36.
37. function refreshSession(productId,count){
38. $.post("shopping_updateShoppingCartItem.action",{productId:productId,count:count},
39. function(result){
40. var result=eval('('+result+')');
41. if(result.success){
42.
43. }else{
44. alert("刷新Session失败");
45. }
46. }
47. );
48. }
49.
50. setTotal();
51.
52. });
53.
54. function removeShopping(productId){
55. if(confirm("您确定要删除这个商品吗?")){
56. window.location.href="shopping_removeShoppingCartItem.action?productId="+productId;
57. }
58. }
59. </script>
60. </head>
61. <body>
62. <div id="shopping">
63. <form action="order_save.action" method="post">
64. <table id="myTableProduct">
65. <tr>
66. <th>商品名称</th>
67. <th>商品单价</th>
68. <th>金额</th>
69. <th>购买数量</th>
70. <th>操作</th>
71. </tr>
72.
73. <tr class="productTr">
74. <td class="thumb">
75. <img class="imgs" src="images/product/2.jpg" /><a href="product_showProduct.action?productId=291" target="_blank">Vero Moda透视拼接修身包边圆领蕾</a>
76. </td>
77. <td class="price" ><span>¥<label class="price_" id="price_291">499</label></span>
78. </td>
79. <td class="price" >
80. <span>¥<label id="productItem_total_291">499</label></span>
81. </td>
82. <td class="number">
83. <input type="hidden" id="product_id" value="291"/>
84. <input class="min" name="" type="button" value=" - " />
85. <input class="text_box" style="width: 30px;text-align: center" name="" type="text" value="1" />
86. <input class="add" name="" type="button" value=" + " />
87. </td>
88. <td class="delete"><a
89. href="javascript:removeShopping(291)">删除</a>
90. </td>
91. </tr>
92.
93. </table>
94.
结算成功页面
这里是我们购买商品的记录,订单管理页面。
程序运行效果图如下所示4.11所示:
订单页面
展示实现代码:
1. package com.java1234.service.impl;
2.
3. import java.util.LinkedList;
4. import java.util.List;
5.
6. import javax.annotation.Resource;
7.
8. import org.springframework.stereotype.Service;
9.
10. import com.java1234.dao.BaseDAO;
11. import com.java1234.entity.Order;
12. import com.java1234.entity.PageBean;
13. import com.java1234.service.OrderService;
14. import com.java1234.util.StringUtil;
15.
16. @Service("orderService")
17. public class OrderServiceImpl implements OrderService{
18.
19. @Resource
20. private BaseDAO<Order> baseDAO;
21.
22. @Override
23. public void saveOrder(Order order) {
24. // TODO Auto-generated method stub
25. baseDAO.save(order);
26. }
27.
28. @Override
29. public List<Order> findOrder(Order s_order, PageBean pageBean) {
30. List<Object> param=new LinkedList<Object>();
31. StringBuffer hql=new StringBuffer("from Order");
32. if(s_order!=null){
33. if(s_order.getUser()!=null&&s_order.getUser().getId()!=0){
34. hql.append(" and user.id=?");
35. param.add(s_order.getUser().getId());
36. }
37. if(s_order.getUser()!=null&&StringUtil.isNotEmpty(s_order.getUser().getUserName())){
38. hql.append(" and user.userName like ?");
39. param.add("%"+s_order.getUser().getUserName()+"%");
40. }
41. if(StringUtil.isNotEmpty(s_order.getOrderNo())){
42. hql.append(" and orderNo like ?");
43. param.add("%"+s_order.getOrderNo()+"%");
44. }
45. }
46. hql.append(" order by createTime desc");
47. if(pageBean!=null){
48. return baseDAO.find(hql.toString().replaceFirst("and", "where"), param,pageBean);
49. }else{
50. return baseDAO.find(hql.toString().replaceFirst("and", "where"), param);
51. }
52. }
53.
54. @Override
55. public void updateOrderStatus(int status, String orderNo) {
56. // TODO Auto-generated method stub
57. List<Object> param=new LinkedList<Object>();
58. String hql="update Order set status=? where orderNo=?";
59. param.add(status);
60. param.add(orderNo);
61. baseDAO.executeHql(hql, param);
62. }
63.
64. @Override
65. public Long getOrderCount(Order s_order) {
66. List<Object> param=new LinkedList<Object>();
67. StringBuffer hql=new StringBuffer("select count(*) from Order");
68. if(s_order!=null){
69. if(s_order.getUser()!=null&&s_order.getUser().getId()!=0){
70. hql.append(" and user.id=?");
71. param.add(s_order.getUser().getId());
72. }
73. if(s_order.getUser()!=null&&StringUtil.isNotEmpty(s_order.getUser().getUserName())){
74. hql.append(" and user.userName like ?");
75. param.add("%"+s_order.getUser().getUserName()+"%");
76. }
77. if(StringUtil.isNotEmpty(s_order.getOrderNo())){
78. hql.append(" and orderNo like ?");
79. param.add("%"+s_order.getOrderNo()+"%");
80. }
81. }
82. return baseDAO.count(hql.toString().replaceFirst("and", "where"), param);
83. }
84.
85. @Override
86. public Order getOrderById(int id) {
87. return baseDAO.get(Order.class, id);
88. }
89.
90. }
keyboard_arrow_left上一篇 : 基于mfc实现的21点小游戏 基于Java和Sql Server 2012实现的高校成绩管理系统 : 下一篇keyboard_arrow_right