庫(kù)存管理系統(tǒng)論文_第1頁(yè)
庫(kù)存管理系統(tǒng)論文_第2頁(yè)
庫(kù)存管理系統(tǒng)論文_第3頁(yè)
庫(kù)存管理系統(tǒng)論文_第4頁(yè)
庫(kù)存管理系統(tǒng)論文_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、庫(kù)存管理系統(tǒng)論文- 1 - 信息系統(tǒng) 課程設(shè)計(jì)說(shuō)明書 設(shè)計(jì)題目:庫(kù)存管理系統(tǒng) 設(shè) 計(jì) 者: 指導(dǎo)教師: 07信息系統(tǒng)工程 2010年 6 月 6 日 - 2 - 目錄:第一章 可行性分析1.1開發(fā)環(huán)境與開發(fā)工具1.2可行性報(bào)告1.2.1 開發(fā)必要性1.2.2技術(shù)可行性1.2.3經(jīng)濟(jì)可行性第二章 系統(tǒng)分析 2.1 系統(tǒng)需求分析2.2 功能需求分析2.3 業(yè)務(wù)流程分析2.4 數(shù)據(jù)與數(shù)據(jù)流程分析第三章 系統(tǒng)設(shè)計(jì)3.1 數(shù)據(jù)庫(kù)設(shè)計(jì)3.2 代碼設(shè)計(jì)第四章 設(shè)計(jì)總結(jié)4.1 工作總結(jié)4.2 設(shè)計(jì)過程總結(jié)4.3 設(shè)計(jì)展望 參考文獻(xiàn) - 3 -第一章 可行性分析1.1開發(fā)環(huán)境和開發(fā)工具操作系統(tǒng):windows

2、xp開發(fā)語(yǔ)言:c+數(shù)據(jù)庫(kù): sql 2000數(shù)據(jù)庫(kù)訪問控件:ado1.2可行性分析1.2.1 開發(fā)必要性隨著計(jì)算機(jī)及網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,internet/intranet應(yīng)用在全球范圍內(nèi)日益普及,當(dāng)今社會(huì)正快速向信息化社會(huì)前進(jìn),信息自動(dòng)化的作用也越來(lái)越大,從而可以使我們從繁雜的信息管理中解放出來(lái),提高了我們的工作效率。如今,信息網(wǎng)絡(luò)技術(shù)已經(jīng)無(wú)處不在,無(wú)時(shí)不在了,各種各樣的信息管理系統(tǒng)也就應(yīng)運(yùn)而生。目前,隨著企業(yè)規(guī)模的不斷壯大,產(chǎn)品的種類和數(shù)量都不斷增加,產(chǎn)品的流通越來(lái)越多,這就使產(chǎn)品的存儲(chǔ)需求不斷增加,需要工作人員花費(fèi)很大力氣來(lái)統(tǒng)籌管理這項(xiàng)工作,為了保證工作的正確性和可靠性同時(shí)提高管理的效率,

3、很有必要建立一個(gè)庫(kù)存管理系統(tǒng),使貨品管理工作規(guī)范化,系統(tǒng)化,程序化。1.2.2 技術(shù)可行性在技術(shù)上,如今成熟的語(yǔ)言有很多,像是powerbuilder 、vb 、delphi等都能開發(fā)出很好用的系統(tǒng)。而本次設(shè)計(jì)我采用的是vc,也是很成熟的語(yǔ)言,再加上數(shù)據(jù)庫(kù)如今的發(fā)展?fàn)顩r,開發(fā)出一個(gè)庫(kù)存管理的應(yīng)- 4 -用程序是沒有問題的。鑒于軟硬件方面對(duì)系統(tǒng)的需求,軟件要求易學(xué),界面友好,容易掌握,可以很簡(jiǎn)單方便的進(jìn)行圖書信息管理。硬件的配置要求不能太高,這樣可以很好的適應(yīng)當(dāng)前的企業(yè)辦公管理工作,如今電腦軟硬件技術(shù)飛速發(fā)展,計(jì)算機(jī)系統(tǒng)開發(fā)人員也比比皆是,開發(fā)知識(shí)密集型的信息系統(tǒng)的技術(shù)條件也已經(jīng)很成熟了。1.2

4、.3 經(jīng)濟(jì)可行性在經(jīng)濟(jì)上,費(fèi)用的支出和帶來(lái)的巨大收益相比自是不能相提并論了,至于管理上,工作人員對(duì)于這項(xiàng)工程的實(shí)施必然是持贊成的態(tài)度,因?yàn)檫@樣會(huì)大大減輕他們的工作量提高工作效率。且成本低,建成后的維護(hù)費(fèi)用也與線性系統(tǒng)運(yùn)行費(fèi)用相同,而每年可以促進(jìn)企業(yè)倉(cāng)庫(kù)存儲(chǔ)的工作優(yōu)化、庫(kù)存產(chǎn)品的有效利用率,并可有效降低企業(yè)庫(kù)存的不必要支出,提高企業(yè)產(chǎn)品存儲(chǔ)資金的有效利用。第二章 系統(tǒng)分析2.1 業(yè)務(wù)范圍分析1.企業(yè)庫(kù)存基礎(chǔ)信息設(shè)置:這是企業(yè)庫(kù)存最重要的模塊之一,它將對(duì)倉(cāng)庫(kù)存儲(chǔ)中的產(chǎn)品、雇員、客戶和倉(cāng)庫(kù)的基本信息進(jìn)行管理操作,所有的產(chǎn)品、倉(cāng)庫(kù)等原始數(shù)據(jù)輸入都是在這里實(shí)現(xiàn)的,有了這里的數(shù)據(jù)輸入,才能開始以后的諸如產(chǎn)

