基于java的CRM客户关系管理系统的设计与实现
本科毕业设计(论文)
题目:基于java的CRM客户关系管理系统的设计与实现
专题题目:
说明
请按以下顺序编排:
本科毕业设计(论文)任务书
题目:基于Java的CRM客户关系管理系统的实现与实现
专题题目(若无专题则不填):
原始依据(包括设计(论文)的工作基础、研究条件、应用环境、工作目的等):
CRM客户关系管理系统的目的通过客户管理,产品管理,系统管理等功能同客户建立联并收集客户信息,此基础上满足客户”一对一”个性化服务。同时信息在企业的流程上得以流转,让客户得到高效的,满意的服务。本系统包括信息管理、客户管理、产品管理等多项功能。
主要内容和要求:(包括设计(研究)内容、主要指标与技术参数,并根据课题性质对学生提出具体要求):
完成一个客户关系管理系统,主要是给广大用户和企业员工提供使用,该系统要实现的功能模块:
主要参考文献和书目:(不少于10篇论文,其中M指书籍,D指学位论文,J指期刊论文)
[1]陈广宇.管理信息系统[M].北京:清华大学出版社,2010:95-100
[2]张墨华,张永强.Java程序设计[M].北京:清华大学出版社,2010:123-124
[3]软件工程中央广播电视大学出版社[M]2001年
[4]崔群法,王咏梅,李有军。ECLIPSE从入门到精通[M]。北京:电子工业出版社。2008.
[5]符光宝,邵定宏,李兰友,基于Struts框架的档案管理系统应用研究[J],计算机工程与设
计,2008.29(13)
[6]萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,2005.
[7]李建刚,秦兴桥,郑雨贝。JSP网络编程技术与实践[M]。北京:清华大学出版社。2008.
[8]J2EE编程基础与实例机械工业出版社[M]2002年9月
[9]JasonHunter,WilliamCrawford.JavaServlet编程。北京:国防工业出版社[D]。2002.
[10]KarlAvedal,DannyAyers,TimothyBriggs.jsp编程指南[M]。北京:电子工业出版社。
2001.
[11]SubrahmanyamAllamaraju,CedricBuest,JohnDavies.J2EE编程指南[M]。北京:电
子工业出版社。2002.
[12]肖丹.知识型档案管理系统建设及其关键技术研究[D],中山大学硕士学位论文,2010.
[13]张蕾.基于.NET的档案管理系统的开发与研究[D],天津大学硕士学位论文,2007.
[14]《C语言程序设计》谭浩强著[M],清华大学出版社
[15]陈尚松基于J2EE的客户关系管理系统的设计与实现[D]
指导教师(签字):
年月日
注:本表可自主延伸,各专业根据需要调整。
本科毕业设计(论文)开题报告
题目:基于java的CRM客户关系管理系统的设计和实现
课题研究目标、内容、方法和手段:
完成一个客户关系管理系统,面向的对象是广大客户和企业员工提供使用,该系统要实现的功能模块:
本系统的实际分为两个部分,一个是前端的实现,一个是后台的实现。对于后台部分设计,根据需求分析,采用SSH作为系统的主体框架,整合mysql数据库提供数据上的支持。前端的设计,关系到客户与系统交互的友好性,采用jsp技术来实现。需要的工具有myeclipse,tomcat(可以是myeclipse自带的tomcat),mysql(配合使用HeidiSql)。
设计(论文)提纲及进度安排:
设计(论文)提纲:
[11]SubrahmanyamAllamaraju,CedricBuest,JohnDavies.J2EE编程指南[M]。北京:电子
工业出版社。2002.
指导教师审核意见:
指导教师(签字):年月日
注:本表可自主延伸
摘要
随着互联网的高速发展,市场经济的信息化,让企业之间的竞争变得,为解决快速把握客户的需求变化,增加客户和企业的互动,降低企业的服务成本,把信息的分析和加工成为企业脱颖而出的创新点等问题。那么客户关系管理孕育而生。客户关系管理系统的目的就是通过全新的管理理念整合客户信息资源,了解和满足客户的动态需求,从而提高企业效益。
论文的主要工作有:首先简单介绍研究CRM客户关系管理系统的背景。其次,简单介绍下该系统需要用的技术和框架–SSH和JSP。然后由需求分析决定的系统设计方案,再到系统详细设计,从系统的构架,功能模块,关键的技术点进行对CRM的开发。在采用Myesclipe作为开发工具,MySql作为数据库支持,结合SSH框架实现。
最后:完成测试阶段。
关键词:客户关系管理、SSH、MySql、B\S、JSP
ABSTRACT
WiththerapiddevelopmentofInternet,theinformationofmarketeconomy,makethecompetitionbetweenenterprisesbecomes,inordertosolvequicklygraspthechangingneedsofcustomers,increasecustomerandenterpriseinteraction,reducetheservicecostofenterprises,theanalysisandprocessingofinformationhasbecometheenterprisetalentshowsitselfinnovationandotherissues.Socustomerrelationshipmanagementisborn.Customerstherelationshipbetweenmanagementsystemisdesignedbyanewmanagementconcepttointegratecustomerinformationresourcestounderstandandmeetthedynamicneedsofcustomers,soastoimprovetheefficiencyofenterprises.
Themainworkofthispaperis:First,abriefintroductionofthebackgroundoftheCRMcustomerrelationshipmanagementsystem。Secondlyabriefintroductionofthesystemrequirestheuseoftechnologyandframework–SSHandJSP.Then,analysisofsystemdesignschemeisdecidedbythedemandtothedetaileddesignofthesystem,fromthesystemarchitecture,functionmodules,keytechnicalpointsforthedevelopmentofCRM.IntheuseofMyesclipeasadevelopmenttool,MySqlasdatabasesupport,combinedwiththeSSHframework.Finallycompletethetestphase.
Keywords:customerrelationshipmanagement,SSH,MySql,BS,JSP
目录
第一章绪论1
1.1研究背景和意义1
1.2国内外研究3
1.3论文结构3
1.4本章小结4
2.1后台介绍5
2.2前端介绍10
2.3开发工具11
2.4本章小结11
第三章系统分析12
3.1可行性分析12
3.2需求分析13
3.3本章小结18
第四章数据库设计19
4.1系统和数据的关系19
4.2数据库结构设计19
4.3数据库逻辑结构设计22
4.4本章小结28
第五章系统的详细设计和实现29
5.1持久层设计29
5.2逻辑业务层设计39
5.3表现层设计40
5.4系统主要功能模块的实现41
5.5本章小结48
第六章系统测试49
6.1系统测试综述49
6.2测试用例49
6.3本章小结51
第七章总结和展望未来52
7.1结论52
7.2展望未来52
随着信息的快速发展,企业在传统的摸索上融合现代化信息科技,是时代进步的选择。企业信息化是企业在生产产品,销售产品,产品跟踪上更加科学,更加有效,更加透明。这样做带有的结果就是一方面让企业内部更加干净,有积极性,一方面为企业带收益,客户都看到企业的努力,形成更多的客户资源,增强企业竞争的过程。
设计信息化,生产信息化,管理信息化,决策科学化构成了企业的信息化。
企业管理信息化的意义
客户关系管理(CustomerRelationshipManagement),顾名思义,就是客户与企业关系利益的管理,他的中心乃至核心思想思路就是客户价值至上,以信息化技术为手段,对录入的客户材料信息进行深刻剖析,满足客户需求,打造优质服务的基础上吸引广大的客户资源,同时把他们发展成为企业公司的潜在客户资源,在提高客户对企业的满意度评价的时候也把企业的市场的竞争力势头给扩大了。
该论文的CRM以2个基本内容块组成:
CRM中的管理理念
目前针对CRM的研究主要集中在以下几个方面
该论文的中心思想就是基于java的CRM客户关系管理系统的设计和实现,提出了开发该系统所要面对的困难和应对方案,本文的工作内容有
第一章,对CRM这个研究的背景信息以及研究意义进行阐述。
第二章,CRM客户关系管理系统的关键技术的概说。
第三章,CRM的系统分析,包括可行性报告和需求分析
第四章,数据库设计,对数据库中表字段进行设计和创建,并给出E-R图。
第六章,系统测设阶段。
第七章,整个系统的总结和对未来的展望。
本章主要介绍了CRM研究背景。
后台介绍
B/S平台模式
B/S平台模式。在客户端上装置浏览器(Browser),如360、Firefox,服务器端就需要安装数据库,例如Oracle数据库、Mysql数据库、SqlServer2008或者SqlServer2010。浏览器经过Web服务和Web服务器进行数据流转,服务器再和数据库进行数据的对接。B/S平台模式中,第一层的是客户端,第二层的是Web服务层,可以由一台或多台服务器构成,可以动态的根据应用的需要增加或者减少服务器的个数,因此Web服务层是动态变化的,第三层的是数据层,组成部分是数据库系统和持久化层。系统维护时只需要对服务器进行升级或者其他操作,但是对浏览器就不需要做出巨大维护变动。这样客户端可以变“瘦”,而服务器端则越来越“胖”,但是更加的安全便捷。如图2-1所示
图2.1典型的B/S架构图
MVC三层架构设计模式分为三个部分,M(模型),V(视图),C(控制),每个部分都有应该有的功能和任务,然而他们又是一个整体,共同解析用户的请求并返结果。层与层之间的代码、逻辑的拆开使得系统的整体性更清晰。如图2-2所示为三层结构的基本构架。
视图(View):视图是最先也是唯一一个和用户面对面交流的层次,也就是用户能用肉眼看到的。在Web应用程序中,应用程序的界面的处理和设计变得多样化。视图层没有对传递的数据进行处理的功能,就是对数据提供不同形式的呈现输出方式。
模型(Model):经过了模型处理的数据可以通过定义好的视图去呈现结果,说到具体的模型,模型就是明确定义了一对业务规则的数据。模型的另一个优点就是支撑模型的代码可以被多个视图重用使用,减少了代码的冗余度。
控制器(Controller):用一个形象的比喻,控制器就是一个人的大脑,起到的是关键的调度作用,他的过程是这样的:当用户的请求被发出后,控制器接纳申请内容但是对申请不做处理,然后就转发请求信息给相应的模型和视图去处理和呈现数据结果。
Brower
View
Controller
Model
DB
Spring框架采用分层架构,如图2-3
图2.3spring基本模块
Hibernate框架使用的非常妙的地方是运用了数据库到java类的反射体系,通过对关系映射文档进行XML解析,然后就可以通过一系列的层次对象操作数据库数据,它和JDBC有很大的不同,也有很多相同之处,相同之处就在于Hibernate框架和JDBC都是与数据经常操作,查询数据库数据返回前台或者就是前台数据存储在数据库里面。
1.ORM:ObjectRelationMapping,从字面上理解及时对象关系映射,这个功能就很有用处了,定义了需要的持久化对象后,还需要对实体对象和数据库的表名进行一一对应的联系。
2.Hibernate的API
Hibernate框架基本组成是有Session、SessionFactory、Transaction、Query、Criteria、Configuration等六个核心接口。下面就逐一对这几个接口说明下我自己的理解。
数据库
在理解中到的Struts框架语法里,Controller层站在控制的角度上就是对的是业务逻辑的实现进行管制,最主要也就是Action组件的控制,由于Action组件是系统的逻辑业务的最终完成层和承担者,例如:ActionForword就定义了业务逻辑根据不同的需求进行流转。
Struts框架的使用很广,在大型前端应用程序的应用更为经典,例如说web系统,下面简单的说明下:web应用程序的启动就要去Struts的配置文件里读取配置信息,之后会把创建配置对象存放配置信息的内容,而后加载和构建ActionServlet对象等配置对象,执行如下流程步骤:
①首先判断ActionServlet是否存在。当不存在的时候,返回的信息就应该为无效的,这时候就有必要执行第二步。
②当判断出ActionServlet不存在时就需要把客户提交的表单数据保存在另外一个对象里,所以需要需要创建ActionFom对象。
③对接收的表单数据按照配置信息所要求的进行规则验证。
④验证成功的表现:当执行完ActionForm.validate()方法后得到的结论有两种状况:一种情况是返回空(NULL),另一种情况是不包括ActionMessage的ActionErrors对象。
⑤ActionServlet把请求信息转发给相应的Action层,那么Action层的具体实例对象就可以调用exexcute()方法,假定action的对象载体没有构建,就需要立马构建一个。
⑥Action对象载体带有的方法调度完成后就会得出一个成果,那么ActionServlet就会把这个结果转发给相应的JSP页面。
⑦JSP技术中带有的组件动态的生成页面展现出现。
JSP网页技术,JavaServerPage顾名思义是把Java代码嵌在服务页面的开发技术。它的组成部分有Java代码,html的语法规则,Jsp标签。JSP的大致变化是这样的,首先通过表单来获取用户数据并提交给系统,系统再把结果返回通过JSP组件动态的创建页面显示。JSP页面的执行过程如图
图2.6JSP页面的执行过程
软硬件环境需求
浏览器采用IE,360,GooGle。
系统JVM为JDK1.6或更高版本。
系统数据库使用MySql配合图形化界面HeidiSql
系统的集成幵发环境MyEclipse2012。
Web容器Tomcat7.0
系统的技术架构:Struts2.0+Spring4.0+Hibernate3.0
本章对完成论文的理论基础及需要的关键技术进行了论述,系统决定使用的是的B/S平台开发然后,分别介绍了SSH等框架和JSP前端技术。最后说明了完成该系统的软硬件要求。
首先CRM客户关系管理系统的技术核心是SSH框架的使用和典型三层架构的层次模型的开发思想。简单的说说三层的明确职能和任务:表现层与客户打交道;中间层spring+Hibernate框架的配合使用负责数据访问和接收表现层的功能请求,最主要的技术就是能够将应用程序的java类与数据库的表结构对应设计的ORM映射能力。数据层就是实体对象的构建设计,是最基础的层次。然后数据的流向是从web层,service服务层,action动作层,dao数据访问层,db数据库,再把结果逐级往上提交。
采用流行的SSH框架提高了开发效率,增加了系统的内聚性,降低了耦合性,方便以后程序的扩张。
综上所述,设计和实现CRM客户关系管理系统在经济上是完全可以接受的。
就企业而言,很大程度上企业员工未使用过客户关系管理系统,但得益于企业近些年的信息化建设,几乎所有员工都能够运用办公自动化系统进行日常工作,这使得员工快速掌握客户关系管理系统的操作成为可能。此外,依照客户关系管理系统的体系构造和业务性能,制定一份功能完善而且易于理解的“帮助文档”是极其必要的,它有利于用户快速掌握系统的使用;同时,在界面实现阶段,开发人员应在业务功能的操作界面上设置相应的操作提示,便于用户理解系统功能,使得用户能够准确地运用系统开展工作。
由此可以初步可见。客户关系管理系统的开发在操作上是可能的。
下图是客户关系管理系统的三个功能区,可分为客户管理,产品管理,系统管理等模块。
图3.1系统总用例图
上述的用例图是对CRM系统的总体功能需求进行描述,而这些实例中又包括其他的子用例。
图3.2客户管理用例图
客户管理模块有一下部分构成:
图3.3产品管理用例图
系统管理功能需求主要是对角色和权限进行管理。不同的角色拥有不同的权限。功能需求如下图
图3.4系统管理用例图
图3.6总体层次图
CRM系统的其他要求如下表所示
本章介绍了客户关系管理系统需求分析阶段的工作,主要包括对系统的可行性、功能需求及用例的具体分析等内容。
数据库的存在意义就是存储数据,根据需求分析就是客户信息和产品信息,最明显的表现形式就是表结构的存在。然而设计数据库的初衷就是为应用程序提u供后台支持,把代码和系统能分离出来,良好的数据库设计有很多,可以降低数据之间的冗余性,提高数据库的可维护性,同时也能提高系统运行时的速度和系统的稳定性,实现数据之间的共享。可是根据系统的功能需求设计数据库并不是那么简单,需要反复的分析功能需求,逐步的研究和推敲出最为合理的数据库表,把表和表之间的潜在的关系通过E-R图表现出来。
图4.1数据库与系统的管理
下图就是数据库表的设计的E-R图,就是实体-联系图,通过E-R图,可以清楚的了解系统的表与表之间的结构关系,从概念上反应数据库信息组成情况。
产品类别
省市
名称
姓名
价格
产品信息
客户
员工
密码
图4.2数据库E-R逻辑
业务实体在应用程序是实体对象的表现形式存在,在后台数据库中存在的形式就是表和表之间的关系。那么业务实体的实现有下面的三个步骤:
生成一张客户关系记录需要上述的这些表。下面是详细的定义出这些数据库表字段的代表的意思:
上文和图4-2反应了各个表之间的关系。
部门类,职务类,客户类等这些对象都需要持久化,这些类在数据库上都有对应的表结构产生意义对应的是部门表,职务表,客户表等,设计出的数据库包含这些表。如下为各个表的建表语句以及表结构。
CREATETABLE`hr_department`(
`id`int(8)NOTNULLAUTO_INCREMENTCOMMENT‘部门主键PK’,
`d_name`varchar(50)DEFAULTNULLCOMMENT‘部门名称’,
`parentid`int(8)DEFAULTNULLCOMMENT‘上级分类ID’,
`d_employee`varchar(50)DEFAULTNULLCOMMENT‘负责人’,
`d_address`varchar(255)DEFAULTNULLCOMMENT‘地址’,
`d_description`varchar(255)DEFAULTNULLCOMMENT‘描述’,
`d_order`varchar(50)DEFAULTNULLCOMMENT‘部门次序’,
`isdelete`int(1)DEFAULT‘1’COMMENT‘是否已删除0/1’,
PRIMARYKEY(`id`)
)
CREATETABLE`hr_position`(
`id`int(8)NOTNULLAUTO_INCREMENTCOMMENT‘职务IDPK’,
`position_name`varchar(250)DEFAULTNULLCOMMENT‘名称’,
`position_order`varchar(50)DEFAULTNULLCOMMENT‘次序’,
PRIMARYKEY(`id`),
CREATETABLE`hr_post`(
`post_id`int(8)NOTNULLAUTO_INCREMENTCOMMENT‘岗位IDPK’,
`post_name`varchar(255)DEFAULTNULLCOMMENT‘岗位名称’,
`position_id`int(8)DEFAULTNULLCOMMENT‘职务IDFK’,
`position_order`varchar(50)DEFAULTNULLCOMMENT‘职务次序号’,
`dep_id`int(8)DEFAULTNULLCOMMENT‘岗位部门IDFK’,
`post_descript`longtextCOMMENT‘岗位描述’,
PRIMARYKEY(`post_id`),
KEY`position_id`(`position_id`),
KEY`dep_id`(`dep_id`),
CONSTRAINT`hr_post_ibfk_1`FOREIGNKEY(`position_id`)REFERENCES`hr_position`(`id`),
CONSTRAINT`hr_post_ibfk_2`FOREIGNKEY(`dep_id`)REFERENCES`hr_department`(`id`)
CREATETABLE`sys_role`(
`roleid`int(8)NOTNULLAUTO_INCREMENTCOMMENT‘角色表PK’,
`rolename`varchar(255)DEFAULTNULLCOMMENT‘角色名称’,
`roledscript`varchar(255)DEFAULTNULLCOMMENT‘权限说明’,
`childmenus`varchar(300)DEFAULTNULLCOMMENT‘当前权限下可以操作的子菜单’,
`rolesort`char(10)DEFAULTNULLCOMMENT‘权限排序’,
PRIMARYKEY(`roleid`)
CREATETABLE`hr_employee`(
`id`int(8)NOTNULLAUTO_INCREMENTCOMMENT‘员工表ID主键’,
`uid`varchar(50)DEFAULTNULLCOMMENT‘用户名’,
`pwd`varchar(50)DEFAULTNULLCOMMENT‘密码’,
`name`varchar(50)DEFAULTNULLCOMMENT‘姓名’,
`idcard`varchar(50)DEFAULTNULLCOMMENT‘身份证’,
`birthday`dateDEFAULTNULLCOMMENT‘生日’,
`sex`varchar(50)DEFAULTNULLCOMMENT‘性别’,
`status`varchar(50)DEFAULTNULLCOMMENT‘状态’,
`sort`int(8)DEFAULTNULLCOMMENT‘排序num’,
`entrydate`dateDEFAULTNULLCOMMENT‘入职日期’,
`address`varchar(255)DEFAULTNULLCOMMENT‘地址’,
`remarks`varchar(255)DEFAULTNULLCOMMENT‘备注’,
`education`varchar(50)DEFAULTNULLCOMMENT‘学历’,
`professional`varchar(50)DEFAULTNULLCOMMENT‘专业’,
`schools`varchar(50)DEFAULTNULLCOMMENT‘毕业学校’,
`role_id`int(8)DEFAULTNULLCOMMENT‘角色表IDFK’,
KEY`post_id`(`post_id`),
KEY`role_id`(`role_id`),
CONSTRAINT`hr_employee_ibfk_2`FOREIGNKEY(`post_id`)REFERENCES`hr_post`(`post_id`),
CONSTRAINT`hr_employee_ibfk_5`FOREIGNKEY(`role_id`)REFERENCES`sys_role`(`roleid`)
CREATETABLE`param_city`(
`id`int(8)NOTNULLAUTO_INCREMENTCOMMENT‘省市IDPK’,
`parentid`int(8)DEFAULTNULLCOMMENT‘上级ID’,
`city`varchar(250)DEFAULTNULLCOMMENT‘省市名称’,
CREATETABLE`crm_customer`(
`id`int(8)NOTNULLAUTO_INCREMENTCOMMENT‘客户表主键PK’,
`serialnumber`varchar(250)DEFAULTNULLCOMMENT‘客户序列号’,
`customer`varchar(250)DEFAULTNULLCOMMENT‘公司名称’,
`address`varchar(250)DEFAULTNULLCOMMENT‘公司地址’,
`site`varchar(250)DEFAULTNULLCOMMENT‘公司网止’,
`provinces_id`int(8)DEFAULTNULLCOMMENT‘公司省份IDFk’,
`city_id`int(8)DEFAULTNULLCOMMENT‘公司城市IDFK’,
`descripe`varchar(4000)DEFAULTNULLCOMMENT‘客户描述’,
`remarks`varchar(4000)DEFAULTNULLCOMMENT‘备注’,
`create_id`int(8)DEFAULTNULLCOMMENT‘创建人idFK’,
KEY`ix_crm_customer_customer`(`customer`),
KEY`provinces_id`(`provinces_id`),
KEY`city_id`(`city_id`),
KEY`employee_id`(`employee_id`),
KEY`create_id`(`create_id`),
CONSTRAINT`crm_customer_ibfk_7`FOREIGNKEY(`employee_id`)REFERENCES`hr_employee`(`id`),
CREATETABLE`crm_product_category`(
`id`int(8)NOTNULLAUTO_INCREMENTCOMMENT‘产品类别IDpk’,
`product_category`varchar(250)DEFAULTNULLCOMMENT‘产品分类名称’,
`parentid`int(8)DEFAULTNULLCOMMENT‘父类别ID’,
CREATETABLE`crm_product`(
`product_id`int(8)NOTNULLAUTO_INCREMENTCOMMENT‘产品IDPK’,
`category_id`int(8)DEFAULTNULLCOMMENT‘产品分类IDFK’,
`product_name`varchar(100)DEFAULTNULLCOMMENT‘产品名称’,
`specifications`varchar(250)DEFAULTNULLCOMMENT‘规格说明’,
`status`varchar(250)DEFAULTNULLCOMMENT‘状态’,
`unit`varchar(250)DEFAULTNULLCOMMENT‘单位’,
`remarks`longtextCOMMENT‘备注解释’,
`price`doubleDEFAULTNULLCOMMENT‘价格’,
PRIMARYKEY(`product_id`),
KEY`category_id`(`category_id`),
CONSTRAINT`crm_product_ibfk_1`FOREIGNKEY(`category_id`)REFERENCES`crm_product_category`(`id`)
根据上文的功能分析和数据库的分析,在系统的实现阶段上采用当今开源的SSH(Struts+Hibernate+Spring)整合框架实现。其目的是降低个模块间的耦合度,使各个模块之间的功能相互独立、模块内部结构清晰。
系统架构如图所示。整个系统是有多个层次的,数据流动的顺序是从浏览器到数据库,再从数据库到浏览器,中间经过service层,action层和dao层。
如图展示的是层次之间的走向是自左到右,每一个层次都是相互依赖的关系。
持久层的功能就是接收其他层的请求并且响应其他层次的功能对数据库的进行访问得到数据,持久层的设计就需要设定应用程序和数据库交流的实体类和进行交流的方法。那么这一层就大致有实体对象的持久化类,以及数据访问层接口的实现类等结构。特别说明,持久层使用了开发程序经常使用的Hibernate框架,框架的使用能大大的减小关系型数据库与对象应用程序之间的不能一一对应的缺点,可以把需要处理的数据封装成对象。并且设计的实体类(持久化类),他的结构大概是对象的属性,构造方法(有参和无参),还有自动生成了get()和set()函数。如图为各个功能的类图。
产品管理功能的类图如下
图5.2产品管理类图
如下为实体类对应的代码:
产品类别:
privateIntegerid;
privateHrEmployeehrEmployee;
privateStringproductCategory;
privateIntegerparentid;
产品信息:
privateIntegerproductId;
privateCrmProductCategorycrmProductCategory;
privateStringproductName;
privateStringspecifications;
privateStringstatus;
privateStringunit;
privateStringremarks;
privateDoubleprice;
角色管理类图
图5.3角色管理类图
角色实体类的代码:
privateIntegerroleid;
privateStringrolename;
privateStringroledscript;
privateStringchildmenus;
privateStringrolesort;
如下为实体类的代码:
部门类:
privateStringDName;
privateStringDTelephone;
privateStringDAddress;
privateStringDEmail;
privateStringDDescription;
privateStringDOrder;
职务类:
privateStringpositionName;
privateStringpositionOrder;
岗位类:
privateIntegerpostId;
privateHrPositionhrPosition;
privateHrDepartmenthrDepartment;
privateStringpostName;
privateStringpostDescript;
员工类:
privateSysRolesysRole;
privateHrPosthrPost;
privateStringuid;
privateStringpwd;
privateStringname;
privateStringidcard;
privateDatebirthday;
privateStringemail;
privateStringsex;
privateStringtelephone;
privateIntegersort;
privateDateentrydate;
privateStringaddress;
privateStringeducation;
privateStringprofessional;
privateStringschools;
客户管理用例图如图所示:
图5.5客户管理类图
省市类:
privateStringcity;
客户类:
privateHrEmployeehrEmployeeByEmployeeId;
privateParamCityparamCityByCityId;
privateParamCityparamCityByProvincesId;
privateStringserialnumber;
privateStringcustomer;
privateStringtel;
privateStringsite;
privateStringdescripe;
在web-inf下的application-contex。Xml配置文件里定义了连接数据库的数据源,通过数据源,可以将类和数据库中的表进行关联。
class=“org.apache.commons.dbcp.BasicDataSource”> value=“com.mysql.jdbc.Driver”> value=“jdbc:mysql://127.0.0.1:3306/mycrmdb”> 在定义过程中,数据库的url为jdbc:mysql://127.0.0.1:3306/mycrmdb,用户名为root,数据库密码是123456,驱动类为com.mysql.jdbc.driver。 数据库表的存在和应用程序的java对象之间的一一对应采用的是Hibernate框架所拥有的关系对应(ORM)功能,java持久层组成的结构具有两个部分:Java实体类、数据库的表与实体类对象一一对照的关系映射Hibernate文件。这些事实体能够持久化的基础。 由于表比较多,就以一个crm_customer作为说明。 publicCrmCustomer(){}//无参构造函数 publicCrmCustomer(HrEmployeehrEmployeeByEmployeeId, ParamSysparamparamSysparamByCustomertypeId, ParamSysparamparamSysparamByCustomerlevelId, HrEmployeehrEmployeeByCreateId,ParamCityparamCityByCityId, ParamSysparamparamSysparamByCustomersourceId, HrDepartmenthrDepartment, ParamSysparamparamSysparamByCustomerindustryId, ParamCityparamCityByProvincesId,Stringserialnumber, Stringcustomer,Stringaddress,Stringtel,Stringsite, Stringdescripe,Stringremarks,Stringprivatecustomer, Datelastfollow,DatecreateDate,Integerisdelete, DatedeleteTime,SetcrmContacts,SetcrmContracts, SetcrmInvoices,SetcrmReceives,SetcrmFollows,SetcrmOrders){ this.hrEmployeeByEmployeeId=hrEmployeeByEmployeeId; this.paramSysparamByCustomertypeId=paramSysparamByCustomertypeId; this.paramSysparamByCustomerlevelId=paramSysparamByCustomerlevelId; this.hrEmployeeByCreateId=hrEmployeeByCreateId; this.paramCityByCityId=paramCityByCityId; this.paramSysparamByCustomersourceId=paramSysparamByCustomersourceId; this.hrDepartment=hrDepartment; this.paramSysparamByCustomerindustryId=paramSysparamByCustomerindustryId; this.paramCityByProvincesId=paramCityByProvincesId; this.serialnumber=serialnumber; this.customer=customer; this.address=address; this.tel=tel; this.site=site; this.descripe=descripe; this.remarks=remarks; this.privatecustomer=privatecustomer; this.lastfollow=lastfollow; this.createDate=createDate; this.isdelete=isdelete; this.deleteTime=deleteTime; this.crmContacts=crmContacts; this.crmContracts=crmContracts; this.crmInvoices=crmInvoices; this.crmReceives=crmReceives; this.crmFollows=crmFollows; this.crmOrders=crmOrders; }//有参构造函数,是用来给变量赋值的 publicIntegergetId(){ returnthis.id; }//对象的get方法 publicvoidsetId(Integerid){ this.id=id; }//对象的set方法 从代码可看出,持久层不包括任何的业务逻辑代码,只包含有变量定义和变量所拥有的get()、set()函数,是一个单纯的Java对象,目的是有很高的可移植性,提供代码的可重用性。 CrmCustomer.hbm.xml中重要代码如下: 由此可见,实体类和数据库中的表名在配置文件中都有明确的逐个对应,Hibernate会根据映射文件将实体类转化为数据库表,或者将数据库字段转换为实体类。 在Hibernate中就有映射配置是这样的: class=“org.springframework.orm.hibernate3.LocalSessionFactoryBean”> org.hibernate.dialect.MySQLDialect Struts.xml文件的作用主要是对到来自JSP的请求的接收和跳转分配的作用,该struts的核心配置文件如下: filter> DAO层,原文翻译是DataAccessObject,从字面上理解的意思是数据访问对象层次,dao的使用目的就是定义出与数据操作方法有关的逻辑代码,例如:增删改查这样的操作。 按照DAO的设计规则,DAO层里面必须要有操作数据的方法,在com.crm.dao包下存放所有的dao层对象。首要的是通过继承Hibernate框架下的HibernateDaoSupport这个支持类的setSessionFactory()方法并通过Spring的注解进行依赖注入,然后执行getHibernateTemolate()方法得到Hibernate框架的模板类数据,使得执行的速度加快了,方便了开发者。 CrmCustomerDao.java的重要代码。 publicList if(cy==null){ returnfindAll(); } Criteriac=createCriter(this.getSession(),cy); returnc.add(Restrictions.eq(“isdelete”,1)).list(); 逻辑业务层是应用程序的业务中心所在,接收从表现层传来的数据,经过逻辑业务层的处理,由持久层存储下来。 业务逻辑类的实现是业务逻辑层向上层提供服务的业务实现。只专注于具体的业务逻辑,满足客户多样化的需求。同时,业务逻辑层需要持久层的实例来调用持久层的服务,而持久层的实例可以通过Spring容器的动态注入完成。 @Transactional @Service(“crmCustomerBiz”)//动态注入 publicvoidsetCrmCustomerDao(CrmCustomerDaocrmCustomerDao){ this.crmCustomerDao=crmCustomerDao; }//构造函数 /** *新增对象 *@paramcustomer *@return */ publicCrmCustomeraddCustomer(CrmCustomercustomer){ customer.setIsdelete(1); customer.setCreateDate(newDate()); try{ crmCustomerDao.save(customer); returncustomer; }catch(Exceptione){ e.printStackTrace(); returnnull; 表现层是面对面和用户交互的,最外表的一层,接受用户数据,提交给模型进行处理,然后模型把结果回馈给用户。贯穿这个层次的是Strutsframework。 模型层是用来处理数据。在模型层里面没有对数据进行业务规格要求上的处理,只是控制流程和业务数据的检查,模型层的支撑代码就是使用业务逻辑层的各个实现类来规则数据。 重要的代码如下所示: @Scope(“prototype”) @Controller(“crmCustomerAction”) publicvoidsetCrmCustomerBiz(CrmCustomerBizcrmCustomerBiz){ this.crmCustomerBiz=crmCustomerBiz; publicStringexecute(){ Scopes.getRequestMap().put(“bywhere”,crmCustomerBiz.findAllByWhere(bwvobj)); returnSUCCESS; publicStringadd(){ CrmCustomernewcust=crmCustomerBiz.addCustomer(customer); contact.setCrmCustomer(newcust); crmContactBiz.add(contact); return“add”; 这个类是处理客户信息的增加的时候的情况。承袭了Struts框架里的ActionSupport这个类,而且依照java的要求重写了execute()函数,该方法就是处理业务流程。在系统实现过程中,还需要spring框架的注解信息可以applicationContext.xml文件里面进行写入。 通过Struts的标签和jsp等进行实现的。这个界面直接面对用户,更直接影响用户对该系统的第一感觉,所以说这一层设计和重要。如模型层的代码,如果客户信息添加成功了就会回crm_cus_list.jsp上。 控制层是是连接视图和模型的关键,两个分离的模块因为控制层而整合在一起,使代码更容易维护。用户请求经过控制层的处理,然后把请求提交给对应的模型层处理。 前端JSP代码如下: 请输入您的用户名和密码.
用户输入的账号,密码,验证码通过文本框的post方式提交给hr_struts(hr_rmp!login)下action类。
Hr_emp对应的action实现类为HrEmployAction。
HrEmployAction中的login方法如下:
publicStringlogin(){
if(inpcode.equalsIgnoreCase(ValidateCode.code)){
HrEmployeeemployee=hrEmployeeBiz.login(name,pwd);
if(employee!=null){
if(employee.getCanlogin()==1){
Scopes.getSessionMap().put(“emp”,employee);
List
Scopes.getSessionMap().put(“menus”,menuVobjs);
sysLoginBiz.add(newSysLogin());
return“login”;
}else{
return“loginerr”;
Scopes.getRequestMap().put(“err”,“您输入账号或密码错误”);
//账户密码错误
Scopes.getRequestMap().put(“err”,“您输入验证码错误”);
//验证码错误
在Action中,调用了业务逻辑层的biz类进行实例化,在HrEmployeeBiz中有
publicHrEmployeelogin(Stringname,Stringpwd){
returnhrEmployeeDao.login(name,pwd);
调用了dao层的HrEmployeeDao类中的login方法进行取数据库中的数据,
return(HrEmployee)this.getSession().createCriteria(HrEmployee.class).add(Restrictions.eq(“uid”,name))
.add(Restrictions.eq(“pwd”,pwd)).uniqueResult();
从数据库里取出的数据和Jsp传过来的数据进行比较,再把结果返回给action层,最后返回到JSP上显示。需要的效果图如下图所示
图5.7用户名密码为必填
图5-8账号和密码错误
图5.11客户管理时序图
前台JSP:
找到crmcustomerAction的add方法
调用crmcustomerBiz类和crmcustomerDao的add方法
//customer.setHrEmployeeByCreateId((HrEmployee)Scopes.getSessionMap().get(“emp”));
//contact.setHrEmployee((HrEmployee)Scopes.getSessionMap().get(“emp”));
直接调用crmcustomerDao的save方法(这个方法在hibernate里定义),这样客户的数据就保持好了,删除,更新,查询的流程都是这样的,就不一一的列举了。效果图如下
图5.12客户信息增加界面
测试的目标有
进入客户列表,测试新增客户功能。
测试用例
表6-3添加信息数据
提交和能成功的显示在页面上,测试案例成功。
这一章通过对CRM客户关系管理系统的两个小功能进行的测试,通过测试用例,成功的将所需要的功能目的展现出来。
CRM系统是一个具有新思维的管理机制,通过CRM软件希望能够改变企业和客户之间的传统联系,达到有效的管理和利用企业的客户资源的目标,提高企
业对客户的服务水平,促进市场竞争力的形成,为公司和企业带来财富和效益,CRM客户关系管理系统的研究具备重要的理论目的和实践性。
本课题研究的是是基于java这门语言通过SSH框架结合使用实现的CRM企业客户关系管理系统。主要学到知识有:
系统的不足
CRM是一个全新的领域,由于缺少开发经验,许多问题都未考虑周全:
致谢
光阴飞逝,四年的大学生活就要画上符号了,在毕业论文完成之际,向所有支持,关心和帮助过我的老师们,表达最诚挚的感谢!
首先谢谢我的毕业指导老师–XX老师,也是我在大学的《数据结构》的授课老师。在完成毕业设计上,XX老师认真尽心的指导我们,老师科学严谨的教学态度、渊博的学识、敬业的工作精神、踏实的工作作风、平易近人的待人处事方式,成为我学习的榜样。正是得益于XX老师在设计和程序上的指点、支持和帮助,才得以顺利完成论文的撰写。值此,谨向尊敬的XX老师致以最衷心的祝福和最诚挚的谢意。
然后,要感谢我的室友们,无论是学习还是其他的都给了我极大的帮助,同窗之谊铭记于心。还有感谢曾经教导过我,关心过我的师长、同学和朋友们,感谢他们在学习上生活上给予的帮助和鼓励。
参考文献
[16]余波基于web的客户关系管理系统的设计和实现[D]
[17]杨帅基于SSH的CRM系统的研究和设计[D]
[18]任霄龙基于SSH的客户关系管理的设计和实现[D]
[19]郝倩邮政储蓄银行CRM系统的设计和实现[D]
[20]李骏客户生命周期价值在CRM中的运用[J]
[21]张国方CRM客户关系管理的应用和理论研究综述[J]
[22]杨涛,周志波,凌力.基于Struts和Hibernate的J2EE快速开发框架的设计与实现
[J].计算机工程.2006.5.32~36
[23]杨路明,杨竹青,曹丽娟.客户关系管理与企业获取客户的方法.商业研究,2006,
21:45-50
[24]徐友明.如何从客户关系管理入手提升企业核心竞争力.经济论坛,2005,11:6-8
[25]段俊勇.基于三层C/S结构的ERP系统的研制:[硕士学位论文].山东青岛:青岛科技大
学,2005年
[26]孙卫琴等.精通Stmts:基于MVC的JavaWeb设计与幵发.北京:电子工业出版社,2005
[27]孙卫琴.精通Hibernate:Java对象持久化技术详解.北京:电子工业出版社
[28]孟劼.精通Spring-Java轻量级架构开发实践.北京:人民邮电出版社,2007
[29]张桂元.Eclipse开发入门与项目实践.北京:人民邮电出版社,2005