电脑销售管理系统设计与开发_第1页
电脑销售管理系统设计与开发_第2页
电脑销售管理系统设计与开发_第3页
电脑销售管理系统设计与开发_第4页
电脑销售管理系统设计与开发_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上信息工程学院本科毕业论文(2010届)题 目电脑销售管理系统设计与开发系计算机专 业计算机科学与技术(信息工程学院)班 级学 号学生姓名沈华清指导教师谌志群完成日期2010年6月专心-专注-专业摘 要在计算机飞速发展的今天,采用计算机来对产品进行管理已成为销售市场科学化和现代化的重要标志,它给买家和卖家都带来了明显的经济效益和社会效益。电脑在每年的销售量都保持在一个惊人的数量级上,可以说如今电脑已成为人们生活中的一部分。因此,开发一个电脑销售管理系统是相当有必要的。本次毕业设计要实现的是一个电脑销售管理系统,该系统基本实现了以下的功能:注册为该网站的用户,在这个模块中

2、主要使用了Struts的Validator验证器来对用户输入的格式进行验证,Ajax技术来确保账号的唯一性;一般权限的用户可以对在售电脑的信息进行浏览,浏览又可以分为机型分类,店主推荐机型,热门机型,新机型和热卖机型的浏览,这块主要通过在Jsp页面使用Div和Css来实现;具有管理权限的用户能对已注册用户的账号有效性以及合法性进行审核,添加新型的电脑,删除不销售的电脑,对用户生成的订单进行浏览和发货操作。本课题所要设计与实现的系统是用Java结合Mysql数据库来实现,其中主要运用Java中的MVC框架,用JavaBean来做Model,完成对数据的读取,用Sevelet来作为Controle

3、r,来接受用户的输入并调用Model和Model去完成用户的需求,用Jsp页面来作为View完成与用户之间信息的交互。关键词:销售系统;Java;Jsp;Mysql数据库ABSTRACTToday, with the rapid development of the computer, using computers to manage product has become an important scientific and modern symbol in sales market. It gives buyers and sellers have brought significant

4、 economic and social benefits. Computer sales are kept at an alarming magnitude each year, it can be said now the computer has become a part of life. Therefore, the development of a computerized sales management system is very necessary.The graduation project is to be achieved by a computer sales ma

5、nagement system,this system basically the following functions: Registration for the site's users, in this module, i use the validator of Struts Validator to format what the user input, and use Ajax technology to ensure the uniqueness of account; users who has general authority can browse the inf

6、ormation of the computer in the sale, this model can be divided into categories model, recommended model, hot model, new model and hot rank model.this function achieves primarily through the use of Div and Css in the Jsp page; users with administrative privileges can review the validity and legality

7、 on registered account, add new computers, delete computers which does not sell, and browse user-generated orders and send computers operations.The system is combined with Java and Mysql database, primarily using the MVC framework in Java. To use the JavaBean as Model, read the data from database, u

8、sing Sevelet as Controler, to accept user input and calls the Model and View to complete the needs of users, with Jsp page as View complete information between the user interaction.Key words:Sales system;Java;Jsp;Mysql database目 录1 引言 电子商务给我们的日常生活带去的好处是显而易见的。首先,我们可以对现有的资源进行合理的利用。在经济全球化发展中,我们不能只故眼前的利

9、益而放弃了更好的发展道路。因为互联网的普及和电子商务的日益完善,最先加入网络贸易的商家将受益无穷。供需双方可以通过Internet获得丰富的供求信息,开拓广阔渠道,捕捉商机、寻找客户,提高工作效率。电子商务是一种方式、一种媒介、一种信息共享。它可以实现无纸化办公,通过降低传统企业在制作、传送、管理和处理纸质文件的成本,不仅可以降低这些纸质文件的成本,更重要的是简化流程、减少耽搁和错误,提高公司的灵活性、应变能力和提供更好的服务能力。它还可以实现即时生产、即时经销、即时服务和即时通信。其次,互联网使我们对传统的空间概念发生变化,出现了有别于实际地理空间的虚拟空间或者虚拟社会。处于世界任何角落的个

