1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > [计算机毕设]基于java的超市积分管理系统设计与实现(项目报告+答辩PPT+源代码+数据库)

[计算机毕设]基于java的超市积分管理系统设计与实现(项目报告+答辩PPT+源代码+数据库)

时间:2024-02-11 22:52:36

相关推荐

[计算机毕设]基于java的超市积分管理系统设计与实现(项目报告+答辩PPT+源代码+数据库)

项目说明报告

基于java的超市积分管理系统

随着计算机和网络的不断革新,世界已经进入了前所未有的电子时代。作为实用性强、应用范围广泛的会员管理系统也正在被越来越多的各类企业用于消费管理领域。然而,那些针对性强、企业理念清晰的大型超市也正发展迅速,这些大型超市应该具备一套实用便捷的会员积分管理系统来经营产品,让消费者和超市紧密联系起来。如今现有的会员管理系统已经不能充分满足超市用户的需求,用户需要更好的积分管理体系来体验丰富的管理方案,因此需要设计开发在效率、功能和技术上都有所提高的会员积分管理系统。

本文从超市会员管理的实质入手,从本质区别超市会员管理与其他商业消费的会员管理的根本区别,针对专一积分管理提出看法,希望让系统更适用于商业超市的发展。让积分制度实施在一个合适的领域内,并不是所谓的通用格式,而是一个适合超市的专属模式。因此设计开发一种适合超市使用的会员积分管理系统可以实效得解决问题,能够让超市的会员真实的感受到会员积分带来的好处。

本系统是专门设计适用于超市的会员积分管理系统。整体采用B/S架构开发,通过对系统深入细致的分析,以及对业务背景和需求的了解,结合流行成熟的Web开发技术J2EE,设计搭建双管理权限。系统的总体技术框架为JSP+Servlet+JavaBean。前台浏览器浏览,后台服务器直接连接SQL Server2000数据库。通过各客户端计算机接入会员积分的各项事务,实现积分管理的规范性和安全性。同时作为会员信息管理系统的组成部分,将来可以有很好的扩展性和通用性。

目录

摘要... 1

Abstract 2

引 言... 1

1 第一章 绪论... 2

1.1 课题研究背景... 2

1.2 系统实现意义... 2

1.3 本文主要工作及总体结构... 3

2 第二章 系统开发环境及相关技术... 4

2.1环境技术概述... 4

2.1.1 B/S结构... 4

2.1.2 JSP. 5

2.1.3 JavaBean. 6

3 第三章 系统需求分析... 7

3.1 系统具体实现目标... 7

3.1.1系统的完整性... 7

3.1.2 系统的安全性... 7

3.1.3 对错误操作的处理... 7

3.2 系统功能需求... 7

3.2.1 管理员功能... 8

3.2.2 柜员功能... 8

3.3 系统非功能需求描述... 8

4第四章 系统设计... 9

4.1 实体E-R图... 9

4.2 实体管理E-R图... 13

4.3 会员积分兑换流程... 14

5第五章 数据库表结构... 15

6第六章 系统安全测试... 17

6.1 常用的测试方法... 17

6.2 系统的安全性分析... 18

6.3 系统的实用性分析... 18

结论... 19

附 录 A 外文原文... 21

附 录 B 外文译文... 24

附 录 C 源代码... 27

在 学 取 得 成 果... 38

致谢... 3

引 言

如今计算机技术已经开始在各个领域引导着人们的生活,人们的消费理念也在逐渐提高。消费已不只是之前的单纯购买所需的商品,而是开始转变为对商品超市的关注度,购买商品带来的回报,商品是否足够吸引消费者等等这些因素。而企业也渐渐开始注重提高自身客户的忠诚度。在了解了超市会员积分管理的一些基本内涵后,考察了国内外会员积分管理的体制、方法以及变化趋势,分析出不同的管理模式和特点,从中可以得到一些有益的借鉴。

本系统在设计上采用模块化得处理思想,通过对功能的划分,将繁复的系统功能进行分解、简化,并将它们整理成不同的模块,这样几大地提高了系统的开发效率,增加了代码的可重用性。采用分权管理设计,有效的帮助管理员对会员的积分和资料进行管理、统计以及监控;设置积分运行时的参数;积分兑换活动的商品信息;管理柜台人员的资料等。而柜台人员则可以清晰高效的对会员信息进行管理,为会员兑换商品等。通过使用本系统进行会员积分管理工作,使得该业务可操作性、直观性大大加强,具有方便、快捷、可靠等优点,在很大程度上降低了超市的运营成本,提升了超市的市场竞争力。

一个好的超市需要更好的会员制度才能大幅度的提高消费者的关注度,让客户能够享受到丰厚的积分优惠政策。并且一套针对性强、效率高、功能简便的会员积分管理系统也可代替手工记录。本系统不仅可以大大提高工作效率,减少信息丢失和人为主观错误,也可以提高会员信息的安全性和保密性,使超市商家与每个专柜人员能够建立起良好的管理沟通平台,达到真正意义的会员积分管理。

1 第一章 绪论

1.1 课题研究背景

“吸引一个新客户所耗费的成本大约相当于保持一个现有客户的5倍。”

会员制客户管理模式,是商家为了维系与客户的长期交易关系,而发展出的一种较为成功的关系营销模式。在具体实践中,会员积分政策是客户管理模式的必需点,有积分、折扣、兑换商品的功能。这样使消费者与商家形成牢固的关系链,能为超市锁定大量的老顾客,因此会员积分政策为大量商家所爱。从目前国内外会员积分管理的发展来看,国外的会员管理政策已经相对成熟,多应用于通信、旅游、银行、超市等大型企业。在国内针对于中小型独立超市产品的会员积分系统还有所欠缺,这些超市需要的会员管理系统其实不像大型企业机构在规模、功能等方面有较高的要求,它只需要简便、快捷、高效的完成超市会员的积分管理,并且能够同时保证会员信息的安全性、有序性。观察现在超市的会员积分的管理办法,因为需要处理大量的会员信息、积分信息和商品管理,人工操作费时费力,差错频繁。为了加快信息处理速度,缩短认证时间和避免差错,计算机信息处理技术的应用势在必行。针对中小型超市会员积分管理的系统就是应这样的需求而开发的。

