企業(yè)進(jìn)銷存管理系統(tǒng) 課程設(shè)計 軟件工程_第1頁
企業(yè)進(jìn)銷存管理系統(tǒng) 課程設(shè)計 軟件工程_第2頁
企業(yè)進(jìn)銷存管理系統(tǒng) 課程設(shè)計 軟件工程_第3頁
企業(yè)進(jìn)銷存管理系統(tǒng) 課程設(shè)計 軟件工程_第4頁
企業(yè)進(jìn)銷存管理系統(tǒng) 課程設(shè)計 軟件工程_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、河南理工大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院課程設(shè)計報告(2015-2016-1)課程名稱 軟件工程課程設(shè)計 設(shè)計題目 企業(yè)進(jìn)銷存管理系統(tǒng) 學(xué)生姓名 徐 松 學(xué) 號 311309060209 專業(yè)班級 軟件工程1302 指導(dǎo)教師 王 靜 2016 年 1 月 14 日一、系統(tǒng)背景.3二、系統(tǒng)分析3 1.理解需求.3 2.需求任務(wù)分析.3 3.數(shù)據(jù)庫.4三、系統(tǒng)設(shè)計.41.Item類設(shè)計82.數(shù)據(jù)模型公共類93.Dao公共類143.4系統(tǒng)登錄模塊設(shè)計151.設(shè)計登錄窗體152.密碼文本框163.“登錄”按鈕173.5系統(tǒng)主窗體設(shè)計181.設(shè)計菜單欄182.設(shè)計工具欄183.設(shè)計狀態(tài)欄193.6銷售單模塊設(shè)計

2、191.設(shè)計銷售窗體192.添加銷售商品193.銷售統(tǒng)計194.商品銷售19四、總結(jié).21 一、系統(tǒng)背景 中小企業(yè)在我國經(jīng)濟(jì)發(fā)展中具有重要地位,隨著我國市場經(jīng)濟(jì)的蓬勃發(fā)展和人們對計算機(jī)的普遍應(yīng)用,批發(fā)、零售行業(yè)正處在一個高速發(fā)展的時期。行業(yè)的快速發(fā)展必然導(dǎo)致競爭的加劇,要想在激烈的市場競爭中謀求發(fā)展,客觀上要求企業(yè)必須加強(qiáng)內(nèi)部管理,提高運(yùn)營效率。而我國大部分小型批發(fā)、零售企業(yè)在信息機(jī)制上還沒有擺脫原有的手工模式,企業(yè)內(nèi)部沒有形成完善的、有效的信息化管理機(jī)制,企業(yè)發(fā)展的動力不足,從而影響企業(yè)的持續(xù)、穩(wěn)定、快速的發(fā)展。 當(dāng)今國內(nèi)外多數(shù)企業(yè)的競爭特點(diǎn)是:產(chǎn)品的種類、規(guī)格特別多,市場需求變化

3、很快,與分銷商,零售商的關(guān)系日益密切等。而隨著業(yè)務(wù)量的擴(kuò)大,傳統(tǒng)的管理方法已經(jīng)無法處理日益膨脹的大量的業(yè)務(wù)數(shù)據(jù),企業(yè)采用電腦管理進(jìn)貨、庫存、銷售等諸多環(huán)節(jié)也已成為趨勢及必然。  實(shí)現(xiàn)企業(yè)信息化管理是現(xiàn)代社會中小企業(yè)穩(wěn)步發(fā)展的必要條件,它可以提高企業(yè)的管理水平和工作效率,最大限度地減少手工操作帶來的失誤。進(jìn)銷存管理系統(tǒng)正是一個信息化管理軟件,可以實(shí)現(xiàn)企業(yè)的進(jìn)貨、銷售、庫存管理等各項(xiàng)業(yè)務(wù)的信息化管理。 出于以上原因,本課程設(shè)計將基于MySQL數(shù)據(jù)庫并以JAVA為開發(fā)環(huán)境設(shè)計實(shí)現(xiàn)一個企業(yè)進(jìn)銷存管理系統(tǒng)。該系統(tǒng)包括基礎(chǔ)信息管理、進(jìn)貨管理、銷售管理、庫存管理、查詢統(tǒng)計、系統(tǒng)管理幾個模