10、人、公司或机构,可以通过互联网紧密地联系在一起,建立虚拟社区、虚拟公司、虚拟政府、虚拟商场、虚拟大学或者虚拟研究所等,以达到信息共享、资源共享、智力共享等。然后,电子商务也任然保留了传统商品交易中的互动性。通过互联网,商家之间可以直接交流、谈判、签合同,消费者也可以把自己的反馈建议反映到企业或商家的网站,而企业或者商家则会根据消费者的反馈及时调查产品种类及服务品质,做到良性互动. 借助于电子商务的如此多的优势之上,杭州的百脑汇在线电脑销售系统取得了巨大的成功,它具有浏览电脑信息,在线交易,送货上门等功能。它让我们即使不用去电脑商城也能够对各种品牌,各种型号的电脑信息有个比较直观的了解。和传统的

11、交易方式相比,百脑汇在线电脑销售系统有很多优越之处,如它可以突破地域和时间限制,使处于不同地区的人们自由地传递信息、互通有无、开展贸易,它的快捷、迅速、自由是传统的电脑商城所无法比拟的。因此,电脑的在线销售也必将在不久的将来成为主流,所以开发一个基于B/S结构的电脑销售系统也是十分有意义的1。2 开发环境的介绍及安装2.1 Java概述 Java是一个广泛使用的网络编程语言,它是一种新的计算概念。Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序。Java略去了运算符重载、多重继承等模糊的概念,并且通过实现

12、自动垃圾收集大大简化了程序设计者的内存管理工作2。 Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。用于网络、分布环境下的Java必须要防止病毒的入侵。 Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用“特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。与平台无关的特性使 Java程序可以方便地被移植到网络上的不同机器。 同时,Java的类

13、库中也实现了与不同平台的接口,使这些类库可以移植。另外,Java编译器是由Java语言实现的,Java运行时系统由标准C实现,这使得Java 系统本身也具有可移植性。Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且 Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。 2.2 Jsp的介绍 Jsp规范是Web服务器、应用服务器、交易系统、以及开发工具供应商间广泛合作的结果。Sun公司开发出这个规范来整合和平衡已经存在的对Java编程环境(例如,Java Servlet和JavaBeansTM)进行支持的技

14、术和工具。其结果是产生了一种新的、开发基于Web应用程序的方法,给予使用基于组件应用逻辑的页面设计者以强大的功能3。 Jsp技术在多个方面加速了动态Web页面的开发:首先,使用Jsp技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用 Jsp标识或者小脚本来生成页面上的动态内容(内容是根据请求来变化的,例如请求帐户信息或者特定的一瓶酒的价格)。生成内容的逻辑被封装在标识和 JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Beans中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用Jsp页面,而不影响内容的

15、生成。在服务器端,Jsp引擎解释Jsp标识和小脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBCTM技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。 其次,Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与Jsp相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化 JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码

16、和耗时的功能。通过开发定制化标识库,Jsp技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。Jsp技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及Java 2(企业版体系结构)的一个组成部分,Jsp技术能够支持高度复杂的基于Web的应用。由于Jsp页面的内置脚本语言是基于Java编程语言的,而且所有的Jsp页面都被编译成为Java Servlet,Jsp页面就具有Java技术的所有好处,包括健壮

17、的存储管理和安全性。作为Java平台的一部分,Jsp拥有Java编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将Jsp支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。当与Java 2平台,企业版(J2EE)和Enterprise JavaBean技术整合时,Jsp页面将提供企业级的扩展性和性能,这对于在虚拟企业中部署基于Web的应用是必需的。2.3 Myeclipse的安装我是依照Myeclipse中文版本的安装过程来讲解和截屏的,如果你手里有的是Myeclipse的其它版本,也别担心,因为无论是Myeclipse的哪个版本,安装过程

