一个基于web技术的在线交易系统.docx
《一个基于web技术的在线交易系统.docx》由会员分享,可在线阅读,更多相关《一个基于web技术的在线交易系统.docx(32页珍藏版)》请在冰豆网上搜索。
一个基于web技术的在线交易系统
摘 要
随着信息高速公路的建立,Internet的普及,网络技术的迅猛发展,人类社会已经进入了一个信息化社会。
电子商务指利用简单、快捷、低成本的电子通讯方式,买卖双方通过网络进行各种商贸活动的一种商业交易模式。
随着互联网的发展,以及人们消费观念和生活方式的改变,这种新型的商业模式逐渐融入了人们的生活中。
通过企业的门户网站,人们可以足不出户的寻找自己所需的物品,通过对不同虚拟商城的访问,“顾客”可以找出性价比最高的商品,自己有极大地选择空间;通过下订单,你可以很快得到自己想要的物品,这给顾客节省很多时间和精力;对于厂家来说,可以极大地降低库存风险,可根据客户需要,按需采购和生产,大大地提高了效益。
本毕业设计的内容是设计并且实现一个基于web技术的在线交易系统。
系统主要以j2EE作为开发基础,使用了struts+servlet+jsp+mysql等多种协议或技术,用myeclipse作为开发工具。
基本实现了网上交易系统应有的主要功能模块,包括:
管理员的登录,管理和维护;用户注册、登录、注销,个人信息的查询、修改;商品管理,购物车管理,订单管理。
该系统界面简单、操作方便,容易维护。
绪论
综观电子商务的历史,随着internet/Intranet应用越来越广,迅速扩展从个人到集团,从企业到科技、教育、商业,几乎覆盖了所有的领域。
商品和服务的地理界限被打破,各种公司无论大小,都在忙于建立新的商业解决方案,来适应新的交易方式。
internet/Intranet固有的一些特性,如方便获得,实时的信息,低廉的成本使得它成为商务解决方案的一种本质的驱动力。
而且,在下面这些颇具竞争力的优势下,开发了本系统来实现和完成电子化的商业交易过程。
第1章系统开发背景及意义
1.1系统开发背景
近几年来,随着人们思想觉悟以及生活水平的提高,上网已是人们生活中不可缺少的部分,计算机可谓是现代科技发展的产物,如今的计算机已经走进了千家万户,对于大多数人来,足不出户的在自己的计算机上查看自己喜欢的商品,并购买商品已经很普遍了。
适当的上网可以增加人们的知识面还可以提高生活的品味,更有利于人们身心健康的发展,有利于开阔人们的思维模式,还有利于培养人们各方面的能力。
也正是因为这样,网上购物得以飞速发展,遍及到世界各个层次。
由于Internet提供了双向的交互通信,网上购物不仅成为了可能,而且成为了热门。
由于这种模式节省了客户和企业双方的时间、空间。
大大提高了交易效率,节省了各类不必要的开支。
因而,这类模式得到了人们的认同,获得了迅速的发展。
1.2系统开发意义
现代人的生活离不开网络,电子商务日趋发展,老百姓感受最深刻的就是“买东西方便了”。
而与普通大众接触最“亲密”的,首当其冲就是上网购物了。
关于这个购物网站是为了更好的适应现在互联网上交易日益增加而设计开发的。
接下来我们来看看网购给我们生活带来的便利:
1.省脚力。
不用亲自逛街,在电脑或者手机前轻松浏览商品。
逛街购物的我们都应该心有体会,一整天在街上瞎逛的痛苦,还要浪费大量时间,特别想找某一特定商品的时候,找一整天都找不着。
在网上则完美地解决了这一难题,只要想买什么商品,一键搜索!
2.支付轻松。
不用自备现金,使用网银一键支付。
收到假钱是消费者和商家最怕的,现实生活中的交易行为市场发生。
然而在网上进行购物,大家终于不用担心了。
3.范围广。
商品种类遍布世界各地,可不受地域限制购买。
每一个地方都有其特产,不论是吃的还是用的,如果想拥有不一定要亲自去买,网上搜搜特产琳琅满目,只需支付相应运费,就可以送到家门。
有了网络之后,秀才不出门尽知天下事,但有了网购之后,就是闺女不出门,尽拥天下宝!
4.省力又惊喜。
有专门快递员送货上门。
网购过的朋友应该也亲身感受过收快递的愉悦心情吧,那一种惊喜的滋味是现实中买东西所感受不到的,好比有人给你送礼物般惊喜。
责任明确。
买卖双方不再是口头交易,而是有根有据有文字记录,协议中责任明确,减少了纠纷的概率。
5.不受买卖双方情绪影响。
不少消费者反映到去哪个商场或者哪间店铺买东西,店家态度恶劣,或者嫌贫爱富说话伤人,卖家则抱怨消费者看完不买存心戏弄的现象。
然而网购有效地改变了这种现状,买卖双方除了需要咨询时候不必打交道可直接购买,因为每一件商品下都有图片展示、商品的规格大小、材料、功能、尺码、卖家的话等等,因为不说明的话,后果是卖家负责的。
本系统的目的和意义就是应上述挑战而尝试为用户提供一个操作简单方便的网上交易系统。
利用本系统,用户可以自由地浏览商品,注册成为网站会员,选择商品加入自己的购物车,而后生成订单,实现网上购物。
第2章网上购物系统需求分析
2.1现状分析
由于购物网站的开发已有一定的时期,而且有很多成功的实例,技术基础也已经非常雄厚,因而技术上的准备应该不成问题。
2.2系统功能需求
2.2.1 系统主要模块
1,模拟当当网主要的功能
2,在本系统中主要阐述用户管理、购物车管理、订单管理、产品展示四个模块。
(1)购物车管理:
实现添加商品、取消一个商品、数量修改、清空购物车功能。
(2)创建订单管理:
实现提交订单、删除订单、查询订单功能。
(3)产品展示:
实现产品列表、产品明细功能。
(4)用户管理:
实现用户注册、用户信息修改、用户删除、用户查询功能。
除了实现上述功能以外,在购物系统还应该具有友好、简洁的界面,安全性要高,稳定性要强。
2.2.2 系统的3个角色:
(1)注册用户
(2)管理员
(3)普通的网站浏览者(即游客)
2.2.3 系统角色的功能
(1)普通用户:
网站的普通浏览者(即游客)只能浏览商品。
(2)注册用户:
普通浏览者只要注册为网站用户后,获得自己的帐号,设置自己的密码就具有以下功能:
登录,登出,向购物车中添加商品,生成并提交订单。
添加或修改个人明细资料。
(3)管理员:
拥有注册用户的所有功能,还可以对用户进行管理,包括添加新用户、修改用户密码、删除用户。
2.3系统开发环境配置
选择微软平台作为主导,一方面考虑目前微软的飞速发展,越来越多的企业在规划内部网络时,将微软平台作为首选方案;令一方面从技术角度来讲,微软平台上的应用无论是在开发上,还是在软件的部署上都是非常容易,而且性能优越。
具体如下:
1.开发工具:
MyEclipse8.0
2.数据库:
MySQL5.5
3.服务器:
ApacheTomcat6.0.35
4.运行环境:
安装JDK1.6支持Java运行。
5.技术:
前台网页的设计采用JSP技术制作。
负责响应用户对业务逻辑的请求并根据用户的请求行为,决定将哪个JSP页面发送给客户由Struts2处理,servlet则负责数据的处理。
2.4系统开发工具
本系统是基于JSP+Servlet+Struts2++MySQL5.5数据库技术实现的。
2.4.1开发语言—java
JSP页面由HTML代码和嵌入其中的Java代码所组成。
JavaServlet是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。
JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的等特点。
JSP的技术的优势:
一次编写,到处运行。
在这一点上Java比PHP更出色,除了系统之外,代码不需要做任何更改。
系统的多平台支持。
基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。
相比ASP/PHP的局限性是显而易见的。
JSP技术是用Java语言作为脚本语言的。
Java语言是成熟的、强大的、易扩充的编程语言。
高效性与安全性。
JSP在执行前先被编译成字节码,字节码由Java虚拟机解释执行,比源码解释效率高。
可维护性。
由于JSP技术是一种开放的、跨平台的结构,因此Web服务器、平台及其他组件能很容易升级或切换,且不会影响JSP基本的应用程序。
多样化和功能强大的开发工具支持。
Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。
2.4.2数据库—MySQL5.5
MySQL是一个精巧的SQL数据库管理系统,虽然它不是开放源代码的产品,但在某些情况下你可以自由使用。
由于它的强大功能、灵活性、丰富的应用编程接口(API)以及精巧的系统结构,受到了广大自由软件爱好者甚至是商业软件用户的青睐,特别是与Apache和PHP/PERL结合,为建立基于数据库的动态网站提供了强大动力。
SQL是一种标准化的语言,它使得存储、更新和存取信息更容易。
例如,你能用SQL语言为一个网站检索产品信息及存储顾客信息,同时MySQL也足够快和灵活以允许你存储记录文件和图像。
第3章网上购物系统设计
3.1数据库设计
在对网上购物系统数据库部分进行设计的过程中,通过对系统功能进行需求分析得到系统的基本信息表,绘制系统业务流程图和系统数据流程图,分析得到数据字典;在概率结构设计阶段通过对需求阶段得到的用户需求抽象得到数据库关系模型的E-R图;在逻辑结构设计阶段得到数据库的关系模式并绘制信息表。
详细设计过程如下介绍。
3.1.1数据库需求分析
需求分析是设计数据库的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。
3.1.1.1系统基本信息
综合以上分析,要实现上面的所有功能模块,数据库共要设计八个表,它们分别是:
a.d_user表存储用户注册的信息.
b.d_receive_address表存储用户使用过的收货地址.
c.d_category表存储产品类别信息
d.d_product表存储各种类型产品的共有信息
e.d_book表存储图书产品的特有信息
f.d_category_product表存储类别和产品之间的包含关系
g.d_order表存储订单信息表.
h.d_item表存储订单明细表.
3.1.1.2系统层次图
根据所要实现的功能和用户权限的设置。
系统总体的层次图如下图3-1所示:
图2-1系统层次图
3.1.2总体设计思想概述
本系统是基于B/S架构下的多层结构应用系统。
B/S(Browser/Server)结构即浏览器和服务器结构。
在这种结构下,用户工作界面是通过WWW浏览器来实现。
这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。
在软件体系架构设计中,分层式结构是一般分为三层,从下至上分别为:
数据访问层、业务逻辑层、表示层。
总的来说,采用分层结构的设计思想,可以让每个层由一组相关的类或组件构成,共同完成特定的功能。
层与层之间存在自上而下的依赖关系,上层组件会依赖下层组件的API,而下层组件则不依赖于上层组件。
例如:
表述层依赖于业务逻辑层,而业务逻辑层依赖于数据库层。
并且每个层对对上层公开API,但具体的实现细节对外透明。
当某一层发生变化,只要API不变,不会影响其他层的实现。
在本系统中,使用开源的mysql数据库,表示层用到jsp技术显示动态页面,业务逻辑层用普通servlet实现,控制层运用基于struts2的action控制。
3.2数据库设计
3.2.1数据库逻辑结构设计
对于关系型数据库,数据库的概念结构设计完毕后,要把E-R图描述的概念数据模型转换为等价的关系模式极其约束。
逻辑设计的基本工作主要如下步骤。
3.2.1.1关系模式设计
该设计以概念结构设计中的E-R图为主要依据,数据库表的关系模式如下
图3系统数据库表的E-R图
3.2.1.2完整性设计
完整性要求用于描述各种信息之间的制约关系,以及关联关系,各个数据项的取值范围以及各个数据项是否可以取值。
根据实际需要,采取一定的手段来满足用户的完整性需求。
域完整性约束要求属性值必须在域中。
实体完整性约束要求主键必须唯一且不能为空。
如用户信息表中的用户名设置为主键,并且要求唯一且不能为空。
3.2.1.3模式优化
本次采用3NF为规范准则来分解关系。
将一个关系分解为两个或者多个关系,以满足规范,从而避免产生插入异常、删除异常、更新异常。
3.2.3数据库表设计
用户信息表如图3-5所示
图3-5用户信息d_user表
产品信息表如图3-6所示
图3-6产品信息d_product表
类别信息表如图3-7所示
图3-7类别信息d_category表
具体产品与产品共性关系信息表如图3-9所示
图3-9具体产品与产品共性关系信息d_category_product表
具体产品信息表如图3-8所示
图3-8具体产品信息d_book表
订单信息表如图3-10所示
图3-10订单d_order信息表
条款信息表如图3-11所示
图3-11条款信息d_item表
用户接受产品信息表如图3-12所示
图3-12用户接受产品信息d_receive_address表
3.2.4系统结构设计
3.2.4.1页面设计
本系统主要是一个由多个相互关联的网页组成有机整体的网站,这些网页的组成部分可以分为两大类:
素材和功能模块。
其中素材包括图片、动画、图像等,主要用于美化网页和做广告宣传,其特点是素材内容本身是静态的,可以以文件的形式存放。
而功能模块则体现了网站所具有的功能,这些功能包括:
(1)导航栏,即用于指向网站特定内容的链接的集合。
比如,网站首页顶部的页面导航栏,它指示了网站的主要组成部分,通过链接跳转的方式,用户可以很方便地从导航栏转到感兴趣的内容网页。
导航栏的特点是具有树状层次结构的链接的集合,链接的属性具有相似性,即都指向某个特定的页面。
(2)商品信息。
这是购物网站所含数据的主要组成部分。
它的特点是商品种类繁多,不同种类的商品往往具有不同的属性或技术指标,这就需要将商品信息按某种规则分门别类的存放,而不是将信息统统存放在一起。
(3)购物车列表信息。
从session中取出原有购物车的所有产品信息列成表单显示在页面上,并对产品有增、删、改的操作,最后确认生成订单表单。
3.2.4.2MVC模式设计(Jsp+Servlet+Struts2)
MVC(ModelViewController)是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。
使用MVC应用程序被分成三个核心部件:
模型、视图、控制器。
它们各自处理自己的任务。
视图是用户看到并与之交互的界面。
如何处理应用程序的界面变得越来越有挑战性。
MVC一个大的好处是它能为你的应用程序处理很多不同的视图。
JSP页面处于表现层,也就是视力(View即V)的角色。
模型表示企业数据和业务规则。
在MVC的三个部件中,模型拥有最多的处理任务。
由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
Servlet则负责数据的处理,也就是模型(Model即M)的角色。
控制器接受用户的输入并调用模型和视图去完成用户的需求。
所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。
它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。
Servlet用来处理请求的事务,Struts2充当控制器(Controller即C)的角色,负责响应用户对业务逻辑的请求并根据用户的请求行为,决定将哪个JSP页面发送给客户。
Struts2处理用户请求,处理用户请求时回调业务控制器的execute方法,该方法先获取用户请求参数,然后执行某种数据库操作,既可以将数据保存到数据库,也可以从数据库中检索信息,该方法的返回值将决定了Struts2将怎样的视图资源呈现给用户。
第4章购物系统实现
4.1此项目的工程结构
表现层:
JSP页面涉及EL标签,OGNL表达式,jQuery,Ajax
控制层:
使用Struts2控制器,涉及struts.xml配置
业务层:
Action组件
数据访问层:
DAO组件
src源码包结构如下:
com.tarena.dang.action
com.tarena.dang.action.user用户模块Action
com.tarena.dang.action.order订单模块Action
com.tarena.dang.action.main产品浏览模块Action
com.tarena.dang.action.cart购物车Action
com.tarena.dang.dao接口
com.tarena.dang.dao.impl实现类
com.tarena.dang.entity实体类
com.tarena.dang.util工具类
com.tarena.dang.interceptor拦截器
Struts配置文件结构如下:
struts.xml(主配置)
--struts-main.xml(产品浏览模块配置)
--struts-order.xml(订单模块配置)
--struts-user.xml(用户管理模块配置)
--struts-cart.xml(购物车模块配置)
WebRoot目录结构如下:
/WebRoot/main/产品浏览JSP目录
/WebRoot/cart/购物车JSP目录
/WebRoot/order/订单JSP目录
/WebRoot/user/用户管理JSP目录
/WebRoot/common/页眉页脚目录
/WebRoot/css/样式文件目录
/WebRoot/js/脚本文件目录
/WebRoot/images/JSP中图片目录
/WebRoot/productImages/产品图片目录
4.2系统各部分的实现方法
从系统功能模块划分中可以看出,系统总体上有两个功能模块组成。
各模块虽然是独立的,但又统一于同一数据库中。
在介绍系统各模块的实现方法之前,首先介绍系统与数据库的连接方式
1.首先要将mysql的驱动包放在此项目WebRoot/WEB-INF/lib目录下
2.在项目的com.tarena.dang.util包下面增加数据库连接工具类:
DBUtil,类里面添加的内容如下:
4.1.2访问数据库的DAO
我们可以使用DAO将从数据库中查找到的数据封装打包成对象传到控制类。
连接数据库的DAO——Conn。
通过JSP页面调用Controll类,控制类调用DAO类操作数据库,可以实现对数据库的连接,数据表的添加、删除、更新等操作,具体实现如下代码:
4.1.3用户登录模块页面
用户登录页面比较简单,为防止用户登录的操作错误,应设置错误处理页面,在登录操作过程中,一般发生的错误有:
用户输入了错误的用户名或密码、用户直接单击了登录按钮,对上述情况的判断就要通过javaScript文件来实现。
用户登录界面如图4-1所示:
图4-1用户登录面
过滤用户输入错误的用户名或密码,所用的js代码如下:
functioncheckNull(){
varname=$.trim($("#loginName").val());//获取用户输入的用户名,去除空格
varpwd=$.trim($("#password").val());//获取密码框中输入的密码
if(name==''){
alert("登录名不能为空!
");
$("#loginName").focus();
returnfalse;
}elseif(pwd==''){
alert("密码不能为空!
");
$("#password").focus();
returnfalse;}});
4.1.4用户注册模块页面
用户注册过程中会验证用户所填写的是否为有效信息,用户注册成功之后,用户有一定的权限,用户登录之后可以将要买的商品放进购物车里,若未登录只有浏览商品的权限,用户注册也是一种安全保障。
用户注册页面如下:
对注册页面的每个文本框的验证用到js技术,对于Email和验证码的验证使用到了AJAX技术异步刷新(用到回调函数),具体代码如下:
------------------------生成验证码的主要代码----------------------
/**
*此类是生成验证码,<码,图片>
*@authoracer
*有生成验证码与生成随机颜色的方法<此类内部用>
*/
publicfinalclassImageUtil{
privatestaticfinalString[]chars={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H"};
privatestaticfinalintSIZE=4;
privatestaticfinalintLINES=2;
privatestaticfinalintWIDTH=80;
privatestaticfinalintHEIGHT=30;
privatestaticfinalintFONT_SIZE=30;
publicstaticMapcreateImage(){//建图片
StringBuffersb=newStringBuffer();
BufferedImageimage=newBufferedImage(WIDTH,HEIGHT,
BufferedImage.TYPE_INT_RGB);//生成图片
Graphicsgraphic=image.getGraphics();//获取画笔
graphic.setColor(Color.LIGHT_GRAY);//Color.LIGHT_GRAY
graphic.fillRect(0,0,WIDTH,HEIGHT);//画矩形
Randomran=newRandom();
//画随机字符
for(inti=1;i<=SIZE;i++){//获取验证码
intr=ran.nextInt(chars.length);
graphic.setColor(getRandomColor());
graphic.setFont(newFont(null,Font.BOLD+Font.ITALIC,FONT_SIZE));
//将此图形上下文的字体设置为指定字体。
graphic.drawString(chars[r],(i-1)*WIDTH/SIZE,HEIGHT/2+10);
//使用此图形上下文的当前字体和颜色绘制由指定string给定的文本。
sb.append(chars[r]);//字符串的追加,,将字符保存,存入Session
}
//画干扰线
for(inti=1;i<=LINES;