倉庫管理系統(tǒng)數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(jì)說明_第1頁
倉庫管理系統(tǒng)數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(jì)說明_第2頁
倉庫管理系統(tǒng)數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(jì)說明_第3頁
倉庫管理系統(tǒng)數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(jì)說明_第4頁
倉庫管理系統(tǒng)數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(jì)說明_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 . . 49/494.2數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(jì)是一個(gè)非常重要的問題,數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)的好壞將直接對(duì)應(yīng)用系統(tǒng)的效率以與實(shí)現(xiàn)的效果產(chǎn)生影響,好的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)會(huì)減少數(shù)據(jù)庫的存儲(chǔ)量,數(shù)據(jù)的完整性和一致性比較高,系統(tǒng)具有較快的響應(yīng)速度。在數(shù)據(jù)庫系統(tǒng)開發(fā)設(shè)計(jì)的時(shí)候應(yīng)該盡量考慮全面,尤其應(yīng)該仔細(xì)考慮用戶的各種需求,避免在設(shè)計(jì)中浪費(fèi)不必要的人力和物力。4.2.1數(shù)據(jù)庫需求分析數(shù)據(jù)庫需求分析是數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)的第一階段,是非常重要的一個(gè)階段。在這個(gè)階段主要是手機(jī)基本數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)以與確定數(shù)據(jù)處理的流程,為以后進(jìn)一步設(shè)計(jì)打下基礎(chǔ)。在仔細(xì)調(diào)查企業(yè)倉庫物資設(shè)備管理過程的基礎(chǔ)上,我們得到本系統(tǒng)所處理的數(shù)據(jù)流程,如圖

2、4-2所示。 倉庫現(xiàn)有庫存 各部門需求 企業(yè)總體生產(chǎn)計(jì)劃匯總 處理設(shè)備 采購 設(shè)備 出庫設(shè)備 入庫 設(shè)備 還庫圖4-2 數(shù)據(jù)流程圖針對(duì)本實(shí)例,通過對(duì)企業(yè)倉庫管理的容和流程分析,設(shè)計(jì)的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)如下。設(shè)備代碼信息包括的數(shù)據(jù)項(xiàng)有設(shè)備號(hào)、設(shè)備名稱現(xiàn)有庫存信息包括的數(shù)據(jù)項(xiàng)有現(xiàn)有設(shè)備、現(xiàn)有數(shù)目、總數(shù)目、最大庫存、最小庫存等。設(shè)備入庫信息包括的數(shù)據(jù)項(xiàng)有設(shè)備號(hào)、入庫時(shí)間、供應(yīng)商、供應(yīng)商、入庫數(shù)量、價(jià)格、采購員等。設(shè)備出庫信息包括的數(shù)據(jù)項(xiàng)有設(shè)備號(hào)、使用部門、出庫時(shí)間、出庫狀況、經(jīng)手人、出庫數(shù)量、領(lǐng)取人、用途等。設(shè)備采購信息包括的數(shù)據(jù)項(xiàng)有采購的設(shè)備、采購員、供應(yīng)商、采購數(shù)目、采購時(shí)間等。設(shè)備歸還信息包括的

3、數(shù)據(jù)項(xiàng)有歸還設(shè)備、歸還部門、歸還數(shù)目、歸還時(shí)間、經(jīng)手人等。設(shè)備需求信息包括的數(shù)據(jù)項(xiàng)有需求的部門、需求設(shè)備、需求數(shù)目、需求時(shí)間等。日志信息包括操作員、操作人員、操作容。有了上面的數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)項(xiàng)和數(shù)據(jù)流程,就能進(jìn)行下面的數(shù)據(jù)庫設(shè)計(jì)。4.2.2 數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(jì)這一設(shè)計(jì)階段是在需求分析的基礎(chǔ)上,設(shè)計(jì)出能夠滿足用戶需求的各種實(shí)體,以與它們之間的關(guān)系,為后面的邏輯結(jié)構(gòu)設(shè)計(jì)打下基礎(chǔ)。本實(shí)例根據(jù)上面的設(shè)計(jì)規(guī)劃出的實(shí)體有庫存實(shí)體、入庫實(shí)體、出庫實(shí)體、采購實(shí)體、還庫實(shí)體、需體。實(shí)體和實(shí)體之間的關(guān)系E-R圖如圖4-34-8所示。 現(xiàn)有庫存設(shè)備號(hào) 現(xiàn)有庫存 警戒庫存 總數(shù)圖4-3 庫存實(shí)體E-R圖 入庫設(shè)備號(hào)

4、供應(yīng)商信息 采購價(jià)格信息 采購員圖4-4 入庫實(shí)體E-R圖 出庫設(shè)備號(hào) 使用部門 數(shù)量 時(shí)間 經(jīng)手人圖4-5 出庫實(shí)體E-R圖 計(jì)劃采購設(shè)備號(hào) 庫存信息 供應(yīng)信息 時(shí)間圖4-6 設(shè)備采購實(shí)體E-R圖 設(shè)備還庫 設(shè)備號(hào) 還庫時(shí)間 人 還庫數(shù)量 經(jīng)手人圖4-7 還庫實(shí)體E-R圖 部門需求 設(shè)備號(hào) 需求部門 需求數(shù)量 需求時(shí)間圖4-8 部門需體E-R圖 實(shí)體和實(shí)體之間的關(guān)系圖如圖4-9所示。 入庫 現(xiàn)有庫存 出庫 還庫 部門需求 設(shè)備采購圖4-9 實(shí)體關(guān)系圖4.2.3 數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)需要將上面的數(shù)據(jù)庫概念結(jié)構(gòu)轉(zhuǎn)化為Visual FoxPro 60.數(shù)據(jù)庫系統(tǒng)所支持的實(shí)際數(shù)據(jù)模型,也就是數(shù)據(jù)庫的邏