4、塊,主要是處理商業(yè)企業(yè)商品的采購、庫存和銷售各個環(huán)節(jié)的活動,具有良好的人機(jī)界面??紤]到系統(tǒng)的使用對象可能較多,權(quán)限管理良好,數(shù)據(jù)查詢方便,支持多條件查詢。 二、系統(tǒng)分析1、理解需求       本系統(tǒng)通過進(jìn)銷存系統(tǒng)的終端用戶和客戶的進(jìn)行調(diào)研后,得出系統(tǒng)需求的關(guān)鍵 (1)進(jìn)貨管理 商品進(jìn)貨信息管理:商品進(jìn)貨信息包括商品進(jìn)貨數(shù)量、單價、供貨商、進(jìn)貨日期、等。商品進(jìn)貨管理功能完成進(jìn)貨信息登記、修改和刪除等。更新庫存:進(jìn)貨信息的變動直接關(guān)系到庫存的變化  (2)庫存管理 庫存商品信息管理:商品

5、庫存信息包括商品進(jìn)貨數(shù)量、單價、供貨商、進(jìn)貨日期、等。商品庫存管理功能完成庫存信息登記、修改和刪除、查詢等。  (3)銷售管理   信息管理:商品銷售信息包括商品銷售數(shù)量、單價、統(tǒng)計日等商品銷售。管理功能完成銷售信息登記、修改和刪除,以及銷售總匯查詢。 本系統(tǒng)應(yīng)該對基礎(chǔ)數(shù)據(jù)(用戶數(shù)據(jù)字典)進(jìn)行維護(hù)。系統(tǒng)應(yīng)該提供強(qiáng)大的數(shù)據(jù)統(tǒng)計、查詢、報表生成及打印等功能。系統(tǒng)客戶端運(yùn)行在Windows各版的平臺下,系統(tǒng)還應(yīng)該有一個較好飛圖形用戶界面。系統(tǒng)還應(yīng)該有很好的可擴(kuò)展性。系統(tǒng)應(yīng)該容易上手,方便使用。2、需求分析任務(wù) 第一項(xiàng)任務(wù):畫出“進(jìn)銷存管理系

6、統(tǒng)”的組合結(jié)構(gòu)圖,即組織結(jié)構(gòu)模型。第二項(xiàng)任務(wù):畫出“進(jìn)銷存管理系統(tǒng)”的業(yè)務(wù)操作圖,即業(yè)務(wù)操作模型。 第三項(xiàng)任務(wù):畫出“進(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)境。3.數(shù)據(jù)庫數(shù)據(jù)庫設(shè)計是進(jìn)銷存信息系統(tǒng)的核心,采用規(guī)范化設(shè)計,使數(shù)據(jù)庫結(jié)構(gòu)盡可能簡化,減少冗余,保持系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的一致性。根據(jù)不同的需求,一個商品流通企業(yè)進(jìn)銷存管理系統(tǒng)可包括幾個到上百個不等的數(shù)據(jù)表、數(shù)據(jù)視圖、存儲過程以及函數(shù)等,但

7、最基本的數(shù)據(jù)表應(yīng)該包括:操作用戶數(shù)據(jù)表、公司信息數(shù)據(jù)表、采購明細(xì)數(shù)據(jù)表、采購客戶數(shù)據(jù)表、采購信息數(shù)據(jù)表、供應(yīng)客戶數(shù)據(jù)表、商品信息數(shù)據(jù)表、銷售明細(xì)數(shù)據(jù)表和銷售信息數(shù)據(jù)表;數(shù)據(jù)視圖包括:采購入庫明細(xì)視圖、累計采購商品視圖、累計銷售商品視圖和銷售出庫明細(xì)視圖角色定義組織結(jié)構(gòu)圖中各單位職責(zé)說明與相關(guān)業(yè)務(wù),如表: 銷售人員信息單據(jù)  進(jìn)貨信息單據(jù)商品銷售信息單據(jù)用戶信息單據(jù)經(jīng)手人信息表(jsr)客戶實(shí)體E-R圖企業(yè)進(jìn)銷存管理系統(tǒng)將記錄所有的客戶信息,在銷售、退貨等操作時,將直接引用該客戶的實(shí)體屬性??蛻魧?shí)體包括客戶編號、客戶名稱、簡稱、地址、電話、郵政編碼、聯(lián)系人、聯(lián)系人電

