聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 基于JSP技术的网上花店系统设计与实现毕业论文

基于JSP技术的网上花店系统设计与实现毕业论文

时间:2011-05-26 16:59:53    下载该word文档

毕业设计(论文)


摘要

随着网络技术的迅速发展,各种各样的网站已经深入到日常生活的各个角落,很多公司都建立的自己的网站,电子商务大行其道。以网站作为对外的展示窗口,进行内外信息交流,已成为大众的迫切需要。通过电子商务来完善对商品的采购给人们的生活带来了很大的方便,而且大大节约了成本和时间。随着人们生活质量的提高,在节假日的时候,鲜花点缀了人们的生活,然而购买鲜花的人越来越多,也越来越广,全国各地都有购买者。这么大的一个市场,如果只靠实物店是远远不够的,而且只能满足本地消费者的需求,却不能满足远处消费者的需求。为了迎合市场的需求,为了开拓市场提高自身在同行中的竞争力,开发一个网上鲜花销售系统是很有必要的。

本系统采用JSP开发技术,使用MyEclipse8.0作为平台,Tomcat6.2作为服务器,使用Oracle数据库作为系统数据库。系统主要实现的功能有:实现用户在线注册功能、登陆查询功能、订单、购物车功能、管理员后台登录功能等,是一个真正能够为消费者带来方便快捷的小型网上鲜花销售系统,具有可视性强、设计成本小,利润高,系统安全性好,维护方便快捷等优点。

关键词:电子商务; JSP;订单;购物车


Abstract

With the rapid development of network technology,a variety of sites have been deep into every corner of daily life,many companies have

established their own websites,e-commerce in great demand.Site as an external display window,the internal and external information exchange,has become an urgent need for the public.Through e-commerce to improve the procurement of goods to people’s live has brought great convenience,but also greatly reduce the cost and time.With improved quality of life,on holidays,when people’s lives flower embellishment, however,more and more people buying flowers,but also more widely,across the country have buyers.Such a large market,if only the physical store is not enough,and can only meet the needs of local consumers,but can not

meet the needs of distant consumers.In order to meet market demend,in order to open up the market to improve their competitive in the peer,to develop an online flower sales system is necessary.

This online flower shop system mainly realizes the function:to achieve on-line registration feature,visit queries,orders,shopping cart functions,is a truely convenient for consumers of small flowers online marketing system.

The system uses JSP development technologies,the use of MyEclipse8.0 as a platform,Tmocat6.2 as a server,Java language program for connecting to the database,using Oracle database as the system database.The biggest advantages of this system is the beautiful interface,strong visibility,design cost is small,quick profits,system security,safeguard and convenient.

Keywords e-commerce JSP orders shopping cart


1 绪论

1.1 引言

网上商店也被称为电子商店,是电子商务的一个重要组成部分。网上商店作为电子商务的一种具体形式,在Internet上已经非常普及。由于充分利用和结合了最新技术,网上商店具有传统商店无可比拟的优势,如经营成本低,受地域限制和时间限制少,市场扩张力极大等。目前Internet上的网上上商店每天以惊人的速度增加。网上购物现在越来越称为年轻人的购物首选,足不出门就能购买到自己称心如意的商品,鲜花更是人们的首选,百忙之中你可能无法亲自去花店挑选你想要的花,而我们这个而系统就是借助发达的网络和现代的科学技术可以让你可以打开网页就能完成电话的订购。进入21世纪,网络信息发布已经逐步替代了传统的媒体发布,网上发布的信息更广,持久性更好。花店的信息如果在网上发布更有利于花店的业务发展。

网上花店系统就是为实现客户通过上网,对鲜花信息的浏览、检索、订购,以及鲜花销售商对客户信息、鲜花信息的管理所开发的网络应用软件。该系统能够较好的满足网上花店客户的基本要求,具有较高的使用价值。

1.2 目的和意义

21世纪是个信息高速发达的时代,尤其以网络的高速发展为代表。鲜花的买卖业务与我们的日常生活密切相关,长辈的生日,节日的祝福及问候,对心爱的人表达爱意,看望病号等等的时候。越来越多的人选择购买一束鲜花来表达自己的情谊!本系统正是利用了网络这个很好的平台为顾客提供方便,不用出门,只需打开电脑上网就可以很方便的完成鲜花的选购,做到足不出户就可以完成一切。

基于JSP+JavaBean的网上花店的总体设计目标是为注册用户提供方便的网上订购鲜花的功能。本系统分为前台和后台管理两部分,注册用户登录前台后,可以浏览或购买网上花店中的所有商品,购买商品后还可以得到相应的积分奖励,并且可以在网站中留言。管理员通过后台登录后可以对系统中的商品以及用户的注册信息和用户的留言进行管理。为了满足上面提出的功能要求,基于JSP语言的网上花店需要达到以下目标:

1)支持用户注册和登录。

2)用户登录后可以根据价格、类型和其他关键词进行商品查询。

3)用户可以购买商品,也可在提交之前取消购买这些商品。

4)支持用户在线留言。

5)支持管理员通过后台登录,并对系统中的各种信息进行维护。

1.3 系统开发环境及工具

本系统采用MyEclipse8.5Tomcat6.0服务器为主要开发工具,Oracle作为管理系统数据的数据库,整个系统符合MVC模式,MVC模式要求对应用分层,虽然要做额外的工作,但产品的结构清晰,可扩展性强,产品的应用可通过MVC模式得到更好的体现,而这恰恰是电子银行系统所需要的。电子银行系统的功能会随着客户的要求不断的扩展,因此这个系统需要不断的进行功能的升级和修改。如果采用传统的JSP+JavaBean的三层模式进行开发,将使程序的业务逻辑层和表示层之间耦合过紧,不利于日后的升级和扩展。

通过该毕业设计可以看出,在进行设计之前,设计者既要考虑系统的需求,又要兼顾运行的效率,以及今后系统的功能扩展等。使用MVC模式开发系统,这使得本系统具有运行效率好、扩展能力强、技术规范等特点。

1.4 系统开发目标

网上商店是一种新兴的销售方式,优势在于经营成本低,只要在任何可以上网的地方就可以随时随地订购你所想要的花朵传情达意,但是也有弊端,就是网站需要经营的维护等等存在着一些问题,只有解决好这些问题网上花店才会更加普及起来。

理论系统功能设计目标如下:

(1) 实用性强:我们努力使系统符合实际操作流程的习惯,并尽量减少用户的输入,易学易用的友好的用户界面,满足各层次的用户使用的需求;

(2) 先进的程序结构:使用当代前卫的软件编程,能延长其生命周期,易于维护与管理;

(3) 安全可靠性高:后台维护功能齐全,根据平台在各个阶段不同的使用情况,管理人员可以设置相应的操作权限,增加系统注册,分配各个栏目的管理权限,实现系统的维护,保证系统的安全、可靠;

