




已閱讀5頁,還剩28頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
河南理工大學計算機科學與技術學院課程設計報告(2015-2016-1)課程名稱 軟件工程課程設計 設計題目 企業進銷存管理系統 學生姓名 徐 松 學 號 311309060209 專業班級 軟件工程1302 指導教師 王 靜 2016 年 1 月 14 日一、系統背景.3二、系統分析3 1.理解需求.3 2.需求任務分析.3 3.數據庫.4三、系統設計.41.Item類設計82.數據模型公共類93.Dao公共類143.4系統登錄模塊設計151.設計登錄窗體152.密碼文本框163.“登錄”按鈕173.5系統主窗體設計181.設計菜單欄182.設計工具欄183.設計狀態欄193.6銷售單模塊設計191.設計銷售窗體192.添加銷售商品193.銷售統計194.商品銷售19四、總結.21 一、系統背景 中小企業在我國經濟發展中具有重要地位,隨著我國市場經濟的蓬勃發展和人們對計算機的普遍應用,批發、零售行業正處在一個高速發展的時期。行業的快速發展必然導致競爭的加劇,要想在激烈的市場競爭中謀求發展,客觀上要求企業必須加強內部管理,提高運營效率。而我國大部分小型批發、零售企業在信息機制上還沒有擺脫原有的手工模式,企業內部沒有形成完善的、有效的信息化管理機制,企業發展的動力不足,從而影響企業的持續、穩定、快速的發展。當今國內外多數企業的競爭特點是:產品的種類、規格特別多,市場需求變化很快,與分銷商,零售商的關系日益密切等。而隨著業務量的擴大,傳統的管理方法已經無法處理日益膨脹的大量的業務數據,企業采用電腦管理進貨、庫存、銷售等諸多環節也已成為趨勢及必然。 實現企業信息化管理是現代社會中小企業穩步發展的必要條件,它可以提高企業的管理水平和工作效率,最大限度地減少手工操作帶來的失誤。進銷存管理系統正是一個信息化管理軟件,可以實現企業的進貨、銷售、庫存管理等各項業務的信息化管理。出于以上原因,本課程設計將基于MySQL數據庫并以JAVA為開發環境設計實現一個企業進銷存管理系統。該系統包括基礎信息管理、進貨管理、銷售管理、庫存管理、查詢統計、系統管理幾個模塊,主要是處理商業企業商品的采購、庫存和銷售各個環節的活動,具有良好的人機界面。考慮到系統的使用對象可能較多,權限管理良好,數據查詢方便,支持多條件查詢。 二、系統分析1、理解需求本系統通過進銷存系統的終端用戶和客戶的進行調研后,得出系統需求的關鍵(1)進貨管理商品進貨信息管理:商品進貨信息包括商品進貨數量、單價、供貨商、進貨日期、等。商品進貨管理功能完成進貨信息登記、修改和刪除等。更新庫存:進貨信息的變動直接關系到庫存的變化 (2)庫存管理庫存商品信息管理:商品庫存信息包括商品進貨數量、單價、供貨商、進貨日期、等。商品庫存管理功能完成庫存信息登記、修改和刪除、查詢等。 (3)銷售管理信息管理:商品銷售信息包括商品銷售數量、單價、統計日等商品銷售。管理功能完成銷售信息登記、修改和刪除,以及銷售總匯查詢。本系統應該對基礎數據(用戶數據字典)進行維護。系統應該提供強大的數據統計、查詢、報表生成及打印等功能。系統客戶端運行在Windows各版的平臺下,系統還應該有一個較好飛圖形用戶界面。系統還應該有很好的可擴展性。系統應該容易上手,方便使用。2、需求分析任務第一項任務:畫出“進銷存管理系統”的組合結構圖,即組織結構模型。第二項任務:畫出“進銷存管理系統”的業務操作圖,即業務操作模型。第三項任務:畫出“進銷存管理系統”的數據流程圖。第四項任務:列出“進銷存管理系統”的功能點列表,即功能模型。第五項任務:列出“進銷存管理系統”的性能點表,即性能模型。第六項任務:確定“進銷存管理系統”的環境模型,即運行環境。3.數據庫數據庫設計是進銷存信息系統的核心,采用規范化設計,使數據庫結構盡可能簡化,減少冗余,保持系統數據結構的一致性。根據不同的需求,一個商品流通企業進銷存管理系統可包括幾個到上百個不等的數據表、數據視圖、存儲過程以及函數等,但最基本的數據表應該包括:操作用戶數據表、公司信息數據表、采購明細數據表、采購客戶數據表、采購信息數據表、供應客戶數據表、商品信息數據表、銷售明細數據表和銷售信息數據表;數據視圖包括:采購入庫明細視圖、累計采購商品視圖、累計銷售商品視圖和銷售出庫明細視圖角色定義組織結構圖中各單位職責說明與相關業務,如表:銷售人員信息單據進貨信息單據商品銷售信息單據用戶信息單據經手人信息表(jsr)客戶實體E-R圖企業進銷存管理系統將記錄所有的客戶信息,在銷售、退貨等操作時,將直接引用該客戶的實體屬性。客戶實體包括客戶編號、客戶名稱、簡稱、地址、電話、郵政編碼、聯系人、聯系人電話、傳真、開戶行和賬號等屬性,客戶實體E-R圖如圖所示。商品實體E-R圖供應商實體E-R圖進銷存管理系統數據流圖三、系統設計1.目的從該階段開始正式進入軟件的實際開發階段,本階段完成系統的大致設計并明確司徒的數據結構與軟件結構。在軟件設計階段主要是把一個軟件需求轉化為軟件表示的過程,2.術語定義總體結構軟件系統的總體邏輯結構。本系統采用面向對象的設計方法,所以邏輯結構為部件組裝圖概念模型CDM關系數據庫的邏輯設計模型,包括一張邏輯E-R圖及相應的數據字典物理模型PDM關系數據庫物理設計模型,包括一張物理表關系圖及其相應的數據字典角色數據庫中享有某些特權操作的用戶子系統具有相對獨立功能的小系統,一個大的軟件系統可以劃分為多個子系統,每個子系統可由多個模塊或多個部件組成模塊具有功能獨立、能被調用的信息單元3. 系統構架1.Item類設計Item類是系統的公共類之一,主要用于封裝和傳遞參數信息,這是典型命令模式的實現。在Dao類中經常使用該類作為方法參數;另外,在各個窗體界面中也經常使用該類作組件數據,其toString()方法將返回name屬性值,所以顯示到各個組件上的內容就是Item類的對象所代表的商品、供應商或者客戶等信息中的名稱。關鍵代碼如下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 String getName() /定義得到那么屬性的方法return name;public void setName(String name) = name;public String toString() /定義該類字符串的表現形式return getName();2.數據模型公共類在com.lzw.dao.model包中存放的是數據模型公共類,它們對應著數據庫中不同的數據表,這些模型將被訪問數據庫的Dao類和程序中各個模塊甚至各個組件所使用。和Item公共類的使用方法類似,數據模型也是對數據表中所有字段(屬性)的封裝,但是數據模型是純粹的模型類,它不但需要重寫父類的toString()方法,還要重寫hashCode()方法和equals()方法模型類主要用于存儲數據,并通過相應的getXXX()方法和setXXX()方法實現不同屬性的訪問原則。以商品數據表為例其代碼: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;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 = spname;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(String 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 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 * 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();result = 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)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 false;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;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 (spname = null) if (other.spname != null)return false; else if (!spname.equals(other.spname)return false;return true;3.Dao公共類Dao的全稱是Data Access Object,即數據訪問對象。本項目中應用該名稱作為數據庫訪問類的名稱,在該類中實現了數據庫的驅動、連接、關閉和多個操作數據庫的方法,這些方法包括不同數據表的操作方法。在介紹具體的數據庫訪問方法之前,先來看一下Dao類的定義,也就是數據庫驅動和連接的代碼。代碼如下public class Dao static Statement 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 String 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系統登錄模塊設計1.設計登錄窗體登錄模塊的窗體設計由兩部分組成,一部分是登錄窗體,另一部分是窗體中帶背景圖片的內容面板。 1.創建內容面板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, this); 2.創建登錄窗體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 LoginPanel();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);return loginPanel;2.密碼文本框在系統登錄窗體的“密碼”文本框中添加了按鍵事件監聽器,它在獲取到“密碼”文本框輸入的回車字符時將執行登錄事件,也就是說在“密碼”文本框輸入密碼后,按Enter鍵將執行與單擊“登錄”按鈕相同的業務邏輯。代碼如下:private JPasswordField getPasswordField() if (passwordField = null) passwordField = new JPasswordField();passwordField.setBounds(new Rectangle(143, 69, 125, 22);passwordField.addKeyListener(new KeyAdapter() public void keyTyped(KeyEvent e) if (e.getKeyChar() = n)loginButton.doClick(););return passwordField;3.“登錄”按鈕“登錄”按鈕用于執行用戶名和密碼的驗證工作,如果驗證用戶名和密碼有效,則啟動系統,否則禁止進入系統。在“登錄”按鈕的動作事件監聽器中,首先獲取用戶輸入的用戶名與密碼信息,然后調用Dao類的checkLogin()方法,如果該方法返回true則登錄成功,否則禁止用戶登錄,并提示輸入的用戶名與密碼無法登錄系統。如圖所示代碼如下: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() public 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 (Exception e1) e1.printStackTrace();mainFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);mainFrame.setVisible(true);MainFrame.getCzyStateLabel().setText(userStr);setVisible(false););return loginButton;3.5系統主窗體設計1.設計菜單欄本系統的菜單欄是由MenuBar類實現的,該類是一個自定義菜單欄類,它繼承JMenuBar類成為Swing的菜單欄組件。下面以創建進貨單菜單為例,。(1)創建MenuBar類,該類繼承javax.swing.JMenuBar類,并且在該類中定義一個私有的成員變量,類型為JMenu,用于表示菜單對象。(2)編寫一個名稱為getJinhuo_Menu()的方法,該方法的返回值為一個JMenu對象,也就是一個菜單對象。在該方法中,當進貨菜單對象為null時,創建一個菜單對象,并為其設置菜單名和快捷鍵。(3)編寫一個初始化菜單欄界面的方法initialize(),在該方法中,首先設置組件的尺寸,然后調用JMenuBar對象的add()方法向菜單欄中添加一個菜單。(4)編寫以下構造方法,用于調用初始化菜單欄界面。(5)在MenuBar類,再創建一個JMenuItem類型的成員變量jinhuoItem,表示進貨菜單項。(6)編寫一個名稱為getJinhuoItem()的方法,該方法的返回值為一個JMenuItem對象,也就是一個菜單項對象。在該方法中,當進貨單菜單項對象為null時,創建一個菜單項對象,并為其設置菜單項名、圖標和動作事件監聽器。(7)按照步驟(5)和步驟(6)的方法再創建一個進貨退貨菜單項對象,名稱為jinhuo_tuihuoItem。(8)在getJinhuo_Menu()方法中,應用JMenu對象的add()方法向菜單中添加菜單項。2.設計工具欄工具欄用于放置常用命令按鈕,如進貨單、銷售單、庫存盤點等。向本系統中添加工具欄的方法和添加菜單欄的方法類似,也需要繼承Swing的JTool組件編寫自己的工具欄。當然,也可以直接使用Swing的JTool組件。組件的initialize()方法用于初始化工具欄的程序界面。3.設計狀態欄本系統的狀態欄顯示了當前選擇的功能窗體、登錄用戶名、當前日期和本系統所屬公司,即版權所有者等信息,如下圖所示。3.6銷售單模塊設計1.設計銷售窗體2.添加銷售商品在銷售單窗體中單擊“添加”按鈕,將向table表格中添加新的空行,操作員可以在空行的第一列字段的商品下拉列表框中選擇銷售的商品,這個下拉列表框和進貨單窗體的不同,它不是根據供應商字段確定選擇框內容,而是包含了數據庫中所有可以銷售的商品。要實現添加銷售商品功能,需要為“添加”按鈕添加動作監聽器,在監聽器中實現相應的業務邏輯。3.銷售統計和進貨單的統計功能類似,銷售單也需要統計功能,統計的內容包括貨品數量、品種數量、合計金額等信息,實現方式也是通過table表格的事件監聽器來處理相應的統計業務,但是銷售單窗體使用的不是PropertyChangeListener屬性改變事件監聽器,而是使用ContainerListener容器監聽器。4.商品銷售在銷售單窗體中添加完銷售商品之后,單擊“銷售”按鈕,將完成本次銷售單的銷售業務。系統會記錄本次銷售信息,并從庫存表中扣除銷售的商品數量。這些業務處理都是在“銷售”按鈕的動作監聽器中完成的,該監聽器需要獲取銷售單窗體中的所有銷售信息和商品信息,將所有商品信息封裝為銷售明細表的模型對象,并將這些模型對象放到一個集合中,然后調用Dao公共類的insertSellInfo()方法將該集合與銷售主表的模型對象保存到數據庫中。初始化表格代碼:private void initTable() String columnNames = 商品名稱, 商品編號, 供應商, 產地, 單位, 規格, 單價,數量, 包裝, 批號, 批準文號 ;(DefaultTableModel) table.getModel().setColumnIdentifiers(columnNames);TableColumn column = table.getColumnModel().getColumn(0);final DefaultCellEditor editor =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 素質教育學習心得體會模版
- 鋼結構課程設計心得體會模版
- 保潔工作個人心得體會模版
- 三晉卓越聯盟·2024-2025學年高三5月質量檢測卷(25-X-635C)數學(B)
- 浙江省六校(杭州二中 溫州中學 金華一中 紹興一中 舟山中學 衢州二中)聯盟2025屆高三5月模擬預測卷語文試卷+答案
- 小家電安規基礎知識講義
- 初中學生家長教育孩子心得體會模版
- 凝血功能異常的臨床護理
- 心梗護理方案
- 高血壓活動總結模版
- 廣東省廣州大學附中2021-2022年初二12月大聯盟物理在線考試題
- 食品工程系畜產品加工技術教案
- 入股合作的協議書(2024版)
- 廣東省深圳市南山區2023-2024學年七年級下學期期末英語試題
- 福建省寧德市霞浦縣2024屆九年級上學期期中階段性訓練數學試卷(含答案)
- 2024年廣東清遠市“人才引育”工程專項事業編制高層次人才招聘31人歷年【重點基礎提升】模擬試題(共500題)附帶答案詳解
- 偏差行為、卓越一生3.0版
- 小學四年級語文知識競賽(含答案)
- 火針治療白癜風的效果觀察與評估
- 交通運輸安全風險評估
- 成語故事一箭雙雕
評論
0/150
提交評論