版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、呵呵帘关客户的程昏- 项目背召1行业背景科技的发展、时代的进步,市场经济的竞争也越发激烈与残酷,在竞争中客户作为市场 的最最要的资源,早已成为市场营销的核心,企业间谁拥有的客户多,谁就在竞争中占有绝 对的优势。在市场经济竞争如此激烈的环境之下,企业要想立于不败之地,就必须和与之生 存发展息息相关的客户,建立起良好的关系,在现有客户资源的基础之上,维护好和老客户 的关系,并且不断的发展新的客户,用企业高品质的产品、优质的服务、良好的信誉树立企 业在客户心目中的良好形象:并以客户需求为己任,不断的创新与发展自身的产品,以满足 客户新需求,并规范企业内部的客户资源的管理方式、提升企业的客户服务质量。
2、计算机管 理系统满足了企业对自身客户资源管理的新要求,减少了客户资源管理过程中的浪费的人屋 人力、物力和财力等。2项目的价值本系统具有完善的基础信息维护和客户信息维护功能,并增置了客户服务模块,满足了 客户口常管理的需求:强人的数据查询及图表分析功能,帮助企业能够及时根据分析结果进 行新规划和方案,以适应变化万T的消费市场。客户管理系统后台数据库采用SQLServer 2000数据库,以保证数据的安全、高效和稳定。前台采用Microsoft公司的Visual C卄6.0 作为主要的开发工具,其可与SQL Server 2000数据库无缝链接。3. 开发的环境系统开发平台:Visual C+6.
3、0 o数据库管理系统软件:SQL Sewer 2000。运行平台:Windows xp/ Windows 2000。分辨率:最佳效果800*600。Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推 出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行 软件开发的首选工具。Visual C+6.0不仅是一个C+编译器,而且是一个基于 Windows 操作系统的可视化集成开发坏境(integrated development environment,IDE)o Visual C+6.0由许多组件组成,包拾编辑器、调试
4、器以及程序 向导AppWizard .类向导Class Wizard等开发工具。 这些组件通过一个名为 Developer Studio的组件集成为和谐的开发坏境。SQL Server是一个关系数据库管理系统它最初是由Microsoft Sybase和Ashton-Tate 三家公司共同开发的于1988年推出了第一个OS/2版本在Windows NT推出后Microsoft 与Sybase在SQL Server的开发上就分道扬镀了 Microsoft将SQL Server移植到 Windows NT系统上专注于开发推)' SQL Server K Windows NT版本Sybase则
5、较专注 于SQL Server在UNIX操作系统上的应用在本书中介绍的是Microsoft SQL Server以后 简称为 SQL Server 或 MS SQL Server4、开发计划通过调查,要求系统需要有以下功能:1)详细全面记录并管理客户信息和联系人信息。2)方便实用的数据查询功能。3)能够根据客户的反馈得出相应的处理方法,做到快速、及时。4)对客户和企业进行分类,方便管理。5)设置业务往来的商品数量统计功能。6)通过计算机控制电话呼叫用户。二需求分析1、业务描述客户管理系统简称CRM (Customer Relationship Management)"是客户与企业发生
6、 的所有关系的综合,是公司与客户之间建立的一种相互有益的关系。综合所有CRM 的定义,我们可以将其理解为理念、战略、技术三个层面,正确的战略、策略是CRM 实施的指导,信息系统、IT技术是CRM成功实施的手段和方法。其实,企业实施 CRM主要有6个重要领域:理念、战略、战术、技术、技能、业务过程。其中,理 念是CRM成功的关键,它是CRM实施应用的基础和土壤。CRM的概念由美国 Gartner集团率先提出。他们认为,CRM是辨识、获取、保持和增加“可获利客户” 的理论、实践和技术手段的总称。它既是一种国际领先的、以“客户价值”为中心的企 业管理理论、商业策略和企业运作实践,也是一种以信息技术为
7、手段、有效提高企业 收益、客户满意度、雇员生产力的管理软件。2系统流程图退岀系统.用户管理,会员管理【据模型本系统数据库采用SQL Seer 2000数据库,系统数据库名称为db_SCGL°数据库 db.SCGL中包含19张数据表。下面分别给出数据表概要说明和主要数据表的结构。从读者角度出发,使读者对本系统后台的数据库中数据表有一个更清晰的认识,在此特 设计一个数据库中数据表列表,该数据表列表包含系统所有数据表,如图2所示。表33个项目名称1所有者1类型/创建日期詞 tb_Client_cpxsdbo用戶2006-04-05 13:03:50业务往来中关于商品*肖售的数据蜀 tb_C
8、lient_khf kdbo用戶2006-04-05 13:03:39区域信息设置骂 tb.Client.khjbdbo用戶2006-04-05 13:03:27客户级别相关信息用表蜀 tbClientkhmyddbo用戶2006-04-05 13:03:15客戶满意度设置骂 tb.Client.khtsdbo用戶2006-03-31 14:15:53客户投诉相关信息用表IStb.ClientJxrxxdbo用户2006-03-31 14:23:05联系人基本信息表骂 tb.Client.qylxdbo用戶2006-04-05 13:02:52企业类型设置雪 tb_Client_qyxxdbo
9、用戶2006-04-06 14:01:57区域信息设置雪 tbClientqyxzdbo用戶2006-04-05 13:02:21企业性质设置雪 tbClientqyzxdbo用戶2006-04-05 13:02:02企业资信设置骂 tb.Client.sfzydbo用戶2006-04-06 16:00:20省份资源信息表罔 tb_khxxdbo用戶2005-12-29 9:11:16客戶基本信息表同tbuserdbo用戶2006-04-06 16:00:40操作员添加与密玛修改用表图2数据表列表数据库中的数据表请参见附录Bo三系统设计1、软件结构客户管理系统所涉及的信息非常的全面,主要由基础
10、信息维护、客户信息维护、客户服 务、信息查询、系统管理和帮助信息等几个功能模块组成,规划系统功能模块如卞: 基础信息维护模块基础信息维护模块主要包括区域信息设置、企业性质设置、企业类型设置、企业资信设 置、客户级别设置和客户满意程度设置6部分。 客户信息维护模块客户信息维护模块主要包括客户信息、联系人信息、业务往来、客户呼叫中心4个部分。 客户服务模块客户服务模块主要包括客户反馈、客户投诉2个部分。信息查询模块信息查询模块主要包括客户信息查询、联系人信息查询、客户反馈满意度查询和客户投 诉满意度查询。 系统管理模块系统管理模块主要包括操作员设置、密码修改。 帮助信息模块帮助信息模块主要包括关于
11、、帮助2个部分。客户管理系统的功能结构如图1所示。| 联系人信息 工 客尸信息客尸满意程度斟 丄客戶级别设引 丄企业资信设鬥 丄企业类型设为 丄企业性嵐设置 丄区域信息设置业务往来丁1客户呼叫中心容户反愤客户投诉投诉满意度查询客户信息查询联系人信息查询反愤满意度查询密码修改 操作员设置图1客户管理系统功能架构图2技术准备1)数据库的封装调用数据库的方式有很多,主要有DAO、ODBC、ADO,但使用起来比较灵活的是ADO, 直接引用ADO的方法是在头文件StdAfx.h中加入如下代码:#import HE:Program FilesCommon FilesSystemadomsadol5no_n
12、amespacerename ("EOF1', "adoEOF") rename ("BOF", HadoBOF")然后在要用的ADO的类中加入两个指针的定义就可以应用ADO 了_ConnectionP"Cr m_pConnection;_RecoraserPtr m_pRecordset;2)封装ADO数据库的代码分析对ADO的封装主要是将引用ADO的代码加到自定义的类中,并引用头文件StdAfx.h 即可,对ADO进行封装的代码如下:头文件ADO.H声明如下:#import HC:Piograin FilesCo
13、nimon FilesVSystemdo'dnsado 15.dllM no_namespace【enameCEOF”,”adoEOF”)class adopublic:_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;public:adoQ;virtual 3do():void closeQ;bool MovePreviousQy/ 向上移动bool MoveLastQ;/ 后一条bool MoveNextQ;/向 F移动bool MoveFirstO;/ 最后一条mt GetRecordCountQ;/ 获得记录个数bo
14、ol Open(CStimg srecordset, UINT adCmd);void GetErrors(_com_error eErrors);/获得错谋信息CString GetFieldValue(CString Field);/ 获得字段值bool Move(int nRecordNum);/ 移动记录void ExecuteSQL(CString SQL);/执行SQL语句void rstOpen(CString TSQL);/打开记录集;实现文件ADO.CPP原代码如下:构造函数,直接实现数据库的连接。ado:ado(j:CoInitialize(NULL); / ADO足基于C
15、OM技术要进行初始化trym_pComiection.CreateInstance(_uuidof(Connection);_bstr_t stiConnect-'Trovider-SQLOLEDBERVER-l ;Database-db_client;uid-sa;pwd-;H;m_pConnection->Open(stiConnect.HM/H,0); catch(_com_error e)AfKMessageBox(e.DescriptionQ);利用连接指针打开数据库,这样的方式打开的记录集,无法回滚,可以打开空记录集。bool ado:Open(CS
16、tiing srecordset. UINT adCmd) trympRecoidset-m.pConnectionExecutebstrsrecordsetNULLdCmd);catch(_com_error&e)this->GetErrois(e);remrn false:return true;用于返回记录集的个数。int ado:GetRecordCountQmt nCount-0;ttym_pRecordset->MoveFiist();catch()return 0;if(m_pRecordset->adoEOF)return 0:while (! m_p
17、Recoi dset->adoEOF)m_pRecordset->MoveNext(); nCount-nCount+1; m_pRecordset->MoveFirst(); reuirn nCount;这个函数用来获取执行SQL语句时的岀错信息。void ado: :GetErrors(_com_error eErrors)EnoisPtrpEnois-m_pCoimection-XjetEnorsQ;if (pErrors->GetCount()0)MessageBox(NULL、eEn5S.En6Message()借误 ”,MB_OKMB_ICONEXCLAMA
18、TION);elsefor (int i-0;i<pErrors->GetCount():i-H-)/如果有多条语句,将用这个循环输岀所有错谋_bstr_t desc-pErrors->GetItem(long)i)->GetDesciiptionO; MessageBox(NULLJesc,M 错 误 H.MB_OK|MBJCONEXCLAN1ATION);用记录的指针打开一个记录集,但打开空记录集时返回错误,如果出错就转向用连接打开记录集。void ado: :rstOpen(CStrmg TSQL)_bstr_t bstiSQL-TSQL.AllocSysStii
19、ngQ;m_pRecordset.CreateInstance(_uuidof(Recordset);m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConiiection.adOpeiiDynamic,adLockOptiniistic,adCmdText);catchCcom.error e) m_pRecordset-m_pConnection->Execute(C_bstr_t)TSQL,NULL,adCmdText);获取记录集指定列的值。CStrmg ado:GetFieldValue(CStiing Field)_variant_t
20、 Thevalue;CStiing temp;Thevalue-m_pRecordset->GetCollect(_bstO)Field);if(Thevalue.vtXH'.EMPTY |ThevHue.vtVT_NULL) temp-"elsetemp-(char*)(_bstr_t)Thevalue;temp.TrimRightO; temp.TrimLeftO; return temp;指向记录集的游标向上移一条。bool ado: :MovePreviousQtry m_pRecordset->MovePieviousO;catcht_com_error
21、 e)AfKMessageBox(e.DescriptionQ); reuirn false:renun tme;指向记录集的游标移到指定行处。bool ado:Move(int iiRecordNuni)tryif(?m_pRecordset->BOF)m_pRecoidset->MoveFnst();m_pRecordset->Move(nRecordNum);catch(_com_error e) AfKMessageBox(e.DescriptionQ); reuirn false;return true;指向记录集的游标向下移一条。bool ado:MoveNext
22、Otrym_pRecordset->MoveNext(); catch(_com_error e)AfKMessageBox(e.DescriptionQ); reuirn false;return true;将指向记录集的游标移到顶部。bool ado:MoveFiist()try m_pRecordset->MoveFHSt(); catch(_com_error e)AfKMessageBox(e.DescriptionQ); reuirn false;return true;将指向记录集的游标移到尾部。bool ado:MoveLast()tty m_pRecordset-
23、>MoveLastO;catchCcom.error e)AfKMessageBox(e.Desciiption(); return false:reuirn tnie;用指向连接的指针执行SQL语句,如果SQL语句有语法错误,就返回响应的错误。void ado: :ExecuteSQL(CString TSQL)try m_pComiection->Execute(_bstr_t)TSQL,NULL,adCmdText);catchCcom_error e)AfKMessageBox(e.Desciiption();关闭指针连接。void ado:close()m_pRecord
24、set->CloseQ; m_pComiection->Close(); m_pRecordset-NULL: m_pComiection-NULL;:CoUmmtializeQ;一主窗体主窗体主要是对客户管理系统的各个模块进行调用,主要有菜单调用和工具栏调用两种,如图3所示。图3主窗体运行效果1-菜单设计-InlxlJal xl(1)首先要用到工作区窗II,默认情况卞工作区窗体是打开的,如果没打开可以从菜 单中选择ViewAVorkspace此时工作区窗体会弹出,具体如图4所示。匕,khmanager - Microsoft Visual C+ - qkhxpp住1 File E
25、dit View Insert Project Build Tools Window Helponoqer TlWinSZ Debuqia|oGi耳肆 髦皂|同国宫|臥忒/ qkh.cpp : implementation Filekhmanager classes 田弋about 田弋 addoper 囱 F ado 田弋BCMenu 0 弓 BCMenuData + 弋 BCMenuMemDC + 弋 BCMenuToolBar $ 弋 CDuttonST 田弋 CChildFrame ® 弋 CKhmanagerApp 由 F CKhmanager rriC'VZlin
26、clude ttinclude ttinclude ttinclude ttincludestdaFx.h" "khnanager.h" "qkh.h- 'ado.h- xkli.lfttifdeF _DEBUG ttdeFine new DEBUGNEW ttundeF THIS_FILE static char THIS_FILE = _FILE ttpndiFj工作区窗口/j / qkh dialug U 2JReady图4工作区窗口(2)工作区选项卡有三个选项卡,如图4所示。资源选项卡是VC的资源管理器,它 的功能是可以实现添加或删除Wi
27、ndows的位图、图标、对话框等资源,要用资源选项卡, 请单击资源选项卡。(3)添加菜单,可以鼠标右键单击Menu文件夹,出现菜单后选择Insen Menu就会出 现菜单编辑器,要想在菜单内添加文字就双击如图4所示的虎线框,弹出如图5所示菜单属性对话框(Menu Item Properties)oI khmanager - Microsoft Visual C+ - khmanager.rc - IDR_KHMANATYPE(Menu)-ln|x|j File Edit View Insert Project Build Tools Window Help.1(91x1圈3 IS瀏船韜念a -
28、|记国冨嗨|khlist勺§Ikhmnger |Win32 Debug參险為! El融文件(E)编辑伺查看电l窗口(妙帮助(d)r resource二 O khmanagc EO Accelerator+ Bitmap Dialog申 Icon白 8 Menu1|idR_khmanai 團 IDRJxrxx 谢 idrZmainfrai类选项卡申口4| g Tahle新建( 打开 夭闭© 保存 另存为(叽Ctrl+N Qrl+OQrl+S打印(e) Qrl+P 打印预览 打印设置®摄近文件旧4心资源选项卡菜单编辑器虎线框vj文件选族Ready图4工作区选项卡及菜单
29、编辑器图5菜单屈性谢口(4)设置菜单文本,可以在Caption (标题)编辑框内输入即可,关闭属性窗体后一个 菜单项就生成了。所有的菜单项都是照这样的方法重复完成的。最后生成如图6所示的系统 执行时的菜单。还有另一种生成菜单的方法,主要是利用WindowApi函数进行文本编辑, 具体方法请参照Wmdows98程序设计一书。基瑙信応维护客户信息绘护客户眼备信息查谊系统沓理帝助信息图6系统执行时的菜单效果2. 工具栏设计工具栏资源可以利用VC自带的ToolBar编辑器生成,也可以采用MFC提供的 CToolBaiCtrl类动态生成,这里我们用语句动态生成。工具栏的生成将主要用到CToolBarCt
30、rl 类的Create方法来创建工具栏,其原型如下:BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd. UINT nID ); dwStyle是工具栏的风格和样式,主要有WS_CHILD (子窗体),WS_VISIBLE (可见)和 WS_DISABLED (不可见),还有以CCS开头8种样式,但在这8种样式中最长常用到的只 有CCS_TOP (把工具栏放在顶部),其它请参考MSDN。下面给出一个在程序中用到生成工具栏的实例代码。toolbar.Create(WS_CHILD|WS_VISIBLE.CRect(
31、0,0,0,0),this,ID_TOOLBAR);this是指向其父窗体的指针,ID_TOOLEAR是在Resource.il中定义的资源标识。工具栏上的按钮主要是对数据结构TEEUTTON进行赋值来实现的,下面给出一个具体 赋值的代码。button0 dwData-0;button(0.fsState-TBSTATE_ENABLED;button0.fsStyle-TBSTYLE_BUTTON;button0 idConmiand-ID_ADD:button0.iStrmg -toolbar. AddStrings(pString);fsState确定按钮的状态,fsStyle确定按钮的风
32、格,dwData可以是用户定义的数据, idCoiwnand是按下按钮后要执行命令的标识,通常是菜单项的ID值,iSumg是在按钮上显 示文字,主要是通过CtoolBarCtrl类的AddStrmgs方法加入的,pStrmg是TCHAR的指针, iBitmap是在按钮上显示的图片的编号,通常是图形列表(CIniageList)的序号。这里应该 提示人家:button擞组开始编号是基于0的。iBitniap选择图形列表的标号也是基于0的。如果要在工具栏中添加分隔符,就要使button0.fsStyle=TBSTYLE_SEP,因为分隔符 也是一个按钮,并且此时but ton 0. idComma
33、nd必须为0。工具栏中的按钮图片是通过CiniageList类的进行导入的,CunageList类的Create方法 原形如下:BOOL Create( int ex, int cy, UINT nFlags, mt nlnitial, int nGrow);由于CunageList类比较简单,一些参数请参照MSDN,我这里只给一个具体实例。 在程序中的图彖列表是通过如下代码实现的。imagelist.Create(32,32,ILC_COLOR32|ILC_MASK,0,0);创建了类对彖还不行,还要往类中导入图片,实现的方法主要是通过全局函数Loadicon 将图标加载到程序中,其主要参数
34、只有一个就是图标文件,这里就不在多说了。ILC_C0L0R32 是设置图标的颜色深度,ILC.MASK是设置是否非图标区使用透明色。3. 状态条的设计状态栏主要使用CStanisBaiCti-1类来生成,该类Create方法原型为:BOOL Create( DWORD dwStyle. const RECT& rect, CWnd* pParentWnd, UINT nID ): 在程序中可以编写如下的语句创建状态条: statebar.Create(WS_CHILD|WS_VISIBLE,CRect(O,O,O,O).this.ID_STATU);WS_CHILD和WS_VISIBL
35、E是一般窗体控件通用的样式,使用的次数很多。 程序中经常使用工具栏和状态栏,下面给出在对话框初始化函数中生成工具栏和状态栏 的代码,具体代码如下:BOOL khinain: :OnImtDialogQCDialog: :OnImtDialogQ;mt weith2;weithl-150;weith0-500;statebar.Create(WS.CHILD|WS_VISIBLE<Rect(O,O,O.O),tliis,ID_STATU);statebar. SetParts(3,&weith0);statebar. SetText(H长春市明日科技有限公司”,0,0);miage
36、Hst2.Create(3232,ILC_COLOR32|ILC_NIASK,0,0);miagelist2.Add(:LoadIcoii(:AficGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON 12) ); Add 函数是向图象列表中添加图表miagelist2.Add(:LoadIcoii(:AficGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON 13);miagelist2.Add(:Loadicon(:AficGetResourceHandleQ,MAKEINTRESOURCE(IDI_ICON14)
37、;miagelist2.Add(:LoadIcoii(:AficGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON 15);miagelist2.Add(:LoadIcoii(:AficGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON16); miagelist2.Add(:LoadIcoii(:AfeGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON20);toolbar2.EnableAutoniation(j; toolbar2.Create(WS_CHILD|WS_VIS
38、IBLE,CRect(0,0,0.0).thisJD_TOOLBAR2);toolbai-2. Se tIinageList( &i inagelist2);int i;以下就是对TBBUTTON结构进行赋值,赋值完成后工具栏的按钮就实现了for(i-0;i<7;i+)buttonfi dwData-0;buttoni.fsState-TBSTATE_ENABLED;buttoni.fsStyle-TBSTYLE_BUTTON;button0 4dConmiand-ID_KHXX;button0 .iBitmap-0;buttonf 1 .ldConunand-ID.lxixx;
39、bu tton 1 . 1B ltmap-1;button2. id Conmiand-ID_KHH J:button2 .iB itmap-2;button3 .idConunand-ID_KHFK;button3.iBitmap-3;button4 .idConunand-ID_KHTS;button4 .iBitmap-4;button .idCommand-ID_EXITS YS;buttonf 习 iB itmap-5;CStiing s;TCHAR String;这个指针取得生成工具栏按钮的字符串fdr(i-0:i<7;i+)s.LoadStrmg(计 IDS_31);mt
40、nStiingLength- s.GetLengthQ 十 1;pString - s.GetBufferSetLength(nStiingLength);buttonfi.iStirng -toolbar2 .AddStrings(pStiiiig);s.ReleaseBufferO;toolbar2.AddButtons(6,button);toolbar2.AutoSizeQ;toolbar2.SetStyle(TBSTYLE_FLAT|CCS_TOP);reuirn TRUE; return TRUE unless you set the focus to a control/ EXC
41、EPTION: OCX Property Pages should return FALSE二客户信息1-实现目标主要实现客户基本信息的添加、删除和修改,能够进行上一条,下一条,第一条和最后 一条的操作,能够用列表显示数据表中全部信息,使用分页的方式。程序运行如图7所示。图7客户信息录入窗口2. 设计步骤(1)设计基于CDialog的klibase类利用资源编辑器添加一个新的对话框资源,双击新加入的对话框资源,弹出如图8所示 的系统提示对话框,提示用户是否添加新类。图8添加新类的系统对话框这时,只需要单击“OK”按钮就会弹出添加新类的对话框,如图9所示。图9添加新类对话框只要在Name栏中输入
42、类的名字klibase,单击'OK ”按钮,就会生成klibase.cpp和klibase.h 两个文件,这两个文件就组成了一个类。相应的实现代码请读者参阅.CPP的文件。(2) 添加TabSheet类,用于实现分页功能。只要将TabSheet.cpp和TabSheet.li加入到 工程中在代码中调用TabSheet类既可实现。(3) 主窗体添加成员变量m_tab,列表窗体添加成员变量mjisto添加成员变屋是通过类向导实现的,单击菜单ViewClassWizaid就会弹出类向导,选择 MemberVaiiables选项卡,类向导对话框如图10所示,添加成员变量只要单击Conctrol
43、IDs, 要修改的资源ID会呈现出蓝色被选状态,此时“AddVanable”按钮会变成可用状态,单击 “AddVanable”按钮会弹出如图11所示添加变量对话框,按照图中的提示,添加变量名称, 选择变量类型,单击"OK”按钮即可完成成员变量的添加。MFC ClassWizard?| XlMessage Maps Member Variables Automation | ActiveX Events | Class Info |Project:khmanagerClass name:|khbAdd Class. IAdd Variable.Control IDs:MemberIDC
44、 COMBOICComboBoxm comlIDC COMDO2CComboDoxm_com2IDC COMBO3CComboBoxm_com3IDCCOMBO4CComboDoxm_com4IDC COMBOSCComboBoxm_com5idc'editiCEditmeditlIDC EDIT10CEditm_edit10IDC EDITHCEditmeditllIDC EDIT12CEditm edit12IDC EDIT13CEditmeditUIDCEDIT14CEditm_cdit14rJD:lkhmanagerV<hb.h D:kh man age rkhb .q)
45、pDescription:map to CComboBox memberDelete VariableUprlale ColumnsBind AllOKCancel图10类向导对话框图11添加成员变虽对话框主要变量列表如表1所示(这里没有给出所有成员变量,具体请参照程序原代码)。表1主要资源属性设置资源ID类型成员变呈描述IDC_EDIT1CEditm_editl客户编号IDC.COMBO1CComboBoxm_coml企业类型3. 代码分析实现分页机制的TabSheet类的代码如下:在构造函数中定义添加的对话框的个数变量,当前对话框索引的变量。CTabSheet: :CTabSheetQm_
46、nNumOfPages - 0;/存储对话框个数变呈m_nCurrentPage - 0;存储当前使用着的对话框索引的变呈CTabSheet: :CTabSheet()将对话框和Tab控件通过函数相关联。BOOL CTabSheet: AddPage(LPCTSTR title. CDialog *pDialog.UINT ID)if( NIAXPAGE m_nNumOfPages )reuirn FALSE;m_nNumOfPages+;m_pPagesm_nNumOfPages-1 - pDialog;m_IDDm_nNumOfPages-1 - ID;m_Titlem_nNumOfPag
47、es-1 - title;reuirn TRUE;用来设置对话框资源在Tab控件中的位置。void CTabSheet:SetRect(jCRect tabRect, itemRect;mt nX. nY, nXc.nYc;GetClientRect(&tabRect);GetIteniRect(O, &iteniRect);iiX-itemRect.left;nY-iteniRect. bottom 1;iiXc-tabRect.right-iteniRect.left-2;nYc-tabRect.bottom-nY-2;mu>Pages0->SetWindowP
48、os(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);for( int nCount-1: nCount < ni_nNumOfPages; nCount-H-) m_pPagesnCount->SetWindowPos(&vndTop. nX. nY, iiXc, nYc, SWP_HIDEWINDOW);m_nNumOfPages - 0:用来设置指定对话框资源在Tab控件中的位置。void CTabSheet:SetRect(int m)CRect tabRect. itemRect: mt nX. nY. nXc.nYc
49、;GetClientRect(&tabRect);GetIteniRect(O. &iteniRect);nX-itemRect.left;nY-iteniRect. bottom十 1;nXc-tabRect.nght-iteniRect.left-2;nY c-tabRect.bottom-nY-2;fbr( int nCount-0: nCount < m.nNumOfPages; nCount卄)m_pPagesnCount->SetWindowPos(&vndTop, nX. nY. iiXc, nYc, SWP_HIDEWINDOW); m_pP
50、agesm->SetWmdowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);在Tab控件中显示对话框。void CTabSheet:Show()fdr( int 1-0; 1 < ni_nNumOfPages; i+ )m_pPagesi->Create( m_IDDi. this);Insertltem( i. m_Titlei); m_pPages0->ShowVmdow(SW_SHOW);fdr( 1-1; i < m_nNumOfPages;计+)m_pPagesi->ShowWmdow(SW_
51、HIDE);SetRectQ;在Tab控件中显示指定对话框。void CTabSheet:Show(int n)fdr( int 1-0; 1 < ni_nNumOfPages; i卄)m_pPagesi->Create( m_IDDi. this);Insertltem( i. m_Titlei);fdr( 1-0; i < m_nNumOfPages;计+)m_pPagesi->ShowWmdow(SW_HIDE);m_pPagesn->ShowVmdow(SW_SHOW);SetRect(n);SetCurSel(n);用户单击Tab控件时,将焦点设置在对话
52、框上。void CTabSheet: :OnLButtoiiDoxvn(UINT nFlags, CPoint point)CTabCtil: :OiiLButtonDown(nFlags, point);if(m_nCurrentPage ! GetCurFocusQ)m_pPagesm_nCurrentPage->ShowVmdow(SW_HIDE); m_nCuirentPage-GetCurFocus(); m_pPagesm_nCurrentPage->ShowVmdow(SW_SHOW);通过Tab控件在窗体中设置选项卡。mt CTabSheet: :SetCurSel
53、(int nltem)if( nltem < 0 | nltem >- m_nNuinOfPages)return -1;mt ret - m_nCurrentPage;if(m_nCurrentPage ! iiltem)m)Pagesm_nCun:entPage 卜ShowWindow(SW_HIDE); m_nCurrentPage - nltem;m_pPagesm_nCurrentPage->ShowVmdow(SW_SHOW); CTabCtil: :SetCurSel(nItem);m_nNumOfPages - 0:return ret;获得Tab控件当前用户
54、选择的分页项。mt CTabSheet:GetCuiSelQreturn CTabCtrl: GetCur SelQ;三联系人信息査询1.实现目标实现查询功能,可以查询联系人的编号,企业的名称,联系人的姓名等字段,最后将查 询出来的结果显示在列表中,程序运行结果如图12所示。图12.联系人信息査询2.设计步9(1)设计类qlxr,基类为CDialogo(2)定义文本框的成员变量(给资源IDC_EDIT1加变量)和列表框的成员变量(给资 源EDC_LIST1加变量)。主要成员变量列表如表2所示(这里没有给出所有成员变量,具体请参照程序原代码)。表2主要资源属性设叠资源ID类型变盘描述IDC_CO
55、MBO1CComboBoxm_coml查询条件IDC.COMBO2CComboBoxm_com2查询条件IDC_EDIT1CEditm_editl输入查询信息IDCJLIST1CListCtrl显示查询结果3.代码分析联系人人信息查询文件Qlxi-.ccp的主要代码如下: 对话框的初始化程序代码如下:BOOL qlxi: :OnInitDialog()CDialog: :OnImtDialogQ;this->m_coml AddString(H联系人编号”); this->m_coml .AddString(H 企业名称”); this->m_coml AddString(H联系人姓名”); this>m_coml. AddStnng(” 联系人性别”); this->m_coml AddString(M年龄”); this->m_coml AddString(H职位”); this->m_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中相微乳液驱纳米驱油剂提采技术
- 甘南市重点中学2025-2026学年初三下学期第一次联考生物试题试卷含解析
- 2026年公共数据提供单位收益激励与数据质量提升联动机制
- 2026年无线基站天线PCB等传统设备商及车联网卫星导航模组厂受益方向
- 2026年低空目标探测中的多普勒频移应用
- 2026年RTCP功能含义与机床结构参数标定方法
- 人力资源管理师职称评定指南
- 金融分析师面试问题探讨
- 记者招聘面试指南及问题详解
- 新零售平台运营经理面试全解析与技巧
- 抚育林施工方案(3篇)
- 【初中 物理】二力平衡课件-2025-2026学年人教版物理八年级下册
- 【华信咨询】中国智算中心(AIDC)产业发展白皮书(2024年)
- 2026年及未来5年市场数据中国吡咯喹啉醌PQQ行业发展潜力分析及投资战略数据分析研究报告
- 重建祠堂施工方案(3篇)
- 酒店餐厅外包协议书
- 2026年湖南城建职业技术学院单招职业技能测试模拟测试卷附答案
- 燃气管道安装质量控制管理措施
- 2025年公安专业科目考试真题及答案
- 儿童肥胖疾病科普
- 水电预埋施工流程方案
评论
0/150
提交评论