5、品入庫(kù)、產(chǎn)品出庫(kù)等操作。(1)產(chǎn)品信息設(shè)置:該功能允許用戶添加、修改和刪除產(chǎn)品信息,在輸入過程中,程序自動(dòng)生成產(chǎn)品編號(hào)以方便產(chǎn)品的管理和入庫(kù)時(shí)選- 5 -擇產(chǎn)品,同時(shí)程序也檢查輸入的合法性。(2)雇員信息設(shè)置:該功能允許用戶添加、修改和刪除雇員信息,在信息錄入過程中,程序自動(dòng)生成雇員編號(hào)以方便對(duì)員工信息的管理,同時(shí)程序也檢查輸入的合法性。(3)客戶信息設(shè)置:企業(yè)庫(kù)存產(chǎn)品出庫(kù),必然要登記貨物發(fā)給的客戶,該功能允許用戶對(duì)客戶的名稱、聯(lián)系方式、地址等基本信息進(jìn)行添加、修改和刪除,在信息錄入過程中,程序自動(dòng)生成客戶編號(hào)以方便對(duì)客戶信息的管理,同時(shí)程序也檢查輸入的合法性。(4)倉(cāng)庫(kù)信息設(shè)置:產(chǎn)品的入庫(kù),

6、出庫(kù),調(diào)撥和報(bào)損都需要倉(cāng)庫(kù)的基本信息。該功能允許用戶添加、修改和刪除倉(cāng)庫(kù)信息,在信息錄入過程中,程序自動(dòng)生成倉(cāng)庫(kù)編號(hào)以方便對(duì)倉(cāng)庫(kù)信息的管理,同時(shí)程序也檢查輸入的合法性。2.庫(kù)存信息的錄入與修改(1)產(chǎn)品入庫(kù)單信息錄入與修改:該功能允許用戶輸入入庫(kù)單信息,在輸入過程中,程序自動(dòng)生成產(chǎn)品入庫(kù)單編號(hào)以方便對(duì)入庫(kù)產(chǎn)品的信息管理和單據(jù)的查詢,同時(shí)程序也檢查輸入的合法性。(2)產(chǎn)品出庫(kù)單信息錄入與修改:該功能允許用戶輸入出庫(kù)單信息,在輸入過程中,程序自動(dòng)生成產(chǎn)品出庫(kù)單編號(hào)以方便對(duì)出庫(kù)產(chǎn)品的信息管理和單據(jù)的查詢,同時(shí)程序也檢查輸入的合法性。(3)產(chǎn)品調(diào)撥單信息錄入與修改:因?yàn)閭}(cāng)庫(kù)所處地區(qū)的不同,以及庫(kù)存量的

7、差異,所以企業(yè)內(nèi)部倉(cāng)庫(kù)之間貨品的調(diào)撥時(shí)必然的。該功能允許用戶輸入調(diào)撥單信息,在輸入過程中,程序自動(dòng)生成產(chǎn)品調(diào)撥單- 6 -編號(hào)以方便對(duì)調(diào)撥產(chǎn)品的信息管理和單據(jù)的查詢,同時(shí)程序也檢查輸入的合法性。(4)產(chǎn)品報(bào)損單信息錄入與修改:因?yàn)樵诋a(chǎn)品的運(yùn)輸過程或是存儲(chǔ)過程中,會(huì)有產(chǎn)品的損壞,所以系統(tǒng)也應(yīng)該具備產(chǎn)品報(bào)損信息的管理功能。該功能允許用戶輸入產(chǎn)品報(bào)損單信息,在輸入過程中,程序自動(dòng)生成產(chǎn)品報(bào)損單編號(hào)以方便對(duì)報(bào)損產(chǎn)品的信息管理和單據(jù)的查詢,同時(shí)程序也檢查輸入的合法性。3.庫(kù)存信息的查詢(1)產(chǎn)品入庫(kù)單信息的查詢:該功能不僅要對(duì)產(chǎn)品入庫(kù)單據(jù)的信息(如:入庫(kù)倉(cāng)庫(kù)、生產(chǎn)部門、產(chǎn)品名稱、經(jīng)辦人等)進(jìn)行查詢,而且

