基于java的小型企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  畢業(yè)設(shè)計(jì)(論文)</b></p><p>  題目: 基于JAVA的企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng) </p><p>  姓 名 </p><p>  準(zhǔn)考證號(hào) </p><p>  專(zhuān) 業(yè)

2、 </p><p>  專(zhuān)科學(xué)校 </p><p>  指導(dǎo)教師 </p><p>  2012 年 4 月</p><p><b>  目錄</b></p><p><b>  摘要1</b></

3、p><p><b>  前言2</b></p><p>  第一章 系統(tǒng)分析3</p><p>  1.1 需求分析3</p><p>  1.2 可行性分析3</p><p>  1.3 系統(tǒng)功能結(jié)構(gòu)3</p><p>  1.4 系統(tǒng)業(yè)務(wù)流圖4<

4、/p><p>  第二章 系統(tǒng)運(yùn)行環(huán)境及系統(tǒng)開(kāi)發(fā)技術(shù)5</p><p>  2.1 系統(tǒng)運(yùn)行環(huán)境環(huán)境5</p><p>  2.2 系統(tǒng)開(kāi)發(fā)技術(shù)5</p><p>  2.2.1 Java簡(jiǎn)介5</p><p>  2.2.2 SQL Server 2000 數(shù)據(jù)庫(kù)7</p><p>

5、;  第三章 系統(tǒng)設(shè)計(jì)9</p><p>  3.1 數(shù)據(jù)庫(kù)與數(shù)據(jù)庫(kù)表設(shè)計(jì)9</p><p>  3.1.1 數(shù)據(jù)庫(kù)介紹9</p><p>  3.1.2 E-R圖9</p><p>  3.1.3 數(shù)據(jù)庫(kù)表設(shè)計(jì)10</p><p>  3.2 系統(tǒng)功能模塊設(shè)計(jì)13</p><p&

6、gt;  3.2.1 公共類(lèi)設(shè)計(jì)13</p><p>  3.2.2 系統(tǒng)登錄模塊設(shè)計(jì)14</p><p>  3.2.3 系統(tǒng)主窗體設(shè)計(jì)15</p><p>  3.2.4 進(jìn)貨單模塊設(shè)計(jì)16</p><p>  3.2.5 銷(xiāo)售單模塊設(shè)計(jì)20</p><p>  3.2.6 庫(kù)存盤(pán)點(diǎn)模塊設(shè)計(jì)23<

7、/p><p>  3.2.7 數(shù)據(jù)庫(kù)備份與恢復(fù)模塊設(shè)計(jì)25</p><p>  第四章 系統(tǒng)測(cè)試28</p><p>  4.1 系統(tǒng)軟件測(cè)試28</p><p>  4.1.1 測(cè)試的原則28</p><p>  4.1.2 模塊測(cè)試28</p><p>  4.1.3 集成測(cè)試29

8、</p><p>  4.2 測(cè)試總結(jié)29</p><p>  4.3 系統(tǒng)實(shí)施與維護(hù)29</p><p><b>  結(jié)束語(yǔ)30</b></p><p><b>  參考文獻(xiàn)31</b></p><p>  基于JAVA的企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)</p>&

9、lt;p><b>  摘要</b></p><p>  企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)的主要工作是對(duì)企業(yè)的進(jìn)貨、銷(xiāo)售和庫(kù)存信息化的方式進(jìn)行管理,最大限度地減少各環(huán)節(jié)中可能出現(xiàn)的錯(cuò)誤,有效減少盲目、采購(gòu)降低成本、合理控制庫(kù)存、減少資金占用并提高市場(chǎng)靈敏度,是企業(yè)能夠合理安排進(jìn)、銷(xiāo)、存的每個(gè)關(guān)鍵步驟,提升企業(yè)市場(chǎng)的競(jìng)爭(zhēng)能力。</p><p>  本論文將從企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)的發(fā)

10、展歷程說(shuō)起,詳細(xì)介紹系統(tǒng)的開(kāi)發(fā)步驟:系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)以及系統(tǒng)維護(hù)。在系統(tǒng)分析中,先后使用數(shù)據(jù)流圖、系統(tǒng)的功能結(jié)構(gòu)圖分析系統(tǒng)所需的各種數(shù)據(jù);系統(tǒng)設(shè)計(jì)和系統(tǒng)實(shí)現(xiàn)并舉,說(shuō)明所需實(shí)體、數(shù)據(jù)庫(kù)表、表字段等數(shù)據(jù)庫(kù)設(shè)計(jì),以及介紹系統(tǒng)的各功能模塊的設(shè)計(jì),并展現(xiàn)相應(yīng)的功能界面。本系統(tǒng)采用Java進(jìn)行開(kāi)發(fā),數(shù)據(jù)庫(kù)采用SQL Server 2000進(jìn)行管理。</p><p>  關(guān)鍵字:企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)、Java、SQL

11、 Server 2000</p><p><b>  前言</b></p><p>  在信息技術(shù)的催化之下,世界經(jīng)濟(jì)的變革已經(jīng)進(jìn)入了加速狀態(tài)。世界經(jīng)濟(jì)一體化,企業(yè)經(jīng)營(yíng)全球化,以及高度競(jìng)爭(zhēng)造成的高度個(gè)性化與迅速改變的客戶(hù)需求,令企業(yè)與顧客、企業(yè)與供方的關(guān)系變得更加密切和復(fù)雜。強(qiáng)化管理,規(guī)范業(yè)務(wù)流程,提高透明度,加快商品資金周轉(zhuǎn),以及為流通領(lǐng)域信息管理全面網(wǎng)絡(luò)化打下基礎(chǔ)

12、,是銷(xiāo)售公司乃至眾多商業(yè)企業(yè)夢(mèng)寐以求的愿望。</p><p>  進(jìn)銷(xiāo)存軟件概念起源于上世紀(jì)80年代,由于電算化的普及,計(jì)算機(jī)管理的推廣,不少企業(yè)對(duì)于倉(cāng)庫(kù)貨品的進(jìn)貨,存貨,出貨管理,有了強(qiáng)烈的需求,進(jìn)銷(xiāo)存軟件的發(fā)展從此開(kāi)始。</p><p>  進(jìn)入90年代以后,隨著進(jìn)銷(xiāo)存軟件的應(yīng)用面越來(lái)越廣,出現(xiàn)了許多從功能上,從用途上,更為全面的進(jìn)銷(xiāo)存系統(tǒng),從單純的貨品數(shù)量管理,擴(kuò)展為貨品的流程管理,

13、進(jìn)銷(xiāo)存軟件對(duì)每一批貨品的來(lái)源,存放,去向,都作仔細(xì)的記錄,隨后并延伸為財(cái)務(wù)進(jìn)銷(xiāo)存一體化的管理模式。   </p><p>  進(jìn)入00年以后,各種各樣的進(jìn)銷(xiāo)存軟件產(chǎn)品應(yīng)運(yùn)而生,在倉(cāng)庫(kù)進(jìn)銷(xiāo)存管理的基礎(chǔ)上,集合了財(cái)務(wù)管理。客戶(hù)管理,業(yè)務(wù)管理等相關(guān)內(nèi)容,成為進(jìn)銷(xiāo)存財(cái)一體化的管理系統(tǒng)。</p><p>  企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)的不斷完善,為企業(yè)管理現(xiàn)代化和運(yùn)營(yíng)信息化提供了有力的支持。</p&g

