第1章進(jìn)銷存管理系統(tǒng)_第1頁
第1章進(jìn)銷存管理系統(tǒng)_第2頁
第1章進(jìn)銷存管理系統(tǒng)_第3頁
第1章進(jìn)銷存管理系統(tǒng)_第4頁
第1章進(jìn)銷存管理系統(tǒng)_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余55頁可下載查看

下載本文檔

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

文檔簡介

1

進(jìn)銷存管理系統(tǒng)(Swing+SQLServer2000實(shí)現(xiàn)實(shí)現(xiàn)企業(yè)信息化管理是現(xiàn)代社會(huì)中小企業(yè)穩(wěn)步發(fā)展的必要條件,它可以提高企業(yè)的管理水平和工作效率,最大限度地減少手工操作帶來的。進(jìn)銷存管理JavawigQLerver2000數(shù)據(jù)庫加入WTO之后,隨著國內(nèi)經(jīng)濟(jì)的高速發(fā)展,中小型的商品流通企業(yè)越來越多,其所經(jīng)營的商品 可行性分 背企業(yè)進(jìn)銷存管理系統(tǒng)必須提供商品信息、供應(yīng)商信息和的基礎(chǔ)設(shè)置;提供強(qiáng)大的多條件 目 評(píng)價(jià)尺目階段預(yù)計(jì)需要投入4萬元的。累計(jì)項(xiàng)目投入需要15萬元。收根據(jù)上面的分析,在技術(shù)上不會(huì)存在問題,因此項(xiàng)目延期的可能性很小。在效益上公司投入7個(gè)編寫項(xiàng)目計(jì)劃編寫目背企業(yè)進(jìn)銷存管理系統(tǒng)是由×××委托我公司開發(fā)的大型管理系統(tǒng),主要功能是實(shí)現(xiàn)企業(yè)進(jìn)盤點(diǎn)及系統(tǒng)管理等個(gè)月景規(guī)劃如表11所示。1.1項(xiàng)目背景規(guī)策劃部

項(xiàng)目目標(biāo)應(yīng)當(dāng)符合SMART原則,把項(xiàng)目要完成的工作用清晰的語言描述出來。企業(yè)進(jìn)銷存管理產(chǎn)品目應(yīng)交付成 企業(yè)進(jìn)銷存管理系統(tǒng)交付用戶之后,進(jìn)行系統(tǒng)無償和服務(wù)6個(gè)月,超過個(gè)月進(jìn)行系統(tǒng)有償與服務(wù)項(xiàng)目開發(fā)環(huán)操作系統(tǒng)為WindowsXPWindows2003均可,使用集成開發(fā)工具Eclipse,數(shù)據(jù)庫采用SQLServer2000,項(xiàng)目運(yùn)行環(huán)境為JDK6.0。組織結(jié)理、系統(tǒng)分析員、軟件工程師、美工設(shè)計(jì)師和測(cè)試人員構(gòu)成,如圖1.1所示。

1.1項(xiàng)目團(tuán)隊(duì)組織結(jié)構(gòu)1.2人員分 陳負(fù)責(zé)項(xiàng)目的、決策的實(shí)侯鐘李粱馬王 系統(tǒng)功能銷查銷查系 供 操更 基進(jìn)礎(chǔ)理商客商修改商信戶查品查添與刪息添與詢?cè)兗映愉N入查貨查貨排詢查詢查行詢?cè)?.2企業(yè)進(jìn)銷存管理系統(tǒng)功業(yè)務(wù)邏輯編碼規(guī)1.3所示。1.3數(shù)據(jù)庫命 “_”分隔。下面將舉例說明,如表1.4所示。1.4數(shù)據(jù)表命 相同意義的英文單詞或詞組代替。下面將舉例說明,如表1.5所示。1.5字段命 供應(yīng)商編為編號(hào)前綴,加上客戶編號(hào)作為表的主鍵,有數(shù)據(jù)的唯一性的約束條件,所以,在表中不可能有兩個(gè)相同的作編號(hào)的后綴,這41000開始。例如(kh1002)。商品編IDID值。商品編號(hào)的銷售單編單的銷售日期,再以3位數(shù)字作后綴。例如(XS20071205001)。入庫編品的入庫日期,再以3位數(shù)字作后綴。例如(RK20071109003)。加上商品入庫的退貨日期,再以3位數(shù)字作后綴。例如(RT20071109001)。系統(tǒng)流程操操作1.3系統(tǒng)流程構(gòu)建開發(fā) Java開發(fā)包:JDK1.6 數(shù)據(jù)庫:SQLServer2000 分辨率:最佳效果為1024×768像素。注意:SP(ServicePack)為Windows操作系統(tǒng)補(bǔ)丁。圖1.4主窗體(光盤\…\com\lzw\JXCFrame.java) 圖1.5進(jìn)貨單界面(光盤\…\ 說明:由于路徑太長,因此省略了部分路徑,省略的路徑是“TM\01\JXCManager\src”文件夾組織結(jié)夾夾1.8文件夾組織結(jié)構(gòu)數(shù)據(jù)庫分本系統(tǒng)是一個(gè)桌面應(yīng)用程序,它可以直接在本地計(jì)算機(jī)運(yùn)行,而不需要像Web應(yīng)用那樣部署到SQLServer2000數(shù)據(jù)服務(wù)器,將數(shù)硬件平臺(tái) 數(shù)據(jù)庫:SQLServer2000進(jìn)銷存管理系統(tǒng)的E-R商品的客戶等多個(gè)實(shí)體。下面簡單介紹幾個(gè)關(guān)鍵的實(shí)體E-R圖??蛻魧?shí)體E-R 企業(yè)進(jìn)銷存管理系統(tǒng)將記錄所有的,在銷售、退貨等操作時(shí),將直接該客戶的實(shí)體屬性,客戶實(shí)體E-R圖如圖1.9所示。 編編名簡地E-客賬行傳聯(lián)系

