资源描述
毕业设计 第 51 页 目 录1绪论21.1项目开发背景21.2项目开发目的32应用系统开发平台32.1Delphi语言简介42.2SQL Server数据库简介43系统分析63.1需求分析63.1.1总体规划63.1.2主要功能63.2系统设计63.2.1数据库设计73.2.2系统功能流程图74系统的具体实现164.1主窗体设计34.2数据模块164.3登录模块设计184.4客户信息模块244.5发送邮件模块30结 论50致 谢50参考文献521 绪论以客户为中心的理念在国外兴起于20世纪50年代,当时很多企业寄希望于通过改进技术、压缩生产周期、改善内部资源管理来提高生产增长率和利润,但事实上见效甚微。这样企业开始从强调降低经营成本的供应方发展策略转向了需求方策略。所谓需求方策略就是指与客户联系更加紧密,从客户关系方面挖掘新能源的策略,CRM应运而生。所不同的是,现在计算机可以帮助人们实现这些看似并不复杂而实际操作起来非常繁琐的工作。试想一下,当我们需要查找一个客户的电话号码时,只需敲几下键盘,就可以看到客户的详细资料(包括姓名、公司名称、电话、E-mail等),所有这些都是一个完善的客户管理系统所能完成的。1.1 项目开发背景在全球一体化、企业互动和以INTERNET为核心的时代,企业面临着如何发展潜在客户,如何将社会关系资源变为企业的销售和发展资源的一系列难办棘手的问题。在上述背景下,客户管理系统应运而生。本系统本着把握客户多样化和个性化的特点;以最快的速度响应客户需求;吸引新客户,留住老客户为原则。即从过去的以产品(Product-Centric)为中心的管理策略转向以客户为中心的(Customer-Centric)管理理念。系统旨在改善企业与客户之间的关系,建立新型的运营机制。本系统以企业级的整体客户管理为解决方案,帮助企业建立统一的客户资源、拓展销售渠道、寻求最佳市场方式、规范企业销售流程、提供科学分析方法,建立持久的客户体系。其大容量客户数据处理能力,让您的企业从多渠道收集信息,快速发现核心客户和潜在伙伴,进而给企业带来无限的利润。1.2 项目开发目的本系统属于小型的数据库系统,为了对中小型企业客户的管理,实现一些初步的计算机化的管理。通过本系统可以达到以下目的:q 灵活的运用表格批量输入数据,使信息传递更快捷。q 系统采用人机对话方式,界面美观友好、信息查询灵活、方便、快捷、准确、数据存储安全可靠。q 实现各种记录查询。q 操作员可以随时修改自己的口令。q 管理员可以设置操作员的权限q 对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。q 数据保密性强,为每个用户设置权限级别。q 系统最大限度地实现了易安装性、易维护性和易操作性。2 应用系统开发平台2.1 Delphi语言简介Delphi是一个极有代表性的面向对象开发工具;它将面向对象的程序设计方法与数据库技术;网络技术以及可视化;事件驱动,代码自动生成等先进技术完美的结合在一起,使用它可以直观的,快速地开发,高质量的windows应用程序。Delphi强大的易用的特点得到程序员的青睐。Delphi7.0除了保留以前版本的强大功能之处,更在数据库程序开发方面提供了强有力的支持,使程序员完全可能轻松开发出复杂且功能强大的数据库程序。Delphi类可以粗略地分成两部分:一部分是组件类,这些组件类通常以某种方式出现在组件面板上,当用户从组件面板上点取一个类的图标后,在程序中就自动生成了该类的对象(非可视组件除外);另一部分是功能类,这此功能类的对象通常出现在程序代码中,起着不可代替的作用,但是这些功能类在组件面板上是找不到的。在Delphi中,每一个类的祖先都是Tobject类,整个类的层次结构就像一棵倒挂的树,在最顶层的树根即为Tobject类。这样,按照面向对象编程的基本思想,就使得用户可用Tobject类这个类型代替任何其它类的数据类型。2.2 SQL Server数据库简介SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。 SQL Server近年来不断更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用户见面;SQL Server 2000是Microsoft公司于2000年推出的最新版本。 SQL Server 特点:1. 真正的客户机/服务器体系结构。 2. 图形化用户界面,使系统管理和数据库管理更加直观、简单。 3. 丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。 4. 具有很好的伸缩性,可跨越从运行Windows 95/98的膝上型电脑到运行Windows 2000的大型多处理器等多种平台使用。 5. SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。 6. SQL Server 2000与以前版本相比较,又具有以下新特性 。7. 支持XML(Extensive Markup Language,扩展标记语言) 。8. 强大的基于Web的分析 。9. 支持OLE DB和多种查询 。10. 支持分布式的分区视图。3 系统分析3.1 需求分析3.1.1 总体规划根据市场的需求,要求系统具有以下功能:q 完全人性化设计,无需专业人士指导,即可使用该系统。q 由于该系统的使用对象多,要求有较好的权限管理。q 系统具有数据备份及数据还原功能。能够保证系统数据的安全性。q 方便的全方位的数据查询。q 强大的报表打印功能。q 在相应的权限下,删除数据方便简单,数据稳定性好。q 强大的图表分析功能。q 退出系统。3.1.2 主要功能客户管理系统是一个典型的数据库开发应用程序,由基础信息维护、客户信息维护、客户服务、客户信息查询、打印报表、辅助工具、系统管理等模块组成,规划系统功能模块如下:q 基础信息维护模块该模块主要负责区域信息设置、企业性质设置、企业类型设置、企业资信设置、客户级别设置、客户满意程度设置。q 客户信息维护模块该模块主要负责客户信息、联系人信息、业务往来、发送邮件(包括邮件群发设置)。q 客户服务模块该模块主要负责客户反馈、客户投诉、客户反馈满意程度分析、客户投诉满意程度分析。q 客户信息查询模块该模块主要负责客户信息查询、联系人信息查询、根据客户反馈满意程度查询、根据客户投诉满意程序查询、客户反馈查询、客户投诉查询。q 打印报表模块该模块主要负责客户信息报表、联系人信息报表、业务往来报表、客户反馈报表、客户投拆报表。q 辅助工具模块该模块主要负责调用word、调用Excel、计算器、登录Internet、工作业务备忘、国内主要城市区号邮编查询。q 系统管理模块该模块主要负责操作员管理(包括权限设置与密码修改)、查看日志(包括日志清理)、数据备份与数据恢复、系统数据清理。3.2 系统设计3.2.1 数据库设计本系统数据库采用SQL Server 2000数据库,系统数据库名称为“db_Client”。表3-1 满意度统计表字段名数据类型长度主键否功能描述mydtj_mydvarchar30否满意度名称mydtj_slnumeric9否满意度数量表3-2 本单位信息表字段名数据类型长度主键否功能描述bdwxx_mcnvarchar50否单位名称bdwxx_lxdznvarchar50否联系地址接上表3-2 本单位信息表字段名数据类型长度主键否功能描述bdwxx_ybnvarchar50否邮政编码bdwxx_cznvarchar50否传真bdwxx_frdbnvarchar50否法人代表bdwxx_lxdhnvarchar50否联系电话bdwxx_khyhnvarchar50否开户银行bdwxx_yhzhnvarchar50否银行账号bdwxx_wznvarchar50否网址bdwxx_nshnvarchar50否纳税号表3-3 城市邮编信息表字段名数据类型长度主键否功能描述csxx_csjcvarchar6否省份简称csxx_sfmcvarchar23否省份名称csxx_csmcvarchar25否城市名称csxx_ybvarchar10否邮编csxx_dhqhvarchar10否电话区号表3-4 工作备忘信息表字段名数据类型长度主键否功能描述gzbw_idvarchar10否工作备忘编号gzbw_btvarchar30否记事标题gzbw_nrtext16否记事内容gzbw_jsrqdatetime8否记事日期gzbw_txrqdatetime8否提醒日期gzbw_bzvarchar50否备注信息表3-5 客户反馈信息表字段名数据类型长度主键否功能描述khfk_idvarchar30否客户反馈编号khfk_fkbtvarchar50否反馈标题khfk_khmcvarchar50否客户名称khfk_fknrvarchar50否反馈内容khfk_fkrqvarchar30否反馈日期khfk_fkslrvarchar30否反馈意见受理人khfk_khmydvarchar50否反馈意见受理人khfk_bzvarchar100否备注信息表3-6 客户反馈信息表字段名数据类型长度主键否功能描述khts_idvarchar50否客户投诉编号khts_qymcvarchar50否企业名称khts_tsrvarchar50否投诉人khts_tsztvarchar80否投诉主题khts_tsnrvarchar50否投诉内容khts_tsrqvarchar30否投诉日期khts_clbfvarchar100否处理办法khts_khmydvarchar30否客户满意程度khts_tsslrvarchar20否投诉受理人khts_bzvarchar100否备注信息表3-7 企业类型信息表字段名数据类型长度主键否功能描述qylx_idvarchar30否企业类型编号qylx_lxmcvarchar50否类型名称qylx_bzvarchar100否备注信息表3-8 区域信息表字段名数据类型长度主键否功能描述qyxx_idvarchar30否区域编号qyxx_qymcvarchar50是区域名称qyxx_qyjbvarchar50否区域级别qyxx_zscdvarchar50否区域重视程度qyxx_qygmltext16否区域购买力描述qyxx_bzvarchar100否备注信息表3-9 企业性质信息表字段名数据类型长度主键否功能描述qyxz_idvarchar30否企业性质编号qyxz_xzmcvarchar50是性质名称qyxz_bzvarchar100否备注信息表3-10 企业资信信息表字段名数据类型长度主键否功能描述qyzx_idvarchar30企业资信编号qyzx_zxjbvarchar50是资信级别qyzx_bzvarchar100备注信息表3-11 省份资源信息表字段名数据类型长度主键否功能描述sfzy_sfidvarchar30否省份编号sfzy_sfmcvarchar50否省份名称sfzy_zymsvarchar214748否省份资源描述表3-12 联系人信息表字段名数据类型长度主键否功能描述lxrxx_idvarchar20否联系人编号lxrxx_qymcvarchar20否企业名称lxrxx_xmvarchar30否联系人姓名lxrxx_xbvarchar5否联系人性别lxrxx_csnydatetime8否出生年月lxrxx_nlvarchar5否联系人年龄lxrxx_zwvarchar30否联系人职位lxrxx_bgdhvarchar30否联系人办公电话lxrxx_Emailvarchar50否联系人电子邮件lxrxx_sjvarchar20否联系人手机lxrxx_grjjvarchar2147否个人简介lxrxx_djrqdatetime8否登记日期lxrxx_xxdjrvarchar30否信息登记人lxrxx_bzvarchar50否备注表3-13 客户信息表结构字段名数据类型长度主键否功能描述khxx_idvarchar30否客户编号khxx_mcvarchar50是客户名称khxx_qyxzvarchar30否企业性质khxx_qylxvarchar30否企业类型接上表3-13客户信息表结构字段名数据类型长度主键否功能描述khxx_qyzxvarchar30否企业资信khxx_qydzvarchar50否企业地址khxx_szsfvarchar30否所属省份khxx_szcsvarchar30否所属城市khxx_gsybvarchar6否公司邮编khxx_frdbvarchar20否法人代表khxx_khyhvarchar50否开户银行khxx_yhzhvarchar50否银行账号khxx_nshvarchar50否纳税号khxx_ICcardvarchar50否客户IC卡号khxx_gswzvarchar50否公司网址khxx_gsdhvarchar20否公司电话khxx_gsczvarchar20否公司传真khxx_lxrvarchar30否主要联系人khxx_lxrdhvarchar20否联系人电话khxx_khjbvarchar20否客户级别khxx_bzvarchar21474否各注表3-14 客户满意度表结构字段名数据类型长度主键否功能描述Khmyd_idVarchar30否满意度编号Khmyd_mydVarchar50是满意度名称Khmyd_bzVarchar21474836否备注表3-15 业务往来表结构字段名数据类型长度主键否功能描述cpxs_idvarchar30否客户销售编号cpxs_mcvarchar50否销售产品名称cpxs_cpdjvarchar50否产品单价cpxs_xsslvarchar30否销售数量cpxs_ywlvarchar50否业务量cpxs_khmcdatatime8否客户名称cpxs_xsrqdatatime8否产品销售日期cpxs_bztext21474否备注信息3.2.2 系统功能流程图客户管理系统基础信息维护客户信息维护客户服务客户信息查询打印报表辅助工具系统管理关于图3-1客户管理系统基础信息维护区域信息设置企业性质设置企业类型设置企业资信设置客户级别设置客户满意度图3-2基础信息维护客户信息维护客户信息联系人信息业务往来发送邮件图3-3客户信息维护客户服务客户反馈客户投诉反馈满意度 投诉满意度图3-4客户服务客户信息查询客户反馈查询投诉满意度反馈满意度客户投诉查询联系人查询客户信息查询图3-5客户信息查询打印报表客户信息报表联系人报表业务往来报表客户反馈报表难客户查询报表图3-6打印报表4 系统的具体实现4.1 主窗体设计主窗体主要是对客户管理系统的各模块进行调用,在主窗体中显示操作员的姓名及日期。客户管理系统主窗体运行结果如图所示。 图4-1 主窗体1窗体设计步骤(1)运行Delphi时,会自动创建一个窗体,设置该窗体为程序主窗体。命名窗体为“FRM_CRM”,设置Caption属性为“客户管理系统”。(2)在“Standard”组件页中点选“TmainMenu”组件,添加到窗体上,双击该组件打开菜单编辑器,如图所示。 图4-2 显示菜单编辑器(3)在“Object Inspector”窗口中,设置Caption属性,如图所示。图4-3 添加下拉菜单按钮(4)在“Win32”组件页中点选“TTreeView”组件,添加到窗体上,如图所示。图4-4 显示TTreeView编辑器(5)在“TtreeView”编辑器中单击【New Item】按钮,在Text文本框中输入相关的信息,如图所示。图4-5 菜单栏设置(6)在“Win32”组件页中点选“TStatusBar”组件,添加到窗体上,双击TStatusBar组件,在弹出的对话框中单击【Add New】按钮,添加面板。在“Object Inspector”窗口中设置面板的Width属性和Caption属性,如图所示。图4-6 面板编辑器(7)在“Additional”组件页中点选“TImage”组件,在窗体上添加2个TImage组件。(8)重要组件的相关属性设置。对象名对象类型属性值FRM_CRMTFormCaption客户管理系统BorderStylebsSizeableKeyPreviewTrueImage1TImageAlignalTopIimage2alClient1. 相关代码在窗体显示时,先调用登录窗体,如果登录成功则在主界面的任务栏上显示操作员名称及日期。窗体的OnShow事件代码如下:procedure TFRM_CRM.FormShow(Sender: TObject);begin FRM_YHDL.ShowModal; / 调用登录窗体 if dl 0 then /如果有记录 begin yhmc := database.ADO_user.fieldbyname(user_name).AsString; /将操作员名称赋给变量yhmc for p := 1 to 31 do /将操作员的权限赋给数组a begin ppl := inttostr(p); ap := booltostr(database.ADO_user.fieldbyname(ppl).AsVariant,True); end; if jj = 1 then /如果为1则为重新登录,将新操作员名称赋给主界面的工具栏 begin self.Close; FRM_CRM.StatusBar1.Panels.Items1.Text := 操作员名称: +yhmc; end else begin SElf.Close; /关闭当前窗体 end; end else begin showmessage(操作员名称、密码或操作员级别不正确+#13+请重新输入。); edit1.Clear; edit2.Clear; combobox1.Text := ; dl := dl+1; end; if jj 1 then begin if dl = 4 then begin FRM_CSH.Close; /关闭本系统 end; end;end;在【退出】按钮的OnClick事件处理过程中,如果是重新登录则退出本窗体,如果是登录则退出本系统。其代码如下:procedure TFRM_YHDL.BitBtn2Click(Sender: TObject);begin if jj = 1 then FRM_YHDL.Close /关闭当前窗体 ELSE Application.Terminate; /关闭本系统end;4.4 客户信息模块客户信息模块主要是添加、修改、删除、查询客户信息。客户信息模块运行结果如图所示。 图4-14 客户信息模块运行结果1. 窗体设计步骤(1)选择“File”/“New”/“Form”菜单项,新建一个窗体,命名窗体为“FRM_KHXX”,设置Caption属性为“客户信息”。(2)在“Win32”组件页中点选“TImageList”组件,添加到窗体上。在“Standard”组件页中点选“TImagelist”组件,添加到窗体上。在“Standard”组件页中点选“TPanel”组件,添加到窗体上。在该组件上添加TToolBar组件,在TToolBar组件上单击右键,在弹出的菜单中选择“New ButTin”菜单项,添加工具栏按钮。选中新添加的工具栏按钮,设置相关属性,如图所示。图4-15 工具栏按钮属性(3)在“Data Access”组件页中点选“TDataSource”组件,添加到窗体上。在“Win32”组件页中点选“TPageControl”组件,添加到窗体上。在“Standard”组件页中点选“TPanel”组件,添加到TabSheet1页中,设置属性,如图所示。图4-16 Panel1属性(4)在“Standard”组件页中点选“TLabel”组件,在Panel1组件上添加21个。在“Data Controls”组件页中点选“TDBEdit”组件,在Panel1组件上添加14个。在“Data Controls”组件页中点选“TDBComboBox”组件,在Panel1组件上添加6个。在“Data Controls”组件页中点选“TDBMemo”组件,添加到Panel1组件上。在“Standard”组件页中点选“TPanel”组件,添加到TabSheet2页中。在“Data Controls”组件页中点选“TDBGrid”组件,添加到Panel2组件上,双击DBGrid1组件,在弹出的编辑器中设置属性,如图所示。 图4-17 为TDBGrid组件设置属性2相关代码在窗体显示时,将窗体名称赋给工作日志,打开客户信息表。并将企业性质、企业资信、客户级别、企业类型和省份数据库字段数据分别赋值给相对应的DBTComboBox组件的Items属性。窗体的OnShow事件代码如下:procedure TFRM_KHXX.FormShow(Sender: TObject);var ini : Tinifile; ssp : string;begin ssp := 客户信息; ini:=Tinifile.Create(c:cc.ini); /在C盘创建cc.ini文件 ini.WriteString(one,datetimetostr(now),ssp); /将当前时间和窗体名称赋给cc.ini文件 ini.Free; dbcombobox1.Clear; dbcombobox2.Clear; dbcombobox3.Clear; dbcombobox5.Clear; dbcombobox7.Clear; with database.ADO_bb do /企业性质 begin close; /关闭数据库 sql.Clear; /清空SQL sql.Add(select qyxz_xzmc from tb_Client_qyxz); /SQL查询语句只显示性质名称的字段信息 open; /打开数据库 end; while not database.ADO_bb.Eof do /如果不到记录尾 begin dbcombobox1.Items.Add(database.ADO_bb.fieldbyname(qyxz_xzmc).AsString); database.ADO_bb.Next; /指针指向下一条记录 end; with database.ADO_bb do /企业资信 begin close; /关闭数据库 sql.Clear; /清空SQL sql.Add(select qyzx_zxjb from tb_Client_qyzx); /SQL查询语句只显示资信级别的字段信息 open; /打开数据库 end; while not database.ADO_bb.Eof do /如果不到记录尾 begin dbcombobox2.Items.Add(database.ADO_bb.fieldbyname(qyzx_zxjb).AsString); database.ADO_bb.Next; /指针指向下一条记录 end; with database.ADO_bb do /客户级别 begin close; /关闭数据库 sql.Clear; /清空SQL sql.Add(select khjb_jbmc from tb_Client_khjb); /SQL查询语句只显示资信级别的字段信息 open; /打开数据库 end; while not database.ADO_bb.Eof do /如果不到记录尾 begin dbcombobox3.Items.Add(database.ADO_bb.fieldbyname(khjb_jbmc).AsString); database.ADO_bb.Next; /指针指向下一条记录 end; with database.ADO_bb do /企业类型 begin close; /关闭数据库 sql.Clear; /清空SQL sql.Add(select qylx_lxmc from tb_Client_qylx); /SQL查询语句只显示客户级别的字段信息 open; /打开数据库 end; while not database.ADO_bb.Eof do /如果不到记录尾 begin dbcombobox7.Items.Add(database.ADO_bb.fieldbyname(qylx_lxmc).AsString); database.ADO_bb.Next; /指针指向下一条记录 end; with database.ADO_bb do /省份 begin close; /关闭数据库 sql.Clear; /清空SQL sql.Add(select distinct csxx_sfmc from tb_Client_csxx); /查询省份名为惟一的信息 open; /打开数据库 end; while not database.ADO_bb.Eof do /如果不到记录尾 begin dbcombobox5.Items.Add(database.ADO_bb.fieldbyname(csxx_sfmc).AsString); database.ADO_bb.Next; end; with database.ADO_KHXX do /连接客户信息表 begin close; sql.Clear; sql.Add(select * from tb_khxx); open; end;end;在【添加】按钮的OnClick事件处理过程中,先清空所有组件上的信息,打开客户信息表,如果有记录,则在编号文本框中添加编号为最大记录编号加1,否则编号为第一条记录。其代码如下:procedure TFRM_KHXX.ToolButton1Click(Sender: TObject);var s : string; i : integer;begin i := 1; ToolButton4.Enabled := true; ToolButton5.Enabled := true; ToolButton2.Enabled := false; ToolButton1.Enabled := false; TabSheet1.Enabled := true; with database.ADO_KHXX do begin close; /关闭数据库 sql.Clear; /清空SQL语句 sql.Add(select * from tb_khxx order by khxx_id); /查询客户信息表并以编号升序排列 open; /打开数据库 end; s := KH+formatdatetime(yyyymm,now(); if database.ADO_KHXX.RecordCount1 then /如果记录为空 begin database.ADO_KHXX.Append; /在记录的尾部追加一条记录 database.ADO_KHXX.Edit; /对添记录进行修改 database.ADO_KHXX.FieldByName(khxx_id).AsString := s+00000+inttostr(i); end else /记录不为空 begin database.ADO_KHXX.Last; /将指针指向最后一条记录 i := strtoint(copy(database.ADO_KHXX.fieldbyname(KHXX_id).AsString,9,6); database.ADO_KHXX.Append; /在记录的尾部追加一条记录 database.ADO_KHXX.Edit; /对添记录进行修改 database.ADO_KHXX.FieldByName(khxx_id).AsString := s+formatfloat(000000,i+1); end; dbedit2.SetFocus; /使光标移到dbedit2组件上end;在【修改】按钮的OnClick事件外理过程中,对工具按钮的可用度进行设置,修改当前记录。其代码如下:procedure TFRM_KHXX.ToolButton2Click(Sender: TObject);begin ToolButton4.Enabled := true; ToolButton5.Enabled := true; ToolButton1.Enabled := false; TabSheet1.Enabled := true; database.ADO_KHXX.Edit; /编辑当前记录end;在【删除】按钮的OnClick事件处理过程中,先判断当前记录是否为空,如果为空,则无法删除,并弹出提示框,询问是否删除。如果按是则删除当前记录,否则删除无效。其代码如下:procedure TFRM_KHXX.ToolButton3Click(Sender: TObject);begin if database.ADO_KHXX.FieldByName(khxx_id).AsString = then /判断当前记录是不为空 begin showmessage(客户信息已为空,无法删除。); /弹出提示信息 end else begin if application.MessageBox(真的要删除客户信息吗?,提示,mb_yesno) = idyes then database.ADO_KHXX.Delete; /删除当前记录 end;end;在【保存】按钮的OnClick事件处理过程中,在保存前首先判断一些相关的信息
展开阅读全文