(4) 使用模块化设计的方法:使系统具有良好的可扩充性,以适应其不同阶段的发展需要,便于后来者分析、维护;

(5) 操作简单,维护方便:每个子系统都具有相对独立的系统维护功能


2 开发工具和开发环境简介

2.1 Java Server Page简介

Java Server Page或简称为JSP是由Sun公司在Java语言上开发出来的一种动态网页制作技术,它提供一种建立动态网页的简单制作方法,并为开发人员提供了一个Server端框架,基于这个框架,开发人员可以综合使用HTMLXMLJAVA语言以及其它脚本语言,灵活快速的创建和维护动态网页,特别是目前的商业系统。作为JavaTM技术的一部分,JSP能够快速的开发出基于所有Web服务器和应用服务器环境,独立于平台的应用程序,而且具有非常强的可伸缩性。同时,JSP把用户界面从系统内容中分离出来,使得设计人员能够在不改变底层动态内容的前提下改变祖国网页布局。

这样跨平台的特性已包含了目前大部分网站服务器配置环境,再加上它的语法写作方式可媲美ASP般的易学易懂,而且在网络安全技术方面甚至已经超越ASP技术。所以,相信在很快的时间内极有可能取代现有网页编译技术,而成为商业网站的新标准。在本节中我们将会讨论JSP技术的特性,让您更加了解这项新技术。

2.2 JSP技术的发展现状

JSP技术被设计成为一个开放的、可扩展的及用于创建动态Web页面的标准。开发人员可以使用JSP技术来创建具有可移植性的Web应用程序。开发结果可以在各种Web服务器和Web应用服务器上运行,而不用考虑具体的开发平台或开发工具。

为了给动态Web页面提供一个开放的工业标准,JSP规范的1.0版本的提出,是向这个方向迈出的第一步。在1.0版本中,其基础由核心标记集、隐含对象以及开始创建动态Web页面所需的基本功能构成。已经有许多Web服务器,Web应用服务器和工具开发商为他们的产品添加了对JSP1.0的支持。

Jsp 1.0 版本中加入了一些新的特色,特别是加入了XML的语法和输出缓冲等功能,以解决重定向的错误,而同时一些在0.92版本中的功能被取消了。

随着XML 越来越热门,在不久的将来XML将成为主流。因此,在JSP1.0的语法中开始了对XML的支持,并希望能够与其兼容。不过,在JSP1.0版本中对XML的支持还不是必须的,但在将来的JSP1.1版本中对它的支持将成为必然。

JSP1.1JSP1.0两个版本基本上同时开发的。但是,JSP1.1需要新的Servlet API的支持,所以JSP1.1将会等新的Servlet API 公布之后才会推出。除了JSP标准的语法标记之外, JSP1.1将会提供有可扩展的自定义语法标记机制,这样使用者就可以定义自己的语法标记,并且可以在任何支持JSP1.1的引擎上运行它们,而且供应商们也会有选择地扩展或扩充JSP规范中的功能。JSP引擎能够强有力地支持多种脚本语言和对象模型。在不断扩充和使用JSP技术同时。也将保持JSP技术对平台和服务器的可移植性。

2.3 JSP技术的特点

JSP技术有以下几个显著特点:

2.3.1 将内容的生成和显示进行分离

使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容(内容是根据请求来变化的,例如请求帐户信息或者特定的一瓶酒的价格)。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Beans中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。

在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTMLWeb浏览器的完全可用性。

2.3.2 强调可重用的组件

绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者Enterprise JavaBeansTM组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。

2.3.3 采用标识简化页面开发

Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。

通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。

JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及Java 2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。

由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java ServletJSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。

作为Java平台的一部分,JSP拥有Java编程语言一次编写,各处运行的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。

当与Java 2平台,企业版(J2EE)Enterprise JavaBean技术整合时,JSP页面将提供企业级的扩展性和性能,这对于在虚拟企业中部署基于Web的应用是必需的。

2.3.4 适应平台

几乎所有平台都支持JavaJSPJavaBeans几乎可以在所有平台下通行无阻。从一个平台移植到另外一个平台,JSPJavaBeans甚至不用重新编译,因为Java字节码都是标准的与平台无关的。

2.3.5 数据库连接

Java中连接数据库的技术是JDBCJava程序通过JDBC驱动程序与数据库相连,执行查询、提取数据等操作。Sun公司还开发了JDBCODBC bridge,利用此技术Java程序可以访问带有ODBC驱动程序的数据库,目前大多数数据库系统都带有ODBC驱动程序,所以Java程序能访问诸如OracleSybaseMS SQL ServerMS Access等数据库。

此外,通过开发标识库,JSP技术可以进一步扩展。第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来进行工作。

JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且能扩展到支持企业级的分布式应用中。作为采用Java技术家族的一部分,以及Java 2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。

由于JSP页面的内置脚本语言是基于Java的,而且所有的JSP页面都被编译成为Java Servlets,所以JSP页面具有Java技术的所有好处,包括健壮的存储管理和安全性。作为Java平台的一部分,JSP拥有Java编程语言一次编写,各处运行的特点。

利用JSP技术,动态信息由JSP页面来表现,JSP页面由安装在Web服务器或者使用JSP的应用服务器 上的JSP引擎执行。JSP引擎接受客户端对JSP页面的请求,并且生成JSP页面作为对客户端的响应。  

JSP页面通常被编译成为Java Servlets,这是一个标准的Java扩展。页面开发人员能够访问全部的Java应用环境,以利用Java技术的扩展性和可移植性。当JSP页面第一次被调用时,如果它还不存在,就会被编译成为一个Java Servlets类,并且存储在服务器的内存中。这就使得在接下来的对该页面的调用中,服务器会有非常快的响应 

JSP页面可以包含在多种不同的应用体系结构或者模型中,可以用于由不同协议、组件和格式所组成的联合体中。基于JSP的动态信息发布技术是一个开放的、可扩展的建立动态Web页面的标准。不论采用什么创建工具,开发人员都可以使用JSP页面来创建可移植的Web应用,在不同的Web应用服务器上运行。

2.4 Eclipse简介

Eclipse最初是IBM公司的一个软件产品。200111月,其1.0版本正式发布。刚开始的时候,Eclipse的声誉并不好,受到业界的很多批评。到了20033月,Eclipse 2.1版本发布的时候,引起了业界的轰动。下载Eclipse的人峰拥而至,甚至导致了服务器拥塞。目前IBM已将Eclipse作为一个开源项目捐给了开源组织Eclipse.orgEclipse具有出色而有独创的平台特性,吸引了众多公司加入它的平台。

Eclipse平台的主要任务是为开发者提供能够使用各种工具无缝集成的机制和需要遵守的规则。这些机制通过具有良好的定义的应用程序接口、类和方法表现出来。本质上,Eclipse是一个具有基本微内核、开放的和可扩展的体系结构。