1.2 系统实现意义

在市场环境、竞争环境的飞速变化的今天,现代企业都不同程度地感到业务开展难度的增大、危机的加深、竞争的加剧并更趋于多层次全方位,所以都在寻求提升企业竞争力的手段,以客户为中心的理念正成为企业经营的核心。我国超市产品的销售主要是关注经销商、代理商的管理,对客户忠诚管理还很不到位,严重影响了超市做大、做强的可持续发展战略。想要提高超市客户的忠诚度就必须从会员政策入手,对会员管理的重视加大,才能够真正关系最终客户的需求。如今国内现有的超市会员忠诚管理还不科学,超市的信息化程度还很低,很多还没有建立会员管理系统,对客户的管理还处于传统方法。此外,超市还不注重与客户的情感交流,超市中以客户为中心的超市文化也还不完善。

本次设计开发的会员积分管理系统目标是为中小型规模的各类超市提供会员积分的管理、会员卡类的管理以及超市积分规则设定的解决方案。我国市场中小超市竞争态势已经形成,但由于其信息化程度不高,客户忠诚度管理的应用还不广泛。国外知名厂商的产品一般针对银行、保险、电信等行业,实施规模大,价格昂贵,而国内厂商的产品主要面向中低端市场,功能的广度、深度和成熟度都与国外产品存在不小的差距。在这种形势下,开发研制一套功能完整、架构开放、扩展性强并且部署成本低廉的客户忠诚度管理系统产品具有十分重大的技术意义和市场价值。

1.3 本文主要工作及总体结构

本文从积分管理项目的背景开始,先分析了目前积分项目的应用现状,并且阐述了系统的选题背景,分析了系统实现的意义;根据本项目自身的特色和应用背景,在第二章内介绍了项目中用到的系统开发环境及相关技术;第三章根据需求分析的项目预期效果,进一步对项目各个模块的功能和流程迸行了说明,属于开发过程中的概要设计部分;第四章整理详细设计开发过程中的实体E-R图和数据流程图;第五章,整理系统中用到的数据库表结构;第六章对整个系统进行系统测试,分析系统测试的目的及系统安全性问题。

2 第二章 系统开发环境及相关技术

2.1环境技术概述

网站和积分管理系统采用B/S结构,使用J2EE的技术开发完成。积分和兑换服务、以及堵塞进程清除工具采用J2EE中Javabean技术完成。系统运行和开发环境都是windowVista,其中数据库采用SQL Server2000,中间件服务采用Tomact 5.5。系统使用了MyEclipse作为J2EE的开发工具。

2.1.1 B/S结构

B/S结构:(Browser/Server,浏览器/服务器模式):是Web兴起后的一种网络结构模式,Web浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。

客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。

B/S结构的使用越来越多,特别是由需求推动了AJAX技术的发展,它的程序也能在客户端电脑上进行部分处理,从而大大的减轻了服务器的负担;并增加了交互性,能进行局部实时刷新。

B/S结构的优点: B/S结构最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。甚至可以在线申请,通过公司内部的安全认证(如CA证书)后,不需要人的参与,系统可以自动分配给用户一个账号进入系统。

B/S结构下的管理信息系统基本上克服了C/S模式管理信息系统的不足,其主要表现在:

(1)系统开发、维护和升级的经济性。

对于大型的管理信息系统,软件开发、维护与升级的费用是非常高的,B/S结构所具有的框架结构可以大大节省这些费用,同时,B/S结构对前台客户机的要求并不高,可以避免盲目进行硬件升级造成的巨大浪费。

(2)B/S结构提供了一致的用户界面。

B/S结构的应用软件都是基于Web浏览器的,这些浏览器的界面都很相似。对于无用户交互功能的页面,用户接触的界面都是一致的,从而可以降低软件的费用。

(3)B/S结构具有很强的开放性。

在B/S结构下,外部的用户亦可通过通用的浏览器进行访问。

(4)B/S结构的结构易于扩展。

由于Web的平台无关性,B/S结构可以任意扩展,可以从一台服务器、几个用户的工作组扩展成为拥有成千上万用户的大型系统。

(5)B/S结构具有更强的信息系统集成性。

在B/S结构下,解决了企事业单位各种问题的服务,因而它能提供更高的工作效率。

(6)B/S结构提供灵活的信息交流和信息发布服务。

B/S结构借助Internet强大的信息发布与信息传送能力可以有效地解决企业内部的大量不规则的信息交流。

2.1.2 JSP

JSP是Servlet的一种变体,是一种建立动态网页的简单方法。当容器处理JSP时,容器可以自动的把JSP翻译为等价的Servlet。JSP允许将Java语句和HTML代码组合起来,浏览页面时,服务器端运行Java程序,为页面提供动态的内容。和Servlet一样,JSP也是编译一次,然后就加载到内存中。JSP网页可以非常容易的与HTML等静态模板结合,可以加载动态的内容,这些动态的内容可以是Java Bean和EJB等。另外我们还可以自定义JSP标签。

JSP程序由JSP执行引擎执行,它能执行多个JSP程序。当第一次运行JSP程序时,JSP被编译为java servlet class字节代码,由Java虚拟机对这些代码进行解释执行,这些java servlet class一直驻留在服务器的内存中,这样后面相同的请求执行速度大大加快。用JSP开发Web应用的主要有两种方式ll 7J:

(1)浏览器请求由JSP页面来处理,JSP调用Java Bean等组件,产生响应,再返回给浏览器。

(2)由JSP负责显示部分,Servlet负责业务处理、管理请求、调用Java Bean和决定使用哪个JSP页面传递给回请求。JSP只有展现部分,没有业务逻辑,这样对于网页的编程和后台处理的开发人员来说,无异与摆脱了各自的困扰。

2.1.3 JavaBean

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBeans 通过提供符合一致性设计模式的公共方法将内部域暴露称为属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 属性。 用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。

JavaBean是Sun微系统的一个面向对象的编程接口,它可以让你建可重用应用程序或能在网络中任何主流操作系统平台上配置的程序块,称作组件。当组件或Beans在使用过程中,Bean的性质(比如,一个窗口的背景色)对于其他Bean来说是可见的,并且,之前没“碰到”过的Bean也可以动态地获悉彼此的特性并从而进行交互。要想用JavaBeans建一个组件,你必须用Sun的Java编程语言来写程序,并且在程序中包括描述组件特性的JavaBeans语句,JavaBeans给Java应用程序提供了OpenDoc和ActiveX接口已提供的这种复合文档的能力。

3 第三章 系统需求分析

3.1 系统具体实现目标

本次开发的会员积分管理系统的目标是为中小规模的超市提供会员信息管理、会员积分管理以及积分兑换管理的具体解决方案。系统设计的目标主要有:

3.1.1系统的完整性

因会员积分管理会在不同业务中表现出不同的业务差异,本系统定位在会员消费积分这一点上,根据积分过程中可能出现的各种问题细分不同的功能模块,各模块需完成积分管理过程中可能出现的问题与请求。同时各个模块之间存在一定的联系,不同模块的组织与联系也是设计与实现过程中要解决的问题。

3.1.2 系统的安全性

为了保证会员信息的安全性,避免会员信息的泄露和恶意修改,设计了不同访问者的权限管理。即柜员只能访问与会员信息和积分相关的页面与操作,而管理员可以实现对整个系统的设置及管理。另外,柜员没有权限对兑换商品和会员等级进行管理,只有管理员可以对积分活动、会员等级和兑换商品进行设置等。

3.1.3 对错误操作的处理

对错误请求的处理。操作者在操作的过程中不可避免的会出现一些错误,而这些错误应尽可能的被捕捉到并给予相应的提示和正确的处理。操作错误时系统也应能做出一般性处理。

3.2 系统功能需求

为实现上述系统功能上的目标,会员积分管理系统主要完成的功能有:

柜员信息的管理:包括对所有柜台柜员信息的各项设置。会员信息的管理:包括对所有会员信息的管理设置。会员积分管理:包括对会员积分的统计、查询等。积分规则设置:对积分规则进行设定、修改等。会员等级设置:包括对每个会员等级的范围进行设置管理。兑换商品管理:对积分兑换的商品进行修改、兑换等各项管理。兑换商品记录:记录柜员对会员每次兑换商品的操作信息。兑换积分记录:记录柜员对会员每次兑换积分的操作信息。

3.2.1 管理员功能

1)柜员账户列表,实现对柜员账户信息的管理。

2)新增柜员账户,实现添加柜员信息。

3)兑换商品列表,实现对兑换商品信息的查看、修改、删除操作。

4)新增兑换商品,实现添加系统中兑换商品信息。

5)会员类别管理,实现对系统中会员积分等级的设置。

6)积分类别选择,实现对系统中的会员积分兑换规则设置。

7)增加积分记录,实现查看柜员为会员兑换积分的工作记录。

8)兑换积分记录,实现查看柜员为会员兑换商品的工作记录。

3.2.2 柜员功能

1)用户列表管理,实现对会员信息的查看、修改、删除操作。

2)新增用户管理,实现添加会员信息。

3)会员积分管理,可以查看会员的积分和级别,并按照会员消费金额兑换积分。

4)兑换商品列表,可以查看兑换商品及所需积分,并可为会员兑换商品。

5)增加积分记录,实现查看柜员为会员兑换积分的工作记录。

6)兑换积分记录,实现查看柜员为会员兑换商品的工作记录。

3.3 系统非功能需求描述

为完成以上功能,结合本系统的应用背景,对本系统的操作界面有以下要求:

设计界面美观大方

作为积分管理系统适合于企业管理者及各个柜台人员,在布局排版上采用统一风格,色调统一,界面功能设计清晰明了。

方便实用,贴近超市

本系统是个实用性和目的性很强的网站,因此决定了他应该贴近超市特点和使用者,方便不同权限用户操作。操作界面应当有好,无需经过操作培训即可使用本系统。

良好的灵活性、可扩展性

系统的设计应采用分层的设计思想,系统可以灵活的扩展。能够在不同操作系统中运作,依赖性较低。

信息准确、及时更新

系统应提供准确、及时的信息。数据库能够即时对数据进行更新,必要时可采用后台数据库定时更新策略。

安全性

系统应保证会员数据的安全和隐私,可以稳定运行,故障易于恢复。

4第四章 系统设计

4.1 实体E-R图

图4.1用户信息实体E-R图

图4.2积分兑换规则信息实体E-R图

图4.3记录信息实体E-R图

图4.4会员信息实体E-R图

图4.5兑换商品信息实体E-R图

图4.6会员等级信息实体E-R图

4.2 实体管理E-R图

4.3 会员积分兑换流程

5第五章 数据库表结构

表5-1 用户信息表

表5-2 兑换规则信息表

表5-3 记录信息表

表5-4 会员信息表

表5-5 商品信息表

表5-6 会员等级息表

6第六章 系统安全测试

6.1 常用的测试方法

