【正文】
調(diào)整數(shù)量、操作日期、操作人員和狀態(tài)等。盤(pán)點(diǎn)表操作人員編號(hào)號(hào)物資編號(hào)狀態(tài)操作日期調(diào)整數(shù)量號(hào)物資名稱(chēng)圖413 盤(pán)點(diǎn)表屬性ER分圖用戶(hù)信息包括用戶(hù)ID、用戶(hù)名稱(chēng)、用戶(hù)密碼、用戶(hù)權(quán)限,用戶(hù)所屬部門(mén)等。用戶(hù)ID用戶(hù)名稱(chēng)用戶(hù)權(quán)限用戶(hù)密碼號(hào)用戶(hù)信息用戶(hù)所屬部門(mén)圖414 用戶(hù)信息屬性ER分圖供應(yīng)商資料表中,編號(hào)是其主鍵,每次增加,自動(dòng)加一。信譽(yù)等級(jí)是根據(jù)供應(yīng)商的供貨速度,供應(yīng)商品質(zhì)量的一個(gè)評(píng)價(jià),五星最好,零星最差。具體如表41。主鍵,自動(dòng)增加1Provider文本20不可以供應(yīng)商名稱(chēng)Address文本50可以地址Telephone數(shù)字整形不可以電話Fax數(shù)字整形可以傳真Grade數(shù)字整形可以信譽(yù)等級(jí) Goods文本50不可以提供商品Introduce文本100可以簡(jiǎn)介物資資料表中,編號(hào)是其主鍵,每次增加,自動(dòng)加一。供應(yīng)商編號(hào)與供應(yīng)商名稱(chēng)為其外鍵。具體如表42。主鍵,自動(dòng)增加Good文本20不可以物資名稱(chēng)Unit文本5可以計(jì)量單位。外鍵Provider文本20不可以供應(yīng)商名稱(chēng)。為日期后加6位數(shù),初始數(shù)為000000,如201233000000。申購(gòu)部門(mén)從登陸信息中獲取。表43申購(gòu)單信息表字段名數(shù)據(jù)類(lèi)型字段大小可否為空說(shuō)明SubscibeID數(shù)字整形不可以申購(gòu)單號(hào)。自動(dòng)提取系統(tǒng)時(shí)間Subscriber文本10不可以申購(gòu)人SDepartment文本10不可以申購(gòu)部門(mén)State數(shù)字整形不可以狀態(tài)0. 待審核 1. 已審核GoodID數(shù)字整形不可以物資編號(hào)。為日期后加6位數(shù),初始數(shù)為000000,如201233000000。采購(gòu)人由采購(gòu)部門(mén)主任指定,狀態(tài)分為“待審批”、“采購(gòu)中”、“已入庫(kù)”、“已關(guān)閉”4個(gè)。表44采購(gòu)單信息表字段名數(shù)據(jù)類(lèi)型字段大小可否為空說(shuō)明StockID數(shù)字整形不可以采購(gòu)單號(hào)。外鍵Good文本20不可以物資名稱(chēng)Stocker文本10不可以采購(gòu)人Amount數(shù)字整形不可以采購(gòu)數(shù)量Price貨幣不可以采購(gòu)單價(jià)Total貨幣不可以采購(gòu)總額采購(gòu)總額=采購(gòu)數(shù)量*采購(gòu)單價(jià)State貨幣不可以狀態(tài)0.待審批1.采購(gòu)中2.已入庫(kù)3. 已關(guān)閉庫(kù)存信息表中,物資編號(hào)是其主鍵,每次增加,自動(dòng)加一。供應(yīng)商名稱(chēng)為其外鍵。具體如表45。主鍵 Good文本20不可以物資名稱(chēng)State數(shù)字整形不可以物資狀態(tài)0. 不可用1. 可用Price貨幣可以采購(gòu)價(jià)Provider文本20可以供應(yīng)商名稱(chēng)。小于“正常儲(chǔ)備”HighStore數(shù)字?jǐn)?shù)字可以最高儲(chǔ)備。為8位數(shù),初始數(shù)為00000000。狀態(tài)分為“待審批”與“已審批”兩個(gè)。表46盤(pán)點(diǎn)信息表字段名數(shù)據(jù)類(lèi)型字段大小可否為空說(shuō)明CheckID數(shù)字整形不可以編號(hào)。正數(shù)為“盈”負(fù)數(shù)為“虧”P(pán)erformDate日期/時(shí)間不可以操作日期Performer文本10不可以操作人員State數(shù)字整形不可以狀態(tài)0. 待審批1. 已審批用戶(hù)信息表中,用戶(hù)ID是其主鍵,由管理員定義。用戶(hù)權(quán)限為一數(shù)值,具體請(qǐng)參照第五章內(nèi)容。表47用戶(hù)信息表字段名數(shù)據(jù)類(lèi)型字段大小可否為空說(shuō)明ID數(shù)字整形不可以用戶(hù)ID。如圖51。創(chuàng)建3個(gè)標(biāo)簽,分別為“物資采購(gòu)管理系統(tǒng)”、“用戶(hù)名”、“密碼”,以顯示需求信息。另外,還要建立“確定”及“取消”兩個(gè)按鈕實(shí)現(xiàn)登陸及退出程序功能。圖51 系統(tǒng)登錄界面該功能部分代碼如下:Private Sub xpbutton1_Click()On Error GoTo finish 39。 amp。 39。 amp。 39。以上使用最通用的方法來(lái)查詢(xún)數(shù)據(jù)庫(kù)中是否有匹配的記錄If = True Then 39。pnum就是密碼驗(yàn)證次數(shù),當(dāng)次數(shù)超過(guò)3次,系統(tǒng)會(huì)自動(dòng)保護(hù)退出 pnum = pnum + 1 Beep MsgBox 用戶(hù)名或密碼錯(cuò)誤!, vbInformation, 錯(cuò)誤次數(shù): amp。供應(yīng)商記錄體:Type Supplier id As Integer name As String adress As String telephone As Integer fax As String grade As Integer good As String introduce As StringEnd Type同樣的,也為物資按照第四章的內(nèi)容定義一個(gè)記錄體Material。并且建立所需的標(biāo)簽、按鈕等,分別設(shè)計(jì)各自界面。52供應(yīng)商信息界面53物資信息界面該窗體用于顯示和修改供應(yīng)商的相關(guān)資料。在程序運(yùn)行中,通過(guò)用戶(hù)操作,對(duì)記錄數(shù)組進(jìn)行增加、修改、刪除等操作,所以需要為供應(yīng)商和物資資料各自定義一個(gè)動(dòng)態(tài)記錄數(shù)組【26】。供應(yīng)商與物資的查找主要依據(jù)分別為“供應(yīng)商編號(hào)”和“物資編號(hào)”。 cgtable) = 1 39。必須+1,因?yàn)閷?shí)際上為4行,但第一行是隱藏的For i = 0 To i 1 39。讀取表中的各字段名Nextn = ii = 1Do While Not 39。設(shè)定讀取列 If (j 1) = Null Then 39。 (i, j).Text End If End If Next i = i + 1 39。如圖555所示。55 采購(gòu)單窗口采購(gòu)單中的重要變量如下:1)采購(gòu)單號(hào),用于對(duì)數(shù)據(jù)查找的主要依據(jù);2)狀態(tài),根據(jù)此來(lái)開(kāi)放對(duì)申購(gòu)單的操作權(quán)限,并且影響界面的顯示信息,當(dāng)采購(gòu)單關(guān)閉后,將不能進(jìn)行任何操作;3)申購(gòu)部門(mén),當(dāng)申購(gòu)單不通過(guò)審批時(shí),會(huì)返回該部門(mén)一個(gè)信息提示并告之不通過(guò)原因。當(dāng)選擇“申購(gòu)單審核”時(shí)只顯示未通過(guò)審核的申購(gòu)單。只有“填寫(xiě)申購(gòu)單”與“申購(gòu)單修改”功能中,能對(duì)申購(gòu)單信息進(jìn)行修改,而當(dāng)生成采購(gòu)單后,只有采購(gòu)部門(mén)主任可以修改采購(gòu)人信息,其余信息則不能進(jìn)行更改,只能根據(jù)操作更改“狀態(tài)”信息。提交操作On Error GoTo finish: 39。明細(xì)表中沒(méi)有內(nèi)容時(shí)退出操作MsgBox 明細(xì)表內(nèi)無(wú)內(nèi)容,確定后輸入...Exit SubEnd If39。 amp。 39。以下是將生成一個(gè)SQL所需要使用的語(yǔ)句,把這些內(nèi)容放到SQL字符串中,在后面在執(zhí)行sql = insert into 申購(gòu)單 values(39。 amp。,39。 amp。,39。 xtext5(0).Text amp。,39。 amp。,39。 _ xtext5(1).Text amp。,39。 amp。,39。 amp。,39。 amp。,39。 amp。,39。 _ xtext5(2).Text amp。,39。 amp。,39。)Set cg1 = (sql) 39。這里循環(huán)從第一行到最后一行 If (i, 1).Text = Then MsgBox 提交成功,等待審核... Call Form_Load = 1 Exit Sub End If 39。 amp。 39。 amp。 39。 amp。 39。 (i, 4).Text amp。 amp。 39。 0,39。 (i, 5).Text amp。, 39。 (i, j).Text amp。 0, End If Next sql = sql amp。 amp。 39。 amp。 39。執(zhí)行SQL語(yǔ)句 NextMsgBox 提交成功,等待審核...Call Form_Load = 1Exit Subfinish:MsgBox End SubPrivate Sub XPButton6_Click()If system(1) = False ThenMsgBox 無(wú)審核權(quán)限!Exit SubEnd IfIf = adStateOpen Then End If select * from 申購(gòu)單 where 采購(gòu)單號(hào)=39。 amp。, n, adOpenKeyset, adLockOptimistic, adCmdTextIf = 審核 ThenIf = False Then(11) = 已審核Call Form_LoadMsgBox 審核完成! = LoadPicture( amp。 \images\)ElseMsgBox 無(wú)此訂單,審核無(wú)效!Call Form_LoadEnd IfEnd IfEnd Sub首先,為庫(kù)存信息、盤(pán)點(diǎn)表建立一個(gè)動(dòng)態(tài)記錄數(shù)組Storage,Checking和窗體及界面。只有簡(jiǎn)單的增加、修改、刪除功能。當(dāng)盤(pán)點(diǎn)表通過(guò)審批后會(huì)進(jìn)行入庫(kù)操作,并同步更新庫(kù)存信息。 ( 1, i).Text End If End If Next LoopExit Subfinish: MsgBox End Sub“采購(gòu)單分析”模塊首先先判定用戶(hù)的選擇,然后按照用戶(hù)選擇要求對(duì)采購(gòu)單資料進(jìn)行搜索,被搜索的采購(gòu)單為已關(guān)閉的采購(gòu)單?!皫?kù)存分析”模塊中庫(kù)存的消耗速度計(jì)算方式:本月1號(hào)時(shí)該物資庫(kù)存量加上上一個(gè)月對(duì)該物資的采購(gòu)量減去上一個(gè)月1號(hào)時(shí)該物資的庫(kù)存量等于上一個(gè)月的庫(kù)存消耗量,為此每個(gè)月1號(hào)系統(tǒng)自動(dòng)生成一個(gè)庫(kù)存表記錄當(dāng)前物資的庫(kù)存量。“庫(kù)存分析”模塊同樣按用戶(hù)需求計(jì)算并顯示最終結(jié)果。管理員對(duì)用戶(hù)的管理基于本模塊來(lái)實(shí)現(xiàn),界面如圖57所示。其中“用戶(hù)權(quán)限”為系統(tǒng)重要依據(jù)。每個(gè)用戶(hù)的“用戶(hù)權(quán)限”數(shù)值等于他所擁有的權(quán)限所代表的值的乘積。當(dāng)用戶(hù)使用軟件時(shí),判斷是否擁有該權(quán)限的標(biāo)準(zhǔn)為:“用戶(hù)權(quán)限”能否整除權(quán)限所代表的數(shù)值。57 用戶(hù)管理窗口部分核心代碼:Private Sub Form_Load() With Grid1 .AllowUserResizing = True .DisplayFocusRect = False 39。RGB(90, 158, 214) .BackColorFixedSel = RGB(128, 217, 193) 39。RGB(90, 158, 214) .BackColorScrollBar = RGB(128, 217, 193) .BackColor1 = RGB(231, 235, 247) .BackColor2 = RGB(239, 243, 255) .GridColor = RGB(148, 190, 231) .Column(0).Width = 0 .Column(1).Width = 100 .Column(2).Width = 100End WithFor i = 3 To 139。當(dāng)前指向表名為權(quán)限Call callmainEnd SubIf Poperdom Mod 3 = 0 Then 39。申購(gòu)單的審核與生成quanxian5 = tureEnd IfIf Poperdom Mod 7 = 0 Then 39。采購(gòu)單的審核與關(guān)閉quanxian11 = tureEnd IfIf Poperdom Mod 13 = 0 Then 39。盤(pán)點(diǎn)表的審批quanxian17 = tureEnd IfIf Poperdom Mod 19 = 0 Then 39。用戶(hù)信息的添加、權(quán)限修改與刪除quanxian23 = tureEnd If由于Access數(shù)據(jù)庫(kù)的ODBC驅(qū)動(dòng)程序擁有的SQL指令比較全,執(zhí)行效率高,所以Access后臺(tái)數(shù)據(jù)庫(kù)+VB程序界面,是一個(gè)精練實(shí)用而又高效的組合模式。在VB程序中,由VB Script建立對(duì)Access數(shù)據(jù)庫(kù)連接,為客戶(hù)能夠訪問(wèn)后臺(tái)數(shù)據(jù)庫(kù)的提供了前提【30】。其中,數(shù)據(jù)庫(kù)名是我們需要指定的參數(shù),用我們要打開(kāi)的數(shù)據(jù)庫(kù)的實(shí)際名稱(chēng)替代?! 〉诙航⒁粋€(gè)ADO對(duì)象集中的Connection對(duì)象,也即連接對(duì)象。執(zhí)行這行程序后,Conn成為一個(gè)連接對(duì)象。因?yàn)槲覀円蜷_(kāi)的是Access數(shù)據(jù)庫(kù),所以要指定ODBC驅(qū)動(dòng)程序參數(shù),表示要透過(guò)Access的ODBC驅(qū)動(dòng)程序來(lái)訪問(wèn)數(shù)據(jù)庫(kù):driver={Microsoft Access Driver (*.mdb)}。執(zhí)行這行后,rs就成為一個(gè)Recordset對(duì)象。【31】代碼如下:Public n As New Public cg1 As New Public cg2 As New Public cg3 As New Public cg4 As New Public Declare Function GetPrivateProfileString Lib kernel32 Alias GetPrivateProfileStringA (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpF