欧美日韩亚洲一区二区精品_亚洲无码a∨在线视频_国产成人自产拍免费视频_日本a在线免费观看_亚洲国产综合专区在线电影_丰满熟妇人妻无码区_免费无码又爽又刺激又高潮的视频_亚洲一区区
公務(wù)員期刊網(wǎng) 精選范文 倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)的意義范文

倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)的意義精選(九篇)

前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)的意義主題范文,僅供參考,歡迎閱讀并收藏。

倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)的意義

第1篇:倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)的意義范文

關(guān)鍵詞:RFID技術(shù);礦山機(jī)械;倉(cāng)儲(chǔ)管理;智能化

中圖分類號(hào):F253 文獻(xiàn)標(biāo)識(shí)碼:A

Abstract: Based on the current situation of China's mining equipment spare parts management, RFID technology, which replaces the bar code technology, is applied in the mining machine spare parts warehouse management and to complete the intelligent of the warehouse management. The intelligent management of warehouse is implemented by using RFID in the in-out warehouse and inventory operation, and the safety of warehouse is also protected by using RFID technology through the system identification and security alarm module. Using this system can realize tracking key spare parts, and the requirement of safety stock is satisfied by using the intelligent prediction replenishment. Finally it makes the management of spare parts intelligentization, transparency, and information.

Key words: RFID technology; mining machinery; warehouse management; intelligentization

目前我國(guó)的礦山設(shè)備備件種類繁多,價(jià)格昂貴,而且有些備件是由國(guó)外引進(jìn),采購(gòu)手續(xù)復(fù)雜,訂購(gòu)周期長(zhǎng),這就給備件庫(kù)的管理與安全庫(kù)存帶來(lái)了挑戰(zhàn)[1]。有些企業(yè)缺乏備件精細(xì)化管理意識(shí),企業(yè)的備件使用部門、計(jì)劃采購(gòu)部門、設(shè)備管理部門和技術(shù)部門之間缺乏協(xié)同合作和信息溝通,最終造成備件超儲(chǔ)、積壓、甚至報(bào)廢,導(dǎo)致大量資金的浪費(fèi),或是供應(yīng)不及時(shí),增加停機(jī)時(shí)間,使客戶企業(yè)生產(chǎn)活動(dòng)和經(jīng)濟(jì)效益受到損失[2]。隨著我國(guó)經(jīng)濟(jì)的不斷發(fā)展和轉(zhuǎn)型,“中國(guó)制造”必然向“中國(guó)智造”轉(zhuǎn)型。備件管理是礦山設(shè)備管理的關(guān)鍵與核心,因此針對(duì)備件庫(kù)的智能管理應(yīng)運(yùn)而生。

為有效地管理備件倉(cāng)庫(kù),目前大多數(shù)企業(yè)采用條形碼技術(shù),雖然條形碼技術(shù)價(jià)格低廉,應(yīng)用廣泛,但是條形碼印刷后不能更改,無(wú)法循環(huán)利用,使用效率低,并且掃描貨物信息時(shí)需要近距離逐個(gè)對(duì)準(zhǔn)貨物條形碼,工作效率慢,不能實(shí)現(xiàn)智能化管理。相比之下,RFID(無(wú)線射頻識(shí)別, Radio Frequency Identification)技術(shù)因其非接觸性以及可對(duì)多目標(biāo)同時(shí)快速識(shí)別的特性正逐漸應(yīng)用在倉(cāng)庫(kù)管理系統(tǒng)[3]。

1 RFID技術(shù)及應(yīng)用

RFID技術(shù)是一種非接觸式的自動(dòng)識(shí)別技術(shù),可通過(guò)無(wú)線電訊號(hào)識(shí)別特定目標(biāo)并讀寫相關(guān)數(shù)據(jù),識(shí)別工作無(wú)須人工干預(yù)[4]?;镜腞FID應(yīng)用系統(tǒng)由以下部分組成:

(1)標(biāo)簽:俗稱電子標(biāo)簽或智能標(biāo)簽,由耦合元件及芯片組成,每個(gè)標(biāo)簽具有唯一的電子編碼,附著在物體上標(biāo)識(shí)目標(biāo)對(duì)象。由于礦機(jī)備件多是金屬,所以在倉(cāng)庫(kù)管理中多采用抗金屬標(biāo)簽;

(2)讀寫器:讀取或?qū)懭霕?biāo)簽信息的設(shè)備,有手持式和固定式;

(3)應(yīng)用接口或中間件軟件:是應(yīng)用系統(tǒng)和讀寫器間數(shù)據(jù)流入和數(shù)據(jù)流出的軟件;

(4)傳輸網(wǎng)絡(luò):網(wǎng)口、232接口或USB接口(如發(fā)卡器),wifi(固定式讀寫器)或藍(lán)牙(手持式讀寫器);

(5)業(yè)務(wù)應(yīng)用與管理系統(tǒng):規(guī)范倉(cāng)庫(kù)作業(yè)流程,改善倉(cāng)庫(kù)的管理,如WMS(Warehouse Management System的縮寫)倉(cāng)庫(kù)管理系統(tǒng)。

在礦機(jī)備件倉(cāng)庫(kù)管理過(guò)程中使用RFID技術(shù),可以有效地減輕或代替現(xiàn)有的人工操作,實(shí)現(xiàn)倉(cāng)庫(kù)管理的智能化。RFID技術(shù)在倉(cāng)庫(kù)管理中的主要作用如圖1所示。

2 智能作業(yè)流程

2.1 智能倉(cāng)庫(kù)管理

一般的倉(cāng)庫(kù)作業(yè)包括出入庫(kù)管理和在庫(kù)管理。

入庫(kù)時(shí),備件與寫入信息的電子標(biāo)簽關(guān)聯(lián),經(jīng)過(guò)叉車組盤后通過(guò)入庫(kù)通道,使用倉(cāng)庫(kù)入口處的固定式讀寫器采集備件信息。在通過(guò)入口的RFID讀寫器時(shí),備件的信息都會(huì)被自動(dòng)記錄。入口處的RFID固定讀寫器將備件的詳細(xì)信息自動(dòng)傳遞給智能倉(cāng)庫(kù)管理系統(tǒng)(EWMS),該系統(tǒng)將所接收到的信息與產(chǎn)品入庫(kù)單進(jìn)行身份驗(yàn)證。如果電子標(biāo)簽信息合法就進(jìn)行后續(xù)工作的處理,否則將會(huì)反饋報(bào)警信息,庫(kù)存管理人員接收到報(bào)警信息后拒絕產(chǎn)品入庫(kù)。在接收到的信息合法情況下系統(tǒng)分配庫(kù)位,根據(jù)系統(tǒng)分配對(duì)備件執(zhí)行上架,利用手持RFID讀寫器將貨架標(biāo)簽與備件標(biāo)簽關(guān)聯(lián),更新數(shù)據(jù)庫(kù),完成入庫(kù)操作。流程圖如圖2所示。

出庫(kù)時(shí),銷售部門接到客戶訂單后向EWMS發(fā)送出庫(kù)通知,系統(tǒng)接收到出庫(kù)指令后通過(guò)數(shù)據(jù)庫(kù)中所記錄的備件貨位信息提示庫(kù)存管理人員掃描備件的電子標(biāo)簽,庫(kù)存管理人員進(jìn)行產(chǎn)品分揀和出庫(kù)作業(yè),當(dāng)備件通過(guò)出庫(kù)口通道的RFID讀寫器時(shí),出庫(kù)口RFID讀寫器獲取經(jīng)過(guò)出庫(kù)通道的備件電子標(biāo)簽內(nèi)所包含的詳細(xì)信息,自動(dòng)上傳到EWMS,系統(tǒng)對(duì)接收到的電子標(biāo)簽信息與出庫(kù)單核對(duì),如果電子標(biāo)簽信息合法就進(jìn)行后續(xù)工作的處理,否則將會(huì)反饋報(bào)警信息。在電子標(biāo)簽信息合法情況下生成出庫(kù)清單,取消電子標(biāo)簽與備件及貨位的關(guān)聯(lián)并更新庫(kù)存管理系統(tǒng)中的信息,實(shí)現(xiàn)電子標(biāo)簽的循環(huán)使用。出庫(kù)流程圖如圖3所示。

在庫(kù)管理主要是對(duì)在庫(kù)產(chǎn)品進(jìn)行盤點(diǎn)管理、備件查詢、貨位查詢、備件信息的修改。利用RFID閱讀器對(duì)在庫(kù)備件的標(biāo)簽進(jìn)行掃描,并與系統(tǒng)數(shù)據(jù)庫(kù)中所記錄信息進(jìn)行比對(duì)核實(shí),方便庫(kù)存管理人員實(shí)時(shí)、準(zhǔn)確地掌握在庫(kù)產(chǎn)品的詳細(xì)信息。

2.2 智能身份識(shí)別

為工作人員發(fā)放RFID標(biāo)簽,在RFID標(biāo)簽內(nèi)寫入基本信息,并設(shè)置權(quán)限,即庫(kù)管是高級(jí)用戶,其他工作人員是普通用戶。利用在庫(kù)區(qū)門邊的讀寫器,和工作人員佩戴的RFID標(biāo)簽,可以識(shí)別進(jìn)入庫(kù)區(qū)的人員是否符合規(guī)定,執(zhí)行報(bào)警操作。其次,在進(jìn)出倉(cāng)庫(kù)時(shí)只有高級(jí)用戶,經(jīng)過(guò)接受器掃描驗(yàn)證,方可授予作業(yè)權(quán)限進(jìn)行出入庫(kù)操作,普通用戶能進(jìn)入倉(cāng)庫(kù),但是不能進(jìn)行出入庫(kù)操作,未佩戴標(biāo)簽的非法用戶進(jìn)入倉(cāng)庫(kù),執(zhí)行門禁或報(bào)警操作。流程圖如圖4所示。

2.3 智能防盜報(bào)警

當(dāng)倉(cāng)庫(kù)發(fā)生被盜情況時(shí),倉(cāng)庫(kù)的物理報(bào)警系統(tǒng)(如聲光報(bào)警系統(tǒng))被破壞,被盜取備件離開(kāi)帶有RFID電子標(biāo)簽讀寫器的倉(cāng)庫(kù)出庫(kù)口時(shí),標(biāo)簽讀寫器接收到被盜產(chǎn)品上RFID電子標(biāo)簽發(fā)射的信號(hào),并將被盜備件的詳細(xì)信息發(fā)送到EWMS,系統(tǒng)將接收到被盜備件的詳細(xì)信息與系統(tǒng)內(nèi)所記錄信息進(jìn)行核實(shí)比對(duì),由于系統(tǒng)沒(méi)有得到正常的出庫(kù)指令,所以RFID標(biāo)簽讀取到的備件狀態(tài)信息與系統(tǒng)記錄的備件狀態(tài)信息不一致,說(shuō)明該備件是未經(jīng)授權(quán)移動(dòng)而異常出庫(kù),執(zhí)行門禁或報(bào)警操作,并通過(guò)產(chǎn)生智能報(bào)警報(bào)表將產(chǎn)品的詳細(xì)信息(例如貨位信息)通過(guò)PC端或手機(jī)終端發(fā)送給庫(kù)存管理人員,在最短時(shí)間內(nèi)起到智能報(bào)警作用,而庫(kù)存管理人員通過(guò)得到的被盜備件詳細(xì)信息例如被盜備件貨位號(hào)能夠盡快對(duì)被盜備件定位,減少了純?nèi)斯けP查操作環(huán)節(jié),為后期的破案工作和追回被盜備件爭(zhēng)取了更多有效時(shí)間,減少了倉(cāng)庫(kù)和企業(yè)的損失。流程圖如圖5所示。

2.4 智能備件預(yù)測(cè)

利用RFID無(wú)線識(shí)別技術(shù)對(duì)礦機(jī)零部件中關(guān)鍵件進(jìn)行全程跟蹤標(biāo)識(shí),達(dá)到全程智能化的管理[5]。設(shè)備廠商提前準(zhǔn)確地預(yù)測(cè)到維修廠備件的未來(lái)需求是至關(guān)重要的,從而決定何時(shí)給維修廠補(bǔ)貨以及補(bǔ)貨數(shù)量的多少。

在關(guān)鍵件裝入設(shè)備時(shí),主要是建立關(guān)鍵件號(hào)與設(shè)備號(hào)的對(duì)應(yīng)聯(lián)系。關(guān)鍵備件上貼RFID 標(biāo)簽,標(biāo)簽里寫入關(guān)鍵件的各種需要跟蹤的信息,包括該關(guān)鍵備件的自身詳細(xì)信息,銷售信息,使用維修記錄信息,庫(kù)存信息,各種收集到的信息都上傳到系統(tǒng)整合平臺(tái)上。設(shè)備廠商將這些信息匯集起來(lái)對(duì)其進(jìn)行相應(yīng)的分析處理,利用數(shù)據(jù)挖掘技術(shù)對(duì)關(guān)鍵件的需求進(jìn)行預(yù)測(cè)模型訓(xùn)練,建立未來(lái)相關(guān)的預(yù)測(cè)模型,對(duì)關(guān)鍵件的需求進(jìn)行及時(shí)的預(yù)測(cè)補(bǔ)貨,自動(dòng)生成生產(chǎn)訂單,然后經(jīng)過(guò)系統(tǒng)審核和修改確認(rèn)最后的訂單。預(yù)測(cè)模型圖如圖6所示。

3 基于RFID技術(shù)的智能備件庫(kù)管理系統(tǒng)設(shè)計(jì)

3.1 系統(tǒng)構(gòu)架設(shè)計(jì)

礦機(jī)備件庫(kù)管理系統(tǒng)構(gòu)架共分為三層:

信息采集層:利用發(fā)卡器將備件信息寫入標(biāo)簽,通過(guò)讀寫器采集備件信息和儲(chǔ)位信息。主要設(shè)備有發(fā)卡器、手持式讀寫器、固定式讀寫器以及電子標(biāo)簽。

信息傳輸層:通過(guò)無(wú)線通訊技術(shù)或計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)將采集到的信息傳輸?shù)綌?shù)據(jù)庫(kù)。主要設(shè)備有前端控制器、無(wú)線接入設(shè)備和相關(guān)的網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)設(shè)備。

信息管理層:對(duì)采集數(shù)據(jù)信息進(jìn)行分析、處理與管理,包括數(shù)據(jù)庫(kù)服務(wù)器、相關(guān)的網(wǎng)絡(luò)服務(wù)器和信息管理軟件。

系統(tǒng)利用DELPHI平臺(tái)+ SQL Server 2000構(gòu)建客戶端、應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器三層結(jié)構(gòu)。

3.2 系統(tǒng)模塊設(shè)計(jì)

系統(tǒng)主要有五大功能模塊:基本信息模塊、倉(cāng)庫(kù)管理模塊、身份識(shí)別模塊、智能報(bào)警模塊和智能預(yù)測(cè)模塊。如圖7所示。

基本信息管理模塊包含綜合信息和標(biāo)簽管理(寫卡、讀卡)。綜合信息包括登錄系統(tǒng)、客戶服務(wù)、儲(chǔ)位及備件設(shè)置等。寫卡是庫(kù)存管理人員在專門寫標(biāo)簽區(qū)域向RFID電子標(biāo)簽中寫入產(chǎn)品的入庫(kù)信息,讀卡是在整個(gè)庫(kù)存管理中都會(huì)出現(xiàn)的操作。

倉(cāng)庫(kù)管理模塊主要包括出入庫(kù)管理和在庫(kù)管理。入庫(kù)管理包括入庫(kù)信息、入庫(kù)報(bào)表以及入庫(kù)作業(yè)。在庫(kù)管理主要包括盤點(diǎn)管理、貨物查詢以及貨位查詢。出庫(kù)管理包括出庫(kù)信息、出庫(kù)報(bào)表以及出庫(kù)作業(yè)。

身份識(shí)別模塊通過(guò)設(shè)置權(quán)限區(qū)分不同工作人員,利用標(biāo)簽管理將該信息寫入標(biāo)簽達(dá)到對(duì)使用人員權(quán)限的管理。當(dāng)有非法身份進(jìn)入倉(cāng)庫(kù)時(shí),啟用報(bào)警及門禁管理。

智能報(bào)警模塊當(dāng)有異常出庫(kù)時(shí),產(chǎn)生報(bào)警并產(chǎn)生智能報(bào)警報(bào)表將產(chǎn)品的詳細(xì)信息(例如貨位信息)通過(guò)PC端或手機(jī)終端發(fā)送給庫(kù)存管理人員,同時(shí)啟用門禁系統(tǒng)。

智能預(yù)測(cè)模塊利用RFID技術(shù)采集關(guān)鍵備件的庫(kù)存信息、維修信息以及銷售信息,根據(jù)相關(guān)算法預(yù)測(cè)補(bǔ)貨,生成訂單,完成智能預(yù)測(cè)過(guò)程。

3.3 軟件開(kāi)發(fā)

3.3.1 軟件開(kāi)發(fā)方式。該智能倉(cāng)庫(kù)管理系統(tǒng)(EWMS)的開(kāi)發(fā)方式有兩種:(1)自己動(dòng)手編寫程序,完成底層讀寫器對(duì)電子標(biāo)簽的讀寫以及讀寫器與上位機(jī)的通信等。對(duì)于開(kāi)發(fā)者,這種方式具有很大的靈活性,但同時(shí)要求開(kāi)發(fā)者具有較高的軟、硬件水平,不是開(kāi)發(fā)者都能完成的。(2)利用廠商提供的Windows標(biāo)準(zhǔn)動(dòng)態(tài)鏈接庫(kù)(DLL)文件。采用該方式不僅靈活,而且開(kāi)發(fā)過(guò)程比較容易。

下面主要介紹Delphi環(huán)境下采用第二種方法。

3.3.2 動(dòng)態(tài)鏈接庫(kù)(DLL)?!皠?dòng)態(tài)鏈接庫(kù)”(DLL)是一個(gè)可執(zhí)行的并可以被多個(gè)Windows應(yīng)用程序共享的程序模塊,包含了一些可以被多個(gè)Windows應(yīng)用程序或DLL共享的代碼、數(shù)據(jù)和資源。DLL不是代碼的復(fù)制,不用重復(fù)編譯或鏈接,而是在應(yīng)用程序運(yùn)行時(shí)刻載入,從而提高了運(yùn)行效率。程序利用RFID 讀寫器廠家提供的DLL(EPCSDK.dll)實(shí)現(xiàn)函數(shù)的調(diào)用。下面對(duì)所用到的函數(shù)說(shuō)明如下:

(1)OpenComm

函數(shù)原型:HANDLE OpenComm(int portNo);

功能說(shuō)明:打開(kāi)串口。

(2)CloseComm

函數(shù)原型:void CloseComm(HANDLE hCom);

功能說(shuō)明:關(guān)閉串口。

(3)IdentifySingleTag

函數(shù)原型:BOOL IdentifySingleTag(HANDLE hCom, BYTE* tagID, BYTE* antennaNo,BYTEReaderAddr);

功能說(shuō)明:識(shí)別單個(gè)標(biāo)簽。

(4)StopReading

函數(shù)原型:BOOL StopReading(HANDLE hCom, BYTE ReaderAddr);

功能說(shuō)明:使讀卡器停止讀取標(biāo)簽。通常是在定時(shí)模式下,要臨時(shí)停止讀標(biāo)簽,使用該函數(shù),如果要恢復(fù)到定時(shí)模式,此時(shí)要發(fā)送 ResumeReading,即復(fù)位讀取命令。

(5)ResumeReading

函數(shù)原型:BOOL ResumeReading(HANDLE hCom,BYTE ReaderAddr);

功能說(shuō)明:復(fù)位讀寫器,相當(dāng)于對(duì)讀寫器重新上電,用于定時(shí)模式下,臨時(shí)停讀標(biāo)簽之后,恢復(fù)到定時(shí)讀取標(biāo)簽。

(6)FastWriteTagID

函數(shù)原型:BOOL FastWriteTagID(HANDLE hCom, int bytesNum, const BYTE* bytes, BYTEReaderAddr);

功能說(shuō)明:快寫標(biāo)簽ID,只寫標(biāo)簽的EPC區(qū),即通常所說(shuō)的標(biāo)簽號(hào)碼。

(7)FastWriteTag

函數(shù)原型:BOOL FastWriteTag(HANDLE hCom, BYTE memBank, BYTE address, BYTE WordCount,constBYTE* bytes,BYTE ReaderAddr);

功能說(shuō)明:快寫標(biāo)簽,包括EPC區(qū),數(shù)據(jù)區(qū)和保留區(qū)。

在Delphi靜態(tài)調(diào)用DLL時(shí),一般要用extern子句聲明要調(diào)用的過(guò)程或函數(shù)及其所在的DLL文件名。例如實(shí)現(xiàn)打開(kāi)串口,需要先聲明調(diào)用的打開(kāi)串口函數(shù),F(xiàn)unction OpenComm(PortNo:Integer):THandle;Stdcall External ‘EPCSDK.dll’;然后,在程序中直接調(diào)用OpenComm函數(shù)即可打開(kāi)相應(yīng)串口。

4 結(jié)束語(yǔ)

該備件庫(kù)智能管理系統(tǒng)的應(yīng)用可以實(shí)現(xiàn)有關(guān)倉(cāng)庫(kù)管理的智能化,通過(guò)系統(tǒng)的身份識(shí)別與防盜報(bào)警模塊為倉(cāng)庫(kù)安全提供保障,利用該系統(tǒng)可以實(shí)現(xiàn)關(guān)鍵備件的跟蹤,通過(guò)智能預(yù)測(cè)進(jìn)行補(bǔ)貨,滿足了安全庫(kù)存要求。將RFID技術(shù)引入礦山機(jī)械備件倉(cāng)庫(kù)的管理有如下重要意義

(1)礦山機(jī)械備件價(jià)格昂貴,且由于其大小不一,形狀不規(guī)則等原因?qū)е缕浔仨毞胖迷诩b箱內(nèi)運(yùn)輸,所以每次驗(yàn)貨都需要開(kāi)箱掃描檢驗(yàn),不便于管理。而RFID技術(shù)可以透過(guò)外包裝進(jìn)行無(wú)光源讀取數(shù)據(jù),則免去了開(kāi)箱檢驗(yàn)的環(huán)節(jié),提高了工作效率。

(2)RFID標(biāo)簽是靠電磁波工作的,而金屬環(huán)境會(huì)阻礙電磁波的傳播,而礦山機(jī)械都屬于金屬器械,所以在應(yīng)用RFID技術(shù)時(shí)需要選用抗金屬標(biāo)簽,相對(duì)于其他場(chǎng)合的RFID標(biāo)簽,其技術(shù)要求也會(huì)相對(duì)提高。所以如果RFID技術(shù)在礦機(jī)備件倉(cāng)庫(kù)中能夠很好的應(yīng)用,在其他方面,這套倉(cāng)庫(kù)管理系統(tǒng)會(huì)得到普遍的推廣。

參考文獻(xiàn):

[1] 楊好強(qiáng),于海東,孫文生. 礦山設(shè)備備件管理淺談[J]. 礦山設(shè)備,2011(5):96-97.

[2] 姚春江,陳小虎,周永濤,等. RFID技術(shù)在維修備件倉(cāng)儲(chǔ)管理中的研究[J]. 微計(jì)算機(jī)信息,2009,25(10-2):176-177.

[3] 劉新亮,姜同強(qiáng),王雯. RFID在倉(cāng)儲(chǔ)物流中的應(yīng)用[J]. 商場(chǎng)現(xiàn)代化,2008,11(55):120-122.

第2篇:倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)的意義范文

關(guān)鍵詞:倉(cāng)庫(kù)管理 零庫(kù)存 周期盤點(diǎn) 系統(tǒng)設(shè)計(jì)

當(dāng)今社會(huì),物流業(yè)發(fā)展如雨后春筍,各類產(chǎn)品流通分外頻繁,隨著產(chǎn)品流通增多,對(duì)倉(cāng)庫(kù)的數(shù)量要求也增多,因此涌現(xiàn)出一大批大型倉(cāng)庫(kù)。這些經(jīng)營(yíng)性倉(cāng)庫(kù)的誕生,在很大程度上為物品運(yùn)輸中所需的臨時(shí)中轉(zhuǎn)提供了方便,促進(jìn)了經(jīng)濟(jì)以及社會(huì)發(fā)展。但是這些倉(cāng)庫(kù)自身的性質(zhì)導(dǎo)致在日?;顒?dòng)中,物品出庫(kù)以及入庫(kù)非常頻繁,出庫(kù)往往不能按時(shí)完成,入庫(kù)所占空間不固定,使倉(cāng)庫(kù)管理變得復(fù)雜。盡量使庫(kù)存量保持最佳,力爭(zhēng)向理想化的“零庫(kù)存”靠近,在減少財(cái)力、物力、人力的前提下管理好庫(kù)存,保障最大的供給,是眾多企業(yè)競(jìng)相追逐的目標(biāo)。因此,研究如何提高倉(cāng)庫(kù)管理水平,盡量降低消耗,提高效益,更好的服務(wù)于物資供應(yīng),具有深刻的意義。

■一、傳統(tǒng)倉(cāng)庫(kù)管理中存在的不足

傳統(tǒng)的倉(cāng)庫(kù)管理模式較為簡(jiǎn)單,只是一種靜態(tài)管理,很難使企業(yè)資源得以充分利用,并且傳統(tǒng)倉(cāng)儲(chǔ)業(yè)主要是依照貨主委托對(duì)其相關(guān)物品進(jìn)行養(yǎng)護(hù)以及保管,功能較為單一。而倉(cāng)庫(kù)管理僅僅是包裝、上架、收貨、揀貨等倉(cāng)庫(kù)內(nèi)部的一些活動(dòng),而對(duì)倉(cāng)庫(kù)規(guī)劃、布局、選址等往往不夠重視,在經(jīng)營(yíng)傳統(tǒng)業(yè)務(wù)時(shí),并未引進(jìn)倉(cāng)儲(chǔ)新技術(shù)。而現(xiàn)代化的倉(cāng)庫(kù)不再是以往的靜態(tài)儲(chǔ)存場(chǎng)所,更呼吁掌握倉(cāng)庫(kù)的實(shí)時(shí)、動(dòng)態(tài)數(shù)據(jù)從而更及時(shí)、準(zhǔn)確的提供物資供應(yīng),以“零庫(kù)存”的思想,盡量減少不必要的庫(kù)存,加快內(nèi)部庫(kù)存流動(dòng)速度,提高其透明度,使資源合理利用。具體說(shuō)來(lái),有以下幾點(diǎn)有待改進(jìn)。

1、倉(cāng)庫(kù)系統(tǒng)設(shè)計(jì)未盡合理

物流系統(tǒng)的設(shè)計(jì)過(guò)程中,倉(cāng)庫(kù)具體數(shù)目以及其地理位置取決于產(chǎn)品要求、制造點(diǎn)、客戶三個(gè)因素。倉(cāng)庫(kù)往往是企業(yè)通過(guò)努力贏得效益以及時(shí)間的體現(xiàn),而傳統(tǒng)的倉(cāng)庫(kù)設(shè)計(jì)已經(jīng)無(wú)法適應(yīng)市場(chǎng)多元化對(duì)應(yīng)的高要求,也不能夠滿足消費(fèi)者對(duì)其所需求的高水平、高質(zhì)量的服務(wù)。

2、盤點(diǎn)方式落后

傳統(tǒng)的對(duì)物品的盤點(diǎn)是由手工方式進(jìn)行的,負(fù)責(zé)盤點(diǎn)的人員隨身攜帶筆和紙親臨現(xiàn)場(chǎng),逐條的記錄信息,而且尤其對(duì)于大件物品,翻動(dòng)盤點(diǎn)極其不便。此外,盤點(diǎn)物品從而完成數(shù)據(jù)采集并不意味著盤點(diǎn)整個(gè)過(guò)程的終結(jié),采集好數(shù)據(jù)之后,人工將其輸入計(jì)算機(jī),對(duì)相關(guān)數(shù)據(jù)進(jìn)行匯總、比較。這樣的操作流程不僅耗用大量的時(shí)間,而且對(duì)人力也是一種浪費(fèi),同時(shí),準(zhǔn)確性不夠高,人為錯(cuò)誤時(shí)有發(fā)生。

3、文字記錄式影響準(zhǔn)確性

傳統(tǒng)模式中的物品入庫(kù)以及出庫(kù)時(shí),往往依靠紙張文件、非自動(dòng)化的系統(tǒng)對(duì)進(jìn)出物品進(jìn)行追蹤、記錄,主要是根據(jù)人為記憶來(lái)管理倉(cāng)庫(kù)。而對(duì)于大范圍的存儲(chǔ)區(qū)而言,人為因素往往具有的不確定性導(dǎo)致采集物品存放點(diǎn)等信息變得格外繁瑣,傳遞滯后時(shí)有發(fā)生,庫(kù)存量因此上升,這與現(xiàn)代化“零庫(kù)存”理念相悖,難以保證確切的發(fā)貨日期,導(dǎo)致決策不夠準(zhǔn)確。這種主要依靠人力收集數(shù)據(jù)的方式很難實(shí)現(xiàn)系統(tǒng)化,造成人力浪費(fèi),增加了儲(chǔ)存量,降低了倉(cāng)庫(kù)有限空間利用率,減緩了資金周轉(zhuǎn)速度,不利于企業(yè)效益的提高。