Eclipse是建立在插件机制上的。插件是Eclipse平台功能的最小单元。它可以开发和提交。所有的Eclipse平台功能都由插件实现,除了平台运行的小内核。插件机制可以发现集成和运行插件。它可以划分Eclipse平台本身。不同的插件提供不同的工作空间和工作台,甚至平台运行时本身也有自己的插件。

2.5 系统开发语言JAVA介绍

Java(tm)是由美国升阳电脑公司(Sun Microsystems, Inc.)所发展出的第一种能在国际互联网络(Internet)上面具有「硬件/软件中立性」交互能力的程序语言。Java一推出即引起世界各种媒体的注意与热烈参与讨论, Time Business WeeklyCNN等,可见其功能及魅力,事实上,以Java的功能,势必在信息界掀起另一番高潮,对于网络的发展,又将迈入另一个新的纪元。

Java是一种简单的、面象对象的、分布式的、解释的、键壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的语言。

简单:Java提供了一个功能强大语言的所有功能,但几乎没有一点含混特征。C++安全性不好,但CC++被大家接受,所以Java设计成C++形式,让大家很容易学习。Java去掉了C++语言的许多功能,让Java的语言功能很精炼,并增加了一些很有用的功能,如自动收集碎片。 Java去掉了以下几个CC++功能:指针运算、结构、typedefs#define、需要释放内存。这将减少了平常出错的50%。而且,Java很小,整个解释器只需215KRAM

面象对象:Java实现了C++的基本面象对象技术并有一些增强,(为了语言简单,删除了一些功能)。Java处理数据方式和用对象接口处理对象数据方式一样。

分布式:Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTPFTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。

健壮:Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自已操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能。这些功能特征大大提高了开发Java应用程序的周期。

Java提供:Null指针检测、数组边界检测、异常出口、Byte code校验、结构中立,另外,为了建立Java作为网络的一个整体,Java将它的程序编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能执行这种中间代码。现在,Java运行系统有Solaris2.4(SPARC),Win32系统(Windows95Windows NT)Java源程序被编译成一种高层次的与机器无关的byte-code格式语言,这种语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行。

安全:Java的安全是两方面的。一方面,在Java语言里,象指针和释放内存等C++功能被删除,避免了非法内存操作。二方面,当Java用来创建浏览器时,语言功能和一些浏览器本身提供的功能结合起来,使它更安全。Java语言在你的机器上执行前,要经过很多次的测试。它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。

Byte-code校验:如果byte-code通过代码校验,没有返回错误,我们可知道:代码没有堆栈上溢出和下溢出;所有操作代码参数类型都是正确的 ;没有发生非法数据转换,如将整数转换成指针;访问对象操作是合法的,publicprivateprotected

类装载:Class Loader通过将本机类与网络资源类的名称分开,来保持安全性。因为调入类时总要经过检查,这样避免了Trojan马程序的出现。从网络上下载的类被调进一个与源相关的私有的名字域。当一个私有类访问另一个类时,build-in(本机类)首先被检查,然后检查相关的类。这样就避免了破坏本机类情况的出现。

可移植的:除了结构中立的可移植性外,Java还实现了各平台上移植,以方便程序的开发。IntsJava里永远是整数,32位整数。而且,Java建立在一个虚拟的Windows系统上,所以很容易地在UNIX,PCMac环境下实现。

解释的:Java解释器(运行系统)能直接运行目标代码指令。链接程序通常比编译程序所需资源少,所以程序员可以在创建源程序上花上更多的时间。

高性能:如果解释器速度不慢,Java可以在运行时直接将目标代码翻译成机器指令。Sun用直接解释器一秒钟内可调用300,000个过程。翻译目标代码的速度与C/C++的性能没什么区别。

多线程:Java提供的多线程功能使得在一个程序里可同时执行多个小任务。线程--有时也称小进程--是一个大进程里分出来的小的独立的进程。因为Java实现的多线程技术,所以比CC++更键壮。多线程带来的更大的好处是更好的交互性能和实时控制性能。当然实时控制性能还取决于系统本身(UNIX,Windows,Macintosh),在开发难易程度和性能上都比单线程要好。何用过当前浏览器的人,都感觉为调一副图片而等待是一件很烦恼的事情。在Java里,你可用一个单线程来调一副图片,而你可以访问HTML里的其它信息而不必等它。

动态性:Java尽可能地利用了面象对象技术的优点。Java并不试图在运行前将所有模块全部连接起来。一个新的或升级的库函数并不需要更改源程序就能正确运行。

Java还简化了使用一个升级的或全新的协议的方法。如果你的系统运行Java程时遇到了不知怎样处理的程序,没关系,Java能自动下载。

2.6 Oracle数据库介绍

2.6.1 概论

Oracle8i是一个面向Internet计算环境的数据库,它改变了信息管理和访问的方式。它将新的特性融入到了传统的Oracle服务器之中,从而成为一个面向Web信息管理的数据库。Oracle8i支持Web高级应用所需要的多媒体数据,支持Web繁忙站点不断增长的负载需求。是唯一一个拥有集成式Web信息管理工具的数据库。Oracle正在推动Java成为下一代应用的标准,它在各个层次,包括Oracle8i服务器内的Java VM,均支持JavaOracle8i将强大的新型功能引入到了联机事务处理(OLTP)和数据仓库应用之中。它还对Oracle数据服务器的几乎所有方面给予了增强,全面改进了质量、可用性、性能、可管理性、多媒体数据类型支持和复制功能。

2.6.2 特点

1 操作的简易性

Oracle8i从根本上改进了Oracle应用的安装、配置和可管理性。Oracle通用安装程序(Universal Installer)和数据库配置助手(Database Configuration Assistant)都是基于Java的应用,它们通过探测硬件特征和提示信息来安装、预调整和配置Oracle8数据库环境。Oracle通用安装程序是针对簇的,它是在簇的所有节点上进行软件分布和安装的。

2 可扩展性

Oracle8i网络计算体系结构(Network Computing Architecture NCA)引入了一个开放的、易于使用的方法,用来扩展具有多媒体数据类型(称为插件cartridge)的数据库。Oracle8i为数据插件的开发人员提供了一组全面的API。它允许合作伙伴开发的数据插件具有与Oracle开发的数据插件相同的内部访问机制。合作开发商可以开发出高度客户化的数据插件,并满足日益增多的多媒体应用在性能上的要求。

3 安全性改进

Oracle8i引入了细粒度化的访问控制,并改进了多层环境的安全模式。细粒度化的访问控制使用参数驱动的、可扩展的应用上下文关系,从而允许应用根据用户属性控制用户的访问。中间层特别是Web服务器或应用服务器,常常可能设置在防火墙上或防火墙外,为此,Oracle8i提供了这样一种能力,即限制一个中间层可以连接哪些用户,以及将中间层作为一个特殊用户进行审计。