8、要對(duì)該單據(jù)所包括的產(chǎn)品的信息(產(chǎn)品名稱、型號(hào)、單價(jià)等)進(jìn)行查詢。(2)產(chǎn)品出庫(kù)單信息的查詢:該功能不僅要對(duì)產(chǎn)品出庫(kù)單據(jù)的信息(倉(cāng)庫(kù)名稱、經(jīng)辦人、客戶等)進(jìn)行查詢,而且要對(duì)該單據(jù)所包括的產(chǎn)品的信息(產(chǎn)品名稱、型號(hào)、單價(jià)等)進(jìn)行查詢。(3)產(chǎn)品調(diào)撥單信息的查詢:該功能不僅要對(duì)產(chǎn)品調(diào)撥單據(jù)的信息(入庫(kù)倉(cāng)庫(kù)、出庫(kù)倉(cāng)庫(kù)、經(jīng)辦人等)進(jìn)行查詢,而且要對(duì)該單據(jù)所包括的產(chǎn)品的信息(產(chǎn)品名稱、型號(hào)、單價(jià)等)進(jìn)行查詢。(4)產(chǎn)品報(bào)損單信息的查詢:該功能不僅要對(duì)產(chǎn)品報(bào)損單據(jù)的信息(報(bào)損倉(cāng)庫(kù)、經(jīng)辦人等)進(jìn)行查詢,而且要對(duì)該單據(jù)所包括的產(chǎn)品的信息(產(chǎn)品名稱、型號(hào)、單價(jià)等)進(jìn)行查詢。4.庫(kù)存信息的統(tǒng)計(jì)分析- 7 -(1)入

9、庫(kù)產(chǎn)品信息匯總統(tǒng)計(jì):該功能對(duì)各種入庫(kù)產(chǎn)品的存儲(chǔ)倉(cāng)庫(kù)、存儲(chǔ)數(shù)量、存儲(chǔ)金額進(jìn)行了匯總統(tǒng)計(jì)。(2)出庫(kù)產(chǎn)品信息匯總統(tǒng)計(jì):該功能對(duì)各種出庫(kù)產(chǎn)品的出庫(kù)倉(cāng)庫(kù)、出庫(kù)數(shù)量、出庫(kù)金額進(jìn)行了匯總統(tǒng)計(jì)。 該庫(kù)存管理系統(tǒng)的功能圖如下: 圖2.1庫(kù)存信息管理系統(tǒng)功能圖 2.2 業(yè)務(wù)流程分析 庫(kù)存管理數(shù)據(jù)流圖- 8 - 圖2.2 系統(tǒng)數(shù)據(jù)流圖2.3 數(shù)據(jù)字典- 9 - 圖2.3 數(shù)據(jù)字典 - 10 -2.4 數(shù)據(jù)與數(shù)據(jù)流程分析第三章 系統(tǒng)設(shè)計(jì)3.1 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì) 3.2 e-r圖- 11 - 圖3.1 產(chǎn)品信息實(shí)體e-r圖 圖3.2 雇員信息實(shí)體e-r圖- 12 - 圖3.3 客戶信息實(shí)體e-r圖 圖3.4 倉(cāng)庫(kù)信息

10、實(shí)體e-r圖- 13 - 圖3.5 入庫(kù)單信息實(shí)體e-r圖 圖3.6 入庫(kù)單產(chǎn)品信息實(shí)體e-r圖- 14 - 圖3.7 出庫(kù)單信息實(shí)體e-r圖 圖3.8 出庫(kù)單產(chǎn)品信息實(shí)體e-r圖- 15 - 圖3.9 調(diào)撥單信息實(shí)體e-r圖 圖3.10 調(diào)撥單產(chǎn)品信息實(shí)體e-r圖- 16 - 圖3.11 報(bào)損單信息實(shí)體e-r圖 圖3.12 報(bào)損單產(chǎn)品信息實(shí)體e-r圖- 17 - 圖3.13整個(gè)系統(tǒng)的er圖- 18 -3.3數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)有以下十三個(gè)表組成: 表3.1 產(chǎn)品基本信息表字段說(shuō)明 - 19 -表3.2 雇員基本信息表字段說(shuō)明- 20 - 表3.3客戶基本信息表字段說(shuō)明- 21 - 表3.4倉(cāng)庫(kù)表

11、字段說(shuō)明 表3.5產(chǎn)品入庫(kù)單基本信息表字段說(shuō)明- 22 - 表3.6入庫(kù)產(chǎn)品信息表字段說(shuō)明 表3.7產(chǎn)品出庫(kù)單基本信息表字段說(shuō)明- 23 - 表3.8出庫(kù)產(chǎn)品信息表字段說(shuō)明 表3.9產(chǎn)品調(diào)撥單基本信息表字段說(shuō)明 - 24 -表3.10調(diào)撥產(chǎn)品信息表字段說(shuō)明 表3.11產(chǎn)品報(bào)損單基本信息表字段說(shuō)明 表3.12報(bào)損產(chǎn)品信息表字段說(shuō)明- 25 -3.2代碼設(shè)計(jì)我在應(yīng)用程序類storeapp的initinstance方法中進(jìn)行初始化。各模塊在連接數(shù)據(jù)庫(kù)的時(shí)候都需要聲明所需的指針,聲明如下:_recordsetptr m_pidrecordset; / 記錄集指針的個(gè)數(shù)可根據(jù)實(shí)際的需要來(lái)確定聲明幾個(gè)_c