4、管理軟件無(wú)法及時(shí)反應(yīng)市場(chǎng)變化

隨著庫(kù)存數(shù)量以及種類增多,出入庫(kù)不斷提升頻率,倉(cāng)庫(kù)傳統(tǒng)的作業(yè)機(jī)制中很大程度上阻礙了工作效率。伴隨著不斷加劇的商品物流,原有的以計(jì)算機(jī)為基礎(chǔ)的倉(cāng)庫(kù)管理系統(tǒng)已經(jīng)很難適應(yīng)倉(cāng)庫(kù)管理及時(shí)、快速、準(zhǔn)確、高效的要求。一個(gè)現(xiàn)代化的配送以及履行中心必不可少,傳統(tǒng)的軟件無(wú)法輕松實(shí)現(xiàn)改變的業(yè)務(wù)流程。

■二、增強(qiáng)倉(cāng)庫(kù)管理效率的方法

1、制定合理的倉(cāng)庫(kù)決策

合理的倉(cāng)庫(kù)決策是提升倉(cāng)庫(kù)物資流動(dòng)運(yùn)行質(zhì)量的基本前提。倉(cāng)庫(kù)決策包括倉(cāng)庫(kù)設(shè)計(jì)、選址、布局等方面相關(guān)的決策。首先應(yīng)當(dāng)展開(kāi)關(guān)于倉(cāng)庫(kù)設(shè)計(jì)中所涉及的材料搬運(yùn)、空間要求、布局等主要計(jì)劃,同時(shí)選擇倉(cāng)庫(kù)的確切地點(diǎn)。這些決策都在很大程度上決定了倉(cāng)庫(kù)自身的特點(diǎn),通過(guò)這些才能夠得出可能具備的搬運(yùn)效率。下面分別就以上幾個(gè)方面加以說(shuō)明。

首先,倉(cāng)庫(kù)選址方面。利用地點(diǎn)分析技術(shù)來(lái)選址倉(cāng)庫(kù)地址。完成選址后,就應(yīng)當(dāng)確定確切的建設(shè)地點(diǎn)。選擇分析時(shí)考慮的首要因素是服務(wù)成本以及服務(wù)可得性。其中,采購(gòu)所對(duì)應(yīng)的獲取成本對(duì)選址影響最大。此外,還必須對(duì)作業(yè)費(fèi)以及設(shè)備安裝費(fèi)(如稅金、公路通道、鐵路鐵軌、保險(xiǎn)費(fèi)率等)進(jìn)行評(píng)估,上述費(fèi)用具有地區(qū)差異性,因此,可以適當(dāng)調(diào)整倉(cāng)庫(kù)位置,變成客戶對(duì)應(yīng)的供應(yīng)商。如為了運(yùn)輸效率的提高冷藏食品相關(guān)的分銷商適當(dāng)調(diào)整倉(cāng)庫(kù)位置。

其次,倉(cāng)庫(kù)布局方面。倉(cāng)庫(kù)的總平面是否合理,對(duì)倉(cāng)庫(kù)儲(chǔ)運(yùn)質(zhì)量、盈利水平、儲(chǔ)運(yùn)成本、作業(yè)效率等都有很大影響。在新倉(cāng)庫(kù)建設(shè)中應(yīng)當(dāng)對(duì)倉(cāng)庫(kù)總體布置予以重視,同時(shí),適當(dāng)調(diào)整老倉(cāng)庫(kù)。倉(cāng)庫(kù)在布局上應(yīng)當(dāng)與倉(cāng)庫(kù)作業(yè)流程相互配合,這由材料搬運(yùn)以及預(yù)算的地面計(jì)劃共同決定,從而更好的服務(wù)于產(chǎn)品流程。根據(jù)需要對(duì)倉(cāng)庫(kù)布局進(jìn)行適當(dāng)優(yōu)化。

再次,倉(cāng)庫(kù)物理設(shè)計(jì)方面。倉(cāng)庫(kù)中,移動(dòng)所儲(chǔ)存的產(chǎn)品為主要功能,倉(cāng)庫(kù)通常被視為某種結(jié)構(gòu)設(shè)計(jì),最大限度的服務(wù)于產(chǎn)品流動(dòng)。因此,必須精確對(duì)需要配送的產(chǎn)品進(jìn)行研究,確定物資在倉(cāng)庫(kù)進(jìn)出時(shí)對(duì)于的平均重量、總?cè)莘e、總規(guī)模等。

2、實(shí)行訂貨周期盤點(diǎn)

依照帕累托定律,采取A-B-C模式的庫(kù)存分類,對(duì)周期盤點(diǎn)計(jì)劃進(jìn)行改進(jìn),減少企業(yè)庫(kù)存,掌握物品分布情況,準(zhǔn)確掌握哪些物品已經(jīng)過(guò)期、哪些周轉(zhuǎn)緩慢等情況。實(shí)踐證明,采用周期盤點(diǎn)能夠獲取準(zhǔn)確的庫(kù)存記錄,提高了庫(kù)存管理質(zhì)量。

3、實(shí)行儲(chǔ)存作業(yè)自動(dòng)化

首先,引進(jìn)條碼技術(shù)。倉(cāng)庫(kù)管理中使用條碼技術(shù),自動(dòng)化的采集倉(cāng)庫(kù)調(diào)撥、人庫(kù)、移庫(kù)移位、到貨檢驗(yàn)、庫(kù)存盤點(diǎn)、出庫(kù)等相關(guān)數(shù)據(jù),保證所有環(huán)節(jié)能夠高效、準(zhǔn)確的輸入數(shù)據(jù),力求保住企業(yè)能夠準(zhǔn)確、及時(shí)的對(duì)庫(kù)存中實(shí)際數(shù)據(jù)進(jìn)行掌握,適當(dāng)?shù)目刂苹蛘弑3制髽I(yè)庫(kù)存。因?yàn)闂l碼識(shí)別易于操作、準(zhǔn)確、快速,因此,在供應(yīng)物資的配送中心或者倉(cāng)儲(chǔ)配送、出入庫(kù)中使用條碼,可能大大節(jié)省人力。同時(shí),可以有效避免人為差錯(cuò),保證工作效率,使商品運(yùn)轉(zhuǎn)得以順暢進(jìn)行。

其次,自動(dòng)化庫(kù)房有待加強(qiáng)建設(shè)。目前,自動(dòng)化庫(kù)房朝著智能自動(dòng)化趨勢(shì)發(fā)展得益于迅速發(fā)展的人工智能技術(shù)。數(shù)據(jù)采集技術(shù)、掃描技術(shù)、條碼技術(shù)等應(yīng)用于自動(dòng)引導(dǎo)車、傳送帶、倉(cāng)庫(kù)堆垛車等設(shè)備上。

4、安裝WMS系統(tǒng)

WMS能夠提高作業(yè)速度、生產(chǎn)效率、庫(kù)存精確性。在與自動(dòng)識(shí)別設(shè)備相連接時(shí),可以采用WMS或者與之相似的方案。目前,眾多分銷商都在努力尋求此解決方案,而倉(cāng)庫(kù)不容置疑的變成適用此技術(shù)的相對(duì)前端機(jī)構(gòu),此技術(shù)也為其使用企業(yè)帶來(lái)了很多效益。同時(shí),WMS能夠使倉(cāng)庫(kù)的資產(chǎn)以及設(shè)備、空間得到充分利用。在很大程度上節(jié)約人力的同時(shí)實(shí)現(xiàn)倉(cāng)庫(kù)的優(yōu)化、標(biāo)準(zhǔn)化以及其功效。此外,WMS能夠緊密滿足顧客要求。通過(guò)跟蹤庫(kù)位對(duì)應(yīng)的庫(kù)存,對(duì)庫(kù)存控制嚴(yán)格執(zhí)行,使顧客對(duì)庫(kù)存中能夠用來(lái)銷售的產(chǎn)品對(duì)應(yīng)的具體數(shù)量十分有信心,從而減少庫(kù)存,盡量向“零庫(kù)存”的目標(biāo)邁進(jìn),使倉(cāng)庫(kù)空間得以充分利用,減少顧客在其外部倉(cāng)庫(kù)方面的需求。

此外,還可以建立網(wǎng)絡(luò)倉(cāng)庫(kù)從而盡量降低經(jīng)營(yíng)成本,使倉(cāng)庫(kù)效益得以提高。

參考文獻(xiàn):

[1] 羅劍宏,彭秀清. 淺談新形勢(shì)下中國(guó)中小型生產(chǎn)企業(yè)的倉(cāng)庫(kù)管理[J]. 科技情報(bào)開(kāi)發(fā)與經(jīng)濟(jì), 2008,(02)

[2] 賈桂珠,張麗萍. 倉(cāng)庫(kù)管理在物資管理中的重要性[J]. 遼寧經(jīng)濟(jì), 2008,(04)

第3篇:倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)的意義范文

    1.1廢舊家電逆向物流概念

    廢舊家電是指因?yàn)樘蕴p壞或報(bào)廢的家電,為了減少環(huán)境污染和資源浪費(fèi),就必須對(duì)廢舊家電開(kāi)展逆向物流。所謂的廢舊家電逆向物流是指廢舊家電產(chǎn)品的資源循環(huán)利用和無(wú)害化處理為目的,對(duì)消費(fèi)者使用后的廢舊家電產(chǎn)品組織進(jìn)行的回收、運(yùn)輸、儲(chǔ)存、加工處理等活動(dòng)。

    廢舊家電逆向物流是淘汰或報(bào)廢的廢舊家電產(chǎn)品,從消費(fèi)者手中沿著回收渠道逐步流動(dòng)到廢舊家電處理企業(yè)的過(guò)程,廢舊家電逆向物流是為了對(duì)廢舊家電產(chǎn)品進(jìn)行資源循環(huán)再利用和有害物質(zhì)的無(wú)害化處理。為實(shí)現(xiàn)逆向物流的目的,需要對(duì)廢舊家電產(chǎn)品進(jìn)行回收、分類、檢驗(yàn)、拆卸、再生產(chǎn)及報(bào)廢處理等活動(dòng)。

    1.2廢舊家電逆向物流渠道

    目前,我國(guó)廢舊家電產(chǎn)品逆向物流渠道有三種。

    一是走街串巷的以廢品收購(gòu)為主的個(gè)體商販。他們用低價(jià)回收的方式從消費(fèi)者手中獲得廢舊家電,對(duì)于還能繼續(xù)使用的舊家電則適當(dāng)加價(jià)轉(zhuǎn)賣給二手家電經(jīng)營(yíng)商,而那些無(wú)法正常使用的報(bào)廢家電則送往地下拆卸點(diǎn)。二手店對(duì)這些廢舊家電進(jìn)行清洗、檢修和重裝,再重新銷售給外來(lái)務(wù)工人員或邊遠(yuǎn)農(nóng)村,實(shí)在無(wú)法修好的廢舊家電則在地下拆卸點(diǎn),通過(guò)簡(jiǎn)單拆卸提取有用的零部件,剩余部分則成為對(duì)環(huán)境危害極大地電子垃圾。

    二是家電賣場(chǎng)的“以舊換新”活動(dòng),但其回收后的產(chǎn)品大多也是轉(zhuǎn)賣給二手市場(chǎng),以獲利為主,并非公益性的行為,并沒(méi)有形成長(zhǎng)效的回收機(jī)制和固定的回收渠道。

    三是廢品回收公司,這類企業(yè)一般都來(lái)源于早期就已存在的物流系統(tǒng)且經(jīng)營(yíng)的時(shí)間都較長(zhǎng),擁有自己固定的業(yè)務(wù)范圍和獨(dú)特的物資經(jīng)營(yíng)渠道。他們針對(duì)于廢舊電子產(chǎn)品的處理主要是對(duì)此類產(chǎn)品的拆解,再處理業(yè)務(wù)。對(duì)于有用的零部件等進(jìn)行回收和再利用,而對(duì)于其他沒(méi)有利用價(jià)值的板材等則轉(zhuǎn)賣給專業(yè)的廠家進(jìn)行進(jìn)一步的材料回收。這種模式通常有很廣泛的人力基礎(chǔ)(城市垃圾收集人員),活動(dòng)易于開(kāi)展,業(yè)務(wù)容易進(jìn)行。

    上述三種渠道的共同點(diǎn)是各方都從自身經(jīng)濟(jì)利益出發(fā),不能兼顧社會(huì)的公共利益,還給公共安全帶來(lái)不少隱患。

    1.3廢舊家電逆向物流存在的問(wèn)題

    目前我國(guó)廢舊家電處理處于無(wú)序回收狀態(tài),主要流向收廢品的小販和非法拆解的地下作坊。其將仍能繼續(xù)使用的舊家電改頭換面后,以新產(chǎn)品的身份進(jìn)入市場(chǎng)銷售給低收入消費(fèi)者或邊遠(yuǎn)地區(qū)。這種做法會(huì)嚴(yán)重?fù)p害該品牌家電的信譽(yù)與社會(huì)地位?;蛘呃貌徽_的方法對(duì)廢舊家電進(jìn)行拆解、處理,以獲得有用的零部件或貴重金屬,這樣不僅造成資源浪費(fèi),還會(huì)嚴(yán)重地污染環(huán)境。

    國(guó)家建立了廢舊家電回收處理試點(diǎn),同時(shí)一些外資企業(yè)也在我國(guó)建立電子廢棄物處理廠,但是在實(shí)際運(yùn)行過(guò)程中,由于采用高價(jià)的拆解設(shè)備,同時(shí)因不擅長(zhǎng)回收社會(huì)廢舊家電,無(wú)法回收到足夠多的廢舊家電,而導(dǎo)致其規(guī)模上不去、不能盈利。

    2廢舊家電逆向物流存在問(wèn)題的成因分析

    作為家電行業(yè)供應(yīng)鏈?zhǔn)獾囊画h(huán),與新家電銷售正向物流相比,廢舊家電逆向物流有著很大的差異性和復(fù)雜性。廢舊家電逆向物流具有以下幾個(gè)特點(diǎn):

    首先,由于家電正向物流具有明確的產(chǎn)品需求方,正向物流的流向、數(shù)量都能夠明確確定,而廢舊家電產(chǎn)生的地點(diǎn)、時(shí)間、數(shù)量和質(zhì)量相關(guān)信息都是不可預(yù)知的,因此無(wú)法有效做出相應(yīng)的回收策略。

    其次,由于廢舊家電的淘汰信息分散且與回收企業(yè)資源不對(duì)稱,導(dǎo)致廢舊家電逆向物流的地點(diǎn)較為分散、無(wú)序,且不可能集中一次承接到大批量淘汰家電形成規(guī)模效應(yīng),有些種類的產(chǎn)品需要積累很長(zhǎng)的時(shí)間才能有一次較大規(guī)模的物流。這一切都使得逆向物流的過(guò)程運(yùn)作的非常緩慢。

    再次,由于不同種類的廢舊家電所使用的處理方式不同,必然會(huì)引起逆向物流的流程和手段差異性,產(chǎn)品種類的多樣性信息造成了回收企業(yè)開(kāi)展逆向物流的決策困難,無(wú)產(chǎn)品種類信息分析使很多回收企業(yè)不知開(kāi)展廢舊家電逆向物流。

    最后,廢舊家電回收企業(yè)沒(méi)有根據(jù)實(shí)際情況有效開(kāi)發(fā)設(shè)計(jì)符合自身需求的信息系統(tǒng),逆向物流過(guò)程中物流信息技術(shù)使用不全面、不恰當(dāng),回收企業(yè)開(kāi)展逆向物流過(guò)程中缺少有效監(jiān)控,導(dǎo)致回收企業(yè)逆向物流成本過(guò)高。

    以上四個(gè)特點(diǎn)決定了廢舊家電逆向物流的實(shí)施必然是高難度并且是高成本的,事實(shí)也確實(shí)如此。面對(duì)我國(guó)日益加快的家電淘汰大潮,如何有效地降低廢舊家電逆向物流存在的缺陷,改變廢舊家電逆向物流的落后現(xiàn)狀,切實(shí)做好環(huán)境保護(hù),徹底提升廢舊家電回收利用效率的意義是重大的。廢舊家電逆向物流產(chǎn)生的諸多問(wèn)題,關(guān)鍵因素就在于沒(méi)有有效對(duì)廢舊家電各類信息進(jìn)行有效監(jiān)控、采集分析,并形成有用的決策依據(jù),因此信息技術(shù)應(yīng)當(dāng)是解決廢舊家電逆向物流諸多問(wèn)題的一劑良方。

    3基于物聯(lián)網(wǎng)技術(shù)下的廢舊家電逆向物流革新

    3.1信息技術(shù)在廢舊家電逆向物流中的運(yùn)用

    廢舊家電逆向物流信息技術(shù)是對(duì)廢舊家電相關(guān)信息進(jìn)行采集、輸入、數(shù)據(jù)分析、輸出等有關(guān)的信息技術(shù),包含硬件和軟件兩部分。它充分使用了網(wǎng)絡(luò)技術(shù)、通信技術(shù)、計(jì)算機(jī)技術(shù)等方面?,F(xiàn)代信息技術(shù)可以在廢舊家電逆向物流的管理過(guò)程中發(fā)揮以下幾個(gè)方面的作用。

    3.1.1對(duì)廢舊家電逆向物流訂單進(jìn)行系統(tǒng)化管理

    制定廢舊家電逆向物流訂單管理系統(tǒng),居民個(gè)體消費(fèi)者可以通過(guò)電子郵件、傳真、電話或者是互聯(lián)網(wǎng)下廢舊家電回收訂單,退貨訂單管理系統(tǒng)將通過(guò)各種方式將回收訂單進(jìn)行統(tǒng)一化、標(biāo)準(zhǔn)化處理,這將有利于回收訂單的分析和管理。以實(shí)現(xiàn)廢舊家電從消費(fèi)者手中轉(zhuǎn)移的過(guò)程。

    3.1.2對(duì)廢舊家電回收信息進(jìn)行及時(shí)、準(zhǔn)確采集

    在廢舊家電逆向物流過(guò)程中由于回收物種類繁多,為了及時(shí)采集回收信息,有效管理回收物商品信息,對(duì)于低附加價(jià)值的回收物可以采用條碼技術(shù),而對(duì)于高附加價(jià)值的回收物則采用射頻識(shí)別(Radio Frequency Identification,RFID)技術(shù)。將條形碼和射頻技術(shù)結(jié)合在一起,可以更有效的解決與倉(cāng)庫(kù)及逆流物流動(dòng)有關(guān)的信息管理,其優(yōu)勢(shì)在于可以增加處理逆流物的件數(shù),除此之外還可以查看逆流物的流動(dòng)信息。

    3.1.3使用GPS、GIS對(duì)廢舊家電回收過(guò)程有效監(jiān)控

    利用GPS全球定位系統(tǒng)和GIS電子地圖系統(tǒng)可以應(yīng)用到對(duì)裝載逆流貨物的運(yùn)輸車輛的跟蹤,同時(shí)為廢舊家電回收的運(yùn)輸制定出最佳的運(yùn)輸路線和運(yùn)輸方式。通過(guò)GPS和GIS信息系統(tǒng)有效結(jié)合,便于回收企業(yè)對(duì)廢舊家電逆向物流進(jìn)行有效跟蹤和線路優(yōu)化以保證廢舊家電逆向物流的透明度和運(yùn)作效率。

    3.1.4以倉(cāng)庫(kù)管理系統(tǒng)(WMS)為手段進(jìn)行逆流物倉(cāng)儲(chǔ)控制

    對(duì)傳統(tǒng)的回收企業(yè)庫(kù)房進(jìn)行有效改造,運(yùn)用倉(cāng)庫(kù)管理系統(tǒng)對(duì)回收企業(yè)的逆流物倉(cāng)儲(chǔ)水平有效控制,針對(duì)不同類型的廢舊家電庫(kù)存水平制定準(zhǔn)確的倉(cāng)儲(chǔ)策略,WMS系統(tǒng)可以按照廢舊家電逆流物運(yùn)作的業(yè)務(wù)規(guī)則和運(yùn)算法則對(duì)逆流物的信息、運(yùn)輸資源進(jìn)行很好的管理,最大化保證廢舊家電綠色環(huán)保運(yùn)作。

    3.1.5將物流信息技術(shù)與網(wǎng)絡(luò)技術(shù)有效融合

    不論是運(yùn)輸管理信息技術(shù)(GPS和GIS),還是倉(cāng)儲(chǔ)管理系統(tǒng)(WMS)或者快速準(zhǔn)確的信息采集條碼、RFID技術(shù),如果不能與現(xiàn)代網(wǎng)絡(luò)信息技術(shù)有效集合,就不能發(fā)揮現(xiàn)代物流技術(shù)的最大化優(yōu)勢(shì),不能系統(tǒng)而完整的對(duì)各個(gè)逆流物進(jìn)行實(shí)時(shí)查詢,不能輔助提高逆向物流效率。

    3.1.6數(shù)據(jù)庫(kù)技術(shù)

    廢舊家電逆向物流各種數(shù)據(jù)信息經(jīng)過(guò)信息系統(tǒng)或管理軟件分析處理后,需要存儲(chǔ)在大容量的服務(wù)器硬件中以備今后的各種查詢使用,這時(shí)就需要建立逆流物的信息數(shù)據(jù)庫(kù),需要運(yùn)用數(shù)據(jù)庫(kù)技術(shù)完善對(duì)逆流物的信息監(jiān)管。

    3.2基于物聯(lián)網(wǎng)的廢舊家電逆向物流信息系統(tǒng)構(gòu)建

    3.2.1基于物聯(lián)網(wǎng)信息技術(shù)的逆向物流管理信息系統(tǒng)功能結(jié)構(gòu)

    廢舊家電逆向物流發(fā)展必須依靠物流信息技術(shù),實(shí)現(xiàn)物流的信息化管理,以信息化手段最大限度促進(jìn)逆向物流運(yùn)行的高效率和綠色環(huán)保。物聯(lián)網(wǎng)技術(shù)是以利用現(xiàn)代互聯(lián)網(wǎng)技術(shù)為依托建立新的物流信息化處理平臺(tái)為基礎(chǔ)的信息處理手段,物聯(lián)網(wǎng)技術(shù)打破傳統(tǒng)物流的局限,整合公司現(xiàn)有資源,重新設(shè)計(jì)逆向物流流程與功能。一般而言,基于物聯(lián)網(wǎng)的廢舊家電逆向物流信息系統(tǒng)應(yīng)具備以下基本功能:

    (1)采集功能。逆流物信息采集是逆向物流信息系統(tǒng)的信息輸入功能。廢舊家電逆向物流運(yùn)行過(guò)程中會(huì)產(chǎn)生大量關(guān)于逆流物的信息,逆向物流信息系統(tǒng)需要設(shè)置高效的采集功能,將逆流物信息及時(shí)準(zhǔn)確采集后傳輸給逆向物流信息系統(tǒng)。

    (2)存儲(chǔ)功能。逆向物流信息系統(tǒng)需要在服務(wù)器硬件的支撐下,運(yùn)用數(shù)據(jù)庫(kù)系統(tǒng)將各種逆向物流過(guò)程中采集到的逆流物信息加以存儲(chǔ),以備管理者隨時(shí)查詢。

    (3)分析處理功能。逆向物流信息系統(tǒng)可以根據(jù)系統(tǒng)內(nèi)預(yù)設(shè)的數(shù)據(jù)處理邏輯結(jié)構(gòu)和函數(shù)設(shè)置對(duì)存儲(chǔ)在系統(tǒng)內(nèi)的信息進(jìn)行分類整理,然后進(jìn)行統(tǒng)計(jì)分析和分類加工,轉(zhuǎn)換成具有參考價(jià)值的信息。

    (4)信息跟蹤功能。如果不能夠?qū)U舊家電逆向物流運(yùn)作過(guò)程進(jìn)行有效跟蹤監(jiān)管,則有可能造成廢舊家電對(duì)環(huán)境的污染,同時(shí)降低廢舊家電處理效率,因此需要給信息系統(tǒng)設(shè)計(jì)對(duì)逆流物的跟蹤功能,監(jiān)管逆流物的回收全過(guò)程。

    (5)廢舊家電處理決策功能。由于廢舊家電產(chǎn)生具有很大的不確定性,且廢舊家電產(chǎn)生地點(diǎn)分布較廣,因此給廢舊家電回收企業(yè)處理決策帶來(lái)了很大的困難,因此信息系統(tǒng)需要預(yù)留回收企業(yè)處理決策支持功能,幫助企業(yè)作出各種回收處理決策。

    (6)回收資源再利用信息跟蹤功能。各種廢舊家電逆向物流根本目的在于資源的回收再利用,為保證資源再利用的高效性,需要給信息管理系統(tǒng)中設(shè)置一個(gè)資源再利用的跟蹤功能,隨時(shí)了解回收資源再利用情況。

    3.2.2基于物聯(lián)網(wǎng)信息技術(shù)的逆向物流管理信息系統(tǒng)開(kāi)發(fā)過(guò)程

第4篇:倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)的意義范文

本系統(tǒng)主要完成對(duì)圖書倉(cāng)庫(kù)的庫(kù)存管理,包括圖書入庫(kù)、出庫(kù)、庫(kù)存,員工信息,供應(yīng)商信息以及密碼管理等六個(gè)方面。系統(tǒng)可以完成對(duì)各類信息的瀏覽、查詢、添加、刪除、修改、報(bào)表等功能。

系統(tǒng)的核心是入庫(kù)、庫(kù)存和出庫(kù)三者之間的聯(lián)系,每一個(gè)表的修改都將聯(lián)動(dòng)的影響其它的表,當(dāng)完成入庫(kù)或出庫(kù)操作時(shí)系統(tǒng)會(huì)自動(dòng)地完成庫(kù)存的修改。查詢功能也是系統(tǒng)的核心之一,在系統(tǒng)中即有單條件查詢和多條件查詢,也有精確查詢和模糊查詢,系統(tǒng)不僅有靜態(tài)的條件查詢,也有動(dòng)態(tài)生成的條件查詢,其目的都是為了方便用戶使用。系統(tǒng)有完整的用戶添加、刪除和密碼修改功能,并具備報(bào)表打印功能。

系統(tǒng)采用Microsoft Office中的Access 2000來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù),并使用當(dāng)前優(yōu)秀的開(kāi)發(fā)工具—Delphi 6.0 ,它有著最為靈活的數(shù)據(jù)庫(kù)結(jié)構(gòu),對(duì)數(shù)據(jù)庫(kù)應(yīng)用有著良好的支持。

論文主要介紹了本課題的開(kāi)發(fā)背景,所要完成的功能和開(kāi)發(fā)的過(guò)程。重點(diǎn)的說(shuō)明了系統(tǒng)設(shè)計(jì)的重點(diǎn)、設(shè)計(jì)思想、難點(diǎn)技術(shù)和解決方案。

關(guān)鍵字:數(shù)據(jù)庫(kù),SQL語(yǔ)言,Delph 6,數(shù)據(jù)庫(kù)組件,倉(cāng)庫(kù)管理

目 錄

第一章 引言 ……………………………………………………………………………1

1.1 課題來(lái)源 ……………………………………………………………………1

1.2 開(kāi)發(fā)工具的選擇 ……………………………………………………………2

1.3 所做的主要工作 ……………………………………………………………3

第二章 數(shù)據(jù)庫(kù)概論 ……………………………………………………………………4

2.1 數(shù)據(jù)庫(kù)的發(fā)展 ………………………………………………………………4

2.1.1 數(shù)據(jù)庫(kù)的發(fā)展 …………………………………………………………4

2.1.2 數(shù)據(jù)庫(kù)階段的特點(diǎn) ……………………………………………………5

2.1.3 數(shù)據(jù)庫(kù)技術(shù) ……………………………………………………………6

2.2 數(shù)據(jù)庫(kù)理論基礎(chǔ) ……………………………………………………………7

2.2.1 數(shù)據(jù)庫(kù)模型 ……………………………………………………………7

2.2.2 數(shù)據(jù)庫(kù)體系結(jié)構(gòu)

……………………………………………………10

2.2.3 數(shù)據(jù)的獨(dú)立性 ………………………………………………………11

2.2.4 范式 …………………………………………………………………11

2.3 SQL語(yǔ)言基礎(chǔ) ……………………………………………………………13

2.3.1 SQL簡(jiǎn)介 ……………………………………………………………13

2.3.2 SQL查詢

……………………………………………………………13

2.3.3 SQL數(shù)據(jù)更新

………………………………………………………14

第三章數(shù)據(jù)庫(kù)開(kāi)發(fā)工具 ……………………………………………………………16