18、几乎都是一样的,最多是在安装功能选项中,有些版本功能多,有些版本功能少而已。由于没有安装光盘,我就下载了一个。双击下载的exe文件,即可进行解包,这步所花时间较长,你会看到图2-1所示。图2-1 安装路径界面选择安装Myeclipse 6.0的目录,如图2-2所示。图2-2 安装过程界面选择开始菜单中的程序组,用如图2-3所示的选择即可。图2-3 安装过程界面开始安装Myeclipse 6.0,如图2-4所示。图2-4 安装过程界面确认安装,至此,你已经成功安装好了Myeclipse 6.03 系统分析3.1 系统设计的背景信息是当代最流行的词语之一。翻开书报充满眼帘的是“信息时代”、“信息科

19、学”、“信息技术”、“信息产业”、“信息就是财富”等等。“信息是物质的基本属性之一,是物质间接存在性的自身显示。信息的作用是消除不确定性。”4在经济日益全球化的今天,我们看到计算机网络技术的迅猛发展,利用因特网实现商务活动的国际化、信息化和无纸化,已经成为经济全球化发展的一大趋势。电子商务正是为了适应这种以全球为市场的变化而发展起来的,并已在国际贸易和商业领域得到广泛应用,而本课题正是对电子商务的具体化实际应用。3.2 系统需求分析本毕设课题是要设计与开发一个在线的电脑销售管理系统,该系统主要包括用户账号注册,电脑信息的品牌分类、店主推荐机型、新上架机型、热卖机型和热卖机型榜的浏览,下订单,管

20、理员对账号、订单、产品的上架与下架的管理等几个部分。系统主要划分为以下几个模块:1)用户注册模块:创建用户进入购买页面的账号。2)电脑信息浏览模块:实现对不同品牌电脑的基本信息浏览。3)订单模块:收集用户购买的电脑信息。4)管理员模块:实现管理员的登录以及对注册用户的账号审核和删除。5)电脑上架与下架:产品入库与出库的管理。6)订单管理:送货地址的审核以及进行发货操作。3.3 系统开发的目标在软件开发项目中,信息管理的影子随处可见,但要真正使技术人员的积极性都发挥出来,并不是“影子”所能完成的。正所谓“知易行难”,信息管理并不仅仅是管理信息这么简单。它有一套完备的目标体系;它需要科学的方法,需

21、要一种对时间进度、任务分解、绩效控制的把握和判断的过程。而该销售系统开发的目标就是为了让更多的人能够在线了解最新的电脑资讯,使他们能够更加便捷的购买电脑。软件的开发本身就是一件很好的事情,能够让技术人员开发研究一个比较完善的系统,能够更好的让客户使用,让更多的人方便使用,了解和知道系统软件的可行性和可操作性。3.4 数据库分析什么是数据库呢?当人们从不同的角度来描述这一概念时就有不同的定义(当然是描述性的)。例如,称数据库是一个“记录保存系统”(该定义强调了数据库是若干记录的集合)。又如称数据库是“人们为解决特定的任务,以一定的组织方式存储在一起的相关的数据的集合”(该定义侧重于数据的组织)。

22、更有甚者称数据库是“一个数据仓库”。当然,这种说法虽然形象,但并不严谨。严格地说,数据库是“按照数据结构来组织、存储和管理数据的仓库” 5。在经济管理的日常工作中,常常需要把某些相关的数据放进这样“仓库”,并根据管理的需要进行相应的处理。例如,在本次毕业设计中的电脑信息表,在该表中保存了电脑的基本参数(电脑编号,屏幕尺寸,显卡类型,产品定位,产品重量,Cpu类型,内存大小,硬盘大小),这张表就可以看成是一个数据库。有了这个“数据仓库”我们就可以根据需要随时查询某类型电脑的基本情况,也可以查询在某个特定内存区间内的电脑类型等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的

23、水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种“数据库”,使其可以利用计算机实现财务、仓库、生产的自动化管理。4 系统设计4.1 总体设计在需求明确、准备开始编码之前,要做总体设计,而详细设计会在后一章节详细说明与设计。因此,对于总体设计只要介绍系统软件所需要实现的功能和操作,对后面的开发、测试、实施、维护工作起到关键性的影响6。在电脑销售管理系统中,对特别而强的功能是不要求,只需简单实现基本功能就可以了,因此以用户注册,电脑浏览,订单生成,管理员管理等操作功能作为基本功能来开发总体设计。总体设计的界面也是很简单的,就主要以电脑浏览页面做为主页面,其他功能的页面作为子页面。通