5、輯結(jié)構(gòu)。在上面的實(shí)體以與實(shí)體之間關(guān)系的基礎(chǔ)上,形成數(shù)據(jù)庫中表以與各個(gè)表之間的關(guān)系。倉庫管理系統(tǒng)數(shù)據(jù)庫中各個(gè)表的設(shè)計(jì)結(jié)果如下面的幾個(gè)表格所示,每個(gè)表格表示在數(shù)據(jù)庫中的一個(gè)表。表4-1為設(shè)備代碼表表4-1列名數(shù)據(jù)類型可否為空設(shè)備號(hào)(主鍵)數(shù)值型(20)不能為空設(shè)備名稱字符型(50)可為空表4-2為設(shè)備入庫表表4-2列名數(shù)據(jù)類型可否為空設(shè)備號(hào)數(shù)值型(20)不能為空入庫時(shí)間(主鍵)日期型(8)可為空供應(yīng)商字符型(50)可為空供應(yīng)商字符型(15)可為空入庫數(shù)量數(shù)值型(20)可為空價(jià)格字符型(10)可為空采購員字符型(20)可為空表4-3為設(shè)備出庫表表4-3列名數(shù)據(jù)類型可否為空設(shè)備號(hào)數(shù)值型(20)不能為空

6、出庫時(shí)間(主鍵)日期型(8)可為空使用部門字符型(50)可為空出庫狀況數(shù)值型(20)可為空經(jīng)手人字符型(20)可為空出庫數(shù)量數(shù)值型(10)不能為空領(lǐng)取人字符型(50)可為空用途字符型(50)可為空表4-4 為現(xiàn)有庫存表表4-4列名數(shù)據(jù)類型可否為空設(shè)備號(hào)(主鍵)數(shù)值型(20)不能為空現(xiàn)有庫存數(shù)值型(20)可為空最大庫存數(shù)值型(20)可為空最小庫存數(shù)值型(20)可為空總數(shù)數(shù)值型(20)可為空表4-5 為部門需求表表4-5列名數(shù)據(jù)類型可否為空設(shè)備號(hào)(主鍵)數(shù)值型(20)不能為空部門名稱字符型(20)不能為空需要數(shù)量數(shù)值型(20)可為空需求開始時(shí)間日期型(8)可為空需求結(jié)束時(shí)間日期型(8)可為空表4-

7、6 為設(shè)備還庫表表4-6列名數(shù)據(jù)類型可否為空設(shè)備號(hào)(主鍵)數(shù)值型(20)不能為空還庫時(shí)間日期型(8)不能為空倉庫管理員數(shù)值型(20)可為空歸還數(shù)量數(shù)值型(20)可為空歸還人字符型(10)可為空表4-7 為操作日志表表4-7列名數(shù)據(jù)類型可否為空操作員字符型(50)不能為空操作容字符型(50)不能為空操作時(shí)間日期型(8)可為空表4-8 為設(shè)備采購計(jì)劃表表4-8列名數(shù)據(jù)類型可否為空設(shè)備號(hào)數(shù)值型(20)不能為空現(xiàn)有庫存數(shù)值型(20)可為空總庫存數(shù)值型(20)可為空最大庫存數(shù)值型(20)可為空購買數(shù)量數(shù)值型(20)可為空供應(yīng)商字符型(20)不能為空價(jià)格字符型(10)可為空計(jì)劃采購時(shí)間(主鍵)日期型(8)

8、可為空4.3 數(shù)據(jù)庫結(jié)構(gòu)的實(shí)現(xiàn)在需求分析、概念結(jié)構(gòu)設(shè)計(jì)的基礎(chǔ)上得到數(shù)據(jù)庫的邏輯結(jié)構(gòu)之后,我們就可以在Visual FoxPro 60.數(shù)據(jù)庫系統(tǒng)中實(shí)現(xiàn)該邏輯結(jié)構(gòu)。圖4-10 新建數(shù)據(jù)庫打開如圖4-10所示的“倉庫管理”項(xiàng)目后,在項(xiàng)目管理器中展開數(shù)據(jù)文件夾,用鼠標(biāo)選中數(shù)據(jù)庫,單擊右側(cè)的“新建”按鈕,在彈出的對(duì)話框中將該數(shù)據(jù)庫文件儲(chǔ)存為C:倉庫管理倉庫管理.dbc。在彈出的如圖4-11所示的數(shù)據(jù)庫設(shè)計(jì)器中單擊鼠標(biāo)右鍵,選擇“新建表”,為數(shù)據(jù)庫添加數(shù)據(jù)表(表的容如表4-1至表4-8所示)。下面以表4-1為例來介紹表的建立過程。選擇“新建表”,在彈出的對(duì)話框中將表存儲(chǔ)為C:倉庫管理設(shè)備代碼.dbf。在

9、彈出的如圖4-12所示的表設(shè)計(jì)器中填寫表的容。請(qǐng)讀者將其與表4-1比較,可以發(fā)現(xiàn)表的字段名就是列名。由于在以后編寫的程序中對(duì)數(shù)據(jù)庫數(shù)據(jù)的操作通常是應(yīng)用表的字段,因此讀者在設(shè)計(jì)字段名時(shí)要挑選容易理解的名稱。字段設(shè)置完成后,單擊“確定”按鈕后為表輸入數(shù)據(jù),如不想現(xiàn)在輸入,可以先“取消”,以后再輸入。具體方法如下: 圖4-13 為表輸入數(shù)據(jù)如圖4-13所示,選中要輸入的數(shù)據(jù)的表,單擊“瀏覽”按鈕。此時(shí)彈出的無數(shù)據(jù)的表,在Visual FoxPro的主窗口中選擇“表”,選擇“追加薪記錄”后,就可以在表中輸入數(shù)據(jù)了,如圖4-14所示。不過這種方法只能一次輸入一條記錄,要輸入第二條記錄時(shí),需要再次追加新記