3.1 Delphi 6.0 簡(jiǎn)介 ……………………………………………………………16

3.2 Delphi 6.0 控件 ……………………………………………………………17

3.2.1 ADO數(shù)據(jù)訪問(wèn)組件 …………………………………………………17

3.2.2 數(shù)據(jù)控制類DataControl

……………………………………………18

3.2.3 數(shù)據(jù)訪問(wèn)類DataAccess

……………………………………………18

3.2.4 SQL語(yǔ)言在Delphi中的應(yīng)用

………………………………………19

3.3 Access 簡(jiǎn)介

………………………………………………………………21

第四章 系統(tǒng)總體設(shè)計(jì) ………………………………………………………………23

4.1 系統(tǒng)需求分析

……………………………………………………………23

4.2 系統(tǒng)概要設(shè)計(jì)

……………………………………………………………25

4.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)

………………………………………………………25

4.2.2 數(shù)據(jù)庫(kù)設(shè)計(jì)

…………………………………………………………27

4.2.2.1 ER圖設(shè)計(jì) ……………………………………………………27

4.2.2.2 數(shù)據(jù)庫(kù)表格設(shè)計(jì)………………………………………………29

4.3系統(tǒng)詳細(xì)設(shè)計(jì)………………………………………………………………34

第五章 系統(tǒng)應(yīng)用程序設(shè)計(jì) …………………………………………………………37

5.1 系統(tǒng)窗體模塊組成…………………………………………………………37

5.2 數(shù)據(jù)模塊窗體設(shè)置…………………………………………………………38

5.3 主窗體功能模塊的實(shí)現(xiàn)……………………………………………………39

5.4 入庫(kù)、出庫(kù)窗體模塊的實(shí)現(xiàn)………………………………………………43

5.5 查詢功能的實(shí)現(xiàn)……………………………………………………………51

5.6 系統(tǒng)登陸窗體模塊的實(shí)現(xiàn)…………………………………………………52

5.7 用戶管理功能的實(shí)現(xiàn)………………………………………………………54

5.7.1 用戶管理主窗體 ……………………………………………………54

5.7.2 密碼修改窗體模塊的實(shí)現(xiàn)

…………………………………………54

5.7.3 用戶注冊(cè)窗體模塊的實(shí)現(xiàn)

…………………………………………55

5.7.4 用戶注銷窗體模塊的實(shí)現(xiàn)

…………………………………………57

結(jié)束語(yǔ) …………………………………………………………………………………59

致謝 ……………………………………………………………………………………60

參考文獻(xiàn) ………………………………………………………………………………61

第一章

引 言

§1.1 課題來(lái)源

隨著社會(huì)經(jīng)濟(jì)的迅速發(fā)展和科學(xué)技術(shù)的全面進(jìn)步,計(jì)算機(jī)事業(yè)的飛速發(fā)展,以計(jì)算機(jī)與通信技術(shù)為基礎(chǔ)的信息系統(tǒng)正處于蓬勃發(fā)展的時(shí)期。隨著經(jīng)濟(jì)文化水平的顯著提高,人們對(duì)生活質(zhì)量及工作環(huán)境的要求也越來(lái)越高。書籍做為人類的精神食糧,在現(xiàn)代社會(huì)中越來(lái)越受到重視,大量的書籍出現(xiàn)在市場(chǎng)上,人們有了各種各樣不同的選擇。與此同時(shí),為了管理大量的圖書,圖書倉(cāng)庫(kù)也大量的出現(xiàn),倉(cāng)庫(kù)的管理問(wèn)題也就提上了日程。隨著圖書的大量增加,其管理難度也越來(lái)越大,如何優(yōu)化倉(cāng)庫(kù)的日常管理也就成為了一個(gè)大眾化的課題。

在計(jì)算機(jī)飛速發(fā)展的今天,將計(jì)算機(jī)這一信息處理利器應(yīng)用于倉(cāng)庫(kù)的日常管理已是勢(shì)必所然,而且這也將為倉(cāng)庫(kù)管理帶來(lái)前所未有的改變,它可以帶來(lái)意想不到的效益,同時(shí)也會(huì)為企業(yè)的飛速發(fā)展提供無(wú)限潛力。采用計(jì)算機(jī)管理信息系統(tǒng)已成為倉(cāng)庫(kù)管理科學(xué)化和現(xiàn)代化的重要標(biāo)志,它給企業(yè)管理來(lái)了明顯的經(jīng)濟(jì)效益和社會(huì)效益。主要體現(xiàn)在:

極大提高了倉(cāng)庫(kù)工作人員的工作效率,大大減少了以往入出存流程繁瑣,雜亂,周期長(zhǎng)的弊端。

基于倉(cāng)庫(kù)管理的全面自動(dòng)化,可以減少入庫(kù)管理、出庫(kù)管理及庫(kù)存管理中的漏洞,可以節(jié)約不少管理開(kāi)支,增加企業(yè)收入。

倉(cāng)庫(kù)的管理的操作自動(dòng)化和信息的電子化,全面提高了倉(cāng)庫(kù)的管理水平。

隨著我國(guó)改革開(kāi)放的不斷深入,經(jīng)濟(jì)飛速的發(fā)展,企業(yè)要想生存、發(fā)展,要想在激烈的市場(chǎng)競(jìng)爭(zhēng)中立于不敗之地,沒(méi)有現(xiàn)代化的管理是萬(wàn)萬(wàn)不行的,倉(cāng)庫(kù)管理的全面自動(dòng)化、信息化則是其中極其重要的部分。為了加快倉(cāng)庫(kù)管理自動(dòng)化的步伐,提高倉(cāng)庫(kù)的管理業(yè)務(wù)處理效率,建立倉(cāng)庫(kù)管理系統(tǒng)已變得十分心要。

入庫(kù)、庫(kù)存、出庫(kù)還是現(xiàn)在企業(yè)圖書倉(cāng)庫(kù)管理的常規(guī)基本模式,雖然,最近又出現(xiàn)了很多新的管理模式,如:基于零庫(kù)存思想的沃爾瑪特管理方式,但這些新的思想在中國(guó)大部分企業(yè)的管理中還是難以實(shí)現(xiàn)的。所以如何設(shè)計(jì)好倉(cāng)庫(kù)管理系統(tǒng),盡可能地減少倉(cāng)庫(kù)管理的重復(fù)性和低效性就成為當(dāng)前最為重要的問(wèn)題。圖書倉(cāng)庫(kù)管理的核心是入庫(kù)、庫(kù)存和出庫(kù)之間的聯(lián)系,如何處理好三者之間的關(guān)系是系統(tǒng)最為關(guān)鍵的部分。另外,員工信息和供應(yīng)商信息管理也是倉(cāng)庫(kù)管理中一個(gè)必不可少的部分,它提供著與入庫(kù)和出庫(kù)相關(guān)的地一些信息,使得整個(gè)系統(tǒng)更加完整,更加實(shí)用。

通過(guò)對(duì)倉(cāng)庫(kù)管理日常工作的詳細(xì)調(diào)查,搜集了大量的資料,從系統(tǒng)結(jié)構(gòu)的組織,功能的實(shí)現(xiàn),技術(shù)的要求以及可行性等多方面進(jìn)行考慮,認(rèn)為本課題是一個(gè)適應(yīng)現(xiàn)今圖書倉(cāng)庫(kù)管理需求的計(jì)算機(jī)信息管理系統(tǒng),具有一定的實(shí)際開(kāi)發(fā)價(jià)值和使用價(jià)值。

§1.2 開(kāi)發(fā)工具的選擇

自Java誕生以來(lái),隨著Internet技術(shù)的普及和應(yīng)用需求的變化,以第四代語(yǔ)言為主的應(yīng)用開(kāi)發(fā)產(chǎn)品發(fā)生了較大的變化,它們不僅已成為人們開(kāi)發(fā)應(yīng)用的開(kāi)發(fā)工具,而且很多產(chǎn)品已發(fā)展成為一種強(qiáng)有力的應(yīng)用開(kāi)發(fā)環(huán)境。這些新型的開(kāi)發(fā)工具通常以一種集成軟件包的形式提供給開(kāi)發(fā)人員,被稱為Studio(工作室)或Suite(程序組)。例如,微軟的Visual Studio 6.0,Borland公司的Delphi 6.0等數(shù)據(jù)庫(kù)輔助開(kāi)發(fā)工具。

現(xiàn)在,市場(chǎng)上可以選購(gòu)的應(yīng)用開(kāi)發(fā)產(chǎn)品很多,流行的也有數(shù)十種。目前在我國(guó)市場(chǎng)上最為流行、使用最多、最為先進(jìn)的可用作企業(yè)級(jí)開(kāi)發(fā)工具的產(chǎn)品有:

Microsoft公司的Visual Basic 6.0版

Microsoft公司的Visual C++6.0版

Borland公司的Delphi 6.0版

在目前市場(chǎng)上這些眾多的程序開(kāi)發(fā)工具中,有些強(qiáng)調(diào)程語(yǔ)言的彈性與執(zhí)行效率;有些則偏重于可視化程序開(kāi)發(fā)工具所帶來(lái)的便利性與效率的得高,各有各的優(yōu)點(diǎn)和特色,也滿足了不同用戶的需求。然而,語(yǔ)言的彈性和工具的便利性是密不可分的,只有便利的工具,卻沒(méi)有彈性的語(yǔ)言作支持,許多特殊化的處理動(dòng)作必需要耗費(fèi)數(shù)倍的工夫來(lái)處理,使得原來(lái)所標(biāo)榜的效率提高的優(yōu)點(diǎn)失去了作用;相反,如果只強(qiáng)調(diào)程語(yǔ)言的彈性,卻沒(méi)有便利的工具作配合,會(huì)使一些即使非常簡(jiǎn)單的界面處理動(dòng)作,也會(huì)嚴(yán)重地浪費(fèi)程序設(shè)計(jì)師的寶貴時(shí)間。

而Delphi是一個(gè)非常理想選擇。Delphi 6 是操作系統(tǒng)中快速應(yīng)用開(kāi)發(fā)環(huán)境的最新版本。它也是當(dāng)前Windows平臺(tái)上第一個(gè)全面支持最新Web服務(wù)的快速開(kāi)發(fā)工具。無(wú)論是企業(yè)級(jí)用戶,還是個(gè)人開(kāi)發(fā)者,都能夠利用Delphi 6 輕松、快捷地構(gòu)建新一代電子商務(wù)應(yīng)用。Delphi 6 是惟一支持所有新出現(xiàn)的工業(yè)標(biāo)準(zhǔn)的RAD環(huán)境,包括XML(擴(kuò)展標(biāo)記語(yǔ)言)/XSL(可擴(kuò)展樣式語(yǔ)言),SOAP(簡(jiǎn)單對(duì)象存取協(xié)議)和WSDL(Web服務(wù)器描述語(yǔ)言)等。

Delphi 6 是可視化的快速應(yīng)用程序開(kāi)發(fā)語(yǔ)言,它提供了可視化的集成開(kāi)發(fā)環(huán)境,這一環(huán)境為應(yīng)用程序設(shè)計(jì)人員提供了一系列靈活而先進(jìn)的工具,可以廣泛地用于種類應(yīng)用程序設(shè)計(jì)。在Delphi 6 的集成開(kāi)發(fā)環(huán)境中,用戶可以設(shè)計(jì)程序代碼、運(yùn)行程序、進(jìn)行程序錯(cuò)誤的調(diào)試等,可視化的開(kāi)發(fā)方法降低了應(yīng)用程序開(kāi)發(fā)的難度。Delphi的基礎(chǔ)編程語(yǔ)言是具有面向?qū)ο筇匦缘腜ascal語(yǔ)言,即Object Pascal 。Object Pascal具有代碼穩(wěn)定、可讀性好、編譯速度快等優(yōu)點(diǎn),并將面向?qū)ο蟮母拍钜浦驳搅薖ascal語(yǔ)言中,使這種基礎(chǔ)語(yǔ)言有了新的發(fā)展空間。

使用Delphi 6.0 ,我們幾乎可以作任何事情,還可以撰寫種各種類型的應(yīng)用程序,動(dòng)態(tài)鏈接庫(kù)(DLL)、CON、或CORBA對(duì)象,CGI/ISAPI程序,Microsoft Back Office應(yīng)用程序。程序的規(guī)模小到簡(jiǎn)單的個(gè)人數(shù)據(jù)庫(kù)應(yīng)用,大到復(fù)雜的企業(yè)的多層次分布式系統(tǒng),都可以使用Delphi進(jìn)行開(kāi)發(fā),其友好的集成開(kāi)發(fā)界面,可視化的雙向開(kāi)發(fā)模式,良好的數(shù)據(jù)庫(kù)應(yīng)用支持高效的程序開(kāi)發(fā)和程序運(yùn)行,備受廣大程序開(kāi)發(fā)人員的好評(píng)。尤其是Delphi對(duì)數(shù)據(jù)庫(kù)應(yīng)用的強(qiáng)大支持,大大提高了數(shù)據(jù)庫(kù)應(yīng)用軟件開(kāi)發(fā)的效率,縮短了開(kāi)發(fā)周期,深受廣大數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)人員的喜愛(ài)。Delphi為數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員提供了豐富的數(shù)據(jù)庫(kù)開(kāi)發(fā)組件,使數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)功能更強(qiáng)大,控制更靈活,編譯后的程序運(yùn)行速度更快。

§1.3 本文所做工作

引言部分介紹了本系統(tǒng)的課題來(lái)源以及對(duì)數(shù)據(jù)庫(kù)開(kāi)發(fā)工具的選擇。

第二章介紹了數(shù)據(jù)庫(kù)的發(fā)展,關(guān)系數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)體系結(jié)構(gòu),并系統(tǒng)介紹了SQL語(yǔ)言,為設(shè)計(jì)和理解應(yīng)用程序做了鋪墊。

第三章系統(tǒng)介紹了Delphi 6.0及其部分控件,SQL語(yǔ)言在Delphi 6.0中的應(yīng)用,以及Access等。

第四章是本文的主體,按照軟件工程的要求,從需求分析開(kāi)始,經(jīng)過(guò)概要設(shè)計(jì)最后到詳細(xì)設(shè)計(jì),完成對(duì)整個(gè)系統(tǒng)的設(shè)計(jì)。

第五章根據(jù)第四章的設(shè)計(jì)結(jié)果利用Access 2000和Delphi 6.0進(jìn)行了具體的窗體和應(yīng)用程序設(shè)計(jì)。

總結(jié)部分介紹了設(shè)計(jì)體會(huì)和編程體會(huì),并指出了系統(tǒng)設(shè)計(jì)中的不足和改進(jìn)的方向

轉(zhuǎn)貼于 第二章

數(shù)據(jù)庫(kù)概論

§2.1

數(shù)據(jù)庫(kù)的發(fā)展

數(shù)據(jù)庫(kù)處理在信息系統(tǒng)的研究中一直是非常重要的主題,然而,近年來(lái),隨著World Wide Web(WWW)的猛增及Internet技術(shù)的迅速發(fā)展,使得數(shù)據(jù)庫(kù)技術(shù)之時(shí)成為最熱門技術(shù)之一。數(shù)據(jù)庫(kù)技術(shù)能使Internet應(yīng)用超越具有早期應(yīng)用特點(diǎn)的簡(jiǎn)單的。同時(shí),Internet技術(shù)提供了一種向用戶數(shù)據(jù)庫(kù)內(nèi)容的標(biāo)準(zhǔn)化的訪問(wèn)方法。這些技術(shù)沒(méi)有脫離經(jīng)典數(shù)據(jù)庫(kù)技術(shù)的要求。它們只是加重了數(shù)據(jù)庫(kù)技術(shù)的重要性。

數(shù)據(jù)庫(kù)的設(shè)計(jì)和開(kāi)發(fā)及包括藝術(shù)有包括工程。理解用戶的需求,然后,把它們轉(zhuǎn)變?yōu)橛行У臄?shù)據(jù)庫(kù)設(shè)計(jì)是一個(gè)藝術(shù)過(guò)程。把設(shè)計(jì)轉(zhuǎn)變?yōu)閷?shí)際的數(shù)據(jù)庫(kù),并且這些數(shù)據(jù)庫(kù)帶有功能完備、高效能的應(yīng)用,是一個(gè)工程過(guò)程。

數(shù)據(jù)庫(kù)的目的是幫助人們跟蹤事務(wù)。經(jīng)典的數(shù)據(jù)庫(kù)應(yīng)用涉及諸如訂單、顧客、工作、員工、學(xué)生、電話之類的項(xiàng),或其它數(shù)據(jù)量較大、需要密起關(guān)注的事務(wù)。最近,由于數(shù)據(jù)庫(kù)的普及,數(shù)據(jù)庫(kù)技術(shù)已經(jīng)被應(yīng)用到了新的領(lǐng)域,諸如用于Internet的數(shù)據(jù)庫(kù)或用于公司內(nèi)聯(lián)網(wǎng)的數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)也被越來(lái)越多地應(yīng)用于生成和維護(hù)多媒體應(yīng)用程序上。

計(jì)算機(jī)的數(shù)據(jù)處理應(yīng)用,首先要把大量的信息以數(shù)據(jù)形式存放在存儲(chǔ)器中。存儲(chǔ)器的容量、存儲(chǔ)速率直接影響到數(shù)據(jù)管理技術(shù)的發(fā)展。從1956年生產(chǎn)出第一臺(tái)計(jì)算機(jī)到現(xiàn)在,存儲(chǔ)器的發(fā)展,為數(shù)據(jù)庫(kù)技術(shù)提供了良好的物質(zhì)基礎(chǔ)。

使用計(jì)算機(jī)以后,數(shù)據(jù)處理的速度和規(guī)模,無(wú)論是相對(duì)于手工方式,還是機(jī)械方式,都有無(wú)可比擬的優(yōu)勢(shì)。通常在數(shù)據(jù)處理中,計(jì)算是比較簡(jiǎn)單的而數(shù)據(jù)的管理卻比較復(fù)雜。數(shù)據(jù)管理是指數(shù)據(jù)的收集、整理、組織、存儲(chǔ)、維護(hù)、檢索、傳送等操作,這部分操作是數(shù)據(jù)處理業(yè)務(wù)的基本環(huán)節(jié),而且是任何數(shù)據(jù)處理業(yè)務(wù)中必不可少的共有部分。數(shù)據(jù)管理技術(shù)的優(yōu)劣,將直接影響數(shù)據(jù)處理的效率。

2.1.1 數(shù)據(jù)庫(kù)的發(fā)展

數(shù)據(jù)管理技術(shù)的發(fā)展,與硬件(主要是外存)、軟件、計(jì)算機(jī)應(yīng)用的范圍有密切的聯(lián)系。數(shù)據(jù)管理技術(shù)的發(fā)展經(jīng)過(guò)三個(gè)階段:人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫(kù)階段。

人工管理階段和文件系統(tǒng)階段都有著相當(dāng)多的缺陷,諸如數(shù)據(jù)冗余性 ,數(shù)據(jù)不一致性以及數(shù)據(jù)聯(lián)系弱等等。也正是由于這些原因,促使人們研究新的數(shù)據(jù)管理技術(shù),從而產(chǎn)生了數(shù)據(jù)庫(kù)技術(shù)。

20世紀(jì)60年代末發(fā)生的三件大事,層次模型IMS系統(tǒng)的推出、關(guān)于網(wǎng)狀模型DBTG報(bào)告的發(fā)表以及關(guān)于關(guān)系模型論文的連續(xù)發(fā)表標(biāo)志著數(shù)據(jù)管理技術(shù)進(jìn)入數(shù)據(jù)庫(kù)階段。進(jìn)入70年代以后,數(shù)據(jù)庫(kù)技術(shù)得到迅速發(fā)展,開(kāi)發(fā)了許多有效的產(chǎn)品并投入運(yùn)行。數(shù)據(jù)庫(kù)系統(tǒng)克服了文件系統(tǒng)的缺陷,提供了對(duì)數(shù)據(jù)更高級(jí)更有效的管理。

當(dāng)進(jìn)入數(shù)據(jù)庫(kù)階段后,隨著數(shù)據(jù)管理規(guī)模一再擴(kuò)大,數(shù)據(jù)量急劇增加,為了提高效率,開(kāi)始時(shí),人們只是對(duì)文件系統(tǒng)加以擴(kuò)充,在應(yīng)用文件中建立了許多輔助索引,形成倒排文件系統(tǒng)。但這并不能最終解決問(wèn)題。在20世紀(jì)60年代末,磁盤技術(shù)取得重要進(jìn)展,具有數(shù)百兆容量和快速存取的磁盤陸續(xù)進(jìn)入市場(chǎng),成本也不高,為數(shù)據(jù)庫(kù)技術(shù)的產(chǎn)生提供了良好的物質(zhì)條件。

2.1.2 數(shù)據(jù)庫(kù)階段的特點(diǎn)

(1)減少數(shù)據(jù)的重復(fù)(Redundancy can be reduced)

當(dāng)在一個(gè)非數(shù)據(jù)庫(kù)系統(tǒng)當(dāng)中,每一個(gè)應(yīng)用程序都有屬于他們自己的文件,由于無(wú)法有系統(tǒng)建立的數(shù)據(jù),因此常常會(huì)造成存儲(chǔ)數(shù)據(jù)的重復(fù)與浪費(fèi)。例如:在一家公司當(dāng)中,人事管理程序與工資管理程序或許都會(huì)使用到職員與部門的信息或文件,而我們可以運(yùn)用數(shù)據(jù)庫(kù)的方法,把這兩個(gè)文件整理起來(lái),以減少多余的數(shù)據(jù),過(guò)度地占用存儲(chǔ)空間。

(2)避免數(shù)據(jù)的不一致(Inconsistency can avoid)

本項(xiàng)的特色,可以說(shuō)是延伸前項(xiàng)的一個(gè)特點(diǎn),要說(shuō)明這樣的一個(gè)現(xiàn)象,我們可以從下面這個(gè)實(shí)例來(lái)看:若是在同一家公司當(dāng)中,職員甲在策劃部門工作,且職員甲的記錄同時(shí)被存放在數(shù)據(jù)庫(kù)的兩個(gè)地方,而數(shù)據(jù)庫(kù)管理系統(tǒng)卻沒(méi)有對(duì)這樣重要的情況加以控制,當(dāng)其中一條數(shù)據(jù)庫(kù)被修改時(shí),便會(huì)造成數(shù)據(jù)的不一致,但是,對(duì)于一個(gè)健全的數(shù)據(jù)庫(kù)管理系統(tǒng)而言,將會(huì)對(duì)這樣的情況加以控制,但有時(shí)并不需要刻意消除這種情形,應(yīng)當(dāng)視該數(shù)據(jù)庫(kù)的需求與效率來(lái)決定。

(3)數(shù)據(jù)共享(Data shared)

對(duì)于數(shù)據(jù)共享的意義,并不是只有針對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)的應(yīng)用程序,可以使用數(shù)據(jù)庫(kù)中的數(shù)據(jù),對(duì)于其他撰寫好的應(yīng)用程序,同樣可以對(duì)相同數(shù)據(jù)庫(kù)當(dāng)中的數(shù)據(jù)進(jìn)行處理,進(jìn)而達(dá)到數(shù)據(jù)共享的目的。

(4)強(qiáng)化數(shù)據(jù)的標(biāo)準(zhǔn)化(Standard can be enforced)

由數(shù)據(jù)庫(kù)管理系統(tǒng),對(duì)數(shù)據(jù)做出統(tǒng)籌性的管理,對(duì)于數(shù)據(jù)的格式與一些存儲(chǔ)上的標(biāo)準(zhǔn)進(jìn)行控制,如此一來(lái),對(duì)于不同的環(huán)境的數(shù)據(jù)交換(Data Interchange)上將有很大的幫助,也能提高數(shù)據(jù)處理的效率。

(5)實(shí)踐安全性的管理(Security restriction can be applied)

通過(guò)對(duì)數(shù)據(jù)庫(kù)完整的權(quán)限控制,數(shù)據(jù)庫(kù)管理者可以確認(rèn)所有可供用戶存取數(shù)據(jù)的合法途徑渠道,并且可以事先對(duì)一些較重要或關(guān)鍵性的數(shù)據(jù)進(jìn)行安全檢查,以確保數(shù)據(jù)存取時(shí),能夠?qū)⑷魏尾划?dāng)損毀的情形降至最低。

(6)完整性的維護(hù)(Integrity can be maintained)

所謂完整性的問(wèn)題,就是要確認(rèn)某條數(shù)據(jù)在數(shù)據(jù)庫(kù)當(dāng)中,是正確無(wú)誤的。正如(2)所述,若是無(wú)法控制數(shù)據(jù)的不一致性,便會(huì)產(chǎn)生完整性不足的問(wèn)題,所以,我們會(huì)發(fā)現(xiàn),當(dāng)數(shù)據(jù)重復(fù)性高的時(shí)候,數(shù)據(jù)不完整的情形也會(huì)增加,當(dāng)然,若是數(shù)據(jù)庫(kù)的功能完整,將會(huì)大大地提高數(shù)據(jù)完整性,也會(huì)增加數(shù)據(jù)庫(kù)的維護(hù)能力與維護(hù)簡(jiǎn)便性。

(7)需求沖突會(huì)獲得平衡(Conflicting requirements can be balance)

在一個(gè)較大型的企業(yè)當(dāng)中,用戶不同的需求,往往會(huì)造成系統(tǒng)或數(shù)據(jù)庫(kù)在設(shè)計(jì)上的困擾,但是一個(gè)合適的數(shù)據(jù)庫(kù)系統(tǒng),可以通過(guò)數(shù)據(jù)庫(kù)管理員的管理,將會(huì)有效地整理各方面的信息,對(duì)于一些較重要的應(yīng)用程序,可以適時(shí)地提供較快速的數(shù)據(jù)存取方法與格式,以平衡多個(gè)用戶在需求上的沖突。

上述七個(gè)方面構(gòu)成了數(shù)據(jù)庫(kù)系統(tǒng)的主要特征。這個(gè)階段的程序和數(shù)據(jù)間的聯(lián)系可用下圖表示: 2.1.3 數(shù)據(jù)庫(kù)技術(shù)

從文件系統(tǒng)發(fā)展到數(shù)據(jù)庫(kù)系統(tǒng)是信息處理領(lǐng)域的一個(gè)重大變化。在文件系統(tǒng)階段,人們關(guān)注的中心問(wèn)題是系統(tǒng)功能的設(shè)計(jì),因而程序設(shè)計(jì)處于主導(dǎo)地位,數(shù)據(jù)只起著服從程序需要的作用。在數(shù)據(jù)庫(kù)方式下,信息處理觀念已為新體系所取代,數(shù)據(jù)占據(jù)了中心位置。數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)成為信息系統(tǒng)首先關(guān)心的問(wèn)題,而利用這些數(shù)據(jù)的應(yīng)用程序設(shè)計(jì)則退居到以既定的數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)的外圍地位。

目前世界上已有數(shù)百萬(wàn)個(gè)數(shù)據(jù)庫(kù)系統(tǒng)在運(yùn)行,其應(yīng)用已經(jīng)深入到人類社會(huì)生活的各個(gè)領(lǐng)域,從企業(yè)管理、銀行業(yè)務(wù)、資源分配、經(jīng)濟(jì)預(yù)測(cè)一直到信息檢索、檔案管理、普查統(tǒng)計(jì)等。并在通信網(wǎng)絡(luò)基礎(chǔ)上,建立了許多國(guó)際性的聯(lián)機(jī)檢索系統(tǒng)。我國(guó)20世紀(jì)90年代初在全國(guó)范圍內(nèi)裝備了12個(gè)以數(shù)據(jù)庫(kù)技術(shù)為基礎(chǔ)的大型計(jì)算機(jī)系統(tǒng),這些系分布在郵電、計(jì)委、銀行、電力、鐵路、氣象、民航、情報(bào)、公安、軍事、航天和財(cái)稅等行業(yè)。

數(shù)據(jù)庫(kù)技術(shù)還在不斷的發(fā)展,并且不斷地與其它計(jì)算機(jī)技術(shù)相互滲透。數(shù)據(jù)庫(kù)技術(shù)與網(wǎng)絡(luò)通信技術(shù)相結(jié)合,產(chǎn)生了分布式數(shù)據(jù)庫(kù)系統(tǒng)。數(shù)據(jù)庫(kù)技術(shù)與面向?qū)ο蠹夹g(shù)相結(jié)合,產(chǎn)生了面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)。

在數(shù)據(jù)庫(kù)技術(shù)中有四個(gè)名詞,其概念應(yīng)該分清。

(1)數(shù)據(jù)庫(kù)(database,DB):DB是統(tǒng)一管理的相關(guān)數(shù)據(jù)的集合。DB能為各種用戶共享,具有最小冗余度,數(shù)據(jù)間聯(lián)系密切,而又有較高的數(shù)據(jù)獨(dú)立性。