14、t;<p><b>  第一章 系統(tǒng)分析</b></p><p><b>  1.1 需求分析</b></p><p>  需求分析的過(guò)程可以說(shuō)是一個(gè)對(duì)具體問(wèn)題的反復(fù)理解和抽象的過(guò)程。理解就是對(duì)現(xiàn)實(shí)問(wèn)題的理解,要弄清楚究竟需要解決什么問(wèn)題。抽象就是出去問(wèn)題的表面,提取問(wèn)題的本質(zhì),建立問(wèn)題的邏輯模型,以便以后階段的系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)。

15、需求分析階段是軟件產(chǎn)品生存命期的一個(gè)重要階段,其根本任務(wù)四確定用戶(hù)對(duì)軟件系統(tǒng)的需求。所謂需求是指用戶(hù)對(duì)軟件的功能和性能的要求,就是用戶(hù)希望軟件能干什么事情,完成什么樣的功能,達(dá)到什么性能。通常需求分為兩種類(lèi)型:一種是功能性需求,一種是非功能性需求,這一點(diǎn)也需要有一種清楚的認(rèn)識(shí)。功能性需求是指需要計(jì)算機(jī)系統(tǒng)解決的問(wèn)題,也就是對(duì)數(shù)據(jù)的處理要求,這是一類(lèi)主要的需求。非功能性需求是指實(shí)際使用環(huán)境所要求的要求,往往是一些限制要求,例如:性能要求,

16、可靠性要求,安全保密要求等等。</p><p>  根據(jù)用戶(hù)方的需求,要求企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)具有以下功能:</p><p>  界面設(shè)計(jì)美觀大方,操作方便、快捷、靈活。</p><p>  實(shí)現(xiàn)強(qiáng)大的進(jìn)銷(xiāo)存管理,包括基本信息、進(jìn)貨、銷(xiāo)售和庫(kù)存管理。</p><p>  提供數(shù)據(jù)庫(kù)備份與恢復(fù)功能。</p><p><

17、;b>  提供庫(kù)存盤(pán)點(diǎn)功能。</b></p><p>  提供技術(shù)支持的聯(lián)系方式,可以使用郵件進(jìn)行溝通,或者直接連接到技術(shù)網(wǎng)站。</p><p>  1.2 可行性分析</p><p>  企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)必須提供商品信息、供應(yīng)商信息和客戶(hù)信息的基礎(chǔ)設(shè)置;提供強(qiáng)大的搜索功能和商品的進(jìn)貨、銷(xiāo)售和庫(kù)存管理功能。系統(tǒng)還必須保證數(shù)據(jù)的安全性、完整性和準(zhǔn)

18、確性。</p><p>  企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)的目標(biāo)是實(shí)現(xiàn)企業(yè)的信息化管理,減少盲目采購(gòu)、降低采購(gòu)成本、合理控制庫(kù)存、減少資金占用并提升企業(yè)市場(chǎng)競(jìng)爭(zhēng)力。</p><p>  項(xiàng)目主要以企業(yè)的進(jìn)貨、銷(xiāo)售和查詢(xún)統(tǒng)計(jì)功能為主,對(duì)于庫(kù)存、銷(xiāo)售和進(jìn)貨的記錄信息應(yīng)該及時(shí)、準(zhǔn)確的保存,并提供想要的查詢(xún)和統(tǒng)計(jì)。由于庫(kù)存商品數(shù)量太多,不易盤(pán)點(diǎn),傳統(tǒng)的盤(pán)點(diǎn)方式容易出錯(cuò),系統(tǒng)中的庫(kù)存盤(pán)點(diǎn)功能要準(zhǔn)確的計(jì)算出各種商

19、品的損益數(shù)量,減少企業(yè)的不必要的損失。</p><p>  1.3 系統(tǒng)功能結(jié)構(gòu)</p><p>  企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)功能結(jié)構(gòu)圖如圖1.1所示。</p><p>  圖1.1 企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)功能結(jié)構(gòu)圖</p><p>  1.4 系統(tǒng)業(yè)務(wù)流圖</p><p>  企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)業(yè)務(wù)流程圖如圖1.2所示。&

20、lt;/p><p>  圖1.2 企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)業(yè)務(wù)流程圖</p><p>  第二章 系統(tǒng)運(yùn)行環(huán)境及系統(tǒng)開(kāi)發(fā)技術(shù)</p><p>  2.1 系統(tǒng)運(yùn)行環(huán)境環(huán)境</p><p>  硬件環(huán)境,CPU(中央處理器):Intel(R)Pentium(R) E5300 2.60GHz</p><p>  RAM(內(nèi)存):

21、2G</p><p>  HDD(硬盤(pán)):500G</p><p>  軟件開(kāi)發(fā)環(huán)境,操作系統(tǒng):Windows xp SP3</p><p>  JDK環(huán)境:Java SE Development KIT(JDK) Version 6</p><p>  開(kāi)發(fā)工具:Eclipse 3.2</p><p>  數(shù)據(jù)庫(kù)管理

22、軟件:Microsoft SQL Server 2000 SP4</p><p>  2.2 系統(tǒng)開(kāi)發(fā)技術(shù)</p><p>  本系統(tǒng)的開(kāi)發(fā)主要是使用在Eclipse平臺(tái)下的Java語(yǔ)言,并結(jié)合了SQL Server 2000數(shù)據(jù)庫(kù)技術(shù),使此系統(tǒng)具有強(qiáng)大的查詢(xún)功能。</p><p>  2.2.1 Java簡(jiǎn)介</p><p>  Java

23、語(yǔ)言是一個(gè)支持網(wǎng)絡(luò)計(jì)算的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。Java語(yǔ)言吸收了Smalltalk語(yǔ)言和C++語(yǔ)言的優(yōu)點(diǎn),并增加了其它特性,如支持并發(fā)程序設(shè)計(jì)、網(wǎng)絡(luò)通信、和多媒體數(shù)據(jù)控制等。主要特性如下:</p><p>  (1) Java語(yǔ)言是簡(jiǎn)單的。Java語(yǔ)言的語(yǔ)法與C語(yǔ)言和C++語(yǔ)言很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用Java。另一方面,Java丟棄了C++ 中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重

24、載、多繼承、自動(dòng)的強(qiáng)制類(lèi)型轉(zhuǎn)換。特別地,Java語(yǔ)言不使用指針,并提供了自動(dòng)的廢料收集,使得程序員不必為內(nèi)存管理而擔(dān)憂(yōu)。</p><p>  (2) Java語(yǔ)言是一個(gè)面向?qū)ο蟮?。Java語(yǔ)言提供類(lèi)、接口和繼承等原語(yǔ),為了簡(jiǎn)單起見(jiàn),只支持類(lèi)之間的單繼承,但支持接口之間的多繼承,并支持類(lèi)與接口之間的實(shí)現(xiàn)機(jī)制(關(guān)鍵字為implements)。Java語(yǔ)言全面支持動(dòng)態(tài)綁定,而C++ 語(yǔ)言只對(duì)虛函數(shù)使用動(dòng)態(tài)綁定。總之,J