10、錄。如果有一個(gè)已有的數(shù)據(jù)的表,可以使用“使用追加記錄”將這個(gè)有數(shù)據(jù)的表追加到當(dāng)前表中,不過執(zhí)行那個(gè)該操作要求這兩個(gè)表的結(jié)構(gòu)完全一樣。4.4各個(gè)功能模塊的創(chuàng)建按照前面的分析,我們將管理系統(tǒng)的邏輯模塊統(tǒng)一到6個(gè)實(shí)際功能模塊中,如圖4-15所示。切換面板用于切換不同的操作,每項(xiàng)具體操作結(jié)束后,都會(huì)返回到切換面板。下面對(duì)各模塊的作用進(jìn)行說明:設(shè)備入庫模塊 添加設(shè)備到庫存中。設(shè)備出庫模塊 將設(shè)備從庫從中取出并記錄。設(shè)備還原模塊 將歸還待庫存的設(shè)備保存到數(shù)據(jù)庫。設(shè)備需求模塊 記錄各部門的設(shè)備要求。設(shè)備采購模塊 記錄要采購的設(shè)備。切換面板 用于切換到不同的操作,如設(shè)備入庫、設(shè)備出庫等。顯示報(bào)表 顯示庫存過多

11、、庫存不足等信息。下面就按照功能模塊圖來設(shè)計(jì)該倉庫管理系統(tǒng)。首先在Visual FoxPro 6.0中建立一個(gè)項(xiàng)目管理器,以便管理本系統(tǒng)中所有數(shù)據(jù),命名為倉庫管理。一下操作均在該項(xiàng)目管理器中進(jìn)行。以下所有表單的“Desktop”屬性全部為“.T.-真”。4.4.1功能選擇界面的設(shè)計(jì)這一模塊的主要功能是作為系統(tǒng)主界面為進(jìn)入本系統(tǒng)不同功能界面選擇提供一個(gè)接口,使用一個(gè)窗口來實(shí)現(xiàn)這一功能。首先建立一個(gè)表單,設(shè)其“Caption”屬性分別為“倉庫管理”。在該表單上添加6個(gè)“按鈕”控件,它們的“Caption”屬性分別為“設(shè)備入庫”、“設(shè)備出庫”、“設(shè)備還庫”、“部門需求”、“設(shè)備采購”和“顯示報(bào)表”。

12、然后在表單上添加“圖像”控件,并設(shè)其“Stretch”屬性為“2- Stretch(擴(kuò)展)”,“Picture”屬性為圖片所在位置,本例中為“C:倉庫管理001.jpg”。在“command1”(“Caption”屬性為“設(shè)備入庫”)控件的“Click”事件中添加如下代碼:do form 設(shè)備入庫表thisform.release在“command2”(“Caption”屬性為“設(shè)備出庫”)控件的“Click”事件中添加如下代碼:do form 設(shè)備出庫表thisform.release 在“command3”(“Caption”屬性為“設(shè)備還庫”)控件的“Click”事件中添加如下代碼:do

13、 form 設(shè)備還庫表thisform.release 在“command4”(“Caption”屬性為“部門需求”)控件的“Click”事件中添加如下代碼:do form 部門需求表thisform.release在“command5”(“Caption”屬性為“設(shè)備采購”)控件的“Click”事件中添加如下代碼:do form 設(shè)備采購表thisform.release在“command6”(“Caption”屬性為“顯示報(bào)表”)控件的“Click”事件中添加如下代碼:do form 顯示報(bào)表thisform.release在“form1”的屬性里選擇“autocenter”設(shè)置為“.T.

14、-真”,同時(shí)將“backcolor”設(shè)置為“255,255,255”,“windowstate”設(shè)置為“0-普通”。添加“form1”的“Init”事件的代碼如下:set directory to c:倉庫管理*將程序的默認(rèn)的路徑指向資源所在的文件夾該表單設(shè)計(jì)結(jié)果如圖4-16所示:4.4.2設(shè)備入庫模塊的設(shè)計(jì)在設(shè)備入庫模塊中將實(shí)現(xiàn)設(shè)備數(shù)據(jù)的添加和入庫等功能。在前面的幾章的例子中已經(jīng)詳細(xì)介紹了關(guān)于如何制定具有標(biāo)準(zhǔn)查詢并修改功能的表單,其實(shí)Visual FoxPro 6.0本身也具有生成具有上述功能表單的功能。下面就介紹如何通過表單導(dǎo)向完成設(shè)備入庫表單的設(shè)計(jì)。首先在項(xiàng)目管理器的文檔視圖下單擊“新建

15、”按鈕,如圖4-17所示。然后選擇“表單導(dǎo)向”,如圖4-18、圖4-19所示。圖4-18 圖4-19在接下來的向?qū)е?,“?shù)據(jù)庫和表”選擇“倉庫管理”以與“設(shè)備入庫表”,這是前面定義好的數(shù)據(jù)庫和表。由于設(shè)備入庫需要顯示所有的字段,因此我們將可用字段全部移至選定字段,如圖所示,單擊“下一步”按鈕,在表單樣式中,選擇“陰影式”以與“圖片按鈕”,如圖所示。左上角的窗口提供了表單樣式的預(yù)覽功能,圖片按鈕和文本按鈕的區(qū)別在于顯示的時(shí)候是以圖片來表達(dá)功能還是文字來表達(dá),實(shí)現(xiàn)功能的函數(shù)沒有區(qū)別。選擇“上一步”按鈕可以跳回上一個(gè)界面對(duì)表單中顯示的字段進(jìn)行修改。單擊“下一步”按鈕后,向?qū)нM(jìn)行到“步驟3-排序次序”