(2)數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System,DBMS):DBMS是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,為用戶或應(yīng)用程序提供訪問(wèn)DB的方法,包括DB的建立、查詢、更新及各種數(shù)據(jù)控制。DBMS總是基于某種數(shù)據(jù)模型,可以分為層次型、網(wǎng)狀型、關(guān)系型和面向?qū)ο笮虳BMS。

(3)數(shù)據(jù)庫(kù)系統(tǒng)(Database System,DBS):DBS是實(shí)現(xiàn)有組織地、動(dòng)態(tài)地存儲(chǔ)大量關(guān)聯(lián)數(shù)據(jù),方便多用戶訪問(wèn)的計(jì)算機(jī)軟件、硬件和數(shù)據(jù)資源組成的系統(tǒng),即采用了數(shù)據(jù)庫(kù)技術(shù)的計(jì)算機(jī)系統(tǒng)。

(4)數(shù)據(jù)庫(kù)技術(shù):這是一門研究數(shù)據(jù)庫(kù)的結(jié)構(gòu)、存儲(chǔ)、管理和使用的軟件學(xué)科。數(shù)據(jù)庫(kù)技術(shù)是操作系統(tǒng)的文件系統(tǒng)基礎(chǔ)上發(fā)展起來(lái)的。而DBMS本身要在操作系統(tǒng)的支持下才能工作。數(shù)據(jù)庫(kù)不僅用到數(shù)據(jù)結(jié)構(gòu)的知識(shí),而且豐富了數(shù)據(jù)結(jié)構(gòu)的內(nèi)容。在關(guān)系數(shù)據(jù)庫(kù)中要用到集合論、數(shù)理邏輯的理論。因此,數(shù)據(jù)庫(kù)技術(shù)是一門綜合性較強(qiáng)的學(xué)科。

§2.2數(shù)據(jù)庫(kù)理論基礎(chǔ)

2.2.1 數(shù)據(jù)庫(kù)模型

從20世紀(jì)50年代中期開(kāi)始,計(jì)算機(jī)的應(yīng)用由科學(xué)研究部門逐步擴(kuò)展到企業(yè)、行政部門。至60年代,數(shù)據(jù)處理成為計(jì)算機(jī)的主要應(yīng)用。數(shù)據(jù)庫(kù)技術(shù)作為數(shù)據(jù)管理技術(shù),是計(jì)算機(jī)軟件領(lǐng)域的一個(gè)重要分支,產(chǎn)生于60年代末?,F(xiàn)已形成相當(dāng)規(guī)模的理論體系和實(shí)用技術(shù)。

模型是對(duì)現(xiàn)實(shí)世界的抽象。在數(shù)據(jù)庫(kù)技術(shù)中,我們用模型的概念描述數(shù)據(jù)庫(kù)的結(jié)構(gòu)與語(yǔ)義,對(duì)現(xiàn)實(shí)世界進(jìn)行抽象,表示實(shí)體類型及實(shí)體間聯(lián)系的模型稱為“數(shù)據(jù)模型” 。

目前廣泛作用的數(shù)據(jù)模型可分為兩種類型。

一種是獨(dú)立于計(jì)算機(jī)系統(tǒng)的模型,完全不涉及信息在系統(tǒng)中的表示,只是用來(lái)描述某個(gè)特定組織所關(guān)心的信息結(jié)構(gòu),這類模型稱為“概念數(shù)據(jù)模型” 。要領(lǐng)模型用于建立信息世界的數(shù)據(jù)模型,強(qiáng)調(diào)其語(yǔ)義表達(dá)功能,應(yīng)該概念簡(jiǎn)單、清晰,易于用戶理解,它是現(xiàn)實(shí)世界的第一層抽象,是用戶和數(shù)據(jù)庫(kù)設(shè)計(jì)人員之間進(jìn)行交流的工具。這一其中著名的模型是“實(shí)體聯(lián)系模型” 。

另一種數(shù)據(jù)模型是直接面向數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu),它是現(xiàn)實(shí)世界的第二層抽象。 這類模型涉及到計(jì)算機(jī)系統(tǒng)和數(shù)據(jù)庫(kù)管理系統(tǒng),又稱為“結(jié)構(gòu)數(shù)據(jù)模型” 。例如,層次、網(wǎng)狀、關(guān)系、面向?qū)ο蟮饶P汀_@類模型有嚴(yán)格的形式化定義,以便于在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)。

(1)層次模型。用樹(shù)型結(jié)構(gòu)表示實(shí)體類型及實(shí)體間聯(lián)系的數(shù)據(jù)模型。樹(shù)的結(jié)點(diǎn)是記錄類型,每個(gè)非根結(jié)點(diǎn)有且只有一個(gè)父結(jié)點(diǎn)。上一層記錄類型和下一層記錄類型間聯(lián)系是1∶N聯(lián)系。

層次模型的特點(diǎn)是記錄之間的聯(lián)系通過(guò)指針實(shí)現(xiàn),查詢效率較高。但層次模型有兩個(gè)缺點(diǎn):一是只能表示1∶N聯(lián)系,雖然有多種輔助手段實(shí)現(xiàn)了M∶N聯(lián)系,但都較復(fù)雜,用戶不易掌握,二是由于樹(shù)型結(jié)構(gòu)層次順序的嚴(yán)格和復(fù)雜,引起數(shù)據(jù)的查詢和更新操作也很復(fù)雜,因此,編寫應(yīng)用程序也很復(fù)雜。

(2)網(wǎng)狀模型。用有向圖結(jié)構(gòu)表示實(shí)體類型及實(shí)體間聯(lián)系的數(shù)據(jù)模型。。1969年DBTG報(bào)告提出的數(shù)據(jù)模型是網(wǎng)狀模型的主要代表。有向圖中的結(jié)點(diǎn)是記錄類型,有向邊表示從箭尾一端的記錄類型到箭頭一端的記錄類型間聯(lián)系是1∶N聯(lián)系。

網(wǎng)狀模型的特點(diǎn):記錄之間聯(lián)系通過(guò)指針實(shí)現(xiàn),M∶N聯(lián)系也容易實(shí)現(xiàn)(每個(gè)M∶N聯(lián)系可拆成兩個(gè)1∶N聯(lián)系),查詢效率較高。網(wǎng)狀模型的缺點(diǎn)是編寫應(yīng)用程序比較復(fù)雜,程序員必須熟悉數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)。由于層次系統(tǒng)和網(wǎng)狀系統(tǒng)的應(yīng)用程序編制比較復(fù)雜,因此,從20世紀(jì)80年代中期起,其市場(chǎng)已被關(guān)系系統(tǒng)所取代。但是使用這兩種模型建立起的許多數(shù)據(jù)庫(kù)仍然在正常運(yùn)轉(zhuǎn),只是在外層加了個(gè)關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的接口。網(wǎng)狀模型有許多成功的產(chǎn)品,20世紀(jì)70年代的產(chǎn)品大部分網(wǎng)狀系統(tǒng),例如,Honeywell公司的IDS/Ⅱ、HP公司的IMAGE/3000、Burroughs公司的DMSⅡ、Umivac公司的DMS1100、Cullinet公司的IDMS、Cimcom公司的TOTAL等

(3)關(guān)系模型。關(guān)系模型的主要是用二維表格結(jié)構(gòu)表達(dá)實(shí)體集,用外鍵表示實(shí)體間聯(lián)系。關(guān)系模型是由若干個(gè)關(guān)系模式組成的集合。關(guān)系模式相當(dāng)于前面提到的記錄類型,它的實(shí)例稱為關(guān)系,每個(gè)關(guān)系實(shí)際上是一張二維表格。

關(guān)系模型和層次、網(wǎng)狀模型的最大判別是用關(guān)鍵碼而不是用指針導(dǎo)航數(shù)據(jù),表格簡(jiǎn)單用戶易懂,編程時(shí)并不涉及存儲(chǔ)結(jié)構(gòu),訪問(wèn)技術(shù)等細(xì)節(jié)。關(guān)系模型是數(shù)學(xué)化模型。SQL語(yǔ)言是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)化語(yǔ)言,已得到了廣泛的應(yīng)用。20世紀(jì)70年代對(duì)關(guān)系數(shù)據(jù)庫(kù)的研究主要集中在理論和實(shí)驗(yàn)系統(tǒng)的開(kāi)發(fā)方面。80年代初才形成產(chǎn)品,但很快得到廣泛的應(yīng)用和普及,并最終取代了層次、網(wǎng)狀數(shù)據(jù)庫(kù)產(chǎn)品。現(xiàn)在市場(chǎng)上典型的關(guān)系DBMS產(chǎn)品有DB2、ORACLE、SYBASE、INFORMIX和微機(jī)型產(chǎn)品Foxpro、Access等。

關(guān)系模型和網(wǎng)狀、層次模型的最大區(qū)別是:關(guān)系模型用表格數(shù)據(jù)而不是通過(guò)指針鏈來(lái)表示和實(shí)現(xiàn)實(shí)體間聯(lián)系。關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單、易懂。只需用簡(jiǎn)單的查詢語(yǔ)句就可對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。

關(guān)系模型是數(shù)學(xué)化的模型,可把表格看成一個(gè)集合,因此集合論、數(shù)理邏輯等知識(shí)可引入到關(guān)系模型中來(lái)。關(guān)系模型已是一個(gè)成熟的有前途的模型,已得到廣泛應(yīng)用。

(4)面向?qū)ο竽P汀D壳?,關(guān)系數(shù)據(jù)庫(kù)的使用已相當(dāng)普遍,但是,現(xiàn)實(shí)世界中仍然存在著許多含有復(fù)雜數(shù)據(jù)結(jié)構(gòu)的應(yīng)用領(lǐng)域,例如,CAD數(shù)據(jù)、圖形數(shù)據(jù)等,而關(guān)系模型在這方面的處理能力就顯得力不從心。因此,人們需要更高級(jí)的數(shù)據(jù)庫(kù)技術(shù)來(lái)表達(dá)這類信息。面向?qū)ο蟮母拍钭钤绯霈F(xiàn)在程序設(shè)計(jì)語(yǔ)言中,隨后迅速滲透到計(jì)算機(jī)領(lǐng)域的每一個(gè)分支。面向?qū)ο髷?shù)據(jù)庫(kù)是面向?qū)ο蟾拍钆c數(shù)據(jù)庫(kù)技術(shù)相結(jié)合的產(chǎn)物。

面向?qū)ο竽P湍芡暾孛枋霈F(xiàn)實(shí)世界的數(shù)據(jù)結(jié)構(gòu),具有豐富的表達(dá)能力,但模型相對(duì)較復(fù)雜,涉及的知識(shí)面也廣,因此面向?qū)ο髷?shù)據(jù)庫(kù)尚未達(dá)到關(guān)系數(shù)據(jù)庫(kù)那樣的普及程度。

2.2.2 數(shù)據(jù)庫(kù)體系結(jié)構(gòu)

數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)分三級(jí):內(nèi)部級(jí)(internal),概念級(jí)(conceptual)和外部級(jí)(external)。這個(gè)三級(jí)結(jié)構(gòu)有時(shí)也稱為“三級(jí)模式結(jié)構(gòu)”,或“數(shù)據(jù)抽象的三個(gè)級(jí)別”,最早是在1971年通過(guò)的DBTG報(bào)告中提出,后來(lái)收入在1975年的美國(guó)ANSI/SPARC報(bào)告中。雖然現(xiàn)在DBMS的產(chǎn)品多種多樣,在不同的操作系統(tǒng)支持下工作,但是大多數(shù)系統(tǒng)在總的體系結(jié)構(gòu)上都具有三級(jí)模式的結(jié)構(gòu)特征。從某個(gè)角度看到的數(shù)據(jù)特性稱為“數(shù)據(jù)視圖”(data view)。

外部級(jí)最接近用戶,是單個(gè)用戶所能看到的數(shù)據(jù)特性。單個(gè)用戶使用的數(shù)據(jù)視圖的描述稱為“外模式”。

概念級(jí)涉及到所有用戶的數(shù)據(jù)定義,是全局的數(shù)據(jù)視圖。全局?jǐn)?shù)據(jù)視圖的描述稱為“概念模式”。

內(nèi)部級(jí)最接近于物理存儲(chǔ)設(shè)備,涉及到實(shí)際數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)。物理存儲(chǔ)數(shù)據(jù)視圖的描述稱為“內(nèi)模式”。

數(shù)據(jù)庫(kù)的三級(jí)模式結(jié)構(gòu)是數(shù)據(jù)的三個(gè)抽象級(jí)別。它把數(shù)據(jù)的具體組織留給DBMS去做,用戶只要抽象地處理數(shù)據(jù),而不必關(guān)心數(shù)據(jù)在計(jì)算機(jī)中的表示和存儲(chǔ),這樣就減輕了用戶使用系統(tǒng)的負(fù)擔(dān)。

三級(jí)結(jié)構(gòu)之間往往差別很大,為了實(shí)現(xiàn)這三個(gè)抽象級(jí)別的聯(lián)系和轉(zhuǎn)換,DBMS在三級(jí)結(jié)構(gòu)之間提供兩個(gè)層次的映象(mappings):外模式/模式映象,模式/內(nèi)模式映象。此處模式是概念模式的簡(jiǎn)稱。

2.2.3 數(shù)據(jù)的獨(dú)立性

由于數(shù)據(jù)庫(kù)系統(tǒng)采用三級(jí)模式結(jié)構(gòu),因此系統(tǒng)具有數(shù)據(jù)獨(dú)立性的特點(diǎn)。在數(shù)據(jù)庫(kù)技術(shù)中,數(shù)據(jù)獨(dú)立性是指應(yīng)用程序和數(shù)據(jù)之間相互獨(dú)立,不受影響。數(shù)據(jù)獨(dú)立性分成物理數(shù)據(jù)獨(dú)立性和邏輯數(shù)據(jù)獨(dú)立性兩級(jí)。

(1)物理數(shù)據(jù)獨(dú)立性

如果數(shù)據(jù)庫(kù)的內(nèi)模式要進(jìn)行修改,即數(shù)據(jù)庫(kù)的存儲(chǔ)設(shè)備和存儲(chǔ)方法有所變化,那么模式/內(nèi)模式映象也要進(jìn)行相當(dāng)?shù)男薷模垢拍钅J奖M可能保持不變。也就是對(duì)內(nèi)模式的修改盡量不影響概念模式,當(dāng)然,對(duì)于外模式和應(yīng)用程序的影響更小,這樣,我們稱數(shù)據(jù)庫(kù)達(dá)到了物理數(shù)據(jù)獨(dú)立性。

(2)邏輯數(shù)據(jù)獨(dú)立性

如果數(shù)據(jù)庫(kù)的概念模式要進(jìn)行修改,譬如增加記錄類型或增加數(shù)據(jù)項(xiàng),那么外模式/模式映象也要進(jìn)行相應(yīng)的修改,使外模式盡可能保持不變。也就是對(duì)概念模式的修改盡量不影響外模式和應(yīng)用程序,這樣,我們稱數(shù)據(jù)庫(kù)達(dá)到了邏輯數(shù)據(jù)獨(dú)立性。

現(xiàn)有關(guān)系系統(tǒng)產(chǎn)品均提供了較高的物理獨(dú)立性,而對(duì)邏輯獨(dú)立性的支持尚有欠缺,例如,對(duì)外模式的數(shù)據(jù)更新受到限制等。

2.2.4 范式

建立起一個(gè)良好的數(shù)據(jù)指標(biāo)體系,是建立數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫(kù)的最重要的一環(huán)。一個(gè)良好的數(shù)據(jù)指標(biāo)體系是建立DB的必要條件,但不是充分條件。我們完全可以認(rèn)為所建指標(biāo)體系中的一個(gè)指標(biāo)類就是關(guān)系數(shù)據(jù)庫(kù)中的一個(gè)基本表,而這個(gè)指標(biāo)類下面的一個(gè)個(gè)具體指標(biāo)就是這個(gè)基本表中的一個(gè)字段。但如果直接按照這種方式建庫(kù)顯然還不能算最佳。對(duì)于指標(biāo)體系中數(shù)據(jù)的結(jié)構(gòu)在建庫(kù)前還必須進(jìn)行規(guī)范化的重新組織。

在數(shù)據(jù)的規(guī)范化表達(dá)中,一般將一組相互關(guān)聯(lián)的數(shù)據(jù)稱為一個(gè)關(guān)系(relation),而在這個(gè)關(guān)系下的每個(gè)數(shù)據(jù)指標(biāo)項(xiàng)則被稱為數(shù)據(jù)元素(data element),這種關(guān)系落實(shí)到具體數(shù)據(jù)庫(kù)上就是基本表,而數(shù)據(jù)元素就是基本表中的一個(gè)字段(field)。規(guī)范化表達(dá)還規(guī)定在每一個(gè)基本表中必須定義一個(gè)數(shù)據(jù)元素為關(guān)鍵字(key),它可以唯一地標(biāo)識(shí)出該表中其它相關(guān)的數(shù)據(jù)元素。在規(guī)范化理論中表是二維的,它有如下四個(gè)性質(zhì):

在表中的任意一列上,數(shù)據(jù)項(xiàng)應(yīng)屬于同一個(gè)屬性(如圖中每一列都存放著不同合同記錄的同一屬性數(shù)據(jù))。

表中所有行都是不相同的,不允許有重復(fù)組項(xiàng)出現(xiàn)(如圖中每一行都是一個(gè)不同的合同記錄)。

在表中,行的順序無(wú)關(guān)緊要(如圖中每行存的都是合同記錄,至于先放哪一個(gè)合同都沒(méi)關(guān)系)。

在表中,列的順序無(wú)關(guān)緊要,但不能重復(fù)(如圖中合同號(hào)和合同名誰(shuí)先誰(shuí)后都沒(méi)關(guān)系,但二者不可重復(fù)或同名)。

在對(duì)表的形式進(jìn)行了規(guī)范化定義后,數(shù)據(jù)結(jié)構(gòu)還有五種規(guī)范化定義,定名為規(guī)范化模式,稱為范式。在這五種范式中,一般只用前三種,對(duì)于常用系統(tǒng)就足夠了。而且這五種范式是“向上兼容”的,即滿足第五范式的數(shù)據(jù)結(jié)構(gòu)自動(dòng)滿足一、二、三、四范式,滿足第四范式的數(shù)據(jù)結(jié)構(gòu)自動(dòng)滿足第一、二、三范式,……,依此類推。

第一范式(first normal form,簡(jiǎn)稱1st NF)就是指在同一表中沒(méi)有重復(fù)項(xiàng)出現(xiàn),如果有則應(yīng)將重復(fù)項(xiàng)去掉。這個(gè)去掉重復(fù)項(xiàng)的過(guò)程就稱之為規(guī)范化處理。在本文所討論的開(kāi)發(fā)方法里,1st NF實(shí)際上是沒(méi)有什么意義的。因?yàn)槲覀儼匆?guī)范化建立的指標(biāo)體系和表的過(guò)程都自動(dòng)保證了所有表都滿足1st NF。

第二范式(second normal form,簡(jiǎn)稱 2nd NF)是指每個(gè)表必須有一個(gè)(而且僅一個(gè))數(shù)據(jù)元素為主關(guān)鍵字(primary key),其它數(shù)據(jù)元素與主關(guān)鍵字一一對(duì)應(yīng)。例如,在圖l9.7中如果我們將合同號(hào)定義為主關(guān)鍵字(其它數(shù)據(jù)元素中的記錄數(shù)據(jù)都有可能重名,故不能作為主關(guān)鍵字),故只要知道了一個(gè)合同記錄的合同號(hào),就可以唯一地在同一行中找到該合同的任何一項(xiàng)具體信息。通常我們稱這種關(guān)系為函數(shù)依賴(functional depEndence)關(guān)系。即表中其它數(shù)據(jù)元素都依賴于主關(guān)鍵字,或稱該數(shù)據(jù)元素唯一地被主關(guān)鍵字所標(biāo)識(shí)。

第三范式(third normal form,簡(jiǎn)稱 3rd NF)就是指表中的所有數(shù)據(jù)元素不但要能夠唯一地被主關(guān)鍵字所標(biāo)識(shí),而且它們之間還必須相互獨(dú)立,不存在其它的函數(shù)關(guān)系。也就是說(shuō)對(duì)于一個(gè)滿足了 2nd NF的數(shù)據(jù)結(jié)構(gòu)來(lái)說(shuō),表中有可能存在某些數(shù)據(jù)元素依賴于其它非關(guān)鍵宇數(shù)據(jù)元素的現(xiàn)象,必須加以消除。

為防止數(shù)據(jù)庫(kù)出現(xiàn)更新異常、插入異常、刪除異常、數(shù)據(jù)冗余太大等現(xiàn)象,關(guān)系型數(shù)據(jù)庫(kù)要盡量按關(guān)系規(guī)范化要求進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)。

§2.3 SQL語(yǔ)言基礎(chǔ)

2.3.1 SQL簡(jiǎn)介

用戶對(duì)數(shù)據(jù)庫(kù)的使用,是通過(guò)數(shù)據(jù)庫(kù)管理系統(tǒng)提供的語(yǔ)言來(lái)實(shí)現(xiàn)的。不同的數(shù)據(jù)庫(kù)管理系統(tǒng)提供不同的數(shù)據(jù)庫(kù)語(yǔ)言。關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)幾乎都提供關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言——SQL。

SQL 的全稱是Structured Query Language,即結(jié)構(gòu)化查詢語(yǔ)言。SQL語(yǔ)句可以從關(guān)系數(shù)據(jù)庫(kù)中獲得數(shù)據(jù),也可以建立數(shù)據(jù)庫(kù)、增加數(shù)據(jù)、修改數(shù)據(jù)。1986年ANSI采用SQL語(yǔ)言作為關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言,后被國(guó)際化標(biāo)準(zhǔn)組織(ISO)采納為國(guó)際標(biāo)準(zhǔn)。SQL語(yǔ)言使用方便、功能豐富、簡(jiǎn)潔易學(xué),是操作數(shù)據(jù)庫(kù)的工業(yè)標(biāo)準(zhǔn)語(yǔ)言,得到廣泛地應(yīng)用。例如關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品DB2、ORACLE等都實(shí)現(xiàn)了SQL語(yǔ)言。同時(shí),其它數(shù)據(jù)庫(kù)產(chǎn)品廠家也紛紛推出各自的支持SQL的軟件或者與SQL的接口軟件。這樣SQL語(yǔ)言很快被整個(gè)計(jì)算機(jī)界認(rèn)可。

SQL語(yǔ)言是一種非過(guò)程化語(yǔ)言,它一次處理一個(gè)記錄集合,對(duì)數(shù)據(jù)提供自動(dòng)導(dǎo)航。SQL語(yǔ)言允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對(duì)單個(gè)記錄進(jìn)行操作。SQL語(yǔ)言不要求用戶指定數(shù)據(jù)的存取方法,而是使用查詢優(yōu)化器,由系統(tǒng)決定對(duì)指定數(shù)據(jù)存取的最快速手段。當(dāng)設(shè)計(jì)者在關(guān)系表上定義了索引時(shí),系統(tǒng)會(huì)自動(dòng)利用索引進(jìn)行快速檢索,用戶不需知道表上是否有索引或者有什么類型的索引等細(xì)節(jié)。

SQL語(yǔ)言可以完成許多功能,例如:

查詢數(shù)據(jù)

在數(shù)據(jù)庫(kù)表格中插入、修改和刪除記錄

建立、修改和刪除數(shù)據(jù)對(duì)象

控制對(duì)數(shù)據(jù)和數(shù)據(jù)對(duì)象的存取

確保數(shù)據(jù)庫(kù)的一致性和完整性等

2.3.2 SQL查詢

數(shù)據(jù)查詢是關(guān)系運(yùn)算理論在SQL語(yǔ)言中的主要體現(xiàn),SELECT 語(yǔ)句是SQL查詢的基本語(yǔ)句,當(dāng)我們?cè)趯?duì)一個(gè)數(shù)據(jù)庫(kù)進(jìn)各種各樣的操作時(shí),使用的最多的就是數(shù)據(jù)查詢,在以SQL為基礎(chǔ)的關(guān)系數(shù)據(jù)庫(kù)中,使用的最多的就是SELECT查詢語(yǔ)句。

SELECT語(yǔ)句的完整句法如下:

SELECT 目標(biāo)表的列名或列表達(dá)式序列

FROM 基本表和(或)視圖序列

[WHERE 行條件表達(dá)式]

[GROUP BY 列名序列]

[HAVING 組條件表達(dá)式]

[ORDER BY列名 [ASC│DEAC]…]

我在SELECT語(yǔ)句中還使用了大量的保留字和通配符以進(jìn)行各種各樣的條件查詢。在系統(tǒng)中有大量的查詢按鈕,其使用了大量的查詢語(yǔ)句,而且這些查詢語(yǔ)句大部分使用的是模糊查詢,所以大量的使用了模式匹配符LIKE(判斷值是否與指定的字符通配格式相符)。在包含LIKE的查詢語(yǔ)句中可以使用兩個(gè)通配符:%(百分號(hào)):與零個(gè)或多個(gè)字符組成的字符串匹配;_(下劃線):與單個(gè)字符匹配。系統(tǒng)中的條件判斷往往包含多個(gè)條件,這時(shí)就需要使用邏輯運(yùn)算符NOT、AND、OR(用于多條件的邏輯連接),謂詞ALL以及保留字DISTINCT等等。做為SELECT語(yǔ)句還有很多的使用方法,這里就不再敘述。

2.3.3 SQL數(shù)據(jù)更新

使用數(shù)據(jù)庫(kù)的目的是為了有效地管理數(shù)據(jù),而數(shù)據(jù)的插入、刪除和修改則是必不可少的一個(gè)功能。在本系統(tǒng)中就大量地使用了數(shù)據(jù)插入、刪除和修改這三種操作,現(xiàn)做一個(gè)簡(jiǎn)單地介紹。

數(shù)據(jù)插入

往數(shù)據(jù)庫(kù)的基本表中插入數(shù)據(jù)使用的是INSERT語(yǔ)句,其方式有兩種:一種是元組值的插入,另一種是查詢結(jié)果的插入。在本系統(tǒng)中使用的是前一種方式,其句法如下:

INSERT INTO 基本表名(列表名)VALUES(元組值)

數(shù)據(jù)刪除

往數(shù)據(jù)庫(kù)的基本表中刪除數(shù)據(jù)使用的是DELETE語(yǔ)句,其句法如下:

DELETE FROM 基本表名 [WHERE 條件表達(dá)式]

在些作一點(diǎn)說(shuō)明,刪除語(yǔ)句實(shí)際上是“SELECT * FROM 基本表名 [WHERE 條件表達(dá)式]”和DELETE操作的結(jié)合,每找到一個(gè)元組,就把它刪除。此外,DELETE語(yǔ)句只能從一個(gè)基本表中刪除元組,WHERE子句中條件可以嵌套,也可以是來(lái)自幾個(gè)基本表的復(fù)合條件。

數(shù)據(jù)修改

當(dāng)需要修改基本表中元組的某些列值時(shí),可以用UPDATE語(yǔ)句實(shí)現(xiàn),其句法如下:

UPDATE基本表名

SET列名=值表達(dá)式[,列名=值表達(dá)式…]

[WHERE條件表達(dá)式]

在Delphi中使用SQL語(yǔ)句是很方便的,一般來(lái)說(shuō),都是通過(guò)TQuery組件來(lái)使用SQL語(yǔ)言的。有一點(diǎn)要進(jìn)行說(shuō)明,雖然通過(guò)TQuery組件來(lái)使用SQL語(yǔ)言很方便,但考慮到自己對(duì)不同組件的理解程度、個(gè)人習(xí)慣以及其它各個(gè)方面,在本系統(tǒng)中我采用的是ADO組件來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。最簡(jiǎn)單的方法比如在TADOQuery組件的SQL屬性中就可以鍵入SQL語(yǔ)句,至于詳細(xì)的使用方法在后面進(jìn)行介紹。

轉(zhuǎn)貼于 第三章

數(shù)據(jù)庫(kù)開(kāi)發(fā)工具

§3.1 Delphi 6.0 簡(jiǎn)介

Delphi類可以粗略地分成兩部分:一部分是組件類,這些組件類通常以某種方式出現(xiàn)在組件面板上,當(dāng)用戶從組件面板上點(diǎn)取一個(gè)類的圖標(biāo)后,在程序中就自動(dòng)生成了該類的對(duì)象(非可視組件除外);另一部分是功能類,這此功能類的對(duì)象通常出現(xiàn)在程序代碼中,起著不可代替的作用,但是這些功能類在組件面板上是找不到的。在Delphi中,每一個(gè)類的祖先都是Tobject類,整個(gè)類的層次結(jié)構(gòu)就像一棵倒掛的樹(shù),在最頂層的樹(shù)根即為Tobject類。這樣,按照面向?qū)ο缶幊痰幕舅枷?,就使得用戶可用Tobject類這個(gè)類型代替任何其它類的數(shù)據(jù)類型。實(shí)際上在Delphi的類庫(kù)中,Tobject類派生出了為數(shù)相當(dāng)眾多的子類,它們形成了一個(gè)龐大的體系,通常情況下,如果不自行開(kāi)發(fā)組件,就不必了解整個(gè)類的體系結(jié)構(gòu),只用到類層次樹(shù)的葉結(jié)點(diǎn)就足夠了。