8、話、傳真、開戶行和賬號等屬性,客戶實(shí)體E-R圖如圖所示。商品實(shí)體E-R圖供應(yīng)商實(shí)體E-R圖進(jìn)銷存管理系統(tǒng)數(shù)據(jù)流圖三、系統(tǒng)設(shè)計1.目的       從該階段開始正式進(jìn)入軟件的實(shí)際開發(fā)階段,本階段完成系統(tǒng)的大致設(shè)計并明確司徒的數(shù)據(jù)結(jié)構(gòu)與軟件結(jié)構(gòu)。在軟件設(shè)計階段主要是把一個軟件需求轉(zhuǎn)化為軟件表示的過程,2.術(shù)語定義總體結(jié)構(gòu) 軟件系統(tǒng)的總體邏輯結(jié)構(gòu)。本系統(tǒng)采用面向?qū)ο蟮脑O(shè)計方法,所以邏輯結(jié)構(gòu)為部件組裝圖 概念模型CDM 關(guān)系數(shù)據(jù)庫的邏輯設(shè)計模型,包括一張邏輯E-R圖及相應(yīng)的數(shù)據(jù)字典 物理模型P

9、DM 關(guān)系數(shù)據(jù)庫物理設(shè)計模型,包括一張物理表關(guān)系圖及其相應(yīng)的數(shù)據(jù)字典 角色 數(shù)據(jù)庫中享有某些特權(quán)操作的用戶 子系統(tǒng) 具有相對獨(dú)立功能的小系統(tǒng),一個大的軟件系統(tǒng)可以劃分為多個子系統(tǒng),每個子系統(tǒng)可由多個模塊或多個部件組成 模塊 具有功能獨(dú)立、能被調(diào)用的信息單元3. 系統(tǒng)構(gòu)架1.Item類設(shè)計Item類是系統(tǒng)的公共類之一,主要用于封裝和傳遞參數(shù)信息,這是典型命令模式的實(shí)現(xiàn)。在Dao類中經(jīng)常使用該類作為方法參數(shù);另外,在各個窗體界面中也經(jīng)常使用該類作組件數(shù)據(jù),其toString()方法將返回name屬性值,所以顯示到各個組件上的內(nèi)容

10、就是Item類的對象所代表的商品、供應(yīng)商或者客戶等信息中的名稱。關(guān)鍵代碼如下package com.lzw;public class Item private String id; /定義id屬性private String name; /定義name屬性public Item() public Item(String id,String name) this.id=id;=name;public String getId() /定義得到id屬性的方法return id;public void setId(String id) this.id = id;public Stri

11、ng getName() /定義得到那么屬性的方法return name;public void setName(String name) = name;public String toString() /定義該類字符串的表現(xiàn)形式return getName();2.數(shù)據(jù)模型公共類在com.lzw.dao.model包中存放的是數(shù)據(jù)模型公共類,它們對應(yīng)著數(shù)據(jù)庫中不同的數(shù)據(jù)表,這些模型將被訪問數(shù)據(jù)庫的Dao類和程序中各個模塊甚至各個組件所使用。和Item公共類的使用方法類似,數(shù)據(jù)模型也是對數(shù)據(jù)表中所有字段(屬性)的封裝,但是數(shù)據(jù)模型是純粹的模型類,它不但需要重寫父類的toSt

12、ring()方法,還要重寫hashCode()方法和equals()方法模型類主要用于存儲數(shù)據(jù),并通過相應(yīng)的getXXX()方法和setXXX()方法實(shí)現(xiàn)不同屬性的訪問原則。以商品數(shù)據(jù)表為例其代碼:public class TbSpinfo implements java.io.Serializable private String id;private String spname;private String jc;private String cd;private String dw;private String gg;private String bz;private String ph

13、;private String pzwh;private String memo;private String gysname;public TbSpinfo() public TbSpinfo(String id) this.id = id;public String getId() return this.id;public void setId(String id) this.id = id;public String getSpname() return this.spname;public void setSpname(String spname) this.spname = spn

14、ame;public String getJc() return this.jc;public void setJc(String jc) this.jc = jc;public String getCd() return this.cd;public void setCd(String cd) this.cd = cd;public String getDw() return this.dw;public void setDw(String dw) this.dw = dw;public String getGg() return this.gg;public void setGg(Stri

15、ng gg) this.gg = gg;public String getBz() return this.bz;public void setBz(String bz) this.bz = bz;public String getPh() return this.ph;public void setPh(String ph) this.ph = ph;public String getPzwh() return this.pzwh;public void setPzwh(String pzwh) this.pzwh = pzwh;public String getMemo() return

