客户管理系统毕业设计.docx
- 文档编号:5874040
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:35
- 大小:378.62KB
客户管理系统毕业设计.docx
《客户管理系统毕业设计.docx》由会员分享,可在线阅读,更多相关《客户管理系统毕业设计.docx(35页珍藏版)》请在冰豆网上搜索。
客户管理系统毕业设计
客户管理系统
学院
专业
班级
学号
姓名
指导教师
教师职称
年
月
日
摘要
【摘要】
科技的发展、时代的进步,市场经济的竞争也越发激烈与残酷,在竞争中客户作为市场的最最要的资源,早已成为市场营销的核心,企业间谁拥有的客户多,谁就在竞争中占有绝对的优势。
在市场经济竞争如此激烈的环境之下,企业要想立于不败之地,就必须和与之生存发展息息相关的客户,建立起良好的关系,在现有客户资源的基础之上,维护好和老客户的关系,并且不断的发展新的客户,用企业高品质的产品、优质的服务、良好的信誉树立企业在客户心目中的良好形象;并以客户需求为己任,不断的创新与发展自身的产品,以满足客户新需求,并规范企业内部的客户资源的管理方式、提升企业的客户服务质量。
计算机管理系统满足了企业对自身客户资源管理的新要求,减少了客户资源管理过程中的浪费的大量人力、物力和财力等。
【关键词】客户管理系统
0引言
本系统具有完善的基础信息维护和客户信息维护功能,并增置了客户服务模块,满足了客户日常管理的需求;强大的数据查询及图表分析功能,帮助企业能够及时根据分析结果进行新规划和方案,以适应变化万千的消费市场。
客户管理系统后台数据库采用SQLServer2000数据库,以保证数据的安全、高效和稳定。
前台采用Microsoft公司的VisualC++6.0作为主要的开发工具,其可与SQLServer2000数据库无缝链接。
1系统需求分析
通过调查,要求系统需要有以下功能:
❑详细全面记录并管理客户信息和联系人信息。
❑方便实用的数据查询功能。
❑能够根据客户的反馈得出相应的处理方法,做到快速、及时。
❑对客户和企业进行分类,方便管理。
❑设置业务往来的商品数量统计功能。
❑通过计算机控制电话呼叫用户。
2总体设计
2.1项目规划
客户管理系统所涉及的信息非常的全面,主要由基础信息维护、客户信息维护、客户服务、信息查询、系统管理和帮助信息等几个功能模块组成,规划系统功能模块如下:
❑基础信息维护模块
基础信息维护模块主要包括区域信息设置、企业性质设置、企业类型设置、企业资信设置、客户级别设置和客户满意程度设置6部分。
❑客户信息维护模块
客户信息维护模块主要包括客户信息、联系人信息、业务往来、客户呼叫中心4个部分。
❑客户服务模块
客户服务模块主要包括客户反馈、客户投诉2个部分。
❑信息查询模块
信息查询模块主要包括客户信息查询、联系人信息查询、客户反馈满意度查询和客户投诉满意度查询。
❑系统管理模块
系统管理模块主要包括操作员设置、密码修改。
❑帮助信息模块
帮助信息模块主要包括关于、帮助2个部分。
2.2系统功能结构
客户管理系统的功能结构如图1所示。
图1客户管理系统功能架构图
2.3设计目标
本系统属于典型的数据库管理系统,是针对中小型企业生产管理开发设计的,实现进一步的计算机化的管理。
通过本系统可以达到以下目标:
❑灵活的运用表格批量输入数据,使信息传递更快捷。
❑系统采用良好的人机对话模式,界面设计美观友好,信息查询灵活、方便、快捷、准确,数据存储安全可靠。
❑键盘操作,快速响应。
❑实现各种查询及打印等。
❑操作员可以随时修改自己的口令。
❑管理员可以设置操作员的权限
❑对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。
❑数据保密性强,为每个用户设置权限级别。
❑系统运行稳定、安全可靠。
3系统设计
3.1开发及运行环境
系统开发平台:
VisualC++6.0。
数据库管理系统软件:
SQLServer2000。
运行平台:
Windowsxp/Windows2000。
分辨率:
最佳效果800*600。
3.2数据库设计
本系统数据库采用SQLServer2000数据库,系统数据库名称为db_SCGL。
数据库db_SCGL中包含19张数据表。
下面分别给出数据表概要说明和主要数据表的结构。
1.数据表概要说明
从读者角度出发,使读者对本系统后台的数据库中数据表有一个更清晰的认识,在此特设计一个数据库中数据表列表,该数据表列表包含系统所有数据表,如图2所示。
图2数据表列表
2.主要数据表的结构
数据库中的数据表请参见附录B。
4技术准备
4.1数据库的封装
调用数据库的方式有很多,主要有DAO、ODBC、ADO,但使用起来比较灵活的是ADO,直接引用ADO的方法是在头文件StdAfx.h中加入如下代码:
#import"E:
\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")rename("BOF","adoBOF")
然后在要用的ADO的类中加入两个指针的定义就可以应用ADO了
_ConnectionPtrm_pConnection;
_RecordsetPtrm_pRecordset;
4.2封装ADO数据库的代码分析
对ADO的封装主要是将引用ADO的代码加到自定义的类中,并引用头文件StdAfx.h即可,对ADO进行封装的代码如下:
头文件ADO.H声明如下:
#import"C:
\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")
classado
{
public:
_ConnectionPtrm_pConnection;
_RecordsetPtrm_pRecordset;
public:
ado();
virtual~ado();
voidclose();
boolMovePrevious();//向上移动
boolMoveLast();//最后一条
boolMoveNext();//向下移动
boolMoveFirst();//最后一条
intGetRecordCount();//获得记录个数
boolOpen(CStringsrecordset,UINTadCmd);
voidGetErrors(_com_erroreErrors);//获得错误信息
CStringGetFieldValue(CStringField);//获得字段值
boolMove(intnRecordNum);//移动记录
voidExecuteSQL(CStringSQL);//执行SQL语句
voidrstOpen(CStringTSQL);//打开记录集
};
实现文件ADO.CPP原代码如下:
构造函数,直接实现数据库的连接。
ado:
:
ado()
{
:
:
CoInitialize(NULL);//ADO是基于COM技术要进行初始化
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
_bstr_tstrConnect="Provider=SQLOLEDB;SERVER=127.0.0.1;Database=db_client;uid=sa;pwd=;";
m_pConnection->Open(strConnect,"","",0);
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
}
}
利用连接指针打开数据库,这样的方式打开的记录集,无法回滚,可以打开空记录集。
boolado:
:
Open(CStringsrecordset,UINTadCmd)
{
try{
m_pRecordset=m_pConnection->Execute((_bstr_t)srecordset,NULL,adCmd);
}
catch(_com_error&e)
{
this->GetErrors(e);
returnfalse;
}
returntrue;
}
用于返回记录集的个数。
intado:
:
GetRecordCount()
{
intnCount=0;
try{
m_pRecordset->MoveFirst();
}
catch(...)
{
return0;
}
if(m_pRecordset->adoEOF)
return0;
while(!
m_pRecordset->adoEOF)
{
m_pRecordset->MoveNext();
nCount=nCount+1;
}
m_pRecordset->MoveFirst();
returnnCount;
}
这个函数用来获取执行SQL语句时的出错信息。
voidado:
:
GetErrors(_com_erroreErrors)
{
ErrorsPtrpErrors=m_pConnection->GetErrors();
if(pErrors->GetCount()==0)
MessageBox(NULL,eErrors.ErrorMessage(),"错误",MB_OK|MB_ICONEXCLAMATION);
else
{
for(inti=0;i
{
_bstr_tdesc=pErrors->GetItem((long)i)->GetDescription();
MessageBox(NULL,desc,"错误",MB_OK|MB_ICONEXCLAMATION);
}
}
}
用记录的指针打开一个记录集,但打开空记录集时返回错误,如果出错就转向用连接打开记录集。
voidado:
:
rstOpen(CStringTSQL)
{
try
{
_bstr_tbstrSQL=TSQL.AllocSysString();
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_errore)
{
m_pRecordset=m_pConnection->Execute((_bstr_t)TSQL,NULL,adCmdText);
}
}
获取记录集指定列的值。
CStringado:
:
GetFieldValue(CStringField)
{
_variant_tThevalue;
CStringtemp;
Thevalue=m_pRecordset->GetCollect((_bstr_t)Field);
if(Thevalue.vt==VT_EMPTY||Thevalue.vt==VT_NULL)
temp="";
else
{
temp=(char*)(_bstr_t)Thevalue;
temp.TrimRight();
temp.TrimLeft();
}
returntemp;
}
指向记录集的游标向上移一条。
boolado:
:
MovePrevious()
{
try
{
m_pRecordset->MovePrevious();
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
returnfalse;
}
returntrue;
}
指向记录集的游标移到指定行处。
boolado:
:
Move(intnRecordNum)
{
try
{
if(!
m_pRecordset->BOF)
{
m_pRecordset->MoveFirst();
}
m_pRecordset->Move(nRecordNum);
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
returnfalse;
}
returntrue;
}
指向记录集的游标向下移一条。
boolado:
:
MoveNext()
{
try
{
m_pRecordset->MoveNext();
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
returnfalse;
}
returntrue;
}
将指向记录集的游标移到顶部。
boolado:
:
MoveFirst()
{
try
{
m_pRecordset->MoveFirst();
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
returnfalse;
}
returntrue;
}
将指向记录集的游标移到尾部。
boolado:
:
MoveLast()
{
try
{
m_pRecordset->MoveLast();
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
returnfalse;
}
returntrue;
}
用指向连接的指针执行SQL语句,如果SQL语句有语法错误,就返回响应的错误。
voidado:
:
ExecuteSQL(CStringTSQL)
{
try
{
m_pConnection->Execute((_bstr_t)TSQL,NULL,adCmdText);
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
}
}
关闭指针连接。
voidado:
:
close()
{
m_pRecordset->Close();
m_pConnection->Close();
m_pRecordset=NULL;
m_pConnection=NULL;
:
:
CoUninitialize();
}
5主要功能模块设计
5.1主窗体
主窗体主要是对客户管理系统的各个模块进行调用,主要有菜单调用和工具栏调用两种,如图3所示。
图3主窗体运行效果
1.菜单设计
(1)首先要用到工作区窗口,默认情况下工作区窗体是打开的,如果没打开可以从菜单中选择View/Workspace此时工作区窗体会弹出,具体如图4所示。
图4工作区窗口
(2)工作区选项卡有三个选项卡,如图4所示。
资源选项卡是VC的资源管理器,它的功能是可以实现添加或删除Windows的位图、图标、对话框等资源,要用资源选项卡,请单击资源选项卡。
(3)添加菜单,可以鼠标右键单击Menu文件夹,出现菜单后选择InsertMenu就会出现菜单编辑器,要想在菜单内添加文字就双击如图4所示的虚线框,弹出如图5所示菜单属性对话框(MenuItemProperties)。
图4工作区选项卡及菜单编辑器
图5菜单属性窗口
(4)设置菜单文本,可以在Caption(标题)编辑框内输入即可,关闭属性窗体后一个菜单项就生成了。
所有的菜单项都是照这样的方法重复完成的。
最后生成如图6所示的系统执行时的菜单。
还有另一种生成菜单的方法,主要是利用WindowApi函数进行文本编辑,具体方法请参照《Windows98程序设计》一书。
图6系统执行时的菜单效果
2.工具栏设计
工具栏资源可以利用VC自带的ToolBar编辑器生成,也可以采用MFC提供的CToolBarCtrl类动态生成,这里我们用语句动态生成。
工具栏的生成将主要用到CToolBarCtrl类的Create方法来创建工具栏,其原型如下:
BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);
dwStyle是工具栏的风格和样式,主要有WS_CHILD(子窗体), WS_VISIBLE(可见)和WS_DISABLED(不可见),还有以CCS开头8种样式,但在这8种样式中最长常用到的只有CCS_TOP(把工具栏放在顶部),其它请参考MSDN。
下面给出一个在程序中用到生成工具栏的实例代码。
toolbar.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,ID_TOOLBAR);
this是指向其父窗体的指针,ID_TOOLBAR是在Resource.h中定义的资源标识。
工具栏上的按钮主要是对数据结构TBBUTTON进行赋值来实现的,下面给出一个具体赋值的代码。
button[0].dwData=0;
button[0].fsState=TBSTATE_ENABLED;
button[0].fsStyle=TBSTYLE_BUTTON;
button[0].idCommand=ID_ADD;
button[0].iString=toolbar.AddStrings(pString);
fsState确定按钮的状态,fsStyle确定按钮的风格,dwData可以是用户定义的数据,idCommand是按下按钮后要执行命令的标识,通常是菜单项的ID值,iString是在按钮上显示文字,主要是通过CtoolBarCtrl类的AddStrings方法加入的,pString是TCHAR的指针,iBitmap是在按钮上显示的图片的编号,通常是图形列表(CImageList)的序号。
这里应该提示大家:
button[]数组开始编号是基于0的。
iBitmap选择图形列表的标号也是基于0的。
如果要在工具栏中添加分隔符,就要使button[0].fsStyle=TBSTYLE_SEP,因为分隔符也是一个按钮,并且此时button[0].idCommand必须为0。
工具栏中的按钮图片是通过CimageList类的进行导入的,CimageList类的Create方法原形如下:
BOOLCreate(intcx,intcy,UINTnFlags,intnInitial,intnGrow);
由于CimageList类比较简单,一些参数请参照MSDN,我这里只给一个具体实例。
在程序中的图象列表是通过如下代码实现的。
imagelist.Create(32,32,ILC_COLOR32|ILC_MASK,0,0);
创建了类对象还不行,还要往类中导入图片,实现的方法主要是通过全局函数LoadIcon将图标加载到程序中,其主要参数只有一个就是图标文件,这里就不在多说了。
ILC_COLOR32是设置图标的颜色深度,ILC_MASK是设置是否非图标区使用透明色。
3.状态条的设计
状态栏主要使用CStatusBarCtrl类来生成,该类Create方法原型为:
BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);
在程序中可以编写如下的语句创建状态条:
statebar.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,ID_STATU);
WS_CHILD和WS_VISIBLE是一般窗体控件通用的样式,使用的次数很多。
程序中经常使用工具栏和状态栏,下面给出在对话框初始化函数中生成工具栏和状态栏的代码,具体代码如下:
BOOLkhmain:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
intweith[2];
weith[1]=150;
weith[0]=500;
statebar.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,ID_STATU);
statebar.SetParts(3,&weith[0]);
statebar.SetText("长春市明日科技有限公司",0,0);
imagelist2.Create(32,32,ILC_COLOR32|ILC_MASK,0,0);
imagelist2.Add(:
:
LoadIcon(:
:
AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON12)));//Add函数是向图象列表中添加图表
imagelist2.Add(:
:
LoadIcon(:
:
AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON13)));
imagelist2.Add(:
:
LoadIcon(:
:
AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON14)));
imagelist2.Add(:
:
LoadIcon(:
:
AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON15)));
imagelist2.Add(:
:
LoadIcon(:
:
AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON16)));
imagelist2.Add(:
:
LoadIcon(:
:
AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON20)));
toolbar2.EnableAutomation();
toolbar2.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,ID_TOOLBAR2);
toolbar2.SetImageList(&imagelist2);
inti;
//以下就是对TBBUTTON结构进行赋值,赋值完成后工具栏的按钮就实现了
for(i=0;i<7;i++)
{
button[i].dwData=0;
button[i].fsState=TBSTATE_ENABLED;
button[i].fsStyle=TBSTYLE_BUTTON;
}
button[0].idCommand=ID_KHXX;
button[0].iBitmap=0;
button[1].idCommand=ID_lxrxx;
button[1].iBitmap=1;
button[2].idCommand=I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 客户 管理 系统 毕业设计