凡是做過(guò)程序開(kāi)發(fā)的人都知道從來(lái)沒(méi)有單純的數(shù)據(jù)應(yīng)用程序,也就是說(shuō),數(shù)據(jù)庫(kù)應(yīng)用程序必須和用戶界面(可以是圖形界面,也可以是命令接口)元素相結(jié)合,只講界面或只講數(shù)據(jù)庫(kù)本身都構(gòu)不成數(shù)據(jù)庫(kù)應(yīng)用程序,因而用Delphi 6.0開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序就隱含著界面開(kāi)發(fā)。Delphi6中的VCL組件可用圖3-1來(lái)說(shuō)明。組件在Delphi程序的開(kāi)發(fā)中是最顯眼的角色。大家知道,在編寫程序時(shí)一般都開(kāi)始于在組件面板上選擇組件并定義組件間的相互作用。但也有一些組件不在組件面板上,例如Tform和Tapplication(典型的非可視組件)。組件是Tcomponents派生出來(lái)的子類,可以流的形式存放在DFM文件中,具有事件和Publish屬性。

窗口組件類是窗口化的可視化組件類,在Delphi的類庫(kù)中占有最大的份額。在實(shí)際編程中,窗口組件類的對(duì)象都有句柄,可以接受輸入焦點(diǎn)和包含其它組件。

圖形組件與窗口組件并列,是另一大類組件。圖形組件不是基于窗口的,因而不能有窗口句柄,不能接受輸入焦點(diǎn)和包含其它組件。從圖8-43中可以看出,圖形組件的基類是TgraphicControl,在實(shí)際編程中,它們必須寄生于它們的宿主——窗口組件類的對(duì)象,由它們的擁有者負(fù)責(zé)其顯示,而且它們還能觸發(fā)一些和鼠標(biāo)活動(dòng)相關(guān)的事件。圖形控件最典型的例子是Tlabel和TspeedButton。由此可以看出圖形組件的功能很弱,有讀者會(huì)問(wèn)圖形組件的用處何在呢?其實(shí)使用圖形組件的最大好處在于節(jié)省資源,正是因?yàn)樗鼈兊墓δ茌^弱,所以使用的系統(tǒng)資源就要少。在一個(gè)應(yīng)用程序中,如果能在不影響其功能的前提下合理大量地使用圖形組件,將會(huì)大減少程序?qū)ο到y(tǒng)資源的消耗。

非可視組件是與可視組件相并列的另一類組件,非可視組件在程序運(yùn)行中是不可見(jiàn)的(除各種對(duì)話框組件之外,事實(shí)上有人認(rèn)為對(duì)話框組件不能歸入非可視組件,應(yīng)該是另一種介于可視與非可視之間的組件)。

§3.2 Delphi 6.0 控件

用Delphi6開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用,重點(diǎn)是和各種數(shù)據(jù)庫(kù)組件打交道,當(dāng)然也要使用其它的一些組件,現(xiàn)在就我在系統(tǒng)設(shè)計(jì)中所使用的重要組件給與簡(jiǎn)單介紹。

3.2.1 ADO數(shù)據(jù)訪問(wèn)組件

ADO數(shù)據(jù)對(duì)象(Active Data Objects)實(shí)際是一種提供訪問(wèn)各種數(shù)據(jù)類型的鏈接機(jī)制。ADO設(shè)計(jì)為一種極簡(jiǎn)單的格式,通過(guò)ODBC的方法同數(shù)據(jù)庫(kù)接口中,可以使用任何一種ODBC數(shù)據(jù)源,即不止適合于SQL Server、Oracle、Access等數(shù)據(jù)庫(kù)應(yīng)用程序,也適合于Excel表格、文本文件、圖形文件和無(wú)格式的數(shù)據(jù)文件。ADO是基于OLE-DB之上的技術(shù),因此ADO通過(guò)其內(nèi)部的屬性和方法提供統(tǒng)一的數(shù)據(jù)訪問(wèn)接口方法。ADO使您的客戶端應(yīng)用程序能夠通過(guò)OLE DB提供訪問(wèn)和操作在數(shù)據(jù)庫(kù)服務(wù)器中的數(shù)據(jù)。ADO支持用于建立C/S和Web的應(yīng)用程序的主要功能。其主要優(yōu)點(diǎn)是易于使用、高速度、低內(nèi)存支出和占用磁盤空間較少。ADO同時(shí)具有遠(yuǎn)程數(shù)據(jù)服務(wù)(RDS)功能,通過(guò)RDS可以在一次往返過(guò)程中實(shí)現(xiàn)將數(shù)據(jù)從服務(wù)器移動(dòng)到客戶端應(yīng)用程序和Web頁(yè)、在客戶端對(duì)數(shù)據(jù)進(jìn)行處然后將更新結(jié)果返回服務(wù)器的操作。

Delphi 6.0繼續(xù)對(duì)Microsoft的ADO訪問(wèn)能力的支持。這種能力是通過(guò)一組新組件實(shí)現(xiàn)的,這些組件是在企業(yè)版的ADO組件頁(yè)中,在組件面版的ADO頁(yè)上可以找到這些組件。利用在前面章節(jié)提到的TdataSet抽象類,ADO組件可以不通過(guò)BDE而直接實(shí)現(xiàn)ADO連接。這意味著只需要很少的代碼就可以實(shí)現(xiàn)該連接并且性能得到提高。

利用ADO數(shù)據(jù)訪問(wèn)組件,可以只使用ADO結(jié)構(gòu)與數(shù)據(jù)庫(kù)取得聯(lián)系并對(duì)其中的數(shù)據(jù)進(jìn)行操作,而在這些過(guò)程中完全不需要使用BDE。大多數(shù)的ADO連接和數(shù)據(jù)集組件都是與基于BDE的連接和數(shù)據(jù)集組件相類似的。TADOConnection組件與基于BDE的應(yīng)用程序中的Tdatabase組件類似。TADOTable與Ttable,TADOQuery與Tquery,以及TADOStoreProc和TstoredProc之間都具有這種類似的對(duì)應(yīng)關(guān)系。使用這些ADO組件的方式與我們常使用的數(shù)據(jù)訪問(wèn)組件(基于BDE)都有許多相同之處。TTADODataSet沒(méi)有直接的BDE對(duì)應(yīng)組件,但它提供了許多與Ttable和Tquery相同的功能。同樣,TADOCommand也沒(méi)有相對(duì)應(yīng)的BDE組件,它是在Delphi/ADO環(huán)境中完成特定功能的組件。Delphi 6.0通過(guò)ADO數(shù)據(jù)集訪問(wèn)組件,可以不借助BDE數(shù)據(jù)引擎而是通過(guò)微軟的OLEDB來(lái)訪問(wèn)更為廣泛的數(shù)據(jù)庫(kù)中的數(shù)據(jù)。ADO數(shù)據(jù)集訪問(wèn)組件與常用的數(shù)據(jù)訪問(wèn)組件是并列的關(guān)系。

在系統(tǒng)中我主要使用的是ADOTablet和ADOQuery兩個(gè)組件。

3.2.2 數(shù)據(jù)控制類DataControl

數(shù)據(jù)控制類負(fù)責(zé)數(shù)據(jù)庫(kù)數(shù)據(jù)的顯示,并把用戶對(duì)數(shù)據(jù)的修改傳回。這里的絕大多數(shù)組件,如DBText, DBEdit, DBMemo, DBImage, DBListBox, DBComboBox, DBCheckBox, DBRadioGroup, DBLookupListBox, DBLookupCombox, DBCtrGrid的功能和對(duì)應(yīng)的非數(shù)據(jù)感知組件相同,如TEdit框,TRadioGroups單選按鈕組等,只不過(guò)在顯示數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí)要用而已。

在系統(tǒng)中主要使用數(shù)據(jù)網(wǎng)格控件DBGrid和數(shù)據(jù)庫(kù)導(dǎo)航器控件DBNavigator。

3.2.3 數(shù)據(jù)訪問(wèn)類DataAccess

數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中數(shù)據(jù)訪問(wèn)是一個(gè)首要問(wèn)題,包括單用戶和 C/S系統(tǒng),都必須聯(lián)系一些數(shù)據(jù)庫(kù)和數(shù)據(jù)表文件。Delphi 6 提供了專門用于數(shù)據(jù)訪問(wèn)的基類控件。主要包括數(shù)據(jù)源控件DataSource、客戶數(shù)據(jù)集控件ClientDataSet、數(shù)據(jù)集提供器控件DataSetProvider等等。

Tdatabase:當(dāng)一個(gè)基于BDE的數(shù)據(jù)庫(kù)應(yīng)用程序需要一個(gè)永久數(shù)據(jù)庫(kù)連接時(shí),需要定制向一個(gè)數(shù)據(jù)庫(kù)服務(wù)器的連接時(shí),需要事務(wù)控制和特殊的數(shù)據(jù)庫(kù)別名時(shí)就得用到Tdatabase對(duì)象。特別是當(dāng)連接到一個(gè)遠(yuǎn)程的SQL數(shù)據(jù)庫(kù)服務(wù)器時(shí),如果要利用BDE進(jìn)行數(shù)據(jù)庫(kù)事務(wù)處理,那么,TDatabase對(duì)象的威力就體現(xiàn)出來(lái)了。在一個(gè)應(yīng)用程序中為每一個(gè)數(shù)據(jù)庫(kù)連接顯示的聲明Tdatabase對(duì)象要根據(jù)需要而定,不是必需的。對(duì)一個(gè)數(shù)據(jù)庫(kù)連接,如果沒(méi)有顯示的聲明并實(shí)例化TDatabase對(duì)象,系統(tǒng)就會(huì)產(chǎn)生一個(gè)帶有默認(rèn)屬性的TDatabase對(duì)象。

TdataSource對(duì)象用于在DataSet對(duì)象(包括Tquery,TstoredProc,Ttable等)和數(shù)據(jù)感知組件之間提供一個(gè)連接的紐帶,以便在窗體上顯示數(shù)據(jù)庫(kù)中的數(shù)據(jù),在數(shù)據(jù)庫(kù)中導(dǎo)航定位與編輯數(shù)據(jù)集中的數(shù)據(jù)。如果一個(gè)DataSet對(duì)象中的數(shù)據(jù)想在數(shù)據(jù)感知組件中顯示和修改,它就必須和TdataSource對(duì)象相聯(lián)系。同樣,一個(gè)數(shù)據(jù)感知組件如果想和數(shù)據(jù)源相聯(lián)系以便顯示和操縱數(shù)據(jù),就必須以TDataSource對(duì)象為中介。

用Delphi6作數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)概括來(lái)說(shuō)如下:先利用數(shù)據(jù)存取組件和實(shí)際的數(shù)據(jù)庫(kù)建立連接,并用Tsession對(duì)象和Tdatabase對(duì)象管理這些連接。然后以Tdatasource對(duì)象為中介,用數(shù)據(jù)感知組件向用戶顯示數(shù)據(jù)庫(kù)的內(nèi)容并接受用戶的查詢和修改等操作。

3.2.4 SQL語(yǔ)言在Delphi中的應(yīng)用

在Delphi中使用SQL語(yǔ)言非常方便,一般來(lái)說(shuō),都是通過(guò)Tquery組件來(lái)使用SQL語(yǔ)言的??梢栽赥Query組件的SQL屬性中設(shè)置SQL語(yǔ)句。設(shè)計(jì)程序時(shí),在該組件的屬性對(duì)話框中選擇SQL屬性,單擊帶省略號(hào)的按鈕,就可以打開(kāi)String List Editor對(duì)話框,然后我們就可以在對(duì)話框中添加SQL語(yǔ)句。還可以使用Delphi的SQL Builder來(lái)自動(dòng)生成SQL語(yǔ)句,這樣可以避免手工編寫SQL而可能造成的語(yǔ)法錯(cuò)誤。

靜態(tài)SQL語(yǔ)句在程序設(shè)計(jì)時(shí)便已固定下來(lái),它不包含任何參數(shù)和變量。

動(dòng)態(tài)SQL語(yǔ)句,也被稱作參數(shù)化的語(yǔ)句,在其中間包含著表示字段名或表名的參數(shù),例如下面的語(yǔ)句是一條動(dòng)態(tài)SQL語(yǔ)句:

Select * From Students Where StudentCode =: StudentCode;

其中的變量StudentCode便是一個(gè)參數(shù)變量,它由一個(gè)冒號(hào)引導(dǎo),在程序運(yùn)行過(guò)程中,必須要為該參數(shù)賦值,該條SQL語(yǔ)句才能正確執(zhí)行,每次運(yùn)行應(yīng)用程序時(shí)可以為該參數(shù)變量賦予不同的值。為參數(shù)賦值有三種方法:

①根據(jù)參數(shù)在SQL語(yǔ)句中出現(xiàn)的順序,設(shè)置TQuery部件的Params屬性值為參數(shù)賦值。

②直接根據(jù)SQL語(yǔ)句中各參數(shù)的名字,調(diào)用ParamByName方法來(lái)為各參數(shù)賦值。

③將TQuery部件的DataSource屬性設(shè)置為另一個(gè)數(shù)據(jù)源,這樣將另一個(gè)數(shù)據(jù)源中與當(dāng)前TQuery部件的SQL語(yǔ)句中的參數(shù)名相匹配的字段值賦給其對(duì)應(yīng)的參數(shù)。利用這種方法也能實(shí)現(xiàn)所謂的連接查詢,創(chuàng)建主要—明細(xì)型數(shù)據(jù)庫(kù)應(yīng)用。

在程序運(yùn)行過(guò)程中,要想設(shè)置TQuery部件的SQL屬性,必須首先調(diào)用Close方法,關(guān)閉TQuery部件,然后再調(diào)用Clear方法清除SQL屬性中現(xiàn)存的SQL命令語(yǔ)句, 最后再調(diào)用Add方法為SQL屬性設(shè)置新的SQL命令語(yǔ)句。例如:

Query1.Close {關(guān)閉Query1)

Query1.SQL.Clear {清除SQL屬性中的SQL命令語(yǔ)句}

Query1.SQL.Add(‘Select * From Students‘);

Query1.SQL.Add(‘ Where Name ="Lucy" ‘);

在為TQuery部件設(shè)置SQL屬性時(shí)調(diào)用Close方法總是很安全的,如果TQuery部件已經(jīng)被關(guān)閉了,調(diào)用Close方法時(shí)不會(huì)產(chǎn)生任何影響。在應(yīng)用程序中為SQL屬性設(shè)置新的SQL 命令語(yǔ)句時(shí),必須要調(diào)用Clear方法以清除SQL屬性中現(xiàn)存的SQL命令語(yǔ)句,如果不調(diào)用Clear方法,便調(diào)用Add方法向SQL屬性中設(shè)置SQL命令語(yǔ)句,那么新設(shè)置的SQL命令語(yǔ)句會(huì)追加在現(xiàn)存SQL命令語(yǔ)句后面, 在程序運(yùn)行時(shí)常常會(huì)出現(xiàn)出乎意料的查詢結(jié)果甚至程序無(wú)法運(yùn)行下去。

在這里要特別注意的,一般情況下TQuery部件的SQL屬性只能包含一條完整的SQL語(yǔ)句,它不允許被設(shè)置成多條SQL語(yǔ)句。當(dāng)然有些數(shù)據(jù)庫(kù)服務(wù)器也支持在TQuery部件的SQL屬性中設(shè)置多條SQL語(yǔ)句,只要數(shù)據(jù)庫(kù)服務(wù)器允許這樣,我們?cè)诰幊虝r(shí)可以為 SQL 屬性設(shè)置多條SQL語(yǔ)句。

在為TQuery部件設(shè)置完SQL屬性的屬性值之后,也即編寫好適當(dāng)?shù)腟QL程序之后,可以有多種方式來(lái)執(zhí)行SQL程序。

在設(shè)計(jì)過(guò)程中,設(shè)置完TQuery部件的SQL屬性之后將其Active屬性的值置為True, 這樣便可以執(zhí)行SQL屬性中的SQL程序,如果應(yīng)用中有與TQuery部件相連的數(shù)據(jù)瀏覽部件( 如TDDGrid TDBEdit等)那么在這些數(shù)據(jù)瀏覽部件中會(huì)顯示SQL程序的執(zhí)行結(jié)果。

在應(yīng)用程序運(yùn)行過(guò)程中,通過(guò)程序調(diào)用TQuery部件的Open方法或ExecSQL 方法可以執(zhí)行其SQL屬性中的SQL程序。Open方法和ExecSQL方法是不一樣的。Open方法只能用來(lái)執(zhí)行SQL語(yǔ)言的查詢語(yǔ)句(Select命令), 并返回一個(gè)查詢結(jié)果集,而ExecSQL方法還可以用來(lái)執(zhí)行其它常用的SQL語(yǔ)句(如INSERT, UPDATE, DELETE等命令),例如:

Query1.Open (這樣會(huì)返回一個(gè)查詢結(jié)果集)

如果調(diào)用Open方法,而沒(méi)有查詢結(jié)果時(shí),會(huì)出錯(cuò)。此時(shí)應(yīng)該調(diào)用ExecSQL 方法來(lái)代替Open方法。如:

Query1.ExecSQL (沒(méi)有返回結(jié)果)

當(dāng)然在設(shè)計(jì)應(yīng)用程序時(shí),程序設(shè)計(jì)人員是無(wú)法確定TQuery部件中的SQL 語(yǔ)句是否會(huì)返回一個(gè)查詢結(jié)果的。對(duì)于這種情況應(yīng)當(dāng)用Try…Except模塊來(lái)設(shè)計(jì)程序。在 Try 部分調(diào)用Open方法,而在Except部分調(diào)用ExceSQL方法,這樣才能保證程序的正確運(yùn)行。

Delphi中用ADOQuery來(lái)使用SQL語(yǔ)句同樣十分方便。在ADOQuery組件中首先通過(guò)ConnectionString屬性值來(lái)聯(lián)接數(shù)據(jù)源,然后就通過(guò)雙擊SQL…屬性值來(lái)寫入SQL語(yǔ)句。在Delphi中調(diào)用數(shù)據(jù)庫(kù),就可以調(diào)用ADOQuery組件,通過(guò)修改其中的SQL…屬性中的SQL語(yǔ)句來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的各項(xiàng)操作。

值得注意的是,ADOQuery組件只有在激活的情況下才可以被正確地使用,這樣就提出了一個(gè)問(wèn)題,也就是說(shuō),在每次修改ADOQuery組件的SQL…屬性時(shí)都必須先行進(jìn)行關(guān)閉,待清除掉SQL…中所有的SQL語(yǔ)句后才可以添加新的SQL語(yǔ)句。而且,在每一次修改完成以后,還應(yīng)該記得重新將ADOQuery激活。其它的使用方法與TTQuery有許多的相似之處。

§3.3 Access 簡(jiǎn)介

建立一個(gè)數(shù)據(jù)庫(kù)我們有多種選擇,現(xiàn)在市場(chǎng)上有各種各樣的數(shù)據(jù)庫(kù),而且每一種數(shù)據(jù)庫(kù)都有其自身的特點(diǎn),不能說(shuō)哪一種更好,只能在其中尋找一種能更好地適應(yīng)系統(tǒng)需求、更好地滿足用戶的要求以及適應(yīng)開(kāi)發(fā)人員的習(xí)慣。在本系統(tǒng)中,做為圖書倉(cāng)庫(kù)管理系統(tǒng)是一個(gè)比較小的應(yīng)用系統(tǒng),它所產(chǎn)生和處理的數(shù)據(jù)量也比較小。因此,沒(méi)有必要使用像SQL Server和Oracle這樣的大型數(shù)據(jù)庫(kù)。我首先想到的數(shù)據(jù)庫(kù)是Borland公司的Paradox數(shù)據(jù)庫(kù)。另外,Microsoft Office中的Access數(shù)據(jù)庫(kù)在計(jì)算機(jī)上的應(yīng)用比較普及,是開(kāi)發(fā)小型數(shù)據(jù)庫(kù)系統(tǒng)的比較理想的選擇,所以,在本系統(tǒng)中我選擇了Access數(shù)據(jù)庫(kù)。

Access做為一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng),它被集成在Microsoft Office中。Access數(shù)據(jù)庫(kù)處理的基本結(jié)構(gòu),采取關(guān)系型數(shù)據(jù)庫(kù)模式。與其他的數(shù)據(jù)庫(kù)系統(tǒng)相比,Access更加簡(jiǎn)單易學(xué),一個(gè)普通的計(jì)算機(jī)用戶可以很快地掌握它。Access 2000的功能十分強(qiáng)大,利用它可以方便地實(shí)現(xiàn)對(duì)信息保存、維護(hù)、查詢、統(tǒng)計(jì)、打印、交流、,而且它可以十分方便地與Office其他組件交流數(shù)據(jù),這些功能對(duì)一個(gè)一般用戶而言已經(jīng)足夠了。

轉(zhuǎn)貼于 第四章 系統(tǒng)總體設(shè)計(jì)

軟件系統(tǒng)的總體設(shè)計(jì)大約要經(jīng)歷可行性分析和項(xiàng)目開(kāi)發(fā)計(jì)劃,需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼,測(cè)試以及維護(hù)等七個(gè)階段。可行性分析和項(xiàng)目開(kāi)發(fā)計(jì)劃在前面已經(jīng)敘述,下面所要做的是進(jìn)行軟件需求分析,概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。編碼過(guò)程將在下一節(jié)論述,而測(cè)試和維護(hù)過(guò)程不在本文敘及。

§4.1 系統(tǒng)需求分析

在經(jīng)過(guò)前一階段的分析之后,我確定了我的開(kāi)發(fā)課題為圖書倉(cāng)庫(kù)管理。現(xiàn)在所要做的是要準(zhǔn)確定義系統(tǒng)必須做什么以及系統(tǒng)必須具備的功能。

軟件需求分析中我采用結(jié)構(gòu)化分析方法(Structured Analysis,簡(jiǎn)稱SA),SA是面向數(shù)據(jù)流進(jìn)行需求分析的方法,像所有的軟件分析方法(如面向?qū)ο蠓治龇椒āDEF方法等等)一樣,SA也是一種建?;顒?dòng),它使用簡(jiǎn)單易讀的符號(hào),根據(jù)軟件內(nèi)部數(shù)據(jù)傳遞、變換的關(guān)系,自頂向下逐層分解,描繪滿足功能要求的軟件模型。

在系統(tǒng)中我采用數(shù)據(jù)流圖(DFD)這種半形式化的描述方式表達(dá)需求。它是一種功能模型,以圖形的方式描繪數(shù)據(jù)在系統(tǒng)中流動(dòng)和處理的過(guò)程,只反映系統(tǒng)必須完成的邏輯功能。它有四種基本圖形符號(hào):

:箭頭,表示數(shù)據(jù)流;

〇:圓或橢圓,表示加工;

:雙杠,表示數(shù)據(jù)存儲(chǔ);

:方框,表示數(shù)據(jù)的源點(diǎn)或終點(diǎn)。

為了表達(dá)較為復(fù)雜問(wèn)題的數(shù)據(jù)處理過(guò)程,用一張數(shù)據(jù)流圖是不夠的,要按照問(wèn)題的層次結(jié)構(gòu)進(jìn)行逐步分解,并以一套分層的數(shù)據(jù)流圖反映這種結(jié)構(gòu)關(guān)系。在這里我一共使用了三層數(shù)據(jù)流圖,即頂層圖,0層圖和1層圖(也是底層圖)。

在多層數(shù)據(jù)流圖中,頂層流圖僅包含一個(gè)加工,它代表被開(kāi)發(fā)系統(tǒng),它的輸入流是該系統(tǒng)的輸入數(shù)據(jù)了,輸出流是該系統(tǒng)的輸出數(shù)據(jù);底層流圖是指其加工不需要再做分解的數(shù)據(jù)流圖,中間層流圖表示對(duì)其上層父圖的細(xì)化,它的每一步加工可能繼續(xù)細(xì)化成子圖。

經(jīng)過(guò)對(duì)系統(tǒng)的分析首先得到系統(tǒng)的頂層DFD,如下: 一步細(xì)化得到系統(tǒng)的0層DFD,如下:

再進(jìn)一步細(xì)化每一個(gè)數(shù)據(jù)加工功能,得到系統(tǒng)的1層DFD圖。

在這里只給出有關(guān)入庫(kù)管理和出庫(kù)管理的1層數(shù)據(jù)流圖,它們是系統(tǒng)的關(guān)鍵部分,也是主要的部分。通過(guò)以上對(duì)數(shù)據(jù)流圖的分析之后,我們已大體地了解了系統(tǒng)的功能和目標(biāo),接下來(lái)所要做的就是系統(tǒng)功能模塊的劃分和數(shù)據(jù)庫(kù)的設(shè)計(jì),也就是系統(tǒng)的概要設(shè)計(jì)。

§4.2 系統(tǒng)概要設(shè)計(jì)

在軟件需求分析階段,搞清楚了軟件“做什么”的問(wèn)題,形成了目標(biāo)系統(tǒng)的邏輯模型?,F(xiàn)在我們所要做的就是要把軟件“做什么”的邏輯模型變換為“怎么做”的物理模型,即著手實(shí)現(xiàn)軟件的需求。首先,我們需要描述的是系統(tǒng)的總的體系結(jié)構(gòu)。

4.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)

系統(tǒng)的概要設(shè)計(jì)中最重要的就是系統(tǒng)的模塊化。模塊化是指解決一個(gè)復(fù)雜問(wèn)題時(shí)自項(xiàng)向下逐層把軟件系統(tǒng)劃分成若干個(gè)模塊的過(guò)程。每個(gè)模塊完成一個(gè)特定的功能,所有的模塊按某種方法組織起來(lái),成為一個(gè)整體,完成整個(gè)系統(tǒng)所要求的功能。

將系統(tǒng)劃分為多個(gè)模塊是為了降低軟件系統(tǒng)的復(fù)雜性,提高可讀性、可維護(hù)性,但模塊的劃分不能是任意的,應(yīng)盡量保持其獨(dú)立性。也就是說(shuō),每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡(jiǎn)單,即盡量做到高內(nèi)聚低耦合,提高模塊的獨(dú)立性,為設(shè)計(jì)高質(zhì)量的軟件結(jié)構(gòu)奠定基礎(chǔ)。

在系統(tǒng)的概要設(shè)計(jì)中我采用結(jié)構(gòu)化設(shè)計(jì)(Structure Design,簡(jiǎn)稱SD),SD以需求分析階段產(chǎn)生的數(shù)據(jù)流圖DFD為基礎(chǔ),按一定的步驟映射成軟件結(jié)構(gòu)。我首先將整個(gè)系統(tǒng)化分為幾個(gè)小問(wèn)題,小模塊,在系統(tǒng)中,我設(shè)計(jì)了用戶管理、庫(kù)存管理、入庫(kù)管理、出庫(kù)管理、員工管理和供應(yīng)商管理6個(gè)小模塊。然后,進(jìn)一步細(xì)分模塊,添加細(xì)節(jié)。比如,用戶管理我又將其分為用戶注冊(cè)、用戶注銷、密碼修改;庫(kù)存管理分為庫(kù)存記錄查詢、庫(kù)存記錄修改、庫(kù)存記錄打印等等。

以下就是系統(tǒng)的結(jié)構(gòu)圖:(在這里為了表達(dá)方便我將結(jié)構(gòu)圖分開(kāi)來(lái)表達(dá)。)

在得到系統(tǒng)的第一層功能模塊圖后,經(jīng)過(guò)進(jìn)一步地細(xì)化,得一系統(tǒng)的子功能模塊圖:

4.2.2 數(shù)據(jù)庫(kù)設(shè)計(jì)

在信息世界中,信息從客觀事物出發(fā)流經(jīng)數(shù)據(jù)庫(kù),通過(guò)決策機(jī)構(gòu)最后又回到客觀世界,信息的這一循環(huán)經(jīng)歷了三個(gè)領(lǐng)域:信息世界,數(shù)據(jù)世界,現(xiàn)實(shí)世界?,F(xiàn)實(shí)世界的事物反映到人的頭腦中,人的大腦對(duì)它有個(gè)認(rèn)識(shí)過(guò)程,經(jīng)過(guò)分析(選擇、命名、分類等)進(jìn)入信息世界。這些信息再進(jìn)一步加工、編碼,然后進(jìn)數(shù)據(jù)世界,而軟件系統(tǒng)的開(kāi)發(fā)工作需要考慮這兩個(gè)方面的問(wèn)題,也就是要考慮系統(tǒng)開(kāi)發(fā)所需要的數(shù)據(jù),以及如何對(duì)這些數(shù)據(jù)進(jìn)行操作。這兩個(gè)問(wèn)題貫穿了整個(gè)軟件系統(tǒng)的開(kāi)發(fā)過(guò)程,這也就是數(shù)據(jù)庫(kù)的設(shè)計(jì)問(wèn)題,軟件設(shè)計(jì)的一個(gè)核心。