25、ava語(yǔ)言是一個(gè)純的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。</p><p>  (3) Java語(yǔ)言是分布式的。Java語(yǔ)言支持Internet應(yīng)用的開(kāi)發(fā),在基本的Java應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(java.net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類(lèi)庫(kù),包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(遠(yuǎn)程方法激活)機(jī)制也是開(kāi)發(fā)分布式應(yīng)用的重要手段。</p>

26、<p>  (4) Java語(yǔ)言是健壯的。Java的強(qiáng)類(lèi)型機(jī)制、異常處理、廢料的自動(dòng)收集等是Java程序健壯性的重要保證。對(duì)指針的丟棄是Java的明智選擇。Java的安全檢查機(jī)制使得Java更具健壯性。</p><p>  (5) Java語(yǔ)言是安全的。Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一個(gè)安全機(jī)制以防惡意代碼的攻擊。除了Java語(yǔ)言具有的許多安全特性以外,Java對(duì)通過(guò)網(wǎng)絡(luò)下載的類(lèi)

27、具有一個(gè)安全防范機(jī)制(類(lèi)ClassLoader),如分配不同的名字空間以防替代本地的同名類(lèi)、字節(jié)代碼檢查,并提供安全管理機(jī)制(類(lèi)SecurityManager)讓Java應(yīng)用設(shè)置安全哨兵。 </p><p>  (6) Java語(yǔ)言是體系結(jié)構(gòu)中立的。Java程序(后綴為java的文件)在Java平臺(tái)上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件), 然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。這種

28、途徑適合于異構(gòu)的網(wǎng)絡(luò)環(huán)境和軟件的分發(fā)。 </p><p>  (7) Java語(yǔ)言是可移植的。這種可移植性來(lái)源于體系結(jié)構(gòu)中立性,另外,Java還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類(lèi)型的長(zhǎng)度。Java系統(tǒng)本身也具有很強(qiáng)的可移植性,Java編譯器是用Java實(shí)現(xiàn)的,Java的運(yùn)行環(huán)境是用ANSI C實(shí)現(xiàn)的。</p><p>  (8) Java語(yǔ)言是解釋型的。如前所述,Java程序在Java平臺(tái)上被編譯為

29、字節(jié)碼格式, 然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。在運(yùn)行時(shí),Java平臺(tái)中的Java解釋器對(duì)這些字節(jié)碼進(jìn)行解釋執(zhí)行,執(zhí)行過(guò)程中需要的類(lèi)在聯(lián)接階段被載入到運(yùn)行環(huán)境中。</p><p>  (9) Java是高性能的。與那些解釋型的高級(jí)腳本語(yǔ)言相比,Java的確是高性能的。事實(shí)上,Java的運(yùn)行速度隨著JIT(Just-In-Time)編譯器技術(shù)的發(fā)展越來(lái)越接近于C++。 </p><

30、p>  (10) Java語(yǔ)言是多線(xiàn)程的。在Java語(yǔ)言中,線(xiàn)程是一種特殊的對(duì)象,它必須由Thread類(lèi)或其子(孫)類(lèi)來(lái)構(gòu)造,thread(Runnable) 的構(gòu)造子類(lèi)將一個(gè)實(shí)現(xiàn)了Runnable接口的對(duì)象包裝成一個(gè)線(xiàn)程,其二,從Thread類(lèi)派生出子類(lèi)并重寫(xiě)run方法,使用該子類(lèi)創(chuàng)建的對(duì)象即為線(xiàn)程。值得注意的是Thread類(lèi)已經(jīng)實(shí)現(xiàn)了Runnable接口,因此,任何一個(gè)線(xiàn)程均有它的run方法,而run方法中包含了線(xiàn)程所要運(yùn)行的

31、代碼。線(xiàn)程的活動(dòng)由一組方法來(lái)控制。 Java語(yǔ)言支持多個(gè)線(xiàn)程的同時(shí)執(zhí)行,并提供多線(xiàn)程之間的同步機(jī)制(synchronized)。</p><p>  (11) Java語(yǔ)言是動(dòng)態(tài)的。Java語(yǔ)言的設(shè)計(jì)目標(biāo)之一是適應(yīng)于動(dòng)態(tài)變化的環(huán)境。Java程序需要的類(lèi)能動(dòng)態(tài)地被載入到運(yùn)行環(huán)境,也可以通過(guò)網(wǎng)絡(luò)來(lái)載入所需要的類(lèi)。這也有利于軟件的升級(jí)。另外,Java中的類(lèi)有一個(gè)運(yùn)行時(shí)刻的表示,能進(jìn)行運(yùn)行時(shí)刻的類(lèi)型檢查。</p&g

32、t;<p>  Java語(yǔ)言的優(yōu)良特性使得Java應(yīng)用具有無(wú)比的健壯性和可靠性,這也減少了應(yīng)用系統(tǒng)的維護(hù)費(fèi)用。Java對(duì)對(duì)象技術(shù)的全面支持和Java平臺(tái)內(nèi)嵌的API能縮短應(yīng)用系統(tǒng)的開(kāi)發(fā)時(shí)間并降低成本。Java的編譯一次,到處可運(yùn)行的特性使得它能夠提供一個(gè)隨處可用的開(kāi)放結(jié)構(gòu)和在多平臺(tái)之間傳遞信息的低成本方式。特別是Java企業(yè)應(yīng)用編程接口(Java Enterprise APIs)為企業(yè)計(jì)算及電子商務(wù)應(yīng)用系統(tǒng)提供了有關(guān)技術(shù)和

33、豐富的類(lèi)庫(kù)。[2]</p><p>  2.2.2 SQL Server 2000 數(shù)據(jù)庫(kù)</p><p>  SQL Server是一個(gè)后臺(tái)數(shù)據(jù)庫(kù)管理系統(tǒng),是一個(gè)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。它功能強(qiáng)大、操作簡(jiǎn)便、日益為廣大數(shù)據(jù)庫(kù)用戶(hù)所喜愛(ài)。</p><p>  SQL Server 2000,是Microsoft 公司推出的SQL Server 數(shù)據(jù)庫(kù)管理系統(tǒng)。該版本繼承

34、了SQL Server 7.0 版本的優(yōu)點(diǎn),同時(shí)又比它增加了許多更先進(jìn)的功能,具有使用方便、可伸縮性好、與相關(guān)軟件集成程度高等優(yōu)點(diǎn)。SQL Server 2000界面友好,易學(xué)易用且功能強(qiáng)大,與Windows 2000 操作系統(tǒng)完美結(jié)合,可以構(gòu)造網(wǎng)絡(luò)環(huán)境數(shù)據(jù)庫(kù)甚至分布式數(shù)據(jù)庫(kù),可以滿(mǎn)足企業(yè)及Internet等大型數(shù)據(jù)庫(kù)應(yīng)用。</p><p>  SQL Server 2000主要具有以下功能特性:</p&g

35、t;<p> ?。?)實(shí)現(xiàn)了客戶(hù)機(jī)/服務(wù)器模式。客戶(hù)機(jī)/服務(wù)器(C/S)模式數(shù)據(jù)庫(kù)計(jì)算是一種分布式的數(shù)據(jù)存儲(chǔ)、訪(fǎng)問(wèn)和處理技術(shù),它已成為大多數(shù)企業(yè)計(jì)算的標(biāo)準(zhǔn)。Microsoft SQL Server是客戶(hù)/服務(wù)器系統(tǒng)應(yīng)用的完美的例子。</p><p> ?。?)與Internet集成。SQL Server 2000數(shù)據(jù)庫(kù)引擎提供完整的XML支持。具備構(gòu)造大型Web站點(diǎn)的數(shù)據(jù)存儲(chǔ)組件所需的可伸縮性、可用

