倉庫管理系統(tǒng)設計報告范文
時間:2024-04-01 11:31:24
導語:如何才能寫好一篇倉庫管理系統(tǒng)設計報告,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公文云整理的十篇范文,供你借鑒。

篇1
條碼技術
如今,條碼技術的應用已經十分成熟,在制造、零售、醫(yī)藥、物流等幾乎所有的行業(yè)都能或多或少找到一些應用點。其中,以倉儲物流領域最為突出。通過將條碼技術與數(shù)據(jù)存儲、傳輸、智能軟件、計算機平臺以及通訊網(wǎng)絡等相結合,實現(xiàn)倉庫中的到貨檢驗、入庫、出庫、調撥、移庫移位、庫存盤點等各個作業(yè)環(huán)節(jié)的自動化數(shù)據(jù)采集,可以保證倉庫管理各個作業(yè)環(huán)節(jié)數(shù)據(jù)輸入的效率和準確性,確保企業(yè)及時準確地掌握庫存的真實數(shù)據(jù)。合理保持和控制企業(yè)庫存。
條碼技術在倉儲及配送中心的典型應用包括入庫、出庫和盤點三個環(huán)節(jié)。入庫時,通過手持終端掃描商品包裝上的條碼,就可將商品的到貨和庫存位置等數(shù)據(jù)信息傳到后臺管理系統(tǒng)。出庫發(fā)貨時,利用手持終端掃描商品條碼并確認出庫數(shù)量。再將數(shù)據(jù)傳送至后臺管理系統(tǒng)。庫存盤點時,使用手持終端依次掃描貨架上的商品條碼,并輸入實際庫存數(shù)量,操作完成后將實際庫存數(shù)傳送至后臺管理系統(tǒng),由系統(tǒng)進行處理,生成各種庫存損益報告和分析報告。
條碼技術的應用價值主要體現(xiàn)在:
第一,實現(xiàn)數(shù)據(jù)的自動化采集,大大提高工作效率;
第二,解決手工單據(jù)信息不準確的問題,減少人工操作,提高生產率,改善服務質量;
第三,準確、實時掌握庫存信息,提高資金利用率;
第四,電子數(shù)據(jù)便于盤點和查詢。
RF與倉庫管理系統(tǒng)的結合
倉庫管理系統(tǒng)(WMS)包括軟件、計算機硬件、RF設備及其它設備。其中RF設備(主要包括無線手持/車載終端、掃描器)起到了樞紐作用,即進行數(shù)據(jù)采集和系統(tǒng)指令的傳達。結合了條碼掃描和無線網(wǎng)絡技術后,倉庫管理系統(tǒng)便能最大限度地實現(xiàn)實時、快速、準確地輸入、查詢和更新系統(tǒng)數(shù)據(jù),獲得快速的系統(tǒng)響應。在這種應用過程中,要充分考慮倉庫管理系統(tǒng)的功能,以及RF設備在倉儲、配送、生產等方面的應用。
在倉庫管理系統(tǒng)中部署RF設備時,方案設計需要結合應用企業(yè)已有的條碼系統(tǒng)、現(xiàn)有的網(wǎng)絡條件,進行具體環(huán)境和業(yè)務分析處理。從以往的成功經驗中,我們也總結了幾個設計原則:
1、集中統(tǒng)一性原則:條碼系統(tǒng)要集中統(tǒng)一,各分公司的庫存條碼業(yè)務方案要統(tǒng)一;
2、簡化實用原則:在技術手段可行和功能實用、易用的前提下,盡量精簡開發(fā)工作;
3、成本原則:應基于現(xiàn)有的硬件設備和所貼的條碼標簽,設計經濟實用的技術方案:
4、維護和可擴展原則:即系統(tǒng)設計要充分考慮系統(tǒng)將來的維護問題,同時在新增倉庫時,要便于實施。
充分利用系統(tǒng)功能
從目前企業(yè)應用的物流信息系統(tǒng)來看,倉庫管理系統(tǒng)是其中一個重要的組成部分。倉儲管理是物流鏈條的開始,主要有兩種方式。一種是通過ERP系統(tǒng)直接進行管理,一種是通過專門的WMS系統(tǒng)進行管理。這種區(qū)別的產生主要源于用戶的關注度不同。比如,物流企業(yè)對倉儲管理的應用程度更深,就需要選擇專門的WMS系統(tǒng);而生產制造型企業(yè)的倉庫管理多是和物流一起外包出去的,在這種情況下,使用ERP系統(tǒng)中的一些相應模塊,如SAPMM自帶的IM功能模塊具有采購、庫房與庫存數(shù)量管理、MRP、供應商評價等管理功能,而WM模塊的主要功能包括貨位管理、倉庫管理、貨物移動、盤點、在架有效期管理等,可將庫存管理精確到每一個架位。與專業(yè)的WMS系統(tǒng)相比,SAPMM的功能模塊比較適用于物流管理規(guī)模不大的制造業(yè)倉儲管理,結合ABAP語言的開發(fā)可以實現(xiàn)大量個性化管理并且投入成本較小。
但對于零售、第三方物流等對倉儲管理有較高、較復雜要求的企業(yè)來說,他們的應用需求已經遠遠超過了SAP自帶模塊的功能范圍。與進行大量的二次開發(fā)相比,單獨上一套WMS系統(tǒng)更適宜。
總而言之,系統(tǒng)應用的選擇關鍵是結合企業(yè)自身的實際業(yè)務需求、投入能力等因素進行綜合考慮,或購買成熟、專業(yè)的產品?;蜻M行定制化開發(fā)等。但即使是定制化開發(fā),也需要有成熟、完善的產品核心。并經過眾多實踐證明其可靠性。
系統(tǒng)之間的數(shù)據(jù)傳輸層
企業(yè)在進行精細化、信息化的倉儲物流管理時。需要實現(xiàn)ERP系統(tǒng)與WMS系統(tǒng)、ERP系統(tǒng)和無線數(shù)據(jù)采集終端間等的各種數(shù)據(jù)傳輸。其中,企業(yè)在ERP系統(tǒng)和無線數(shù)據(jù)采集終端間的數(shù)據(jù)遠程傳輸普遍采取的是中間件的方式。產生這種應用方式的原因是多方面的,以SAP ERP系統(tǒng)為例,實際上,SAP ERP系統(tǒng)本身就帶有數(shù)據(jù)錄入的功能,但國內企業(yè)對條碼技術的應用多是與企業(yè)信息化建設脫節(jié)的,很過企業(yè)在上ERP系統(tǒng)時沒有考慮其他系統(tǒng)應用層面的需要。這也是造成SAP ERP系統(tǒng)在中國應用不理想的原因之一。
當企業(yè)面臨庫房較大、數(shù)量較多,庫房分散,無法實現(xiàn)實時的數(shù)據(jù)錄入時。他們就會需要實現(xiàn)ERP系統(tǒng)和無線數(shù)據(jù)采集終端間的數(shù)據(jù)遠程傳輸。如果是應用SAP系統(tǒng)的企業(yè),就可以通過SAP ERP系統(tǒng)特有的WebConsole技術來解決。
在SAPMM模塊中,RF終端可以通過WebConsole實現(xiàn)IM和WM的數(shù)量和倉位的管理,從而減少倉儲業(yè)務中的誤操作,提高倉儲管理效率。RF終端與SAP系統(tǒng)業(yè)務應用層表現(xiàn)(見圖1)。
系統(tǒng)之間的數(shù)據(jù)業(yè)務邏輯層
無線數(shù)據(jù)采集終端設備通過WebConsole應用服務器,應用SAP ERP系統(tǒng)與WebConsole之間的系統(tǒng)接口關系,實現(xiàn)RF與SAPERP系統(tǒng)進行數(shù)據(jù)交換。具體包括:利用RF實施貨位管理、出入庫控制、貨物盤點;庫內憑RF指令進行作業(yè),實現(xiàn)庫內作業(yè)無紙化。該方案的優(yōu)點在于采用SAP ERP系統(tǒng)的標準功能,可以和目前已有的SAP系統(tǒng)實現(xiàn)無縫化管理(見圖2)。
如果應用RF設備。則有兩種方式可選:
1、SAP Console
此種方式可以充分利用SAPWM的強大功能,憑借SAP系統(tǒng)提供的一攬子解決方案,在R/3與RF設備之間實時進行數(shù)據(jù)傳遞。
2、SAP WebConsole+ABAP開發(fā)
此種方式可以在SAP ERP系統(tǒng)沒有實施WM的框架下,利用SAP提供的中間件SAPConsole,在SAP系統(tǒng)中利用ABAP語言進行開發(fā)客戶的定制,突出靈活的功能需求。
篇2
關鍵詞:中小企業(yè);無線條碼;倉庫管理
中圖分類號:TP274 文獻標識碼:A 文章編號:1001-828X(2013)02-00-02
傳統(tǒng)的倉庫管理以結果為導向,過程往往存在許多漏洞,甚至大多數(shù)人認為倉庫管理過程不可能搞得清清楚楚,也沒必要搞得清清楚楚。所以,傳統(tǒng)的倉庫管理僅憑倉庫管理員人腦記憶和手工錄入,這種做法不但費時費力,而且容易出錯。對于現(xiàn)在企業(yè)間日益激烈的競爭,要想在激烈的競爭中取得優(yōu)勢,就必須對倉庫管理提出更高的要求,提高貨品查詢的準確性,改善盤點作業(yè)的質量,降低成本。對于中小企業(yè)而言,企業(yè)自身的特點決定了其在倉庫管理上投入的財力與人力要受到較大的限制,因此更需要契合自身實際的倉庫管理系統(tǒng)來解決方案。
一、中小企業(yè)倉庫管理現(xiàn)狀分析
所謂中小企業(yè),是指在中華人民共和國境內依法設立的有利于滿足社會需要,增加就業(yè),符合國家產業(yè)政策,生產經營規(guī)模屬于中小型的各種所有制和各種形式的企業(yè)。現(xiàn)如今,我國中小企業(yè)已達4200多萬戶,占全國企業(yè)總數(shù)的99.8%,這些企業(yè)的好壞直接影響到我國的生產力和綜合國力。經研究調查顯示,大多數(shù)中小企業(yè)在其倉庫管理方面存在著眾多的問題??偨Y如下不足:
(一)手續(xù)缺失、不完備
貨品名稱不規(guī)范,導致財務入賬錯誤、入賬難或賬實不符;車間領用各類網(wǎng)是否承包無相關部門認定,造成財務無法核算;加工件,同名同型號但不同價,因入庫單或領料單無相關說明,造成財務無法準確下賬;原領用貨品不適用需調換時,未變更原領料手續(xù),造成財務核算不準確且出現(xiàn)賬實不符現(xiàn)象。
(二)信息不能實現(xiàn)集成和共享
一些企業(yè)的信息化建設沒有實現(xiàn)真正意義上的集成共享,不能實現(xiàn)業(yè)務信息和財務信息的自動傳遞,也就不能對企業(yè)實施實時控制。更有企業(yè)仍在一定程度上依賴手工操作,企業(yè)的效率也就難以提高,無法從根本上降低企業(yè)的成本。另外,由于不能實現(xiàn)信息的集成,企業(yè)的一些有價值的信息可能不能得到應用,失去信息的功效。
二、無線條形碼技術在中小企業(yè)倉庫管理中的必要性與作用
(一)無線條碼技術在中小企業(yè)倉庫管理中的必要性
我國的中小企業(yè)在管理上不是很復雜,相對大企業(yè)來說中小企業(yè)具有比較穩(wěn)定的銷售渠道,因此日常管理中中小企業(yè)一般以訂單管理為基礎,但在信息化過程中中小企業(yè)仍然沒有擺脫傳統(tǒng)的管理方式,尤其是很多企業(yè)的倉庫管理還是停留在手工操作的基礎上,所有的出入倉數(shù)據(jù)都得由倉管員逐個錄入數(shù)據(jù),這種倉庫管理作業(yè)方式嚴重影響工作效率,許多出入庫數(shù)據(jù)不能在系統(tǒng)中及時得到更新,在系統(tǒng)管理上也沒有實現(xiàn)有效的庫位管理,系統(tǒng)中無法了解到物料在倉庫中的分布狀態(tài)及倉庫的倉儲能力,工人在擺放和領取物料時,沒有系統(tǒng)對其進行指導,可能會發(fā)生物料擺錯位置或者物料領取錯誤的現(xiàn)象。以上種種弊端嚴重影響了倉庫管理的效率,降低了企業(yè)倉庫的倉儲能力,提高了倉庫管理成本,制約了企業(yè)的發(fā)展。特別是在這個日益激烈的市場競爭環(huán)境下,如果中小企業(yè)不能果斷采用新的倉庫管理模式,那么就很有可能在激烈的市場競爭中被淘汰。所以,采用無線條碼掃描技術進行倉庫管理便顯得尤為重要。
(二)無線條碼掃描技術在倉庫管理中有其無與倫比的作用
第一,通過將物料編碼、并且打印條碼標簽。不僅便于物料跟蹤管理,而且也有助于做到合理的物料庫存準備,提高生產效率,便于企業(yè)資金的合理運用。對采購的生產物料按照行業(yè)及企業(yè)規(guī)則建立統(tǒng)一的物料編碼從而杜絕因物料無序而導致的損失和混亂。第二,需要進行標識的物料打印其條碼標,以便于在生產管理中對物料的單件跟蹤,從而建立完整的產品檔案。第三,利用條碼技術、對倉庫進行基本的進、銷、存管理。有效的降低庫存成本。第四,通過產品編碼,建立物料質量檢驗檔案,產生質量檢驗報告,與采購定單掛鉤建立對供應商的評價。
三、無線條碼技術在中小企業(yè)倉庫管理中的應用系統(tǒng)設計
無線條碼技術是在計算機、光電技術和通信技術的基礎上發(fā)展起來的一項綜合性科學技術,是信息數(shù)據(jù)自動識別、輸入的重要方法和手段。條碼的閱讀與識別涉及光學、電子學、數(shù)據(jù)處理等多學科技術,它包括一個光源,一個鏡頭和一個光傳感器把光變成電的沖動等。無線條形碼的掃描需要掃描器,掃描器利用自身光源照射條形碼,再利用光電轉換器接受反射的光線,將反射光線的明暗轉換成數(shù)字信號。
(一)入庫管理
1.收貨。供應商根據(jù)采購單把貨物送到倉庫,倉庫人員按采購單收貨品,并把事先根據(jù)采購單里的貨物所打印出來的條碼標簽(包含備件編碼、描述、采購合同、批次、設備分類等信息),在現(xiàn)場進行校對和粘貼在貨品上,并通過無線手持終端錄入驗收的貨品數(shù)量及其它信息。通過無線網(wǎng)絡實時傳輸數(shù)據(jù),快速、準確地進行收貨數(shù)據(jù)的采集、檢查和處理。隨著系統(tǒng)實時地更新庫存,管理人員可即時知道收貨單數(shù)和收貨總數(shù)量。最后系統(tǒng)根據(jù)貨品的種類和數(shù)量產生上貨架任務隊列,并將任務分配給各個倉庫。
2.上貨架。配送工人按無線終端上顯示的任務,把貨品送到指定的位置。然后使用手持終端掃描貨位和貨品條碼及輸入存放數(shù)量。與此同時系統(tǒng)自動記錄員工完成每個任務的時間,為員工的工作效率統(tǒng)計提供有用的數(shù)據(jù)。
3.客戶退貨。如果貨品被退回,則可根據(jù)退貨單文檔掃描貨品代碼、批號、原因代碼和數(shù)量后,系統(tǒng)生成退貨清單。返回的貨品運至退貨區(qū)等待處理。
(二)出庫管理
1.揀貨。倉管人員按照系統(tǒng)分配的任務單,到指定的位置揀貨。同時使用手持終端掃描貨位和貨品條碼,輸入揀貨數(shù)量。與此同時系統(tǒng)會實時檢查任務單的數(shù)據(jù),如果揀貨位置或貨品不符,系統(tǒng)即時對操作人員給出警告提示。系統(tǒng)也會自動記錄完成揀貨任務的時間,方便統(tǒng)計員工的工作效率。
2.出貨。倉管人員使用手持終端,掃描貨品的條碼,采集要出貨的貨品信息,同時系統(tǒng)即時檢查訂單數(shù)據(jù),如果貨品或裝箱數(shù)量不符,即時給出警告訊息,避免發(fā)貨錯誤。隨后把出貨條碼(包括發(fā)貨公司名稱、客戶名稱、包裝箱號、貨品條碼、貨品描述及數(shù)量、及包裝總數(shù)量等)粘貼在出貨的貨品上出貨。最后倉管人員在手持設備上對出庫操作進行最終確認,隨后手持設備將自動對所有信息進行批處理,生成出庫備用信息。
(三)庫存管理
1.移庫調撥。貨品按照需要在不同的倉庫或貨位之間調動時,按需求輸入移庫方案,包括移庫單號、移出倉庫及貨位、移入倉庫及貨位、貨品編號和數(shù)量。然后使用手持終端按移庫單進行移庫操作,輸入貨品的實際移庫數(shù)量。等移庫操作確認后,系統(tǒng)就會即時更新庫存信息。
2.盤點管理。倉庫盤點可以按倉庫區(qū)域生成盤點方案。倉管人員使用手持終端按盤點計劃進行盤點:掃描貨位條碼、貨品條碼,并輸入盤點數(shù)量。盤點完畢后,要拿這些數(shù)據(jù)與原材料倉庫庫存數(shù)據(jù)進行校對,如果存在不一致,則要及時找出原因并且修復。
四、結束語
無線條碼掃描技術以其可靠性高、采集信息量大、靈活方便等優(yōu)點牢牢滲透進了各個領域各個環(huán)節(jié)中。在倉庫管理這個領域上,很多大型的企業(yè)已經采取了這種技術,并且運用的十分成熟。而中小企業(yè)明顯還未跟上步伐。不過我相信,只要這些企業(yè)根據(jù)自身情況,引進無線條碼技術并在倉庫管理中能很好地實施起來,必將取得良好的效益。
參考文獻:
[1]參見《中華人民共和國中小企業(yè)促進法》總則第二條.
[2]左生龍,劉軍.現(xiàn)代倉儲作業(yè)管理[M].北京:中國物資出版社,2006:10-12.
篇3
本系統(tǒng)主要完成對圖書倉庫的庫存管理,包括圖書入庫、出庫、庫存,員工信息,供應商信息以及密碼管理等六個方面。系統(tǒng)可以完成對各類信息的瀏覽、查詢、添加、刪除、修改、報表等功能。
系統(tǒng)的核心是入庫、庫存和出庫三者之間的聯(lián)系,每一個表的修改都將聯(lián)動的影響其它的表,當完成入庫或出庫操作時系統(tǒng)會自動地完成庫存的修改。查詢功能也是系統(tǒng)的核心之一,在系統(tǒng)中即有單條件查詢和多條件查詢,也有精確查詢和模糊查詢,系統(tǒng)不僅有靜態(tài)的條件查詢,也有動態(tài)生成的條件查詢,其目的都是為了方便用戶使用。系統(tǒng)有完整的用戶添加、刪除和密碼修改功能,并具備報表打印功能。
系統(tǒng)采用Microsoft Office中的Access 2000來設計數(shù)據(jù)庫,并使用當前優(yōu)秀的開發(fā)工具—Delphi 6.0 ,它有著最為靈活的數(shù)據(jù)庫結構,對數(shù)據(jù)庫應用有著良好的支持。
論文主要介紹了本課題的開發(fā)背景,所要完成的功能和開發(fā)的過程。重點的說明了系統(tǒng)設計的重點、設計思想、難點技術和解決方案。
關鍵字:數(shù)據(jù)庫,SQL語言,Delph 6,數(shù)據(jù)庫組件,倉庫管理
目 錄
第一章 引言 ……………………………………………………………………………1
1.1 課題來源 ……………………………………………………………………1
1.2 開發(fā)工具的選擇 ……………………………………………………………2
1.3 所做的主要工作 ……………………………………………………………3
第二章 數(shù)據(jù)庫概論 ……………………………………………………………………4
2.1 數(shù)據(jù)庫的發(fā)展 ………………………………………………………………4
2.1.1 數(shù)據(jù)庫的發(fā)展 …………………………………………………………4
2.1.2 數(shù)據(jù)庫階段的特點 ……………………………………………………5
2.1.3 數(shù)據(jù)庫技術 ……………………………………………………………6
2.2 數(shù)據(jù)庫理論基礎 ……………………………………………………………7
2.2.1 數(shù)據(jù)庫模型 ……………………………………………………………7
2.2.2 數(shù)據(jù)庫體系結構
……………………………………………………10
2.2.3 數(shù)據(jù)的獨立性 ………………………………………………………11
2.2.4 范式 …………………………………………………………………11
2.3 SQL語言基礎 ……………………………………………………………13
2.3.1 SQL簡介 ……………………………………………………………13
2.3.2 SQL查詢
……………………………………………………………13
2.3.3 SQL數(shù)據(jù)更新
………………………………………………………14
第三章數(shù)據(jù)庫開發(fā)工具 ……………………………………………………………16
3.1 Delphi 6.0 簡介 ……………………………………………………………16
3.2 Delphi 6.0 控件 ……………………………………………………………17
3.2.1 ADO數(shù)據(jù)訪問組件 …………………………………………………17
3.2.2 數(shù)據(jù)控制類DataControl
……………………………………………18
3.2.3 數(shù)據(jù)訪問類DataAccess
……………………………………………18
3.2.4 SQL語言在Delphi中的應用
………………………………………19
3.3 Access 簡介
………………………………………………………………21
第四章 系統(tǒng)總體設計 ………………………………………………………………23
4.1 系統(tǒng)需求分析
……………………………………………………………23
4.2 系統(tǒng)概要設計
……………………………………………………………25
4.2.1 系統(tǒng)結構設計
………………………………………………………25
4.2.2 數(shù)據(jù)庫設計
…………………………………………………………27
4.2.2.1 ER圖設計 ……………………………………………………27
4.2.2.2 數(shù)據(jù)庫表格設計………………………………………………29
4.3系統(tǒng)詳細設計………………………………………………………………34
第五章 系統(tǒng)應用程序設計 …………………………………………………………37
5.1 系統(tǒng)窗體模塊組成…………………………………………………………37
5.2 數(shù)據(jù)模塊窗體設置…………………………………………………………38
5.3 主窗體功能模塊的實現(xiàn)……………………………………………………39
5.4 入庫、出庫窗體模塊的實現(xiàn)………………………………………………43
5.5 查詢功能的實現(xiàn)……………………………………………………………51
5.6 系統(tǒng)登陸窗體模塊的實現(xiàn)…………………………………………………52
5.7 用戶管理功能的實現(xiàn)………………………………………………………54
5.7.1 用戶管理主窗體 ……………………………………………………54
5.7.2 密碼修改窗體模塊的實現(xiàn)
…………………………………………54
5.7.3 用戶注冊窗體模塊的實現(xiàn)
…………………………………………55
5.7.4 用戶注銷窗體模塊的實現(xiàn)
…………………………………………57
結束語 …………………………………………………………………………………59
致謝 ……………………………………………………………………………………60
參考文獻 ………………………………………………………………………………61
第一章
引 言
§1.1 課題來源
隨著社會經濟的迅速發(fā)展和科學技術的全面進步,計算機事業(yè)的飛速發(fā)展,以計算機與通信技術為基礎的信息系統(tǒng)正處于蓬勃發(fā)展的時期。隨著經濟文化水平的顯著提高,人們對生活質量及工作環(huán)境的要求也越來越高。書籍做為人類的精神食糧,在現(xiàn)代社會中越來越受到重視,大量的書籍出現(xiàn)在市場上,人們有了各種各樣不同的選擇。與此同時,為了管理大量的圖書,圖書倉庫也大量的出現(xiàn),倉庫的管理問題也就提上了日程。隨著圖書的大量增加,其管理難度也越來越大,如何優(yōu)化倉庫的日常管理也就成為了一個大眾化的課題。
在計算機飛速發(fā)展的今天,將計算機這一信息處理利器應用于倉庫的日常管理已是勢必所然,而且這也將為倉庫管理帶來前所未有的改變,它可以帶來意想不到的效益,同時也會為企業(yè)的飛速發(fā)展提供無限潛力。采用計算機管理信息系統(tǒng)已成為倉庫管理科學化和現(xiàn)代化的重要標志,它給企業(yè)管理來了明顯的經濟效益和社會效益。主要體現(xiàn)在:
極大提高了倉庫工作人員的工作效率,大大減少了以往入出存流程繁瑣,雜亂,周期長的弊端。
基于倉庫管理的全面自動化,可以減少入庫管理、出庫管理及庫存管理中的漏洞,可以節(jié)約不少管理開支,增加企業(yè)收入。
倉庫的管理的操作自動化和信息的電子化,全面提高了倉庫的管理水平。
隨著我國改革開放的不斷深入,經濟飛速的發(fā)展,企業(yè)要想生存、發(fā)展,要想在激烈的市場競爭中立于不敗之地,沒有現(xiàn)代化的管理是萬萬不行的,倉庫管理的全面自動化、信息化則是其中極其重要的部分。為了加快倉庫管理自動化的步伐,提高倉庫的管理業(yè)務處理效率,建立倉庫管理系統(tǒng)已變得十分心要。
入庫、庫存、出庫還是現(xiàn)在企業(yè)圖書倉庫管理的常規(guī)基本模式,雖然,最近又出現(xiàn)了很多新的管理模式,如:基于零庫存思想的沃爾瑪特管理方式,但這些新的思想在中國大部分企業(yè)的管理中還是難以實現(xiàn)的。所以如何設計好倉庫管理系統(tǒng),盡可能地減少倉庫管理的重復性和低效性就成為當前最為重要的問題。圖書倉庫管理的核心是入庫、庫存和出庫之間的聯(lián)系,如何處理好三者之間的關系是系統(tǒng)最為關鍵的部分。另外,員工信息和供應商信息管理也是倉庫管理中一個必不可少的部分,它提供著與入庫和出庫相關的地一些信息,使得整個系統(tǒng)更加完整,更加實用。
通過對倉庫管理日常工作的詳細調查,搜集了大量的資料,從系統(tǒng)結構的組織,功能的實現(xiàn),技術的要求以及可行性等多方面進行考慮,認為本課題是一個適應現(xiàn)今圖書倉庫管理需求的計算機信息管理系統(tǒng),具有一定的實際開發(fā)價值和使用價值。
§1.2 開發(fā)工具的選擇
自Java誕生以來,隨著Internet技術的普及和應用需求的變化,以第四代語言為主的應用開發(fā)產品發(fā)生了較大的變化,它們不僅已成為人們開發(fā)應用的開發(fā)工具,而且很多產品已發(fā)展成為一種強有力的應用開發(fā)環(huán)境。這些新型的開發(fā)工具通常以一種集成軟件包的形式提供給開發(fā)人員,被稱為Studio(工作室)或Suite(程序組)。例如,微軟的Visual Studio 6.0,Borland公司的Delphi 6.0等數(shù)據(jù)庫輔助開發(fā)工具。
現(xiàn)在,市場上可以選購的應用開發(fā)產品很多,流行的也有數(shù)十種。目前在我國市場上最為流行、使用最多、最為先進的可用作企業(yè)級開發(fā)工具的產品有:
Microsoft公司的Visual Basic 6.0版
Microsoft公司的Visual C++6.0版
Borland公司的Delphi 6.0版
在目前市場上這些眾多的程序開發(fā)工具中,有些強調程語言的彈性與執(zhí)行效率;有些則偏重于可視化程序開發(fā)工具所帶來的便利性與效率的得高,各有各的優(yōu)點和特色,也滿足了不同用戶的需求。然而,語言的彈性和工具的便利性是密不可分的,只有便利的工具,卻沒有彈性的語言作支持,許多特殊化的處理動作必需要耗費數(shù)倍的工夫來處理,使得原來所標榜的效率提高的優(yōu)點失去了作用;相反,如果只強調程語言的彈性,卻沒有便利的工具作配合,會使一些即使非常簡單的界面處理動作,也會嚴重地浪費程序設計師的寶貴時間。
而Delphi是一個非常理想選擇。Delphi 6 是操作系統(tǒng)中快速應用開發(fā)環(huán)境的最新版本。它也是當前Windows平臺上第一個全面支持最新Web服務的快速開發(fā)工具。無論是企業(yè)級用戶,還是個人開發(fā)者,都能夠利用Delphi 6 輕松、快捷地構建新一代電子商務應用。Delphi 6 是惟一支持所有新出現(xiàn)的工業(yè)標準的RAD環(huán)境,包括XML(擴展標記語言)/XSL(可擴展樣式語言),SOAP(簡單對象存取協(xié)議)和WSDL(Web服務器描述語言)等。
Delphi 6 是可視化的快速應用程序開發(fā)語言,它提供了可視化的集成開發(fā)環(huán)境,這一環(huán)境為應用程序設計人員提供了一系列靈活而先進的工具,可以廣泛地用于種類應用程序設計。在Delphi 6 的集成開發(fā)環(huán)境中,用戶可以設計程序代碼、運行程序、進行程序錯誤的調試等,可視化的開發(fā)方法降低了應用程序開發(fā)的難度。Delphi的基礎編程語言是具有面向對象特性的Pascal語言,即Object Pascal 。Object Pascal具有代碼穩(wěn)定、可讀性好、編譯速度快等優(yōu)點,并將面向對象的概念移植到了Pascal語言中,使這種基礎語言有了新的發(fā)展空間。
使用Delphi 6.0 ,我們幾乎可以作任何事情,還可以撰寫種各種類型的應用程序,動態(tài)鏈接庫(DLL)、CON、或CORBA對象,CGI/ISAPI程序,Microsoft Back Office應用程序。程序的規(guī)模小到簡單的個人數(shù)據(jù)庫應用,大到復雜的企業(yè)的多層次分布式系統(tǒng),都可以使用Delphi進行開發(fā),其友好的集成開發(fā)界面,可視化的雙向開發(fā)模式,良好的數(shù)據(jù)庫應用支持高效的程序開發(fā)和程序運行,備受廣大程序開發(fā)人員的好評。尤其是Delphi對數(shù)據(jù)庫應用的強大支持,大大提高了數(shù)據(jù)庫應用軟件開發(fā)的效率,縮短了開發(fā)周期,深受廣大數(shù)據(jù)庫應用程序設計人員的喜愛。Delphi為數(shù)據(jù)庫應用開發(fā)人員提供了豐富的數(shù)據(jù)庫開發(fā)組件,使數(shù)據(jù)庫應用開發(fā)功能更強大,控制更靈活,編譯后的程序運行速度更快。
§1.3 本文所做工作
引言部分介紹了本系統(tǒng)的課題來源以及對數(shù)據(jù)庫開發(fā)工具的選擇。
第二章介紹了數(shù)據(jù)庫的發(fā)展,關系數(shù)據(jù)庫,數(shù)據(jù)庫體系結構,并系統(tǒng)介紹了SQL語言,為設計和理解應用程序做了鋪墊。
第三章系統(tǒng)介紹了Delphi 6.0及其部分控件,SQL語言在Delphi 6.0中的應用,以及Access等。
第四章是本文的主體,按照軟件工程的要求,從需求分析開始,經過概要設計最后到詳細設計,完成對整個系統(tǒng)的設計。
第五章根據(jù)第四章的設計結果利用Access 2000和Delphi 6.0進行了具體的窗體和應用程序設計。
總結部分介紹了設計體會和編程體會,并指出了系統(tǒng)設計中的不足和改進的方向
轉貼于 第二章
數(shù)據(jù)庫概論
§2.1
數(shù)據(jù)庫的發(fā)展
數(shù)據(jù)庫處理在信息系統(tǒng)的研究中一直是非常重要的主題,然而,近年來,隨著World Wide Web(WWW)的猛增及Internet技術的迅速發(fā)展,使得數(shù)據(jù)庫技術之時成為最熱門技術之一。數(shù)據(jù)庫技術能使Internet應用超越具有早期應用特點的簡單的。同時,Internet技術提供了一種向用戶數(shù)據(jù)庫內容的標準化的訪問方法。這些技術沒有脫離經典數(shù)據(jù)庫技術的要求。它們只是加重了數(shù)據(jù)庫技術的重要性。
數(shù)據(jù)庫的設計和開發(fā)及包括藝術有包括工程。理解用戶的需求,然后,把它們轉變?yōu)橛行У臄?shù)據(jù)庫設計是一個藝術過程。把設計轉變?yōu)閷嶋H的數(shù)據(jù)庫,并且這些數(shù)據(jù)庫帶有功能完備、高效能的應用,是一個工程過程。
數(shù)據(jù)庫的目的是幫助人們跟蹤事務。經典的數(shù)據(jù)庫應用涉及諸如訂單、顧客、工作、員工、學生、電話之類的項,或其它數(shù)據(jù)量較大、需要密起關注的事務。最近,由于數(shù)據(jù)庫的普及,數(shù)據(jù)庫技術已經被應用到了新的領域,諸如用于Internet的數(shù)據(jù)庫或用于公司內聯(lián)網(wǎng)的數(shù)據(jù)庫。數(shù)據(jù)庫也被越來越多地應用于生成和維護多媒體應用程序上。
計算機的數(shù)據(jù)處理應用,首先要把大量的信息以數(shù)據(jù)形式存放在存儲器中。存儲器的容量、存儲速率直接影響到數(shù)據(jù)管理技術的發(fā)展。從1956年生產出第一臺計算機到現(xiàn)在,存儲器的發(fā)展,為數(shù)據(jù)庫技術提供了良好的物質基礎。
使用計算機以后,數(shù)據(jù)處理的速度和規(guī)模,無論是相對于手工方式,還是機械方式,都有無可比擬的優(yōu)勢。通常在數(shù)據(jù)處理中,計算是比較簡單的而數(shù)據(jù)的管理卻比較復雜。數(shù)據(jù)管理是指數(shù)據(jù)的收集、整理、組織、存儲、維護、檢索、傳送等操作,這部分操作是數(shù)據(jù)處理業(yè)務的基本環(huán)節(jié),而且是任何數(shù)據(jù)處理業(yè)務中必不可少的共有部分。數(shù)據(jù)管理技術的優(yōu)劣,將直接影響數(shù)據(jù)處理的效率。
2.1.1 數(shù)據(jù)庫的發(fā)展
數(shù)據(jù)管理技術的發(fā)展,與硬件(主要是外存)、軟件、計算機應用的范圍有密切的聯(lián)系。數(shù)據(jù)管理技術的發(fā)展經過三個階段:人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫階段。
人工管理階段和文件系統(tǒng)階段都有著相當多的缺陷,諸如數(shù)據(jù)冗余性 ,數(shù)據(jù)不一致性以及數(shù)據(jù)聯(lián)系弱等等。也正是由于這些原因,促使人們研究新的數(shù)據(jù)管理技術,從而產生了數(shù)據(jù)庫技術。
20世紀60年代末發(fā)生的三件大事,層次模型IMS系統(tǒng)的推出、關于網(wǎng)狀模型DBTG報告的發(fā)表以及關于關系模型論文的連續(xù)發(fā)表標志著數(shù)據(jù)管理技術進入數(shù)據(jù)庫階段。進入70年代以后,數(shù)據(jù)庫技術得到迅速發(fā)展,開發(fā)了許多有效的產品并投入運行。數(shù)據(jù)庫系統(tǒng)克服了文件系統(tǒng)的缺陷,提供了對數(shù)據(jù)更高級更有效的管理。
當進入數(shù)據(jù)庫階段后,隨著數(shù)據(jù)管理規(guī)模一再擴大,數(shù)據(jù)量急劇增加,為了提高效率,開始時,人們只是對文件系統(tǒng)加以擴充,在應用文件中建立了許多輔助索引,形成倒排文件系統(tǒng)。但這并不能最終解決問題。在20世紀60年代末,磁盤技術取得重要進展,具有數(shù)百兆容量和快速存取的磁盤陸續(xù)進入市場,成本也不高,為數(shù)據(jù)庫技術的產生提供了良好的物質條件。
2.1.2 數(shù)據(jù)庫階段的特點
(1)減少數(shù)據(jù)的重復(Redundancy can be reduced)
當在一個非數(shù)據(jù)庫系統(tǒng)當中,每一個應用程序都有屬于他們自己的文件,由于無法有系統(tǒng)建立的數(shù)據(jù),因此常常會造成存儲數(shù)據(jù)的重復與浪費。例如:在一家公司當中,人事管理程序與工資管理程序或許都會使用到職員與部門的信息或文件,而我們可以運用數(shù)據(jù)庫的方法,把這兩個文件整理起來,以減少多余的數(shù)據(jù),過度地占用存儲空間。
(2)避免數(shù)據(jù)的不一致(Inconsistency can avoid)
本項的特色,可以說是延伸前項的一個特點,要說明這樣的一個現(xiàn)象,我們可以從下面這個實例來看:若是在同一家公司當中,職員甲在策劃部門工作,且職員甲的記錄同時被存放在數(shù)據(jù)庫的兩個地方,而數(shù)據(jù)庫管理系統(tǒng)卻沒有對這樣重要的情況加以控制,當其中一條數(shù)據(jù)庫被修改時,便會造成數(shù)據(jù)的不一致,但是,對于一個健全的數(shù)據(jù)庫管理系統(tǒng)而言,將會對這樣的情況加以控制,但有時并不需要刻意消除這種情形,應當視該數(shù)據(jù)庫的需求與效率來決定。
(3)數(shù)據(jù)共享(Data shared)
對于數(shù)據(jù)共享的意義,并不是只有針對數(shù)據(jù)庫設計的應用程序,可以使用數(shù)據(jù)庫中的數(shù)據(jù),對于其他撰寫好的應用程序,同樣可以對相同數(shù)據(jù)庫當中的數(shù)據(jù)進行處理,進而達到數(shù)據(jù)共享的目的。
(4)強化數(shù)據(jù)的標準化(Standard can be enforced)
由數(shù)據(jù)庫管理系統(tǒng),對數(shù)據(jù)做出統(tǒng)籌性的管理,對于數(shù)據(jù)的格式與一些存儲上的標準進行控制,如此一來,對于不同的環(huán)境的數(shù)據(jù)交換(Data Interchange)上將有很大的幫助,也能提高數(shù)據(jù)處理的效率。
(5)實踐安全性的管理(Security restriction can be applied)
通過對數(shù)據(jù)庫完整的權限控制,數(shù)據(jù)庫管理者可以確認所有可供用戶存取數(shù)據(jù)的合法途徑渠道,并且可以事先對一些較重要或關鍵性的數(shù)據(jù)進行安全檢查,以確保數(shù)據(jù)存取時,能夠將任何不當損毀的情形降至最低。
(6)完整性的維護(Integrity can be maintained)
所謂完整性的問題,就是要確認某條數(shù)據(jù)在數(shù)據(jù)庫當中,是正確無誤的。正如(2)所述,若是無法控制數(shù)據(jù)的不一致性,便會產生完整性不足的問題,所以,我們會發(fā)現(xiàn),當數(shù)據(jù)重復性高的時候,數(shù)據(jù)不完整的情形也會增加,當然,若是數(shù)據(jù)庫的功能完整,將會大大地提高數(shù)據(jù)完整性,也會增加數(shù)據(jù)庫的維護能力與維護簡便性。
(7)需求沖突會獲得平衡(Conflicting requirements can be balance)
在一個較大型的企業(yè)當中,用戶不同的需求,往往會造成系統(tǒng)或數(shù)據(jù)庫在設計上的困擾,但是一個合適的數(shù)據(jù)庫系統(tǒng),可以通過數(shù)據(jù)庫管理員的管理,將會有效地整理各方面的信息,對于一些較重要的應用程序,可以適時地提供較快速的數(shù)據(jù)存取方法與格式,以平衡多個用戶在需求上的沖突。
上述七個方面構成了數(shù)據(jù)庫系統(tǒng)的主要特征。這個階段的程序和數(shù)據(jù)間的聯(lián)系可用下圖表示: 2.1.3 數(shù)據(jù)庫技術
從文件系統(tǒng)發(fā)展到數(shù)據(jù)庫系統(tǒng)是信息處理領域的一個重大變化。在文件系統(tǒng)階段,人們關注的中心問題是系統(tǒng)功能的設計,因而程序設計處于主導地位,數(shù)據(jù)只起著服從程序需要的作用。在數(shù)據(jù)庫方式下,信息處理觀念已為新體系所取代,數(shù)據(jù)占據(jù)了中心位置。數(shù)據(jù)結構的設計成為信息系統(tǒng)首先關心的問題,而利用這些數(shù)據(jù)的應用程序設計則退居到以既定的數(shù)據(jù)結構為基礎的外圍地位。
目前世界上已有數(shù)百萬個數(shù)據(jù)庫系統(tǒng)在運行,其應用已經深入到人類社會生活的各個領域,從企業(yè)管理、銀行業(yè)務、資源分配、經濟預測一直到信息檢索、檔案管理、普查統(tǒng)計等。并在通信網(wǎng)絡基礎上,建立了許多國際性的聯(lián)機檢索系統(tǒng)。我國20世紀90年代初在全國范圍內裝備了12個以數(shù)據(jù)庫技術為基礎的大型計算機系統(tǒng),這些系分布在郵電、計委、銀行、電力、鐵路、氣象、民航、情報、公安、軍事、航天和財稅等行業(yè)。
數(shù)據(jù)庫技術還在不斷的發(fā)展,并且不斷地與其它計算機技術相互滲透。數(shù)據(jù)庫技術與網(wǎng)絡通信技術相結合,產生了分布式數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)庫技術與面向對象技術相結合,產生了面向對象數(shù)據(jù)庫系統(tǒng)。
在數(shù)據(jù)庫技術中有四個名詞,其概念應該分清。
(1)數(shù)據(jù)庫(database,DB):DB是統(tǒng)一管理的相關數(shù)據(jù)的集合。DB能為各種用戶共享,具有最小冗余度,數(shù)據(jù)間聯(lián)系密切,而又有較高的數(shù)據(jù)獨立性。
(2)數(shù)據(jù)庫管理系統(tǒng)(Database Management System,DBMS):DBMS是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,為用戶或應用程序提供訪問DB的方法,包括DB的建立、查詢、更新及各種數(shù)據(jù)控制。DBMS總是基于某種數(shù)據(jù)模型,可以分為層次型、網(wǎng)狀型、關系型和面向對象型DBMS。
(3)數(shù)據(jù)庫系統(tǒng)(Database System,DBS):DBS是實現(xiàn)有組織地、動態(tài)地存儲大量關聯(lián)數(shù)據(jù),方便多用戶訪問的計算機軟件、硬件和數(shù)據(jù)資源組成的系統(tǒng),即采用了數(shù)據(jù)庫技術的計算機系統(tǒng)。
(4)數(shù)據(jù)庫技術:這是一門研究數(shù)據(jù)庫的結構、存儲、管理和使用的軟件學科。數(shù)據(jù)庫技術是操作系統(tǒng)的文件系統(tǒng)基礎上發(fā)展起來的。而DBMS本身要在操作系統(tǒng)的支持下才能工作。數(shù)據(jù)庫不僅用到數(shù)據(jù)結構的知識,而且豐富了數(shù)據(jù)結構的內容。在關系數(shù)據(jù)庫中要用到集合論、數(shù)理邏輯的理論。因此,數(shù)據(jù)庫技術是一門綜合性較強的學科。
§2.2數(shù)據(jù)庫理論基礎
2.2.1 數(shù)據(jù)庫模型
從20世紀50年代中期開始,計算機的應用由科學研究部門逐步擴展到企業(yè)、行政部門。至60年代,數(shù)據(jù)處理成為計算機的主要應用。數(shù)據(jù)庫技術作為數(shù)據(jù)管理技術,是計算機軟件領域的一個重要分支,產生于60年代末?,F(xiàn)已形成相當規(guī)模的理論體系和實用技術。
模型是對現(xiàn)實世界的抽象。在數(shù)據(jù)庫技術中,我們用模型的概念描述數(shù)據(jù)庫的結構與語義,對現(xiàn)實世界進行抽象,表示實體類型及實體間聯(lián)系的模型稱為“數(shù)據(jù)模型” 。
目前廣泛作用的數(shù)據(jù)模型可分為兩種類型。
一種是獨立于計算機系統(tǒng)的模型,完全不涉及信息在系統(tǒng)中的表示,只是用來描述某個特定組織所關心的信息結構,這類模型稱為“概念數(shù)據(jù)模型” 。要領模型用于建立信息世界的數(shù)據(jù)模型,強調其語義表達功能,應該概念簡單、清晰,易于用戶理解,它是現(xiàn)實世界的第一層抽象,是用戶和數(shù)據(jù)庫設計人員之間進行交流的工具。這一其中著名的模型是“實體聯(lián)系模型” 。
另一種數(shù)據(jù)模型是直接面向數(shù)據(jù)庫的邏輯結構,它是現(xiàn)實世界的第二層抽象。 這類模型涉及到計算機系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng),又稱為“結構數(shù)據(jù)模型” 。例如,層次、網(wǎng)狀、關系、面向對象等模型。這類模型有嚴格的形式化定義,以便于在計算機系統(tǒng)中實現(xiàn)。
(1)層次模型。用樹型結構表示實體類型及實體間聯(lián)系的數(shù)據(jù)模型。樹的結點是記錄類型,每個非根結點有且只有一個父結點。上一層記錄類型和下一層記錄類型間聯(lián)系是1∶N聯(lián)系。
層次模型的特點是記錄之間的聯(lián)系通過指針實現(xiàn),查詢效率較高。但層次模型有兩個缺點:一是只能表示1∶N聯(lián)系,雖然有多種輔助手段實現(xiàn)了M∶N聯(lián)系,但都較復雜,用戶不易掌握,二是由于樹型結構層次順序的嚴格和復雜,引起數(shù)據(jù)的查詢和更新操作也很復雜,因此,編寫應用程序也很復雜。
(2)網(wǎng)狀模型。用有向圖結構表示實體類型及實體間聯(lián)系的數(shù)據(jù)模型。。1969年DBTG報告提出的數(shù)據(jù)模型是網(wǎng)狀模型的主要代表。有向圖中的結點是記錄類型,有向邊表示從箭尾一端的記錄類型到箭頭一端的記錄類型間聯(lián)系是1∶N聯(lián)系。
網(wǎng)狀模型的特點:記錄之間聯(lián)系通過指針實現(xiàn),M∶N聯(lián)系也容易實現(xiàn)(每個M∶N聯(lián)系可拆成兩個1∶N聯(lián)系),查詢效率較高。網(wǎng)狀模型的缺點是編寫應用程序比較復雜,程序員必須熟悉數(shù)據(jù)庫的邏輯結構。由于層次系統(tǒng)和網(wǎng)狀系統(tǒng)的應用程序編制比較復雜,因此,從20世紀80年代中期起,其市場已被關系系統(tǒng)所取代。但是使用這兩種模型建立起的許多數(shù)據(jù)庫仍然在正常運轉,只是在外層加了個關系數(shù)據(jù)庫語言的接口。網(wǎng)狀模型有許多成功的產品,20世紀70年代的產品大部分網(wǎng)狀系統(tǒng),例如,Honeywell公司的IDS/Ⅱ、HP公司的IMAGE/3000、Burroughs公司的DMSⅡ、Umivac公司的DMS1100、Cullinet公司的IDMS、Cimcom公司的TOTAL等
(3)關系模型。關系模型的主要是用二維表格結構表達實體集,用外鍵表示實體間聯(lián)系。關系模型是由若干個關系模式組成的集合。關系模式相當于前面提到的記錄類型,它的實例稱為關系,每個關系實際上是一張二維表格。
關系模型和層次、網(wǎng)狀模型的最大判別是用關鍵碼而不是用指針導航數(shù)據(jù),表格簡單用戶易懂,編程時并不涉及存儲結構,訪問技術等細節(jié)。關系模型是數(shù)學化模型。SQL語言是關系數(shù)據(jù)庫的標準化語言,已得到了廣泛的應用。20世紀70年代對關系數(shù)據(jù)庫的研究主要集中在理論和實驗系統(tǒng)的開發(fā)方面。80年代初才形成產品,但很快得到廣泛的應用和普及,并最終取代了層次、網(wǎng)狀數(shù)據(jù)庫產品?,F(xiàn)在市場上典型的關系DBMS產品有DB2、ORACLE、SYBASE、INFORMIX和微機型產品Foxpro、Access等。
關系模型和網(wǎng)狀、層次模型的最大區(qū)別是:關系模型用表格數(shù)據(jù)而不是通過指針鏈來表示和實現(xiàn)實體間聯(lián)系。關系模型的數(shù)據(jù)結構簡單、易懂。只需用簡單的查詢語句就可對數(shù)據(jù)庫進行操作。
關系模型是數(shù)學化的模型,可把表格看成一個集合,因此集合論、數(shù)理邏輯等知識可引入到關系模型中來。關系模型已是一個成熟的有前途的模型,已得到廣泛應用。
(4)面向對象模型。目前,關系數(shù)據(jù)庫的使用已相當普遍,但是,現(xiàn)實世界中仍然存在著許多含有復雜數(shù)據(jù)結構的應用領域,例如,CAD數(shù)據(jù)、圖形數(shù)據(jù)等,而關系模型在這方面的處理能力就顯得力不從心。因此,人們需要更高級的數(shù)據(jù)庫技術來表達這類信息。面向對象的概念最早出現(xiàn)在程序設計語言中,隨后迅速滲透到計算機領域的每一個分支。面向對象數(shù)據(jù)庫是面向對象概念與數(shù)據(jù)庫技術相結合的產物。
面向對象模型能完整地描述現(xiàn)實世界的數(shù)據(jù)結構,具有豐富的表達能力,但模型相對較復雜,涉及的知識面也廣,因此面向對象數(shù)據(jù)庫尚未達到關系數(shù)據(jù)庫那樣的普及程度。
2.2.2 數(shù)據(jù)庫體系結構
數(shù)據(jù)庫的體系結構分三級:內部級(internal),概念級(conceptual)和外部級(external)。這個三級結構有時也稱為“三級模式結構”,或“數(shù)據(jù)抽象的三個級別”,最早是在1971年通過的DBTG報告中提出,后來收入在1975年的美國ANSI/SPARC報告中。雖然現(xiàn)在DBMS的產品多種多樣,在不同的操作系統(tǒng)支持下工作,但是大多數(shù)系統(tǒng)在總的體系結構上都具有三級模式的結構特征。從某個角度看到的數(shù)據(jù)特性稱為“數(shù)據(jù)視圖”(data view)。
外部級最接近用戶,是單個用戶所能看到的數(shù)據(jù)特性。單個用戶使用的數(shù)據(jù)視圖的描述稱為“外模式”。
概念級涉及到所有用戶的數(shù)據(jù)定義,是全局的數(shù)據(jù)視圖。全局數(shù)據(jù)視圖的描述稱為“概念模式”。
內部級最接近于物理存儲設備,涉及到實際數(shù)據(jù)存儲的結構。物理存儲數(shù)據(jù)視圖的描述稱為“內模式”。
數(shù)據(jù)庫的三級模式結構是數(shù)據(jù)的三個抽象級別。它把數(shù)據(jù)的具體組織留給DBMS去做,用戶只要抽象地處理數(shù)據(jù),而不必關心數(shù)據(jù)在計算機中的表示和存儲,這樣就減輕了用戶使用系統(tǒng)的負擔。
三級結構之間往往差別很大,為了實現(xiàn)這三個抽象級別的聯(lián)系和轉換,DBMS在三級結構之間提供兩個層次的映象(mappings):外模式/模式映象,模式/內模式映象。此處模式是概念模式的簡稱。
2.2.3 數(shù)據(jù)的獨立性
由于數(shù)據(jù)庫系統(tǒng)采用三級模式結構,因此系統(tǒng)具有數(shù)據(jù)獨立性的特點。在數(shù)據(jù)庫技術中,數(shù)據(jù)獨立性是指應用程序和數(shù)據(jù)之間相互獨立,不受影響。數(shù)據(jù)獨立性分成物理數(shù)據(jù)獨立性和邏輯數(shù)據(jù)獨立性兩級。
(1)物理數(shù)據(jù)獨立性
如果數(shù)據(jù)庫的內模式要進行修改,即數(shù)據(jù)庫的存儲設備和存儲方法有所變化,那么模式/內模式映象也要進行相當?shù)男薷?,使概念模式盡可能保持不變。也就是對內模式的修改盡量不影響概念模式,當然,對于外模式和應用程序的影響更小,這樣,我們稱數(shù)據(jù)庫達到了物理數(shù)據(jù)獨立性。
(2)邏輯數(shù)據(jù)獨立性
如果數(shù)據(jù)庫的概念模式要進行修改,譬如增加記錄類型或增加數(shù)據(jù)項,那么外模式/模式映象也要進行相應的修改,使外模式盡可能保持不變。也就是對概念模式的修改盡量不影響外模式和應用程序,這樣,我們稱數(shù)據(jù)庫達到了邏輯數(shù)據(jù)獨立性。
現(xiàn)有關系系統(tǒng)產品均提供了較高的物理獨立性,而對邏輯獨立性的支持尚有欠缺,例如,對外模式的數(shù)據(jù)更新受到限制等。
2.2.4 范式
建立起一個良好的數(shù)據(jù)指標體系,是建立數(shù)據(jù)結構和數(shù)據(jù)庫的最重要的一環(huán)。一個良好的數(shù)據(jù)指標體系是建立DB的必要條件,但不是充分條件。我們完全可以認為所建指標體系中的一個指標類就是關系數(shù)據(jù)庫中的一個基本表,而這個指標類下面的一個個具體指標就是這個基本表中的一個字段。但如果直接按照這種方式建庫顯然還不能算最佳。對于指標體系中數(shù)據(jù)的結構在建庫前還必須進行規(guī)范化的重新組織。
在數(shù)據(jù)的規(guī)范化表達中,一般將一組相互關聯(lián)的數(shù)據(jù)稱為一個關系(relation),而在這個關系下的每個數(shù)據(jù)指標項則被稱為數(shù)據(jù)元素(data element),這種關系落實到具體數(shù)據(jù)庫上就是基本表,而數(shù)據(jù)元素就是基本表中的一個字段(field)。規(guī)范化表達還規(guī)定在每一個基本表中必須定義一個數(shù)據(jù)元素為關鍵字(key),它可以唯一地標識出該表中其它相關的數(shù)據(jù)元素。在規(guī)范化理論中表是二維的,它有如下四個性質:
在表中的任意一列上,數(shù)據(jù)項應屬于同一個屬性(如圖中每一列都存放著不同合同記錄的同一屬性數(shù)據(jù))。
表中所有行都是不相同的,不允許有重復組項出現(xiàn)(如圖中每一行都是一個不同的合同記錄)。
在表中,行的順序無關緊要(如圖中每行存的都是合同記錄,至于先放哪一個合同都沒關系)。
在表中,列的順序無關緊要,但不能重復(如圖中合同號和合同名誰先誰后都沒關系,但二者不可重復或同名)。
在對表的形式進行了規(guī)范化定義后,數(shù)據(jù)結構還有五種規(guī)范化定義,定名為規(guī)范化模式,稱為范式。在這五種范式中,一般只用前三種,對于常用系統(tǒng)就足夠了。而且這五種范式是“向上兼容”的,即滿足第五范式的數(shù)據(jù)結構自動滿足一、二、三、四范式,滿足第四范式的數(shù)據(jù)結構自動滿足第一、二、三范式,……,依此類推。
第一范式(first normal form,簡稱1st NF)就是指在同一表中沒有重復項出現(xiàn),如果有則應將重復項去掉。這個去掉重復項的過程就稱之為規(guī)范化處理。在本文所討論的開發(fā)方法里,1st NF實際上是沒有什么意義的。因為我們按規(guī)范化建立的指標體系和表的過程都自動保證了所有表都滿足1st NF。
第二范式(second normal form,簡稱 2nd NF)是指每個表必須有一個(而且僅一個)數(shù)據(jù)元素為主關鍵字(primary key),其它數(shù)據(jù)元素與主關鍵字一一對應。例如,在圖l9.7中如果我們將合同號定義為主關鍵字(其它數(shù)據(jù)元素中的記錄數(shù)據(jù)都有可能重名,故不能作為主關鍵字),故只要知道了一個合同記錄的合同號,就可以唯一地在同一行中找到該合同的任何一項具體信息。通常我們稱這種關系為函數(shù)依賴(functional depEndence)關系。即表中其它數(shù)據(jù)元素都依賴于主關鍵字,或稱該數(shù)據(jù)元素唯一地被主關鍵字所標識。
第三范式(third normal form,簡稱 3rd NF)就是指表中的所有數(shù)據(jù)元素不但要能夠唯一地被主關鍵字所標識,而且它們之間還必須相互獨立,不存在其它的函數(shù)關系。也就是說對于一個滿足了 2nd NF的數(shù)據(jù)結構來說,表中有可能存在某些數(shù)據(jù)元素依賴于其它非關鍵宇數(shù)據(jù)元素的現(xiàn)象,必須加以消除。
為防止數(shù)據(jù)庫出現(xiàn)更新異常、插入異常、刪除異常、數(shù)據(jù)冗余太大等現(xiàn)象,關系型數(shù)據(jù)庫要盡量按關系規(guī)范化要求進行數(shù)據(jù)庫設計。
§2.3 SQL語言基礎
2.3.1 SQL簡介
用戶對數(shù)據(jù)庫的使用,是通過數(shù)據(jù)庫管理系統(tǒng)提供的語言來實現(xiàn)的。不同的數(shù)據(jù)庫管理系統(tǒng)提供不同的數(shù)據(jù)庫語言。關系數(shù)據(jù)庫管理系統(tǒng)幾乎都提供關系數(shù)據(jù)庫標準語言——SQL。
SQL 的全稱是Structured Query Language,即結構化查詢語言。SQL語句可以從關系數(shù)據(jù)庫中獲得數(shù)據(jù),也可以建立數(shù)據(jù)庫、增加數(shù)據(jù)、修改數(shù)據(jù)。1986年ANSI采用SQL語言作為關系數(shù)據(jù)庫系統(tǒng)的標準語言,后被國際化標準組織(ISO)采納為國際標準。SQL語言使用方便、功能豐富、簡潔易學,是操作數(shù)據(jù)庫的工業(yè)標準語言,得到廣泛地應用。例如關系數(shù)據(jù)庫產品DB2、ORACLE等都實現(xiàn)了SQL語言。同時,其它數(shù)據(jù)庫產品廠家也紛紛推出各自的支持SQL的軟件或者與SQL的接口軟件。這樣SQL語言很快被整個計算機界認可。
SQL語言是一種非過程化語言,它一次處理一個記錄集合,對數(shù)據(jù)提供自動導航。SQL語言允許用戶在高層的數(shù)據(jù)結構上工作,而不對單個記錄進行操作。SQL語言不要求用戶指定數(shù)據(jù)的存取方法,而是使用查詢優(yōu)化器,由系統(tǒng)決定對指定數(shù)據(jù)存取的最快速手段。當設計者在關系表上定義了索引時,系統(tǒng)會自動利用索引進行快速檢索,用戶不需知道表上是否有索引或者有什么類型的索引等細節(jié)。
SQL語言可以完成許多功能,例如:
查詢數(shù)據(jù)
在數(shù)據(jù)庫表格中插入、修改和刪除記錄
建立、修改和刪除數(shù)據(jù)對象
控制對數(shù)據(jù)和數(shù)據(jù)對象的存取
確保數(shù)據(jù)庫的一致性和完整性等
2.3.2 SQL查詢
數(shù)據(jù)查詢是關系運算理論在SQL語言中的主要體現(xiàn),SELECT 語句是SQL查詢的基本語句,當我們在對一個數(shù)據(jù)庫進各種各樣的操作時,使用的最多的就是數(shù)據(jù)查詢,在以SQL為基礎的關系數(shù)據(jù)庫中,使用的最多的就是SELECT查詢語句。
SELECT語句的完整句法如下:
SELECT 目標表的列名或列表達式序列
FROM 基本表和(或)視圖序列
[WHERE 行條件表達式]
[GROUP BY 列名序列]
[HAVING 組條件表達式]
[ORDER BY列名 [ASC│DEAC]…]
我在SELECT語句中還使用了大量的保留字和通配符以進行各種各樣的條件查詢。在系統(tǒng)中有大量的查詢按鈕,其使用了大量的查詢語句,而且這些查詢語句大部分使用的是模糊查詢,所以大量的使用了模式匹配符LIKE(判斷值是否與指定的字符通配格式相符)。在包含LIKE的查詢語句中可以使用兩個通配符:%(百分號):與零個或多個字符組成的字符串匹配;_(下劃線):與單個字符匹配。系統(tǒng)中的條件判斷往往包含多個條件,這時就需要使用邏輯運算符NOT、AND、OR(用于多條件的邏輯連接),謂詞ALL以及保留字DISTINCT等等。做為SELECT語句還有很多的使用方法,這里就不再敘述。
2.3.3 SQL數(shù)據(jù)更新
使用數(shù)據(jù)庫的目的是為了有效地管理數(shù)據(jù),而數(shù)據(jù)的插入、刪除和修改則是必不可少的一個功能。在本系統(tǒng)中就大量地使用了數(shù)據(jù)插入、刪除和修改這三種操作,現(xiàn)做一個簡單地介紹。
數(shù)據(jù)插入
往數(shù)據(jù)庫的基本表中插入數(shù)據(jù)使用的是INSERT語句,其方式有兩種:一種是元組值的插入,另一種是查詢結果的插入。在本系統(tǒng)中使用的是前一種方式,其句法如下:
INSERT INTO 基本表名(列表名)VALUES(元組值)
數(shù)據(jù)刪除
往數(shù)據(jù)庫的基本表中刪除數(shù)據(jù)使用的是DELETE語句,其句法如下:
DELETE FROM 基本表名 [WHERE 條件表達式]
在些作一點說明,刪除語句實際上是“SELECT * FROM 基本表名 [WHERE 條件表達式]”和DELETE操作的結合,每找到一個元組,就把它刪除。此外,DELETE語句只能從一個基本表中刪除元組,WHERE子句中條件可以嵌套,也可以是來自幾個基本表的復合條件。
數(shù)據(jù)修改
當需要修改基本表中元組的某些列值時,可以用UPDATE語句實現(xiàn),其句法如下:
UPDATE基本表名
SET列名=值表達式[,列名=值表達式…]
[WHERE條件表達式]
在Delphi中使用SQL語句是很方便的,一般來說,都是通過TQuery組件來使用SQL語言的。有一點要進行說明,雖然通過TQuery組件來使用SQL語言很方便,但考慮到自己對不同組件的理解程度、個人習慣以及其它各個方面,在本系統(tǒng)中我采用的是ADO組件來對數(shù)據(jù)庫進行操作。最簡單的方法比如在TADOQuery組件的SQL屬性中就可以鍵入SQL語句,至于詳細的使用方法在后面進行介紹。
轉貼于 第三章
數(shù)據(jù)庫開發(fā)工具
§3.1 Delphi 6.0 簡介
Delphi類可以粗略地分成兩部分:一部分是組件類,這些組件類通常以某種方式出現(xiàn)在組件面板上,當用戶從組件面板上點取一個類的圖標后,在程序中就自動生成了該類的對象(非可視組件除外);另一部分是功能類,這此功能類的對象通常出現(xiàn)在程序代碼中,起著不可代替的作用,但是這些功能類在組件面板上是找不到的。在Delphi中,每一個類的祖先都是Tobject類,整個類的層次結構就像一棵倒掛的樹,在最頂層的樹根即為Tobject類。這樣,按照面向對象編程的基本思想,就使得用戶可用Tobject類這個類型代替任何其它類的數(shù)據(jù)類型。實際上在Delphi的類庫中,Tobject類派生出了為數(shù)相當眾多的子類,它們形成了一個龐大的體系,通常情況下,如果不自行開發(fā)組件,就不必了解整個類的體系結構,只用到類層次樹的葉結點就足夠了。
凡是做過程序開發(fā)的人都知道從來沒有單純的數(shù)據(jù)應用程序,也就是說,數(shù)據(jù)庫應用程序必須和用戶界面(可以是圖形界面,也可以是命令接口)元素相結合,只講界面或只講數(shù)據(jù)庫本身都構不成數(shù)據(jù)庫應用程序,因而用Delphi 6.0開發(fā)數(shù)據(jù)庫應用程序就隱含著界面開發(fā)。Delphi6中的VCL組件可用圖3-1來說明。組件在Delphi程序的開發(fā)中是最顯眼的角色。大家知道,在編寫程序時一般都開始于在組件面板上選擇組件并定義組件間的相互作用。但也有一些組件不在組件面板上,例如Tform和Tapplication(典型的非可視組件)。組件是Tcomponents派生出來的子類,可以流的形式存放在DFM文件中,具有事件和Publish屬性。
窗口組件類是窗口化的可視化組件類,在Delphi的類庫中占有最大的份額。在實際編程中,窗口組件類的對象都有句柄,可以接受輸入焦點和包含其它組件。
圖形組件與窗口組件并列,是另一大類組件。圖形組件不是基于窗口的,因而不能有窗口句柄,不能接受輸入焦點和包含其它組件。從圖8-43中可以看出,圖形組件的基類是TgraphicControl,在實際編程中,它們必須寄生于它們的宿主——窗口組件類的對象,由它們的擁有者負責其顯示,而且它們還能觸發(fā)一些和鼠標活動相關的事件。圖形控件最典型的例子是Tlabel和TspeedButton。由此可以看出圖形組件的功能很弱,有讀者會問圖形組件的用處何在呢?其實使用圖形組件的最大好處在于節(jié)省資源,正是因為它們的功能較弱,所以使用的系統(tǒng)資源就要少。在一個應用程序中,如果能在不影響其功能的前提下合理大量地使用圖形組件,將會大減少程序對系統(tǒng)資源的消耗。
非可視組件是與可視組件相并列的另一類組件,非可視組件在程序運行中是不可見的(除各種對話框組件之外,事實上有人認為對話框組件不能歸入非可視組件,應該是另一種介于可視與非可視之間的組件)。
§3.2 Delphi 6.0 控件
用Delphi6開發(fā)數(shù)據(jù)庫應用,重點是和各種數(shù)據(jù)庫組件打交道,當然也要使用其它的一些組件,現(xiàn)在就我在系統(tǒng)設計中所使用的重要組件給與簡單介紹。
3.2.1 ADO數(shù)據(jù)訪問組件
ADO數(shù)據(jù)對象(Active Data Objects)實際是一種提供訪問各種數(shù)據(jù)類型的鏈接機制。ADO設計為一種極簡單的格式,通過ODBC的方法同數(shù)據(jù)庫接口中,可以使用任何一種ODBC數(shù)據(jù)源,即不止適合于SQL Server、Oracle、Access等數(shù)據(jù)庫應用程序,也適合于Excel表格、文本文件、圖形文件和無格式的數(shù)據(jù)文件。ADO是基于OLE-DB之上的技術,因此ADO通過其內部的屬性和方法提供統(tǒng)一的數(shù)據(jù)訪問接口方法。ADO使您的客戶端應用程序能夠通過OLE DB提供訪問和操作在數(shù)據(jù)庫服務器中的數(shù)據(jù)。ADO支持用于建立C/S和Web的應用程序的主要功能。其主要優(yōu)點是易于使用、高速度、低內存支出和占用磁盤空間較少。ADO同時具有遠程數(shù)據(jù)服務(RDS)功能,通過RDS可以在一次往返過程中實現(xiàn)將數(shù)據(jù)從服務器移動到客戶端應用程序和Web頁、在客戶端對數(shù)據(jù)進行處然后將更新結果返回服務器的操作。
Delphi 6.0繼續(xù)對Microsoft的ADO訪問能力的支持。這種能力是通過一組新組件實現(xiàn)的,這些組件是在企業(yè)版的ADO組件頁中,在組件面版的ADO頁上可以找到這些組件。利用在前面章節(jié)提到的TdataSet抽象類,ADO組件可以不通過BDE而直接實現(xiàn)ADO連接。這意味著只需要很少的代碼就可以實現(xiàn)該連接并且性能得到提高。
利用ADO數(shù)據(jù)訪問組件,可以只使用ADO結構與數(shù)據(jù)庫取得聯(lián)系并對其中的數(shù)據(jù)進行操作,而在這些過程中完全不需要使用BDE。大多數(shù)的ADO連接和數(shù)據(jù)集組件都是與基于BDE的連接和數(shù)據(jù)集組件相類似的。TADOConnection組件與基于BDE的應用程序中的Tdatabase組件類似。TADOTable與Ttable,TADOQuery與Tquery,以及TADOStoreProc和TstoredProc之間都具有這種類似的對應關系。使用這些ADO組件的方式與我們常使用的數(shù)據(jù)訪問組件(基于BDE)都有許多相同之處。TTADODataSet沒有直接的BDE對應組件,但它提供了許多與Ttable和Tquery相同的功能。同樣,TADOCommand也沒有相對應的BDE組件,它是在Delphi/ADO環(huán)境中完成特定功能的組件。Delphi 6.0通過ADO數(shù)據(jù)集訪問組件,可以不借助BDE數(shù)據(jù)引擎而是通過微軟的OLEDB來訪問更為廣泛的數(shù)據(jù)庫中的數(shù)據(jù)。ADO數(shù)據(jù)集訪問組件與常用的數(shù)據(jù)訪問組件是并列的關系。
在系統(tǒng)中我主要使用的是ADOTablet和ADOQuery兩個組件。
3.2.2 數(shù)據(jù)控制類DataControl
數(shù)據(jù)控制類負責數(shù)據(jù)庫數(shù)據(jù)的顯示,并把用戶對數(shù)據(jù)的修改傳回。這里的絕大多數(shù)組件,如DBText, DBEdit, DBMemo, DBImage, DBListBox, DBComboBox, DBCheckBox, DBRadioGroup, DBLookupListBox, DBLookupCombox, DBCtrGrid的功能和對應的非數(shù)據(jù)感知組件相同,如TEdit框,TRadioGroups單選按鈕組等,只不過在顯示數(shù)據(jù)庫數(shù)據(jù)時要用而已。
在系統(tǒng)中主要使用數(shù)據(jù)網(wǎng)格控件DBGrid和數(shù)據(jù)庫導航器控件DBNavigator。
3.2.3 數(shù)據(jù)訪問類DataAccess
數(shù)據(jù)庫應用系統(tǒng)中數(shù)據(jù)訪問是一個首要問題,包括單用戶和 C/S系統(tǒng),都必須聯(lián)系一些數(shù)據(jù)庫和數(shù)據(jù)表文件。Delphi 6 提供了專門用于數(shù)據(jù)訪問的基類控件。主要包括數(shù)據(jù)源控件DataSource、客戶數(shù)據(jù)集控件ClientDataSet、數(shù)據(jù)集提供器控件DataSetProvider等等。
Tdatabase:當一個基于BDE的數(shù)據(jù)庫應用程序需要一個永久數(shù)據(jù)庫連接時,需要定制向一個數(shù)據(jù)庫服務器的連接時,需要事務控制和特殊的數(shù)據(jù)庫別名時就得用到Tdatabase對象。特別是當連接到一個遠程的SQL數(shù)據(jù)庫服務器時,如果要利用BDE進行數(shù)據(jù)庫事務處理,那么,TDatabase對象的威力就體現(xiàn)出來了。在一個應用程序中為每一個數(shù)據(jù)庫連接顯示的聲明Tdatabase對象要根據(jù)需要而定,不是必需的。對一個數(shù)據(jù)庫連接,如果沒有顯示的聲明并實例化TDatabase對象,系統(tǒng)就會產生一個帶有默認屬性的TDatabase對象。
TdataSource對象用于在DataSet對象(包括Tquery,TstoredProc,Ttable等)和數(shù)據(jù)感知組件之間提供一個連接的紐帶,以便在窗體上顯示數(shù)據(jù)庫中的數(shù)據(jù),在數(shù)據(jù)庫中導航定位與編輯數(shù)據(jù)集中的數(shù)據(jù)。如果一個DataSet對象中的數(shù)據(jù)想在數(shù)據(jù)感知組件中顯示和修改,它就必須和TdataSource對象相聯(lián)系。同樣,一個數(shù)據(jù)感知組件如果想和數(shù)據(jù)源相聯(lián)系以便顯示和操縱數(shù)據(jù),就必須以TDataSource對象為中介。
用Delphi6作數(shù)據(jù)庫應用開發(fā)概括來說如下:先利用數(shù)據(jù)存取組件和實際的數(shù)據(jù)庫建立連接,并用Tsession對象和Tdatabase對象管理這些連接。然后以Tdatasource對象為中介,用數(shù)據(jù)感知組件向用戶顯示數(shù)據(jù)庫的內容并接受用戶的查詢和修改等操作。
3.2.4 SQL語言在Delphi中的應用
在Delphi中使用SQL語言非常方便,一般來說,都是通過Tquery組件來使用SQL語言的??梢栽赥Query組件的SQL屬性中設置SQL語句。設計程序時,在該組件的屬性對話框中選擇SQL屬性,單擊帶省略號的按鈕,就可以打開String List Editor對話框,然后我們就可以在對話框中添加SQL語句。還可以使用Delphi的SQL Builder來自動生成SQL語句,這樣可以避免手工編寫SQL而可能造成的語法錯誤。
靜態(tài)SQL語句在程序設計時便已固定下來,它不包含任何參數(shù)和變量。
動態(tài)SQL語句,也被稱作參數(shù)化的語句,在其中間包含著表示字段名或表名的參數(shù),例如下面的語句是一條動態(tài)SQL語句:
Select * From Students Where StudentCode =: StudentCode;
其中的變量StudentCode便是一個參數(shù)變量,它由一個冒號引導,在程序運行過程中,必須要為該參數(shù)賦值,該條SQL語句才能正確執(zhí)行,每次運行應用程序時可以為該參數(shù)變量賦予不同的值。為參數(shù)賦值有三種方法:
①根據(jù)參數(shù)在SQL語句中出現(xiàn)的順序,設置TQuery部件的Params屬性值為參數(shù)賦值。
②直接根據(jù)SQL語句中各參數(shù)的名字,調用ParamByName方法來為各參數(shù)賦值。
③將TQuery部件的DataSource屬性設置為另一個數(shù)據(jù)源,這樣將另一個數(shù)據(jù)源中與當前TQuery部件的SQL語句中的參數(shù)名相匹配的字段值賦給其對應的參數(shù)。利用這種方法也能實現(xiàn)所謂的連接查詢,創(chuàng)建主要—明細型數(shù)據(jù)庫應用。
在程序運行過程中,要想設置TQuery部件的SQL屬性,必須首先調用Close方法,關閉TQuery部件,然后再調用Clear方法清除SQL屬性中現(xiàn)存的SQL命令語句, 最后再調用Add方法為SQL屬性設置新的SQL命令語句。例如:
Query1.Close {關閉Query1)
Query1.SQL.Clear {清除SQL屬性中的SQL命令語句}
Query1.SQL.Add(‘Select * From Students‘);
Query1.SQL.Add(‘ Where Name ="Lucy" ‘);
在為TQuery部件設置SQL屬性時調用Close方法總是很安全的,如果TQuery部件已經被關閉了,調用Close方法時不會產生任何影響。在應用程序中為SQL屬性設置新的SQL 命令語句時,必須要調用Clear方法以清除SQL屬性中現(xiàn)存的SQL命令語句,如果不調用Clear方法,便調用Add方法向SQL屬性中設置SQL命令語句,那么新設置的SQL命令語句會追加在現(xiàn)存SQL命令語句后面, 在程序運行時常常會出現(xiàn)出乎意料的查詢結果甚至程序無法運行下去。
在這里要特別注意的,一般情況下TQuery部件的SQL屬性只能包含一條完整的SQL語句,它不允許被設置成多條SQL語句。當然有些數(shù)據(jù)庫服務器也支持在TQuery部件的SQL屬性中設置多條SQL語句,只要數(shù)據(jù)庫服務器允許這樣,我們在編程時可以為 SQL 屬性設置多條SQL語句。
在為TQuery部件設置完SQL屬性的屬性值之后,也即編寫好適當?shù)腟QL程序之后,可以有多種方式來執(zhí)行SQL程序。
在設計過程中,設置完TQuery部件的SQL屬性之后將其Active屬性的值置為True, 這樣便可以執(zhí)行SQL屬性中的SQL程序,如果應用中有與TQuery部件相連的數(shù)據(jù)瀏覽部件( 如TDDGrid TDBEdit等)那么在這些數(shù)據(jù)瀏覽部件中會顯示SQL程序的執(zhí)行結果。
在應用程序運行過程中,通過程序調用TQuery部件的Open方法或ExecSQL 方法可以執(zhí)行其SQL屬性中的SQL程序。Open方法和ExecSQL方法是不一樣的。Open方法只能用來執(zhí)行SQL語言的查詢語句(Select命令), 并返回一個查詢結果集,而ExecSQL方法還可以用來執(zhí)行其它常用的SQL語句(如INSERT, UPDATE, DELETE等命令),例如:
Query1.Open (這樣會返回一個查詢結果集)
如果調用Open方法,而沒有查詢結果時,會出錯。此時應該調用ExecSQL 方法來代替Open方法。如:
Query1.ExecSQL (沒有返回結果)
當然在設計應用程序時,程序設計人員是無法確定TQuery部件中的SQL 語句是否會返回一個查詢結果的。對于這種情況應當用Try…Except模塊來設計程序。在 Try 部分調用Open方法,而在Except部分調用ExceSQL方法,這樣才能保證程序的正確運行。
Delphi中用ADOQuery來使用SQL語句同樣十分方便。在ADOQuery組件中首先通過ConnectionString屬性值來聯(lián)接數(shù)據(jù)源,然后就通過雙擊SQL…屬性值來寫入SQL語句。在Delphi中調用數(shù)據(jù)庫,就可以調用ADOQuery組件,通過修改其中的SQL…屬性中的SQL語句來實現(xiàn)對數(shù)據(jù)庫的各項操作。
值得注意的是,ADOQuery組件只有在激活的情況下才可以被正確地使用,這樣就提出了一個問題,也就是說,在每次修改ADOQuery組件的SQL…屬性時都必須先行進行關閉,待清除掉SQL…中所有的SQL語句后才可以添加新的SQL語句。而且,在每一次修改完成以后,還應該記得重新將ADOQuery激活。其它的使用方法與TTQuery有許多的相似之處。
§3.3 Access 簡介
建立一個數(shù)據(jù)庫我們有多種選擇,現(xiàn)在市場上有各種各樣的數(shù)據(jù)庫,而且每一種數(shù)據(jù)庫都有其自身的特點,不能說哪一種更好,只能在其中尋找一種能更好地適應系統(tǒng)需求、更好地滿足用戶的要求以及適應開發(fā)人員的習慣。在本系統(tǒng)中,做為圖書倉庫管理系統(tǒng)是一個比較小的應用系統(tǒng),它所產生和處理的數(shù)據(jù)量也比較小。因此,沒有必要使用像SQL Server和Oracle這樣的大型數(shù)據(jù)庫。我首先想到的數(shù)據(jù)庫是Borland公司的Paradox數(shù)據(jù)庫。另外,Microsoft Office中的Access數(shù)據(jù)庫在計算機上的應用比較普及,是開發(fā)小型數(shù)據(jù)庫系統(tǒng)的比較理想的選擇,所以,在本系統(tǒng)中我選擇了Access數(shù)據(jù)庫。
Access做為一個數(shù)據(jù)庫管理系統(tǒng),它被集成在Microsoft Office中。Access數(shù)據(jù)庫處理的基本結構,采取關系型數(shù)據(jù)庫模式。與其他的數(shù)據(jù)庫系統(tǒng)相比,Access更加簡單易學,一個普通的計算機用戶可以很快地掌握它。Access 2000的功能十分強大,利用它可以方便地實現(xiàn)對信息保存、維護、查詢、統(tǒng)計、打印、交流、,而且它可以十分方便地與Office其他組件交流數(shù)據(jù),這些功能對一個一般用戶而言已經足夠了。
轉貼于 第四章 系統(tǒng)總體設計
軟件系統(tǒng)的總體設計大約要經歷可行性分析和項目開發(fā)計劃,需求分析,概要設計,詳細設計,編碼,測試以及維護等七個階段。可行性分析和項目開發(fā)計劃在前面已經敘述,下面所要做的是進行軟件需求分析,概要設計和詳細設計。編碼過程將在下一節(jié)論述,而測試和維護過程不在本文敘及。
§4.1 系統(tǒng)需求分析
在經過前一階段的分析之后,我確定了我的開發(fā)課題為圖書倉庫管理?,F(xiàn)在所要做的是要準確定義系統(tǒng)必須做什么以及系統(tǒng)必須具備的功能。
軟件需求分析中我采用結構化分析方法(Structured Analysis,簡稱SA),SA是面向數(shù)據(jù)流進行需求分析的方法,像所有的軟件分析方法(如面向對象分析方法、IDEF方法等等)一樣,SA也是一種建?;顒?,它使用簡單易讀的符號,根據(jù)軟件內部數(shù)據(jù)傳遞、變換的關系,自頂向下逐層分解,描繪滿足功能要求的軟件模型。
在系統(tǒng)中我采用數(shù)據(jù)流圖(DFD)這種半形式化的描述方式表達需求。它是一種功能模型,以圖形的方式描繪數(shù)據(jù)在系統(tǒng)中流動和處理的過程,只反映系統(tǒng)必須完成的邏輯功能。它有四種基本圖形符號:
:箭頭,表示數(shù)據(jù)流;
〇:圓或橢圓,表示加工;
:雙杠,表示數(shù)據(jù)存儲;
:方框,表示數(shù)據(jù)的源點或終點。
為了表達較為復雜問題的數(shù)據(jù)處理過程,用一張數(shù)據(jù)流圖是不夠的,要按照問題的層次結構進行逐步分解,并以一套分層的數(shù)據(jù)流圖反映這種結構關系。在這里我一共使用了三層數(shù)據(jù)流圖,即頂層圖,0層圖和1層圖(也是底層圖)。
在多層數(shù)據(jù)流圖中,頂層流圖僅包含一個加工,它代表被開發(fā)系統(tǒng),它的輸入流是該系統(tǒng)的輸入數(shù)據(jù)了,輸出流是該系統(tǒng)的輸出數(shù)據(jù);底層流圖是指其加工不需要再做分解的數(shù)據(jù)流圖,中間層流圖表示對其上層父圖的細化,它的每一步加工可能繼續(xù)細化成子圖。
經過對系統(tǒng)的分析首先得到系統(tǒng)的頂層DFD,如下: 一步細化得到系統(tǒng)的0層DFD,如下:
再進一步細化每一個數(shù)據(jù)加工功能,得到系統(tǒng)的1層DFD圖。
在這里只給出有關入庫管理和出庫管理的1層數(shù)據(jù)流圖,它們是系統(tǒng)的關鍵部分,也是主要的部分。通過以上對數(shù)據(jù)流圖的分析之后,我們已大體地了解了系統(tǒng)的功能和目標,接下來所要做的就是系統(tǒng)功能模塊的劃分和數(shù)據(jù)庫的設計,也就是系統(tǒng)的概要設計。
§4.2 系統(tǒng)概要設計
在軟件需求分析階段,搞清楚了軟件“做什么”的問題,形成了目標系統(tǒng)的邏輯模型?,F(xiàn)在我們所要做的就是要把軟件“做什么”的邏輯模型變換為“怎么做”的物理模型,即著手實現(xiàn)軟件的需求。首先,我們需要描述的是系統(tǒng)的總的體系結構。
4.2.1 系統(tǒng)結構設計
系統(tǒng)的概要設計中最重要的就是系統(tǒng)的模塊化。模塊化是指解決一個復雜問題時自項向下逐層把軟件系統(tǒng)劃分成若干個模塊的過程。每個模塊完成一個特定的功能,所有的模塊按某種方法組織起來,成為一個整體,完成整個系統(tǒng)所要求的功能。
將系統(tǒng)劃分為多個模塊是為了降低軟件系統(tǒng)的復雜性,提高可讀性、可維護性,但模塊的劃分不能是任意的,應盡量保持其獨立性。也就是說,每個模塊只完成系統(tǒng)要求的獨立的子功能,并且與其他模塊的聯(lián)系最少且接口簡單,即盡量做到高內聚低耦合,提高模塊的獨立性,為設計高質量的軟件結構奠定基礎。
在系統(tǒng)的概要設計中我采用結構化設計(Structure Design,簡稱SD),SD以需求分析階段產生的數(shù)據(jù)流圖DFD為基礎,按一定的步驟映射成軟件結構。我首先將整個系統(tǒng)化分為幾個小問題,小模塊,在系統(tǒng)中,我設計了用戶管理、庫存管理、入庫管理、出庫管理、員工管理和供應商管理6個小模塊。然后,進一步細分模塊,添加細節(jié)。比如,用戶管理我又將其分為用戶注冊、用戶注銷、密碼修改;庫存管理分為庫存記錄查詢、庫存記錄修改、庫存記錄打印等等。
以下就是系統(tǒng)的結構圖:(在這里為了表達方便我將結構圖分開來表達。)
在得到系統(tǒng)的第一層功能模塊圖后,經過進一步地細化,得一系統(tǒng)的子功能模塊圖:
4.2.2 數(shù)據(jù)庫設計
在信息世界中,信息從客觀事物出發(fā)流經數(shù)據(jù)庫,通過決策機構最后又回到客觀世界,信息的這一循環(huán)經歷了三個領域:信息世界,數(shù)據(jù)世界,現(xiàn)實世界?,F(xiàn)實世界的事物反映到人的頭腦中,人的大腦對它有個認識過程,經過分析(選擇、命名、分類等)進入信息世界。這些信息再進一步加工、編碼,然后進數(shù)據(jù)世界,而軟件系統(tǒng)的開發(fā)工作需要考慮這兩個方面的問題,也就是要考慮系統(tǒng)開發(fā)所需要的數(shù)據(jù),以及如何對這些數(shù)據(jù)進行操作。這兩個問題貫穿了整個軟件系統(tǒng)的開發(fā)過程,這也就是數(shù)據(jù)庫的設計問題,軟件設計的一個核心。
4.2.2.1 ER圖設計
在系統(tǒng)設計的開始,我首先考慮的是如何用數(shù)據(jù)模型來數(shù)據(jù)庫的結構與語義,以對現(xiàn)實世界進行抽象。目前廣泛使用的數(shù)據(jù)模型可分為兩種類型,一種是獨立于計算機系統(tǒng)的“概念數(shù)據(jù)模型”,如“實體聯(lián)系模型”;另一種是直接面向數(shù)據(jù)庫邏輯結構的“結構數(shù)據(jù)模型”。在本系統(tǒng)中我采用“實體聯(lián)系模型”(ER模型)來描述數(shù)據(jù)庫的結構與語義,以對現(xiàn)實世界進行第一次抽象。ER模型直接從現(xiàn)實世界抽象出實體類型及實體間聯(lián)系,然后用ER圖來表示數(shù)據(jù)模型。它有兩個明顯的優(yōu)點:接近于人的思維,容易理解;與計算機無關,用戶容易接受。但ER模型只能說明實體間語義的聯(lián)系,不能進一步說明詳細的數(shù)據(jù)結構,它只是數(shù)據(jù)庫設計的第一步。
ER圖是直觀表示概念模型的工具,它有四個基本成分:
矩形框,表示實體類型(考慮問題的對象)。
菱形框,表示聯(lián)系類型(實體間的聯(lián)系)。
橢圓形框,表示實體類型和聯(lián)系類型的屬性。對于關鍵碼的屬性,在屬性名下劃一橫線。
直線,聯(lián)系類型與其涉及的實體類型之間以直線連接。
本系統(tǒng)為圖書倉庫管理,主要管理圖書的入庫、出庫以及庫存等事項。倉庫根據(jù)需要可以查詢圖書供應商的信息,同時還需要了解在入庫和出庫中員工的參與情況。依據(jù)倉庫管理的實際情況,考慮了多方面的因素以后,確定系統(tǒng)的ER圖如下:
(為了表達的方便,在這里我沒有在一張圖上表達出所有的關系,而是用一張總體ER圖,和幾張實體屬性關系圖來表達數(shù)據(jù)庫的結構。)
在該數(shù)據(jù)庫中,我設計了三個實體,分別是庫存、員工和供應商以及兩個聯(lián)系類型入庫和出庫。在本系統(tǒng)中庫存是核心,也是基本,沒有了庫存其它的也就沒有什么意義了。員工記錄的添加是考慮到責任問題,也就是說,在倉庫管理的實際運用中,出現(xiàn)了責任不清的現(xiàn)象,特別是由于倉庫的進出圖書數(shù)量都比較大時產生了一系列問題,所以在設計數(shù)據(jù)庫時,我特別考慮到這一點,加入了員工記錄這一實體。供應商信息的添加主要出于對圖書來源問題的思考。通過添加供應商信息可以比較清楚地了解圖書的進貨渠道,從圖書的質量到供應商的信譽都可以進行了解,同時可以為以后的圖書進購提供一定有用的信息。
入庫聯(lián)系類型將庫存信息、供應商信息和員工信息聯(lián)系在一起,可以方便地實現(xiàn)三個實體之間的聯(lián)接,而出庫聯(lián)系類型則將庫存信息和員工信息較好地聯(lián)接起,同時這兩個聯(lián)系類型又都具有各自特有的屬性。
下面就是各實體及聯(lián)系類型的屬性圖:(帶#號的屬性為關鍵字段)4.2.2.2 數(shù)據(jù)庫表格設計
在完成系統(tǒng)的ER圖之后,需要將ER模型轉化為關系模型,也就是說,要設計出數(shù)據(jù)庫所需要的表格。在這里,我選用的是關系數(shù)據(jù)庫。因為關系數(shù)據(jù)庫中的二維表格可以很清楚地描述數(shù)據(jù)之間的聯(lián)系。
在這里不得不提到一個概念——范式。其實在上一節(jié)的ER圖設計中,已經運用了范式的思想,不僅如此,在數(shù)據(jù)庫的表格設計中更離不開范式的思想,它是數(shù)據(jù)庫設計的基礎,如果不注意這個問題將會導致一系列問題的出現(xiàn)。
我在系統(tǒng)中定義的表格都嚴格地按照范式的思想和要求去完成,數(shù)據(jù)庫中的所有表格都達到了三范式的要求。根據(jù)系統(tǒng)ER圖,針對本系統(tǒng)的特點,在對所搜集的數(shù)據(jù)進行規(guī)范化之后,定義了如下六張表格,分別是庫存信息表,入庫信息表,出庫信息表,員工信息表,供應商信息表和密碼信息表。通過對這六張表格的操作可以較好地完成系統(tǒng)設計的各項功能,六張表格之間有著不同程度的聯(lián)系。(說明:在以下數(shù)據(jù)表中,K代表主鍵,#代表外鍵,字段值不為空。)
BookRecord 表(庫存信息表)
字段名稱 數(shù)據(jù)類型 說明
K BookID 數(shù)字 圖書編號
BookName 文本 圖書名
Author 文本 作者
Publisher 文本 出版社
PubDate 日期/時間 出版日期
Price 貨幣 價格
BookType 文本 圖書類型
Number1 數(shù)字 庫存數(shù)量
Addation 文本 備注
圖4.13 庫存信息表
庫存信息表主要用于記錄倉庫中現(xiàn)存放的所有圖書的詳細信息,包括圖書編號、書名、作者、出版社、圖書類型等有關圖書的各類信息,它即是該數(shù)據(jù)庫的主表,也是系統(tǒng)主界面的主要內容。
在該表中圖書編號是主鍵,它按圖書入庫的先后次序來編寫,每當有圖書入庫,系統(tǒng)自動給出圖書編號,這樣我們按圖書編號來查找圖書是比較方便的??紤]到編號比較難于記憶,所以使用了出版社和圖書類型兩個字段,在系統(tǒng)中我提供了出版社和圖書類型的分類查找,而且全部采用自動生成,每當系統(tǒng)中有新的出版社類型和圖書類型,彈出菜單會自動添中新類型,這樣就可以比較方便地實現(xiàn)按出版社和按圖書類型查找。此外,庫存數(shù)量也是一個比較關鍵的字段,該字段是在系統(tǒng)初始化時就給定的,每當有圖書入庫或出庫操作,系統(tǒng)就會自動修改圖書的庫存數(shù)量,以保持數(shù)據(jù)的一致性。做為備注有一點說明,我的數(shù)據(jù)庫中備注的數(shù)據(jù)類型是文本,而不是備注類型,主要考慮到該字段的長度并不大,而且在Delphi中文本數(shù)據(jù)類型的處理也比較方便一點。
Employee 表(員工信息表)
字段名稱 數(shù)據(jù)類型 說明
K EmployeeID 數(shù)字 員工編號
EmployeeName 文本 員工姓名
Sex 文本 性別
BornDate 日期/時間 出生日期
Grade 文本 職稱
WorkDate 日期/時間 工作日期
Telephone 文本 聯(lián)系電話
Address 文本 聯(lián)系地址
圖4.14 員工信息表
員工信息表主要用于記錄有關員工的各類信息,包括姓名、職稱、出生日期、聯(lián)系電話、聯(lián)系地址等。它主要用來為系統(tǒng)提供員工的有關信息,因為在系統(tǒng)中,入庫和出庫操作均與員工有著一定的聯(lián)系,在查詢入庫信息和出庫信息時,有時需要查找有關此項記錄有關的員工信息,在系統(tǒng)中我是通過入庫記錄與員工記錄(出庫記錄和員工記錄)之間的聯(lián)接查詢來完成的。另外,作為一個倉庫也有必要了解其所屬員工的一些基本情況,以便查詢。
Shopkeeper 表(供應商信息表)
字段名稱 數(shù)據(jù)類型 說明
K ShopkeeperID 數(shù)字 供應商編號
ShopkeeperName 文本 供應商姓名
Address 文本 地址
PostNo 數(shù)字 郵編
OfficePhone 文本 辦公電話
HomePhone 文本 住宅電話
Email 文本 E-mail
PayType 文本 付款方式
圖4.15 供應商信息表
供應商信息表主要用于記錄有關供應商的各類信息,包括姓名、地址、電話、付款方式等。它主要用來為系統(tǒng)提供供應商的有關信息,在系統(tǒng)中入庫記錄是與供應商記錄相聯(lián)系的,通過入庫記錄可以查找相關的供應商信息。在供應商信息中,考慮當實際情況,我特別加入了Email和付款方式這兩個字段,因為在當今信息世界中,多種多樣的通訊方式和多種多樣的付款方式是必然的,是數(shù)據(jù)庫中必須與以記錄。
InRecord 表(入庫信息表)
字段名稱 數(shù)據(jù)類型 說明
K InID 數(shù)字 入庫編號
# BookID 數(shù)字 圖書編號
# EmployeeID 數(shù)字 員工編號
# ShopkeeperID 數(shù)字 供應商編號
Number 數(shù)字 入庫數(shù)量
BuyDate 日期/時間 入庫日期
圖4.16 入庫信息表
OutRecord 表(出庫信息表)
字段名稱 數(shù)據(jù)類型 說明
K OutID 數(shù)字 出庫編號
# BookID 數(shù)字 圖書編號
# EmployeeID 數(shù)字 員工編號
Number2 數(shù)字 出庫數(shù)量
OutDate 日期/時間 出庫日期
圖4.17 出庫信息表
入庫信息表主要用于記錄有關入庫的詳細信息,包括入庫數(shù)量、入庫日期以及圖書、員工、供應商三方的編號,以便查詢。出庫信息表主要用于記錄有關出庫的詳細信息,包括出庫數(shù)量、出庫日期以及圖書、員工的編號。出庫信息表和入庫信息表一樣,其實它們都屬于聯(lián)系類型,系統(tǒng)通過這兩個表可以聯(lián)接上其它的表為用戶提供多種條件的聯(lián)接查詢。值得提出的一點是入庫記錄和出庫記錄的添加不僅僅是單表操作,由于它們都與庫存記錄相聯(lián)系,所以,無論您是添中入庫記錄還是添加出庫記錄,都必須同時修改庫存記錄,以保持數(shù)據(jù)的一致性,否則將引發(fā)系統(tǒng)出錯而這些我都讓其在系統(tǒng)中自動完成。無論您是添加入庫記錄,還是添加出庫記錄,系統(tǒng)都將自動修改庫存中圖書的數(shù)量,而且,在您出庫的數(shù)量大于庫存數(shù)量時,系統(tǒng)還會自動提示錯誤,這樣就可以防止一定錯誤的發(fā)生。
在入庫信息表和出庫信息表中我還定義了幾個外鍵,它提供了一種表示幾個關系聯(lián)系的方法。比如,系統(tǒng)中通過在入庫信息表中定義的外鍵 BookID、EmployeeID和ShopkeeperID可以將庫存信息表、員工信息表和供應商信息表聯(lián)系在一起,從而方便地實現(xiàn)聯(lián)接查詢,而且,引入外鍵的定義是實體完整性約束的一個主要方面。
Key 表(密碼信息表)
字段名稱 數(shù)據(jù)類型 說明
K KeyName 文本 用戶姓名
KeyNo 文本 用戶密碼
圖4.18 密碼信息表
密碼信息表主要用于記錄所有的用戶名和用戶密碼。它是在用戶登陸時用來確定用戶和密碼的正確性,以防止非法用戶登陸。
通過以上設計已經完成了系統(tǒng)的概要設計,當我們有了系統(tǒng)的功能模塊圖和數(shù)據(jù)庫之后,就需要著手去實現(xiàn)每一個模塊,為每一個功能設計程序流程圖,這也就是系統(tǒng)的詳細設計。
§4.3 系統(tǒng)詳細設計
在前面的概要設計中,已將系統(tǒng)劃分為多個模塊,并將它們按照一定的原則組裝起來,同時確定了每個功能及模塊之間的外部接口?,F(xiàn)在所要做的就是確定每個模塊具體執(zhí)行過程,也可以說是“過程設計”。
在處理過程設計時我采用的是結構化程序設計(簡稱SP)方法。需要指出的是系統(tǒng)的詳細設計并不是指具體的編程序,而是將概要設計階段產生的系統(tǒng)功能模塊圖細化成很容易產生程序的圖紙。因此詳細設計的結果基本決定了最終程序的質量。為軟件的質量,延長軟件的生存期,軟件的可測試性、可維護性提供重要的保障。詳細設計的目標不僅是邏輯上正確地實現(xiàn)每個模塊的功能,還應使設計出的處理過程清晰易讀。
由前一階段產生的系統(tǒng)功能模塊圖,我為系統(tǒng)的主要部分設計了如下程序流程圖:通過以上步驟,基本上完成了對整個系統(tǒng)的總體設計,接下來所要做的就是軟件的編碼工作。系統(tǒng)總體設計的好壞直接影響著下一步工作,只有在這一階段設計出好的模塊圖和程序流程圖,才能更有利于編碼,產生好的軟件系統(tǒng)。
第五章 系統(tǒng)應用程序設計
§5.1 系統(tǒng)窗體模塊組成
§5.2 數(shù)據(jù)模塊窗體的設置
在編寫數(shù)據(jù)庫應用程序時,經常要遇到這樣的情況,即好多組件、窗體同時訪問相同的數(shù)據(jù)源,如果為每一個組件或者窗體都設置一個數(shù)據(jù)源將是十分耗時的工件,而且要保證這些數(shù)據(jù)源的確是相同的也需花一番功夫。那么,能不能將這些數(shù)據(jù)源集中管理,最好是做成一個統(tǒng)一的模塊,需要時就將該模塊引入而不必直接操作數(shù)據(jù)源本身呢?數(shù)據(jù)模塊(DataModule)是解決這個問題最好的答案。簡單說來,數(shù)據(jù)模塊是用來集中管理數(shù)據(jù)源的一個窗體,該窗體可被需要的地方隨時引入。
圖5.2給出了本程序的數(shù)據(jù)模塊(datamoduleform)窗體圖,除報表窗體外所有的數(shù)據(jù)存取組件和數(shù)據(jù)源組件都在此數(shù)據(jù)模塊中進行了定義。值得一提的是,設置了數(shù)據(jù)庫Database組件,該組件引入了系統(tǒng)所需的唯一的數(shù)據(jù)庫tsxs,Database組件的DatabaseName屬性設置為tsckgl。tsxs數(shù)據(jù)庫已在ODBC配置程序中進行了設置。其他的數(shù)據(jù)存取組件都是基于此數(shù)據(jù)庫組件創(chuàng)建的,這樣做的好處是,當數(shù)據(jù)庫的別名或者其他信息改變之后,只需修改Tdatabase組件的AliasName屬性即可。
另外,在本系統(tǒng)的數(shù)據(jù)模塊窗體圖中,我大多采用的AODQuery組件而沒有采用BDE組,這主要是基于對ADO組件的了解。在Delphi的學習中我對ADO組件了解的更加清楚,使用也較BDE更為熟練,而且,ADO組件的功能也較BDE更為強大,所以在這里大多采用ADO組件來進行數(shù)據(jù)庫聯(lián)接。同時我也使用了BDE組件中的Table,因為在某些時候BDE有著其自身特有的優(yōu)越性。 主窗體功能模塊的實現(xiàn)
file://主窗體程序代碼
public
file://在程序的起始部分,定義快捷按鈕點擊事件
Procedure Popup1Handler(Sender:Tobject);
Procedure Popup2Handler(Sender:TObject);
**********************************************************************
procedure Tmainform.Popup1Handler(Sender: TObject);
begin
file://快捷按鈕1(點“按出版社分類”按鈕產生)的點擊事件
with datamoduleform.MainQuery do
begin
file://打開數(shù)據(jù)模塊窗體的MainQuery,對BookRecord表進行操作
close;
file://關閉MainQuery
SQL.Clear;
file://清除SQL屬性中的SQL命令語句
SQL.Add(‘select * from BookRecord where Publisher=:Pub‘); file://添加新的SQL語句
Parameters.ParamByName(‘Pub‘).Value:=(Sender as TMenuItem).Caption;
open;
file://重新打開MainQuery
end;
end;
**********************************************************************
procedure Tmainform.SpeedButton1Click(Sender: TObject);
Var s1,s2,s3,s4,s5 :String;
file://設立5個變量以方便實現(xiàn)模糊查詢
begin
file://主窗口庫存查詢按鈕事件
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語句來實現(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(‘沒有找到你所需要的記錄!‘,mtInformation,[mbOK],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘;
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord‘);
file://這里相當于一個刷新功能
open;
end;end;
end;
**********************************************************************
procedure Tmainform.SpeedButton3Click(Sender: TObject);
begin
file://庫存表刷新按鈕事件
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://自動生成快捷按鈕1的內容
with datamoduleform.BookQuery do
begin
file://從數(shù)據(jù)庫中選擇出版社類型
close;
SQL.Clear;
SQL.Add(‘select distinct Publisher from BookRecord‘);
open;
PopupMenu1:=TPopupMenu.Create(Self); file://自動生成快捷菜單
PopupMenu1.AutoHotkeys:=maManual;
file://自定義熱鍵
while Not Eof do
begin
file://根據(jù)出版社內容生成菜單子項
PopupItem:=TMenuItem.Create(Self);
PopupItem.Caption:=FieldByName(‘Publisher‘).AsString;
PopupMenu1.Items.Add(PopupItem);
PopupItem.onClick:=Popup1Handler;
file://確定菜單子項的點擊事件
Next;
end; end;
PopupMenu1.Popup(384,67);
file://在指定位置顯示快捷菜單1
end;
**********************************************************************
procedure Tmainform.FormActivate(Sender: TObject);
begin
file://系統(tǒng)初始化,在進入mainform時自動添加數(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)初始化,定義界面大小,以適應不同分辯率
Width:=800;Height:=600;
end;
**********************************************************************
procedure Tmainform.Timer1Timer(Sender: TObject);
begin
file://在狀態(tài)欄顯示時間
StatusBar1.Panels[2].Text:=DateToStr(Date);
StatusBar1.Panels[4].Text:=TimeToStr(Time);
end;
§5.4 入庫、出庫窗體模塊的實現(xiàn)
圖5.4 系統(tǒng)入庫管理窗體
圖5.5 系統(tǒng)出庫管理窗體
procedure Tinoutform.SpeedButton4Click(Sender: TObject);
begin
file://入庫管理查找按鈕事件
with datamoduleform.BookQuery do
file://入庫查詢處理
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://設置顯示框不可更改屬性
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://在沒有查找到的情況下,清空所有顯示框
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(‘沒有找到你所需要的記錄!‘,mtInformation,[mbOK],0);
Edit13.Text:=‘‘;Edit13.SetFocus;
end;
end;
with datamoduleform.InQuery do file://自動入庫編號的獲取
begin
close;
SQL.Clear;
SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘);
open;
file://找到入庫編號中最大的一個
Edit26.ReadOnly:=false;
Edit26.Text:=FieldValues[‘InID‘]+1; file://最大的入庫編號加1形成新的入庫編號
Edit26.ReadOnly:=true;Edit26.Color:=clMenu; file://設置編號的不可更改性
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton1Click(Sender: TObject);
var s:integer;
begin
file://入庫管理添加按鈕事件
if Edit1.TextNULL
then MessageDlg(‘請輸入完整的入庫信息和圖書信息,然后單擊確定按鈕?!?/p>
mtInformation,[mbok],0)
else begin
if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘)
then begin
MessageDlg(‘請輸入完整的入庫信息!‘,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://向入庫信息表中插入記錄
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://計算入庫后庫存圖書數(shù)量
Edit12.Text:=IntToStr(s);
file://將修改后的庫存圖書數(shù)量顯示
Edit12.ReadOnly:=true;
with datamoduleform.BookQuery do
file://修改庫存記錄中圖書數(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語句
MessageDlg(‘記錄已成功添加!‘,mtInformation,[mbOK],0);
Edit13.SetFocus;
end;
end;
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton2Click(Sender: TObject);
begin
file://入庫管理確定按鈕事件
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(‘請輸入所需的全部入庫信息!‘,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://向入庫信息表中插入記錄
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://在完成入庫信息的添加后,修改庫存記錄
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://新書入庫按鈕事件
Edit13.Text:=‘‘;Edit13.Color:=clMenu;
with datamoduleform.InQuery do file://自動入庫編號的獲取
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://自動圖書編號的獲取
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord where BookID>=All(select BookID from BookRecord)‘);
file://找到庫存圖書編號中最大的一個
open;
Edit1.ReadOnly:=false;
Edit1.Text:=FieldValues[‘BookID‘]+1; file://顯示自動生成的圖書編號
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://出庫管理確定按鈕事件
if (Edit24.Text=‘‘) or (Edit27.Text=‘‘) or (Edit28.Text=‘‘)
then begin
MessageDlg(‘請輸入完整的出庫信息!‘,mtInformation,[mbok],0);
Edit24.SetFocus;
end
else begin
if Edit27.Text>Edit21.Text
file://檢查出庫數(shù)量是否小于庫存數(shù)量
then begin
MessageDlg(‘庫存中的圖書數(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://添加出庫記錄
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://計算出庫后庫存圖書數(shù)量
Edit21.Text:=IntToStr(s);
file://顯示出庫后庫存圖書數(shù)量
Edit21.ReadOnly:=True;
with datamoduleform.BookQuery do
begin
file://修改庫存圖書數(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(‘出庫記錄添加成功!‘,mtInformation,[mbok],0);
Edit14.Text:=‘‘;Edit14.SetFocus;
end;
end;
end;
§5.5 查詢功能的實現(xiàn)
查詢功能包括員工信息查詢,供應商信息查詢,入庫信息查詢和出庫信息查詢。由于每一個功能的實現(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://實現(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://在找到記錄的情況下關閉查找窗口
else
begin
MessageDlg(‘沒有找到你所需要的記錄!‘,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)登陸窗體模塊的實現(xiàn)
由于系統(tǒng)登陸窗體中有一幅彩圖,在這里不便給出,而只給出了系統(tǒng)的實現(xiàn)。
var keyname: string; file://定義了一個全局變量,在key2中有調用
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(‘登陸名錯誤,請重新輸入!‘,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(‘登陸密碼錯誤,請重新輸入!‘,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 用戶管理功能的實現(xiàn)
5.7.1 用戶管理主窗體
圖5.7 用戶管理主窗體
5.7.2 密碼修改窗體模塊的實現(xiàn)
圖5.8 密碼修改窗體
procedure Tkey2form.SpeedButton1Click(Sender: TObject);
begin
file://密碼修改窗口修改按鈕事件
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)or(Edit3.Text=‘‘)
then begin
MessageDlg(‘請輸入完整的信息?!?,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
if Not datamoduleform.KeyTable.Locate(‘KeyNo‘,Edit1.Text,[])
then begin
MessageDlg(‘原密碼輸入錯誤,不能修改新密碼!‘,mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end
else begin
if Edit2.TextEdit3.Text
then begin
MessageDlg(‘兩次密碼輸入不同,請重新輸入新密碼!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit2.SetFocus;
end
else begin
file://在數(shù)據(jù)庫中修改密碼
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 用戶注冊窗體模塊的實現(xiàn)
圖5.9 用戶注冊窗體
procedure Tkey3form.SpeedButton1Click(Sender: TObject);
begin
file://用戶注刪窗口注刪按鈕事件
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)or(Edit3.Text=‘‘)
then begin
MessageDlg(‘請輸入完整的信息!‘,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
if datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://判斷用戶名是否存在,系統(tǒng)不允許用戶名重復
then begin
MessageDlg(‘用戶名已存在,請輸入新的用戶名和密碼!‘,
mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end
else begin
if Edit2.TextEdit3.Text
then begin
MessageDlg(‘您輸入的兩個密碼不相同,請重新輸入!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit2.SetFocus;
end
else begin
with datamoduleform.KeyQuery do
file://在數(shù)據(jù)庫中添加該用戶
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 用戶注銷窗體模塊的實現(xiàn)
圖5.10 用戶注銷窗體
procedure Tkey4form.SpeedButton1Click(Sender: TObject);
var s:string;
begin
file://用戶注銷窗口注銷按鈕事件
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)
then MessageDlg(‘請輸入完整的信息!‘,mtInformation,[mbok],0)
else begin
if Not datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://判斷用戶名是否存在,用戶名必須存在,才可以刪除
then begin
MessageDlg(‘您所輸入的用戶名不存在,請重新輸入或按“取消”退出?!?,
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(‘您所輸入的密碼不正確,請重新輸入或按“取消”退出?!?/p>
mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit2.SetFocus;
end
else begin
file://從數(shù)據(jù)庫中刪除該用戶
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;
結束語
本系統(tǒng)是一個面向小型圖書企業(yè),具有一定實用性的數(shù)據(jù)庫信息管理系統(tǒng)。它主要完成對圖書倉庫的一系列管理,包括入庫、出庫、庫存以及員工和供應商信息管理。本系統(tǒng)采用當前流行的面向對象的開發(fā)工具—Delphi來完成整個系統(tǒng)的設計,在數(shù)據(jù)庫的設計上利用了Access的便利性和實用性。
本系統(tǒng)具有相當?shù)膶嵱霉δ?。在查詢方面,系統(tǒng)實現(xiàn)了多條件任意字段的模糊查詢,同時在分類查詢上實現(xiàn)了動態(tài)生成,系統(tǒng)可以自動識別用戶不同的輸入。在圖書入庫、出庫和庫存三者之間建立了良好的鏈接關系,某一部分地修改均會自動引發(fā)系統(tǒng)對與其相關的部分進行連鎖修改。在用戶管理方面,系統(tǒng)較好地實現(xiàn)了用戶注冊,用戶注銷和密碼修改等各項功能。
系統(tǒng)在設計過程中不可避免地遇到了各種各樣的問題,由于整個系統(tǒng)完全都是由個人設計的,有關Delphi許多細節(jié)問題都要靠自己去摸索,加之本人水平有限,并沒有完全地理解Delphi的強大功能,而且還存在著許多不足之處。如:
受開發(fā)條件和開發(fā)時間的限制,本系統(tǒng)只利用了本地數(shù)據(jù)庫Access,它同應用程序處于同一系統(tǒng)中,能存儲的數(shù)據(jù)量也有一定限制,并沒有發(fā)揮出Delphi其數(shù)據(jù)庫方面的優(yōu)勢;
報表打印功能尚不夠全面完善,不能實現(xiàn)動態(tài)報表;
在一些數(shù)據(jù)輸入時沒有及時的進行數(shù)據(jù)格式校驗,不能保證數(shù)據(jù)輸入的絕對正確性。
由于時間關系,系統(tǒng)功能實現(xiàn)不夠完善,使用不是很方便,比如,沒有實現(xiàn)多條記錄的連鎖刪除和添加以及數(shù)據(jù)的導入功能。
這些都是需要完善的地方,該系統(tǒng)離實際使用也還有相當?shù)木嚯x,需要我進行不斷地補充和完善。
通過本次畢業(yè)設計我學到了不少新的東西,也發(fā)現(xiàn)了大量的問題,有些在設計過程中已經解決,有些還有待今后慢慢學習。只要學習就會有更多的問題,有更多的難點,但也會有更多的收獲。
考 文 獻
[1] 鄭榮貴、黃平、谷會東,Delphi 6.0數(shù)據(jù)庫開發(fā)與應用,中科多媒體電子出版社,2002
[2] 伍俊良,Delphi 6控件應用實例教程,北京希望電子出版社,2002
[3] 盧國俊,Delphi 6數(shù)據(jù)庫開發(fā),電子工業(yè)出版社,2002
[4] 邊萌,Delphi 編程起步,機械工業(yè)出版社,2002
[5] 伍俊良,Delphi 6課程設計案例精編,中國水利水電出版社,2002
篇4
靜壓傳動目前是內燃叉車非常理想、十分先進的傳動方式,其主要特點為可靠性高、控制精確、起步強勁、換向迅速、維護簡便。
斗山舉行產銷慶典大會
4月19日,斗山工程機械(中國)有限公司在煙臺舉行了盛大的慶典,慶祝挖掘機產銷突破3萬臺。來自韓國本部的斗山INFRACORE董事長崔先生、戰(zhàn)略社長金用盛先生、斗山工程機械(中國)有限公司總經理金東哲先生,以及煙臺市領導、韓國駐青島總領事等嘉賓,與斗山公司商、外協(xié)廠家代表以及員工等1000余人參加了慶典。
斗山工程機械(中國)有限公司1994年進駐中國,1996年竣工投產,依靠其過硬的產品質量和優(yōu)質服務,連年位居中國挖掘機市場占有量第一,并于2006年4月率先突破產銷30000臺,成為中國挖掘機行業(yè)的龍頭企業(yè)之一。在物流領域,斗山叉車的產銷量也多年保持穩(wěn)定的增長勢頭,斗山叉車得到了客戶的廣泛好評,并被中國物流技術協(xié)會和國內物流裝備業(yè)權威媒體《物流技術與應用》雜志列為重點推薦的知名品牌。
慶典期間,《物流技術與應用》雜志廣告總監(jiān)李國華先生拜會了崔董事長、白承燦副總經理、姚艷俠課長等斗山公司領導,交流了對中國叉車市場的看法和斗山集團今后在叉車領域的發(fā)展情況。斗山集團領導對《物流技術與應用》雜志給予了很高評價,并對雙方多年來的合作十分滿意。
會后,崔董事長等斗山公司領導舉行了記者招待會,就挖掘機、X系列叉車、機床、發(fā)動機等四大領域的生產、銷售情況以及斗山公司今后的發(fā)展戰(zhàn)略等問題回答了記者的提問(見上圖)。
OM叉車為MotoGP上海站比賽提供卓越服務
國際摩聯(lián)世界摩托車錦標賽MotoGP于5月12日再次登陸上海。意大利OM叉車協(xié)助各國選手準備比賽車具,出色完成了整個賽事的設備搬運布置工作。
MotoGP上海站比賽的大部分比賽器械都是通過集裝箱運抵中國的。在場地的準備過程中,OM叉車承擔了大量繁重的搬卸工作。OM公司派出了3輛性能優(yōu)秀的XD柴油平衡重式叉車??紤]到有些器械的體積較大,除了常規(guī)的1.52米叉長的車輛,OM還特地采用了1.8米叉長的車輛來配合工作,使得整個搬運過程更加合理、輕便、快捷。
OM叉車近期活躍于大型文體公共活動中,充分展示其世界一流的產品和服務。OM叉車在近期參與的所有活動中,均通過租賃的方式向組織方提供服務,為叉車的應用市場開辟一片全新的天地。
西門廣門動化與驅動集團住蘇州設立研發(fā)中心
日前,西門子自動化與驅動集團和蘇州市政府簽署了合作意向書。根據(jù)這份意向書,西門子自動化與驅動集團將在蘇州西門子電器有限公司下成立研發(fā)中心。該研發(fā)中心投資總額大約1.2億人民幣,主要從事低壓產品的研究開發(fā),旨在增強西門子在這一領域的技術力量。新研發(fā)中心的投資計劃再次展現(xiàn)了西門子自動化與驅動集團長期致力于中國市場、服務本地客戶的決心。
蘇州西門子電器有限公司坐落于蘇州國家高新技術產業(yè)發(fā)展園區(qū)內,是一家經過政府認可的高科技企業(yè)。西門子自動化與驅動集團對研發(fā)中心的投資主要用于相關的樓字建設、實驗室設備、軟件許可以及培訓。此外,西門子自動化與驅動集團還將大幅擴大現(xiàn)有研發(fā)隊伍,在未來3年中招募120名經驗豐富的工程師從事低壓產品開發(fā)。
SAP與軟戰(zhàn)略合作全面升級
5月22日,SAP與中國最大的軟件與解決方案提供商東軟集團在北京聯(lián)合舉行SAP-東軟戰(zhàn)略合作新聞會。雙方宣布,將建立更加廣泛而深入的戰(zhàn)略合作伙伴關系,通過優(yōu)勢互補的強強聯(lián)合,大力拓展面向中國企業(yè)的管理軟件市場,為中國企業(yè)客戶提供更加優(yōu)化的管理軟件解決方案。
作為合作協(xié)議的一部分,SAP將成為東軟集團的戰(zhàn)略投資者。根據(jù)此次簽署的協(xié)議,雙方將充分整合各自的優(yōu)勢與競爭力,就中國企業(yè)管理軟件的研發(fā)、市場開拓以及人力資源培訓方面展開全方位的合作。而東軟將設立專門的SAP業(yè)務團隊,擴大SAP培訓計劃和基于SAP最佳業(yè)務實踐系列軟件的解決方案的開發(fā),同時將采用SAPNetWeaver業(yè)務流程平臺作為其企業(yè)應用軟件的開發(fā)平臺。甲骨文在華推出Oracle商業(yè)智能套件
4月17日,甲骨文公司在中國推出開放和基于標準的Oracle商業(yè)智能套件。該套件滿足整個企業(yè)范圍內所用用戶和業(yè)務流程的需求。新的Oracle商業(yè)智能套件聯(lián)合了甲骨文公司的商業(yè)智能中間件和SiebeI商業(yè)分析。Oracle商業(yè)智能套件與Orac,e電子商業(yè)套件、Oracle People Soft Enterprise、Orac,eJDEdwardsEnterpriseOne、OracleSiebel預置分析應用聯(lián)合使用,可滿足客戶今天所有商業(yè)智能和分析需求。該套件與Oracle應用產品、Oracle數(shù)據(jù)庫、Oracle融合中間件中的其他軟件聯(lián)合使用,可在整個企業(yè)范圍內實現(xiàn)商業(yè)智能,并能將這種智能性以插座方式集成到現(xiàn)有運營系統(tǒng)中。
Infor收購美國SSA成為全球第三大ERP供應商
美國SSA全球科技公司日前宣布,美國Infor公司已在收購SSA公司的合同上簽字。Infor公司將以每股19.50美元收購SSA公司股票。此次收購將使Infor成為銷售額約1600億日元的ERP供應商。
在ERP業(yè)界,今年4月美國Lawson軟件完成了對瑞典Intentia公司的收購。因此,Lawson、Infor和SSA在銷售規(guī)模上一直在爭奪第三大ERP供應商之位。此次收購完成后,Infor將成為繼德國SAP和美國甲骨文之后全球第三大ERP供應商。
NCR與訊寶科技協(xié)力銷售第1代RFID系統(tǒng)
NCR公司和美國訊寶科技有限公司達成一項全球協(xié)議,訊寶科技指定NCR為其合作伙伴招募計劃的主要成員,授權NCR轉售訊寶的全套企業(yè)移動產品,包括無線射頻識別(RFID)識讀器和標簽。
作為零售市場的領導廠商,訊寶和NCR深厚的行業(yè)專長和高性能解決方案,能夠幫助零售商掌握下一代數(shù)據(jù)采集技術,通過在供應鏈內降低勞動成本、加速貨物運輸速度和增強可視性,大幅度改善客戶體驗。
Impinj高性能Gen 2RFID識讀
器投產
近日,Gen 2RFID芯片的龍頭供應商以及內置式永久存儲器市場領軍企業(yè)Implnl宣布了Gen 2RFID識讀器投產。Impinj同時還了公司的供應渠道戰(zhàn)略合作計劃,參加的企業(yè)主要是增值商、原設備制造商。該合作計劃的目標是,通過這些企業(yè),將Impinj的高性能SpeedwayGen2 RFID識讀器大批量地供應北美、亞洲和歐洲的客戶。
Speedway識讀器是ImpmjRFID解決方案的一個關鍵部件,它有兩個重要特性:識讀性能可靠、可以在識讀器密集環(huán)境工作,是零售業(yè)環(huán)境必不可少的重要性能。目前,Impinj已經把Speedway識讀器的特許經營權提供給一些原設備制造商,如日本的NECTOKIN、香港的ConvergenceSystems Limited。
曼哈特聯(lián)合軟件協(xié)助同藥物流保持領先地位
5月18日,曼哈特聯(lián)合軟件有限公司宣布,國藥物流于2月8日開始在其新建的高度自動化的上海配送中心使用其供應鏈解決方案。作為其供應鏈管理及執(zhí)行戰(zhàn)略性規(guī)劃的一部分,國藥計劃在20個配送中心實施曼哈特的解決方案,而上海配送中心則是首個執(zhí)行這套解決方案的站點。
國藥控股是一家集科、工、貿于一體的跨地域的大型醫(yī)藥集團性企業(yè),以藥品分銷為核心,占公司整個銷售收入的90%,其中70%主要是國際進口與合資產品在中國市場的分銷業(yè)務。
斑馬公司配送中心及維修服務中心在上海成立
5月23日,美國斑馬技術公司宣布其配送中心和維修服務中心在上海正式成立。這是斑馬公司關注中國本土市場、提高客戶滿意度、深化渠道政策的重要舉措,也是其中國發(fā)展計劃中一個新里程碑。
坐落在上海市普陀區(qū)桃浦鎮(zhèn)普羅斯西北物流園區(qū)的配送中心,面積超過2000平米,由UPS公司提供第三方物流服務。從5月22日起,斑馬公司中國的合作伙伴將直接向上海的配送中心訂貨,配送中心接到訂單后兩個工作日內即可安排發(fā)貨,這將比以前向美國總部訂貨并辦理進口節(jié)省至少三周的時間,因此不僅大大縮短了交貨時間,還減少了倉儲和貨運所占用的資金。同時,以人民幣作為結算方式向國內訂貨減少了合作伙伴貸款和匯率的損失。而上海維修中心成立以后,大大縮短了維修響應時間,備機以及維修配件的供應問題得到更好地解決。
Intermec瞄向垂直行業(yè)市場
自動識別設備及RFID解決方案供應商美國易騰邁公司(Intermec),日前在中國物流業(yè)高峰會上,向包括交通運輸與物流在內的行業(yè)合作伙伴以及中國用戶詮釋了以數(shù)據(jù)自動采集(ldentify)、物品追蹤(Track)和物品管理(Manage)為中心的lTM解決方案的理念,并特別介紹了其最新的RFID解決方案。
Intermec公司表示,RFID作為一種新興的自動識別技術,在中國處于剛剛起步的階段,其發(fā)展?jié)摿κ志薮?。它可以應用在物流控制方面,并將對社會各個方面產生重要作用。
上海先達聯(lián)手Zebra推出新款桌面型打印機
日前,上海先達條碼技術有限公司與美國斑馬公司(Zebra)聯(lián)手推出zebra888桌面型打印機,該款打印機是特別針對大中華市場的使用環(huán)境度身打造的,不僅配置了簡、繁中文字庫,而且與同類機型相比,其銷售價格極具競爭力,并保持了Zebra產品一貫的小巧耐用性能。據(jù)悉,該型號的原型機在全球至少有200萬臺的裝機量,因此,預計該型號打印機的面世會對目前的中國打印機市場產生極大的影響。
8Q推出手機電子回執(zhí)管理解決方案
北京元泰世紀科技有限公司(8QTechnologies)日前宣布推出創(chuàng)新的手機電子回執(zhí)管理解決方案,借助手機以及相關識別設備,實現(xiàn)二維條碼(QRcode)的信息采集和管理,以滿足零售、娛樂等行業(yè)對CRM移動解決方案的需求。8Q手機電子回執(zhí)管理解決方案包含條碼生成軟件、識別識讀設備和相關發(fā)送適配服務??蛻糁灰獙⑾嚓P信息輸入軟件,即可生成符合國標的二維碼圖形,并且通過適配系統(tǒng)來滿足手機型號的不同顯示需求,而安裝在零售、娛樂場所的識別設施通過掃描手機屏幕上顯示的二維碼,即可解析出其中的對應信息,實現(xiàn)移動電子折扣券、電子VIP、電子提貨卡等諸多應用。
訊寶科技宣布售出第50萬臺MC9000 手持移動終端
美國訊寶科技科技公司日前售出了第50萬臺MC9000手持移動終端,標志著訊寶科技鞏固了在堅固型移動終端領域的領導地位。作為訊寶科技的長期客戶,可口可樂公司購買了第50萬臺移動終端。
大約兩年半之前,訊寶科技首次推出針對關鍵任務企業(yè)應用的高檔堅固型手持移動終端系列――MC9000。其高度堅固的設計、多模無線連接、三種工效尺寸選擇以及高效的合作伙伴生態(tài)系統(tǒng)已經使MC9000得到市場的廣泛認可。借助MicrosoftWindows計算平臺和InteIXSCale處理器,MC9000手持移動終端系列幫助供應鏈、零售、制造、自動化現(xiàn)場服務、交通運輸及物流行業(yè)的移動工作人員最大程度地提高效率和生產力。
訊寶科技為維珍航中提供RFID資產管理解決方案
日前,美國訊寶科技公司及其主要解決方案合作伙伴PEAKTechnologies為英國維珍航空公司的一個試驗性項目提供RFID技術。該項技術主要用于跟蹤希斯羅(Heathrow)國際機場物流供應鏈中的高價值飛機零部件。目前,維珍航空是英國第一家使用RFID技術對零部件進行現(xiàn)場跟蹤的航空公司。維珍航空選擇了訊寶科技的MC9000―GRFID手持終端及RFID識讀器,并且采用了包括一臺WS2000無線交換機和多個AP300接入點在內的訊寶科技無線LAN(WLAN)基礎設施。此次試驗的目的是在緊急情況下跟蹤可修復的高價值飛機零部件。
甲骨文推出新版JD EdwardsEnterpriseOne
4月25日,甲骨文公司在協(xié)作2006用戶大會上宣布推出JDEdwardsEnterpriseOne8.?2。這一最新版套件增加了一些新模塊并增強了很多功能, 以滿足廣大EnterpriseOne客戶的需求。新版本還增加了專門面向食品和飲料行業(yè)的模塊。JDEdwardsEnterpriseOne8.12已經通過了在Oracle融合中間件上的認證。該軟件可優(yōu)化供應商關系,確保產品和服務質量最優(yōu)、價格最低,有助于公司降低
運營成本。其中的JD EdwardsEnterpriseOne營運索源模塊與所有JDEdwardsEnterpriSeOne供應管理解決方案完全集成,各公司可用這個模塊高效率管理從關鍵供貨決策到向供應商付款的整個供應過程的所有階段。
飛利浦率先推出業(yè)界首個快速模式Plus設備
皇家飛利浦電子集團日前了業(yè)內首個基于快速模式Plus(Fm+)規(guī)格的12C邏輯設備,頻率最高可達?MHz(1MB/s),是以前12C總線的兩倍,并且兼容現(xiàn)有快速模式和標準模式設備。此外,F(xiàn)m+還將總體容量增加了10倍,在較低的總線速度下,無需緩沖也能進行遠距離傳輸,這使工程師可以進行更靈活的系統(tǒng)設計,以更高的速度來滿足高帶寬的要求,提高總線容量,用于LED、建筑照明和游戲等需要在一個總線上連接大量組件的應用。
飛利浦在1980年代初期發(fā)明了12C總線并一直致力于推動12C技術的革新。I2C總線是一種優(yōu)秀的雙線總線,具有由軟件定義的協(xié)議,為系統(tǒng)內部集成電路之間提供通訊連接。
上醫(yī)股份啟用曼哈特倉儲管理解決方案
5月18日,全球領先的供應鏈解決方案供應商曼哈特聯(lián)合軟件公司宣布,上海市醫(yī)藥股份公司已于2月20日在其新建的物流中心成功實施了曼哈特的倉儲管理解決方案。除了與ERP實現(xiàn)無縫連接外,曼哈特倉儲管理系統(tǒng)也成功地與大量的自動化倉儲設備實現(xiàn)了無縫連接,包括自動化高架立體庫、電子標簽揀貨系統(tǒng)、托盤與周轉箱輸送線和自動分揀系統(tǒng)。
上醫(yī)股份是一家立足上海、覆蓋華東、輻射全國的中國最大的藥品分銷公司。該公司營銷網(wǎng)格占據(jù)了藥品分銷的高端市場(一級、二級醫(yī)院及二級藥品批發(fā)商),現(xiàn)已成為35家跨國公司在中國的總,并且是國際醫(yī)藥批發(fā)商聯(lián)合會在中國大陸的惟一會員。
FKI升級版訂單管理軟件
全球領先的集成化物流解決方案供應商FKI物流技術公司,近日宣布公司的OrderManager(訂單管理)軟件已升級,成為倉庫管理系統(tǒng)(WMS)與倉庫控制系統(tǒng)(WCS)的組合。升級的內容包括:支持RFID、增強倉庫訂單管理、庫存控制、提供作業(yè)效率報告等。新的升級軟件既可以經濟有效地用于小型手工操作的庫存室,也可以用于大型專業(yè)儲存庫。
OrderManager軟件的工作效率比原先的WMS高,原先的系統(tǒng)需要另外編程用于支持自動化接口設備,而模塊化的OrderManager則更像是一個可拆卸標準化部件,與原先的WMS-WCS組合相比較是一種價格低廉的自動化硬件。Kimberly-Clark發(fā)送Gen 2RFID標簽貨箱
5月15日,Kimberly-Clark公司宣布,已開始向沃爾瑪發(fā)送貼有Gen 2RFID標簽的貨箱。該公司在威斯康星州尼納市專門從事自動識別研究的實驗室中對Gen2軟、硬件與傳送機、包裝、物流和貨運系統(tǒng)的兼容性進行了廣泛的研究和試驗。這次發(fā)貨是這些研究的一個成果,是采用RFID技術的又一步驟。
利用行業(yè)領先的軟硬件,該公司對RFID標簽進行編碼后貼到貨箱上,收集產品數(shù)據(jù)并傳送到它的其供應鏈上,然后再將數(shù)據(jù)傳遞到沃爾瑪,通知他們訂貨已發(fā)送。目前該公司已向沃爾瑪發(fā)送了近10萬箱Huggies牌尿布及其他嬰兒用品。
中集集團自主創(chuàng)新車型列交通部首批推薦車型
在交通部4月26日的向社會推薦的道路貨運汽車及汽車列車第一批車型名錄中,中集集團、中國重型汽車集團公司、內蒙古第一機械制造集團和北汽福田等4家車輛生產企業(yè)共24款車型獲得推薦。其中,中集集團占6款,這6款車型分別是鉚接廂式半掛車、散裝水泥運輸半掛車、集裝箱運輸半掛車等三類車型各兩款。
據(jù)悉,此次的車型推薦工作,交通部從動力性、經濟性、安全性、舒適性、節(jié)能降耗、利于國家治理超限超載等多個方面進行了嚴格評審,最終獲得推薦的車型必須在上述各方面均具有顯著優(yōu)勢,它們不僅要符合道路貨運車輛現(xiàn)代化的各項要求,并要具備導向性和前瞻性,有利于推進道路貨物運輸車輛的專業(yè)化與技術水平提升,適應未來物流運輸業(yè)發(fā)展的需要。同時,交通部已明確要求各級交通主管部門和道路運輸管理機構、公路管理機構對推薦車型予以扶持,在市場準入管理上優(yōu)先予以許可,在收費等方面給予一定優(yōu)惠。
本次獲得推薦的三類車型,是中集在充分吸收美國、德國、日本等國技術的基礎上,針對當前中國物流行業(yè)整體狀況而專門研制的,在節(jié)能降耗,保障貨物運輸安全、高效率運輸?shù)确矫婢哂蓄I先優(yōu)勢。
江淮駿鈴II上市定位于2噸輕卡
5月初,江淮全新一代輕型卡車駿鈴II,在全國上市,該產品是在江淮駿鈴的配置全面創(chuàng)新升級后推出的一款新產品,將進一步增強江淮輕卡在2噸級市場的競爭力。
這款產品是目前國內2噸級產品中的中高檔產品,采用了江淮汽車子去年推出的全新豪特(HUT)808駕駛室;并在老款駿鈴的基礎上對外觀設計、車門鎖、保險杠、前面罩、洗滌器、雨刮器等多處進行了改進,使整車外觀更顯流線型和時尚感,內飾設計更加符合人機工程學。外寬1999mm的駕駛室可以并排乘坐3人,是同類產品中最寬敞的駕駛室。駕駛室獨創(chuàng)的三點式鎖止翻轉機構,可輕便前翻;車門可按照30°、60°、90°開啟,方便開啟的個性需求。
佐野車輛制作所推出工廠用重物搬運電動車
據(jù)悉,日本佐野車輛制作所將上市低底盤型重物搬運電動車“SL”系列,載重量為10t/20t/30t。預定6月開始接受訂單,接單后約4個月交貨。30t款的最小轉彎半徑也只有4.6m,適合于廠內貨物搬運。如果事先將貨物裝到專用托盤上,載貨臺會伸到托盤下并舉起,不需要起重機等設備。該車載貨時的行進速度約2km/h,一次充電大約可工作2小時,并具備5%傾斜時可行進約10mm的能力。方向盤、油門及剎車等主要操作部件與電池型叉車基本相同,操作方便。
中遠物流中標阿爾及利亞500萬噸煉油廠物流項目
日前,中遠物流公司與中國石油工程建設公司正式簽訂了為期3年的阿爾及利亞500萬噸煉油廠物流服務合同,預計總標的近2億元人民幣。該項目是中國公司在阿開展承包工程以來金額最大的項目,也是中遠物流成立至今最大的一個工程物流項目。
中郵物流永春堂網(wǎng)關支付系統(tǒng)開通
近日,山東永春堂公司與南京林業(yè)大學合作簽約暨中郵物流永春堂網(wǎng)關支付系統(tǒng)開通儀式在山東
泗水舉行。
網(wǎng)關支付系統(tǒng)的開通是繼2005年永春堂公司物流配送實施全國一體化物流項目后雙方的再度合作。永春堂公司與中郵物流合作范圍的擴大,促進了永春堂公司內部資源整合,實現(xiàn)了從傳統(tǒng)實物傳遞向現(xiàn)代物流企業(yè)發(fā)展的轉變。這一協(xié)議的達成,使永春堂公司的電子商務走向規(guī)范,真正實現(xiàn)了資金流、信息流、物流三流合一的網(wǎng)上操作模式,從而實現(xiàn)了真正的電子商務。
聯(lián)邦快遞獎學金及培養(yǎng)實習計劃今年起實行
5月26日,聯(lián)邦快遞與中國民用航空學院達成一項旨在培育高水平機務維修人才的合作項目――聯(lián)邦快遞獎學金及培養(yǎng)實習計劃。
通過此計劃,從2006年起,每年都有10名民用航空學院成績優(yōu)良的機電工程專業(yè)學生獲取由聯(lián)邦快遞頒發(fā)的定額獎學金,他們中的成績優(yōu)異者還能被選為聯(lián)邦快遞實習生,進行為期一個月的暑期實習,他們不僅可以受到聯(lián)邦快遞經驗豐富的專業(yè)人員的全程指導,還能借助聯(lián)邦快遞為其創(chuàng)造出的操作平臺,把平日從課本上所學知識付諸實踐,同時也能接觸到快遞行業(yè)的先進運作模式和管理經驗,為他們今后的職業(yè)發(fā)展奠定堅實的基礎。
TNT再次攜手WFP共抗饑餓
5月27日,來自聯(lián)合國世界糧食計劃署(WFP)、中國農業(yè)部、北京高校和國際學校以及企業(yè)界的數(shù)百名中外人士,在北京慕田峪長城上徒步行走了5公里,共同呼吁早日結束世界上還存在的兒童饑餓現(xiàn)象。同一天,預計超過70萬人在全球100多個國家,跨越24個時區(qū),徒步行走了相同的距離,以此開展名為“向饑餓宣戰(zhàn)――行走天地間”的慈善義走活動。
三年前,“向饑餓宣戰(zhàn)――行走天地間”由全球領先的快遞、郵政和物流服務公司TNT所倡導發(fā)起。作為WFP最重要的全球企業(yè)合作伙伴,TNT從2002年起一直與其攜手共抗饑餓。主要活動之一是在TNT公司所在的63個國家、跨越全球24個時區(qū)組織每年一度的“向饑餓宣戰(zhàn)―行走天地間”慈善義走活動,為WFP“學校供膳”項目籌集款項。經過三年的努力,該活動已經壯大為一個每年一度在全世界24個時區(qū)同步進行的國際性慈善活動。
DHL連續(xù)20年獲最佳速遞業(yè)經營商獎
日前,全球速遞物流公司DHL在2006年“亞洲貨運及供應鏈大獎”評選活動中,連續(xù)20年獲“最佳速遞業(yè)經營商”榮譽。與此同時,DHL還獲得了“最佳主導物流服務供貨商”(第四方物流服務供貨商)、“最佳第三方物流服務供貨商”、“最佳航空貨運商”、“最佳全貨運航空公司”以及“最佳航空貨運公司(歐洲)”獎。
DHL公司較早以前就作出了一連串部署,以把握亞太區(qū)市場尤其中國內地市場。今年的新計劃包括在北京興建全新的中外運―敦豪總部,以及將分公司數(shù)目由56家增至72家。