4 复制功能

Oracle8i高级复制(Advanced Replication)功能包含重要的性能改进和重要的新功能,其目标特别针对正在部署办公前台(Front-office)自动化应用的用户。

5 性能改进

Oracle8i继续将更多的复制代码迁移到数据库内核之中,以进一步提高复制性能。内部包能够安全地防止用户的干涉,而不至因此而需要重新生成。快照刷新性能也进行了改进。当状态能够充分利用内部包所提供的性能优势时,“拉状态的性能就会大大提高,因为它大大减少了所需回程(round-trip)的数目。这种优化对大型刷新群组的用户特别有益。

6 自动复制

Oracle8i有许多特性被设计用于帮助用户实现前台办公自动化应用,特别是繁杂(mass)的分布式应用。快照刷新群组模板、在Oracle复制管理器中附加的监视能力,以及脱机安装都允许管理员集中定义和管理数百个远程快照站点。快照刷新组模板允许在主侧(master-side)为远程快照进行定义。

7 对象关系数据库

对象类型的数据现在可以是分区表的列,并且可以使用QL*Loader来装载。并行查询可以利用对象类型或对象表在表上实施操作。在使用对象类型和LOB列的时候,许多方面都还有性能上的提高。在CLOBNCLOB列中还支持变宽字符集。同时,对客户方对象Cache也进行了改进,允许跟踪和调试,以及支持优化加锁技术。

8 网络功能

Oracle8i提供了先进的网络特性和管理能力,并引入了Oracle8i安全目录(Oracle Secure Directory-OSD)服务。网络管理通过自动配置Net8,以及将管理功能集成至Oracle企业管理器从而得到大大简化。

Oracle安全目录是一个遵循LDAPv3的层次数据仓储,可用来存储企业用户信息,包括X.509认证(certificate)、企业角色和Oracle钱夹(Oracle Wallet)。联机模式管理增强了模式,扩展已经扩展的预定义目录模式。OSD支持授权访问和数据加密实现了安全接口层(SSL)OSD还与Oracle家族产品紧密集成,这些产品包括Oracle应用服务器(Application Server)Internet消息传输(Internet Messaging)

Oracle8i连同Net8允许站点最大限度地利用现有应用的投资,同时开拓了Internet的主要标准,如JavaIIOPSSL

9 其他增强的特性

Oracle8i在其他许多方面都进行了改进。对地区语言支持(NLS)ANALYZE性能和功能、空间管理,以及诊断工具也做了改进。

10 版本迁移与互操作性

简单和快速的迁移脚本允许组织机构将版本8.0.x轻而易举地升级为Oracle8i。用于迁移的实用程序还允许版本7.17.27.3直接迁移为Oracle8iOracle8i还提供一个参数COMPATIBILITY,该参数可设置为以前的版本,从而禁止任何新的功能。另外,还支持输入(input)和输出(export)功能,该功能用于将以前版本中的数据移到Oracle8i中。

2.6.3 存储结构

1 物理结构

ORACLE数据库在物理上是存储于硬盘的各种文件。它是活动的,可扩充的,随着数据的添加和应用程序的增大而变化。

下图为ORACLE数据库扩充前后在硬盘上存储结构的示意图:

2 逻辑结构

ORACLE数据库在逻辑上是由许多表空间构成。主要分为系统表空间和非系统表空间。非系统表空间内存储着各项应用的数 据、索引、程序等相关信息。我们准备上马一个较大的ORACLE应用系统时,应该创建它所独占的表空间,同时定义物理文件的存放路径和所占硬盘的大小。

下图为ORACLE数据库逻辑结构与物理结构的对照关系:

2.6.4 分布式数据库管理介绍

1 原理

物理上存放于网络的多个ORACLE数据库,逻辑上可以看成一个单个的大数据库。用户可以通过网络对异地数据库中的数据 同时进行存取,而服务器之间的协同处理对于工作站用户及应用程序而言是完全透明的:开发人员无需关心网络的连接细节、无需关心数据在网络接点中的具体分布情况、也无需关心服务器之间的协调工作过程。

下图为ORACLE分布式数据库原理示意图:

2 过程

由网络相连的两个ORACLE数据库之间通过数据库链接(DB-LINKS)建立访问机制,相当于一方以另一方的某用户远程登录所做 的操作。但ORACLE采用的一些高级管理方法,如同义词(SYNONME)等使我们觉察不到这个过程,似乎远端的数据就在本地。

数据库复制技术有:实时复制、定时复制、储存转发复制。对复制的力度而言,有整个数据库表的制,表中部分行的复制。在复制的过程中,有自动冲突检测和解决的手段。


3 网上花店系统分析

3.1 系统的功能分

为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件(或数据库)。模块是数据说明、可执行语句等程序设计对象的集合,它是单独命名的而且可通过名字来访问。模块化就是把程序化分成若干个模块,每个模块完成一个子功能,把这些模块集起来组成一个整体,可以完成指定的满足问题的要求。

首先对现有系统进行分析,现有系统是信息的重要来源。分析已有系统的功能和实现,从而确定新系统的设计目标和模型。由于条件有限,调研主要是在网上进行。即通过在网上已有的在线考试系统和了解其具备的功能。

1)从用户的角度

从用户的角度通过注册后可以浏览页面进行选花订花,把自己喜欢的商品添加到购物车中,并生成订单。同时可以通过页面进行商品的查询,使用户更加方便的查询到自己需要的商品。

2)从管理员的角度

从管理员的角度可以通过登入管理员的页面进行对用户的管理,添加和删除用 户,并对用户的订单进行管理和商品进行管

3.2 系统可行性研究

可行性研究阶段的主要任务是在系统初步调查的基础上,对新系统是否能够实现和值得实现等问题做出判断,避免在花费了大量的人力和物力之后才发现系统不能实现或新系统投入使用后没有任何实际意义而引起的浪费,对新系统可行性的分析,要求用最小的代价在尽量短的时间内确定系统是否可行。

3.2.1 技术可行性分析

网上花店系统的开发是一项复杂的系统工程。为了保证系统开发成功,必须采用工程化的系统开发方法,并研究出一些符合工程化标准的开发方法。这些方法旨在指导开发者进行工程化的系统开发,从而加快系统开发的速度,保证质量以及降低开发成本。工程化的系统开发方法确实在开发实践中取得了一定的效果。此次开发使用JSP作为开发语言,采用Servlet技术,Tomcat5.0作为Web服务器。

3.2.2 运行可行性分析

随着计算机知识的普及和推广,越来越多的人掌握了计算机的基本使用方法和技能。随着Internet的发展,用户对于网络、WINDOWS等环境下的软件使用比较熟悉,对于新鲜事物,用户表现出极大的兴趣和热情。

3.2.3 经济可行性分析