1.9客戶實(shí)E-R、、、、不同的供應(yīng)商可以為企業(yè)提供不同的商品,在商品信息中將商品供應(yīng)商的實(shí)體屬性。供應(yīng)商體E-R圖如圖1.10所示。、、、、名名簡地E-編行傳

1.10供應(yīng)E-RE-R圖如圖1.11所示。1.11商品E-RPowerDesigner建數(shù)據(jù)庫建模,使用的版本為12.5。使用該工具建模的步驟如下:運(yùn)行PowerDesigner,并在PowerDesigner主窗口中選擇主菜單中的File/New命令,在打開的New框左側(cè)Modeltype列表框中選擇PhysicalDataModel(物理數(shù)據(jù)模型,簡稱PDB)選項(xiàng),OracleVersion10gR2等。企業(yè)進(jìn)銷存管理系統(tǒng)選擇 SQLServer2000作為數(shù)據(jù)庫服務(wù)器,單擊“確定”按鈕,如圖1.12所示。圖1.12New個(gè)浮動(dòng)的工具面板,其中包括常用的建表工具、建視圖工具和主外鍵工具,如圖1.13所示。在圖1.13中單擊“建表工具”按鈕,這時(shí)鼠標(biāo)指針將顯示為,在模型編輯器的合適位置單擊,此時(shí)在圖形窗口中將顯示如圖1.14所示的數(shù)據(jù)表模型。主外鍵主外鍵工建表圖1.13工具面 圖1.14表符在圖1.14所示的表符號(hào)上雙擊鼠標(biāo)左鍵,將打開TableProperties(表屬性)框。默認(rèn)情況下選中的是General選項(xiàng)卡,在該選項(xiàng)卡的Name文本框中,輸入表的名稱tb_manager,此時(shí)在Code文本框中也將自動(dòng)顯示tb_manager,其他選擇默認(rèn)即可。選擇Columns選項(xiàng)卡,首先單擊列輸入列表的第一行,將自動(dòng)轉(zhuǎn)換第一行為編輯狀態(tài),然PM列的復(fù)選框也將自動(dòng)被選中,它約束字段1.15Columns(列)在圖1.15中單擊“應(yīng)用”按鈕后,選擇ID字段,單擊左上角的按鈕,將打開ColumnID字段使用自動(dòng)編號(hào)。立各表間的依賴關(guān)系。創(chuàng)建完成的模型如圖1.16所示。8號(hào)字,如果想修改文字的格式,可以選中全部表符號(hào),按Ctrl+T鍵,在打開的SymbolFormat框中選(11)PowerDesigner主菜單中的Database/GenerateDatabase命令,將打開Database1.16企業(yè)進(jìn)銷存管理系統(tǒng)的模生路圖1.17DatabaseGeneration(12)在圖1.17所示的框中選擇Directgeneration單選按鈕,可以使用ODBC數(shù)據(jù)源直接在數(shù)據(jù)庫管理系統(tǒng)中生成數(shù)據(jù)表和視圖。但是,必須先創(chuàng)建數(shù)據(jù)庫的數(shù)據(jù)源,然后單擊按鈕選擇指定創(chuàng)建數(shù)據(jù)選擇“開始”/“所有程序”/SQLServer/“查詢分析器”命令,在彈出的“連接圖1.18“連接到SQLServer”在打開的SQL查詢分析器中選擇“文件”/“打開”命令,在彈出的框中選擇數(shù)據(jù)庫腳 執(zhí)行執(zhí)行按選擇數(shù)據(jù)1.19查詢分析器運(yùn)行效主窗體界面也是該系統(tǒng)的歡迎界面。應(yīng)用程序的主窗體必須設(shè)計(jì)層次清晰的系統(tǒng)菜單和,其中系統(tǒng)菜單包含系統(tǒng)中所有功能的菜單項(xiàng),而主要提供常用功能的快捷按鈕。企業(yè)進(jìn)銷存管理系統(tǒng)采用導(dǎo)航面板綜合了系統(tǒng)菜單和的優(yōu)點(diǎn),而且導(dǎo)航面板的界面更加美觀,操作更快捷。主窗體的運(yùn)行結(jié)果如圖1.20所示。1.20程序主窗體界面效創(chuàng)建主窗創(chuàng)建JXCFrame類,在類中創(chuàng)建并初始化窗體對(duì)象,為窗體添加桌面面板,并設(shè)置背景。例程01代碼位置:光盤privateJFrameframe;privateJLabelbackLabel;privateMap<String,JInternalFrame>ifs=newHashMap<String,JInternalFrame>();publicJXCFrame(){framenewJFrame("企業(yè)進(jìn)銷存管理系統(tǒng)ponentListener(newFrameListener());frame.getContentPane().setLayout(newBorderLayout());frame.setBounds(100,100,800,600);backLabel=newJLabel();desktopPane=newdesktopPane.add(backLabel,newInteger(Integer.MIN_VALUE));JTabbedPanenavigationPanel=createNavigationPanel(); //設(shè)置背//設(shè)置背}編寫updateBackImage()方法,在該方法中初始化背景,背景使用HTML超文本語例程02代碼位置:光盤{if(backLabel!=null)intbackw=JXCFrame.this.frame.getWidth();intbackh=frame.getHeight();backLabel.setSize(backw,backh);+"'height='"+(backh-110)+"' + + }}在類的靜態(tài)代碼段中設(shè)置進(jìn)銷存管理系統(tǒng)的外觀樣式。Swing支持跨平臺(tái)特性,它可以在不同的操作系統(tǒng)中保持一致的外觀風(fēng)格,但是本系統(tǒng)使用UIManager類的setLookAndFeel()方法設(shè)置程例程03代碼位置:光盤staticstatictry}catch(Exception{}}例程04代碼位置:光盤publicpublicstaticvoidmain(String[]{SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){new}}創(chuàng)建導(dǎo)航在JXCFrame類中編寫createNavigationPanel()JTabbedPane選項(xiàng)卡面例程05代碼位置:光盤privateJTabbedPanecreateNavigationPanel創(chuàng)建導(dǎo)航面板的方法JTabbedPanetabbedPane=newJTabbedPane();tabbedPane.setBackground(newColor(211,230,192));JPanelbaseManagePanel=newJPanel();

管理","KeHuGuanLi"));baseManagePanel.add(createFrameButton("商品信息管理","Shang baseManagePanel.add(createFrameButton("供應(yīng)商信息管理","GysGuanLi"));JPaneldepotManagePanel=newJPanel(); depotManagePanel.setBackground(newColor(215,223,194));

depotManagePanel.add(createFrameButton("庫存盤點(diǎn)","KuCunPanDian"));depotManagePanel.add(createFrameButton("價(jià)格調(diào)整","JiaGeTiaoZheng"));JPanelsellManagePanel=newJPanel(); sellManagePanel.setBackground(newColor(215,223,194));sellManagePanel.add(createFrameButton("銷售單","XiaoShouDan"));sellManagePanel.add(createFrameButton("銷售退貨","XiaoShouTuiHuo"));JPanelsearchStatisticPanel=newJPanel(); searchStatisticPanel.setBounds(0,0,600,41);searchStatisticPanel.setBackground(newColor(215,223,194));searchStatisticPanel.setLayout(newBoxLayout(searchStatisticPanel,BoxLayout.X_AXIS)); 查詢","KeHuChaXun"));searchStatisticPanel.add(createFrameButton("商品信息查詢","ShangPinChaXun"));searchStatisticPanel.add(createFrameButton("銷售信息查詢","XiaoShouChaXun"));searchStatisticPanel.add(createFrameButton("入庫查詢","RuKuChaXun"));searchStatisticPanel.add(createFrameButton("入庫退貨查詢","RuKuTuiHuoChaXun")); ","XiaoShouPaiHang"));JPanelstockManagePanel=newJPanel(); stockManagePanel.setBackground(newColor(215,223,194));stockManagePanel.add(createFrameButton("進(jìn)貨單"," stockManagePanel.add(createFrameButton("進(jìn)貨退貨"," JPanelsysManagePanel=newJPanel(); sysManagePanel.setBackground(newColor(215,223,194));sysManagePanel.add(createFrameButton("操作員管理","CzyGL")); ","GengGaiMiMa"));sysManagePanel.add(createFrameButton("權(quán)限管理","QuanManager"));//將所有面板添加到導(dǎo)航面板tabbedPane.addTab("基礎(chǔ)信息管理 ",null,baseManagePanel,"基礎(chǔ)信息管理");tabbedPane.addTab("進(jìn)貨管理 ",null,stockManagePanel,"進(jìn)貨管理");tabbedPane.addTab("銷售管理 ",null,sellManagePanel,"銷售管理");tabbedPane.addTab("查詢統(tǒng)計(jì) ",null,searchStatisticPanel,"查詢統(tǒng)計(jì)");tabbedPane.addTab("庫存管理 ",null,depotManagePanel,"庫存管理");tabbedPane.addTab("系統(tǒng)管理 ",null,sysManagePanel,"系統(tǒng)管理");return}例程06代碼位置:光盤privateprivateJButtoncreateFrameButton(StringfName,Stringcname)StringimgUrl="res/ActionIcon/"+fName+//為內(nèi)部窗Action的方StringimgUrl_roll="res/ActionIcon/"+fNameStringimgUrl_down="res/ActionIcon/"+fNameIconicon=newImageIcon(imgUrl);Iconicon_roll=if(imgUrl_roll!=icon_roll=newImageIcon(imgUrl_roll);Iconicon_down=null;if(imgUrl_down!=icon_down=new++???????Actionaction=newopenFrameAction(fName,cname,icon);JButtonbutton=newJButton(action);button.setMargin(newInsets(0,0,0,0));if(icon_roll!=if(icon_down!=null)return//openFrameAction類創(chuàng)Action對(duì)代碼貼setHideActionText():該方法用于設(shè)置按鈕隱藏Action對(duì)象中的文本信息,例如一個(gè)只顯示圖標(biāo)的按鈕可以取消需要覆蓋setRolloverIcon():該方法用于設(shè)置鼠標(biāo)經(jīng)過按鈕時(shí),按鈕所使用的圖標(biāo)。openFrameAction,它必須繼承Action類實(shí)Action接口。該類用于創(chuàng)建在按鈕被按下時(shí),調(diào)用getIFrame()方法獲取相應(yīng)的窗體對(duì)象,并顯示在主窗體中。關(guān)鍵代碼如下:例程07代碼位置:光盤protectedprotectedfinalclassopenFrameActionprivateStringframeName=Action privateprivateopenFrameAction()}{this.frameName=frameName;putValue(Action.NAME,cname);putValue(Action.SMALL_ICON,icon);}{JInternalFramejf={publicvoidinternalFrameClosed(InternalFrameEvente){}}try{}}//Action//Action//getIFrame}編寫getIFrame()Java的反射例程08代碼位置:光盤{JInternalFramejf=if(!ifs.containsKey(frameName)){try{ClassfClass=Class.forName("internalFrame."+frameName);Constructorconstructor=fClass.getConstructor(null);jf=(JInternalFrame)constructor.newInstance(null);ifs.put(frameName,jf);}catch(Exception{}}jf=ifs.get(frameName);returnjf;}編寫Dao公共Dao類主要負(fù)責(zé)有關(guān)數(shù)據(jù)庫的操作,該類在靜態(tài)代碼段中驅(qū)動(dòng)并連接數(shù)據(jù)庫,然后將所有的數(shù)據(jù)例程09代碼位置:光盤publicpublicclassDaoprotectedstaticStringdbClassName="com. protectedstaticStringdbUrl="jdbc: +protectedstaticStringdbUser="sa";protectedstaticStringdbPwd="";protectedstaticStringsecond=null;publicstaticConnectionconn=null;static{tryif(conn==null) conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd); }}catch(Exception{}}} 數(shù)據(jù)庫的URL路徑。 數(shù)據(jù)庫的用戶名稱。 該方法用于添加供應(yīng)商的基礎(chǔ)信息,它接收供應(yīng)商的實(shí)體類TbGysinfo作方法的參數(shù),然后把實(shí)例程10代碼位置:光盤publicstaticbooleanaddGys(TbGysinfogysInfo)ifgysInfo return returninsert("inserttb_gysinfovaluesgysInfo.getId +gysInfo.getName()+"','"+gysInfo.getJc()++gysInfo.getAddress()+"','"+gysInfo.getBianma()++ ()+"','"+gysInfo.getFax()++gysInfo.getLian()+"','"+gysInfo.getL()++gysInfo.getMail()+"','"+gysInfo.getYh()+}例程11代碼位置:光盤 publicstaticTbGysinfogetGysInfo(Item{Stringwhere="name='"+item.getName()+"'";if(item.getId()!=null)where="id='"+item.getId()+"'TbGysinfoinfo=newResultSetset=findForResultSet("select*fromtb_gysinfowhere"+where);try{if(set.next()) info.setL(set.getString("l").trim()); (set.getString("").trim());}{}return }該方法用于更新供應(yīng)商的基礎(chǔ)信息,它接收供應(yīng)商的實(shí)體類TbGysinfo作方法參數(shù),在方法中直例程12代碼位置:光盤publicstaticintupdateGys(TbGysinfogysInfo)returnupdate("updatetb_gysinfosetjc='"++"',address='"+gysInfo.getAddress()++gysInfo.getBianma()+"',='"+ +"',fax='"+gysInfo.getFax()+"',lian='"++"',l='"+gysInfo.getL()++gysInfo.getMail()+"',yh='"++"'whereid='"+gysInfo.getId()+}體類TbRukuMain作參數(shù),該實(shí)體類中包含了入庫詳細(xì)表的。關(guān)鍵代碼如下:例程13代碼位置:光盤publicstaticbooleaninsertRukuInfo(TbRukuMainruMain){ try{ mit insert("insertintotb_ruku_mainvalues('"+ruMain.getRkId() +"','"+ruMain.getPzs()+"',"+ruMain.getJe()++ruMain.getYsjl()+"','"+ruMain.getGysname()++ruMain.getRkdate()+"','"+ruMain.getCzy()++ruMain.getJsr()+"','"+ruMain.getJsfs()+"')");Set<TbRukuDetail>rkDetails=ruMain.getTabRukuDetails();{TbRukuDetaildetails=insert("insertintotb_ruku_detailvalues +"','"+details.getTabSpinfo()+"',"+details.getDj()+","+details.getSl()+")");Itemitem=newItem();TbSpinfospInfo=getSpInfo(item);if(spInfo.getId()!=null&&{TbKucunkucun=if(kucun.getId()==null||kucun.getId().isEmpty()){ insert("insertintotb_kucunvalues('"+spInfo.getId()+"','"+spInfo.getSpname()+"','"+spInfo.getJc()+"','"++"','"+spInfo.getGg()+"','"+spInfo.getBz()+"','"++"',"+details.getDj()+","+details.getSl()+}elseintsl=kucun.getKcsl()+update("updatetb_kucunsetkcsl="+sl+",dj="+details.getDj()+"whereid='"+kucun.getId()+}}} ??{try{}}return}()該方法用于獲取指定商品ID編號(hào)或名稱的庫存法接收一個(gè)Item對(duì)象作參數(shù),該對(duì)象中封裝了商品的ID編號(hào)和商品名稱信息,如果庫存表中存在該商品的庫存記錄,就獲取該記錄并將記錄中例程14代碼位置:光盤publicstaticTbKucungetKucun(Itemitem)Stringwhere="spname='"+item.getName()+"'";if(item.getId()!=null)where="id='"+item.getId()+ResultSetrs=findForResultSet("select*fromtb_kucunwhere"+where);TbKucunkucun=newTbKucun();tryif(rs.next())}{}}return}編寫ItemItem類是系統(tǒng)的公共類之一,主要用于封裝和傳遞參數(shù)信息,這是典型命令模式的實(shí)現(xiàn)。在DaotoString()方法將返回nameItem類的對(duì)象所代表的商品、供應(yīng)商或例程15代碼位置:光盤publicpublicclassItempublicStringid;publicStringname;publicStringgetId(){return}{this.id=}publicString{return}{=}publicString{return}}基礎(chǔ)信息模塊概3部分,由于在商品信息中會(huì)關(guān)聯(lián)系統(tǒng)中對(duì)應(yīng)的供應(yīng)商信息。供應(yīng)商添加功能的程序界面如圖1.21所示。供應(yīng)商的修改與刪除功能主要用于系統(tǒng)中的供應(yīng)商信息。在供應(yīng)商的發(fā)生改變時(shí),必須更新系統(tǒng)中的記錄,以提供供應(yīng)商的信息。另外,當(dāng)不再與某家供應(yīng)商合作時(shí),需要從系統(tǒng)中刪除供應(yīng)商的記錄信息。程序運(yùn)行界面如圖1.22所示。圖1.21供應(yīng)商添加界 圖1.22供應(yīng)商修改與刪除功能界基礎(chǔ)信息模塊技術(shù)分供應(yīng)商添加實(shí)現(xiàn)過輸入供應(yīng)商信息的文本框。界面中定義的主要控件如表1.6所示。 無無無無無無無無無F無 (2)創(chuàng)建ResetActionListener類,該類是“重填”按鈕的事件器,它必須實(shí)現(xiàn)例程16代碼位置:光盤????{publicvoidfinalActionEvente)} }actionPerformed():該方法是器ActionListener接口定義的方法,當(dāng)事件產(chǎn)生時(shí),將調(diào)用器實(shí)現(xiàn)類口,并在actionPerformed()方法中實(shí)現(xiàn)用戶輸入的驗(yàn)證和供應(yīng)商信息的保存。關(guān)鍵代碼如下:例程17代碼位置:光盤 publicvoidactionPerformed(finalActionEvente)if(diZhiF.getText().equals("")|||| JOptionPane.showMessageDialog(GysTianJiaPanel.this請(qǐng)?zhí)顚懭啃畔?);return;}try ResultSethaveUser=Dao.query("select*fromtb_gysinfowhere+quanChengF.getText().trim()+"'");if(haveUser.next()){}ResultSetset=Dao.query("selectmax(id)fromtb_gysinfo");Stringid=null;if(set!=null&&set.next())Stringsid=set.getString(1).trim();if(sid==null)else{Stringstr=id="gys"+(Integer.parseInt(str)+}}TbGysinfogysInfo=newTbGysinfo();gysInfo.setL//獲取供應(yīng)商的最I(lǐng)D編 ,"", {}}}供應(yīng)商修改與刪除實(shí)現(xiàn)過單擊“修改”按鈕將修改供應(yīng)商數(shù)據(jù)。界面中定義的主要控件如表1.7所示。1.7供應(yīng)商修改與刪除界面中的主要控 無無無無無無無無無F無設(shè)置初始大小為(230, 用 boBox()方法,用于初始化選擇供應(yīng)商的下拉列表框。該方法調(diào)用Dao類對(duì)象并添加到選擇供應(yīng)商的下拉列表框中,在下拉列表框中Item的toString()方法將顯示供應(yīng)商的名稱。boBox()方法的關(guān)鍵代碼如下:例程18代碼位置:光盤publicpublicboBox()ListgysInfo=Dao.getGysInfos();List<Item>items=newArrayList<Item>();for(Iteratoriter=gysInfo.iterator();iter.hasNext();)Listelement=(List)iter.next();Itemitem=newItem();if(items.contains(item))}//Items列表中包含該供應(yīng)商的封()}例程19代碼位置:光盤{Item{}selectedItem=(Item)TbGysinfogysInfo=//Item對(duì)//通過Item對(duì)象調(diào)用getGysInfo()方法獲取供應(yīng)商息 (4)創(chuàng)建ModifyActionListener類,該類是“修改”按鈕的事件器,它必須實(shí)現(xiàn)ActionListener接口,并在actionPerformed()方法中獲取所有文本框內(nèi)容,其中包括修改后的信息,并通過調(diào)用updateGys()方法將這些供應(yīng)商信息更新到數(shù)據(jù)庫中。關(guān)鍵代碼如下:例程20代碼位置:光盤{publicvoidactionPerformed(ActionEvente){Itemitem=(Item)gys.getSelectedItem();TbGysinfogysInfo=newTbGysinfo();gysInfo.setL if(Dao.updateGys(gysInfo)==1) JOptionPane.showMessageDialog(GysXiuGaiPanel.this,"修改完成");,"}}(5)創(chuàng)建DelActionListener類,該類是“刪除”按鈕的事件器,它必須實(shí)現(xiàn)ActionListener接口,并在actionPerformed()Dao類的delete()方法從數(shù)據(jù)庫例程21代碼位置:光盤{publicvoidactionPerformed(ActionEvente){Itemitem=(Item)gys.getSelectedItem();if(item==null||!(iteminstanceofItem))intconfirmJOptionPane.showConfirmDialog(GysXiuGaiPanel.this確認(rèn)刪除供應(yīng)商信息嗎?");if(confirm==JOptionPane.YES_OPTION)intrs=Dao.delete("deletetb_gysInfowhere+item.getId()+"'");if(rs>0){器 框}}else}}}} 成完了之后,下發(fā)給測(cè)試人員測(cè)試時(shí),ugug,但有非常多的ug JUnitJavaNunit(.Net),CPPUnit(C++),都屬于xUnit中的成員。目前JUnit的版本是JUnit4.0,在Eclipse開發(fā)工具中已經(jīng)集成了JUnit的多個(gè)版本。1.23單元測(cè)試通過效故故紅色錯(cuò)誤警示1.24單元測(cè)試失敗效 使用JUnit創(chuàng)建ItemTest類,該類用于測(cè)試公共類Item的行為(即方法)。在“創(chuàng)建Java類”框TestCaseJUnit框架的測(cè)試用例編寫單元測(cè)試,單擊“完成”按鈕,如圖1.25所示。/“添加庫”命令,在彈出的“添加庫”框中選擇Junit選項(xiàng),單擊“下一步”按鈕,如圖TestCase1.25新建測(cè)試用例圖1.26添加庫在創(chuàng)建的ItemTest中,對(duì)ItemItem是本系統(tǒng)的公共類之一,要實(shí)現(xiàn)該類的testtestName()方法、testID()方法testEquals()方法。另外還要重寫父類的setUp()方法,在該方法中創(chuàng)建并初始化測(cè)試用例中需要的數(shù)據(jù)。importjunit.framework.TestCase;publicclassItemTestextendsTestCase{privateItemprotectedvoidsetUp()throws{item=newItem();}publictestID(){assertEquals(item.getId(),"007");}publictestNameassertEquals(item.getName(),}publicvoidItemnewItem=newItem();在該類上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“運(yùn)行方式”/“JUnit測(cè)試”命令,運(yùn)行ItemItem類沒有實(shí)現(xiàn)父類的equals()方法,可以不進(jìn)行該測(cè)試,否則在判斷兩個(gè)Item類的實(shí)例對(duì)象是否相等時(shí),將出現(xiàn)判斷失敗。進(jìn)貨管理模塊概序界面如圖1.27所示。1.27進(jìn)貨單程序界1.28進(jìn)貨退貨程序界進(jìn)貨管理模塊技術(shù)分進(jìn)貨管理模塊使用JDBC3個(gè)數(shù)據(jù)表,為保證3個(gè)數(shù)據(jù)表的操作全部執(zhí)行。下面介紹使用JDBC實(shí)現(xiàn)事務(wù)操作的關(guān)鍵方法。True,則它的所有SQL語句將被執(zhí)行并作為單個(gè)事務(wù)提交;否則,該連接對(duì)象的SQL語句將到事務(wù)中,直到調(diào)用commit()方法或rollback()方法為止。默認(rèn)情況下,新連接的自動(dòng)提交模式為True。 void void 進(jìn)貨單實(shí)現(xiàn)過件如表1.8所示。1.8進(jìn)貨單界面中的主要控 無無privateprivatevoidinitTable()StringcolumnNames商品名稱商品編號(hào)產(chǎn)地單位規(guī)格包裝單價(jià)) TableColumncolumn=table.getColumnModel().getColumn(0); finalDefaultCellEditoreditor=newDefaultCellEditor(sp); }編寫initSpBox()方法,該方法用于初始化表格中的商品下拉列表框。它首先調(diào)用Dao類的privateprivatevoidinitSpBox()Listlist=newResultSetset=Dao.query("select*fromtb_spinfowhere+gys.getSelectedItem()+"'");sp.addItem(newfor(inti=0;table!=null&&i<table.getRowCount();{TbSpinfotmpInfo=(TbSpinfo)table.getValueAt(i,0);if(tmpInfo!=null&&tmpInfo.getId()!=null)}trywhile(set.next())TbSpinfospinfo=newif???????????}{}}()()()()()()setPh:該方法用于設(shè)置商品實(shí)體類的商品批號(hào)。setPzwh():該方法用于設(shè)置商品實(shí)體類的商品批準(zhǔn)文號(hào)。setMemo():該方法用于設(shè)置商品實(shí)體類的商品簡介信息。 ():該方法用于設(shè)置商品實(shí)體類的供應(yīng)商名稱編寫“入庫”按鈕的事件器RkActionListener類,該類必須實(shí)現(xiàn)ActionListener接口和Dao類的insertRukuInfo()方法在事務(wù)中保存進(jìn)貨單 {publicvoidactionPerformed(ActionEvente)StringhpzsStr=StringpzsStr=StringjeStr=StringjsrStr=StringczyStr=StringrkDate=StringysjlStr=Stringid=StringgysName=if(jsrStr==null||jsrStr.isEmpty())}}if(ysjlStr==null||{JOptionPane.showMessageDialog(");return;}if(table.getRowCount()<={JOptionPane.showMessageDialog(");return;}TbRukuMainruMain=newTbRukuMain(id,pzsStr,jeStr,gysName,rkDate,czyStr,jsrStr,jsfsStr);Set<TbRukuDetail>set=ruMain.getTabRukuDetails();introws=table.getRowCount();for(inti=0;i<rows;i++)TbSpinfospinfo=(TbSpinfo)table.getValueAt(i,0);StringdjStr=(String)table.getValueAt(i,6);StringslStr=(String)table.getValueAt(i,7);Doubledj=Double.valueOf(djStr);Integersl=Integer.valueOf(slStr);TbRukuDetaildetail=newTbRukuDetail();}if(rs){ oDan.this,"入庫完成DefaultTableModeldftm=newDefaultTableModel();}}} 查詢統(tǒng)計(jì)模塊概配查詢和模糊查詢。另外,還可以指定銷售日期查詢。程序界面如圖1.29所示。1.29銷售查詢界查詢統(tǒng)計(jì)模塊技術(shù)分對(duì)于普通查詢條件可以簡單地使用SQL語句的“=”進(jìn)行判斷,但是模糊查詢稍微復(fù)雜一些,需要使用SQLLIKE關(guān)鍵字。LIKE關(guān)鍵字需要使用通配符在字符串內(nèi)查找指定的模式,所以讀者需要了解通配符及其含義。通配符的含義如表1.9所示。1.9LIKE關(guān)鍵字中的通配符及其含通配 %_[[^[ 銷售查詢實(shí)現(xiàn)過創(chuàng)建XiaoShouChaXun類,用于實(shí)現(xiàn)本系統(tǒng)的銷售查詢功能界面和業(yè)務(wù)邏輯。界面中定義的主要控件如表1.10所示。1.10進(jìn)貨單界面中的主要控 編寫updateTableIterator迭代器對(duì)象,通例程25代碼位置:光盤privateprivatevoidupdateTable(Iteratoriterator for(inti=0;i<rowCount;i++){}{Vector}(3)ShowAllActoinListener類,使該類實(shí)現(xiàn)ActionListener接口該接例程26代碼位置:光盤{publicvoidactionPerformed(finalActionEvente){Listlist=Dao.findForList("select*fromv_sellView");Iteratoriterator=list.iterator();

}}(4)創(chuàng)建“查詢”按鈕的事件器QueryActionListener類,該類必須實(shí)現(xiàn)ActionListener接口,表格控件中,其查詢條件由condition、operation下拉列表框和一個(gè)content文本框組成。關(guān)鍵代碼如例程27代碼位置:光盤{publicvoidactionPerformed(finalActionEvente){booleanselDate=selectDate.isSelected();if(content.getText().equals("")){}if(selDate)JOptionPane.showMessageDialog(getContentPane請(qǐng)輸入查詢的開始日期!");return;}JOptionPane.showMessageDialog(getContentPane請(qǐng)輸入查詢的結(jié)束日期!");return;}}}ListStringcon=condition.getSelectedIndex()==?"khname:"sellIdintoper=operation.getSelectedIndex();Stringopstr=oper==0?"=":"like";Stringcont=content.getText();list=Dao.findForList("select*fromv_sellViewwhere+++(oper==0?"'"+cont+"'":"'%"+cont++(selDate?"andxsdate>'"++"'andxsdate<='"+endDate.getText()+"23:59:59'":""));Iteratoriterator=list.iterator(); }}庫存管理模塊概1.30價(jià)格調(diào)整界庫存管理模塊技術(shù)分值。價(jià)格調(diào)整功能涉及下拉列表框的選擇事件和事件處理技術(shù),這在使用JavaSwing技術(shù)進(jìn)行程將產(chǎn)生相應(yīng)的事件,這個(gè)事件會(huì)被添加的ItemListener器捕獲,并處理相應(yīng)的業(yè)務(wù)邏輯。 publicvoidaddItemListener(ItemListener 價(jià)格調(diào)整實(shí)現(xiàn)過要控件如表1.11所示。1.11進(jìn)貨單界面中的主要控 例程28代碼位置:光盤privateprivatevoidupdateJinE()Doubledj=kuCunJinE.setText((dj*sl)+"");}ItemActionListenerItemListener接口和接口中的itemStateChanged()方例程29代碼位置:光盤????{publicvoidfinalItemEvente)if(selectedItem==null)Itemitem=(Item)selectedItem;kcInfo=Dao.getKucun(item);intdj,dj=kcInfo.getDj().intValue();danJia.setText(kcInfo.getDj()+"");kuCunShuLiang.setText(kcInfo.getKcsl()+"");kuCunJinE.setText(dj*sl+"");} }在這個(gè)方法中獲取新的庫存商品價(jià)格,然后調(diào)用DaoupdateKucunDj()方法更新庫存價(jià)格。關(guān)鍵代例程30代碼位置:光盤classclassOkActionListenerimplements{publicvoidactionPerformed(finalActionEvente){intrs=Dao.updateKucunDj(kcInfo);if(rs>kcInfo.getSpname()+"價(jià)格調(diào)整",}}在價(jià)格調(diào)整界面中輸入單價(jià)時(shí),如果輸入“1l33”程序?qū)伋鯪umberFormatException異常,如L的小寫形式,字母當(dāng)然不能用作數(shù)字,所以產(chǎn)生了這個(gè)錯(cuò)誤,導(dǎo)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論