当前位置:首页 > 企业进销存管理系统 课程设计 软件工程
loginButton = new JButton(); loginButton.setBounds(new Rectangle(109, 114, 48, 20)); loginButton.setIcon(new ImageIcon(getClass().getResource(
\)));
loginButton.addActionListener(new ActionListener() { publicvoid actionPerformed(ActionEvent e) { try {
userStr = userField.getText();
String passStr = new String(passwordField .getPassword());
if (!Dao.checkLogin(userStr, passStr)) {
JOptionPane.showMessageDialog(LoginDialog.this,
\用户名与密码无法登录\, \登录失败\, JOptionPane.ERROR_MESSAGE); return; }
} catch (Exception e1) { e1.printStackTrace(); }
mainFrame.setDefaultCloseOperation(EXIT_ON_CLOSE); mainFrame.setVisible(true);
MainFrame.getCzyStateLabel().setText(userStr); setVisible(false); } }); }
returnloginButton; }
3.5系统主窗体设计 1.设计菜单栏
本系统的菜单栏是由MenuBar类实现的,该类是一个自定义菜单栏类,它继承JMenuBar类成为Swing的菜单栏组件。下面以创建进货单菜单为例,。
(1)创建MenuBar类,该类继承javax.swing.JMenuBar类,并且在该类中定义一个私有的成员变量,类型为JMenu,用于表示菜单对象。
(2)编写一个名称为getJinhuo_Menu()的方法,该方法的返回值为一个JMenu对象,也就是一个菜单对象。在该方法中,当进货菜单对象为null时,创建一个菜单对象,并为其设置菜单名和快捷键。
(3)编写一个初始化菜单栏界面的方法initialize(),在该方法中,首先设置组件的尺寸,然后调用JMenuBar对象的add()方法向菜单栏中添加一个菜单。 (4)编写以下构造方法,用于调用初始化菜单栏界面。
(5)在MenuBar类,再创建一个JMenuItem类型的成员变量jinhuoItem,表示进货菜单项。
(6)编写一个名称为getJinhuoItem()的方法,该方法的返回值为一个JMenuItem对象,也就是一个菜单项对象。在该方法中,当进货单菜单项对象为null时,创建一个菜单项对象,并为其设置菜单项名、图标和动作事件监听器。(7)按照步骤(5)和步骤(6)的方法再创建一个进货退货菜单项对象,名称为jinhuo_tuihuoItem。
(8)在getJinhuo_Menu()方法中,应用JMenu对象的add()方法向菜单中添加菜单项。
2.设计工具栏
工具栏用于放置常用命令按钮,如进货单、销售单、库存盘点等。
向本系统中添加工具栏的方法和添加菜单栏的方法类似,也需要继承Swing的JTool组件编写自己的工具栏。当然,也可以直接使用Swing的JTool组件。组件的initialize()方法用于初始化工具栏的程序界面。
3.设计状态栏
本系统的状态栏显示了当前选择的功能窗体、登录用户名、当前日期和本系统所属公司,即版权所有者等信息,如下图所示。
3.6销售单模块设计 1.设计销售窗体 2.添加销售商品
在销售单窗体中单击“添加”按钮,将向table表格中添加新的空行,操作员可以在空行的第一列字段的商品下拉列表框中选择销售的商品,这个下拉列表框和进货单窗体的不同,它不是根据供应商字段确定选择框内容,而是包含了数据库中所有可以销售的商品。要实现添加销售商品功能,需要为“添加”按钮添加动作监听器,在监听器中实现相应的业务逻辑。
3.销售统计
和进货单的统计功能类似,销售单也需要统计功能,统计的内容包括货品数量、品种数量、合计金额等信息,实现方式也是通过table表格的事件监听器来处理相应的统计业务,但是销售单窗体使用的不是PropertyChangeListener属性改变事件监听器,而是使用ContainerListener容器监听器。 4.商品销售
在销售单窗体中添加完销售商品之后,单击“销售”按钮,将完成本次销售单的销售业务。系统会记录本次销售信息,并从库存表中扣除销售的商品数量。这些业务处理都是在“销售”按钮的动作监听器中完成的,该监听器需要获取销售单窗体中的所有销售信息和商品信息,将所有商品信息封装为销售明细表的模型对象,并将这些模型对象放到一个集合中,然后调用Dao公共类的insertSellInfo()方法将该集合与销售主表的模型对象保存到数据库中。
初始化表格代码:
privatevoid initTable() {
String[] columnNames = { \商品名称\, \商品编号\, \供应商\, \产地\, \单位\, \规格\, \单价\,
\数量\, \包装\, \批号\, \批准文号\ }; ((DefaultTableModel) table.getModel()) .setColumnIdentifiers(columnNames);
TableColumn column = table.getColumnModel().getColumn(0); final DefaultCellEditor editor = new DefaultCellEditor(sp); editor.setClickCountToStart(2); column.setCellEditor(editor); }
初始化商品下拉框:
privatevoid initSpBox() {
Listlist = newArrayList(); ResultSet set = Dao.query(\ + \kcsl>0)\);
sp.removeAllItems();
sp.addItem(new TbSpinfo()); for (inti = 0; table != null&&i
TbSpinfo tmpInfo = (TbSpinfo) table.getValueAt(i, 0); if (tmpInfo != null&&tmpInfo.getId() != null) list.add(tmpInfo.getId()); }
try {
while (set.next()) {
TbSpinfo spinfo = new TbSpinfo();
spinfo.setId(set.getString(\).trim()); if (list.contains(spinfo.getId())) continue;
spinfo.setSpname(set.getString(\).trim()); spinfo.setCd(set.getString(\).trim()); spinfo.setJc(set.getString(\).trim()); spinfo.setDw(set.getString(\).trim()); spinfo.setGg(set.getString(\).trim()); spinfo.setBz(set.getString(\).trim()); spinfo.setPh(set.getString(\).trim());
spinfo.setPzwh(set.getString(\).trim()); spinfo.setMemo(set.getString(\).trim());
spinfo.setGysname(set.getString(\).trim()); sp.addItem(spinfo); }
} catch (SQLException e) { e.printStackTrace(); } }
在事件中计算品种数量、货品总数、合计金额
privatefinalclass computeInfo implements ContainerListener { publicvoid componentRemoved(ContainerEvent e) { // 清除空行
clearEmptyRow(); // 计算代码
introws = table.getRowCount(); intcount = 0;
doublemoney = 0.0;
共分享92篇相关文档