36、性和安全性。 </p><p> ?。?)具備很強(qiáng)的可伸縮性和可用性。SQL Server 2000包含企業(yè)版、標(biāo)準(zhǔn)版、開(kāi)發(fā)版和個(gè)人版等4個(gè)版本,使同一個(gè)數(shù)據(jù)庫(kù)引擎可以在不同的操作系統(tǒng)平臺(tái)上使用,從運(yùn)行Windows 9x的便攜式電腦,到運(yùn)行Windows2000 Data Center Server的大型多處理器的服務(wù)器。增強(qiáng)的圖形用戶(hù)界面管理工具,使管理更加方便。</p><p> 

37、?。?)具備企業(yè)級(jí)數(shù)據(jù)庫(kù)功能SQL Server 2000關(guān)系型數(shù)據(jù)庫(kù)引擎支持當(dāng)今苛刻的數(shù)據(jù)處理環(huán)境所需的功能,可同時(shí)管理上千并發(fā)數(shù)據(jù)庫(kù)用戶(hù),其分布式查詢(xún)使用戶(hù)可以引用來(lái)自不同數(shù)據(jù)源的數(shù)據(jù),同時(shí)具備分布式事務(wù)處理系統(tǒng),保障分布式數(shù)據(jù)更新的完整性。 </p><p> ?。?)易于安裝、部署和使用。SQL Server 2000的安裝向?qū)Э蓭椭脩?hù)方便地實(shí)現(xiàn)各種方式的安裝,如網(wǎng)絡(luò)遠(yuǎn)程安裝、多實(shí)例安裝、升級(jí)安裝和無(wú)

38、人職守安裝等。SQL Server 2000還提供了一些管理開(kāi)發(fā)工具,使用戶(hù)可以快速開(kāi)發(fā)應(yīng)用程序。</p><p>  (6)數(shù)據(jù)倉(cāng)庫(kù)功能。企業(yè)在正常的業(yè)務(wù)運(yùn)作過(guò)程中需要收集各種數(shù)據(jù),包含企業(yè)的動(dòng)態(tài)歷史記錄,數(shù)據(jù)倉(cāng)庫(kù)的目的是合并和組織這些數(shù)據(jù),以便對(duì)其進(jìn)行分析并用來(lái)支持業(yè)務(wù)決策。數(shù)據(jù)倉(cāng)庫(kù)是一種高級(jí)、復(fù)雜的技術(shù)。Microsoft SQL Server 2000提供的強(qiáng)大工具,可幫助您完成創(chuàng)建、使用和維護(hù)數(shù)據(jù)庫(kù)的任

39、務(wù)。 </p><p><b>  第三章 系統(tǒng)設(shè)計(jì)</b></p><p>  3.1 數(shù)據(jù)庫(kù)與數(shù)據(jù)庫(kù)表設(shè)計(jì)</p><p>  3.1.1 數(shù)據(jù)庫(kù)介紹</p><p>  所謂數(shù)據(jù)庫(kù)(Database)就是按一定組織方式存儲(chǔ)在一起,相互相關(guān)的若干數(shù)據(jù)的結(jié)合,數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management

40、System)就是一種操作和管理數(shù)據(jù)庫(kù)的大型軟件,簡(jiǎn)稱(chēng)DBMS,他們建立在操作系統(tǒng)的基礎(chǔ)上,對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的管理和控制,其功能包括數(shù)據(jù)庫(kù)定義,數(shù)據(jù)庫(kù)管理,數(shù)據(jù)庫(kù)的建立和維護(hù),與操作系統(tǒng)通信等。DBMS通常由數(shù)據(jù)字典,數(shù)據(jù)描述語(yǔ)言及其編譯程序,數(shù)據(jù)操縱(查詢(xún))語(yǔ)言極其編譯程序,數(shù)據(jù)庫(kù)管理例行程序等部分組成。</p><p>  關(guān)系數(shù)據(jù)庫(kù)是以關(guān)系模型為基礎(chǔ)的數(shù)據(jù)庫(kù),是根據(jù)表、記錄和字段之間關(guān)系進(jìn)行組織和訪(fǎng)問(wèn)的一種

41、數(shù)據(jù)庫(kù),它通過(guò)若干表(Table)來(lái)存取數(shù)據(jù),并且通過(guò)關(guān)系(Relation)將這些表聯(lián)系在一起,關(guān)系數(shù)據(jù)庫(kù)提供了成為機(jī)構(gòu)化查詢(xún)語(yǔ)言(SQL)標(biāo)準(zhǔn)接口,該接口允許使用多種數(shù)據(jù)庫(kù)工具和產(chǎn)品,關(guān)系數(shù)據(jù)庫(kù)是目前最廣泛應(yīng)用的數(shù)據(jù)庫(kù)。</p><p>  3.1.2 E-R圖</p><p>  進(jìn)銷(xiāo)存系統(tǒng)主要實(shí)現(xiàn)從進(jìn)貨、庫(kù)存到銷(xiāo)售的一體化管理,設(shè)計(jì)商品信息、商品的供貨商、購(gòu)買(mǎi)商品的客戶(hù)等多個(gè)實(shí)體。

42、下面列舉了關(guān)鍵的實(shí)體和系統(tǒng)的綜合E-R圖。</p><p><b>  供應(yīng)商實(shí)體屬性圖</b></p><p>  供應(yīng)商實(shí)體包括:編號(hào)、名稱(chēng)、簡(jiǎn)稱(chēng)、地址、電話(huà)、郵政編碼、傳真、聯(lián)系人、聯(lián)系人電話(huà)、開(kāi)戶(hù)行和E-mail屬性,如圖3.1所示。</p><p>  圖3.1 供貨商實(shí)體屬性圖</p><p><b&g

43、t;  商品實(shí)體屬性圖</b></p><p>  商品實(shí)體包括:編號(hào)、商品名稱(chēng)、商品簡(jiǎn)稱(chēng)、產(chǎn)地、單位、規(guī)格、包裝、批號(hào)、批準(zhǔn)文號(hào)、商品簡(jiǎn)介和供應(yīng)商屬性。如圖3.2所示。</p><p>  圖3.2 商品實(shí)體屬性圖</p><p><b>  客戶(hù)實(shí)體屬性圖</b></p><p>  客戶(hù)實(shí)體包括:客戶(hù)編

44、號(hào)、客戶(hù)名稱(chēng)、簡(jiǎn)稱(chēng)、地址、電話(huà)、郵政編碼、聯(lián)系人電話(huà)、傳真、開(kāi)戶(hù)行和賬號(hào)屬性。如圖3.3所示。</p><p>  圖3.3 客戶(hù)實(shí)體屬性圖</p><p><b>  銷(xiāo)售實(shí)體屬性圖</b></p><p>  銷(xiāo)售實(shí)體分為銷(xiāo)售主表和銷(xiāo)售明細(xì)表兩個(gè)實(shí)體,它們是一對(duì)多的關(guān)系。其中銷(xiāo)售主表包括:銷(xiāo)售票號(hào)、品種數(shù)、金額、驗(yàn)收結(jié)論、客戶(hù)名稱(chēng)、經(jīng)手人、

45、結(jié)算方式、操作員和銷(xiāo)售日期屬性。銷(xiāo)售明細(xì)表包括:編號(hào)、銷(xiāo)售票號(hào)、商品編號(hào)、數(shù)量和單價(jià)屬性。如圖3.4所示。</p><p>  圖3.4 銷(xiāo)售實(shí)體屬性圖</p><p>  3.1.3 數(shù)據(jù)庫(kù)表設(shè)計(jì)</p><p>  數(shù)據(jù)庫(kù)在整個(gè)管理系統(tǒng)中占據(jù)非常重要的地位,數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的好壞直接影響著系統(tǒng)的效率和實(shí)現(xiàn)效果。進(jìn)銷(xiāo)存管理系統(tǒng)采用SQL Server 2000 SP