测试在整个软件开发过程中起着至关重要的作用,软件测试对于保证一个软件的可靠性是极为重要的。测试占据整个软件生命周期的75%左右,可见它的重要性。特别是在面对一个庞大而复杂的系统,软件测试就能充分的发挥它的作用,因为伴随着测试,我们会发现软件中存在的各种各样的问题。从而,尽快地解决问题。在开发一个系统的各个阶段都不可避免地会发生这样或那样的问题,所以在每一个开发的过程中的各个阶段都要对软件进行测试,软件测试的目标是尽可能地发现软件中的错误,以便对其进行修改。

测试包括单元测试和集成测试。单元测试是把一个模块作为独立的程序单元进行测试,以保证它能够正确执行规定的功能,单元测试是编码和单元测试阶段的任务。集成测试是将已经通过彻底测试的模块组装起来,以形成一个系统或软件产品,集成测试主要使用黑盒测试法对系统进行功能测试,集成测试的主要任务是检查和排除模块接口错误。全局数据结构错误。模块中某些遗漏的错误;集成测试是系统集成阶段的任务;集成测试可分为自顶向下集成测试、自底向上集成测试、自顶向下和自底向上综合的集成测试、回归测试、测试工作能否成功,主要取决于测试案例设计是否科学合理。测试案例系指测试输入数据及其对应的输出,其设计依赖于所采用的测试方法:白盒测试与黑盒测试。

1.白盒测试:使用白盒方法导出测试案例是依据模块的编码,即模块的内部逻辑对测试者是可见的,故称为白盒测试,有时也称为玻璃盒测试。测试的目的在于用最少的测试案例,检测出最多的错误。使用白盒测试方法所导出的测试案例能保证模块中所有独立途径至少要测试一次。测试所有逻辑决策真和假两个方面。在所有循环的边界内部和边界上执行循环体。检查内部数据结构以保证其有效性。白盒测试又包含基本路径测试、条件测试、数据流测试和循环测试。

2.黑盒测试:黑盒测试集中在软件的功能需求上,黑盒测试是在程序或模块的接口级进行,而不考虑该程序的内部逻辑。黑盒测试能够用于检测程序中下列类型的错误:

(1)不正确或漏掉的功能,这往往是由于程序算法中的问题所造成;

(2)接口错误;

(3)数据结构或外部数据库存取中的错误;

(4)性能方面的问题,这类问题通常也与算法有关;

(5)初始化或结束错误。

6.2 系统的安全性分析

系统对于错误操作和非法用户的恶意破坏的安全保证的可靠程度。在本系统中,测试了所有可能涉及的错误操作,每个可能涉及到的错误操作都有相应的错误处理机制,在系统实现过程中,定义了本系统可能出现的错误的处理信息以及相应的解决办法。对于用户,通过权限设置使其完成相应的操作,并且系统管理员可以修改普通用户的权限,非法用户是不可能登录到系统中的。

6.3 系统的实用性分析

对于系统全部模块进行测试,基本达到了任务书的要求,也达到了系统起初的设计需求,当然也会有考虑不详尽的方面,详细说明如下:全部功能要求已尽量达到了满足,全部性能达到要求,数据库操作正常。因为整个系统是基于教学管理系统,但是由于部分功能实现的并不是非常理想,而且也没有将系统在实际中测试,所以并不敢确保系统在实际中会有良好的应用效果。不过总体上说来,系统还是具有一定的实用性,这是我的第一个完整的软件系统,因为本身能力的限制,以及经验的不足,这个系统很难算作是产品,但是我认为,通过这样一个毕业设计,以及我现在所学习到的东西,下一个系统,一定是一个可以应用的、具有实用性的产品。

结论

超市会员积分管理系统是基于WEB互联网开发的,在开发本系统的过程中,查阅了大量的书籍。一些参考书中的实例给了我很大的启发,对于开发本系统,这些实例给了我很大的帮助。由于自己没有项目开发的经验,所以只能克服困难,尽量做到让系统的功能满足题目要求,并实现这些功能。

经过毕业设计的开发与学习,我终于完成了超市会员积分管理系统的设计与开发。从开始接到论文题目到平台的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战,这也是我在大学期间独立完成的最大的项目。在这段时间里,我学到了很多知识也有很多感受,从对系统一无所知,对JSP、JavaBean、SQL等相关技术不太了解的状态,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次试验的成功都会让我兴奋好一段时间。

虽然在系统的开发过程中遇到了诸多的问题和困难,但通过这次毕业设计的锻炼,仍使我在软件的设计与开发、前期的开发设计方面获益匪浅。虽然超市会员积分管理系统的设计和实现看来还很幼稚,不太成熟,但这个系统是我开发的第一个项目,开发期间的苦与甜都让我记忆深刻,并且给了我巨大的鼓舞,激励我继续努力学习和进步。

[1] 萨师煊,王珊. 数据库系统概论. 高等教育出版社,2000

[2] 赵杰. SQL Server设计与实现教程. 清华大学出版社,

[3] 陈松乔,任胜兵,王国军.现代软件工程.清华大学出版社,

[4] 吴华.唐有明. JSP动态网站开发基础练习+典型案例.清华大学出版社,

[5] 黄明,梁旭. 信息系统设计与开发实例.机械工业出版社,

[6] 小志.JSP入门与实例演练薄.中国青年出版社,

[7] 赵增敏.JSP动态网页设计.电子工业出版社,

[8] 宣小平.JSP数据库系统开发实例导航.人民邮电出版社,

[9] 邓文渊,陈惠贞,陈俊华.挑战JSP与网页数据库设计.中国铁路出版社,

[10] 王国辉,王毅,李钟尉.JSP程序开发范例宝典.人民邮电出版社,

[11] 郭珍 王国辉. JSP程序设计教程.人民邮电出版社,

