From 0da7bd8cd6c9624d189d0861d22f8ca35f35bc07 Mon Sep 17 00:00:00 2001 From: lu <2066448475@qq.com> Date: Fri, 19 Sep 2025 10:45:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E8=B4=A7=E7=AE=A1=E7=90=86=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/Home.java | 6 +- .../example/InventoryProductManagement.java | 168 +++++++++++++++++- src/main/java/com/example/Main.java | 24 +-- .../com/example/SalesProductManagement.java | 1 - .../com/example/StockProductManagement.java | 44 ++++- 5 files changed, 220 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/example/Home.java b/src/main/java/com/example/Home.java index 50d58b8..acd3bb2 100644 --- a/src/main/java/com/example/Home.java +++ b/src/main/java/com/example/Home.java @@ -27,22 +27,20 @@ public class Home extends JFrame implements ActionListener { InventoryMenuItem.addActionListener(this); SalesMenuItem.addActionListener(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setBounds(100,100,500,500); + setSize(500,500); + setLocationRelativeTo(null); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==StockMenuItem){ new StockProductManagement(); - this.setVisible(false); } if(e.getSource()==InventoryMenuItem){ new InventoryProductManagement(); - this.setVisible(false); } if(e.getSource()==SalesMenuItem){ new SalesProductManagement(); - this.setVisible(false); } } } diff --git a/src/main/java/com/example/InventoryProductManagement.java b/src/main/java/com/example/InventoryProductManagement.java index e8a2b4f..3eeae47 100644 --- a/src/main/java/com/example/InventoryProductManagement.java +++ b/src/main/java/com/example/InventoryProductManagement.java @@ -1,4 +1,170 @@ package com.example; -public class InventoryProductManagement { +import javax.swing.*; +import javax.swing.table.DefaultTableModel; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class InventoryProductManagement extends JFrame implements ActionListener { + JMenuBar menuBar; + JMenu menu; + JMenuItem menuItem1,menuItem2,menuItem3; + private JTable table; + private DefaultTableModel tableModel; + InventoryProductManagement() { + super("进货信息管理"); + menuBar = new JMenuBar(); + setJMenuBar(menuBar); + menu = new JMenu("菜单"); + menuBar.add(menu); + menuItem1 = new JMenuItem("添加商品"); + menuItem2 = new JMenuItem("删除商品"); + menu.add(menuItem1); + menu.add(menuItem2); +// menu.add(menuItem3); + menuItem1.addActionListener(this); + menuItem2.addActionListener(this); +// menuItem3.addActionListener(this); + setSize(500,500); + setLocationRelativeTo(null); + // 表头 + String[] columnNames = {"商品名称", "商品数量", "进货单价"}; + tableModel = new DefaultTableModel(columnNames, 0); + table = new JTable(tableModel); + + // 滚动面板 + JScrollPane scrollPane = new JScrollPane(table); + add(scrollPane, BorderLayout.CENTER); + + // 初始化加载数据库数据 + loadData(); + setVisible(true); + } + + private void loadData() { + Jdbc jdbc = new Jdbc(); + try { + ResultSet rs = jdbc.query("SELECT name,count,purchase_price,selling_price,profit,quantity_sold FROM commodity"); + // 清空旧数据 + tableModel.setRowCount(0); + // 填充新数据 + while (rs.next()) { + Object[] row = { + rs.getString("name"), + rs.getInt("count"), + rs.getDouble("purchase_price"), + }; + tableModel.addRow(row); + } + rs.close(); + jdbc.close(); + } catch (SQLException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(this, "加载数据失败: " + e.getMessage()); + } + } + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == menuItem1) { + JFrame frame = new JFrame(); + frame.setTitle("添加商品"); + frame.setLayout(new GridLayout(4, 2)); + JLabel nameLabel = new JLabel("商品名称:"); + JTextField nameField = new JTextField(); + JLabel countLabel = new JLabel("商品数量:"); + JTextField countField = new JTextField(); + JLabel purchasePriceLabel = new JLabel("进货单价:"); + JTextField purchasePriceField = new JTextField(); + JButton addButton = new JButton("添加"); + JButton cancelButton = new JButton("取消"); + frame.add(nameLabel); + frame.add(nameField); + frame.add(countLabel); + frame.add(countField); + frame.add(purchasePriceLabel); + frame.add(purchasePriceField); + frame.add(addButton); + frame.add(cancelButton); + addButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String name = nameField.getText(); + int count = Integer.parseInt(countField.getText()); + double purchasePrice = Double.parseDouble(purchasePriceField.getText()); + // 调用数据库添加方法 + Jdbc jdbc = new Jdbc(); + try { + jdbc.update("INSERT INTO commodity (name, count, purchase_price, quantity_sold) VALUES ('" + name + "', " + count + ", " + purchasePrice + ", " + 0 + ");"); + jdbc.close(); + // 刷新数据 + loadData(); + // 关闭弹窗 + frame.dispose(); + } catch (SQLException ex) { + ex.printStackTrace(); + JOptionPane.showMessageDialog(frame, "添加商品失败: " + ex.getMessage()); + } + } + }); + cancelButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + frame.dispose(); + } + }); + frame.setSize(300, 200); + frame.setLocationRelativeTo(null); + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + frame.setVisible(true); + } + else if (e.getSource() == menuItem2) { + JFrame frame = new JFrame(); + frame.setTitle("删除商品"); + frame.setLayout(new GridLayout(2, 2)); + JLabel nameLabel = new JLabel("商品名称:"); + JTextField nameField = new JTextField(); + JButton deleteButton = new JButton("删除"); + JButton cancelButton = new JButton("取消"); + frame.add(nameLabel); + frame.add(nameField); + frame.add(deleteButton); + frame.add(cancelButton); + deleteButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String name = nameField.getText(); + // 调用数据库删除方法 + Jdbc jdbc = new Jdbc(); + try { + jdbc.update("DELETE FROM commodity WHERE name='" + name + "'"); + jdbc.close(); + // 刷新数据 + loadData(); + // 关闭弹窗 + frame.dispose(); + } catch (SQLException ex) { + ex.printStackTrace(); + JOptionPane.showMessageDialog(frame, "删除商品失败: " + ex.getMessage()); + } + } + }); + cancelButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + frame.dispose(); + } + }); + frame.setSize(300, 200); + frame.setLocationRelativeTo(null); + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + frame.setVisible(true); + } + } + public static void main(String[] args) { + new InventoryProductManagement(); + } } diff --git a/src/main/java/com/example/Main.java b/src/main/java/com/example/Main.java index 1b7399b..b855db3 100644 --- a/src/main/java/com/example/Main.java +++ b/src/main/java/com/example/Main.java @@ -10,10 +10,10 @@ import java.util.Random; public class Main extends JFrame implements ActionListener { - JButton jb1,jb2; + JButton jb1,jb2,jb3; JTextField tf1,tf3; JPasswordField tf2; - JLabel jl1,jl2,jl3,jl4,jl5; + JLabel jl1,jl2,jl3,jl4; Random rand = new Random(); Main(){ super("登录"); @@ -26,18 +26,21 @@ public class Main extends JFrame implements ActionListener { jl2=new JLabel("密码",JLabel.CENTER); jl3=new JLabel("验证码",JLabel.CENTER); jl4=new JLabel("验证码:",JLabel.CENTER); - jl5=new JLabel("",JLabel.CENTER); + jb3=new JButton(""); jb1.addActionListener(this); jb2.addActionListener(this); + jb3.addActionListener(this); setLayout(new GridLayout(5,2)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); add(jl1);add(tf1); add(jl2);add(tf2); add(jl3);add(tf3); - add(jl4);add(jl5); + add(jl4);add(jb3); add(jb1);add(jb2); - jl5.setText(Integer.toString(rand.nextInt(100)+100)); - setBounds(500,100,500,500); + jb3.setText(Integer.toString(rand.nextInt(100)+100)); + setSize(500,500); + setLocationRelativeTo(null); + setVisible(true); } @@ -49,26 +52,27 @@ public class Main extends JFrame implements ActionListener { String sql = "select * from user where username='"+tf1.getText()+"' and password='"+tf2.getText()+"'"; ; try { ResultSet rs = jdbc.query(sql); - - if(rs.next()&&tf3.getText().equals(jl5.getText())) { + if(rs.next()&&tf3.getText().equals(jb3.getText())) { JOptionPane.showMessageDialog(null, "登录成功"); new Home(); this.setVisible(false); } else{ JOptionPane.showMessageDialog(null,"登录失败"); - jl5.setText(Integer.toString(rand.nextInt(100)+100)); + jb3.setText(Integer.toString(rand.nextInt(100)+100)); } } catch (SQLException ex) { + JOptionPane.showMessageDialog(null,"出现错误"); throw new RuntimeException(ex); } }else if(e.getSource()==jb2){ System.exit(0); + }else if(e.getSource()==jb3){ + jb3.setText(Integer.toString(rand.nextInt(100)+100)); } } public static void main(String[] args) { new Main(); } - } \ No newline at end of file diff --git a/src/main/java/com/example/SalesProductManagement.java b/src/main/java/com/example/SalesProductManagement.java index 2c1dbaf..cc88784 100644 --- a/src/main/java/com/example/SalesProductManagement.java +++ b/src/main/java/com/example/SalesProductManagement.java @@ -71,7 +71,6 @@ public class SalesProductManagement extends JFrame implements ActionListener { setSize(500,500); setLocationRelativeTo(null); setVisible(true); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 添加窗口关闭功能 } @Override public void actionPerformed(ActionEvent e) { diff --git a/src/main/java/com/example/StockProductManagement.java b/src/main/java/com/example/StockProductManagement.java index ad244d2..997da60 100644 --- a/src/main/java/com/example/StockProductManagement.java +++ b/src/main/java/com/example/StockProductManagement.java @@ -14,7 +14,7 @@ public class StockProductManagement extends JFrame implements ActionListener { JMenu menu; JMenuItem menuItem1,menuItem2,menuItem3; private JTable table; - private final DefaultTableModel tableModel; + private DefaultTableModel tableModel; StockProductManagement() { super("库存商品信息管理"); menuBar = new JMenuBar(); @@ -29,13 +29,42 @@ public class StockProductManagement extends JFrame implements ActionListener { menuItem1.addActionListener(this); menuItem2.addActionListener(this); // menuItem3.addActionListener(this); - setBounds(100,100,500,500); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(500,500); + setLocationRelativeTo(null); + // 表头 - String[] columnNames = {"商品名称", "商品数量", "进货单价", "销售单价", "单个利润", "已售数量"}; - tableModel = new DefaultTableModel(columnNames, 0); + String[] columnNames = {"商品名称", "商品数量", "进货单价", "销售单价", "单个利润","销售数量"}; + tableModel = new DefaultTableModel(columnNames, 0){ + @Override + public boolean isCellEditable(int row, int column) { + return column == 5; + } + }; table = new JTable(tableModel); + // 监听单元格编辑完成事件,自动更新数据库 + table.getModel().addTableModelListener(e -> { + int row = e.getFirstRow(); + int column = e.getColumn(); + + if (column == 5) { // 销售数量列 + String name = (String) tableModel.getValueAt(row, 0); // 商品名称 + Object value = tableModel.getValueAt(row, column); + + if (value != null && !value.toString().trim().isEmpty()) { + try { + int quantitySold = Integer.parseInt(value.toString().trim()); + Jdbc jdbc = new Jdbc(); + jdbc.update("UPDATE commodity SET quantity_sold=" + quantitySold + " WHERE name='" + name + "'"); + jdbc.close(); + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, "更新销售数量失败: " + ex.getMessage()); + } + } + } + }); + + // 滚动面板 JScrollPane scrollPane = new JScrollPane(table); add(scrollPane, BorderLayout.CENTER); @@ -80,7 +109,7 @@ public class StockProductManagement extends JFrame implements ActionListener { // 调用数据库添加方法 Jdbc jdbc = new Jdbc(); try { - jdbc.update("INSERT INTO commodity (name, count, purchase_price, selling_price, profit, quantity_sold) VALUES ('" + name + "', " + count + ", " + purchasePrice + ", " + sellingPrice + ", " + (sellingPrice - purchasePrice) + ", 0)"); + jdbc.update("INSERT INTO commodity (name, count, purchase_price, selling_price, profit) VALUES ('" + name + "', " + count + ", " + purchasePrice + ", " + sellingPrice + ", " + (sellingPrice - purchasePrice) + ", 0);"); jdbc.close(); // 刷新数据 loadData(); @@ -99,6 +128,7 @@ public class StockProductManagement extends JFrame implements ActionListener { } }); frame.setSize(300, 200); + setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setVisible(true); } @@ -140,6 +170,7 @@ public class StockProductManagement extends JFrame implements ActionListener { } }); frame.setSize(300, 200); + setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setVisible(true); } @@ -159,7 +190,6 @@ public class StockProductManagement extends JFrame implements ActionListener { rs.getDouble("purchase_price"), rs.getDouble("selling_price"), rs.getDouble("profit"), - rs.getInt("quantity_sold") }; tableModel.addRow(row); }