




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、倉(cāng)庫(kù)管理系統(tǒng) 倉(cāng)庫(kù)管理是整個(gè)物資供應(yīng)管理系統(tǒng)的核心。本實(shí)例著重講解倉(cāng)庫(kù)管理模塊,給出數(shù)據(jù)庫(kù)設(shè)計(jì)和程序?qū)崿F(xiàn)過程。 1、系統(tǒng)設(shè)計(jì)1、1系統(tǒng)設(shè)計(jì)目標(biāo)系統(tǒng)開發(fā)的總統(tǒng)任務(wù)是實(shí)現(xiàn)企業(yè)物資設(shè)備管理的系統(tǒng)化、規(guī)范化和自動(dòng)化,從而達(dá)到倉(cāng)庫(kù)管理效率的目的。1、2開發(fā)設(shè)計(jì)思想在本系統(tǒng)的設(shè)計(jì)過程中,為了克服倉(cāng)庫(kù)管理信息處理量大的困難,滿足計(jì)算機(jī)管理的需要,采取了下面的一些原則: 統(tǒng)一各種原始單據(jù)的格式,統(tǒng)一帳目和報(bào)表的格式。 刪除不必要的
2、管理冗余,實(shí)現(xiàn)管理規(guī)范化、科學(xué)化。 程序代碼標(biāo)準(zhǔn)化,軟件統(tǒng)一化,確保軟件的可維護(hù)性和實(shí)用性。 界面盡量簡(jiǎn)單化,做到實(shí)用、方便,盡量滿足企業(yè)不同層次員工的需要。 建立操作日志,系統(tǒng)自動(dòng)記錄所進(jìn)行的各種操作。1、3系統(tǒng)功能分析 本例中的倉(cāng)庫(kù)管理系統(tǒng)需要完成的功能主要有以下幾點(diǎn):
3、60; 倉(cāng)庫(kù)管理各種信息的輸入,包括入庫(kù)、出庫(kù)、還庫(kù)、需求信息的輸入等。 倉(cāng)庫(kù)管理各種信息的查詢、修改和維護(hù)。 設(shè)備采購(gòu)報(bào)表的生成。 在庫(kù)存管理中加入最高儲(chǔ)備和最低儲(chǔ)備字段,對(duì)倉(cāng)庫(kù)中的物資設(shè)備實(shí)現(xiàn)監(jiān)控和報(bào)警。 企業(yè)各部門的物資需求的管理。
4、160; 操作日志的管理。 倉(cāng)庫(kù)管理系統(tǒng)的使用幫助。1、4系統(tǒng)功能模塊設(shè)計(jì) 在系統(tǒng)功能分析的基礎(chǔ)上,結(jié)合Visual C+程序編制的特點(diǎn),得到如圖1-1所示的系統(tǒng)功能模塊圖。倉(cāng)庫(kù)管理系統(tǒng)系統(tǒng)模塊維護(hù)模塊輸入模塊查看模塊報(bào)表模塊幫助模塊入庫(kù)模塊還庫(kù)模塊出庫(kù)模塊需求模塊日志管理
5、 圖1-1 系統(tǒng)功能模塊圖 2、數(shù)據(jù)庫(kù)設(shè)計(jì)2、1數(shù)據(jù)庫(kù)需求分析在仔細(xì)調(diào)查企業(yè)倉(cāng)庫(kù)物資設(shè)備管理過程的基礎(chǔ)上,得到本系統(tǒng)所處理的數(shù)據(jù)流程如圖1-2所示:倉(cāng)庫(kù)現(xiàn)有庫(kù)存各部門需求企業(yè)生產(chǎn)計(jì)劃匯總設(shè)備采購(gòu)設(shè)備出庫(kù)設(shè)備入庫(kù)設(shè)備還庫(kù) 圖1-2 數(shù)據(jù)流程圖本實(shí)例設(shè)計(jì)的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)如下: 設(shè)備代碼信息,
6、包括的數(shù)據(jù)項(xiàng)有設(shè)備號(hào)、設(shè)備名稱。 現(xiàn)有庫(kù)存信息,包括的數(shù)據(jù)項(xiàng)有設(shè)備、現(xiàn)有數(shù)目、總數(shù)目、最大庫(kù)存和最小庫(kù)存。 設(shè)備使用信息,包括的數(shù)據(jù)項(xiàng)有使用的設(shè)備、使用部門、數(shù)目、使用時(shí)間和出庫(kù)時(shí)狀態(tài)等。 設(shè)備采購(gòu)信息,包括的數(shù)據(jù)項(xiàng)有采購(gòu)的設(shè)備、采購(gòu)員、供應(yīng)商、采購(gòu)數(shù)目和采購(gòu)時(shí)間等。
7、 設(shè)備歸還信息,包括的數(shù)據(jù)項(xiàng)有歸還設(shè)備、歸還部門、歸還數(shù)目、歸還時(shí)間和經(jīng)手人等。 設(shè)備需求信息,包括的數(shù)據(jù)項(xiàng)有需求的部門、需求設(shè)備、需求數(shù)目和需求時(shí)間等。2、2數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)本實(shí)例根據(jù)上面的設(shè)計(jì)規(guī)劃出的實(shí)體有庫(kù)存實(shí)體、入庫(kù)實(shí)體、出庫(kù)實(shí)體、采購(gòu)實(shí)體、還庫(kù)實(shí)體和需求實(shí)體,各實(shí)體的E-R圖及其關(guān)系描述如下:現(xiàn)有庫(kù)存設(shè)備號(hào)現(xiàn)有庫(kù)存警戒庫(kù)存總數(shù) 圖1-3 庫(kù)存實(shí)體
8、E-R圖入庫(kù)設(shè)備號(hào)供應(yīng)商信息采購(gòu)價(jià)格數(shù)量采購(gòu)員 圖1-4 入庫(kù)實(shí)體E-R圖出庫(kù)設(shè)備號(hào)使用部門數(shù)量時(shí)間經(jīng)手人 圖1-5 出庫(kù)實(shí)體E-R圖部門需求設(shè)備號(hào)需求部門需求數(shù)量需求時(shí)間 圖1-6 部門需求實(shí)體E-R圖設(shè)備還庫(kù)設(shè)備號(hào)還庫(kù)時(shí)間、人還庫(kù)數(shù)量經(jīng)手人 圖1-7 還庫(kù)實(shí)體E-R圖計(jì)劃采購(gòu)設(shè)
9、備號(hào)庫(kù)存信息供應(yīng)信息時(shí)間 圖1-8計(jì)劃采購(gòu)實(shí)體E-R圖入庫(kù)現(xiàn)有庫(kù)存出庫(kù)還庫(kù)部門需求設(shè)備采購(gòu) 圖1-9實(shí)體和實(shí)體之間的關(guān)系E-R圖2、3數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)在上面的實(shí)體以及實(shí)體之間的關(guān)系的基礎(chǔ)上,形成數(shù)據(jù)庫(kù)中的表格和各個(gè)表格之間的關(guān)系。倉(cāng)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)中各個(gè)表格的設(shè)計(jì)結(jié)果如下面的幾個(gè)表格所示。每個(gè)表格表示在數(shù)據(jù)庫(kù)中的一個(gè)表。表1-1 設(shè)備代碼表device_code 列名數(shù)據(jù)類型可否為空
10、說明codeVARCHAR2(6)NOTNULL設(shè)備號(hào)(主鍵)nameVARCHAR2(20)NULL設(shè)備名稱 表1-2 設(shè)備入庫(kù)表device_in列名數(shù)據(jù)類型可否為空說明codeVARCHAR2(6)NOTNULL設(shè)備號(hào)in_dateDATE NOTNULL入庫(kù)時(shí)間(主鍵)providerVARCHAR2(20)NULL供應(yīng)商 telenoVARCHAR2(10)NULL供應(yīng)商電話in_numberNUMBER(6) NULL入庫(kù)數(shù)量 priceNUMBER(6) NULL價(jià)格 buyerVARCHAR2(10)NULL采購(gòu)員 表1-3 設(shè)備出庫(kù)表device_out列名數(shù)據(jù)類型可否為空說
11、明codeVARCHAR2(6)NOTNULL設(shè)備號(hào)departmentVARCHAR2(20)NULL使用部門out_dateDATE NULL出庫(kù)時(shí)間(主鍵)out_stateNUMBER(1) NULL出庫(kù)狀態(tài)out_personVARCHAR2(10) NULL經(jīng)手人out _numberNUMBER(6) NOTNULL出庫(kù)數(shù)量 takerVARCHAR2(10) NULL領(lǐng)取人 usageVARCHAR2(20) NULL用途 表1-4 現(xiàn)有庫(kù)存表device列名數(shù)據(jù)類型可否為空說明codeVARCHAR2(6)NOTNULL設(shè)備號(hào)(主鍵)now_numberNUMBER(6) N
12、ULL現(xiàn)有庫(kù)存high _numberNUMBER(6) NULL最大庫(kù)存low _numberNUMBER(6) NULL最少庫(kù)存total _numberNUMBER(6) NULL總數(shù) 表1-5 部門需求表device_need列名數(shù)據(jù)類型可否為空說明codeVARCHAR2(6)NOTNULL設(shè)備號(hào)departmentVARCHAR2(20)NOTNULL部門名稱need _numberNUMBER(6) NULL需求數(shù)量begin_dateDATE NULL需求開始時(shí)間end_dateDATE NULL需求結(jié)束時(shí)間 表1-6 設(shè)備還庫(kù)表device_return列名數(shù)據(jù)類型可否為空說
13、明codeVARCHAR2(6)NOTNULL設(shè)備號(hào)return_dateDATE NULL還庫(kù)時(shí)間(主鍵) keeperVARCHAR2(20) NULL倉(cāng)庫(kù)管理員 return_ numberNUMBER(6) NULL歸還數(shù)量 return_dateVARCHAR2(10) NULL歸還人 表1-7 操作日志表 howdo列名數(shù)據(jù)類型可否為空說明do_userVARCHAR2(10) NOTNULL操作員do_whatVARCHAR2(40) NOTNULL操作內(nèi)容do_dateDATE NOTNULL操作時(shí)間 表1-8 設(shè)備采購(gòu)計(jì)劃表device_wantbuy列名數(shù)據(jù)類型可否為空說明
14、codeVARCHAR2(6)NOTNULL設(shè)備號(hào)now_numberNUMBER(6) NULL現(xiàn)有庫(kù)存total_numberNUMBER(6) NULL總庫(kù)存max_numberNUMBER(6) NULL最大庫(kù)存buy_numberNUMBER(6) NULL購(gòu)買數(shù)量providerVARCHAR2(10)NULL供應(yīng)商 priceNUMBER(6) NULL價(jià)格buy_dateDATE NULL計(jì)劃采購(gòu)時(shí)間(主鍵)3、數(shù)據(jù)庫(kù)結(jié)構(gòu)的實(shí)現(xiàn)4、創(chuàng)建應(yīng)用程序(1) (1) &
15、#160; 選擇“FileNew”中的“新建項(xiàng)目”選項(xiàng)卡中“MFC AppWizard(exe)”,設(shè)置合適的目錄和項(xiàng)目名,比如“E:Project”目錄下的“DMS”項(xiàng)目。(2) (2) 創(chuàng)建一個(gè)對(duì)話框應(yīng)用程序(“Dialog Based”),單擊“Next”按鈕。(3) (3)
16、60; 由于在這個(gè)項(xiàng)目中將要使用ADO,所以在MFC AppWizard的第二步,需要選中“Automation”選項(xiàng),使應(yīng)用程序能夠支持自動(dòng)化對(duì)象。如圖1-10所示(4) (4) 單擊“Finish”按鈕結(jié)束項(xiàng)目的創(chuàng)建。主對(duì)話框名為CDMSDlg。(5) (5) 項(xiàng)目創(chuàng)建完
17、畢后,在頭文件stdafx.h中加入下面4行:#import“c:programfilescommonfilessystemadomsado15.dll”no_namespace(”EOF”,”adoEOF”)#include”icrsint.h”inline void TESTHR(HRESULT x)if FAILED(x)_com_issue_error(x);#define DATEFMT Cstring(“%s”)5、操作日志模塊的設(shè)計(jì)(1)寫日志模塊 圖1-10 使應(yīng)用程序支持自動(dòng)化先定義一個(gè)名為ClogMngr的類/LogMngr.h/定義一個(gè)Log管理器class CLogMn
18、gr public:CLogMngr();virtual CLogMngr();public:bool AddLog(LPCSTR op);void Setup(_ConnectionPtr cnnt, CString& user)m_DBCnt = cnnt;m_user = user;protected:_ConnectionPtr m_DBCnt;CString m_user;下面是ClogMngr:AddLog內(nèi)部實(shí)現(xiàn)詳細(xì)過程。/LogMngr.cpp/向數(shù)據(jù)庫(kù)中添加Log記錄的代碼。bool CLogMngr:AddLog(LPCSTR op)CTime tm = CTime
19、:GetCurrentTime();CString sql_; sql_.Format("INSERT INTO HOWDO (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_t sql = sql_; trym_DBCnt
20、->Execute(sql,NULL,adCmdText);catch(_com_error& e) CString Error = e.ErrorMessage(); AfxMessageBox(e.ErrorMessage();return false; return true;(2)讀日志模塊圖1-11 查看日志窗口 初始化界面代碼如下:BOOL CDlgViewLog:OnInitDialog() CDialog:OnInitDialog();m_list.InsertColumn(0,"操作員");m_list.InsertColumn(
21、1,"操作日期");m_list.InsertColumn(2,"操作內(nèi)容");RECT rect;m_list.GetWindowRect(&rect);int wid = 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(); return
22、 TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE void CDlgViewLog:RefreshData()m_list.DeleteAllItems();m_list.SetRedraw(FALSE); _bstr_t strSQL("SELECT * FROM HOWDO");_RecordsetPtr MySet; int i = 0;tryMySet.Create
23、Instance(_uuidof(Recordset); MySet = m_DBCnt->Execute(strSQL,NULL,adCmdText);_variant_t Holder;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
24、 (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()
25、;m_list.SetRedraw(TRUE);return; m_list.SetRedraw(TRUE);void CDlgViewLog:OnClickListVllog(NMHDR* pNMHDR, LRESULT* pResult) int i = 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;/DlgV
26、iewLog.cpp/刪除所有日志記錄的函數(shù)。void CDlgViewLog:OnBtnVlrmall() _bstr_t strSQL("TRUNCATE TABLE HOWDO"); trym_DBCnt->Execute(strSQL,NULL,adCmdText);catch(_com_error& e) AfxMessageBox(e.ErrorMessage();EndDialog(0); RefreshData();6、登錄窗口的設(shè)計(jì)和程序初始化在CDMSDlg:OnInitDialog()中加入這樣一段代碼:/DMSDlg.cpp/
27、彈出登錄界面CDlgLogIn dlg;doif (!dlg.DoModal()EndDialog(0); while (dlg.m_UsrName.GetLength()=0);它的目的是彈出圖1-12所示的登錄對(duì)話框,并從中獲得一個(gè)有效的用戶名。圖1-12 登錄界面得到有效用戶名后,程序用如下代碼:/ DMSDlg.cpp/建立數(shù)據(jù)庫(kù)連接,初始化成員變量/登錄數(shù)據(jù)庫(kù),若失敗,則關(guān)閉程序。m_DBCnt.CreateInstance(_uuidof(Connection);CString sql_;sql_.Format("DSN=DMS;UID=%s;PWD=%s",d
28、lg.m_UsrName,dlg.m_UsrPwd);_bstr_t sql=sql_;/建立連接m_DBCnt->Open(sql,"","",-1);/初始化日志管理器 m_logMngr.Setup(m_DBCnt,dlg.m_UsrName);/記錄此次登錄m_logMngr.AddLog("登錄數(shù)據(jù)庫(kù)");catch(_com_error& e) AfxMessageBox(e.ErrorMessage();this->EndDialog(0); 在程序結(jié)束時(shí)關(guān)閉數(shù)據(jù)庫(kù)連接。/ DMSDlg.c
29、pp/關(guān)閉數(shù)據(jù)庫(kù)連接void CDMSDlg:OnDestroy() CDialog:OnDestroy();m_DBCnt->Close();7、主對(duì)話框界面的設(shè)計(jì)登錄完成后,顯示出主對(duì)話框。它的界面設(shè)計(jì)如圖1-13所示,單擊某個(gè)按鈕就能彈出某個(gè)功能的界面。圖1-13 主對(duì)話框界面以其中“設(shè)備代碼”按鈕為例,說明它的事件處理函數(shù)。代碼如下:/ DMSDlg.cpp/顯示設(shè)備代碼管理界面void CDMSDlg:OnBtnDevcode() CDlgDevcode dlg;dlg.Setup(m_DBCnt,&m_logMngr);this->ShowWindow(SW_H
30、IDE);dlg.DoModal();this->ShowWindow(SW_SHOW);其他按鈕的事件處理函數(shù),代碼與“設(shè)備代碼”按鈕的事件處理函數(shù)相同。8、設(shè)備代碼管理窗口的建立對(duì)話框類名為CdlgDevcode設(shè)計(jì)如圖1-14所示圖1-14 設(shè)備代碼管理窗口 /DlgDevcode.cpp/對(duì)話框的初始化BOOL CDlgDevcode:OnInitDialog() CDialog:OnInitDialog();/切分列表控件m_list.InsertColumn(0,"設(shè)備號(hào)");m_list.InsertColumn(1,"設(shè)備名");R
31、ECT rect;m_list.GetWindowRect(&rect);int wid = 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();return TRUE; / DlgDevcode.cpp/消息映射部分BEGIN_MESSAGE_MAP(CDlgDevcode, CDialog) /AFX_MSG_MAP(CD
32、lgDevcode)ON_NOTIFY(NM_CLICK, IDC_LIST_DEVCODE, OnClickListDevcode)/AFX_MSG_MAPEND_MESSAGE_MAP()/事件處理部分void CDlgDevcode:OnClickListDevcode(NMHDR* pNMHDR, LRESULT* pResult) int i = m_list.GetSelectionMark(); m_code = m_list.GetItemText(i,0);m_name = m_list.GetItemText(i,1); UpdateData(FALSE
33、);*pResult = 0;其余程序的清單如下:/ DlgDevcode.cpp : implementation file/ #include "stdafx.h"#include "DMS.h"#include "DlgDevcode.h" #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CDlgDevcode dialogCDlgDevcode:CDlgDevcode(CWnd*
34、 pParent /*=NULL*/): CDialog(CDlgDevcode:IDD, pParent)/AFX_DATA_INIT(CDlgDevcode)m_code = _T("");m_name = _T("");/AFX_DATA_INITm_DBCnt = NULL;m_log = NULL; void CDlgDevcode:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CDlgDevcode)DDX_Cont
35、rol(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)O
36、N_BN_CLICKED(IDC_BTN_DCDEL, OnBtnDcdel)ON_BN_CLICKED(IDC_BTN_DCUPD, OnBtnDcupd)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CDlgDevcode message handlers/負(fù)責(zé)讀取已有數(shù)據(jù)的函數(shù)void CDlgDevcode:RefreshData()m_list.DeleteAllItems();m_list.SetRedraw(FALSE); _bstr_t strSQL("SELECT * FROM DEVICE_CODE");_RecordsetPt
37、r MySet; int i = 0;tryMySet.CreateInstance(_uuidof(Recordset); /執(zhí)行SOL語句讀取記錄MySet = m_DBCnt->Execute(strSQL,NULL,adCmdText);_variant_t Holder;while(!MySet->adoEOF) /取出code字段的數(shù)據(jù) Holder = MySet->GetCollect("code");if(Holder.vt!=VT_NULL)m_list.InsertItem(i, (char*)(_bstr_t)Holde
38、r); /取出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ù)void CDlgDevcode:OnBtn
39、Dcadd() UpdateData(); CString sql_;sql_.Format("INSERT INTO DEVICE_CODE (code,name) VALUES('%s','%s')", m_code, m_name);_bstr_t sql = sql_; trym_DBCnt->Execute(sql,NULL,adCmdText);catch(_com_error& e) AfxMessageBox(e.ErrorMessage();return; m_log->AddLog(
40、"添加設(shè)備記錄。"); RefreshData(); /負(fù)責(zé)刪除記錄的函數(shù)void CDlgDevcode:OnBtnDcdel() UpdateData(); CString sql_;sql_.Format("DELETE FROM DEVICE_CODE WHERE CODE='%s'",m_code);_bstr_t sql = sql_;trym_DBCnt->Execute(sql,NULL,adCmdText); catch(_com_error& e) AfxMessageBox(e.ErrorMe
41、ssage();return; m_log->AddLog("刪除設(shè)備記錄。"); RefreshData(); /負(fù)責(zé)更新數(shù)據(jù)的函數(shù)void CDlgDevcode:OnBtnDcupd() UpdateData(); CString sql_;sql_.Format("UPDATE DEVICE_CODE SET NAME='%s' WHERE CODE='%s'",m_name,m_code);_bstr_t sql = sql_; trym_DBCnt->Execute(sql,NU
42、LL,adCmdText); catch(_com_error& e) AfxMessageBox(e.ErrorMessage();return; m_log->AddLog("更新設(shè)備記錄。"); RefreshData(); 9、庫(kù)存信息管理窗口的創(chuàng)建用戶可以在此新增、修改、刪除某種設(shè)備的記錄。單擊主對(duì)話框中的“庫(kù)存信息”按鈕,將出現(xiàn)圖1-15所示的界面。新增記錄時(shí),用戶在“設(shè)備號(hào)”組合框中選擇一個(gè)設(shè)備號(hào),在下面填入各種數(shù)量,之后單擊“新增”按鈕即可向表中增加記錄。修改記錄時(shí),用戶單擊列表中某一行,程序利用1、8提到的方法,在窗口下面把這一行記錄的詳細(xì)信
43、息顯示出來,用戶即可對(duì)之修改。“設(shè)備號(hào)”這個(gè)子窗口初始化的時(shí)候有如下代碼:/DlgDev.cpp /對(duì)話框的初始化BOOL CDlgDev:OnInitDialog() CDialog:OnInitDialog();/切分列表控件m_list.InsertColumn(0,"設(shè)備號(hào)");m_list.InsertColumn(1,"現(xiàn)存數(shù)量");m_list.InsertColumn(2,"最大數(shù)量");m_list.InsertColumn(3,"最小數(shù)量");m_list.InsertColumn(4,&quo
44、t;總數(shù)");RECT rect;m_list.GetWindowRect(&rect);int wid = 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);
45、_RecordsetPtr pRst = NULL;IADORecordBinding *picRs = NULL; /Interface Pointer declared.(VC+ Extensions) CDevCodeRs rs; try_bstr_t strSQL("SELECT * FROM DEVICE_CODE"); TESTHR(pRst.CreateInstance(_uuidof(Recordset); /讀取所有的設(shè)備編號(hào)pRst = m_DBCnt->Execute(strSQL, NULL, adCmdText);/數(shù)據(jù)綁
46、定TESTHR(pRst->QueryInterface(_uuidof(IADORecordBinding),(LPVOID*)&picRs);TESTHR(picRs->BindToRecordset(&rs); int i = 0;while (!pRst->adoEOF) /向組合框控件中添加所有的設(shè)備編號(hào)m_devs.AddString(rs.m_sz_code);pRst->MoveNext();picRs->Release();pRst->Close();catch(_com_error& e) AfxMess
47、ageBox(e.ErrorMessage();EndDialog(0);return TRUE; RefreshData(); return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE圖1-15 庫(kù)存信息管理10、設(shè)備入庫(kù)信息管理在主對(duì)話框中單擊“入庫(kù)信息”按鈕就進(jìn)入如圖1-16所示的界面。圖1-16 設(shè)備入庫(kù)信息管理界面下面是修改和刪除記錄的代碼:void CDlgViewDevIn:OnBtn
48、Viupdate() if (!UpdateData()return; CString sql_;sql_.Format(CString("SELECT * FROM DEVICE_IN WHERE in_date=")+DATEFMT, m_date);_bstr_t sql = sql_; _RecordsetPtr pRst = NULL;IADORecordBinding *picRs = NULL; /Interface Pointer declared.(VC+ Extensions) CDevInRs rs; tryTESTHR(
49、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_cod
50、e);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對(duì)象picRs->Release();pRst->Close();catch(_com_error& e) AfxMessageBox(
51、e.ErrorMessage();return; MessageBox("完成操作!");m_log->AddLog("修改入庫(kù)信息"); RefreshData(); void CDlgViewDevIn:OnBtnVidel() if (!UpdateData()return; CString sql_;sql_.Format(CString("DELETE FROM DEVICE_IN WHERE in_date=")+DATEFMT, m_date);_bstr_t sql =
52、sql_; try /執(zhí)行刪除數(shù)據(jù)的SOL語句m_DBCnt->Execute(sql, NULL, adCmdText);catch(_com_error& e) AfxMessageBox(e.ErrorMessage();return; MessageBox("完成操作!");m_log->AddLog("刪除入庫(kù)信息"); RefreshData();11、設(shè)備入庫(kù)窗口在主對(duì)話框中單擊“設(shè)備入庫(kù)”按鈕就進(jìn)入如圖1-17所示的界面。 圖1-17 設(shè)備入庫(kù)登記界面下面就是單擊“確定”按鈕之后,更新數(shù)據(jù)庫(kù)操作的代
53、碼:/DlgDevIn.cpp/添加入庫(kù)記錄void CDlgDevIn:OnBtnDiadd() if (m_devs.GetCurSel()=CB_ERR)MessageBox("請(qǐng)選擇一個(gè)設(shè)備");return; if (!UpdateData()return; _RecordsetPtr pRst = NULL;CDevInRs rs; tryTESTHR(pRst.CreateInstance(_uuidof(Recordset); /打開數(shù)據(jù)庫(kù)表格到Recordest對(duì)象pRst->Open("device_in&q
54、uot;,_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_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國(guó)醫(yī)用冷敷頭帶行業(yè)供需現(xiàn)狀調(diào)研與經(jīng)營(yíng)管理風(fēng)險(xiǎn)分析報(bào)告
- 2025-2030中國(guó)人參行業(yè)營(yíng)銷動(dòng)態(tài)與競(jìng)爭(zhēng)格局分析報(bào)告
- 2025-2030中國(guó)中藥材銀杏葉行業(yè)供需格局及未來銷售渠道趨勢(shì)報(bào)告
- 2025-2030中國(guó)3-巰丙基三甲氧基硅烷行業(yè)前景動(dòng)態(tài)與產(chǎn)銷需求預(yù)測(cè)報(bào)告
- 2024年遼寧工程職業(yè)學(xué)院輔導(dǎo)員考試真題
- 綿陽市醫(yī)學(xué)會(huì)招聘筆試真題2024
- 核酸采購(gòu)現(xiàn)場(chǎng)管理制度
- 江蘇高校能耗管理制度
- 景區(qū)員工崗位管理制度
- 下肢靜脈炎的護(hù)理講課件
- 7數(shù)滬科版期末考試卷-2024-2025學(xué)年七年級(jí)(初一)數(shù)學(xué)下冊(cè)期末考試模擬卷03
- 涼山州木里縣選聘社區(qū)工作者筆試真題2024
- 配電線路高級(jí)工練習(xí)試題附答案
- (2025)干部任前廉政知識(shí)考試題庫(kù)及答案
- 護(hù)士N2理論考試試題及答案
- 2025年河北省中考麒麟卷地理(二)
- 第23課+和平發(fā)展合作共贏的時(shí)代潮流+課件高一歷史下學(xué)期統(tǒng)編版(2019)必修中外歷史綱要下
- 小說閱讀-2025年中考語文一模試題分項(xiàng)匯編解析版
- 整套企業(yè)人事管理制度
- 大學(xué)學(xué)院輔導(dǎo)員工作考核基本指標(biāo)
- 中國(guó)鐵路濟(jì)南局集團(tuán)招聘筆試題庫(kù)2025
評(píng)論
0/150
提交評(píng)論