[12] 萨师煊.数据库系统概论.高等教育出版社,2002

[13] 苗雪兰.数据库技术及应用.机械工业出版社,

[14] 柳永坡 刘雪梅 赵长海.人民邮电出版社,

[15] 张月萍.Java JDK 实例宝典.电子工业出版社,

[16] 王珊.数据库系统简明教程.高等教育出版社,:138-248

[17] 邓子云,燕锋.JSP网络编程从基础到实践.电子工业出版社,:324-348

[18] [美]Nathaniel T.Schutta. Ajax与JAVA高级程序设计. 人民邮电出版社,

[19] [美]Cay Horstmann. BiG JAVA编程实例. 电子工业出版社,

[20] [美] Kim B.Bruce /Thomas P.Murtagh. JAVA编程. 清华大学出版社,

附 录 B 外文译文

JSP特点

与.NET和Active Server Pages (ASP)相比.NET是Microsoft精心设计的一项技术。是与servlets和JSP直接竞争的技术。JSP的优势体现在两个方面。首先,JSP可以移植到多种操作系统和Web服务器,您不必仅仅局限于部署在Windows 和IIS上尽管核心.NET平台可以在好几种非Windows平台上运行,但ASP这一部分不可以。您不能期望可以将重要的应用部署到多种服务器和操作系统。对于某些应用,这种差异没有什么影响。但有些应用,这种差异却非常重要。其次,对于某些应用,底层语言的选择至关重要。例如,尽管.NET的C#语言设计优良,且和Java类似,但熟悉核心C#语法和众多工具库的程序员很少。此外,许多开发者依旧使用最初版本的ASP。相对于这个版本,JSP在动态代码方面拥有明显的优势。使用JSP,动态部分是用Java编写的,而非VBScript过其他ASP专有的语言,因此JSP更为强劲,更适合于要求组件重用的复杂应用。

当将JSP与之前版本的ColdFusion对比时,您可能会得到相同的结论。应用JSP,您可以使用Java编写“真正的代码”,不必依赖于特定的服务器产品。然而,当前版本的ColdFusion满足J2EE服务器的环境,允许开发者容易的混合使用ColdFusion和Servlet/JSP代码。与PHP相比PHP(“PHP:Hypertext Preprocessor”的递归字母缩写词)是免费的、开放源代码的、HTML嵌入其中的脚本语言,与ASP和JSP都有某种程度的类似。JSP的一项优势是动态部分用Java编写,而Java已经在联网、数据库访问、分布式对象等方面拥有广泛的API,而PHP需要学习全新的、应用相对广泛的语言。JSP的第二项优势是,和PHP相比,JSP拥有极为广泛的工具和服务器提供商的支持。与纯Servlet相比原则上,JSP并没有提供Servlet不能完成的功能。实际上,JSP文档在后台被自动转换成Servlet。但是编写(和修改)常规的HTML,要比无数println语句生成HTML要方便得多。另外,通过将表示与内容分离,可以为不同的人分配不同的任务:网页设计人员使用熟悉的工具构建HTML,要么为Servlet程序员留出空间插入动态内容,要么通过XML标签间接调用动态内容。这是否表示您只可以学习JSP,将Servlet丢到一边呢?当然不是!由于以下4种原因,JSP开发人员需要了解Servlet:

(1)JSP页面会转换成Servlet。不了解Servlet就无法知道JSP如何工作。

(2)JSP由静态HTML、专用的JSP标签和Java代码组成。哪种类型的Java代码呢?当然是Servlet代码!如果不了解Servlet编程,那么就无法编写这种代码。

(3)一些任务用Servlet完成比用JSP来完成要好。JSP擅长生成由大量组织有序的结构化HTML或其他字符数据组成的页面。Servlet擅长生成二进制数据,构建结构多样的页面,以及执行输出很少或者没有输出的任务(比如重定向)。

(4)有些任务更适合于组合使用Servlet和JSP来完成,而非单独使用Servlet或JSP。

与JavaScript相比JavaScript和Java编程语言完全是两码事,前者一般用于在客户端动态生成HTML,在浏览器载入文档时构建网页的部分内容。这是一项有用的功能,一般与JSP的功能(只在服务器端运行)并不发生重叠。和常规HTML页面一样,JSP页面依旧可以包括用于JavaScript的SCRIPT标签。实际上,JSP甚至能够用来动态生成发送到客户端的JavaScript。因此,JavaScript不是一项竞争技术,它是一项补充技术。

JavaScript也可以用在服务器端,最因人注意的是SUN ONE(以前的iPlanet)、IIS和BroadVision服务器。然而,Java更为强大灵活、可靠且可移植。

与WebMacro和Velocity相比JSP决非完美。许多人都曾指出过JSP中能够改进的功能。这是一件好事,JSP的优势之一是该规范由许多不同公司组成的社团控制。因此,在后续版本中,这项技术能够得到协调的改进。但是,一些组织已经开发出了基于Java的替代技术,试图弥补这些不足。据我们的判断,这样做是错误的。使用扩充JSP和Servlet技术的第三方工具,如Apache Structs,是一种很好的思路,只要该工具带来的好处能够补偿工具带来的额外复杂性。但是,试图使用非标准的工具代替JSP则不理想。在选择一项技术时,需要权衡许多方面的因素:标准化、可移植性、集成性、行业支持和技术特性。对于JSP替代技术的争论几乎只是集中在技术特性上,而可移植性、标准化和集成性也十分重要。例如,Servlet和JSP规范为Web应用定义了一个标准的目录结构,并提供用于部署Web应用的标准文件(.war文件)。所有JSP兼容的服务器必须支持这些标准。我们可以建立过滤器作用到任意树木的Servlet和JSP页面上,但不能用于非标准资源。Web应用安全设置也同样如此。