4.2.2.1 ER圖設(shè)計(jì)

在系統(tǒng)設(shè)計(jì)的開(kāi)始,我首先考慮的是如何用數(shù)據(jù)模型來(lái)數(shù)據(jù)庫(kù)的結(jié)構(gòu)與語(yǔ)義,以對(duì)現(xiàn)實(shí)世界進(jìn)行抽象。目前廣泛使用的數(shù)據(jù)模型可分為兩種類型,一種是獨(dú)立于計(jì)算機(jī)系統(tǒng)的“概念數(shù)據(jù)模型”,如“實(shí)體聯(lián)系模型”;另一種是直接面向數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)的“結(jié)構(gòu)數(shù)據(jù)模型”。在本系統(tǒng)中我采用“實(shí)體聯(lián)系模型”(ER模型)來(lái)描述數(shù)據(jù)庫(kù)的結(jié)構(gòu)與語(yǔ)義,以對(duì)現(xiàn)實(shí)世界進(jìn)行第一次抽象。ER模型直接從現(xiàn)實(shí)世界抽象出實(shí)體類型及實(shí)體間聯(lián)系,然后用ER圖來(lái)表示數(shù)據(jù)模型。它有兩個(gè)明顯的優(yōu)點(diǎn):接近于人的思維,容易理解;與計(jì)算機(jī)無(wú)關(guān),用戶容易接受。但ER模型只能說(shuō)明實(shí)體間語(yǔ)義的聯(lián)系,不能進(jìn)一步說(shuō)明詳細(xì)的數(shù)據(jù)結(jié)構(gòu),它只是數(shù)據(jù)庫(kù)設(shè)計(jì)的第一步。

ER圖是直觀表示概念模型的工具,它有四個(gè)基本成分:

矩形框,表示實(shí)體類型(考慮問(wèn)題的對(duì)象)。

菱形框,表示聯(lián)系類型(實(shí)體間的聯(lián)系)。

橢圓形框,表示實(shí)體類型和聯(lián)系類型的屬性。對(duì)于關(guān)鍵碼的屬性,在屬性名下劃一橫線。

直線,聯(lián)系類型與其涉及的實(shí)體類型之間以直線連接。

本系統(tǒng)為圖書倉(cāng)庫(kù)管理,主要管理圖書的入庫(kù)、出庫(kù)以及庫(kù)存等事項(xiàng)。倉(cāng)庫(kù)根據(jù)需要可以查詢圖書供應(yīng)商的信息,同時(shí)還需要了解在入庫(kù)和出庫(kù)中員工的參與情況。依據(jù)倉(cāng)庫(kù)管理的實(shí)際情況,考慮了多方面的因素以后,確定系統(tǒng)的ER圖如下:

(為了表達(dá)的方便,在這里我沒(méi)有在一張圖上表達(dá)出所有的關(guān)系,而是用一張總體ER圖,和幾張實(shí)體屬性關(guān)系圖來(lái)表達(dá)數(shù)據(jù)庫(kù)的結(jié)構(gòu)。)

在該數(shù)據(jù)庫(kù)中,我設(shè)計(jì)了三個(gè)實(shí)體,分別是庫(kù)存、員工和供應(yīng)商以及兩個(gè)聯(lián)系類型入庫(kù)和出庫(kù)。在本系統(tǒng)中庫(kù)存是核心,也是基本,沒(méi)有了庫(kù)存其它的也就沒(méi)有什么意義了。員工記錄的添加是考慮到責(zé)任問(wèn)題,也就是說(shuō),在倉(cāng)庫(kù)管理的實(shí)際運(yùn)用中,出現(xiàn)了責(zé)任不清的現(xiàn)象,特別是由于倉(cāng)庫(kù)的進(jìn)出圖書數(shù)量都比較大時(shí)產(chǎn)生了一系列問(wèn)題,所以在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),我特別考慮到這一點(diǎn),加入了員工記錄這一實(shí)體。供應(yīng)商信息的添加主要出于對(duì)圖書來(lái)源問(wèn)題的思考。通過(guò)添加供應(yīng)商信息可以比較清楚地了解圖書的進(jìn)貨渠道,從圖書的質(zhì)量到供應(yīng)商的信譽(yù)都可以進(jìn)行了解,同時(shí)可以為以后的圖書進(jìn)購(gòu)提供一定有用的信息。

入庫(kù)聯(lián)系類型將庫(kù)存信息、供應(yīng)商信息和員工信息聯(lián)系在一起,可以方便地實(shí)現(xiàn)三個(gè)實(shí)體之間的聯(lián)接,而出庫(kù)聯(lián)系類型則將庫(kù)存信息和員工信息較好地聯(lián)接起,同時(shí)這兩個(gè)聯(lián)系類型又都具有各自特有的屬性。

下面就是各實(shí)體及聯(lián)系類型的屬性圖:(帶#號(hào)的屬性為關(guān)鍵字段)4.2.2.2 數(shù)據(jù)庫(kù)表格設(shè)計(jì)

在完成系統(tǒng)的ER圖之后,需要將ER模型轉(zhuǎn)化為關(guān)系模型,也就是說(shuō),要設(shè)計(jì)出數(shù)據(jù)庫(kù)所需要的表格。在這里,我選用的是關(guān)系數(shù)據(jù)庫(kù)。因?yàn)殛P(guān)系數(shù)據(jù)庫(kù)中的二維表格可以很清楚地描述數(shù)據(jù)之間的聯(lián)系。

在這里不得不提到一個(gè)概念——范式。其實(shí)在上一節(jié)的ER圖設(shè)計(jì)中,已經(jīng)運(yùn)用了范式的思想,不僅如此,在數(shù)據(jù)庫(kù)的表格設(shè)計(jì)中更離不開(kāi)范式的思想,它是數(shù)據(jù)庫(kù)設(shè)計(jì)的基礎(chǔ),如果不注意這個(gè)問(wèn)題將會(huì)導(dǎo)致一系列問(wèn)題的出現(xiàn)。

我在系統(tǒng)中定義的表格都嚴(yán)格地按照范式的思想和要求去完成,數(shù)據(jù)庫(kù)中的所有表格都達(dá)到了三范式的要求。根據(jù)系統(tǒng)ER圖,針對(duì)本系統(tǒng)的特點(diǎn),在對(duì)所搜集的數(shù)據(jù)進(jìn)行規(guī)范化之后,定義了如下六張表格,分別是庫(kù)存信息表,入庫(kù)信息表,出庫(kù)信息表,員工信息表,供應(yīng)商信息表和密碼信息表。通過(guò)對(duì)這六張表格的操作可以較好地完成系統(tǒng)設(shè)計(jì)的各項(xiàng)功能,六張表格之間有著不同程度的聯(lián)系。(說(shuō)明:在以下數(shù)據(jù)表中,K代表主鍵,#代表外鍵,字段值不為空。)

BookRecord 表(庫(kù)存信息表)

字段名稱 數(shù)據(jù)類型 說(shuō)明

K BookID 數(shù)字 圖書編號(hào)

BookName 文本 圖書名

Author 文本 作者

Publisher 文本 出版社

PubDate 日期/時(shí)間 出版日期

Price 貨幣 價(jià)格

BookType 文本 圖書類型

Number1 數(shù)字 庫(kù)存數(shù)量

Addation 文本 備注

圖4.13 庫(kù)存信息表

庫(kù)存信息表主要用于記錄倉(cāng)庫(kù)中現(xiàn)存放的所有圖書的詳細(xì)信息,包括圖書編號(hào)、書名、作者、出版社、圖書類型等有關(guān)圖書的各類信息,它即是該數(shù)據(jù)庫(kù)的主表,也是系統(tǒng)主界面的主要內(nèi)容。

在該表中圖書編號(hào)是主鍵,它按圖書入庫(kù)的先后次序來(lái)編寫,每當(dāng)有圖書入庫(kù),系統(tǒng)自動(dòng)給出圖書編號(hào),這樣我們按圖書編號(hào)來(lái)查找圖書是比較方便的??紤]到編號(hào)比較難于記憶,所以使用了出版社和圖書類型兩個(gè)字段,在系統(tǒng)中我提供了出版社和圖書類型的分類查找,而且全部采用自動(dòng)生成,每當(dāng)系統(tǒng)中有新的出版社類型和圖書類型,彈出菜單會(huì)自動(dòng)添中新類型,這樣就可以比較方便地實(shí)現(xiàn)按出版社和按圖書類型查找。此外,庫(kù)存數(shù)量也是一個(gè)比較關(guān)鍵的字段,該字段是在系統(tǒng)初始化時(shí)就給定的,每當(dāng)有圖書入庫(kù)或出庫(kù)操作,系統(tǒng)就會(huì)自動(dòng)修改圖書的庫(kù)存數(shù)量,以保持?jǐn)?shù)據(jù)的一致性。做為備注有一點(diǎn)說(shuō)明,我的數(shù)據(jù)庫(kù)中備注的數(shù)據(jù)類型是文本,而不是備注類型,主要考慮到該字段的長(zhǎng)度并不大,而且在Delphi中文本數(shù)據(jù)類型的處理也比較方便一點(diǎn)。

Employee 表(員工信息表)

字段名稱 數(shù)據(jù)類型 說(shuō)明

K EmployeeID 數(shù)字 員工編號(hào)

EmployeeName 文本 員工姓名

Sex 文本 性別

BornDate 日期/時(shí)間 出生日期

Grade 文本 職稱

WorkDate 日期/時(shí)間 工作日期

Telephone 文本 聯(lián)系電話

Address 文本 聯(lián)系地址

圖4.14 員工信息表

員工信息表主要用于記錄有關(guān)員工的各類信息,包括姓名、職稱、出生日期、聯(lián)系電話、聯(lián)系地址等。它主要用來(lái)為系統(tǒng)提供員工的有關(guān)信息,因?yàn)樵谙到y(tǒng)中,入庫(kù)和出庫(kù)操作均與員工有著一定的聯(lián)系,在查詢?nèi)霂?kù)信息和出庫(kù)信息時(shí),有時(shí)需要查找有關(guān)此項(xiàng)記錄有關(guān)的員工信息,在系統(tǒng)中我是通過(guò)入庫(kù)記錄與員工記錄(出庫(kù)記錄和員工記錄)之間的聯(lián)接查詢來(lái)完成的。另外,作為一個(gè)倉(cāng)庫(kù)也有必要了解其所屬員工的一些基本情況,以便查詢。

Shopkeeper 表(供應(yīng)商信息表)

字段名稱 數(shù)據(jù)類型 說(shuō)明

K ShopkeeperID 數(shù)字 供應(yīng)商編號(hào)

ShopkeeperName 文本 供應(yīng)商姓名

Address 文本 地址

PostNo 數(shù)字 郵編

OfficePhone 文本 辦公電話

HomePhone 文本 住宅電話

Email 文本 E-mail

PayType 文本 付款方式

圖4.15 供應(yīng)商信息表

供應(yīng)商信息表主要用于記錄有關(guān)供應(yīng)商的各類信息,包括姓名、地址、電話、付款方式等。它主要用來(lái)為系統(tǒng)提供供應(yīng)商的有關(guān)信息,在系統(tǒng)中入庫(kù)記錄是與供應(yīng)商記錄相聯(lián)系的,通過(guò)入庫(kù)記錄可以查找相關(guān)的供應(yīng)商信息。在供應(yīng)商信息中,考慮當(dāng)實(shí)際情況,我特別加入了Email和付款方式這兩個(gè)字段,因?yàn)樵诋?dāng)今信息世界中,多種多樣的通訊方式和多種多樣的付款方式是必然的,是數(shù)據(jù)庫(kù)中必須與以記錄。

InRecord 表(入庫(kù)信息表)

字段名稱 數(shù)據(jù)類型 說(shuō)明

K InID 數(shù)字 入庫(kù)編號(hào)

# BookID 數(shù)字 圖書編號(hào)

# EmployeeID 數(shù)字 員工編號(hào)

# ShopkeeperID 數(shù)字 供應(yīng)商編號(hào)

Number 數(shù)字 入庫(kù)數(shù)量

BuyDate 日期/時(shí)間 入庫(kù)日期

圖4.16 入庫(kù)信息表

OutRecord 表(出庫(kù)信息表)

字段名稱 數(shù)據(jù)類型 說(shuō)明

K OutID 數(shù)字 出庫(kù)編號(hào)

# BookID 數(shù)字 圖書編號(hào)

# EmployeeID 數(shù)字 員工編號(hào)

Number2 數(shù)字 出庫(kù)數(shù)量

OutDate 日期/時(shí)間 出庫(kù)日期

圖4.17 出庫(kù)信息表

入庫(kù)信息表主要用于記錄有關(guān)入庫(kù)的詳細(xì)信息,包括入庫(kù)數(shù)量、入庫(kù)日期以及圖書、員工、供應(yīng)商三方的編號(hào),以便查詢。出庫(kù)信息表主要用于記錄有關(guān)出庫(kù)的詳細(xì)信息,包括出庫(kù)數(shù)量、出庫(kù)日期以及圖書、員工的編號(hào)。出庫(kù)信息表和入庫(kù)信息表一樣,其實(shí)它們都屬于聯(lián)系類型,系統(tǒng)通過(guò)這兩個(gè)表可以聯(lián)接上其它的表為用戶提供多種條件的聯(lián)接查詢。值得提出的一點(diǎn)是入庫(kù)記錄和出庫(kù)記錄的添加不僅僅是單表操作,由于它們都與庫(kù)存記錄相聯(lián)系,所以,無(wú)論您是添中入庫(kù)記錄還是添加出庫(kù)記錄,都必須同時(shí)修改庫(kù)存記錄,以保持?jǐn)?shù)據(jù)的一致性,否則將引發(fā)系統(tǒng)出錯(cuò)而這些我都讓其在系統(tǒng)中自動(dòng)完成。無(wú)論您是添加入庫(kù)記錄,還是添加出庫(kù)記錄,系統(tǒng)都將自動(dòng)修改庫(kù)存中圖書的數(shù)量,而且,在您出庫(kù)的數(shù)量大于庫(kù)存數(shù)量時(shí),系統(tǒng)還會(huì)自動(dòng)提示錯(cuò)誤,這樣就可以防止一定錯(cuò)誤的發(fā)生。

在入庫(kù)信息表和出庫(kù)信息表中我還定義了幾個(gè)外鍵,它提供了一種表示幾個(gè)關(guān)系聯(lián)系的方法。比如,系統(tǒng)中通過(guò)在入庫(kù)信息表中定義的外鍵 BookID、EmployeeID和ShopkeeperID可以將庫(kù)存信息表、員工信息表和供應(yīng)商信息表聯(lián)系在一起,從而方便地實(shí)現(xiàn)聯(lián)接查詢,而且,引入外鍵的定義是實(shí)體完整性約束的一個(gè)主要方面。

Key 表(密碼信息表)

字段名稱 數(shù)據(jù)類型 說(shuō)明

K KeyName 文本 用戶姓名

KeyNo 文本 用戶密碼

圖4.18 密碼信息表

密碼信息表主要用于記錄所有的用戶名和用戶密碼。它是在用戶登陸時(shí)用來(lái)確定用戶和密碼的正確性,以防止非法用戶登陸。

通過(guò)以上設(shè)計(jì)已經(jīng)完成了系統(tǒng)的概要設(shè)計(jì),當(dāng)我們有了系統(tǒng)的功能模塊圖和數(shù)據(jù)庫(kù)之后,就需要著手去實(shí)現(xiàn)每一個(gè)模塊,為每一個(gè)功能設(shè)計(jì)程序流程圖,這也就是系統(tǒng)的詳細(xì)設(shè)計(jì)。

§4.3 系統(tǒng)詳細(xì)設(shè)計(jì)

在前面的概要設(shè)計(jì)中,已將系統(tǒng)劃分為多個(gè)模塊,并將它們按照一定的原則組裝起來(lái),同時(shí)確定了每個(gè)功能及模塊之間的外部接口?,F(xiàn)在所要做的就是確定每個(gè)模塊具體執(zhí)行過(guò)程,也可以說(shuō)是“過(guò)程設(shè)計(jì)”。

在處理過(guò)程設(shè)計(jì)時(shí)我采用的是結(jié)構(gòu)化程序設(shè)計(jì)(簡(jiǎn)稱SP)方法。需要指出的是系統(tǒng)的詳細(xì)設(shè)計(jì)并不是指具體的編程序,而是將概要設(shè)計(jì)階段產(chǎn)生的系統(tǒng)功能模塊圖細(xì)化成很容易產(chǎn)生程序的圖紙。因此詳細(xì)設(shè)計(jì)的結(jié)果基本決定了最終程序的質(zhì)量。為軟件的質(zhì)量,延長(zhǎng)軟件的生存期,軟件的可測(cè)試性、可維護(hù)性提供重要的保障。詳細(xì)設(shè)計(jì)的目標(biāo)不僅是邏輯上正確地實(shí)現(xiàn)每個(gè)模塊的功能,還應(yīng)使設(shè)計(jì)出的處理過(guò)程清晰易讀。

由前一階段產(chǎn)生的系統(tǒng)功能模塊圖,我為系統(tǒng)的主要部分設(shè)計(jì)了如下程序流程圖:通過(guò)以上步驟,基本上完成了對(duì)整個(gè)系統(tǒng)的總體設(shè)計(jì),接下來(lái)所要做的就是軟件的編碼工作。系統(tǒng)總體設(shè)計(jì)的好壞直接影響著下一步工作,只有在這一階段設(shè)計(jì)出好的模塊圖和程序流程圖,才能更有利于編碼,產(chǎn)生好的軟件系統(tǒng)。

第五章 系統(tǒng)應(yīng)用程序設(shè)計(jì)

§5.1 系統(tǒng)窗體模塊組成

§5.2 數(shù)據(jù)模塊窗體的設(shè)置

在編寫數(shù)據(jù)庫(kù)應(yīng)用程序時(shí),經(jīng)常要遇到這樣的情況,即好多組件、窗體同時(shí)訪問(wèn)相同的數(shù)據(jù)源,如果為每一個(gè)組件或者窗體都設(shè)置一個(gè)數(shù)據(jù)源將是十分耗時(shí)的工件,而且要保證這些數(shù)據(jù)源的確是相同的也需花一番功夫。那么,能不能將這些數(shù)據(jù)源集中管理,最好是做成一個(gè)統(tǒng)一的模塊,需要時(shí)就將該模塊引入而不必直接操作數(shù)據(jù)源本身呢?數(shù)據(jù)模塊(DataModule)是解決這個(gè)問(wèn)題最好的答案。簡(jiǎn)單說(shuō)來(lái),數(shù)據(jù)模塊是用來(lái)集中管理數(shù)據(jù)源的一個(gè)窗體,該窗體可被需要的地方隨時(shí)引入。

圖5.2給出了本程序的數(shù)據(jù)模塊(datamoduleform)窗體圖,除報(bào)表窗體外所有的數(shù)據(jù)存取組件和數(shù)據(jù)源組件都在此數(shù)據(jù)模塊中進(jìn)行了定義。值得一提的是,設(shè)置了數(shù)據(jù)庫(kù)Database組件,該組件引入了系統(tǒng)所需的唯一的數(shù)據(jù)庫(kù)tsxs,Database組件的DatabaseName屬性設(shè)置為tsckgl。tsxs數(shù)據(jù)庫(kù)已在ODBC配置程序中進(jìn)行了設(shè)置。其他的數(shù)據(jù)存取組件都是基于此數(shù)據(jù)庫(kù)組件創(chuàng)建的,這樣做的好處是,當(dāng)數(shù)據(jù)庫(kù)的別名或者其他信息改變之后,只需修改Tdatabase組件的AliasName屬性即可。

另外,在本系統(tǒng)的數(shù)據(jù)模塊窗體圖中,我大多采用的AODQuery組件而沒(méi)有采用BDE組,這主要是基于對(duì)ADO組件的了解。在Delphi的學(xué)習(xí)中我對(duì)ADO組件了解的更加清楚,使用也較BDE更為熟練,而且,ADO組件的功能也較BDE更為強(qiáng)大,所以在這里大多采用ADO組件來(lái)進(jìn)行數(shù)據(jù)庫(kù)聯(lián)接。同時(shí)我也使用了BDE組件中的Table,因?yàn)樵谀承r(shí)候BDE有著其自身特有的優(yōu)越性。 主窗體功能模塊的實(shí)現(xiàn)

file://主窗體程序代碼

public

file://在程序的起始部分,定義快捷按鈕點(diǎn)擊事件

Procedure Popup1Handler(Sender:Tobject);

Procedure Popup2Handler(Sender:TObject);

**********************************************************************

procedure Tmainform.Popup1Handler(Sender: TObject);

begin

file://快捷按鈕1(點(diǎn)“按出版社分類”按鈕產(chǎn)生)的點(diǎn)擊事件

with datamoduleform.MainQuery do

begin

file://打開(kāi)數(shù)據(jù)模塊窗體的MainQuery,對(duì)BookRecord表進(jìn)行操作

close;

file://關(guān)閉MainQuery

SQL.Clear;

file://清除SQL屬性中的SQL命令語(yǔ)句

SQL.Add(‘select * from BookRecord where Publisher=:Pub‘); file://添加新的SQL語(yǔ)句

Parameters.ParamByName(‘Pub‘).Value:=(Sender as TMenuItem).Caption;

open;

file://重新打開(kāi)MainQuery

end;

end;

**********************************************************************

procedure Tmainform.SpeedButton1Click(Sender: TObject);

Var s1,s2,s3,s4,s5 :String;

file://設(shè)立5個(gè)變量以方便實(shí)現(xiàn)模糊查詢

begin

file://主窗口庫(kù)存查詢按鈕事件

with datamoduleform.MainQuery do

begin

close;

SQL.Clear;

SQL.Add(‘select * from BookRecord‘);

SQL.Add(‘where BookID Like :BookID and BookName Like :Name and Author Like :Author and Publisher Like :pub and BookType Like :BookType‘);

file://使用Like語(yǔ)句來(lái)實(shí)現(xiàn)模糊查詢

if Edit1.Text‘‘ then s1:=‘%‘+Edit1.Text+‘%‘ else s1:=‘%‘;

Parameters.ParamByName(‘BookID‘).Value:=s1;

file://給變量s1賦值

if Edit2.Text‘‘ then s2:=‘%‘+Edit2.Text+‘%‘ else s2:=‘%‘;

Parameters.ParamByName(‘Name‘).Value:=s2;

file://給變量s2賦值

if Edit3.Text‘‘ then s3:=‘%‘+Edit3.Text+‘%‘ else s3:=‘%‘;

Parameters.ParamByName(‘Author‘).Value:=s3;

file://給變量s2賦值

if Edit4.Text‘‘ then s4:=‘%‘+Edit4.Text+‘%‘ else s4:=‘%‘;

Parameters.ParamByName(‘Pub‘).Value:=s4;

file://給變量s2賦值

if Edit5.Text ‘‘ then s5:=‘%‘+Edit5.Text+‘%‘ else s5:=‘%‘;

Parameters.ParamByName(‘BookType‘).Value:=s5;

file://給變量s2賦值

open;

if FieldValues[‘BookID‘]=NULL

file://判斷是否找到記錄

then begin

Messagedlg(‘沒(méi)有找到你所需要的記錄!‘,mtInformation,[mbOK],0);

Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘;

close;

SQL.Clear;

SQL.Add(‘select * from BookRecord‘);

file://這里相當(dāng)于一個(gè)刷新功能

open;

end;end;

end;

**********************************************************************

procedure Tmainform.SpeedButton3Click(Sender: TObject);

begin

file://庫(kù)存表刷新按鈕事件

with datamoduleform.MainQuery do

begin

close;

SQL.Clear;

SQL.Add(‘select * from BookRecord‘);

open;

end;

end;

**********************************************************************

procedure Tmainform.SpeedButton11Click(Sender: TObject);

var PopupItem:TMenuItem;

begin

file://自動(dòng)生成快捷按鈕1的內(nèi)容

with datamoduleform.BookQuery do

begin

file://從數(shù)據(jù)庫(kù)中選擇出版社類型

close;

SQL.Clear;

SQL.Add(‘select distinct Publisher from BookRecord‘);

open;

PopupMenu1:=TPopupMenu.Create(Self); file://自動(dòng)生成快捷菜單

PopupMenu1.AutoHotkeys:=maManual;

file://自定義熱鍵

while Not Eof do

begin

file://根據(jù)出版社內(nèi)容生成菜單子項(xiàng)

PopupItem:=TMenuItem.Create(Self);

PopupItem.Caption:=FieldByName(‘Publisher‘).AsString;

PopupMenu1.Items.Add(PopupItem);

PopupItem.onClick:=Popup1Handler;

file://確定菜單子項(xiàng)的點(diǎn)擊事件

Next;

end; end;

PopupMenu1.Popup(384,67);

file://在指定位置顯示快捷菜單1

end;

**********************************************************************

procedure Tmainform.FormActivate(Sender: TObject);

begin

file://系統(tǒng)初始化,在進(jìn)入mainform時(shí)自動(dòng)添加數(shù)據(jù)源

mainform.DBGrid1.DataSource:=datamoduleform.MainSource;

mainform.DBNavigator1.DataSource:=datamoduleform.MainSource;

mainform.DBGrid2.DataSource:=datamoduleform.EmpSource;

mainform.DBNavigator2.DataSource:=datamoduleform.EmpSource;

mainform.DBGrid3.DataSource:=datamoduleform.ShopSource;

mainform.DBNavigator3.DataSource:=datamoduleform.ShopSource;

mainform.DBGrid4.DataSource:=datamoduleform.InSource;

mainform.DBNavigator4.DataSource:=datamoduleform.InSource;

mainform.DBGrid5.DataSource:=datamoduleform.OutSource;

mainform.DBNavigator5.DataSource:=datamoduleform.OutSource;

end;

**********************************************************************

procedure Tmainform.FormCreate(Sender: TObject);

begin

file://系統(tǒng)初始化,定義界面大小,以適應(yīng)不同分辯率

Width:=800;Height:=600;

end;

**********************************************************************

procedure Tmainform.Timer1Timer(Sender: TObject);

begin

file://在狀態(tài)欄顯示時(shí)間

StatusBar1.Panels[2].Text:=DateToStr(Date);

StatusBar1.Panels[4].Text:=TimeToStr(Time);

end;

§5.4 入庫(kù)、出庫(kù)窗體模塊的實(shí)現(xiàn)

圖5.4 系統(tǒng)入庫(kù)管理窗體

圖5.5 系統(tǒng)出庫(kù)管理窗體

procedure Tinoutform.SpeedButton4Click(Sender: TObject);

begin

file://入庫(kù)管理查找按鈕事件

with datamoduleform.BookQuery do

file://入庫(kù)查詢處理

begin

close;

SQL.Clear;

SQL.Add(‘select * from BookRecord where BookID=:BookID‘);

Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;

open;

if FieldValues[‘BookID‘]NULL

then

begin

Edit1.Text:=‘‘;

Edit1.ReadOnly:=true;Edit1.Color:=clMenu;

Edit6.Text:=FieldValues[‘BookName‘]; file://顯示圖書名

Edit6.ReadOnly:=true;Edit6.Color:=clMenu; file://設(shè)置顯示框不可更改屬性

Edit7.Text:=FieldValues[‘Author‘];

Edit7.ReadOnly:=true;Edit7.Color:=clMenu;

Edit8.Text:=FieldValues[‘Publisher‘];

Edit8.ReadOnly:=true;Edit8.Color:=clMenu;

Edit9.Text:=FieldValues[‘PubDate‘];

Edit9.ReadOnly:=true;Edit9.Color:=clMenu;

Edit10.Text:=FieldValues[‘Price‘];

Edit10.ReadOnly:=true;Edit10.Color:=clMenu;

Edit11.Text:=FieldValues[‘BookType‘];

Edit11.ReadOnly:=true;Edit11.Color:=clMenu;

Edit12.Text:=FieldValues[‘Number1‘];

Edit12.ReadOnly:=true;Edit12.Color:=clMenu;

If FieldValues[‘Addation‘]NULL

then Edit25.Text:=FieldValues[‘Addation‘]

else Edit25.Text:=‘‘;

Edit25.ReadOnly:=true;Edit25.Color:=clMenu;

end

else

begin

file://在沒(méi)有查找到的情況下,清空所有顯示框

Edit1.ReadOnly:=false;Edit1.Text:=‘‘;Edit1.Color:=clMenu;

Edit6.ReadOnly:=false;Edit6.Text:=‘‘;Edit6.Color:=clMenu;

Edit7.ReadOnly:=false;Edit7.Text:=‘‘;Edit7.Color:=clMenu;

