




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
河南理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院課程設(shè)計(jì)報(bào)告2015-2016-1)課程名稱 軟件工程課程設(shè)計(jì)設(shè)計(jì)題目 企業(yè)進(jìn)銷存管理系統(tǒng)學(xué)生姓名 徐 松學(xué) 號(hào) 311309060209專業(yè)班級(jí) 軟件工程 1302指導(dǎo)教師 王 靜1/332016年 1月 14 日一、系統(tǒng)背景....................................................................................................................................3二、系統(tǒng)分析...................................................................................................................................41.理解需求........................................................................................................................32.需求任務(wù)分析.......................................................33.數(shù)據(jù)庫(kù)..............................................................4三、系統(tǒng)設(shè)計(jì)....................................................................................................................................錯(cuò)誤!未定義書(shū)簽。1.Item類設(shè)計(jì)..................................................................................................................92.數(shù)據(jù)模型公共類.........................................................................................................113.Dao公共類..................................................................................................................203.4系統(tǒng)登錄模塊設(shè)計(jì)..........................................................................................................211.設(shè)計(jì)登錄窗體.............................................................................................................212.密碼文本框.................................................................................................................233.“登錄”按鈕.............................................................................................................233.5系統(tǒng)主窗體設(shè)計(jì)..............................................................................................................251.設(shè)計(jì)菜單欄.................................................................................................................252.設(shè)計(jì)工具欄.................................................................................................................263.設(shè)計(jì)狀態(tài)欄.................................................................................................................262/333.6銷售單模塊設(shè)計(jì) 271.設(shè)計(jì)銷售窗體 272.添加銷售商品 273.銷售統(tǒng)計(jì) 274.商品銷售 27四、總結(jié) 21一、系統(tǒng)背景中小企業(yè)在我國(guó)經(jīng)濟(jì)發(fā)展中具有重要地位,隨著我國(guó)市場(chǎng)經(jīng)濟(jì)的蓬勃發(fā)展和3/33人們對(duì)計(jì)算機(jī)的普遍應(yīng)用,批發(fā)、零售行業(yè)正處在一個(gè)高速發(fā)展的時(shí)期。行業(yè)的快速發(fā)展必然導(dǎo)致競(jìng)爭(zhēng)的加劇,要想在激烈的市場(chǎng)競(jìng)爭(zhēng)中謀求發(fā)展,客觀上要求企業(yè)必須加強(qiáng)內(nèi)部管理,提高運(yùn)營(yíng)效率。而我國(guó)大部分小型批發(fā)、零售企業(yè)在信息機(jī)制上還沒(méi)有擺脫原有的手工模式,企業(yè)內(nèi)部沒(méi)有形成完善的、有效的信息化管理機(jī)制,企業(yè)發(fā)展的動(dòng)力不足,從而影響企業(yè)的持續(xù)、穩(wěn)定、快速的發(fā)展。當(dāng)今國(guó)內(nèi)外多數(shù)企業(yè)的競(jìng)爭(zhēng)特點(diǎn)是:產(chǎn)品的種類、規(guī)格特別多,市場(chǎng)需求變化很快,與分銷商,零售商的關(guān)系日益密切等。而隨著業(yè)務(wù)量的擴(kuò)大,傳統(tǒng)的管理方法已經(jīng)無(wú)法處理日益膨脹的大量的業(yè)務(wù)數(shù)據(jù),企業(yè)采用電腦管理進(jìn)貨、庫(kù)存、銷售等諸多環(huán)節(jié)也已成為趨勢(shì)及必然。實(shí)現(xiàn)企業(yè)信息化管理是現(xiàn)代社會(huì)中小企業(yè)穩(wěn)步發(fā)展的必要條件,它可以提高企業(yè)的管理水平和工作效率,最大限度地減少手工操作帶來(lái)的失誤。進(jìn)銷存管理系統(tǒng)正是一個(gè)信息化管理軟件,可以實(shí)現(xiàn)企業(yè)的進(jìn)貨、銷售、庫(kù)存管理等各項(xiàng)業(yè)務(wù)的信息化管理。出于以上原因,本課程設(shè)計(jì)將基于MySQL數(shù)據(jù)庫(kù)并以JAVA為開(kāi)發(fā)環(huán)境設(shè)計(jì)實(shí)現(xiàn)一個(gè)企業(yè)進(jìn)銷存管理系統(tǒng)。該系統(tǒng)包括基礎(chǔ)信息管理、進(jìn)貨管理、銷售管理、庫(kù)存管理、查詢統(tǒng)計(jì)、系統(tǒng)管理幾個(gè)模塊,主要是處理商業(yè)企業(yè)商品的采購(gòu)、庫(kù)存和銷售各個(gè)環(huán)節(jié)的活動(dòng),具有良好的人機(jī)界面??紤]到系統(tǒng)的使用對(duì)象可能較多,權(quán)限管理良好,數(shù)據(jù)查詢方便,支持多條件查詢。二、系統(tǒng)分析1、理解需求本系統(tǒng)通過(guò)進(jìn)銷存系統(tǒng)的終端用戶和客戶的進(jìn)行調(diào)研后, 得出系統(tǒng)需求的關(guān)鍵1)進(jìn)貨管理商品進(jìn)貨信息管理:商品進(jìn)貨信息包括商品進(jìn)貨數(shù)量、單價(jià)、供貨商、進(jìn)貨日期、等。商品進(jìn)貨管理功能完成進(jìn)貨信息登記、修改和刪除等。更新庫(kù)存:進(jìn)貨信息的變動(dòng)直接關(guān)系到庫(kù)存的變化(2)庫(kù)存管理庫(kù)存商品信息管理::商品庫(kù)存信息包括商品進(jìn)貨數(shù)量、單價(jià)、供貨商、進(jìn)貨日期、等。商品庫(kù)存管理功能完成庫(kù)存信息登記、修改和刪除、查詢等。(3)銷售管理信息管理:商品銷售信息包括商品銷售數(shù)量、單價(jià)、統(tǒng)計(jì)日等商品銷售。管理功能4/33完成銷售信息登記、修改和刪除,以及銷售總匯查詢。本系統(tǒng)應(yīng)該對(duì)基礎(chǔ)數(shù)據(jù)(用戶數(shù)據(jù)字典)進(jìn)行維護(hù)。系統(tǒng)應(yīng)該提供強(qiáng)大的數(shù)據(jù)統(tǒng)計(jì)、查詢、報(bào)表生成及打印等功能。系統(tǒng)客戶端運(yùn)行在Windows各版的平臺(tái)下,系統(tǒng)還應(yīng)該有一個(gè)較好飛圖形用戶界面。系統(tǒng)還應(yīng)該有很好的可擴(kuò)展性。系統(tǒng)應(yīng)該容易上手,方便使用。2、需求分析任務(wù)第一項(xiàng)任務(wù):畫(huà)出“進(jìn)銷存管理系統(tǒng)”的組合結(jié)構(gòu)圖,即組織結(jié)構(gòu)模型。第二項(xiàng)任務(wù):畫(huà)出“進(jìn)銷存管理系統(tǒng)”的業(yè)務(wù)操作圖,即業(yè)務(wù)操作模型。第三項(xiàng)任務(wù):畫(huà)出“進(jìn)銷存管理系統(tǒng)”的數(shù)據(jù)流程圖。第四項(xiàng)任務(wù):列出“進(jìn)銷存管理系統(tǒng)”的功能點(diǎn)列表,即功能模型。第五項(xiàng)任務(wù):列出“進(jìn)銷存管理系統(tǒng)”的性能點(diǎn)表,即性能模型。第六項(xiàng)任務(wù):確定“進(jìn)銷存管理系統(tǒng)”的環(huán)境模型,即運(yùn)行環(huán)境。數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)設(shè)計(jì)是進(jìn)銷存信息系統(tǒng)的核心, 采用規(guī)范化設(shè)計(jì),使數(shù)據(jù)庫(kù)結(jié)構(gòu)盡可能簡(jiǎn)化,減少冗余,保持系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的一致性。根據(jù)不同的需求,一個(gè)商品流通企業(yè)進(jìn)銷存管理系統(tǒng)可包括幾個(gè)到上百個(gè)不等的數(shù)據(jù)表、 數(shù)據(jù)視圖、存儲(chǔ)過(guò)程以及函數(shù)等,但最基本的數(shù)據(jù)表應(yīng)該包括:操作用戶數(shù)據(jù)表、公司信息數(shù)據(jù)表、采購(gòu)明細(xì)數(shù)據(jù)表、采購(gòu)客戶數(shù)據(jù)表、采購(gòu)信息數(shù)據(jù)表、供應(yīng)客戶數(shù)據(jù)表、商品信息數(shù)據(jù)表、銷售明細(xì)數(shù)據(jù)表和銷售信息數(shù)據(jù)表;數(shù)據(jù)視圖包括:采購(gòu)入庫(kù)明細(xì)視圖、累計(jì)采購(gòu)商品視圖、累計(jì)銷售商品視圖和銷售出庫(kù)明細(xì)視圖5/33角色定義組織結(jié)構(gòu)圖中各單位職責(zé)說(shuō)明與相關(guān)業(yè)務(wù),如表:銷售人員信息單據(jù)進(jìn)貨信息單據(jù)6/33商品銷售信息單據(jù)用戶信息單據(jù)經(jīng)手人信息表(jsr)7/33客戶實(shí)體E-R圖企業(yè)進(jìn)銷存管理系統(tǒng)將記錄所有的客戶信息,在銷售、退貨等操作時(shí),將直接引用該客戶的實(shí)體屬性。客戶實(shí)體包括客戶編號(hào)、客戶名稱、簡(jiǎn)稱、地址、電話、郵政編碼、聯(lián)系人、聯(lián)系人電話、傳真、開(kāi)戶行和賬號(hào)等屬性,客戶實(shí)體E-R圖如圖所示。商品實(shí)體 E-R圖供應(yīng)商實(shí)體E-R圖8/33進(jìn)銷存管理系統(tǒng)數(shù)據(jù)流圖三、系統(tǒng)設(shè)計(jì)目的從該階段開(kāi)始正式進(jìn)入軟件的實(shí)際開(kāi)發(fā)階段,本階段完成系統(tǒng)的大致設(shè)計(jì)并明確司徒的數(shù)據(jù)結(jié)構(gòu)與軟件結(jié)構(gòu)。在軟件設(shè)計(jì)階段主要是把一個(gè)軟件需求轉(zhuǎn)化為軟件表示的過(guò)程,術(shù)語(yǔ)定義總體結(jié)構(gòu)軟件系統(tǒng)的總體邏輯結(jié)構(gòu)。本系統(tǒng)采用面向?qū)ο蟮脑O(shè)計(jì)方法,所以邏輯結(jié)構(gòu)為部件組裝圖概念模型9/33CDM關(guān)系數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)模型,包括一張邏輯 E-R圖及相應(yīng)的數(shù)據(jù)字典物理模型PDM關(guān)系數(shù)據(jù)庫(kù)物理設(shè)計(jì)模型,包括一張物理表關(guān)系圖及其相應(yīng)的數(shù)據(jù)字典角色數(shù)據(jù)庫(kù)中享有某些特權(quán)操作的用戶子系統(tǒng)具有相對(duì)獨(dú)立功能的小系統(tǒng),一個(gè)大的軟件系統(tǒng)可以劃分為多個(gè)子系統(tǒng),每個(gè)子系統(tǒng)可由多個(gè)模塊或多個(gè)部件組成模塊具有功能獨(dú)立、能被調(diào)用的信息單元系統(tǒng)構(gòu)架1.Item 類設(shè)計(jì)Item類是系統(tǒng)的公共類之一,主要用于封裝和傳遞參數(shù)信息,這是典型命令模式的實(shí)現(xiàn)。在Dao類中經(jīng)常使用該類作為方法參數(shù); 另外,在各個(gè)窗體界面中也經(jīng)常使用該類作組件數(shù)據(jù),其 toString() 方法將返回name屬性值,所以顯示到各個(gè)組件上的內(nèi)容就是 Item類的對(duì)象所代表的商品、供應(yīng)商或者客戶等信息中的名稱。關(guān)鍵代碼如下packagecom.lzw;public class Item{private String id; // 定義id屬性private String name; // 定義name屬性public Item(){}public Item(String id,String name){10/33this .id=id;this .name=name;}public StringgetId(){ // 定義得到id屬性的方法return id;}public void setId(String id){this .id= id;}public StringgetName(){ // 定義得到那么屬性的方法return name;}public void setName(String name){this .name= name;}public StringtoString(){ // 定義該類字符串的表現(xiàn)形式return getName();}}數(shù)據(jù)模型公共類在com.lzw.dao.model包中存放的是數(shù)據(jù)模型公共類,它們對(duì)應(yīng)著數(shù)據(jù)庫(kù)中不同的數(shù)據(jù)表,這些模型將被訪問(wèn)數(shù)據(jù)庫(kù)的Dao類和程序中各個(gè)模塊甚至各個(gè)組件所使用。和Item公共類的使用方法類似,數(shù)據(jù)模型也是對(duì)數(shù)據(jù)表中所有字段(屬性)的封裝,但是數(shù)據(jù)模型是純粹的模型類,它不但需要重寫父類的toString()方法,還要重寫 hashCode()方法和equals()方法模型類主要用于存儲(chǔ)數(shù)據(jù),并11/33通過(guò)相應(yīng)的getXXX()方法和setXXX()方法實(shí)現(xiàn)不同屬性的訪問(wèn)原則。以商品數(shù)據(jù)表為例其代碼:publicclassTbSpinfoimplementsjava.io.Serializable{privateStringid;privateStringspname;privateStringjc;privateStringcd;privateStringdw;privateStringgg;privateStringbz;privateStringph;privateStringpzwh;privateStringmemo;privateStringgysname;publicTbSpinfo(){}public TbSpinfo(String id){this .id= id;}public StringgetId(){return this .id;}public void setId(String id){12/33this .id= id;}public StringgetSpname(){return this .spname;}public void setSpname(String spname){this .spname= spname;}public StringgetJc(){return this .jc;}public void setJc(String jc){this .jc = jc;}public StringgetCd(){return this .cd;}public void setCd(String cd){this .cd= cd;13/33}public StringgetDw(){return this .dw;}public void setDw(String dw){this .dw= dw;}public StringgetGg(){return this .gg;}public void setGg(String gg){this .gg= gg;}public StringgetBz(){return this .bz;}public void setBz(String bz){this .bz= bz;}14/33public StringgetPh(){return this .ph;}public void setPh(String ph){this .ph= ph;}public StringgetPzwh(){return this .pzwh;}public void setPzwh(String pzwh){this .pzwh= pzwh;}public StringgetMemo(){return this .memo;}public void setMemo(String memo){this .memo= memo;}15/33public StringgetGysname(){return this .gysname;}public void setGysname(String gysname){this .gysname= gysname;}public StringtoString(){return getSpname();}@OverridepublicinthashCode(){finalintPRIME=31;intresult=1;result=PRIME*result+((bz==null)?0:bz.hashCode());result=PRIME*result+((cd==null)?0:cd.hashCode());result=PRIME*result+((dw==null)?0:dw.hashCode());result=PRIME*result+((gg==null)?0:gg.hashCode());result=PRIME*result+((gysname==null)?0:gysname.hashCode());result=PRIME*result+((id==null)?0:id.hashCode());result=PRIME*result+((jc==null)?0:jc.hashCode());result=PRIME*result+((memo==null)?0:memo.hashCode());16/33result =PRIME*result +((ph==null )?0:ph.hashCode());result = PRIME* result +(( pzwh== null )?0:pzwh.hashCode());result = PRIME* result +(( spname== null )?0:spname.hashCode());return result ;}@Overridepublic boolean equals(Object obj){if (this == obj)return true;if (obj== null )return false ;if (getClass()!= obj.getClass())return false ;final TbSpinfo other =(TbSpinfo) obj;if (bz== null ){if (other.bz!= null )return false ;} else if (! bz.equals( other.bz))return false ;if (cd== null ){if (other.cd!= null )return false ;} else if (! cd.equals( other.cd))17/33returnfalse;if(dw==null){if(other.dw!=null)returnfalse;}elseif(!dw.equals(other.dw))returnfalse;if(gg==null){if(other.gg!=null)returnfalse;}elseif(!gg.equals(other.gg))returnfalse;if(gysname==null){if(other.gysname!=null)returnfalse;}elseif(!gysname.equals(other.gysname))returnfalse;if(id==null){if(other.id!=null)returnfalse;}elseif(!id.equals(other.id))returnfalse;if(jc==null){if(other.jc!=null)returnfalse;}elseif(!jc.equals(other.jc))18/33returnfalse;if(memo==null){if(other.memo!=null)returnfalse;}elseif(!memo.equals(other.memo))returnfalse;if(ph==null){if(other.ph!=null)returnfalse;}elseif(!ph.equals(other.ph))returnfalse;if(pzwh==null){if(other.pzwh!=null)returnfalse;}elseif(!pzwh.equals(other.pzwh))returnfalse;if(spname==null){if(other.spname!=null)returnfalse;}elseif(!spname.equals(other.spname))returnfalse;return true;}}19/333.Dao公共類Dao的全稱是DataAccessObject,即數(shù)據(jù)訪問(wèn)對(duì)象。本項(xiàng)目中應(yīng)用該名稱作為數(shù)據(jù)庫(kù)訪問(wèn)類的名稱,在該類中實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的驅(qū)動(dòng)、連接、關(guān)閉和多個(gè)操作數(shù)據(jù)庫(kù)的方法,這些方法包括不同數(shù)據(jù)表的操作方法。在介紹具體的數(shù)據(jù)庫(kù)訪問(wèn)方法之前,先來(lái)看一下Dao類的定義,也就是數(shù)據(jù)庫(kù)驅(qū)動(dòng)和連接的代碼。代碼如下public class Dao{staticStatementsql;staticResultSetres;protectedstaticStringdbClassName="com.mysql.jdbc.Driver";protectedstaticStringdbUrl="jdbc:mysql://localhost:3306/db_database28";protectedstaticStringdbUser="root";protectedstaticStringdbPwd="1003037761";protectedstaticStringsecond=null;public static Connection conn=null ;static {try{if(conn==null ){Class.forName(dbClassName).newInstance();conn=(Connection)DriverManager. getConnection (dbUrl,dbUser,dbPwd);20/33}} catch(Exception ee){ee.printStackTrace();}}3.4系統(tǒng)登錄模塊設(shè)計(jì)設(shè)計(jì)登錄窗體登錄模塊的窗體設(shè)計(jì)由兩部分組成,一部分是登錄窗體,另一部分是窗體中帶背景圖片的內(nèi)容面板。1.創(chuàng)建內(nèi)容面板public class LoginPanel extends JPanel{public int width, height ;private Image img;public LoginPanel(){super();21/33URLurl =getClass().getResource( "/res/login.jpg" );img= newImageIcon( url).getImage();}protected void paintComponent(Graphics g){super.paintComponent( g);g.drawImage( img,0,0, this );}}2.創(chuàng)建登錄窗體privateLoginPanelgetLoginPanel(){if(loginPanel==null){jLabel1=newJLabel();jLabel1.setBounds(newRectangle(86,71,55,18));jLabel1.setText("密碼:");jLabel=newJLabel();jLabel.setText("用戶名:");jLabel.setBounds(newRectangle(85,41,56,18));loginPanel=newLoginPanel();loginPanel.setLayout(null);loginPanel.setBackground(newColor(0xD8DDC7));loginPanel.add(jLabel,null);loginPanel.add(getUserField(),null);loginPanel.add(jLabel1,null);loginPanel.add(getPasswordField(),null);loginPanel.add(getLoginButton(),null);22/33loginPanel .add(getExitButton(), null );}return loginPanel ;}密碼文本框在系統(tǒng)登錄窗體的“密碼”文本框中添加了按鍵事件監(jiān)聽(tīng)器,它在獲取到“密碼”文本框輸入的回車字符時(shí)將執(zhí)行登錄事件,也就是說(shuō)在“密碼”文本框輸入密碼后,按Enter鍵將執(zhí)行與單擊“登錄”按鈕相同的業(yè)務(wù)邏輯。代碼如下:private JPasswordFieldgetPasswordField(){if (passwordField == null ){passwordField = newJPasswordField();passwordField .setBounds( newRectangle(143,69,125,22));passwordField .addKeyListener( newKeyAdapter(){public voidkeyTyped(KeyEvent e){if (e.getKeyChar()== '\n' )loginButton .doClick();}});}return passwordField ;}“登錄”按鈕“登錄”按鈕用于執(zhí)行用戶名和密碼的驗(yàn)證工作,如果驗(yàn)證用戶名和密碼有效,23/33則啟動(dòng)系統(tǒng),否則禁止進(jìn)入系統(tǒng)。在“登錄”按鈕的動(dòng)作事件監(jiān)聽(tīng)器中,首先獲取用戶輸入的用戶名與密碼信息,然后調(diào)用Dao類的checkLogin()方法,如果該方法返回true則登錄成功,否則禁止用戶登錄,并提示輸入的用戶名與密碼無(wú)法登錄系統(tǒng)。如圖所示代碼如下:private JButtongetLoginButton(){if (loginButton == null){loginButton = newJButton();loginButton .setBounds( newRectangle(109, 114, 48,20));loginButton .setIcon( newImageIcon(getClass().getResource("/res/loginButton.jpg" )));loginButton .addActionListener( newActionListener(){public voidactionPerformed(ActionEvent e){try {userStr = userField .getText();String passStr = newString( passwordField.getPassword());if (!Dao. checkLogin (userStr , passStr)){JOptionPane. showMessageDialog (LoginDialog. this ,24/33用戶名與密碼無(wú)法登錄","登錄失敗",JOptionPane.ERROR_MESSAGE);return ;}} catch (Exception e1){e1.printStackTrace();}mainFrame.setDefaultCloseOperation( EXIT_ON_CLOSE);mainFrame.setVisible( true);MainFrame.getCzyStateLabel ().setText( userStr );setVisible( false );}});}return loginButton ;}3.5系統(tǒng)主窗體設(shè)計(jì)設(shè)計(jì)菜單欄本系統(tǒng)的菜單欄是由MenuBar類實(shí)現(xiàn)的,該類是一個(gè)自定義菜單欄類,它繼承JMenuBar類成為Swing的菜單欄組件。下面以創(chuàng)建進(jìn)貨單菜單為例,。1)創(chuàng)建MenuBar類,該類繼承javax.swing.JMenuBar類,并且在該類中定義一個(gè)私有的成員變量,類型為JMenu,用于表示菜單對(duì)象。2)編寫一個(gè)名稱為getJinhuo_Menu()的方法,該方法的返回值為一個(gè)JMenu25/33對(duì)象,也就是一個(gè)菜單對(duì)象。在該方法中,當(dāng)進(jìn)貨菜單對(duì)象為null時(shí),創(chuàng)建一個(gè)菜單對(duì)象,并為其設(shè)置菜單名和快捷鍵。(3)編寫一個(gè)初始化菜單欄界面的方法initialize(),在該方法中,首先設(shè)置組件的尺寸,然后調(diào)用JMenuBar對(duì)象的add()方法向菜單欄中添加一個(gè)菜單。4)編寫以下構(gòu)造方法,用于調(diào)用初始化菜單欄界面。5)在MenuBar類,再創(chuàng)建一個(gè)JMenuItem類型的成員變量jinhuoItem,表示進(jìn)貨菜單項(xiàng)。(6)編寫一個(gè)名稱為getJinhuoItem()的方法,該方法的返回值為一個(gè)JMenuItem對(duì)象,也就是一個(gè)菜單項(xiàng)對(duì)象。在該方法中,當(dāng)進(jìn)貨單菜單項(xiàng)對(duì)象為null時(shí),創(chuàng)建一個(gè)菜單項(xiàng)對(duì)象,并為其設(shè)置菜單項(xiàng)名、圖標(biāo)和動(dòng)作事件監(jiān)聽(tīng)器。7)按照步驟(5)和步驟(6)的方法再創(chuàng)建一個(gè)進(jìn)貨退貨菜單項(xiàng)對(duì)象,名稱為jinhuo_tuihuoItem。8)在getJinhuo_Menu()方法中,應(yīng)用JMenu對(duì)象的add()方法向菜單中添加菜單項(xiàng)。設(shè)計(jì)工具欄工具欄用于放置常用命令按鈕,如進(jìn)貨單、銷售單、庫(kù)存盤點(diǎn)等。向本系統(tǒng)中添加工具欄的方法和添加菜單欄的方法類似,也需要繼承 Swing的JTool組件編寫自己的工具欄。當(dāng)然,也可以直接使用 Swing的JTool組件。組件的initialize() 方法用于初始化工具欄的程序界面。設(shè)計(jì)狀態(tài)欄本系統(tǒng)的狀態(tài)欄顯示了當(dāng)前選擇的功能窗體、登錄用戶名、當(dāng)前日期和本系統(tǒng)所屬公司,即版權(quán)所有者等信息,如下圖所示。26/333.6銷售單模塊設(shè)計(jì)設(shè)計(jì)銷售窗體添加銷售商品在銷售單窗體中單擊“添加”按鈕,將向table表格中添加新的空行,操作員可以在空行的第一列字段的商品下拉列表框中選擇銷售的商品,這個(gè)下拉列表框和進(jìn)貨單窗體的不同,它不是根據(jù)供應(yīng)商字段確定選擇框內(nèi)容,而是包含了數(shù)據(jù)庫(kù)中所有可以銷售的商品。要實(shí)現(xiàn)添加銷售商品功能,需要為“添加”按鈕添加動(dòng)作監(jiān)聽(tīng)器,在監(jiān)聽(tīng)器中實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)邏輯。銷售統(tǒng)計(jì)和進(jìn)貨單的統(tǒng)計(jì)功能類似,銷售單也需要統(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ù),但是銷售單窗體使用的不是PropertyChangeListener屬性改變事件監(jiān)聽(tīng)器,而是使用ContainerListener容器監(jiān)聽(tīng)器。商品銷售在銷售單窗體中添加完銷售商品之后,單擊“銷售”按鈕,將完成本次銷售單的銷售業(yè)務(wù)。系統(tǒng)會(huì)記錄本次銷售信息,并從庫(kù)存表中扣除銷售的商品數(shù)量。這些業(yè)務(wù)處理都是在“銷售”按鈕的動(dòng)作監(jiān)聽(tīng)器中完成的,該監(jiān)聽(tīng)器需要獲取銷售單窗體中的所有銷售信息和商品信息,將所有商品信息封裝為銷售明細(xì)表的模型對(duì)象,并將這些模型對(duì)象放到一個(gè)集合中,然后調(diào)用Dao公共類的insertSellInfo()方法將該集合與銷售主表的模型對(duì)象保存到數(shù)據(jù)庫(kù)中。27/33初始化表格代碼:private void initTable(){String[]columnNames={"商品名稱","商品編號(hào)","供應(yīng)商","產(chǎn)地","單位","規(guī)格","單價(jià)","數(shù)量", "包裝", "批號(hào)", "批準(zhǔn)文號(hào)"};((DefaultTableModel) table .getModel()).setColumnIdentifiers( columnNames);TableColumn column=table .getColumnModel().getColumn(0);final DefaultCellEditor editor =newDefaultCellEditor( sp);editor .setClickCountToStart(2);column.setCellEditor( editor );}初始化商品下拉框:private void initSpBox(){List list = newArrayList();28/33ResultSetset=Dao.query("select*fromtb_spinfo"+"whereidin(selectidfromtb_kucunwherekcsl>0)");sp.removeAllItems();sp.addItem(newTbSpinfo());for(inti=0;table!=null&&i<table.getRowCount();i++){TbSpinfotmpInfo=(TbSpinfo)table.getValueAt(i,0);if(tmpInfo!=null&&tmpInfo.getId()!=null)list.add(tmpInfo.getId());}try{while(set.next()){TbSpinfospinfo=newTbSpinfo();spinfo.setId(set.getString("id").trim());if(list.contains(spinfo.getId()))continue;spinfo.setSpname(set.getString("spname").trim());spinfo.setCd(set.getString("cd").trim());spinfo.setJc(set.getString("jc").trim());spinfo.setDw(set.getString("dw").trim());spinfo.setGg(set.getString("gg").trim());spinfo.setBz(set.getString("bz").trim());spinfo.setPh(set.getString("ph").trim());spinfo.setPzwh(set.getString("pzwh").trim());spinfo.setMemo(set.getString("memo").trim());29/33spinfo .setGysname( set.getString( "gysname").trim());sp.addItem( spinfo );}} catch (SQLException e){e.printStackTrace();}}在事件中計(jì)算品種數(shù)量、貨品總數(shù)、合計(jì)金額private final class computeInfo implements ContainerListener{public void componentRemoved(ContainerEvent e){清除空行clearEmptyRow();計(jì)算代碼int rows= table .getRowCount();int count =0;double money=0.0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)生2025年語(yǔ)文知識(shí)回顧試題及答案
- 山西省太原市山西大學(xué)附中2024-2025學(xué)年高一3月月考語(yǔ)文試題(含答案)
- 2025年連續(xù)波測(cè)距儀合作協(xié)議書(shū)
- 2025年多功能食品加工機(jī)項(xiàng)目合作計(jì)劃書(shū)
- 2025年電信和其他信息傳輸服務(wù)項(xiàng)目合作計(jì)劃書(shū)
- 2024年小自考行政管理就業(yè)能力考題
- 2024年汽車維修工職業(yè)發(fā)展路徑與試題及答案
- 2024古代文學(xué)史真題分析及答案
- 2025年便攜溫度校驗(yàn)儀項(xiàng)目建議書(shū)
- 2025年鋁箔及鋁合金箔項(xiàng)目發(fā)展計(jì)劃
- 2023年中國(guó)疾病預(yù)防控制中心招聘應(yīng)屆高校畢業(yè)生考試真題及答案
- 建設(shè)工程檢測(cè)報(bào)告編制導(dǎo)則DB64-T1685-2020
- 項(xiàng)目干系人與干系人管理
- Java基礎(chǔ)實(shí)踐教程-Java編程基礎(chǔ)
- 高等職業(yè)學(xué)校建設(shè)標(biāo)準(zhǔn)(2022年版)
- 無(wú)人機(jī)的生產(chǎn)流程
- 油漆修繕施工方案
- 山東省濟(jì)南市2022-2023學(xué)年高一下學(xué)期期中考試語(yǔ)文試題(解析版)
- 獎(jiǎng)學(xué)金評(píng)定模型
- 室外管網(wǎng)工程-工程施工進(jìn)度計(jì)劃表
- 學(xué)生發(fā)展核心素養(yǎng)與語(yǔ)文學(xué)科核心素養(yǎng)(王光龍老師)
評(píng)論
0/150
提交評(píng)論