46、4版本的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名稱(chēng)為db_JXC,因篇幅所限,本論文只給出幾個(gè)重要數(shù)據(jù)表的表結(jié)構(gòu)。</p><p><b>  供應(yīng)商信息表</b></p><p>  供應(yīng)商信息表的名稱(chēng)為tb_gysinfo,主要用于存儲(chǔ)供應(yīng)商的詳細(xì)信息,結(jié)構(gòu)如表3.1所示。</p><p>  表3.1 供應(yīng)商信息表</p><p><

47、;b>  商品信息表</b></p><p>  商品信息表的名稱(chēng)為tb_spinfo,主要用于存儲(chǔ)商品的詳細(xì)信息,結(jié)構(gòu)如表3.2所示。</p><p>  表3.2 商品信息表</p><p><b>  入庫(kù)主表</b></p><p>  入庫(kù)主表的名稱(chēng)為tb_ru_main,主要用于存儲(chǔ)入庫(kù)單據(jù)

48、信息,其結(jié)構(gòu)如表3.3所示。</p><p><b>  表3.3 入庫(kù)主表</b></p><p><b>  入庫(kù)明細(xì)表</b></p><p>  入庫(kù)明細(xì)表的名稱(chēng)為tb_ruku_detail,主要用于存儲(chǔ)入庫(kù)的詳細(xì)信息,結(jié)構(gòu)如表3.4所示。</p><p>  表3.4 入庫(kù)明細(xì)表<

49、/p><p><b>  銷(xiāo)售主表</b></p><p>  銷(xiāo)售主表的名稱(chēng)為tb_sell_main,主要用于存儲(chǔ)銷(xiāo)售單據(jù)的信息,結(jié)構(gòu)如表3.5所示。</p><p><b>  表3.5 銷(xiāo)售主表</b></p><p><b>  銷(xiāo)售明細(xì)表</b></p>

50、<p>  銷(xiāo)售明細(xì)表的名稱(chēng)為tb_sell_detail,主要用于存儲(chǔ)銷(xiāo)售的詳細(xì)信息,結(jié)構(gòu)如表3.6所示。</p><p>  表3.6 銷(xiāo)售明細(xì)表</p><p><b>  客戶(hù)信息表</b></p><p>  客戶(hù)信息表的名稱(chēng)為tb_khinfo,主要用于存儲(chǔ)客戶(hù)的信息,結(jié)構(gòu)如表3.7所示。</p><p

51、>  表3.7 客戶(hù)信息表</p><p>  3.2 系統(tǒng)功能模塊設(shè)計(jì)</p><p>  3.2.1 公共類(lèi)設(shè)計(jì)</p><p>  公共類(lèi)也是代碼重用的一種形式,他將各個(gè)功能模塊經(jīng)常調(diào)用的方法提取到共用的Java類(lèi)中,例如訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的Dao類(lèi)容納了所有訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的方法,并同時(shí)管理者數(shù)據(jù)庫(kù)的連接和關(guān)閉。這樣不但實(shí)現(xiàn)了項(xiàng)目代碼的重用,還提高了程序的性能和代

52、碼可讀性。</p><p><b>  Item公共類(lèi)</b></p><p>  Item公共類(lèi)是對(duì)數(shù)據(jù)表最常用的id和name屬性的封裝,用于Swing列表、表格、下拉列表框等組件的復(fù)制,該類(lèi)重寫(xiě)了toString()方法,在該類(lèi)方法中只輸出那么屬性,所以Item類(lèi)在Swing組件現(xiàn)實(shí)文本時(shí)只包含名稱(chēng)信息,不會(huì)連帶著id屬性。但是在獲取組件的內(nèi)容時(shí),獲取的是Ite

53、m類(lèi)的對(duì)象,從該對(duì)象中可以很容易的獲取id屬性,然后通過(guò)該屬性到數(shù)據(jù)庫(kù)中獲取唯一的數(shù)據(jù)。</p><p><b>  數(shù)據(jù)模型公共類(lèi)</b></p><p>  數(shù)據(jù)模型公共類(lèi),它對(duì)應(yīng)著數(shù)據(jù)庫(kù)中不同的數(shù)據(jù)表,這些模型將被訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的Dao類(lèi)和程序中每個(gè)模塊甚至各個(gè)組件所使用。和Item公共類(lèi)的使用方法類(lèi)似,數(shù)據(jù)模型也是對(duì)數(shù)據(jù)表中所有字段(屬性)的封裝,但是數(shù)據(jù)類(lèi)型是純

54、粹的模型,它不但需要重寫(xiě)父類(lèi)的toString()方法,還要重寫(xiě)hashCode()方法和equals()方法(這兩個(gè)方法分別用于生成模型對(duì)象的哈希代碼和判斷模型對(duì)象是否相同)。模型類(lèi)主要用于存儲(chǔ)數(shù)據(jù),并通過(guò)想要的getXXX()方法和setXXX()實(shí)現(xiàn)不同屬性的訪(fǎng)問(wèn)原則。</p><p><b>  Dao類(lèi)</b></p><p>  Dao 的全稱(chēng)是Data

55、Access Object,即數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)對(duì)象。本項(xiàng)目中應(yīng)用該名稱(chēng)數(shù)據(jù)庫(kù)</p><p>  訪(fǎng)問(wèn)類(lèi)的名稱(chēng),在該類(lèi)中實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的驅(qū)動(dòng)、連接、關(guān)閉和多個(gè)操作數(shù)據(jù)庫(kù)的方法,這些誒方法包括不同數(shù)據(jù)表的操作方法。</p><p><b>  其關(guān)鍵代碼如下:</b></p><p>  package com.lzw.dao;</p>&

56、lt;p>  import java.sql.*;</p><p>  import java.sql.Date;</p><p>  import java.util.*;</p><p>  import javax.swing.JOptionPane;</p><p>  import com.lzw.Item;</p>

