第1章进销存管理系统_第1页
第1章进销存管理系统_第2页
第1章进销存管理系统_第3页
第1章进销存管理系统_第4页
第1章进销存管理系统_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1

进销存管理系统(Swing+SQLServer2000实现实现企业信息化管理是现代社会中小企业稳步发展的必要条件,它可以提高企业的管理水平和工作效率,最大限度地减少手工操作带来的。进销存管理JavawigQLerver2000数据库加入WTO之后,随着国内经济的高速发展,中小型的商品流通企业越来越多,其所经营的商品 可行性分 背企业进销存管理系统必须提供商品信息、供应商信息和的基础设置;提供强大的多条件 目 评价尺目阶段预计需要投入4万元的。累计项目投入需要15万元。收根据上面的分析,在技术上不会存在问题,因此项目延期的可能性很小。在效益上公司投入7个编写项目计划编写目背企业进销存管理系统是由×××委托我公司开发的大型管理系统,主要功能是实现企业进盘点及系统管理等个月景规划如表11所示。1.1项目背景规策划部

项目目标应当符合SMART原则,把项目要完成的工作用清晰的语言描述出来。企业进销存管理产品目应交付成 企业进销存管理系统交付用户之后,进行系统无偿和服务6个月,超过个月进行系统有偿与服务项目开发环操作系统为WindowsXPWindows2003均可,使用集成开发工具Eclipse,数据库采用SQLServer2000,项目运行环境为JDK6.0。组织结理、系统分析员、软件工程师、美工设计师和测试人员构成,如图1.1所示。

1.1项目团队组织结构1.2人员分 陈负责项目的、决策的实侯钟李粱马王 系统功能销查销查系 供 操更 基进础理商客商修改商信户查品查添与删息添与询询加除加销入查货查货排询查询查行询询1.2企业进销存管理系统功业务逻辑编码规1.3所示。1.3数据库命 “_”分隔。下面将举例说明,如表1.4所示。1.4数据表命 相同意义的英文单词或词组代替。下面将举例说明,如表1.5所示。1.5字段命 供应商编为编号前缀,加上客户编号作为表的主键,有数据的唯一性的约束条件,所以,在表中不可能有两个相同的作编号的后缀,这41000开始。例如(kh1002)。商品编IDID值。商品编号的销售单编单的销售日期,再以3位数字作后缀。例如(XS20071205001)。入库编品的入库日期,再以3位数字作后缀。例如(RK20071109003)。加上商品入库的退货日期,再以3位数字作后缀。例如(RT20071109001)。系统流程操操作1.3系统流程构建开发 Java开发包:JDK1.6 数据库:SQLServer2000 分辨率:最佳效果为1024×768像素。注意:SP(ServicePack)为Windows操作系统补丁。图1.4主窗体(光盘\…\com\lzw\JXCFrame.java) 图1.5进货单界面(光盘\…\ 说明:由于路径太长,因此省略了部分路径,省略的路径是“TM\01\JXCManager\src”文件夹组织结夹夹1.8文件夹组织结构数据库分本系统是一个桌面应用程序,它可以直接在本地计算机运行,而不需要像Web应用那样部署到SQLServer2000数据服务器,将数硬件平台 数据库:SQLServer2000进销存管理系统的E-R商品的客户等多个实体。下面简单介绍几个关键的实体E-R图。客户实体E-R 企业进销存管理系统将记录所有的,在销售、退货等操作时,将直接该客户的实体属性,客户实体E-R图如图1.9所示。 编编名简地E-客账行传联系

1.9客户实E-R、、、、不同的供应商可以为企业提供不同的商品,在商品信息中将商品供应商的实体属性。供应商体E-R图如图1.10所示。、、、、名名简地E-编行传

1.10供应E-RE-R图如图1.11所示。1.11商品E-RPowerDesigner建数据库建模,使用的版本为12.5。使用该工具建模的步骤如下:运行PowerDesigner,并在PowerDesigner主窗口中选择主菜单中的File/New命令,在打开的New框左侧Modeltype列表框中选择PhysicalDataModel(物理数据模型,简称PDB)选项,OracleVersion10gR2等。企业进销存管理系统选择 SQLServer2000作为数据库服务器,单击“确定”按钮,如图1.12所示。图1.12New个浮动的工具面板,其中包括常用的建表工具、建视图工具和主外键工具,如图1.13所示。在图1.13中单击“建表工具”按钮,这时鼠标指针将显示为,在模型编辑器的合适位置单击,此时在图形窗口中将显示如图1.14所示的数据表模型。主外键主外键工建表图1.13工具面 图1.14表符在图1.14所示的表符号上双击鼠标左键,将打开TableProperties(表属性)框。默认情况下选中的是General选项卡,在该选项卡的Name文本框中,输入表的名称tb_manager,此时在Code文本框中也将自动显示tb_manager,其他选择默认即可。选择Columns选项卡,首先单击列输入列表的第一行,将自动转换第一行为编辑状态,然PM列的复选框也将自动被选中,它约束字段1.15Columns(列)在图1.15中单击“应用”按钮后,选择ID字段,单击左上角的按钮,将打开ColumnID字段使用自动编号。立各表间的依赖关系。创建完成的模型如图1.16所示。8号字,如果想修改文字的格式,可以选中全部表符号,按Ctrl+T键,在打开的SymbolFormat框中选(11)PowerDesigner主菜单中的Database/GenerateDatabase命令,将打开Database1.16企业进销存管理系统的模生路图1.17DatabaseGeneration(12)在图1.17所示的框中选择Directgeneration单选按钮,可以使用ODBC数据源直接在数据库管理系统中生成数据表和视图。但是,必须先创建数据库的数据源,然后单击按钮选择指定创建数据选择“开始”/“所有程序”/SQLServer/“查询分析器”命令,在弹出的“连接图1.18“连接到SQLServer”在打开的SQL查询分析器中选择“文件”/“打开”命令,在弹出的框中选择数据库脚 执行执行按选择数据1.19查询分析器运行效主窗体界面也是该系统的欢迎界面。应用程序的主窗体必须设计层次清晰的系统菜单和,其中系统菜单包含系统中所有功能的菜单项,而主要提供常用功能的快捷按钮。企业进销存管理系统采用导航面板综合了系统菜单和的优点,而且导航面板的界面更加美观,操作更快捷。主窗体的运行结果如图1.20所示。1.20程序主窗体界面效创建主窗创建JXCFrame类,在类中创建并初始化窗体对象,为窗体添加桌面面板,并设置背景。例程01代码位置:光盘privateJFrameframe;privateJLabelbackLabel;privateMap<String,JInternalFrame>ifs=newHashMap<String,JInternalFrame>();publicJXCFrame(){framenewJFrame("企业进销存管理系统ponentListener(newFrameListener());frame.getContentPane().setLayout(newBorderLayout());frame.setBounds(100,100,800,600);backLabel=newJLabel();desktopPane=newdesktopPane.add(backLabel,newInteger(Integer.MIN_VALUE));JTabbedPanenavigationPanel=createNavigationPanel(); //设置背//设置背}编写updateBackImage()方法,在该方法中初始化背景,背景使用HTML超文本语例程02代码位置:光盘{if(backLabel!=null)intbackw=JXCFrame.this.frame.getWidth();intbackh=frame.getHeight();backLabel.setSize(backw,backh);+"'height='"+(backh-110)+"' + + }}在类的静态代码段中设置进销存管理系统的外观样式。Swing支持跨平台特性,它可以在不同的操作系统中保持一致的外观风格,但是本系统使用UIManager类的setLookAndFeel()方法设置程例程03代码位置:光盘staticstatictry}catch(Exception{}}例程04代码位置:光盘publicpublicstaticvoidmain(String[]{SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){new}}创建导航在JXCFrame类中编写createNavigationPanel()JTabbedPane选项卡面例程05代码位置:光盘privateJTabbedPanecreateNavigationPanel创建导航面板的方法JTabbedPanetabbedPane=newJTabbedPane();tabbedPane.setBackground(newColor(211,230,192));JPanelbaseManagePanel=newJPanel();

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

depotManagePanel.add(createFrameButton("库存盘点","KuCunPanDian"));depotManagePanel.add(createFrameButton("价格调整","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("进货单"," stockManagePanel.add(createFrameButton("进货退货"," JPanelsysManagePanel=newJPanel(); sysManagePanel.setBackground(newColor(215,223,194));sysManagePanel.add(createFrameButton("操作员管理","CzyGL")); ","GengGaiMiMa"));sysManagePanel.add(createFrameButton("权限管理","QuanManager"));//将所有面板添加到导航面板tabbedPane.addTab("基础信息管理 ",null,baseManagePanel,"基础信息管理");tabbedPane.addTab("进货管理 ",null,stockManagePanel,"进货管理");tabbedPane.addTab("销售管理 ",null,sellManagePanel,"销售管理");tabbedPane.addTab("查询统计 ",null,searchStatisticPanel,"查询统计");tabbedPane.addTab("库存管理 ",null,depotManagePanel,"库存管理");tabbedPane.addTab("系统管理 ",null,sysManagePanel,"系统管理");return}例程06代码位置:光盘privateprivateJButtoncreateFrameButton(StringfName,Stringcname)StringimgUrl="res/ActionIcon/"+fName+//为内部窗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类创Action对代码贴setHideActionText():该方法用于设置按钮隐藏Action对象中的文本信息,例如一个只显示图标的按钮可以取消需要覆盖setRolloverIcon():该方法用于设置鼠标经过按钮时,按钮所使用的图标。openFrameAction,它必须继承Action类实Action接口。该类用于创建在按钮被按下时,调用getIFrame()方法获取相应的窗体对象,并显示在主窗体中。关键代码如下:例程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类主要负责有关数据库的操作,该类在静态代码段中驱动并连接数据库,然后将所有的数据例程09代码位置:光盘publicpublicclassDaoprotectedstaticStringdbClassName="com. protectedstaticStringdbUrl="jdbc: +protectedstaticStringdbUser="sa";protectedstaticStringdbPwd="";protectedstaticStringsecond=null;publicstaticConnectionconn=null;static{tryif(conn==null) conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd); }}catch(Exception{}}} 数据库的URL路径。 数据库的用户名称。 该方法用于添加供应商的基础信息,它接收供应商的实体类TbGysinfo作方法的参数,然后把实例程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 }该方法用于更新供应商的基础信息,它接收供应商的实体类TbGysinfo作方法参数,在方法中直例程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作参数,该实体类中包含了入库详细表的。关键代码如下:例程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编号或名称的库存法接收一个Item对象作参数,该对象中封装了商品的ID编号和商品名称信息,如果库存表中存在该商品的库存记录,就获取该记录并将记录中例程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类是系统的公共类之一,主要用于封装和传递参数信息,这是典型命令模式的实现。在DaotoString()方法将返回nameItem类的对象所代表的商品、供应商或例程15代码位置:光盘publicpublicclassItempublicStringid;publicStringname;publicStringgetId(){return}{this.id=}publicString{return}{=}publicString{return}}基础信息模块概3部分,由于在商品信息中会关联系统中对应的供应商信息。供应商添加功能的程序界面如图1.21所示。供应商的修改与删除功能主要用于系统中的供应商信息。在供应商的发生改变时,必须更新系统中的记录,以提供供应商的信息。另外,当不再与某家供应商合作时,需要从系统中删除供应商的记录信息。程序运行界面如图1.22所示。图1.21供应商添加界 图1.22供应商修改与删除功能界基础信息模块技术分供应商添加实现过输入供应商信息的文本框。界面中定义的主要控件如表1.6所示。 无无无无无无无无无F无 (2)创建ResetActionListener类,该类是“重填”按钮的事件器,它必须实现例程16代码位置:光盘▪▪▪▪{publicvoidfinalActionEvente)} }actionPerformed():该方法是器ActionListener接口定义的方法,当事件产生时,将调用器实现类口,并在actionPerformed()方法中实现用户输入的验证和供应商信息的保存。关键代码如下:例程17代码位置:光盘 publicvoidactionPerformed(finalActionEvente)if(diZhiF.getText().equals("")|||| JOptionPane.showMessageDialog(GysTianJiaPanel.this请填写全部信息");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//获取供应商的最ID编 ,"", {}}}供应商修改与删除实现过单击“修改”按钮将修改供应商数据。界面中定义的主要控件如表1.7所示。1.7供应商修改与删除界面中的主要控 无无无无无无无无无F无设置初始大小为(230, 用 boBox()方法,用于初始化选择供应商的下拉列表框。该方法调用Dao类对象并添加到选择供应商的下拉列表框中,在下拉列表框中Item的toString()方法将显示供应商的名称。boBox()方法的关键代码如下:例程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列表中包含该供应商的封()}例程19代码位置:光盘{Item{}selectedItem=(Item)TbGysinfogysInfo=//Item对//通过Item对象调用getGysInfo()方法获取供应商息 (4)创建ModifyActionListener类,该类是“修改”按钮的事件器,它必须实现ActionListener接口,并在actionPerformed()方法中获取所有文本框内容,其中包括修改后的信息,并通过调用updateGys()方法将这些供应商信息更新到数据库中。关键代码如下:例程20代码位置:光盘{publicvoidactionPerformed(ActionEvente){Itemitem=(Item)gys.getSelectedItem();TbGysinfogysInfo=newTbGysinfo();gysInfo.setL if(Dao.updateGys(gysInfo)==1) JOptionPane.showMessageDialog(GysXiuGaiPanel.this,"修改完成");,"}}(5)创建DelActionListener类,该类是“删除”按钮的事件器,它必须实现ActionListener接口,并在actionPerformed()Dao类的delete()方法从数据库例程21代码位置:光盘{publicvoidactionPerformed(ActionEvente){Itemitem=(Item)gys.getSelectedItem();if(item==null||!(iteminstanceofItem))intconfirmJOptionPane.showConfirmDialog(GysXiuGaiPanel.this确认删除供应商信息吗?");if(confirm==JOptionPane.YES_OPTION)intrs=Dao.delete("deletetb_gysInfowhere+item.getId()+"'");if(rs>0){器 框}}else}}}} 成完了之后,下发给测试人员测试时,ugug,但有非常多的ug JUnitJavaNunit(.Net),CPPUnit(C++),都属于xUnit中的成员。目前JUnit的版本是JUnit4.0,在Eclipse开发工具中已经集成了JUnit的多个版本。1.23单元测试通过效故故红色错误警示1.24单元测试失败效 使用JUnit创建ItemTest类,该类用于测试公共类Item的行为(即方法)。在“创建Java类”框TestCaseJUnit框架的测试用例编写单元测试,单击“完成”按钮,如图1.25所示。/“添加库”命令,在弹出的“添加库”框中选择Junit选项,单击“下一步”按钮,如图TestCase1.25新建测试用例图1.26添加库在创建的ItemTest中,对ItemItem是本系统的公共类之一,要实现该类的testtestName()方法、testID()方法testEquals()方法。另外还要重写父类的setUp()方法,在该方法中创建并初始化测试用例中需要的数据。importjunit.framework.TestCase;publicclassItemTestextendsTestCase{privateItemprotectedvoidsetUp()throws{item=newItem();}publictestID(){assertEquals(item.getId(),"007");}publictestNameassertEquals(item.getName(),}publicvoidItemnewItem=newItem();在该类上单击鼠标右键,在弹出的快捷菜单中选择“运行方式”/“JUnit测试”命令,运行ItemItem类没有实现父类的equals()方法,可以不进行该测试,否则在判断两个Item类的实例对象是否相等时,将出现判断失败。进货管理模块概序界面如图1.27所示。1.27进货单程序界1.28进货退货程序界进货管理模块技术分进货管理模块使用JDBC3个数据表,为保证3个数据表的操作全部执行。下面介绍使用JDBC实现事务操作的关键方法。True,则它的所有SQL语句将被执行并作为单个事务提交;否则,该连接对象的SQL语句将到事务中,直到调用commit()方法或rollback()方法为止。默认情况下,新连接的自动提交模式为True。 void void 进货单实现过件如表1.8所示。1.8进货单界面中的主要控 无无privateprivatevoidinitTable()StringcolumnNames商品名称商品编号产地单位规格包装单价) TableColumncolumn=table.getColumnModel().getColumn(0); finalDefaultCellEditoreditor=newDefaultCellEditor(sp); }编写initSpBox()方法,该方法用于初始化表格中的商品下拉列表框。它首先调用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:该方法用于设置商品实体类的商品批号。setPzwh():该方法用于设置商品实体类的商品批准文号。setMemo():该方法用于设置商品实体类的商品简介信息。 ():该方法用于设置商品实体类的供应商名称编写“入库”按钮的事件器RkActionListener类,该类必须实现ActionListener接口和Dao类的insertRukuInfo()方法在事务中保存进货单 {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();}}} 查询统计模块概配查询和模糊查询。另外,还可以指定销售日期查询。程序界面如图1.29所示。1.29销售查询界查询统计模块技术分对于普通查询条件可以简单地使用SQL语句的“=”进行判断,但是模糊查询稍微复杂一些,需要使用SQLLIKE关键字。LIKE关键字需要使用通配符在字符串内查找指定的模式,所以读者需要了解通配符及其含义。通配符的含义如表1.9所示。1.9LIKE关键字中的通配符及其含通配 %_[[^[ 销售查询实现过创建XiaoShouChaXun类,用于实现本系统的销售查询功能界面和业务逻辑。界面中定义的主要控件如表1.10所示。1.10进货单界面中的主要控 编写updateTableIterator迭代器对象,通例程25代码位置:光盘privateprivatevoidupdateTable(Iteratoriterator for(inti=0;i<rowCount;i++){}{Vector}(3)ShowAllActoinListener类,使该类实现ActionListener接口该接例程26代码位置:光盘{publicvoidactionPerformed(finalActionEvente){Listlist=Dao.findForList("select*fromv_sellView");Iteratoriterator=list.iterator();

}}(4)创建“查询”按钮的事件器QueryActionListener类,该类必须实现ActionListener接口,表格控件中,其查询条件由condition、operation下拉列表框和一个content文本框组成。关键代码如例程27代码位置:光盘{publicvoidactionPerformed(finalActionEvente){booleanselDate=selectDate.isSelected();if(content.getText().equals("")){}if(selDate)JOptionPane.showMessageDialog(getContentPane请输入查询的开始日期!");return;}JOptionPane.showMessageDialog(getContentPane请输入查询的结束日期!");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价格调整界库存管理模块技术分值。价格调整功能涉及下拉列表框的选择事件和事件处理技术,这在使用JavaSwing技术进行程将产生相应的事件,这个事件会被添加的ItemListener器捕获,并处理相应的业务逻辑。 publicvoidaddItemListener(ItemListener 价格调整实现过要控件如表1.11所示。1.11进货单界面中的主要控 例程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+"");} }在这个方法中获取新的库存商品价格,然后调用DaoupdateKucunDj()方法更新库存价格。关键代例程30代码位置:光盘classclassOkActionListenerimplements{publicvoidactionPerformed(finalActionEvente){intrs=Dao.updateKucunDj(kcInfo);if(rs>kcInfo.getSpname()+"价格调整",}}在价格调整界面中输入单价时,如果输入“1l33”程序将抛出NumberFormatException异常,如L的小写形式,字母当然不能用作数字,所以产生了这个错误,导

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论