SichuanTopVocationalCollegeofInformationTechnology课课程程设设计计报报告告姓名:______________学号:______________系别:______________专业:______________年级:______________班级:______________指导教师:______________2015年月日至2015年月日第2页(共49页)所在单位:_______级___________系________________专业______班课程设计题目:基于JSP的在线购物系统课程设计目的:1、掌握JSP的基本语法2、掌握系统设计中的分层思想,利用JSP页面实现数据展示,Servlet实现业务逻辑,JavaBean实现数据处理3、掌握MySQL数据库的基本操作,包括创建数据库、表,及对字段的设置,创建视图、存储过程和触发器4、掌握JSP对MySQL数据库的基本操作,包括连接数据库,插入记录,修改记录,删除记录等5、了解系统开发的流程课程设计内容要求:1、系统需求分析2、系统总体架构3、数据库设计E-R图物理模型,包括用户表、商品表、购物车表4、系统详细设计包括:数据库连接、首页和公共页面、用户登陆模块、用户管理模块、购物车模块、支付模块课程设计计划:1、系统需求分析1课时2、系统总体架构1课时3、数据库设计2课时4、系统详细设计12课时5、课程设计报告2课时第3页(共49页)课程设计报告:(可自行增加页面)在线购物网站采用JSP+Servlet+JavaBean技术完成,JSP页面负责展示数据,Servlet负责业务逻辑,JavaBean负责数据的处理。这是JSP的小型项目常用的分层思想,也是现在三大框架(Struts、Spring、Hibernate)常用的技术,希望通过此系统的开发掌握这种分层技术,对以后学习大型项目的开发打下基础。一、需求分析系统分为4大模块、即用户登录模块、用户管理模块、购物车模块、支付模块,如图所示:1、用户登录模块用户登录模块的主要功能是判断用户是否登录与用户退出系统的操作。2、用户管理模块用户管理模块负责对注册的用户进行管理,其功能有:用户注册、信息修改、密码修改等操作。3、购物车模块购物车模块负责对已登录用户购买的商品进行管理,其功能有:购物车列表、修改购物车、删除购物车等操作。4、在线支付支付模块负责对购买商品的支付操作。在线购物系统管理首页用户登录模块用户管理模块购物车模块支付模块用户登录用户登录用户注册信息修改密码修改购物车列表修改购物车删除购物车在线支付第4页(共49页)二、系统总体架构这个简单的网上购物系统,包括4个模块的功能,业务逻辑比较简单,容易理解,采用目前比较流行的3层架构就能解决。系统的层次结构图如下:表现层业务逻辑层数据层系统的流程如图:已登录购买已注册加入购物车未注册注册失败,显示失败消息注册成功,显示成功消息首页产品介绍页面购买页面购买页面支付页面登录页面注册页面购物车列表数据库JSP+HTML+JavaScriptServletJavaBean第5页(共49页)三、数据库设计先构建E-R图,再根据图来创建数据库表、视图等。1、E-R图该系统所涉及的表结构很简单,只有3张表:用户、购物车、商品。如图:1n2、数据物理模型根据E-R图,可以设计出系统的数据物理模型。(1)、用户表字段名称含义数据类型是否主键是否为空是否外键其他约束uid用户名IDintYesNoNoAUTO_INCREMENTuname用户姓名varchar(20)NoNoNopasswd用户登录密码vachar(50)NoNoNoemail用户E-mailVarchar(50)NoNoNolastlogin最后登录时间DatetimeNoNoNo(2)/商品表字段名称含义数据类型是否主键是否为空是否外键其他约束gid物品IDintYesNoNoAUTO_INCREMENTkinds商品类别vachar(50)NoNoNogname商品名称vachar(100)NoNoNogphoto商品照片vachar(100)NoNoNo用户购物车商品第6页(共49页)types商品类型vachar(100)NoNoNo字段名称含义数据类型是否主键是否为空是否外键其他约束producer生产商varchar(50)NoNoNoprice商品价格float(10,2)NoNoNocarriage商品运费float(10,2)NoNoNopdate生产日期datetimeNoNoNopaddress生产地址vachar(100)NoNoNodescribled商品描述vachar(200)NoNoNo(3)购物车表字段名称含义数据类型是否主键是否为空是否外键其他约束id购物车IDintYesNoAUTO_INCREMENTuid用户IDintNoNoYesgid物品IDintNoNoYesstatus购物车状态1intNoNoNo0:未支付商品1:已支付商品number物品数量intNoNoNo四、系统详细设计1、系统包介绍在线购物系统采用三层架构的模式设计,该系统开发的JavaBean和Servlet类包。action包中存放着对系统所有相关的操作类;dao包中存放的是对系统数据操作的相关类;db包中存放的是对系统数据库链接的相关类;factory包中存放的是对数据实现的相关类;filters包中存放的是系统的Servlet过滤器相关类;pojo包中存放的是系统的JavaBean相关类;service包中存放的是对数据真实操作的相关类;tag包中存放的是系统的自定义标签相关类;utils包中存放的是系统的工具类。有关页面中的相关代码存放在WebRoot目录下。其中common包中存放的是共有的页面;css包中存放的是页面样式;js存放的是页面用到的JavaScript;其他目录是按照各功能模块存放相应的页面。第7页(共49页)2、系统的关键技术(1)、数据库连接数据库连接的主要代码:publicvoiddoPost(HttpServletRequestrequest,HttpServletReponsereponse)throwServletException,IOException{Connectioncon=null;Statementst=null;ResultSetrs=null;try{Class.forName(“com.myspl.jdbc.Driver”);}catch(ClassNotFoundExceptione){e.printStackTrace();System.ouy.println(“驱动程序加载错误”)}try{Con=DriverManager.getConnnection(“jdbc:mysql://localhost:3306/testWeb”,”root”,”admin”);st=con.createStatement();rs=st.executeQuery(“select*fromperson”)reponse.setContentType(“text/html;charset=utf-8”);PrintWriteout=reponse.getWrite();…….}}(2)、系统分页技术在本系统中运行自定义标签的方式进行分页。首先,定义标签基本类,为的是以后可以将其扩展。其代码如下:…….BaseTagSupport.java………..importjavax.servlet.ServletRequest;importjavax.servlet.jsp.tagext.TagSupport;publicclassBeanTagSupportextendsTagSupport{privatestaticfinallongserivalVersionUID=1L;protectedServletRequestgetRequest();{returnpageContext.getrequest();}}其次在编写分页标签PageTag。java,其代码第8页(共49页)publicclassPageTagextendsBaseTagSupport{privatestaticfinalLoggerlog=Logger.getLogger(PageTag.class);privatePageObjectobject;privateStringlink;privateStringscript;publicintdosStartTag()throwsJspException{int[]iparams={0,0,0,};String[]sparams={“”,””};If(object!=null&&object.getData()!=null){iparams[0]=object.getDataCount();iparams[1]=object.getPageCount();iparams[2]=object.getCurPage();if(link!=null&&link!=””){sparams[0]=link;}if(script!=null&&script!=””){sparams[1]=script;}}getRequest().setAttribute(“iPageObjectTag”,iparams);getRequest().setAttribute(“sPageObjectTag”,iparams);returnEVAL_BODY_INCLUDE;}PublicintdoEndTag()throwsJspException{getRequest().removeAttribute(“iPageObjectTag”);getRequest.removeAttribute(“sPageObjectTag”);returnEVAL_PAGE;}}分页对象PageObject的源代码如下:packagecom.eshore.tag;importjava.util.List;importjavax.servlet.http.HttpServletRequest;publicclassPageObject{privatefinalintDEFAULT_PAGE_SIZE=10;//默认显示记录数privatefinalintDEFAULT_CUR_SIZE=1;//默认当前页privateListdata;//数据列表第9页(共49页)privateintdataCount;//数据总数privateintpageSize;//显示记录数privateintpageCount;//总页数privateintcurPage;//当前页publicintgetCurPage(){//获得当前页if(curPageDEFAULT_CUR_SIZE){curPage=DEFAULT_CUR_SIZE;}returncurPage;}publicvoidsetCurPage(intcurPage){this.curPage=curPage;}publicListgetData(){returndata;}publicvoidsetData(Listdata){this.data=data;}publicintgetDataCount(){returndataCount;}publicvoidsetDataCount(intdataCount){this.dataCount=dataCount;}publicintgetPageCount(){//获得页数if(dataCount0){pageCount=dataCount%pageSize==0?(dataCount/pageSize):(dataCount/pageSize+1);}returnpageCount;}publicvoidsetPageCo