- 503.50 KB
- 2022-05-17 10:55:10 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
本科毕业论文(设计)客户关系管理系统学院:信息学院专业:计算机科学与技术班级:学号:学生姓名:指导教师:–31–
摘要【摘要】随着市场体系的日益完善,我们已经进入了一个买方市场时代。选择空间扩大、购买渠道拓宽、消费心态和购买行为越发成熟,使客户再不会对某一企业或者产品盲目地保持绝对忠诚,如何不断改善客户关系,掌据更多的客户信息,提高客户满意度;如何在日益激烈的市场竞争中把握机会,占有更大的市场份额;如何建立高效业务流程,降低运营成本,获取更多的利润,这些已成为每个企业怕面临的首要问题。这种情况下,企业要在激烈的市场竞争中立于不败之地,就必须找一种全新的管理理念和管理手段,对其内部和外部资源进行有效的整合。新一代一ERP产品正在向客户端和供应端延伸,客户端的延伸是客户关系管理,而供应端的延伸则是跨企业供应链的同步管理。对于每个企业来说客户管理的完善程度将直接影响企业的经济效益。【关键词】客户关系管理系统、库存管理、报表管理–31–
目录摘要10引言11系统分析21.1需求分析21.2可行性分析22总体设计22.1项目规划22.2系统功能结构图33系统设计33.1设计目标33.2开发及运行环境43.3数据库设计44客户管理模块设计54.1客户信息管理设计54.2联系人信息管理设计114.3合同信息管理145服务管理255.1反馈信息添加265.2反馈信息修改276报表管理96.1客户报表模块6.2联系人报表模块附录A参考文献附录B数据表–31–
0引言信息时代的今天,各企业商家所关心的不再局限于自身的产品质量、生产设备、员工的素质,更多的是关心自己的销售群体(客户群),关心他们的想法、需求、购卖目的。众所周知,顾客就是我们的上帝,我们只有满足了上帝的需求,上帝才能给我们带来一切。一个企业要生存、要发展,就是要不断的满足客户的需求,无论我们做出什么样的决策,最终都是为了这个的目。每个领域都有自身生存法则,但无论这个法则如何变化,为客户服务的宗旨是不会变的。作为企业,我们只有不断地挖掘新客户,维护好和老客户的关系,占领市场客户群体的绝大多数份额,才能在整个领域取得一席之地。海尔总裁张瑞敏指出:“客户资源决定企业核心竞争力”,上个世纪80年代是物品短缺的时代,而现在,信息时代是客户短缺的时代。企业发展所需的各种资源(包括人力、物力、生产力)都是可以创造的,但每个领域中的客户资源确是有限的,所以通过创新(产品的创新、企业管理的创新、服务的创新)来抢占有限的客户资源、维护好企业和客户之间的关系、了解客户的需求动向,成为企业生存发展面临的重大问题。–31–
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报表管理模块–31–
该模块主要通过查询条件,对各种信息进行查询,并将得到的结果导出Excul表、进行打印报表等操作(其中信息包括:客户信息、联系人信息、反馈客户信息、库存信息)。qemail管理模块该模块主要管理客户联系人email地址信息,对企业客户之间的email文件进行管理,向客户发送邮件。q用户管理该模块主要管理用户信息的添加、删除等操作,并设置用户的使用权限。2.2系统功能结构图图1数据表树型结构图3系统设计3.1设计目标本系统是针对中小型企业通过网络实现对客户的管理而设计的,主要实现如下目标:q对客户信息(客户基本信息、联系人信息、合同信息)进行全面管理。q及时查看库存信息,并通过网站对入库、出库信息进行管理。q强大的客户信息、联系人信息报表导出、打印功能q及时了解客户的反馈信息,并对其进行管理。q实现各种信息的选择查询、模糊查询功能等。q实现了和客户通过网络在线沟通的功能,并对客户联系人的email地址进行管理。q管理员可以添加操作员信息、设置操作员的权限。q对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。q要求系统的数据保密性强,通过为每个用户设置使用权限来实现。q系统运行稳定、安全可靠。q键盘操作,快速响应。–31–
3.2开发及运行环境硬件平台:qCPU:P41。8GHz;q内存:256MB以上。软件平台:q操作系统:Windowsxp/Windows2000/Windows2003;q数据库:SQLServer2000;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所示。–31–
表1客户信息查询页面涉及的HTML表单元素名称类型含义重要属性form1Form表单method="post"action=""posthidden判断表单是否提交value="true"tiaoselect查询类型selected<%endif%>>模糊查询selected<%endif%>>精确查询selselect关键字类别selected<%endif%>>客户名称……selected<%endif%>>企业性质searchtext关键字">Submitsubmit查询按钮class="input"value=" 查 询 "在表单提交之后,在本页将数据进行处理。程序代码如下:<%ifrequest("post")<>""thenifrequest("tiao")="模糊查询"then‘条件输入为模糊查询时获得相应的记录集setrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Clientwhere"&request("sel")&"like"%"&request("search")&"%"orderbyiddesc"rs.opensql,conn,1,1else‘条件输入为精确查询时获得相应的记录集setrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Clientwhere"&request("sel")&"=""&request("search")&""orderbyiddesc"rs.opensql,conn,1,1endifelse‘默认状态下获得相应的记录集setrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Clientorderbyiddesc"rs.opensql,conn,1,1–31–
endif"实现分页ifnotrs.eofthentol=rs.recordcount"总记录数rs.pagesize=15"获取每页显示的记录数maxpage=rs.pagecountrequestpage=clng(request("p"))"获取当前页ifrequestpage=""orrequestpage=0then"当接收页码的值为空或者0时使其等于1requestpage=1endififrequestpage>maxpagethen"在接收页码的值大于最大页码时,使其等于最大页码requestpage=maxpageendififrequestpage<>1then"向上或向下移动相应的记录rs.move(requestpage-1)*rs.pagesizeendiffori=1tors.pagesizeandnotrs.eof"利用循环输出数据ifimod2=1thenbg="#FFFFFF"elsebg="#efefef"endif%>style="cursor:hand"onClick="window.parent.frames("bo").window.location="KeHu_ed.asp?id=<%=rs("id")%>""onMouseOver="HLItem(this)"onMouseOut="Re(this)"><%=rs("ClientName")%><%=rs("ClientCountry")%> <%=rs("ClientCity")%> <%=rs("ClientTel")%> <%=rs("ClientEmail")%> <%rs.movenextifrs.eofthenexitfor’如果记录集为空那么跳出循环nextelseresponse.Write("没有客户信息,请添加")endif%>当鼠标在某条记录上悬停时,其记录所在行的背景颜色会发生改变,此功能用到的js代码如下:–31–
functionHLItem(obj)//鼠标经过{obj.oldClassName=obj.className;obj.className="List";}functionRe(obj)//鼠标移开{obj.className=obj.oldClassName}其调用的代码如下: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()),通过函数验证填写的数据是否正确,该函数的代码如下:–31–
functionchecks(){if(form1.ClientName.value==""){alert("公司名称不能为空");returnfalse;}……//中间过程不详细介绍,因为实现方法类似elseif(form1.ClientCyc.value==""){alert("需求周期不能为空");returnfalse;}}表单提交之后,添加的数据将被提交到本页进行处理,本页数据处理的程序代码如下:<%ifrequest("post")<>""thensetrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Client"rs.opensql,conn,1,3rs.addnewrs("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")‘公司emailrs("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")‘创建人–31–
rs.updaters.closeconn.closeresponse.Write("alert("客户信息添加成功")")‘弹出成功对话框endif%>3.客户信息修改在显示客户详细信息页面,用户可以浏览、修改其客户的详细信息。进行客户详细信息浏览和修改的页面设计效果如图6所示:图6客户信息修改页面设计效果在客户信息修改页面,用户可以浏览客户详细的信息,也可以修改客户的信息(当用户有修改的权限时,那么用户可以进行修改,至于用户权限的实现,将在后面的章节中进行讲解)。当用户单击【修改】按钮后,修改的数据将被提交到本页进行处理。数据处理的代码如下:<%ifrequest("post")<>""and(rsr("Client")="可写"orrsr("chaoji")="是")thensetrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Clientwhereid="&request("id")rs.opensql,conn,1,3rs("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")‘公司emailrs("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")‘年度订单–31–
rs("ClientCyc")=request("ClientCyc")‘需求周期rs("EditTime")=now()‘修改时间rs("SetName")=session("admin_name")‘创建人rs.updaters.closeresponse.Write("alert("客户信息修改成功")")‘弹出成功对话框endif%>4.客户信息删除在客户信息管理页面,用户可以点选任意一条客户信息前面的复选框,然后单击页面下方的【删除】按钮,被选择的客户信息将被删除。客户信息删除主要是根据传递的参数(本例中的参数为客户信息的id),将数据库中对应id的客户信息和其他和客户相关的信息全部删除,程序代码如下:<%callclient"验证是否有删除客户信息的权限ifrequest("del")<>""thenkid=Split(Request("del"),",")‘分解字符串成数组fori=0toubound(kid)sqld="deletefromtb_Clientwhereid="&clng(kid(i))"删除客户信息conn.execute(sqld)sqll="deletefromtb_LinkmanwhereLinkmanClient="&clng(kid(i))"删除客户的联系人信息conn.execute(sqll)sqlp="deletefromtb_PactwherePactClient="&clng(kid(i))"删除客户的合同信息conn.execute(sqlp)sqlp="deletefromtb_FeedbackwhereFeedbackClient="&clng(kid(i))"删除客户反馈信息conn.execute(sqlp)sqlp="deletefromtb_ProductwhereProductProvider="&clng(kid(i))"删除客户的产品信息conn.execute(sqlp)nextifrequest("p")=""then"返回用户操作页response.Redirect("KeHu_KeHu.asp")elseresponse.Redirect("KeHu_KeHu.asp?p="&request("p"))endifelseresponse.Write("alert("请选择要删除的信息");location="javascript:history.go(-1)"")endif%>4.2联系人信息管理设计–31–
联系人信息管理的主要功能包括显示/查询、添加、修改和删除联系人信息4个部分。用户可以通过功能导航进入联系人信息管理页面,页面设计效果如图7所示。图7联系人信息管理页面设计效果1.联系人信息显示/查询用户可以在联系人信息管理页面中的查询部分,输入一定的查询条件进行联系人信息的查询。用户在查询部分输入条件后,单击【查询】按钮,用户添加的查询条件将被提交给本页,本页则将根据用户提交的表单信息对数据库进行检索,并将结果集通过操作区输出到浏览器中。查询代码如下:<%ifrequest("post")<>""thenifrequest("tiao")="模糊查询"then’联系人模糊查询setrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Linkmanwhere"&request("sel")&"like"%"&request("search")&"%"orderbyiddesc"rs.opensql,conn,1,1else‘联系人精确查询setrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Linkmanwhere"&request("sel")&"=""&request("search")&""orderbyiddesc"rs.opensql,conn,1,1endifelse’默认状态下显示联系人列表setrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Linkmanorderbyiddesc"rs.opensql,conn,1,1endif%>分页代码请参考4.1节中介绍的客户信息显示/查询中的相关代码。也可在查看客户的详细信息中,单击“联系人信息”,就会产生此客户的联系人列表,传参代码如下:&dd=dd">联系人信息2.联系人信息添加联系人信息添加的主要功能是添加客户的联系人信息。在查询页面中单击【添加】按钮,在展示区中会显示添加页面。在添写表单选择所属客户时,所属客户是在数据库中直接读取出来的。其代码如下:–31–
<%setrsc=server.CreateObject("adodb.recordset")sqlc="select*fromtb_Clientorderbyiddesc"rsc.opensqlc,conn,1,1ifnotrsc.eofthen%><%fori=1torsc.recordcountandnotrsc.eof%>"><%=rsc("ClientName")%><%rsc.movenextnext%><%elseresponse.Write("没有客户信息,请添加")endif%>添加联系人页面的运行结果如图8所示。图8添加联系人的页面运行结果也可在客户的详细信息中单击【新建】按钮,在此添加用户不用选择所属客户,直接就会生成所属客户,主要是根据传递的参数(本例中的参数为客户信息的id),传参代码如下:">新建其显示代码如下:<%setrsc=server.CreateObject("adodb.recordset")sqlc="select*fromtb_Clientwhereid="&request("id")&"orderbyiddesc"rsc.opensqlc,conn,1,1response.Write(rsc("ClientName"))%>3.联系人信息修改联系人信息修改的主要功能是用户修改联系人信息,方便用户和客户之间的联系和沟通。–31–
在显示联系人详细信息页面,用户可以更改其联系人的信息。联系人信息修改页面运行结果如图9所示。图9联系人信息修改页面运行结果4.联系人信息删除联系人信息删除的主要功能是删除联系人的信息。,其程序代码如下:<%kid=Split(Request("del"),",")‘分解字符串成数组response.Write("正在删除...")fori=0toubound(kid)sqld="deletefromtb_Linkmanwhereid="&clng(kid(i))‘删除指定的记录conn.execute(sqld)next%>4.3合同信息管理合同信息管理设计主要包括显示/查询、添加、修改和删除合同信息4个部分。用户可以通过功能导航进入合同信息管理页面,页面设计效果如图10所示。图10合同信息管理页面的运行结果1.合同信息显示/查询用户可以在合同信息管理页面中的查询部分,输入一定的查询条件,进行合同信息的查询。用户在查询部分输入查询条件后,单击【查询】按钮,用户所添加的查询条件将被提交给本页,本页将根据用户提交的表单信息对数据库进行检索,并将结果集通过操作区输出到浏览器中。合同信息查询程序代码如下:<%ifrequest("post")<>""thenifrequest("tiao")="模糊查询"then‘模糊查询合同信息setrs=server.CreateObject("adodb.recordset")–31–
sql="select*fromtb_Pactwhere"&request("sel")&"like"%"&request("search")&"%"orderbyiddesc"rs.opensql,conn,1,1else’精确查询合同信息setrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Pactwhere"&request("sel")&"=""&request("search")&""orderbyiddesc"rs.opensql,conn,1,1endifelse’默认状态下显示的合同信息setrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Pactorderbyiddesc"rs.opensql,conn,1,1endif%>合同信息显示/查询页面运行结果如图11所示。图11合同信息显示/查询页面运行结果也可在查看客户的详细信息中,单击“合同信息”,就会产生此客户的合同列表,传参代码如下:&dd=dd">合同信息2.合同信息添加合同信息添加的主要功能是用户添加客户的合同信息。在查询页面中单击【添加】按钮,在展示区中会显示添加页面,其运行结果如图17(上)所示;也可在客户的详细信息页面单击“新建”,在展示区中会显示添加页面,然后进行合同信息添加。合同信息添加页面的运行结果如图12(下)所示。–31–
图12合同信息添加页面运行结果3.合同信息修改合同信息修改的主要功能是用户修改合同信息。在显示合同详细信息页面,用户可以更改其合同的信息。合同信息修改页面运行结果如图13所示。图13合同信息修改页面运行结果4.合同信息的删除合同信息删除的主要功能是删除合同信息,其代码如下:<%kid=Split(Request("del"),",")response.Write("正在删除...")fori=0toubound(kid)sqld="deletefromtb_Pactwhereid="&clng(kid(i))conn.execute(sqld)next%>–31–
5服务管理服务管理设计的主要功能包括反馈信息的显示/查询、添加、修改和删除4个部分。用户可以通过功能导航进入服务管理页面,页面设计效果如图20所示。图20服务管理页面的设计效果5.1反馈信息添加反馈信息添加的主要功能是用户添加客户的反馈信息。在查询页面中单击【添加】按钮,在展示区中会显示添加页面。反馈信息添加页面的设计效果如图21所示。图21反馈信息添加页面的设计效果反馈信息添加页面涉及的HTML表单元素如表3所示。表3反馈信息信息添加页面涉及的HTML表单元素名称类型含义重要属性form1Form表单method="post"action=""posthidden判断表单是否提交value="true"FeedbackTitletext反馈主题class="in"size="30"FeedbackFulfillradio是否完成value="未完成"value="已完成"yearselect年"><%=i%>monthselect月"><%=i%>dayselect日"><%=i%>FeedbackClientselect相关客户">–31–
<%=rsc("ClientName")%>FeedbackContenttextarea详细内容cols="88"rows="4"class="table"FeedbackResulttextarea处理结果cols="88"rows="4"class="table"Submitselect添加按钮class="input"value=" 添 加 "onClick="returnchecks()"表单提交之后,添加的数据将被提交到本页进行处理。数据处理的程序代码如下:<%callfeedbackifrequest("post")<>""thensetrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Feedback"rs.opensql,conn,1,3rs.addnew"主要用于添加客户反馈信息的数据rs("FeedbackTitle")=request("FeedbackTitle")rs("FeedbackDate")=request("year")&"-"&request("month")&"-"&request("day")rs("FeedbackClient")=request("FeedbackClient")rs("FeedbackContent")=request("FeedbackContent")rs("FeedbackResult")=request("FeedbackResult")rs("FeedbackFulfill")=request("FeedbackFulfill")rs("SetTime")=now()rs("SetName")=session("admin_name")rs.updaters.closeresponse.Write("alert("反馈信息添加成功")")endif%>5.2反馈信息修改因为反馈信息是客户的反馈意见所以不得随意修改,用户只可以修改“处理结果”和“服务完成”两项信息。当服务完成选项,选中“已完成”时,那么任何信息都不可以修改,也就是说只有在服务“未完成”的情况下才能修改“处理结果”。反馈信息页面设计效果如图22所示。图22反馈信息页面设计效果–31–
反馈信息修改页面涉及的HTML表单元素如表4所示。表4反馈信息信息修改页面涉及的HTML表单元素名称类型含义重要属性form1Form表单method="post"action=""posthidden判断表单是否提交value="true"FeedbackTitletext反馈主题value="<%=rsx("FeedbackTitle")%>"size="30"readonly="true"class="in"FeedbackFulfillradio是否完成value="未完成"<%ifrsx("FeedbackFulfill")="未完成"then%>checked<%endif%>value="已完成"<%ifrsx("FeedbackFulfill")="已完成"then%>checked<%endif%>FeedbackDatetext年value="<%=rsx("FeedbackDate")%>"size="30"readonly="true"class="in"FeedbackClientselect相关客户value="<%=rsc("ClientName")%>"size="30"readonly="true"class="in"FeedbackContenttextarea详细内容cols="88"rows="4"class="table"readonly=trueFeedbackResulttextarea处理结果cols="88"rows="4"class="table"<%ifrsx("FeedbackFulfill")="已完成"then%>readonly=true<%else%>onfocus=this.select();onmouseover=this.focus();<%endif%>Submitselect添加按钮class="input"value=" 修改 "onClick="returnchecks()"在反馈信息修改页面,当用户单击【修改】按钮后,修改数据将被提交到本页进行处理,数据处理程序的代码如下:<%ifrequest("post")<>""thensetrs=server.CreateObject("adodb.recordset")sql="select*fromtb_Feedbackwhereid="&request("id")rs.opensql,conn,1,3rs("FeedbackFulfill")=request("FeedbackFulfill")rs("FeedbackResult")=request("FeedbackResult")rs.updaters.closeresponse.Write("alert("反馈信息修改成功");location="Feedback_ed.asp?id="&request("id")&"")endif%>–31–
7报表管理报表管理的主要功能是打印各种类型的报表,包括客户报表打印、联系人报表打印、反馈报表打印和库存报表打印4个部分。报表管理页面设计效果如图23所示。图23报表管理页面设计效果7.1客户报表模块客户报表模块的主要功能包括客户报表查询、导入Excel和用web打印3个部分。1.客户报表查询客户报表查询页面涉及的HTML表单元素如表5所示。表5客户报表查询页面涉及的HTML表单元素名称类型含义重要属性form1Form表单method="post"action=""eeeetHidden判断表单如何处理ClientCountrySelect国家/地区"><%=rsg("ClientCountry")%>ClientCitySelect城市"><%=rsc("ClientCity")%>SetNameSelect创建者"><%=rss("SetName")%>公司名称……公司地址Submitsubmit导入Execulclass="input"value="导入Excul"onClick="form1.eeeet.value="excul""Submitsubmit直接打印class="input"value="打印报表"onClick="form1.eeeet.value="print_c""用户可以在报表管理页面中的客户报表查询部分,输入查询条件,进行客户信息的查询。2.导入Excel当用户在查询部分输入条件,并单击【导入Excel】按钮后,用户添加的查询条件将被提交给数据处理页,处理页用selectcase判断隐藏域的值,进而确定怎样处理。数据处理页对查询条件经过处理,产生相应的SQL查询语句,其代码如下:<%sql="idisnotnull"ifrequest("ClientCountry")<>"全部"then"国家/地区不为全部时sql=sql&"andClientCountry=""&request("ClientCountry")&"""endififrequest("ClientCity")<>"全部"then"城市不为全部时sql=sql&"andClientCity=""&request("ClientCity")&"""endififrequest("SetName")<>"全部"then"客户名称不为全部时sql=sql&"andSetName=""&request("SetName")&"""endififtrim(request("search"))<>""then"当关键字不为空时sql=sql&"and"&request("searchtype")&"like"%"&request("search")&"%""endifsql="selectClientName,ClientCountry,ClientCity,ClientTel,ClientFax,ClientEmailfromtb_Clientwhere"&sqlresponse.Redirect("Table_print_Cd.asp?sql="&sql&"&tt=excul")"把参数传给下载页面%>当数据处理页处理完毕之后,会自动转向下载页,在下载页中单击左键,直接用web打开Excel,右键单击“下载”选择“目标另存为...”把Excel保存在相应的路径下。处理Excel的页面代码如下:<%ifrequest("tt")="excul"then"当为客户报表查询时产生相应字段a=array("公司名称","所在国家/地区","所在城市","公司电话","公司传真","E-mail")elseifrequest("tt")="excul_l"then"当为联系人报表查询时产生相应字段a=array("姓名","客户名称","部门","职务","电话","手机","E-mail")elseifrequest("tt")="excul_k"then"当为反馈客户报表查询时产生相应字段a=array("客户名称","反馈日期","是否解决","反馈主题","反馈内容","处理结果")–31–
elseifrequest("tt")="excul_kc"then"当为库存报表查询时产生相应字段a=array("客户编号","客户名称","产品数量","单位","库存类型")endif%><%response.ContentType="application/vnd.ms-excel"%><%setrs=conn.execute(request("sql"))%><%fori=0tors.fields.count-1%><%=a(i)%><%next%> <%dowhilenotrs.eof%><%fori=0tors.fields.count-1%><%=rs(i)%><%next%> <%rs.movenextlooprs.close%>报表下载页面的运行结果如图24所示。图24报表下载页面的运行结果3.用web打印–31–
用户在查询部分输入查询条件后,单击【打印报表】按钮,用户添加的查询条件将被提交给数据处理页,处理页用selectcase判断隐藏域的值,进而确定怎样处理。数据处理页对查询条件经过处理,产生相应的SQL查询语句。程序代码如下:<%sql="idisnotnull"ifrequest("ClientCountry")<>"全部"then"国家/地区不为全部时sql=sql&"andClientCountry=""&request("ClientCountry")&"""endififrequest("ClientCity")<>"全部"then"城市不为全部时sql=sql&"andClientCity=""&request("ClientCity")&"""endififrequest("SetName")<>"全部"then"客户名称不为全部时sql=sql&"andSetName=""&request("SetName")&"""endififtrim(request("search"))<>""then"当关键字不为空时sql=sql&"and"&request("searchtype")&"like"%"&request("search")&"%""endifsql="select*fromtb_Clientwhere"&sqlresponse.Redirect("Table_print_p.asp?sql="&sql)"把参数传给打印页面%>当数据处理页处理完毕之后,会自动转向打印页,打印页是一个框架集,包含三个页面。框架页代码如下:<%sql=request("sql")ifsql=""thensql=session("sql")endifsession("sql")=sqlshow=request("show")ifshow=""thenshow=15endifp=request("p")ifp=""orp=0thenp=1endif%>&show=<%=show%>&p=<%=p%>"name="topFrame"frameborder="no"scrolling="NO"noresize>&show=<%=show%>&p=<%=p%>"name="mainFrame"frameborder="no">–31–
控制页面代码如下:<%sql=request("sql")"获取sql语句ifsql=""thensql=session("sql")endifsession("sql")=sqlshow=request("show")setrs=server.CreateObject("adodb.recordset")sql=sqlrs.opensql,conn,1,1ifnotrs.eofthentol=rs.recordcountrs.pagesize=showmaxpage=rs.pagecountrequestpage=clng(request("p"))elsemaxpage=0tol=0show=0endif%><%fori=1to200%>"<%ifi=int(show)then%>selected<%endif%>>每页显示<%=i%>条记录<%next%><%fori=1tomaxpage%>&show=<%=show%>&sql=<%=request("sql")%>">第<%=i%>页–31–
<%next%>总页数:<%=maxpage%>总条数:<%=tol%>打印打印预览页面代码如下:<%sql=request("sql")ifrequest("sql")=""thensql=session("sql")endifsession("sql")=sqlshow=request("show")setrs=server.CreateObject("adodb.recordset")sql=session("sql")rs.opensql,conn,1,1%><%ifnotrs.eofthentol=rs.recordcountrs.pagesize=showmaxpage=rs.pagecountrequestpage=clng(request("p"))ifrequestpage=""orrequestpage=0thenrequestpage=1endififrequestpage>maxpagethenrequestpage=maxpageendififrequestpage<>1thenrs.move(requestpage-1)*rs.pagesizeendiffori=1tors.pagesizeandnotrs.eof%><%=rs("ClientName")%><%=rs("ClientCountry")%> <%=rs("ClientCity")%> <%=rs("ClientTel")%> –31–
<%=rs("ClientFax")%> <%=rs("ClientEmail")%> <%rs.movenextifrs.eofthenexitfornextelseresponse.Write("没有找到相关信息")endif%>客户报表打印页面运行结果如图25所示。图25客户报表打印页面的运行结果7.2联系人报表模块1.联系报表查询联系人报表查询页面涉及的HTML表单元素如表6所示。表6联系人报表查询页面涉及的HTML表单元素名称类型含义重要属性form1Form表单method="post"action=""eeeethidden判断表单如何处理LinkmanDeptselect国家/地区"><%=rsg("ClientCountry")%>LinkmanDutyselect城市"><%=rsc("ClientCity")%>select2select创建者">–31–
<%=rss("SetName")%>"全部"thensql=sql&"anddbo.tb_Linkman.LinkmanDept=""&request("LinkmanDept")&"""endififrequest("LinkmanDuty")<>"全部"thensql=sql&"anddbo.tb_Linkman.LinkmanDuty=""&request("LinkmanDuty")&"""endififrequest("select2")<>"全部"thensql=sql&"anddbo.tb_Linkman.SetName=""&request("SetName")&"""endifsql="SELECTdbo.tb_Linkman.LinkmanName,dbo.tb_Client.ClientName,dbo.tb_Linkman.LinkmanDept,dbo.tb_Linkman.LinkmanDuty,dbo.tb_Linkman.LinkmanTel,dbo.tb_Linkman.LinkmanHander,dbo.tb_Linkman.LinkmanEmailFROMdbo.tb_ClientINNERJOINdbo.tb_LinkmanONdbo.tb_Client.ID=dbo.tb_Linkman.LinkmanClientwhere"&sqlresponse.Redirect("Table_print_kh.asp?sql="&sql)%>由于查询和导入的实现方法和客户报表的实现方法相似,在此不再详细介绍,请读者参考7.1节中介绍的导入Excel的程序代码。3.用web打印用户在查询部分输入查询条件后,单击【打印报表】按钮,用户所添加的查询条件将被提交给数据处理页,处理页用selectcase判断隐藏域的值,进而确定怎样处理。传值程序代码如下:<%sql="dbo.tb_Linkman.idisnotnull"ifrequest("LinkmanDept")<>"全部"thensql=sql&"anddbo.tb_Linkman.LinkmanDept=""&request("LinkmanDept")&"""endififrequest("LinkmanDuty")<>"全部"thensql=sql&"anddbo.tb_Linkman.LinkmanDuty=""&request("LinkmanDuty")&"""–31–
endififrequest("select2")<>"全部"thensql=sql&"anddbo.tb_Linkman.SetName=""&request("SetName")&"""endifsql="SELECTdbo.tb_Linkman.LinkmanName,dbo.tb_Client.ClientName,dbo.tb_Linkman.LinkmanDept,dbo.tb_Linkman.LinkmanDuty,dbo.tb_Linkman.LinkmanTel,dbo.tb_Linkman.LinkmanHander,dbo.tb_Linkman.LinkmanEmailFROMdbo.tb_ClientINNERJOINdbo.tb_LinkmanONdbo.tb_Client.ID=dbo.tb_Linkman.LinkmanClientwhere"&sqlresponse.Redirect("Table_print_Cd.asp?sql="&sql&"&tt=excul_l")%>由于联系人查询和导入实现的方法和客户报表的实现的方法相似,在此不再详细介绍,请读者参考7.1节中介绍的用web打印的程序程序代码。联系人报表页面运行结果如图26所示。图26联系人报表页面的运行结果由于客户报表查询、联系人报表查询、反馈客户查询和库存报表查询实现的方法比较类似,在这里不再详细介绍,请参考7.1节和7.2节的相关内容。附录A参考文献1.VisualBasic精彩编程200例机械工业出版社赛奎春、高春艳等2003年1月2.VisualBasic数据库开发实例解析机械工业出版社刘志铭、高春艳等2003年8月3.VisualFoxPro数据库开发实例解析机械工业出版社王晶莹、王国辉等2003年9月4.PowerBuilder数据库开发实例解析机械工业出版社华传铭、张振坤等2003年9月5.Delphi数据库开发实例解析机械工业出版社赛奎春、郑骁鹏等2004年2月6.PowerBuilder精彩编程200例机械工业出版社张振坤、李文立等2004年9月7.VisualFoxPro精彩编程200例机械工业出版社王国辉、董韶华等2004年9月8.ASP数据库开发实例解析机械工业出版社李严、于亚芳、王国辉2004年12月9.Delphi工程应用与项目实践机械工业出版社宋坤、赵智勇等2005年1月10.VisualBasic工程应用与项目实践机械工业出版社高春艳、李俊民等2005年1月11.VisualC++工程应用与项目实践机械工业出版社张雨、阮伟良等5005年1月12.JSP工程应用与项目实践机械工业出版社陈威、白伟明、李楠2005年2月13.ASP工程应用与项目实践机械工业出版社王国辉、牛强、李南南2005年4月–31–
14.VisualBasic信息系统开发实例精选机械工业出版社高春艳、李俊民、张耀庭等2005年7月15.ASP信息系统开发实例精选机械工业出版社王国辉、牛强、李南南等2005年7月16.Delphi信息系统开发实例精选机械工业出版社宋坤、赵智勇、刘强等2005年7月17.Visualfoxpro数据库开发关键技术与实例应用人民邮电出版社周桓、张雨、王国辉2004年5月18.PoweBuilder数据库开发关键技术与实例应用人民邮电出版社刘志铭张振坤冯文萃2004年5月19.Delphi数据库开发关键技术与实例应用人民邮电出版社赛奎春陈紫鸿宋昆2004年5月20.Visualbasic数据库开发关键技术与实例应用人民邮电出版社高春艳、李艳2004年5月21.VisualC++管理信息系统完整项目实例剖析人民邮电出版社明日科技2005年7月22.VisualBasic管理信息系统完整项目实例剖析人民邮电出版社明日科技2005年7月23.PowerBuilder管理信息系统完整项目实例剖析人民邮电出版社明日科技2005年7月24.VisualFoxPro管理信息系统完整项目实例剖析人民邮电出版社明日科技2005年7月25.SQLServer数据库开发实例解析机械工业出版社宋昆、李严等2006年1月26.Access数据库开发实例解析机械工业出版社李俊民、高春燕等2006年1月–31–
附录B数据表(1)tb_Addresser(发件人信息表)发件人信息表主要用于保存发件人信息。该数据表的结构如表B.1所示。表B.1表tb_Addresser的结构字段名数据类型长度主键否描述idint4否自动编号EmailNamevarchar50否发件人姓名EmailPwdvarchar50否发件人邮箱密码Emailvarchar50否发件人emailSmtpEmailvarchar50否企业邮局地址(2)tb_Client(客户信息)客户信息表主要用于保存客户信息信息。该数据表的结构如表B.2所示。表B.2表tb_Client的结构字段名数据类型长度主键否描述IDint4是自动编号ClientNamevarchar100否公司名称ClientAddressvarchar100否公司详细地址ClientTelvarchar20否公司电话ClientFaxvarchar20否公司传真ClientEmailvarchar50否公司emailClientNumbervarchar10否邮政编码ClientPagevarchar50否公司网址ClientHabitudevarchar50否企业性质ClientSizevarchar10否公司ClientCityvarchar50否所在城市ClientCreditvarchar50否结款信用ClientCountryvarchar50否所属国家/地区ClientPayvarchar50否结款方式ClientListvarchar50否最高订单ClientYearvarchar10否年度订单ClientCycvarchar10否需求周期SetTimevarchar20否创建时间–31–
EditTimevarchar20否修改时间SetNamechar10否创建人(3)tb_Feedback(反馈信息表)反馈信息表主要用于保存客户的反馈信息。该数据表的结构如表B.3所示。表B.3表tb_Feedback的结构字段名数据类型长度主键否描述idint4是自动编号FeedbackTitlevarchar50否反馈标题FeedbackDatevarchar50否反馈日期FeedbackClientvarchar50否反馈客户FeedbackContentvarchar2000否反馈内容FeedbackFulfillvarchar50否是否完成FeedbackResultvarchar2000否处理结果SetTimevarchar20否创建时间SetNamevarchar50否创建人(4)tb_Stockpile(库存记录表)库存记录表主要用于保存库存记录信息。该数据表的结构如表B.4所示。表B.4表tb_Stockpile的结构字段名数据类型长度主键否描述idint4是自动编号StockpileProductNamevarchar50否产品编号StockpileProductNumberint4否产品数量StockpileTypevarchar50否库存类型StockpileContentvarchar50否库存说明SetNamevarchar50否创建人SetTimevarchar20否创建时间(5)tb_Pact(合同信息表)合同信息表主要用于保存合同详细信息。该数据表的结构如表B.5所示。表B.5表tb_Pact的结构字段名数据类型长度主键否描述idint4是自动编号PactClientvarchar50否客户idPactNumbervarchar50否合同编号PactDatevarchar50否签定日期–31–
PactMoneyvarchar50否签定日期PactExecutorvarchar100否执行人PactSignatoryvarchar50否签单人PactRemarkvarchar2000否备注SetTimevarchar20否创建时间EditTimevarchar20否修改时间SetNamevarchar50否创建人(6)tb_User(发件人信息表)发件人信息表主要用于保存用户的信息。该数据表的结构如表B.6所示。表B.6表tb_User结构字段名数据类型长度主键否描述idint4否自动编号usernamevarchar50否用户名userpwdvarchar50否密码Clientvarchar50否管理客户权限Linkmanvarchar50否管理联系人权限Pactvarchar50否管理合同权限Stockpilevarchar50否管理库存权限Feedbackvarchar50否服务管理权限Formsvarchar50否报表管理权限Addresservarchar50否发件人管理权限Emailvarchar50否email管理权限usersvarchar50否管理用户权限chaojivarchar50否超级用户权限(7)tb_Addresser(发件人信息表)发件人信息表主要用于保存发件人信息。该数据表的结构如表B.7所示。表B.7表tb_Product结构字段名数据类型长度主键否描述idint4是自动编号ProductNumbervarchar50否产品编号ProductNamevarchar50否产品名称ProductUnitvarchar50否单位ProductProvidervarchar50否供应商ProductContentvarchar2000否产品简介–31–
SetNamevarchar50否操作用户SetTimevarchar20否操作时间EditTimevarchar20否修改时间(8)tb_Addresser(发件人信息表)发件人信息表主要用于保存发件人信息。该数据表的结构如表B.8所示。表B.8表tb_linkman结构字段名数据类型长度主键否描述idint4是自动编号LinkmanNamevarchar50否联系人姓名LinkmanClientvarchar100否所属客户LinkmanLikevarchar50否爱好LinkmanFaxvarchar20否传真LinkmanTelvarchar20否电话LinkmanHandervarchar20否手机LinkmanEmailvarchar50否电子邮件LinkmanDeptvarchar50否所属部门LinkmanDutyvarchar50否职位LinkmanBirthvarchar20否生日LinkmanSexvarchar2否性别LinkmanMienvarchar4否合作态度Remarkvarchar2000否备注SetTimevarchar20否操作时间EditTimevarchar20否修改时间SetNamevarchar50否操作员–31–