57、;<p>  import com.lzw.dao.model.*;</p><p>  public class Dao {</p><p>  protected static String dbClassName = "net.sourceforge.jtds.jdbc.Driver";</p><p>  protected

58、 static String dbUrl = "jdbc:jtds:sqlserver://localhost:1433/"</p><p>  + "db_database28;SelectMethod=Cursor";</p><p>  protected static String dbUser = "sa";</p

59、><p>  protected static String dbPwd = "";</p><p>  protected static String second = null;</p><p>  public static Connection conn = null;</p><p><b>  stati

60、c {</b></p><p><b>  try {</b></p><p>  if (conn == null) {</p><p>  Class.forName(dbClassName).newInstance();</p><p>  conn = DriverManager.getConnect

61、ion(dbUrl, dbUser, dbPwd);</p><p><b>  }</b></p><p>  } catch (ClassNotFoundException e) {</p><p>  e.printStackTrace();</p><p>  JOptionPane.showMessageDia

62、log(null,</p><p>  "請(qǐng)將SQL Server 2000的JDBC驅(qū)動(dòng)包復(fù)制到lib文件夾中。");</p><p>  System.exit(-1);</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p>

63、<p><b>  }</b></p><p><b>  }</b></p><p>  3.2.2 系統(tǒng)登錄模塊設(shè)計(jì)</p><p>  系統(tǒng)登錄也是項(xiàng)目必須開(kāi)發(fā)的模塊,主要由兩部分組成,一部分是登錄窗體,另一部分是窗體中帶背景圖片的內(nèi)容面板。它是系統(tǒng)的安全門(mén),只有提供正確的用戶(hù)名和登錄口令之后,才能進(jìn)入

64、企業(yè)進(jìn)銷(xiāo)存管理系統(tǒng)進(jìn)行進(jìn)銷(xiāo)存管理工作。系統(tǒng)登錄模塊如圖3.5所示。</p><p>  圖3.5 系統(tǒng)登錄界面</p><p><b>  創(chuàng)建內(nèi)容面板</b></p><p>  所有組件都要布置在窗體的內(nèi)容面板上,而登陸模塊的內(nèi)容使用了背景圖片來(lái)美化窗體界面,這就需要繼承Swing的Jpanel類(lèi)編寫(xiě)自己的面板類(lèi),然后將面板類(lèi)作為窗體的內(nèi)容

65、面板。</p><p><b>  創(chuàng)建登錄窗體</b></p><p>  創(chuàng)建LoginDialog類(lèi),該類(lèi)繼承Jframe類(lèi),成為一個(gè)窗體。設(shè)置窗體的標(biāo)題為“系統(tǒng)登錄”,設(shè)置內(nèi)容面板為L(zhǎng)oginPanel類(lèi)的對(duì)象。該窗體用于不知各種組件,來(lái)實(shí)現(xiàn)系統(tǒng)登錄的界面。</p><p>  “密碼”文本框的回車(chē)事件</p><p

66、>  在系統(tǒng)登錄窗體的“密碼”文本框中添加了按鍵事件監(jiān)聽(tīng)器,它在獲取到“密碼”文本框輸入的回車(chē)符時(shí)將執(zhí)行登錄事件,也就是說(shuō)在“密碼”文本框輸入密碼后,按Enter鍵將執(zhí)行與單機(jī)“登錄”按鈕相同的業(yè)務(wù)邏輯。</p><p><b>  “登錄”按鈕的事件</b></p><p>  “登錄”按鈕用于執(zhí)行用戶(hù)名和密碼的驗(yàn)證工作,如果驗(yàn)證用戶(hù)名和密碼有效,則啟動(dòng)系統(tǒng),

67、否則禁止進(jìn)入系統(tǒng)。</p><p>  在“登錄”按鈕的動(dòng)作事件監(jiān)聽(tīng)器種,首先獲取用戶(hù)輸入的用戶(hù)名與密碼信息,然后調(diào)用Dao類(lèi)的checkLogin()方法,如果該方法返回true則登陸成功,否則禁止用戶(hù)登錄,并提示輸入的用戶(hù)名與密碼無(wú)法登錄系統(tǒng)。</p><p>  3.2.3 系統(tǒng)主窗體設(shè)計(jì)</p><p>  主窗體是人際交互的本體,用戶(hù)通過(guò)主窗體中提供的各種

68、菜單、表格、文本框、子窗體等組件進(jìn)行管理操作。本系統(tǒng)主界面采用的是MID(即“多文檔界面”),類(lèi)似于Word的應(yīng)用程序,可以同時(shí)打開(kāi)多個(gè)子窗體,并對(duì)打開(kāi)的功能窗體進(jìn)行各種操作。系統(tǒng)主窗體界面如圖3.6所示。</p><p>  圖3.6 系統(tǒng)主窗體界面</p><p><b>  設(shè)計(jì)菜單欄</b></p><p>  本系統(tǒng)的菜單欄是由Men

69、uBar類(lèi)實(shí)現(xiàn)的,該類(lèi)是一個(gè)自定義菜單欄類(lèi),他繼承JmenuBar類(lèi)成為Swing菜單欄組件。菜單欄界面如圖3.7所示。</p><p>  圖3.7 菜單欄界面</p><p><b>  設(shè)計(jì)工具欄</b></p><p>  工具欄用于放置常用命令按鈕,如進(jìn)貨單、銷(xiāo)售單、庫(kù)存盤(pán)點(diǎn)等。像本系統(tǒng)中添加工具欄的方法和添加菜單欄的方法類(lèi)似,需要繼

70、承Swing的Jtool組件編寫(xiě)自己的工具欄。工具欄界面如圖 3.8所示。</p><p>  圖3.8 工具欄界面</p><p><b>  設(shè)計(jì)狀態(tài)欄</b></p><p>  本系統(tǒng)的狀態(tài)欄顯示了當(dāng)前選擇的功能窗體、登錄用戶(hù)名、當(dāng)前日期和本系統(tǒng)所屬公司,即版權(quán)所有者等信息。該狀態(tài)欄是由JPanel面板、Jlabel標(biāo)簽和Jsepara

71、tor分割條組件組成。</p><p>  3.2.4 進(jìn)貨單模塊設(shè)計(jì)</p><p>  進(jìn)貨單模塊負(fù)責(zé)添加企業(yè)的進(jìn)貨信息,他根據(jù)進(jìn)貨人員提供的單據(jù),將采購(gòu)商品的名稱(chēng)、編號(hào)、產(chǎn)地、規(guī)格、單價(jià)和數(shù)量等信息記錄到數(shù)據(jù)的庫(kù)存表中。進(jìn)貨單模塊窗體界面如圖3.9所示。</p><p>  圖3.9 進(jìn)貨單窗體界面</p><p><b> 

72、 設(shè)計(jì)進(jìn)貨單窗體</b></p><p>  在Eclipse中選擇“文件”/“新建”/Visual Class命令,在彈出的New Java Visual Class對(duì)話(huà)框中創(chuàng)建Internal Frame內(nèi)部窗體類(lèi),命名為JinHuoDan_Iframe。</p><p><b>  添加進(jìn)貨商品</b></p><p>  在

73、進(jìn)貨單船體點(diǎn)擊“添加”按鈕,會(huì)在表格中添加一個(gè)空行可以再該空行的第一個(gè)字段選擇商品名稱(chēng),其他的字段信息會(huì)根據(jù)選擇的商品自動(dòng)填充。這就需要為“添加”按鈕編寫(xiě)ActionListener動(dòng)作監(jiān)聽(tīng)器,在該監(jiān)聽(tīng)器中實(shí)現(xiàn)相應(yīng)的操作?!疤砑印卑粹o的初始化由getTiButton()方法完成,該方法在初始化“添加”按鈕時(shí),為按鈕添加了動(dòng)作事件監(jiān)聽(tīng)器。</p><p><b>  其關(guān)鍵代碼如下:</b>&

74、lt;/p><p>  private JButton getTjButton() {</p><p>  if (tjButton == null) {</p><p>  tjButton = new JButton();</p><p>  tjButton.setText("添加");</p><p

75、>  tjButton.addActionListener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent e) {</p><p><b>  // 初始化票號(hào)</b></p><p>  java.sql.Date date = new

76、java.sql.Date(jhsjDate.getTime());</p><p>  jhsjField.setText(date.toString());</p><p>  String maxId = Dao.getRuKuMainMaxId(date);</p><p>  idField.setText(maxId);</p><p

77、>  // 結(jié)束表格中沒(méi)有編寫(xiě)的單元</p><p>  stopTableCellEditing();</p><p>  // 如果表格中不包含空行,就添加新行</p><p>  for (int i = 0; i <= table.getRowCount()-1; i++) {</p><p>  if (table.ge

78、tValueAt(i, 0) == null)</p><p><b>  return;</b></p><p><b>  }</b></p><p>  DefaultTableModel model = (DefaultTableModel) table</p><p>  .getMode

79、l();</p><p>  model.addRow(new Vector());</p><p><b>  }</b></p><p><b>  });</b></p><p><b>  }</b></p><p>  return tjBut

