还剩98页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
甘肃政法学院Java课程设计报告题目兰州华联超市进销管理系统一.需求分析企业进销存管理系统的主要工作,是对企业的进货、销售和库存以信息化的方式进行管理,最大限度的减少各个环境中可能出现的错误,有效减少盲目采购,降低采购成本、合理控制库存、减少资金占用并提高市场灵敏度,使企业能够合理安排进、销、存的每个关键步骤,替身企业市场竞争力针对经营管理中存在的问题,兰州华联超市对产品的进销存合理化提出了更高的要求通过实际调查,要求企业进销存管理系统具有以下功能◆界面设计美观大方,方便、快捷、操作灵活◆实现强大的进销存管理,包括基本信息、进货、销售和库存管理◆能够在不同的操作系统下运行,不局限于特定的平台◆提供数据库备份与恢复功能◆提供库存盘点功能◆提供技术支持的联系方式,可以使用邮件进行沟通,或者直接连接到技术网站二.分析与设计1功能模块划分:本进销存管理系统划分为六个模块,分别为系统登陆模块,系统主窗体设计模块,进货单模块,销售单模块,库存盘点模块和数据库备份与恢复模块,2数据库结构描述:企业进销存管理系统需要使用数据库存储和管理进销存过程中的所有信息,本企业进销存管理系统使用SQLServer2000数据库系统作为后台数据库,数据库名称为db_database28其中包含了14张数据表﹑两个视图以下是系统主要涉及的六个数据库表1.供应商信息表主要用于存储供应商详细信息,其结构如下表所示tb_gysinfo供应商信息表字段名称数据类型字段大小是否主键说明idvarchar32主键供应商编号namevarchar50供应商名称jcvarchar20供应商简称addressvarchar100供应商地址bianmavarchar10邮政编码telvarchar15电话faxvarchar15传真lianvarchar8联系人ltelvarchar15联系电话yhvarchar50开户银行mailvarchar50电子信箱
2.商品信息表主要用于存储商品详细信息,其结构如下表所示;tb_spinfo商品信息表字段名称数据类型字段大小是否主键说明idvarchar32主键商品编号spnamevarchar50商品名称jcvarchar30商品简称cdvarchar50产地dwvarchar10计量单位ggvarchar10商品规格bzvarchar20包装phvarchar32批号pzwhvarchar50批准文号memovarchar100备注gysnamevarchar50供应商名称
3.入库主表主要用于存出入库单据信息,其结构如下表所示Tb_ru_ku_main入库主表字段名称数据类型字段大小是否主键说明rkIDvachar32主键入库编号pzsfloat8品种数量jemoney8总计金额ysjlvachar50验收结论gysnamevachar100供应商名称rkatedatetime8入库时间czyvachar30操作员jsrvachar30经手人jsfsvachar10结算方式
4.入库明细主要用于存出入库详细信息,其结构如下表所示tb_ruku_detail入库明细表字段名称数据类型字段大小是否主键说明idvachar50主键流水号rkIDvachar30入库编号spidvachar50商品编号djmoney8单价slfloat8数量
5.销售主表主要用于存储销售单据信息,其结构如下表所示tb_sell_main销售主表字段名称数据类型字段大小是否主键说明sellIDvachar30主键销售编号pzsfloat8销售品种数jemoney8总计金额ysjlvachar50验收结论khnamevachar100客户名称xsdatedatetime8销售日期czyvachar30操作员jsrvachar30经手人jsfsvachar10结算方式
6.销售明细表主要用于存储销售详细信息,其结构如下表所示tb_sell_detail销售明细表字段名称数据类型字段大小是否主键说明idvachar50主键流水号sellIDvachar50销售编号spidvachar50商品编号djMoney8销售单价slfloat8销售数量三.系统详细设计文档
1.系统流程图1系统功能结构图2系统业务流程图3系统中的主要类及功能
1.Item公共类Item公共类是对数据表最常用的ID和name属性的封装,属于swing列表,表格,下拉列表框等组件的赋值该类重写了toString方法,在该方法中只输出name属性但是在获取组件的内容时,获取的是Item类的对象,从该对象中可以获取ID的属性,然后通过该属性到数据库中获取唯一的数据
2.数据模型公共类数据模型公共类对应着数据库中不同的数据表,这些模型将被访问数据库的Dao类和程序中各个模块甚至各个组件使用,数据模型是对数据表所有字段的封装,它是纯粹的模型类,他也要重写toString方法,另外还要重写hashCode方法和equal方法它主要用于存贮数据,并通过相应的getXXX方法和setXXX实现不同属性的访问原则
3.Dao公共类Dao类实现了数据库的驱动,连接,关闭和多个操作数据库的方法,Dao类不需要创建对象,可以直接调用类中的所有数据库操作方法Dao类自定义的主要方法有getKhlnfoItemitem方法,主要是获取客户信息,方法的返回值是tKhlnfo的对象,及客户信息的数据模型getGyslnfoItemitem方法,主要是获取供应商信息,返回值是Gyslnfo类的对象,及供应商数据表的模型对象getSplnfoItemitem方法,主要用于获取商品信息,返回值是Splnfo类的对象,及商品数据表的数据模型getLoginStringnameStringpassword方法《主要适用于判断登录用户的用户名与密码是否正确,返回值是boolean类型insertSelllnfoTbSellMainsellMain方法,主要是添加销售信息到数据库中restoreOrBackupStringsql方法,此方法是设置数据库的模式为单用户连接模式,这样可以避免数据库恢复或备份时失败checkLoginStringuserStrStringpassStr方法,用于判断登录用户与密码是否正确2各个模块实现方法描述
1.系统登录模块实现该模块的主要代码如下packagecom.lzw.login;importjava.awt.*;importjava.awt.event.*;importjava.sql.SQLException;importjavax.swing.*;importcom.lzw.MainFrame;importcom.lzw.dao.Dao;publicclassLoginDialogextendsJFrame{privatestaticfinallongserialVersionUID=1L;privateLoginPanelloginPanel=null;privateJLabeljLabel=null;privateJTextFielduserField=null;privateJLabeljLabel1=null;privateJPasswordFieldpasswordField=null;privateJButtonloginButton=null;privateJButtonexitButton=null;privatestaticStringuserStr;privateMainFramemainFrame;/***@paramowner*/publicLoginDialog{try{UIManager.setLookAndFeelUIManager.getSystemLookAndFeelClassName;mainFrame=newMainFrame;initialize;}catchExceptione{e.printStackTrace;}}/***初始化loginPanel登录面板的方法**@returncom.lzw.login.LoginPanel*/privateLoginPanelgetLoginPanel{ifloginPanel==null{jLabel1=newJLabel;jLabel
1.setBoundsnewRectangle86715518;jLabel
1.setText密 码;jLabel=newJLabel;jLabel.setText用户名;jLabel.setBoundsnewRectangle85415618;loginPanel=newLoginPanel;loginPanel.setLayoutnull;loginPanel.setBackgroundnewColor0xD8DDC7;loginPanel.addjLabelnull;loginPanel.addgetUserFieldnull;loginPanel.addjLabel1null;loginPanel.addgetPasswordFieldnull;loginPanel.addgetLoginButtonnull;loginPanel.addgetExitButtonnull;}returnloginPanel;}/***ThismethodinitializesuserField**@returnjavax.swing.JTextField*/privateJTextFieldgetUserField{ifuserField==null{userField=newJTextField;userField.setBoundsnewRectangle1423912722;}returnuserField;}/***ThismethodinitializespasswordField**@returnjavax.swing.JPasswordField*/privateJPasswordFieldgetPasswordField{ifpasswordField==null{passwordField=newJPasswordField;passwordField.setBoundsnewRectangle1436912522;passwordField.addKeyListenernewjava.awt.event.KeyAdapter{publicvoidkeyTypedjava.awt.event.KeyEvente{ife.getKeyChar==\nloginButton.doClick;}};}returnpasswordField;}/***ThismethodinitializesloginButton**@returnjavax.swing.JButton*/privateJButtongetLoginButton{ifloginButton==null{loginButton=newJButton;loginButton.setBoundsnewRectangle1091144820;loginButton.setIconnewImageIcongetClass.getResource/res/loginButton.jpg;loginButton.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{try{userStr=userField.getText;StringpassStr=newStringpasswordField.getPassword;if!Dao.checkLoginuserStrpassStr{JOptionPane.showMessageDialogLoginDialog.this用户名与密码无法登录登录失败JOptionPane.ERROR_MESSAGE;return;}}catchExceptione1{e
1.printStackTrace;}MainFrame.setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;mainFrame.setVisibletrue;mainFrame.getCzyStateLabel.setTextuserStr;setVisiblefalse;}};}returnloginButton;}/***ThismethodinitializesexitButton**@returnjavax.swing.JButton*/privateJButtongetExitButton{ifexitButton==null{exitButton=newJButton;exitButton.setBoundsnewRectangle1811144820;exitButton.setIconnewImageIcongetClass.getResource/res/exitButton.jpg;exitButton.addActionListenernewjava.awt.event.ActionListener{publicvoidactionPerformedjava.awt.event.ActionEvente{System.exit0;}};}returnexitButton;}/***界面初始化方法**@returnvoid*/privatevoidinitialize{Dimensionsize=getToolkit.getScreenSize;setLocationsize.width-296/2size.height-188/2;setSize296188;this.setTitle系统登录;setContentPanegetLoginPanel;}publicStringgetUserStr{returnuserStr;}}//@jve:decl-index=0:visual-constraint=1010运行结果如下
2.主窗体模块主要实现代码如下packagecom.lzw;importjava.awt.*;importjava.util.Date;importjavax.swing.*;importjavax.swing.border.BevelBorder;importcom.lzw.login.LoginDialog;publicclassMainFrameextendsJFrame{privatestaticfinallongserialVersionUID=1L;privateJPanelframeContentPane=null;privateMenuBarframeMenuBar=null;privateToolBartoolBar=null;privateDesktopPaneldesktopPane=null;privateJPanelstatePanel=null;privateJLabelstateLabel=null;privateJLabelnameLabel=null;privateJLabelnowDateLabel=null;privateJSeparatorjSeparator1=null;privatestaticJLabelczyStateLabel=null;privateJSeparatorjSeparator2=null;/***ThismethodinitializesjJToolBarBar**@returnjavax.swing.JToolBar*/privateToolBargetJJToolBarBar{iftoolBar==null{toolBar=newToolBargetFrameMenuBar;toolBar.setCursornewCursorCursor.HAND_CURSOR;}returntoolBar;}/***初始化窗体菜单栏的方法**@returnjavax.swing.JMenuBar*/protectedMenuBargetFrameMenuBar{ifframeMenuBar==null{frameMenuBar=newMenuBargetDesktopPanegetStateLabel;}returnframeMenuBar;}/***ThismethodinitializesdesktopPane**@returnjavax.swing.JDesktopPane*/privateDesktopPanelgetDesktopPane{ifdesktopPane==null{desktopPane=newDesktopPanel;}returndesktopPane;}/***ThismethodinitializesstatePanel**@returnjavax.swing.JPanel*/privateJPanelgetStatePanel{ifstatePanel==null{GridBagConstraintsgridBagConstraints6=newGridBagConstraints;gridBagConstraints
6.gridx=2;gridBagConstraints
6.fill=GridBagConstraints.VERTICAL;gridBagConstraints
6.insets=newInsets0505;gridBagConstraints
6.gridy=0;GridBagConstraintsgridBagConstraints4=newGridBagConstraints;gridBagConstraints
4.gridx=3;gridBagConstraints
4.gridy=0;GridBagConstraintsgridBagConstraints3=newGridBagConstraints;gridBagConstraints
3.gridx=6;gridBagConstraints
3.fill=GridBagConstraints.VERTICAL;gridBagConstraints
3.insets=newInsets0505;gridBagConstraints
3.gridy=0;GridBagConstraintsgridBagConstraints11=newGridBagConstraints;gridBagConstraints
11.gridx=5;gridBagConstraints
11.insets=newInsets0505;gridBagConstraints
11.gridy=0;nowDateLabel=newJLabel;Datenow=newDate;nowDateLabel.setTextString.format%tFnow;GridBagConstraintsgridBagConstraints2=newGridBagConstraints;gridBagConstraints
2.gridx=7;gridBagConstraints
2.weightx=
0.0;gridBagConstraints
2.fill=GridBagConstraints.NONE;gridBagConstraints
2.gridy=0;nameLabel=newJLabel吉林省铭泰××有限公司;GridBagConstraintsgridBagConstraints1=newGridBagConstraints;gridBagConstraints
1.gridx=4;gridBagConstraints
1.fill=GridBagConstraints.VERTICAL;gridBagConstraints
1.weighty=
1.0;gridBagConstraints
1.insets=newInsets0505;gridBagConstraints
1.gridy=0;GridBagConstraintsgridBagConstraints=newGridBagConstraints;gridBagConstraints.gridx=0;gridBagConstraints.fill=GridBagConstraints.HORIZONTAL;gridBagConstraints.weightx=
1.0;gridBagConstraints.gridy=0;statePanel=newJPanel;statePanel.setLayoutnewGridBagLayout;statePanel.setBorderBorderFactory.createBevelBorderBevelBorder.RAISED;statePanel.addgetStateLabelgridBagConstraints;statePanel.addgetJSeparatorgridBagConstraints1;statePanel.addnameLabelgridBagConstraints2;statePanel.addgetJSeparator1gridBagConstraints3;statePanel.addnowDateLabelgridBagConstraints11;statePanel.addgetCzyStateLabelgridBagConstraints4;statePanel.addgetJSeparator2gridBagConstraints6}returnstatePanel;}publicstaticJLabelgetCzyStateLabel{ifczyStateLabel==null{czyStateLabel=newJLabel操作员;}returnczyStateLabel;}publicJLabelgetStateLabel{ifstateLabel==null{stateLabel=newJLabel;stateLabel.setText当前没有选定窗体;}returnstateLabel;}/***ThismethodinitializesjSeparator**@returnjavax.swing.JSeparator*/privateJSeparatorgetJSeparator{JSeparatorjSeparator=newJSeparator;jSeparator.setOrientationJSeparator.VERTICAL;returnjSeparator;}/***ThismethodinitializesjSeparator1**@returnjavax.swing.JSeparator*/privateJSeparatorgetJSeparator1{ifjSeparator1==null{jSeparator1=newJSeparator;jSeparator
1.setOrientationSwingConstants.VERTICAL;}returnjSeparator1;}/***ThismethodinitializesjSeparator2**@returnjavax.swing.JSeparator*/privateJSeparatorgetJSeparator2{ifjSeparator2==null{jSeparator2=newJSeparator;;jSeparator
2.setOrientationSwingConstants.VERTICAL}returnjSeparator2;}/***@paramargs*/publicstaticvoidmainString[]args{SplashScreensplashScreen=SplashScreen.getSplashScreen;ifsplashScreen!=null{try{JFramelogin=newLoginDialog;login.setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;Thread.sleep3000;login.setVisibletrue;}catchInterruptedExceptione{}}}/***Thisisthedefaultconstructor*/publicMainFrame{super;initialize;}/***Thismethodinitializesthis**@returnvoid*/privatevoidinitialize{this.setSize800600;this.setJMenuBargetFrameMenuBar;this.setContentPanegetFrameContentPane;this.setTitle华联超市进销存管理系统;}/***ThismethodinitializesframeContentPane**@returnjavax.swing.JPanel*/privateJPanelgetFrameContentPane{ifframeContentPane==null{frameContentPane=newJPanel;frameContentPane.setLayoutnewBorderLayout;frameContentPane.addgetStatePanelBorderLayout.SOUTH;frameContentPane.addgetJJToolBarBarBorderLayout.NORTH;frameContentPane.addgetDesktopPaneBorderLayout.CENTER;}returnframeContentPane;}}//@jve:decl-index=0:visual-constraint=6-5运行界面如下
3.进货单模块实现代码如下packagecom.lzw.iframe;importjava.awt.*;importjava.awt.event.*;importjava.beans.PropertyChangeListener;importjava.sql.*;importjava.util.*;importjava.util.Date;importjava.util.List;importjavax.swing.*;importjavax.swing.border.BevelBorder;importjavax.swing.table.*;importcom.lzw.*;importcom.lzw.dao.Dao;importcom.lzw.dao.model.*;publicclassJinHuoDan_IFrameextendsJInternalFrame{privateJPaneljContentPane=null;privateJPaneltopPanel=null;privateJLabelidLabel=null;privateJTextFieldidField=null;privateJLabelgysLabel=null;privateJLabellxrLabel=null;privateJTextFieldlxrField=null;privateJLabeljsfsLabel=null;privateJComboBoxjsfsComboBox=null;privateJLabelthsjLabel=null;privateJTextFieldjhsjField=null;privateJLabeljsrLabel=null;privateJTextFieldczyField=null;privateJPanelbottomPanel=null;privateJLabelpzslLabel=null;privateJTextFieldpzslField=null;privateJLabelhpzsLabel=null;privateJTextFieldhpzsField=null;privateJLabelhjjeLabel=null;privateJTextFieldhjjeField=null;privateJLabelysjlLabel=null;privateJTextFieldysjlField=null;privateJLabelczyLabel=null;privateJButtontjButton=null;privateJButtonrukuButton=null;privateJScrollPanetablePane=null;privateJTabletable=null;privateJComboBoxspComboBox=null;//@jve:decl-index=0:visual-constraint=63384privateJComboBoxgysComboBox=null;privateJComboBoxjsrComboBox=null;privateDatejhsjDate=newDate;/***默认的构造方法*/publicJinHuoDan_IFrame{super;initialize;}/***初始化界面的方法**@returnvoid*/privatevoidinitialize{this.setSize600320;this.setIconifiabletrue;this.setResizabletrue;this.setMaximizabletrue;this.setTitle进货单;this.setClosabletrue;this.setContentPanegetJContentPane;}/***初始化jContentPane内容面板的方法**@returnjavax.swing.JPanel*/privateJPanelgetJContentPane{ifjContentPane==null{jContentPane=newJPanel;jContentPane.setLayoutnewBorderLayout;jContentPane.addgetTopPaneljava.awt.BorderLayout.NORTH;jContentPane.addgetBottomPaneljava.awt.BorderLayout.SOUTH;jContentPane.addgetTablePanejava.awt.BorderLayout.CENTER;}returnjContentPane;}/***初始化topPanel面板的方法**@returnjavax.swing.JPanel*/privateJPanelgetTopPanel{iftopPanel==null{GridBagConstraintsgridBagConstraints21=newGridBagConstraints;gridBagConstraints
21.fill=GridBagConstraints.BOTH;gridBagConstraints
21.gridy=1;gridBagConstraints
21.weightx=
1.0;gridBagConstraints
21.gridx=9;GridBagConstraintsgridBagConstraints=newGridBagConstraints;gridBagConstraints.fill=GridBagConstraints.BOTH;gridBagConstraints.gridy=0;gridBagConstraints.weightx=
1.0;gridBagConstraints.gridx=5;GridBagConstraintsgridBagConstraints101=newGridBagConstraints;gridBagConstraints
101.gridx=8;gridBagConstraints
101.gridy=1;jsrLabel=newJLabel;jsrLabel.setText\u7ecf\u624b\u4eba\uff1a;GridBagConstraintsgridBagConstraints91=newGridBagConstraints;gridBagConstraints
91.fill=GridBagConstraints.HORIZONTAL;gridBagConstraints
91.gridy=1;gridBagConstraints
91.weightx=
1.0;gridBagConstraints
91.gridx=5;GridBagConstraintsgridBagConstraints81=newGridBagConstraints;gridBagConstraints
81.gridx=4;gridBagConstraints
81.gridy=1;thsjLabel=newJLabel;thsjLabel.setText进货时间;GridBagConstraintsgridBagConstraints71=newGridBagConstraints;gridBagConstraints
71.fill=GridBagConstraints.HORIZONTAL;gridBagConstraints
71.gridy=1;gridBagConstraints
71.weightx=
1.0;gridBagConstraints
71.gridx=1;GridBagConstraintsgridBagConstraints61=newGridBagConstraints;gridBagConstraints
61.gridx=0;gridBagConstraints
61.gridy=1;jsfsLabel=newJLabel;jsfsLabel.setText\u7ed3\u7b97\u65b9\u5f0f\uff1a;GridBagConstraintsgridBagConstraints51=newGridBagConstraints;gridBagConstraints
51.fill=GridBagConstraints.HORIZONTAL;gridBagConstraints
51.gridy=0;gridBagConstraints
51.weightx=
1.0;gridBagConstraints
51.gridx=9;GridBagConstraintsgridBagConstraints41=newGridBagConstraints;gridBagConstraints
41.fill=GridBagConstraints.NONE;gridBagConstraints
41.gridy=0;gridBagConstraints
41.gridx=8;lxrLabel=newJLabel;lxrLabel.setText\u8054\u7cfb\u4eba\uff1a;GridBagConstraintsgridBagConstraints25=newGridBagConstraints;gridBagConstraints
25.gridx=4;gridBagConstraints
25.gridy=0;gysLabel=newJLabel;gysLabel.setText\u4f9b\u5e94\u5546\uff1a;GridBagConstraintsgridBagConstraints110=newGridBagConstraints;gridBagConstraints
110.fill=GridBagConstraints.HORIZONTAL;gridBagConstraints
110.gridx=1;gridBagConstraints
110.gridy=0;gridBagConstraints
110.weightx=
1.0;gridBagConstraints
110.insets=newInsets0001;GridBagConstraintsgridBagConstraints24=newGridBagConstraints;gridBagConstraints
24.gridx=0;gridBagConstraints
24.gridy=0;idLabel=newJLabel;idLabel.setText进货票号;topPanel=newJPanel;topPanel.setLayoutnewGridBagLayout;topPanel.addidLabelgridBagConstraints24;topPanel.addgetIdFieldgridBagConstraints110;topPanel.addgysLabelgridBagConstraints25;topPanel.addgetGysComboBoxgridBagConstraints;topPanel.addlxrLabelgridBagConstraints41;topPanel.addgetLxrFieldgridBagConstraints51;topPanel.addjsfsLabelgridBagConstraints61;topPanel.addgetJsfsComboBoxgridBagConstraints71;topPanel.addthsjLabelgridBagConstraints81;topPanel.addgetJhsjFieldgridBagConstraints91;topPanel.addjsrLabelgridBagConstraints101;topPanel.addgetJsrComboBoxgridBagConstraints21;}returntopPanel;}/***初始化(进货票号)文本框的方法**@returnjavax.swing.JTextField*/privateJTextFieldgetIdField{ifidField==null{idField=newJTextField;idField.setEditablefalse;}returnidField;}/***初始化(联系人)文本框的方法**@returnjavax.swing.JTextField*/privateJTextFieldgetLxrField{iflxrField==null{lxrField=newJTextField;}returnlxrField;}/***初始化(计算方式)文本框的方法**@returnjavax.swing.JComboBox*/privateJComboBoxgetJsfsComboBox{ifjsfsComboBox==null{jsfsComboBox=newJComboBox;jsfsComboBox.addItem现金结款;jsfsComboBox.addItem支票结款;}returnjsfsComboBox;}/***初始化(进货时间)文本框的方法**@returnjavax.swing.JTextField*/privateJTextFieldgetJhsjField{ifjhsjField==null{jhsjField=newJTextField;}returnjhsjField;}/***初始化操作员文本框的方法**@returnjavax.swing.JTextField*/privateJTextFieldgetCzyField{ifczyField==null{czyField=newJTextField;czyField.setEditablefalse;czyField.setTextMainFrame.getCzyStateLabel.getText;}returnczyField;}/***初始化bottomPanel面板的方法**@returnjavax.swing.JPanel*/privateJPanelgetBottomPanel{ifbottomPanel==null{GridBagConstraintsgridBagConstraints2=newGridBagConstraints;gridBagConstraints
2.fill=GridBagConstraints.HORIZONTAL;gridBagConstraints
2.gridy=1;gridBagConstraints
2.weightx=
1.0;gridBagConstraints
2.gridx=3;GridBagConstraintsgridBagConstraints1=newGridBagConstraints;gridBagConstraints
1.fill=GridBagConstraints.BOTH;gridBagConstraints
1.gridy=1;gridBagConstraints
1.weightx=
1.0;gridBagConstraints
1.gridx=9;GridBagConstraintsgridBagConstraints231=newGridBagConstraints;gridBagConstraints
231.fill=GridBagConstraints.NONE;gridBagConstraints
231.gridy=1;gridBagConstraints
231.weightx=
0.3;gridBagConstraints
231.gridx=6;GridBagConstraintsgridBagConstraints221=newGridBagConstraints;gridBagConstraints
221.gridx=5;gridBagConstraints
221.weightx=
0.3;gridBagConstraints
221.gridy=1;GridBagConstraintsgridBagConstraints201=newGridBagConstraints;gridBagConstraints
201.gridx=2;gridBagConstraints
201.gridy=1;czyLabel=newJLabel;czyLabel.setText\u64cd\u4f5c\u5458\uff1a;GridBagConstraintsgridBagConstraints191=newGridBagConstraints;gridBagConstraints
191.fill=GridBagConstraints.HORIZONTAL;gridBagConstraints
191.gridy=1;gridBagConstraints
191.weightx=
1.0;gridBagConstraints
191.gridx=1;GridBagConstraintsgridBagConstraints181=newGridBagConstraints;gridBagConstraints
181.gridx=0;gridBagConstraints
181.gridy=1;ysjlLabel=newJLabel;ysjlLabel.setText\u9a8c\u6536\u7ed3\u8bba\uff1a;GridBagConstraintsgridBagConstraints171=newGridBagConstraints;gridBagConstraints
171.anchor=GridBagConstraints.WEST;gridBagConstraints
171.gridwidth=2;gridBagConstraints
171.gridx=5;gridBagConstraints
171.gridy=0;gridBagConstraints
171.weightx=
0.6;gridBagConstraints
171.fill=GridBagConstraints.HORIZONTAL;GridBagConstraintsgridBagConstraints161=newGridBagConstraints;gridBagConstraints
161.gridx=4;gridBagConstraints
161.gridy=0;hjjeLabel=newJLabel;hjjeLabel.setText\u5408\u8ba1\u91d1\u989d\uff1a;GridBagConstraintsgridBagConstraints151=newGridBagConstraints;gridBagConstraints
151.fill=GridBagConstraints.HORIZONTAL;gridBagConstraints
151.gridy=0;gridBagConstraints
151.weightx=
1.0;gridBagConstraints
151.gridx=3;GridBagConstraintsgridBagConstraints141=newGridBagConstraints;gridBagConstraints
141.gridx=2;gridBagConstraints
141.gridy=0;hpzsLabel=newJLabel;hpzsLabel.setText\u8d27\u54c1\u603b\u6570\uff1a;GridBagConstraintsgridBagConstraints131=newGridBagConstraints;gridBagConstraints
131.fill=GridBagConstraints.HORIZONTAL;gridBagConstraints
131.gridy=0;gridBagConstraints
131.weightx=
1.0;gridBagConstraints
131.gridx=1;GridBagConstraintsgridBagConstraints121=newGridBagConstraints;gridBagConstraints
121.anchor=GridBagConstraints.WEST;gridBagConstraints
121.gridy=0;gridBagConstraints
121.gridx=0;pzslLabel=newJLabel;pzslLabel.setText\u54c1\u79cd\u6570\u91cf\uff1a;bottomPanel=newJPanel;bottomPanel.setLayoutnewGridBagLayout;bottomPanel.addpzslLabelgridBagConstraints121;bottomPanel.addgetPzslFieldgridBagConstraints131;bottomPanel.addhpzsLabelgridBagConstraints141;bottomPanel.addgetHpzsFieldgridBagConstraints151;bottomPanel.addhjjeLabelgridBagConstraints161;bottomPanel.addgetHjjeFieldgridBagConstraints171;bottomPanel.addysjlLabelgridBagConstraints181;bottomPanel.addgetYsjlFieldgridBagConstraints191;bottomPanel.addczyLabelgridBagConstraints201;bottomPanel.addgetCzyFieldgridBagConstraints2;bottomPanel.addgetTjButtongridBagConstraints221;bottomPanel.addgetRukuButtongridBagConstraints231;}returnbottomPanel;}/***初始化(品种数量)文本框的方法**@returnjavax.swing.JTextField*/privateJTextFieldgetPzslField{ifpzslField==null{pzslField=newJTextField;pzslField.setEditablefalse;}returnpzslField;}/***初始化(货品总数)文本框的方法**@returnjavax.swing.JTextField*/privateJTextFieldgetHpzsField{ifhpzsField==null{hpzsField=newJTextField;hpzsField.setEditablefalse;}returnhpzsField;}/***初始化(合计金额)文本框的方法**@returnjavax.swing.JTextField*/privateJTextFieldgetHjjeField{ifhjjeField==null{hjjeField=newJTextField;hjjeField.setEditablefalse;}returnhjjeField;}/***初始化(验收结论)文本框的方法**@returnjavax.swing.JTextField*/privateJTextFieldgetYsjlField{ifysjlField==null{ysjlField=newJTextField;}returnysjlField;}/***初始化(添加)按钮的方法**@returnjavax.swing.JButton*/privateJButtongetTjButton{iftjButton==null{tjButton=newJButton;tjButton.setText添加;tjButton.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{//初始化票号java.sql.Datedate=newjava.sql.DatejhsjDate.getTime;jhsjField.setTextdate.toString;StringmaxId=Dao.getRuKuMainMaxIddate;idField.setTextmaxId;//结束表格中没有编写的单元stopTableCellEditing;//如果表格中不包含空行,就添加新行forinti=0;i=table.getRowCount-1;i++{iftable.getValueAti0==nullreturn;}DefaultTableModelmodel=DefaultTableModeltable.getModel;model.addRownewVector;}};}returntjButton;}/***初始化(入库)按钮的方法**@returnjavax.swing.JButton*/privateJButtongetRukuButton{ifrukuButton==null{rukuButton=newJButton;rukuButton.setText入库;rukuButton.addActionListenernewjava.awt.event.ActionListener{publicvoidactionPerformedjava.awt.event.ActionEvente{stopTableCellEditing;//结束表格中没有编写的单元StringpzsStr=pzslField.getText;//品种数StringjeStr=hjjeField.getText;//合计金额StringjsfsStr=jsfsComboBox.getSelectedItem.toString;//结算方式StringjsrStr=jsrComboBox.getSelectedItem+;//经手人StringczyStr=jsrComboBox.getSelectedItem+;//操作员StringrkDate=jhsjField.getText;//入库时间StringysjlStr=ysjlField.getText.trim;//验收结论Stringid=idField.getText;//票号StringgysName=gysComboBox.getSelectedItem+;//供应商名ifjsrStr==null||jsrStr.isEmpty{JOptionPane.showMessageDialogJinHuoDan_IFrame.this请填写经手人;return;}ifysjlStr==null||ysjlStr.isEmpty{JOptionPane.showMessageDialogJinHuoDan_IFrame.this填写验收结论;return;}iftable.getRowCount=0{JOptionPane.showMessageDialogJinHuoDan_IFrame.this填加入库商品;return;}TbRukuMainruMain=newTbRukuMainidpzsStrjeStrysjlStrgysNamerkDateczyStrjsrStrjsfsStr;SetTbRukuDetailset=ruMain.getTabRukuDetails;introws=table.getRowCount;forinti=0;irows;i++{TbSpinfospinfo=TbSpinfotable.getValueAti0;ifspinfo==null||spinfo.getId==null||spinfo.getId.isEmptycontinue;StringdjStr=Stringtable.getValueAti6;StringslStr=Stringtable.getValueAti7;Doubledj=Double.valueOfdjStr;Integersl=Integer.valueOfslStr;TbRukuDetaildetail=newTbRukuDetail;detail.setTabSpinfospinfo.getId;detail.setTabRukuMainruMain.getRkId;detail.setDjdj;detail.setSlsl;set.adddetail;}booleanrs=Dao.insertRukuInforuMain;ifrs{JOptionPane.showMessageDialogJinHuoDan_IFrame.this入库完成;DefaultTableModeldftm=newDefaultTableModel;table.setModeldftm;pzslField.setText0;hpzsField.setText0;hjjeField.setText0;}}};}returnrukuButton;}/***初始化表格滚动面板的方法**@returnjavax.swing.JScrollPane*/privateJScrollPanegetTablePane{iftablePane==null{tablePane=newJScrollPane;tablePane.setViewportViewgetTable;}returntablePane;}/***初始化表格的方法**@returnjavax.swing.JTable*/privateJTablegetTable{iftable==null{String[]columnNames={商品名称商品编号产地单位规格包装单价数量批号批准文号};table=newJTable;table.setBorderBorderFactory.createBevelBorderBevelBorder.LOWERED;table.setShowGridtrue;table.setAutoResizeModeJTable.AUTO_RESIZE_OFF;DefaultTableModeltable.getModel.setColumnIdentifierscolumnNames;TableColumncolumn=table.getColumnModel.getColumn0;finalDefaultCellEditoreditor=newDefaultCellEditorgetSpComboBox;column.setCellEditoreditor;table.addPropertyChangeListenernewPropertyChangeListener{publicvoidpropertyChangejava.beans.PropertyChangeEvente{ife.getPropertyName.equalstableCellEditor{ComputeInfo;}}};}returntable;}/***初始化商品下拉选择框的方法**@returnjavax.swing.JComboBox*/privateJComboBoxgetSpComboBox{ifspComboBox==null{spComboBox=newJComboBox;spComboBox.addItemnewTbSpinfo;spComboBox.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{ResultSetset=Dao.queryselect*fromtb_spinfowheregysName=getGysComboBox.getSelectedItem+;updateSpComboBoxset;}}};spComboBox.addItemListenernewjava.awt.event.ItemListener{publicvoiditemStateChangedjava.awt.event.ItemEvente{TbSpinfoinfo=TbSpinfospComboBox.getSelectedItem;//如果选择有效就更新表格ifinfo!=nullinfo.getId!=null{updateTable;}}};}returnspComboBox;}/***更新商品下拉选择框的方法**@paramset JDBC返回的ResultSet结果集*/privatevoidupdateSpComboBoxResultSetset{try{whileset.next{TbSpinfospinfo=newTbSpinfo;spinfo.setIdset.getStringid.trim;spinfo.setSpnameset.getStringspname.trim;spinfo.setCdset.getStringcd.trim;spinfo.setJcset.getStringjc.trim;spinfo.setDwset.getStringdw.trim;spinfo.setGgset.getStringgg.trim;spinfo.setBzset.getStringbz.trim;spinfo.setPhset.getStringph.trim;spinfo.setPzwhset.getStringpzwh.trim;spinfo.setMemoset.getStringmemo.trim;spinfo.setGysnameset.getStringgysname.trim;DefaultComboBoxModelmodel=DefaultComboBoxModelspComboBox.getModel;ifmodel.getIndexOfspinfo0//下来选择框不包含该商品spComboBox.addItemspinfo;//则添加选项}}catchSQLExceptione1{e
1.printStackTrace;}}/***根据商品下拉框的选择,更新表格当前行的内容**@return无*/privatesynchronizedvoidupdateTable{TbSpinfospinfo=TbSpinfospComboBox.getSelectedItem;introw=table.getSelectedRow;ifrow=0spinfo!=null{table.setValueAtspinfo.getIdrow1;table.setValueAtspinfo.getCdrow2;table.setValueAtspinfo.getDwrow3;table.setValueAtspinfo.getGgrow4;table.setValueAtspinfo.getBzrow5;table.setValueAt0row6;table.setValueAt0row7;table.setValueAtspinfo.getPhrow8;table.setValueAtspinfo.getPzwhrow9;table.editCellAtrow6;}}/***初始化供应商下拉选择框的方法**@returnjavax.swing.JComboBox*/privateJComboBoxgetGysComboBox{ifgysComboBox==null{gysComboBox=newJComboBox;ListgysInfos=Dao.getGysInfos;forIteratoriter=gysInfos.iterator;iter.hasNext;{Listlist=Listiter.next;Itemitem=newItem;item.setIdlist.get
0.toString.trim;item.setNamelist.get
1.toString.trim;gysComboBox.addItemitem;}Itemitem=ItemgysComboBox.getSelectedItem;TbGysinfogysInfo=Dao.getGysInfoitem;getLxrField.setTextgysInfo.getLian;}returngysComboBox;}/***该方法用于停止表格单元的编辑*/privatevoidstopTableCellEditing{TableCellEditorcellEditor=table.getCellEditor;ifcellEditor!=nullcellEditor.stopCellEditing;}/***初始化(经手人)下来选择框的方法**@returnjavax.swing.JComboBox*/privateJComboBoxgetJsrComboBox{ifjsrComboBox==null{jsrComboBox=newJComboBox;ListListczyList=Dao.getJsrs;forListStringlist:czyList{Stringid=list.get0;Stringname=list.get1;Itemitem=newItemidname;item.setIdid+;item.setNamename;jsrComboBox.addItemitem;}}returnjsrComboBox;}/***@authorlzwJavabr*事件处理器,该处理器用于计算货品总数、合计金额等信息*/privatefinalvoidComputeInfo{//计算代码introws=table.getRowCount;intcount=0;doublemoney=
0.0;//计算品种数量TbSpinfocolumn=null;ObjectvalueAt=table.getValueAtrows-10;if!valueAtinstanceofTbSpinforeturn;ifrows0column=TbSpinfovalueAt;ifrows0column==null||column.getId.isEmptyrows--;//计算货品总数和金额forinti=0;irows;i++{Stringcolumn7=Stringtable.getValueAti7;Stringcolumn6=Stringtable.getValueAti6;intc7=column7==null||column
7.isEmpty0:Integer.parseIntcolumn7;floatc6=column6==null||column
6.isEmpty0:Float.parseFloatcolumn6;count+=c7;money+=c6*c7;}pzslField.setTextrows+;hpzsField.setTextcount+;hjjeField.setTextmoney+;}}//@jve:decl-index=0:visual-constraint=134程序运行界面如下
(4)销售单模块:主要实现代码如下packagecom.lzw.iframe;importjava.awt.*;importjava.awt.event.*;importjava.sql.*;importjava.util.*;importjava.util.Date;importjava.util.List;importjavax.swing.*;importjavax.swing.event.*;importjavax.swing.table.*;importcom.lzw.*;importcom.lzw.dao.Dao;importcom.lzw.dao.model.*;publicclassXiaoShouDanextendsJInternalFrame{privatefinalJTabletable;privatefinalJTextFieldsellDate=newJTextField;//销售日期privateJComboBoxjsr=null;//经手人privatefinalJComboBoxjsfs=newJComboBox;//计算方式privatefinalJTextFieldlian=newJTextField;//联系人privatefinalJComboBoxkehu=newJComboBox;//客户privatefinalJTextFieldpiaoHao=newJTextField;//票号privatefinalJTextFieldpzs=newJTextField0;//品种数量privatefinalJTextFieldhpzs=newJTextField0;//货品总数privatefinalJTextFieldhjje=newJTextField0;//合计金额privatefinalJTextFieldysjl=newJTextField;//验收结论privatefinalJTextFieldczy=newJTextField;//操作员privateDatejhsjDate;privateJComboBoxsp;publicXiaoShouDan{super;setMaximizabletrue;setIconifiabletrue;setClosabletrue;getContentPane.setLayoutnewGridBagLayout;setTitle销售单;setBounds5050700400;setupComponetnewJLabel销售票号0010false;piaoHao.setFocusablefalse;setupComponetpiaoHao101140true;setupComponetnewJLabel客户2010false;kehu.setPreferredSizenewDimension16021;//供应商下拉选择框的选择事件kehu.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{doKhSelectAction;}};setupComponetkehu3011true;setupComponetnewJLabel联系人4010false;lian.setFocusablefalse;lian.setPreferredSizenewDimension8021;setupComponetlian5010true;setupComponetnewJLabel结算方式0110false;jsfs.addItem现金;jsfs.addItem支票;jsfs.setEditabletrue;setupComponetjsfs1111true;setupComponetnewJLabel销售时间2110false;sellDate.setFocusablefalse;setupComponetsellDate3111true;setupComponetnewJLabel经手人4110false;setupComponetgetJsrComboBox5111true;sp=newJComboBox;sp.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{TbSpinfoinfo=TbSpinfosp.getSelectedItem;//如果选择有效就更新表格ifinfo!=nullinfo.getId!=null{updateTable;}}};table=newJTable;table.setAutoResizeModeJTable.AUTO_RESIZE_OFF;initTable;//添加事件完成品种数量、货品总数、合计金额的计算table.addContainerListenernewcomputeInfo;JScrollPanescrollPanel=newJScrollPanetable;scrollPanel.setPreferredSizenewDimension380200;setupComponetscrollPanel0261true;setupComponetnewJLabel品种数量0310false;pzs.setFocusablefalse;setupComponetpzs1311true;setupComponetnewJLabel货品总数2310false;hpzs.setFocusablefalse;setupComponethpzs3311true;setupComponetnewJLabel合计金额4310false;hjje.setFocusablefalse;setupComponethjje5311true;setupComponetnewJLabel验收结论0410false;setupComponetysjl1411true;setupComponetnewJLabel操作人员2410false;czy.setFocusablefalse;czy.setTextMainFrame.getCzyStateLabel.getText;setupComponetczy3411true;//单击添加按钮在表格中添加新的一行JButtontjButton=newJButton添加;tjButton.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{//初始化票号initPiaoHao;//结束表格中没有编写的单元stopTableCellEditing;//如果表格中还包含空行,就再添加新行forinti=0;itable.getRowCount;i++{TbSpinfoinfo=TbSpinfotable.getValueAti0;iftable.getValueAti0==nullreturn;}DefaultTableModelmodel=DefaultTableModeltable.getModel;model.addRownewVector;}};setupComponettjButton4411false;//单击销售按钮保存进货信息JButtonsellButton=newJButton销售;sellButton.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{stopTableCellEditing;//结束表格中没有编写的单元clearEmptyRow;//清除空行StringhpzsStr=hpzs.getText;//货品总数StringpzsStr=pzs.getText;//品种数StringjeStr=hjje.getText;//合计金额StringjsfsStr=jsfs.getSelectedItem.toString;//结算方式StringjsrStr=jsr.getSelectedItem+;//经手人StringczyStr=czy.getText;//操作员StringrkDate=jhsjDate.toLocaleString;//销售时间StringysjlStr=ysjl.getText.trim;//验收结论Stringid=piaoHao.getText;//票号StringkehuName=kehu.getSelectedItem.toString;//供应商名字ifjsrStr==null||jsrStr.isEmpty{JOptionPane.showMessageDialogXiaoShouDan.this请填写经手人;return;}ifysjlStr==null||ysjlStr.isEmpty{JOptionPane.showMessageDialogXiaoShouDan.this填写验收结论;return;}iftable.getRowCount=0{JOptionPane.showMessageDialogXiaoShouDan.this填加销售商品;return;}TbSellMainsellMain=newTbSellMainidpzsStrjeStrysjlStrkehuNamerkDateczyStrjsrStrjsfsStr;SetTbSellDetailset=sellMain.getTbSellDetails;introws=table.getRowCount;forinti=0;irows;i++{TbSpinfospinfo=TbSpinfotable.getValueAti0;StringdjStr=Stringtable.getValueAti6;StringslStr=Stringtable.getValueAti7;Doubledj=Double.valueOfdjStr;Integersl=Integer.valueOfslStr;TbSellDetaildetail=newTbSellDetail;detail.setSpidspinfo.getId;detail.setTbSellMainsellMain.getSellId;detail.setDjdj;detail.setSlsl;set.adddetail;}booleanrs=Dao.insertSellInfosellMain;ifrs{JOptionPane.showMessageDialogXiaoShouDan.this销售完成;DefaultTableModeldftm=newDefaultTableModel;table.setModeldftm;initTable;pzs.setText0;hpzs.setText0;hjje.setText0;}}};setupComponetsellButton5411false;//添加窗体监听器,完成初始化addInternalFrameListenernewinitTasks;}privateJComboBoxgetJsrComboBox{ifjsr==null{jsr=newJComboBox;ListListczyList=Dao.getJsrs;forListStringlist:czyList{Stringid=list.get0;Stringname=list.get1;Itemitem=newItemidname;item.setIdid+;item.setNamename;jsr.addItemitem;}}returnjsr;}//初始化表格privatevoidinitTable{String[]columnNames={商品名称商品编号供应商产地单位规格单价数量包装批号批准文号};DefaultTableModeltable.getModel.setColumnIdentifierscolumnNames;TableColumncolumn=table.getColumnModel.getColumn0;finalDefaultCellEditoreditor=newDefaultCellEditorsp;editor.setClickCountToStart2;column.setCellEditoreditor;}//初始化商品下拉选择框privatevoidinitSpBox{Listlist=newArrayList;ResultSetset=Dao.queryselect*fromtb_spinfo+whereidinselectidfromtb_kucunwherekcsl0;sp.removeAllItems;sp.addItemnewTbSpinfo;forinti=0;table!=nullitable.getRowCount;i++{TbSpinfotmpInfo=TbSpinfotable.getValueAti0;iftmpInfo!=nulltmpInfo.getId!=nulllist.addtmpInfo.getId;}try{whileset.next{TbSpinfospinfo=newTbSpinfo;spinfo.setIdset.getStringid.trim;//如果表格中以存在同样商品,商品下拉框中就不再包含该商品iflist.containsspinfo.getIdcontinue;spinfo.setSpnameset.getStringspname.trim;spinfo.setCdset.getStringcd.trim;spinfo.setJcset.getStringjc.trim;spinfo.setDwset.getStringdw.trim;spinfo.setGgset.getStringgg.trim;spinfo.setBzset.getStringbz.trim;spinfo.setPhset.getStringph.trim;spinfo.setPzwhset.getStringpzwh.trim;spinfo.setMemoset.getStringmemo.trim;spinfo.setGysnameset.getStringgysname.trim;sp.addItemspinfo;}}catchSQLExceptione{e.printStackTrace;}}//设置组件位置并添加到容器中privatevoidsetupComponetJComponentcomponentintgridxintgridyintgridwidthintipadxbooleanfill{finalGridBagConstraintsgridBagConstrains=newGridBagConstraints;gridBagConstrains.gridx=gridx;gridBagConstrains.gridy=gridy;ifgridwidth1gridBagConstrains.gridwidth=gridwidth;ifipadx0gridBagConstrains.ipadx=ipadx;gridBagConstrains.insets=newInsets5131;iffillgridBagConstrains.fill=GridBagConstraints.HORIZONTAL;getContentPane.addcomponentgridBagConstrains;}//供应商选择时更新联系人字段privatevoiddoKhSelectAction{Itemitem=Itemkehu.getSelectedItem;TbKhinfokhInfo=Dao.getKhInfoitem;lian.setTextkhInfo.getLian;}//在事件中计算品种数量、货品总数、合计金额privatefinalclasscomputeInfoimplementsContainerListener{publicvoidcomponentRemovedContainerEvente{//清除空行clearEmptyRow;//计算代码introws=table.getRowCount;intcount=0;doublemoney=
0.0;//计算品种数量TbSpinfocolumn=null;ifrows0column=TbSpinfotable.getValueAtrows-10;ifrows0column==null||column.getId.isEmptyrows--;//计算货品总数和金额forinti=0;irows;i++{Stringcolumn7=Stringtable.getValueAti7;Stringcolumn6=Stringtable.getValueAti6;intc7=column7==null||column
7.isEmpty0:Integer.valueOfcolumn7;Doublec6=column6==null||column
6.isEmpty0:Double.valueOfcolumn6;count+=c7;money+=c6*c7;}pzs.setTextrows+;hpzs.setTextcount+;hjje.setTextmoney+;///////////////////////////////////////////////////////////////////}publicvoidcomponentAddedContainerEvente{}}//窗体的初始化任务privatefinalclassinitTasksextendsInternalFrameAdapter{publicvoidinternalFrameActivatedInternalFrameEvente{super.internalFrameActivatede;initTimeField;initKehuField;initPiaoHao;initSpBox;}privatevoidinitKehuField{//初始化客户字段ListgysInfos=Dao.getKhInfos;forIteratoriter=gysInfos.iterator;iter.hasNext;{Listlist=Listiter.next;Itemitem=newItem;item.setIdlist.get
0.toString.trim;item.setNamelist.get
1.toString.trim;kehu.addItemitem;}doKhSelectAction;}privatevoidinitTimeField{//启动进货时间线程newThreadnewRunnable{publicvoidrun{try{whiletrue{jhsjDate=newDate;sellDate.setTextjhsjDate.toLocaleString;Thread.sleep100;}}catchInterruptedExceptione{e.printStackTrace;}}}.start;}}privatevoidinitPiaoHao{java.sql.Datedate=newjava.sql.DateSystem.currentTimeMillis;StringmaxId=Dao.getSellMainMaxIddate;piaoHao.setTextmaxId;}//根据商品下拉框的选择,更新表格当前行的内容privatesynchronizedvoidupdateTable{TbSpinfospinfo=TbSpinfosp.getSelectedItem;Itemitem=newItem;item.setIdspinfo.getId;TbKucunkucun=Dao.getKucunitem;introw=table.getSelectedRow;ifrow=0spinfo!=null{table.setValueAtspinfo.getIdrow1;table.setValueAtspinfo.getGysnamerow2;table.setValueAtspinfo.getCdrow3;table.setValueAtspinfo.getDwrow4;table.setValueAtspinfo.getGgrow5;table.setValueAtkucun.getDj+row6;table.setValueAtkucun.getKcsl+row7;table.setValueAtspinfo.getBzrow8;table.setValueAtspinfo.getPhrow9;table.setValueAtspinfo.getPzwhrow10;table.editCellAtrow7;}}//清除空行privatesynchronizedvoidclearEmptyRow{DefaultTableModeldftm=DefaultTableModeltable.getModel;forinti=0;itable.getRowCount;i++{TbSpinfoinfo2=TbSpinfotable.getValueAti0;ifinfo2==null||info
2.getId==null||info
2.getId.isEmpty{dftm.removeRowi;}}}//停止表格单元的编辑privatevoidstopTableCellEditing{TableCellEditorcellEditor=table.getCellEditor;ifcellEditor!=nullcellEditor.stopCellEditing;}}程序运行结果如下5库存盘点模块主要实现代码如下packagecom.lzw.iframe;importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjava.util.List;importjavax.swing.*;importjavax.swing.table.*;importcom.lzw.*;importcom.lzw.dao.Dao;importcom.lzw.dao.model.TbSpinfo;publicclassKuCunPanDianextendsJInternalFrame{privatefinalJTabletable;privatefinalJTextFieldpdsj=newJTextField;//进货时间privatefinalJTextFieldpzs=newJTextField0;//品种数量privateJTextFieldczy=newJTextField;//盘点员privateDatepdDate=newDate;publicKuCunPanDian{super;setMaximizabletrue;setIconifiabletrue;setClosabletrue;getContentPane.setLayoutnewGridBagLayout;setTitle库存盘点;setBounds5050750400;setupComponetnewJLabel操作员0010false;czy.setFocusablefalse;czy.setTextMainFrame.getCzyStateLabel.getText;czy.setPreferredSizenewDimension12021;setupComponetczy1010true;setupComponetnewJLabel盘点时间2010false;pdsj.setFocusablefalse;pdsj.setTextpdDate.toLocaleString;pdsj.setPreferredSizenewDimension18021;setupComponetpdsj3011true;setupComponetnewJLabel品种数4010false;pzs.setFocusablefalse;pzs.setPreferredSizenewDimension8021;setupComponetpzs50120true;table=newJTable;table.setAutoResizeModeJTable.AUTO_RESIZE_OFF;initTable;JScrollPanescrollPanel=newJScrollPanetable;scrollPanel.setPreferredSizenewDimension700300;setupComponetscrollPanel0261true;}//初始化表格privatevoidinitTable{String[]columnNames={商品名称商品编号供应商产地单位规格单价数量包装盘点数量损益数量};DefaultTableModeltableModel=DefaultTableModeltable.getModel;tableModel.setColumnIdentifierscolumnNames;//设置盘点字段只接收数字输入finalJTextFieldpdField=newJTextField0;pdField.setEditablefalse;pdField.addKeyListenernewPanDianKeyAdapterpdField;JTextFieldreadOnlyField=newJTextField0;readOnlyField.setEditablefalse;DefaultCellEditorpdEditor=newDefaultCellEditorpdField;DefaultCellEditorreadOnlyEditor=newDefaultCellEditorreadOnlyField;//设置表格单元为只读格式forinti=0;icolumnNames.length;i++{TableColumncolumn=table.getColumnModel.getColumni;column.setCellEditorreadOnlyEditor;}TableColumnpdColumn=table.getColumnModel.getColumn9;TableColumnsyColumn=table.getColumnModel.getColumn10;pdColumn.setCellEditorpdEditor;syColumn.setCellEditorreadOnlyEditor;//初始化表格内容ListkcInfos=Dao.getKucunInfos;forinti=0;ikcInfos.size;i++{Listinfo=ListkcInfos.geti;Itemitem=newItem;item.setIdStringinfo.get0;item.setNameStringinfo.get1;TbSpinfospinfo=Dao.getSpInfoitem;Object[]row=newObject[columnNames.length];ifspinfo.getId!=null!spinfo.getId.isEmpty{row
[0]=spinfo.getSpname;row
[1]=spinfo.getId;row
[2]=spinfo.getGysname;row
[3]=spinfo.getCd;row
[4]=spinfo.getDw;row
[5]=spinfo.getGg;row
[6]=info.get
2.toString;row
[7]=info.get
3.toString;row
[8]=spinfo.getBz;row
[9]=0;row
[10]=0;tableModel.addRowrow;StringpzsStr=pzs.getText;intpzsInt=Integer.parseIntpzsStr;pzsInt++;pzs.setTextpzsInt+;}}}//盘点字段的按键监听器privateclassPanDianKeyAdapterextendsKeyAdapter{privatefinalJTextFieldfield;privatePanDianKeyAdapterJTextFieldfield{this.field=field;}publicvoidkeyTypedKeyEvente{if0123456789+char
8.indexOfe.getKeyChar+0{e.consume;}field.setEditabletrue;}publicvoidkeyReleasedKeyEvente{StringpdStr=field.getText;StringkcStr=0;introw=table.getSelectedRow;ifrow=0{kcStr=Stringtable.getValueAtrow7;}try{intpdNum=Integer.parseIntpdStr;intkcNum=Integer.parseIntkcStr;ifrow=0{table.setValueAtkcNum-pdNumrow10;}ife.getKeyChar!=8field.setEditablefalse;}catchNumberFormatExceptione1{field.setText0;}}}//设置组件位置并添加到容器中privatevoidsetupComponetJComponentcomponentintgridxintgridyintgridwidthintipadxbooleanfill{finalGridBagConstraintsgridBagConstrains=newGridBagConstraints;gridBagConstrains.gridx=gridx;gridBagConstrains.gridy=gridy;ifgridwidth1gridBagConstrains.gridwidth=gridwidth;ifipadx0gridBagConstrains.ipadx=ipadx;gridBagConstrains.insets=newInsets5135;iffillgridBagConstrains.fill=GridBagConstraints.HORIZONTAL;getContentPane.addcomponentgridBagConstrains;}}程序运行结果如下6数据库备份与恢复模块主要程序代码如下packagecom.lzw.iframe;importjava.awt.*;importjava.awt.event.*;importjava.io.File;importjavax.swing.*;importjavax.swing.border.TitledBorder;importcom.lzw.dao.Dao;publicclassBackupAndRestoreextendsJInternalFrame{privateJPaneljContentPane=null;privateJPanelbackupPanel=null;privateJPanelrestorePanel=null;privateJTextFieldbackupTextField=null;privateJTextFieldrestoreTextField=null;privateJButtonbackupButton=null;privateJButtonbrowseButton1=null;privateJButtonbrowseButton2=null;privateJButtonrestoreButton=null;/***Thisisthexxxdefaultconstructor*/publicBackupAndRestore{super;initialize;}/***Thismethodinitializesthis**@returnvoid*/privatevoidinitialize{this.setSize475221;this.setIconifiabletrue;this.setClosabletrue;this.setTitle数据库备份与恢复;this.setContentPanegetJContentPane;}/***ThismethodinitializesjContentPane**@returnjavax.swing.JPanel*/privateJPanelgetJContentPane{ifjContentPane==null{jContentPane=newJPanel;jContentPane.setLayoutnewBoxLayoutgetJContentPaneBoxLayout.Y_AXIS;jContentPane.addgetBackupPanelnull;jContentPane.addgetRestorePanelnull;}returnjContentPane;}/***ThismethodinitializesbackupPanel**@returnjavax.swing.JPanel*/privateJPanelgetBackupPanel{ifbackupPanel==null{GridBagConstraintsgridBagConstraints2=newGridBagConstraints;gridBagConstraints
2.gridx=1;gridBagConstraints
2.anchor=GridBagConstraints.EAST;gridBagConstraints
2.weightx=
1.0;gridBagConstraints
2.insets=newInsets00010;gridBagConstraints
2.gridy=1;GridBagConstraintsgridBagConstraints1=newGridBagConstraints;gridBagConstraints
1.gridx=2;gridBagConstraints
1.anchor=GridBagConstraints.EAST;gridBagConstraints
1.gridy=1;GridBagConstraintsgridBagConstraints=newGridBagConstraints;gridBagConstraints.fill=GridBagConstraints.BOTH;gridBagConstraints.gridy=0;gridBagConstraints.weightx=
1.0;gridBagConstraints.gridwidth=2;gridBagConstraints.gridx=1;backupPanel=newJPanel;backupPanel.setLayoutnewGridBagLayout;backupPanel.setBorderBorderFactory.createTitledBordernull\u6570\u636e\u5e93\u5907\u4efdTitledBorder.DEFAULT_JUSTIFICATIONTitledBorder.DEFAULT_POSITIONnewFontDialogFont.BOLD12Color.blue;backupPanel.addgetBackupTextFieldgridBagConstraints;backupPanel.addgetBackupButtongridBagConstraints1;backupPanel.addgetBrowseButton1gridBagConstraints2;}returnbackupPanel;}/***ThismethodinitializesrestorePanel**@returnjavax.swing.JPanel*/privateJPanelgetRestorePanel{ifrestorePanel==null{GridBagConstraintsgridBagConstraints5=newGridBagConstraints;gridBagConstraints
5.gridx=1;gridBagConstraints
5.gridy=1;GridBagConstraintsgridBagConstraints4=newGridBagConstraints;gridBagConstraints
4.gridx=0;gridBagConstraints
4.weightx=
1.0;gridBagConstraints
4.anchor=GridBagConstraints.EAST;gridBagConstraints
4.insets=newInsets00010;gridBagConstraints
4.gridy=1;GridBagConstraintsgridBagConstraints3=newGridBagConstraints;gridBagConstraints
3.fill=GridBagConstraints.HORIZONTAL;gridBagConstraints
3.gridy=0;gridBagConstraints
3.weightx=
1.0;gridBagConstraints
3.gridwidth=2;gridBagConstraints
3.gridx=0;restorePanel=newJPanel;restorePanel.setLayoutnewGridBagLayout;restorePanel.setBorderBorderFactory.createTitledBordernull\u6570\u636e\u5e93\u6062\u590dTitledBorder.DEFAULT_JUSTIFICATIONTitledBorder.DEFAULT_POSITIONnewFontDialogFont.BOLD12Color.red;restorePanel.addgetRestoreTextFieldgridBagConstraints3;restorePanel.addgetBrowseButton2gridBagConstraints4;restorePanel.addgetRestoreButtongridBagConstraints5;}returnrestorePanel;}/***ThismethodinitializesbackupTextField**@returnjavax.swing.JTextField*/privateJTextFieldgetBackupTextField{ifbackupTextField==null{backupTextField=newJTextField;}returnbackupTextField;}/***ThismethodinitializesbackupButton**@returnjavax.swing.JButton*/privateJButtongetBackupButton{ifbackupButton==null{backupButton=newJButton;backupButton.setText备份K;backupButton.setMnemonicKeyEvent.VK_K;backupButton.addActionListenernewjava.awt.event.ActionListener{publicvoidactionPerformedActionEvente{Stringpath=backupTextField.getText;FilebackupFile=newFilepath;Stringsql=backupdatabasedb_Database28toDISK=+backupFile.getAbsolutePath+;try{Dao.restoreOrBackupsql;}catchExceptione1{e
1.printStackTrace;Stringmessage=e
1.getMessage;intindex=message.lastIndexOf];message=message.substringindex+1;JOptionPane.showMessageDialogBackupAndRestore.thismessage;return;}JOptionPane.showMessageDialogBackupAndRestore.this备份成功;}};}returnbackupButton;}/***ThismethodinitializesbrowseButton1**@returnjavax.swing.JButton*/privateJButtongetBrowseButton1{ifbrowseButton1==null{browseButton1=newJButton;browseButton
1.setText浏览B……;browseButton
1.setMnemonicKeyEvent.VK_B;browseButton
1.addActionListenernewjava.awt.event.ActionListener{publicvoidactionPerformedjava.awt.event.ActionEvente{JFileChooserdirChooser=newJFileChooser.;intoption=dirChooser.showSaveDialogBackupAndRestore.this;ifoption==JFileChooser.APPROVE_OPTION{FileselFile=dirChooser.getSelectedFile;backupTextField.setTextselFile.getAbsolutePath;}}};}returnbrowseButton1;}/***ThismethodinitializesrestoreTextField**@returnjavax.swing.JTextField*/privateJTextFieldgetRestoreTextField{ifrestoreTextField==null{restoreTextField=newJTextField;}returnrestoreTextField;}/***ThismethodinitializesbrowseButton2**@returnjavax.swing.JButton*/privateJButtongetBrowseButton2{ifbrowseButton2==null{browseButton2=newJButton;browseButton
2.setText浏览W……;browseButton
2.setMnemonicKeyEvent.VK_W;browseButton
2.addActionListenernewjava.awt.event.ActionListener{publicvoidactionPerformedjava.awt.event.ActionEvente{JFileChooserdirChooser=newJFileChooser.;intoption=dirChooser.showOpenDialogBackupAndRestore.this;ifoption==JFileChooser.APPROVE_OPTION{FileselFile=dirChooser.getSelectedFile;restoreTextField.setTextselFile.getAbsolutePath;}}};}returnbrowseButton2;}/***ThismethodinitializesrestoreButton**@returnjavax.swing.JButton*/privateJButtongetRestoreButton{ifrestoreButton==null{restoreButton=newJButton;restoreButton.setText恢复R;restoreButton.setMnemonicKeyEvent.VK_R;restoreButton.addActionListenernewjava.awt.event.ActionListener{publicvoidactionPerformedjava.awt.event.ActionEvente{Stringpath=restoreTextField.getText;ifpath==null||path.isEmptyreturn;FilerestoreFile=newFilepath;Stringsql=restoredatabasedb_Database28fromDISK=+restoreFile.getAbsolutePath+WITHREPLACE;try{Dao.restoreOrBackupsql;}catchExceptione1{e
1.printStackTrace;Stringmessage=e
1.getMessage;intindex=message.lastIndexOf];message=message.substringindex+1;JOptionPane.showMessageDialogBackupAndRestore.thismessage;return;}JOptionPane.showMessageDialogBackupAndRestore.this恢复成功;}};}returnrestoreButton;}}//@jve:decl-index=0:visual-constraint=1010运行界面如下5.系统发布方法用Eclipse打包发行四.结论经过三个人几个星期的努力,兰州华联超市进存销管理系统最终取得成功,开发的过程也是对我们所学知识的考察过程,在开发过程中我们借鉴了许多参考书,但同时我们也学到了许多课本上没学到的东西,在开发过程中也培养了我们的团队合作精神在开发过程中遇到的最大问题是数据库的连接问题由于设计的数据库表比较多,在连接和导入的过程中出现了许多的问题主要有以下一些问题1数据库无法访问这个问题经我们在上网查找后发现是由于SQLServer2000的数据库没有安装SP3或SP4补丁,导致数据库无法访问造成的,我们下载安装了相应的补丁后解决了无法访问的问题2打包的JAR文件无法登陆查阅了相关资料后发现,该问题是由于打包后的JAR文件没有创建lib文件夹,或者lib文件夹中没有数据库驱动类造成的解决办法是在“C\Project”文件夹创建lib文件夹并复制JDBC驱动类的JAR文件到该文件夹中,就可以解决该问题3数据库还原不成功该错误提示主要是由于本系统的数据库正在使用而引起的解决办法是执行数据备份与恢复的SQL命令时,关闭原有数据库连接,创建SQLServer2000数据库的其他链接对象4数据库只读在程序能够正常运行,添加数据库之后在数据库中没有记录Eclipse提示未能在数据库中运行,因为该数据库是只读的该问题解决的办法是先将数据库分离,然后去掉数据库文件的只读属性,并重新附加数据库就可以了其他问题还有1无法打开内部窗体该问题是由于JInterlFrame内部窗体默认Visible属性为false,需要调用内部窗体对象SetVisible方法,将属性设置为true就可以了2“关于”界面被其他窗体覆盖这是由于内部窗体在JDesktopPanel桌面面板中是分层存放的,如果将其它组件添加到该面板中,也同样会分层存放,不同的曾决定了窗体的覆盖级别要想使内部窗体或其他组件先是在最顶层,需要调用桌面面板SetLayer方法设置组建的层次,可以设置为整数的最大值,是组件显示在最顶层3打成JRA后无法运行将java程序打包成可执行的JAR文件,需要编写MANIFEST.MF清单文件,该文件需要设置Main-Class属性指定程序的主类,既包含main入口方法的类,如果没有指定主类,该文件是无法运行的可在清单文件中添加Main-Claaa:com.lzw.MainFrame五.参考文献
[1]李钟尉,马文强,陈丹丹等编著.清华大学出版社,2008年
[2]周亚辉,Java数据库系统项目开发实践,科学出版社,2009年
[1]耿祥义,张跃平.《Java课程设计》.清华大学出版社,2006年。