网上花店系统给人们带来了方便同时给商家带来了成本的节省,成为一种全新的鲜花销售模式,商家可以免去店面的成本和雇佣人员的成本,更大限度的做到还利益于消费者,所以构建一个网上花店系统在经济上是完全可行的。

就本系统而言,随着电脑的普及,为消费者在网络上进行购物提供有利的条件。而一个网上花店系统可以为消费者提供软件条件,这样消费者便可以足不出户的买商品了。商家可以从中获得利润,两全其美。

通过以上的分析,开发网上花店系统是完全可行的。


4 网上花店信息管理系统概要设计

4.1 系统概述

网上花店信息系统以网络作为平台,使客户足不出户就可以购买到自己需要鲜花。购鲜花过程方便、快捷,可靠性、安全性高。同时对于商家,可以通过该平台对客户及订单信息进行有效管理,对鲜花信息也做到即使更新,这样更利于商家为客户服务。

4.2 系统功能模块设计

网站整体框架图:

网上鲜花店系统框架图

1 用户功能模块

为了能够方便、快捷、有效的完成鲜花购买及送货上门,客户首次登录网上鲜花店,都需要注册个人基本信息,然后通过个人账号及密码登录系统。老用户可直接通过账号及密码登录。

登录系统后,用户可通过主界面,浏览各类鲜花及其详细情况,或者,直接通过查询系统,寻找自己需要的鲜花信息。最终确定需要购买的鲜花后,便可以方便、快捷的选择自己需要的鲜花放入系统设定的个人购物车中,也可以随时放弃购物车中选中的鲜花。

最后,客户确定购物车中选定的鲜花,鲜花数量等购买信息,便可提交给系统。之后只需在家中等待网上花店的配送中心将鲜花送货上门。

2 管理员功能模块

通过管理员身份登陆系统,可以查看并且管理系统内所有注册用户的个人信息。包括对个人信息的查询、修改、删除等操作。例如,当选择“查看所有客户信息”时,将返回所有系统注册用户的信息,管理员可以通过点击“修改”,查看并修改某注册用户的信息。若点击“删除”,则将删除相应用户的所有信息。若只想查看某一位客户的信息,也可以通过“客户信息查询”,对客户的姓名,注册ID,电话,E-mail等信息进行查询,得到客户全部信息。

对于系统的鲜花信息,管理员可以选择“鲜花信息管理”功能,通过增加、修改、删除等操作对网站的鲜花信息进行管理。并且,管理员可以随时通过鲜花信息查询,了解目前网站的鲜花信息情况。

对于客户订单信息,管理员可以选择“订单信息管理”,对所有订单进行管理操作。同时,管理员也可以通过查询订购客户名,鲜花名,订单号,未受理订单,已受理订单等信息,查看某一条或某一类订单的信息及受理情况。

4.3 数据库表设计

本系统包括十个表,客户表users,管理员表admin,产品类别表sort,商品表goods

厂商表produce,厂商产品明细表produceDetails,订单表orders,订单明细表orderDetails,留言表leaveLanguage,安全日志表safelog

各数据库表详细情况如下:

1 客户表users

主要用于网站的用户注册和登录检查。其中userId字段是该表的主键,不允许插入重复值。

1

2 管理员表admin

主要用户管理登陆系统进行用户信息、鲜花信息以及用户购物信息的管理。其中admin字段是该表的主键,不允许插入重复值。

2

3 产品类别表sort

主要用于产品的分类。其中sortId为主键,不允许重复。

3

4 商品表goods

主要用户记录商品信息,以便用户快捷的查找所需要的商品品种。其中主键是goodsId

4

5 厂商表produce

主要记录厂商的信息,其中prodeceId是主键,不能重复。

5

6 厂商产品明细表produceDetail

主要是利用产品Id查询产品的具体详细信息。其中produceId是主键。

6

7 订单表orders

主要是记录订单信息。其中ordersId为主键,不可重复。

7

8 订单明细表ordersDetails

主要记录订单的详细信息。其中ordersId是主键。

8

9 留言表leaveLanguage

主要记录用户的留言信息,其中leaveLanguageId为主键。

9

10 安全日志表safelog

主要是系统用来记录用户的操作,以防出现安全方面的问题时有据可查询。其中logId为主键。

10


5 系统详细设计

本系统采用MyEclipseTomcat服务器为主要开发工具,Oracle作为管理系统数据的数据库。整个系统采用Struts框架结构,符合MVC模式。MVC模式要求对应用分层,虽然要做额外的工作,但产品的结构清晰,可扩展性强、产品的应用通过MVC模式可以得到更好地体现。这恰恰是网上花店系统所需要的。网上花店系统的功能会随着客户的要求不断的扩展,因此这个系统需要不断的进行功能的升级和修改。

5.1 系统的主要功能及具体的模块划分

5.1.1 用户注册页面

用户登入系统后,必须先注册一个帐户,通过输入其中的必要的信息在数据库中建立一个用户,然后在主页面输入相应的用户名和密码便能开始商品的选购。界面如图5-1所示

5-1

用户注册页面功能实现的代码

public class AddUserInfo extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

this.doPost(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

String usersName = req.getParameter("usersName");//用户名

String usersPass = req.getParameter("usersPass");//密码

String usersRepass = req.getParameter("usersRepass");//密码确认

String usersPassQuestion = req.getParameter("usersPassQuestion");//密码提问

String usersPassReply = req.getParameter("usersPassReply");//密码答案

String usersTrueName = req.getParameter("usersTrueName");//真实姓名

String usersAddress = req.getParameter("usersAddress");//联系地址

String usersPhone = req.getParameter("usersPhone");//联系电话

String usersE_mail = req.getParameter("usersE_mail");//电子邮箱

if(addUser(usersName, usersPass, usersRepass, usersPassQuestion, usersPassReply, usersTrueName, usersAddress, usersPhone, usersE_mail)){

req.getRequestDispatcher("addUserInfo.jsp").forward(req, resp);

}

}