24、过对该系统简单分析,所需总体设计的方面有以下几个:1)需要做好数据库的准备,通过Mysql数据库来完成数据的输入工作,通过SQL语句来实现简单的储存过程;2)前台的页面设计尽量简单化、可视化、可操作化、可扩充化;3)前台页面功能的设计通过在Myeclipse下编写Jsp页面来实现;4)要求做到本系统的扩充性和可更新性,就是在对数据库进行修改、添加、更新等操作。4.1.1 数据表结构的建立通过本系统,需要建立的表有七张,分别为:d_d_user,d_d_computer,d_d_order,d_d_category,d_d_product,d_d_receive_address,d_d_orde

25、r_detail。d_d_user表中存储用户的基本信息,该表中的Email字段用来存储登录的账号,Is_email_verify用来查看是否通过邮箱验证,通过验证的该字段为1,未通过的则为0,其结构如表4-1所示。表4-1 d_d_user表字段名类型意义Id整型(12)用户编号Email文本(50)帐号名Nickname文本(50)昵称Password文本(50)密码Is_email_verify整型(1)是否通过邮箱验证Email_verify_code文本(50)邮箱的验证码d_d_category表中存储电脑的不同品牌信息,该表中的Turn字段用来存储每个类别下子类别的个数,Pare

26、nt_id中存储的是父类的Id号,方便分类存取,其结构如表4-2所示。表4-2 d_d_category表字段名类型意义Id整型(12)类别编号Turn整型(3)子类序号En_name文本(50)英文名称Cn_name文本(50)中文名称Parent_id整型(12)所属父类编号d_d_computer表中存储电脑参数信息,其结构如表4-3所示。 表4-3 d_d_computer表字段名类型意义Id整型(12)电脑编号Screen_size文本(20)屏幕尺寸Graphics文本(50)显卡类型Types文本(20)产品定位Weight文本(20)产品重量Cpu文本(20)Cpu类型Memo

27、ry 文本(20)内存大小Hard_size文本(20)硬盘大小d_d_product表中存储电脑参数信息,该表中的Id为d_d_computer表的外键,并且两表做了级联操作,Category_id字段存储的是该产品的类别号,需用时可以直接通过取该产品的Category_id来达到取该产品信息的目的,其结构如表4-4所示。 表4-4 d_d_product表字段名类型意义Id整型(12)电脑编号Category_id整型(12)类别号Product_name文本(100)产品名称Add_time长整型(20)入库时间Fixed_price双进度浮点型市场价Dang_price双进度浮点型会员

28、价Product_pic文本(200)电脑图片d_d_order表中存储订单信息,该表中的User_id与Send_id是为了方便做表关联查询操作而设置的字段,他们分别表示在d_d_user表中的用户Id和在d_d_receive_address表的Id,Status表示的是订单的状态,为1时表示该订单已发货,为0时则表示还未发货,由于在程序中调用的是系统的毫秒数,所以在设计Order_time类型时采用的是长整形,其结构如表4-5所示。表4-5 d_d_order表字段名类型意义Id整型(10)订单编号User_id整型(10)用户编号Send_id整型(12)送货地址号Status整型(1

29、0)订单状态Order_time长整型(20)下订单日期Total_price双进度浮点型订单总价Send_time长整型(20)出货日期d_d_order_detail表中存储订单详细信息,表中的Order_id字段与表d_d_order中的Id相对应,方便对订单详细信息的了解,其结构如表4-6所示。 表4-6 d_d_order_detail表字段名类型意义Id整型(12)编号Order_id整型(12)订单编号Product_name文本(50)货物名称Num整型(50)货物数量d_d_receive_address表中存储送货信息,表中的User_id字段与表d_d_user中的Id相

