Merge pull request '进货管理页面' (#3) from lcm into master

Reviewed-on: #3
This commit is contained in:
lcm
2025-09-19 02:46:41 +00:00
5 changed files with 220 additions and 23 deletions

View File

@@ -27,22 +27,20 @@ public class Home extends JFrame implements ActionListener {
InventoryMenuItem.addActionListener(this); InventoryMenuItem.addActionListener(this);
SalesMenuItem.addActionListener(this); SalesMenuItem.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,500,500); setSize(500,500);
setLocationRelativeTo(null);
setVisible(true); setVisible(true);
} }
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if(e.getSource()==StockMenuItem){ if(e.getSource()==StockMenuItem){
new StockProductManagement(); new StockProductManagement();
this.setVisible(false);
} }
if(e.getSource()==InventoryMenuItem){ if(e.getSource()==InventoryMenuItem){
new InventoryProductManagement(); new InventoryProductManagement();
this.setVisible(false);
} }
if(e.getSource()==SalesMenuItem){ if(e.getSource()==SalesMenuItem){
new SalesProductManagement(); new SalesProductManagement();
this.setVisible(false);
} }
} }
} }

View File

@@ -1,4 +1,170 @@
package com.example; 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();
}
} }

View File

@@ -10,10 +10,10 @@ import java.util.Random;
public class Main extends JFrame implements ActionListener { public class Main extends JFrame implements ActionListener {
JButton jb1,jb2; JButton jb1,jb2,jb3;
JTextField tf1,tf3; JTextField tf1,tf3;
JPasswordField tf2; JPasswordField tf2;
JLabel jl1,jl2,jl3,jl4,jl5; JLabel jl1,jl2,jl3,jl4;
Random rand = new Random(); Random rand = new Random();
Main(){ Main(){
super("登录"); super("登录");
@@ -26,18 +26,21 @@ public class Main extends JFrame implements ActionListener {
jl2=new JLabel("密码",JLabel.CENTER); jl2=new JLabel("密码",JLabel.CENTER);
jl3=new JLabel("验证码",JLabel.CENTER); jl3=new JLabel("验证码",JLabel.CENTER);
jl4=new JLabel("验证码:",JLabel.CENTER); jl4=new JLabel("验证码:",JLabel.CENTER);
jl5=new JLabel("",JLabel.CENTER); jb3=new JButton("");
jb1.addActionListener(this); jb1.addActionListener(this);
jb2.addActionListener(this); jb2.addActionListener(this);
jb3.addActionListener(this);
setLayout(new GridLayout(5,2)); setLayout(new GridLayout(5,2));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(jl1);add(tf1); add(jl1);add(tf1);
add(jl2);add(tf2); add(jl2);add(tf2);
add(jl3);add(tf3); add(jl3);add(tf3);
add(jl4);add(jl5); add(jl4);add(jb3);
add(jb1);add(jb2); add(jb1);add(jb2);
jl5.setText(Integer.toString(rand.nextInt(100)+100)); jb3.setText(Integer.toString(rand.nextInt(100)+100));
setBounds(500,100,500,500); setSize(500,500);
setLocationRelativeTo(null);
setVisible(true); 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()+"'"; ; String sql = "select * from user where username='"+tf1.getText()+"' and password='"+tf2.getText()+"'"; ;
try { try {
ResultSet rs = jdbc.query(sql); ResultSet rs = jdbc.query(sql);
if(rs.next()&&tf3.getText().equals(jb3.getText())) {
if(rs.next()&&tf3.getText().equals(jl5.getText())) {
JOptionPane.showMessageDialog(null, "登录成功"); JOptionPane.showMessageDialog(null, "登录成功");
new Home(); new Home();
this.setVisible(false); this.setVisible(false);
} }
else{ else{
JOptionPane.showMessageDialog(null,"登录失败"); JOptionPane.showMessageDialog(null,"登录失败");
jl5.setText(Integer.toString(rand.nextInt(100)+100)); jb3.setText(Integer.toString(rand.nextInt(100)+100));
} }
} catch (SQLException ex) { } catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"出现错误");
throw new RuntimeException(ex); throw new RuntimeException(ex);
} }
}else if(e.getSource()==jb2){ }else if(e.getSource()==jb2){
System.exit(0); System.exit(0);
}else if(e.getSource()==jb3){
jb3.setText(Integer.toString(rand.nextInt(100)+100));
} }
} }
public static void main(String[] args) { public static void main(String[] args) {
new Main(); new Main();
} }
} }

View File

@@ -71,7 +71,6 @@ public class SalesProductManagement extends JFrame implements ActionListener {
setSize(500,500); setSize(500,500);
setLocationRelativeTo(null); setLocationRelativeTo(null);
setVisible(true); setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 添加窗口关闭功能
} }
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {

View File

@@ -14,7 +14,7 @@ public class StockProductManagement extends JFrame implements ActionListener {
JMenu menu; JMenu menu;
JMenuItem menuItem1,menuItem2,menuItem3; JMenuItem menuItem1,menuItem2,menuItem3;
private JTable table; private JTable table;
private final DefaultTableModel tableModel; private DefaultTableModel tableModel;
StockProductManagement() { StockProductManagement() {
super("库存商品信息管理"); super("库存商品信息管理");
menuBar = new JMenuBar(); menuBar = new JMenuBar();
@@ -29,13 +29,42 @@ public class StockProductManagement extends JFrame implements ActionListener {
menuItem1.addActionListener(this); menuItem1.addActionListener(this);
menuItem2.addActionListener(this); menuItem2.addActionListener(this);
// menuItem3.addActionListener(this); // menuItem3.addActionListener(this);
setBounds(100,100,500,500); setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null);
// 表头 // 表头
String[] columnNames = {"商品名称", "商品数量", "进货单价", "销售单价", "单个利润", "售数量"}; String[] columnNames = {"商品名称", "商品数量", "进货单价", "销售单价", "单个利润","售数量"};
tableModel = new DefaultTableModel(columnNames, 0); tableModel = new DefaultTableModel(columnNames, 0){
@Override
public boolean isCellEditable(int row, int column) {
return column == 5;
}
};
table = new JTable(tableModel); 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); JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane, BorderLayout.CENTER); add(scrollPane, BorderLayout.CENTER);
@@ -80,7 +109,7 @@ public class StockProductManagement extends JFrame implements ActionListener {
// 调用数据库添加方法 // 调用数据库添加方法
Jdbc jdbc = new Jdbc(); Jdbc jdbc = new Jdbc();
try { 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(); jdbc.close();
// 刷新数据 // 刷新数据
loadData(); loadData();
@@ -99,6 +128,7 @@ public class StockProductManagement extends JFrame implements ActionListener {
} }
}); });
frame.setSize(300, 200); frame.setSize(300, 200);
setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true); frame.setVisible(true);
} }
@@ -140,6 +170,7 @@ public class StockProductManagement extends JFrame implements ActionListener {
} }
}); });
frame.setSize(300, 200); frame.setSize(300, 200);
setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true); frame.setVisible(true);
} }
@@ -159,7 +190,6 @@ public class StockProductManagement extends JFrame implements ActionListener {
rs.getDouble("purchase_price"), rs.getDouble("purchase_price"),
rs.getDouble("selling_price"), rs.getDouble("selling_price"),
rs.getDouble("profit"), rs.getDouble("profit"),
rs.getInt("quantity_sold")
}; };
tableModel.addRow(row); tableModel.addRow(row);
} }