




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
3企業(yè)語(yǔ)音管理系(VisualC++6.0+語(yǔ)音卡+Access2000實(shí)現(xiàn) 模塊的學(xué)習(xí),讀者完全可以掌握使用VisualC++語(yǔ)言開(kāi)發(fā)語(yǔ)音卡的技術(shù)。 隨著市場(chǎng)競(jìng)爭(zhēng)的日益激烈,各個(gè)企業(yè)都想盡辦法完善對(duì)客戶的服務(wù),客戶服務(wù)便是企業(yè)推為了避免這種情況的發(fā)生,需要對(duì)所有的客戶都,通過(guò)可以更好地了解客戶的需求,也以避免員工在工作中出現(xiàn)差錯(cuò)。企業(yè)的客戶服務(wù)是公司指派若干經(jīng)過(guò)培訓(xùn)的業(yè)務(wù)專(zhuān)門(mén)負(fù)責(zé)客戶的訂購(gòu)、咨詢(xún)與,客戶只需撥通指定的就可以與業(yè)務(wù)直接交談。這種服務(wù)方式可以充分利用業(yè)務(wù)的專(zhuān)長(zhǎng),因而在提高工作效率的同時(shí)大大地提高了顧務(wù)質(zhì)量。然而,隨著業(yè)務(wù)量的不斷擴(kuò)大,客戶的數(shù)量和需求也越來(lái)越大,在信息量不斷增加的時(shí)候,業(yè)務(wù)的工作就會(huì)或多或少地出現(xiàn)問(wèn)題。為了解決這些問(wèn)題,可以通過(guò)企業(yè)語(yǔ)音管理系統(tǒng)將客戶的都錄下來(lái)進(jìn)行管理,以避免發(fā)生人為的記 提供撥出功能,可以通過(guò)程序撥出 提供客戶管理功能,記錄,并可以在撥出時(shí)以簿的形式顯示客戶 提供功能,當(dāng)接通時(shí)開(kāi)始,當(dāng)掛斷時(shí)結(jié)束 提供管理功能,可以通過(guò)程序修改文件的位置 企業(yè)語(yǔ)音管理系統(tǒng)的功能結(jié)構(gòu)圖如圖3.1所示企企 語(yǔ) 3.1企業(yè)語(yǔ)音管理系統(tǒng)的登錄模塊如圖3.2所示,該模塊用于員工登錄系統(tǒng);企業(yè)語(yǔ)音管理系統(tǒng)的主窗口如圖3.3所示,系統(tǒng)主窗口用于進(jìn)行撥出與來(lái)電顯示等相關(guān)操作。圖3.2登錄模 圖3.3主窗管理模塊如圖3.4所示,該模塊用于管理所有的文件;員工信息管理模塊如3.5 圖3.4管理模 圖3.5員工信息管理模企業(yè)語(yǔ)音管理系統(tǒng)的業(yè)務(wù)流程圖如圖3.6所示戶工息、接入信息和的管理,這些信息都保存在數(shù)據(jù)庫(kù)中,可以通過(guò)修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)來(lái)對(duì)這些信息進(jìn)行管理。本系統(tǒng)采用Access2000數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名稱(chēng)為db_database,在數(shù)據(jù)庫(kù)中創(chuàng)建6張表用于各種不同信息,如圖3.7所示。戶工電去電去來(lái)話電電錄管管音理理管理圖3.6業(yè)務(wù)流程 圖3.7數(shù)據(jù)庫(kù)中的根據(jù)前面介紹的需求分析和系統(tǒng)設(shè)計(jì)規(guī)劃出本系統(tǒng)中使用的數(shù)據(jù)庫(kù)實(shí)體對(duì)象,分別為員工實(shí)體、的R圖。 工、工、信息。員工實(shí)體E-R圖如圖3.8所示。工、工、 密密員號(hào)客圖3.8員工實(shí)體E-R 圖3.9客戶實(shí)體E-R 撥出實(shí)產(chǎn)產(chǎn)圖3.10產(chǎn)品實(shí)體E-R 圖3.11撥出實(shí)體E-R 接入實(shí) 圖3.12接入實(shí)體E-R 圖3.13實(shí)體E-R tb_employees(員工信息表 (表圖3.14員工信息 圖3.15 tb_phoneout(撥出表?yè)艹霰碛糜诒4嫫髽I(yè)向客戶撥出的記錄信息,如圖3.17所示圖3.16產(chǎn)品信息 圖3.17撥出 tb_phonein(接入表 圖3.18接入 圖3.19classCBaseButton:public{classCBaseButton:public{UINTDownPic=IDB_BUT_DOWN);UINT UINT UINT bool //是否在CBaseButton::CBaseButton(UINTCBaseButton::CBaseButton(UINTNomalPic,UINTMovePic,UINT{m_DownPic m_NomalPic m_MovePic=MovePic; m_IsInRect=false; }{}Drawit函數(shù)用來(lái)將位圖繪制到按鈕的背景上boolboolCBaseButton::Drawit(CDC*pDC,UINT{CDC????CBitmapbitmap;return}
patibleDC:創(chuàng)建一個(gè)和指定設(shè)備上下文相兼容的內(nèi)存設(shè)備上下文SelectObject:選擇GDI對(duì)象。DrawItem函數(shù)用來(lái)繪制按鈕的顯示文本voidvoidCBaseButton::DrawItem(LPDRAWITEMSTRUCT{CDC*pDC=CDC::FromHandle(lpDrawItemStruct //將HDC句柄轉(zhuǎn)換為UINTstate=lpDrawItemStruct->itemState;focRect.left=rect.left+3;focRect.right=rect.right-3;focRect.top=rect.top+3;pDC-CString{ pDC }{{pDC-}{pDC-}}{ lpDrawItemStruct->itemAction=ODA_FOCUS;}pDC-}SetBkModeSetTextColorDrawText在PreTranslateMessage虛函數(shù)中截獲Enter鍵按下和抬起的消息,將消息改為鼠標(biāo)左鍵按下和抬BOOLBOOLCBaseButton::PreTranslateMessage(MSG*{ {pMsg->lParam=pMsg->message }if(pMsg->hwnd==this->GetSafeHwnd()&&pMsg->message==WM_KEYUP&&pMsg- {pMsg->lParam=pMsg->message }return}voidCBaseButton::OnTimer(UINT{CPointpoint;CRectrcWnd;{
//判斷鼠標(biāo)是移動(dòng)到按鈕上還是一直在按鈕gotogoto{this-}}{gotoEND;{}} }在PreSubclassWindow方法中設(shè)置定時(shí)器voidvoid{}企業(yè)語(yǔ)音管理系統(tǒng)的主窗體效果如圖3.20所示圖3.20企業(yè)語(yǔ)音管理系統(tǒng)的主窗啟動(dòng)VisualC++6.0,選擇File/New命令,打開(kāi)New框。在New框左方的列表視圖中選擇MFCAppWizard(exe)選項(xiàng),在Projectname文本框中輸入工程名稱(chēng),在Location文本框中設(shè)置工程保存的路徑,如圖3.21所示。圖3.21New單擊OK按鈕進(jìn)入MFCAppWizard-Step1框,選中Dialogbased單選按鈕,如圖圖3.22MFCAppWizard-Step1在工作區(qū)窗口的ResourceViewInsert命令,彈出InsertResource框,如圖3.23所示。選擇選項(xiàng),單擊New按鈕創(chuàng)建菜單資源,在ResourceView視圖中雙擊新創(chuàng)建的菜單資源,編輯菜單資源如圖3.24所示。圖3.23InsertResource 圖3.24菜單資打開(kāi)主窗體的屬性窗口,將主窗體標(biāo)題設(shè)置為“企業(yè)語(yǔ)音管理系統(tǒng)”,在組合框中選擇菜單資源IDR_1,使程序運(yùn)行時(shí)顯示編輯的菜單。編輯框控件和9個(gè)按鈕控件,各控件的屬性設(shè)置如表3.1所示。3.1無(wú)CStringView:Report、Singleselection、Nolabelwrap CListCtrl無(wú)CComboBox選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton將NewSig.hNewSig.libdjcvt.hdjcvt.libTc08a32.hTc08a32.lib6個(gè)文件添加到當(dāng)前工typedeftypedefstruct{ CStringCallerID; }enumenum{CH_ 在框的OnInitDialog方法中初始化語(yǔ)音卡,并為列表視圖控件設(shè)置標(biāo)題信息,向列表BOOLBOOL{MessageBox("加載驅(qū)動(dòng)程序錯(cuò)誤m_ChanelCountCheckValidCh(); m_Grid.SetExtendedStyle( | | | |LVS_EX_GRIDLINES m_Grid.InsertColumn(0,"通道號(hào)",LVCFMT_LEFT,100,0); m_Grid.InsertColumn(4,"流程狀態(tài) m_pLines=newLINESTRUCT[m_ChanelCount];CStringconvert;for(inti=0;i<m_ChanelCount;{WORDtype=CheckChType(i); =CH_ m_pLines[i].IsReceiving=FALSE; =type; {case0:{convert內(nèi)線";}case1:{convert="外線";}case2:{{}}}return}Sig_Init效。本函數(shù)必須在初始化函數(shù)EnableCard成功之后調(diào)用才有效。0.35秒,寫(xiě)為SetDialPara(1000,4000,350,7)。voidvoidCPhoneRecordDlg::OnTimer(UINT{??CStringstr;BOOLbOffHook=FALSE;{{}{if(m_pLines[i].IsReceiving=={m_pLines[i].IsReceiving=}???//初始化某路的Caller-ID緩沖}}if(m_pLines[i].State=={)m_Grid.SetItemText(i,4,"空閑}}} YFeedSigFunc:維持?jǐn)嗬m(xù)及信號(hào)音的函數(shù),需在程序大循環(huán)中調(diào)用StartSigCheck:某路開(kāi)始新的信號(hào)音檢測(cè)。一般在摘機(jī)或者后,調(diào)用本函數(shù)來(lái)開(kāi)始新的信號(hào)音檢測(cè)StartTimer:某通道啟動(dòng)一個(gè)計(jì)時(shí)器,不ClockType為0~2的計(jì)時(shí)器voidvoidCPhoneRecordDlg::ReadNumber(WORD{intresult; if((result==3)||{m_CurNumber=number;m_pLines[nID].CallerID=m_pLines[nID].State= m_CurTime=CTime::GetCurrentTime().Format("%Y-%m-%d%H:%M:%S"); }}在WM_TIMER的大循環(huán)中判斷哪一路通道有來(lái)電信號(hào)并進(jìn)行摘機(jī),在摘機(jī)時(shí)開(kāi)始錄if(m_pLines[i].Stateif(m_pLines[i].State=={m_Grid.SetItemText(i,4,"檢測(cè)信號(hào)音m_Grid.SetItemText(i,2,"m_Grid.SetItemText(i,2,"來(lái)電是:"+m_RecordNum=2;m_IsBusy=TRUE;}添加自定義函數(shù)Record,該函數(shù)用于開(kāi)始,并在內(nèi)存空間滿時(shí)結(jié)束保存成文voidvoidCPhoneRecordDlg::Record(WORD{CStringCTimetime=if(ReadCheckResult(num,RECORD_CHECK)!={if(m_IsOffHook=={CTimetime=sql.Format("select*fromtb_recordwhereYEAR(錄制時(shí)間%dandMONTH(錄制時(shí)間=%dandDAY(錄制時(shí)間)=%d",atoi(time.Format("%Y")),atoi(time.Format("%m")), ADOConnm_AdoConn; m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql); {while(!m_AdoConn.m_pRecordset-{ }CStringss=snum.Left(snum.GetLength()-4); } //當(dāng)天第一 文件編 name+=m_IsOffHook=StartRecordFile(num,file.GetBuffer(0),60*}}}{CStringnamefile;namefile=m_RecordFile.Left(m_RecordFile.GetLength()-CStringstr1 str2="f:\\"+namefile; ADOConnm_AdoConn; sql.Format("insertintotb_record(文件名稱(chēng),文件路徑,錄制時(shí)間)values\('%s','%s','%s')",m_RecordFile,"f:\\",time.Format("%Y-%m-%d%H:%M:%S")); }}if(m_IsBusyif(m_IsBusy=={== //判斷是{CStringm_IsOffHook=CStringnamefile;CStringstr1,str2;str1="f:\\"+m_RecordFile; str2="f:\\"+namefile; ADOConnm_AdoConn; sql.Format("insertintotb_record(文件名稱(chēng),文件路徑,錄制時(shí)間)values\('%s','%s','%s')",m_RecordFile,"f:\\",time.Format("%Y-%m-%d%H:%M:%S"));//設(shè)置SQL語(yǔ)句 m_IsBusy=FALSE;m_pLines[i].CallerID=""; =m_pLines[i].StateCH_ }}添加自定義函數(shù)AddToDataBase,該函數(shù)判斷當(dāng)前通道是接入還是撥出,根據(jù)不同的結(jié)果將文件信息保存到不同的數(shù)據(jù)表中。代碼如下:{CStringsql,number,strname;ADOConnm_AdoConn;//ADOConn對(duì)sql.Format("select*from ='m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql); {strname=(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("客戶名稱(chēng) //獲取客戶名}if(m_RecordNum==1){sql.Format("insertintotb_phoneout(客戶名稱(chēng),去電號(hào)碼,去電時(shí)間,洽談內(nèi)容)values\ }elseif(m_RecordNum=={sql.Format("insertintotb_phonein(客戶名稱(chēng),來(lái)電號(hào)碼,來(lái)電時(shí)間,洽談內(nèi)容)values\ } } ,當(dāng)按鈕按下時(shí)撥出編輯框中的。代碼如下voidvoid{CStringm_Number=number;intret {}m_pLines[m_CurChanel].State=}在WM_TIMER的大循環(huán)中判斷撥出后對(duì)方是否進(jìn)行摘機(jī),在對(duì)方摘機(jī)時(shí)開(kāi)始錄{case{if(CheckSendEnd(i)==1){m_pLines[i].State=}}case{intsig=if(sig=={m_pLines[i].State=}elseif(sig=={m_pLines[i].State=}elseif(sig=={m_pLines[i].State=}elseif(sig=={{m_pLines[i].State=}elseif(sig=={m_pLines[i].State=}}case{m_RecordNum=1;m_IsBusy=TRUE;}casecaseCH_BUSY:{}} voidvoid{if(m_RecordNum=={CStringm_IsOffHook=TRUE;CStringCStringstr1,str2;str1="f:\\"+m_RecordFile; str2="f:\\"+namefile; ADOConnm_AdoConn; sql.Format("insertintotb_record(文件名稱(chēng),文件路徑,錄制時(shí)間)values\('%s','%s','%s')",m_RecordFile,"f:\\",time.Format("%Y-%m-%d%H:%M:%S")); //執(zhí)行SQL語(yǔ) }}m_pLines[m_CurChanel].State=CH_m_RecordNum=-1; }GetCurrentTime:獲得系統(tǒng)當(dāng)前時(shí)PcmtoWave:把A-LawPCM文件轉(zhuǎn)換為線性PCM,8000Hz、16bit、單聲道Wave文件。來(lái)電管理模塊用于管理接收到的客戶信息,可進(jìn)行回?fù)?。?lái)電管理模塊如圖3.25所示。在來(lái)電管理模塊中可以對(duì)來(lái)電進(jìn)行回?fù)?,在撥出電_al
3.25 intWINAPISig_StartDial(WORDwChNo,char*DialNum,char*PreDialNum,WORD 3.2Sig_StartDial 本模塊使用的數(shù)據(jù)表:tb_phonein3.3View:Report、Singleselection、Nolabelwrap ClistCtrl無(wú)CComboBox無(wú)CComboBoxCBaseButtonCBaseButtonCBaseButtonBOOLBOOL{||||LVS_EX_GRIDLINESreturnTRUE;}添加自定義函數(shù)AddToGrid,在該函數(shù)中查詢(xún)tb_phoneinvoidvoid{ADOConnm_AdoConn;CStringsql;sql.Format("select*fromtb_phonein//ADOConn對(duì)inti=0;while(!m_AdoConn.m_pRecordset-{//設(shè)置SQL語(yǔ)//根據(jù)SQL語(yǔ)句進(jìn)行查m_Grid.SetItemText(i,0,(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("客戶名稱(chēng) } }處理“查詢(xún)字段”組合框的CBN_SELCHANGE,在該的處理函數(shù)中根據(jù)選擇的voidvoid {CStringstr;ADOConnm_AdoConn;CStringsql.Format("select%sfromtb_phonein//ADOConn對(duì)//設(shè)置SQL語(yǔ)m_AdoConn.m_pRecordset= //根據(jù)SQL語(yǔ)句進(jìn)行查inti=0;while(!m_AdoConn.m_pRecordset-{ } }ResetContentGetLBTextSetCurSelvoidvoid{ CStringfield,content; ADOConnm_AdoConn; CStringsql;sql.Format("select*fromtb_phoneinwhere%slike'%s%s%s'",field,"%",content,"%"); m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql); inti=0;while(!m_AdoConn.m_pRecordset-{ //向列表 } }voidvoid{intpos=m_Grid.GetSelectionMark();{}}voidvoid{if(pos<0){}ADOConnCStringsql;//ADOConn對(duì)sql.Format("deletefromtb_phoneinwhere客戶名稱(chēng)= //設(shè)置SQL語(yǔ) //刪除列 //重新向列表中插入}voidvoidCPhoneRecordDlg::Record(WORD{CStringCTimetime=if(ReadCheckResult(num,RECORD_CHECK)!={if(m_IsOffHook=={CTimetime=sql.Format("select*fromtb_recordwhereYEAR(錄制時(shí)間%dandMONTH(錄制時(shí)間=%dandDAY(錄制時(shí)間)=%d",atoi(time.Format("%Y")),atoi(time.Format("%m")), ADOConnm_AdoConn; m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql); {while(!m_AdoConn.m_pRecordset-{snum=(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("文件名稱(chēng)");//獲取文件m_AdoConn.m_pRecordset-m_AdoConn.m_pRecordset-}CStringss=snum.Left(snum.GetLength()- } name+=m_IsOffHook=StartRecordFile(num,file.GetBuffer(0),60*}}{CStringnamefile;CStringstr1,str2;str1 str2="f:\\"+namefile; ADOConnm_AdoConn; sql.Format("insertintotb_record(文件名稱(chēng),文件路徑,錄制時(shí)間)values\('%s','%s','%s')",m_RecordFile,"f:\\",time.Format("%Y-%m-%d%H:%M:%S")); }}在上面的代碼中通過(guò)ReadCheckResult函數(shù)判斷對(duì)方是否,但是沒(méi)有成功,在這里可以使用測(cè)到忙音。直接在定時(shí)器中調(diào)用Sig_CheckBusy函數(shù),修改后的代碼如下:if(m_IsBusyif(m_IsBusy=={{CStringCStringnamefile;CStringstr1,str2;str1="f:\\"+m_RecordFile; str2="f:\\"+namefile; ADOConnm_AdoConn; sql.Format("insertintotb_record(文件名稱(chēng),文件路徑,錄制時(shí)間('%s','%s','%s')",m_RecordFile,"f:\\",time.Format("%Y-%m-%d //設(shè)置SQL語(yǔ)m_IsBusy=FALSE;m_pLines[i].CallerID="";//執(zhí)行SQL語(yǔ) m_pLines[i].State }} 圖3.26所示。圖 MoveFile方法用于實(shí)現(xiàn)在不同文件夾下移動(dòng)文件,相當(dāng)于系統(tǒng)中的剪切命令。 BOOLMoveFile(LPCTSTRlpExistingFileName,LPCTSTRlpNewFileName lpExistingFileName:指向源文件名的字符 lpNewFileName:指向目標(biāo)文件名的字符在管理模塊中還可以刪除文件,通過(guò)調(diào)用DeleteFile方法實(shí)現(xiàn)。DeleteFile方法用于 BOOLDeleteFile(LPCTSTRlpFileName lpFileName:指向?qū)⒁獎(jiǎng)h除文件名的字符MCI控制接口可以通過(guò) 文件的功能。MCI消息指令如表3.4所示。3.4MCI —MCI_—設(shè)置在屏幕上顯示的VCR設(shè)備的索 MCI_y決定對(duì)VCR設(shè)備是否進(jìn)行時(shí)間設(shè)獲取MCI系統(tǒng)信回滾copy、cut、delete、undo、paste等操M(fèi)CI_UN
mand(MCIDEVICEIDIDDevice,UINT表 設(shè)備ID 3.7.3管理實(shí)現(xiàn)過(guò)本模塊使用的數(shù)據(jù)表:tb_record3.6View:Report、Singleselection、Nolabelwrap ClistCtrlCString無(wú)CString選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton 選擇Ownerdraw屬CBaseButton 并通過(guò)自定義函數(shù)AddToGrid將數(shù)據(jù)庫(kù)中的數(shù)據(jù)添加到列表視圖控件中。代碼如下:BOOL{
m_Grid.InsertColumn(2,"錄制時(shí)間 return}添加自定義函數(shù)AddToGridtb_record表中的來(lái)電信息,并將查詢(xún)的結(jié)果voidvoid{ADOConnm_AdoConn;CStringsql;sql.Format("select*fromtb_record//ADOConn對(duì)inti=0;while(!m_AdoConn.m_pRecordset-{//設(shè)置SQL語(yǔ)//根據(jù)SQL語(yǔ)句進(jìn)行查m_Grid.SetItemText(i,0,(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("文件名稱(chēng) } }voidvoidCRecordDlg::OnClickList1(NMHDR*pNMHDR,LRESULT*{intpos m_Name=m_Grid.GetItemText(pos,0); m_Path=m_Grid.GetItemText(pos,1); *pResult=}voidvoid{if(m_Name.IsEmpty())//{}}CStringstrText;BROWSEINFObi;bi.hwndOwner==//BROWSEINFO//HWND_T("請(qǐng)選擇備份文件夾yName===={ReturnPach=szPath;}{ReturnPach }strText=ReturnPach;{strText+=}{ADOConn //ADOConn CStringsql;sql.Format("updatetb_recordset文件路徑='%s'where文件名稱(chēng)='%s'",strText,m_Name); m_Path=strText;}} void {{{}{ADOConnCStringsql;//ADOConnsql.Format("deletefromtb_recordwhere文件名稱(chēng)='%s'",m_Name);//設(shè)置SQL }} voidvoid {{}MCIDEVICEIDm_nDeviceID;MCIDEVICEIDm_nElementID;mciOpenParms.lpstrDeviceType=(LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;//設(shè)置設(shè)備類(lèi)mand(NULL,MCI_OPEN,MCI_OPEN_TYPE||MCI_WAIT,(DWORD)(LPVOID)&mciOpenParms); MCI_OPEN_PARMSmciOpen;mciOpen.lpstrElementName=m_Path+m_Name; Y_PARMS y.dwCallback=(DWORD)this-
Y_PARMS結(jié)構(gòu)變 }3.7.4voidvoid{{}ADOConnm_AdoConn;CStringsql;sql.Format("deletefromtb_recordwhere文件名稱(chēng)='%s'",m_Name);//ADOConn對(duì)//設(shè)置SQL語(yǔ)//執(zhí)行SQL語(yǔ) //清空列 //重新向列表中插入 }從上面的代碼中可以發(fā)現(xiàn),不件刪除是否成功,都會(huì)從數(shù)據(jù)庫(kù)中將記錄刪除。為了解決這一voidvoid{{}{ADOConnCString//ADOConn對(duì)sql.Format("deletefromtb_recordwhere文件名稱(chēng)='%s'",m_Name);//設(shè)置SQL }MessageBox("刪除失敗}員工信息管理模塊用于記錄員工的基本信息,并對(duì)員工登錄程序的用戶名和等信息進(jìn)行管理。員工信息管理模塊如圖3.27所示。
3.27voidvoid{{_bstr_t AccessDriver}{}}在ADOConn類(lèi)中ExitConnect方法用來(lái)關(guān)閉記錄集和斷開(kāi)數(shù)據(jù)庫(kù)連接。代碼如下voidvoid{}本模塊使用的數(shù)據(jù)表:tb_employees(1)IDIDD_EMPLOYEES_DIALOG,將框標(biāo)題設(shè)置為“員工信息管理”3.7 ClistCtrl無(wú)CComboBox無(wú)CString無(wú)CString無(wú)CString無(wú)CString無(wú)CString無(wú)CString無(wú)CString無(wú)CString選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButtonCImageListCImageList BOOLBOOL{m_ImageList.Add(AfxGetApp()- GetDlgItem(IDC_EDIT1)- return}voidvoid{ADOConnm_AdoConn;CStringsql;sql.Format("select員工編號(hào),//ADOConn對(duì)m_AdoConn.m_pRecordset=inti=while(!m_AdoConn.m_pRecordset-{CString//設(shè)置SQL語(yǔ)//根據(jù)SQL語(yǔ)句進(jìn)行查strId=(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("員工編號(hào) //獲得員工編strName=(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("員工 ");//獲得員工str=strId+""+strName; } }voidvoid{GetDlgItem(IDC_EDIT1)- }void{void{if(m_Id.IsEmpty()if(m_Id.IsEmpty()||m_Name.IsEmpty()||m_UserName.IsEmpty()||||m_Culture.IsEmpty()||m_IdCard.IsEmpty()||m_Phone.IsEmpty()||{MessageBox("} ADOConnm_AdoConn;CStringsql;sql.Format("insertintotb_employees(用戶名//ADOConn,員工學(xué)歷號(hào) ,備注信息) ,m_Culture,m_IdCard,m_Phone,m_Remark);//設(shè)置SQL語(yǔ)句BOOLres=m_ADOConn.ExecuteSQL((_bstr_t)sql); MessageBox("保存成功MessageBox("保存失敗 }處理列表視圖控件的NM_CLICK,選擇列表控件中的選項(xiàng)時(shí)將根據(jù)員工編號(hào)進(jìn)行查詢(xún),voidvoidCEmployeeDlg::OnClickList1(NMHDR*pNMHDR,LRESULT*{????intpos=m_List.GetSelectionMark();num=strid.Find("",0);m_Id=ADOConnCStringsql;//ADOConn對(duì)sql.Format("select*fromtb_employeeswhere員工編號(hào) //設(shè)置SQL語(yǔ)m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql); { m_UserName(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("用戶名m_Password=(char*)(_bstr_t)m_AdoConn.m_pRecordset- ");//m_Culture=(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("員工學(xué)歷 m_IdCard=(char*)(_bstr_t)m_AdoConn.m_pRecordset- 號(hào) //獲 m_Remark=(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("備注信息m_.SetWindowText((char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("員} } *pResult=GetSelectionMarkGetItemTextFindvoidvoid{if(m_Id.IsEmpty()||m_Name.IsEmpty()||m_UserName.IsEmpty()||||m_Culture.IsEmpty()||m_IdCard.IsEmpty()||m_Phone.IsEmpty()||{MessageBox("員工信息不能為空} ADOConnm_AdoConn;CStringsql;sql.Format("updatetb_employeesset用戶名 //ADOConn對(duì)='%s',='%s',員工學(xué)歷 號(hào) ,m_Culture,m_IdCard,m_Phone,m_Remark,m_Id);//設(shè)置SQLMessageBox("修改成功//執(zhí)行SQL語(yǔ) } voidvoid{if(m_Id.IsEmpty(){MessageBox("}ADOConnCStringsql;//ADOConnsql.Format("deletefromtb_employeeswhere員工編號(hào) //設(shè)置SQL語(yǔ)BOOLres=m_ADOConn.ExecuteSQL((_bstr_t)sql); MessageBox("刪除成功MessageBox("刪除失敗 }管理模塊如圖3.28所示。3.28在使用產(chǎn)品信息管理模塊時(shí),需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,在執(zhí)行操作時(shí)要使用SQL語(yǔ)句,執(zhí)行SQL語(yǔ)句的功能被封裝在ADOConn類(lèi)中,GetRecordSet方法通過(guò)SQL語(yǔ)句進(jìn)行查詢(xún),并返回查詢(xún)結(jié)_RecordsetPtr&_RecordsetPtr&ADOConn::GetRecordSet(_bstr_t{{m_pRecordset.CreateInstance( }catch(_com_error{}return}BOOLBOOLADOConn::ExecuteSQL(_bstr_t{{ //執(zhí)行SQL語(yǔ)return //返回真}catch(_com_error{return }}本模塊使用的數(shù)據(jù)表:tb_manufacture(1)IDIDD_MANUFACTURE_DIALOG,將框標(biāo)題設(shè)置為“產(chǎn)品信息管理”3.8View:Icon、Singleselection ClistCtrlCString無(wú)CString選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton選擇Ownerdraw屬CBaseButton CImageList BOOLBOOL{m_ImageList.Add(AfxGetApp()- returnTRUE;}voidvoid{ADOConn//ADOConn對(duì)CStringsql;sql.Format("select產(chǎn)品名稱(chēng)fromtb_manufacture");inti=0;while(!m_AdoConn.m_pRecordset-{//設(shè)置SQL//根據(jù)SQLm_List.InsertItem(i,(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("產(chǎn)品名稱(chēng) }m_AdoConn.ExitConnect();//}voidvoid{m_Name="";m_Intro=}void{if(m_Name.IsEmpty()||{MessageBox("產(chǎn)品信息不能為空}ADOConnCStringsql;//ADOConn對(duì)sql.Format("insertintotb_manufacture(產(chǎn)品名稱(chēng),產(chǎn)品介紹)values('%s','%s')",m_Name,m_Intro);//設(shè)置SQL語(yǔ)BOOLres=m_ADOConn.ExecuteSQL((_bstr_t)sql); MessageBox("保存成功MessageBox("保存失敗 m_Name="";m_Intro=(7)處理“保存”按鈕的單}處理列表視圖控件的NM_CLICK,單擊列表控件中的選項(xiàng)時(shí)將根據(jù)產(chǎn)品名稱(chēng)進(jìn)行查詢(xún),voidvoidCManufactureDlg::OnClickList1(NMHDR*pNMHDR,LRESULT*{intpos m_Name=m_List.GetItemText(pos,0); ADOConnm_AdoConn; CStringsql.Format("select*fromtb_manufacturewhere產(chǎn)品名稱(chēng)='%s'",m_Name); m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql); {m_Introchar*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("產(chǎn)品介紹");//獲得產(chǎn)品介} *pResult=}voidvoid{if(m_Name.IsEmpty()||{MessageBox("產(chǎn)品信息不能為空}ADOConnCStringsql;//ADOConn對(duì)sql.Format("updatetb_manufactureset產(chǎn)品介紹='%s'where產(chǎn)品名稱(chēng)='%s'",m_Intro,m_Name);//設(shè)置SQL語(yǔ)MessageBox("修改成功m_Name=m_Intro=//執(zhí)行SQL語(yǔ)}voidvoid{{MessageBox("產(chǎn)品名稱(chēng)不能為空}ADOConnCStringsql;//ADOConn對(duì)sql.Format("deletefromtb_manufacturewhere產(chǎn)品名稱(chēng) //設(shè)置SQL語(yǔ)MessageBox("刪除成功m_Name="";m_Intro="";//執(zhí)行SQL語(yǔ)}于一些需要不間斷運(yùn)行的程序,如程序、服務(wù)器程序等通常也采用系統(tǒng)托盤(pán),這些程序一般都在來(lái)顯示程序。在Windows提供的API函數(shù)中,S_NotifyIcon函數(shù)可以對(duì)任務(wù)欄中的圖標(biāo)(托盤(pán)) APIBOOL _NotifyIcon(DWORDPNOTIFYICONDATAPNOTIFYICONDATA dwMessage:指定傳遞的消息,取值范圍 NIM_ADD:添加托 NIM_DELETE:刪除指定托盤(pán) NIM_MODIFY:修改指定托盤(pán) pnid:NOTIFYICONDATANOTIFYICONDATA結(jié)構(gòu)的原型如下typedeftypedefstructDWORD HWNDhWnd; UINTuID; UINTuFlags; UINTuCallbackMessage; HICONhIcon; charszTip[64]; }NOTIFYICONDATA,在主窗口的頭文件中一個(gè)C類(lèi)對(duì)象 charlpszTip[]="企業(yè) NOTIFYICONDATAdata;data.cbSize=sizeof(NOTIFYICONDATA); data.hWnd=m_hWnd; data.uCallbackMessage =NIF_MESSAGE|NIF_ICON|== afx_msgafx_msgvoid ram,LPARAM在OnTray函數(shù)中判斷鼠標(biāo)雙擊系統(tǒng)托盤(pán)圖標(biāo)時(shí)顯示框,當(dāng)在系統(tǒng)托盤(pán)圖標(biāo)上單擊鼠標(biāo)voidvoid{ram,LPARAMUINTuMouseMsg=(UINT)if(uMouseMsg== //{ *pPopup=m_ CPointpoint; point.x,point.y,AfxGetApp()- //}{}}(7)voidvoid{}voidvoid {}void { NOTIFYICONDATAdata;data.cbSize=data.hWnd=data.uID= delete[]m_pLines;
}}3.10.2框的顯框可以分為模態(tài)框和非模態(tài)框兩大類(lèi)。兩種框的區(qū)別在于:在模態(tài)框關(guān)閉之前,用戶不能再進(jìn)行其他操作;而非模態(tài)框在運(yùn)行的同時(shí),用戶還可以在應(yīng)用程序的其他窗口模態(tài)模態(tài)框顯示時(shí),將阻塞主線程的執(zhí)行,直到框被關(guān)閉。例如,程序出的消息框,CDialog類(lèi)的OnOKOnCancel方法。virtualintDoModal(virtualintDoModal(有創(chuàng)建框;如果為IDABORT,表示有其他錯(cuò)誤發(fā)生。OnOK方法:該方法在用戶單擊OK按鈕(按鈕IDIDOK)時(shí)調(diào)用。OnOK方法在內(nèi)部調(diào)用了EndDialog方法,因此,用戶單擊OK按鈕時(shí)會(huì)關(guān)閉框通常情況下,用戶需要改寫(xiě)該方法,禁止調(diào)用基類(lèi)的OnOK方法。virtualvirtualvoidOnOK(OnCancel方法:當(dāng)用戶在框中單擊Cancel按鈕或按Esc鍵,框架將自動(dòng)調(diào)用OnCancelvirtualvirtualvoidOnCancel(法在內(nèi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)民工工資支付專(zhuān)戶資金托管與結(jié)算服務(wù)協(xié)議
- 二零二五年度城市公園停車(chē)場(chǎng)停車(chē)管理協(xié)議
- 二零二五年度自建房安全風(fēng)險(xiǎn)評(píng)估報(bào)告編制協(xié)議
- 2025年度洗車(chē)工薪資福利調(diào)整合同
- 二零二五年度智能鋼管及扣件租賃平臺(tái)服務(wù)協(xié)議
- 二零二五年度美甲店技師專(zhuān)業(yè)成長(zhǎng)聘用協(xié)議
- 2025年度車(chē)輛不過(guò)戶免責(zé)合同范本及車(chē)輛過(guò)戶法律咨詢(xún)
- 二零二五年度抵押車(chē)個(gè)人經(jīng)營(yíng)性借款合同范本
- 二零二五年度農(nóng)村私人魚(yú)塘承包及漁業(yè)可持續(xù)發(fā)展合作合同
- 《五、作品著作權(quán)》教學(xué)設(shè)計(jì)教學(xué)反思-2023-2024學(xué)年初中信息技術(shù)人教版七年級(jí)上冊(cè)
- 二年級(jí)下冊(cè)科學(xué)教案-2.3科技產(chǎn)品體驗(yàn)會(huì) 大象版
- 退役軍人優(yōu)待證申領(lǐng)表
- Q∕SY 19001-2017 風(fēng)險(xiǎn)分類(lèi)分級(jí)規(guī)范
- 勞務(wù)分包項(xiàng)目經(jīng)理崗位職責(zé)
- 幼兒繪本故事:奇怪的雨傘店
- 鋼琴基礎(chǔ)教程教案
- 糖基轉(zhuǎn)移酶和糖苷酶課件(PPT 111頁(yè))
- 屋面網(wǎng)架結(jié)構(gòu)液壓提升施工方案(50頁(yè))
- (語(yǔ)文A版)四年級(jí)語(yǔ)文下冊(cè)課件跳水 (2)
- 第6章向量空間ppt課件
- 醫(yī)療機(jī)構(gòu)聘用(返聘)證明
評(píng)論
0/150
提交評(píng)論