30、对应,方便对用户信息表的关联操作,其结构如表4-7所示。 表4-7 d_d_receive_address表字段名类型意义Id整型(12)送货编号User_id整型(10)用户编号Receive_name文本(20)收货人Full_address文本(200)送货地址Postal_code文本(8)邮编Mobile文本(15)手机号Phone文本(20)固定电话4.1.2 数据库中数据建立通过该系统,需要建立的表数据有三张分别为:d_d_computer,d_d_category,d_d_product。d_d_category表所要建立如图4-1数据所示。图4-1 d_d_category表

31、中数据的显示 d_d_computer表所要建立如图4-2数据所示。 图4-2 d_d_computer表中数据的显示 d_d_product表所要建立如图4-3数据所示。 图4-3 d_d_product表中数据的显示4.2 详细设计最重要的部分是模块的流程图、状态图、局部变量及相应的文字说明等。在这个阶段,各个模块可以分给不同的人去并行设计,当然设计就本人一个人全部实现系统设计。在详细设计阶段,设计者的工作对象是一个模块,根据总体设计赋予的局部任务,设计并表达出模块的流程、状态转换等内容。该系统详细设计的有几个功能界面7。比如用户注册,电脑浏览,订单生成,管理员管理,其中把电脑浏览页面作为

32、主界面进行设计和功能实现。详细设计主要是对总体设计进行详细的开发和设计,其中设计包括前台的界面设计和后台数据库的设计。后台对数据库的输入,对其进行分析,然后在前台进行控件的使用,代码的编程。详细设计主要包括界面的设计,操作功能的初步实现如(添加、删除、修改等功能)。以及实现每一个操作功能。4.2.1 功能设计界面对于用户的功能设计界面分为以下几个基本功能。如图4-4所示。 图4-4 系统的功能图用户主界面就是一个电脑浏览的页面,用电脑浏览作为主界面,其他页面作为子页面。通过用户主界面的链接来跳转其他界面。通过跳转的代码编程来实现主页面跳转到其他子页面。5 系统实现5.1 用户注册模块的实现 在

33、该模块中,采用Jsp页面来获取用户输入的信息,该模块页面如图5-1所示。图5-1 注册界面在这个模块中,主要做的工作有输入格式的验证,帐号唯一性的验证还有验证码类的编写。对格式的验证采用了Struts框架中的Validator框架。使用该框架必须先导入Jakarta-oro.Jar和 Commons-validator.Jar这两个Jar包。Validator采用基于两个Xml文件的方式来配置验证规则,分别为Validation.xml,Validator-rules.xml。在Struts应用中,需放到Web-inf目录下。在Validator-rules.Xml这个文件包含了一组验证规则,

34、对所有Struts应用都适用。一般情况不用修改这个文件,除非要修改或扩展默认规则。如果要给应放到另一个Xml文件中,而不是直接添加到Validator-rules.xml文件中,这样当Validator升级时,不用修改Validator-rules.xml文件8。Validator.xml这个文件是针对于具体Struts应用的,他可以为应用中的ActionForm配置验证规则。而不用编码实现验证。其次是对帐号的唯一性进行验证,避免同一帐号的重复注册。该功能是通过Ajax来实现的。当用户在Email地址栏中填完帐号,文本框失去焦点时,就会由Onblur去触发checkEmail方法,以下即为ch

