毕业设计(论文)-客户管理系统开发与设计.doc_第1页
毕业设计(论文)-客户管理系统开发与设计.doc_第2页
毕业设计(论文)-客户管理系统开发与设计.doc_第3页
毕业设计(论文)-客户管理系统开发与设计.doc_第4页
毕业设计(论文)-客户管理系统开发与设计.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

客户管理系统开发与设计系别: 班级: 姓名: 导师: 日期: 年 月 日 35 摘要【摘要】本文介绍了如何使用JSP开发一个客户关系管理系统,目的在于让大家共同学习和运用这一语言的体会和收获。本系统是Intranet环境下面的电子商务的客户关系管理,通过企业管理技术、电子商务和信息技术的高度集成,帮助企业在全球经济一体化的激烈市场竞争环境中,建立以市场、客户为中心的管理体系,有效管理企业与客户之间的关系,提高客户忠诚度,实现客户价值的最大化。从而提高企业的核心竞争力。企业要想生存发展,就必须与与之息息相关的客户建立起良好的关系,不断发展新客户,以企业高质量的产品、优质的服务、良好的资信吸引新客户;经常维系与老客户的关系,以规范的客户管理方式、温馨的客户关怀、高效的客户服务来提升老客户的忠诚度。由此,客户管理系统应运而生。【关键词】 Struts框架、Struts框架的工作原理、样式层、持久层、服务层、控制层。目录摘要10 引言11 系统分析21.1 需求分析21.2 可行性分析22 总体设计22.1 项目规划22.2 系统功能结构图33 系统设计33.1 设计目标33.2 开发及运行环境43.3 数据库设计44 网站总体架构51 系统架构设计53.6.2 文件架构63.6.3 网站首页的运行结果93.6.4 类的分布125 基础信息维护模块设计135.1 工具层的实现135.2 样式层的实现175.3 持久层的实现185.4 服务层的实现2010 小结27附录一 参考文献28附录二 数据表31附录三 文件架构图330 引言客户资源决定企业的核心竞争力。任何一家企业,有钱就可以买到最好的设备、尖端的技术,但却买不到强大的客户资源。面对着竞争对手不断截留我们的客户,各企业商家所关心的不再局限于自身的产品质量、生产设备、员工的素质,更多的是关心自己的销售群体(客户群),关心他们的想法、需求、购买目的,并与客户建立好良好的、长期的客户关系,强化与客户的沟通,帮助企业留住老客户的同时,更好地拓展新客户,提升客户价值,从而全面提升企业竞争能力和盈利能力,为企业的发展壮大保驾护航。1 系统分析1.1 需求分析通过调查研究,要求系统满足以下功能:q 由于操作人员的计算机知识水平有限,要求有良好的人机界面,可以很简单方便的管理各种客户信息。q 方便的数据查询功能。q 管理客户的详细信息:包括客户的基本信息、联系人信息、业务来往信息等。q 为更多地了解客户的需求,应设置客户服务模块,用以记录客户的反馈信息及投诉信息,并对反馈信息及投诉信息进行图表分析。q 与客户联系人之间通过邮件(E-mail)进行联系,对联系人邮箱地址进行管理。q 提供各种信息列表的打印功能,并可实现客户信封打印。q 在相应的权限下,可以删除或修改数据。1.2 可行性分析目前,大多数企业内部的客户管理还处于手工管理阶段,工作起来效率很低,不能及时了解各类客户的实际情况,也无法快速地进行客户信息的查询等操作;不便于动态及时地了解客户的需求及反馈信息,致使企业不能更好地适应当前经济形势发展的需要。手工管理还存在着许多弊端,由于不可避免的人为因素,经常造成数据的遗漏、误报。计算机信息化管理有着储存信息量大、速度快等许多优点,提供给用户的处理信息及时、准确、快捷,同时也能提高企业员工的自身素质。2 总体设计2.1 项目规划客户管理系统是一个典型的数据库开发应用程序,由基础信息维护、客户信息维护、客户服务、信息查询、客户管理、辅助工具、系统管理7部分组成。q 基础信息维护该模块主要是对客户的企业类型、企业性质、客户银行、企业资信、客户级别、客户满意程度、区域信息等一些基础信息进行设置。q 客户信息维护该模块主要是对客户信息、联系人信息、业务来往等一些客户信息进行添加及维护操作的功能。q 客户服务该模块主要是对客户反馈信息及客户投诉信息进行添加、删除等操作,同时对反馈及投拆的数据以图表的形式加以分析。q 信息查询该模块主要实现对客户信息、联系人信息等各种信息的查询,同时可对国内的各大城市的区号及邮编进行查询。q 数据管理该模块主要实现各种数据的打印操作,主要包括:客户信封打印、客户信息打印、联系人信息打印及全国各省份的邮编信息的打印。q 系统管理访模块主要实现对操作员、操作员权限进行设置及修改的操作,主要包括操作员设置、密码修改、权限设置、退出4个部分。q 辅助工具该模块主要为用户提供一些辅助的工具,包括调用Word、调用Excel、发送邮件、计算器及工作业务备忘录。2.2 系统功能结构图图1 客户管理系统功能结构图3 系统设计3.1 设计目标本系统是针对中小型企业客户管理现状,通过网络实现对客户的管理,主要实现如下目标:q 对客户信息(客户基本信息、联系人信息、业务来往信息)进行全面管理。q 及时查看库存信息,并通过网站对入库、出库信息进行管理。q 强大的客户信息、联系人信息报表打印功能及客户信封打印功能。q 及时了解客户的反馈信息及投诉信息,并以图表形式对数据进行分析。q 实现各种信息查询功能。q 实现了直接通过网络拨打用户电话及发送E-mail。q 对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。q 操作员可以随时修改自己的口令。q 数据保密性强,为每个用户设置相应的权限级别。q 提供辅助工具,方便用户操作及使用。q 系统运行稳定、安全可靠。3.2 开发及运行环境硬件平台:q CPU:P41.8GHz;q 内存:256MB以上。软件平台:q 操作系统:Windows 2000;q 数据库:SQL Server 2000;q 开发工具包:JDK Version1.4.2;q JSP服务器:Tomcat;q 浏览器:IE5.0,推荐使用IE6.0;q 分辨率:最佳效果1024768。3.3 数据库设计本系统数据库采用SQL Server 2000数据库,系统数据库名称为db_Client。数据库db_Client中包含18张表。关于数据库中的数据表请参见附录B4 网站总体架构1 系统架构设计在编写代码之前,可以先把网站中可能用到的文件夹创建出来(例如:创建一个名为image的文件夹,用于保存网站中需要的图片),这样可以方便以后的开发工作,也可以规范网站的整体架构,我在开发客户管理系统时,首先设计了如图3所示的文件夹架构图。在开发时只需要将文件保存在相应的文件夹中就可以了,非常方便。2 网站首页的运行结果当管理员在进入客户管理系统后,首先进入客户管理系统的大厅,也就是客户管理系统的首页。客户管理系统首页包含基础信息维护、客户信息维护、客户服务、信息查询、数据管理、辅助工具以及系统管理的超链接。客户管理系统网站首页的运行结果如图4所示。231图4 网站首页运行结果网站框架说明如表1所示:表1 网站首页页面说明区域名称说明对应文件1网站导航主要展示网站的旗帜广告和站内导航条top.jsp2功能模块主要用于显示导航模块中的功能information.jsp3内容显示主要用于显示功能模块中的内容right.jsp整个网站利用到jsp中的一个框架,框架由名称分别为top、left和main的3个jsp页面组成的,然后利用html代码在index.jsp(和WEB-INF同级目录中)页面中组合起来。代码如下:/* index.jsp*/客户管理系统主页面 区域top所对应的jsp页面(top.jsp,在jsp文件夹)的代码如下:/* top.jsp*/ 客户管理系统 基础信息维护  客户信息维护  客户服务  信息查询  数据管理  辅助工具   区域left所对应的jsp页面(information.jsp,在jsp/information/information.jsp文件夹)的代码如下:/* information.jsp*/ 企业类型设置 企业性质设置 客户银行设置 企业资信设置 客户级别设置 客户满意程度设置 区域信息设置   区域main所对应的jsp页面(right.jsp,在jsp文件夹)的代码如下:/* right.jsp*/右页面           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文件夹)中主要存放的是常用的基本类,在这里不管任何一项功能都要调用相对应的类的方法。1Chinese.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; 2sqlCperties文件(sql语句的存放位置)/* sqlCperties*/#-基础信息维护-#-对区域信息表的操作(tb_Client_qyxx)-#-查询的操作 sql.qyxx.select=select * from tb_Client_qyxx #-插入的操作 sql.qyxx.insert=insert into tb_Client_qyxx values(?,?,?,?,?,?) 3SQLCode.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; /指向perties的位置 public void _load() String fileName = /com/tool/sqlCperties; /通过指定路径找到资源文件存放在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(); 4JDBConnction.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中标记。同样调用相应的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层文件夹)中,主要有两种类,一个是接口(interface)类,类名以Dao结尾,另一个是接口的实现类,类名以DaoImpl结尾,其中企业类型设置模块的代码如下:1接口类(以Dao为结尾的类名)/* CqylxDao.java*/package com.dao;import java.util.List;import com.domain.CqylxForm;public interface CqylxDao public List qylxSelect(); public void qylxDelete(CqylxForm qylx); public void qylxupdate(CqylxForm qylx); public CqylxForm qylxSelectOne(CqylxForm qylx); public void qylxInsert(CqylxForm qylx); public int qulxCount();2实现接口类(以DaoImpl为结尾的类名)/* CqylxDaoImpl.java*/package com.dao;import java.util.List;import java.util.ArrayList;import com.tool.JDBConnection;import com.tool.SQLCode;import java.sql.ResultSet;import java.sql.*;import com.domain.CqylxForm; /加载类/对表tb_Client_qylx的操作public class CqylxDaoImpl implements CqylxDao public List qylxSelect() /查询的操作 JDBConnection connection = new JDBConnection(); CqylxForm form = null; List list = new ArrayList(); / ArrayList类实现了List接口 String sql = SQLCode.getSQLCode(sql.qylx.select); try ResultSet rs = connection.executeQuery(sql); while (rs.next() form = new CqylxForm(); form.setQylx_id(rs.getString(1); form.setQylx_lxmc(rs.getString(2); form.setQylx_bz(rs.getString(3); list.add(form); catch (SQLException ex) connection.close(); return list; /删除操作 public void qylxDelete(CqylxForm qylx) JDBConnection connection = new JDBConnection(); String sql = SQLCode.getSQLCode(sql.qylx.delete); sql = connection.editSqlCode(sql, qylx.getQylx_id(); connection.executeUpdate(sql); connection.close();/修改操作 public void qylxupdate(CqylxForm qylx) JDBConnection connection = new JDBConnection();/利用对象connection调用JDBConnection类中方法 String sql = 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(); /以企业类型的编号进行查找 public CqylxForm qylxSelectOne(CqylxForm qylx) JDBConnection connection = new JDBConnection(); CqylxForm form = null; String sql = SQLCode.getSQLCode(sql.qylx.selectOne); sql = connection.editSqlCode(sql, qylx.getQylx_id(); try ResultSet rs = connection.executeQuery(sql); while (rs.next() form = new CqylxForm(); form.setQylx_id(rs.getString(1); form.setQylx_lxmc(rs.getString(2); form.setQylx_bz(rs.getString(3); catch (SQLException ex) connection.close(); return form; /添加操作 public void qylxInsert(CqylxForm qylx) JDBConnection connection = new JDBConnection(); String sql = 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,此数据用于企业类型编号存储,表现了编号的唯一性 public int qulxCount() int iCount = 0; JDBConnection connection = null; connection = new JDBConnection(); String sql = SQLCode.getSQLCode(sql.qylx.count); ResultSet rs = null; try rs = connection.executeQuery(sql); while

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论