16、this.memo;public void setMemo(String memo) this.memo = memo;public String getGysname() return this.gysname;public void setGysname(String gysname) this.gysname = gysname;public String toString() return getSpname();Overridepublic int hashCode() final int PRIME = 31;int result = 1;result = PRIME * resu

17、lt + (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 * resu

18、lt + (id = null) ? 0 : id.hashCode();result = PRIME * result + (jc = null) ? 0 : jc.hashCode();result = PRIME * result + (memo = null) ? 0 : memo.hashCode();result = PRIME * result + (ph = null) ? 0 : ph.hashCode();result = PRIME * result + (pzwh = null) ? 0 : pzwh.hashCode();result = PRIME * result

19、 + (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.

20、equals(other.bz)return false;if (cd = null) if (other.cd != null)return false; else if (!cd.equals(other.cd)return false;if (dw = null) if (other.dw != null)return false; else if (!dw.equals(other.dw)return false;if (gg = null) if (other.gg != null)return false; else if (!gg.equals(other.gg)return f

21、alse;if (gysname = null) if (other.gysname != null)return false; else if (!gysname.equals(other.gysname)return false;if (id = null) if (other.id != null)return false; else if (!id.equals(other.id)return false;if (jc = null) if (other.jc != null)return false; else if (!jc.equals(other.jc)return false

22、;if (memo = null) if (other.memo != null)return false; else if (!memo.equals(other.memo)return false;if (ph = null) if (other.ph != null)return false; else if (!ph.equals(other.ph)return false;if (pzwh = null) if (other.pzwh != null)return false; else if (!pzwh.equals(other.pzwh)return false;if (spn

23、ame = null) if (other.spname != null)return false; else if (!spname.equals(other.spname)return false;return true;3.Dao公共類Dao的全稱是Data Access Object,即數(shù)據(jù)訪問對象。本項(xiàng)目中應(yīng)用該名稱作為數(shù)據(jù)庫訪問類的名稱,在該類中實(shí)現(xiàn)了數(shù)據(jù)庫的驅(qū)動、連接、關(guān)閉和多個操作數(shù)據(jù)庫的方法,這些方法包括不同數(shù)據(jù)表的操作方法。在介紹具體的數(shù)據(jù)庫訪問方法之前,先來看一下Dao類的定義,也就是數(shù)據(jù)庫驅(qū)動和連接的代碼。代碼如下public class Dao static Stat

24、ement sql;static ResultSet res;protected static String dbClassName="com.mysql.jdbc.Driver"protected static String dbUrl="jdbc:mysql:/localhost:3306/db_database28"protected static String dbUser="root"protected static String dbPwd="1003037761"protected static St

25、ring second = null;public static Connection conn=null; static try if(conn=null) Class.forName(dbClassName).newInstance(); conn = (Connection) DriverManager.getConnection(dbUrl,dbUser,dbPwd); catch(Exception ee) ee.printStackTrace(); 3.4系統(tǒng)登錄模塊設(shè)計1.設(shè)計登錄窗體登錄模塊的窗體設(shè)計由兩部分組成,一部分是登錄窗體,另一部分是窗體中帶背景圖片的內(nèi)容面板。 1.創(chuàng)

26、建內(nèi)容面板public class LoginPanel extends JPanel public int width, height;private Image img;public LoginPanel() super();URL url = getClass().getResource("/res/login.jpg");img = new ImageIcon(url).getImage();protected void paintComponent(Graphics g) super.paintComponent(g);g.drawImage(img, 0, 0,

27、 this); 2.創(chuàng)建登錄窗體private LoginPanel getLoginPanel() if (loginPanel = null) jLabel1 = new JLabel();jLabel1.setBounds(new Rectangle(86, 71, 55, 18);jLabel1.setText("密碼:");jLabel = new JLabel();jLabel.setText("用戶名:");jLabel.setBounds(new Rectangle(85, 41, 56, 18);loginPanel = new Log

28、inPanel();loginPanel.setLayout(null);loginPanel.setBackground(new Color(0xD8DDC7);loginPanel.add(jLabel, null);loginPanel.add(getUserField(), null);loginPanel.add(jLabel1, null);loginPanel.add(getPasswordField(), null);loginPanel.add(getLoginButton(), null);loginPanel.add(getExitButton(), null);retu

29、rn loginPanel;2.密碼文本框在系統(tǒng)登錄窗體的“密碼”文本框中添加了按鍵事件監(jiān)聽器,它在獲取到“密碼”文本框輸入的回車字符時將執(zhí)行登錄事件,也就是說在“密碼”文本框輸入密碼后,按Enter鍵將執(zhí)行與單擊“登錄”按鈕相同的業(yè)務(wù)邏輯。代碼如下:private JPasswordField getPasswordField() if (passwordField = null) passwordField = new JPasswordField();passwordField.setBounds(new Rectangle(143, 69, 125, 22);passwordField

30、.addKeyListener(new KeyAdapter() public void keyTyped(KeyEvent e) if (e.getKeyChar() = 'n')loginButton.doClick(););return passwordField;3.“登錄”按鈕“登錄”按鈕用于執(zhí)行用戶名和密碼的驗(yàn)證工作,如果驗(yàn)證用戶名和密碼有效,則啟動系統(tǒng),否則禁止進(jìn)入系統(tǒng)。在“登錄”按鈕的動作事件監(jiān)聽器中,首先獲取用戶輸入的用戶名與密碼信息,然后調(diào)用Dao類的checkLogin()方法,如果該方法返回true則登錄成功,否則禁止用戶登錄,并提示輸入的用戶名與密碼無

31、法登錄系統(tǒng)。如圖所示代碼如下:private JButton getLoginButton() if (loginButton = null) loginButton = new JButton();loginButton.setBounds(new Rectangle(109, 114, 48, 20);loginButton.setIcon(new ImageIcon(getClass().getResource("/res/loginButton.jpg");loginButton.addActionListener(new ActionListener() publ

32、ic void actionPerformed(ActionEvent e) try userStr = userField.getText();String passStr = new String(passwordField.getPassword();if (!Dao.checkLogin(userStr, passStr) JOptionPane.showMessageDialog(LoginDialog.this,"用戶名與密碼無法登錄", "登錄失敗",JOptionPane.ERROR_MESSAGE);return; catch (Exc

33、eption e1) e1.printStackTrace();mainFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);mainFrame.setVisible(true);MainFrame.getCzyStateLabel().setText(userStr);setVisible(false););return loginButton;3.5系統(tǒng)主窗體設(shè)計1.設(shè)計菜單欄本系統(tǒng)的菜單欄是由MenuBar類實(shí)現(xiàn)的,該類是一個自定義菜單欄類,它繼承JMenuBar類成為Swing的菜單欄組件。下面以創(chuàng)建進(jìn)貨單菜單為例,。(1)創(chuàng)建MenuBar類,該

34、類繼承javax.swing.JMenuBar類,并且在該類中定義一個私有的成員變量,類型為JMenu,用于表示菜單對象。(2)編寫一個名稱為getJinhuo_Menu()的方法,該方法的返回值為一個JMenu對象,也就是一個菜單對象。在該方法中,當(dāng)進(jìn)貨菜單對象為null時,創(chuàng)建一個菜單對象,并為其設(shè)置菜單名和快捷鍵。(3)編寫一個初始化菜單欄界面的方法initialize(),在該方法中,首先設(shè)置組件的尺寸,然后調(diào)用JMenuBar對象的add()方法向菜單欄中添加一個菜單。(4)編寫以下構(gòu)造方法,用于調(diào)用初始化菜單欄界面。(5)在MenuBar類,再創(chuàng)建一個JMenuItem類型的成員變

35、量jinhuoItem,表示進(jìn)貨菜單項(xiàng)。(6)編寫一個名稱為getJinhuoItem()的方法,該方法的返回值為一個JMenuItem對象,也就是一個菜單項(xiàng)對象。在該方法中,當(dāng)進(jìn)貨單菜單項(xiàng)對象為null時,創(chuàng)建一個菜單項(xiàng)對象,并為其設(shè)置菜單項(xiàng)名、圖標(biāo)和動作事件監(jiān)聽器。(7)按照步驟(5)和步驟(6)的方法再創(chuàng)建一個進(jìn)貨退貨菜單項(xiàng)對象,名稱為jinhuo_tuihuoItem。(8)在getJinhuo_Menu()方法中,應(yīng)用JMenu對象的add()方法向菜單中添加菜單項(xiàng)。2.設(shè)計工具欄工具欄用于放置常用命令按鈕,如進(jìn)貨單、銷售單、庫存盤點(diǎn)等。向本系統(tǒng)中添加工具欄的方法和添加菜單欄的方法類

36、似,也需要繼承Swing的JTool組件編寫自己的工具欄。當(dāng)然,也可以直接使用Swing的JTool組件。組件的initialize()方法用于初始化工具欄的程序界面。3.設(shè)計狀態(tài)欄本系統(tǒng)的狀態(tài)欄顯示了當(dāng)前選擇的功能窗體、登錄用戶名、當(dāng)前日期和本系統(tǒng)所屬公司,即版權(quán)所有者等信息,如下圖所示。3.6銷售單模塊設(shè)計1.設(shè)計銷售窗體2.添加銷售商品在銷售單窗體中單擊“添加”按鈕,將向table表格中添加新的空行,操作員可以在空行的第一列字段的商品下拉列表框中選擇銷售的商品,這個下拉列表框和進(jìn)貨單窗體的不同,它不是根據(jù)供應(yīng)商字段確定選擇框內(nèi)容,而是包含了數(shù)據(jù)庫中所有可以銷售的商品。要實(shí)現(xiàn)添加銷售商品功

37、能,需要為“添加”按鈕添加動作監(jiān)聽器,在監(jiān)聽器中實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)邏輯。3.銷售統(tǒng)計和進(jìn)貨單的統(tǒng)計功能類似,銷售單也需要統(tǒng)計功能,統(tǒng)計的內(nèi)容包括貨品數(shù)量、品種數(shù)量、合計金額等信息,實(shí)現(xiàn)方式也是通過table表格的事件監(jiān)聽器來處理相應(yīng)的統(tǒng)計業(yè)務(wù),但是銷售單窗體使用的不是PropertyChangeListener屬性改變事件監(jiān)聽器,而是使用ContainerListener容器監(jiān)聽器。4.商品銷售在銷售單窗體中添加完銷售商品之后,單擊“銷售”按鈕,將完成本次銷售單的銷售業(yè)務(wù)。系統(tǒng)會記錄本次銷售信息,并從庫存表中扣除銷售的商品數(shù)量。這些業(yè)務(wù)處理都是在“銷售”按鈕的動作監(jiān)聽器中完成的,該監(jiān)聽器需要獲取銷

38、售單窗體中的所有銷售信息和商品信息,將所有商品信息封裝為銷售明細(xì)表的模型對象,并將這些模型對象放到一個集合中,然后調(diào)用Dao公共類的insertSellInfo()方法將該集合與銷售主表的模型對象保存到數(shù)據(jù)庫中。初始化表格代碼:private void initTable() String columnNames = "商品名稱", "商品編號", "供應(yīng)商", "產(chǎn)地", "單位", "規(guī)格", "單價","數(shù)量", "包裝

39、", "批號", "批準(zhǔn)文號" ;(DefaultTableModel) table.getModel().setColumnIdentifiers(columnNames);TableColumn column = table.getColumnModel().getColumn(0);final DefaultCellEditor editor = new DefaultCellEditor(sp);editor.setClickCountToStart(2);column.setCellEditor(editor);初始化商品下拉框:pr

40、ivate void initSpBox() List list = new ArrayList();ResultSet set = Dao.query(" select * from tb_spinfo"+ " where id in (select id from tb_kucun where kcsl>0)");sp.removeAllItems();sp.addItem(new TbSpinfo();for (int i = 0; table != null && i < table.getRowCount(); i+

41、) TbSpinfo tmpInfo = (TbSpinfo) table.getValueAt(i, 0);if (tmpInfo != null && tmpInfo.getId() != null)list.add(tmpInfo.getId();try while (set.next() TbSpinfo spinfo = new TbSpinfo();spinfo.setId(set.getString("id").trim();if (list.contains(spinfo.getId()continue;spinfo.setSpname(se

42、t.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.setP

43、h(set.getString("ph").trim();spinfo.setPzwh(set.getString("pzwh").trim();spinfo.setMemo(set.getString("memo").trim();spinfo.setGysname(set.getString("gysname").trim();sp.addItem(spinfo); catch (SQLException e) e.printStackTrace();在事件中計算品種數(shù)量、貨品總數(shù)、合計金額private fi

44、nal class computeInfo implements ContainerListener public void componentRemoved(ContainerEvent e) / 清除空行clearEmptyRow();/ 計算代碼int rows = table.getRowCount();int count = 0;double money = 0.0;/ 計算品種數(shù)量TbSpinfo column = null;if (rows > 0)column = (TbSpinfo) table.getValueAt(rows - 1, 0);if (rows > 0 && (column = null | column.getId().isEmpty()rows-;/ 計算貨品總數(shù)和金額for (int i = 0; i

溫馨提示

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

評論

0/150

提交評論