80、ton;</p><p><b>  }</b></p><p><b>  進(jìn)貨統(tǒng)計(jì)</b></p><p>  在bottomPanel面板中布置了多個(gè)文本框,用于統(tǒng)計(jì)品種數(shù)量、貨品總數(shù)、合計(jì)金額等商品信息,在添加貨品之后,要實(shí)現(xiàn)商品信息的自動(dòng)統(tǒng)計(jì),既要在table表格的PropertyChangeListener事件

81、監(jiān)聽(tīng)器編寫(xiě)統(tǒng)計(jì)代碼。這里將統(tǒng)計(jì)代碼編寫(xiě)在ComputeInfo()方法,然后在事件監(jiān)聽(tīng)器中調(diào)用。</p><p>  當(dāng)table表格發(fā)生屬性改變事件是,事件監(jiān)聽(tīng)器首先會(huì)檢測(cè)發(fā)生的事件類(lèi)型,也就是判斷發(fā)生了那種更改屬性的事件,如果事件類(lèi)型是tableCellEditor則說(shuō)明術(shù)語(yǔ)表格編輯事件,這時(shí)應(yīng)該針對(duì)表格的修改事件去調(diào)用ComputeInfo()方法執(zhí)行產(chǎn)品進(jìn)貨的統(tǒng)計(jì)業(yè)務(wù)并將結(jié)果顯示在相應(yīng)的組件上。</

82、p><p><b>  商品入庫(kù)</b></p><p>  再添加了進(jìn)貨單中的所有商品后,單機(jī)“入庫(kù)”按鈕可以將這些商品添加到數(shù)據(jù)庫(kù)中。這需要在“入庫(kù)”按鈕的初始化方法中,為按鈕添加ActionListener動(dòng)作監(jiān)聽(tīng)器,在監(jiān)聽(tīng)器中實(shí)現(xiàn)商品入庫(kù)的業(yè)務(wù)邏輯。getRukuButton()方法是“入庫(kù)”按鈕的初始化方法,該方法將判斷“入庫(kù)”按鈕對(duì)象是否初始化,如果已經(jīng)初始化

83、就直接將按鈕對(duì)象返回給方法調(diào)用者,否者現(xiàn)對(duì)按鈕進(jìn)行初始胡,然后返回該按鈕對(duì)象。在初始化“入庫(kù)”按鈕的過(guò)程中為按鈕添加了事件監(jiān)聽(tīng)器,在該事件監(jiān)聽(tīng)器中首先調(diào)用stopTableCellEditing()方法停止正在編輯的表格單元,然后獲取進(jìn)貨單的品種數(shù)量,結(jié)算方式、合計(jì)金額、經(jīng)手人、操作員、進(jìn)票號(hào)、驗(yàn)證結(jié)論等信息,并對(duì)關(guān)鍵信息進(jìn)行判斷,防止用戶(hù)忘記填寫(xiě)這些關(guān)鍵信息。最后,創(chuàng)建進(jìn)貨主表的模型對(duì)象、進(jìn)貨詳細(xì)表的模型對(duì)象和庫(kù)存表的模型對(duì)象,使用進(jìn)

84、貨單窗體中的信息初始化這些模型對(duì)象,并把他們通過(guò)Dao公共類(lèi)的insertRukuInfo()方法保存到數(shù)據(jù)庫(kù)中。</p><p><b>  其關(guān)鍵代碼如下:</b></p><p>  private JButton getRukuButton() {</p><p>  if (rukuButton == null) {</p>

85、;<p>  rukuButton = new JButton();</p><p>  rukuButton.setText("入庫(kù)");</p><p>  rukuButton.addActionListener(new java.awt.event.ActionListener() {</p><p>  public vo

86、id actionPerformed(java.awt.event.ActionEvent e) {</p><p>  stopTableCellEditing(); // 結(jié)束表格中沒(méi)有編寫(xiě)的單元</p><p>  String pzsStr = pzslField.getText(); // 品種數(shù)</p><p>  String jeStr = hjje

87、Field.getText(); // 合計(jì)金額</p><p>  String jsfsStr = jsfsComboBox.getSelectedItem().toString(); // 結(jié)算 方式</p><p>  String jsrStr = jsrComboBox.getSelectedItem() + ""; // 經(jīng)手人</p>

88、<p>  String czyStr = jsrComboBox.getSelectedItem() + ""; // 操作員</p><p>  String rkDate = jhsjField.getText(); // 入庫(kù)時(shí)間</p><p>  String ysjlStr = ysjlField.getText().trim(); // 驗(yàn)收結(jié)

89、論</p><p>  String id = idField.getText(); // 票號(hào)</p><p>  String gysName = gysComboBox.getSelectedItem() + "";// 供應(yīng)商名字</p><p>  if (jsrStr == null || jsrStr.isEmpty()) {<

90、;/p><p>  JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,</p><p>  "請(qǐng)?zhí)顚?xiě)經(jīng)手人");</p><p><b>  return;</b></p><p><b>  }</b></p>&

91、lt;p>  if (ysjlStr == null || ysjlStr.isEmpty()) {</p><p>  JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,</p><p>  "填寫(xiě)驗(yàn)收結(jié)論");</p><p><b>  return;</b>

92、</p><p><b>  }</b></p><p>  if (table.getRowCount() <= 0) {</p><p>  JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,</p><p>  "填加入庫(kù)商品");&l

93、t;/p><p><b>  return;</b></p><p><b>  }</b></p><p>  TbRukuMain ruMain = new TbRukuMain(id, pzsStr, jeStr,</p><p>  ysjlStr, gysName, rkDate, czySt

94、r, jsrStr, jsfsStr);</p><p>  Set<TbRukuDetail> set = ruMain.getTabRukuDetails();</p><p>  int rows = table.getRowCount();</p><p>  for (int i = 0; i < rows; i++) {</p&g

95、t;<p>  TbSpinfo spinfo = (TbSpinfo) table.getValueAt(i, 0);</p><p>  if (spinfo == null || spinfo.getId() == null</p><p>  || spinfo.getId().isEmpty())</p><p><b>  con

96、tinue;</b></p><p>  String djStr = (String) table.getValueAt(i, 6);</p><p>  String slStr = (String) table.getValueAt(i, 7);</p><p>  Double dj = Double.valueOf(djStr);</p&

97、gt;<p>  Integer sl = Integer.valueOf(slStr);</p><p>  TbRukuDetail detail = new TbRukuDetail();</p><p>  detail.setTabSpinfo(spinfo.getId());</p><p>  detail.setTabRukuMain(

98、ruMain.getRkId());</p><p>  detail.setDj(dj);</p><p>  detail.setSl(sl);</p><p>  set.add(detail);</p><p><b>  }</b></p><p>  boolean rs = Dao.

99、insertRukuInfo(ruMain);</p><p><b>  if (rs) {</b></p><p>  JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,</p><p><b>  "入庫(kù)完成");</b></p>

100、<p>  DefaultTableModel dftm = new DefaultTableModel();</p><p>  table.setModel(dftm);</p><p>  pzslField.setText("0");</p><p>  hpzsField.setText("0");<

101、;/p><p>  hjjeField.setText("0");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  });</b></p><p><b>  }<

