摘要
【摘要】
随着市场体系的日益完善,我们已经进入了一个买方市场时代。选择空间扩大、购买渠道拓宽、消费心态和购买行为越发成熟,使客户再不会对某一企业或者产品盲目地保持绝对忠诚,如何不断改善客户关系,掌据更多的客户信息,提高客户满意度;如何在日益激烈的市场竞争中把握机会,占有更大的市场份额;如何建立高效业务流程,降低运营成本,获取更多的利润,这些已成为每个企业怕面临的首要问题。这种情况下,企业要在激烈的市场竞争中立于不败之地,就必须找一种全新的管理理念和管理手段,对其内部和外部资源进行有效的整合。新一代一ERP产品正在向客户端和供应端延伸,客户端的延伸是客户关系管理,而供应端的延伸则是跨企业供应链的同步管理。对于每个企业来说客户管理的完善程度将直接影响企业的经济效益。
【关键词】 客户关系管理系统、库存管理、报表管理
目录
引言
信息时代的今天,各企业商家所关心的不再局限于自身的产品质量、生产设备、员工的素质,更多的是关心自己的销售群体(客户群),关心他们的想法、需求、购卖目的。
众所周知,顾客就是我们的上帝,我们只有满足了上帝的需求,上帝才能给我们带来一切。一个企业要生存、要发展,就是要不断的满足客户的需求,无论我们做出什么样的决策,最终都是为了这个的目。每个领域都有自身生存法则,但无论这个法则如何变化,为客户服务的宗旨是不会变的。作为企业,我们只有不断地挖掘新客户,维护好和老客户的关系,占领市场客户群体的绝大多数份额,才能在整个领域取得一席之地。海尔总裁张瑞敏指出:“客户资源决定企业核心竞争力”,上个世纪80年代是物品短缺的时代,而现在,信息时代是客户短缺的时代。企业发展所需的各种资源(包括人力、物力、生产力)都是可以创造的,但每个领域中的客户资源确是有限的,所以通过创新(产品的创新、企业管理的创新、服务的创新)来抢占有限的客户资源、维护好企业和客户之间的关系、了解客户的需求动向,成为企业生存发展面临的重大问题。
1 系统分析
1.1 需求分析
通过调查研究,要求系统满足有以下功能;
q由于操作人员的计算机知识普遍较差,要求有良好的人机界面。
q方便的数据选择查询,支持模糊查询功能。
q管理客户的详细信息:包括客户的基本信息、联系人信息、和客户签写的合同信息。
q记录产品出库、入库的详细信息。
q为更多的了解客户的需求,设计了服务模块,用以记录客户的反馈信息,并对反馈信息进行管理。
q和客户联系人之间通过邮件(e-mail)进行联系,对联系人邮件地址进行管理。
q提供信息数据导出Excel报表的功能,提供报表的打印功能。
q对用户信息进行管理,并为用户设置管理权限。
q数据计算自动完成,尽量减少人工干预。
q修改当前管理员密码的功能。
q系统退出。
1.2 可行性分析
q经济性
通过计算机网络对客户信息进行管理,使企业对自身拥有的客户有了一个更为深该的了解。不仅能全面的统计客户的购买数量,及时的了解客户的动态信息,还可以根据计算机记录的数据信息,不断的调整企业的生产发展动向。
q技术性
系统中设置了email管理模块,此模块大大的方便了企业和客户联系人之间的沟通。设置导入Excel功能、Web打印功能,方便用户报表打印。
2 总体设计
2.1 项目规划
客户关系管理系统是一个典型的数据库开发应用程序,由客户管理模块、库存管理模块、服务管理模块、报表管理模块、email管理模块、用户管理模块组成,规划系统功能模块如下:
q客户管理模块
该模块主要功能是对客户信息、客户联系人信息、合同信息进行添加、删除、查询等操作。
q库存管理模块
该模块的主要功能是管理入库、出库信息、产品信息进行管理,其中包括对库存信息、产品信息进行添加、删除、查询等操作。
q服务管理模块
该模块主要功能是对客户反馈信息进行添加、删除、查询等操作。
q报表管理模块
该模块主要通过查询条件,对各种信息进行查询,并将得到的结果导出Excul表、进行打印报表等操作(其中信息包括:客户信息、联系人信息、反馈客户信息、库存信息)。
qemail管理模块
该模块主要管理客户联系人email地址信息,对企业客户之间的email文件进行管理,向客户发送邮件。
q用户管理
该模块主要管理用户信息的添加、删除等操作,并设置用户的使用权限。
2.2 系统功能结构图
图1 数据表树型结构图
3 系统设计
3.1 设计目标
本系统是针对中小型企业通过网络实现对客户的管理而设计的,主要实现如下目标:
q对客户信息(客户基本信息、联系人信息、合同信息)进行全面管理。
q及时查看库存信息,并通过网站对入库、出库信息进行管理。
q强大的客户信息、联系人信息报表导出、打印功能
q及时了解客户的反馈信息,并对其进行管理。
q实现各种信息的选择查询、模糊查询功能等。
q实现了和客户通过网络在线沟通的功能,并对客户联系人的email地址进行管理。
q管理员可以添加操作员信息、设置操作员的权限。
q对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。
q要求系统的数据保密性强,通过为每个用户设置使用权限来实现。
q系统运行稳定、安全可靠。
q键盘操作,快速响应。
3.2 开发及运行环境
硬件平台:
qCPU:P41。8GHz;
q内存:256MB以上。
软件平台:
q操作系统:Windows xp/ Windows 2000/ Windows 2003;
q数据库:SQL Server 2000;
q浏览器:IE5.0,推荐使用IE6.0;
qWeb服务器:IIS5.0;
q分辨率:最佳效果1024*768。
3.3 数据库设计
本系统数据库采用SQLServer2000数据库,系统数据库名称为db_System。数据库db_ System中包含8张表。关于数据库中的数据表请参见附录B。
4 客户管理模块设计
客户管理模块的主要功能是对客户信息进行管理,主要包括客户信息管理、联系人信息管理和合同信息管理3个部分。
4.1 客户信息管理设计
客户信息管理设计主要包括对客户信息进行显示/查询、添加、修改和删除4个部分的功能。用户可以通过功能导航进入客户信息管理页面,页面设计效果如图3所示。
图3 客户信息管理页面的设计效果
在客户信息管理页面中,用户可以在查询区域输入查询条件,并选择查询方式,查找相关的客户信息;也可以单击客户信息,在展示区会显示此客户的详细信息,也可对客户信息进行修改;在选中每条信息前面的复选框,单击【删除】按钮,选中的客户信息将被删除。
1.客户信息显示/查询
用户可以在客户信息管理页面中的查询部分,输入一定的查询条件进行客户信息的查询。
当用户在查询部分输入条件后,并单击【查询】按钮,用户添加的查询条件将被提交给本页,本页将根据用户提交的表单信息对数据库进行检索,并将结果集通过操作区输出到浏览器中。
客户信息查询页面涉及的HTML表单元素如表1所示。
表1 客户信息查询页面涉及的HTML表单元素
名称 | 类型 | 含义 | 重要属性 |
form1 | Form | 表单 | method="post" action="" |
post | hidden | 判断表单是否提交 | value="true" |
tiao | select | 查询类型 | <option value="模糊查询" <%if request("tiao")="模糊查询" then%>selected<%end if%>>模糊查询</option> <option value="精确查询" <%if request("tiao")="精确查询" then%>selected<%end if%>>精确查询</option> |
sel | select | 关键字类别 | <option value="ClientName" <%if request("sel")="ClientName" then%>selected<%end if%>>客户名称</option> …… <option value="ClientHabitude" <%if request("sel")="ClientHabitude" then%>selected<%end if%>>企业性质</option> |
search | text | 关键字 | <input name="search" type="text" id="search" value="<%=request("search")%>"> |
Submit | submit | 查询按钮 | class="input" value=" 查 询 " |
在表单提交之后,在本页将数据进行处理。程序代码如下:
<%
if request("post")<>"" then
if request("tiao")="模糊查询" then ‘条件输入为模糊查询时获得相应的记录集
set rs=server.CreateObject("adodb.recordset")
sql="select * from tb_Client where "&request("sel")&" like '%"&request("search")&"%' order by id desc"
rs.open sql,conn,1,1
else ‘条件输入为精确查询时获得相应的记录集
set rs=server.CreateObject("adodb.recordset")
sql="select * from tb_Client where "&request("sel")&"='"&request("search")&"' order by id desc"
rs.open sql,conn,1,1
end if
else ‘默认状态下获得相应的记录集
set rs=server.CreateObject("adodb.recordset")
sql="select * from tb_Client order by id desc"
rs.open sql,conn,1,1
end if
'实现分页
if not rs.eof then
tol=rs.recordcount '总记录数
rs.pagesize=15 '获取每页显示的记录数
maxpage=rs.pagecount
requestpage=clng(request("p")) '获取当前页
if requestpage="" or requestpage=0 then '当接收页码的值为空或者0时使其等于1
requestpage=1
end if
if requestpage>maxpage then '在接收页码的值大于最大页码时,使其等于最大页码
requestpage=maxpage
end if
if requestpage<>1 then '向上或向下移动相应的记录
rs.move (requestpage-1)*rs.pagesize
end if
for i=1 to rs.pagesize and not rs.eof '利用循环输出数据
if i mod 2=1 then
bg="#FFFFFF"
else
bg="#efefef"
end if
%>
<tr align="center" bgcolor=<%=bg%> style="cursor: hand" onClick="window.parent.frames('bo').window.location = 'KeHu_ed.asp?id=<%=rs("id")%>'"onMouseOver="HLItem(this)" onMouseOut="Re(this)">
<td height="22"><%=rs("ClientName")%></td>
<td><%=rs("ClientCountry")%></td>
<td><%=rs("ClientCity")%></td>
<td><%=rs("ClientTel")%></td>
<td><%=rs("ClientEmail")%></td>
</tr>
<%
rs.movenext
if rs.eof then exit for ’ 如果记录集为空那么跳出循环
next
else
response.Write("没有客户信息,请<a href='KeHu_add.asp' target='bo'>添加</a>")
end if%>
当鼠标在某条记录上悬停时,其记录所在行的背景颜色会发生改变,此功能用到的js代码如下:
<script language="javascript">
function HLItem(obj)//鼠标经过
{
obj.oldClassName=obj.className;
obj.className="List";
}
function Re(obj)//鼠标移开
{
obj.className=obj.oldClassName
}
</script>
其调用的代码如下:
<tr align="center" bgcolor=<%=bg%> style="cursor:hand" onClick="window.parent.frames('bo').window.location = 'KeHu_ed.asp?id=<%=rs("id")%>'" onMouseOver="HLItem(this)" onMouseOut="Re(this)">
客户信息显示/查询页面的运行结果如图4所示:
图4 客户信息查询页面的运行结果
2.客户信息添加
客户信息添加的主要功能是用于用户添加客户信息。在查询页面中单击【添加】按钮,在展示区中会显示添加页面,其设计效果如图5所示。
如图5 客户信息添加页面设计效果
当单击添加页面中的【添加】按钮时,调用js编写的自定义函数(checks()),通过函数验证填写的数据是否正确,该函数的代码如下:
<script language="javascript">
function checks()
{
if(form1.ClientName.value=="")
{
alert("公司名称不能为空");
return false;
}
……//中间过程不详细介绍,因为实现方法类似
else if(form1.ClientCyc.value=="")
{
alert("需求周期不能为空");
return false;
}
}
</script>
表单提交之后,添加的数据将被提交到本页进行处理,本页数据处理的程序代码如下:
<%
if request("post")<>"" then
set rs=server.CreateObject("adodb.recordset")
sql="select * from tb_Client"
rs.open sql,conn,1,3
rs.addnew
rs("ClientName")=request("ClientName") ‘添加公司名称
rs("ClientAddress")=request("ClientAddress") ‘公司地址
rs("ClientTel")=request("ClientTel") ‘公司电话
rs("ClientFax")=request("ClientFax") ‘公司传真
rs("ClientNumber")=request("ClientNumber") ‘邮政编码
rs("ClientPage")=request("ClientPage") ‘公司网址
rs("ClientEmail")=request("ClientEmail") ‘公司email
rs("ClientCountry")=request("ClientCountry") ‘所属国家/地区
rs("ClientHabitude")=request("ClientHabitude") ‘公司性质
rs("ClientSize")=request("ClientSize") ‘公司规模
rs("ClientCity")=request("ClientCity") ‘所属城市
rs("ClientPay")=request("ClientPay") ‘结款方式
rs("ClientCredit")=request("ClientCredit") ‘结款信用
rs("ClientList")=request("ClientList") ‘最高订单‘
rs("ClientYear")=request("ClientYear") ‘年度订单
rs("ClientCyc")=request("ClientCyc") ‘需求周期
rs("SetTime")=now() ‘创建时间
rs("EditTime")=now() ‘修改时间
rs("SetName")=session("admin_name") ‘创建人
rs.update
rs.close
conn.close
response.Write("<script language=javascript>alert('客户信息添加成功')</script>")‘弹出成功对话框
end if%>
3.客户信息修改
在显示客户详细信息页面,用户可以浏览、修改其客户的详细信息。进行客户详细信息浏览和修改的页面设计效果如图6所示:
图6 客户信息修改页面设计效果
在客户信息修改页面,用户可以浏览客户详细的信息,也可以修改客户的信息(当用户有修改的权限时,那么用户可以进行修改,至于用户权限的实现,将在后面的章节中进行讲解)。当用户单击【修改】按钮后,修改的数据将被提交到本页进行处理。数据处理的代码如下:
<%
if request("post")<>"" and (rsr("Client")="可写" or rsr("chaoji")="是") then
set rs=server.CreateObject("adodb.recordset")
sql="select * from tb_Client where id="&request("id")
rs.open sql,conn,1,3
rs("ClientName")=request("ClientName") ‘添加公司名称
rs("ClientAddress")=request("ClientAddress") ‘公司地址
rs("ClientTel")=request("ClientTel") ‘公司电话
rs("ClientFax")=request("ClientFax") ‘公司传真
rs("ClientNumber")=request("ClientNumber") ‘邮政编码
rs("ClientPage")=request("ClientPage") ‘公司网址
rs("ClientEmail")=request("ClientEmail") ‘公司email
rs("ClientCountry")=request("ClientCountry") ‘所属国家/地区
rs("ClientHabitude")=request("ClientHabitude") ‘公司性质
rs("ClientSize")=request("ClientSize") ‘公司规模
rs("ClientCity")=request("ClientCity") ‘所属城市
rs("ClientPay")=request("ClientPay") ‘结款方式
rs("ClientCredit")=request("ClientCredit") ‘结款信用
rs("ClientList")=request("ClientList") ‘最高订单‘
rs("ClientYear")=request("ClientYear") ‘年度订单
rs("ClientCyc")=request("ClientCyc") ‘需求周期
rs("EditTime")=now() ‘修改时间
rs("SetName")=session("admin_name") ‘创建人
rs.update
rs.close
response.Write("<script language=javascript>alert('客户信息修改成功')</script>")‘弹出成功对话框
end if
%>
4.客户信息删除
在客户信息管理页面,用户可以点选任意一条客户信息前面的复选框,然后单击页面下方的【删除】按钮,被选择的客户信息将被删除。
客户信息删除主要是根据传递的参数(本例中的参数为客户信息的id),将数据库中对应id的客户信息和其他和客户相关的信息全部删除,程序代码如下:
<%
call client '验证是否有删除客户信息的权限
if request("del")<>"" then
kid=Split(Request("del"),",") ‘分解字符串成数组
for i=0 to ubound(kid)
sqld="delete from tb_Client where id="&clng(kid(i))'删除客户信息
conn.execute(sqld)
sqll="delete from tb_Linkman where LinkmanClient="&clng(kid(i))'删除客户的联系人信息
conn.execute(sqll)
sqlp="delete from tb_Pact where PactClient="&clng(kid(i))'删除客户的合同信息
conn.execute(sqlp)
sqlp="delete from tb_Feedback where FeedbackClient="&clng(kid(i))'删除客户反馈信息
conn.execute(sqlp)
sqlp="delete from tb_Product where ProductProvider="&clng(kid(i))'删除客户的产品信息
conn.execute(sqlp)
next
if request("p")="" then '返回用户操作页
response.Redirect("KeHu_KeHu.asp")
else
response.Redirect("KeHu_KeHu.asp?p="&request("p"))
end if
else
response.Write("<script language=javascript>alert('请选择要删除的信息');location='javascript:history.go(-1)'</script>")
end if%>
4.2 联系人信息管理设计
联系人信息管理的主要功能包括显示/查询、添加、修改和删除联系人信息4个部分。用户可以通过功能导航进入联系人信息管理页面,页面设计效果如图7所示。
图7 联系人信息管理页面设计效果
1.联系人信息显示/查询
用户可以在联系人信息管理页面中的查询部分,输入一定的查询条件进行联系人信息的查询。
用户在查询部分输入条件后,单击【查询】按钮,用户添加的查询条件将被提交给本页,本页则将根据用户提交的表单信息对数据库进行检索,并将结果集通过操作区输出到浏览器中。
查询代码如下:
<%
if request("post")<>"" then
if request("tiao")="模糊查询" then’ 联系人模糊查询
set rs=server.CreateObject("adodb.recordset")
sql="select * from tb_Linkman where "&request("sel")&" like '%"&request("search")&"%' order by id desc"
rs.open sql,conn,1,1
else ‘联系人精确查询
set rs=server.CreateObject("adodb.recordset")
sql="select * from tb_Linkman where "&request("sel")&"='"&request("search")&"' order by id desc"
rs.open sql,conn,1,1
end if
else’ 默认状态下显示联系人列表
set rs=server.CreateObject("adodb.recordset")
sql="select * from tb_Linkman order by id desc"
rs.open sql,conn,1,1
end if
%>
分页代码请参考4.1节中介绍的客户信息显示/查询中的相关代码。
也可在查看客户的详细信息中,单击“联系人信息”,就会产生此客户的联系人列表,传参代码如下:
<a href="KeHu_Linkman.asp?post=true&sel=LinkmanClient&search=<%=rsx("id")%>&dd=dd">联系人信息</a>
2.联系人信息添加
联系人信息添加的主要功能是添加客户的联系人信息。
在查询页面中单击【添加】按钮,在展示区中会显示添加页面。在添写表单选择所属客户时,所属客户是在数据库中直接读取出来的。其代码如下:
<%
set rsc=server.CreateObject("adodb.recordset")
sqlc="select * from tb_Client order by id desc"
rsc.open sqlc,conn,1,1
if not rsc.eof then
%>
<select name="LinkmanClient" id="LinkmanClient">
<%
for i=1 to rsc.recordcount and not rsc.eof
%>
<option value="<%=rsc("id")%>"><%=rsc("ClientName")%></option>
<%
rsc.movenext
next%>
</select>
<%
else
response.Write("没有客户信息,请<a href='KeHu_add.asp' target='bo'>添加</a>")
end if%>
添加联系人页面的运行结果如图8所示。
图8 添加联系人的页面运行结果
也可在客户的详细信息中单击【新建】按钮,在此添加用户不用选择所属客户,直接就会生成所属客户,主要是根据传递的参数(本例中的参数为客户信息的id),传参代码如下:
<a href="KeHu_Linkman_addy.asp?id=<%=rsx("id")%>"><span class="style2">新建</span></a>
其显示代码如下:
<%
set rsc=server.CreateObject("adodb.recordset")
sqlc="select * from tb_Client where id="&request("id")&" order by id desc"
rsc.open sqlc,conn,1,1
response.Write(rsc("ClientName"))
%>
3.联系人信息修改
联系人信息修改的主要功能是用户修改联系人信息,方便用户和客户之间的联系和沟通。
在显示联系人详细信息页面,用户可以更改其联系人的信息。联系人信息修改页面运行结果如图9所示。
图9 联系人信息修改页面运行结果
4.联系人信息删除
联系人信息删除的主要功能是删除联系人的信息。,其程序代码如下:
<%
kid=Split(Request("del"),",") ‘分解字符串成数组
response.Write("正在删除...")
for i=0 to ubound(kid)
sqld="delete from tb_Linkman where id="&clng(kid(i)) ‘删除指定的记录
conn.execute(sqld)
next
%>
4.3 合同信息管理
合同信息管理设计主要包括显示/查询、添加、修改和删除合同信息4个部分。用户可以通过功能导航进入合同信息管理页面,页面设计效果如图10所示。
图10 合同信息管理页面的运行结果
图11 合同信息显示/查询页面运行结果
图12 合同信息添加页面运行结果
图13 合同信息修改页面运行结果
图20 服务管理页面的设计效果
图21 反馈信息添加页面的设计效果
图23 报表管理页面设计效果
图24 报表下载页面的运行结果