16、,如圖所示,選擇“設(shè)備號(hào)”為索引,并選擇升序排列。最后預(yù)覽表單,核對(duì)每項(xiàng)的設(shè)置,完成表單向?qū)В鐖D4-23所示。值得注意的是,在結(jié)束表單向?qū)?,可選擇“保存表單以備將來使用”,“保存并運(yùn)行表單”,或者“保存表單并用表單設(shè)計(jì)器修改表單”。由于Visual FoxPro6.0向?qū)傻谋韱沃痪哂衅毡樾?,?duì)于當(dāng)前設(shè)計(jì)的倉庫管理系統(tǒng)還需要一定的改變,因此以我們選擇“保存表單并用表設(shè)計(jì)器修改表單”。單擊“完成”按鈕系統(tǒng)提示保存表單,將表單保存為“設(shè)備入庫表.scx”,存于C:倉庫管理目錄下。然后打開表單修改器生成的表單,如圖所示。在修改BUTTONSET時(shí),可以通過屬性窗口的下拉列表選定單個(gè)按鈕,調(diào)整其

17、位置和其它屬性。如圖4-25所示。根據(jù)功能需求,把“cmdPrint”、“”cmdExit、“cmdDelete”和“cmdEdit”的Visible屬性都設(shè)為“.F.-假”。添加2個(gè)命令按鈕,Caption屬性分別設(shè)為“修改庫存”和“回主界面”。在“回主界面”命令按鈕的Click事件中添加代碼如下:thisform.releasedo form 倉庫管理在修改庫存命令按鈕的Click事件中添加代碼如下:select 現(xiàn)有庫存表 again*先在該表單的數(shù)據(jù)環(huán)境中添加現(xiàn)有庫存表,如圖4-26所示getid=thisform.設(shè)備號(hào)1.text1.valueset order to 設(shè)備號(hào)see