此外,业界对JSP和Servlet技术的巨大支持使得这两项技术都有了巨大的进步,从而减轻了对JSP的许多批评。例如,JSP标准标签库和JSP 2.0表达式语言解决了两种最广泛的批评:缺乏良好的迭代结构;不使用显式的Java代码或冗长的jsp:useBean元素难以访问动态结果。

附 录 C 源代码

//DB.java

public class DB

{

private Connection conn = null;

private Statement stmt = null;

ResultSet rs = null;

String url;

public DB() {

try

{

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=huiyuan";

}

catch(Exception e)

{

e.printStackTrace();

}

}

public ResultSet executeQuery(String sql)

{

this.stmt=null;

this.rs = null;

Connection cn;

try

{

cn=DriverManager.getConnection(url,"sa","123456");

stmt=cn.createStatement();

rs=stmt.executeQuery(sql);

}

catch(Exception e)

{

e.printStackTrace();

}

return rs;

}

public boolean executeUpdate(String sql)

{

Connection conn;

this.stmt = null;

this.rs = null;

try {

conn = DriverManager.getConnection(url, "sa", "123456");

stmt = conn.createStatement();

stmt.executeUpdate(sql);

stmt.close();

conn.close();

return true;

}

catch (SQLException ex)

{

System.err.println("" + ex.getMessage()); }

return false;

}

public void closeStmt()

{

try {

this.stmt.close();

}

catch (SQLException e)

{

e.printStackTrace();

}

}

public void closeConn() {

try {

this.conn.close();

}

catch (SQLException e)

{

e.printStackTrace();

}

}

}

//checkLogin.jsp 登录验证

<body>

<%

request.setCharacterEncoding("gb2312");

String username=request.getParameter("username");

String passwords=request.getParameter("password");

String sql="select * from admin where username ='"+username+"'";

ResultSet rs=mybean.executeQuery(sql);

if(rs.next()){

String password=rs.getString("password");

if(password.equals(passwords)){

session.setAttribute("type",rs.getString("types"));

session.setAttribute("username",rs.getString("username"));

out.print ("<script language='javascript'>alert('登陆成功');location.href('index.jsp');</script>");

}else{

out.print ("<script language='javascript'>alert('登陆失败');history.go(-1);</script>");

}

}

out.print ("<script language='javascript'>alert('登陆失败');history.go(-1);</script>");

%>

</body>

//saveAddguiyuan.jsp 添加柜员

<body>

<%

request.setCharacterEncoding("gb2312");

String name="";

String sex="";

String age="";

String username="";

String tel="";

name=request.getParameter("name");

sex=request.getParameter("sex");

age=request.getParameter("age");

username=request.getParameter("username");

tel=request.getParameter("tel");

String password=request.getParameter("password");

String sql="";

sql="insert into admin(name,sex,age,username,tel,password,types)values('"+name+"','"+sex+"','"+age+"','"+username+"','"+tel+"','"+password+"','1')";

if(mybean.executeUpdate(sql)==true)

out.print ("<script language='javascript'>alert('数据添加成功');location.href('listguiyuan.jsp');</script>");

else

out.print("<script language='javascript'>alert('数据添加失败');history.go(-1);</script>");

%>

</body>

// saveAddjf.jsp 添加积分

<body>

<%

request.setCharacterEncoding("gb2312");

String title="";

String content="";

String type="";

String moneys=request.getParameter("moneys");

String money=request.getParameter("money");

String ids=request.getParameter("ids");

int money1=Integer.parseInt(moneys);

int jifen = 0;

String sql1="select * from jftype where 1=1 ";

ResultSet rs=mybean.executeQuery(sql1);

if(rs.next()){

if(Integer.parseInt(money)>=rs.getInt("jftype")){

jifen = rs.getInt("state")*(Integer.parseInt(money)/rs.getInt("jftype"));

money1+=jifen+Integer.parseInt(money);

}else{

money1+=Integer.parseInt(money);

}

}

String sql="";

sql="update members set money='"+money1+"' where id="+ids;

if(mybean.executeUpdate(sql)==true){

Date date = new Date();

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String username=request.getParameter("username");

String guiyuan=(String)request.getSession().getAttribute("username");

String project="";

String num="";

String inputdate=format.format(date);

String type1="1";

String sql2="";

sql2="insert into log(username,guiyuan,project,num,inputdate,type,jifen)values('"+username+"','"+guiyuan+"','"+project+"','"+num+"','"+inputdate+"','"+type1+"','"+jifen+"')";

mybean.executeUpdate(sql2);

out.print ("<script language='javascript'>alert('积分增加成功');location.href('listjf.jsp');</script>");

}else{

out.print("<script language='javascript'>alert('数据添加失败');history.go(-1);</script>");

}%>

</body>

// saveAddUser.jsp 添加用户

<body>

<%

request.setCharacterEncoding("gb2312");

String name="";

String sex="";

String age="";

String address="";

String tel="";

name=request.getParameter("name");

sex=request.getParameter("sex");

age=request.getParameter("age");

address=request.getParameter("address");

tel=request.getParameter("tel");

String number=request.getParameter("number");

String sql="";

sql="insert into members(name,sex,age,address,tel,number)values('"+name+"','"+sex+"','"+age+"','"+address+"','"+tel+"','"+number+"')";

if(mybean.executeUpdate(sql)==true)

out.print ("<script language='javascript'>alert('数据添加成功');location.href('listUser.jsp');</script>");

else

out.print("<script language='javascript'>alert('数据添加失败');history.go(-1);</script>");

%>

</body>

//saveduihuan.jsp 积分兑换

<body>

<%

request.setCharacterEncoding("gb2312");

String bianhao="";

bianhao=request.getParameter("bianhao");

String number=request.getParameter("number");

String ids=request.getParameter("ids");

