• 563.04 KB
  • 2022-05-14 15:45:15 发布

vc++客户管理系统(doc毕业设计论文)

  • 34页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
客户管理系统目录目录摘要0引言1系统需求分析2总体设计1项目规划2系统功能结构3设计目标3系统设计1开发及运行环境2数据库设计4技术准备1数据库的封装2封装ADO数据库的代码分析5主要功能模块设计1主窗体2客户信息3联系人信息4联系人信息查询附录A参考文献附录B数据表 摘要【摘要】科技的发展、时代的进步,市场经济的竞争也越发激烈与残酷,在竞争中客户作为市场的最最要的资源,早已成为市场营销的核心,企业间谁拥有的客户多,谁就在竞争中占有绝对的优势。在市场经济竞争如此激烈的环境之下,企业要想立于不败之地,就必须和与之生存发展息息相关的客户,建立起良好的关系,在现有客户资源的基础之上,维护好和老客户的关系,并且不断的发展新的客户,用企业高品质的产品、优质的服务、良好的信誉树立企业在客户心目中的良好形象;并以客户需求为己任,不断的创新与发展自身的产品,以满足客户新需求,并规范企业内部的客户资源的管理方式、提升企业的客户服务质量。计算机管理系统满足了企业对自身客户资源管理的新要求,减少了客户资源管理过程中的浪费的大量人力、物力和财力等。【关键词】客户管理系统 0引言本系统具有完善的基础信息维护和客户信息维护功能,并增置了客户服务模块,满足了客户日常管理的需求;强大的数据查询及图表分析功能,帮助企业能够及时根据分析结果进行新规划和方案,以适应变化万千的消费市场。客户管理系统后台数据库采用SQLServer2000数据库,以保证数据的安全、高效和稳定。前台采用Microsoft公司的VisualC++6.0作为主要的开发工具,其可与SQLServer2000数据库无缝链接。1系统需求分析通过调查,要求系统需要有以下功能:q详细全面记录并管理客户信息和联系人信息。q方便实用的数据查询功能。q能够根据客户的反馈得出相应的处理方法,做到快速、及时。q对客户和企业进行分类,方便管理。q设置业务往来的商品数量统计功能。q通过计算机控制电话呼叫用户。2总体设计2.1项目规划客户管理系统所涉及的信息非常的全面,主要由基础信息维护、客户信息维护、客户服务、信息查询、系统管理和帮助信息等几个功能模块组成,规划系统功能模块如下:q基础信息维护模块基础信息维护模块主要包括区域信息设置、企业性质设置、企业类型设置、企业资信设置、客户级别设置和客户满意程度设置6部分。q客户信息维护模块客户信息维护模块主要包括客户信息、联系人信息、业务往来、客户呼叫中心4个部分。q客户服务模块客户服务模块主要包括客户反馈、客户投诉2个部分。q信息查询模块信息查询模块主要包括客户信息查询、联系人信息查询、客户反馈满意度查询和客户投诉满意度查询。q系统管理模块系统管理模块主要包括操作员设置、密码修改。q帮助信息模块帮助信息模块主要包括关于、帮助2个部分。 2.2系统功能结构客户管理系统的功能结构如图1所示。图1客户管理系统功能架构图2.3设计目标本系统属于典型的数据库管理系统,是针对中小型企业生产管理开发设计的,实现进一步的计算机化的管理。通过本系统可以达到以下目标:q灵活的运用表格批量输入数据,使信息传递更快捷。q系统采用良好的人机对话模式,界面设计美观友好,信息查询灵活、方便、快捷、准确,数据存储安全可靠。q键盘操作,快速响应。q实现各种查询及打印等。q操作员可以随时修改自己的口令。q管理员可以设置操作员的权限q对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。q数据保密性强,为每个用户设置权限级别。q系统运行稳定、安全可靠。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:ProgramFilesCommonFilesSystemadomsado15.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:ProgramFilesCommonFilesSystemadomsado15.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;iGetCount();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=ID_KHHJ;button[2].iBitmap=2;button[3].idCommand=ID_KHFK;button[3].iBitmap=3;button[4].idCommand=ID_KHTS;button[4].iBitmap=4;button[5].idCommand=ID_EXITSYS;button[5].iBitmap=5; CStrings;TCHAR*pString;//这个指针取得生成工具栏按钮的字符串for(i=0;i<7;i++){s.LoadString(i+IDS_31);intnStringLength=s.GetLength()+1;pString=s.GetBufferSetLength(nStringLength);button[i].iString=toolbar2.AddStrings(pString);s.ReleaseBuffer();}toolbar2.AddButtons(6,button);toolbar2.AutoSize();toolbar2.SetStyle(TBSTYLE_FLAT|CCS_TOP);returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE}5.2客户信息1.实现目标主要实现客户基本信息的添加、删除和修改,能够进行上一条,下一条,第一条和最后一条的操作,能够用列表显示数据表中全部信息,使用分页的方式。程序运行如图7所示。图7客户信息录入窗口 2.设计步骤(1)设计基于CDialog的khbase类利用资源编辑器添加一个新的对话框资源,双击新加入的对话框资源,弹出如图8所示的系统提示对话框,提示用户是否添加新类。页:15此图无边杠请重抓。图8添加新类的系统对话框这时,只需要单击“OK”按钮就会弹出添加新类的对话框,如图9所示。图9添加新类对话框只要在Name栏中输入类的名字khbase,单击“OK”按钮,就会生成khbase.cpp和khbase.h两个文件,这两个文件就组成了一个类。相应的实现代码请读者参阅.CPP的文件。(2)添加TabSheet类,用于实现分页功能。只要将TabSheet.cpp和TabSheet.h加入到工程中在代码中调用TabSheet类既可实现。 (3)主窗体添加成员变量m_tab,列表窗体添加成员变量m_list。添加成员变量是通过类向导实现的,单击菜单ViewClassWizard就会弹出类向导,选择MemberVariables选项卡,类向导对话框如图10所示,添加成员变量只要单击ConctrolIDs,要修改的资源ID会呈现出蓝色被选状态,此时“AddVariable”按钮会变成可用状态,单击“AddVariable”按钮会弹出如图11所示添加变量对话框,按照图中的提示,添加变量名称,选择变量类型,单击“OK”按钮即可完成成员变量的添加。图10类向导对话框图11添加成员变量对话框主要变量列表如表1所示(这里没有给出所有成员变量,具体请参照程序原代码)。 表1主要资源属性设置资源ID类型成员变量描述IDC_EDIT1CEditm_edit1客户编号IDC_COMBO1CComboBoxm_com1企业类型3.代码分析实现分页机制的TabSheet类的代码如下:在构造函数中定义添加的对话框的个数变量,当前对话框索引的变量。CTabSheet::CTabSheet(){m_nNumOfPages=0;//存储对话框个数变量m_nCurrentPage=0;//存储当前使用着的对话框索引的变量}CTabSheet::~CTabSheet(){}将对话框和Tab控件通过函数相关联。BOOLCTabSheet::AddPage(LPCTSTRtitle,CDialog*pDialog,UINTID){if(MAXPAGE==m_nNumOfPages)returnFALSE;m_nNumOfPages++;m_pPages[m_nNumOfPages-1]=pDialog;m_IDD[m_nNumOfPages-1]=ID;m_Title[m_nNumOfPages-1]=title;returnTRUE;}用来设置对话框资源在Tab控件中的位置。voidCTabSheet::SetRect(){CRecttabRect,itemRect;intnX,nY,nXc,nYc;GetClientRect(&tabRect);GetItemRect(0,&itemRect);nX=itemRect.left;nY=itemRect.bottom+1;nXc=tabRect.right-itemRect.left-2;nYc=tabRect.bottom-nY-2;m_pPages[0]->SetWindowPos(&wndTop,nX,nY,nXc,nYc,SWP_SHOWWINDOW);for(intnCount=1;nCountSetWindowPos(&wndTop,nX,nY,nXc,nYc,SWP_HIDEWINDOW);m_nNumOfPages=0;}用来设置指定对话框资源在Tab控件中的位置。voidCTabSheet::SetRect(intm){CRecttabRect,itemRect;intnX,nY,nXc,nYc;GetClientRect(&tabRect);GetItemRect(0,&itemRect);nX=itemRect.left;nY=itemRect.bottom+1;nXc=tabRect.right-itemRect.left-2;nYc=tabRect.bottom-nY-2;for(intnCount=0;nCountSetWindowPos(&wndTop,nX,nY,nXc,nYc,SWP_HIDEWINDOW);m_pPages[m]->SetWindowPos(&wndTop,nX,nY,nXc,nYc,SWP_SHOWWINDOW);}在Tab控件中显示对话框。voidCTabSheet::Show(){for(inti=0;iCreate(m_IDD[i],this);InsertItem(i,m_Title[i]);}m_pPages[0]->ShowWindow(SW_SHOW);for(i=1;iShowWindow(SW_HIDE);SetRect();}在Tab控件中显示指定对话框。voidCTabSheet::Show(intn){for(inti=0;iCreate(m_IDD[i],this);InsertItem(i,m_Title[i]);}for(i=0;iShowWindow(SW_HIDE); m_pPages[n]->ShowWindow(SW_SHOW);SetRect(n);SetCurSel(n);}用户单击Tab控件时,将焦点设置在对话框上。voidCTabSheet::OnLButtonDown(UINTnFlags,CPointpoint){CTabCtrl::OnLButtonDown(nFlags,point);if(m_nCurrentPage!=GetCurFocus()){m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);m_nCurrentPage=GetCurFocus();m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);}}通过Tab控件在窗体中设置选项卡。intCTabSheet::SetCurSel(intnItem){if(nItem<0||nItem>=m_nNumOfPages)return-1;intret=m_nCurrentPage;if(m_nCurrentPage!=nItem){m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);m_nCurrentPage=nItem;m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);CTabCtrl::SetCurSel(nItem);}m_nNumOfPages=0;returnret;}获得Tab控件当前用户选择的分页项。intCTabSheet::GetCurSel(){returnCTabCtrl::GetCurSel();}5.3联系人信息查询1.实现目标 实现查询功能,可以查询联系人的编号,企业的名称,联系人的姓名等字段,最后将查询出来的结果显示在列表中,程序运行结果如图12所示。图12.联系人信息查询2.设计步骤(1)设计类qlxr,基类为CDialog。(2)定义文本框的成员变量(给资源IDC_EDIT1加变量)和列表框的成员变量(给资源IDC_LIST1加变量)。主要成员变量列表如表2所示(这里没有给出所有成员变量,具体请参照程序原代码)。表2主要资源属性设置资源ID类型变量描述IDC_COMBO1CComboBoxm_com1查询条件IDC_COMBO2CComboBoxm_com2查询条件IDC_EDIT1CEditm_edit1输入查询信息IDC_LIST1CListCtrlm_list显示查询结果3.代码分析联系人人信息查询文件Qlxr.ccp的主要代码如下:对话框的初始化程序代码如下:BOOLqlxr::OnInitDialog(){CDialog::OnInitDialog();this->m_com1.AddString("联系人编号");this->m_com1.AddString("企业名称");this->m_com1.AddString("联系人姓名");this->m_com1.AddString("联系人性别");this->m_com1.AddString("年龄");this->m_com1.AddString("职位");this->m_com1.AddString("办公电话");this->m_com1.AddString("电子邮件"); this->m_com1.AddString("手机");this->m_com2.AddString("like");this->m_com2.AddString("=");m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE);m_list.InsertColumn(0,"联系人编号");m_list.InsertColumn(1,"企业名称");m_list.InsertColumn(2,"联系人姓名");m_list.InsertColumn(3,"联系人性别");m_list.InsertColumn(4,"年龄");m_list.InsertColumn(5,"职位");m_list.InsertColumn(6,"办公电话");m_list.InsertColumn(7,"电子邮件");m_list.InsertColumn(8,"手机");m_list.SetColumnWidth(0,100);//设置列表框列的宽度m_list.SetColumnWidth(1,100);m_list.SetColumnWidth(2,100);m_list.SetColumnWidth(3,100);m_list.SetColumnWidth(4,100);m_list.SetColumnWidth(5,100);m_list.SetColumnWidth(6,100);m_list.SetColumnWidth(7,100);m_list.SetColumnWidth(8,100);this->loadlist();returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidqlxr::OnButton2(){this->EndDialog(true);}实现查询功能,当文本框和选择列表框都为空是,出现提示。voidqlxr::OnButton1(){m_list.DeleteAllItems();adorst;CStringsql,edit1,com1,com2;this->m_edit.GetWindowText(edit1);this->m_com2.GetWindowText(com2); this->m_com1.GetWindowText(com1);if(edit1.IsEmpty()){AfxMessageBox("请输入");return;}if(com1.IsEmpty()){AfxMessageBox("请输入");return;}if(com2.IsEmpty()){AfxMessageBox("请输入");return;}sql.Format("select*fromtb_Client_lxrxxwhere%s%s"%s"",ssel,com2,edit1);rst.Open(sql,adCmdText);intrecordcount=rst.GetRecordCount();intii;for(ii=1;ii<=recordcount;ii++){m_list.InsertItem(ii-1,"");m_list.SetItemText(ii-1,0,rst.GetFieldValue("lxrxx_id"));m_list.SetItemText(ii-1,1,rst.GetFieldValue("lxrxx_qymc"));m_list.SetItemText(ii-1,2,rst.GetFieldValue("lxrxx_xm"));m_list.SetItemText(ii-1,3,rst.GetFieldValue("lxrxx_xb"));m_list.SetItemText(ii-1,4,rst.GetFieldValue("lxrxx_nl"));m_list.SetItemText(ii-1,5,rst.GetFieldValue("lxrxx_zw"));m_list.SetItemText(ii-1,6,rst.GetFieldValue("lxrxx_bgdh"));m_list.SetItemText(ii-1,7,rst.GetFieldValue("lxrxx_Email"));m_list.SetItemText(ii-1,8,rst.GetFieldValue("lxrxx_sj"));rst.Move(ii);}rst.close();}程序运行中对话框被打开后,列表框数据的初始化。voidqlxr::loadlist(){adorst;rst.Open("select*fromtb_Client_lxrxx",adCmdText);intrecordcount=rst.GetRecordCount();intii; for(ii=1;ii<=recordcount;ii++){m_list.InsertItem(ii-1,"");m_list.SetItemText(ii-1,0,rst.GetFieldValue("lxrxx_id"));m_list.SetItemText(ii-1,1,rst.GetFieldValue("lxrxx_qymc"));m_list.SetItemText(ii-1,2,rst.GetFieldValue("lxrxx_xm"));m_list.SetItemText(ii-1,3,rst.GetFieldValue("lxrxx_xb"));m_list.SetItemText(ii-1,4,rst.GetFieldValue("lxrxx_nl"));m_list.SetItemText(ii-1,5,rst.GetFieldValue("lxrxx_zw"));m_list.SetItemText(ii-1,6,rst.GetFieldValue("lxrxx_bgdh"));m_list.SetItemText(ii-1,7,rst.GetFieldValue("lxrxx_Email"));m_list.SetItemText(ii-1,8,rst.GetFieldValue("lxrxx_sj"));rst.Move(ii);}rst.close();}此函数用来将用户在ComboBox控件的选择转换成SQL语句所需的字段名称。voidqlxr::OnSelchangeCombo1(){switch(m_com1.GetCurSel()){case0:ssel="lxrxx_id";break;case1:ssel="lxrxx_qymc";break;case2:ssel="lxrxx_xm";break;case3:ssel="lxrxx_xb";break;case4:ssel="lxrxx_nl";break;case5:ssel="lxrxx_zw";break;case6:ssel="lxrxx_bgdh"; break;case7:ssel="lxrxx_Email";break;case8:ssel="lxrxx_sj";break;}}附录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++工程应用与项目实践》机械工业出版社张雨、阮伟良等2005年1月12.《JSP工程应用与项目实践》机械工业出版社陈威、白伟明、李楠2005年2月13.《ASP工程应用与项目实践》机械工业出版社王国辉、牛强、李南南2005年4月14.《VisualBasic信息系统开发实例精选》机械工业出版社高春艳、李俊民、张耀庭等2005年7月15.《ASP信息系统开发实例精选》机械工业出版社王国辉、牛强、李南南等2005年7月 16.《Delphi信息系统开发实例精选》机械工业出版社宋坤、赵智勇、刘强等2005年7月17.《Visualfoxpro数据库开发关键技术与实例应用》人民邮电出版社周桓、张雨、王国辉2004年5月18.《PowerBuilder数据库开发关键技术与实例应用》人民邮电出版社刘志铭、张振坤、冯文萃2004年5月19.《Delphi数据库开发关键技术与实例应用》人民邮电出版社赛奎春、陈紫鸿、宋昆2004年5月 附录B数据表由于篇幅有限,只给出部分数据表。(1)tb_khxx(客户信息表)客户信息表主要用于保存客户的详细信息。该数据表的结构如表3所示。表3客户信息表字段名数据类型长度描述khxx_idvarchar30客户编号khxx_mcvarchar50企业名称khxx_qyxzvarchar30企业性质khxx_qylxvarchar30企业类型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_bztext16备注信息(2)tb_user(用户信息表)用户信息表,用于记录操作用户的密码和操作权限。该数据表的结构如表16所示。表4用户信息表字段名数据类型长度描述user_idnvarchar20操作员编号 user_namenvarchar50操作员姓名user_mmnvarchar30操作员密码以下内容与本文档无关!!!以下内容与本文档无关!!!。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。以下为赠送文档,祝你事业有成,财源广进,身体健康,家庭和睦!!!高效能人士的50个习惯l在行动前设定目标有目标未必能够成功,但没有目标的肯定不能成功。著名的效率提升大师博思.崔西説:“成功就是目标的达成,其他都是这句话的注释。”现实中那些顶尖的成功人士不是成功了才设定目标,而是设定了目标才成功。一次做好一件事著名的效率提升大师博思.崔西有一个著名的论断:“一次做好一件事的人比同时涉猎多个领域的人要好得多。”富兰克林将自己一生的成就归功于对“在一定时期内不遗余力地做一件事”这一信条的实践。培养重点思维从重点问题突破,是高效能人士思考的一项重要习惯。如果一个人没有重点地思考,就等于无主要目标,做事的效率必然会十分低下。相反,如果他抓住了主要矛盾,解决问题就变得容易多了。发现问题关键在许多领导者看来,高效能人士应当具备的最重要的能力就是发现问题关键能力,因为这是通向问题解决的必经之路。正如微软总裁兼首席软件设计师比尔。盖茨所説:“通向最高管理层的最迅捷的途径,是主动承担别人都不愿意接手的工作,并在其中展示你出众的创造力和解决问题的能力。”把问题想透彻把问题想透彻,是一种很好的思维品质。只要把问题想透彻了,才能找到问题到底是什么,才能找到解决问题最有效的手段。不找借口美国成功学家格兰特纳说过这样的话:“如果你有为自己系鞋带的能力,你就有上天摘星星的机会!”一个人对待生活和工作是否负责是决定他能否成功的关键。一名高效能人士不会到处为自己找借口,开脱责任;相反,无伦出现什么情况,他都会自觉主动地将自己的任务执行到底。要事第一创设遍及全美的事务公司的亨瑞。杜哈提说,不论他出多小钱的薪水,都不可能找到一个具有两种能力的人。这两种能力是:第一,能思想;第二,能按事情的重要程度来做事。因此,在工作中,如果我们不能选择正确的事情去做,那么唯一正确的事情就是停止手头上的事情,直到发现正确的事情为止。运用20/80法则二八法则向人们揭示了这样一个真理,即投入与产出、努力与收获、原因和结果之间,普遍存在着不平衡关系。小部分的努力,可以获得大的收获;起关键作用的小部分,通常就能主宰整个组织的产出、盈亏和成败。合理利用零碎时间所谓零碎时间,是指不构成连续的时间或一个事务与另一事务衔接时的空余时间。这样的时间往往被人们毫不在乎地忽略过去,零碎时间虽短,但倘若一日、一月、一年地不断积累起来,其总和将是相当可观的。凡事在事业上有所成就的人,几乎都是能有效地利用零碎时间的人。习惯10、废除拖延对于一名高效能人士来説,拖延是最具破坏性的,它是一种最危险的恶习,它使人丧失进取心。一旦开始遇事推托,就很容易再次拖延,直到变成一种根深崹蒂固的习惯。习惯11、向竞争对手学习一位知名的企业家曾经说过,“ 对手是一面镜子,可以照见自己的缺陷。如果没有了对手,缺陷也不会自动消失。对手,可以让你时刻提醒自己:没有最好的,只有更好。”习惯12、善于借助他人力量年轻人要成就一番事业,养成良好的合作习惯是不可少的,尤其是在现代职场中,靠个人单打独斗的时代已经过去了,只有同别人展开良好的合作,才会使你的事业更加顺风顺水。如果你要成为一名高效能的职场人士,就应当养成善于借助他人力量的好习惯。习惯13、换位思考在人际的相处和沟通里,“换位思考”扮演着相当重要的角色。用“换位思考”指导人的交往,就是让我们能够站在他人的立场上,设身处地理解他人的情绪,感同身受地明白及体会身边人的处境及感受,并且尽可能地回应其需要。树立团队精神一个真正的高效能人士,是不会依仗自己业务能力比别人更优秀而傲慢地拒绝合作,或者合作时不积极,倾向于一个人孤军奋战。他明白在一个企业中,只有团队成功,个人才能成功。善于休息休息可以使一个人的大脑恢复活力,提高一个人的工作效能。身处激烈的竞争之中,每一个人如上紧发条的钟表.因此,一名高效能人士应当注意工作中的调节与休息,这不但于自己健康有益,对事业也是大有好处的。及时改正错误一名高效能人士要善于从批评中找到进步的动力.批评通常分为两类,有价值的评价或是无理的责难.不管怎样,坦然面对批评,并且从中找寻有价值、可参考的成分,进而学习、改进、你将获得意想不到的成功。责任重于一切著名管理大师德鲁克认为,责任是一名高效能工作者的工作宣言.在这份工作宣言里,你首先表明的是你的工作态度:你要以高度的责任感对待你的工作,不懈怠你的工作、对于工作中出现的问题能敢于承担.这是保证你的任务能够有效完成的基本条件。不断学习一个人,如果每天都能提高1%,就没有什么能阻挡他抵达成功.成功与失败的距离其实并不遥远,很多时候,它们之间的区别就在于你是否每天都在提高你自己;如果你不坚持每天进步1%的话,你就不可能成为一名高效能人士.让工作变得简单简单一些,不是要你把事情推给别人或是逃避责任,而是当你焦点集中很清楚自己该做那些事情时,自然就能花更小的力气,得到更好的结果.重在执行执行力是决定一个企业成败的关键,同时也是衡量一个人做事是否高效的重要标准.只做适合自己的事找到合适自己的事,并积极地发挥专长,成为行业的能手,是高效能人士应当努力追求的一个目标.把握关键细节精细化管理时代已经到来,一个人要成为一名高效能人士,必须养成重视细节的习惯.做好小事情既是一种认真的工作态度,也是一种科学的工作精神.一个连小事都做不好的人,绝不可能成为一名高效能人士.不为小事困扰我们通常都能够面对生活中出现的危机,但却常常被一些小事搞得垂头丧气,整天心情不快,精神忧闷紧张。一名高效能人士应当及时摆脱小事困扰,积极地面对工作和生活。专注目标美国明尼苏达矿业制造公司(3M)的口号是:写出两个以上的目标就等于没有目标.这句话不仅适用于公司经营,对个人工作也有指导作用。有效沟通人与人之间的交往需要沟通,在公司,无论是员工于员工员工于上司员工与客户之间都需要沟通.良好的沟通能力是工作中不可缺小的,一个高效能人士绝不会是一个性格孤僻的人,相反他应当是一个能设身处地为别人着想充分理解对方能够与他人进行桌有成效的沟通的人。及时化解人际关系矛盾与人际交往是一种艺术,如果你曾为办公室人际关系的难题而苦恼,无法忍受主管的反复无常,看不惯主管的假公济私,那么你要尝试学习如何与不同的人相处,提高自己化解人际矛盾的能力。积极倾听西方有句谚语说:“上帝给我们两只耳朵,却只给了一张嘴巴。”其用意也是要我们小説多听。善于倾听,是一个高效能人士的一项最基本的素质。保持身体健康充沛的体力和精力是成就伟大事业的先决条件。保持身体健康,远离亚健康是每一名高效能人士必须遵守的铁律。杜绝坏的生活习惯 习惯有好有坏。好的习惯是你的朋友,他会帮助你成功。一位哲人曾经説过:“好习惯是一个人在社交场合中所能穿着最佳服饰。”而坏习惯则是你的敌人,他只会让你难堪、丢丑、添麻烦、损坏健康或事业失败。释放自己的忧虑孤独和忧虑是现代人的通病。在纷繁复杂的现代社会,只有保持内心平静的人,才能保证身体健康和高效能的工作。合理应对压力身体是革命的本钱,状态是成功的基础。健康,尤其是心理健康,已成为职场人士和企业持续发展的必备保障。学会正确地应对压力就成了高效能人士必备的一项习惯。掌握工作与生活的平衡真正的高效能人士都不是工作狂,他们善于掌握工作与生活平衡。工作压力会给我们的工作带来种种不良的影响,形成工作狂或者完美主义等错误的工作习惯,这会大大地降低一个人的工作绩效。及时和同事及上下级交流工作正确处理自己与上下级各类同事的关系,及时和同事、上下级交流工作,是高效能人士的一项重要习惯。做到上下逢源,正确处理“对上沟通”,与同事保持良好的互动交流是我们提高工作效能的一个关键。注重准备工作一个善于做准备的人,是距离成功最近的人。一个缺乏准备的员工一定是一个差错不断的人,纵然有超强的能力,千载难逢的机会,也不能保证获得成功。守时如果你想成为一名真正的高效能人士,就必须认清时间的价值,认真计划,准时做每一件事。这是每一个人只要肯做就能做到的,也是一个人走向成功的必由之路。高效地搜集并消化信息当今世界是一个以大量资讯作为基础来开展工作的社会。在商业竞争中,对市场信息尤其是市场关键信息把握的及时性与准确性,对竞争的成败有着特殊的意义。一个高效能人士应当对事物保持敏感,这样才能在工作中赢得主动。重完善自己的人际关系网人际能力在一个人的成功中扮演着重要的角色。成功学专家拿破仑.希尔曾对一些成功人士做过专门的调查。结果发现,大家认同的杰出人物,其核心能力并不是他的专业优势,相反,出色的人际策略却是他们成功的关键历练说话技巧有人说:“眼睛可以容纳一个美丽的世界,而嘴巴则能描绘一个精彩的世界。”法国大作家雨果也说:“语言就是力量。”的确,精妙、高超的语言艺术魅力非凡,世界上欧美等发达国家把“舌头、金钱、电脑”并列为三大法宝,口才披公认为现代职场人士必备素质之一。一名高效能人士的好口才加上礼仪礼节,往往可以为自己的工作锦上添花,如果我们能够巧妙运用语言艺术,对协调人际关系、提高工作效能都将大有裨益。善于集思广益、博采众议一件事物往往存在着多个方面,要想全面、客观地了解一个事物,必须兼听各方面的意见,只有集思广益,博采众长,才能了解一件事情的本来面目,才能采取最佳的处理方法。因此,一名高效能人士要时常以“兼听则明,偏听则暗”的谏言提醒自己,多方地听取他人的意见,以确保自己能够做出正确的决定。善于授权善于授权,举重若轻才是管理者正确的工作方式:举轻若重,事必躬亲只会让自己越陷越深,把自己的时间和精力浪费于许多毫无价值的决定上面。制订却实可行的计划许多成功人士的成功经验告诉我们,认真的做一份计划不但不会约束我们,还可以让我们的工作做得更好。当然,同许多其他重要的事情一样,执行计划并不是一件简单容易的事。如果你约束自我,实现了自己制定的计划,你就一定会成为一个卓有成效的高效能人士。经常和成功人士在一起心理学研究表明,环境可以让一个人产生特定的思维习惯,甚至是行为习惯。环境能够改变我们的思维与行为习惯,直接影响到我们的工作效能与生活。和成功人士在一起,有助于我们在身边形成一个“成功”的氛围,在这个氛围中我们可以向身边的成功的人士学习正确的思维方法,感受他们的热情,了解并掌握他们处理问题的方法。有效决策 一个好的决策思想,不是限期完成的,而是在反复思考、不断推敲的过程中,在相关事物或其他活动中受启发顿悟而产生和迸发出来的。一个高效的决策者的价值在于“做正确的事”,同时帮助各管理层的主管“把事情做正确”,把决策落实。到困难找方法一个高效能人士,是最重视找方法的人。他们相信凡事都会有方法解决,而且是总有更好的方法。不被琐务缠身高效能人士不会被太多的琐务缠身。其含义主要是说高效能人士要充分重视时间的价值,不浪费时间会做那些不值得去做的事情。及时走出失败高效能人士不会让自己永远徘徊在失败的阴影之下。相反他们总是把所有的“失败”都看作“尚未成功”在遭遇一次次失败的时候,他们会始终以一种积极的心态来面对。不论多么困难,他们都要鼓励自己再试一次。保持一颗平常心无伦做事还是做人,除了要善于抓住时机,懂得运用必要的技巧之外,还需要保持一颗平常人的心态。这种平常心,对于一名高效能人士来讲,是十分重要的。给人留下好的第一印象外表漂亮的人更受人欢迎,更容易获得他人的青睐,这就是“光环效应”的作用。一个人的某一品质被认为是好的,他就被一种积极的光环所笼罩,从而也被赋予其他好的品质;如果一个人的某一品质被认为是坏的,他就被一种消极的光环所笼罩,并被赋予其他不好的品质。拥有双赢思维对于职场人士来讲,这种双赢的本质是有感染力的。如果你在工作中是一个人心胸开阔、乐于帮助别人成功和愿意与他人分享荣誉的人的话,那么你就不愁没有朋友。如果你的周围充满了对你的成功感兴趣而又希望你成功的人,你在工作中就会充满与别人合作的热情。这对你工作绩效的提高很有帮助。追求绰约,超越自我追求完美不仅是一种重要的工作态度,也是一种重要的生活标准,是我们工作效能和生活质量的重要保证。一个满足于现状、不思进取的人永远也无法成为一名高效能人士。袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