版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、企業(yè)進銷存管理系統(tǒng)學(xué) 院專 業(yè)班 級學(xué) 號姓 名指導(dǎo)教師教師職稱年月日摘要【摘要】進銷存管理系統(tǒng)是一個基于Internet的應(yīng)用系統(tǒng),它是一個面對當前的進銷存管理工作基本還處于手工和半信息自動化處理狀態(tài)而應(yīng)運而生的一個基于Internet的一個完全信息自動化的系統(tǒng),整個系統(tǒng)從符合操作簡便、界面友好、靈活、實用、安全的要求出發(fā),完成進貨、銷售、庫存管理的全過程。企業(yè)單位只需具備訪問Internet的條件即可在系統(tǒng)發(fā)布的站點上進行進銷存的管理。在圖型化的人機界面中完成日常的進銷存管理工作.一方面擺脫了時間和空間的限制,另一方面有效的解決的數(shù)據(jù)共享的問題。經(jīng)過實際使用證明,本文所設(shè)計的企業(yè)進銷存管理
2、系統(tǒng)可以滿足企業(yè)進貨、銷售管理方面的需要?!娟P(guān)鍵詞】庫存 銷售 企業(yè)進銷存管理系統(tǒng)目錄摘要10 引言11 系統(tǒng)分析21.1 需求分析21.2 可行性分析22 總體設(shè)計22.1 項目規(guī)劃22.2 系統(tǒng)功能結(jié)構(gòu)圖33 系統(tǒng)設(shè)計33.1 設(shè)計目標33.2 開發(fā)及運行環(huán)境43.3 數(shù)據(jù)庫設(shè)計44 JavaBean的編寫54.1 數(shù)據(jù)庫操作的JavaBean的編寫54.2 中文亂碼處理的JavaBean的編寫74.3 客戶基本信息的JavaBean的編寫74.4 提交客戶信息的JavaBean的編寫84.5 查詢、分頁JavaBean的編寫(QuestString.java)94.6 顯示系統(tǒng)時間的Ja
3、vaBean的編寫145 用戶登錄模塊設(shè)計156 系統(tǒng)首頁設(shè)計167 基礎(chǔ)信息管理主要功能模塊設(shè)計187.1 客戶信息管理設(shè)計187.2 客戶信息查詢設(shè)計198 庫存管理主要功能模塊設(shè)計228.1 商品入庫信息設(shè)計238.2 商品價格調(diào)整設(shè)計26附錄A 參考文獻附錄B 數(shù)據(jù)表附錄C 文件架構(gòu)圖0 引言隨著中國電子商務(wù)、互聯(lián)網(wǎng)業(yè)務(wù)的迅猛發(fā)展,國內(nèi)許多企業(yè)已跨入電腦網(wǎng)絡(luò)管理時代,并因此提高了管理效率和市場競爭力。但目前仍有部分企業(yè)還停留在原始計賬管理階段。而隨著全球經(jīng)濟信息化的進程和WTO的成功實現(xiàn),企業(yè)面臨著前所未有的機遇和挑戰(zhàn),在如此激變的社會形勢和激烈的市場競爭下,愈來愈多的企業(yè)管理者意識到
4、效率管理和科學(xué)管理的重要性,以及增強市場競爭力的迫切性,因此建立科學(xué)、規(guī)范、高效的管理制度和秉承富有競爭力的經(jīng)營理念是每一個企業(yè)管理者的渴望,企業(yè)采用電腦管理進貨、庫存、銷售等諸多環(huán)節(jié)也已成為趨勢及必然。在進貨、庫存、銷售環(huán)節(jié)中,由于商品種類繁多、業(yè)務(wù)量大、庫存管理復(fù)雜,使用手工操作的工作量很大,在操作過程中也很容易出現(xiàn)各種錯誤。而采用計算機管理則可以大大提高日常工作的效率,不僅將原來由手工操作的進貨、出貨及銷售這一整套流程用計算機進行全程管理,而且消除了手工操作中可能存在的不確定因素,達到進銷存管理流程清晰,從而能夠比較徹底地貫徹經(jīng)營者的管理模式。1 系統(tǒng)分析1.1 需求分析通過調(diào)查研究,要
5、求系統(tǒng)滿足以下功能:q 由于操作人員的計算機知識水平有限,因此要求系統(tǒng)具有良好的人機界面。q 如果系統(tǒng)的使用對象較多,則要求有較好的權(quán)限管理。q 方便的數(shù)據(jù)查詢功能,并支持多條件查詢。q 在各種單據(jù)中根據(jù)輸入的基礎(chǔ)數(shù)據(jù)自動計算金額,盡量減少人工干預(yù)。q 對客戶或供應(yīng)商的往來賬目進行有效管理,絕不存在假賬、漏賬、差賬等情況。q 通過計算機,能夠直接“透視”倉庫存儲情況。q 對某一時間段內(nèi)的某種商品的銷售情況按數(shù)量或金額進行升序或降序排行。q 圖表分析年銷售額。1.2 可行性分析通過計算機網(wǎng)絡(luò)系統(tǒng)對企業(yè)進行全面的管理,滿足了企業(yè)的現(xiàn)代化管理的要求。q 經(jīng)濟性當前許多中小型企業(yè)都使用人工管理方式(即
6、紙和筆)來管理企業(yè)的進銷存,這樣的管理方式既困難又浪費時間和成本,并且容易出現(xiàn)漏賬、差賬的情況,因此中小企業(yè)應(yīng)該向大型企業(yè)那樣采用先進的管理方式,提高企業(yè)效率、降低企業(yè)運營成本。q 技術(shù)性企業(yè)進銷存管理系統(tǒng)從中小企業(yè)的實際出發(fā),可有效地管理企業(yè)的進銷存情況,并降低企業(yè)運營成本、及時調(diào)整營銷策略、提高庫房的利用率。2 總體設(shè)計2.1 項目規(guī)劃企業(yè)進銷存管理系統(tǒng)是一個典型的數(shù)據(jù)庫開發(fā)應(yīng)用程序,由基礎(chǔ)信息管理、庫存管理、商品銷售、查詢統(tǒng)計、往來管理、系統(tǒng)設(shè)置6部分組成。q 基礎(chǔ)信息管理該模塊主要是對企業(yè)的客戶信息、商品信息、供應(yīng)商信息進行有效管理,并可實現(xiàn)按不同條件對這些數(shù)據(jù)進行查詢。q 庫存管理該
7、模塊主要是對商品的入庫及入庫退貨信息進行有效管理,對商品的價格進行調(diào)整,同時可按不同條件查詢庫存商品。q 商品銷售該模塊主要是對商品的銷售及銷售退貨信息進行有效管理。q 查詢統(tǒng)計該模塊主要實現(xiàn)按不同條件查詢商品的入庫信息及銷售信息,并可對某一時間段內(nèi)某種商品的銷售情況按數(shù)量或金額進行升序或降序排行,同時可對某一年度的銷售額進行圖表分析。q 往來管理該模塊主要實現(xiàn)對商品的入庫結(jié)賬、入庫退貨結(jié)賬、銷售結(jié)賬、銷售退貨結(jié)賬信息進行有效管理,同時可實現(xiàn)銷售結(jié)賬信息及入庫結(jié)賬信息的查詢操作。q 系統(tǒng)設(shè)置訪模塊主要實現(xiàn)對操作員及操作員密碼進行有效管理。2.2 系統(tǒng)功能結(jié)構(gòu)圖企業(yè)進銷存管理系統(tǒng)的功能結(jié)構(gòu)如圖1
8、所示。圖1 系統(tǒng)功能結(jié)構(gòu)圖3 系統(tǒng)設(shè)計3.1 設(shè)計目標本系統(tǒng)針對中小型企業(yè)進銷存管理現(xiàn)狀,通過網(wǎng)絡(luò)對企業(yè)的進銷存進行有效管理。本系統(tǒng)主要實現(xiàn)如下目標:q 系統(tǒng)采用人機對話方式,界面美觀友好,信息查詢靈活、方便、快捷、準確,數(shù)據(jù)存儲安全可靠。q 實現(xiàn)企業(yè)內(nèi)一些基礎(chǔ)信息的設(shè)置及查詢。q 商品的入庫、入庫退貨、銷售、銷售退貨流程清晰。q 數(shù)據(jù)計算自動完成,提高工作效率。q 與供應(yīng)商和客戶之間的賬目清晰。q 以圖表形式對年銷售額進行分析。q 實現(xiàn)多條件查詢。q 可方便快捷地查詢庫存信息,并可對商品價格進行調(diào)整。q 對某一時間段內(nèi)的某種商品按照銷售數(shù)量或銷售金額進行銷售升序排行或降序排行。q 操作員可以
9、隨時修改自己的口令。q 對用戶輸入的數(shù)據(jù),系統(tǒng)進行嚴格的數(shù)據(jù)檢驗,盡可能排除人為的錯誤。q 系統(tǒng)最大限度地實現(xiàn)了易維護性和易操作性。q 系統(tǒng)運行穩(wěn)定、安全可靠。3.2 開發(fā)及運行環(huán)境硬件平臺:q CPU:P41.8GHz。q 內(nèi)存:256MB以上。軟件平臺:q 操作系統(tǒng):Windows 2000。q 數(shù)據(jù)庫:SQL Server 2000。q 開發(fā)工具包:JDK Version1.4.2。q JSP服務(wù)器:Tomcat。q 瀏覽器:IE5.0,推薦使用IE6.0。q 分辨率:最佳效果1024×768像素。3.3 數(shù)據(jù)庫設(shè)計本系統(tǒng)采用SQL Server 2000數(shù)據(jù)庫,系統(tǒng)數(shù)據(jù)庫名稱
10、為db_shopping。數(shù)據(jù)庫db_shopping中包含17張表。關(guān)于數(shù)據(jù)庫中的數(shù)據(jù)表請參見附錄B。4 JavaBean的編寫根據(jù)系統(tǒng)的需求編寫需要的JavaBean。下面將給出企業(yè)進銷存管理系統(tǒng)中所需要的JavaBean的編寫過程。4.1 數(shù)據(jù)庫操作的JavaBean的編寫數(shù)據(jù)庫連接的JavaBean的編寫代碼如下:package com.mingri.dbconn;import java.sql.*;import javax.naming.*;import javax.sql.DataSource;public class DBConn public static synchroniz
11、ed Connection getConnection() throws Exception try Context initCtx=new javax.naming.InitialContext(); /獲得JNDI初始上下文對象/在JNDI命名空間java:comp/env段里獲得上下文對象 Context envCtx=(Context)initCtx.lookup("java:comp/env"); DataSource ds=(DataSource)envCtx.lookup("jdbc/mingri"); /通過JNDI名獲得數(shù)據(jù)源對象 re
12、turn ds.getConnection(); catch(SQLException e) throw e; catch(NamingException e) throw e; 數(shù)據(jù)庫操作的JavaBean的編寫代碼如下:package com.mingri.dbconn;import java.sql.*;import com.mingri.dbconn.DBConn;public class DBResult private Connection con; public DBResult() this.con=DBConn.getConnection(); /* * 用于獲得執(zhí)行SQL語
13、句的ResultSet對象 */ public ResultSet getResult(String sql) try Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery(sql); return rs; catch(Exception e) return null; /* * 用于執(zhí)行SQL語句沒有返回值 */ public void doExecute(String sql) try Statement stmt=con.createStatement(); stmt.executeQuery(sql);
14、 catch(Exception e) /* * 用于獲得執(zhí)行SQL語句的PreparedStatement(預(yù)處理)對象 */ public PreparedStatement getPreparedStatement(String sql) try PreparedStatement pstmt=con.prepareStatement(sql); return pstmt; catch(Exception e) return null; /* * 關(guān)閉連接 */ public void closeCon() try this.con.close(); catch(Exception e)
15、 e.printStackTrace(); 4.2 中文亂碼處理的JavaBean的編寫在JSP開發(fā)中,經(jīng)常出現(xiàn)亂碼問題,我們可以指定編碼方式,以消除亂碼。package com.mingri.chinese;import java.io.*;public class ToChinese public String trans(String chi) String result=null; byte temp; try temp=chi.getBytes("iso-8859-1"); result=new String(temp); catch(UnsupportedEnc
16、odingException e) System.out.println(e.toString(); return result; 4.3 客戶基本信息的JavaBean的編寫這段代碼用來封裝客戶的基本信息,并對每個屬性提供setXXX()和getXXX()方法,來對其進行操作。package ;public class KhinfoBean private String khname; /客戶全稱 private String khjc; /客戶簡稱 private String address; /地址 private String postcode; /郵政
17、編碼 private String tel; /電話 private String fax; /傳真 private String lxr; /聯(lián)系人 private String lxrtel; /聯(lián)系人電話 private String email; /電子郵箱 private String khyh; /開戶銀行 private String yhzh; /銀行賬號 public String getKhname() return khname; public void setKhname(String khname) this.khname = khname; /省略部分代碼4.4 提
18、交客戶信息的JavaBean的編寫在填寫完客戶基本信息后,就應(yīng)該向數(shù)據(jù)庫中執(zhí)行插入操作。這個類中有兩個方法setKhinfo()和Regist()。其中setKhinfo(KhinfoBean khinfo)方法是用來設(shè)置該類中的屬性khinfo,其值為參數(shù)傳遞來的KhinfoBean的對象。然后執(zhí)行預(yù)處理語句,并通過預(yù)處理對象pstmt的setString()方法來設(shè)置準備要插入數(shù)據(jù)庫的內(nèi)容,最后通過execute()來執(zhí)行插入的操作。具體代碼如下:package ;import com.mingri.dbconn.DBResult;import java.sq
19、l.*;public class KhRegist private KhinfoBean khinfo; DBResult rst=new DBResult(); public void setKhinfo(KhinfoBean khinfo) this.khinfo=khinfo; public void regist() throws Exception String reg="insert into tb_customer values(?,?,?,?,?,?,?,?,?,?,?)" try PreparedStatement pstmt=rst.getPrepare
20、dStatement(reg); /創(chuàng)建一個預(yù)處理語句,然后設(shè)置他們的參數(shù) pstmt.setString(1,khinfo.getKhname(); pstmt.setString(2,khinfo.getKhjc(); pstmt.setString(3,khinfo.getAddress(); pstmt.setString(4,khinfo.getPostcode(); pstmt.setString(5,khinfo.getTel(); pstmt.setString(6,khinfo.getFax(); pstmt.setString(7,khinfo.getLxr(); pstm
21、t.setString(8,khinfo.getLxrtel(); pstmt.setString(9,khinfo.getEmail(); pstmt.setString(10,khinfo.getKhyh(); pstmt.setString(11,khinfo.getYhzh(); /執(zhí)行更新操作 pstmt.executeUpdate(); catch(Exception e) e.printStackTrace(); throw e; 4.5 查詢、分頁JavaBean的編寫(QuestString.java)該系統(tǒng)中主要的方法分為兩部分:一部分是根據(jù)用戶提交的不同請求調(diào)用不用的方法
22、來獲取SQL語句;另一部分是用于分頁顯示。用于完成分頁顯示的方法有:q void setQuerySql(String httpfile,String pages,String strCount):通過參數(shù)傳遞來設(shè)置Bean中的屬性。q void querySql(String countSql):執(zhí)行SQL語句,獲得分頁顯示時的各個屬性。q String pageFooter():用來動態(tài)的給出一個表單該表單用來進行分頁和統(tǒng)計頁面間的跳轉(zhuǎn)。這部分代碼是本系統(tǒng)中查詢部分的骨架,所有涉及到查詢操作的代碼部分全都調(diào)用了該Bean 中相應(yīng)的方法,并完成了分頁顯示。代碼如下:package com.m
23、;import com.mingri.dbconn.DBResult;import java.sql.*;import java.io.*;public class QuestString private int curPage; /當前頁數(shù) private int maxPage; /最大頁數(shù) private int maxRowCount; /總記錄數(shù)(即從數(shù)據(jù)庫中查出的所有記錄) private int pageSize=2; /每頁要顯示的記錄數(shù) private DBResult db; /記錄集對象 private String httpFile; /當前地址欄的
24、文件,即具體的JSP文件 private String cif; /選擇的查詢字段 private String ccif; /選擇的查詢運算符 private String qvalue; /查詢關(guān)鍵字 private String countSql=null; /用來存儲select count (*) 語句 private String topSql=null; /用來存儲 select top 2語句 private String nowPage=null; /初始化當前頁curPage變量,即獲取當前頁的具體頁號 private String str_parameter; /在做翻頁
25、時,傳遞除pages以外的其他參數(shù) private String andor; /查詢的與/或條件 private String sdate; /查詢起始時間,即從什么日期開始查詢 private String edate; /查詢結(jié)束時間,即到什么日期結(jié)束 private String orderby; /排序條件,即按什么排序 private String paixu; /排序方法,即升序或降序 public QuestString() /構(gòu)造方法,用來設(shè)置db為一個DBResult()對象 db=new DBResult(); public int getCurPage() return
26、 curPage; public void setCurPage(int curPage) this.curPage = curPage; /省略了對Bean中其他屬性設(shè)置的部分代碼 /* * 通過參數(shù)傳遞來設(shè)置Bean中的屬性 */ public void setQuerySql(String httpfile,String pages,String strCount) this.nowPage=pages; /將表單提交過來的參數(shù)pages(第幾頁)的值傳遞給變量nowPage保存 this.httpFile=httpfile; /用來動態(tài)設(shè)置處理表單請求的JSP文件 this.count
27、Sql=strCount; /用來設(shè)置執(zhí)行select count(*)的SQL語句 try querySql(countSql); /調(diào)用querySql方法,并將參數(shù)countSql傳遞到該方法中 catch(Exception e) e.printStackTrace(); /* * 執(zhí)行SQL語句,獲得分頁顯示時的各個屬性 */ public void querySql(String countSql) throws SQLException /在setQuerySql方法中已經(jīng)設(shè)置了nowPage的值,其值就是pages if(this.nowPage=null) /如果nowPag
28、e的值為空,也就是傳遞pages的值為空 this.curPage=1; /那么就將當前頁的值設(shè)為1; else this.curPage=Integer.parseInt(this.nowPage); if(this.curPage<1) /如果當前頁小于1,那么就將當前頁的值設(shè)為1 this.curPage = 1; ResultSet rsCount=db.getResult(countSql); /執(zhí)行SQL語句獲得記錄總數(shù) if(rsCount.next() this.maxRowCount=rsCount.getInt(1); /獲取記錄總數(shù),即所要查詢記錄的總行數(shù) /獲取總
29、頁數(shù),即如果當總記錄數(shù)除以每頁顯示的記錄的余數(shù)為0時,總頁數(shù)就等于兩數(shù)整除的結(jié)果 /如果余數(shù)不等于0,那么總頁數(shù)就等于兩數(shù)整除的結(jié)果加1this.maxPage=(this.maxRowCount%this.pageSize=0)?(this.maxRowCount/this.pageSize):(this.maxRowCount/this.pageSize+1); if(this.curPage>this.maxPage) /如果當前頁大于總頁數(shù),則當前頁等于總頁數(shù) this.curPage=this.maxPage; /那么當前頁就是最大頁 rsCount.close(); /關(guān)閉總
30、記錄數(shù)的結(jié)果集 /* * 一個字符串,用來動態(tài)的給出一個表單 * 該表單用來進行分頁和統(tǒng)計頁面間的跳轉(zhuǎn) */ public String pageFooter() /創(chuàng)建一個表單 String str = "<form action=" + this.httpFile + " name=formBean methord=post>" int prev = this.curPage- 1; /向前翻頁,即當前頁減1 int next = this.curPage +1; /向后翻頁,即當前頁加1 str = str + "<fo
31、nt style='font-size: 10pt'>總計<font color='red'>" + this.getMaxRowCount() + "</font>條記錄," + "【共<font color='red'>" + this.getMaxPage()+ "</font>頁】" str = str + "【 <font color='red'>" + this.p
32、ageSize + "</font>條/頁】 當前第<font color='red'>" + this.getCurPage() + "</font>頁 " if(this.curPage > 1) str = str + " <A href=" + this.httpFile + "?pages=1" + str_parameter + ">首頁</A> " else str = str
33、+ " 首頁 " if(this.curPage > 1) str = str + " <A href=" + this.httpFile + "?pages=" + prev + str_parameter + ">上一頁</A> " else str = str + " 上一頁 " if(this.curPage < this.maxPage) str = str + " <A href=" + this.httpFile + &
34、quot;?pages=" + next + str_parameter + ">下一頁</A> " else str = str + " 下一頁 " if(this.maxPage > 1 && this.curPage!= this.maxPage) str = str + " <A href=" + this.httpFile + "?pages=" + this.maxPage + str_parameter + ">尾頁</A&
35、gt;" else str = str + " 尾頁</font>" /在頁面跳轉(zhuǎn)間設(shè)置隱藏表單,來保存不同的請求 str = str + "轉(zhuǎn)到<input type ='text' name='pages' size='2'>頁"+ "<input type='hidden' name='ccif' value='"+this.ccif+ "'><input type =
36、39;hidden' name='cif' value='"+this.cif+ "'><input type ='hidden' name='qvalue' value='"+this.qvalue+ "'><input type ='hidden' name='andor' value='"+this.andor+ "'><input type ='hi
37、dden' name='sdate' value='"+this.sdate+ "'><input type ='hidden' name='edate' value='"+this.edate+ "'><input type ='hidden' name='orderby' value='"+this.orderby+ "'><input type ='h
38、idden' name='paixu' value='"+this.paixu+ "'><input type='submit' name='sumbmit' value='go'></form>" return str; /* * 根據(jù)不同條件來獲取不同的查詢前N條的SQL語句 */ public String getString(String table) if(ccif.equals("=") String strSql=
39、"select top "+this.pageSize*this.curPage+" * from "+table+ " where"+" "+cif+"="+"'"+qvalue+"'" return strSql; else if(ccif.equals("LIKE") String strSql="select top "+this.pageSize*this.curPage+" *
40、from "+table+ " where"+" "+cif+" "+"like"+" "+"'%"+qvalue+"%'" return strSql; else if(ccif.equals("ALL") String strSql="select top "+this.pageSize*this.curPage+" * from "+table; return st
41、rSql; else if(ccif.equals("<") String strSql="select top "+this.pageSize*this.curPage+" * from "+table+ " where "+cif+" < '"+qvalue+"'" return strSql; return null; /* * 根據(jù)不同條件來獲得不同的計算記錄總數(shù)的SQL語句 */ public String getCount(String
42、 table) if(ccif.equals("=") String strSql="select count(*) from "+table+" where"+" "+cif+"="+"'"+qvalue+"'" return strSql; else if(ccif.equals("LIKE") String strSql="select count(*) from "+table+"
43、where"+" "+cif+" "+"like"+" "+"'%"+qvalue+"%'" return strSql; else if(ccif.equals("ALL") String strSql="select count(*) from "+table; return strSql; else if(ccif.equals("<") String strSql="
44、select count(*) from "+table+" where "+cif+" < '"+qvalue+"'" return strSql; return null; /* * 根據(jù)不同條件和不同的起始日期和結(jié)束日期來獲得不同的計算記錄總數(shù)的SQL語句 */ public String getDateCount(String table) if(ccif.equals("=") /在sdate到edate時間段中進行精確查詢 String strSql="sele
45、ct count(*) from "+table+" where "+cif+" = '"+qvalue+"'"+ andor+" xsdate between '"+sdate+"' and '"+edate+"'" return strSql; else if(ccif.equals("LIKE") /在sdate到edate時間段中進行模糊查詢 String strSql="sele
46、ct count(*) from "+table+" where "+cif+" like '%"+qvalue+"%'"+ andor+" xsdate between '"+sdate+"' and '"+edate+"'" return strSql; else if(ccif.equals("ALL") /取出表中所有記錄 String strSql="select count(*
47、) from "+table; return strSql; return null; /* * 根據(jù)不同條件和不同的起始日期和結(jié)束日期來獲得不同的查詢,前N條的SQL語句 */ public String getDateString(String table) if(ccif.equals("=") String strSql="select top "+this.pageSize*this.curPage+" * from "+table+ " where "+cif+" = '&q
48、uot;+qvalue+"'"+andor+ " xsdate between '"+sdate+"' and '"+edate+"'" return strSql; else if(ccif.equals("LIKE") String strSql="select top "+this.pageSize*this.curPage+" * from "+table+ " where "+cif+&
49、quot; like '%"+qvalue+"%'"+andor+ " xsdate between '"+sdate+"' and '"+edate+"'" return strSql; else if(ccif.equals("ALL") String strSql="select top "+this.pageSize*this.curPage+" * from "+table; return
50、 strSql; return null; /* * 子查詢中得到從起始日期到結(jié)束日期這段時間所有不重復(fù)的spid(商品id),并返回不重復(fù)的spid的總數(shù) */ public String getOrderCount(String table) String strSql="select count(*) from (select spid from "+table+ " where xsdate between '"+sdate+"' and '"+edate+ "' group by s
51、pid) as aa" return strSql; /* * 聯(lián)合查詢查詢出某一表中從起始到結(jié)束日期間所有不重復(fù)的spid(商品id) * 并且將所有相同spid下的sl(數(shù)量)和je(金額)求和,即計算出某一商品在 * 某一時間段內(nèi)的總銷售數(shù)量和銷售總額 * 最后通過聯(lián)合查詢在tb_brand表(商品信息表)中將該spid所對應(yīng)商品的其他一些信息查詢出來 */ public String getOrderString(String table) String strSql="select top "+ this.pageSize*this.curPage+ &
52、quot;* from tb_brand a inner join (select spid,sum(sl) as sl,sum(je) as je"+ " from "+table+" where xsdate between '"+sdate+"' and '"+edate+"' group by spid ) as b"+ " on a.id=b.spid order by "+orderby+" "+paixu; return
53、 strSql; 4.6 顯示系統(tǒng)時間的JavaBean的編寫在本系統(tǒng)中,商品的入庫編號、銷售票號等都是由“2位英文字母+系統(tǒng)時間+5位數(shù)字”自動生成的,所以我們將系統(tǒng)時間封裝到Bean中,這樣可以很好的將這部分代碼重用。具體代碼如下:package com.mingri.showtime;import java.util.*;public class ShowTime private Date date=null; private int yy; /保存由Date類中g(shù)etYear()方法返回的整型數(shù)值 private int mm; /保存由Date類中g(shù)etMonth()方法返回的整型數(shù)
54、值 private int dd; /保存由Date類中g(shù)etDate()方法返回的整型數(shù)值 private String sy; private String sm; private String sd; public ShowTime() date=new Date(); yy=date.getYear()+1900; /只有加上1900才是系統(tǒng)當前的年份 mm=date.getMonth()+1; /只有加上1才識系統(tǒng)當前的月份 dd=date.getDate(); sy=String.valueOf(yy); /將整型yy轉(zhuǎn)化為字符串類型 sm=String.valueOf(mm);
55、/將整型mm轉(zhuǎn)化為字符串類型 sd=String.valueOf(dd); /將整型dd轉(zhuǎn)化為字符串類型 /如果月份是1位數(shù)在前面加上"0",即如果是1月份那么顯示的就是"01"if(sm.length()=1) sm="0"+sm; if(sd.length()=1) sd="0"+sd; public String getDateString() return sy+sm+sd; public String getDate() return sy+"-"+sm+"-"+s
56、d; 5 用戶登錄模塊設(shè)計用戶通過登錄頁面,進入企業(yè)進銷存管理系統(tǒng)首頁。該模塊主要用于驗證用戶的身份及密碼,其運行結(jié)果如圖3所示。圖3 用戶登錄頁面的運行結(jié)果在登錄頁面中利用JavaScript腳本語言編寫檢測用戶輸入信息是否合法的函數(shù),并通過單擊【登錄】按鈕調(diào)用該函數(shù),判斷用戶名或密碼是否為空,如果為空,系統(tǒng)將給予提示。當用戶輸入合法信息后,提交該表單。用戶登錄頁面中涉及的HTML表單元素如表1所示。表1 用戶登錄頁面涉及的HTML表單元素名稱類型含義重要屬性form1form表單action="login.asp" method="post"user
57、nametext用戶名passwordpassword密碼submitbutton【登錄】按鈕onClick="check()"resetreset【取消】按鈕class="btn_grey" value="取消"用戶登錄頁面中驗證用戶輸入合法性的主要JavaScript代碼如下:/省略部分代碼<script language="javascript"> function check() if(form1.username.value=0) alert("請輸入用戶名");form1.username.focus();return; if(
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 居民建議書小區(qū)社區(qū)活動改進3篇
- 換熱機組招標項目招標3篇
- 安居房施工合同風險防范策略分享3篇
- 招標進行時實驗室研究3篇
- 工程外包合同樣本3篇
- 搬家公司合同范本3篇
- 旅游包車司機勞動合同3篇
- 工業(yè)材料銷售書3篇
- 撤銷授權(quán)委托書的合同效力3篇
- 醫(yī)療器械電力供應(yīng)協(xié)議指南
- GB/T 23640-2009往復(fù)式內(nèi)燃機(RIC)驅(qū)動的交流發(fā)電機
- GB/T 19610-2004卷煙通風的測定定義和測量原理
- GB/T 11017.1-2002額定電壓110kV交聯(lián)聚乙烯絕緣電力電纜及其附件第1部分:試驗方法和要求
- 馬工程《教育學(xué)原理》課后習(xí)題講解
- 茶藝表演費課件
- 創(chuàng)建電力優(yōu)質(zhì)工程策劃及控制課件
- DBJ61-T 104-2015 陜西省村鎮(zhèn)建筑抗震設(shè)防技術(shù)規(guī)程-(高清版)
- 外研版(三起)小學(xué)英語四年級上冊教案(全冊)
- 小學(xué)生體育學(xué)習(xí)評價表
- 哈爾濱工業(yè)大學(xué)信紙模版
- 踝關(guān)節(jié)扭傷.ppt
評論
0/150
提交評論