Edit8.ReadOnly:=false;Edit8.Text:=‘‘;Edit8.Color:=clMenu;

Edit9.ReadOnly:=false;Edit9.Text:=‘‘;Edit9.Color:=clMenu;

Edit10.ReadOnly:=false;Edit10.Text:=‘‘;Edit10.Color:=clMenu;

Edit11.ReadOnly:=false;Edit11.Text:=‘‘;Edit11.Color:=clMenu;

Edit12.ReadOnly:=false;Edit12.Text:=‘‘;Edit12.Color:=clMenu;

Edit25.ReadOnly:=false;Edit25.Text:=‘‘;Edit25.Color:=clMenu;

MessageDlg(‘沒(méi)有找到你所需要的記錄!‘,mtInformation,[mbOK],0);

Edit13.Text:=‘‘;Edit13.SetFocus;

end;

end;

with datamoduleform.InQuery do file://自動(dòng)入庫(kù)編號(hào)的獲取

begin

close;

SQL.Clear;

SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘);

open;

file://找到入庫(kù)編號(hào)中最大的一個(gè)

Edit26.ReadOnly:=false;

Edit26.Text:=FieldValues[‘InID‘]+1; file://最大的入庫(kù)編號(hào)加1形成新的入庫(kù)編號(hào)

Edit26.ReadOnly:=true;Edit26.Color:=clMenu; file://設(shè)置編號(hào)的不可更改性

end;

end;

**********************************************************************

procedure Tinoutform.SpeedButton1Click(Sender: TObject);

var s:integer;

begin

file://入庫(kù)管理添加按鈕事件

if Edit1.TextNULL

then MessageDlg(‘請(qǐng)輸入完整的入庫(kù)信息和圖書信息,然后單擊確定按鈕?!?,

mtInformation,[mbok],0)

else begin

if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘)

then begin

MessageDlg(‘請(qǐng)輸入完整的入庫(kù)信息!‘,mtInformation,[mbok],0);

Edit2.SetFocus;

end

else begin

with datamoduleform.InQuery do

file://將找到的圖書信息顯示

begin

close;

SQL.Clear;

SQL.Add(‘insert into InRecord values(:InID,:BookID,:EmpID,:ShopID,

:Number,:InDate)‘); file://向入庫(kù)信息表中插入記錄

Parameters.ParamByName(‘InID‘).Value:=Edit26.Text; file://向Edit框取值

Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;

Parameters.ParamByName(‘EmpID‘).Value:=Edit2.Text;

Parameters.ParamByName(‘ShopID‘).Value:=Edit3.Text;

Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;

Parameters.ParamByName(‘InDate‘).Value:=Edit5.Text;

execSQL;

end;

Edit12.ReadOnly:=False;

S:=StrToInt(Edit12.Text)+StrToInt(Edit4.Text); file://計(jì)算入庫(kù)后庫(kù)存圖書數(shù)量

Edit12.Text:=IntToStr(s);

file://將修改后的庫(kù)存圖書數(shù)量顯示

Edit12.ReadOnly:=true;

with datamoduleform.BookQuery do

file://修改庫(kù)存記錄中圖書數(shù)量

begin

close;

SQL.Clear;

SQL.Add(‘update BookRecord set Number1=:Number where

BookID=:BookID‘);

Parameters.ParamByName(‘Number‘).Value:=s;

Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;

execSQL;

file://提交SQL語(yǔ)句

MessageDlg(‘記錄已成功添加!‘,mtInformation,[mbOK],0);

Edit13.SetFocus;

end;

end;

end;

end;

**********************************************************************

procedure Tinoutform.SpeedButton2Click(Sender: TObject);

begin

file://入庫(kù)管理確定按鈕事件

if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘)

or (Edit6.Text=‘‘) or (Edit7.Text=‘‘) or (Edit8.Text=‘‘) or (Edit9.Text=‘‘)

or (Edit10.Text=‘‘) or (Edit11.Text=‘‘) or (Edit25.Text=‘‘)

then begin

file://判斷輸入信息的完整性

MessageDlg(‘請(qǐng)輸入所需的全部入庫(kù)信息!‘,mtInformation,[mbok],0);

Edit2.SetFocus;

end

else

begin

with datamoduleform.InQuery do

file://入庫(kù)信息添加

begin

close;

SQL.Clear;

SQL.Add(‘insert into InRecord values(:InID,:BookID,:EmpID,:ShopID,

:Number,:InDate)‘);

file://向入庫(kù)信息表中插入記錄

Parameters.ParamByName(‘InID‘).Value:=Edit26.Text;

Parameters.ParamByName(‘BookID‘).Value:=Edit1.Text;

Parameters.ParamByName(‘EmpID‘).Value:=Edit2.Text;

Parameters.ParamByName(‘ShopID‘).Value:=Edit3.Text;

Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;

Parameters.ParamByName(‘InDate‘).Value:=Edit5.Text;

execSQL;

end;

with datamoduleform.BookQuery do

begin

close;

SQL.Clear;

file://在完成入庫(kù)信息的添加后,修改庫(kù)存記錄

SQL.Add(‘insert into BookRecord values(:BookID,:BookName,:Author,

:Publisher,:PubDate,:Price,:BookType,:Number,:Addration)‘);

Parameters.ParamByName(‘BookID‘).Value:=Edit1.Text;

Parameters.ParamByName(‘BookName‘).Value:=Edit6.Text;

Parameters.ParamByName(‘Author‘).Value:=Edit7.Text;

Parameters.ParamByName(‘Publisher‘).Value:=Edit8.Text;

Parameters.ParamByName(‘PubDate‘).Value:=Edit9.Text;

Parameters.ParamByName(‘Price‘).Value:=Edit10.Text;

Parameters.ParamByName(‘BookType‘).Value:=Edit11.Text;

Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;

Parameters.ParamByName(‘Addration‘).Value:=Edit25.Text;

execSQL;

end;

MessageDlg(‘記錄添加成功!‘,mtInformation,[mbok],0);

end;

end;

**********************************************************************

procedure Tinoutform.SpeedButton11Click(Sender: TObject);

begin

file://新書入庫(kù)按鈕事件

Edit13.Text:=‘‘;Edit13.Color:=clMenu;

with datamoduleform.InQuery do file://自動(dòng)入庫(kù)編號(hào)的獲取

begin

close;

SQL.Clear;

SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘);

open;

Edit26.Text:=FieldValues[‘InID‘]+1;

Edit26.ReadOnly:=true;Edit26.Color:=clMenu;

end;

with datamoduleform.BookQuery do

file://自動(dòng)圖書編號(hào)的獲取

begin

close;

SQL.Clear;

SQL.Add(‘select * from BookRecord where BookID>=All(select BookID from BookRecord)‘);

file://找到庫(kù)存圖書編號(hào)中最大的一個(gè)

open;

Edit1.ReadOnly:=false;

Edit1.Text:=FieldValues[‘BookID‘]+1; file://顯示自動(dòng)生成的圖書編號(hào)

Edit1.ReadOnly:=true;Edit1.Color:=clMenu;

end;

Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘;

Edit6.ReadOnly:=false;Edit6.Text:=‘‘;Edit6.Color:=clWindow;

Edit7.ReadOnly:=false;Edit7.Text:=‘‘;Edit7.Color:=clWindow;

Edit8.ReadOnly:=false;Edit8.Text:=‘‘;Edit8.Color:=clWindow;

Edit9.ReadOnly:=false;Edit9.Text:=‘‘;Edit9.Color:=clWindow;

Edit10.ReadOnly:=false;Edit10.Text:=‘‘;Edit10.Color:=clWindow;

Edit11.ReadOnly:=false;Edit11.Text:=‘‘;Edit11.Color:=clWindow;

Edit12.ReadOnly:=false;Edit12.Text:=‘‘;Edit12.Color:=clMenu;

Edit25.ReadOnly:=false;Edit25.Text:=‘‘;Edit25.Color:=clWindow;

end;

procedure Tinoutform.SpeedButton22Click(Sender: TObject);

var s:integer;

begin

file://出庫(kù)管理確定按鈕事件

if (Edit24.Text=‘‘) or (Edit27.Text=‘‘) or (Edit28.Text=‘‘)

then begin

MessageDlg(‘請(qǐng)輸入完整的出庫(kù)信息!‘,mtInformation,[mbok],0);

Edit24.SetFocus;

end

else begin

if Edit27.Text>Edit21.Text

file://檢查出庫(kù)數(shù)量是否小于庫(kù)存數(shù)量

then begin

MessageDlg(‘庫(kù)存中的圖書數(shù)量不夠!‘,mtInformation,[mbok],0);

Edit27.Text:=‘‘;Edit27.SetFocus;

end

else begin

with datamoduleform.OutQuery do

begin

close;

SQL.Clear;

SQL.Add(‘insert into OutRecord values(:OutID,:BookID,:EmpID,

:Number,:OutTime)‘);

file://添加出庫(kù)記錄

Parameters.ParamByName(‘OutID‘).Value:=Edit23.Text;

Parameters.ParamByName(‘BookID‘).Value:=Edit14.Text;

Parameters.ParamByName(‘EmpID‘).Value:=Edit24.Text;

Parameters.ParamByName(‘Number‘).Value:=Edit27.Text;

Parameters.ParamByName(‘OutTime‘).Value:=Edit28.Text;

execSQL;

end;

Edit21.ReadOnly:=False;

s:=StrToInt(Edit21.Text)-StrToInt(Edit27.Text); file://計(jì)算出庫(kù)后庫(kù)存圖書數(shù)量

Edit21.Text:=IntToStr(s);

file://顯示出庫(kù)后庫(kù)存圖書數(shù)量

Edit21.ReadOnly:=True;

with datamoduleform.BookQuery do

begin

file://修改庫(kù)存圖書數(shù)量

close;

SQL.Clear;

SQL.Add(‘update BookRecord set Number1=:Number where BookID=:BookID‘);

Parameters.ParamByName(‘Number‘).Value:=s;

Parameters.ParamByName(‘BookID‘).Value:=Edit14.Text;

execSQL;

end;

MessageDlg(‘出庫(kù)記錄添加成功!‘,mtInformation,[mbok],0);

Edit14.Text:=‘‘;Edit14.SetFocus;

end;

end;

end;

§5.5 查詢功能的實(shí)現(xiàn)

查詢功能包括員工信息查詢,供應(yīng)商信息查詢,入庫(kù)信息查詢和出庫(kù)信息查詢。由于每一個(gè)功能的實(shí)現(xiàn)都差不太多,而且其窗體也差不太多,所以在這里只給出員工信息查詢窗體及其源代碼。

圖5.6 員工信息查詢窗體

procedure Tfindempform.SpeedButton1Click(Sender: TObject);

Var s1,s2,s3 :String;

begin

file://員工記錄查詢窗體查找按鈕事件

with datamoduleform.EmpQuery do

begin

close;

SQL.Clear;

SQL.Add(‘select * from Employee‘);

SQL.Add(‘where EmployeeID Like :EmpID and EmployeeName Like :Name and Grade Like :Grade‘);

file://實(shí)現(xiàn)模糊查詢功能

if Edit1.Text‘‘ then s1:=‘%‘+Edit1.Text+‘%‘ else s1:=‘%‘;

Parameters.ParamByName(‘EmpID‘).Value:=s1;

if Edit2.Text‘‘ then s2:=‘%‘+Edit2.Text+‘%‘ else s2:=‘%‘;

Parameters.ParamByName(‘Name‘).Value:=s2;

if Edit3.Text‘‘ then s3:=‘%‘+Edit3.Text+‘%‘ else s3:=‘%‘;

Parameters.ParamByName(‘Grade‘).Value:=s3;

open;

if FieldValues[‘EmployeeID‘]NULL

then findempform.Close

file://在找到記錄的情況下關(guān)閉查找窗口

else

begin

MessageDlg(‘沒(méi)有找到你所需要的記錄!‘,mtInformation,[mbOK],0);

Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;

close; SQL.Clear;

SQL.Add(‘select * from Employee‘);

file://刷新員工信息窗口

open;

end; end;

end;

§5.6 系統(tǒng)登陸窗體模塊的實(shí)現(xiàn)

由于系統(tǒng)登陸窗體中有一幅彩圖,在這里不便給出,而只給出了系統(tǒng)的實(shí)現(xiàn)。

var keyname: string; file://定義了一個(gè)全局變量,在key2中有調(diào)用

procedure Tkeyform.SpeedButton1Click(Sender: TObject);

var s:string;

file://登陸窗口登陸按鈕事件

begin

if (Edit1.Text=‘‘) then begin

MessageDlg(‘清輸入登陸姓名和密碼!‘,mtInformation,[mbok],0);

Edit1.SetFocus;

end

else begin

datamoduleform.KeyTable.Active:=true;

if not datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])

file://判斷登陸名是否存在

then begin

MessageDlg(‘登陸名錯(cuò)誤,請(qǐng)重新輸入!‘,mtInformation,[mbok],0);

Edit1.Text:=‘‘; Edit1.SetFocus;

end

else begin

with datamoduleform.KeyQuery do

begin

close; SQL.Clear;

SQL.Add(‘select * from Key where KeyName=:KeyName‘);

Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;

open;

s:=FieldValues[‘KeyNo‘];

end;

if sEdit2.Text file://判斷登陸密碼是否正確

then begin

MessageDlg(‘登陸密碼錯(cuò)誤,請(qǐng)重新輸入!‘,mtInformation,[mbok],0);

Edit2.Text:=‘‘; Edit2.SetFocus;

end

else begin

keyname:=Edit1.Text;

keyform.Hide;

mainform.Show;mainform.WindowState:=wsMaximized;

end; end; end;

end;

§5.7 用戶管理功能的實(shí)現(xiàn)

5.7.1 用戶管理主窗體

圖5.7 用戶管理主窗體

5.7.2 密碼修改窗體模塊的實(shí)現(xiàn)

圖5.8 密碼修改窗體

procedure Tkey2form.SpeedButton1Click(Sender: TObject);

begin

file://密碼修改窗口修改按鈕事件

if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)or(Edit3.Text=‘‘)

then begin

MessageDlg(‘請(qǐng)輸入完整的信息?!?,mtInformation,[mbok],0);

Edit1.SetFocus;

end

else begin

if Not datamoduleform.KeyTable.Locate(‘KeyNo‘,Edit1.Text,[])

then begin

MessageDlg(‘原密碼輸入錯(cuò)誤,不能修改新密碼!‘,mtInformation,[mbok],0);

Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;

end

else begin

if Edit2.TextEdit3.Text

then begin

MessageDlg(‘兩次密碼輸入不同,請(qǐng)重新輸入新密碼!‘,mtInformation,[mbok],0);

Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit2.SetFocus;

end

else begin

file://在數(shù)據(jù)庫(kù)中修改密碼

with datamoduleform.KeyQuery do

begin

close; SQL.Clear;

SQL.Add(‘update key set KeyNo=:KeyNo where KeyName=:KeyName‘);

Parameters.ParamByName(‘KeyName‘).Value:=keyname;

Parameters.ParamByName(‘KeyNo‘).Value:=Edit2.Text;

execSQL;

MessageDlg(‘密碼修改成功!‘,mtInformation,[mbok],0);

key2form.Close;

end; end; end; end;

end;

5.7.3 用戶注冊(cè)窗體模塊的實(shí)現(xiàn)

圖5.9 用戶注冊(cè)窗體

procedure Tkey3form.SpeedButton1Click(Sender: TObject);

begin

file://用戶注刪窗口注刪按鈕事件

if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)or(Edit3.Text=‘‘)

then begin

MessageDlg(‘請(qǐng)輸入完整的信息!‘,mtInformation,[mbok],0);

Edit1.SetFocus;

end

else begin

if datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])

file://判斷用戶名是否存在,系統(tǒng)不允許用戶名重復(fù)

then begin

MessageDlg(‘用戶名已存在,請(qǐng)輸入新的用戶名和密碼!‘,

mtInformation,[mbok],0);

Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;

end

else begin

if Edit2.TextEdit3.Text

then begin

MessageDlg(‘您輸入的兩個(gè)密碼不相同,請(qǐng)重新輸入!‘,mtInformation,[mbok],0);

Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit2.SetFocus;

end

else begin

with datamoduleform.KeyQuery do

file://在數(shù)據(jù)庫(kù)中添加該用戶

begin

close;

SQL.Clear;

SQL.Add(‘insert into Key values(:KeyName,:KeyNo)‘);

Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;

Parameters.ParamByName(‘KeyNo‘).Value:=Edit2.Text;

execSQL;

end;

MessageDlg(‘新用戶添加成功,您可以繼續(xù)添加用戶,或按“取消”退出。‘,mtInformation,[mbok],0);

Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;

end; end; end;

end;

5.7.4 用戶注銷窗體模塊的實(shí)現(xiàn)

圖5.10 用戶注銷窗體

procedure Tkey4form.SpeedButton1Click(Sender: TObject);

var s:string;

begin

file://用戶注銷窗口注銷按鈕事件

if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)

then MessageDlg(‘請(qǐng)輸入完整的信息!‘,mtInformation,[mbok],0)

else begin

if Not datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])

file://判斷用戶名是否存在,用戶名必須存在,才可以刪除

then begin

MessageDlg(‘您所輸入的用戶名不存在,請(qǐng)重新輸入或按“取消”退出。‘,

mtInformation,[mbok],0);

Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit1.SetFocus;

end

else begin

with datamoduleform.KeyQuery do

begin

close;

SQL.Clear;

SQL.Add(‘select * from Key where KeyName=:KeyName‘);

Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;

open;

s:=FieldValues[‘KeyNo‘];

end;

if sEdit2.Text file://判斷該用戶名下的密碼是否正確

then begin

MessageDlg(‘您所輸入的密碼不正確,請(qǐng)重新輸入或按“取消”退出?!?,

mtInformation,[mbok],0);

Edit2.Text:=‘‘;Edit2.SetFocus;

end

else begin

file://從數(shù)據(jù)庫(kù)中刪除該用戶

with datamoduleform.KeyQuery do

begin

close;

SQL.Clear;

SQL.Add(‘delete from Key where KeyName=:KeyName‘);

Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;

execSQL;

end;

MessageDlg(‘用戶已成功刪除,您可以繼續(xù)刪除用戶,或按“取消”退出?!?,

mtInformation,[mbok],0);

Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit1.SetFocus;

end; end; end;

end;

結(jié)束語(yǔ)

本系統(tǒng)是一個(gè)面向小型圖書企業(yè),具有一定實(shí)用性的數(shù)據(jù)庫(kù)信息管理系統(tǒng)。它主要完成對(duì)圖書倉(cāng)庫(kù)的一系列管理,包括入庫(kù)、出庫(kù)、庫(kù)存以及員工和供應(yīng)商信息管理。本系統(tǒng)采用當(dāng)前流行的面向?qū)ο蟮拈_(kāi)發(fā)工具—Delphi來(lái)完成整個(gè)系統(tǒng)的設(shè)計(jì),在數(shù)據(jù)庫(kù)的設(shè)計(jì)上利用了Access的便利性和實(shí)用性。

本系統(tǒng)具有相當(dāng)?shù)膶?shí)用功能。在查詢方面,系統(tǒng)實(shí)現(xiàn)了多條件任意字段的模糊查詢,同時(shí)在分類查詢上實(shí)現(xiàn)了動(dòng)態(tài)生成,系統(tǒng)可以自動(dòng)識(shí)別用戶不同的輸入。在圖書入庫(kù)、出庫(kù)和庫(kù)存三者之間建立了良好的鏈接關(guān)系,某一部分地修改均會(huì)自動(dòng)引發(fā)系統(tǒng)對(duì)與其相關(guān)的部分進(jìn)行連鎖修改。在用戶管理方面,系統(tǒng)較好地實(shí)現(xiàn)了用戶注冊(cè),用戶注銷和密碼修改等各項(xiàng)功能。

系統(tǒng)在設(shè)計(jì)過(guò)程中不可避免地遇到了各種各樣的問(wèn)題,由于整個(gè)系統(tǒng)完全都是由個(gè)人設(shè)計(jì)的,有關(guān)Delphi許多細(xì)節(jié)問(wèn)題都要靠自己去摸索,加之本人水平有限,并沒(méi)有完全地理解Delphi的強(qiáng)大功能,而且還存在著許多不足之處。如:

受開(kāi)發(fā)條件和開(kāi)發(fā)時(shí)間的限制,本系統(tǒng)只利用了本地?cái)?shù)據(jù)庫(kù)Access,它同應(yīng)用程序處于同一系統(tǒng)中,能存儲(chǔ)的數(shù)據(jù)量也有一定限制,并沒(méi)有發(fā)揮出Delphi其數(shù)據(jù)庫(kù)方面的優(yōu)勢(shì);

報(bào)表打印功能尚不夠全面完善,不能實(shí)現(xiàn)動(dòng)態(tài)報(bào)表;

在一些數(shù)據(jù)輸入時(shí)沒(méi)有及時(shí)的進(jìn)行數(shù)據(jù)格式校驗(yàn),不能保證數(shù)據(jù)輸入的絕對(duì)正確性。

由于時(shí)間關(guān)系,系統(tǒng)功能實(shí)現(xiàn)不夠完善,使用不是很方便,比如,沒(méi)有實(shí)現(xiàn)多條記錄的連鎖刪除和添加以及數(shù)據(jù)的導(dǎo)入功能。

這些都是需要完善的地方,該系統(tǒng)離實(shí)際使用也還有相當(dāng)?shù)木嚯x,需要我進(jìn)行不斷地補(bǔ)充和完善。

通過(guò)本次畢業(yè)設(shè)計(jì)我學(xué)到了不少新的東西,也發(fā)現(xiàn)了大量的問(wèn)題,有些在設(shè)計(jì)過(guò)程中已經(jīng)解決,有些還有待今后慢慢學(xué)習(xí)。只要學(xué)習(xí)就會(huì)有更多的問(wèn)題,有更多的難點(diǎn),但也會(huì)有更多的收獲。

考 文 獻(xiàn)

[1] 鄭榮貴、黃平、谷會(huì)東,Delphi 6.0數(shù)據(jù)庫(kù)開(kāi)發(fā)與應(yīng)用,中科多媒體電子出版社,2002

[2] 伍俊良,Delphi 6控件應(yīng)用實(shí)例教程,北京希望電子出版社,2002

[3] 盧國(guó)俊,Delphi 6數(shù)據(jù)庫(kù)開(kāi)發(fā),電子工業(yè)出版社,2002

[4] 邊萌,Delphi 編程起步,機(jī)械工業(yè)出版社,2002

[5] 伍俊良,Delphi 6課程設(shè)計(jì)案例精編,中國(guó)水利水電出版社,2002

第5篇:倉(cāng)庫(kù)管理系統(tǒng)設(shè)計(jì)的意義范文

關(guān)鍵詞:課程建設(shè);課程設(shè)計(jì);計(jì)算機(jī)軟件

作者簡(jiǎn)介:張艷(1976-),女,河南南陽(yáng)人,上海理工大學(xué)光電信息與計(jì)算機(jī)工程學(xué)院,講師。(上海 200093)

中圖分類號(hào):G642.0 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-0079(2013)05-0096-01

計(jì)算機(jī)是一門技術(shù)性、工程性和應(yīng)用性很強(qiáng)的學(xué)科,教育部高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會(huì)的發(fā)展戰(zhàn)略研究報(bào)告中也指出:計(jì)算機(jī)專業(yè)的人才應(yīng)該被分為科學(xué)型、工程型、應(yīng)用型三類,而絕大多數(shù)應(yīng)該是工程型和應(yīng)用型的。許多高校注重學(xué)生專業(yè)能力的培養(yǎng),紛紛開(kāi)設(shè)實(shí)踐類課程以滿足信息社會(huì)對(duì)實(shí)用型人才的需求。因此,如何建設(shè)實(shí)踐類課程無(wú)疑是擺在每位一線專業(yè)教師面前的重要課題。本文以“應(yīng)用軟件課程設(shè)計(jì)”課程的建設(shè)為主要探討對(duì)象,介紹了該課程的設(shè)置意義、教學(xué)方法和實(shí)施細(xì)則,希望能對(duì)計(jì)算機(jī)專業(yè)實(shí)踐類課程的建設(shè)和教學(xué)以及學(xué)生的就業(yè)有所幫助。

一、課程設(shè)置的重要意義

在大學(xué)里,設(shè)置一門課程,不能只關(guān)注這門課程所含的內(nèi)容,更要考慮本科教育培養(yǎng)學(xué)生基本專業(yè)能力、可持續(xù)發(fā)展能力等這些本質(zhì)性的問(wèn)題。計(jì)算機(jī)學(xué)科問(wèn)題求解的基本思路是“問(wèn)題形式化描述計(jì)算機(jī)化”,以抽象、理論、設(shè)計(jì)為其學(xué)科形態(tài)。按照計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)本科生的培養(yǎng)目標(biāo),到學(xué)生畢業(yè)時(shí)應(yīng)具備計(jì)算思維;算法設(shè)計(jì)與分析;程序設(shè)計(jì)與實(shí)現(xiàn)系統(tǒng)的認(rèn)知、分析、開(kāi)發(fā)與應(yīng)用等四大基本能力。

“應(yīng)用軟件課程設(shè)計(jì)”課程面向大三的學(xué)生開(kāi)設(shè),在計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)四年本科教學(xué)中,是以前期的“數(shù)據(jù)結(jié)構(gòu)”、“計(jì)算方法”、“離散數(shù)學(xué)”、“軟件系統(tǒng)”(包括編譯原理,操作系統(tǒng))、“軟件工程”、“程序設(shè)計(jì)”、“數(shù)據(jù)庫(kù)原理”以及“計(jì)算機(jī)網(wǎng)絡(luò)與通信”等課程為基礎(chǔ)的一門軟件開(kāi)發(fā)技術(shù)綜合應(yīng)用的專業(yè)課程。該課程讓學(xué)生綜合運(yùn)用專業(yè)知識(shí),通過(guò)動(dòng)手實(shí)踐,以團(tuán)隊(duì)協(xié)作的方式根據(jù)軟件工程的原理選擇難度適中的課題,完成網(wǎng)絡(luò)環(huán)境下基于B/S架構(gòu)的綜合應(yīng)用軟件的系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)任務(wù)。課程設(shè)置的目的就是通過(guò)本課程的系統(tǒng)學(xué)習(xí)與實(shí)訓(xùn),達(dá)到全面提升學(xué)生綜合應(yīng)用軟件的實(shí)際開(kāi)發(fā)能力和團(tuán)隊(duì)合作能力,以解決傳統(tǒng)教學(xué)中理論學(xué)習(xí)與工程應(yīng)用相脫節(jié)、單門課程孤立地學(xué)習(xí)與缺乏正確運(yùn)用學(xué)科體系的理念來(lái)指導(dǎo)學(xué)生實(shí)現(xiàn)綜合技術(shù)全面應(yīng)用的突出問(wèn)題,以期有效地實(shí)現(xiàn)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)本科學(xué)生的培養(yǎng)目標(biāo)。

課程開(kāi)設(shè)近10年的實(shí)踐證明,學(xué)生綜合運(yùn)用計(jì)算機(jī)專業(yè)基礎(chǔ)知識(shí),科學(xué)設(shè)計(jì)、開(kāi)發(fā)軟件,合理進(jìn)行軟件開(kāi)發(fā)的能力得到全方位的、實(shí)戰(zhàn)型的鍛煉,不僅實(shí)現(xiàn)了專業(yè)理論知識(shí)與實(shí)踐有效地相互結(jié)合,而且很好地鍛煉了學(xué)生的動(dòng)手實(shí)踐能力和團(tuán)隊(duì)協(xié)作能力,為日后的擇業(yè)起到很好的鋪墊作用。

二、“應(yīng)用軟件課程設(shè)計(jì)”的教學(xué)內(nèi)容

“應(yīng)用軟件課程設(shè)計(jì)”主要以曹渠江教授編寫的《綜合運(yùn)用軟件設(shè)計(jì)》一書為教材,輔助以課程網(wǎng)站和網(wǎng)絡(luò)上的各類學(xué)習(xí)資源,要求學(xué)生利用軟件工程、面向?qū)ο蟪绦蛟O(shè)計(jì)的思想,根據(jù)課程項(xiàng)目任務(wù)和功能完成課題的需求分析;制定課程項(xiàng)目詳細(xì)的時(shí)間進(jìn)度規(guī)范;利用面向?qū)ο蟪绦蛟O(shè)計(jì)、計(jì)算機(jī)網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)原理、多媒體技術(shù)等相關(guān)知識(shí)來(lái)進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)與開(kāi)發(fā);熟悉和掌握網(wǎng)絡(luò)應(yīng)用的開(kāi)發(fā)環(huán)境,分析課題中技術(shù)難點(diǎn)并進(jìn)行技術(shù)攻關(guān);根據(jù)制定的時(shí)間進(jìn)度計(jì)劃和需求分析,進(jìn)行網(wǎng)絡(luò)環(huán)境下基于B/S架構(gòu)的系統(tǒng)軟件模塊的編寫、開(kāi)發(fā)與整合;對(duì)整個(gè)項(xiàng)目所有模塊進(jìn)行代碼集成測(cè)試、軟件產(chǎn)品完善;最后提交課程設(shè)計(jì)個(gè)人報(bào)告、課程設(shè)計(jì)小組報(bào)告以及完整程序。整個(gè)課程總學(xué)時(shí)為64學(xué)時(shí),主要以機(jī)房實(shí)踐為主,通過(guò)演示軟件、答辯的形式公開(kāi)、公平地評(píng)定成績(jī)。

