javaBS实训客户关系管理系统.docx
《javaBS实训客户关系管理系统.docx》由会员分享,可在线阅读,更多相关《javaBS实训客户关系管理系统.docx(37页珍藏版)》请在冰豆网上搜索。
javaBS实训客户关系管理系统
JAVAB/S架构企业管理软件开发
与白盒测试实训报告
课题名称
酒店客户关系管理系统的设计与测试
系/专业
计算机与软件学院/软件技术
班级
其实这个系统没做完
组别
不过功能、框架已经很不错了
小组成员
所以分享一下
指导教师:
2012年06月20日
摘要
客户是企业的一项重要资产,客户关怀是CRM的中心,客户关怀的目的是与所选客户建立长期和有效的业务关系,在与客户的每一个“接触点”上都更加接近客户、了解客户,最大限度地增加利润和利润占有率。
CRM的核心是客户价值管理,它将客户价值分为既成价值、潜在价值和模型价值,通过一对一营销原则,满足不同价值客户的个性化需求,提高客户忠诚度和保有率,实现客户价值持续贡献,从而全面提升企业盈利能力。
这里本来没有文字的,为了能让大家知道怎么运行增加的:
1.环境:
这些用的人肯定知道啦!
!
!
2.导入之后,有三个包:
com.action、com.dao、com.util、com.vo这个相信大家也能明白的。
3.tomcat启动之后,在ie或者其它浏览器中输入:
主页是:
4.没有数据库,你连登陆页面都起不来,找到数据库就好办了
5.接下来你们就自己研究吧!
!
!
摘要1
第一章系统分析3
1.1系统背景3
1.2可行行分析3
1.3需求分析4
1.4开发环境分析5
1.5角色分析5
第二章概要设计6
2.1功能模块设计6
第三章详细设计8
3.1数据库设计8
3.2系统包设计15
第四章系统实现16
4.1登录功能16
4.2营销管理模块18
4.3客户管理模块23
4.4服务管理模块26
第五章系统发布与测试29
5.1测试计划29
5.2测试用例29
5.3测试结果及分析32
小组总结34
个人总结35
致谢41
参考文献42
第一章系统分析
1.1系统背景
近年来,随着企业规模的不断扩大,企业管理的信息量也相应的增加,面对庞大的信息量,传统的人工方式管理会导致管理上的混乱,人力与物力的过多浪费,管理费用增加,管理负担加重,影响整个企业的运作和控制管理,因此,必须制定一套合理,有效,规范和实用的企业管理系统,对企业进行集中统一管理。
另一方面,IT产业和Internet获得飞速防发展,计算机应用已渗透到了各个领域,引起信息管理革命,实现了信息的自动化处理,提高了处理的及时性和正确性。
我们小组开发的企业用户关系管理系统就是采用现代化的信息管理方式代替手工管理方式,提高企业用户管理工作效率,做到信息的规范管理,科学统计和快速查询。
1.2可行行分析
Struts技术主要应用于java开发方面,structs是基于MVC开发模式的框架。
要是把一个项目比喻成一个建筑物,Struts2就是建筑物的骨架,然后你在这个骨架可以添砖加瓦完成你的项目。
Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。
使开发者能更深入的了解其内部实现机制。
除此之外,Struts的优点主要集中体现在两个方面:
Taglib和页面导航。
Taglib是Struts的标记库,灵活动用,能大大提高开发效率。
另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。
根据项目需求分析,确定该系统必须具备的性能有:
1)良好的交互性:
工作内容中有相当大的部分是人机交流,这就要求系统的交互性要强。
2)较好的可扩展性:
工作的内容和形式具有多变性,要求系统具有良好的可扩展性。
3)良好的可维护性:
系统投入使用后,主要是由管理员承担系统维护的工作,维护人员不定期变动,这就要求系统的可维护性强。
4)具有较好的跨平台性:
用户可能使用各种不同的操作系统,而且为了适应今后可能的变化,系统应具有较好的跨平台性。
基于以上四点,在开发软件租用模块时,采用J2EE编程环境,并相应采用了专为J2EE定制的Struts框架。
1.3需求分析
任务概述
综合应用主流Ajax客户端技术,StrutsWeb框架技术,数据库技术,软件测试技术,网站部署与发布等技术,遵从IT企业生产性项目的软件产品生命周期开发工程模型或敏捷开发及持续集成模型,应用软件工程相关工具,完成企业信息管理系统的设计与开发。
根据系统说明书进行新系统的物理设计,提出一个由一系列模块和元素组成的新系统设计方案。
通常分为总体设计和详细设计两个阶段。
总体设计阶段的主要任务是:
系统模块结构的设计、系统整体框架设计。
详细设计阶段的主要任务是:
数据库设计和数据文件的设计、编码设计、输入/输出设计、模块逻辑设计、包的设计等。
在该项目中系统被分为三大模块:
营销管理模块、客户管理模块、服务管理模块。
主要任务就是将这三大模块分别细化设计,确定各自的字段、数据库等相关事项,然后再统筹在一起组成一个大的框架,最后成形整个管理系统。
需求描述
营销管理模块,该模块要实现的功能有:
销售机会管理、销售计划管理。
销售机会管理包含:
机会名称、机会编号、客户名称、客户编号、联系方式。
销售计划管理包括计划日期、计划人、计划主题、计划内容。
客户管理,该模块要实现的功能有:
客户信息管理、客户流失管理、客户联系人管理、客户住宿记录等。
客户信息管理包括:
客户名称、客户性别客户密码、客户电话、客户生日、客户等级、客户地址、客户邮箱。
服务管理,该模块包含的主要字段有留言管理、库存管理、订单管理等。
系统完成时可以实现对客户信息的有效管理,可以实现对客户的添加、删除、修改、查看;可以实现计划的添加、删除、修改、查看等功能;可以发布留言信息,可以实现对客户的日常管理。
功能需求是用户的最主要的需求,对用户功能需求的描述可以采用文字描述也可以采用语言加图形的描述方式,只要能够将用户的需求描述地完整、准确、易于理解即可。
对功能需求比较复杂的系统(如超过10个功能项),可以先描述一个概要,对简单的系统可以直接进行详细描述。
对于用户的功能需求要进行分类,分类的方法应便于用户理解,如按照用户的部门设置情况,进行描述每个部门的需求,这样也便于组织用户进行评审。
1.4开发环境分析
B/S的开发语言、开发工具、运行环境
开发语言:
JSP,Java,Struts2框架开发技术
开发工具:
Eclipse
运行环境:
服务器端必须要安装Tomcat、jdk1.6
1.5角色分析
用户关系管理系统(CRM,CustomerRelationshipManagement)
角色:
销售员、销售经理、系统管理员
角色解析:
销售员:
负责直接添加、删除、修改客户,与老客户进行交流并通过老客户的联系人吸收新客户,执行销售经理指派的销售计划。
销售员之间有自己独立的客户群,并以此作为计算销售员的工资。
销售经理:
销售经理可以查看到所有客户信息及客户所属销售人员。
销售经理管理所有的客户留言(投诉,留言)
系统管理员:
主要是负责基层管理数据,如:
销售经理、销售员的添加、删除、修改等。
客户:
查看个人信息、对销售员投诉、给公司留言
第二章概要设计
2.1功能模块设计
根据需求分析得出的功能模块,如图2-1所示
图2-1
营销管理模块,该模块要实现的功能有:
销售机会管理、销售计划管理。
销售机会管理包含:
机会名称、机会编号、客户名称、客户编号、联系方式。
销售计划管理包括计划日期、计划人、计划主题、计划内容。
客户管理,该模块要实现的功能有:
客户信息管理、客户流失管理、客户联系人管理、客户住宿记录等。
客户信息管理包括:
客户名称、客户性别客户密码、客户电话、客户生日、客户等级、客户地址、客户邮箱。
服务管理,该模块包含的主要字段有留言管理、库存管理、订单管理等
系统完成时可以实现对客户信息的有效管理,可以实现对客户的添加、删除、修改、查看;可以实现计划的添加、删除、修改、查看等功能;可以发布留言信息,可以实现对客户的日常管理。
2.2系统用例图
利用UML中的用例图画出各角色之间的关系。
图2.1用户关系管理的用例图
第三章详细设计
3.1数据库设计
3.1.1概念模型设计(图3-1)
1.系统管理员通过系统可以增加、删除、修改销售员和销售经理,它们之间通过管理联系起来,销售员和销售经理之间通过销售经理给销售员指派机会,销售人员收到机会后去发展新客户这样的管理联系起来。
2.一个系统管理员可以对应多个销售人员和多个销售经理,反之亦然。
一个销售经理可以给多个销售人员指派机会,一个机会同样可以由不同的销售经理去指派。
依据上面所述可以得到如下图所示的完整E-R图
图3-1实体联系图
3.完整的E-R图如(图3-2)所示
4.机会实体的属性为:
3.1.2关系模式设计(—主键,—负键)
销售员(员工编号,用户名,密码,岗位)
销售经理(员工编号,用户名,密码,岗位)
客户(客户id号,客户姓名,密码,联系方式,性别,生日,身份证号,家庭住址,客户等级,客户邮箱)
3.1.3表的创建
1.系统管理员表:
表名
sys_user
列名
列的中文名
数据类型
默认值
是否可为空
备注
usr_id
用户编号
Bigint(50)
Notnull
PK
usr_name
用户名
Nvarchar(50)
Notnull
usr_psw
用户密码
Nvarchar(50)
Notnull
2.销售员表:
表名
Salem
列名
列的中文名
数据类型
默认值
是否可为空
备注
Salem_name
销售员姓名
Nvarchar(50)
Notnull
Salem_id
编号
Bigint(50)
Notnull
PK
Salem_tel
联系电话
Nvarchar(50)
Notnull
post
岗位
Char(20)
Notnull
3.销售经理表:
表名
Salemg
列名
列的中文名
数据类型
默认值
是否可为空
备注
Salemg_id
经理编号
Bigint(50)
Nornull
PK
Salemg_name
经理姓名
Nvarchar(50)
Nornull
Salemg_tel
联系方式
Int(20)
Nornull
post
岗位
Char(20)
Nornull
4.客户信息表:
表名:
Customer
列名
列的中文名
数据类型
默认值
是否可为空
备注
Cust_id
客户编号
Gigint(20)
Notnull
PK
Cust_name
客户姓名
Nvarchar(50)
Notnull
Cust_psw
客户密码
Nvarchar(50)
Notnull
Cust_sex
性别
Nvarchar(50)
Notnull
Cust_tel
电话
Int(20)
Notnull
Cust_email
邮箱
Nvarchar(50)
Notnull
Cust_addtr
地址
Nvarchar(50)
Notnull
Cust_birth
生日
Date(20)
Notnull
Cust_level
等级
Char(20)
Notnull
Cust_PID
身份证号
Int(20)
Notnull
5.机会表:
表名
Opportunity
列名
列的中文名
数据类型
默认值
是否可为空
备注
Opp_id
机会编号
Gigint(20)
NotNull
PK
Opp_name
机会名称
Nvarchar(50)
NotNull
Cust_id
客户编号
Gigint(20)
NotNull
FK
Cust_name
客户姓名
Nvarchar(50)
NotNull
Cust_tel
联系方式
Int(20)
NotNull
6.客户联系人表:
表名:
Cust_link_man
列名
列的中文名
数据类型
默认值
是否可为空
备注
Name
联系人姓名
Nvarchar(50)
NotNull
PK
Sex
性别
Char(10)
NotNul
tel
联系方式
Int(20)
NotNul
Cust_name
客户姓名
Nvarchar(50)
NotNul
FK
7.客户留言表:
表名:
Message
列名
列的中文名
数据类型
默认值
是否可为空
备注
Cust_name
客户姓名
Nvarchar(50)
Notnull
Message_id
留言编号
Gigint(20)
Notnull
PK
Message_name
留言名称
Nvarchar(50)
Notnull
Message_text
留言内容
Nvarchar(200)
Notnull
8.客户住宿记录表
表名:
Log
列名
列的中文名
数据类型
默认值
是否可为空
备注
Cust_name
客户姓名
Nvarchar(50)
NotNull
Cust_id
客户编号
Gigint(20)
NotNull
PK
Cust_PID
身份证号
Int(20)
NotNull
FK
Cust_level
等级
Char(10)
NotNull
Cust_pay
应付金额
Double(100)
NotNull
In_Date
入住时间
Date(20)
NotNull
Out_Date
退房时间
Date(20)
NotNull
people
人数
Int(20)
NotNull
Room_type
房间类型
Char(10)
NotNull
Room_id
房间号
Gigint(20)
NotNull
PK
9.库存记录表:
表名:
Room
列名
列的中文名
数据类型
默认值
是否可为空
备注
Room_id
房间号
Gigint(20)
NotNull
PK
Room_typr
房间类型
Char(10)
NotNull
3.2系统包设计
为了更清楚的了解我们企业管理的主要流程。
更方便的了解我们后台基础。
下面是我们业务流程逻辑,如图3.1所示。
为了更好地组织类,Java提供了包机制。
包是类的容器,用于分隔类名空间。
根据我们所选用的开发环境,我们组总共设置了四大类的包,主要有:
com.vo:
简单的Java对象。
主要是作为支持业务逻辑的协助类。
是包含着其中有一些属性及其gettersetter方法的类。
com.Dao:
数据访问对象。
是与数据库打交道,夹在业务逻辑与数据库资源中间。
com.action:
是一些特殊的Java类,它们有属性和方法,用来调用某个java类的某个方法进行数据预处理和一些相关的业务逻辑处理,然后把最终处理结果和要返回的对象放在request或者session里面,最后更具结果确定返回那个result。
com.util:
此包是一个工具包,用于建立连接数据库连接,以及其他公用的功能设计。
第四章系统实现
4.1登录功能
登录界面包含登录名、登录密码和登录权限,根据登录者选择登录权限,登录权限包含系统管理员、销售经理和销售人员,如图4.1所示。
图4.1登录主界面
当用户输入用户名、密码之后,点击登陆按钮,页面将交给LoginAction.java的action处理,判断是否可以成功登陆,action的核心处理代码如下:
publicStringlogin()
{
UserTypeuserType=newUserType();
if(userTypeId>=1&&userTypeId<=3){
userType=newUserTypeDao().getTypeById(userTypeId);
}
if(userTypeId==1)
{
LoginDaologinDao=newLoginDao();
if(loginDao.checkLogin1(loginType.getUsername(),loginType.getPassword()))
{
session.put("userType",userType.getName());
returnSUCCESS;
}
else
{
returnINPUT;
}
}
if(userTypeId==2)
{
LoginDaologinDao=newLoginDao();
if(loginDao.checkLogin2(loginType.getUsername(),loginType.getPassword()))
{
session.put("userType",userType.getName());
returnSUCCESS;
}
else
{
returnINPUT;
}
}
if(userTypeId==3)
{
LoginDaologinDao=newLoginDao();
if(loginDao.checkLogin3(loginType.getUsername(),loginType.getPassword()))
{
session.put("userType",userType.getName());
returnSUCCESS;
}
else
{
returnINPUT;
}
}
returnINPUT;
}
@Override
publicvoidsetSession(Maparg0){
this.session=arg0;
}
publicStringlogout(){
if(!
session.isEmpty()){
session.clear();
}
returnSUCCESS;
}
登陆成功之后,跳转到主页面,如图4.2所示。
图4.2主界面
4.2营销管理模块
营销管理模块包括销售机会管理和销售计划管理。
销售机会管理是对潜在的顾客或业务进行统计和管理,销售计划管理是对销售经理或销售人员进行销售计划的记录和管理,页面截图如图4.3所示。
图4.3销售机会管理页面
图4.4销售计划管理页面
系统管理员在上述模块输入信息之后,提交到action进行处理(insertoppaction.java)。
页面显示代码和action代码如下:
页面代码:
formaction="lookOpp"method="post">
iftest="currentPage==0">
hiddenname="page"value="1"/>
if>
机会编号 | 机会名称 | 客户编号 | 联系方式 | |
iteratorvalue="opps"status="status">
iftest="#status.odd">
if>
<
propertyvalue="Opp_id"/> | propertyvalue="Opp_name"/> | propertyvalue="Cust_id"/> | propertyvalue="Opp_name"/> | propertyvalue="Cust_tel"/> | id=propertyvalue="Opp_id"/>">[删除] [修改] |
iterator>
跳转到: | | 当前页数 | [ propertyvalue="currentPage"/>/propertyvalue="maxPage"/>] | page=1">第一页 | page=propertyvalue="PageS"/>">上一页 | page=propertyvalue="PageX"/>">下一页 | page=propertyvalue="maxPage"/>">最后一页 |
form>
Action代码:
publicStringshowOpp()
{
OpportunityDaoopp=newOpportunityDao();
intrecordCount=opp.getCounts();
maxPage=PageDeal.getMaxPage(recordCount);
curren