18、k getid&庫存表中查找設(shè)備號(hào)等于getid的記錄if found() getnum=thisform.入庫數(shù)量1.text1.value update 現(xiàn)有庫存表; set 現(xiàn)有庫存=(現(xiàn)有庫存+getnum) where (設(shè)備號(hào)=getid)*如果庫存表中有該項(xiàng)設(shè)備,則更新庫存表else insert into 現(xiàn)有庫存表 (設(shè)備號(hào),現(xiàn)有庫存); value (thisform.設(shè)備號(hào)1.text1.value,thisform.入庫數(shù)量1.text1.value)endifinsert into 操作日志表(操作員,操作容,操作時(shí)間);values (thisform.采購員1.t

19、ext1.value,設(shè)備入庫,date()*如果庫存表中沒有該項(xiàng)設(shè)備,則添加設(shè)備到庫存表保存后運(yùn)行表單,界面如圖4-27所示:4.4.3設(shè)備出庫模塊的設(shè)計(jì)在設(shè)備出庫模塊中將實(shí)現(xiàn)設(shè)備出庫數(shù)據(jù)的添加和修改庫存等功能。該模塊的功能和設(shè)備入庫的功能相似。具體操作可以參考設(shè)備入庫模塊的設(shè)計(jì),設(shè)計(jì)最終的界面如圖4-28所示。在表單的左上角加上了顯示當(dāng)前時(shí)間的功能,添加標(biāo)簽label2的caption屬性設(shè)為“當(dāng)前時(shí)間”;添加label3的caption屬性設(shè)為空;為當(dāng)前表單的label3init事件添加如下代碼:this.caption=dtoc(date()&date()用來獲取當(dāng)前的系統(tǒng)時(shí)間&Ini

20、t事件在每次表單被初始化時(shí)被調(diào)用該模塊具體實(shí)現(xiàn)留給讀者自行完成,表4-9、4-10列出了表單中所用到控件的屬性值。下面時(shí)設(shè)備出庫表單中“修改庫存”命令按鈕的Click事件的代碼:set directory to c:倉庫管理use現(xiàn)有庫存表again*先在該表單的數(shù)據(jù)環(huán)境中添加現(xiàn)有庫存表getid=thisform.設(shè)備號(hào)1.text1.valueset order to 設(shè)備號(hào)seek getid *在現(xiàn)有庫存表中查找設(shè)備號(hào)等于getid的紀(jì)錄if found() getnum=thisform.出庫數(shù)量1.text1.value update 現(xiàn)有庫存表; set 現(xiàn)有庫存=(現(xiàn)有庫存-g

21、etnum) where (設(shè)備號(hào)=getid)insert into 操作日志表(操作員,操作容,操作時(shí)間);values(thisform.領(lǐng)取人1.text1.value,設(shè)備出庫,date() *如果庫存表中有該項(xiàng)設(shè)備,則更新庫存表 insert into 操作日志表(操作員,操作容,操作時(shí)間); values (thisform.領(lǐng)取人1.text1.value,設(shè)備出庫,date()elsemessagebox(出錯(cuò),1,錯(cuò)誤的設(shè)備號(hào))*如果沒有該設(shè)備號(hào)則報(bào)告出錯(cuò)信息endif4.4.4設(shè)備還庫模塊的設(shè)計(jì)在設(shè)備還庫模塊中將實(shí)現(xiàn)設(shè)備還庫數(shù)據(jù)的添加和修改庫存等功能,按照上文介紹的步驟設(shè)

22、計(jì)設(shè)備還庫表。設(shè)備還庫表所可能用到的控件的屬性如表4-11、4-12所示.下面是設(shè)備還庫表中“修改庫存”命令按鈕的click事件的代碼:set directory to c:倉庫管理use現(xiàn)有庫存表again*先在該表單的數(shù)據(jù)環(huán)境中添加現(xiàn)有庫存表 getid=thisform.設(shè)備號(hào)1.text1.valueset order to 設(shè)備號(hào)seek getid *在現(xiàn)有庫存表中查找設(shè)備號(hào)等于getid的紀(jì)錄if found() getnum=thisform.歸還數(shù)量1.text1.value update 現(xiàn)有庫存表; set 現(xiàn)有庫存=(現(xiàn)有庫存-getnum) where (設(shè)備號(hào)=ge

23、tid) insert into 操作日志表(操作員,操作容,操作時(shí)間); values (thisform.歸還人1.text1.value,設(shè)備還庫,date() *如果庫存表中有該項(xiàng)設(shè)備,則更新庫存表,同時(shí)更新操作日志else messagebox(出錯(cuò),1,錯(cuò)誤的設(shè)備號(hào))*如果沒有該設(shè)備號(hào)則報(bào)告出錯(cuò)信息 endif保存后運(yùn)行表單,可得到如圖4-29所示的設(shè)備還庫表。4.4.5設(shè)備需求模塊的設(shè)計(jì)在設(shè)備需求模塊中將實(shí)現(xiàn)設(shè)備需求數(shù)據(jù)的添加和保存日志等功能。首先通過Visual Foxpro的表單向?qū)伤璧脑O(shè)備需求表單,選擇部門需求表的所有可用字段,然后為保持程序風(fēng)格的一致,繼續(xù)采用表單的

24、陰影式和圖片按鈕的風(fēng)格。在“步驟3-排序次序”時(shí)。選擇設(shè)備號(hào)的升序排列。最后單擊“完成”按鈕,把表單保存在“c:倉庫管理”目錄下,名為“設(shè)備需求.scx”。重要步驟參照?qǐng)D4-30到圖4-33。通過表單向?qū)傻谋韱稳鐖D4-33所示,用戶可以調(diào)節(jié)控件的位置,修改表單中控件的屬性,最后結(jié)果如圖4-34所示。相關(guān)的屬性設(shè)置如表4-13、表4-14所示。在表單設(shè)計(jì)器中,雙擊“保存日志”命令按鈕。添加click事件代碼如下:insert into 操作日志表 (操作員,操作容,操作時(shí)間) values (username,設(shè)備需求,date()*把設(shè)備需求寫入操作日志表中雙擊回主界面命令按鈕,添加cli

25、ck事件代碼如下:thisform.releasedo form 倉庫管理*運(yùn)行倉庫管理界面保存對(duì)表單所作的修改。4.4.6 設(shè)備采購模塊的設(shè)計(jì)在設(shè)備采購模塊中將實(shí)現(xiàn)設(shè)備采購數(shù)據(jù)的添加和保存日志等功能。(1)由數(shù)據(jù)表生成表單通過Visual Foxpro的表單向?qū)В稍O(shè)備采購計(jì)劃表單。在選擇數(shù)據(jù)庫和表時(shí),選擇倉庫管理數(shù)據(jù)庫和設(shè)備采購計(jì)劃表。在選擇字段時(shí),選擇所有可用字段,選擇陰影式和圖片按鈕作為設(shè)備采購計(jì)劃表的樣式。選擇計(jì)劃采購時(shí)間的升序排列作為設(shè)備采購計(jì)劃表的索引。(2)為窗體修改和添加命令按鈕添加2個(gè)命令按鈕“保存日志”和“回主界面”。設(shè)置表單中控件的屬性。下面的表列出了需要修改的控件的

26、名稱以與屬性值。表4-15 Form1控件的主要屬性屬性名稱屬性值Caption設(shè)備采購表Autocenter.T.-真BackColor255.255.255表4-16 ButtonSet1控件的主要屬性:控件名屬性名稱屬性值cmdExitVisible.F.-假cmdDeleteVisible.F.-假cmdPrintVisible.F.-假cmdEditVisible.F.-假Command1Caption保存日志Command2Caption回主界面3. 為按鈕添加click事件代碼:在表單設(shè)計(jì)器中,雙擊保存日志命令按鈕。添加click事件代碼如下:insert into 操作日志表

27、(操作員,操作容,操作時(shí)間) values (username,設(shè)備需求,date()*把設(shè)備需求寫入操作日志表中雙擊回主界面按鈕,添加click事件代碼如下:thisform.release*釋放本表單do form 倉庫管理*運(yùn)行倉庫管理界面保存對(duì)表單所作的修改,表單運(yùn)行效果如圖4-35所示:4.4.7 顯示報(bào)表模塊的設(shè)計(jì)在該模塊中,一共要顯示3個(gè)報(bào)表,分別提供庫存不足,庫存過多和操作日志等信息。1 設(shè)計(jì)顯示報(bào)表表單在項(xiàng)目管理器的文檔視圖下選擇“新建”,然后選擇新建表單,如圖4-36所示。4-36在如圖4-37所示的空白表單中添加一個(gè)頁框控件,并按照下表4-17設(shè)置頁框的屬性,同時(shí)在數(shù)據(jù)環(huán)

28、境里添加現(xiàn)有庫存表和操作日志表?!皃ageframe1”控件的主要屬性控件名屬性名稱屬性值Form1Caption顯示報(bào)表Pageframe1Caption3Pageframe1.Page1Caption庫存不足表Pageframe1.Page2Caption庫存過多表Pageframe1.Page3Caption操作日志分別為每個(gè)page添加一個(gè)表格grid1,如圖4-38所示:分別為每個(gè)page添加一個(gè)表格grid1,如圖所示:庫存過多表 庫存不足表 操作日志表設(shè)置表格控件的屬性,如表4-18所示:控件名屬性名稱屬性值Pageframe1.Page1.grid1ReadOnly.T.-真P

29、ageframe1.Page1.grid1RecordSourceType1-別名Pageframe1.Page1.grid1ColumnCount-1Pageframe1.Page2.grid1ReadOnly.T.-真Pageframe1.Page2.grid1RecordSourceType1-別名Pageframe1.Page2.grid1ColumnCount-1Pageframe1.Page3.grid1ReadOnly.T.-真Pageframe1.Page3.grid1RecordSourceType1-別名Pageframe1.Page3.grid1ColumnCount-1

30、2 代碼設(shè)計(jì)定義Pageframe1.Page1.grid1的init事件運(yùn)行“顯示報(bào)表”表單,界面所圖所示:local Custs1select 設(shè)備號(hào),最大庫存,現(xiàn)有庫存 from 現(xiàn)有庫存表 where (現(xiàn)有庫存最大庫存) into cursor Custs1thisform.頁框.庫存過多.庫存過多表.recordsource=Custs1定義Pageframe1.Page2.grid1的init事件local Custs2select 設(shè)備號(hào),最小庫存,現(xiàn)有庫存 from 現(xiàn)有庫存表 where (現(xiàn)有庫存最小庫存) into cursor Custs2thisform.頁框.庫存

31、不足.庫存不足表.recordsource=Custs2定義Pageframe1.Page3.grid1的init事件local Custs3select * from 操作日志表 into cursor Custs3thisform.頁框.操作日志.操作日志表1.recordsource=Custs3運(yùn)行“顯示報(bào)表”表單,界面如圖4-39所示。4.5 開發(fā)中的難點(diǎn)和解決技巧Visual FoxPro 6.0中向?qū)Оū硐驅(qū)?、?shù)據(jù)庫向?qū)А⒉樵兿驅(qū)?、?bào)表向?qū)А?biāo)簽向?qū)?、合并向?qū)А?shù)據(jù)透視表向?qū)?、?dǎo)入向?qū)А⑽臋n向?qū)?、安裝向?qū)А⑸w向?qū)?、?yīng)用程序向?qū)Аeb發(fā)布向?qū)У?。在這里我們?cè)俳榻B查詢向?qū)А?bào)表