三、應(yīng)用軟件課程設(shè)計(jì)的實(shí)施方法

1.本課程的實(shí)施原則

實(shí)踐類課程不同于其他計(jì)算機(jī)專業(yè)課程,主要以實(shí)踐為主,這就比較難控制進(jìn)度和公正地評(píng)價(jià)學(xué)習(xí)成績(jī),因此筆者制定了如下實(shí)施原則:

由教師提供網(wǎng)上新聞管理系統(tǒng)、網(wǎng)上寵物商店、網(wǎng)上公文流轉(zhuǎn)系統(tǒng)、藥品管理系統(tǒng)、繼續(xù)教育管理系統(tǒng)、網(wǎng)上用戶投訴系統(tǒng)、在線同學(xué)錄、企業(yè)倉(cāng)庫(kù)管理系統(tǒng)、班級(jí)相冊(cè)管理系統(tǒng)、在線學(xué)籍管理系統(tǒng)、網(wǎng)上聊天室、客戶關(guān)系管理系統(tǒng)等難度適中的十幾個(gè)項(xiàng)目,對(duì)于每個(gè)項(xiàng)目都講明設(shè)計(jì)要求和要求實(shí)現(xiàn)的基本功能;按照自愿原則,四到六個(gè)同學(xué)組成一個(gè)項(xiàng)目小組,推選出一位組長(zhǎng)。對(duì)于沒(méi)被組合的同學(xué),由教師統(tǒng)一安排,每組配備一位有項(xiàng)目開(kāi)發(fā)與項(xiàng)目管理經(jīng)驗(yàn)的研究生為指導(dǎo)教師,負(fù)責(zé)學(xué)生的上機(jī)輔導(dǎo)、課外答疑、技術(shù)咨詢與指導(dǎo);每組由組長(zhǎng)填報(bào)所有成員的個(gè)人信息,以便師生之間緊密聯(lián)系;每組組長(zhǎng)代表小組全體成員與指導(dǎo)教師商定每周一次的輔導(dǎo)、提問(wèn)與答疑的時(shí)間,并互通聯(lián)絡(luò)信息;教師每周安排兩次上機(jī),每次4個(gè)學(xué)時(shí)。最初的3周(12學(xué)時(shí))進(jìn)行理論授課,主要講課程基本要求和安排以及軟件工程、軟件開(kāi)發(fā)工具和方法的基本知識(shí);設(shè)立課程公共電子郵箱,上傳所有課程資料、進(jìn)度安排和學(xué)生要提交的各個(gè)階段的文檔模板,每位學(xué)生必須根據(jù)給定的工作模板與課程要求,在不同時(shí)間節(jié)點(diǎn)完成個(gè)人與小組的初期、中期、末期三個(gè)時(shí)期的階段報(bào)告和最終的課程設(shè)計(jì)報(bào)告;最后進(jìn)行大組公開(kāi)演示和答辯,全體指導(dǎo)教師根據(jù)答辯情況、提交的報(bào)告質(zhì)量、平時(shí)上機(jī)表現(xiàn)與平時(shí)的檢查情況集體打分,綜合評(píng)定出每位學(xué)生的最終成績(jī)。

2.本課程的教學(xué)安排

整個(gè)課程在實(shí)際教學(xué)過(guò)程中,按照16周的總體時(shí)間共分為以下5個(gè)階段。

(1)課程設(shè)計(jì)第一階段(3周):認(rèn)真學(xué)習(xí)教材和閱讀課題任務(wù)說(shuō)明書,根據(jù)軟件工程的理論和選定項(xiàng)目任務(wù)完成課題的需求分析;制定本課題的實(shí)施方案,完成個(gè)人角色任務(wù)分配等各類文檔和開(kāi)發(fā)規(guī)范;確定課題技術(shù)難點(diǎn)及其攻關(guān)措施;熟悉和掌握.NET的開(kāi)發(fā)環(huán)境、后臺(tái)數(shù)據(jù)庫(kù)開(kāi)發(fā)工具以及與課題相關(guān)的開(kāi)發(fā)工具。在本階段結(jié)束時(shí),向指導(dǎo)教師提交課程設(shè)計(jì)個(gè)人及小組的初期報(bào)告。

(2)課程設(shè)計(jì)第二階段(4周):根據(jù)制定的時(shí)間進(jìn)度計(jì)劃和需求分析,進(jìn)行系統(tǒng)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)及應(yīng)用軟件的初步模塊編寫與開(kāi)發(fā)。在本階段結(jié)束時(shí),向指導(dǎo)教師提交課程設(shè)計(jì)個(gè)人與小組的中期報(bào)告以及個(gè)人階段性開(kāi)發(fā)的程序源碼。

(3)課程設(shè)計(jì)第三階段(4周):本階段是項(xiàng)目開(kāi)發(fā)的實(shí)質(zhì)性階段,對(duì)整個(gè)項(xiàng)目所有模塊進(jìn)行開(kāi)發(fā)并進(jìn)行代碼集成測(cè)試、完善整個(gè)軟件產(chǎn)品。在本階段結(jié)束時(shí),向指導(dǎo)教師提交課程設(shè)計(jì)末期的個(gè)人和小組的報(bào)告。

(4)課程設(shè)計(jì)第四階段(3周):完成全部代碼的開(kāi)發(fā)工作,檢查并匯總本課題小組成果,課題小組完成項(xiàng)目開(kāi)發(fā)總結(jié)報(bào)告,個(gè)人完成各自的課程設(shè)計(jì)個(gè)人報(bào)告。在本階段結(jié)束時(shí),向指導(dǎo)教師提交課程設(shè)計(jì)個(gè)人與小組的報(bào)告以及小組的完整的、可供運(yùn)行的代碼文檔。

(5)最后是課程設(shè)計(jì)綜合評(píng)價(jià)階段(2周):對(duì)本課題設(shè)計(jì)項(xiàng)目綜合評(píng)價(jià),最后進(jìn)行大組公開(kāi)演示和答辯,檢查程序運(yùn)行效果;全體指導(dǎo)教師根據(jù)答辯情況、提交的報(bào)告質(zhì)量與平時(shí)的上機(jī)情況集體打分,綜合評(píng)定出每位學(xué)生的最終成績(jī),力求公平、公正。

另外,在課程結(jié)束后會(huì)召開(kāi)師生座談會(huì),集中講評(píng)、總結(jié)課程的教學(xué)、學(xué)習(xí)情況,征求學(xué)生對(duì)課程和教學(xué)方面的建議和意見(jiàn),同時(shí)給學(xué)生指出專業(yè)學(xué)習(xí)的努力方向,學(xué)生給教師提出今后課程需改進(jìn)的地方,使教與學(xué)相互促進(jìn)從而不斷完善該課程。

四、結(jié)論

“應(yīng)用軟件課程設(shè)計(jì)”在上海理工大學(xué)已經(jīng)開(kāi)設(shè)10年,是上海理工大學(xué)精品課程與上海市教委重點(diǎn)課程建設(shè)項(xiàng)目,它很好地體現(xiàn)了計(jì)算機(jī)專業(yè)課程的系統(tǒng)性、完整性、科學(xué)性和原理性,有效鍛煉了學(xué)生的動(dòng)手實(shí)踐、軟件開(kāi)發(fā)和團(tuán)隊(duì)協(xié)作能力,對(duì)提高學(xué)生的專業(yè)能力和專業(yè)素質(zhì)起到了關(guān)鍵作用。任課教師在教學(xué)實(shí)踐中付出了很大的努力,不斷完善課程的教學(xué)模式和評(píng)價(jià)手段,積累了大量經(jīng)驗(yàn),該課程多次受到學(xué)生的好評(píng),很多已就業(yè)的學(xué)生反饋的信息表明:該課程對(duì)學(xué)生專業(yè)素養(yǎng)的培養(yǎng)和從學(xué)校到職場(chǎng)的銜接起到了很好的作用,為計(jì)算機(jī)專業(yè)的實(shí)踐教學(xué)探索出一條切實(shí)可行的道路。

參考文獻(xiàn):

中文精品一卡2卡3卡4更新| 久热这里只有精品99| 国产精品人妻久久久久久| 亚洲精品日韩av片在线观看| 国产综合懂色| 午夜亚洲福利在线播放| 高清午夜精品一区二区三区| 18禁动态无遮挡网站| 一个人观看的视频www高清免费观看| 欧美最新免费一区二区三区| 一级黄片播放器| 成人国产av品久久久| 国产一区二区三区综合在线观看 | 久久久久久久久久成人| 晚上一个人看的免费电影| 久久99精品国语久久久| 欧美国产精品一级二级三级 | 国内揄拍国产精品人妻在线| 成年女人在线观看亚洲视频 | 亚洲精品成人av观看孕妇| 大片电影免费在线观看免费| 欧美日韩在线观看h| 极品教师在线视频| 久久久成人免费电影| 白带黄色成豆腐渣| 亚洲天堂国产精品一区在线| 青春草亚洲视频在线观看| 亚洲激情五月婷婷啪啪| 午夜免费观看性视频| 国产亚洲精品久久久com| 日日撸夜夜添| 人体艺术视频欧美日本| 亚洲精品一二三| 丝袜脚勾引网站| 高清日韩中文字幕在线| 国产免费一级a男人的天堂| 男女那种视频在线观看| 男人和女人高潮做爰伦理| 亚洲国产成人一精品久久久| 欧美激情在线99| 欧美精品一区二区大全| 国产午夜精品一二区理论片| 欧美xxxx性猛交bbbb| 夜夜看夜夜爽夜夜摸| 热re99久久精品国产66热6| av在线播放精品| 大片电影免费在线观看免费| 国产黄色免费在线视频| 欧美老熟妇乱子伦牲交| 香蕉精品网在线| 久久精品夜色国产| 插阴视频在线观看视频| 日韩av免费高清视频| 欧美日韩一区二区视频在线观看视频在线 | 国产老妇女一区| 免费人成在线观看视频色| 美女内射精品一级片tv| 免费播放大片免费观看视频在线观看| 亚洲av二区三区四区| 日韩亚洲欧美综合| 国产亚洲午夜精品一区二区久久 | 一本色道久久久久久精品综合| 99热这里只有是精品50| 日韩 亚洲 欧美在线| 久久精品综合一区二区三区| 91久久精品电影网| 欧美高清性xxxxhd video| 国内精品宾馆在线| 深爱激情五月婷婷| 少妇人妻 视频| 又黄又爽又刺激的免费视频.| 国产亚洲av嫩草精品影院| 草草在线视频免费看| 在线看a的网站| 18+在线观看网站| 久热久热在线精品观看| videossex国产| 91aial.com中文字幕在线观看| 高清视频免费观看一区二区| 久久精品国产鲁丝片午夜精品| 亚洲精品日本国产第一区| 18禁在线无遮挡免费观看视频| 99久久精品热视频| 寂寞人妻少妇视频99o| 99热6这里只有精品| 少妇猛男粗大的猛烈进出视频 | 水蜜桃什么品种好| 一本久久精品| 亚洲国产欧美人成| 肉色欧美久久久久久久蜜桃 | 精品久久久久久电影网| freevideosex欧美| 一个人看的www免费观看视频| 亚洲三级黄色毛片| 18禁在线无遮挡免费观看视频| 久久99热这里只有精品18| 2022亚洲国产成人精品| 人妻制服诱惑在线中文字幕| 国产片特级美女逼逼视频| 国产成年人精品一区二区| 中文欧美无线码| av天堂中文字幕网| 最近最新中文字幕大全电影3| 乱系列少妇在线播放| 色播亚洲综合网| 成人国产av品久久久| 最近手机中文字幕大全| 国产精品爽爽va在线观看网站| 免费播放大片免费观看视频在线观看| 亚洲av日韩在线播放| 色5月婷婷丁香| 久久精品国产亚洲网站| 免费少妇av软件| 国产黄片美女视频| 国产在视频线精品| av一本久久久久| 亚洲精品视频女| av网站免费在线观看视频| 精品久久久噜噜| 直男gayav资源| av女优亚洲男人天堂| videossex国产| 超碰av人人做人人爽久久| 国产永久视频网站| 特级一级黄色大片| 国产伦理片在线播放av一区| 欧美高清成人免费视频www| 久久久久性生活片| 别揉我奶头 嗯啊视频| 国产熟女欧美一区二区| 久久韩国三级中文字幕| 男人和女人高潮做爰伦理| 精品一区二区三区视频在线| 久久久久久久精品精品| 亚洲精品自拍成人| 国产乱人视频| 免费av毛片视频| 久久久久久久午夜电影| 成人国产av品久久久| 又爽又黄无遮挡网站| 人妻少妇偷人精品九色| 久久久久性生活片| 欧美极品一区二区三区四区| av黄色大香蕉| 久久这里有精品视频免费| 91狼人影院| 老司机影院毛片| 日韩欧美 国产精品| 日本与韩国留学比较| 3wmmmm亚洲av在线观看| 精品一区二区免费观看| 自拍欧美九色日韩亚洲蝌蚪91 | 黄色一级大片看看| 亚洲国产高清在线一区二区三| 亚洲成人av在线免费| 国产成人精品久久久久久| 国产黄色免费在线视频| 久久精品国产自在天天线| 99久久中文字幕三级久久日本| 亚洲欧洲日产国产| av在线天堂中文字幕| 国产成人a∨麻豆精品| 美女cb高潮喷水在线观看| 51国产日韩欧美| 在线亚洲精品国产二区图片欧美 | 欧美高清成人免费视频www| 国产一区有黄有色的免费视频| 青春草视频在线免费观看| 成人午夜精彩视频在线观看| 久久亚洲国产成人精品v| 人妻制服诱惑在线中文字幕| 免费av不卡在线播放| 日本免费在线观看一区| 国产成人精品久久久久久| 天天躁夜夜躁狠狠久久av| 久久久午夜欧美精品| 亚洲精品日韩av片在线观看| 久久精品国产自在天天线| 搡女人真爽免费视频火全软件| 亚洲国产精品专区欧美| 一本—道久久a久久精品蜜桃钙片 精品乱码久久久久久99久播 | 综合色丁香网| 大片免费播放器 马上看| 插阴视频在线观看视频| 在线免费十八禁| 国产乱来视频区| 亚洲av不卡在线观看| 又爽又黄a免费视频| 精品一区二区三卡| 国产又色又爽无遮挡免| 伦精品一区二区三区| 国产黄片美女视频| 欧美xxⅹ黑人| 日韩av不卡免费在线播放| 精品人妻视频免费看| 少妇人妻 视频| av又黄又爽大尺度在线免费看| 欧美国产精品一级二级三级 | 美女脱内裤让男人舔精品视频| 亚洲av.av天堂| 日本av手机在线免费观看| 日日摸夜夜添夜夜爱| 免费观看的影片在线观看| 国产美女午夜福利| 欧美丝袜亚洲另类| 内地一区二区视频在线| 精品久久久噜噜| 色5月婷婷丁香| 色网站视频免费| 日韩一本色道免费dvd| 黄片wwwwww| 国产精品人妻久久久影院| 亚洲最大成人av| 美女内射精品一级片tv| 下体分泌物呈黄色| 男人狂女人下面高潮的视频| 久久精品国产亚洲av天美| 国产色婷婷99| 国产伦在线观看视频一区| 国产老妇女一区| 亚洲精品日韩在线中文字幕| 在线观看一区二区三区| 爱豆传媒免费全集在线观看| 久久影院123| 卡戴珊不雅视频在线播放| 精品一区二区三区视频在线| 婷婷色av中文字幕| 又黄又爽又刺激的免费视频.| 欧美日本视频| 高清午夜精品一区二区三区| 男女下面进入的视频免费午夜| 一级毛片久久久久久久久女| 久久精品国产亚洲网站| 免费av观看视频| 汤姆久久久久久久影院中文字幕| 亚洲怡红院男人天堂| 色视频在线一区二区三区| 国产亚洲一区二区精品| 波多野结衣巨乳人妻| 亚洲欧美精品自产自拍| 精品一区二区免费观看| 性色avwww在线观看| 18禁动态无遮挡网站| 小蜜桃在线观看免费完整版高清| 成人毛片a级毛片在线播放| 国产精品久久久久久精品电影| 激情 狠狠 欧美| 日韩免费高清中文字幕av| 国产久久久一区二区三区| 国产在线男女| 国产熟女欧美一区二区| 精品国产乱码久久久久久小说| 国产男人的电影天堂91| 国产免费一区二区三区四区乱码| 久久精品夜色国产| 国产 一区 欧美 日韩| 精品一区二区三卡| 免费看不卡的av| 精品熟女少妇av免费看| 看非洲黑人一级黄片| 国产黄a三级三级三级人| 久久午夜福利片| 国产精品一二三区在线看| 亚洲人成网站高清观看| 日韩国内少妇激情av| 日韩人妻高清精品专区| 亚洲av.av天堂| 99九九线精品视频在线观看视频| 日本欧美国产在线视频| 国产精品蜜桃在线观看| 亚洲人成网站在线观看播放| 99视频精品全部免费 在线| 免费看a级黄色片| 精品久久久久久电影网| 欧美日韩视频高清一区二区三区二| 国产人妻一区二区三区在| 亚洲成人一二三区av| 日韩欧美一区视频在线观看 | 国产av不卡久久| 丰满少妇做爰视频| 久久久久久久大尺度免费视频| 人人妻人人看人人澡| 寂寞人妻少妇视频99o| 国产精品秋霞免费鲁丝片| 少妇裸体淫交视频免费看高清| 国产精品一区www在线观看| 亚洲国产精品国产精品| 久久久久国产网址| 国产 一区 欧美 日韩| 99re6热这里在线精品视频| 国产乱人视频| 亚洲精品色激情综合| 美女内射精品一级片tv| 极品教师在线视频| 日日摸夜夜添夜夜添av毛片| 国内少妇人妻偷人精品xxx网站| 各种免费的搞黄视频| 欧美成人a在线观看| 日本黄色片子视频| 人妻 亚洲 视频| 国产精品无大码| 汤姆久久久久久久影院中文字幕| 大码成人一级视频| 国产免费一区二区三区四区乱码| 免费看日本二区| kizo精华| 免费观看av网站的网址| 搡女人真爽免费视频火全软件| 黄色怎么调成土黄色| 秋霞在线观看毛片| 国产伦精品一区二区三区四那| av.在线天堂| 啦啦啦在线观看免费高清www| 精品少妇久久久久久888优播| 97精品久久久久久久久久精品| 欧美一级a爱片免费观看看| 国产高清不卡午夜福利| 日韩伦理黄色片| 精品少妇久久久久久888优播| 人妻系列 视频| 人人妻人人看人人澡| 久久精品人妻少妇| 国产一区亚洲一区在线观看| 久久久久九九精品影院| av在线app专区| 成人亚洲欧美一区二区av| 精品国产乱码久久久久久小说| 天美传媒精品一区二区| 欧美3d第一页| 麻豆成人av视频| 欧美日韩在线观看h| 久久人人爽av亚洲精品天堂 | 国产精品一区www在线观看| 久久精品熟女亚洲av麻豆精品| 国产成人精品久久久久久| 日韩人妻高清精品专区| 日韩av免费高清视频| 在现免费观看毛片| 欧美一级a爱片免费观看看| 欧美xxⅹ黑人| 精品午夜福利在线看| 久久久色成人| 在线观看一区二区三区激情| 国产精品一区二区三区四区免费观看| 婷婷色综合大香蕉| 亚洲欧美日韩卡通动漫| 嘟嘟电影网在线观看| 内射极品少妇av片p| 欧美日韩视频精品一区| 国产综合精华液| 啦啦啦啦在线视频资源| 精品少妇黑人巨大在线播放| 成人黄色视频免费在线看| 日韩成人av中文字幕在线观看| 一级av片app| 高清视频免费观看一区二区| 精品人妻视频免费看| 国产黄片视频在线免费观看| 嘟嘟电影网在线观看| 91狼人影院| 深夜a级毛片| av在线播放精品| 免费黄网站久久成人精品| 女人久久www免费人成看片| 久久久久精品久久久久真实原创| 在线观看免费高清a一片| 亚洲av在线观看美女高潮| 三级男女做爰猛烈吃奶摸视频| 免费av毛片视频| 大香蕉97超碰在线| 精品视频人人做人人爽| 91久久精品电影网| 狂野欧美激情性xxxx在线观看| 成年免费大片在线观看| 特级一级黄色大片| 男女下面进入的视频免费午夜| 亚洲高清免费不卡视频| 新久久久久国产一级毛片| av.在线天堂| 男女边吃奶边做爰视频| 在线免费观看不下载黄p国产| 尾随美女入室| 国产一区二区在线观看日韩| 国产免费一区二区三区四区乱码| 国产 一区 欧美 日韩| 麻豆久久精品国产亚洲av| 欧美国产精品一级二级三级 | 久久99蜜桃精品久久| 日本爱情动作片www.在线观看| 亚洲人成网站在线播| 在线天堂最新版资源| 一级片'在线观看视频| 一级黄片播放器| 亚洲最大成人中文| 亚洲综合色惰| 国产淫片久久久久久久久| 在线播放无遮挡| 少妇被粗大猛烈的视频| 一级毛片我不卡| 久久精品熟女亚洲av麻豆精品| 亚洲精品自拍成人| 日本av手机在线免费观看| 国产久久久一区二区三区| 日本-黄色视频高清免费观看| 欧美另类一区| 国产精品一二三区在线看| 伦理电影大哥的女人| 国产成年人精品一区二区| 最近的中文字幕免费完整| 99re6热这里在线精品视频| 18禁裸乳无遮挡动漫免费视频 | 91久久精品电影网| 欧美性猛交╳xxx乱大交人| 成年av动漫网址| 高清欧美精品videossex| 赤兔流量卡办理| 最新中文字幕久久久久| 久久久色成人| 人妻一区二区av| 成人国产麻豆网| 国产淫片久久久久久久久| 在线精品无人区一区二区三 | 亚洲自偷自拍三级| 99热这里只有是精品在线观看| 国产高清不卡午夜福利| 日本猛色少妇xxxxx猛交久久| 超碰97精品在线观看| 一级毛片黄色毛片免费观看视频| 欧美另类一区| 亚洲不卡免费看| 天天躁夜夜躁狠狠久久av| 天美传媒精品一区二区| 久久久久久久亚洲中文字幕| 欧美亚洲 丝袜 人妻 在线| 成人无遮挡网站| 亚洲精品一二三| 久久久久久久久大av| 久久久久性生活片| 国产老妇女一区| 久久久精品欧美日韩精品| 国产日韩欧美亚洲二区| 免费高清在线观看视频在线观看| 好男人视频免费观看在线| 午夜免费男女啪啪视频观看| 国产精品av视频在线免费观看| 亚洲欧美一区二区三区国产| 亚洲最大成人中文| 国产亚洲午夜精品一区二区久久 | 人人妻人人澡人人爽人人夜夜| 亚洲精品乱久久久久久| 成人鲁丝片一二三区免费| 你懂的网址亚洲精品在线观看| 18禁在线播放成人免费| 夫妻午夜视频| 国产在视频线精品| 欧美激情国产日韩精品一区| 自拍欧美九色日韩亚洲蝌蚪91 | av播播在线观看一区| 亚洲av免费高清在线观看| 搞女人的毛片| 国产av不卡久久| 亚洲图色成人| 国产精品偷伦视频观看了| 男人和女人高潮做爰伦理| 熟女电影av网| 国语对白做爰xxxⅹ性视频网站| av天堂中文字幕网| 在线观看免费高清a一片| 国产毛片在线视频| 18禁在线播放成人免费| 亚洲精华国产精华液的使用体验| 一级毛片 在线播放| 免费黄色在线免费观看| 精品国产露脸久久av麻豆| av国产精品久久久久影院| 秋霞伦理黄片| 黑人高潮一二区| 亚洲图色成人| 2022亚洲国产成人精品| 99久国产av精品国产电影| 岛国毛片在线播放| 男女国产视频网站| 国产成人精品一,二区| 26uuu在线亚洲综合色| 三级国产精品片| 国内少妇人妻偷人精品xxx网站| 插阴视频在线观看视频| 99久久九九国产精品国产免费| 一级二级三级毛片免费看| 99久久精品一区二区三区| 久久久久久伊人网av| 亚洲精品国产av蜜桃| 亚洲自拍偷在线| 少妇人妻精品综合一区二区| av.在线天堂| 国产成人a∨麻豆精品| 久久久久久久久久成人| 国产亚洲最大av| 国产色爽女视频免费观看| 搡女人真爽免费视频火全软件| 女人被狂操c到高潮| 亚洲av国产av综合av卡| 亚洲精品日本国产第一区| 精品国产露脸久久av麻豆| 91精品伊人久久大香线蕉| 精品少妇黑人巨大在线播放| 久久ye,这里只有精品| 日韩欧美一区视频在线观看 | 男女那种视频在线观看| 亚洲天堂av无毛| 狂野欧美白嫩少妇大欣赏| 国产有黄有色有爽视频| av国产精品久久久久影院| 人人妻人人看人人澡| 亚洲内射少妇av| 国产成人a区在线观看| 爱豆传媒免费全集在线观看| 国产精品国产三级国产专区5o| 精品酒店卫生间| 亚洲,一卡二卡三卡| 日韩欧美一区视频在线观看 | 搞女人的毛片| 久久人人爽av亚洲精品天堂 | 成人亚洲精品一区在线观看 | 在线观看一区二区三区| 蜜桃亚洲精品一区二区三区| 九九在线视频观看精品| 国产精品三级大全| 国产乱人偷精品视频| 精品久久久久久久久亚洲| 三级国产精品片| 久久久午夜欧美精品| 狂野欧美激情性bbbbbb| 国产精品久久久久久久电影| 国产av不卡久久| 国产 一区 欧美 日韩| 在线观看一区二区三区| 丝袜喷水一区| 亚洲国产欧美在线一区| 夜夜爽夜夜爽视频| 最近最新中文字幕免费大全7| 欧美极品一区二区三区四区| 最后的刺客免费高清国语| 小蜜桃在线观看免费完整版高清| 大片电影免费在线观看免费| 久久精品国产鲁丝片午夜精品| 久久久久精品久久久久真实原创| 极品教师在线视频| 国产真实伦视频高清在线观看| 久久99热6这里只有精品| 神马国产精品三级电影在线观看| 丝袜脚勾引网站| 国产高潮美女av| 午夜爱爱视频在线播放| 国产高潮美女av| 国产精品久久久久久精品电影小说 | 狂野欧美激情性bbbbbb| 1000部很黄的大片| 中文乱码字字幕精品一区二区三区| 国产老妇女一区| 日韩免费高清中文字幕av| 欧美xxⅹ黑人| 禁无遮挡网站| av在线蜜桃| 下体分泌物呈黄色| 国产爱豆传媒在线观看| 在现免费观看毛片| av在线蜜桃| 国产人妻一区二区三区在| 国产爱豆传媒在线观看| 熟女人妻精品中文字幕| 22中文网久久字幕| 少妇 在线观看| 免费高清在线观看视频在线观看| 麻豆乱淫一区二区| 自拍偷自拍亚洲精品老妇| 日本黄色片子视频| 欧美日韩视频精品一区| 晚上一个人看的免费电影| 在线观看一区二区三区| 别揉我奶头 嗯啊视频| 亚洲av男天堂| 日本一本二区三区精品| 国产精品人妻久久久影院| 欧美97在线视频| 国产一区二区亚洲精品在线观看| 精品久久久久久久人妻蜜臀av| 狂野欧美激情性xxxx在线观看| 亚洲国产精品999| 久久精品久久精品一区二区三区| 国产成人精品福利久久| videossex国产| 天堂中文最新版在线下载 | 人妻 亚洲 视频| 久久综合国产亚洲精品| 十八禁网站网址无遮挡 | 肉色欧美久久久久久久蜜桃 | 午夜福利高清视频| 人妻系列 视频| 国产精品秋霞免费鲁丝片| 精品久久久噜噜| 亚洲精品国产成人久久av| 国产成人freesex在线| 欧美日韩国产mv在线观看视频 | 欧美日韩精品成人综合77777| 日本三级黄在线观看| 高清日韩中文字幕在线| 国产探花在线观看一区二区| 亚洲精品国产成人久久av| 伊人久久精品亚洲午夜| 成人无遮挡网站| 欧美精品一区二区大全| 国产精品一二三区在线看| 日韩精品有码人妻一区| 一级爰片在线观看|