客户资源管理系统SQL Server数据库课程设计.doc_第1页
客户资源管理系统SQL Server数据库课程设计.doc_第2页
客户资源管理系统SQL Server数据库课程设计.doc_第3页
客户资源管理系统SQL Server数据库课程设计.doc_第4页
客户资源管理系统SQL Server数据库课程设计.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

客户资源管理系统学院:数学与计算科学学院姓名:叶俊耀学号:1007010103专业:10信息技术一班指导老师:文一凭目录一、设计目的2二、系统设计2三、功能模块划分2四、系统流程分析3五、数据库设计3六、连接数据库6七、系统演示7八、相关代码展示12九、感想与总结72一、 设计目的随着新技术的广泛应用,全世界范围内的各个企业都在经历一场深刻的改革,尤其是在企业怎样与客户潜在客户进行互动交流这一点上体现的特别明显。从管理的角度来说,企业关注的焦点有改进内部运作转移到更多地关注客户上来。目前的CRM(客户关系管理)软件通过建立一个系统,是企业在客户服务,市场竞争,销售及支持方面彼此协调的全新关系实体,为企业带来长久地竞争优势,从而提高了生产率。本系统适合中小企业的客户资源管理,提供对客户的有效管理。二、 系统设计系统设计分以下几个方面:1) 进入系统前要身份验证,用户名,密码,输入正确后方可进入,2) 用户可以根据需要定义客户类型信息。3) 对客户类型信息进行修改和删除。4) 对用户的详细信息进行修改和删除。5) 用户可以定义客户的详细信息。6) 在系统对客户进行查询和编译。三、 功能模块划分客户资源管理系统身份验证客户信息管理类型管理查询管理增加新类型按姓名查询增加新客户详细信息查询修改新客户修改类型信息删除新客户删除类型信息客户资源管理系统功能模块示意图l 身份验证:提供了系统的访问控制功能。l 类型管理:即系统的配置信息管理,还包括的功能是添加,修改,删除客户类型信息,客户类型信息包括客户的地区,职位,行业等。l 客服信息管理:提供功能未添加,修改和删除客户基本信息。客户基本信息包括姓名,年龄,行业,职位,联系方式,爱好等信息。l 查询管理:包括按姓名查询,详细信息查询。这种查询接口可以方便利用SQL Server 数据库强大功能为客户提供服务。四、 系统流程分析前面分析中已经定义了系统各个功能模块,下面是系统运行的流程分析图: 登陆界面用户验证客户信息管理类型管理查询管理退出系统登陆成功登陆失败系统流程图五、 数据库设计创建数据库crm.l 数据库需求设计:系统的需求具体体现在福各种信息的保存,修改,和查询等方面,因此,一个满足系统要求的数据库必须总分照顾到对各种信息的输入输出,以免遗漏导致开发时返工。通过对系统的功能分析,客户资源管理需要包含以下数据信息。1. 地方信息:包括地方ID,地方名称。2. 结识途径:包括结识途径ID,结识途径名称。3. 职业信息:包括职业ID,职业名称。4. 行业信息:包括行业ID,行业名称。5. 客户信息:包括客户ID,姓名,所在地区,职业,行业,所在单位,结识途径,E-mail,地址,固定电话,移动电话,爱好,备注信息。l 数据库逻辑结构设计:通过需求分析创建了5个表,表之间的关系如下E-R图所示客户资源管理系统E-R图Approach表(结识途径)Profession表(职业)Area表(地区)Customer表(客户表)Vocation表(行业)为了提高数据库的存储效率和系统的功率,对customer_info_tab 创建存储过程add_customer_info_tab代码如下:USE crmgocreate procedure add_customer_info_tab( param1 int,param2 varchar(24),param3 varchar(24),param4 varchar(24),param5 varchar(24),param6 varchar(24),param7 varchar(24),param8 varchar(24),param9 varchar(24),param10 varchar(24),param11 varchar(60),param12 varchar(1000)ASDELETE FROM customer_info_tab WHERE id=param1;INSERT INTO customer_info_tab (id,name,area,profession,vocation,company,approach,email,phone,mobile,interest,memo)VALUES(param1,param2,param3,param4,param5,param6,param7,param8,param9,param10,param11,param12);六、 连接数据库数据库用ODBC方式连接数据库crm,对数据库crm设置用户名为:CUSTOMERS,密码:123456.连接字段要三个参数:数据源名称,数据库用户名,数据库用户密码。系统登录窗口如下所示:登陆窗口输入crm数据源名称,用户名:CUSTOMERS,密码:123456,可以连接数据库。ODBC连接方式数据库在数据源名称点击crm会出现如下窗口:点击确定就可以连接到数据库了.七、 系统演示在登陆窗口上输入后连接完数据库后会出现一个住对话窗口,这个窗口如下所示:系统主对话窗口对于地区信息管理的模块,如在界面的“地区名称”文本框中输入“大同”,单击“添加”按钮,就可以在地区信息列表控件中看到新添加的“大同”如图所示:添加地区信息 对于地区信息管理的“修改”功能,如要修改下拉列表框中的“海口”为“三亚”就点击“海口”,在地区名称中修改海口为三亚,就完成对海口的修改,如图所示:选择修改信息信息修改完成对于地区信息管理的“删除”功能,如要删除列表框中的“湘潭”,只要点击“湘潭”之后,再点击“删除”,就会删除掉“湘潭”,如图所示:点击删除信息点击删除后:信息已删除。其他列表框中的添加,删除,修改的功能都是如此操作的。就不介绍了。对于客户信息管理模块,如在界面上的“姓名”文本框中输入“王力”在“所在地区”下拉列表框选择“武汉”,在“职业”下拉列表框中选择“教授”,在“行业”下拉列表框中选择“科研”,在“所在单位”文本框中输入“湖南科技大学”,在“结识途径“下拉列表框中选择“订单”,在email文本框中输入在“固定电话”文本框中输入“027809895320”,在“移动电话”输入,在“爱好”文本框中输入钓鱼,在说明文本框输入“化学领域知名教授”。如图所示:输入信息页面单击添加按钮,客户信息就显示在列表控件上了,如图所示:如果要删除客户信息,点击你要删除的客户所在列,我们要删除12号客户,点击客户所在列,再单击删除,如图所示:点击删除后客户删除页面12号客户已经被删除。对于“详细查询”模块的使用,如在“所在地区”下拉菜单选择“贵阳”之后,会在列表控件中,列出所有在“贵阳”的用户消息,如图所示:选择地区方式查询页面八、 相关代码展示使用SQL Server2000创建的数据库,数据库的代码如下所示:1. 创建表的脚本如下:CREATE TABLE approach_info_tab (approach_id int NOT NULL ,approach_name varchar (24) COLLATE Chinese_PRC_CI_AS NOT NULL , PRIMARY KEY CLUSTERED (approach_id) ON PRIMARY , UNIQUE NONCLUSTERED (approach_name) ON PRIMARY ) ON PRIMARYGOCREATE TABLE area_info_tab (area_id int NOT NULL ,area_name varchar (24) COLLATE Chinese_PRC_CI_AS NOT NULL , PRIMARY KEY CLUSTERED (area_id) ON PRIMARY , UNIQUE NONCLUSTERED (area_name) ON PRIMARY ) ON PRIMARYGOCREATE TABLE customer_info_tab (id int IDENTITY (1, 1) NOT NULL ,name varchar (24) COLLATE Chinese_PRC_CI_AS NOT NULL ,area varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,profession varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,vocation varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,company varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,approach varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,email varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,phone varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,mobile varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,interest varchar (100) COLLATE Chinese_PRC_CI_AS NULL ,memo varchar (1000) COLLATE Chinese_PRC_CI_AS NULL , PRIMARY KEY CLUSTERED (id) ON PRIMARY , UNIQUE NONCLUSTERED (name) ON PRIMARY ,CONSTRAINT FK_customer_info_tab_area_info_tab FOREIGN KEY (area) REFERENCES area_info_tab (area_name),CONSTRAINT FK_customer_info_tab_profession_info_tab FOREIGN KEY (profession) REFERENCES profession_info_tab (profession_name),CONSTRAINT FK_customer_info_tab_vocation_info_tab FOREIGN KEY (vocation) REFERENCES vocation_info_tab (vocation_name) ON PRIMARYGOCREATE TABLE profession_info_tab (profession_id int NOT NULL ,profession_name varchar (24) COLLATE Chinese_PRC_CI_AS NOT NULL , PRIMARY KEY CLUSTERED (profession_id) ON PRIMARY , UNIQUE NONCLUSTERED (profession_name) ON PRIMARY ) ON PRIMARYGOCREATE TABLE vocation_info_tab (vocation_id int NOT NULL ,vocation_name varchar (24) COLLATE Chinese_PRC_CI_AS NOT NULL , PRIMARY KEY CLUSTERED (vocation_id) ON PRIMARY , UNIQUE NONCLUSTERED (vocation_name) ON PRIMARY ) ON PRIMARYGO2. 登陆数据库的代码:用vc+6.0MFC的window编程,创建登陆窗口,同时添加命令响应,以下是登陆对话框的命令响应函数,连接数据库crm.void CLoginDlg1:OnOK() / TODO: Add extra validation hereUpdateData(true); CDatabase m_db; CString strConnect; strConnect.Format(DSN=%s;UID=%s;PWD=%s,m_bDSN,m_bUsername,m_bPassword); / TRY m_db.OpenEx(strConnect); CATCH(CDBException,ex) AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin); AND_CATCH(CMemoryException,pEx) pEx-ReportError();AfxMessageBox(MEMORY EXCEPTION); AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);END_CATCHCDialog:OnOK();3. 信息列表控件的控制函数:void CCRDBS1007010103Dlg:InitControl() /DWORD dwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_UNDERLINEHOT;m_listArea.SetExtendedStyle(dwExStyle);m_listApproach.SetExtendedStyle(dwExStyle);m_listProfession.SetExtendedStyle(dwExStyle);m_listVocation.SetExtendedStyle(dwExStyle);m_listCR.SetExtendedStyle(dwExStyle);/m_listArea.InsertColumn(0,地区ID,LVCFMT_CENTER,50);m_listArea.InsertColumn(1,地区名称,LVCFMT_CENTER,90);/m_listApproach.InsertColumn(0,结识途径,LVCFMT_CENTER,50);m_listApproach.InsertColumn(1,结识途径名称,LVCFMT_CENTER,90);/m_listProfession.InsertColumn(0,职位ID,LVCFMT_CENTER,50);m_listProfession.InsertColumn(1,职位名称,LVCFMT_CENTER,90);/m_listVocation.InsertColumn(0,行业ID,LVCFMT_CENTER,50);m_listVocation.InsertColumn(1,行业名称,LVCFMT_CENTER,90);/m_listCR.InsertColumn(0,客户ID,LVCFMT_CENTER,60);m_listCR.InsertColumn(1,客户名称,LVCFMT_CENTER,80);m_listCR.InsertColumn(2,所在地区,LVCFMT_CENTER,80);m_listCR.InsertColumn(3,职业,LVCFMT_CENTER,80);m_listCR.InsertColumn(4,行业,LVCFMT_CENTER,80);m_listCR.InsertColumn(5,所在单位,LVCFMT_CENTER,80);m_listCR.InsertColumn(6,结识途径,LVCFMT_CENTER,80);m_listCR.InsertColumn(7,e-mail,LVCFMT_CENTER,80);m_listCR.InsertColumn(8,固定电话,LVCFMT_CENTER,80);m_listCR.InsertColumn(9,移动电话,LVCFMT_CENTER,80);m_listCR.InsertColumn(10,爱好,LVCFMT_CENTER,80);m_listCR.InsertColumn(11,说明,LVCFMT_CENTER,140);4. 向四个系统信息列表控件插入数据的控制函数:void CCRDBS1007010103Dlg:InitCtrlData()if(m_db.IsOpen()MessageBox(数据库未打开);return ;TRYCRecordset rs(&m_db);rs.Open(CRecordset:dynaset,select *from area_info_tab order by area_id);while(!rs.IsEOF()int id;CString area;CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)id=var.m_iVal;var.Clear();/rs.GetFieldValue(1,area);InsertConfigItem(&m_listArea,id,area);rs.MoveNext(); rs.Close();/rs.Open(CRecordset:dynaset,select *from approach_info_tab order by approach_id);while(!rs.IsEOF()int id;CString approach;CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)id=var.m_iVal;var.Clear();/rs.GetFieldValue(1,approach);InsertConfigItem(&m_listApproach,id,approach);rs.MoveNext();rs.Close();/rs.Open(CRecordset:dynaset,select *from profession_info_tab order by profession_id);while(!rs.IsEOF()int id;CString profession;CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)id=var.m_iVal;var.Clear();/rs.GetFieldValue(1,profession);InsertConfigItem(&m_listProfession,id,profession);rs.MoveNext();rs.Close();/rs.Open(CRecordset:dynaset,select *from vocation_info_tab order by vocation_id);while(!rs.IsEOF()int id;CString vocation;CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)id=var.m_iVal;var.Clear();/rs.GetFieldValue(1,vocation);InsertConfigItem(&m_listVocation,id,vocation);rs.MoveNext();rs.Close();/rs.Open(CRecordset:dynaset,select *from customer_info_tab order by id);while(!rs.IsEOF()int id;CString name,area,profession,vocation,company;CString approach,email,phone,mobile,interest,memo;CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)id=var.m_iVal;var.Clear();/rs.GetFieldValue(1,name);rs.GetFieldValue(2,area);rs.GetFieldValue(3,profession);rs.GetFieldValue(4,vocation);rs.GetFieldValue(5,company);rs.GetFieldValue(6,email);rs.GetFieldValue(7,approach);rs.GetFieldValue(8,phone);rs.GetFieldValue(9,mobile);rs.GetFieldValue(10,interest);rs.GetFieldValue(11,memo);/InsertCRInfoItem(id,name,area,profession,vocation,company,approach,phone,email,mobile,interest,memo);rs.MoveNext();rs.Close();/RefreshAreaComboData();RefreshApprComboData();RefreshProfComboData();RefreshVocComboData();CATCH(CDBException,ex) AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin); AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(MEMORY EXCEPTION);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);END_CATCH5. 刷新列表信息控件的控制函数:void CCRDBS1007010103Dlg:RefreshApprComboData() m_comboApproach.ResetContent();TRYCRecordset rs(&m_db);/rs.Open(CRecordset:dynaset,select *from approach_info_tab);while(!rs.IsEOF()CString strName;/rs.GetFieldValue(1,strName);m_comboApproach.AddString(strName);rs.MoveNext(); m_comboApproach.SetCurSel(0);CATCH(CDBException,ex) AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin); AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(MEMORY EXCEPTION);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);END_CATCHvoid CCRDBS1007010103Dlg:RefreshProfComboData()m_comboProfession.ResetContent();TRYCRecordset rs(&m_db);/rs.Open(CRecordset:dynaset,select *from profession_info_tab);while(!rs.IsEOF()CString strName;/rs.GetFieldValue(1,strName);m_comboProfession.AddString(strName);rs.MoveNext();m_comboProfession.SetCurSel(0);CATCH(CDBException,ex) AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin); AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(MEMORY EXCEPTION);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);END_CATCHvoid CCRDBS1007010103Dlg:RefreshVocComboData()m_comboVocation.ResetContent();TRYCRecordset rs(&m_db);/rs.Open(CRecordset:dynaset,select *from vocation_info_tab);while(!rs.IsEOF()CString strName;/rs.GetFieldValue(1,strName);m_comboVocation.AddString(strName);rs.MoveNext();m_comboVocation.SetCurSel(0);CATCH(CDBException,ex) AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin); AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(MEMORY EXCEPTION);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);END_CATCH6. 添加地区信息函数:void CCRDBS1007010103Dlg:OnBtnAreaAdd() / TODO: Add your control notification handler code hereif(!UpdateData()return ;if(m_strConfigArea.IsEmpty()AfxMessageBox(请填写你的地区名称);return;TRYCRecordset rs(&m_db);CString sql;rs.Open(CRecordset:dynaset,Select max(area_id)from area_info_tab );/int newID=1;if(!rs.IsEOF()CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)newID=var.m_iVal+1;sql.Format(Insert into area_info_tab(area_id, area_name )VALUES( %d,%s),newID,m_strConfigArea);TRACE(sql);m_db.ExecuteSQL(sql);/InsertConfigItem(&m_listArea,newID,m_strConfigArea);RefreshAreaComboData();CATCH(CDBException,ex) AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin); AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(MEMORY EXCEPTION);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);END_CATCH7. 修改地区信息函数:void CCRDBS1007010103Dlg:OnBtnAreaMod() / TODO: Add your control notification handler code hereif(!UpdateData()return ;if(m_strConfigArea.IsEmpty()AfxMessageBox(请填写你要修改的地区);return;int nItem=m_listArea.GetNextItem(-1,LVNI_SELECTED);/if(nItem=-1)AfxMessageBox(没有选择要修改的地区信息);return;/int id=atoi(m_listArea.GetItemText(nItem,0);TRYCRecordset rs(&m_db);CString sql;sql.Format(update area_info_tab set area_name=%s where area_id=%d,m_strConfigArea,id);TRACE(sql);m_db.ExecuteSQL(sql);/m_listArea.SetItemText(nItem,1,m_strConfigArea); RefreshAreaComboData();CATCH(CDBException,ex) AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin); AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(MEMORY EXCEPTION);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);END_CATCH8. 地区删除信息函数:void CCRDBS1007010103Dlg:OnBtnAreaDel() / TODO: Add your control notification handler code hereint nItem=m_listArea.GetNextItem(-1,LVNI_SELECTED);/if(nItem=-1)AfxMessageBox(没有选择要删除的地区信息);return;/int id=atoi(m_listArea.GetItemText(nItem,0);TRYCString deleteSql;deleteSql.Format(delete from area_info_tab where area_id=%d,id);m_db.ExecuteSQL(deleteSql);/m_listArea.DeleteItem(nItem);/RefreshAreaComboData();CATCH(CDBException,ex) AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin); AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(MEMORY EXCEPTION);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);END_CATCH9. 详细信息查询函数:创建一个新类:CDetailQueryDlg对的OnInitDialog()函数对信息进行控制输出,同时在CCRDBS1007010103Dlg类中的调用函数OnButtonDetailQuery0(),和在主窗口上的“详细查询”按钮进行消息响应,就可以调用CDetailQueryDlg.cpp实现信息的展示,函数如下所示:/ DetailQueryDlg.cpp : implementation file/#include stdafx.h#include CRDBS1007010103叶俊耀.h#include DetailQueryDlg.h#include CRDBS1007010103叶俊耀Dlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CDetailQueryDlg dialogCDetailQueryDlg:CDetailQueryDlg(CWnd* pParent /*=NULL*/): CDialog(CDetailQueryDlg:IDD, pParent)/AFX_DATA_INIT(CDetailQueryDlg)m_strSelectedApproach = _T();m_strSelectedArea = _T();m_strSelectedProfession = _T();m_strSelectedVocation = _T();/AFX_DATA_INITvoid CDetailQueryDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(C

温馨提示

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

评论

0/150

提交评论