32、向?qū)А?biāo)簽向?qū)А?.5.1查詢向?qū)М?dāng)建立的表中只有幾個(gè)、十幾條記錄時(shí),利用“瀏覽”窗口可以較快的查找符合一定條件的記錄,但當(dāng)表較大,例如有幾百、上千甚至上萬條記錄時(shí),用瀏覽的方式就相當(dāng)困難了。這樣的效率和不建表幾乎沒有什么兩樣。建立數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)不是目的。真正的目的是利用數(shù)據(jù)庫管理技術(shù)來操作這些數(shù)據(jù)信息。表的查詢時(shí)數(shù)據(jù)處理工作中的重要工作之一,它能在大量的記錄中找出符合一定條件的記錄。從“工具”菜單中選取“向?qū)А?,單擊其中的“查詢”,就?huì)進(jìn)入“向?qū)нx取”,這里有5個(gè)向?qū)нx項(xiàng),鼠標(biāo)點(diǎn)取哪個(gè)向?qū)r(shí),就會(huì)在“說明”中出現(xiàn)有關(guān)向?qū)в猛镜恼f明。這里選取“查詢向?qū)А?。在查詢向?qū)У拿恳徊襟E中,都有一些文字說

33、明,它幫助理解這一步驟的用法。下面是“查詢向?qū)А钡摹安襟E1-字段選取”,如圖4-40所示,單擊“下一步”按鈕。接下來創(chuàng)建查詢表達(dá)式。這些表達(dá)式是符合Visual Foxpro 規(guī)則的,即它能讀懂并執(zhí)行的。設(shè)置查詢條件:設(shè)備入庫表設(shè)備號(hào)小于10的所有設(shè)備,如圖441所示。當(dāng)不知道某種數(shù)據(jù)類型“值”,單擊“預(yù)覽”按鈕,如果格式正確將顯示符合條件的記錄,否則將會(huì)出現(xiàn)錯(cuò)誤提示,有時(shí)會(huì)提示正確格式。為了表達(dá)兩個(gè)條件同時(shí)具備,我們選取“與”單選按鈕。單擊 “下一步”按鈕,進(jìn)入“步驟4排序記錄”,如圖442所示。從“可用字段”中選取“設(shè)備入庫表.設(shè)備號(hào)”作為排序字段,并按升序排列。單擊“下一步”按鈕。進(jìn)入步

34、驟4a-限制記錄,如圖4-43所示。這里有兩組單選按鈕,用來設(shè)置在瀏覽查詢結(jié)果窗口顯示記錄的限制。取默認(rèn)值“所有記錄”。單擊“下一步”按鈕,進(jìn)入“步驟5完成”,如圖444所示。選擇“保存并運(yùn)行查詢”,單擊“完成”按鈕,即進(jìn)入保存對(duì)話框,命名為“設(shè)備號(hào)小于2”,查詢保存在擴(kuò)展名為.QPR的文件中。此外也可以在完成查詢?cè)O(shè)計(jì)后,在命令窗口中輸入“DO設(shè)備號(hào)小于2.qpr”,來執(zhí)行這個(gè)查詢。4.5.2報(bào)表向?qū)?shù)據(jù)庫管理系統(tǒng)中使用報(bào)表是日常工作中最常用的查看數(shù)據(jù)的手段之一。生成報(bào)表就是把輸入的數(shù)據(jù)按照一定的條件和格式又以報(bào)表的形式顯示。這里的表格和原始表格具有完全不同的含義,是更深入地反映原始數(shù)據(jù)之間關(guān)

35、系、實(shí)質(zhì)的經(jīng)過提煉和篩選的表格。打開“工具”菜單中的“向?qū)?,選擇“報(bào)表”,出現(xiàn)“”向?qū)нx取對(duì)話框,選擇“報(bào)表向?qū)А?。單擊“確定”按鈕,進(jìn)入步驟1字段選取,如圖4-45所示。在這個(gè)窗口中,選擇設(shè)備入庫表,并選定“可用字段”中的所有字段。單擊“下一步“按鈕進(jìn)入步驟2分組記錄,如圖446所示。在這個(gè)窗口中,選擇設(shè)備入庫表,并選定”可用字段”中的所有字段。單擊“下一步”按鈕進(jìn)入步驟2-分組記錄,如圖4-46所示。根據(jù)報(bào)表的需要,這一步可以選擇也可以不選擇。單擊“下一步”按鈕進(jìn)入“步驟3-選擇報(bào)表樣式”,如圖4-47所示。單擊樣式名稱,在左上角框即時(shí)顯示該樣式的效果,這里選擇比較符合中國人習(xí)慣的賬務(wù)式。