String jifen=request.getParameter("jifen");

String name=request.getParameter("name");

String sql="";

String sql1="select * from members where number='"+bianhao+"'";

String jifen1="";

int sumjifen=0;

ResultSet rs=mybean.executeQuery(sql1);

if(rs.next()){

jifen1=rs.getString("money");

}else{

out.print ("<script language='javascript'>alert('会员编号不存在');location.href('listproduct.jsp');</script>");

return;

}

if(Integer.parseInt(jifen1)>=Integer.parseInt(jifen)*Integer.parseInt(number)){

sumjifen=Integer.parseInt(jifen1)-(Integer.parseInt(jifen)*Integer.parseInt(number));

}else{

out.print ("<script language='javascript'>alert('您的积分不足');location.href('listproduct.jsp');</script>");

}

String sql2="update members set money='"+sumjifen+"' where number='"+bianhao+"'";

if(mybean.executeUpdate(sql2)==true){

Date date = new Date();

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String username=bianhao;

String guiyuan=(String)request.getSession().getAttribute("username");

String project=name;

String num=number;

String inputdate=format.format(date);

String type1="2";

String sql3=""; sql3="insert into log(username,guiyuan,project,num,inputdate,type,jifen)values('"+username+"','"+guiyuan+"','"+project+"','"+num+"','"+inputdate+"','"+type1+"','"+Integer.parseInt(jifen)*Integer.parseInt(number)+"')";

mybean.executeUpdate(sql3);

out.print ("<script language='javascript'>alert('兑换成功');location.href('listproduct.jsp');</script>");

}else{

out.print("<script language='javascript'>alert('兑换失败');history.go(-1);</script>");

}

%>

</body>

// saveguiyuan.jsp 保持柜员修改信息

<body>

<%

request.setCharacterEncoding("gb2312");

String names="";

String sex="";

String age="";

String tel="";

String username="";

names=request.getParameter("name");

sex=request.getParameter("sex");

age=request.getParameter("age");

tel=request.getParameter("tel");

username=request.getParameter("username");

String password=request.getParameter("password");

String ids=request.getParameter("ids");

String sql="";

sql="update admin set name='"+names+"',sex='"+sex+"',age='"+age+"',tel='"+tel+"',username='"+username+"',password='"+password+"' where id="+ids;

if(mybean.executeUpdate(sql)==true)

out.print ("<script language='javascript'>alert('数据添加成功');location.href('listguiyuan.jsp');</script>");

else

out.print("<script language='javascript'>alert('数据添加失败');history.go(-1);</script>");

%>

</body>

//saveproduct.jsp 添加商品

<body>

<%

request.setCharacterEncoding("gb2312");

String name=request.getParameter("name");

String money=request.getParameter("money");

String jifen=request.getParameter("jifen");

String sql="";

sql="insert into product(name,money,jifen)values('"+name+"','"+money+"','"+jifen+"')";

if(mybean.executeUpdate(sql)==true)

out.print ("<script language='javascript'>alert('数据添加成功');location.href('listproduct.jsp');</script>");

else

out.print("<script language='javascript'>alert('数据添加失败');history.go(-1);</script>");

%>

</body>

//saveUpdatemembertype.jsp 修改会员等级限制

<body>

<%

request.setCharacterEncoding("gb2312");

String ids=request.getParameter("ids");

String minmoney=request.getParameter("minmoney");

String maxmoney=request.getParameter("maxmoney");

String sql="";

sql="update types set minmoney='"+minmoney+"',maxmoney='"+maxmoney+"' where id="+ids;

if(mybean.executeUpdate(sql)==true)

out.print ("<script language='javascript'>alert('数据更新成功');location.href('listmembertype.jsp');</script>");

else

out.print("<script language='javascript'>alert('数据更新失败');history.go(-1);</script>");

%>

</body>

// saveupdateselecttype.jsp 修改积分兑换规则

<body>

<%

request.setCharacterEncoding("gb2312");

String jftype="";

String state="";

jftype=request.getParameter("jftype");

state=request.getParameter("state");

String ids=request.getParameter("ids");

String sql="";

sql="update jftype set jftype='"+jftype+"',state='"+state+"'";

if(mybean.executeUpdate(sql)==true)

out.print ("<script language='javascript'>alert('选择类型成功');location.href('listselecttype.jsp');</script>");

else

out.print("<script language='javascript'>alert('选择类型失败');history.go(-1);</script>");

%>

</body>

// saveUpdateUser.jsp 修改会员信息

<body>

<%

request.setCharacterEncoding("gb2312");

String names="";

String sex="";

String age="";

String tel="";

String address="";

names=request.getParameter("name");

sex=request.getParameter("sex");

age=request.getParameter("age");

tel=request.getParameter("tel");

address=request.getParameter("address");

String number=request.getParameter("number");

String ids=request.getParameter("ids");

String sql="";

sql="update members set name='"+names+"',sex='"+sex+"',age='"+age+"',tel='"+tel+"',address='"+address+"',number='"+number+"' where id="+ids;

if(mybean.executeUpdate(sql)==true)

out.print ("<script language='javascript'>alert('数据添加成功');location.href('listUser.jsp');</script>");

else

out.print("<script language='javascript'>alert('数据添加失败');history.go(-1);</script>");

%>

</body>

// updateguiyuan.jsp 修改柜员信息

<body>

<div id="mainDiv">

<div id="topDiv">

<div id="tmenu"><font color="white">超市会员积分管理系统</font></div></div>

<div id="centerDiv">

<jsp:include page="left.jsp" />

<div id="right">

<div id="current">&nbsp;&nbsp;&nbsp;&nbsp;当前位置:柜员修改</div>

<jsp:useBean id="mybean" class="bean.DB"/>

<%

request.setCharacterEncoding("gb2312");

