《通用电子商务平台项目计算机专业毕业论文.doc》由会员分享,可在线阅读,更多相关《通用电子商务平台项目计算机专业毕业论文.doc(49页珍藏版)》请在三一办公上搜索。
1、郑州铁路职业技术学院毕业论文论文题目: 通用电子商务平台项目 作者姓名: 班级学号: 系 部: 软件学院/信息工程系 专 业: 计算机应用技术 指导教师: 李 乐 2013 年 05 月 25日摘要随着网络、通信和信息技术的发展,商业空间发展到全球规模,这使得任何一个商业组织都必须调整自己的运营模式和产业结构,以适应新的市场发展的需要。因此,任何一个企业要在21世纪生存,就必须迅速地改变传统的经营观念,跟上当今世界发展的最新潮流,加入到电子商务大潮中。 本系统采用B/S三层架构,主要实现前台交易系统和后台管理系统。前台交易系统主要包括用户管理、商品展示、书城快讯、我的订单、购物车管理,后台管理
2、系统主要包括用户管理、订单管理、类别管理、商品管理。系统主要采用了MVC软件架构思想,融入了Struts2、hibernate、JSP、Ajax、JQuery等典型WEB开发相关技术,同时采用MySql数据库和主流服务器Tomcat。系统的各个模块设计合理,尤其是业务方法利用接口理念,这样让系统很灵活,具备了良好的扩展性。 经过不断的改进和调试,系统逐渐完善,最终完成了一个标准化的电子商务交易平台。关键词:电子商务 j2EE JSP网上购物 目 录第1章引言51.1开发背景51.2开发目的和意义6第2章 可行性分析72.1经济可行性72.2技术可行性72.3操作可行性7第3章 需求分析与系统设
3、计83.1 系统界面操作说明83.2 系统流程图93.3 总体设计思想概述93.4 系统工程结构的搭建10第4章 数据库设计124.1 MySql数据库简介124.2 数据库设计要点124.3 数据表设计12第5章 系统的详细设计与实现165.1 数据库与POJO映射的实现165.2 用户模块的设计说明165.2.1 用户注册模块165.2.2 用户登录模块235.2.3 用户登出操作255.3 商品浏览模块的设计说明255.3.1 分类浏览模块265.3.2 中间浏览模块275.3.3 右侧新书热卖榜模块285.4 购物车模块的设计说明315.5 订单模块的设计说明365.5.1 订单列表生
4、成375.5.2 填写收件人地址375.5.3 订单确认39第6章 系统运行环境 426.1硬件环境:426.2软件环境:42第7章 系统测试运行437.1 单元测试437.2 集成测试447.3 系统有效性测试457.4 系统可行性测试45第8章 总结46参考文献48致 谢49第1章 引言1.1开发背景随着当今世界进入信息时代,Internet的飞速发展和在全球的普及给人类生活带来革命性的改变。Internet将传统意义上的物理空间转变成电子空间,把人们带入了一个网络社会中。网络时代的到来,带给人们的不只是快捷、方便,它带来的是划时代的进步。在网络大家族中,在线购物网站则是一个热点,它的发展
5、速度之快远远超过我们的想象,普及速度之快令人难以置信。我们完全有理由相信,全球性的网购热潮必将一浪高于一浪。进入21世纪以来,电子商务伴随着IT的成熟,逐渐发展壮大,成为网络经济的核心。在电子商务的发展过程中,人们逐渐意识到在线购物无地域界限、安全、方便快捷及其价格优势,在线购物的队伍也随之扩大。不断增长的强大需求正成为电子商务的发展动力,基础环境的成熟与需求欲望的增长将推动电子商务与商务网站的建设不断发展。新一轮的网上购物狂潮正在中国掀起,根据知名市场研究公司AC尼尔森的近期研究显示,63的中国网民曾经网上购物,伴随着中国互联网的快速增长,中国将会成为网上购物的巨大市场。AC尼尔森两年一次的
6、全球网上消费者观念调查,是同类调查规模最大的,覆盖欧洲、亚太区、北美、拉美以及南部非洲,受访对象超过两万人。调查表明,在中国,最受欢迎的网上商品是书籍,56的网上购物者选择了网上买书;影碟制品,比如DVD碟片、游戏等排在第二位,24的网上购物者会选择购买此类产品;音乐类和衣服鞋帽及服装配件等排在第三,分别有23的网上购物者会喜欢。和全球的研究数据作比较,我们会发现中国网上购书的比例最高,AC尼尔森3需求分析说明书认为这是由于中国网上购物人群由年轻的大学生或是刚刚毕业的年轻人为主所决定的。通用电子商务平台,从一定程度上讲它就是网上超市,也就是一种网上交易。“网”字意味着它具有信息时代的快捷方便等
7、特征。事实上网购的出现,给消费者的地位,消费观念带来了重要的变化。通用电子商务平台系统正是应这种变化而悄然崛起,并以惊人的速度发展着。通过通用电子商务平台,人们可以足不出户的寻找自己所需的物品,通过对不同虚拟商城的访问,“顾客”可以找出性价比最高的商品,自己有极大地选择空间,通过下订单,你可以很快得到自己想要的物品,这给顾客节省很多时间和精力,对于厂家来说,可以极大的降低库存风险,根据客户需要,按需生产和采购,大大的提高了效益。1.2开发目的和意义自从电子商务出现在人们的视野中,电子商务就在全世界范围内受到了格外的关注,并得到了迅速的发展。从实用角度看,目前电子商务网站的普遍存在是购买者难以找
8、到所希望购买的商品甚至用户在耗费很大的经历与时间后即使找到了自己想要的产品,最后却由于各种原因而放弃购买。很多报道指出,推销商们普遍对目前的网络行销感到失望,尽管如此,电子商务无疑是目前最好的在线商品展示的媒体和工具。然而,网上产品展示的目的不仅仅是展示产品,而更重要的是通过让客户更多地了解产品而提高产品的购买率。因此,电子商务目前所面临的挑战之一就是网站的设计,如何使得网页能够有效地展示自己的产品,同时方便用户的使用,使用户以愉悦的心情选购称心如意的商品。本系统的目的和意义就是应上述挑战而尝试为用户提供一个操作简单方便的网上交易系统。利用本系统,用户可以自由地浏览商品,注册成为网站会员,选择
9、商品加入自己的购物车,而后生成订单,实现网上购物。第2章 可行性分析2.1经济可行性传统的销售方式是商家把商品放在店铺里供顾客挑选,店铺的规模、位置等客观因素影响着商店的客流量,并且商品的存放与销售需要人力进行管理,雇员的工资、店面的租金等又增加了成本,顾客也不能迅速找到所需要的商品,而开一个网上书店只需要一个可以存放商品的仓库,比租一个店面能节省很多,也不需要太多的人力来管理,不会因为商店的面积影响客流量,客户足不出户就能买东西,并且很容易就能找到所需要的商品。2.2技术可行性网络应用基础设施完善,由于信息技术的发展,我国的计算机网络飞速发展,先后建成了中国公众多媒体通信网、China Ne
10、t、中国教育与科研计算机网络等组成了中国Internet主体,网络应用进入了企业与普通家庭,这为发展电子商务提供了基础设施。网络安全技术应用,包括加密算法、CA数字认证、数字签名等,为电子商务应用提供安全保证,它实现了网络传输数据的安全性、完整性以及交易双方的不可抵赖性,身份认证等。最后,就是网络技术的普及与掌握,如网络互联、网络安全技术、Web技术(如Html,XML,CGI等)、各种安全协议(Https,SET,SSL等)、网络数据库技术等,使我们有能力开发实现适合自己的电子商务系统。成为我们构建网站的直接技术支持。2.3操作可行性由于网站的操作是基于B/S浏览器的页面操作,简单明了,用户
11、无需学习,一般都能够很容易的知道如何操作。而管理员也无需具备专业知识,只需要对一些数据进行输入以及平时的日常维护就够了,使用方面此系统的开发是可行的。第3章 需求分析与系统设计3.1 系统界面操作说明界面名称操作功能说明购物系统主界面 1、用户登录 2、登录后的用户还可以退出登录。 3、按商品类别浏览 4、按商品类别查询 5、登录用户可以随时进行用户注册信息维护注册界面 1、用户输入注册信息 2、用户提交注册信息 3、用户重填注册信息 4、用户可以随时刷新附加验证码订单查询浏览界面 1、提供订单查询:按商品名称,交易日期,价格等。 2、提供订单删除。 3、提供订单修改。订单修改界面 1、提供订
12、单信息修改信息输入。 2、提供订单信息提交。 3、提供订单修改取消。商品查询浏览界面 1、提供最新商品信息推荐 2、提供商品分页分栏浏览 3、提供商品多样化按字段查询 4、提供把商品放入购物车的操作购物车界面 1、提供商品数量更新,默认是商品添加的次数。 2、提供商品删除。 3、提供商品结算操作。 4、提供登录操作。 5、提供最新商品推荐。登录界面 1、提供登录信息输入 2、提供登录信息提交 3、提供登录信息重填 4、提供附加验证码的刷新3.2 系统流程图一一图3.2 系统流程图3.3总体设计思想概述本系统是基于B/S架构下的多层结构应用系统。B/S(Browser/Server)结构即浏览器
13、和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。推荐的分层式结构一般分为三层,从下至上分别为:数据访问(持久)层、业务逻辑层(或称为领域层)、表示层。总的来说,采用分层结构的设计思想,可以让每个层由一组相关的类或组件构成
14、,共同完成特定的功能。层与层之间存在自上而下的依赖关系,上层组件会依赖下层组件的API,而下层组件则不依赖于上层组件。例如:表述层依赖于业务逻辑层,而业务逻辑层依赖于数据库层。并且每个层对对上层公开API,但具体的实现细节对外透明。当某一层发生变化,只要API不变,不会影响其他层的实现。在本系统中,使用开源的mysql数据库,持久层用到spring所集成的Hibernate技术,业务逻辑层用普通javabean实现,表述层运用基于struts的MVC设计模式(struts用来做C层,spring实现V层与C层的解耦以及C层与M层的解耦)。3.4 系统工程结构的搭建1)导入开发包a.struts
15、2开发包b.hibernate开发包+数据库驱动2)配置文件配置Filter控制器: web.xmlStruts2主配置文件: struts.xml用户管理配置: struts-user.xml产品浏览配置: struts-main.xml购物车配置: struts-cart.xml订单配置: struts-order.xmlHibernate主配置: hibernate.cfg.xml3)src结构控制层: org.tarena.dang.action-用户管理模块控制层:org.tarena.dang.action.user-购物车管理模块控制层:org.tarena.dang.actio
16、n.cart-产品浏览管理模块控制层:org.tarena.dang.action.main-订单管理模块控制层:org.tarena.dang.action.order业务层: org.tarena.dang.service数据访问层: org.tarena.dang.dao实体类+hbm.xml: org.tarena.dang.pojo工具类: org.tarena.dang.util自定义拦截器: org.tarena.dang.interceptor4)WebRoot结构/css: 样式文件/images: 页面图片文件/js: js脚本文件/user: 用户管理模块的JSP/mai
17、n: 产品浏览模块的JSP/order: 订单模块的JSP/common: 共通JSP,页眉,页脚等/productImages: 产品图片第4章 数据库设计4.1 MySql数据库的简介 MySQL是一个小型关系型数据库管理系统,也是最受欢迎的开源SQL数据库管理系统,它由MySQL AB开发、发布和支持。 MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商标。 MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。从计算机可以很好的处理大量数据以来,数据库管理系统就
18、在计算机处理和独立应用程序或其他部分应用程序中扮演着一个重要的角色。4.2 数据库设计要点数据是一个系统中的最终操作结果,因此数据库的设计必须合理规范。数据库的设计是系统的开发前提,一个数据库设计的是否合理,直接关联着整个系统的开发,一旦数据库设计出现问题,那么将会导致这个系统的开发受到严重阻碍。另外,数据操纵的安全性也要加以控制,防止数据外泄造成严重后果。4.3 数据表设计1) d_user: 用户信息表负责存储用户的注册信息,与登录,注册功能相关字段名称类型约束描述idint(12)pk用户IDemailvarchar(50)not null用户邮箱passwordvarchar(50)n
19、ot null密码nicknamevarchar(50)not null昵称user_integralint(12)not null,default 0积分is_email_verifychar(3)邮箱验证状态last_login_timebigintdefault null最后登录时间last_login_ipvarchar(15)default null最后登录IPemail_verify_codevarchar(50)default null邮箱认证码2) d_receive_address: 用户收货地址信息表负责存储用户使用过的收货地址信息,与填写送货地址功能相关字段名称类型约束描
20、述idint(12)PK数据库唯一标识user_idint(10)not null用户IDreceive_namevarchar(100)not null收货人姓名full_addressvarchar(100)not null收货人地址postal_codevarchar(8)not null邮编mobilevarchar(20)not null 收货人电话phonevarchar(20)not null收货人手机3) d_product: 产品信息表负责存储各种类型的产品共通属性信息字段名称类型约束描述idint(12)pk,not null商品编号prduct_namevarchar(1
21、00)not null商品名add_timebigint(20)defaultt nul上架时间fixed_pricedoublenot null市场价has_deletedint(1)not null是否下架fix_price doublenot null当当价keywordsvarchar(200)defaultt nul关键字product_picvarchar(200)default nul商品图片名称descriptionvarchar(100)default null描述4) d_book: 图书信息表负责存储图书产品的特有信息字段名称类型约束描述idint(12)PK数据库唯一标
22、识IDauthorvarchar(200)not null图书作者publishingvarchar(200)not null出版社publish_timebigintnot null出版日期which_edtionvarchar(15)default null哪个版本word_numbervarchar(15)default null字数total_pagevarchar(15)default null页数print_timeInt(20)defaul null 印刷时间ISBN varchar(25)default nullISBNcategorytextnot null目录预览autho
23、r_summarytextnot null 作者简介5) d_category: 产品类别信息表负责存储产品的类别信息,与类别显示功能有关字段名称类型约束描述idintegerPK类别IDen_namevarchar(200)not null英文名字namevarchar(200)not null中文名字descriptionvarchar(200)null 产品的描述parent_idint(10)not null父类ID6) d_category_product: 类别和产品对应关系表负责指定哪种类别包含哪些商品,与类别浏览功能有关字段名称类型约束描述idint(12)auto_incre
24、ment /PK数据库唯一标识IDproduct_idint(10)rnot null产品IDcat_idint(10)not null商品分类ID7) d_order: 订单信息表负责存储订单的基本信息.字段名称类型约束描述idint(12)PK订单号user_idint(10)not null用户IDstatusint(10)not null发货状态order_timebigint(20)not null下单时间order_descvarchar(100)not null订单描述total_pricedoublenot null订单总金额receive_namevarchar(100)no
25、t null收货人姓名full_addressvarchar(100)not null收货人地址postal_codevarchar(8)not null邮编mobilevarchar(20)not null 收货人电话phonevarchar(20)not null收货人手机8) d_item: 订单明细信息表负责存储了订单包含的哪些商品,单价,数量等信息字段名称类型约束描述idint(12)PK订单号orders_idint(10)auto_increment / PK货物IDproduct_idint(10)not null产品IDproduct_namevarchar(100)not
26、null产品名字dang_pricedoublenot null热销价product_numberint(10)not null产品数量amountdoublenot null产品价格第5章 系统的详细设计实现5.1数据库与POJO映射的实现Hibernate可以通过一个XML的mapping文件把一个POJO(Plain old java object)和数据库中的表对应起来,在这个XML文件(一般命名为*.hbm.xml)中,我们可以配置好Object和数据库中表的映射关系,然后把这个mapping加入到hibernate.cfg.xml中,这样Hibernate在启动时就可以加载这些ma
27、pping,并可以根据配置文件对对象实现自动的加载,并且可以对这些Object实习自动的维护。由于Spring提供了对Hibernate的集成,所以我们可以不配置hibernate.cfg.xml文件,而通过在applicationContext.xml文件中进行相关配置来达到同样的目的。5.2用户模块的设计说明用户模块主要实现了用户注册、登入/登出、修改信息、查看订单等功能,用户模块结构功能如图5.2所示。 用户模块用户注册用户登录用户信息修改用户登出图 5.2 用户模块功能结构图5.2.1 用户注册模块 系统采用了JQuery(jquery-1.4.min.js)进行表单数据基本验证,注册
28、页面register_form.jsp表单中的数据只要有一项不符合验证规则的数据,则表单提交按钮失效。为了保证用户注册的邮箱名在数据库中是唯一的,使用了Ajax技术向服务器发送异步请求,如果数据库中已经存在,则在页面上提示用户“此邮箱已经被占用”的错误消息,用户注册流程如图5.3所示。 图 5.3 注册流程图图 5.4 邮箱惟一验证效果界面为了防止机器人捣乱胡乱注册,系统注册采用了图片验证码认证。验证码图片是用Java awt 包中的Color、Graphics、BufferedImage等类画出来的。服务器只要一生成验证码就把它保存在session中,用于提交表单时与用户输入的验证码比较,如
29、果不一致,提示用户“验证码出错”,这时用户可以点击后面链接获取新的验证码,重新输入。点击后面的链接实际上是向服务器的CheckCodeAction发送请求,重新生成验证码。但是为了让浏览器能够每次执行这个请求,必须让请求地址产生变化,否则浏览器默认是已经请求过的地址,不会重新请求一遍。方法如下:onclick=document.getElementById(imgVcode).src=./checkcode.do?+(new Date().getTime();图片验证码生成代码如下(ValiImageAction):public class ValiImageAction extends Ac
30、tionSupport implements SessionAware private Map session;/验证码private StringBuffer number;/ 输入流属性private InputStream input;/ get和set方法public InputStream getInput() return input;public void setInput(InputStream input) this.input = input;public String execute() throws Exception byte image = this.randomI
31、mage();session.put(valicode,this.number.toString();this.input = new ByteArrayInputStream(image);return SUCCESS;private static int WIDTH=100;/验证码的宽度private static int HEIGHT=40;/验证码的高度private static int NUM=4;/验证码位数/验证码字符private static char seq=A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,
32、2, 3,4,5,6,7,8,9;private byte randomImage()Random r = new Random();/图片的内存映像BufferedImage image= new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);/获得画笔对象Graphics g=image.getGraphics();g.setColor(randomColor(r);g.fillRect(0,0,WIDTH,HEIGHT);g.setColor(new Color(0,0,0);/用于存储随机生成的验证码this.number
33、 = new StringBuffer();/绘制验证码for(int i=0;iNUM;i+)g.setColor(randomColor(r);int h=(int)(HEIGHT*60/100)*r.nextDouble()+(HEIGHT*30/100);g.setFont(new Font(null,Font.BOLD|Font.ITALIC,h);String ch=String.valueOf(seqr.nextInt(seq.length);number.append(ch);g.drawString(ch, i*WIDTH/NUM*90/100, h);System.out.
34、println(验证码:+number);/绘制干扰线for(int i=0;i=12;i+)g.setColor(randomColor(r);g.drawLine(r.nextInt(WIDTH), r.nextInt(HEIGHT), r.nextInt(WIDTH), r.nextInt(HEIGHT);ByteArrayOutputStream os=new ByteArrayOutputStream();JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(os);/把BufferedImage对象中的图像信息编码后/向创建该对象
35、(encoder)时指定的输出流输出tryencoder.encode(image);return os.toByteArray();catch(Exception e)e.printStackTrace();throw new RuntimeException(e);private Color randomColor(Random r)return new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255);public void setSession(Map arg0) this.session=arg0;密码采用了加密算法,工具类代码如下
36、:public class EncryptUtil private static String encrypt(String str,String algorithm) throws Exception MessageDigest md = MessageDigest.getInstance(algorithm);byte bts = md.digest(str.getBytes();/将bts转换成字符串BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(bts);public static String enc
37、ryptMD5(String s)try String retVal = encrypt(s,MD5);return retVal; catch (Exception e) e.printStackTrace();return ;public static String encryptSHA(String s)try String retVal = encrypt(s,SHA);return retVal; catch (Exception e) e.printStackTrace();return ; 如果register_form.jsp页面表单中全部数据都通过验证,点击提交按钮将转到注册
38、第二步,也就是邮箱验证页面verify_form.jsp,同时把上一步产生的验证码写入数据库中。系统没有联网模块,这里只把验证码输出在页面上,方便测试。邮箱验证码是采用JDK中的UUID类随机生成的字符串再加上用户的ID作为后缀生成。如果用户输入错误或者不输验证码,则会产生相应的错误提示信息。图 5.5 邮箱验证界面邮箱验证码输入正确,点击完成按钮,则会跳转到register_ok.jsp页面,提示用户注册成功。系统的CheckVerifyCodeAction会记录下你的登陆时间和登陆IP,写入数据库的d_user表,并把当前这个user对象放入session中,主要用来判别用户是否登陆,进而
39、给予权限进行相关操作。这时你可以进行主页访问或者查看你的基本信息。图 5.6 注册成功页面5.2.2 用户登录 系统登录界面(login_form.jsp)需要输入用户名和密码,如果密码或者邮箱不对,则提示用户相关错误信息。如果用户上次注册的时候没有进行邮箱验证,则会跳转到邮箱验证页面(verify_form.jsp)。只要用户成功登录,则把当前这个用户对象加入到session当中,同时记录下当前用户的登陆时间和登陆IP。系统制定了一个积分规则,积分对应了d_user表中的user_integral字段。用户积分有三个来源:用户注册送50积分,每超过3小时登录一次送2积分,购买商品利用订单总价
40、/10进行四舍五入为用户积累积分。图 5.8 用户登录界面 用户成功登录后,在主页面上则会显示用户的昵称,同时后边只显示登出按钮。如果用户没有登录,后边则出现登入/注册按钮,隐藏登出按钮。这主要是利用了JSTL标签来控制,我们只要判断session中对应的user是否为空,为空不显示登出按钮。图 5.9 成功登录后页面显示登录界面核心代码:public class UserServiceImpl implements UserService public void register(User user) /将密码加密处理String pwd = EncryptUtil.encryptMD5(u
41、ser.getPassword();user.setPassword(pwd);/给用户积分设置初始值user.setIsEmailVerify(N);/邮箱是否通过验证/生成邮箱验证码String code = VerifyCodeUtil.generatorCode();user.setEmailVerifyCode(code);user.setLastLoginTime(System.currentTimeMillis();user.setUserIntegral(Constant.NORMAL);/用户等级UserDAO userDao = new HibernateUserDAO()
42、;userDao.save(user);EmailUtil.sendEmail(code, user.getEmail();public boolean checkEmail(String email) boolean ok = false;UserDAO userDAO = new HibernateUserDAO();User user = userDAO.findByEmail(email);if(user!=null)ok=false;elseok=true;return ok;5.2.3 用户登出用户登出主要是把session中当前的user属性设置为空,因为之前用户登录成功的时候已经把用户user放入了session中。只要session中的user属性为空,用户则相当于退出了系统,失去很多权限进行相关操作。5.3 商品浏览模块的设计说明该模块主要包含分类浏览、编辑推荐、热销图书、最新上架图书、新书热卖榜等功能