public boolean addUser(String usersName,String usersPass,String usersRepass,String usersPassQuestion

,String usersPassReply,String usersTrueName,String usersAddress,String usersPhone,String usersE_mail){

try

{

Connection con = DBConnection.getConnection();

PreparedStatement stm=con.prepareStatement("insert into fusers values(usersseq.nextval,?,?,?,?,?,?,?,?,?)");

stm.setString(1,usersName);

stm.setString(2,usersPass);

stm.setString(3,usersRepass);

stm.setString(4,usersPassQuestion);

stm.setString(5,usersPassReply);

stm.setString(6,usersTrueName);

stm.setString(7,usersAddress);

stm.setString(8,usersPhone);

stm.setString(9,usersE_mail);

5.1.2 用户浏览商品页面

通过输入用户名和密码进入鲜花选购页面,在此处可以进行鲜花的选购,同时可以通过鲜花的种类和鲜花的价钱对鲜花进行分类的查询,是商品一目了然的呈现在眼前,同时可以进行高级查询,更加方便按照消费者自己的喜好进行商品的选择。界面如图5-2所示

5-2

用户浏览商品主要代码:

ProduceDetailsClass produceDetail;

List arraylist = new List();

try

{

Statement statement = con.createStatement();//设定状态

ResultSet resultset = statement.executeQuery("select * from produceDetails where produceId='" + i + "'");

while(resultset.next())

{

produceDetail = new ProduceDetailsClass();

int i1=resultset.getInt(1);

String s=resultset.getString(2);

int i2=resultset.getInt(3);

int i3=resultset.getInt(4);

produceDetail.setProduceId(i1);//设定商品ID

produceDetail.setProduceName(s);//设定商品名

produceDetail.setSortId(i2);//设定存储序号

produceDetail.setGoodsId(i3);// 设定商品ID

arraylist.add(produceDetail);//商品细节

}

5.1.3 商品选购页面

点击每幅商品的图片便可以进入到商品的页面,上面会有对商品的具体介绍,会给消费者一些选购的建议。方便消费者的选择。界面如图5-3所示

5-3

商品选购页面功能实现的代码:

public class ProduceDetailsClass implements java.io.Serializable

{

private int produceId;

private String produceName;//商品名称

private int sortId;

private int goodsId; public int getProduceId() {

return produceId;//商品编号

}

public String getProduceName() {

return produceName;

}

public int getSortId() {

return sortId;//物品ID

}

public int getGoodsId() {

return goodsId;

}

public void setProduceId(int produceId) {

this.produceId = produceId;//设定商品ID

}

public void setProduceName(String produceName) {

this.produceName = produceName;

}

public void setSortId(int sortId) {

this.sortId = sortId;

}

public void setGoodsId(int goodsId) {

this.goodsId = goodsId;

}

}

5.1.4 购物车页面

在选购商品结束后可以把中意的商品添加到自己的购物车中,同时可以产生订单也可以继续购物去选择下一个商品。界面如图5-4所示

5-4

购物车功能实现的主要代码:

public class Cart

{

private String name;//用户的标识

private HashMap items;//购物车中的物品

……

}

public Cart()

{

try

{

con = DBConnection.getConnection();

}

catch (Exception e)

{

e.printStackTrace();

……

totalPrice=calPrice();

orderID=genOrder(s1,s2,s3,s4);

saveItems();

}

public int genOrder(String s1,String s2)//生成订单并返回订单号

{……

}

/*public float calPrice()//计算当前购物车内物品的总价格

{

总价格在Cart.jsp中计算

}*/

public float calPrice(float totalPrice)//计算当前购物车内物品的总价格

{

return this.totalPrice=totalPrice;

}

public void addOrder(String orderName,String totalPrice)

{

try

{

……

}

}

public void saveItems(int i1,String s3,String s4,int i2)//存储当前订单物品明细

5.1.5 高级查询页面

在高级查询模块中可以根据关键字,商品分类,价格范围,商品名称界面如图5-5所示

5-5

高级查询功能实现主要代码

{

try

{

con = DBConnection.getConnection();//数据库连接

}

catch (Exception e)

{

e.printStackTrace();

……

PreparedStatement stm=con.prepareStatement("insert into sort values(?)"); stm.setString(1,sort.getSortName());//准备状态

{ try

5.1.6 后台管理员登录页面

在后台管理员模块中,管理员可以对用户的基本信息、用户的订单、用户的留言以及网站的日常维护进行管理。界面如图5-6所示

5-6

后台管理员登录功能实现的主要代码:

public AdminClass getAdminInfo()throws Exception

{

AdminClass admin1=new AdminClass();

try

{

PreparedStatement stat=con.prepareStatement("select * from admin where adminName=? and adminPass=?");

stat.setString(1,admin.getAdminName());//管理员姓名

stat.setString(2,admin.getAdminPass());//管理员密码

ResultSet result=stat.executeQuery();

while(result.next())

……

通过努力,网上花店管理系统基本完成了。系统实现了用户注册、登陆,鲜花图浏览,鲜图检索,鲜花订购,管理员对客户信息、鲜花信息及订单信息的管理等基本功能。通过本系统的开发,本人感受颇深,受益匪浅,获得了许多宝贵的软件开发经验,对将来的学习和工作都有极大的帮助。

但同时,本系统的缺陷也是明显的,如安全性,效率问题等等。由于个人经验及能力尚欠不足,系统在技术实现上还有很多不尽如人意的地方。比如,一开始就编码,没有很好的做好概要设计,加重了代码修改及维护的工作量;只考虑技术的实现,对美工考虑不足,页面间的逻辑关系有时不是很合理等,在已经完成的程序中,也存在许多不尽人意的算法,也没有统一优化,系统有待进一步改善。


致谢

本次毕业设计之所以能够顺利完成,我要感谢导师对我的毕业论文的指导,使我能够顺利完成我的学士学位论文,以及在这期间所有无私帮助过我的老师,同学,朋友。从他们身上,我学到了专业、先进的软件开发技术,使我的软件开发水平和经验有了很大的提高。同时,他们开阔的视野,渊博的知识,丰富的经验,严谨的工作作风也深深影响了我。这对于我的将来,无论在学习上,还是在工作中,都是一笔宝贵的财富。

另外,我还要感谢我的母校徐州工程学院,以及在大学三年生活中给予我关心和帮助的老师和同学,是他们教会了我专业的知识和做人的道理。通过这次毕业设计我还明白了作为一名计算机专业的大学毕业生,我们要会的不仅仅是编写代码,更重要的是要有整体把握系统设计的能力。我会在以后的工作和学习中不断完善自己,为我最热爱的母校争光,为自己翻开辉煌的新篇章。


参考文献

[1] 孙卫琴,李洪成.Tomcat Java Web 开发技术详解》.电子工业出版社,20036

[2] BruceEckel.Java编程思想》. 机械工业出版社,200310

[3] Thomas Connolly Carolyn Begg. Database Systems [M].北京:电子工业出版社,20047

[4] FLANAGAN.Java技术手册》. 中国电力出版社,20026

[5] Lee Anne Phillips.《巧学活用HTML4.电子工业出版社,20048

[6] Brown.JSP编程指南(第二版)》. 电子工业出版社 ,20033

[7] 萨师煊,王珊.《数据库系统概论》.高等教育出版社,20022

[8] 耿祥义,张跃平.JSP实用教程》. 清华大学出版社,200351

[9] 朱红,司光亚.JSP Web编程指南》.电子工业出版社, 20019

[10]邱加永,卞志城,郑经煜.JSP基础与案例开发详解》.清华大学出版社,20098

[11] Jason Price 冯锐 由渊霞 Oracle DataBase 10g SQL开发指南 清华大学出版社 20055


附录1

1.用户注册页面功能实现的代码

public class AddUserInfo extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

this.doPost(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

String usersName = req.getParameter("usersName");

String usersPass = req.getParameter("usersPass");

String usersRepass = req.getParameter("usersRepass");

String usersPassQuestion = req.getParameter("usersPassQuestion");

String usersPassReply = req.getParameter("usersPassReply");

String usersTrueName = req.getParameter("usersTrueName");

String usersAddress = req.getParameter("usersAddress");

String usersPhone = req.getParameter("usersPhone");

String usersE_mail = req.getParameter("usersE_mail");

if(addUser(usersName, usersPass, usersRepass, usersPassQuestion, usersPassReply, usersTrueName, usersAddress, usersPhone, usersE_mail)){

req.getRequestDispatcher("addUserInfo.jsp").forward(req, resp);

}

}

public boolean addUser(String usersName,String usersPass,String usersRepass,String usersPassQuestion

,String usersPassReply,String usersTrueName,String usersAddress,String usersPhone,String usersE_mail){

try

{

Connection con = DBConnection.getConnection();

PreparedStatement stm=con.prepareStatement("insert into fusers values(usersseq.nextval,?,?,?,?,?,?,?,?,?)");

stm.setString(1,usersName);

stm.setString(2,usersPass);

stm.setString(3,usersRepass);

stm.setString(4,usersPassQuestion);

stm.setString(5,usersPassReply);

stm.setString(6,usersTrueName);

stm.setString(7,usersAddress);

stm.setString(8,usersPhone);

stm.setString(9,usersE_mail);

try

{

if( !stm.execute()){

return true;

}

}

catch(Exception e)

{

e.printStackTrace();

}

}catch(Exception e)

{

e.printStackTrace();

}

return false;

}

}

2.用户浏览商品页面功能实现代码:

public class ProduceBean

{

private Connection con;

ProduceClass produce=new ProduceClass();

public ProduceBean()

{

try

{

con = DBConnection.getConnection();

}

catch (Exception e)

{

e.printStackTrace();

}

}

public void setProduce(ProduceClass produce)

{

this.produce = produce;

}

public Collection getAllProduce()

{

ProduceClass produce;

List arraylist = new List();

try

{

Statement statement = con.createStatement();

ResultSet resultset = statement.executeQuery("select * from produce")

while(resultset.next())

{

produce = new ProduceClass();

int i=resultset.getInt(1);

String s=resultset.getString(2);

produce.setProduceId(i);

produce.setProduceName(s);

arraylist.add(produce);

}

con.close();

}

catch(Exception e)

{

e.printStackTrace();

}

return arraylist;

}

public Collection getProduceByProduceId(String str)

{

int id=Integer.parseInt(str);

ProduceClass produce;

List arraylist = new List();

try

{

Statement statement = con.createStatement();

ResultSet resultset = statement.executeQuery("select * from produce where produceId="+id);

while(resultset.next())

{

produce = new ProduceClass();

int i=resultset.getInt(1);

String s=resultset.getString(2);

produce.setProduceId(i);

produce.setProduceName(s);

arraylist.add(produce);

}

con.close();

}

catch(Exception e)

{

e.printStackTrace();

}

return arraylist;

}

public Collection getProduceByProduceName(String str)

{

ProduceClass produce;

List arraylist = new List();

try

{

Statement statement = con.createStatement();

ResultSet resultset = statement.executeQuery("select * from produce where produceName='"+str+"'");

while(resultset.next())

{

produce = new ProduceClass();

int i=resultset.getInt(1);

String s=resultset.getString(2);

produce.setProduceId(i);

produce.setProduceName(s);

arraylist.add(produce);

}

con.close();

}

catch(Exception e)

{

e.printStackTrace();

}

return arraylist;

}

public Collection getAllProduceDetails(int i)

{

ProduceDetailsClass produceDetail;

List arraylist = new List();

try

{

Statement statement = con.createStatement();

ResultSet resultset = statement.executeQuery("select * from produceDetails where produceId='" + i + "'");

while(resultset.next())

{

produceDetail = new ProduceDetailsClass();

int i1=resultset.getInt(1);

String s=resultset.getString(2);

int i2=resultset.getInt(3);

int i3=resultset.getInt(4);

produceDetail.setProduceId(i1);

produceDetail.setProduceName(s);

produceDetail.setSortId(i2);

produceDetail.setGoodsId(i3);

arraylist.add(produceDetail);

}

con.close();

}

catch(Exception e)

{

e.printStackTrace();

}

return arraylist;

}

3.商品选购页面功能实现的代码:

public class ProduceDetailsClass implements java.io.Serializable

{

private int produceId;

private String produceName;

private int sortId;

private int goodsId; public int getProduceId() {

return produceId;

}

public String getProduceName() {

return produceName;

}

public int getSortId() {

return sortId;

}

public int getGoodsId() {

return goodsId;

}

public void setProduceId(int produceId) {

this.produceId = produceId;

}

public void setProduceName(String produceName) {

this.produceName = produceName;

}

public void setSortId(int sortId) {

this.sortId = sortId;

}

public void setGoodsId(int goodsId) {

this.goodsId = goodsId;

}

}

4.购物车功能实现的代码:

public class Cart

{

private String name;//用户的标识

private HashMap items;//购物车中的物品

private int orderID;

private float totalPrice;

private Connection con;

int ordersId=0;

static CallableStatement cs=null;

static Statement st=null;

static ResultSet rs=null;

public int getOrderID()

{

return orderID;

}

public float getTotalPrice()

{

return totalPrice;

}

public Cart()

{

try

{

con = DBConnection.getConnection();

}

catch (Exception e)

{

e.printStackTrace();

}

items = new HashMap();

}

public void addItem(String itemId,int quantity)

{

items.put(itemId,new Integer(quantity));

}

public void removeItem(String itemId)

{

items.remove(itemId);

}

public void updateItem(String itemId,int quantity)

{

if(items.containsKey(itemId))items.remove(itemId);

items.put(itemId,new Integer(quantity));

}

public HashMap getItems()

{

return this.items;

}

public void setName(String name)

{

this.name=name;

}

public String getName()

{

return this.name;

}

public void clear()

{

items.clear();

}

/*public void saveData()

{

totalPrice=calPrice();

orderID=genOrder(s1,s2,s3,s4);

saveItems();

}*/

public int genOrder(String s1,String s2)//生成订单并返回订单号

{

String s3 = new SimpleDateFormat("yyyyMMddkkmm").format(new Date());

String id = "";

try

{

PreparedStatement pst = con.prepareStatement("insert into orders values(ordersseq.nextval,?,?,?,?)");

pst.setString(1,s1);

pst.setString(2,s2);

pst.setString(3,s3);

id= new Random().nextInt(100)+"";

// pst.setString(4,id);

pst.execute();

}

catch(Exception e)

{

e.printStackTrace();

}

return Integer.valueOf(id);

}

/*public float calPrice()//计算当前购物车内物品的总价格

{

总价格在Cart.jsp中计算

}*/

public float calPrice(float totalPrice)//计算当前购物车内物品的总价格

{

return this.totalPrice=totalPrice;

}

public void addOrder(String orderName,String totalPrice)

{

try

{

String dateTime=new java.util.Date().toLocaleString();

PreparedStatement pst = con.prepareStatement("insert into orders values(?,?,?)");

pst.setString(1,orderName);

pst.setString(2,totalPrice);

pst.setString(3,dateTime);

int i= pst.executeUpdate();

pst.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

public void saveItems(int i1,String s3,String s4,int i2)//存储当前订单物品明细

{

try

{

PreparedStatement pst = con.prepareStatement("insert into ordersDetails(ordersId,goodsName,goodsPrice,goodsCount) values(?,?,?,?)");

pst.setInt(1,i1);

pst.setString(2,s3);

pst.setString(3,s4);

pst.setInt(4,i2);

//System.out.println("^^^^^"+i1+" "+i2+" "+s3+" "+s4);

int i= pst.executeUpdate();

pst.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

public Collection getOrders()

{

OrdersClass orders;

List arraylist = new List();

try

{

Statement statement = con.createStatement();

ResultSet resultset = statement.executeQuery("select * from orders");

while(resultset.next())

{

orders = new OrdersClass();

int ordersId=resultset.getInt(1);

String usersName=resultset.getString(2);

float ordersPrice=resultset.getFloat(3);

String ordersDatetime=resultset.getString(4)

orders.setOrdersId(ordersId);

orders.setOrdersName(usersName);

orders.setOrdersPrice(ordersPrice);

orders.setOrdersDatetime(ordersDatetime);

arraylist.add(orders);

}

resultset.close(); statement.close();

}

catch(Exception e)

{

e.printStackTrace();

}

return arraylist;

}

public Collection getOrdersByOrderId(String s)

{

int id=Integer.parseInt(s);

OrdersClass orders;

List arraylist = new List();

try

{

Statement statement = con.createStatement();

ResultSet resultset = statement.executeQuery("select * from orders where ordersId="+id);

while(resultset.next())

{

orders = new OrdersClass();

int ordersId=resultset.getInt(1);

String usersName=resultset.getString(2);

float ordersPrice=resultset.getFloat(3);

String ordersDatetime=resultset.getString(4);

orders.setOrdersId(ordersId);

orders.setOrdersName(usersName);

orders.setOrdersPrice(ordersPrice);

orders.setOrdersDatetime(ordersDatetime);

arraylist.add(orders);

}

resultset.close();

statement.close();

}

catch(Exception e)

{

e.printStackTrace();

}

return arraylist;

}

public Collection getOrdersByUserName(String s)

{

OrdersClass orders;

List arraylist = new List();

try

{

Statement statement = con.createStatement();

ResultSet resultset = statement.executeQuery("select * from orders where usersName='"+s+"'")

while(resultset.next())

{

orders = new OrdersClass();

int ordersId=resultset.getInt(1); String usersName=resultset.getString(2);

float ordersPrice=resultset.getFloat(3);

String ordersDatetime=resultset.getString(4);

orders.setOrdersId(ordersId);

orders.setOrdersName(usersName);

orders.setOrdersPrice(ordersPrice);

orders.setOrdersDatetime(ordersDatetime);

arraylist.add(orders);

}

resultset.close();

statement.close();

}

catch(Exception e)

{

e.printStackTrace();

}

return arraylist;

}

public void deleteOrder(String s)

{

try

{

int i=Integer.parseInt(s);

//System.out.println(i+" @@@@@@@@@@@@");

Statement statement = con.createStatement();

statement.execute("delete from orders where ordersId='" + i + "'");

}

catch(Exception e)

{

e.printStackTrace();

}

}

5.高级查询功能实现代码

public class SortBean

{

private Connection con;

SortClass sort=new SortClass();

public SortBean()

{

try

{

con = DBConnection.getConnection();

}

catch (Exception e)

{

e.printStackTrace();

}

}

public void setSortInfo(SortClass sort)

{

this.sort = sort;

}

public Collection getAllCategory()

{

SortClass sort;

List arraylist = new List();

try

{

Statement statement = con.createStatement();

ResultSet resultset = statement.executeQuery("select * from sort");

while(resultset.next())

{

int i=resultset.getInt(1);

String s=resultset.getString(2);

sort = new SortClass();

sort.setSortId(i);

sort.setSortName(s);

arraylist.add(sort);

}

con.close();

}

catch(Exception e)

{

e.printStackTrace();

}

return arraylist;

}

public void addSort()throws Exception

{

try

{

PreparedStatement stm=con.prepareStatement("insert into sort values(?)"); stm.setString(1,sort.getSortName());

{ try

{

stm.executeQuery();

}

catch(Exception e)

{

}

}

catch(Exception e)

{

e.printStackTrace();

throw e;

}

}

}

6.后台管理员登录功能实现的代码:

public boolean checkAdminInfo()throws Exception

{

boolean flag=false;

try

{

PreparedStatement stat=con.prepareStatement("select * from admin where adminName=? and adminPass=?");

stat.setString(1,admin.getAdminName());

stat.setString(2,admin.getAdminPass());

ResultSet result=stat.executeQuery();

if(result.next())

{

flag=true;

}

result.close();

stat.close();

}

catch(Exception e)

{

e.printStackTrace();

throw e;

}

return flag;

}

public AdminClass getAdminInfo()throws Exception

{

AdminClass admin1=new AdminClass();

try

{

PreparedStatement stat=con.prepareStatement("select * from admin where adminName=? and adminPass=?");

stat.setString(1,admin.getAdminName());

stat.setString(2,admin.getAdminPass());

ResultSet result=stat.executeQuery();

while(result.next())

{

int id=result.getInt(1);

String name=result.getString(2);

String pass=result.getString(3);

admin1.setAdminId(id);

admin1.setAdminName(name);

admin1.setAdminPass(pass);

}

result.close();

stat.close();

}

catch(Exception e)

{

e.printStackTrace();

throw e;

}

return admin1;

}

public Collection getAllUserInfo()

{

AdminClass admin;

List arraylist = new List();

try

{

Statement statement = con.createStatement();

ResultSet resultset = statement.executeQuery("select * from admin");

while(resultset.next())

{

admin=new AdminClass();

int id=resultset.getInt(1);

String name=resultset.getString(2);

String pass=resultset.getString(3);

admin.setAdminId(id);

admin.setAdminName(name);

admin.setAdminPass(pass);

arraylist.add(admin);

}

con.close();

}

catch(Exception e)

{

e.printStackTrace();

}

return arraylist;

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服