Javajsp客户关系管理系统 44页

  • 1.23 MB
  • 2022-05-17 10:55:11 发布

Javajsp客户关系管理系统

  • 44页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
毕业论文(设计)客户关系管理系统学生姓名:年级专业:指导老师:学院:提交日期:2007年7月39 摘要【摘要】本文介绍了如何使用JSP开发一个客户关系管理系统,目的在于让大家共同学习和运用这一语言的体会和收获。本系统是Intranet环境下面的电子商务的客户关系管理,通过企业管理技术、电子商务和信息技术的高度集成,帮助企业在全球经济一体化的激烈市场竞争环境中,建立以市场、客户为中心的管理体系,有效管理企业与客户之间的关系,提高客户忠诚度,实现客户价值的最大化。从而提高企业的核心竞争力。企业要想生存发展,就必须与与之息息相关的客户建立起良好的关系,不断发展新客户,以企业高质量的产品、优质的服务、良好的资信吸引新客户;经常维系与老客户的关系,以规范的客户管理方式、温馨的客户关怀、高效的客户服务来提升老客户的忠诚度。由此,客户管理系统应运而生。【关键词】Struts框架、Struts框架的工作原理、样式层、持久层、服务层、控制层。[Abstract]ThisarticleintroducedhowusesJSPtodevelopacustomerrelationsmanagementsystemmanagementsystem,thegoalliesinletseverybodystudyandutilizethislanguagetogethertheexperienceandtheharvest.ThissystemisundertheIntranetenvironmentelectroniccommercecustomerrelationsmanagement,throughthebusinessmanagementtechnology,theelectroniccommerceandtheinformationtechnologyhighintegration,helpstheenterpriseinthewholeworldeconomicintegrationintensemarketcompetitionenvironment,establishestakethemarket,thecustomerasthecentralmanagementsystem,effectivelymanagesbetweentheenterpriseandthecustomerrelations,enhancesthecustomerloyalty,realizationcustomervaluemaximization.Thusenhancestheenterprisethecorecompetitiveability.Theenterpriseneedstowanttosurvivethedevelopment,mustwiththecustomerwhichiscloselylinkedwithitestablishthegoodrelations,unceasinglydevelopsthenewcustomer,bytheenterprisehighgradeproduct,thehighqualityservice,thegoodcapitalletterattractsthenewcustomer;Frequentlymaintainswiththeoldcustomerrelations,bythestandardcustomermanagementway,thewarmcustomerconcern,thehighlyeffectivecustomerservespromotestheoldcustomertheloyalty.Fromthis,thecustomermanagementsystemmanagementsystemarisesatthehistoricmoment.[Keyword]Strutsframe,Strutsframeprincipleofwork,stylelevel,lastinglevel,servicelevel,controllevel.39 目录摘要1引言11绪论21.1-Internet与企业级应用平台21.2-J2EE及其他相关技术32系统分析72.1需求分析72.2可行性分析73总体设计73.1项目规划73.2系统功能结构图93.3设计目标93.4开发及运行环境103.5数据库设计104网站总体架构164.1系统架构设计164.2网站首页的运行结果194.3类的分布235基础信息维护模块设计235.1工具层的实现235.2样式层的实现275.3持久层的实现285.4服务层的实现305.5企业类型设置控制层的实现316系统测试386.1测试项目388.2测试方法39结论39致谢40参考文献4039 引言21世纪是信息的时代,是网络的时代,进入信息社会高速发展的时代,数字化革命给所有领域带来新的改变。随着Internet的普及,无论人们相隔多么遥远,都有天涯若比邻的感觉。足不出户,便可知天下新近之大事,便可与大洋彼岸的朋友畅谈无阻。网页逐渐融入人们的生活,快速及时地浏览新闻,获取五彩缤纷的网上信息,已成为人们日常生活的一部分,与此同时越来越多的企业建立了自己的WWW网站,企业通过网站可以展示产品,发布最新动态,与用户进行交流和沟通,与合作伙伴建立联系,以及开展电子商务等。互联网的世界里蕴藏无限生机,这里只有想不到的、没有做不到的。网络发展前景无限,及早与网络结合,与信息时代同步,与高科技汇合,定会给社会各行各业的发展注入新鲜的活力。在网络技术的领域里,传统的商务网站的管理方式有两种,一是静态HTML页面,更新信息时需要重新制作页面然后上传页面并修改相应链接,然而随着Internet的进一步发展,这种静态Web站点的开发与维护变得越来越困难,而且不能与浏览者进行有效交互,从而使得这种方法已不多用。二是基于ASP、PHP或者JSP和脚本语言,将动态网页和数据库结合,通过应用程序来处理信息,这是目前较为流行的做法。客户资源决定企业的核心竞争力。任何一家企业,有钱就可以买到最好的设备、尖端的技术,但却买不到强大的客户资源。面对着竞争对手不断截留我们的客户,各企业商家所关心的不再局限于自身的产品质量、生产设备、员工的素质,更多的是关心自己的销售群体(客户群),关心他们的想法、需求、购买目的,并与客户建立好良好的、长期的客户关系,强化与客户的沟通,帮助企业留住老客户的同时,更好地拓展新客户,提升客户价值,从而全面提升企业竞争能力和盈利能力,为企业的发展壮大保驾护航。本文论述的就是采用JSP+Tomcat+SQL开发环境开发动态的Web客户关系管理系统。39 1绪论1.1-Internet与企业级应用平台1.1.1-Internet的现状国际互联网(Internet)是使用公共语言进行通讯的全球计算机网络,它的出现是二十世纪末人类社会最伟大的成就之一。Internet的迅速普及化,使其逐步地从大学、科研机构走向企业和百姓家庭,其功能也已从信息共享演变为一种大众化的信息传播工具,将我们带入了一个新的信息化的时代。Web是Internet上发展最快、应用最广泛也最实用的超文本信息通信系统,它以客户机/服务器(B/S)模式进行数据通信。服务器端通过WebServer可以提供各种服务;客户端可以通过浏览器(Browser)访问多种协议的多媒体信息,依据用户的需要组织和传递信息。用户只需要提出自己的查询要求,具体到什么地方、如何取回信息都由Web自动完成。通过浏览器,用户只需用鼠标点击显示屏上高亮度或有下划线的词语,就可将与该词语相关联的文件取回并显示在屏幕上,用户无需关心这些文件存放在Internet上的哪台计算机中。人们可以通过Web浏览器浏览和检索全球所有Web站点的信息,这就使得信息的共享与交流越来越迅速、越来越方便,正因为如此,Web才成为了目前Internet上信息发布与出版的重要途径。1.1.2-企业级应用平台随着计算机和Internet的迅速普及,越来越多的企业使用信息自动化管理模式代替原始的纸张管理模式,因此一套针对企业级应用的完善的企业MIS(包括ERP、CRM、OA等)系统将给企业的信息自动化管理带来一场新的革命。企业级应用程序的开发在不断的发展。企业级应用程序需要设计、编译、开发低价位的、高速的、占用少量资源的程序。从C、VB语言到的C#、Java语言,从Lotus公司的Notes平台到微软公司的.net平台和Sun公司的J2EE平台,企业级应用平台的发展变化是巨大的。现金两种主流企业级开发平台的开发语言Java和C#在架构上有着惊人的相似:虚拟机技术,基于沙箱的安全模型,分层的命名空间,垃圾回收等。作为一种新语言,C#加入了基于XML的标记,可以被编译器用来直接生成文档,C#的另一个特点:一站式软件(one-stop-shoppingsoftware)强调了自解释(self-describing)的编码方式,即头文件,IDL(InterfaceDefinitionLanguage),GUID和其他复杂的接口无需再被引用。也即是C#,VB.NET等代码片断可以任意的被加入到其他语言中。这无疑在多种语言混合编程的模式中是一次飞跃,但是,其难维护性也是不言而喻的。跨平台是J2EE的最大卖点,当开发商完成了符合J2EE规范的软件时,其客户可以依据其喜好和实力来选择不同应用服务器:从基于opensource的免费软件到高端满足B2B需求的商业套件来搭建自己的平台。微软的跨平台解决方案是Webservices,它解决的是异种平台上不同应用之间的连通性问题。但在现实中更迫切需要的是如何在异构的平台上构造具有可扩展性,高可靠性,高可用性,故障冗余,错误恢复能力的企业应用。因为缺少了这一点,从结构上讲,.NET平台还远未完善。以下是两者一个简单的比较表。39 指标J2EE.NET易用性★★★★★扩展能力★★★★★多平台支持★★★★★多语言支持★★★★★可靠性★★★★★★性能★★★★★★可管理性★★★★★★重用性★★★★★★负载平衡★★★★★★开放标准★★★★★★表1-1从以上的比较可以看出,J2EE在很多方面都要优于.NET平台,特别是对企业而言,内部众多系统的整合、系统的延展性、安全性是更需要注意的议题,而这些都是J2EE的优势,也是微软的不足处。而且,现在大型的系统基本都是采用J2EE,在技术上也较.NET成熟。1.2-J2EE及其他相关技术1.2.1-J2EE技术J2EE不是简单的一门语言、一种工具或一套服务,而是一个标准中间件体系结构,旨在简化和规范多层分布式企业应用系统的开发和部署。J2EE方案的实施可显著地提高系统的可移植性、安全性、可伸缩性、可重用性和负载平衡。由于基于规范的各J2EE平台之间具有良好的兼容性,因此J2EE应用系统可以部署在不同的应用服务器上,无需或只需进行少量的代码修改。J2EE规范定义了一个基于组件的多层企业应用系统开发平台,其逻辑结构如下图所示。图中的椭圆形表示组件,大矩形表示容器,包含向下文字的小矩形表示API,箭头表示访问,箭头线上的文字表示相应的协议。39 图1-1组件-容器搭建的体系架构J2EE构架包含以下层:用户层——用来与用户交互,并把来自系统的信息显示给用户。J2EE平台支持不同类型的用户,包括HTML用户,JavaApplet和Java应用等。Web层——Web层产生表示逻辑,并接受来自表示客户端的用户反馈,这些表示客户端通常为HTML客户端、JavaApplets和其他的Web客户端。在所接受的客户端请求的基础上,表示层对用户的请求产生相应的回应。J2EE平台中,是由Web容器内的Servlet和Jsp来实现这一层的。业务层——这一层处理应用的核心业务逻辑。业务层为低层业务服务组件提供必要的接口。业务组件通常被实现为EJB容器内的EJB组件。其中,EJB容器提供组件生命周期、管理持久性、事务和资源分配等。J2EE是一个基于组件-容器模型的系统平台,其核心概念是容器。容器是指为特定组件提供服务的一个标准化的运行时环境,Java虚拟机就是一个典型的容器。组件是一个可以部署的程序单元,它以某种方式运行在容器中,容器封装了J2EE底层的API,为组件提供事务处理、数据访问、安全性、持久性等服务。在J2EE中组件和组件之间并不直接访问,而是通过容器提供的协议和方法来相互调用。组件和容器间的关系通过“协议”来定义。容器的底层是J2EE服务器,它为容器提供J2EE中定义的各种服务和API。一个J2EE服务器(也叫J2EE应用服务器)可以支持一种或多种容器。在图2.1中,每个容器的服务包括两部分:J2SE(Java2PlatformStandardEdition)和一组扩展的服务,如目录服务、事务管理、数据访问、消息机制、安全性等。(2)J2EE特点39 独立于硬件配置和操作系统J2EE运行在Java虚拟机(JVM)上,利用Java本身的跨平台特性,独立于硬件配置和操作系统。Java运行环境(JRE)——JVM的可安装版本加上其他一些重要组件——几乎可以运行于所有的硬件/OS组合。因此,通过采用Java,J2EE使企业免于高昂的硬件设备和操作系统的再投资,保护已有的IT资源。在很多情况下,J2EE还可以直接运行在EIS服务器环境中,从而节约网络带宽,提高性能。多层、分布式中间件语法采用多层分布式应用模型,J2EE将应用开发划分为多个不同的层,并在每一个层上定义组件。各个应用组件根据他们所在的层分布在同一个或不同的服务器上,共同组成基于组件的多层分布式系统。有了J2EE,分布式系统的开发变得简单了,部署的速度也可以加快。J2EE组件的分布与服务器环境无关,所有的资源都可通过分布式目录进行访问。这意味着开发人员不再需要为组件和资源的分布问题耗费精力,从而可以有更多的时间专注于业务逻辑的实现,提高开发效率。轻松的企业信息系统集成J2EE技术出台后不久,很快就将JDBC、JMS和JCA等一批标准归纳到自身体系之下,这大大简化了企业信息系统整合的工作量,方便企业将诸如早期投资的系统,ERP和数据库等多个不同的信息系统进行无缝集成。由于几乎所有的关系型数据库系统都支持JDBC,因此只需借助必要的JDBC驱动程序,J2EE应用就可以和所有主流数据库系统进行通信。类似的,目前业界正冒出一批基于Java连接器体系标准的EI适配器,也用于提供各类早期投资的系统和ERP/CRM的无缝集成。灵活性、可移植性和互操作性利用Java的跨平台特性,J2EE组件可以很方便地移植到不同的应用服务器环境中。这意味着J2EE的应用系统可以部署在不同的应用服务器上,在全异构环境下,J2EE组件仍可彼此协同工作。这一特征使得装配应用组件首次获得空前的互操作性。例如,安装在IBMWebsphere环境下的EJB,一方面可以直接与Websphere环境下的CICS直接交互,另一方面也可以通过安装在别处的BEAWeblogic服务器上的EJB进行访问。引进面向服务的体系结构随着Web服务以及SOAP等开放标准的出现,企业异构系统之间的互操作性成为可能。J2EE,作为一个可扩展平台,很自然需要加入Web服务特性。为此,Sun公司发布了一整套称为“JAX包”的API,支持从XML语法分析、XML绑定、SOAP消息发送、注册表查寻、XMLRPC到XML消息传递等所有各种Web服务需求。Web应用服务器上广泛采用的标准J2EE是首个获得业界广泛认可和采纳的中间件标准。目前几乎所有的一流Web应用服务器,如BEA的Weblogic、IBM的Websphere、HP的应用服务器、Sun的iPlanet和Macromedia的Jrun等,都是基于J2EE的。而且,有了J2EE,企业的应用开发对于某个特定的开发商或应用服务供应商的依赖性更小。应用组件只要符合J2EE规范,完全可以部署在不同的应用服务器上。为了确保不同厂商的J2EE应用服务器的兼容性和一致性,Sun公司发布了J2EE兼容性测试包。39 1.2.2-JSP简介JSP是英文JavaServerPages的缩写,它是Sun公司首创的一种新型动态网页编程技术。JSP不但完全拥有Servlet的技术优点,而且JSP源代码能够直接嵌入HTML之中,使得程序开发更为简化和快速。由于JSP技术是从Java编程语言中的Servlet技术扩展而来的,JSP当然也实现了Servlet所具有的动态页面与静态页面分离以及程序代码与硬件平台的无关性。JSP同当前主流的ASP、PHP网络编程语言相比,它具有以下几个优点:①平台无关性:差不多所有的平台上,都可以见到一直的JavaServlet/JSP的WebServer/ApplicationServer系统,它可以让用户在任意的环境下做开发,在任意的环境中做部署,在任意的环境中扩展功能,相比之下,ASP与PHP的局限性也是显而易见的。②可移植性强:JSP继承了Java的一切特征,它使得JSP代码在一次编译之后,可以在任意的地方运行。③运行效率高:第一次请求一个JSP页面时,运行效率也许会比较低,但在此之后,JSP的运行效率比ASP、PHP要高出许多。利用JSP技术开发的网站新闻管理系统,实现了网站新闻的动态管理,因为可以用来动态发布新闻信息,所以使得对信息的管理更加及时、高效,提高了工作效率。1.2.3-数据库概述从20世纪50年代中期开始,计算机的应用由科学研究部门逐步扩展至企业、行政部门。至60年代,数据处理成为计算机的主要应用。数据库技术作为数据管理技术,是计算机软件领域的一个重要分支,产生于60年代末。现已形成相当规模的理论体系和实用技术。数据库(Database)DB是统一管理的相关数据的集合。数据库管理系统(DatabaseManagermentSystem)DBMS是位于用户和操作系统之间的一层数据管理软件,为用户或应用程序提供访问DB的方法,包括DB的建立、查询、更新及各种数据控制。数据库系统(DatabaseSystem)DBS是实现有组织地、动态地存储大量关联数据,方便多用户访问的计算机软、硬件和数据资源组成的系统,即采用了数据库技术的计算机系统。数据库技术:是一门研究数据库的结构、存储、管理和使用的软件学科。39 系统分析信息时代的今天,各企业商家所关心的不再局限于自身的产品质量、生产设备、员工的素质,更多的是关心自己的销售群体(客户群),关心他们的想法、需求、购卖目的。众所周知,顾客就是我们的上帝,我们只有满足了上帝的需求,上帝才能给我们带来一切。一个企业要生存、要发展,就是要不断的满足客户的需求,无论我们做出什么样的决策,最终都是为了这个的目。每个领域都有自身生存法则,但无论这个法则如何变化,为客户服务的宗旨是不会变的。作为企业,我们只有不断地挖掘新客户,维护好和老客户的关系,占领市场客户群体的绝大多数份额,才能在整个领域取得一席之地。海尔总裁张瑞敏指出:“客户资源决定企业核心竞争力”,上个世纪80年代是物品短缺的时代,而现在,信息时代是客户短缺的时代。企业发展所需的各种资源(包括人力、物力、生产力)都是可以创造的,但每个领域中的客户资源确是有限的,所以通过创新(产品的创新、企业管理的创新、服务的创新)来抢占有限的客户资源、维护好企业和客户之间的关系、了解客户的需求动向,成为企业生存发展面临的重大问题。2.1需求分析通过调查研究,要求系统满足以下功能:q由于操作人员的计算机知识水平有限,要求有良好的人机界面,可以很简单方便的管理各种客户信息。q方便的数据查询功能。q管理客户的详细信息:包括客户的基本信息、联系人信息、业务来往信息等。q为更多地了解客户的需求,应设置客户服务模块,用以记录客户的反馈信息及投诉信息,并对反馈信息及投诉信息进行图表分析。q与客户联系人之间通过邮件(E-mail)进行联系,对联系人邮箱地址进行管理。q提供各种信息列表的打印功能,并可实现客户信封打印。q在相应的权限下,可以删除或修改数据。2.2可行性分析目前,大多数企业内部的客户管理还处于手工管理阶段,工作起来效率很低,不能及时了解各类客户的实际情况,也无法快速地进行客户信息的查询等操作;不便于动态及时地了解客户的需求及反馈信息,致使企业不能更好地适应当前经济形势发展的需要。手工管理还存在着许多弊端,由于不可避免的人为因素,经常造成数据的遗漏、误报。计算机信息化管理有着储存信息量大、速度快等许多优点,提供给用户的处理信息及时、准确、快捷,同时也能提高企业员工的自身素质。3总体设计3.1项目规划客户管理系统是一个典型的数据库开发应用程序,由基础信息维护、客户信息维护、客户服务、信息查询、客户管理、辅助工具、系统管理7部分组成。39 q基础信息维护该模块主要是对客户的企业类型、企业性质、客户银行、企业资信、客户级别、客户满意程度、区域信息等一些基础信息进行设置。q客户信息维护该模块主要是对客户信息、联系人信息、业务来往等一些客户信息进行添加及维护操作的功能。q客户服务该模块主要是对客户反馈信息及客户投诉信息进行添加、删除等操作,同时对反馈及投拆的数据以图表的形式加以分析。q信息查询该模块主要实现对客户信息、联系人信息等各种信息的查询,同时可对国内的各大城市的区号及邮编进行查询。q数据管理该模块主要实现各种数据的打印操作,主要包括:客户信封打印、客户信息打印、联系人信息打印及全国各省份的邮编信息的打印。q系统管理访模块主要实现对操作员、,主要包括操作员设置、密码修改、、退出4个部分。q辅助工具该模块主要为用户提供一些辅助的工具,包括调用Word、调用Excel、发送邮件、计算器及工作业务备忘录。39 3.2系统功能结构图图1客户管理系统功能结构图3.3设计目标本系统是针对中小型企业客户管理现状,通过网络实现对客户的管理,主要实现如下目标:q对客户信息(客户基本信息、联系人信息、业务来往信息)进行全面管理。q及时查看库存信息,并通过网站对入库、出库信息进行管理。q强大的客户信息、联系人信息报表打印功能及客户信封打印功能。q及时了解客户的反馈信息及投诉信息,并以图表形式对数据进行分析。q实现各种信息查询功能。q实现了直接通过网络拨打用户电话及发送E-mail。q对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。q操作员可以随时修改自己的口令。q数据保密性强,为每个用户设置相应的权限级别。q提供辅助工具,方便用户操作及使用。q系统运行稳定、安全可靠。3.4开发及运行环境硬件平台:qCPU:P41.8GHz;q内存:256MB以上。39 软件平台:q操作系统:Windows2000;q数据库:SQLServer2000;q开发工具包:JDKVersion1.4.2;qJSP服务器:Tomcat;q浏览器:IE5.0,推荐使用IE6.0;q分辨率:最佳效果1024×768。3.5数据库设计本系统数据库采用SQLServer2000数据库,系统数据库名称为db_Client。数据库db_Client中包含18张表。(1)tb_Client_qyxx(区域表)区域表主要用来保存所设置的区域信息。表tb_Client_qyxx的结构如表1.1所示。表B.1表tb_Client_qyxx的结构字段名数据类型长度是否主键描述qyxx_idvarchar30区域编号qyxx_qymcvarchar50区域名称qyxx_qyjbvarchar50区域级别qyxx_zscdvarchar50区域重视程度qyxx_qygmlvarchar50区域购买力描述qyxx_bzvarchar50备注信息idint4数据库流水号(2)tb_Client_qyxz(企业性质信息表)企业性质信息表用来保存用户所设置的企业性质信息。表tb_Client_qyxz的结构如表B.2所示。表B.2表tb_Client_qyxz的结构字段名数据类型长度是否主键描述qyxz_idchar30企业性质编号qyxz_xzmcchar50性质名称qyxz_bztext16备注信息idint4数据库流水号(3)tb_Client_qylx(企业类型信息表)企业类型信息表用来保存用户所设置的客户企业类型信息。表tb_Client_qylx的结构如表B.3所示。表B.3表tb_Client_qylx的结构字段名数据类型长度是否主键描述39 qylx_idvarchar30企业类型编号qylx_lxmcvarchar50类型名称qylx_bztext16备注信息idint4数据库流水号(4)tb_Client_qyzx(企业资信信息表)企业资信信息表主要用来保存客户的企业资信信息。表tb_Client_qyzx的结构如表B.4所示。表B.4表tb_Client_qyzx的结构字段名数据类型长度是否主键描述qyzx_idvarchar30企业资信编号qyzx_zxjbvarchar50资信级别qyzx_bztext16备注信息idvarchar50数据库流水号(5)tb_Client_Khjb(客户级别表)客户级别表主要用来保存客户的级别信息。表tb_Client_Khjb的结构如表B.5所示。表B.5表tb_Client_Khjb的结构字段名数据类型长度是否主键描述khjb_idvarchar30客户级别编号khjb_jbmcvarchar50级别名称khjb_zdywlnumeric9该级别每月的最低业务量khjb_bztext16备注信息idint4数据库流水号(6)tb_Client_khmyd(客户满意程度表)客户满意程度表用来保存客户的满意程度信息。表tb_Client_khmyd的结构如表B.6所示。表B.6表tb_Client_khmyd的结构字段名数据类型长度是否主键描述khmyd_idvarchar30客户满意度编号khmyd_mydvarchar50客户满意度khmyd_bztext16备注信息idint4数据库流水号(7)tb_Client_bank(客户银行信息表)客户银行信息表主要用来保存客户的银行名称信息。表tb_Client_bank的结构如表B.7所示。表B.7表tb_Client_bank的结构字段名数据类型长度是否主键描述39 bank_idvarchar50客户银行编号bank_namevarchar50银行名称bank_bzvarchar50备注信息idint4数据库流水号(8)tb_khxx(客户信息表)客户信息表用来保存客户的详细信息。表tb_khxx的结构如表B.8所示。表B.8表tb_khxx的结构字段名数据类型长度是否主键描述khxx_idvarchar50客户编号khxx_mcvarchar50客户名称khxx_qyxzvarchar30企业性质khxx_qylxvarchar30企业类型khxx_qyzxvarchar30企业资信khxx_qydzvarchar50企业地址khxx_szsfvarchar30所属省份khxx_szcsvarchar30所属城市khxx_gsybvarchar6公司邮编khxx_frdbvarchar20法人代表khxx_khyhvarchar50开户银行khxx_yhzhvarchar50银行帐号khxx_nshvarchar50纳税号khxx_ICcardvarchar50客户IC卡号khxx_gswzvarchar50公司网址khxx_gsdhvarchar20公司电话khxx_gsczvarchar20公司传真khxx_lxrvarchar30主要联系人khxx_lxrdhvarchar20联系人电话khxx_khjbvarchar20客户级别khxx_bztext16备注信息idint4数据库流水号(9)tb_Client_khfk(客户反馈信息表)客户反馈信息表用来保存客户的反馈信息。表tb_Client_khfk的结构如表B.9所示。表B.9表tb_Client_khfk的结构字段名数据类型长度是否主键描述39 khfk_idvarchar30客户反馈编号khfk_fkbtvarchar50反馈标题khfk_khmcchar50客户名称khfk_fknrtext50反馈内容khfk_fkrqvarchar30反馈日期khfk_fkslrchar30反馈意见受理人khfk_khmydvarchar50客户满意程度khfk_bztext16备注信息idint4数据库流水号(10)tb_Client_csxx(国内城市区号邮编表)国内城市区号邮编表用来保存国内各城市的区号及邮编信息。表tb_Client_csxx的结构如表B.10所示。表B.10表tb_Client_csxx的结构字段名数据类型长度是否主键描述csxx_csjcvarchar6省份简称csxx_sfmcvarchar23省份名称csxx_csmcvarchar25城市名称csxx_ybvarchar10邮编csxx_dhqhvarchar10电话区号idint4数据库流水号(11)tb_bdwxx(本单位信息表)本单位信息表用来保存本单位的相关信息。表tb_bdwxx的结构如表B.11所示。表B.11表tb_bdwxx的结构字段名数据类型长度是否主键描述bdwxx_mcnvarchar50单位名称bdwxx_lxdznvarchar50联系地址bdwxx_ybnvarchar50邮政编码bdwxx_cznvarchar50传真bdwxx_frdbnvarchar50法人代表bdwxx_lxdhnvarchar50联系电话bdwxx_khyhnvarchar50开户银行bdwxx_yhzhnvarchar50银行账号bdwxx_wznvarchar50网址bdwxx_nshnvarchar50纳税号39 (12)tb_Client_cpxs(产品销售表)产品销售表用来保存产品销售信息。表tb_Client_cpxs的结构如表B.12所示。表B.12表tb_Client_cpxs的结构字段名数据类型长度是否主键描述cpxs_idvarchar30产品销售编号cpxs_mcvarchar50销售产品名称cpxs_cpdjvarchar30产品单价cpxs_khIdvarchar50客户编号cpxs_xsrqvarchar50产品销售日期cpxs_bzvarchar50备注信息idint4数据库流水号(13)tb_Client_gzbw(工作备忘表)工作备忘表用来保存工作备忘的相关信息。表tb_Client_gzbw的结构如表B.13所示。表B.13表tb_Client_gzbw的结构字段名数据类型长度是否主键是否描述gzbw_idvarchar50工作备忘编号gzbw_btvarchar50记事标题gzbw_nrvarchar50记事内容gzbw_jsrqvarchar50记事日期gzbw_bzvarchar16备注信息gzbw_managervarchar50管理理员名称idint4数据库流水号(14)tb_Client_khts(客户投诉表)客户投诉表用来保存客户投诉信息。表tb_Client_khts的结构如表B.14所示。表B.14表tb_Client_khts的结构字段名数据类型长度主键否描述khts_idvarchar30客户投诉编号khts_qymcvarchar50企业名称khts_tsrvarchar50投诉人khts_tsztvarchar10投诉主题khts_tsnrvarchar50投诉内容khts_tsrqvarchar30投诉日期khts_clbfvarchar16处理办法khts_khmydvarchar30客户满意程度39 khts_tsslrvarchar20投诉受理人khts_bzvarchar16备注信息idint4数据库流水号(15)tb_Client_lxrxx(联系人信息表)联系人信息表用来保存联系人相关信息。表tb_Client_lxrxx的结构如表B.15所示。表B.15表tb_Client_lxrxx的结构字段名数据类型长度是否主键描述lxrxx_idvarchar20联系人编号lxrxx_qymcvarchar20企业名称lxrxx_xmvarchar50联系人姓名lxrxx_xbvarchar50联系人性别lxrxx_csnyvarchar50出生年月lxrxx_nlvarchar5联系人年龄lxrxx_zwvarchar30联系人职位lxrxx_bgdhvarchar30联系人办公电话lxrxx_Emailvarchar50联系人电子邮件lxrxx_sjvarchar20联系人手机lxrxx_grjjvarchar16个人简介lxrxx_djrqvarchar50登记日期lxrxx_xxdjrvarchar50信息登记人lxrxx_bsvarchar50联系人标识lxrxx_bzvarchar50联系人备注信息idint4数据库流水号(16)tb_Client_mydtj(满意程度表)满意程度表用来保存满意程度信息。表tb_Client_mydtj的结构如表B.16所示。表B.16表tb_Client_mydtj的结构字段名数据类型长度是否主键描述mydtj_mydvarchar30满意程度名称mydtj_slnvarchar9标识(17)tb_Client_sfzy(省份表)省份表用来保存各省份信息。表tb_Client_sfzy的结构如表B.17所示。表B.17表tb_Client_sfzy的结构字段名数据类型长度是否主键描述sfzy_sfidvarchar30编号39 sfzy_sfmcvarchar50省份名称sfzy_zymsvarchar16地理位置idint4数据库流水号(18)tb_user(操作用户表)操作用户表用来保存操作员信息。表tb_user的结构如表B.18所示。表B.18表tb_user的结构字段名数据类型长度主键否是否描述idint数据库流水号user_idvarchar20操作员编号user_namevarchar50操作员姓名user_mmvarchar30操作员密码user_bsvarchar50管理员标识menu_jcxxvarchar50基础信息维护标识menu_khxxvarchar50客户信息维护标识menu_khfwvarchar50客户服务标识menu_xxcxvarchar50信息查询标识menu_fzgjvarchar50辅助工具标识menu_xtglvarchar50系统管理标识menu_sjglvarchar50数据管理标识4网站总体架构4.1系统架构设计在编写代码之前,可以先把网站中可能用到的文件夹创建出来(例如:创建一个名为image的文件夹,用于保存网站中需要的图片),这样可以方便以后的开发工作,也可以规范网站的整体架构,我在开发客户管理系统时,首先设计了如图所示的文件夹架构图。在开发时只需要将文件保存在相应的文件夹中就可以了,非常方便。客户管理系统文件架构如图4.1所示。39 图4.1客户管理系统文件总体架构基础信息维护文件架构图如图4.2所示。图4.2基础信息维护文件架构图客户信息维护文件架构图及客户服务文件架构图如图4.3所示。39 图4.3客户服务及客户信息维护文件架构图信息查询文件架构图如图4.4所示。图4.4信息查询文件架构图数据管理文件架构图如图4.5所示。39 图4.5数据管理文件架构图系统管理文件架构图及辅助工具文件架构图如图4.6所示。图4.6系统管理及辅助工具文件架构图4.2网站首页的运行结果当管理员在进入客户管理系统后,首先进入客户管理系统的大厅,也就是客户管理系统的首页。客户管理系统首页包含基础信息维护、客户信息维护、客户服务、信息查询、数据管理、辅助工具以及系统管理的超链接。39 客户管理系统网站首页的运行结果如图4所示。图4网站首页运行结果网站框架说明如表1所示:表1网站首页页面说明区域名称说明对应文件1网站导航主要展示网站的旗帜广告和站内导航条top.jsp2功能模块主要用于显示导航模块中的功能information.jsp3内容显示主要用于显示功能模块中的内容right.jsp整个网站利用到jsp中的一个框架,框架由名称分别为top、left和main的3个jsp页面组成的,然后利用html代码在index.jsp(和WEB-INF同级目录中)页面中组合起来。代码如下:/***********************************index.jsp***************************************/客户管理系统主页面39 <body></body>区域top所对应的jsp页面(top.jsp,在jsp文件夹)的代码如下:/***********************************top.jsp***************************************/客户管理系统

