版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
年5月29日數(shù)據(jù)庫倉庫設(shè)備管理課程設(shè)計文檔僅供參考銅陵學(xué)院數(shù)學(xué)與計算機系<數(shù)據(jù)庫課程設(shè)計>設(shè)計題目:設(shè)計題目:倉庫設(shè)備管理學(xué)生姓名:學(xué)號:專業(yè)班級:指導(dǎo)教師:時間:6月7日至6月10日
指導(dǎo)教師對課程設(shè)計(論文)的評語(工作態(tài)度、任務(wù)完成情況、能力水平、設(shè)計說明書(論文)的撰寫和圖紙質(zhì)量等):成績指導(dǎo)教師簽字年月日
TOC\o"1-3"\h\u13939一、系統(tǒng)設(shè)計 38481、系統(tǒng)設(shè)計目標(biāo) 399162、開發(fā)設(shè)計思想 3292203、系統(tǒng)功能分析 3132704、系統(tǒng)功能模塊設(shè)計 329743二、數(shù)據(jù)庫設(shè)計 439081、數(shù)據(jù)庫需求分析 493052、數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計 55273、數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計 625145三、數(shù)據(jù)庫結(jié)構(gòu)的實現(xiàn) 895401.創(chuàng)立設(shè)備基本信息代碼device_code 88272.創(chuàng)立企業(yè)部門基本信息代碼class_node 8161333.創(chuàng)立供應(yīng)商設(shè)備信息代碼provider_node 9270844.創(chuàng)立設(shè)備入庫表device_in 9290455.創(chuàng)立設(shè)備出庫表device_out 969596.創(chuàng)立現(xiàn)有庫存表device 1045627.創(chuàng)立部門需求表device_need 10288368.創(chuàng)立設(shè)備還庫表device_return 10290389.創(chuàng)立操作日志表howdo 109984四、系統(tǒng)實現(xiàn) 11285244.1創(chuàng)立應(yīng)用程序 11266114.2操作日志模塊的設(shè)計 1185541、寫日志模塊 116522、讀日志模塊 1347404.3登錄窗口的設(shè)計和程序初始化 15298764.4主對話框界面的設(shè)計 16213244.5設(shè)備代碼管理窗口的建立 17137574.6庫存信息管理窗口的創(chuàng)立 20109264.7設(shè)備入庫信息管理 22292444.8設(shè)備入庫窗口 25304324.9幫助模塊設(shè)計 2711195五、調(diào)試過程中的問題 2717315.1問題和解決方案 277865.2系統(tǒng)改進方面 2814180六、課程設(shè)計總結(jié) 28一、系統(tǒng)設(shè)計1、系統(tǒng)設(shè)計目標(biāo)由于計算機應(yīng)用的日益普及,倉庫設(shè)備管理的自動化是提高工作效率的有效途徑,隨著企業(yè)對倉庫設(shè)備實行計算機管理,實現(xiàn)倉庫設(shè)備管理系統(tǒng)勢在必行。系統(tǒng)開發(fā)的總統(tǒng)任務(wù)是實現(xiàn)企業(yè)物資設(shè)備管理的系統(tǒng)化、規(guī)范化和自動化,從而達到倉庫管理效率的目的。2、開發(fā)設(shè)計思想在本系統(tǒng)的設(shè)計過程中,為了克服倉庫管理信息處理量大的困難,滿足計算機管理的需要,采取了下面的一些原則:統(tǒng)一各種原始單據(jù)的格式,統(tǒng)一帳目和報表的格式。刪除不必要的管理冗余,實現(xiàn)管理規(guī)范化、科學(xué)化。程序代碼標(biāo)準(zhǔn)化,軟件統(tǒng)一化,確保軟件的可維護性和實用性。界面盡量簡單化,做到實用、方便,盡量滿足企業(yè)不同層次員工的需要。建立操作日志,系統(tǒng)自動記錄所進行的各種操作。3、系統(tǒng)功能分析本例中的倉庫管理系統(tǒng)需要完成的功能主要有以下幾點:新的設(shè)備信息的錄入;借出、歸還、維修時對設(shè)備信息的修改;對報廢設(shè)備信息的刪除;按照一定的條件查詢、統(tǒng)計符合條件的設(shè)備信息;查詢功能至少應(yīng)該包括設(shè)備基本信息的查詢、按時間段(如在1月1日到10月10日購買、借出、維修的設(shè)備等)查詢、按時間點(借入時間,借出時間,歸還時間)查詢等,統(tǒng)計功能至少包括按時間段(如在1月1日到10月10日購買、借出、維修的設(shè)備等)統(tǒng)計、按設(shè)備基本信息的統(tǒng)計等;對查詢、統(tǒng)計的結(jié)果打印輸出。4、系統(tǒng)功能模塊設(shè)計在系統(tǒng)功能分析的基礎(chǔ)上,結(jié)合VisualC++程序編制的特點,得到如圖所示的系統(tǒng)功能模塊圖。倉庫管理系統(tǒng)倉庫管理系統(tǒng)系統(tǒng)模塊輸入模塊維護模塊查看模塊報表模塊幫助模塊日志管理需求模塊還庫模塊出庫模塊入庫模塊數(shù)據(jù)庫設(shè)計1、數(shù)據(jù)庫需求分析在仔細(xì)調(diào)查企業(yè)倉庫物資設(shè)備管理過程的基礎(chǔ)上,得到本系統(tǒng)所處理的數(shù)據(jù)流程如圖設(shè)備入庫設(shè)備入庫設(shè)備采購設(shè)備還庫設(shè)備出庫倉庫現(xiàn)有庫存各部門需求企業(yè)生產(chǎn)計劃匯總本實例設(shè)計的數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu)如下:設(shè)備代碼信息,包括的數(shù)據(jù)項有設(shè)備號、設(shè)備名稱。
現(xiàn)有庫存信息,包括的數(shù)據(jù)項有設(shè)備、現(xiàn)有數(shù)目、總數(shù)目、最大庫存和最小庫存。設(shè)備使用信息,包括的數(shù)據(jù)項有使用的設(shè)備、使用部門、數(shù)目、使用時間和出庫時狀態(tài)等。
設(shè)備采購信息,包括的數(shù)據(jù)項有采購的設(shè)備、采購員、供應(yīng)商、采購數(shù)目和采購時間等。設(shè)備歸還信息,包括的數(shù)據(jù)項有歸還設(shè)備、歸還部門、歸還數(shù)目、歸還時間和經(jīng)手人等。設(shè)備需求信息,包括的數(shù)據(jù)項有需求的部門、需求設(shè)備、需求數(shù)目和需求時間等。2、數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計本實例根據(jù)上面的設(shè)計規(guī)劃出的實體有庫存實體、入庫實體、出庫實體、采購實體、還庫實體和需求實體,各實體的E-R圖及其關(guān)系描述如下:庫存實體E-R圖現(xiàn)有庫存現(xiàn)有庫存入庫出庫還庫設(shè)備號入庫實體E-R圖入庫入庫供應(yīng)商信息采購價格數(shù)量采購員設(shè)備號出庫實體E-R圖出庫使用部門出庫使用部門數(shù)量、時間經(jīng)手人設(shè)備號企業(yè)部門需求實體E-R圖部門需求部門需求需求部門需求數(shù)量需求時間設(shè)備號還庫實體E-R圖設(shè)備還庫設(shè)備還庫還庫時間人還庫數(shù)量經(jīng)手人設(shè)備號計劃采購實體E-R圖計劃采購計劃采購庫存信息 供應(yīng)信息時間設(shè)備號實體和實體之間的關(guān)系E-R圖入庫入庫現(xiàn)有庫存出庫還庫部門需求設(shè)備采購3、數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計在上面的實體以及實體之間的關(guān)系的基礎(chǔ)上,形成數(shù)據(jù)庫中的表格和各個表格之間的關(guān)系。倉庫管理系統(tǒng)數(shù)據(jù)庫中各個表格的設(shè)計結(jié)果如下面的幾個表格所示。每個表格表示在數(shù)據(jù)庫中的一個表。表1-1設(shè)備基本信息代碼表device_code列名數(shù)據(jù)類型可否為空說明codeVARCHAR2(6)NOTNULL設(shè)備號(主鍵)nameVARCHAR2(20)NULL設(shè)備名稱表1-2企業(yè)部門基本信息表class_node列名數(shù)據(jù)類型可否為空說明nodeVARCHAR2(6)NOTNULL部門編號(主鍵)departmentVARCHAR2(20)NOTNULL部門名稱表1-3供應(yīng)商設(shè)備信息表provider_node列名數(shù)據(jù)類型可否為空說明nodeVARCHAR2(6)NOTNULL供應(yīng)商編號(主鍵)providerVARCHAR2(20)NOTNULL供應(yīng)商名稱telenodeVARCHAR2(10)NULL供應(yīng)商電話nameVARCHAR2(20)NULL設(shè)備名稱表1-4設(shè)備入庫表device_in列名數(shù)據(jù)類型可否為空說明codeVARCHAR2(6)NOTNULL設(shè)備號in_dateDATENOTNULL入庫時間(主鍵)providerVARCHAR2(20)NULL供應(yīng)商in_numberNUMBER(6)NULL入庫數(shù)量priceNUMBER(6)NULL價格buyerVARCHAR2(10)NULL采購員表1-5設(shè)備出庫表device_out列名數(shù)據(jù)類型可否為空說明codeVARCHAR2(6)NOTNULL設(shè)備號departmentVARCHAR2(20)NULL使用部門out_dateDATENULL出庫時間(主鍵)out_stateNUMBER(1)NULL出庫狀態(tài)out_personVARCHAR2(10)NULL經(jīng)手人out_numberNUMBER(6)NOTNULL出庫數(shù)量takerVARCHAR2(10)NULL領(lǐng)取人usageVARCHAR2(20)NULL用途表1-6現(xiàn)有庫存表device列名數(shù)據(jù)類型可否為空說明codeVARCHAR2(6)NOTNULL設(shè)備號(主鍵)now_numberNUMBER(6)NULL現(xiàn)有庫存high_numberNUMBER(6)NULL最大庫存low_numberNUMBER(6)NULL最少庫存total_numberNUMBER(6)NULL總數(shù)表1-7部門需求表device_need列名數(shù)據(jù)類型可否為空說明codeVARCHAR2(6)NOTNULL設(shè)備號departmentVARCHAR2(20)NOTNULL部門名稱need_numberNUMBER(6)NULL需求數(shù)量begin_dateDATENULL需求開始時間end_dateDATENULL需求結(jié)束時間表1-8設(shè)備還庫表device_return列名數(shù)據(jù)類型可否為空說明codeVARCHAR2(6)NOTNULL設(shè)備號return_dateDATENULL還庫時間(主鍵)keeperVARCHAR2(20)NULL倉庫管理員return_numberNUMBER(6)NULL歸還數(shù)量return_dateVARCHAR2(10)NULL歸還人表1-9操作日志表howdo列名數(shù)據(jù)類型可否為空說明do_userVARCHAR2(10)NOTNULL操作員do_whatVARCHAR2(40)NOTNULL操作內(nèi)容do_dateDATENOTNULL操作時間數(shù)據(jù)庫結(jié)構(gòu)的實現(xiàn)1.創(chuàng)立設(shè)備基本信息代碼device_codeCREATETABLE”DMS”.device_code(codeVARCHAR2(6)NOTNULL,nameVARCHAR2(20)NOTNULL,CONSTRANTcode_code_pkPRIMARYKEY(code))TABLESPACE”USER_DATA”;2.創(chuàng)立企業(yè)部門基本信息代碼class_nodeCREATETABLE”DMS”.class_node(nodeVARCHAR2(6)NOTNULL,DepartmentVARCHAR2(20)NOTNULL,CONSTRANTnode_node_pkPRIMARYKEY(node))TABLESPACE”USER_DATA”;3.創(chuàng)立供應(yīng)商設(shè)備信息代碼provider_nodeCREATETABLE”DMS”.provider_node(nodeVARCHAR2(6)NOTNULL,providerVARCHAR2(20)NOTNULL,telenoVARCHAR2(10)NULL,CodeVARCHAR2(6)NOTNULL,CONSTRANTnode_node_pkPRIMARYKEY(node))TABLESPACE”USER_DATA”;4.創(chuàng)立設(shè)備入庫表device_inCREATETABLE”DMS”.device_in(codeVARCHAR2(6)NOTNULL,in_dateDATENOTNULL,providerVARCHAR2(20)NULL,in_numberNUMBER(6)NULL,priceNUMBER(6)NULL,buyerVARCHAR2(10)NULL,CONSTRAINTin_date_pkPRIMARYKEY(in_date))TABLESPACE”USER_DATA”;5.創(chuàng)立設(shè)備出庫表device_outCREATETABLE”DMS”.device_out(codeVARCHAR2(6)NOTNULL,departmentVARCHAR2(20)NULL,out_dateDATENULL,out_stateNUMBER(1)NULL,out_pensonVARCHAR2(20)NULL,out_numberNUMBER(6)NOTNULL,takerVARCHAR2(10)NULL,usageVARCHAR2(20)NULL,CONSTRAINTout_date_pkPRIMARYKEY(out_date))TABLESPACE”USER_DATA”;6.創(chuàng)立現(xiàn)有庫存表deviceCREATETABLE”DMS”.device(codeVARCHAR2(6)NULL,now_numberNUMBER(6)NULL,high_numberNUMBER(6)NULL,low_numberNUMBER(6)NULL,total_numberNUMBER(6)NULL,CONSTRAINTdevice_code_pkPRIMARYKEY(code))TABLESPACE”USER_DATA”;7.創(chuàng)立部門需求表device_needCREATETABLE”DMS”,device_need(codeVARCHAR2(10)NOTNULL,departmentVARCHAR2(10)NOTNULL,need_numberNUMBER(6)NULL,begin_dateDATENULL,end_dateDATENULL,)TABLESPACE”USER_DATA”;8.創(chuàng)立設(shè)備還庫表device_returnCREATETABLE”DMS”,device_return(codeVARHAR2(6)NOTNULL,departmentVARCHAR2(20)NULL,return_dateDATENULL,keeperVARCHAR2(10)NULL,return_numberNUMBER(6)NULL,return_personVARCHAR2(10)NULL,CONSTRAINTreturn_date_pkPRIMARYKEY(return_date))TABLESPACE”USER_DATA”;9.創(chuàng)立操作日志表howdoCREATETABLE”DMS”,howdo(do_userVARCHAR2(10)NOTNULL,do_whatVARCHAR2(40)NOTNULL,do_dateDATENOTNULL,)TABLESPACE”USER_DATA”;四、系統(tǒng)實現(xiàn)4.1創(chuàng)立應(yīng)用程序(1)選擇”FileNew”中的”新建項目”選項卡中”MFCAppWizard(exe)”,設(shè)置合適的目錄和項目名,比如”E:\Project”目錄下的”DMS”項目。(2)創(chuàng)立一個對話框應(yīng)用程序(”DialogBased”),單擊”Next”按鈕。(3)由于在這個項目中將要使用ADO,因此在MFCAppWizard的第二步,需要選中”Automation”選項,使應(yīng)用程序能夠支持自動化對象。如圖1-10所示(4)單擊”Finish”按鈕結(jié)束項目的創(chuàng)立。主對話框名為CDMSDlg。(5)項目創(chuàng)立完畢后,在頭文件stdafx.h中加入下面4行:#import”c:\programfiles\commonfiles\system\ado\msado15.dll”no_namespace(”EOF”,”adoEOF”)#include”icrsint.h”inlinevoidTESTHR(HRESULTx){ifFAILED(x)_com_issue_error(x);};#defineDATEFMTCstring(”’%s”’)4.2操作日志模塊的設(shè)計1、寫日志模塊圖1-10使應(yīng)用程序支持自動化先定義一個名為ClogMngr的類//LogMngr.h//定義一個Log管理器classCLogMngr{public: CLogMngr(); virtual~CLogMngr();public: boolAddLog(LPCSTRop); voidSetup(_ConnectionPtrcnnt,CString&user) { m_DBCnt=cnnt; m_user=user; }protected: _ConnectionPtrm_DBCnt; CStringm_user;};下面是ClogMngr::AddLog內(nèi)部實現(xiàn)詳細(xì)過程。//LogMngr.cpp//向數(shù)據(jù)庫中添加Log記錄的代碼。boolCLogMngr::AddLog(LPCSTRop){ CTimetm=CTime::GetCurrentTime(); CStringsql_;
sql_.Format("INSERTINTOHOWDO(do_user,do_what,do_date)VALUES('%s','%s','%d-%d-%d%d:%d:%d')", m_user,op, tm.GetYear(),tm.GetMonth(),tm.GetDay(), tm.GetHour(),tm.GetMinute(),tm.GetSecond()); _bstr_tsql=sql_;
try { m_DBCnt->Execute(sql,NULL,adCmdText); } catch(_com_error&e){CStringError=e.ErrorMessage();AfxMessageBox(e.ErrorMessage()); returnfalse;}
returntrue;}2、讀日志模塊圖1-11查看日志窗口初始化界面代碼如下:BOOLCDlgViewLog::OnInitDialog(){ CDialog::OnInitDialog(); m_list.InsertColumn(0,"操作員"); m_list.InsertColumn(1,"操作日期"); m_list.InsertColumn(2,"操作內(nèi)容"); RECTrect; m_list.GetWindowRect(&rect); intwid=rect.right-rect.left; m_list.SetColumnWidth(0,wid/3); m_list.SetColumnWidth(1,wid/3); m_list.SetColumnWidth(2,wid/3); m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT); RefreshData();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}
voidCDlgViewLog::RefreshData(){ m_list.DeleteAllItems(); m_list.SetRedraw(FALSE);
_bstr_tstrSQL("SELECT*FROMHOWDO"); _RecordsetPtrMySet;
inti=0; try { MySet.CreateInstance(__uuidof(Recordset)); MySet=m_DBCnt->Execute(strSQL,NULL,adCmdText); _variant_tHolder; while(!MySet->adoEOF) { Holder=MySet->GetCollect("do_user"); if(Holder.vt!=VT_NULL) m_list.InsertItem(i,(char*)(_bstr_t)Holder);
Holder=MySet->GetCollect("do_date"); if(Holder.vt!=VT_NULL) m_list.SetItemText(i,1,(char*)(_bstr_t)Holder);
Holder=MySet->GetCollect("do_what"); if(Holder.vt!=VT_NULL) m_list.SetItemText(i,2,(char*)(_bstr_t)Holder);
MySet->MoveNext(); } MySet->Close(); } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); m_list.SetRedraw(TRUE); return;} m_list.SetRedraw(TRUE); }voidCDlgViewLog::OnClickListVllog(NMHDR*pNMHDR,LRESULT*pResult){ inti=m_list.GetSelectionMark();
m_opr=m_list.GetItemText(i,0); m_date=m_list.GetItemText(i,1); m_op=m_list.GetItemText(i,2);
UpdateData(FALSE); *pResult=0;}//DlgViewLog.cpp//刪除所有日志記錄的函數(shù)。voidCDlgViewLog::OnBtnVlrmall(){ _bstr_tstrSQL("TRUNCATETABLEHOWDO");
try { m_DBCnt->Execute(strSQL,NULL,adCmdText); } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); EndDialog(0);} RefreshData();}4.3登錄窗口的設(shè)計和程序初始化在CDMSDlg::OnInitDialog()中加入這樣一段代碼://DMSDlg.cpp//彈出登錄界面CDlgLogIndlg; do { if(!dlg.DoModal()) EndDialog(0); }while(dlg.m_UsrName.GetLength()==0);它的目的是彈出圖1-12所示的登錄對話框,并從中獲得一個有效的用戶名。圖1-12登錄界面得到有效用戶名后,程序用如下代碼://DMSDlg.cpp//建立數(shù)據(jù)庫連接,初始化成員變量//登錄數(shù)據(jù)庫,若失敗,則關(guān)閉程序。{ m_DBCnt.CreateInstance(__uuidof(Connection)); CStringsql_; sql_.Format("DSN=DMS;UID=%s;PWD=%s",dlg.m_UsrName,dlg.m_UsrPwd); _bstr_tsql=sql_;//建立連接 m_DBCnt->Open(sql,"","",-1);//初始化日志管理器
m_logMngr.Setup(m_DBCnt,dlg.m_UsrName);//記錄此次登錄 m_logMngr.AddLog("登錄數(shù)據(jù)庫"); } catch(_com_error&e){ AfxMessageBox(e.ErrorMessage()); this->EndDialog(0);}在程序結(jié)束時關(guān)閉數(shù)據(jù)庫連接。//DMSDlg.cpp//關(guān)閉數(shù)據(jù)庫連接voidCDMSDlg::OnDestroy(){ CDialog::OnDestroy(); m_DBCnt->Close(); }4.4主對話框界面的設(shè)計登錄完成后,顯示出主對話框。它的界面設(shè)計如圖1-13所示,單擊某個按鈕就能彈出某個功能的界面。圖1-13主對話框界面以其中”設(shè)備代碼”按鈕為例,說明它的事件處理函數(shù)。代碼如下://DMSDlg.cpp//顯示設(shè)備代碼管理界面voidCDMSDlg::OnBtnDevcode(){ CDlgDevcodedlg; dlg.Setup(m_DBCnt,&m_logMngr); this->ShowWindow(SW_HIDE); dlg.DoModal(); this->ShowWindow(SW_SHOW);}其它按鈕的事件處理函數(shù),代碼與”設(shè)備代碼”按鈕的事件處理函數(shù)相同。4.5設(shè)備代碼管理窗口的建立對話框類名為CdlgDevcode設(shè)計如圖1-14所示設(shè)備代碼管理窗口//DlgDevcode.cpp//對話框的初始化BOOLCDlgDevcode::OnInitDialog(){ CDialog::OnInitDialog();//切分列表控件 m_list.InsertColumn(0,"設(shè)備號"); m_list.InsertColumn(1,"設(shè)備名"); RECTrect; m_list.GetWindowRect(&rect); intwid=rect.right-rect.left; m_list.SetColumnWidth(0,wid/2); m_list.SetColumnWidth(1,wid/2); m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);//讀取已有數(shù)據(jù)
RefreshData(); returnTRUE;}//DlgDevcode.cpp//消息映射部分BEGIN_MESSAGE_MAP(CDlgDevcode,CDialog)//{{AFX_MSG_MAP(CDlgDevcode) ON_NOTIFY(NM_CLICK,IDC_LIST_DEVCODE,OnClickListDevcode) //}}AFX_MSG_MAPEND_MESSAGE_MAP()//事件處理部分voidCDlgDevcode::OnClickListDevcode(NMHDR*pNMHDR,LRESULT*pResult){ inti=m_list.GetSelectionMark();
m_code=m_list.GetItemText(i,0); m_name=m_list.GetItemText(i,1);
UpdateData(FALSE); *pResult=0;}其余程序的清單如下://DlgDevcode.cpp:implementationfile//
#include"stdafx.h"#include"DMS.h"#include"DlgDevcode.h"
#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif//////////////////////////////////////////////////////////////////////////////CDlgDevcodedialogCDlgDevcode::CDlgDevcode(CWnd*pParent/*=NULL*/) :CDialog(CDlgDevcode::IDD,pParent){ //{{AFX_DATA_INIT(CDlgDevcode) m_code=_T(""); m_name=_T(""); //}}AFX_DATA_INIT m_DBCnt=NULL; m_log=NULL;}
voidCDlgDevcode::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDlgDevcode) DDX_Control(pDX,IDC_LIST_DEVCODE,m_list); DDX_Text(pDX,IDC_EDIT_DCCODE,m_code); DDX_Text(pDX,IDC_EDIT_DCNAME,m_name); //}}AFX_DATA_MAP}
BEGIN_MESSAGE_MAP(CDlgDevcode,CDialog) //{{AFX_MSG_MAP(CDlgDevcode) ON_NOTIFY(NM_CLICK,IDC_LIST_DEVCODE,OnClickListDevcode) ON_BN_CLICKED(IDC_BTN_DCADD,OnBtnDcadd) ON_BN_CLICKED(IDC_BTN_DCDEL,OnBtnDcdel) ON_BN_CLICKED(IDC_BTN_DCUPD,OnBtnDcupd) //}}AFX_MSG_MAPEND_MESSAGE_MAP()//////////////////////////////////////////////////////////////////////////////CDlgDevcodemessagehandlers//負(fù)責(zé)讀取已有數(shù)據(jù)的函數(shù)voidCDlgDevcode::RefreshData(){ m_list.DeleteAllItems(); m_list.SetRedraw(FALSE);
_bstr_tstrSQL("SELECT*FROMDEVICE_CODE"); _RecordsetPtrMySet;
inti=0; try { MySet.CreateInstance(__uuidof(Recordset));//執(zhí)行SOL語句讀取記錄 MySet=m_DBCnt->Execute(strSQL,NULL,adCmdText); _variant_tHolder; while(!MySet->adoEOF) {//取出code字段的數(shù)據(jù) Holder=MySet->GetCollect("code"); if(Holder.vt!=VT_NULL) m_list.InsertItem(i,(char*)(_bstr_t)Holder);//取出name字段的數(shù)據(jù) Holder=MySet->GetCollect("name"); if(Holder.vt!=VT_NULL) m_list.SetItemText(i,1,(char*)(_bstr_t)Holder); MySet->MoveNext(); } } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); m_list.SetRedraw(TRUE); return;} m_list.SetRedraw(TRUE); }//負(fù)責(zé)添加記錄的函數(shù)voidCDlgDevcode::OnBtnDcadd(){ UpdateData();
CStringsql_; sql_.Format("INSERTINTODEVICE_CODE(code,name)VALUES('%s','%s')",m_code,m_name); _bstr_tsql=sql_;
try { m_DBCnt->Execute(sql,NULL,adCmdText); } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); return;} m_log->AddLog("添加設(shè)備記錄。"); RefreshData();}//負(fù)責(zé)刪除記錄的函數(shù)voidCDlgDevcode::OnBtnDcdel(){ UpdateData();
CStringsql_; sql_.Format("DELETEFROMDEVICE_CODEWHERECODE='%s'",m_code); _bstr_tsql=sql_; try { m_DBCnt->Execute(sql,NULL,adCmdText); } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); return;} m_log->AddLog("刪除設(shè)備記錄。"); RefreshData();}//負(fù)責(zé)更新數(shù)據(jù)的函數(shù)voidCDlgDevcode::OnBtnDcupd(){ UpdateData();
CStringsql_; sql_.Format("UPDATEDEVICE_CODESETNAME='%s'WHERECODE='%s'",m_name,m_code); _bstr_tsql=sql_;
try { m_DBCnt->Execute(sql,NULL,adCmdText); } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); return;} m_log->AddLog("更新設(shè)備記錄。"); RefreshData();}4.6庫存信息管理窗口的創(chuàng)立用戶能夠在此新增、修改、刪除某種設(shè)備的記錄。單擊主對話框中的”庫存信息”按鈕,將出現(xiàn)圖1-15所示的界面。新增記錄時,用戶在”設(shè)備號”組合框中選擇一個設(shè)備號,在下面填入各種數(shù)量,之后單擊”新增”按鈕即可向表中增加記錄。修改記錄時,用戶單擊列表中某一行,程序利用1、8提到的方法,在窗口下面把這一行記錄的詳細(xì)信息顯示出來,用戶即可對之修改。”設(shè)備號”這個子窗口初始化的時候有如下代碼://DlgDev.cpp//對話框的初始化BOOLCDlgDev::OnInitDialog(){ CDialog::OnInitDialog(); //切分列表控件 m_list.InsertColumn(0,"設(shè)備號"); m_list.InsertColumn(1,"現(xiàn)存數(shù)量"); m_list.InsertColumn(2,"最大數(shù)量"); m_list.InsertColumn(3,"最小數(shù)量"); m_list.InsertColumn(4,"總數(shù)"); RECTrect; m_list.GetWindowRect(&rect); intwid=rect.right-rect.left; m_list.SetColumnWidth(0,wid/5); m_list.SetColumnWidth(1,wid/5); m_list.SetColumnWidth(2,wid/5); m_list.SetColumnWidth(3,wid/5); m_list.SetColumnWidth(4,wid/5);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
_RecordsetPtrpRst=NULL; IADORecordBinding*picRs=NULL;//InterfacePointerdeclared.(VC++Extensions) CDevCodeRsrs;
try { _bstr_tstrSQL("SELECT*FROMDEVICE_CODE");
TESTHR(pRst.CreateInstance(__uuidof(Recordset)));//讀取所有的設(shè)備編號 pRst=m_DBCnt->Execute(strSQL,NULL,adCmdText); //數(shù)據(jù)綁定 TESTHR(pRst->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs)); TESTHR(picRs->BindToRecordset(&rs));
inti=0; while(!pRst->adoEOF) {//向組合框控件中添加所有的設(shè)備編號 m_devs.AddString(rs.m_sz_code); pRst->MoveNext(); } picRs->Release(); pRst->Close(); } catch(_com_error&e) {AfxMessageBox(e.ErrorMessage()); EndDialog(0); returnTRUE;}
RefreshData();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}圖1-15庫存信息管理4.7設(shè)備入庫信息管理在主對話框中單擊”入庫信息”按鈕就進入如圖所示的界面。設(shè)備入庫信息管理界面下面是修改和刪除記錄的代碼:voidCDlgViewDevIn::OnBtnViupdate(){ if(!UpdateData()) return;
CStringsql_; sql_.Format(CString("SELECT*FROMDEVICE_INWHEREin_date=")+DATEFMT,m_date); _bstr_tsql=sql_;
_RecordsetPtrpRst=NULL; IADORecordBinding*picRs=NULL;//InterfacePointerdeclared.(VC++Extensions) CDevInRsrs;
try { TESTHR(pRst.CreateInstance(__uuidof(Recordset))); pRst->Open(sql,_variant_t((IDispatch*)m_DBCnt,true),adOpenKeyset,adLockOptimistic,adCmdText); //數(shù)據(jù)綁定 TESTHR(pRst->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs)); TESTHR(picRs->BindToRecordset(&rs));//填寫需要修改的數(shù)據(jù) strcpy(rs.m_sz_code,m_code); strcpy(rs.m_sz_date,m_date); strcpy(rs.m_sz_provider,m_provider); strcpy(rs.m_sz_tel,m_tel); rs.m_f_number=m_number; rs.m_f_price=m_price; strcpy(rs.m_sz_buyer,m_buyer);//開始更新數(shù)據(jù) TESTHR(picRs->Update(&rs));//釋放ADO對象 picRs->Release(); pRst->Close(); } catch(_com_error&e) {AfxMessageBox(e.ErrorMessage()); return;}
MessageBox("完成操作!"); m_log->AddLog("修改入庫信息");
RefreshData();}
voidCDlgViewDevIn::OnBtnVidel(){ if(!UpdateData()) return;
CStringsql_; sql_.Format(CString("DELETEFROMDEVICE_INWHEREin_date=")+DATEFMT,m_date); _bstr_tsql=sql_;
try {//執(zhí)行刪除數(shù)據(jù)的SOL語句 m_DBCnt->Execute(sql,NULL,adCmdText); } catch(_com_error&e) {AfxMessageBox(e.ErrorMessage()); return;} MessageBox("完成操作!"); m_log->AddLog("刪除入庫信息");
RefreshData();}4.8設(shè)備入庫窗口在主對話框中單擊”設(shè)備入庫”按鈕就進入如圖1-17所示的界面。設(shè)備入庫登記界面下面就是單擊”確定”按鈕之后,更新數(shù)據(jù)庫操作的代碼://DlgDevIn.cpp//添加入庫記錄voidCDlgDevIn::OnBtnDiadd(){ if(m_devs.GetCurSel()==CB_ERR) { MessageBox("請選擇一個設(shè)備"); return; }
if(!UpdateData()) return;
_RecordsetPtrpRst=NULL; CDevInRsrs;
try { TESTHR(pRst.CreateInstance(__uuidof(Recordset)));//打開數(shù)據(jù)庫表格到Recordest對象 pRst->Open("device_in",_variant_t((IDispatch*)m_DBCnt,true),adOpenKeyset,adLockOptimistic,adCmdTable); //填寫新數(shù)據(jù) m_devs.GetWindowText(rs.m_sz_code,11); sprintf(rs.m_sz_date,"%d-%d-%d%d:%d:%d", m_date.GetYear(),m_date.GetMonth(),m_date.GetDay(), m_time.GetHour(),m_time.GetMinute(),m_time.GetSecond()); strcpy(rs.m_sz_provider,m_provider); strcpy(rs.m_sz_tel,m_tel); rs.m_f_number=m_number; rs.m_f_price=m_price; strcpy(rs.m_sz_buyer,m_buyer);
COleSafeArrayvaFieldlist,vaValuelist; rs.FillFieldsArray(vaFieldlist,vaValuelist);//開始一個事務(wù) m_DBCnt->BeginTrans();//添加新數(shù)據(jù)到device_in表 TESTHR(pRst->AddNew(vaFieldlist,vaValuelist)); pRst->Close();//打開device表 CStringsql_; sql_.Format("SELECT*FROMdeviceWHEREcode='%s'",rs.m_sz_code); _bstr_tsql=sql_; pRst->Open(sql,_variant_t((IDispatch*)m_DBCnt,true),adOpenKeyset,adLockOptimistic,adCmdText); //若沒有此設(shè)備的庫存記錄 if(pRst->GetRecordCount()==0) { CDevRsrsDev; strcpy(rsDev.m_sz_code,rs.m_sz_code);
rsDev.m_f_cur=rs.m_f_number; rsDev.m_f_total=rs.m_f_number; rsDev.m_f_max=1; rsDev.m_f_m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息化教學(xué)設(shè)計
- 一個月銷售工作總結(jié)
- 創(chuàng)新創(chuàng)業(yè)工作計劃及記錄
- 與經(jīng)典同行讀書心得10篇
- 物理教師個人工作總結(jié)
- 2025物流有限公司司機勞動合同勞動合同范本版
- 2025解除勞動的合同協(xié)議
- 個人學(xué)習(xí)計劃(合集15篇)
- 員工轉(zhuǎn)正申請書(匯編15篇)
- 2025監(jiān)理工程師《合同管理》輔導(dǎo)講義保修期
- 航天航空與國防行業(yè)“鑄劍”系列深度報告(五):軍品定價機制改革~激勵與補償?shù)乃囆g(shù)
- 國開公共政策概論形考任務(wù)4試題及答案
- (完整版)馬克思主義基本原理概論知識點
- 鐘點工雇傭協(xié)議書3篇
- 電子耳蝸植入術(shù)后護理查房課件
- DB34∕T 2290-2022 水利工程質(zhì)量檢測規(guī)程
- 星巴克哈佛商學(xué)院案例
- ICS(國際標(biāo)準(zhǔn)分類法)分類
- 幼兒園課件:《認(rèn)識國旗》
- 【規(guī)劃】高中語文教師專業(yè)成長五年規(guī)劃
- 華南農(nóng)業(yè)大學(xué)農(nóng)學(xué)院生物技術(shù)復(fù)習(xí)題附答案
評論
0/150
提交評論