收藏 分销(赏)

客户管理系统范例.docx

上传人:pc****0 文档编号:8901120 上传时间:2025-03-07 格式:DOCX 页数:36 大小:793.12KB 下载积分:10 金币
下载 相关 举报
客户管理系统范例.docx_第1页
第1页 / 共36页
客户管理系统范例.docx_第2页
第2页 / 共36页


点击查看更多>>
资源描述
      客户管理系统       学 院   专 业   班 级   学 号   姓 名   指导教师   教师职称             年   月   日             摘要 【摘要】 本文介绍了如何使用JSP开发一个客户关系管理系统,目的在于让大家共同学习和运用这一语言的体会和收获。本系统是Intranet环境下面的电子商务的客户关系管理,通过企业管理技术、电子商务和信息技术的高度集成,帮助企业在全球经济一体化的激烈市场竞争环境中,建立以市场、客户为中心的管理体系,有效管理企业与客户之间的关系,提高客户忠诚度,实现客户价值的最大化。从而提高企业的核心竞争力。企业要想生存发展,就必须与与之息息相关的客户建立起良好的关系,不断发展新客户,以企业高质量的产品、优质的服务、良好的资信吸引新客户;经常维系与老客户的关系,以规范的客户管理方式、温馨的客户关怀、高效的客户服务来提升老客户的忠诚度。由此,客户管理系统应运而生。 【关键词】 Struts框架、Struts框架的工作原理、样式层、持久层、服务层、控制层。   目录 摘要 1 0 引言 1 1 系统分析 2 1.1 需求分析 2 1.2 可行性分析 2 2 总体设计 2 2.1 项目规划 2 2.2 系统功能结构图 3 3 系统设计 3 3.1 设计目标 3 3.2 开发及运行环境 4 3.3 数据库设计 4 4 网站总体架构 5 1 系统架构设计 5 3.6.2 文件架构 6 3.6.3 网站首页的运行结果 9 3.6.4 类的分布 12 5 基础信息维护模块设计 13 5.1 工具层的实现 13 5.2 样式层的实现 17 5.3 持久层的实现 18 5.4 服务层的实现 20 10 小结 27 附录一 参考文献 28 附录二 数据表 31 附录三 文件架构图 33 0 引言 客户资源决定企业的核心竞争力。任何一家企业,有钱就可以买到最好的设备、尖端的技术,但却买不到强大的客户资源。面对着竞争对手不断截留我们的客户,各企业商家所关心的不再局限于自身的产品质量、生产设备、员工的素质,更多的是关心自己的销售群体(客户群),关心他们的想法、需求、购买目的,并与客户建立好良好的、长期的客户关系,强化与客户的沟通,帮助企业留住老客户的同时,更好地拓展新客户,提升客户价值,从而全面提升企业竞争能力和盈利能力,为企业的发展壮大保驾护航。   1 系统分析 1.1 需求分析 通过调查研究,要求系统满足以下功能: q q         由于操作人员的计算机知识水平有限,要求有良好的人机界面,可以很简单方便的管理各种客户信息。 q q         方便的数据查询功能。 q q         管理客户的详细信息:包括客户的基本信息、联系人信息、业务来往信息等。 q q         为更多地了解客户的需求,应设置客户服务模块,用以记录客户的反馈信息及投诉信息,并对反馈信息及投诉信息进行图表分析。 q q         与客户联系人之间通过邮件(E-mail)进行联系,对联系人邮箱地址进行管理。 q q         提供各种信息列表的打印功能,并可实现客户信封打印。 q q         在相应的权限下,可以删除或修改数据。 1.2 可行性分析 目前,大多数企业内部的客户管理还处于手工管理阶段,工作起来效率很低,不能及时了解各类客户的实际情况,也无法快速地进行客户信息的查询等操作;不便于动态及时地了解客户的需求及反馈信息,致使企业不能更好地适应当前经济形势发展的需要。手工管理还存在着许多弊端,由于不可避免的人为因素,经常造成数据的遗漏、误报。计算机信息化管理有着储存信息量大、速度快等许多优点,提供给用户的处理信息及时、准确、快捷,同时也能提高企业员工的自身素质。 2 总体设计 2.1 项目规划 客户管理系统是一个典型的数据库开发应用程序,由基础信息维护、客户信息维护、客户服务、信息查询、客户管理、辅助工具、系统管理7部分组成。 q q         基础信息维护 该模块主要是对客户的企业类型、企业性质、客户银行、企业资信、客户级别、客户满意程度、区域信息等一些基础信息进行设置。 q q         客户信息维护 该模块主要是对客户信息、联系人信息、业务来往等一些客户信息进行添加及维护操作的功能。 q q         客户服务 该模块主要是对客户反馈信息及客户投诉信息进行添加、删除等操作,同时对反馈及投拆的数据以图表的形式加以分析。 q q         信息查询 该模块主要实现对客户信息、联系人信息等各种信息的查询,同时可对国内的各大城市的区号及邮编进行查询。 q q         数据管理 该模块主要实现各种数据的打印操作,主要包括:客户信封打印、客户信息打印、联系人信息打印及全国各省份的邮编信息的打印。 q q         系统管理 访模块主要实现对操作员、操作员权限进行设置及修改的操作,主要包括操作员设置、密码修改、权限设置、退出4个部分。 q q         辅助工具 该模块主要为用户提供一些辅助的工具,包括调用Word、调用Excel、发送邮件、计算器及工作业务备忘录。   2.2 系统功能结构图 图1 客户管理系统功能结构图 3 系统设计 3.1 设计目标 本系统是针对中小型企业客户管理现状,通过网络实现对客户的管理,主要实现如下目标: q q         对客户信息(客户基本信息、联系人信息、业务来往信息)进行全面管理。 q q         及时查看库存信息,并通过网站对入库、出库信息进行管理。 q q         强大的客户信息、联系人信息报表打印功能及客户信封打印功能。 q q         及时了解客户的反馈信息及投诉信息,并以图表形式对数据进行分析。 q q         实现各种信息查询功能。 q q         实现了直接通过网络拨打用户电话及发送E-mail。 q q         对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。 q q         操作员可以随时修改自己的口令。 q q         数据保密性强,为每个用户设置相应的权限级别。 q q         提供辅助工具,方便用户操作及使用。 q q         系统运行稳定、安全可靠。 3.2 开发及运行环境 硬件平台: q q         CPU:P41.8GHz; q q         内存:256MB以上。 软件平台: q q         操作系统:Windows 2000; q q         数据库:SQL Server 2000; q q         开发工具包:JDK Version1.4.2; q q         JSP服务器:Tomcat; q q         浏览器:IE5.0,推荐使用IE6.0; q q         分辨率:最佳效果1024×768。 3.3 数据库设计 本系统数据库采用SQL Server 2000数据库,系统数据库名称为db_Client。数据库db_Client中包含18张表。关于数据库中的数据表请参见附录B   4 网站总体架构 1 系统架构设计 在编写代码之前,可以先把网站中可能用到的文件夹创建出来(例如:创建一个名为image的文件夹,用于保存网站中需要的图片),这样可以方便以后的开发工作,也可以规范网站的整体架构,我在开发客户管理系统时,首先设计了如图3所示的文件夹架构图。在开发时只需要将文件保存在相应的文件夹中就可以了,非常方便。   2 网站首页的运行结果 当管理员在进入客户管理系统后,首先进入客户管理系统的大厅,也就是客户管理系统的首页。客户管理系统首页包含基础信息维护、客户信息维护、客户服务、信息查询、数据管理、辅助工具以及系统管理的超链接。 客户管理系统网站首页的运行结果如图4所示。 2 3 1 图4 网站首页运行结果 网站框架说明如表1所示: 表1 网站首页页面说明 区域 名称 说明 对应文件 1 网站导航 主要展示网站的旗帜广告和站内导航条 top.jsp 2 功能模块 主要用于显示导航模块中的功能 information.jsp 3 内容显示 主要用于显示功能模块中的内容 right.jsp 整个网站利用到jsp中的一个框架,框架由名称分别为top、left和main的3个jsp页面组成的,然后利用html代码在index.jsp(和WEB-INF同级目录中)页面中组合起来。 代码如下: /*********************************** index.jsp***************************************/ <title>客户管理系统主页面</title> </head> <frameset rows="115,*" cols="*" frameborder="NO" border="0" framespacing="0"> <frame src="jsp/top.jsp" name="top" scrolling="NO" noresize > <frameset rows="*" cols="246,*" framespacing="0" frameborder="yes" border="0" bordercolor="#404040"> <frame src="jsp/information/information.jsp" name="left" scrolling="no"> <frame src="jsp/right.jsp" name="main"> </frameset> </frameset> <noframes><body> </body></noframes> 区域top所对应的jsp页面(top.jsp,在jsp文件夹)的代码如下: /*********************************** top.jsp***************************************/ <body> <div align="center" class="style1"> <p class="style2">客户管理系统</p> <p><a href="information/information.jsp" target="left">基础信息维护</a>&nbsp;<a href="information/khxxInformation.jsp" target="left"> 客户信息维护</a> &nbsp; <a href="information/seriveClient.jsp" target="left">客户服务</a>&nbsp; <a href="information/queryInformation.jsp" target="left">信息查询</a> &nbsp;<a href="information/printInformation.jsp" target="left"> 数据管理</a>&nbsp; <a href="information/tool.jsp" target="left">辅助工具</a> &nbsp; </p> </div> </body> 区域left所对应的jsp页面(information.jsp,在jsp/information/information.jsp文件夹)的代码如下: /*********************************** information.jsp*********************************/ <body> <div align="right"> <table width="199" height="500" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="199" height="97" align="center" valign="middle" background="images/clientbar.jpg" class="style5"></td> </tr> <tr> <td width="199" height="37" align="center" valign="middle" background="images/cbar.jpg"><a href="../../cqylxSelect.do" target="main">企业类型设置</a> </td> </tr> <tr> <td width="199" height="37" align="center" valign="middle" background="images/cbar.jpg"><a href="../../cqyxzSelect.do" target="main">企业性质设置</a></td> </tr> <tr> <td width="199" height="37" align="center" valign="middle" background="images/cbar.jpg"><a href="../../cbankSelect.do" target="main">客户银行设置</a></td> </tr> <tr> <td width="199" height="37" align="center" valign="middle" background="images/cbar.jpg"><a href="../../cqyzxSelect.do" target="main" class="style12">企业资信设置</a></td> </tr> <tr> <td width="199" height="37" align="center" valign="middle" background="images/cbar.jpg"><a href="../../ckhjbSelect.do" target="main">客户级别设置</a></td> </tr> <tr> <td width="199" height="37" valign="middle" background="images/cbar.jpg">    <a href="../../ckhmydSelect.do" target="main">客户满意程度设置</a></td> </tr> <tr> <td width="199" height="37" align="center" valign="middle" background="images/cbar.jpg"><a href="../../cqyxxSelect.do" target="main">区域信息设置</a></td> </tr> <tr> <td align="left" valign="top" bgcolor="#F7F7F7">&nbsp;</td> </tr> </table> </div> </body> 区域main所对应的jsp页面(right.jsp,在jsp文件夹)的代码如下: /*********************************** right.jsp***************************************/ <%@ page contentType="text/html; charset=gb2312"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>右页面</title> <style type="text/css"> <!-- body { background-color: #000000; margin-left: 0px; margin-top: 0px; } --> </style></head> <body> <table width="579" height="500" border="0" cellpadding="0" cellspacing="0"> <tr> <td align="center" valign="top" bgcolor="#FFFFFF"><p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <table width="79%" height="118" border="0" cellpadding="0" cellspacing="0" background="../images/background.gif"> <tr> <td>&nbsp;</td> </tr> </table> </td> </tr> </table> </body> </html> 3 类的分布 整个网站的实现功能利用到的框架Struts,基本上是以“类”的形式实现的。所以我设计一个类的分布图如下: 图5 类的分布图 各个类所实现的功能如表2所示。 表2 类的功能 名称 功能 持久层(dao文件夹) 各种方法的实现 样式层(domain文件夹) 所存放的类是Actionform类,在类中必须要继承ActionForm(也就是entends ActionForm) 服务层(server文件夹) 存放的dao层功能的业务的类 控制层(webtier文件夹) 存放在jsp页面中存在的方法实现的类 工具层(tool文件夹) 类名为JDBConnection.java(连接数据库的功能)、类名为Chinese.java(字符级转换的类)、文件名为sqlSQLCode、Properties(主要存放sql语句)、SQLCode.java(主要是解析sqlSQLCode. Properties中的sql语句中的?) 5 基础信息维护模块设计 基础信息维护主要功能块分为:区域信息设置、企业性质设置、企业类型设置、企业资信设置、客户级别设置、客户满意程度设置和客户银行设置。 在这里单击任何一个功能模块都是一个查询功能。这些功能块的实现方法基本相同,下面以“企业类型设置”功能模块为例,详细介绍其通过MVC框架所实现的功能。 单击“企业类型设置”超链接,即可进入到企业类型设置页。在该页中可以看到企业类型的各种详细功能,包括对数据的添加、修改、删除功能。下面就分层介绍各种功能的实现。 5.1 工具层的实现 在工具层(tool文件夹)中主要存放的是常用的基本类,在这里不管任何一项功能都要调用相对应的类的方法。 1.Chinese.java类(字符级转换的类) /******************************* Chinese .java*************************************/ package com.tool; import java.io.UnsupportedEncodingException; public class Chinese { //将从form 表单中去出的数据转换为汉字 public static String str(String a) { try { return new String(a.getBytes("ISO-8859-1")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } } 2.sqlCode.properties文件(sql语句的存放位置) /******************************* sqlCode.properties**********************************/ #--基础信息维护--# #--对区域信息表的操作(tb_Client_qyxx)--# #--查询的操作— sql.qyxx.select=select * from tb_Client_qyxx #--插入的操作— sql.qyxx.insert=insert into tb_Client_qyxx values('?','?','?','?','?','?') 3.SQLCode.java类(通过这个类解析properties文件中的sql语句) /******************************** SQLCode.java***********************************/ package com.tool; public final class SQLCode { private static SQLCode sqlCode = null; private static java.util.Properties sqlCodeProperties = new java.util.Properties(); static { sqlCode = new SQLCode(); } private SQLCode() { _load(); } public static String getSQLCode(String sqlKey) { String sql = ""; if (sqlCodeProperties.containsKey(sqlKey)) { sql = sqlCodeProperties.getProperty(sqlKey); } return sql; } public static SQLCode getInstance() { return sqlCode; } //指向sqlcode.properties的位置 public void _load() { String fileName = "/com/tool/sqlCode.properties"; //通过指定路径找到资源文件存放在fileName中 sqlCodeProperties.clear(); // SqlCodeProperties清空 try { java.io.InputStream in = null; //定义输出流的变量 try { in = getClass().getResourceAsStream(fileName); //把fileName中存放值放入in字符流中 sqlCodeProperties.load(in); } finally { in.close(); } } catch (java.io.IOException e) { System.out.println(e.getMessage()); } }} 4.JDBConnction.java(这是个JDBC的类,用于加载数据库) /******************************* JDBConnection.java********************************/ package com.tool; import java.sql.DriverManager; import java.sql.Connection; import java.sql.SQLException; import java.sql.ResultSet; import java.sql.Statement; //这是一个工具类实现与数据库的连接 public class JDBConnection { String sd = "sun.jdbc.odbc.JdbcOdbcDriver"; String sc = "jdbc:odbc:db_Client"; ResultSet rs = null; Connection conect = null; public JDBConnection() { try { Class.forName(sd); //通过构造方法加载对象 } catch (java.lang.ClassNotFoundException e) { System.err.println(e.getMessage()); } } //只能执行查询的sql语句,并且通过Resulit类型的对象,把所读取的内容返回。 public ResultSet executeQuery(String sql) { try { conect = DriverManager.getConnection(sc); 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) { //能够执行修改。删除和插入的sql语句。 int result = 0; try { conect = DriverManager.getConnection(sc); 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 { mit(); } 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; } public String editSqlCode(String sql, Integer 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; } 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; }} 5.2 样式层的实现 在样式层(在domain文件夹)中的类是一个继承了ActionForm(也就是extends ActionForm)的类。对于每个请求参数通过其名称来对应到bean的一个属性上,并调用相对应的setter方法来设置属性值。这个方法类似于标准jsp中<jsp:setProerty>标记。同样调用相应的getter方法来取得属性值,更新后的ActionForm Bean被传递给Action类的perform方法,以便使这些值能被系统状态和业务逻辑bean来使用。 企业类型设置模块对应的ActionForm类CqylxForm.java的代码如下: /*********************************** CqylxForm.java******************************/ package com.domain; //对企业生产类型表的操作(tb_client_qylx) public class CqylxForm extends ActionForm {//使用Struts需要继承ActionForm private String qylx_bz = ""; //备注信息 private String qylx_id = ""; //企业生产类型编号 private String qylx_lxmc = ""; //企业生产类型名称 public CqylxForm() {} public String getQylx_bz() { return qylx_bz; } public void setQylx_bz(String qylx_bz) { this.qylx_bz = qylx_bz; } public String getQylx_id() { return qylx_id; } public void setQylx_id(String qylx_id) { this.qylx_id = qylx_id; } public String getQylx_lxmc() { return qylx_lxmc; } public void setQylx_lxmc(String qylx_lxmc) { this.qylx_lxmc = qylx_lxmc; }} 5.3 持久层的实现 在持久层(dao层文件夹)中,主要
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服