36、單擊“下一步”按鈕進(jìn)入“步驟4-定義報(bào)表布局”,如圖4-48所示。這一步驟可通過微調(diào)按鈕分別設(shè)置報(bào)表的列數(shù)、方向和字段布局。選擇布局方向的默認(rèn)值“縱向”。單擊“下一步”按鈕進(jìn)入“步驟5-排序記錄”,如圖4-49所示。這一步驟可以選擇一個(gè)至三個(gè)字段作為報(bào)表的排序字段,并可設(shè)置是升序還是降序。也可以不選排序手段。“選定字段”的第一行為主排序字段,一下依次為各個(gè)次排序字段。這里選取設(shè)備標(biāo)號(hào)字段為排序字段。單擊“下一步”按鈕進(jìn)入 “步驟6-完成”,如圖4-50所示。在“報(bào)表標(biāo)題“中輸入標(biāo)題中輸入標(biāo)題“設(shè)備入庫表”,選擇“保存報(bào)表以備將來使用”。去除“對(duì)不能容納的字段進(jìn)行拆行處理”(即使屏幕顯示不開,也

37、不折到下一行)。單擊“預(yù)覽”按鈕,進(jìn)入預(yù)覽窗口,在屏幕上查看生成的報(bào)表,如圖4-51所示。如果對(duì)報(bào)表滿意,可以選擇“打印預(yù)覽”中的打印按鈕將該報(bào)表輸出到打印機(jī)。如果不滿意,則可以單擊“上一步”按鈕,返回到前面步驟進(jìn)行相應(yīng)修改。修改完畢,單擊“完成”按鈕,在保存窗口中鍵入報(bào)表名“設(shè)備入庫表”,報(bào)表保存在以.FRX和.FRT為擴(kuò)展名的文件中.以后要打印該報(bào)表時(shí),可在命令窗口中輸入:REPORT FORM 設(shè)備入庫表TO PRINT。4.5.3標(biāo)簽向?qū)?biāo)簽是什么,它與報(bào)表有何不同呢?報(bào)表是以表為單位按一個(gè)格式生成一個(gè)報(bào)表,標(biāo)簽則是以表中的記錄為單位,一條記錄生成一個(gè)標(biāo)簽。它們有許多相似之處,標(biāo)簽可以

38、看作是一種特殊的報(bào)表。或者換一種不很貼切的說法:符合某種條件的花名冊(cè)就是一種報(bào)表,每個(gè)人的名片就是一個(gè)標(biāo)簽。和使用其他向?qū)б粯?,先在“工具”菜單中選取“向?qū)А保賳螕簟皹?biāo)簽”進(jìn)入標(biāo)簽向?qū)У摹安襟E1-選擇表”。打開設(shè)備入庫表。按“下一步”按鈕進(jìn)入 “步驟2-選擇標(biāo)簽類型”,如圖4-52所示。 圖4-52 標(biāo)簽向?qū)Вㄒ唬?biāo)簽向?qū)峁┝硕喾N標(biāo)簽尺寸,在單選按鈕中選擇“公制”,并選擇大小為33.87mm*99.06mm,列數(shù)為2的“Avery L7162”型號(hào)標(biāo)簽。單擊“下一步”按鈕,進(jìn)入步驟3-定義布局,如圖4-53所示。 圖4-53 標(biāo)簽向?qū)Вǘ┻@一步驟是標(biāo)簽向?qū)е胁僮髯疃嗟牟襟E。選擇按鈕的左邊

39、是常見的6個(gè)健盤符號(hào)按鈕。我們以當(dāng)前亮條處字段為例來演示如何操作。先在“文本”框中輸入“設(shè)備號(hào):”,單擊“選定”按鈕,則文本框中的容被選定到“選定的字段”框中,再在“可用字段”中將光標(biāo)移到設(shè)備號(hào)處,雙擊或按“選定”按鈕。則“選定字段”中就有“設(shè)備號(hào):設(shè)備號(hào)”行。完成以上操作后,單擊按鈕,則“選定字段”框中的亮條移到下一空行中,在此空行中重復(fù)以上操作,將所有需要的字段移動(dòng)到“選定字段”中。單擊“字體”按鈕,進(jìn)入下面的“字體”對(duì)話框,選擇“規(guī)則”、“小五”號(hào)字體,按“確定”按鈕進(jìn)入步驟4排序記錄,如圖4一54所示。我們選擇編號(hào)字段為排序字段,并選擇“升序”單選按鈕。單擊“下一步”進(jìn)入“步驟5-完成

40、”,如圖4-55所示。圖4-55 標(biāo)簽向?qū)Вㄋ模﹩螕簟邦A(yù)覽”按鈕,進(jìn)入預(yù)覽窗口,在屏幕上查看標(biāo)簽。和報(bào)表一樣,也可以打印標(biāo)簽,可返回相應(yīng)的步驟進(jìn)行修改、保存。標(biāo)簽保存在以.LBX為擴(kuò)展名的文件中。以后在命令窗口中輸入命令:LABLE FORM設(shè)備入庫TO PRINT,就可打印標(biāo)簽了。4.6 系統(tǒng)的編譯和發(fā)行4.6.1 設(shè)置主文件用主圖標(biāo)以黑體的文件表示)標(biāo)記的文件是用戶在啟動(dòng).app或者是.exe時(shí)被調(diào)用的文件。它可以是一個(gè)表單、菜單或程序,建議使用程序作為主文件。4.6.2構(gòu)造主文件如果主文件是一個(gè)程序,它將調(diào)用應(yīng)用程序框架中的各個(gè)功能組件,然后由這些組件調(diào)用應(yīng)用程序的其余部分。如果要建立一

