目录
0、效果展示
1、CRM公司企业客户关系管理概述
本文介绍了如何使用JSP开发一个客户关系,目的在于让大家共同学习运用这一语言的体会收获。本系统是Intranet环境下面的电子商务的客户跟踪服务,通过企业管理技术、电子商务信息技术的高度集成,帮助企业在全球经济一体化的激烈市场竞争环境中,建立以市场、客户为中心的管理体系,有效管理企业与客户之间的关系,提高客户忠诚度,实现客户价值的最大化。从而提高企业的核心竞争力。企业要想生存发展,就必须与之息息相关的客户建立起良好的关系,不断发展新客户,以企业高质量的产品、优质的服务、良好的资信吸引新客户;经常维系与老客户的关系,以规范的客户管理方式、温馨的客户关怀、高效的客户服务来提升老客户的忠诚度。由此,客户管理系统应运而生。本论文讨论了客户关系的分析、设计以及实施。本系统是使用MYSQL数据库为工具开发的,采用B/S结构的管理系统。
客户关系,其开发主要包括后台数据库的建立维护以及应用程序的开发两个方面。对于数据库要求建立起数据一致性完整性强、数据安全性好的数据库,而对于后者则要求应用程序功能完备,易使用等特点。该客户关系实现了:客户资料管理、产品管理、行动管理报表分析、系统管理,很好的展现了该系统的优越性实用性。
2、CRM公司企业客户关系管理搭建环境
本文以实现一个CRM公司企业客户关系管理为目标,从环境搭建到编码实现全过程讲述
我们使用javaweb、J2EE来构建CRM公司企业客户关系管理,环境使用最新版jdk和tomcat,配合mysql数据库
开发工具使用idea(也可以使用eclipse),数据库管理工具使用Navicat Premium
开发框架使用JavaBean Servlet MVC结构;
没有使用SSH(Struts+Spring+Hibernate)或SSM(Spring+SpringMVC+MyBatis),这两个框架我们在别的项目中再介绍开发过程
在项目中会引入My97DatePicker作为前端日期时间选择工具,使用fckeditor作为富媒体编辑器(也可以使用百度的ueditor)
使用JSTL(Java server pages standarded tag library,即JSP标准标签库),此库是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
3、项目代码规划结构
4、后端代码示例
package com.webtier.clientKhmydAction;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import com.service.CkhmydFacade;
import com.service.CkhmydFacadeImpl;
//#--以数据库中的记录数,查找出多少记录计算,以便做帐号存贮--
public class CkhmydCountID
extends Action {
private CkhmydFacade khmyd = null;
public CkhmydCountID() {
this.khmyd = new CkhmydFacadeImpl();
}
public ActionForward perform(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
String changeType = String.valueOf(this.khmyd.khmydCount());
httpServletRequest.setAttribute("changeType", changeType);
return actionMapping.findForward("ckhmydCountID");
}
}
package com.tool;
import java.sql.*;
//这是一个工具类实现与数据库的连接
public class JDBConnection {
String user = "root";
String password = "root";//这里修改数据库密码
String sd = "com.mysql.jdbc.Driver";
String sc = "jdbc:mysql://localhost:3306/db_client?characterEncoding=utf8";
ResultSet rs = null;
Connection conect = null;
public JDBConnection() {
try {
Class.forName(sd);
} catch (java.lang.ClassNotFoundException e) {
System.err.println(e.getMessage());
}
}
public ResultSet executeQuery(String sql) {
try {
conect = DriverManager.getConnection(sc, user, password);
Statement stmt = conect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
System.err.println(ex.getMessage());
}
return rs;
}
public int executeUpdate(String sql) {
int result = 0;
try {
conect = DriverManager.getConnection(sc, user, password);
Statement stmt = conect.createStatement();
result = stmt.executeUpdate(sql);
} catch (SQLException er) {
System.err.println(er.getMessage());
}
return result;
}
public void close() {
try {
if (conect != null) {
conect.close();
}
} catch (Exception e) {
System.out.println(e);
}
}
//设置提交
public void setAutoCommit(boolean flag) {
try {
conect.setAutoCommit(flag);
} catch (Exception exception) {
System.out.println("Exception in set autoCommit :" + exception.getMessage());
}
}
//执行提交
public void commit() {
try {
conect.commit();
} catch (Exception exception) {
System.out.println("Exception in commit :" + exception.getMessage());
}
}
//执行回滚
public void rollback() {
try {
conect.rollback();
} catch (Exception exception) {
System.out.println("Exception in rollback :" + exception.getMessage());
}
}
//将sql语句中的?号转为相应的参数 ,其中参数为字符串型的
public String editSqlCode(String sql, String str) {
try {
// 截取从0到第一个问号的字符串加参数str,然后在加上第一问号以后的字符串
sql = sql.substring(0, sql.indexOf("?")) + str +
sql.substring(sql.indexOf("?") + 1);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return sql;
}
//将sql语句中的?号转为相应的参数 ,其中参数为长整型的
public String editSqlCode(String sql, Integer str) {
try {
sql = sql.substring(0, sql.indexOf("?")) + str +
sql.substring(sql.indexOf("?") + 1);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return sql;
}
//将sql语句中的?号转为相应的参数 ,其中参数为整型的
public String editSqlCode(String sql, int str) { //提取SQL语句,并把(int str)传出来的值来代替?
try {
sql = sql.substring(0, sql.indexOf("?")) + str +
sql.substring(sql.indexOf("?") + 1);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return sql;
}
//将sql语句中的?号转为相应的参数 ,其中参数为整型的
public String editSqlCode(String sql, Float str) { //提取SQL语句,并把(Float str)传出来的值来代替?
try {
sql = sql.substring(0, sql.indexOf("?")) + str +
sql.substring(sql.indexOf("?") + 1);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return sql;
}
}
5、前端代码示例
<%@ page language="java" pageEncoding="utf-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
<title>客户跟踪服务系统</title>
<style type="text/css">
<!--
* {
overflow: hidden;
font-size: 9pt;
}
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-repeat: repeat-x;
background-image: url(images/bg.jpg);
background-color: #1d3e47;
}
-->
</style>
<script type='text/javascript' src='<%=path %>/dwr/interface/loginService.js'></script>
<script type='text/javascript' src='<%=path %>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=path %>/dwr/util.js'></script>
<script language="javascript">
function check1() {
if (document.ThisForm.name.value == "") {
alert("请输入用户名");
document.ThisForm.name.focus();
return false;
}
if (document.ThisForm.mm.value == "") {
alert("请输入密码");
document.ThisForm.mm.focus();
return false;
}
document.ThisForm.submit();
}
</script>
</head>
<script language="javascript">
function check() {
if (document.form1.username.value == "" || document.form1.pwd.value == "" || document.form1.yzm.value == "") {
alert("请输入完整");
return false;
}
}
</script>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="1000" height="564" border="0" align="center" cellpadding="0" cellspacing="0" background="images/login.jpg"
id="__01">
<tr>
<td height="193" colspan="3">
<div align="center" style="color: #CCFFCC;font-size: 26pt;font-weight: bold;">客户跟踪服务系统</div>
</td>
</tr>
<tr>
<td width="352" rowspan="2" valign="top"> </td>
<td width="211" height="152">
<table width="195" border="0" align="right" cellpadding="0" cellspacing="0">
<form name="ThisForm" method="POST" action="userCheck.do">
<tr>
<td width="47" height="30">用户:</td>
<td height="30" colspan="2"><input name="name" type="text" id="name"
style="width:100px; height:16px; border:solid 1px #000000; color:#666666">
</td>
</tr>
<tr>
<td height="30">密码:</td>
<td height="30" colspan="2"><input name="mm" type="password" id="mm"
style="width:100px; height:16px; border:solid 1px #000000; color:#666666">
</td>
</tr>
<tr style="display:none">
<td height="30">权限:</td>
<td height="30" colspan="2"></td>
</tr>
<tr style="display:none">
<td height="30"></td>
<td width="52" height="30"></td>
<td width="96"></td>
</tr>
<tr>
<td height="30" colspan="3"><input type="submit" name="Submit" value="登陆"
onClick="return check1();"
style="background:url(images/button.gif) no-repeat;color:#ffffff;width:80px;height: 24px; border:0px;line-height:10px; font-size:12px;margin-right: 5px; cursor:pointer">
</td>
</tr>
</form>
</table>
</td>
<td width="437" rowspan="2"> </td>
</tr>
<tr>
<td> </td>
</tr>
</table>
</body>
</html>