12、onnectionptr m_pconn;在storeapp的構(gòu)造函數(shù)中定義數(shù)據(jù)庫(kù)的連接字符串:treeconnstring=_t("data source=saledata;uid=sa;pwd=;") 數(shù)據(jù)庫(kù)的初始化,連接代碼如下:hresult hres;tryhres=m_pconn.createinstance(_t("adodb.connection");/創(chuàng)建connection對(duì)象 m_pconn->connectiontimeout = 8; /超時(shí)八秒 hres=m_pconn->open(_bstr_t(lpctstr)

13、treeconnstring),_t(""),_t(""),admodeunknown); /treeconnstring為連接字符串 catch(_com_error e) /捕捉異常 - 26 - cstring errormessage; errormessage.format(_t("連接saledata數(shù)據(jù)庫(kù)失敗!rn錯(cuò)誤信息:%s"),e.errormessage();afxmessagebox(errormessage); /顯示錯(cuò)誤信息 return false;hres = m_pidrecordset.create

14、instance(_t("adodb.recordset");/創(chuàng)建recordset對(duì)象 if (succeeded(hres) hres = m_pidrecordset->open(lptstr)strsql.getbuffer(130), m_pconn.getinterfaceptr(), adopendynamic,adlockpessimistic,adcmdtext); if(succeeded(hres) trace(_t("連接成功!n");在要用記錄集指針的時(shí)候可以用createinstance方法創(chuàng)建ado連接對(duì)象。在程序中

15、使用完數(shù)據(jù)庫(kù)時(shí),還需關(guān)閉連接,代碼如下:m_pidrecordset->close();- 27 -3.2.1 基本信息模塊的實(shí)現(xiàn) 圖3.2.1單擊條目后產(chǎn)品信息對(duì)話框1. 建立產(chǎn)品基本信息的cproductinfo對(duì)話框類使用visual c+6.0的“inserttype”為“mfc class”,“name”為“cproductinfo”,“base class”為“cdialog”,“dialog id”為“idd_productinfo_form”。然后單擊“ok”按鈕即可完成cproductinfo類的創(chuàng)建。2.為模塊“基本信息設(shè)置”創(chuàng)建菜單項(xiàng),如表3.2.1所示表3.2.1

16、基本信息設(shè)置菜單說(shuō)明- 28 -3.主要代碼 (1)重載對(duì)話框的oninitdialog函數(shù)在oninitdialog函數(shù)中主要完成列表框控件的樣式設(shè)定、列標(biāo)題添加、數(shù)據(jù)庫(kù)中已經(jīng)存在的數(shù)據(jù)顯示和編輯框及按鈕控件可用性設(shè)置、為存放倉(cāng)庫(kù)組合框控件添加可選項(xiàng)。步驟如下:調(diào)用列表框控件的insertcolumm()方法插入列,并設(shè)定列標(biāo)題;分別查詢storehouse、product表,并構(gòu)造相應(yīng)的查詢結(jié)果記錄集;打開storehouse的查詢結(jié)果記錄集,將記錄集中的數(shù)據(jù)插入到相應(yīng)的組合框中;打開product的查詢結(jié)果記錄集,調(diào)用列表框控件的insertitem()和setitemtext()方法將

17、記錄集中的數(shù)據(jù)插入到列表框控件中;調(diào)用控件的getdlgitem()方法,為控件可用性控制變量賦值;調(diào)用控件的enablewindow()方法,設(shè)定控件的可用性。部分代碼如下:style=m_list.getexstyle(); style=(style|lvs_ex_gridlines|lvs_ex_fullrowselect)&(lvs_ex_checkboxes) ;/設(shè)定列表框風(fēng)格 網(wǎng)格行選擇 取消復(fù)選框 m_list.setextendedstyle(style); /為列表框控件添加列,并設(shè)定列標(biāo)題 m_list.insertcolumn(0,"商品編號(hào)"

18、;,lvcfmt_left,100);/左對(duì)齊 寬度100m_list.insertcolumn(1,"商品名稱",lvcfmt_left,100); /左對(duì)齊- 29 -寬度100 /此處省略部分代碼 _recordsetptr m_plistrecordset; /用于創(chuàng)建一個(gè)查詢記錄集 cstring strsql; hresult htres; strsql="select * from storehouse" /構(gòu)造查詢語(yǔ)句為存放倉(cāng)庫(kù)組合框添加可選項(xiàng) _recordsetptr m_pstorehouserecordset; htres = m

19、_pstorehouserecordset.createinstance(_t("adodb.recordset"); if (succeeded(htres) htres = m_pstorehouserecordset->open(lptstr)strsql.getbuffer(130),(cstoreapp*)afxgetapp()->m_pconn.getinterfaceptr(), adopendynamic,adlockpessimistic,adcmdtext);/打開查詢結(jié)果記錄集 if(succeeded(htres) trace(_t(&q

20、uot;連接成功!n"); while(!(m_pstorehouserecordset->adoeof) - 30 - m_storehousecombo.addstring(cstoreapp*)afxgetapp()->getstringfromvariant(m_pstorehouserecordset->getcollect("storehousename");/插入組合框m_pstorehouserecordset->movenext();/記錄集指針向后移動(dòng) m_pstorehouserecordset->close()

21、; /關(guān)閉記錄集 /將目前數(shù)據(jù)庫(kù)中已經(jīng)存在的產(chǎn)品信息添加到產(chǎn)品列表框中 strsql="select * from product"/構(gòu)造查詢語(yǔ)句 try hresult htres; htres = m_plistrecordset.createinstance(_t("adodb.recordset"); if (succeeded(htres) htres = m_plistrecordset->open(lptstr)strsql.getbuffer(130), (cstoreapp*)afxgetapp()->m_pconn.get

22、interfaceptr(),- 31 -adopendynamic,adlockpessimistic,adcmdtext);/打開查詢結(jié)果記錄集 if(succeeded(htres) trace(_t("連接成功!n"); if (!(m_plistrecordset->adoeof) int i=0; while(!(m_plistrecordset->adoeof) m_list.insertitem(i,(cstoreapp*)afxgetapp()->getstringfromvariant(m_plistrecordset->getc

23、ollect("productid");/產(chǎn)品編號(hào) m_list.setitemtext(i,1,(cstoreapp*)afxgetapp()->getstringfromvariant(m_plistrecordset->getcollect("productname"); /產(chǎn)品名稱 /此處省略部分代碼if (!(m_plistrecordset->adoeof) m_plistrecordset->movenext(); /記錄集指針向后移動(dòng) i+; - 32 - catch(_com_error e)/捕捉異常 cstr

24、ing errormessage; messagebox("創(chuàng)建記錄集失敗!","錯(cuò)誤");flag=0; /為對(duì)話框控件可用性控制變量賦值 tx_productid=getdlgitem(idc_productid); tx_productname=getdlgitem(idc_productname); /此處省略部分代碼 bt_modify=getdlgitem(idc_modify); /設(shè)定按鈕的可用性 bt_save->enablewindow(false);/保存按鈕可用 bt_modify->enablewindow(fals

25、e);/修改按鈕可用 bt_delete->enablewindow(false);/刪除按鈕可用 /初始情況下,所有的編輯框不可用 tx_productid->enablewindow(false); /此處省略部分代碼updatedata(false); /更新對(duì)話框數(shù)據(jù)return true;(2)實(shí)現(xiàn)列表框控件的nm_click消息函數(shù)- 33 -當(dāng)列表框中的條目被單擊(如列表框的條目被選中)時(shí)該函數(shù)自動(dòng)被調(diào)用。作用是當(dāng)列表框中的一個(gè)條目被選中時(shí),將該條目對(duì)應(yīng)的信息顯示到相應(yīng)的編輯框控件中,使按鈕“增加”、“修改”、“刪除”變?yōu)榭捎?,“存盤”按鈕不可用;當(dāng)沒有條目被選中時(shí),

26、“修改”、“刪除”、“保存”按鈕不可用,只有“增加”按鈕可用,同時(shí)將編輯框控件內(nèi)容清空并使其不可用。步驟如下:調(diào)用m_list的getfirstselecteditemposition()方法,獲得單擊的位置。調(diào)用m_list的getnextselecteditem()方法,獲得單擊的條目。調(diào)用m_list的getitemtext()方法,獲得條目中對(duì)應(yīng)列的字符串,并將其轉(zhuǎn)換成預(yù)定的類型。具體代碼如下:void cproductinfo:onclicklist1(nmhdr* pnmhdr, lresult* presult) updatedata(true);/將對(duì)話框中數(shù)據(jù)更新到變量 po

27、sition pos = m_list.getfirstselecteditemposition();/獲取單擊的位置 目 m_productid=m_list.getitemtext(nfirstselitem,0);/產(chǎn)品編號(hào) /省略部分代碼 if(pos) int nfirstselitem = m_list.getnextselecteditem(pos);/獲取單擊的條- 34 - bt_modify->enablewindow(true); /修改按鈕可用 bt_delete->enablewindow(true); /刪除按鈕可用 updatedata(false);

28、 /將數(shù)據(jù)更新到對(duì)話框 *presult = 0;(3)為“增加”按鈕提供實(shí)現(xiàn)函數(shù)“增加”按鈕只是完成添加的準(zhǔn)備工作,使得除了“產(chǎn)品編號(hào)”以外的所有編輯控件可用,并且為他們?cè)O(shè)定默認(rèn)值。通過查詢數(shù)據(jù)庫(kù),查詢可用的產(chǎn)品入庫(kù)單號(hào),并更新下一個(gè)可用的產(chǎn)品入庫(kù)單號(hào)。當(dāng)所有/為產(chǎn)品編號(hào)設(shè)定格式 m_productid.format("product0000%d",productid); else if(productid<100&&productid>9)- 35 - m_productid.format("product000%d",p

29、roductid); else if(productid<1000&&productid>99) m_productid.format("product00%d",productid); cstring str; str.format("%d",productid+1); /更新下一個(gè)可用的產(chǎn)品編號(hào) (cstoreapp*)afxgetapp()->m_pidrecordset->putcollect("productid",_variant_t(str);(cstoreapp*)afxgeta

30、pp()->m_pidrecordset->update();/更新數(shù)據(jù)庫(kù) /為對(duì)話框控件的變量設(shè)定默認(rèn)值 m_productname = _t(""); m_standard = _t(""); /此處省略部分代碼 flag=1; /添加/設(shè)定除產(chǎn)品編號(hào)以外的其他編輯控件均可用 tx_productid->enablewindow(false); /此處省略部分代碼 tx_nummin->enablewindow(true);/設(shè)定按鈕的可用性 bt_save->enablewindow(true); /保存按鈕可用 bt

31、_add->enablewindow(false); /添加按鈕不可用 bt_modify->enablewindow(false); /修改按鈕不可用- 36 - bt_delete->enablewindow(false); /刪除按鈕不可用 updatedata(false);/將數(shù)據(jù)更新到對(duì)話框(4)為修改按鈕提供實(shí)現(xiàn)函數(shù)“修改”按鈕只是完成修改的準(zhǔn)備工作,除了“產(chǎn)品入庫(kù)單號(hào)”外的其他編輯控件均可用。當(dāng)所有的內(nèi)容修改完畢后,單擊“存盤”按鈕才能實(shí)現(xiàn)實(shí)際的保存工作。代碼如下:void cproductinfo:onmodify()/設(shè)定除產(chǎn)品編號(hào)以外的其他編輯控件均可用

32、 (5)為存盤按鈕提供實(shí)現(xiàn)函數(shù)“存盤”按鈕用于將新添加的條目或修改后的條目存儲(chǔ)到數(shù)據(jù)庫(kù)中,并將列表框控件中的內(nèi)容刷新,同時(shí)使新增加的條目或修改的條目在列表框控件中可見并處于選中狀態(tài)。實(shí)現(xiàn)時(shí)如果是新增,查詢所有的記錄,在該記錄集中增加記錄并更新數(shù)據(jù)庫(kù);如果是修改記錄,則查tx_productid->enablewindow(false); tx_productname->enablewindow(true); /此處省略部分代碼 tx_nummin->enablewindow(true); flag=2;/修改 bt_save->enablewindow(true);/保

33、存按鈕可用- 37 -詢產(chǎn)品編號(hào)等于目前編輯的產(chǎn)品編號(hào)的記錄,修改該記錄,最后將記錄更新到數(shù)據(jù)庫(kù)。代碼如下:void cproductinfo:onsave() updatedata(true);/將控件中的值更新到變量 _recordsetptr m_precordset; cstring strsql; if(flag=1) /添加 strsql="select * from product" ;/構(gòu)造sql語(yǔ)句 try hresult htres; htres = m_precordset.createinstance(_t("adodb.recordset

34、"); if (succeeded(htres) htres = m_precordset->open(lptstr)strsql.getbuffer(130),(cstoreapp*)afxgetapp()->m_pconn.getinterfaceptr(),adopendynamic,adlockpessimistic,adcmdtext);/打開查詢結(jié)果記錄集 if(succeeded(htres) trace(_t("連接成功!n"); cstring str; m_precordset->addnew();/添加新的記錄- 38 -m

35、_precordset->putcollect("productid",_variant_t(m_productid);/品編號(hào)/此處省略部分代碼 產(chǎn)m_precordset->update(); /更新數(shù)據(jù)庫(kù) int j; j=m_list.getitemcount(); /獲取要插入的條目的位置 m_list.insertitem(j,m_productid); /產(chǎn)品編號(hào) m_list.setitemtext(j,1,m_productname); /產(chǎn)品名稱 /此處省略部分代碼 else if(flag=2) /修改 afxmessagebox(&quo

36、t;插入成功!"); /提示信息 catch(_com_error e)/捕捉異常 cstring errormessage; messagebox("創(chuàng)建記錄集失敗!","錯(cuò)誤"); strsql="select * from product where productid=" ;- 39 -strsql=strsql+m_productid+""/構(gòu)造查詢指定產(chǎn)品編號(hào)的產(chǎn)品的信息的sql語(yǔ)句 try hresult htres; htres = m_precordset.createinstance(

37、_t("adodb.recordset"); if (succeeded(htres) htres = m_precordset->open(lptstr)strsql.getbuffer(130), (cstoreapp*)afxgetapp()->m_pconn.getinterfaceptr(), adopendynamic,adlockpessimistic,adcmdtext);/打開查詢結(jié)果記錄集 if(succeeded(htres) trace(_t("連接成功!n"); cstring str;m_precordset-&g

38、t;putcollect("productname",_variant_t(m_productname);/產(chǎn)品名稱/此處省略部分代碼 afxmessagebox("修改成功!");/提示信息 - 40 - catch(_com_error e)/捕捉異常 cstring errormessage; messagebox("創(chuàng)建記錄集失敗!","錯(cuò)誤"); refresh(); /設(shè)定按鈕的可用性 bt_add->enablewindow(true);/添加按鈕可用 bt_delete->enablew

39、indow(true);/刪除按鈕可用 bt_modify->enablewindow(true);/修改按鈕可用 bt_save->enablewindow(false);/保存按鈕不可用 /所有的編輯控件均不可用 tx_productid->enablewindow(false); /此處省略部分代碼updatedata(false);/將數(shù)據(jù)更新到對(duì)話框(6)為“刪除”按鈕提供實(shí)現(xiàn)函數(shù)刪除選定的記錄或者是當(dāng)前記錄,先生成刪除指定產(chǎn)品編號(hào)的產(chǎn)品信息的sql語(yǔ)句,調(diào)用數(shù)據(jù)庫(kù)連接對(duì)象execute方法執(zhí)行該sql語(yǔ)句- 41 -將滿足條件的記錄從數(shù)據(jù)庫(kù)中刪除。最后將刪除的記錄

40、從列表框控件中清除并為編輯框控件變量賦默認(rèn)值。代碼如下:void cproductinfo:ondelete()caffirm dlg; if(dlg.domodal()!=idok)/顯示確認(rèn)刪除對(duì)話框 return; _variant_t recordsaffected; cstring strsql; /構(gòu)造刪除記錄的sql語(yǔ)句 strsql="delete from product where productid=" strsql=strsql+m_productid+"" (cstoreapp*)afxgetapp()->m_pconn)

41、->execute(_bstr_t)strsql,&recordsaffected,adcmdtext); /執(zhí)行sql語(yǔ)句,刪除記錄position pos = m_list.getfirstselecteditemposition();/獲取刪除的記錄的位置if(pos) int nfirstselitem = m_list.getnextselecteditem(pos);/獲取刪除的記錄對(duì)應(yīng)的條目 m_list.deleteitem(nfirstselitem);/將該條目刪除 - 42 - bt_delete->enablewindow(false); /刪除按鈕

42、不可用 /為控件關(guān)聯(lián)變量賦默認(rèn)值 m_productid = _t("");/此處省略部分代碼 3.2.2 信息錄入模塊的實(shí)現(xiàn)本模塊主要完成庫(kù)存管理的基本處理,包括產(chǎn)品入庫(kù)、產(chǎn)品出庫(kù)、產(chǎn)品調(diào)撥、產(chǎn)品報(bào)損。下面以產(chǎn)品入庫(kù)單為例說(shuō)明操作流程。其實(shí)現(xiàn)界面如圖3.2.2所示。 refresh(); updatedata(false); /更新對(duì)話框數(shù)據(jù)- 43 - 圖3.2.2 產(chǎn)品入庫(kù)單選擇產(chǎn)品界面1.建立各對(duì)話框類2.創(chuàng)建菜單為模塊“信息錄入”創(chuàng)建菜單表3.2.3信息錄入菜單說(shuō)明- 44 -3.主要實(shí)現(xiàn)代碼產(chǎn)品入庫(kù)單對(duì)話框: (1)產(chǎn)品入庫(kù)單對(duì)話框的oninitdialog函數(shù)

43、:重載對(duì)話框的oninitdialog函數(shù),在該函數(shù)中主要完成如下幾項(xiàng)工作: 設(shè)定列表框控件屬性為可整行選擇,畫網(wǎng)格線,添加列并設(shè)定列標(biāo)題。 cdialog:oninitdialog();dword style;style=m_list.getexstyle();/獲取當(dāng)前列表框樣式style=(style|lvs_ex_gridlines|lvs_ex_fullrowselect)&(lvs_ex_checkboxes); m_list.setextendedstyle(style); /設(shè)定新的列表框樣式 m_list.insertcolumn(0,"產(chǎn)品編號(hào)"

44、,lvcfmt_left,100);/添加并設(shè)定列標(biāo)題/此處省略部分代碼m_list.insertcolumn(6,"金額",lvcfmt_left,100);為對(duì)話框中的組合框添加可選項(xiàng),包括采購(gòu)員、倉(cāng)庫(kù)名稱。具體步驟如下:第一步:構(gòu)造查詢的sql語(yǔ)句。第二步:調(diào)用open()方法打開查詢結(jié)果記錄集。第三步:調(diào)用組合框控件的addstring()方法,依次將查詢結(jié)果記錄集中的數(shù)據(jù)插入到組合框控件中。- 45 -具體代碼如下: cstring strsql; hresult htres; _recordsetptr m_precordset;strsql="sel

45、ect distinct staffname from staff" /選擇員工信息htres = m_precordset.createinstance(_t("adodb.recordset");/recordset對(duì)象 if (succeeded(htres) htres = m_precordset->open(lptstr)strsql.getbuffer(130), (cstoreapp*)afxgetapp()->m_pconn.getinterfaceptr(), adopendynamic,adlockpessimistic,adcm

46、dtext);/打開記錄集 if(succeeded(htres) while(!(m_precordset->adoeof) m_dealercombo.addstring(cstoreapp*)afxgetapp()->getstringfromvariant(m_precordset->getcollect("staffname"); m_precordset->movenext(); - 46 -m_precordset->close();/省略插入倉(cāng)庫(kù)數(shù)據(jù)的部分代碼根據(jù)調(diào)用對(duì)話框的對(duì)象,確定對(duì)話框的顯示 /被查詢對(duì)話框調(diào)用 bt_ad

47、d->enablewindow(true);/添加按鈕可用/此處省略部分代碼 else/被系統(tǒng)菜單調(diào)用 bt_add->enablewindow(false); updatedata(false); return true; /此處省略部分代碼 (cstoreapp*)afxgetapp()->m_pidrecordset->update();(2)為“新單”按鈕提供實(shí)現(xiàn)函數(shù)“新單”按鈕完成添加新的產(chǎn)品入庫(kù)單前的準(zhǔn)備工作,將除了“產(chǎn)品入庫(kù)單號(hào)”以外的所有編輯控件處于可用狀態(tài),并為這些編輯控件變量賦默認(rèn)值。生成新產(chǎn)品入庫(kù)單號(hào),更新下一個(gè)可用的報(bào)價(jià)單號(hào)。待錄入采購(gòu)入庫(kù)單信息

48、之后,單擊“存盤”按鈕完成信息的存儲(chǔ)。代碼- 47 -如下:intformid=(cstoreapp*)afxgetapp()->m_pidrecordset->getcollect("productinputformid").intval;/獲取新的產(chǎn)品入庫(kù)單號(hào) if(formid<10)/為產(chǎn)品入庫(kù)單號(hào)設(shè)定格式 m_productinputformid.format("cprk0000%d",formid); else if(formid<100&&formid>9) m_productinputform

49、id.format("cprk000%d",formid); else if(formid<1000&&formid>99) m_productinputformid.format("cprk00%d",formid); cstring str;/更新下一個(gè)可用單號(hào) str.format("%d",formid+1); (cstoreapp*)afxgetapp()->m_pidrecordset->putcollect("productinputformid",_varia

50、nt_t(str);(cstoreapp*)afxgetapp()->m_pidrecordset->update();/更新數(shù)據(jù)庫(kù) 值 m_producedate = coledatetime:getcurrenttime(); m_storehouse = _t(""); is_search=0; m_list.deleteallitems();/刪除所有條目 m_formdate = coledatetime:getcurrenttime();/為控件變量賦初- 48 - flag=1; updatedata(false);/更新對(duì)話框數(shù)據(jù)(3)為修改按鈕

51、提供實(shí)現(xiàn)函數(shù)“修改”按鈕完成修改當(dāng)前產(chǎn)品入庫(kù)但前的準(zhǔn)備工作,將除了“產(chǎn)品入庫(kù)單號(hào)”以外的所有編輯控件處于可用狀態(tài)。待修改完產(chǎn)品入庫(kù)單信息之后,單擊“保存”按鈕完成信息的存儲(chǔ)。代碼如下: void cproductinputform:onmodify2()flag=2;/設(shè)定按鈕的可用性 (4)為刪除按鈕提供實(shí)現(xiàn)函數(shù):“刪除”按鈕用于刪除當(dāng)前的產(chǎn)品入庫(kù)單,刪除信息之前系統(tǒng)會(huì)提示用戶是否要?jiǎng)h除,如果選擇“是”則刪除該條記錄;否則,不進(jìn)行任何操作,直接返回。其實(shí)現(xiàn)方式和5.3.1節(jié)中,基礎(chǔ)信息設(shè)置的“刪除”基本一致,這里不再作贅述。(5)為“選擇產(chǎn)品”按鈕提供實(shí)現(xiàn)的函數(shù)“選擇產(chǎn)品”按鈕用于在修改或者

52、新建產(chǎn)品入庫(kù)單時(shí),為產(chǎn)品入庫(kù)單增加新的產(chǎn)品。該函數(shù)調(diào)用產(chǎn)品選擇對(duì)話框。代碼如下: bt_add->enablewindow(false); /此處省略部分代碼 tx_remark->enablewindow(true);- 49 - cselectproduct dlg;/構(gòu)造產(chǎn)品選擇對(duì)話框 if(dlg.domodal()=idok) float total=dlg.m_num*dlg.m_price;/計(jì)算金額 int i=m_list.getitemcount();/獲得插入列表框的位置 cstring str; m_list.insertitem(i,dlg.m_produ

53、ctid);/產(chǎn)品編號(hào) m_list.setitemtext(i,1,dlg.m_productname);/產(chǎn)品名稱 /此處省略部分代碼(6)為“取消選取”按鈕提供實(shí)現(xiàn)函數(shù)“取消選取”按鈕用于在修改或者新建產(chǎn)品入庫(kù)單時(shí),刪除產(chǎn)品入庫(kù)單的產(chǎn)品列表框中的選中的產(chǎn)品。刪除時(shí)要經(jīng)過用戶的確認(rèn),如果選擇“是”,則刪除該條信息,否則不進(jìn)行任何操作。步驟如下: 第一步:顯示確認(rèn)是否刪除對(duì)話框;第二步:獲取單擊的位置,通過單擊的位置獲取單擊的條目; 第三步:具體從數(shù)據(jù)庫(kù)中刪除要等保存是刪除。具體代碼如下:caffirm dlg;/構(gòu)造刪除對(duì)話框 if(dlg.domodal()!=idok) return; position pos = m_list.getfirstselecteditemposition();/確定刪除條目的位置- 50 - if(pos) int nfirstselitem = m_list.getnextselecteditem(pos);/確定刪除的條目 m_list.deleteitem

溫馨提示

  • 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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論