102、;/b></p><p>  return rukuButton;</p><p><b>  }</b></p><p>  3.2.5 銷(xiāo)售單模塊設(shè)計(jì)</p><p>  商品銷(xiāo)售時(shí)進(jìn)銷(xiāo)存管理中的重要環(huán)節(jié)之一,進(jìn)貨商在入庫(kù)之后就可以開(kāi)始銷(xiāo)售。銷(xiāo)售單模塊主要負(fù)責(zé)根據(jù)經(jīng)手人的銷(xiāo)售單據(jù),操作進(jìn)銷(xiāo)存管理系統(tǒng)的庫(kù)存商品和

103、記錄銷(xiāo)售信息,方便以后查詢(xún)和統(tǒng)計(jì)。其窗體界面如圖3.10所示。</p><p>  圖3.10 銷(xiāo)售單窗體界面</p><p><b>  設(shè)計(jì)銷(xiāo)售單窗體</b></p><p>  創(chuàng)建Internal frame 內(nèi)部窗體類(lèi),命名為XiaoShouDan。該窗體主要用于處理商品銷(xiāo)售的業(yè)務(wù)邏輯</p><p><

104、b>  添加銷(xiāo)售商品</b></p><p>  在銷(xiāo)售單窗體中單擊“添加”,將向table表格中添加新的空行,操作員可以在空行的第一列字段的商品下來(lái)列表中選擇銷(xiāo)售的商品,這兒下拉列表框和進(jìn)貨單窗體的不同,它不是根據(jù)供貨商字段確定選擇框內(nèi)容,而是包含了數(shù)據(jù)庫(kù)中所欲可以銷(xiāo)售的商品。要實(shí)現(xiàn)添加商品的功能,需要為“添加”按鈕添加動(dòng)作監(jiān)聽(tīng)器,在監(jiān)聽(tīng)器種實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)邏輯。</p><

105、p>  在該監(jiān)聽(tīng)器中調(diào)用了initPiaoHao()方法初始化銷(xiāo)售票號(hào),該票號(hào)就是銷(xiāo)售單在數(shù)據(jù)庫(kù)中的id編號(hào)。initPiaoHao()方法首先創(chuàng)建java.sql包中Date類(lèi)的對(duì)象,該對(duì)象包含當(dāng)前日期;然后調(diào)用Dao累的getSellMainMaxId()方法獲取數(shù)據(jù)庫(kù)銷(xiāo)售主表中的最大ID號(hào);最后,將該ID編號(hào)更新到piaoHao文本框中。</p><p><b>  銷(xiāo)售統(tǒng)計(jì)</b&g

106、t;</p><p>  和進(jìn)貨單的統(tǒng)計(jì)功能類(lèi)似,銷(xiāo)售單也需要統(tǒng)計(jì)功能,統(tǒng)計(jì)的內(nèi)容包括貨品數(shù)量、品種數(shù)量、合計(jì)金額等信息,實(shí)現(xiàn)方式也是通過(guò)table表格的事件監(jiān)聽(tīng)器來(lái)處理相應(yīng)的統(tǒng)計(jì)業(yè)務(wù),但是銷(xiāo)售但船體使用不是PropertyChangeListener屬性改變事件監(jiān)聽(tīng)器,而是使用ContainerListener容器監(jiān)聽(tīng)器。</p><p><b>  商品銷(xiāo)售</b>

107、;</p><p>  在銷(xiāo)售單窗體中添加完銷(xiāo)售商品之后,單擊“銷(xiāo)售”按鈕,將完成本次銷(xiāo)售單的銷(xiāo)售業(yè)務(wù)。系統(tǒng)會(huì)記錄本次銷(xiāo)售信息,并從庫(kù)存表中扣除銷(xiāo)售的商品數(shù)量。這些業(yè)務(wù)處理都是在“銷(xiāo)售”按鈕的動(dòng)作監(jiān)聽(tīng)器中完成,該監(jiān)聽(tīng)器需要獲取銷(xiāo)售單窗體中所有銷(xiāo)售信息和商品信息,將所有商品信息封裝為銷(xiāo)售明細(xì)表的模型對(duì)象,并將這些模型對(duì)象放到一個(gè)集合中,然后調(diào)用Dao公共類(lèi)的insertSellInfo()方法將集合與銷(xiāo)售主表的模型

108、對(duì)象保存到數(shù)據(jù)庫(kù)中。</p><p><b>  其關(guān)鍵代碼如下:</b></p><p>  // 單擊銷(xiāo)售按鈕保存進(jìn)貨信息</p><p>  JButton sellButton = new JButton("銷(xiāo)售");</p><p>  sellButton.addActionListene

109、r(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent e) {</p><p>  stopTableCellEditing(); // 結(jié)束表格中沒(méi)有編寫(xiě)的單元</p><p>  clearEmptyRow(); // 清除空行</p><p>

110、;  String hpzsStr = hpzs.getText(); // 貨品總數(shù)</p><p>  String pzsStr = pzs.getText(); // 品種數(shù)</p><p>  String jeStr = hjje.getText(); // 合計(jì)金額</p><p>  String jsfsStr = jsfs.getSelected

111、Item().toString(); // 結(jié)算方式</p><p>  String jsrStr = jsr.getSelectedItem() + ""; // 經(jīng)手人</p><p>  String czyStr = czy.getText(); // 操作員</p><p>  String rkDate = jhsjDate.toL

112、ocaleString(); // 銷(xiāo)售時(shí)間</p><p>  String ysjlStr = ysjl.getText().trim(); // 驗(yàn)收結(jié)論</p><p>  String id = piaoHao.getText(); // 票號(hào)</p><p>  String kehuName = kehu.getSelectedItem().toStr

113、ing();// 供應(yīng)商名字</p><p>  if (jsrStr == null || jsrStr.isEmpty()) {</p><p>  JOptionPane.showMessageDialog(XiaoShouDan.this, "請(qǐng)?zhí)顚?xiě)經(jīng)手人");</p><p><b>  return;</b>&l

114、t;/p><p><b>  }</b></p><p>  if (ysjlStr == null || ysjlStr.isEmpty()) {</p><p>  JOptionPane.showMessageDialog(XiaoShouDan.this, "填寫(xiě)驗(yàn)收結(jié)論");</p><p>&

115、lt;b>  return;</b></p><p><b>  }</b></p><p>  if (table.getRowCount() <= 0) {</p><p>  JOptionPane.showMessageDialog(XiaoShouDan.this, "填加銷(xiāo)售商品");&l

116、t;/p><p><b>  return;</b></p><p><b>  }</b></p><p>  TbSellMain sellMain = new TbSellMain(id, pzsStr, jeStr,</p><p>  ysjlStr, kehuName, rkDate, cz

117、yStr, jsrStr, jsfsStr);</p><p>  Set<TbSellDetail> set = sellMain.getTbSellDetails();</p><p>  int rows = table.getRowCount();</p><p>  for (int i = 0; i < rows; i++) {<

118、/p><p>  TbSpinfo spinfo = (TbSpinfo) table.getValueAt(i, 0);</p><p>  String djStr = (String) table.getValueAt(i, 6);</p><p>  String slStr = (String) table.getValueAt(i, 7);</p>

119、;<p>  Double dj = Double.valueOf(djStr);</p><p>  Integer sl = Integer.valueOf(slStr);</p><p>  TbSellDetail detail = new TbSellDetail();</p><p>  detail.setSpid(spinfo.getI

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論