41、個(gè)簡單的主程序,可以按下列步驟進(jìn)行。現(xiàn)設(shè)置應(yīng)用環(huán)境界面。確定初始用戶界面。建立事件循環(huán)。恢復(fù)環(huán)境,退出應(yīng)用程序。例如,可以建立下面的程序作為主程序:set directory to c:倉庫管理*將資源路徑設(shè)為默認(rèn)路徑_screen.left=-10000do form 倉庫管理on shutdown quitread events為了避免無限循環(huán),必須在READ EVENTS命令之前安排CLEAR EVENTS命令。可以在主菜單或主表單中添加一個(gè)“退出”項(xiàng),該項(xiàng)發(fā)出CLEAR EVENTS命令。具體步驟詳見第l章中相關(guān)容。本系統(tǒng)的主程序?yàn)橹鞒绦?prg。4.6.3 在.app和.exe文件中

42、包含和排除文件如果在發(fā)布的應(yīng)用程序中不想再更改這些文件,可把它們放在項(xiàng)目中并設(shè)置為“包含”。那么這些文件變成只讀的,不能修改。如果想修改這些文件,把它們放到項(xiàng)目中并設(shè)置為排除”,然后作為獨(dú)立文件隨著應(yīng)用程序一起發(fā)布。在默認(rèn)情況下Visual FoxPro在嵌放的過程中排除了數(shù)據(jù)庫、表格、稱為.ff的c庫文件和.app文件。建議用戶除了一些特定的表格,最好不要包含這類文件。數(shù)據(jù)庫和表格需要變化和添加,而如果編譯后包含自.exe或者是.app文件中,由于這兩個(gè)文件被創(chuàng)建后都是靜態(tài)的,因此被包含的文件也是靜態(tài)的和只讀的。把數(shù)據(jù)庫和表格包含在這些文件中很明顯會(huì)帶來問題。因?yàn)檫@些文件不能被包含在文件.a

43、pp和.exe中,所以要在發(fā)布一個(gè)應(yīng)用程序之前為這些文件做好準(zhǔn)備。若要排除可修改的文件,首先在項(xiàng)目管理器中,選擇可修改的文件,然后從“項(xiàng)目菜單中選擇“排除”命令。在一個(gè)文件被排除后,則在文件的左方加入一個(gè)排除符號(hào)。4.7 運(yùn)行結(jié)果倉庫管理系統(tǒng)各模塊運(yùn)行結(jié)果如圖4一56、圖4一57、圖4一58、圖4一59所示,以下所列為幾個(gè)重要的表單的運(yùn)行結(jié)果,其他輔助表單未列出。相關(guān)代碼:1:主程序源代碼:SET TALK offset sysmenu off set cent on _screen.windowstate=2_screen.icon=iconshappy.ico _screen.maxbut

44、ton=0_screen.minbutton=1_screen.closable=.f.modify window screen nocloseMODIFY WINDOW SCREEN TITLE 倉庫管理信息系統(tǒng) ZOOM WINDOW SCREEN MAX set default to datado form 登錄表單read eventsclearclose allreturnendif2:登錄表單的確定按鈕控件的click源代碼:locate for alltrim(用戶名)=alltrim(thisform bo1.value) and alltrim(密碼)=alltrim(thi

45、sform.text1.value) if !eof() if alltrim(級(jí)別)=管理員 public ,username =1 username=alltrim(thisform bo1.value) else public ,username =0 username=alltrim(thisform bo1.value) endif do menu.mpr thisform.release do form 倉庫管理else#define missmatch_loc 用戶或口令錯(cuò),請(qǐng)重新登錄!wait window missmatch_loc timeout 1thisform bo1

46、.value=thisform.text1.value=thisform.text1.setfocusnumcount=numcount+1 if numcount=4 numcount=0 mess =messagebox(三次口令錯(cuò),將退出程序!,4+16+2,退出) clear event release thisform endif endif3:密碼修改表單的修改按鈕的click事件源代碼:if empty(thisform.text4.value) mess=messagebox(用戶名不能為空!,48,警告)else if empty(thisform.text1.value)

47、mess=messagebox(舊密碼不能為空!,48,警告) else if empty(thisform.text2.value) mess=messagebox(新密碼不能為空!,48,警告) else if empty(thisform.text3.value) mess=messagebox(重復(fù)密碼不能為空!,48,警告) else ifalltrim(thisform.text2.value)alltrim(thisform.text3.value) or len(alltrim(thisform.text2.value)len(alltrim(thisform.text3.va

48、lue) mess=messagebox(二次密碼不一致!,48,警告) else locate for alltrim(用戶名)=alltrim(thisform.text4.value) and alltrim(密碼)=alltrim(thisform.text1.value) if eof() mess=messagebox(密碼錯(cuò)誤,系統(tǒng)將取消你的修改權(quán)利!,48,警告) thisform.release else repl 密碼 with alltrim(thisform.text3.value) mess=messagebox(密碼修改成功!,48,信息) thisform.rel

49、ease endif4:添加操作員表單的最首按鈕的click事件源代碼:go topthisform.grid1.setfocusthisform.grid1.refresh5:添加操作員表單的上一個(gè)按鈕的click事件源代碼:skip-1if bof()? chr(7) =messagebox(警告,這已經(jīng)是第一條記錄!,48,信息窗口)go topendifthisform.grid1.setfocusthisform.grid1.refresh6:添加操作員表單的下一個(gè)按鈕的click事件源代碼:skipif eof()? chr(7) =messagebox(警告,這已經(jīng)是最后一條記錄!,48,信息窗口)go bottomendifthisform.grid1.setfocusthisform.grid1.refresh7:添加操作員表單的最末按鈕的click事件源代碼:go bottomthisform.grid1.setfocusthisform.grid1.refresh8:添加操作員表單的修改按鈕的click事件源代碼:if thi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論