版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第页1引言随着Internet国际互联网的发展,越来越多的企业开始建造自己的网站。基于Internet的信息服务,商务服务已经成为现代企业一项不可缺少的内容。很多企业都已不满足于建立一个简单的仅仅能够发布信息的静态网站。现代企业需要的是一个功能强大的,能提供完善的电子商务服务的动态商务网站。同时人们的生活方式也在随着发生改变,传统的购物方式已不能满足人们的需求。JSP是Sun公司推出的一种网站开发技术,Sun公司借助自己在Java上的不凡造诣,又把人们引进JSP时代,JSP即JavaServerPage,它可以在Servlet和JavaBean的支持下,完成功能强大的Web应用程序。所以,在我的毕业设计中,我采用了JSP作为开发工具,构建了一个能实现基本的电子商务的小型动态商务网站——网上图书销售系统。该系统能实现用户的注册、登录功能;能够实现商品的查询,订购等功能。该系统基本上具备一个网上商品销售系统应该具备的常用功能,该设计项目基本上体现了构建一个动态商务网站所需要的技术,可以说,目前的大型商务网站也就是我们这个小型网站在内容上的扩充和完善。2概述随着时代的发展,信息技术、Internet/Intranet技术、数据库技术的不断发展完善,网络进程的加快,传统的购物方式也越来越不能满足人们快节奏的生活需求,使得企业的IT部门已经认识到Internet的优势,电子商务就是在这样一个背景下产生发展起来的。伴随着电子商务技术的不断成熟,电子商务的功能也越来越强大,注册用户可以在网上搜索购买到自己想要的各种商品,初步让人们体会到了足不出户,便可随意购物的快感。我的毕业设计也就正是一个电子商务系统的开发网上图书销售系统。3系统分析3.1可行性分析商业企业在运营过程中,经常会受到以下一些条件的限制:产品的宣传受到限制,采购商或顾客只能通过上门咨询、电话沟通等方式进行各种信息的获取,受一定的时间与物理空间的局限并且成本较高。庞大的商业经济周转。复杂的产品周转渠道。从看样品、谈价格到支付货款等一系列的产品周转渠道过于复杂,企业与顾客之间缺乏全面的沟通与快捷运营的平台。商业企业中根据季节的变化,热销商品在销售高峰到来时货源紧张,企业需要实时了解商品的销售情况,保证热销商品的要货满足率。因此,企业需要重新认识市场、消费者以及自身市场定位,正确认识电子商务技术在企业中的重要地位,以少量的时间和资金建立企业信息门户网站并架设一定范围的商务网络,以此来制定长远发展战略,使企业与顾客间的经济活动变得更灵活、更主动。本系统是一个中小型的电子商务系统网上书店,可以为各类用户提供方便的在线买书环境,符合目前国内流行的电子商务模式。用户可以在系统中实现注册、浏览商品、搜索查询商品、下定单、处理定单等功能;管理员可以通过用户管理、定单管理、商品管理、评论管理等管理功能来对系统进行维护更新。在技术上,目前市场上开发电子商务平台的技术很多,如ASP,PHP,PB,.NET等。我采用SUN公司的JSP技术,它是目前市场上最流行的技术之一,JSP具有一次编译,处处运行的优点[4]。由分析可得,不论是商业还是技术上,网上图书销售系统的开发都是可行的。3.2需求分析通过对电子商务网站及网上书店的考察、分析以及实际的市场调查,要求本系统具有以下功能:统一友好的操作界面,能保证系统的易用性。规范、完善的基础信息设置。图书分类详尽,可按不同类别查看商品信息。按图书大类及图书名称进行模糊查询。实现网上购书。新书及特价图书展示。4概要设计4.1系统设计目标对于典型的数据库管理系统,尤其是对像电子商务这样的数据流量特别大的网络管理系统,必须要满足使用方便、操作灵活等设计要求。本系统在设计时应该满足以下几个目标:采用人机对话的操作方式,界面设计美观友好、信息查询灵活、方便、快捷、准确、数据存储安全可靠。全面展示书店内所有的图书,并可展示最新图书及特价图书。为顾客提供一个方便、快捷的图书信息查询功能。采用模糊查询查询数据。实现网上购物。商品销售排行,以方便顾客了解本商城内的热销商品及帮助企业领导者做出相应的决策。查看商城内的公告信息。用户随时都可以查看自己的订单。对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。系统最大限度地实现了易维护性和易操作性。系统运行稳定、安全可靠。4.2系统设计思想本系统采用三层架构设计[4],它的工作原理如图4.1所示。图4.1三层结构原理图采用三层构架以后,用户界面层通过统一的接口向业务层发送请求,业务层按自己的逻辑规则将请求处理之后进行数据库操作,然后将数据库返回的数据封装成类的形式返回给用户界面层。这样用户界面层甚至可以不知道数据库的结构,它只要维护与业务层之间的接口即可。4.3系统功能模块划分根据需求分析及三层架构设计的思想,设计出客户系统功能如图4.2用户登录用户登录在线购书在线购书用户注册登陆察看图书详细购买图书查询察看订单信息查看购物车在线购书用户注册登陆察看图书详细购买图书查询察看订单信息查看购物车在线购书购买察看图书详细资料购买查看订单详细继续购书清空购物车提交购物车删除已经选购的图书修改购买数量购买察看图书详细资料购买查看订单详细继续购书清空购物车提交购物车删除已经选购的图书修改购买数量图4.2客户端系统后台管理的系统功能图如图4.3管理员登陆管理员登陆用户管理现有图书管理添加新图书添加图书分类订单管理用户管理查看图书资料修改图书资料删除图书添加新图书添加图书分类删除图书分类查看订单详细资料删除订单查看用户资料删除用户查看用户详细资料修改用户资料图4.3后台管理系统功能图4.4系统结构设计根据面向对象和三层结构设计的思想,可得出如图4.4所示的系统结构设计图。在线书店客户端界面管理端界面JavaBean数据库在线书店客户端界面管理端界面JavaBean数据库在购书界面图书管理模块订单管理图书管理用户管理购物车界面定单信息管理登陆/注册添加图书模块添加图书分类模块订单信息模块客户管理模块登陆模块图书分类类图书类图书分类管理类图书管理类订单类订单管理类购物车类购物车管理类用户类用户管理类用户登录类4.5系统功能简介4.5.1系统基本功能1)图书信息查询该模块实现图书信息的分类显示,提供最新商品的推荐显示以及销售显示,便于引导购物取向。此外,还提供依据图书名称或是编号等包含关键字实现快速搜索的功能并显示图书的有关详细信息。2)购物车管理用于对每一个进入系统的用户所对应的购物车进行管理。将用户所选购的图书信息,包括价格、数量等信息记录到对应的购物车上,便于到收银台进行结帐处理。同时在此模块中,用户还可以方便的实现修改购物图书、清空购物车等操作。3)会员信息管理实现系统相关用户信息的注册及身份验证,同时也提供对应的用户资料的更新。该系统可以收集用户相关的联系方式、通讯地址等信息,可以更好的拓展销售规模。4)订单处理根据购物车中的信息,以及用户所选择的送货方式和付款方式,和用户对应的个人信息生成订单,便于后续工作的处理。在该模块中,用户可以随时查阅自己的订单,并对其进行取消等处理操作。4.6数据库设计数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率,以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致[10]。4.6.1数据库需求分析针对网上图书销售系统的需求分析,得出如下需求信息。订单分为单张详细订单和总订单。一个用户可以购买多本图书。一个用户对应一张订单。一个列表对应多张订单。针对本系统功能分析,总结出如下的需求信息。用户,包括数据项:用户ID、用户名、密码。图书,包括数据项:图书编号、图书名、价格、图书介绍。订单列表,包括数据项:订单编号、图书编号、购书数量。订单,包括数据项:订单编号、用户编号、下单时间。4.6.2数据库概念结构设计从本系统中规划出的实体有:用户信息实体、管理员信息实体、图书实体、图书分类实体、订单实体、订单列表实体。实体之间关系的E-R图如图4.5所示。MN管理员用户购书订单列表订单图书图书分类11MN管理员用户购书订单列表订单图书图书分类11NN11管理员实体的E-R图,如图4.6所示。图书分类实体的E-R图,如图4.7所示。用户信息实体的E-R图,如图4.8所示。图书实体的E-R图,如图4.9所示。订单实体的E-R图,如图4.10所示。订单列表实体的E-R图,如图4.11所示。管理员管理员用户名密码图书分类分类名称分类编号图4.6管理员实体的E-R图图4.7图书分类实体E-R图用用户用户名密码地址真名性别电话邮编Email注册时间注册IP图4.8用户实体E-R图图书图书编号图书名称分类编号封面作者出版社内容介绍总数量剩余数量价格图4.9图书实体E-R图订单订单订单编号用户编号购买时间总价格内容IP地址是否发货是否付款图4.10订单实体E-R图订单列表订单列表购书数量图书编号用户号订单号图4.11订单列表实体的E-R图4.7数据库逻辑结构设计本系统数据库采用SQLServer2000数据库,系统数据库名称为bookshop,下面分别给出数据表概要说明、数据表关系概要说明及主要数据表的结构。1、 数据表概要说明数据表树型结构图如图4.12所示,该数据表树型结构图包含系统所有的数据表图4.12数据表树型结构图2、各个表的的结构如下表表4.1为图书信息列表,记录书店现有的图书信息。表4.1Book表列名数据类型长度允许空注释IDInt4图书编号BookNamevarchar40否图书名称BookClassInt4否图书分类AuthorVarchar25是作者PublishVarchar150是出版社BookNoVarchar30是书号Contenttext300是内容Pricefloat8是价格Amountint4是总数量Leav_numberint4是剩余数量RegTimedatatime8是注册时间Picturevarchar60是封面表4.2为书店管理员信息表,记录管理员的帐号和密码。表4.2BookAdmin表列名数据类型长度允许空注释AdminuserVarchar20否管理员AdminPassVarchar20否管理员密码表4.3为用户信息表,记录用户的基本信息。表4.3用户表列名数据类型长度允许空注释IDInt2否用户编号UserNameVarchar50否用户名passWordVarchar50否密码NamesVarchar50否真名SexVarchar50是性别AddressVarchar50是地址PhoneVarchar50是电话PostVarchar50是邮编EmailVarchar50是电子邮件RegTimeDatatime50是注册时间RegIPAddressvarchar50是注册IP地址表4.4为订单总表,记录某个用户的订单总信息。表4.4订单总表列名数据类型长度允许空注释IDInt4否总订单编号OrderIDInt4否订单号BookNoInt4否书号Amountint4是数量表4.5为订单表,记录但张订单的具体信息。表4.5订单表列名数据类型长度允许空注释IDInt4否订单IDOrderIDVarchar50否总订单IDUserIdVarchar50否用户IDSubmitTimeDatatime8是提交时间ConsignmentTimeDatatime8是购买时间TotalPriceFloat16是总价格contentText300是描述IpaddressVarchar50是Ip地址IspayoffVarchar50是是否付款IsAddressvarchar20是是否发货表4.6为图书分类表,记录书店现有图书的分类。表4.6Bookclass表列名数据类型长度允许空注释IDVarchar30否分类编号ClassNamevarchar30否分类名5详细设计5.1开发技术简介5.1.1JSP简介JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,JSP技术在Servlet技术基础上发展起来的,它正在飞速发展中,现已成为Java服务器编程的重要组成部分。它虽然还未成型,但是它必将和J2EE(Java2EnterpriseEdition)一起发展[6]。JSP是结合markup(HTML和XML)和Java代码来处理一种动态页面。每一页第一次被调用时,通过JSP引擎自动被编译成Servlet,然后被执行,以后每次调用时,执行编译过的Servlet。JSP提供了多种方式访问Javaclass、Servlet、Applets和WebServer,因此,Web应用的功能可以分成多个明确定义公用接口的组件,通过JSP将它们结合在一起[9]。5.1.2JSP的运行原理在JSP第一次获得来自于客户端浏览器的请求时,JSP文件将被JSP引擎(JSPengine)转换成一个Servlet,即将”.jsp”文件编译成JavaClass文件。当Servlet引擎接收到请求后,如果设置了使用最新的JSP,它就会去找JSP文件,检查该文件在上次编译后是否改动过。如果改动过,就会重新编译生成新的Servlet,最终将请求转交给编译好的Servlet引擎执行[1]。如图5.1ClientClient客户端请求(Request)WebServer响应(Response)Serverextension服务器扩展ServletengineJSPengineServlet引擎JSP引擎ClassloaderJavacomplierJSPparser类载入器Java编译器JSP语法分析器图5.1JSP运行原理图在编译时如果发现JSP文件有任何语法错误,转换过程将中断,并向客户端发出出错信息;如果编译成功,则所转换产生的Servlet代码被编译,然后该Servlet被JSP引擎加载到内存中。此时JSP引擎还请求了jspInit()方法的执行,并对此Servlet初始化。JspInit()方法在Servlet的生命周期中只被请求一次,然后将被调用来处理客户端的请求和回复操作。对于所有随后对该JSP文件的请求,服务器将检查该JSP文件自最后一次被存取后是否经过修改。如果没有修改,则将请求交还给还在内存中的Servlet的jspService()方法,执行回复操作。由于Servlet始终驻于内存,所以响应是非常快的。Jsp页面在第一次访问时由于要转化和编译,运行速度较慢,但是当第二次访问该页时,由于文件已经被编译成字节码文件了,所以速度非常得快。5.1.3JSP页面的组成JSP页面看上去像标准的HTML和XML页面,并附带有JSP引擎能够处理和解析执行的代码与组件。通常,JSP代码和组件用于创建在最终页面上显示的文本。通常来说,JSP页面包括模板元素,指令元素,动作元素,Scritptlets,声明,表达式和JSP内建对象。1)模板元素:模板元素是指JSP的静态HTML或者XML[4]。2)指令元素:使用指令元素来设置全局变量,声明类、要实现的方法和输出内容的内型,它们并不向客户端产生任何输出,所有指令在文件范围内有效,JSP指令的一般语法形式为:<%@directivenameattribute=”value”,attribute=”value”%>。3)动作元素(标识):动作元素用于执行某些动作。在JSP规范中有2种类型的动作指令的标识。第一种是标准动作,它定义的是无论在什么版本的JSP引擎或Web服务器下总是可用的动作。第二种是自定义动作,它通过使用taglib指令来实现。例如JSP:useBean;JSP:setProperty;JSP:getProperty就是标准动作。4)声明:用于声明合法的变量和方法。与任何语言相同,JSP语言使用变量来保存数据。这些变量用declaration元素声明,声明的语法为<%!declaration(s)%>。当页面被初始化的时候,JSP页面中的所有声明都被初始化。除了简单的变量,方法也能被声明。声明不对当前的输出流产生任何影响。5)表达式:通过计算表达式所得到的结果来表示某个值。表达式的形式为:<%=expression%>。表达式求值的结果被强制转换为一个字符串,并插入到当前的输出流中。 6)程序段:JSP可以在页面中包含的一段程序,称之为程序段。程序段是一个代码片断,在请求的处理过程中被执行。程序段可以和页面中的静态元件组合起来创建动态生成的页面。程序段在“<%%>”中定义,在这对标识中的所有东西都会被当成JSP程序执行。5.1.4JavaBean技术介绍JavaBean技术是一种基于Java的组件技术,JavaBean组件可以用来执行复杂的计算任务,或负责与数据库的交互以及数据的提取,以及封装事务逻辑等,可以很好的实现业务逻辑和前台程序的分离使得系统具有更好的健壮性和灵活性,同时也是解决代码重用问题的一种策略。以前的组件无法实现真正的代码重用,其主要原因就是它们对于处理平台的依赖和对开发语言的依赖过重。由于Java语言在这些方面所具有的特点和优势,使得基于它的软件JavaBean组件技术倍受人们的关注。它的任务就是:一次编写,可以在任何地方执行,可以在任何地方重用。JavaBean组件可以在任何地方冲用包括了可以在应用程序、其他组件、文档、Web站点和应用程序构造器工具等多种方案中再利用。为了创建和使用Java软件组件,JavaBean被实现为一种独立于平台和结构的应用程序接口,它的实现可以忽略内部的结构及细节问题,只需要定义其外部的特征及对外功能就行。其中,属性、方法和事件三种接口可以独立对外进行开发。JavaBean的实质就是一个.class文件,也可以成为类文件。JavaBean以binary格式保存,可以保护Java源代码不容易被他人抄袭[7]。5.1.5JSP的运行环境要运行Jsp(注意,不是浏览Jsp页面),需要有支持Jsp的服务器。这里分2种情况:一种是自身就支持Jsp的服务器,如Jrun,Weblogic,JSWDK等;而另一种则是在不支持Jsp的服务器上安装Jsp引擎的插件,如在IIS,Apache等服务器上安装WebSphere,tomcat,Resin等插件。其中主流服务器是Weblogic和tomcat.Weblogic是一款功能强大的服务器软件,配置比较简单,而且Jsp的扩展功能较多,附带了数据库的JDBC驱动程序。,支持JHTML(一种与Jsp十分相似的技术),是目前市场占有率最高的服务器。不过,Weblogic的运行情况不太稳定,使用它调试Jsp文件,出现语法错误或者数据库连接错误时,Weblogic就有可能崩溃。Tomcat服务器是ApacheGroupJakarta小组开发的一个免费服务器软件,适合于嵌入Apache中使用,而且,它的源代码可以免费获得,你可以自由地对它进行扩充。访问的地址http://jakarta./tomacat/index.html,Tomcat服务器的兼容性很好,如WebLogic服务器采用其为Web服务器引擎,Jbuilder将其作为标准的测试服务器,Sun公司也将其作为JSP技术应用的示例服务器。不足之处是它的配置比较麻烦,对系统硬件要求较高,而且有一些安全性的问题没有解决。但是Tomcat服务器有众多大软件公司的支持,而且服务器的性能稳定,其发展前景很好[9]。5.2系统主要文件该购书系统主要有2类文件,一类是Bean文件,我把它们统一放在了bookshop文件夹里,保存在jakarta-tomcat-5.0.27\common\classes\bookshop下,(这是tomcat要求的默认存放Bean的路径),在bookshop文件夹下又有3个包:book,run,util,对Bean文件的一个分类;另一类是jsp文件,保存在jakarta-tomcat-5.0.27\webapps\ROOT。(这是tomcat的默认工作环境)Book包中的Bean文件:Allorder.java,Book.java,Bookclass.java,Order.java,Shopcar.java,User.javaUtil包中的Bean文件:ChStr.java,DataBase.java,DataFormat.javaRun包中的Bean文件Login.java, Op_book.java,Op_bookclass.java,Op_buy.java,Op_user.javaJsp文件分为前台文件和后台文件,因文件太多,在此就不列举。5.3详细设计及说明5.3.1数据库连接Bean的编写[2]数据库操作的JavaBean是一个公共类,放在bookshop下的util包中,通常包括连接数据库的方法getConnection、执行查询语句的方法executeQuery、执行更新操作的方法executeUpdate、关闭数据库连接的方法close。其实现代码如下:packagebookshop.util;//将该类保存到packagebookshop.util包中/***<p>数据库连接专用包</p>*<p>Copyright:wxyCopyright(c)2007</p>*<p>Company:LingDubookshoponline</p>*/importjava.sql.*;//导入提供基本的数据库编程服务的包publicclassDataBase{publicConnectionconn;//定义一个Connection对象publicStatementstmt;//定义一个Statement对象publicResultSetrs=null;//定义一个ResultSet对象publicStringsqlStr="";//定义一个字符串,用来保存SQL语句publicDataBase(){this.connect();}publicbooleanconnect(){//downloadby/try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();//加载SQLServer2000数据库驱动Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=bookshop";//保存连接数据库的URL地址的变量conn=DriverManager.getConnection(url,”sa”,””);//建立数据库连接Statementstmt=conn.createStatement();}catch(Exceptionee){System.out.println("connectdberror:"+ee.getMessage());//检测数据库连接是否成功returnfalse;}returntrue;}publicstaticvoidmain(String[]args){try{DataBasedb=newDataBase();db.connect();}catch(Exceptione){e.printStackTrace();}}}5.3.2字符处理Bean的编写在JSP开发中经常会涉及有关字符串的处理,例如:把字符串转换成适合于网页显示的文本、八字符串转换成适合SQL语句的字符串等等,所以把这些字符串处理方法集中到一个类中。这也是一个公共类[3]。关键代码如下:packagebookshop.util;/***<p>负责字符串的处理</p>*/importjava.lang.*;importjava.util.*;publicclassdataFormat{publicdataFormat(){}/***把字符串转换成适合于网页显示的文本*@params*@return*/publicstaticStringtoHtml(Strings){if(s==null)returns;s=strReplace(s,"&","&");s=strReplace(s,"<","<");s=strReplace(s,">",">");s=strReplace(s,"\"",""");s=parseReturn(s,"<br>\n ");returns;}/***把字符串sBody中的sFrom用sTo替换*@paramsBody*@paramsFrom*@paramsTo*@return*/publicstaticStringstrReplace(StringsBody,StringsFrom,StringsTo){inti,j,k,l;if(sBody==null||sBody.equals(""))return"";i=0;j=sFrom.length();k=sTo.length();StringBuffersss=newStringBuffer(sBody.length());booleanbFirst=true;l=i;while(sBody.indexOf(sFrom,i)!=-1){i=sBody.indexOf(sFrom,i);sss.append(sBody.substring(l,i));sss.append(sTo);i+=j;l=i;}sss.append(sBody.substring(l));returnsss.toString();}/***把字符串中的"\r\n"转换成"\n"*@paramStringsBody:要进行替换操作的字符串*@paramStringsEndwith:要替换成为的字符串*/publicstaticStringparseReturn(StringsBody,StringsEndwith){StringTokenizert=newStringTokenizer(sBody,"\r\n");StringBuffersss=newStringBuffer(sBody.length());booleanbFirst=true;if(sEndwith.trim().equals(""))sEndwith="\n";while(t.hasMoreTokens()){Strings=t.nextToken();s=s.trim();while(s.startsWith(""))s=s.substring(2);if(!s.equals("")){if(bFirst){bFirst=false;}else{sss.append(sEndwith);}sss.append(s);}}returnsss.toString();}/***将字符串格式化成HTML代码输出*只转换特殊字符,适合于HTML中的表单区域*@paramstr要格式化的字符串*@return格式化后的字符串*/publicstaticStringtoHtmlInput(Stringstr){if(str==null)returnnull;Stringhtml=newString(str);html=strReplace(html,"&","&");html=strReplace(html,"<","<");html=strReplace(html,">",">");returnhtml;}/***将普通字符串格式化成数据库认可的字符串格式**@paramstr要格式化的字符串*@return合法的数据库字符串*/publicstaticStringtoSql(Stringstr){Stringsql=newString(str);returnstrReplace(sql,"'","''");}}5.3.3实现用户实体的Bean 1)用户实体Bean,这个类是对用户实体的抽象,它包含了用户实体的所有属性及用户对象初始化构造方法。它们都是和数据库里的shop_user表相对应的,在这个Bean里封装的方法也主要是对这个表进行操作.这些属性都被定义为类的私有成员,外界不可访问[8]privateLongid; privateStringuserName; privateStringuserPassword;privateStringNames;privateStringSex;privateStringAddress;privateStringPhone;privateStringPost;privateStringEmail;privateStringRegTime;privateStringRegIpAddress; 2)构造函数里对以上私有成员进行初始化:Publicuser(){Id=0;UserName=””;Password=””;Names=””;Sex=””;Address=””;Phone=””;Post=””;Email=””;RegTime=””;RegIpAddress=””;}……..其中的seter和geter方法用来设置和获取以上各属性的值。在jsp页面中通过<jsp:useBean>引入。5.3.4实现图书实体的Bean 应用面向对象的思想把具有共性的实体抽象成一个类。这个图书Bean就是对图书实体的抽象,他包含了图书实体的所有属性及图书对象的初始化构造方法,里面的属性和表Book表对应[8]。部分代码如下:packagebookshop.book;/***<p>图书类</p>*/publicclassbook{privatelongId; //ID序列号privateStringBookName; //书名privateintBookClass; //图书类别privateStringclassname;//图书类别名privateStringAuthor; //作者privateStringPublish; //出版社privateStringBookNo; //书号privateStringContent; //内容介绍privatefloatPrince; //书价privateintAmount; //总数量privateintLeav_number; //剩余数量privateStringRegTime; //登记时间privateStringpicture; //图书样图文件的名称/***图书的初始化*/publicbook(){Id=0;BookName="";BookClass=0;classname="";Author="";Publish="";BookNo="";Content="";Prince=0;Amount=0;Leav_number=0;RegTime="";}publicvoidsetId(longnewId){this.Id=newId;}publiclonggetId(){}……其中的seter和geter方法用来设置和获取以上各属性的值。在jsp页面中通过<jsp:useBean>引入。5.3.5实现图书分类实体Bean这个类是对图书分类实体的抽象,他包含了图书分类实体的所有属性及图书分类对象的初始化构造方法,它的属性和表Bookclass对应,部分代码如下:packagebookshop.book;/***<p>图书分类类</p>*/publicclassbookclass{privateintId; //ID序列号privateStringClassName; //图书类别publicbookclass(){Id=0;ClassName="";}publicbookclass(intnewId,Stringnewname){Id=newId;ClassName=newname;}……5.3.6实现订单实体Bean 这个类是对订单实体的抽象,它包含了订单实体的所有属性及订单对象的初始化构造方法。客户每次购买一种商品都会产生一次订购单,它包括订单号,所购买的书号,所购买这种书的数量等,这些构成了这个类的私有属性,这些属性和表Order对应。核心代码如下:packagebookshop.book;/***<p>订单类</p>*/publicclassorder{privatelongId; //ID序列号privateStringorderId; //订单编号privatelongUserId; //用户序列号privateStringSubmitTime; //提交订单时间privateStringConsignmentTime;//交货时间privatefloatTotalPrice; //总金额privateStringcontent; //用户备注privateStringIPAddress; //下单时IPprivatebooleanIsPayoff; //用户是否已付款privatebooleanIsSales; //是否已发货publicorder(){//在构造方法里初始化变量Id=0;orderId="";UserId=0;SubmitTime="";ConsignmentTime="";TotalPrice=0;content="";IPAddress="";IsPayoff=false;IsSales=false;}publiclonggetId(){returnId;}……其中的seter和geter方法用来设置和获取以上各属性的值。在jsp页面中通过<jsp:useBean>引入。5.3.7实现订单列表的Bean这个类是对订单列表实体的抽象,它包含了订单实体的所有属性及订单列表对象的初始化构造方法,它的属性和表Allorders对应,部分代码如下:packagebookshop.book;/***<p>Title:</p>*/publicclassallorder{privatelongId; //ID序列号privatelongorderId; //订单号表序列号privatelongBookNo; //图书表序列号privateintAmount; //订货数量publicallorder(){Id=0;orderId=0;BookNo=0;Amount=0;}publiclonggetId(){returnId;}………其中的seter和geter方法用来设置和获取以上各属性的值。在jsp页面中通过<jsp:useBean>引入。5.3.8实现购物车实体的Bean 在现实生活中,人们去超市买东西,都是把商品放在一个购物篮里,等到把所有要买的东西选购完毕后,一起拿到收银台前付钱。我在程序里定义的购物车实体就是模拟这个功能.作为购物车,购物时间,所购书的总价格都是必不可少的,这个类是对购物车实体的抽象,它包含了购物车的所有属性及购物车对象的初始化构造方法。部分代码如下:packagebookshop.book;/***<p>Title:</p>*/publicclassshopcar{privatelongbookId; //图书ID编号privateintquanlity; //选购数量publicshopcar(){bookId=0;quanlity=0;}publiclonggetBookId(){returnbookId;}5.3.9管理用户登录Bean的编写这是一个以客户为中心的交易平台,只有成为了系统的合法用户才有使用本系统的权利,因此需要检测每个用户的合法性,管理用户登录这个Bean:Login.java就是要完成这一功能。图5.2为Login类的类图其中只是关键的几个方法。LoginExecute():booleangetIsadmin():booleangetSql():StringLogin():voidLoginExecute():booleangetIsadmin():booleangetSql():StringLogin():voidIsadmin:booleanPasswd:StringuserId:longuserName:String从图4-1中可以看出Login具有的属性和方法,其中login():void构造函数,getismin为取得属性isadmin的值的方法,即判断登陆用户是否是管理员。其它的是设置和获取属性的方法。其中有两个重要的方法介绍如下:getSql()方法根据用户的不同获得不同的查询SQL语句。判断登陆用户是否是管理员,如果是则从管理员信息表中查询数据,否则则从普通用户表中查询数据。实现代码如下:/***获得查询用户信息的sql语句*@return*/publicStringgetSql(){if(isadmin){sqlStr="select*fromBookAdminwhereadminuser='"+dataFormat.toSql(username)+"'andadminpass='"+dataFormat.toSql(passwd)+"'";}else{sqlStr="select*fromshop_userwhereusername='"+username+"'andpassword='"+passwd+"'";}returnsqlStr;}2)Execute()方法/***执行查询*@return*@throwsjava.lang.Exception*/publicbooleanexcute()throwsException { booleanflag=false;DataBasedb=newDataBase();db.connect();//获取一个数据库连接Statementstmt=db.conn.createStatement();rs=stmt.executeQuery(getSql());//rs里返回查询结果集if(rs.next()){if(!isadmin){userid=rs.getLong("id");}flag=true;}rs.close();returnflag; }从以上代码中可以看出,构造数据库连接DataBase类的对象,调用其connect()方法获得连接,调用getsql()方法获得SQL语句,然后从数据库中查得用户所需信息。5.3.10管理图书Bean的编写该类负责图书的管理,包括图书的修改、查询、删除、和添加等,图5.3为该类的类图[5],其中省去了部分方法,这里只介绍几个重要的方法。Op_booksqlStr:Stringabooks:booksqlflag:booleanBooklist:VectorOp_booksqlStr:Stringabooks:booksqlflag:booleanBooklist:VectorPage:intPagecount:intPagesize:intRecordcount:longRequest:HttpservletRequestBook_search():booleanDelete():booleanGetonebook():booleanGetsql():StringGetsqlflag():booleanInsert():booleanOp_book():voidTo_string():StringUpdate():boolean1)getRequest()方法该方法负责从页面接收到的表单资料分解,并设置图书实体的相应属性,它的返回值为Boolean类型,true表示成功,反之表示失败。部分代码如下:publicbooleangetRequest(javax.servlet.http.HttpServletRequestnewrequest){booleanflag=false;try{request=newrequest;StringID=request.getParameter("id");longbookid=0;try{bookid=Long.parseLong(ID);}catch(Exceptione){}abooks.setId(bookid);Stringbookname=request.getParameter("bookname");if(bookname==null||bookname.equals("")){bookname="";sqlflag=false;}abooks.setBookName(to_String(bookname));Stringauthor=request.getParameter("author");if(author==null||author.equals("")){author="";sqlflag=false;}abooks.setAuthor(to_String(author));Stringpublish=request.getParameter("publish");;if(publish==null){publish="";}abooks.setPublish(to_String(publish));Stringbookclass=request.getParameter("bookclass");intbc=Integer.parseInt(bookclass);abooks.setBookClass(bc);Stringbookno=request.getParameter("bookno");if(bookno==null){bookno="";}abooks.setBookNo(to_String(bookno));Stringpicture=request.getParameter("picture");if(picture==null){picture="images/01.gif";}abooks.setPicture(to_String(picture));floatprice;try {price=newFloat(request.getParameter("price")).floatValue();}catch(Exceptione){price=0;sqlflag=false;}abooks.setPrince(price);intamount;try{amount=newInteger(request.getParameter("amount")).intValue();}catch(Exceptione){sqlflag=false;amount=0;}abooks.setAmount(amount);Stringcontent=request.getParameter("content");if(content==null){content="";}abooks.setContent(to_String(content));if(sqlflag){flag=true;}returnflag;}catch(Exceptione){returnflag;}}2)book_search()方法该方法负责图书查询,包括图书的分类,分页、关键字查询。首先通过getRequest()方法获得页面表单参数值,根据参数值判断是何种查询,然后根据相应的SQL的语句从数据库里查询相应的值。这里需要用到分页技术。部分代码如下:/***完成图书查询,包括分类,分页查询*@paramres*@return*@throwsjava.lang.Exception*/publicbooleanbook_search(HttpServletRequestres)throwsException{DataBasedb=newDataBase();db.connect();Statementstmt=db.conn.createStatement();request=res;StringPAGE=request.getParameter("page");//页码Stringclassid=request.getParameter("classid"); //分类ID号Stringkeyword=request.getParameter("keyword"); //查询关键词if(classid==null)classid="";if(keyword==null)keyword="";keyword=to_String(keyword).toUpperCase();try{page=Integer.parseInt(PAGE);}catch(NumberFormatExceptione){page=1;}//取出记录数if(!classid.equals("")&&keyword.equals("")){sqlStr="selectcount(*)frombookwherebookclass='"+classid+"'";}elseif(!keyword.equals("")){if(classid.equals("")){sqlStr="selectcount(*)frombookwhereupper(bookname)like'%"+keyword+"%'orupper(content)like'%"+keyword+"%'";}else{sqlStr="selectcount(*)frombookwherebookclass='"+classid+"'and(upper(bookname)like'%"+keyword+"%'or"+"upper(content)like'%"+keyword+"%')";}}else{sqlStr="selectcount(*)frombook";}intrscount=pageSize;try{ResultSetrs1=stmt.executeQuery(sqlStr);if(rs1.next())recordCount=rs1.getInt(1);rs1.close();}catch(SQLExceptione){System.out.println(e.getMessage());returnfalse;}//设定有多少pageCountif(recordCount<1)pageCount=0;elsepageCount=(int)(recordCount-1)/pageSize+1;//检查查看的页面数是否在范围内if(page<1)page=1;elseif(page>pageCount)page=pageCount;rscount=(int)recordCount%pageSize; //最后一页记录数//sql为倒序取值sqlStr="selecta.id,a.bookname,a.bookclass,b.classname,"+"a.author,a.publish,a.bookno,a.content,a.prince,a.amount,"+"a.Leav_number,a.regtime,a.picturefrombooka,bookclassb"+"wherea.Bookclass=b.Id";if(!classid.equals("")&&keyword.equals("")){//如果类别不为空,非查询if(page==1){sqlStr=sqlStr+"anda.bookclass='"+classid+"'"+"orderbya.Iddesc";}else{sqlStr=sqlStr+"anda.bookclass='"+classid+"limit"+(recordCountSize*page)+","+(recordCountSize*(1));}}elseif(!keyword.equals("")){//如果是查询资料if(page==1){if(!classid.equals("")){//查询某一类sqlStr=sqlStr+"anda.Bookclass='"+classid+"'and(upper(a.bookname)like'%"+keyword+"%'orupper(a.content)like'%"+keyword+"%')orderbya.Iddesc";}else{ //查询所有类sqlStr=sqlStr+"and(upper(a.bookname)like'%"+keyword+"%'orupper(a.content)like'%"+keyword+"%')orderbya.Iddesc";}}else{if(!classid.equals("")){sqlStr=sqlStr+"anda.Bookclass='"+classid+"'and(upper(a.bookname)like'%"+keyword+"%'orupper(a.content)like'%"+keyword+"%')limit"+(recordCountSize*page)+","+(recordCountSize*(1));}else{sqlStr=sqlStr+"and(upper(a.bookname)like'%"+keyword+"%'orupper(a.content)like'%"+keyword+"%')limit"+(recordCountSize*page)+","+(recordCountSize*(1));}}}else{//非查询,也非分类浏览if(page==1){sqlStr=sqlStr+"orderbya.Iddesclimit0,"+pageSize;}else{sqlStr=sqlStr+"limit"+(recordCountSize*page)+","+(recordCountSize*(1));}}try{rs=stmt.executeQuery(sqlStr);booklist=newVector(rscount);while(rs.next()){bookbook=newbook();book.setId(rs.getLong("id"));book.setBookName(rs.getString("bookname"));book.setBookClass(rs.getInt("bookclass"));book.setClassname(rs.getString("classname"));book.setAuthor(rs.getString("author"));book.setPublish(rs.getString("publish"));book.setBookNo(rs.getString("Bookno"));book.setContent(rs.getString("content"));book.setPrince(rs.getFloat("prince"));book.setAmount(rs.getInt("amount"));book.setLeav_number(rs.getInt("leav_number"));book.setRegTime(rs.getString("regtime"));
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 服装代理加盟合同范例
- 兼职外教合同书范本
- 快递公司加盟合作协议
- 2024年政府购买服务合同书格式
- 建筑工程设计合同条款解析
- 广东省汕尾市劳动合同范本
- 建筑工人保密协议合同
- 国际技术转让合同的风险评估和管理
- 2024年购房简单协议书
- 承包运输协议书2024年
- 《糖尿病人的护理》
- VTE的预防和护理PPT演示课件
- 大棚采购合同3篇
- 太阳系与八大行星英语教学课件
- 未成年人图书馆文献分类排架讲座(修订)概要课件
- 教科版五年级科学上册(风的作用) 教学课件
- 盐酸-危险化学品安全标签
- 部编版道德与法治三年级上册知识点
- SB/T 10843-2012金属组合货架
- GB/T 4337-2015金属材料疲劳试验旋转弯曲方法
- GB/T 40120-2021农业灌溉设备灌溉用热塑性可折叠软管技术规范和试验方法
评论
0/150
提交评论