String ids=request.getParameter("ids");

String sql="select * from admin where id ="+ids+"";

ResultSet rs=mybean.executeQuery(sql);

String name="";

String sex="";

String age="";

String username="";

String tel="";

String password="";

if(rs.next())

{

name=rs.getString("name");

sex=rs.getString("sex");

age=rs.getString("age");

tel=rs.getString("tel");

username=rs.getString("username");

password=rs.getString("password");

}

%>

<form action="saveguiyuan.jsp" method="post" name="form1" οnsubmit="return commit()">

<table width="84%" border="0" cellpadding="0" cellspacing="0" >

<!--DWLayoutTable-->

<tr>

<td height="66" valign="top">

<table width="81%" border="0" cellpadding="0" cellspacing="1" bgcolor="#0099FF" align="center">

<!--DWLayoutTable-->

<tr>

<td height="33" colspan="6" align="center" valign="middle" bgcolor="#98C6D1">修改柜员信息</td>

</tr>

<tr>

<td width="223" height="38" align="center" valign="middle" bgcolor="#98C6D1">柜员姓名:</td>

<td width="217" align="left" valign="middle" bgcolor="#98C6D1"><label>

&nbsp;</label>

<label>

<input type="text" name="name" value="<%=name%>" /><input type="hidden" name="ids" value="<%=ids%>" />

</label></td>

<td width="211" align="right" valign="middle" bgcolor="#98C6D1">柜员年龄:</td>

<td width="227" align="left" valign="middle" bgcolor="#98C6D1">&nbsp;

<input type="text" name="age" value="<%=age%>" /></td>

</tr>

<tr>

<td width="223" height="38" align="center" valign="middle" bgcolor="#98C6D1">柜员性别:</td>

<td width="217" align="left" valign="middle" bgcolor="#98C6D1"><label>

&nbsp;</label>

<label>

<input type="text" name="sex" value="<%=sex%>" />

</label></td>

<td width="211" align="right" valign="middle" bgcolor="#98C6D1">联系电话:</td>

<td width="227" align="left" valign="middle" bgcolor="#98C6D1">&nbsp;

<input type="text" name="tel" value="<%=tel%>"/></td>

</tr>

<tr>

<td width="223" height="43" align="center" valign="middle" bgcolor="#98C6D1">会员编号:</td>

<td width="217" align="left" valign="middle" bgcolor="#98C6D1"><label>

&nbsp;</label>

<label>

<input type="text" name="username" value="<%=username%>" readonly="true" />

</label></td>

<td width="211" align="right" valign="middle" bgcolor="#98C6D1">会员密码:</td>

<td width="227" align="left" valign="middle" bgcolor="#98C6D1">&nbsp;

<input type="text" name="password" value="<%=password%>" readonly="true" /></td>

</tr>

<tr>

<td height="33" colspan="4" align="center" valign="middle" bgcolor="#98C6D1">

<input type="submit" name="Submit" value="提交" />

&nbsp;</td>

</tr>

</table></td></tr>

</table>

</form>

</div>

</div></div>

<div id="bottomDiv"></div>

</body>

// updatemembertype.jsp 修改会员积分

<body>

<div id="mainDiv">

<div id="topDiv">

<div id="tmenu"><font color="white">超市会员积分管理系统</font></div></div>

<div id="centerDiv">

<jsp:include page="left.jsp" />

<div id="right">

<div id="current">&nbsp;&nbsp;&nbsp;&nbsp;当前位置:修改会员积分</div>

<jsp:useBean id="mybean" class="bean.DB"/>

<%

request.setCharacterEncoding("gb2312");

String ids=request.getParameter("ids");

String sql="select * from types where id ="+ids+"";

ResultSet rs=mybean.executeQuery(sql);

String typename="";

String minmoney="";

String maxmoney="";

if(rs.next())

{

typename=rs.getString("typename");

minmoney=rs.getString("minmoney");

maxmoney=rs.getString("maxmoney");

}

%>

<form action="saveUpdatemembertype.jsp" method="post" name="form1" οnsubmit="return commit()">

<table width="84%" border="0" cellpadding="0" cellspacing="0" >

<!--DWLayoutTable-->

<tr>

<td height="66" valign="top">

<table width="81%" border="0" cellpadding="0" cellspacing="1" bgcolor="#0099FF" align="center">

<!--DWLayoutTable-->

<tr>

<td height="33" colspan="6" align="center" valign="middle" bgcolor="#98C6D1">修改会员类别信息</td>

</tr>

<tr>

<td width="223" height="38" align="center" valign="middle" bgcolor="#98C6D1">类别名称:</td>

<td width="217" align="left" valign="middle" colspan="3" bgcolor="#98C6D1"><label>

&nbsp;</label>

<label>

<input type="text" name="name" value="<%=typename%>" readonly="true"/><input type="hidden" name="ids" value="<%=ids%>" />

</label></td>

</tr>

<tr>

<td width="223" height="38" align="center" valign="middle" bgcolor="#98C6D1">最小金额:</td>

<td width="217" align="left" valign="middle" bgcolor="#98C6D1"><label>

&nbsp;</label>

<label>

<input type="text" name="minmoney" value="<%=minmoney%>" />

</label></td>

<td width="211" align="right" valign="middle" bgcolor="#98C6D1">最大金额:</td>

<td width="227" align="left" valign="middle" bgcolor="#98C6D1">&nbsp;

<input type="text" name="maxmoney" value="<%=maxmoney%>"/></td>

</tr>

<tr>

<td height="33" colspan="4" align="center" valign="middle" bgcolor="#98C6D1">

<input type="submit" name="Submit" value="提交" />

&nbsp;</td>

</tr>

</table></td></tr>

</table>

</form>

</div>

</div></div>

<div id="bottomDiv"></div>

</body>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。