基础信息维护 客户信息维护 客户服务 信息查询 数据管理 辅助工具 

区域left所对应的jsp页面(information.jsp,在jsp/information/information.jsp文件夹)的代码如下:/***********************************information.jsp*********************************/企业类型设置企业性质设置客户银行设置企业资信设置客户级别设置    客户满意程度设置区域信息设置 
区域main所对应的jsp页面(right.jsp,在jsp文件夹)的代码如下:/***********************************right.jsp***************************************/<%@pagecontentType="text/html;charset=gb2312"%>右页面

 

 

 

 

 39 4.3类的分布整个网站的实现功能利用到的框架Struts,基本上是以“类”的形式实现的。所以我设计一个类的分布图如下:图5类的分布图各个类所实现的功能如表2所示。表2类的功能名称功能持久层(dao文件夹)各种方法的实现样式层(domain文件夹)所存放的类是Actionform类,在类中必须要继承ActionForm(也就是entendsActionForm)服务层(server文件夹)存放的dao层功能的业务的类控制层(webtier文件夹)存放在jsp页面中存在的方法实现的类工具层(tool文件夹)类名为JDBConnection.java(连接数据库的功能)、类名为Chinese.java(字符级转换的类)、文件名为sqlSQLCode、Properties(主要存放sql语句)、SQLCode.java(主要是解析sqlSQLCode.Properties中的sql语句中的?)5基础信息维护模块设计基础信息维护主要功能块分为:区域信息设置、企业性质设置、企业类型设置、企业资信设置、客户级别设置、客户满意程度设置和客户银行设置。在这里单击任何一个功能模块都是一个查询功能。这些功能块的实现方法基本相同,下面以“企业类型设置”功能模块为例,详细介绍其通过MVC框架所实现的功能。单击“企业类型设置”超链接,即可进入到企业类型设置页。在该页中可以看到企业类型的各种详细功能,包括对数据的添加、修改、删除功能。下面就分层介绍各种功能的实现。5.1工具层的实现在工具层(tool文件夹)中主要存放的是常用的基本类,在这里不管任何一项功能都要调用相对应的类的方法。39 1.Chinese.java类(字符级转换的类)/*******************************Chinese.java*************************************/packagecom.tool;importjava.io.UnsupportedEncodingException;publicclassChinese{//将从form表单中去出的数据转换为汉字publicstaticStringstr(Stringa){try{returnnewString(a.getBytes("ISO-8859-1"));}catch(UnsupportedEncodingExceptione){e.printStackTrace();}returnnull;}}2.sqlCode.properties文件(sql语句的存放位置)/*******************************sqlCode.properties**********************************/#--基础信息维护--##--对区域信息表的操作(tb_Client_qyxx)--##--查询的操作—sql.qyxx.select=select*fromtb_Client_qyxx#--插入的操作—sql.qyxx.insert=insertintotb_Client_qyxxvalues("?","?","?","?","?","?")3.SQLCode.java类(通过这个类解析properties文件中的sql语句)/********************************SQLCode.java***********************************/packagecom.tool;publicfinalclassSQLCode{privatestaticSQLCodesqlCode=null;privatestaticjava.util.PropertiessqlCodeProperties=newjava.util.Properties();static{sqlCode=newSQLCode();}privateSQLCode(){_load();}publicstaticStringgetSQLCode(StringsqlKey){Stringsql="";if(sqlCodeProperties.containsKey(sqlKey)){sql=sqlCodeProperties.getProperty(sqlKey);}returnsql;}publicstaticSQLCodegetInstance(){returnsqlCode;}//指向sqlcode.properties的位置39 publicvoid_load(){StringfileName="/com/tool/sqlCode.properties";//通过指定路径找到资源文件存放在fileName中sqlCodeProperties.clear();//SqlCodeProperties清空try{java.io.InputStreamin=null;//定义输出流的变量try{in=getClass().getResourceAsStream(fileName);//把fileName中存放值放入in字符流中sqlCodeProperties.load(in);}finally{in.close();}}catch(java.io.IOExceptione){System.out.println(e.getMessage());}}}4.JDBConnction.java(这是个数据库类,用于加载数据库)/*******************************JDBConnection.java********************************/packagecom.tool;importjava.sql.DriverManager;importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.ResultSet;importjava.sql.Statement;//这是一个工具类实现与数据库的连接publicclassJDBConnection{Stringsd="com.microsoft.jdbc.sqlserver.SQLServerDriver";Stringsc="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=db_Client;user=sa;password=;";ResultSetrs=null;Connectionconect=null;publicJDBConnection(){try{Class.forName(sd);//通过构造方法加载对象}catch(java.lang.ClassNotFoundExceptione){System.err.println(e.getMessage());}}//只能执行查询的sql语句,并且通过Resulit类型的对象,把所读取的内容返回。publicResultSetexecuteQuery(Stringsql){try{conect=DriverManager.getConnection(sc);Statementstmt=conect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);rs=stmt.executeQuery(sql);39 }catch(SQLExceptionex){System.err.println(ex.getMessage());}returnrs;}publicintexecuteUpdate(Stringsql){//能够执行修改。删除和插入的sql语句。intresult=0;try{conect=DriverManager.getConnection(sc);Statementstmt=conect.createStatement();result=stmt.executeUpdate(sql);}catch(SQLExceptioner){System.err.println(er.getMessage());}returnresult;}publicvoidclose(){//数据库连接关闭的方法try{if(conect!=null){conect.close();}}catch(Exceptione){System.out.println(e);}}publicvoidsetAutoCommit(booleanflag){//设置自动提交的方法try{conect.setAutoCommit(flag);}catch(Exceptionexception){System.out.println("ExceptioninsetautoCommit:"+exception.getMessage());}}publicvoidcommit(){try{conect.commit();}catch(Exceptionexception){System.out.println("Exceptionincommit:"+exception.getMessage());}}publicvoidrollback(){//执行事物的回滚try{conect.rollback();}catch(Exceptionexception){39 System.out.println("Exceptioninrollback:"+exception.getMessage());}}//将sql语句中的?号转为相应的参数,其中参数为字符串型publicStringeditSqlCode(Stringsql,Stringstr){try{//截取从0到第一个问号的字符串加参数str,然后在加上第一问号以后的字符串sql=sql.substring(0,sql.indexOf("?"))+str+sql.substring(sql.indexOf("?")+1);}catch(Exceptione){System.out.println(e.getMessage());}returnsql;}publicStringeditSqlCode(Stringsql,Integerstr){//提取SQL语句,并把(intstr)传出来的值来代替?try{sql=sql.substring(0,sql.indexOf("?"))+str+sql.substring(sql.indexOf("?")+1);}catch(Exceptione){System.out.println(e.getMessage());}returnsql;}publicStringeditSqlCode(Stringsql,intstr){//提取SQL语句,并把(intstr)传出来的值来代替?try{sql=sql.substring(0,sql.indexOf("?"))+str+sql.substring(sql.indexOf("?")+1);}catch(Exceptione){System.out.println(e.getMessage());}returnsql;}}5.2样式层的实现在样式层(在domain文件夹)中的类是一个继承了ActionForm(也就是extendsActionForm)的类。对于每个请求参数通过其名称来对应到bean的一个属性上,并调用相对应的setter方法来设置属性值。这个方法类似于标准jsp中标记。同样调用相应的getter方法来取得属性值,更新后的ActionFormBean被传递给Action类的perform方法,以便使这些值能被系统状态和业务逻辑bean来使用。企业类型设置模块对应的ActionForm类CqylxForm.java的代码如下:/***********************************CqylxForm.java******************************/packagecom.domain;//对企业生产类型表的操作(tb_client_qylx)publicclassCqylxFormextendsActionForm{//使用Struts需要继承ActionFormprivateStringqylx_bz="";//备注信息39 privateStringqylx_id="";//企业生产类型编号privateStringqylx_lxmc="";//企业生产类型名称publicCqylxForm(){}publicStringgetQylx_bz(){returnqylx_bz;}publicvoidsetQylx_bz(Stringqylx_bz){this.qylx_bz=qylx_bz;}publicStringgetQylx_id(){returnqylx_id;}publicvoidsetQylx_id(Stringqylx_id){this.qylx_id=qylx_id;}publicStringgetQylx_lxmc(){returnqylx_lxmc;}publicvoidsetQylx_lxmc(Stringqylx_lxmc){this.qylx_lxmc=qylx_lxmc;}}5.3持久层的实现在持久层(dao层文件夹)中,主要有两种类,一个是接口(interface)类,类名以Dao结尾,另一个是接口的实现类,类名以DaoImpl结尾,其中企业类型设置模块的代码如下:1.接口类(以Dao为结尾的类名)/***********************************CqylxDao.java********************************/packagecom.dao;importjava.util.List;importcom.domain.CqylxForm;publicinterfaceCqylxDao{publicListqylxSelect();publicvoidqylxDelete(CqylxFormqylx);publicvoidqylxupdate(CqylxFormqylx);publicCqylxFormqylxSelectOne(CqylxFormqylx);publicvoidqylxInsert(CqylxFormqylx);publicintqulxCount();}2.实现接口类(以DaoImpl为结尾的类名)/******************************CqylxDaoImpl.java**********************************/packagecom.dao;importjava.util.List;importjava.util.ArrayList;importcom.tool.JDBConnection;importcom.tool.SQLCode;39 importjava.sql.ResultSet;importjava.sql.*;importcom.domain.CqylxForm;//加载类//对表tb_Client_qylx的操作publicclassCqylxDaoImplimplementsCqylxDao{publicListqylxSelect(){//查询的操作JDBConnectionconnection=newJDBConnection();CqylxFormform=null;Listlist=newArrayList();//ArrayList类实现了List接口Stringsql=SQLCode.getSQLCode("sql.qylx.select");try{ResultSetrs=connection.executeQuery(sql);while(rs.next()){form=newCqylxForm();form.setQylx_id(rs.getString(1));form.setQylx_lxmc(rs.getString(2));form.setQylx_bz(rs.getString(3));list.add(form);}}catch(SQLExceptionex){}connection.close();returnlist;}//删除操作publicvoidqylxDelete(CqylxFormqylx){JDBConnectionconnection=newJDBConnection();Stringsql=SQLCode.getSQLCode("sql.qylx.delete");sql=connection.editSqlCode(sql,qylx.getQylx_id());connection.executeUpdate(sql);connection.close();}//修改操作publicvoidqylxupdate(CqylxFormqylx){JDBConnectionconnection=newJDBConnection();//利用对象connection调用JDBConnection类中方法Stringsql=SQLCode.getSQLCode("sql.qylx.update");sql=connection.editSqlCode(sql,qylx.getQylx_lxmc());sql=connection.editSqlCode(sql,qylx.getQylx_bz());sql=connection.editSqlCode(sql,qylx.getQylx_id());connection.executeUpdate(sql);connection.close();}//以企业类型的编号进行查找publicCqylxFormqylxSelectOne(CqylxFormqylx){JDBConnectionconnection=newJDBConnection();CqylxFormform=null;Stringsql=SQLCode.getSQLCode("sql.qylx.selectOne");sql=connection.editSqlCode(sql,qylx.getQylx_id());try{39 ResultSetrs=connection.executeQuery(sql);while(rs.next()){form=newCqylxForm();form.setQylx_id(rs.getString(1));form.setQylx_lxmc(rs.getString(2));form.setQylx_bz(rs.getString(3));}}catch(SQLExceptionex){}connection.close();returnform;}//添加操作publicvoidqylxInsert(CqylxFormqylx){JDBConnectionconnection=newJDBConnection();Stringsql=SQLCode.getSQLCode("sql.qylx.insert");sql=connection.editSqlCode(sql,qylx.getQylx_id());sql=connection.editSqlCode(sql,qylx.getQylx_lxmc());sql=connection.editSqlCode(sql,qylx.getQylx_bz());connection.executeUpdate(sql);connection.close();}//在数据库中查找最大的流水号,然后返回加1,此数据用于企业类型编号存储,表现了编号的唯一性publicintqulxCount(){intiCount=0;JDBConnectionconnection=null;connection=newJDBConnection();Stringsql=SQLCode.getSQLCode("sql.qylx.count");ResultSetrs=null;try{rs=connection.executeQuery(sql);while(rs.next()){CqylxFormform=newCqylxForm();iCount=rs.getInt("t");}}catch(SQLExceptionex){}connection.close();returniCount+1;}}5.4服务层的实现通过服务层(server文件夹)的方法,可以使持久层(dao)的功能能够具体实现。在服务层中(在server文件夹)类和持久层中类存在方式是一样的。但是,接口类是以Façade为结尾的类名,实现接口类是以FacadeImpl为结尾的类名。1.接口类(以Facade为结尾的类名)/**********************************CqylxFacade.java*******************************/39 packagecom.service;importjava.util.List;importcom.domain.CqylxForm;publicinterfaceCqylxFacade{publicListqylxSelect();…………………………..//这段代码和dao层中的接口类是一样的publicintqulxCount();}2.实现接口类(以FacadeImpl为结尾的类名)/********************************CqylxFacadeImpl.java******************************/packagecom.service;importjava.util.List;importcom.dao.CqylxDao;importcom.dao.CqylxDaoImpl;importcom.domain.CqylxForm;publicclassCqylxFacadeImplimplementsCqylxFacade{privateCqylxDaoqylx=null;publicCqylxFacadeImpl(){this.qylx=newCqylxDaoImpl();}publicListqylxSelect(){returnthis.qylx.qylxSelect();}publicvoidqylxDelete(CqylxFormqylx){this.qylx.qylxDelete(qylx);}publicvoidqylxupdate(CqylxFormqylx){this.qylx.qylxupdate(qylx);}publicCqylxFormqylxSelectOne(CqylxFormqylx){returnthis.qylx.qylxSelectOne(qylx);}publicvoidqylxInsert(CqylxFormqylx){this.qylx.qylxInsert(qylx);}publicintqulxCount(){returnthis.qylx.qulxCount();}}5.5企业类型设置控制层的实现在控制层中(在webtier文件夹),类的实现是在jsp页面中进行调用,下面结合jsp页中的代码,说明通过类实现的过程。1.添加操作添加企业类型信息分为两个步骤:39 (1)添加数据之前首先查询企业类型信息数据表中的最大流水号,然后加1作为新的企业类型编号,并在添加页面中以隐藏域表示。(2)执行添加功能。查询最大流水号类的代码如下:/********************************CqylxCountID.java*******************************/packagecom.webtier.clientQylxAction;publicclassCqylxCountIDextendsAction{privateCqylxFacadeqylx=null;publicCqylxCountID(){this.qylx=newCqylxFacadeImpl();//实现服务层的方法}publicActionForwardperform(ActionMappingactionMapping,ActionFormactionForm,HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse){StringchangeType=String.valueOf(this.qylx.qulxCount());httpServletRequest.setAttribute("changeType",changeType);//将查出的数据转换为String类型returnactionMapping.findForward("cqylxCountID");}}执行后的jsp的代码如下:/******************************CqylxCountID.java********************************/企业编号 ">LX-<%=request.getAttribute("changeType")%>添加企业类型页面的运行效果如图6所示。图6添中企业类型页面运行结果添加类的代码如下:/*********************************CqylxInsert.java39 *******************************/packagecom.webtier.clientQylxAction;//插入操作publicclassCqylxInsertextendsAction{privateCqylxFacadeqylx=null;publicCqylxInsert(){this.qylx=newCqylxFacadeImpl();}publicActionForwardperform(ActionMappingactionMapping,ActionFormactionForm,HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse){Chinesechinese=newChinese();CqylxFormcqylxForm=(CqylxForm)actionForm;cqylxForm.setQylx_id(chinese.str(httpServletRequest.getParameter("id")));取jsp页面的编号cqylxForm.setQylx_lxmc(Chinese.str(httpServletRequest.getParameter("lxmc")));取jsp页面的企业名称cqylxForm.setQylx_bz(chinese.str(httpServletRequest.getParameter("bz")));取jsp页面的企业备注信息this.qylx.qylxInsert(cqylxForm);//执行添加的方法returnactionMapping.findForward("cqylxInsert");}}2.修改操作修改操作分为两步,修改数据之前首先要查找需要修改的数据,然后再执行修改操作。通过单击企业类型设置页面中企业类型信息后的“修改”超链接,即可对该信息进行修改。企业类型信息修改的jsp页面的代码如下:/***********************************selectQylx.jsp********************************/">修改“Struts-config.xml”的“.do”的代码配置方法和上面说的一样,只是名称有所变化,这里不再赘述,具体请参见光盘。企业类型设置的单独查询类的说明:/*********************************CqylxSelectOne.jsp*****************************/packagecom.webtier.clientQylxAction;//单独查询publicclassCqylxSelectOneextendsAction{privateCqylxFacadeqylx=null;publicCqylxInsert(){this.qylx=newCqylxFacadeImpl();}publicActionForwardperform(ActionMappingactionMapping,ActionFormactionForm,HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse){CqylxFormcqylxForm=(CqylxForm)actionForm;cqylxForm.setQylx_id(httpServletRequest.getParameter("id"));39 CqylxFormform=this.qylx.qylxSelectOne(cqylxForm);//执行单独查询的功能,然后赋给新的对象httpServletRequest.setAttribute("form",form);returnactionMapping.findForward("cqylxSelectOne");}}执行后的jsp的代码如下:/***********************************updateQylx.jsp********************************/<%@pagecontentType="text/html;charset=gb2312"%>functionRgTest(){if(document.form.lxmc.value==""){window.alert("请输入企业类型名称");document.form.lxmc.focus();returnfalse;}returntrue;}<%CqylxFormform=(CqylxForm)request.getAttribute("form");%>企业类型名称">企业类型信息修改页面的运行结果如图7所示。图7企业类型信息修改页面运行结果通过updateQylx.jsp的form表单即可看到执行的修改动作,修改类的代码如下:/*********************************CqylxUpdate.java********************************/packagecom.webtier.clientQylxAction;publicclassCqylxUpdateextendsAction{privateCqylxFacadeqylx=null;publicCqylxInsert(){39 this.qylx=newCqylxFacadeImpl();}publicActionForwardperform(ActionMappingactionMapping,ActionFormactionForm,HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse){cqylxForm.setQylx_id(httpServletRequest.getParameter("id"));//从jsp页中取得值。cqylxForm.setQylx_lxmc(chinese.str(httpServletRequest.getParameter("lxmc")));cqylxForm.setQylx_bz(chinese.str(httpServletRequest.getParameter("bz")));this.qylx.qylxupdate(cqylxForm);//执行修改的方法returnactionMapping.findForward("cqylxUpdate");}}3.删除操作通过单击页面中企业类型信息后的“删除”超链接,即可将当前的企业类型信息删除。删除企业类型信息的jsp页面中的代码如下:/**********************************selectQylx.jsp********************************/functionprojectDelete(date){if(confirm("是否删除编号为["+date+"]这一组数据吗?"))window.location="cqylxDelete.do?id="+date;}")">删除执行效果如图8所示:图8删除企业类型信息“Struts-config.xml”的“.do”的方法代码如下:/*********************************Struts-config.xml********************************/39 企业类型设置的删除类代码如下:/********************************CqylxDelete.java********************************/packagecom.webtier.clientQylxAction;…………………………………………………..//省略加载的类//删除的操作publicclassCqylxDeleteextendsAction{privateCqylxFacadeqylx=null;publicCqylxDelete(){this.qylx=newCqylxFacadeImpl();}publicActionForwardperform(ActionMappingactionMapping,ActionFormactionForm,HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse){Chinesechinese=newChinese();CqylxFormcqylxForm=(CqylxForm)actionForm;cqylxForm.setQylx_id(chinese.str(httpServletRequest.getParameter("id")));this.qylx.qylxDelete(cqylxForm);returnactionMapping.findForward("cqylxDelete");}}4.查询操作通过单击“企业类型设置”超链接,即可进入到企业类型设置页面,其实现的代码如下(具体的代码请参照光盘,这里只介绍主要的jsp代码):/***********************************information.jsp********************************/………企业类型设置
………..“Struts-config.xml”的“.do”的方法代码如下:/******************************Struts-config.xml********************************/企业类型设置的查询类代码如下:39 /*********************************例程3-1CqylxSelect.java********************************/packagecom.webtier.clientQylxAction;importorg.apache.struts.action.*;importjavax.servlet.http.*;importcom.service.CqylxFacadeImpl;importcom.service.CqylxFacade;//查询的操作publicclassCqylxSelectextendsAction{privateCqylxFacadeqylx=null;publicCqylxSelect(){this.qylx=newCqylxFacadeImpl();}publicActionForwardperform(ActionMappingactionMapping,ActionFormactionForm,HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse){httpServletRequest.setAttribute("qylxlist",this.qylx.qylxSelect());returnactionMapping.findForward("cqylxSelect");//在struts-config.xml中的forward中的name必须一致}}查询jsp页面的代码如下:/**********************************selectQylx.jsp********************************/<%@pagecontentType="text/html;charset=gb2312"%><%@pageimport="java.sql.*"%><%@pageimport="java.util.List"%><%@pageimport="com.domain.CqylxForm"%><%Listlist=(List)request.getAttribute("qylxlist");%>

企业类型的设置

<%for(inti=0;i<%=qylx.getQylx_id()%><%=qylx.getQylx_lxmc()%><%=qylx.getQylx_bz()%>">修改   ")">删除<%}%>39 图9企业类型查询界面6系统测试6.1测试项目在MIS开发过程中采用了多种措施保证软件质量,但是实际开发过程中还是不可避免地会产生差错,系统中通常可能隐藏着错误和缺陷,不经周密测试的系统投入运行,将会造成难以想象的后果,因此系统测试是MIS开发过程中为保证软件质量必须进行的工作。大量统计资料表明,系统测试的工作量往往占MIS开发总工作量的40%以上。因此,我们必须重视测试工作。由于程序中隐藏的缺陷只在特定的环境下才有可靠显露,系统缺陷通常是由于对某些特定情况考虑不周造成的。因此测试不是为了表明程序正确;成功的测试也不是没有发现错误的测试。有意义的软件测试应该是从“破坏”软件系统的角度出发,精心设计最有可以暴露程序系统缺陷的测试方案。因此软件测试的目标应该是以尽可能少的代价和时间找出软件系统中潜在的错误和缺陷。从产品角度看,测试计划中的测试项目包括软件结构中的分系统层、子系统层、功能模块层、程序模块层中的各类模块,从测试本身看,分为单元测试,组合测试,确认测试等。测试对象是随不同阶段而异的,最基本、最初的测试是单元测试,后面的组合测试、确认测试都是以被测过的模块作为测试对象的。(1)单元测试:单元测试也称模块测试或程序测试,单元测试是对每个模块单独进行的,验证模块接口与设计说明书是否一致,对模块的所有主要处理路径进行测试且与预期的结构进行对照,还要对所有错误处理路径进行测试。对源码进行审查,对照设计说明书,表态地检查源程序是否符合功能的逻辑要求,是进行单元测试前的重要工作工。单元测试一般是由程序员完成,也称程序调试。(2)组合测试组合测试也称集成测试或子系统测试,通常采用自顶向下测试和自底向上测试两种测试方法。组合测试的对象是指已经通过单元测试的模块,不是对零散模块进行单个测试,而是用系统化的方法装配和测试软件系统,是一个严格的过程,必须认真地进行,其计划的产生和单元模块测试的完成日期要协调起来,这种测试应在系统目标机上进行,造成系统应用的环境条件,除了开发部分项目负责人参加以外,还应该有相应系统的用户参加,给评审员进行演示。(3)确认测试确认测试是对通过组合测试的软件进行的,这些软件已经存于系统目标设备的介质上,确认测试的目的是表明软件是可以工作的,并且符合“软件需求说明书”中规定的全部功能和性能要求。确认测试是按照这些要求定出的“确认测试计划”进行的。测试工作是由一个独立的组织进行,而且测试要从用户的角度出发。(4)系统测试系统测试是对整体性能的测试,主要解决各子系统之间的数据通信和数据共享问题以及检测系统是否达到用户的实际要求,系统测试的依据是系统分析报告。系统测试应在系统的整个范围内进行,这种测试不只对软件进行,而是对构成系统的硬、软件一起进行。系统测试与建构同时进行或略慢。系统测试需要确认从头到尾的功能正常才算完成,应当尽量避免系统测试延到项目末尾进行。39 (5)用户验收测试在系统测试完成后,进行用户的验收测试,它是用户在实际应用环境中所进行的真实数据测试。在具体的测试中,一般应遵循以下原则:由程序设计者之外的人进行测试;测试用例应由两部分组成:输入数据和预期输出结果;应选用不合理的输入数据与非法输入测试;不仅要检验程序是否实现预期功能,还应检查程序是否做了不应该做的工作;集中测试容易出错的程序模块;对程序修改以后,必须重新进行测试。8.2测试方法一般来说,对程序测试有两种测试方法:如果已经知道了软件系统应具有的功能,可通过测试来对每个功能是否都能正常使用;如果知道程序的内部工作过程,可以通过测试来检测程序内部是否按照规格说明书的规定正常进行。前一种方法称为黑盒测试,后一种方法称为白盒子测试。黑盒测试又称为功能测试,白盒子测试又称为结构测试。经过几个月的毕业设计,因为时间和任务的性质的关系,没有完全按照上述的测试方法进行系统的测试,但经过一些简单的步骤的测试,证明本系统具有相当程序的稳定性。结论JSP从推出至今时间也不算漫长,由于它具有开发简单,功能强和灵活等优点,现在已被广泛接受,成为开发动态网络站点的主要技术之一,有人声称JSP已在Web开发领域悄悄地进行着一场革命。今天已有上万个Web站点使用了JSP技术,其中包括许多Internet中最大的站点。有人估计,在过去几年中,JSP开发人员已达百万之多,预计在今后的发展过程当中将会越来越多。JSP正慢慢成为动态Web应用程序开发环境的主流。本文是利用Struts框架实现的,它的特点是提供了通用的、简洁明了的Web应用实现方法,可以发现在Struts支持的Web应用中。没有固定写死的文件名称、Action类、控制器类名称,基本上所有可以扩展修改的部分都是通过配置文件管理的,所有网页内的文字都可以放在properties文件中。这样建立Web应用时,编写的程序更加便于管理、易于移植。应用国际化也更容易实现。本实例利用Struts框架进行初步的实现,读者可以通过Struts网站提供的范例程序和在互联网上搜索已有的基于Struts的Web程序来了解关于Struts的更多使用方法和应用窍门。致谢经过近两年半的学习和研究,我的毕业设计已经接近尾声。由于知识的欠缺和经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及学弟和室友们的支持,想要完成此次毕业设计是难以想象的。首先要感谢我的导师,他在学习和科研方面给了我大量的指导,并为我们提供了良好的科研环境,让我学到了知识,掌握了科研的方法,也获得了实践锻炼的机会。他严谨的治学态度、对我的严格要求以及为人处世的原则将使我受益终身。在该论文完稿之际,谨向导师表示最衷心的感谢。祝愿他身体健康,全家幸福!我还要感谢我的同学,他们39 给了我最多帮助和鼓励。他们丰富的开发经验给我提供了很多启示,他们是我学习、工作和生活上的伙伴,也是面对困难和挑战时的战友,他们的学习态度使我受益匪浅。     特别感谢我的室友和其他朋友们,感谢他们对我的关心和督促,是他们的认真和执着感染着我,使我能顺利完成毕业论文的撰写。参考文献1.JSP数据库系统开发完全手册人民邮电出版社2006年3月2.SQLServer数据库开发实例解析机械工业出版社2006年1月3.JSP工程应用与项目实践机械工业出版社2005年2月4.软件工程中央广播电视大学出版社2001年5.SQLServer2000系统管理飞思科技产品研发中心电子工业出版社2001年6.数据库基础与应用中央广播电视大学出版社1997年7.JSP动态网站编程清华大学出版社2001年9月8.J2EE网络开发技术人民邮电出版社2000年11月9.JSP与网页数据库设计中国铁道出版社2001年2月10.J2EE编程基础与实例机械工业出版社2002年9月11.24小时学通JSP潇湘工作室译人民邮电出版社2000年1月12.JSP实用编程技术中国水利水电出版社2000年1月39

您可能关注的文档

相关文档

最近下载