35、eckEmail方法的实现代码。 var d = document.getElementById("email_exist");var email = document.getElementById("txtEmail");var xmlHttpRequest = null;if(typeof XMLHttpRequest) != 'undefined') xmlHttpRequest = new XMLHttpRequest();else xmlHttpRequest=new ActiveXObject('Microsoft.X

36、MLHttp');xmlHttpRequest.open('GET','ajaxEmailAction.do?email='+email.value, true);xmlHttpRequest.onreadystatechange=function() if(xmlHttpRequest.readyState=4) var txt = xmlHttpRequest.responseText;d.innerHTML = txt; ;xmlHttpRequest.send(null); 该方法会将获得的帐号信息传给ajaxEmailAction.java中,

37、在该类中系统将会把获取的帐号去数据库的d_d_user表中去遍历,若找不到则返回“该帐号可用”信息,ajaxEmailAction.java中的处理代码如下。String email_exist = ""String email = request.getParameter("email");SuperUserDao userDao = UserDaoFactory.getUserDao();List list =userDao.findByEmail(email);if("".equals(email)email_exist = &

38、quot;"else if(list.size()=0)email_exist = "恭喜你,该账户可用"elseemail_exist = "Sorry,该账户已被注册"response.setContentType("text/plain;charset=utf-8");response.getWriter().write(email_exist);return null; 最后在该模块中还写了个ImageServletAction类来获得验证码,在这里使用的是中文验证码,主要代码如下。 response.setCont

39、entType("image/jpeg"); OutputStream ops = response.getOutputStream(); Random rd = new Random(); BufferedImage bi=new BufferedImage(250,75,BufferedImage.TYPE_INT_RGB); Graphics gp=bi.getGraphics();gp.setColor(new Color(rd.nextInt(255),rd.nextInt(255),rd.nextInt(255);gp.fillRect(0, 0, 300, 3

40、00);gp.setColor(new Color(rd.nextInt(255),rd.nextInt(255),rd.nextInt(255);String font = "好","爱","你","啊","哈","他","说","哦"String s = null;s = fontrd.nextInt(8)+fontrd.nextInt(8)+fontrd.nextInt(8)+fontrd.nextInt(8);gp.setFon

41、t(new Font("", Font.BOLD, 50);gp.drawString(s, 25, 55);JPEGImageEncoder jpeg=JPEGCodec.createJPEGEncoder(ops);jpeg.encode(bi);ops.flush();ops.close();request.getSession().setAttribute("verifycode", s);return null; 在这里只要改变数组font里的值就可以实现对效果的改变,如果String font = "A","B&

42、quot;,"C","D","E","F","G","H",调用s = fontrd.nextInt(8)+fontrd.nextInt(8)+fontrd.nextInt(8)+fontrd.nextInt(8)后显示的就是这几个大写字母里的四个了。这个图片型验证码主要由两块组成,背景图片以及图片上的字符串9。大概的制作过程是这样的,首先通过new BufferedImage()在内存创建图像区,然后通过getGraphics()来获得背景图片,并通过setColor()和

43、fillRect()来设置图片的颜色和位置。接着就是用数组font来存放所需的字符串,用setFont()和drawString()来设置字体和将字符串添加到背景图片上去。这样就完成了对图片验证码的实现了。5.2 电脑浏览的实现该模块由Category.jsp(分类页面),Hot.jsp(热销电脑),New.jsp(新型电脑),New_bang.jsp(新机热卖榜),Recommend.jsp(推荐机型)这5张jsp页面通过Css组织在Main.jsp中来完成的10。下面重点介绍下Category.jsp的实现过程,其他页面的实现基本与这两者类似。Category.Jsp主要可分为三层,最上层

44、为电脑的品牌,下一层为末品牌下的系列名称,在系列名称下还有各个系列的不同型号的电脑,如图5-2所示。图5-2 分类浏览 要实现这个功能,首先必须调用DAO包下的CategoryDao.Java这个类中的findById(Integer id)这个方法,它返回的是一个Category对象,代码如下:Session session = HibernateSessionFactory.openSession();try String hql = "from Category c where c.id=?"Query query = session.createQuery(hql)

45、;query.setParameter(0, id);List<?> list = query.list();if (list.size() > 0) return (Category) list.get(0); catch (HibernateException e) e.printStackTrace(); finally HibernateSessionFactory.closeSession();return null;然后在CategoryAction.java中调用这个方法获得Category对象并将它封装在Session中,代码如下:Category categ

46、ory = categoryDao.findById(1);request.setAttribute("cat", category);return mapping.findForward("success");最后,在Jsp页面中将Session中的值取出来显示在页面中,该部分的主要代码如下:<c:forEach items="$cat.subCategorys" var="c2"><h3>$Name</h3><ul class="ul_left_list&qu

47、ot;> <c:forEach items="$c2.subCategorys" var="c3"> <li><a href="product.do?c2=$c2.id&c3=$c3.id">$Name</a></li> </c:forEach></ul></c:forEach> 以上代码中通过嵌套的<c:forEach></c:forEach>来取对象Category中的值,外面的<c:forE

48、ach></c:forEach>取的是电脑品牌的值,而内部的取得则是不同品牌下的不同系列的值,并且为每个系列值都赋予了一个链接,点击链接页面将跳转到该系列下的电脑列表中,页面效果如图5-3所示。图5-3 电脑列表页面在这系列下面的电脑列表的显示页面制作过程中比较耗时的是对列表的排序方式的编码和记录分页的实现11。首先对排序方式的实现做一下分析,在这里主要做了对名称和价格的升序和降序,主要实现代码如下:public ProductDao()this.initHashMap();private void initHashMap()hql.put(ORDER_BY_DEFAULT,

49、 "from Product where category_id = ?");hql.put(ORDER_BY_NAME_ASC, "from Product where category_id = ? order by productName");hql.put(ORDER_BY_NAME_DESC, "from Product where category_id = ? order by productName desc");hql.put(ORDER_BY_PRICE_DESC, "from Product where

50、 category_id = ? order by dangPrice desc");hql.put(ORDER_BY_PRICE_ASC, "from Product where category_id = ? order by dangPrice");public Map getOrderOptions()Map<Integer ,String> options = new TreeMap<Integer ,String>();options.put(ORDER_BY_DEFAULT, "product.order.defau

51、lt");options.put(ORDER_BY_NAME_ASC, ".asc");options.put(ORDER_BY_NAME_DESC, ".desc");options.put(ORDER_BY_PRICE_DESC, "product.order.price.desc");options.put(ORDER_BY_PRICE_ASC, "product.order.price.asc");return options

52、; 当调用类ProducntDao.java时,该类的构造函数便会被调用,从而调用了initHashMap()方法。因此,对应的排序值与其对应的Hql语句就被以键值对的形式绑定在HashMap中,而真正实现了排序的是findByCategoryId()这个方法,代码如下:public List findByCategoryId(int categoryId, int rowsPerPage, int page,int order) Session session = HibernateSessionFactory.openSession();Transaction tr=session.beg

53、inTransaction();String maphql=hql.get(order); /获得排序方式Query query = session.createQuery(maphql);query.setParameter(0, categoryId); /设置Hql中的category_id值,并执行Hql语句query.setMaxResults(rowsPerPage); /设置每页显示的最大条数 query.setFirstResult(page - 1) * rowsPerPage); /设置每页的第一条记录List list = query.list();return list

54、;返回的List被保存在一个名为ProductList的Session中,在页面上同过EL表达式输出从数据库取来的相对应的数据。其次是分页显示的实现,这个主要还是在取数据库数据时候做的操作。下面是实现这一功能的代码:ProductListForm f = (ProductListForm) form;Integer totalPages = productDao.getTotalPages(f.getC3(), ROWS_PER_PAGE);if(totalPages=0)f.setPage(0);List categoryList = categoryDao.findByParentId(f

55、.getC2();List productList = productDao.findByCategoryId(f.getC3(),ROWS_PER_PAGE, f.getPage(),f.getOrder();Map orderOptions = productDao.getOrderOptions();request.getSession().setAttribute("category_list", categoryList);request.getSession().setAttribute("product_list", productList

56、);request.getSession().setAttribute("total_pages", totalPages);request.getSession().setAttribute("order_option", orderOptions);这里先用ProductListForm把传过来的parent_id和category_id封装起来,再通过getTotalPages()方法,取得总的页面数。在方法体内部还有对页面页数的一个判断语句if (totalRows % rowsPerPages = 0),如果totalRows % rowsPe

57、rPages = 0整除则返回整除后的那个数字,如果不能整除就返回加1后的那个数字。getTotalPages()方法的代码如下:public int getTotalPages(Integer categoryId, int rowsPerPages) Session session = HibernateSessionFactory.openSession();Query query = session.createQuery("select count(*) from Product where category_id =?");query.setParameter(0,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论