1、《电子商务系统分析与计》大作业2011-2012学年第1学期大作业题目:宠物商店电子商务系统分析与设计学生姓名:学号:专业:班级:指导老师:完成日期:2012年1月6日
2、目录一、系统开发背景1二、系统规划11、总体目标12、电子商务系统的可行性分析2三、系统分析51、业务流程分析52、数据流程分析6四、系统设计81、电子商务系统的总体架构设计8(1)系统功能模块8(2)电子商务系统基础设施的设计与选择9(3)电子商务系统总体功能及详细设计12(4)代码设计282、数据库设计34(1)系统ER图34(2)数据库表设计35(3)IPO设计(输入、处理、输出)39五、课程设计总结39参考文献4141一、系统开发背景随着
4、出家门,就可以买到所需商品的梦想。本课题是以项目宠物商店为基础,详细阐述了《宠物商店》软件设计、开发的全过程,并对技术难点做出分析,提出解决方法。使“宠物商店系统”最终具有数据维护、数据检索和数据处理的功能。前台采用基于B/S的结构,从而快捷方便的实现了系统的开发。此外,本系统将面向切面技术作为研究重点,重点在于分析系统的各种逻辑设计,并对面向切面(AOP)做出一定的阐述,并实现对AOP技术简单应用本系统主要功能模块有:l数据维护:实现新建、修改、删除、存储功能。l数据检索:实现按不同要求分类模糊查询,组合查询功能。l数据处理:根据查询方式不同,选择输出检索信息。
5、二、系统规划1、总体目标网上宠物商店面向消费者和商家,商家通过网上宠物商店展示并销售自己的商品,消费者通过网上宠物商店选购称心如意的商品。通过对网上宠物商店用户需求的分析把用户需求概括为如下几个部分:用户信息管理、用户购物管理、管理员商品管理、订单管理、报表查看、站内短信息等。2、电子商务系统的可行性分析lAOP技术可以说是OOP(ObjectOrientedProgramming,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就
6、是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻
12、Spring技术Spring是一个开源框架,它由RodJohnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。目的:解决企业应用开发的复杂性。功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。范围:任何Java应用。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。轻量——从大小与开销两方面而言Spring
13、都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻
19、模块有:管理员后台管理。②电子商务系统平台的选择与设计l主机类型数据库服务器:IntelPentium4CPU2.8GHZ512MRAM前台客户端:安装浏览器的PC机l网络类型:互联网l存贮器容量:数据库服务器:80G以上;客户端:无特殊要求l其他特殊设备:打印机:惠普LaserJetP1007(CC365A)l支撑软件1.操作系统:Windows2000以上2.数据库管理系统:MySQL5.03.应用服务器:Tomcat等支持Servlet&JSP的应用服务器(3)电子商务系统总体功能及详细设计①电子商务系统总体功能设计系统分
20、析与设计过程首先根据业务用例和业务活动图进行聚类,聚类活动在系统分析时开始。聚类活动是个连续的过程,需要不断地进行丰富和完善,需要按照面向对象设计的思想,划分出子系统类,并为类添加应该具有的方法或属性,以及这些方法或属性的可见性,这些可以通过设计类图来描述。系统设计的任务就是要依据系统分析文档资料,采用正确的方法,确定系统功能模块在计算机内应该用那些程序组成,它们之间用什么方式连接在一起,以构成一个最好的系统结构。l功能需求概述网上宠物商店面向消费者和商家,商家通过网上宠物商店展示并销售自己的商品,消费者通过网上宠物商店选购称心如意的商品。通过对网上宠物商店用户需求的分析把用户需
23、容等信息,也可以修改显示在首页中的商品中报表查看管理员可以查看出售状况统计,统计以图表的形式查看,可以导出到本地文件中站内短信息用户之间以及用户与客户服务联系的通道,类似与常用的电子邮件,但是只用于网上宠物商店内部。低l系统功能模块系统功能主要包括用户信息管理、在线购物、订单管理、站内信、查询商品信息、商品信息管理、首页信息管理和报表查看等。各个功能模块还有各自的子模块。系统的功能模块图如图所示。l系统逻辑结构应用程序分为四层,视图层、控制层、逻辑层和持久层,视图层与控制层之间的信息传递通过容器和DWRServlet处理,系统逻辑结构如图所示。
26、会检查注册必要的信息是否全部填写,检验各项长度是否和否,检验注册用户名是否已存在,密码和二次密码输入是否相同,当满足全部条件时,用户信息被注册到数据库中。(3)密码找回当用户忘记密码时,首先需要填写用户名,系统会判断用户名是否存在,根据用户名询问密码提示问题,用户填写密码提示问题,系统判断提示问题答案的正确性。如果正确,将令用户重新设置密码。设置完成之后,系统会对用户填写信息进行校验。校验通过之后更改数据库中相应记录。(4)修改个人密码。当用户重新设置密码时,进入帐户管理页面,填写新密码和二次密码,并可以对密码提示问题和答案进行更改。填写完成后系统会对填写的数据进行判断,并更爱
29、分析订单管理部分需求规格分析如表所示。订单功能需求规格表功能编号功能名称功能描述1新建订单用户确定购买选定商品的凭证。2用户订单列表查看自己已下订单,可对未处理订单进行修改、删除3管理员订单列表管理员可以查看接收到的订单列表,可以处理订单,修改订单状态、删除已完成订单等操作3.功能详述(1)新建订单用户查看购物车页面,确认购买的商品,点击下一步之后,令用户填写送货地址信息,如果用户在个人信息设置时设置了送货地址信息,则送货地址信息将采用默认的设置,否则由用户自行设置,之后,用户判断商品信息和送货地址是否正确,在确定正确无误
30、之后,提交订单,系统会向数据库中增加订单信息,和订单条目信息,修改对应商品的库存量。(2)用户订单列表用户登陆后点击查看订单菜单,系统会先检验用户是否登陆,如未登陆则提示用户未登陆,不做操作。如果已登陆则由用户选择查看的订单的状态,提交后查询订单,并显示在订单列表中。(3)管理员订单列表管理员登陆后点击查看订单菜单,系统会先检验用户是否登陆,如未登陆则提示用户未登陆,不做操作。如果已登陆则由管理员选择查看的订单的状态,提交后查询订单,并显示在订单列表中。管理员查看的是全部订单。l报表查看1.功能描述查看日报表、月报表,季度报表;报表导出到文件,报表信息包括:总销售
34、通过点击购买按钮购买商品。由于大多数情况下用户不会只选择一个商品,因此这时不跳转到购物车页面,而是在页面中给出提示:商品添加成功,并有跳转到购物车的链接。(2)用户收藏首先判断用户是否登陆,如果已经登陆,则判断用户是否已经收藏过该商品,如果用户没有收藏该商品则收藏成功,否则收藏失败。用户收藏的商品可以直接添加到购物车中,用户可以删除商品收藏。用户收藏的数据流图类似于添加到购物车(3)购物车信息管理购物车信息管理主要是对用户购物车的管理,用户可以修改购买商品的数量、删除已购买的商品、继续购买商品定,在确定购物时填写订单,进入订单管理模块。在用户修改商品数量时需要注意商品数量是否充
37、3)商品信息管理对商品信息的管理,包括添加、修改、删除、查询商品等。添加商品:当管理员添加商品信息时,首先需要填写商品的基本信息,包括商品类别图像等基本信息,点击添加之后,系统会判断所填写的必要信息为否为空,不为空则添加商品,向数据库中添加一条商品的信息。修改商品信息:可以修改商品的基本信息,当提交修改之后的商品时,系统会判断校验修改之后的商品信息。删除商品:管理员可以删除指定编号的商品,当确认删除后,直接从数据库中删除该商品的全部信息。包括库存信息等。修改商品库存信息:管理员可以修改商品的库存信息,首先确定要修改的库存商品的商品编号,填写库存值,点击修改之后,系统会判断填
38、写的信息基本类型是否为规定的整形,之后修改库存信息,修改对应数据库的记录。l总体模型类设计描述的是系统的模型类,即MVC架构中的Model层。其中:Message、User、Order、OrderItem、Comment、Product、Category、UserCollection、ProductsGrade对应数据库中的表,其属性如数据库表中字段相同;Cart、CartItem是购物车和购物车项,用于描述当前用户的购物信息。l系统控制层设计控制层的类图,Oper为操作的父类,所有操作都继承自该类。前台触发的远程调用调用该类子类的方法。该类为远程调用提供了获得Web上下文
39、的必要方法。ConstUtil是常量工具类,为了常量的统一管理和防止神秘字符串的出现而设计。Oper的子类共有四个,LoginHandler、ShoppingOper、UserOper、Dwr。用户在前台的许多操作是以登陆为前提的,LoginHandler就是处理需要登陆才可以实用的功能,具体的操作对应于LoginHandler不同的子类,如果没有登陆就进行该类的子类提供的操作,会抛出NoLoginException,该异常由前台Javascript捕获,并给出相应操作。LoginHandler的子类中使用到PageUtil接口。PageUtil是为分页设计的工具类,该类提供了分页的接
40、口。其子类可以根据不同的持久层命名并实现。本系统中只实现了IBatisPageUtil子类,如果有需要,可以实现其他子类。简单类图ShoppingOper是用户浏览商品是产生的操作,包括查看商品列表、搜索、查看商品信息等。UserOper是用户的一系列的操作,包括登陆、注册、找回密码等。该类中有些操作如修改密码、修改信息是需要登陆后才能进行的,这里进行单独控制,因为在访问页面时有了访问权限的控制。Dwr类提供了切换页面的方法,网站后台的页面切换使用该方法。在前台调用forward时,传递需要跳转的页面的URL,该方法返回申请的URL的处理结果。LoginHanler的子类包括:
43、thod;Importorg.springframework.aop.MethodBeforeAdvice;PublicclassLoggingInterceptorimplementsMethodBeforeAdvice{Publicvoidbefore(Methodmethod,Object[]args,Objecttarget)ThrowsThrowable{System.out.println("Loggingbefore!");System.out.println("method.getName():"+method.getName());System.o
44、ut.println("method.toString():"+method.toString());System.out.println("args.length:"+args.length);System.out.println("args[0].getClass().getName():"+args[0].getClass().getName());System.out.println("target.getClass().getName():"+target.getClass().getName());}}2.注册日志拦截器在Spring的配置文件中添加下面的代
45、码/register/adminlogger到这里,日志记录
47、拦截器的准备工作都已经做好了,在这个例子中,将Struts动作管理委托给Spring,通过在struts-config.xml动作映射中注册一个代理来实现。代理负责在Spring环境中查找Struts动作。由于动作在Spring的控制之下,所以它可以填充动作的JavaBean属性,并为应用诸如Spring的AOP拦截器之类的特性带来了可能。l表示层技术实现在本系统中,表示层所采用的技术框架是当前较流行的Struts框架,使用Struts技术框架,可以有效的将显示逻辑和业务逻辑相分离,达到分层的效果。如本系统中已登陆模块为例。publicclassLoginActionextend
48、sAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{RegisterActionFormrform=(RegisterActionForm)form;ApplicationContextapplication=WebApplicationContextUtils.getRequiredWebApplicationContext
49、(request.getSession().getServletContext());UserManageruserManager=(UserManager)application.getBean("userManager");//获取表单参数Useru=newUser();u.setUserName(rform.getUsername());u.setUserPassword(rform.getUserpassword());//如果存在该用户将用户保存在session中booleanisExist=userManager.checkU
51、ribute("userInfo",user);returnmapping.findForward("success");}else{Stringerrors="InvalidUsernameandPassword";request.setAttribute("errors",errors);returnmapping.findForward("loginFail");}}}l数据层的实现数据层的实现是采用Ibatis技术框架来实现的。Ibatis提供了一个简洁的框架,使用简单的XML描述文件将JavaBean,Map
52、实现本数据类型的包装类(String,Integer等)映射成JDBC的PreparedStatement。以下流描述了SQLMaps的高层生命周期:将一个对象作为参数(对象可以是JavaBean,Map实现和基本类型的包装类),参数对将为SQL修改语句和查询语句设定参数值。1.执行mappedstatement。这是SQLMaps最重要的步骤。SQLMap框架将创建一个PreparedStatement实例,用参数对象为PreparedStatement实例设定参数,执行PreparedStatement并从ResultSet中创建结果对象。2.执行SQL的更新数据语句时,返
54、p>
55、ltproperty="productName"column="productname"/>
56、"size"/>
57、"column="isnewarrival"/>insertintoproduct(productname,marketprice,memberprice,feature,size,other,searchkey,image,productdetails,isrecommend,isnewarrival,catid,typeid)values(#productName
58、#,#marketPrice#,#memberPrice#,#feature#,#size#,#other#,#searchKey#,#image#,#productDetails#,#isRecommend#,#isNewArrival#,#catId#,#typeId#)SELECTLAST_INSERT_ID()该配置文件为对应类Product的配置文件。添加商品的代码如下。publi
59、cclassProductDaoImplimplementsProductDao{publicintaddProduct(Productp){inti=0;try{i=(Integer)SqlMapClientInstance.getSqlMapClient().insert("addProduct",p);}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returni;}2、数据库设计(1)系统ER图
62、类型约束说明Product_IDInt型主键商品idSubCategory_IDInt型外键子类别idProduct_nameVarchar型非空商品名称Product_NumInt型非空商品库存Product_MarketPriceFloat型非空商品市场价格Product_PriceFloat型商品价格InHomeInt型非空是否在主页显示Order_countInt型商品成功出售次数订单信息表如表所示。Order字段类型约束说明
64、deVarchar型不为空收获地址邮编号码userDeleteInt型非空用户是否不再查看该订单adminDeleteInt型非空管理员是否不再查看该订单订单项信息表如表所示。OrderItem字段类型约束说明Order_IDInt外键订单idProduct_IDInt外键商品IDcountint非空商品数量Order_PriceFloat非空该种物品出售的总价格商品图片表如表所示。Product_Image字段类型约束说明Pr