From 9c2c34ed94ff4c6bd72caa737c438bc73e7d921d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E9=83=91=E4=BA=A6=E6=AD=86=E2=80=9D?= <“kttsj2257wy@163.com”> Date: Thu, 12 Dec 2024 10:39:53 +0800 Subject: [PATCH 1/4] branch --- branch_zyx/ChangeStatusDialog.java | 189 +++++ branch_zyx/ChangeSumDialog.java | 186 +++++ branch_zyx/InDialog.java | 230 ++++++ branch_zyx/InOrder.java | 62 ++ branch_zyx/InOrderTM.java | 124 ++++ branch_zyx/InRecord.java | 35 + branch_zyx/InRecordTM.java | 93 +++ branch_zyx/InTableModel.java | 106 +++ branch_zyx/InView.java | 716 +++++++++++++++++++ branch_zyx/MainView.java | 702 ++++++++++++++++++ branch_zyx/My_branch/ChangeStatusDialog.java | 189 +++++ branch_zyx/My_branch/ChangeSumDialog.java | 186 +++++ branch_zyx/My_branch/InDialog.java | 230 ++++++ branch_zyx/My_branch/InOrder.java | 62 ++ branch_zyx/My_branch/InOrderTM.java | 124 ++++ branch_zyx/My_branch/InRecord.java | 35 + branch_zyx/My_branch/InRecordTM.java | 93 +++ branch_zyx/My_branch/InTableModel.java | 106 +++ branch_zyx/My_branch/InView.java | 716 +++++++++++++++++++ branch_zyx/My_branch/MainView.java | 702 ++++++++++++++++++ branch_zyx/My_branch/ProdCatalog.java | 25 + branch_zyx/My_branch/ProdCatalogTM.java | 69 ++ branch_zyx/My_branch/ProdCatalogView.java | 200 ++++++ branch_zyx/My_branch/ProductionDialog.java | 320 +++++++++ branch_zyx/My_branch/StorageRecord.java | 46 ++ branch_zyx/My_branch/StorageRecordTM.java | 75 ++ branch_zyx/My_branch/StorageTableModel.java | 74 ++ branch_zyx/My_branch/StorageView.java | 228 ++++++ branch_zyx/My_branch/SuperView.java | 37 + branch_zyx/My_branch/SupplierInf.java | 53 ++ branch_zyx/My_branch/SupplierInfDialog.java | 151 ++++ branch_zyx/My_branch/SupplierTableModel.java | 105 +++ branch_zyx/My_branch/SupplierView.java | 179 +++++ branch_zyx/ProdCatalog.java | 25 + branch_zyx/ProdCatalogTM.java | 69 ++ branch_zyx/ProdCatalogView.java | 200 ++++++ branch_zyx/ProductionDialog.java | 320 +++++++++ branch_zyx/StorageRecord.java | 46 ++ branch_zyx/StorageRecordTM.java | 75 ++ branch_zyx/StorageTableModel.java | 74 ++ branch_zyx/StorageView.java | 228 ++++++ branch_zyx/SuperView.java | 37 + branch_zyx/SupplierInf.java | 53 ++ branch_zyx/SupplierInfDialog.java | 151 ++++ branch_zyx/SupplierTableModel.java | 105 +++ branch_zyx/SupplierView.java | 179 +++++ 46 files changed, 8010 insertions(+) create mode 100644 branch_zyx/ChangeStatusDialog.java create mode 100644 branch_zyx/ChangeSumDialog.java create mode 100644 branch_zyx/InDialog.java create mode 100644 branch_zyx/InOrder.java create mode 100644 branch_zyx/InOrderTM.java create mode 100644 branch_zyx/InRecord.java create mode 100644 branch_zyx/InRecordTM.java create mode 100644 branch_zyx/InTableModel.java create mode 100644 branch_zyx/InView.java create mode 100644 branch_zyx/MainView.java create mode 100644 branch_zyx/My_branch/ChangeStatusDialog.java create mode 100644 branch_zyx/My_branch/ChangeSumDialog.java create mode 100644 branch_zyx/My_branch/InDialog.java create mode 100644 branch_zyx/My_branch/InOrder.java create mode 100644 branch_zyx/My_branch/InOrderTM.java create mode 100644 branch_zyx/My_branch/InRecord.java create mode 100644 branch_zyx/My_branch/InRecordTM.java create mode 100644 branch_zyx/My_branch/InTableModel.java create mode 100644 branch_zyx/My_branch/InView.java create mode 100644 branch_zyx/My_branch/MainView.java create mode 100644 branch_zyx/My_branch/ProdCatalog.java create mode 100644 branch_zyx/My_branch/ProdCatalogTM.java create mode 100644 branch_zyx/My_branch/ProdCatalogView.java create mode 100644 branch_zyx/My_branch/ProductionDialog.java create mode 100644 branch_zyx/My_branch/StorageRecord.java create mode 100644 branch_zyx/My_branch/StorageRecordTM.java create mode 100644 branch_zyx/My_branch/StorageTableModel.java create mode 100644 branch_zyx/My_branch/StorageView.java create mode 100644 branch_zyx/My_branch/SuperView.java create mode 100644 branch_zyx/My_branch/SupplierInf.java create mode 100644 branch_zyx/My_branch/SupplierInfDialog.java create mode 100644 branch_zyx/My_branch/SupplierTableModel.java create mode 100644 branch_zyx/My_branch/SupplierView.java create mode 100644 branch_zyx/ProdCatalog.java create mode 100644 branch_zyx/ProdCatalogTM.java create mode 100644 branch_zyx/ProdCatalogView.java create mode 100644 branch_zyx/ProductionDialog.java create mode 100644 branch_zyx/StorageRecord.java create mode 100644 branch_zyx/StorageRecordTM.java create mode 100644 branch_zyx/StorageTableModel.java create mode 100644 branch_zyx/StorageView.java create mode 100644 branch_zyx/SuperView.java create mode 100644 branch_zyx/SupplierInf.java create mode 100644 branch_zyx/SupplierInfDialog.java create mode 100644 branch_zyx/SupplierTableModel.java create mode 100644 branch_zyx/SupplierView.java diff --git a/branch_zyx/ChangeStatusDialog.java b/branch_zyx/ChangeStatusDialog.java new file mode 100644 index 0000000..7e6235f --- /dev/null +++ b/branch_zyx/ChangeStatusDialog.java @@ -0,0 +1,189 @@ +package com.lingnan.supermarket.dialog; // 声明当前类所在的包 + +import java.awt.Container; // 导入AWT容器类 +import java.awt.FlowLayout; // 导入流式布局类 +import java.awt.event.ActionEvent; // 导入动作事件类 +import java.awt.event.ActionListener; // 导入动作监听器接口 +import java.awt.event.ItemEvent; // 导入项目事件类 +import java.awt.event.ItemListener; // 导入项目监听器接口 +import java.util.Vector; // 导入向量类,用于存储对象集合 + +import javax.swing.JButton; // 导入Swing按钮组件 +import javax.swing.JComboBox; // 导入Swing下拉框组件 +import javax.swing.JDialog; // 导入Swing对话框组件 +import javax.swing.JFrame; // 导入Swing顶层窗口组件 +import javax.swing.JLabel; // 导入Swing标签组件 +import javax.swing.JOptionPane; // 导入Swing对话框工具类 +import javax.swing.JPanel; // 导入Swing面板组件 +import javax.swing.JTable; // 导入Swing表格组件 +import javax.swing.JTextField; // 导入Swing文本框组件 + +import com.lingnan.supermarket.*; // 导入超市项目相关包 +import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区实现类 +import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 +import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; // 导入入库订单服务实现类 +import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; // 导入入库记录服务实现类 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 +import com.lingnan.supermarket.dao.impl.storageRecordImpl; // 导入库存记录服务实现类 +import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 +import com.lingnan.supermarket.dto.InOrder; // 导入入库订单数据传输对象 +import com.lingnan.supermarket.dto.InRecord; // 导入入库记录数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 +import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 +import com.lingnan.supermarket.utils.TimeAndOrder; // 导入时间和订单工具类 +import com.lingnan.supermarket.view.HomeView; // 导入主页视图类 +import com.lingnan.supermarket.view.OutView; // 导入出库视图类 +import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener + + + +public class ChangeStatusDialog extends JDialog implements ActionListener{ // 定义一个对话框类,实现动作监听器接口 + + private JPanel statusPanel,opePanel,titlePanel,comboPanel; // 声明面板变量,用于不同的功能区域 + + private JLabel titleLabel,statusLabel; // 声明标签变量,用于显示标题和状态信息 + + private JButton UpdateBtn,cancelBtn; // 声明按钮变量,用于更新和取消操作 + + private String iNumber; // 订单编号 + private String status; // 订单状态 + + private Vector InRecords; // 存储入库记录的向量 + + private JComboBox combo; // 下拉框组件,用于选择订单状态 + + private String[] log = { "待入库", "已入库", "取消订单" }; // 订单状态数组 + + private inRecordServiceImpl inRecordImpl; // 入库记录服务实现类 + + private int catalog; // 分类标识 + + private productionImpl productionImpl; // 产品服务实现类 + + // 构造方法,接收父窗口、订单编号和订单状态作为参数 + public ChangeStatusDialog(JFrame parent,String iNumber,String status) { + super(parent,"修改进货订单状态"); // 调用父类构造方法,设置对话框标题 + + setSize(400,200); // 设置对话框大小 + setLocationRelativeTo(null); // 设置对话框相对于父窗口居中 + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框大小不可变 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + this.iNumber=iNumber; // 将传入的订单编号赋值给成员变量 + this.status=status; // 将传入的订单状态赋值给成员变量 + initView(); // 调用方法初始化视图 + } + + + + + + + + private void initView() { // 初始化视图的私有方法 + + titlePanel = new JPanel(); // 创建标题面板 + titleLabel = new JLabel("修改订单为"+iNumber+"的状态"); // 创建标题标签,显示订单编号 + titlePanel.add(titleLabel); // 将标题标签添加到标题面板 + + statusPanel = new JPanel(); // 创建状态面板 + statusLabel = new JLabel("当前状态:"+status); // 创建状态标签,显示当前订单状态 + statusPanel.add(statusLabel); // 将状态标签添加到状态面板 + + comboPanel = new JPanel(); // 创建下拉框面板 + combo = new JComboBox(log); // 创建下拉框,使用订单状态数组初始化 + combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 + comboPanel.add(combo); // 将下拉框添加到下拉框面板 + + opePanel = new JPanel(); // 创建操作按钮面板 + UpdateBtn = new JButton("更改"); // 创建更改按钮 + cancelBtn = new JButton("取消"); // 创建取消按钮 + UpdateBtn.addActionListener(this); // 为更改按钮添加动作监听器 + cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 + opePanel.add(UpdateBtn); // 将更改按钮添加到操作按钮面板 + opePanel.add(cancelBtn); // 将取消按钮添加到操作按钮面板 + + Container container = getContentPane(); // 获取内容面板 + container.add(titlePanel,"North"); // 将标题面板添加到内容面板的北部 + container.add(statusPanel,"Center"); // 将状态面板添加到内容面板的中心 + container.add(comboPanel,"South"); // 将下拉框面板添加到内容面板的南部 + container.add(opePanel); // 将操作按钮面板添加到内容面板 + + } + + public class MyItemListener implements ItemListener { // 定义一个内部类,实现项目监听器接口 + + @Override + public void itemStateChanged(ItemEvent e) { // 实现项目状态改变时的处理方法 + JComboBox cb = (JComboBox) e.getSource(); // 获取事件源,即下拉框 + String catalog1 = (String) cb.getSelectedItem(); // 获取下拉框选中的项 + if (catalog1.equals("已入库")) { // 如果选中项为"已入库" + catalog = 1; // 将分类标识设置为1 + } + else if (catalog1.equals("待入库")) { // 如果选中项为"待入库" + catalog = 2; // 将分类标识设置为2 + } else if (catalog1.equals("取消订单")) { // 如果选中项为"取消订单" + catalog = 3; // 将分类标识设置为3 + + } + + } + + } + + + + public Vector getVector(){ // 定义一个公共方法,返回一个InRecord类型的Vector + return InRecords; // 返回成员变量InRecords,它是一个包含InRecord对象的Vector + } + + + + + + + @Override + public void actionPerformed(ActionEvent e) { // 重写actionPerformed方法以响应按钮点击事件 + Object source = e.getSource(); // 获取事件源 + if(source==UpdateBtn){ // 如果事件源是更新按钮 + System.out.println("此时此刻的catalog为"+catalog); // 打印当前catalog的值 + //这里修改进货订单表的状态*/ + inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 创建进货订单服务实现类的实例 + inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建进货记录服务实现类的实例 + storageRecordImpl storageRecordImpl = new storageRecordImpl(); // 创建库存记录服务实现类的实例 + productionImpl = new productionImpl(); // 创建产品服务实现类的实例 + Production p ; // 声明产品对象 + //获得订单信息 + + //修改状态 + inOrderImpl.updateInOrderStatus(iNumber,catalog); // 更新进货订单的状态 + //确认进货,修改状态并对库存和库存日志修改 + if(catalog==1) { // 如果catalog等于1 + //获得订单详细信息 + this.InRecords = inRecordImpl.findByIdinRecord(iNumber); // 根据订单编号查找进货记录 + //遍历添加库存 + String s[]=TimeAndOrder.TimeAndOrder("");/*生成时间*/ + for(InRecord i:InRecords) { // 遍历进货记录 + //查找到原来的价格 + //更新库存表 + productionImpl.updateProductionSum(i.getId(),i.getSum()); // 更新产品库存数量 + //增加库存日志表 + storageRecordImpl.insertStorageRecord(iNumber,s[1], i.getId(),"+", i.getSum()); // 插入库存记录 + } + + JOptionPane.showMessageDialog(this,"订单已确认,库存更新成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示消息对话框 + } + /*刷新首页*/ + this.dispose(); // 关闭当前对话框 + + } + else if(source == cancelBtn) { // 如果事件源是取消按钮 + + this.dispose(); // 关闭当前对话框 + + } + } +} diff --git a/branch_zyx/ChangeSumDialog.java b/branch_zyx/ChangeSumDialog.java new file mode 100644 index 0000000..6476689 --- /dev/null +++ b/branch_zyx/ChangeSumDialog.java @@ -0,0 +1,186 @@ +package com.lingnan.supermarket.dialog; // 声明当前类所在的包 + +import java.awt.Container; // 导入AWT容器类 +import java.awt.FlowLayout; // 导入流式布局类 +import java.awt.event.ActionEvent; // 导入动作事件类 +import java.awt.event.ActionListener; // 导入动作监听器接口 +import java.util.Vector; // 导入向量类,用于存储对象集合 + +import javax.swing.JButton; // 导入Swing按钮组件 +import javax.swing.JDialog; // 导入Swing对话框组件 +import javax.swing.JFrame; // 导入Swing顶层窗口组件 +import javax.swing.JLabel; // 导入Swing标签组件 +import javax.swing.JOptionPane; // 导入Swing对话框工具类 +import javax.swing.JPanel; // 导入Swing面板组件 +import javax.swing.JTable; // 导入Swing表格组件 +import javax.swing.JTextField; // 导入Swing文本框组件 + +import com.lingnan.supermarket.*; // 导入超市项目相关的包 +import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区服务实现类 +import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 +import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 +import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 +import com.lingnan.supermarket.view.OutView; // 导入出库视图类 + + + +public class ChangeSumDialog extends JDialog implements ActionListener{ // 定义一个对话框类ChangeSumDialog,继承自JDialog并实现ActionListener接口 + + private JPanel prodIdPanel,sumPanel,phonePanel,opePanel,titlePanel; // 声明多个面板变量,用于布局不同的组件 + + private JLabel prodIdLabel,sumLabel,titleLabel; // 声明标签变量,用于显示文本 + private JTextField prodIdTF,sumTF; // 声明文本框变量,用于输入数据 + + private JButton UpdateBtn,cancelBtn; // 声明按钮变量,用于执行更新和取消操作 + + private OutTableModel outTableModel = new OutTableModel(); // 创建出库表格模型实例 + + private Buffer buffer; // 声明缓冲区对象变量 + + private String prodId,mark; /*mark用来标记是进货还是出货系统*/ // 声明字符串变量,用于存储产品ID和标记 + + private Vector v; // 声明向量变量,用于存储产品集合 + + public ChangeSumDialog(JFrame parent,String prodId,String mark,Vector v) { // 构造方法,接收父窗口、产品ID、标记和产品集合作为参数 + super(parent,"更改商品数量"); // 调用父类构造方法,设置对话框标题 + + setSize(350,200); // 设置对话框大小 + setLocationRelativeTo(null); // 设置对话框相对于父窗口居中显示 + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框不可调整大小 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + this.prodId=prodId; // 将参数prodId赋值给成员变量prodId + this.mark=mark; // 将参数mark赋值给成员变量mark + this.v = v; // 将参数v赋值给成员变量v + initView(); // 初始化视图 + + } + + public ChangeSumDialog(JFrame parent,String prodId,String mark) { // 另一个构造方法,接收父窗口、产品ID和标记作为参数 + super(parent,"更改商品数量"); // 调用父类构造方法,设置对话框标题为"更改商品数量" + + setSize(350,200); // 设置对话框大小为350x200像素 + setLocationRelativeTo(null); // 设置对话框位置相对于父窗口居中显示 + setModal(true); // 设置对话框为模态,即用户必须处理完此对话框才能操作其他窗口 + setResizable(false); // 设置对话框大小不可变 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + this.prodId=prodId; // 将传入的产品ID赋值给成员变量prodId + this.mark=mark; // 将传入的标记赋值给成员变量mark + initView(); // 调用方法初始化视图 + + } + + + + + + private void initView() { + + titlePanel = new JPanel(); + titleLabel = new JLabel("修改商品id为"+prodId+"的数量"); + titlePanel.add(titleLabel); + + + + sumPanel = new JPanel(); + sumLabel = new JLabel("数量"); + sumTF = new JTextField(15); + sumPanel.add(sumLabel); + sumPanel.add(sumTF); + + + opePanel = new JPanel(); + UpdateBtn = new JButton("更改"); + cancelBtn = new JButton("取消"); + UpdateBtn.addActionListener(this); + cancelBtn.addActionListener(this); + opePanel.add(UpdateBtn); + opePanel.add(cancelBtn); + + Container container = getContentPane(); + container.add(titlePanel); + container.add(sumPanel); + container.add(opePanel); + } + + public Vector getVector(){ + return v; + } + + @Override + public void actionPerformed(ActionEvent e) { + Object source = e.getSource(); + if(source==UpdateBtn){ + + //TODO 参数校验 + /*/返回这个记录的信息*/ + + int sum = Integer.parseInt(sumTF.getText());/*获得数量*/ + System.out.println("所要修改的数量sum="+sum); + + if(sumTF.getText().equals("")) { + JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); + return; + } + + if(sum<0) {/*判断输入大于0*/ + JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); + return; + } + + + + + BufferImpl bufferImpl = new BufferImpl(); + + productionImpl productionImpl = new productionImpl(); + Production production = new Production(); + production = productionImpl.findByIdProduction(prodId); + + Buffer buffer = new Buffer(); + boolean flag = false; + + if(mark=="In") {/*进货界面*/ + for(Production p:v) { + if(p.getId().equals(prodId)) + p.setSum(sum); + } + + } + + else if(mark=="Out") {/*出货界面*/ + buffer = bufferImpl.findInBufferbyId(prodId); + if(buffer!=null) {/*记录有这条数据*/ + if(sum>production.getSum())/*修改数量超过库存*/ + JOptionPane.showMessageDialog(this,"库存数量为:"+production.getSum()+",修改数量请勿超过库存","提示",JOptionPane.ERROR_MESSAGE); + else + flag = bufferImpl.UpdateInBufferById(prodId, sum); + + } + + } + + + if(flag = true) {/*如果修改成功*/ + + JOptionPane.showMessageDialog(this,"修改成功","提示",JOptionPane.INFORMATION_MESSAGE); + dispose(); + + }else { + JOptionPane.showMessageDialog(this,"修改失败","提示",JOptionPane.ERROR_MESSAGE); + dispose(); + } + } + + else if(source == cancelBtn) { + + this.dispose(); + } + } +} diff --git a/branch_zyx/InDialog.java b/branch_zyx/InDialog.java new file mode 100644 index 0000000..04f10a5 --- /dev/null +++ b/branch_zyx/InDialog.java @@ -0,0 +1,230 @@ +package com.lingnan.supermarket.dialog; // 声明当前类所在的包 + +import java.awt.Container; // 导入AWT容器类 +import java.awt.FlowLayout; // 导入流式布局类 +import java.awt.event.ActionEvent; // 导入动作事件类 +import java.awt.event.ActionListener; // 导入动作监听器接口 +import java.awt.event.ItemEvent; // 导入项目事件类 +import java.awt.event.ItemListener; // 导入项目监听器接口 +import java.util.Vector; // 导入向量类,用于存储对象集合 + +import javax.swing.JButton; // 导入按钮组件类 +import javax.swing.JComboBox; // 导入下拉框组件类 +import javax.swing.JDialog; // 导入对话框组件类 +import javax.swing.JFrame; // 导入顶层窗口类 +import javax.swing.JLabel; // 导入标签组件类 +import javax.swing.JOptionPane; // 导入对话框工具类 +import javax.swing.JPanel; // 导入面板组件类 +import javax.swing.JTable; // 导入表格组件类 +import javax.swing.JTextField; // 导入文本框组件类 + +import com.lingnan.supermarket.*; // 导入超市项目相关的所有类 +import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区服务实现类 +import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 +import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 +import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 +import com.lingnan.supermarket.view.InView; // 导入进货视图类 +import com.lingnan.supermarket.view.OutView; // 导出出库视图类 +import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener + + + +public class InDialog extends JDialog implements ActionListener{ // 定义一个对话框类InDialog,继承自JDialog并实现ActionListener接口 + + private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; // 声明面板变量,用于不同功能的面板 + + private JLabel prodIdLabel,sumLabel; // 声明标签变量,用于显示文本 + private JTextField prodIdTF,sumTF; // 声明文本框变量,用于输入数据 + + private JButton addBtn,cancelBtn; // 声明按钮变量,用于添加和取消操作 + + private OutTableModel outTableModel = new OutTableModel(); // 创建出库表格模型实例 + + private Production production; // 声明产品数据传输对象 + private productionImpl productionImpl; // 声明产品服务实现类 + + private Vector v; // 声明产品集合变量 + + private User user; // 声明用户数据传输对象 + + private JFrame JFramparent; // 声明顶层窗口变量,用于存储父窗口 + + private JComboBox combo; // 声明下拉框组件变量 + private String allProdId[] = null; // 声明字符串数组,用于存储所有产品ID + private Vector vAll; // 声明产品集合变量,用于存储所有产品 + private static String catalog; // 声明静态字符串变量,用于存储分类信息 + + public InDialog(JFrame parent,Vector v,User user) { // 构造方法,接收父窗口、产品集合和用户对象 + super(parent,"添加商品"); // 调用父类构造方法,设置对话框标题 + + setSize(250,200); // 设置对话框大小 + setLocationRelativeTo(null); // 设置对话框居中显示 + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框不可调整大小 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + JFramparent=parent; // 初始化父窗口变量 + this.v=v; // 初始化产品集合变量 + this.user = user; // 初始化用户对象 + initView(); // 初始化视图 + + + + } + + + + + + private void initView() { + prodIdPanel = new JPanel(); // 创建一个面板用于显示产品编号 + prodIdLabel = new JLabel("编号"); // 创建一个标签显示"编号" + + productionImpl= new productionImpl(); // 实例化产品服务实现类 + vAll=productionImpl.findAllproduction(); // 调用方法获取所有产品信息 + allProdId = new String[vAll.size()]; // 初始化字符串数组,用于存储所有产品ID + for(int i=0;i(allProdId); // 创建下拉框,并使用产品ID数组初始化 + combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 + + + prodIdPanel.add(prodIdLabel); // 将标签添加到编号面板 + prodIdPanel.add(combo); // 将下拉框添加到编号面板 + + + + sumPanel = new JPanel(); // 创建一个面板用于显示数量 + sumLabel = new JLabel("数量"); // 创建一个标签显示"数量" + sumTF = new JTextField(10); // 创建一个文本框用于输入数量,宽度为10 + sumPanel.add(sumLabel); // 将标签添加到数量面板 + sumPanel.add(sumTF); // 将文本框添加到数量面板 + + + opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 + addBtn = new JButton("添加"); // 创建一个按钮显示"添加" + cancelBtn = new JButton("取消"); // 创建一个按钮显示"取消" + addBtn.addActionListener(this); // 为添加按钮添加动作监听器 + cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(cancelBtn); // 将取消按钮添加到操作面板 + + + Container container = getContentPane(); // 获取内容面板 + container.add(prodIdPanel); // 将编号面板添加到内容面板 + container.add(sumPanel); // 将数量面板添加到内容面板 + container.add(opePanel); // 将操作面板添加到内容面板 + } + + /*将数组传到inview的刷新方法里面再刷新*/ + public Vector getVector(){ // 提供一个方法获取产品集合 + return v; + } + + //下拉框监听 + static class MyItemListener implements ItemListener{ // 定义一个内部类实现ItemListener接口 + + @Override + public void itemStateChanged(ItemEvent e) { // 实现项目状态改变时的处理方法 + JComboBox cb=(JComboBox)e.getSource(); // 获取事件源下拉框 + String select=(String) cb.getSelectedItem(); // 获取选中项的值 + catalog=select; // 更新分类信息为选中项的值 + + } + + } + + + + + + + + + @Override + public void actionPerformed(ActionEvent e) { + Object source = e.getSource(); // 获取事件源 + if(source==addBtn){ // 如果事件源是添加按钮 + //1.判断是否存在这个商品 + //2.如果存在就获取这条商品记录为一个对象 + //3.判断购物缓冲区是否有这个记录 + //3.1如果有update数量和price + //3.2如果没有就insert这条记录,把sum更新 + //保存到数据库 + //关闭对话框 + //刷新table + + + String prodId =catalog; // 获取选中的商品ID + System.out.println("proId="+prodId); // 打印商品ID + System.out.println("vatalog="+catalog); // 打印分类信息 + + + if(sumTF.getText().equals("")) { // 判断数量文本框是否为空 + JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); + return; + } + int sum = Integer.parseInt(sumTF.getText()) ; // 将文本框中的数量转换为整数 + + if(sum<0) {/*判断输入大于0*/ + JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); + return; + } + + //TODO 参数校验 + /*/判断是已添加,未添加还是不存在*/ + productionImpl productionImpl = new productionImpl(); // 实例化产品服务实现类 + production = new Production(); // 创建产品对象 + production = productionImpl.findByIdProduction(prodId); // 根据ID查找产品 + + + if(production!=null) {/*商品库有这个商品存在*/ + int mark = 0; // 标记变量,用于判断商品是否已存在于购物缓冲区 + for(Production p:v) { // 遍历购物缓冲区 + + + if(p.getId().equals(prodId)){/*如果数组中存在相同商品就更新数量和价格*/ + sum=p.getSum()+sum;/*数量*/ + p.setSum(sum); + p.setPrice(sum*p.getInPrice());/*进货价格*/ + mark = 1; // 更新标记 + break; + } + + } + if(mark==0) {/*插入新的*/ + System.out.println("缓存区不存在,插入新的数据"); + production.setSum(sum);/*更新价格和数量后插入新的*/ + production.setPrice(sum*production.getInPrice()); + v.add(production); // 将新产品添加到购物缓冲区 + + } + + System.out.println("插入后v的大小"+v.size()); // 打印购物缓冲区大小 + this.dispose(); // 关闭对话框 + JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE); // 显示添加成功消息 + + } + + + + else {/*商品库没有这个商品*/ + JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE); // 显示商品不存在消息 + } + } + else if(source == cancelBtn) { // 如果事件源是取消按钮 + + this.dispose(); // 关闭对话框 + + } + } + + + +} diff --git a/branch_zyx/InOrder.java b/branch_zyx/InOrder.java new file mode 100644 index 0000000..4e999c1 --- /dev/null +++ b/branch_zyx/InOrder.java @@ -0,0 +1,62 @@ +package com.lingnan.supermarket.dto; // 声明当前类所在的包 + +import java.util.Date; // 导入Date类,尽管在此类中没有直接使用 + +// 定义进货订单类InOrder +public class InOrder { + private String iNumber; // 进货订单编号 + private Float allInPrice; // 总进货价格 + private String inDate; // 进货日期 + private String principal; // 负责人 + private int status; // 订单状态 + private int delmark; // 删除标记 + + // getiNumber方法,用于获取进货订单编号 + public String getiNumber() { + return iNumber; // 返回进货订单编号 + } + // setiNumber方法,用于设置进货订单编号 + public void setiNumber(String iNumber) { + this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber + } + // getAllInPrice方法,用于获取总进货价格 + public Float getAllInPrice() { + return allInPrice; // 返回总进货价格 + } + // setAllInPrice方法,用于设置总进货价格 + public void setAllInPrice(Float allInPrice) { + this.allInPrice = allInPrice; // 将参数allInPrice赋值给成员变量allInPrice + } + // getInDate方法,用于获取进货日期 + public String getInDate() { + return inDate; // 返回进货日期 + } + // setInDate方法,用于设置进货日期 + public void setInDate(String inDate) { + this.inDate = inDate; // 将参数inDate赋值给成员变量inDate + } + // getPrincipal方法,用于获取负责人 + public String getPrincipal() { + return principal; // 返回负责人 + } + // setPrincipal方法,用于设置负责人 + public void setPrincipal(String principal) { + this.principal = principal; // 将参数principal赋值给成员变量principal + } + // getStatus方法,用于获取订单状态 + public int getStatus() { + return status; // 返回订单状态 + } + // setStatus方法,用于设置订单状态 + public void setStatus(int status) { + this.status = status; // 将参数status赋值给成员变量status + } + // getDelmark方法,用于获取删除标记 + public int getDelmark() { + return delmark; // 返回删除标记 + } + // setDelmark方法,用于设置删除标记 + public void setDelmark(int delmark) { + this.delmark = delmark; // 将参数delmark赋值给成员变量delmark + } +} diff --git a/branch_zyx/InOrderTM.java b/branch_zyx/InOrderTM.java new file mode 100644 index 0000000..bb9922d --- /dev/null +++ b/branch_zyx/InOrderTM.java @@ -0,0 +1,124 @@ +package com.lingnan.supermarket.table; // 声明当前类所在的包 + +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 + +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 + +import com.lingnan.supermarket.dto.Buffer; // 导入Buffer数据传输对象 +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder数据传输对象 +import com.lingnan.supermarket.dto.Buffer; // 重复导入Buffer数据传输对象,可能是错误 +import com.lingnan.supermarket.dto.Production; // 导入Production数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于进货对话框 + + + +public class InOrderTM extends AbstractTableModel{ // 定义一个类InOrderTM,继承自AbstractTableModel类,用于表格模型 + + private String [] columnName = {"订单号","总价","时间","负责人","状态"}; // 定义列名数组,用于表格的列标题 + + private productionImpl prodDao = new productionImpl(); // 创建productionImpl对象,用于操作产品数据 + + private Vector InOrders; // 声明一个Vector数组,用于存储InOrder对象 + private inOrderServiceImpl inOrderImpl= new inOrderServiceImpl(); // 创建inOrderServiceImpl对象,用于操作订单数据 + private InOrder inOrder ; // 声明InOrder对象,用于单个订单操作 + + String iNumber ; // 声明一个String变量,用于存储订单号 + + + public void allInOrderRecord() { // 定义一个方法,用于获取所有订单记录 + //将添加的商品加入到静态变量Vector数组中 + /*prod = InDialog.getProduction();*/ + InOrders = inOrderImpl.findAllInOrder(); // 调用inOrderImpl的方法,获取所有订单并赋值给InOrders + } + + //查找分类结果 + public void resultOfFind(int catalog) { // 定义一个方法,根据分类查找订单 + if(catalog==0) // 如果分类为0,查找所有订单 + InOrders = inOrderImpl.findAllInOrder(); // 获取所有订单 + else + InOrders = inOrderImpl.FindStatus(catalog); // 否则根据状态查找订单 + } + + //根据订单号查找 + public void resultOfNumber(String Number) { // 定义一个方法,根据订单号查找订单 + InOrders=new Vector(); // 初始化InOrders为新的Vector对象 + inOrder = inOrderImpl.findByIdinOrder(Number); // 根据订单号查找订单 + InOrders.add(inOrder); // 将找到的订单添加到InOrders中 + } + + + + + + + + @Override +// 重写getRowCount方法,返回表格的行数,即订单列表的大小 + public int getRowCount() { + return InOrders.size(); // 返回InOrders Vector的大小 + } + +/* +// 获取所有订单的总价格,此方法已被注释掉 +public Float getAllPrice() { + return BufferImpl.InBufferAllPrice(); +} +*/ + + @Override +// 重写getColumnCount方法,返回表格的列数,即列名数组的长度 + public int getColumnCount() { + return columnName.length; // 返回columnName数组的长度 + } + + @Override +// 重写getValueAt方法,根据行索引和列索引获取表格单元格的值 + public Object getValueAt(int rowIndex, int columnIndex) { + inOrder = InOrders.get(rowIndex); // 获取指定行的订单对象 + // 以下代码已被注释,可能是用于调试的打印语句 + /*System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + iNumber=inOrder.getiNumber(); // 获取订单号并赋值给iNumber + if(columnIndex==0) { // 如果是第一列,返回订单号 + return inOrder.getiNumber(); + }else if(columnIndex==1) { // 如果是第二列,返回订单总价 + return inOrder.getAllInPrice(); + }else if(columnIndex==2) { // 如果是第三列,返回订单日期 + return inOrder.getInDate(); + }else if(columnIndex==3) { // 如果是第四列,返回负责人 + return inOrder.getPrincipal(); + }else if(columnIndex==4) { // 如果是第五列,返回订单状态 + String status = null; + if(inOrder.getStatus()==1) + status= "已入库"; + else if(inOrder.getStatus()==2) + status= "待入库"; + else if(inOrder.getStatus()==3) + status= "已取消"; + return status; + }else { // 如果列索引不匹配,返回null + return null; + } + } + + // 返回要修改或删除的记录的订单号 + public String getINumber() { + return iNumber; // 返回类的成员变量iNumber + } + + + @Override +// 重写getColumnName方法,根据列索引获取列名 + public String getColumnName(int column) { + return columnName[column]; // 返回columnName数组中指定索引的值 + } + + + +} diff --git a/branch_zyx/InRecord.java b/branch_zyx/InRecord.java new file mode 100644 index 0000000..c5e69ed --- /dev/null +++ b/branch_zyx/InRecord.java @@ -0,0 +1,35 @@ +package com.lingnan.supermarket.dto; // 声明当前类所在的包 + +import com.lingnan.supermarket.dto.base.BsDomain; // 导入基础域类BsDomain + +// 定义进货记录类InRecord,继承自BsDomain +public class InRecord extends BsDomain{ + private String iNumber; // 进货编号 + private int sum; // 进货数量 + private Float inPrice; // 进货单价 + + // getiNumber方法,用于获取进货编号 + public String getiNumber() { + return iNumber; // 返回进货编号 + } + // setiNumber方法,用于设置进货编号 + public void setiNumber(String iNumber) { + this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber + } + // getSum方法,用于获取进货数量 + public int getSum() { + return sum; // 返回进货数量 + } + // setSum方法,用于设置进货数量 + public void setSum(int sum) { + this.sum = sum; // 将参数sum赋值给成员变量sum + } + // getInPrice方法,用于获取进货单价 + public Float getInPrice() { + return inPrice; // 返回进货单价 + } + // setInPrice方法,用于设置进货单价 + public void setInPrice(Float inPrice) { + this.inPrice = inPrice; // 将参数inPrice赋值给成员变量inPrice + } +} diff --git a/branch_zyx/InRecordTM.java b/branch_zyx/InRecordTM.java new file mode 100644 index 0000000..820425f --- /dev/null +++ b/branch_zyx/InRecordTM.java @@ -0,0 +1,93 @@ +package com.lingnan.supermarket.table; // 声明当前类所在的包 + +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 + +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 + +import com.lingnan.supermarket.dto.Buffer; // 导入Buffer类,可能用于临时数据存储 +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,表示进货订单 +import com.lingnan.supermarket.dto.InRecord; // 导入InRecord类,表示进货记录 +import com.lingnan.supermarket.dto.Buffer; // 重复导入Buffer类,可能是错误,应该删除 +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于显示进货对话框 + + + +public class InRecordTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于创建进货记录表格数据模型 + + private String [] columnName = {"订单号","id","数量","金额"}; // 定义列名数组,用于表格的列标题 + + private productionImpl prodDao = new productionImpl(); // 创建productionImpl实例,用于操作产品数据 + + private Vector InRecords; // 声明一个Vector类型的变量,用于存储进货记录 + + private inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建inRecordServiceImpl实例,用于操作进货记录数据 + private InRecord inRecord= new InRecord(); // 创建InRecord实例,用于存储单条进货记录 + + + private String iNumber ;/*订单号*/ // 声明一个String变量,用于存储订单号 + + + public InRecordTM(String iNumber) { // 构造函数,接收订单号参数 + this.iNumber=iNumber; // 将传入的订单号赋值给类的成员变量 + } + + public void findInRecordByINumber() { // 根据订单号查找进货记录的方法 + //将添加的商品加入到静态变量Vector数组中 + /*prod = InDialog.getProduction();*/ + InRecords = inRecordImpl.findByIdinRecord(iNumber); // 根据订单号查询进货记录并赋值给InRecords + } + + + @Override + public int getRowCount() { // 重写方法,获取表格的行数 + return InRecords.size(); // 返回InRecords的大小 + } + + /* public Float getAllPrice() { + return BufferImpl.InBufferAllPrice(); + } + */ + @Override + public int getColumnCount() { // 重写方法,获取表格的列数 + return columnName.length; // 返回columnName数组的长度 + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { // 重写方法,获取指定单元格的值 + inRecord = InRecords.get(rowIndex); // 获取指定行的进货记录 +/* System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + iNumber=inRecord.getiNumber(); // 获取订单号 + if(columnIndex==0) { + return inRecord.getiNumber(); // 返回订单号 + }else if(columnIndex==1) { + return inRecord.getId(); // 返回id + }else if(columnIndex==2) { + return inRecord.getSum(); // 返回数量 + }else if(columnIndex==3) { + return inRecord.getInPrice(); // 返回金额 + }else { + return null; // 如果列索引不匹配,返回null + } + } + + public String getINumber() { // 返回要修改或删除的记录的订单号 + return iNumber; // 返回类的成员变量iNumber + } + + + @Override + public String getColumnName(int column) { // 重写方法,获取指定列的列名 + return columnName[column]; // 返回columnName数组中指定索引的值 + } + + + +} diff --git a/branch_zyx/InTableModel.java b/branch_zyx/InTableModel.java new file mode 100644 index 0000000..41fb2a0 --- /dev/null +++ b/branch_zyx/InTableModel.java @@ -0,0 +1,106 @@ +package com.lingnan.supermarket.table; // 声明当前类所在的包 + +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 + +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 + +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,表示进货订单的数据传输对象 + +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于显示进货对话框 + + + + +public class InTableModel extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于创建进货表格数据模型 + + // 定义列名数组,用于表格的列标题 + private String [] columnName = {"id","名称","数量","单价","价格","保质期","类别","供应商id"}; + + // 创建productionImpl实例,用于操作产品数据 + private productionImpl prodDao = new productionImpl(); + + // 声明一个Vector,用于存储Production对象集合 + private Vector v; + + // 声明一个String变量,用于存储id + String id ; + + + // 构造函数,接收一个Vector类型的参数 + public InTableModel(Vector v) { + System.out.println("调用InTableModel里面的构造函数"); // 打印日志信息 + this.v=v; // 将传入的Vector赋值给类的成员变量v + } + + + + + // 获取表格的行数,即数据集合的大小 + public int getRowCount() { + return v.size(); // 返回Vector v的大小 + } + + // 计算所有商品的总价格 + public Float getAllPrice() { + Float allPrice=(float) 0; // 初始化总价格为0 + for(Production p:v) { // 遍历Vector v中的所有Production对象 + allPrice+=p.getPrice(); // 累加每个商品的价格 + } + return allPrice; // 返回计算出的总价格 + } + + // 重写方法,获取表格的列数,即列名数组的长度 + @Override + public int getColumnCount() { + return columnName.length; // 返回columnName数组的长度 + } + + // 重写方法,获取指定行和列的单元格值 + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + Production p = v.get(rowIndex); // 从Vector v中获取指定行的Production对象 + id=p.getId(); // 将Production对象的id赋值给类的成员变量id + if(columnIndex==0) { // 判断列索引,并返回相应的值 + return p.getId(); + }else if(columnIndex==1) { + return p.getName(); // 返回商品名称 + }else if(columnIndex==2) { + return p.getSum(); // 返回商品数量 + }else if(columnIndex==3) { + return p.getInPrice(); // 返回商品进货单价 + }else if(columnIndex==4) { + return p.getPrice(); // 返回商品价格 + }else if(columnIndex==5) { + return p.getLife(); // 返回商品保质期 + }else if(columnIndex==6) { + return p.getName2()+p.getId2(); // 返回商品类别和类别id的组合 + }else if(columnIndex==7) { + return p.getSupplyId(); // 返回供应商id + }else { + return null; // 如果列索引不匹配,返回null + } + } + + // 获取要修改或删除的记录的id + public String getId() { + return id; // 返回类的成员变量id + } + + // 重写方法,获取指定列的列名 + @Override + public String getColumnName(int column) { + return columnName[column]; // 返回columnName数组中指定索引的值 + } + + + + + + +} diff --git a/branch_zyx/InView.java b/branch_zyx/InView.java new file mode 100644 index 0000000..fc657b2 --- /dev/null +++ b/branch_zyx/InView.java @@ -0,0 +1,716 @@ +// 定义包名,表明该类属于com.lingnan.supermarket.view包 +package com.lingnan.supermarket.view; + +// 导入必要的Java Swing和AWT类库以及自定义的类库 +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.Vector; + +import javax.mail.MessagingException; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.text.html.HTMLDocument.Iterator; + +import com.lingnan.supermarket.componet.BGPanel; +import com.lingnan.supermarket.dao.impl.BufferImpl; +import com.lingnan.supermarket.dao.impl.UserServiceImpl; +import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; +import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; +import com.lingnan.supermarket.dao.impl.prodCatalogImpl; +import com.lingnan.supermarket.dialog.ChangeStatusDialog; +import com.lingnan.supermarket.dialog.ChangeSumDialog; +import com.lingnan.supermarket.dialog.InDialog; +import com.lingnan.supermarket.dialog.UserDialog; +import com.lingnan.supermarket.dto.Buffer; +import com.lingnan.supermarket.dto.InRecord; +import com.lingnan.supermarket.dto.Production; +import com.lingnan.supermarket.dto.User; +import com.lingnan.supermarket.table.*; +import com.lingnan.supermarket.utils.CreateOrder; +import com.lingnan.supermarket.utils.FontUtil; +import com.lingnan.supermarket.utils.SendQQMailUtil; +import com.lingnan.supermarket.utils.TimeAndOrder; +import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; + +// 声明InView类,继承JPanel并实现ActionListener接口 +public class InView extends JPanel implements ActionListener{ + + // 定义类的成员变量,用于构建界面元素 + // 上面的工具栏面板 + private JPanel toolBarPanel; + + // 搜索面板 + private JPanel searchPanel; + private JLabel nameLabel,locationLabel; // 标签用于显示文本 + private JTextField nameSearchTF; // 文本框用于输入搜索内容 + private JButton searchBtn,StockBtn,exitBtn; // 按钮用于执行操作 + + // 操作面板 + private JPanel opePanel; + private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn,detailBtn; // 操作按钮 + + // 中间的表格滚动面板 + private JScrollPane tableScrollPane; + private JTable inTable; // 表格用于显示数据 + + // 下面的面板 + private JPanel bottomPanel,bottomPanelLeft,bottomPanelRight; // 底部面板 + private JLabel countInfoLabel,countInfoLabel2; // 标签用于显示统计信息 + + // 缓冲区相关变量 + private Buffer Buffer; + private BufferImpl BufferImpl; + + // 定义一个静态的Vector集合,用于存储Production对象 + private static Vector v = new Vector(); + + // 定义一个下拉框组件,用于选择不同的状态 + private JComboBox combo; + // 定义一个字符串数组,包含所有可能的状态选项 + private String[] status ={"全部","已入库","待入库","已取消"}; + // 定义一个变量,用于存储当前选中的目录 + private int catalog; + + // 定义一个JFrame对象,用于表示主窗口 + private JFrame jFrame; + // 定义一个User对象,用于存储当前用户信息 + private User user; + + // 定义一个InTableModel对象,用于管理表格数据模型 + private InTableModel inTableModel ; + + // 实例化BufferImpl对象,用于操作缓冲区数据 + private BufferImpl bufferImpl = new BufferImpl(); + + // 定义一个标记变量,用于区分是从进货表还是提醒过来的表 + private int mark;/*标记从提醒那里来1是进货表,0是提醒过来的表*/ + + // 定义一个inOrderServiceImpl对象,用于处理进货订单服务 + private inOrderServiceImpl inOrderImpl; + + // 定义一个浮点数变量,用于存储总价 + private Float allPrice; + // 定义一个整数变量,用于存储选中的行号 + private int row; + // 定义一个字符串变量,用于存储用户名 + private String uname; + + // InView类的构造方法,接收主窗口、用户、货物集合和标记作为参数 + public InView(JFrame jFrame,User user,Vector v,int mark) { + // 设置布局管理器为边界布局 + this.setLayout(new BorderLayout()); + // 初始化成员变量 + this.jFrame = jFrame; + this.user = user; + // 获取进货缓冲区的保存的货物并删除缓冲区 + this.v =bufferImpl.allInBuffer(); + bufferImpl.DelAllInBuffer(); + + // 初始化标记变量 + this.mark=mark; + // 打印标记值,用于调试 + System.out.println("mark="+mark); + // 获取并存储用户名 + uname = user.getUsername(); + // 初始化视图 + initView(); + + + } + + // 初始化视图的方法 + private void initView() { + + + // 创建工具栏面板,并设置布局管理器为边界布局 + toolBarPanel = new JPanel(new BorderLayout()); + + // 创建搜索面板,并设置布局管理器为流式布局,靠右对齐 + searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + // 创建并初始化标签,用于显示“订单号” + nameLabel = new JLabel("订单号"); + // 创建并初始化文本框,用于输入搜索内容,宽度为20 + nameSearchTF = new JTextField(20); + // 创建并初始化搜索按钮,并设置图标 + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); + // 为搜索按钮添加动作监听器 + searchBtn.addActionListener(this); + // 创建并初始化位置标签,并设置字体和前景色 + locationLabel=new JLabel("当前位置>进货系统"); + locationLabel.setFont(new FontUtil().userFont); + locationLabel.setForeground(new Color(18, 150, 219)); + + + + // 创建并初始化下拉框,使用状态数组作为选项 + combo = new JComboBox(status); + // 为下拉框添加项目监听器 + combo.addItemListener(new MyItemListener()); + + + + + // 创建操作面板,并设置布局管理器为流式布局,靠左对齐 + opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); +// 创建并初始化添加按钮,并设置图标 + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); +// 创建并初始化更新按钮,并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\change.png")); +// 创建并初始化删除按钮,并设置图标 + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); +// 创建并初始化历史按钮,并设置图标 + historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); +// 创建并初始化返回按钮,并设置图标 + backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); +// 创建并初始化详情按钮,并设置图标 + detailBtn = new JButton(new ImageIcon("static\\icon\\detail.png")); + +// 为添加按钮添加动作监听器 + addBtn.addActionListener(this); +// 为更新按钮添加动作监听器 + updateBtn.addActionListener(this); +// 为删除按钮添加动作监听器 + deleteBtn.addActionListener(this); +// 为历史按钮添加动作监听器 + historyBtn.addActionListener(this); +// 为返回按钮添加动作监听器 + backBtn.addActionListener(this); +// 为详情按钮添加动作监听器 + detailBtn.addActionListener(this); + +// 设置返回按钮初始不可见,它在记录页面时才会显示 + backBtn.setVisible(false);/*在记录页面显示出来*/ +// 设置详情按钮初始不可见,它在订单详情页时才会显示 + detailBtn.setVisible(false);/*在订单详情页显示出来*/ + +// 将添加按钮添加到操作面板 + opePanel.add(addBtn); +// 将返回按钮添加到操作面板 + opePanel.add(backBtn); +// 将详情按钮添加到操作面板 + opePanel.add(detailBtn); +// 将更新按钮添加到操作面板 + opePanel.add(updateBtn); +// 将删除按钮添加到操作面板 + opePanel.add(deleteBtn); +// 将历史按钮添加到操作面板 + opePanel.add(historyBtn); + +// 将位置标签添加到搜索面板 + searchPanel.add(locationLabel); +// 将订单号标签添加到搜索面板 + searchPanel.add(nameLabel); +// 将搜索文本框添加到搜索面板 + searchPanel.add(nameSearchTF); +// 将搜索按钮添加到搜索面板 + searchPanel.add(searchBtn); +// 将状态下拉框添加到搜索面板 + searchPanel.add(combo); + + + +// 将搜索面板添加到工具栏面板的西边(West) + toolBarPanel.add(searchPanel,"West"); +// 将操作面板添加到工具栏面板的东边(East) + toolBarPanel.add(opePanel,"East"); + + + + //中间表 + // 创建一个表格模型,并传入数据向量v + inTableModel = new InTableModel(v); + +// 创建一个新的表格,使用上面创建的表格模型 + inTable = new JTable(inTableModel); +// 设置表格的字体 + inTable.setFont(FontUtil.tableFont); +// 设置表格的行高 + inTable.setRowHeight(50); +// 创建一个滚动面板,并将表格添加到滚动面板中 + tableScrollPane = new JScrollPane(inTable); + +// 获取表格模型中的所有商品总价 + allPrice = inTableModel.getAllPrice(); +// 获取表格模型中的行数,即商品种类数量 + row = inTableModel.getRowCount(); + +// 创建底部左侧面板,并设置布局为右对齐流式布局 + bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.RIGHT)); +// 创建一个标签用于显示商品种类和总价信息 + countInfoLabel = new JLabel("商品种类:"+row+",总价:"+allPrice); +// 将商品信息标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel,"Left"); + +// 创建底部右侧面板,并设置布局为左对齐流式布局 + bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.LEFT)); +// 创建并初始化结账按钮,并设置图标 + StockBtn =new JButton(new ImageIcon("static\\icon\\stock.png"));/*结账按钮*/ +// 创建并初始化退出按钮,并设置图标 + exitBtn =new JButton(new ImageIcon("static\\icon\\exit.png"));/*退出按钮*/ +// 为结账按钮添加动作监听器 + StockBtn.addActionListener(this); +// 为退出按钮添加动作监听器 + exitBtn.addActionListener(this); +// 将结账按钮添加到底部右侧面板 + bottomPanelRight.add(StockBtn); +// 将退出按钮添加到底部右侧面板 + bottomPanelRight.add(exitBtn); + +// 创建底部面板,并设置布局为边界布局 + bottomPanel = new JPanel(new BorderLayout()); +// 将底部右侧面板添加到底部面板的东边 + bottomPanel.add(bottomPanelRight,"East"); +// 将底部左侧面板添加到底部面板的西边 + bottomPanel.add(bottomPanelLeft,"West"); + + +// 将工具栏面板添加到窗口的北边 + this.add(toolBarPanel,"North"); +// 将表格滚动面板添加到窗口的中间 + this.add(tableScrollPane,"Center");/*将表格放到中间*/ +// 将底部面板添加到窗口的南边 + this.add(bottomPanel,"South"); + +// 如果标记为1,表示是从提醒模块过来的,则刷新缓冲区 + if(mark==1) /*判断是不是从提醒那里过来的*/{ + refreshBuffer(v); + } +// 如果标记为0,则执行进货订单记录操作 + else if(mark==0) { + InOrderRecord(); + } + + + + + + + // 设置窗口为可见状态,这样用户就可以看到并与之交互 + setVisible(true); + + + + + + + + } + + // 提供一个静态方法,用于获取存储Production对象的Vector集合 + public static Vector getVector(){ + return v; + } + + // 定义一个内部类MyItemListener,实现ItemListener接口来监听下拉框项目的状态改变 + public class MyItemListener implements ItemListener { + + // 重写itemStateChanged方法,当下拉框中的项目状态改变时被调用 + @Override + public void itemStateChanged(ItemEvent e) { + // 将事件源转换为JComboBox类型 + JComboBox cb = (JComboBox) e.getSource(); + // 获取当前选中的项目,并转换为字符串 + String catalog1 = (String) cb.getSelectedItem(); + // 根据选中的项目设置相应的分类代码 + if(catalog1.equals("全部")) + catalog=0; + else if(catalog1.equals("已入库")) + catalog=1; + else if(catalog1.equals("待入库")) + catalog=2; + else if(catalog1.equals("已取消")) + catalog=3; + + // 根据分类代码执行查找操作 + resultOfFindStatus(catalog); + + } + + } + + // 设置按钮组件的可见性 + public void OrderView() { + // 设置返回按钮为可见 + backBtn.setVisible(true); + // 设置详情按钮为可见 + detailBtn.setVisible(true); + // 设置更新按钮为可见 + updateBtn.setVisible(true); + // 设置删除按钮为可见 + deleteBtn.setVisible(true); + // 设置添加按钮为不可见 + addBtn.setVisible(false); + // 设置历史按钮为不可见 + historyBtn.setVisible(false); + } + + // 根据订单编号查询结果,并更新界面 + public void resultOfNumber(String iNumber) { + // 重置标记 + this.mark=0; + // 创建InOrderTM对象,用于处理订单数据 + InOrderTM inOrderTM = new InOrderTM(); + // 根据订单编号查询结果 + inOrderTM.resultOfNumber(iNumber); + // 设置表格模型为查询结果 + inTable.setModel(inOrderTM); + // 清除底部左侧面板的内容 + bottomPanelLeft.removeAll(); + // 创建一个标签,显示记录总数 + countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel); + // 更新按钮组件的可见性 + OrderView(); + } + + + // 根据状态分类代码查询订单,并更新界面 + public void resultOfFindStatus(int catalog) { + // 重置标记 + this.mark=0; + // 创建InOrderTM对象,用于处理订单数据 + InOrderTM inOrderTM = new InOrderTM(); + // 根据分类代码查询订单 + inOrderTM.resultOfFind(catalog); + // 设置表格模型为查询结果 + inTable.setModel(inOrderTM); + // 清除底部左侧面板的内容 + bottomPanelLeft.removeAll(); + // 创建一个标签,显示记录总数 + countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel); + // 更新按钮组件的可见性 + OrderView(); + } + + // 刷新缓冲区数据,并更新界面 + public void refreshBuffer(Vector v) { + // 设置标记为1,表示刷新操作 + this.mark=1; + // 创建InTableModel对象,使用传入的Vector作为数据源 + InTableModel inTableModel = new InTableModel(v); + // 设置表格模型为新的数据模型 + inTable.setModel(inTableModel); + // 清除底部左侧面板的内容 + bottomPanelLeft.removeAll(); + // 创建一个标签,显示商品种类和总价信息 + countInfoLabel = new JLabel("商品种类:"+inTableModel.getRowCount()+",总价:"+inTableModel.getAllPrice()); + // 将标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel); + // 设置按钮的可见性 + backBtn.setVisible(false); + detailBtn.setVisible(false); + historyBtn.setVisible(true); + updateBtn.setVisible(true); + addBtn.setVisible(true); + deleteBtn.setVisible(true); + + // 更新总价和记录数 + allPrice = inTableModel.getAllPrice(); + row = inTableModel.getRowCount(); + } + + // 调出所有进货订单记录,并更新界面 + public void InOrderRecord() { + // 重置标记 + this.mark=0; + // 创建InOrderTM对象,用于处理订单数据 + InOrderTM inOrderTM = new InOrderTM(); + // 获取所有进货订单记录 + inOrderTM.allInOrderRecord(); + // 设置表格模型为所有订单记录 + inTable.setModel(inOrderTM); + // 清除底部左侧面板的内容 + bottomPanelLeft.removeAll(); + // 创建一个标签,显示记录总数 + countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel); + // 更新按钮组件的可见性 + OrderView(); + } + + // 根据订单编号查询进货记录,并更新界面 + public void InRecord(String iNumber) { + // 设置标记为2,表示按订单编号查询 + this.mark=2; + // 创建InRecordTM对象,使用订单编号作为查询条件 + InRecordTM inRecordTM = new InRecordTM(iNumber); + // 查询进货记录 + inRecordTM.findInRecordByINumber(); + // 设置表格模型为查询结果 + inTable.setModel(inRecordTM); + // 清除底部左侧面板的内容 + bottomPanelLeft.removeAll(); + // 创建一个标签,显示订单号和记录总数 + countInfoLabel = new JLabel("订单号@"+iNumber+"共有"+inRecordTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel); + // 更新按钮的可见性 + backBtn.setVisible(true); + detailBtn.setVisible(false); + updateBtn.setVisible(false); + addBtn.setVisible(false); + historyBtn.setVisible(false); + deleteBtn.setVisible(false); + } + + + + + + + /*按钮监听时间*/ + @Override + public void actionPerformed(ActionEvent e) { + // 创建购物车实例 + BufferImpl = new BufferImpl();/*获得购物车*/ + // 获取事件源对象 + Object source = e.getSource(); + + // 如果事件源是搜索按钮 + if(searchBtn==source) { + // 从搜索文本框中获取订单号 + String number = nameSearchTF.getText(); + // 打印搜索后的订单号 + System.out.println("搜索后的订单:"+number); + // 根据订单号进行搜索并处理结果 + resultOfNumber(number); + } + + // 如果事件源是添加按钮 + else if(addBtn==source) { + // 创建添加对话框实例,并传入窗口框架、向量数据、用户信息 + InDialog outDialog = new InDialog(jFrame,v,user); + // 设置对话框为可见 + outDialog.setVisible(true); + // 获取对话框返回的向量数据 + v=outDialog.getVector(); + // 刷新购物车数据 + refreshBuffer(v); + + } + + + else if(updateBtn==source) { /*更新*/ + // 打印当前操作标记值 + System.out.println("mark="+mark); + // 获取表格中被选中的行索引 + int rowIndex = inTable.getSelectedRow(); + // 如果没有行被选中,弹出提示对话框并返回 + if(rowIndex==-1) { + JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); + return; + } + // 如果标记值为1,表示当前操作是进货表修改 + if(mark==1) { + // 从选中的行中获取ID + String id =(String) inTable.getValueAt(rowIndex,0); + // 创建修改数量的对话框实例,并传入相关参数 + ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"In",v); + // 设置对话框为可见 + changesumDialog.setVisible(true); + // 获取对话框返回的向量数据 + v = changesumDialog.getVector(); + // 打印更改状态后向量的大小 + System.out.println("更改状态后v.size="+v.size()); + // 刷新缓冲区数据 + refreshBuffer(v); + } + + //inOrder修改,修改状态 + else if(mark==0) { + // 从选中的行中获取订单编号 + String iNumber =(String) inTable.getValueAt(rowIndex,0); + // 从选中的行中获取订单状态 + String status =(String) inTable.getValueAt(rowIndex,4); + // 如果订单状态为"已入库",则弹出提示信息并返回 + if(status.equals("已入库")) { + JOptionPane.showMessageDialog(this,"订单上的货物已入库无法修改状态","提示",JOptionPane.INFORMATION_MESSAGE); + return; + } + + // 创建修改状态对话框实例,并传入相关参数 + ChangeStatusDialog changeStatusDialog = new ChangeStatusDialog(jFrame,iNumber,status); + // 设置对话框为可见 + changeStatusDialog.setVisible(true); + // 刷新主界面提醒 + MainView.refreshRemind(); + // 刷新首页 + HomeView.refreshHome(); + // 重新加载订单记录 + InOrderRecord(); + } + + + } + + + else if(deleteBtn==source) { + // 获取表格中被选中的行索引 + int rowIndex = inTable.getSelectedRow(); + // 如果没有行被选中,弹出提示对话框并返回 + if(rowIndex==-1) { + JOptionPane.showMessageDialog(this,"请选中一条"); + return; + } + + /*删除进货表的*/ + if(mark==1) { + // 打印日志信息,表示将删除进货表中的记录 + System.out.println("删除进货表"); + // 从选中的行中获取记录的ID + String id =(String) inTable.getValueAt(rowIndex,0); + // 弹出确认对话框,询问用户是否删除指定ID的记录 + int select = JOptionPane.showConfirmDialog(this,"是否删除id为"+id+"的记录","提示",JOptionPane.YES_NO_OPTION); + // 如果用户选择"是",则执行删除操作 + if(select==JOptionPane.YES_OPTION) {/*选择是*/ + // 遍历向量v,寻找匹配的ID进行删除 + for(int i =0;i(); + refreshBuffer(v); + // 刷新主界面提醒 + MainView.refreshRemind(); + // 弹出提示对话框,显示邮件发送成功和订单信息 + JOptionPane.showConfirmDialog(null,"发送邮件成功\r\n订单号:"+s[0]+"\r\n负责人:"+uname, "提示", JOptionPane.YES_OPTION); + + } + + + } + + }else if(exitBtn==source) { + // 弹出确认对话框,询问是否退出并清空购物车 + int res = JOptionPane.showConfirmDialog(null,"确定退出并清空购物车吗", "结账", JOptionPane.YES_NO_OPTION); + if(res==JOptionPane.YES_OPTION)/*如果退出*/{ + // 将购物车数组置空并刷新缓冲区 + v=new Vector();/*将数组置空*/ + refreshBuffer(v); + // 弹出提示对话框,显示退出成功 + JOptionPane.showConfirmDialog(null,"退出成功", "提示", JOptionPane.PLAIN_MESSAGE); + } + + } + } + } diff --git a/branch_zyx/MainView.java b/branch_zyx/MainView.java new file mode 100644 index 0000000..af24167 --- /dev/null +++ b/branch_zyx/MainView.java @@ -0,0 +1,702 @@ +package com.lingnan.supermarket.view; // 定义包名,所有视图相关的类都在这个包下 + +import java.awt.event.ActionEvent; // 导入ActionEvent类,用于监听动作事件 +import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现动作事件监听 +import java.awt.event.MouseEvent; // 导入MouseEvent类,用于监听鼠标事件 +import java.awt.event.MouseListener; // 导入MouseListener接口,用于实现鼠标事件监听 +import java.awt.event.WindowEvent; // 导入WindowEvent类,用于监听窗口事件 +import java.awt.event.WindowListener; // 导入WindowListener接口,用于实现窗口事件监听 +import java.io.File; // 导入File类,用于文件操作 +import java.io.IOException; // 导入IOException类,用于处理输入输出异常 +import java.util.Date; // 导入Date类,用于处理日期 +import java.util.Random; // 导入Random类,用于生成随机数 +import java.util.Vector; // 导入Vector类,用于实现动态数组 + +import javax.imageio.ImageIO; // 导入ImageIO类,用于图像输入输出 +import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 +import javax.swing.JButton; // 导入JButton类,用于创建按钮 +import javax.swing.JLabel; // 导入JLabel类,用于创建标签 +import javax.swing.JMenu; // 导入JMenu类,用于创建菜单 +import javax.swing.JMenuBar; // 导入JMenuBar类,用于创建菜单栏 +import javax.swing.JMenuItem; // 导入JMenuItem类,用于创建菜单项 +import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.JSplitPane; // 导入JSplitPane类,用于创建分隔面板 +import javax.swing.Timer; // 导入Timer类,用于实现定时器 + +import com.lingnan.supermarket.componet.BGPanel; // 导入自定义的BGPanel类 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入BufferImpl类,可能是数据访问层的实现 +import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; // 导入inOrderServiceImpl类,可能是订单服务的实现 +import com.lingnan.supermarket.dialog.CloseDialog; // 导入CloseDialog类,可能是关闭对话框 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能是入库对话框 +import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类,可能是用户对话框 +import com.lingnan.supermarket.dialog.UserInfDialog; // 导入UserInfDialog类,可能是用户信息对话框 +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,可能是订单数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入Production类,可能是产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,可能是用户数据传输对象 +import com.lingnan.supermarket.utils.DateUtil; // 导入DateUtil类,可能是日期工具类 +import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,可能是字体工具类 +import com.lingnan.supermarket.view.base.BaseView; // 导入BaseView类,可能是视图基类 + +import java.awt.*; // 导入awt包中的所有类 + +// 主视图类,继承自BaseView,并实现多个事件监听接口 +public class MainView extends BaseView implements ActionListener, MouseListener,WindowListener{ + + + JMenuBar menuBar; // 声明菜单栏变量 + JMenu settingMenu,helpMenu; // 声明设置菜单和帮助菜单变量 + + JMenuItem skinMenuItem,configMenuItem; // 声明皮肤菜单项和配置菜单项变量 + + + JSplitPane containerPanel; // 声明分隔面板变量,用于左右布局 + + CardLayout rightPanelLayout; // 声明卡片布局管理器变量,用于右侧面板 + JPanel leftPanel,rightPanel; // 声明左侧和右侧面板变量 + + /*菜单栏组件*/ + JLabel logoLabel,userMenuLabel1,homeMenuLabel,userMenuLabel,inMenuLabel, + outMenuLabel,storageMenuLabel,supplierMenuLabel,catalogMenuLabel; + // 声明菜单栏中各个标签的变量 + + static JLabel remindMenuLabel;/*声明静态标签变量,用于全局调用刷新*/ + + JPanel bottomPanel; // 声明底部面板变量 + + JLabel timeLabel; // 声明时间标签变量 + + JPanel purposePanel,timePanel; // 声明目的面板和时间面板变量 + JLabel purposeLabel; // 声明目的标签变量 + + + JButton saveBtn,unSaveBtn,cancleBtn;/*退出时按钮*/ + + // + Timer timer; // 声明定时器变量,用于执行周期性任务 + + private User user ;/*从登录界面传过来的用户信息,用于当前视图的用户上下文*/ + + private BufferImpl bufferImpl; // 声明BufferImpl对象,可能是用于缓存处理的实现 + + private Image bgImage ; // 声明背景图片变量 + private String iconSkin; // 声明图标皮肤路径变量 + private int skin; // 声明皮肤编号变量 + + private Vector vP=new Vector() ;/*用于进货缓存,存储产品信息*/ + + private int location; // 声明位置变量,可能用于记录当前视图的状态或位置 + + private int sSuper=-1;//界面权限,用于标识用户权限级别 + + private static inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 声明并实例化订单服务实现类 + + private static int unConfirmmark;/*未确认订单的数量*/ + + // 构造方法,接收用户信息、皮肤编号和图标皮肤路径 + public MainView(User user,int skin,String iconSkin) { + + super(1300,850,"新民超市管理系统欢迎您",user,skin); // 调用父类构造方法,设置窗口大小、标题、用户信息和皮肤 + timer = new Timer(1000,this); // 创建定时器,每1000毫秒执行一次 + timer.start(); // 启动定时器 + this.user = user; // 保存用户信息到当前视图 + this.sSuper=user.getUsuper();//界面权限,从用户信息中获取权限级别 + System.out.println("userid="+user.getId()); // 打印用户ID + this.addWindowListener(this); // 为当前窗口添加窗口事件监听器 + this.skin = skin; // 保存皮肤编号 + this.iconSkin = iconSkin; // 保存图标皮肤路径 + ImageIcon icon=new ImageIcon(iconSkin); // 创建ImageIcon对象,加载图标皮肤 + this.setIconImage(icon.getImage()); // 设置窗口图标 + // 获得未进货的信息 + Vector vInOrder; + vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找未确认的订单 + unConfirmmark=vInOrder.size(); // 设置未确认订单的数量 + initView(user,skin); // 初始化视图 + } + + // 另一个构造方法,只接收用户信息 + public MainView(User user) { + super(1300,850,"新民超市管理系统欢迎您"); // 调用父类构造方法,设置窗口大小和标题 + + timer = new Timer(1000,this); // 创建定时器,每1000毫秒执行一次 + + timer.start(); // 启动定时器 + + this.user = user; // 保存用户信息到当前视图 + + this.sSuper=user.getUsuper();//界面权限,从用户信息中获取权限级别 + + System.out.println("userid="+user.getId()); // 打印用户ID + + this.addWindowListener(this); // 为当前窗口添加窗口事件监听器 + // 获得未进货的信息 + Vector vInOrder; + + vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找未确认的订单 + + unConfirmmark=vInOrder.size(); // 设置未确认订单的数量 + + initView(user,skin); // 初始化视图,这里没有为skin赋值,可能会出错 + + } + + + public static void refreshRemind() { + Vector vInOrder; // 声明未确认订单的向量 + vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找所有未确认的订单 + unConfirmmark = vInOrder.size(); // 获取未确认订单的数量 + remindMenuLabel.setText("待确认进货:" + unConfirmmark); // 更新菜单标签,显示未确认订单的数量 + } + +// 以下是注释掉的代码,没有实现功能 +/* public static User getUserInf() { + return user; // 返回用户信息 +}*/ + + @Override + protected void initView(User user, int skin) { + // 初始化视图的方法,接收用户信息和皮肤编号 + + /*菜单栏*/ + menuBar = new JMenuBar(); // 创建菜单栏 + + settingMenu = new JMenu("设置"); // 创建设置菜单 + + helpMenu = new JMenu("帮助"); // 创建帮助菜单 + + skinMenuItem = new JMenuItem("随机切换皮肤", new ImageIcon("static\\icon\\skin.png")); // 创建切换皮肤的菜单项 + + /*for循环被注释掉了,没有实际作用 + for(int i = 3;i<9;i++) { + + }*/ + configMenuItem = new JMenuItem("参数设置", new ImageIcon("static\\icon\\setting.png")); // 创建参数设置的菜单项 + skinMenuItem.addActionListener(this); // 为切换皮肤菜单项添加动作监听器 + + settingMenu.add(configMenuItem); // 将参数设置菜单项添加到设置菜单 + settingMenu.add(skinMenuItem); // 将切换皮肤菜单项添加到设置菜单 + menuBar.add(settingMenu); // 将设置菜单添加到菜单栏 + menuBar.add(helpMenu); // 将帮助菜单添加到菜单栏 + + setJMenuBar(menuBar); // 将菜单栏设置到当前窗口 + + /*左边菜单栏设置*/ + try { + bgImage = ImageIO.read(new File("static\\bg\\bg" + skin + ".jpg")); // 读取背景图片 + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); // 打印异常堆栈信息 + + } + + leftPanel = new BGPanel(bgImage); /*皮肤*/ // 创建带有背景的左边面板 + leftPanel.setLayout(null); // 设置左边面板布局为空,即绝对布局 + + /*菜单栏:用户登录信息*/ + System.out.println("用户头像地址==" + user.getImg()); // 打印用户头像地址 + JLabel logoLabel = new JLabel(new ImageIcon(user.getImg()), JLabel.LEFT); // 创建用户头像标签 + System.out.println(user.getImg()); // 再次打印用户头像地址 + leftPanel.add(logoLabel); // 将用户头像标签添加到左边面板 + logoLabel.setBounds(25, 30, 150, 150); // 设置用户头像标签的位置和大小 + + /*账号名字*/ + String x = UsuperIcon(user.getUsuper()); /*判断权限返回icon地址*/ // 根据用户权限返回相应的图标地址 + + System.out.println("身份地址:" + x); // 打印身份图标地址 + + userMenuLabel1 = new JLabel("|" + user.getUsername() + "|" + user.getRname(), new ImageIcon(x), JLabel.LEFT); // 创建用户信息标签 + + userMenuLabel1.setFont(FontUtil.userFont); // 设置用户信息标签的字体 + + userMenuLabel1.addMouseListener(this); // 为用户信息标签添加鼠标监听器 + + userMenuLabel1.setBounds(20, 170, 180, 32); // 设置用户信息标签的位置和大小 + + userMenuLabel1.setForeground(Color.white); // 设置用户信息标签的前景色为白色 + + leftPanel.add(userMenuLabel1); /*添加用户选项到菜单栏*/ // 将用户信息标签添加到左边面板 + + + + + /*菜单栏:首页*/ + homeMenuLabel = new JLabel("新民首页", new ImageIcon("static\\icon\\home1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示首页菜单 + homeMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + homeMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + homeMenuLabel.setBounds(20, 250, 150, 32); // 设置菜单标签的位置和大小 + homeMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(homeMenuLabel); // 将首页菜单标签添加到左侧面板 + + /*菜单栏:人员管理*/ + userMenuLabel = new JLabel("人员管理", new ImageIcon("static\\icon\\user1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示人员管理菜单 + userMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + userMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + userMenuLabel.setBounds(20, 300, 150, 32); // 设置菜单标签的位置和大小 + userMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(userMenuLabel); // 将人员管理菜单标签添加到左侧面板 + + /*菜单栏:进货系统*/ + inMenuLabel = new JLabel("进货系统", new ImageIcon("static\\icon\\in1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示进货系统菜单 + inMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + inMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + inMenuLabel.setBounds(20, 350, 150, 32); // 设置菜单标签的位置和大小 + inMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(inMenuLabel); // 将进货系统菜单标签添加到左侧面板 + + /*菜单栏:收银系统*/ + outMenuLabel = new JLabel("收银系统", new ImageIcon("static\\icon\\out1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示收银系统菜单 + outMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + outMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + outMenuLabel.setBounds(20, 400, 150, 32); // 设置菜单标签的位置和大小 + outMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(outMenuLabel); // 将收银系统菜单标签添加到左侧面板 + + /*菜单栏:库存*/ + storageMenuLabel = new JLabel("商品库存", new ImageIcon("static\\icon\\storage1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品库存菜单 + storageMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + storageMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + storageMenuLabel.setBounds(20, 450, 150, 32); // 设置菜单标签的位置和大小 + storageMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(storageMenuLabel); // 将商品库存菜单标签添加到左侧面板 + + /*菜单栏:供应商*/ + supplierMenuLabel = new JLabel("供应商", new ImageIcon("static\\icon\\supplier1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示供应商菜单 + supplierMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + supplierMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + supplierMenuLabel.setBounds(20, 500, 150, 32); // 设置菜单标签的位置和大小 + supplierMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(supplierMenuLabel); // 将供应商菜单标签添加到左侧面板 + + /*菜单栏:商品目录*/ + catalogMenuLabel = new JLabel("商品目录", new ImageIcon("static\\icon\\catalog1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品目录菜单 + catalogMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + catalogMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + catalogMenuLabel.setBounds(20, 550, 150, 32); // 设置菜单标签的位置和大小 + catalogMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(catalogMenuLabel); // 将商品目录菜单标签添加到左侧面板 + + + /*提醒进货确认模块*/ + remindMenuLabel = new JLabel("待确认进货:"+unConfirmmark, new ImageIcon("static\\icon\\remind1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于显示待确认进货的数量 + remindMenuLabel.setFont(FontUtil.remindFont); // 设置提醒菜单标签的字体样式 + remindMenuLabel.addMouseListener(this); // 为提醒菜单标签添加鼠标事件监听器 + remindMenuLabel.setBounds(0, 650, 200, 32); // 设置提醒菜单标签的位置和大小 + remindMenuLabel.setForeground(Color.white); // 设置提醒菜单标签的前景色为白色 + leftPanel.add(remindMenuLabel); // 将提醒菜单标签添加到左侧面板 + +// 设置右侧面板的布局管理器为卡片布局 + rightPanelLayout = new CardLayout(); + +// 0.超市首页展示,创建并实例化首页视图面板 + JPanel homePanel = new HomeView(this); + +// 1.用户管理界面:用户的列表,创建并实例化用户管理视图面板 + JPanel userPanel = new UserView(this); + +// 2.进货系统界面,创建并实例化进货系统视图面板 + JPanel inPanel = new InView(this, user, vP, 1); + +// 3.收银系统界面,创建并实例化收银系统视图面板 + JPanel outPanel = new OutView(this, user); + +// 4.库存系统界面,创建并实例化库存系统视图面板 + JPanel storagePanel = new StorageView(this); + +// 5.供应商界面,创建并实例化供应商视图面板 + JPanel supplierPanel = new SupplierView(this); + +// 6.商品目录界面,创建并实例化商品目录视图面板 + JPanel ProdCatalogPanel = new ProdCatalogView(this); + +// 7.超市总览界面,创建并实例化超市总览视图面板 + JPanel superPanel = new SuperView(this); + +// 8.进货信息提示界面,创建并实例化进货信息提示视图面板 + JPanel inPanel2 = new InView(this, user, vP, 0); + +// 创建右侧面板并设置布局管理器为之前定义的卡片布局 + rightPanel = new JPanel(rightPanelLayout); + rightPanel.add(homePanel, "0"); // 添加首页视图面板并设置其索引为"0" + rightPanel.add(userPanel, "1"); // 添加用户管理视图面板并设置其索引为"1" + rightPanel.add(inPanel, "2"); // 添加进货系统视图面板并设置其索引为"2" + rightPanel.add(outPanel, "3"); // 添加收银系统视图面板并设置其索引为"3" + rightPanel.add(storagePanel, "4"); // 添加库存系统视图面板并设置其索引为"4" + rightPanel.add(supplierPanel, "5"); // 添加供应商视图面板并设置其索引为"5" + rightPanel.add(ProdCatalogPanel, "6"); // 添加商品目录视图面板并设置其索引为"6" + rightPanel.add(superPanel, "7"); // 添加超市总览视图面板并设置其索引为"7" + rightPanel.add(inPanel2, "8"); // 添加进货信息提示视图面板并设置其索引为"8" + +// 创建一个分割面板,将左侧面板和右侧面板水平分割 + containerPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel); + containerPanel.setDividerLocation(180); // 设置分割线的位置 + containerPanel.setDividerSize(0); // 设置分割线的尺寸为0,即隐藏分割线 + +// 创建底部面板,默认使用流式布局 + bottomPanel = new JPanel(); + bottomPanel.setBackground(Color.WHITE); // 设置底部面板的背景色为白色 + bottomPanel.setLayout(new BorderLayout()); // 设置底部面板的布局管理器为边界布局 + +// 创建目的地区面板,用于显示当前位置信息 + purposePanel = new JPanel(); + purposePanel.setLayout(new FlowLayout(FlowLayout.LEFT)); // 设置目的地区面板的布局管理器为左对齐的流式布局 + purposePanel.setBackground(Color.WHITE); // 设置目的地区面板的背景色为白色 + purposeLabel = new JLabel("当前位置是:超市首页"); // 创建标签显示当前位置信息 + purposePanel.add(purposeLabel); // 将位置信息标签添加到目的地区面板 + + + // 创建一个新的 JPanel 实例用于显示时间 + timePanel=new JPanel(); +// 设置 timePanel 的布局为 FlowLayout,并指定元素靠右对齐 + timePanel.setLayout(new FlowLayout(FlowLayout.TRAILING)); +// 设置 timePanel 的背景颜色为白色 + timePanel.setBackground(Color.WHITE); +// 创建一个新的 JLabel 实例,显示当前日期和时间,使用 DateUtil 工具类进行格式化 + timeLabel = new JLabel(DateUtil.dateToString(new Date(),null)); +// 将 timeLabel 添加到 timePanel 中 + timePanel.add(timeLabel); +// 将 purposePanel 添加到 bottomPanel 的西边(West) + bottomPanel.add(purposePanel,"West"); +// 将 timePanel 添加到 bottomPanel 的东边(East) + bottomPanel.add(timePanel,"East"); +// 获取当前窗口的内容窗格 + Container container = getContentPane(); +// 将 containerPanel 添加到内容窗格的中心(Center) + container.add(containerPanel,"Center"); +// 将 bottomPanel 添加到内容窗格的南边(South) + container.add(bottomPanel,"South"); + + } + + @Override + // 定义当触发动作事件时的处理方法 + public void actionPerformed(ActionEvent e) { + // 获取触发事件的源对象 + Object source = e.getSource(); + // 更新时间标签以显示当前时间 + timeLabel.setText(DateUtil.dateToString(new Date(),null)); + // 检查事件源是否为皮肤菜单项,如果是则进行换肤操作 + if(source==skinMenuItem)/*换肤*/{ + // 打印换肤操作信息到控制台 + System.out.println("切换皮肤"); + // 创建一个新的随机数生成器实例 + Random random=new Random(); + // 生成一个0到9之间的随机数作为皮肤编号 + skin=random.nextInt(10); + // 销毁当前窗口 + this.dispose(); + // 创建并显示一个新的主视图窗口,传入用户信息、皮肤编号和图标皮肤 + new MainView(user,skin,iconSkin); + + } + + } + + @Override/*左侧菜单栏点击事件*/ + // 定义当鼠标点击事件发生时的处理方法 + public void mouseClicked(MouseEvent e) { + // 获取触发事件的源对象 + Object source = e.getSource(); + // 检查事件源是否为首页菜单标签,如果是则显示对应的面板 + if(source==homeMenuLabel) { + rightPanelLayout.show(rightPanel,"0"); // 显示首页面板 + location=0; // 更新当前位置索引为0 + } + // 检查事件源是否为用户菜单标签,根据权限显示不同面板 + else if(source==userMenuLabel) { + if(sSuper==0) // 如果权限为0 + rightPanelLayout.show(rightPanel,"1"); // 显示用户面板1 + else{ // 如果权限不为0 + rightPanelLayout.show(rightPanel,"7"); // 显示用户面板7 + } + location=1; // 更新当前位置索引为1 + } + // 检查事件源是否为入库菜单标签,根据权限显示不同面板 + else if(source==inMenuLabel) { + if(sSuper==2) // 如果权限为2 + rightPanelLayout.show(rightPanel,"7"); // 显示面板7 + else{ // 如果权限不为2 + rightPanelLayout.show(rightPanel,"2"); // 显示入库面板 + } + location=2; // 更新当前位置索引为2 + } + // 检查事件源是否为出库菜单标签,如果是则显示对应的面板 + else if(source==outMenuLabel) { + rightPanelLayout.show(rightPanel,"3"); // 显示出库面板 + location=3; // 更新当前位置索引为3 + } + // 检查事件源是否为库存菜单标签,如果是则显示对应的面板 + else if(source==storageMenuLabel) { + rightPanelLayout.show(rightPanel,"4"); // 显示库存面板 + location=4; // 更新当前位置索引为4 + } + // 检查事件源是否为供应商菜单标签,如果是则显示对应的面板 + else if(source==supplierMenuLabel) { + rightPanelLayout.show(rightPanel,"5"); // 显示供应商面板 + location=5; // 更新当前位置索引为5 + } + // 检查事件源是否为目录菜单标签,如果是则显示对应的面板 + else if(source==catalogMenuLabel) { + rightPanelLayout.show(rightPanel,"6"); // 显示目录面板 + location=6; // 更新当前位置索引为6 + } + // 检查事件源是否为提醒菜单标签,根据权限显示不同面板 + else if(source==remindMenuLabel) { + if(sSuper==2) // 如果权限为2 + rightPanelLayout.show(rightPanel,"7"); // 显示面板7 + else{ // 如果权限不为2 + rightPanelLayout.show(rightPanel,"8"); // 显示提醒面板 + } + location=7; // 更新当前位置索引为7 + } + // 检查事件源是否为用户信息菜单标签1,如果是则显示用户信息对话框 + else if(source==userMenuLabel1){ + UserInfDialog userInfDialog = new UserInfDialog(this,user); // 创建用户信息对话框 + userInfDialog.setVisible(true); // 显示用户信息对话框 + location=8; // 更新当前位置索引为8 + } + + // 调用refreshRemove方法,可能用于刷新界面或执行其他操作 + refreshRemove(); + } + + //获取当前位置 + // 定义一个方法用于刷新和移除面板内容 + public void refreshRemove(){ + + // 从目的面板中移除所有组件 + purposePanel.removeAll(); + + // 根据当前的位置索引设置不同的目的标签文本 + if(location==0){ + purposeLabel = new JLabel("当前位置是:"+homeMenuLabel.getText()); // 设置当前位置为首页 + } + else if(location==1){ + purposeLabel = new JLabel("当前位置是:"+userMenuLabel.getText()); // 设置当前位置为用户菜单 + } + else if(location==2){ + purposeLabel = new JLabel("当前位置是:"+inMenuLabel.getText()); // 设置当前位置为入库菜单 + } + else if(location==3){ + purposeLabel = new JLabel("当前位置是:"+outMenuLabel.getText()); // 设置当前位置为出库菜单 + } + else if(location==4){ + purposeLabel = new JLabel("当前位置是:"+storageMenuLabel.getText()); // 设置当前位置为库存菜单 + } + else if(location==5){ + purposeLabel = new JLabel("当前位置是:"+supplierMenuLabel.getText()); // 设置当前位置为供应商菜单 + } + else{ + purposeLabel = new JLabel("当前位置是:"+catalogMenuLabel.getText()); // 设置当前位置为目录菜单 + } + + // 将新的目的标签添加到目的面板 + purposePanel.add(purposeLabel); + + // 可能需要调用重新绘制界面或更新界面显示的方法,但这里没有显示出来 + } + + + @Override + public void mousePressed(MouseEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseReleased(MouseEvent e) { + // TODO Auto-generated method stub + + } + + @Override/*鼠标焦点时*/ + // 重写鼠标进入组件事件的处理方法 + public void mouseEntered(MouseEvent e) { + // 获取触发事件的源对象 + Object source = e.getSource(); + + // 如果事件源是首页菜单标签,则改变前景色和图标 + if(source==homeMenuLabel) { + homeMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是用户菜单标签,则改变前景色和图标 + if(source==userMenuLabel) { + userMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + userMenuLabel.setIcon(new ImageIcon("static\\icon\\user2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是入库菜单标签,则改变前景色和图标 + else if(source==inMenuLabel) { + inMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + inMenuLabel.setIcon(new ImageIcon("static\\icon\\in2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是出库菜单标签,则改变前景色和图标 + else if(source==outMenuLabel) { + outMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + outMenuLabel.setIcon(new ImageIcon("static\\icon\\out2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是库存菜单标签,则改变前景色和图标 + else if(source==storageMenuLabel) { + storageMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是供应商菜单标签,则改变前景色和图标 + else if(source==supplierMenuLabel) { + supplierMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是目录菜单标签,则改变前景色和图标 + else if(source==catalogMenuLabel) { + catalogMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是用户菜单标签1,则改变前景色 + else if(source==userMenuLabel1) { + userMenuLabel1.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标进入图标 + } + // 方法结束,没有设置图标的变化,只是改变了前景色 + } + + + @Override + // 重写鼠标离开组件事件的处理方法 + public void mouseExited(MouseEvent e) { + // 获取触发事件的源对象 + Object source = e.getSource(); + + // 如果事件源是首页菜单标签,则恢复前景色和图标 + if(source==homeMenuLabel) { + homeMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是用户菜单标签,则恢复前景色和图标 + else if(source==userMenuLabel) { + userMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + userMenuLabel.setIcon(new ImageIcon("static\\icon\\user1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是入库菜单标签,则恢复前景色和图标 + else if(source==inMenuLabel) { + inMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + inMenuLabel.setIcon(new ImageIcon("static\\icon\\in1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是出库菜单标签,则恢复前景色和图标 + else if(source==outMenuLabel) { + outMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + outMenuLabel.setIcon(new ImageIcon("static\\icon\\out1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是库存菜单标签,则恢复前景色和图标 + else if(source==storageMenuLabel) { + storageMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是供应商菜单标签,则恢复前景色和图标 + else if(source==supplierMenuLabel) { + supplierMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是目录菜单标签,则恢复前景色和图标 + else if(source==catalogMenuLabel) { + catalogMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源不是上述任何一个标签,则默认处理用户菜单标签1 + else { + userMenuLabel1.setForeground(Color.white); // 恢复前景色为白色 + // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标离开图标 + } + // 方法结束,所有菜单标签的前景色和图标已根据鼠标离开事件进行了相应的恢复 + } + + + + @Override + protected void initView() { + // TODO Auto-generated method stub + + } + + @Override + public void windowOpened(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + // 重写窗口关闭事件的处理方法 + public void windowClosing(WindowEvent e) { + // TODO Auto-generated method stub + // 获取触发事件的源对象 + Object source = e.getSource(); + + // 如果事件源是当前窗口对象,执行以下操作 + if(source==this) { + // 关闭窗口时检查进货系统和出货系统是否还有记录 + this.vP =InView.getVector(); // 获取进货系统的记录向量 + System.out.println("v的size="+vP.size()); // 打印进货系统记录的数量 + bufferImpl = new BufferImpl(); // 创建缓冲区实现对象 + + // 如果进货系统的购物车还有记录或者出货系统的缓冲区还有记录 + if(vP.size()!=0||bufferImpl.allOutBuffer().size()!=0) { + // 如果购物车还有记录,则显示关闭确认对话框 + CloseDialog closeDialog = new CloseDialog(this,vP); // 创建关闭对话框 + closeDialog.setVisible(true); // 显示关闭对话框 + } else { + // 如果没有记录,则直接退出程序 + System.exit(0); // 安全退出程序 + } + } + // 方法结束,窗口关闭事件已处理 + } + + + @Override + public void windowClosed(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowIconified(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowDeiconified(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowActivated(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowDeactivated(WindowEvent e) { + // TODO Auto-generated method stub + + } + + + + + + + +} diff --git a/branch_zyx/My_branch/ChangeStatusDialog.java b/branch_zyx/My_branch/ChangeStatusDialog.java new file mode 100644 index 0000000..7e6235f --- /dev/null +++ b/branch_zyx/My_branch/ChangeStatusDialog.java @@ -0,0 +1,189 @@ +package com.lingnan.supermarket.dialog; // 声明当前类所在的包 + +import java.awt.Container; // 导入AWT容器类 +import java.awt.FlowLayout; // 导入流式布局类 +import java.awt.event.ActionEvent; // 导入动作事件类 +import java.awt.event.ActionListener; // 导入动作监听器接口 +import java.awt.event.ItemEvent; // 导入项目事件类 +import java.awt.event.ItemListener; // 导入项目监听器接口 +import java.util.Vector; // 导入向量类,用于存储对象集合 + +import javax.swing.JButton; // 导入Swing按钮组件 +import javax.swing.JComboBox; // 导入Swing下拉框组件 +import javax.swing.JDialog; // 导入Swing对话框组件 +import javax.swing.JFrame; // 导入Swing顶层窗口组件 +import javax.swing.JLabel; // 导入Swing标签组件 +import javax.swing.JOptionPane; // 导入Swing对话框工具类 +import javax.swing.JPanel; // 导入Swing面板组件 +import javax.swing.JTable; // 导入Swing表格组件 +import javax.swing.JTextField; // 导入Swing文本框组件 + +import com.lingnan.supermarket.*; // 导入超市项目相关包 +import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区实现类 +import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 +import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; // 导入入库订单服务实现类 +import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; // 导入入库记录服务实现类 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 +import com.lingnan.supermarket.dao.impl.storageRecordImpl; // 导入库存记录服务实现类 +import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 +import com.lingnan.supermarket.dto.InOrder; // 导入入库订单数据传输对象 +import com.lingnan.supermarket.dto.InRecord; // 导入入库记录数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 +import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 +import com.lingnan.supermarket.utils.TimeAndOrder; // 导入时间和订单工具类 +import com.lingnan.supermarket.view.HomeView; // 导入主页视图类 +import com.lingnan.supermarket.view.OutView; // 导入出库视图类 +import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener + + + +public class ChangeStatusDialog extends JDialog implements ActionListener{ // 定义一个对话框类,实现动作监听器接口 + + private JPanel statusPanel,opePanel,titlePanel,comboPanel; // 声明面板变量,用于不同的功能区域 + + private JLabel titleLabel,statusLabel; // 声明标签变量,用于显示标题和状态信息 + + private JButton UpdateBtn,cancelBtn; // 声明按钮变量,用于更新和取消操作 + + private String iNumber; // 订单编号 + private String status; // 订单状态 + + private Vector InRecords; // 存储入库记录的向量 + + private JComboBox combo; // 下拉框组件,用于选择订单状态 + + private String[] log = { "待入库", "已入库", "取消订单" }; // 订单状态数组 + + private inRecordServiceImpl inRecordImpl; // 入库记录服务实现类 + + private int catalog; // 分类标识 + + private productionImpl productionImpl; // 产品服务实现类 + + // 构造方法,接收父窗口、订单编号和订单状态作为参数 + public ChangeStatusDialog(JFrame parent,String iNumber,String status) { + super(parent,"修改进货订单状态"); // 调用父类构造方法,设置对话框标题 + + setSize(400,200); // 设置对话框大小 + setLocationRelativeTo(null); // 设置对话框相对于父窗口居中 + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框大小不可变 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + this.iNumber=iNumber; // 将传入的订单编号赋值给成员变量 + this.status=status; // 将传入的订单状态赋值给成员变量 + initView(); // 调用方法初始化视图 + } + + + + + + + + private void initView() { // 初始化视图的私有方法 + + titlePanel = new JPanel(); // 创建标题面板 + titleLabel = new JLabel("修改订单为"+iNumber+"的状态"); // 创建标题标签,显示订单编号 + titlePanel.add(titleLabel); // 将标题标签添加到标题面板 + + statusPanel = new JPanel(); // 创建状态面板 + statusLabel = new JLabel("当前状态:"+status); // 创建状态标签,显示当前订单状态 + statusPanel.add(statusLabel); // 将状态标签添加到状态面板 + + comboPanel = new JPanel(); // 创建下拉框面板 + combo = new JComboBox(log); // 创建下拉框,使用订单状态数组初始化 + combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 + comboPanel.add(combo); // 将下拉框添加到下拉框面板 + + opePanel = new JPanel(); // 创建操作按钮面板 + UpdateBtn = new JButton("更改"); // 创建更改按钮 + cancelBtn = new JButton("取消"); // 创建取消按钮 + UpdateBtn.addActionListener(this); // 为更改按钮添加动作监听器 + cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 + opePanel.add(UpdateBtn); // 将更改按钮添加到操作按钮面板 + opePanel.add(cancelBtn); // 将取消按钮添加到操作按钮面板 + + Container container = getContentPane(); // 获取内容面板 + container.add(titlePanel,"North"); // 将标题面板添加到内容面板的北部 + container.add(statusPanel,"Center"); // 将状态面板添加到内容面板的中心 + container.add(comboPanel,"South"); // 将下拉框面板添加到内容面板的南部 + container.add(opePanel); // 将操作按钮面板添加到内容面板 + + } + + public class MyItemListener implements ItemListener { // 定义一个内部类,实现项目监听器接口 + + @Override + public void itemStateChanged(ItemEvent e) { // 实现项目状态改变时的处理方法 + JComboBox cb = (JComboBox) e.getSource(); // 获取事件源,即下拉框 + String catalog1 = (String) cb.getSelectedItem(); // 获取下拉框选中的项 + if (catalog1.equals("已入库")) { // 如果选中项为"已入库" + catalog = 1; // 将分类标识设置为1 + } + else if (catalog1.equals("待入库")) { // 如果选中项为"待入库" + catalog = 2; // 将分类标识设置为2 + } else if (catalog1.equals("取消订单")) { // 如果选中项为"取消订单" + catalog = 3; // 将分类标识设置为3 + + } + + } + + } + + + + public Vector getVector(){ // 定义一个公共方法,返回一个InRecord类型的Vector + return InRecords; // 返回成员变量InRecords,它是一个包含InRecord对象的Vector + } + + + + + + + @Override + public void actionPerformed(ActionEvent e) { // 重写actionPerformed方法以响应按钮点击事件 + Object source = e.getSource(); // 获取事件源 + if(source==UpdateBtn){ // 如果事件源是更新按钮 + System.out.println("此时此刻的catalog为"+catalog); // 打印当前catalog的值 + //这里修改进货订单表的状态*/ + inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 创建进货订单服务实现类的实例 + inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建进货记录服务实现类的实例 + storageRecordImpl storageRecordImpl = new storageRecordImpl(); // 创建库存记录服务实现类的实例 + productionImpl = new productionImpl(); // 创建产品服务实现类的实例 + Production p ; // 声明产品对象 + //获得订单信息 + + //修改状态 + inOrderImpl.updateInOrderStatus(iNumber,catalog); // 更新进货订单的状态 + //确认进货,修改状态并对库存和库存日志修改 + if(catalog==1) { // 如果catalog等于1 + //获得订单详细信息 + this.InRecords = inRecordImpl.findByIdinRecord(iNumber); // 根据订单编号查找进货记录 + //遍历添加库存 + String s[]=TimeAndOrder.TimeAndOrder("");/*生成时间*/ + for(InRecord i:InRecords) { // 遍历进货记录 + //查找到原来的价格 + //更新库存表 + productionImpl.updateProductionSum(i.getId(),i.getSum()); // 更新产品库存数量 + //增加库存日志表 + storageRecordImpl.insertStorageRecord(iNumber,s[1], i.getId(),"+", i.getSum()); // 插入库存记录 + } + + JOptionPane.showMessageDialog(this,"订单已确认,库存更新成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示消息对话框 + } + /*刷新首页*/ + this.dispose(); // 关闭当前对话框 + + } + else if(source == cancelBtn) { // 如果事件源是取消按钮 + + this.dispose(); // 关闭当前对话框 + + } + } +} diff --git a/branch_zyx/My_branch/ChangeSumDialog.java b/branch_zyx/My_branch/ChangeSumDialog.java new file mode 100644 index 0000000..6476689 --- /dev/null +++ b/branch_zyx/My_branch/ChangeSumDialog.java @@ -0,0 +1,186 @@ +package com.lingnan.supermarket.dialog; // 声明当前类所在的包 + +import java.awt.Container; // 导入AWT容器类 +import java.awt.FlowLayout; // 导入流式布局类 +import java.awt.event.ActionEvent; // 导入动作事件类 +import java.awt.event.ActionListener; // 导入动作监听器接口 +import java.util.Vector; // 导入向量类,用于存储对象集合 + +import javax.swing.JButton; // 导入Swing按钮组件 +import javax.swing.JDialog; // 导入Swing对话框组件 +import javax.swing.JFrame; // 导入Swing顶层窗口组件 +import javax.swing.JLabel; // 导入Swing标签组件 +import javax.swing.JOptionPane; // 导入Swing对话框工具类 +import javax.swing.JPanel; // 导入Swing面板组件 +import javax.swing.JTable; // 导入Swing表格组件 +import javax.swing.JTextField; // 导入Swing文本框组件 + +import com.lingnan.supermarket.*; // 导入超市项目相关的包 +import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区服务实现类 +import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 +import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 +import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 +import com.lingnan.supermarket.view.OutView; // 导入出库视图类 + + + +public class ChangeSumDialog extends JDialog implements ActionListener{ // 定义一个对话框类ChangeSumDialog,继承自JDialog并实现ActionListener接口 + + private JPanel prodIdPanel,sumPanel,phonePanel,opePanel,titlePanel; // 声明多个面板变量,用于布局不同的组件 + + private JLabel prodIdLabel,sumLabel,titleLabel; // 声明标签变量,用于显示文本 + private JTextField prodIdTF,sumTF; // 声明文本框变量,用于输入数据 + + private JButton UpdateBtn,cancelBtn; // 声明按钮变量,用于执行更新和取消操作 + + private OutTableModel outTableModel = new OutTableModel(); // 创建出库表格模型实例 + + private Buffer buffer; // 声明缓冲区对象变量 + + private String prodId,mark; /*mark用来标记是进货还是出货系统*/ // 声明字符串变量,用于存储产品ID和标记 + + private Vector v; // 声明向量变量,用于存储产品集合 + + public ChangeSumDialog(JFrame parent,String prodId,String mark,Vector v) { // 构造方法,接收父窗口、产品ID、标记和产品集合作为参数 + super(parent,"更改商品数量"); // 调用父类构造方法,设置对话框标题 + + setSize(350,200); // 设置对话框大小 + setLocationRelativeTo(null); // 设置对话框相对于父窗口居中显示 + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框不可调整大小 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + this.prodId=prodId; // 将参数prodId赋值给成员变量prodId + this.mark=mark; // 将参数mark赋值给成员变量mark + this.v = v; // 将参数v赋值给成员变量v + initView(); // 初始化视图 + + } + + public ChangeSumDialog(JFrame parent,String prodId,String mark) { // 另一个构造方法,接收父窗口、产品ID和标记作为参数 + super(parent,"更改商品数量"); // 调用父类构造方法,设置对话框标题为"更改商品数量" + + setSize(350,200); // 设置对话框大小为350x200像素 + setLocationRelativeTo(null); // 设置对话框位置相对于父窗口居中显示 + setModal(true); // 设置对话框为模态,即用户必须处理完此对话框才能操作其他窗口 + setResizable(false); // 设置对话框大小不可变 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + this.prodId=prodId; // 将传入的产品ID赋值给成员变量prodId + this.mark=mark; // 将传入的标记赋值给成员变量mark + initView(); // 调用方法初始化视图 + + } + + + + + + private void initView() { + + titlePanel = new JPanel(); + titleLabel = new JLabel("修改商品id为"+prodId+"的数量"); + titlePanel.add(titleLabel); + + + + sumPanel = new JPanel(); + sumLabel = new JLabel("数量"); + sumTF = new JTextField(15); + sumPanel.add(sumLabel); + sumPanel.add(sumTF); + + + opePanel = new JPanel(); + UpdateBtn = new JButton("更改"); + cancelBtn = new JButton("取消"); + UpdateBtn.addActionListener(this); + cancelBtn.addActionListener(this); + opePanel.add(UpdateBtn); + opePanel.add(cancelBtn); + + Container container = getContentPane(); + container.add(titlePanel); + container.add(sumPanel); + container.add(opePanel); + } + + public Vector getVector(){ + return v; + } + + @Override + public void actionPerformed(ActionEvent e) { + Object source = e.getSource(); + if(source==UpdateBtn){ + + //TODO 参数校验 + /*/返回这个记录的信息*/ + + int sum = Integer.parseInt(sumTF.getText());/*获得数量*/ + System.out.println("所要修改的数量sum="+sum); + + if(sumTF.getText().equals("")) { + JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); + return; + } + + if(sum<0) {/*判断输入大于0*/ + JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); + return; + } + + + + + BufferImpl bufferImpl = new BufferImpl(); + + productionImpl productionImpl = new productionImpl(); + Production production = new Production(); + production = productionImpl.findByIdProduction(prodId); + + Buffer buffer = new Buffer(); + boolean flag = false; + + if(mark=="In") {/*进货界面*/ + for(Production p:v) { + if(p.getId().equals(prodId)) + p.setSum(sum); + } + + } + + else if(mark=="Out") {/*出货界面*/ + buffer = bufferImpl.findInBufferbyId(prodId); + if(buffer!=null) {/*记录有这条数据*/ + if(sum>production.getSum())/*修改数量超过库存*/ + JOptionPane.showMessageDialog(this,"库存数量为:"+production.getSum()+",修改数量请勿超过库存","提示",JOptionPane.ERROR_MESSAGE); + else + flag = bufferImpl.UpdateInBufferById(prodId, sum); + + } + + } + + + if(flag = true) {/*如果修改成功*/ + + JOptionPane.showMessageDialog(this,"修改成功","提示",JOptionPane.INFORMATION_MESSAGE); + dispose(); + + }else { + JOptionPane.showMessageDialog(this,"修改失败","提示",JOptionPane.ERROR_MESSAGE); + dispose(); + } + } + + else if(source == cancelBtn) { + + this.dispose(); + } + } +} diff --git a/branch_zyx/My_branch/InDialog.java b/branch_zyx/My_branch/InDialog.java new file mode 100644 index 0000000..04f10a5 --- /dev/null +++ b/branch_zyx/My_branch/InDialog.java @@ -0,0 +1,230 @@ +package com.lingnan.supermarket.dialog; // 声明当前类所在的包 + +import java.awt.Container; // 导入AWT容器类 +import java.awt.FlowLayout; // 导入流式布局类 +import java.awt.event.ActionEvent; // 导入动作事件类 +import java.awt.event.ActionListener; // 导入动作监听器接口 +import java.awt.event.ItemEvent; // 导入项目事件类 +import java.awt.event.ItemListener; // 导入项目监听器接口 +import java.util.Vector; // 导入向量类,用于存储对象集合 + +import javax.swing.JButton; // 导入按钮组件类 +import javax.swing.JComboBox; // 导入下拉框组件类 +import javax.swing.JDialog; // 导入对话框组件类 +import javax.swing.JFrame; // 导入顶层窗口类 +import javax.swing.JLabel; // 导入标签组件类 +import javax.swing.JOptionPane; // 导入对话框工具类 +import javax.swing.JPanel; // 导入面板组件类 +import javax.swing.JTable; // 导入表格组件类 +import javax.swing.JTextField; // 导入文本框组件类 + +import com.lingnan.supermarket.*; // 导入超市项目相关的所有类 +import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区服务实现类 +import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 +import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 +import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 +import com.lingnan.supermarket.view.InView; // 导入进货视图类 +import com.lingnan.supermarket.view.OutView; // 导出出库视图类 +import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener + + + +public class InDialog extends JDialog implements ActionListener{ // 定义一个对话框类InDialog,继承自JDialog并实现ActionListener接口 + + private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; // 声明面板变量,用于不同功能的面板 + + private JLabel prodIdLabel,sumLabel; // 声明标签变量,用于显示文本 + private JTextField prodIdTF,sumTF; // 声明文本框变量,用于输入数据 + + private JButton addBtn,cancelBtn; // 声明按钮变量,用于添加和取消操作 + + private OutTableModel outTableModel = new OutTableModel(); // 创建出库表格模型实例 + + private Production production; // 声明产品数据传输对象 + private productionImpl productionImpl; // 声明产品服务实现类 + + private Vector v; // 声明产品集合变量 + + private User user; // 声明用户数据传输对象 + + private JFrame JFramparent; // 声明顶层窗口变量,用于存储父窗口 + + private JComboBox combo; // 声明下拉框组件变量 + private String allProdId[] = null; // 声明字符串数组,用于存储所有产品ID + private Vector vAll; // 声明产品集合变量,用于存储所有产品 + private static String catalog; // 声明静态字符串变量,用于存储分类信息 + + public InDialog(JFrame parent,Vector v,User user) { // 构造方法,接收父窗口、产品集合和用户对象 + super(parent,"添加商品"); // 调用父类构造方法,设置对话框标题 + + setSize(250,200); // 设置对话框大小 + setLocationRelativeTo(null); // 设置对话框居中显示 + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框不可调整大小 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + JFramparent=parent; // 初始化父窗口变量 + this.v=v; // 初始化产品集合变量 + this.user = user; // 初始化用户对象 + initView(); // 初始化视图 + + + + } + + + + + + private void initView() { + prodIdPanel = new JPanel(); // 创建一个面板用于显示产品编号 + prodIdLabel = new JLabel("编号"); // 创建一个标签显示"编号" + + productionImpl= new productionImpl(); // 实例化产品服务实现类 + vAll=productionImpl.findAllproduction(); // 调用方法获取所有产品信息 + allProdId = new String[vAll.size()]; // 初始化字符串数组,用于存储所有产品ID + for(int i=0;i(allProdId); // 创建下拉框,并使用产品ID数组初始化 + combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 + + + prodIdPanel.add(prodIdLabel); // 将标签添加到编号面板 + prodIdPanel.add(combo); // 将下拉框添加到编号面板 + + + + sumPanel = new JPanel(); // 创建一个面板用于显示数量 + sumLabel = new JLabel("数量"); // 创建一个标签显示"数量" + sumTF = new JTextField(10); // 创建一个文本框用于输入数量,宽度为10 + sumPanel.add(sumLabel); // 将标签添加到数量面板 + sumPanel.add(sumTF); // 将文本框添加到数量面板 + + + opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 + addBtn = new JButton("添加"); // 创建一个按钮显示"添加" + cancelBtn = new JButton("取消"); // 创建一个按钮显示"取消" + addBtn.addActionListener(this); // 为添加按钮添加动作监听器 + cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(cancelBtn); // 将取消按钮添加到操作面板 + + + Container container = getContentPane(); // 获取内容面板 + container.add(prodIdPanel); // 将编号面板添加到内容面板 + container.add(sumPanel); // 将数量面板添加到内容面板 + container.add(opePanel); // 将操作面板添加到内容面板 + } + + /*将数组传到inview的刷新方法里面再刷新*/ + public Vector getVector(){ // 提供一个方法获取产品集合 + return v; + } + + //下拉框监听 + static class MyItemListener implements ItemListener{ // 定义一个内部类实现ItemListener接口 + + @Override + public void itemStateChanged(ItemEvent e) { // 实现项目状态改变时的处理方法 + JComboBox cb=(JComboBox)e.getSource(); // 获取事件源下拉框 + String select=(String) cb.getSelectedItem(); // 获取选中项的值 + catalog=select; // 更新分类信息为选中项的值 + + } + + } + + + + + + + + + @Override + public void actionPerformed(ActionEvent e) { + Object source = e.getSource(); // 获取事件源 + if(source==addBtn){ // 如果事件源是添加按钮 + //1.判断是否存在这个商品 + //2.如果存在就获取这条商品记录为一个对象 + //3.判断购物缓冲区是否有这个记录 + //3.1如果有update数量和price + //3.2如果没有就insert这条记录,把sum更新 + //保存到数据库 + //关闭对话框 + //刷新table + + + String prodId =catalog; // 获取选中的商品ID + System.out.println("proId="+prodId); // 打印商品ID + System.out.println("vatalog="+catalog); // 打印分类信息 + + + if(sumTF.getText().equals("")) { // 判断数量文本框是否为空 + JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); + return; + } + int sum = Integer.parseInt(sumTF.getText()) ; // 将文本框中的数量转换为整数 + + if(sum<0) {/*判断输入大于0*/ + JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); + return; + } + + //TODO 参数校验 + /*/判断是已添加,未添加还是不存在*/ + productionImpl productionImpl = new productionImpl(); // 实例化产品服务实现类 + production = new Production(); // 创建产品对象 + production = productionImpl.findByIdProduction(prodId); // 根据ID查找产品 + + + if(production!=null) {/*商品库有这个商品存在*/ + int mark = 0; // 标记变量,用于判断商品是否已存在于购物缓冲区 + for(Production p:v) { // 遍历购物缓冲区 + + + if(p.getId().equals(prodId)){/*如果数组中存在相同商品就更新数量和价格*/ + sum=p.getSum()+sum;/*数量*/ + p.setSum(sum); + p.setPrice(sum*p.getInPrice());/*进货价格*/ + mark = 1; // 更新标记 + break; + } + + } + if(mark==0) {/*插入新的*/ + System.out.println("缓存区不存在,插入新的数据"); + production.setSum(sum);/*更新价格和数量后插入新的*/ + production.setPrice(sum*production.getInPrice()); + v.add(production); // 将新产品添加到购物缓冲区 + + } + + System.out.println("插入后v的大小"+v.size()); // 打印购物缓冲区大小 + this.dispose(); // 关闭对话框 + JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE); // 显示添加成功消息 + + } + + + + else {/*商品库没有这个商品*/ + JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE); // 显示商品不存在消息 + } + } + else if(source == cancelBtn) { // 如果事件源是取消按钮 + + this.dispose(); // 关闭对话框 + + } + } + + + +} diff --git a/branch_zyx/My_branch/InOrder.java b/branch_zyx/My_branch/InOrder.java new file mode 100644 index 0000000..4e999c1 --- /dev/null +++ b/branch_zyx/My_branch/InOrder.java @@ -0,0 +1,62 @@ +package com.lingnan.supermarket.dto; // 声明当前类所在的包 + +import java.util.Date; // 导入Date类,尽管在此类中没有直接使用 + +// 定义进货订单类InOrder +public class InOrder { + private String iNumber; // 进货订单编号 + private Float allInPrice; // 总进货价格 + private String inDate; // 进货日期 + private String principal; // 负责人 + private int status; // 订单状态 + private int delmark; // 删除标记 + + // getiNumber方法,用于获取进货订单编号 + public String getiNumber() { + return iNumber; // 返回进货订单编号 + } + // setiNumber方法,用于设置进货订单编号 + public void setiNumber(String iNumber) { + this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber + } + // getAllInPrice方法,用于获取总进货价格 + public Float getAllInPrice() { + return allInPrice; // 返回总进货价格 + } + // setAllInPrice方法,用于设置总进货价格 + public void setAllInPrice(Float allInPrice) { + this.allInPrice = allInPrice; // 将参数allInPrice赋值给成员变量allInPrice + } + // getInDate方法,用于获取进货日期 + public String getInDate() { + return inDate; // 返回进货日期 + } + // setInDate方法,用于设置进货日期 + public void setInDate(String inDate) { + this.inDate = inDate; // 将参数inDate赋值给成员变量inDate + } + // getPrincipal方法,用于获取负责人 + public String getPrincipal() { + return principal; // 返回负责人 + } + // setPrincipal方法,用于设置负责人 + public void setPrincipal(String principal) { + this.principal = principal; // 将参数principal赋值给成员变量principal + } + // getStatus方法,用于获取订单状态 + public int getStatus() { + return status; // 返回订单状态 + } + // setStatus方法,用于设置订单状态 + public void setStatus(int status) { + this.status = status; // 将参数status赋值给成员变量status + } + // getDelmark方法,用于获取删除标记 + public int getDelmark() { + return delmark; // 返回删除标记 + } + // setDelmark方法,用于设置删除标记 + public void setDelmark(int delmark) { + this.delmark = delmark; // 将参数delmark赋值给成员变量delmark + } +} diff --git a/branch_zyx/My_branch/InOrderTM.java b/branch_zyx/My_branch/InOrderTM.java new file mode 100644 index 0000000..bb9922d --- /dev/null +++ b/branch_zyx/My_branch/InOrderTM.java @@ -0,0 +1,124 @@ +package com.lingnan.supermarket.table; // 声明当前类所在的包 + +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 + +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 + +import com.lingnan.supermarket.dto.Buffer; // 导入Buffer数据传输对象 +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder数据传输对象 +import com.lingnan.supermarket.dto.Buffer; // 重复导入Buffer数据传输对象,可能是错误 +import com.lingnan.supermarket.dto.Production; // 导入Production数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于进货对话框 + + + +public class InOrderTM extends AbstractTableModel{ // 定义一个类InOrderTM,继承自AbstractTableModel类,用于表格模型 + + private String [] columnName = {"订单号","总价","时间","负责人","状态"}; // 定义列名数组,用于表格的列标题 + + private productionImpl prodDao = new productionImpl(); // 创建productionImpl对象,用于操作产品数据 + + private Vector InOrders; // 声明一个Vector数组,用于存储InOrder对象 + private inOrderServiceImpl inOrderImpl= new inOrderServiceImpl(); // 创建inOrderServiceImpl对象,用于操作订单数据 + private InOrder inOrder ; // 声明InOrder对象,用于单个订单操作 + + String iNumber ; // 声明一个String变量,用于存储订单号 + + + public void allInOrderRecord() { // 定义一个方法,用于获取所有订单记录 + //将添加的商品加入到静态变量Vector数组中 + /*prod = InDialog.getProduction();*/ + InOrders = inOrderImpl.findAllInOrder(); // 调用inOrderImpl的方法,获取所有订单并赋值给InOrders + } + + //查找分类结果 + public void resultOfFind(int catalog) { // 定义一个方法,根据分类查找订单 + if(catalog==0) // 如果分类为0,查找所有订单 + InOrders = inOrderImpl.findAllInOrder(); // 获取所有订单 + else + InOrders = inOrderImpl.FindStatus(catalog); // 否则根据状态查找订单 + } + + //根据订单号查找 + public void resultOfNumber(String Number) { // 定义一个方法,根据订单号查找订单 + InOrders=new Vector(); // 初始化InOrders为新的Vector对象 + inOrder = inOrderImpl.findByIdinOrder(Number); // 根据订单号查找订单 + InOrders.add(inOrder); // 将找到的订单添加到InOrders中 + } + + + + + + + + @Override +// 重写getRowCount方法,返回表格的行数,即订单列表的大小 + public int getRowCount() { + return InOrders.size(); // 返回InOrders Vector的大小 + } + +/* +// 获取所有订单的总价格,此方法已被注释掉 +public Float getAllPrice() { + return BufferImpl.InBufferAllPrice(); +} +*/ + + @Override +// 重写getColumnCount方法,返回表格的列数,即列名数组的长度 + public int getColumnCount() { + return columnName.length; // 返回columnName数组的长度 + } + + @Override +// 重写getValueAt方法,根据行索引和列索引获取表格单元格的值 + public Object getValueAt(int rowIndex, int columnIndex) { + inOrder = InOrders.get(rowIndex); // 获取指定行的订单对象 + // 以下代码已被注释,可能是用于调试的打印语句 + /*System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + iNumber=inOrder.getiNumber(); // 获取订单号并赋值给iNumber + if(columnIndex==0) { // 如果是第一列,返回订单号 + return inOrder.getiNumber(); + }else if(columnIndex==1) { // 如果是第二列,返回订单总价 + return inOrder.getAllInPrice(); + }else if(columnIndex==2) { // 如果是第三列,返回订单日期 + return inOrder.getInDate(); + }else if(columnIndex==3) { // 如果是第四列,返回负责人 + return inOrder.getPrincipal(); + }else if(columnIndex==4) { // 如果是第五列,返回订单状态 + String status = null; + if(inOrder.getStatus()==1) + status= "已入库"; + else if(inOrder.getStatus()==2) + status= "待入库"; + else if(inOrder.getStatus()==3) + status= "已取消"; + return status; + }else { // 如果列索引不匹配,返回null + return null; + } + } + + // 返回要修改或删除的记录的订单号 + public String getINumber() { + return iNumber; // 返回类的成员变量iNumber + } + + + @Override +// 重写getColumnName方法,根据列索引获取列名 + public String getColumnName(int column) { + return columnName[column]; // 返回columnName数组中指定索引的值 + } + + + +} diff --git a/branch_zyx/My_branch/InRecord.java b/branch_zyx/My_branch/InRecord.java new file mode 100644 index 0000000..c5e69ed --- /dev/null +++ b/branch_zyx/My_branch/InRecord.java @@ -0,0 +1,35 @@ +package com.lingnan.supermarket.dto; // 声明当前类所在的包 + +import com.lingnan.supermarket.dto.base.BsDomain; // 导入基础域类BsDomain + +// 定义进货记录类InRecord,继承自BsDomain +public class InRecord extends BsDomain{ + private String iNumber; // 进货编号 + private int sum; // 进货数量 + private Float inPrice; // 进货单价 + + // getiNumber方法,用于获取进货编号 + public String getiNumber() { + return iNumber; // 返回进货编号 + } + // setiNumber方法,用于设置进货编号 + public void setiNumber(String iNumber) { + this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber + } + // getSum方法,用于获取进货数量 + public int getSum() { + return sum; // 返回进货数量 + } + // setSum方法,用于设置进货数量 + public void setSum(int sum) { + this.sum = sum; // 将参数sum赋值给成员变量sum + } + // getInPrice方法,用于获取进货单价 + public Float getInPrice() { + return inPrice; // 返回进货单价 + } + // setInPrice方法,用于设置进货单价 + public void setInPrice(Float inPrice) { + this.inPrice = inPrice; // 将参数inPrice赋值给成员变量inPrice + } +} diff --git a/branch_zyx/My_branch/InRecordTM.java b/branch_zyx/My_branch/InRecordTM.java new file mode 100644 index 0000000..820425f --- /dev/null +++ b/branch_zyx/My_branch/InRecordTM.java @@ -0,0 +1,93 @@ +package com.lingnan.supermarket.table; // 声明当前类所在的包 + +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 + +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 + +import com.lingnan.supermarket.dto.Buffer; // 导入Buffer类,可能用于临时数据存储 +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,表示进货订单 +import com.lingnan.supermarket.dto.InRecord; // 导入InRecord类,表示进货记录 +import com.lingnan.supermarket.dto.Buffer; // 重复导入Buffer类,可能是错误,应该删除 +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于显示进货对话框 + + + +public class InRecordTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于创建进货记录表格数据模型 + + private String [] columnName = {"订单号","id","数量","金额"}; // 定义列名数组,用于表格的列标题 + + private productionImpl prodDao = new productionImpl(); // 创建productionImpl实例,用于操作产品数据 + + private Vector InRecords; // 声明一个Vector类型的变量,用于存储进货记录 + + private inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建inRecordServiceImpl实例,用于操作进货记录数据 + private InRecord inRecord= new InRecord(); // 创建InRecord实例,用于存储单条进货记录 + + + private String iNumber ;/*订单号*/ // 声明一个String变量,用于存储订单号 + + + public InRecordTM(String iNumber) { // 构造函数,接收订单号参数 + this.iNumber=iNumber; // 将传入的订单号赋值给类的成员变量 + } + + public void findInRecordByINumber() { // 根据订单号查找进货记录的方法 + //将添加的商品加入到静态变量Vector数组中 + /*prod = InDialog.getProduction();*/ + InRecords = inRecordImpl.findByIdinRecord(iNumber); // 根据订单号查询进货记录并赋值给InRecords + } + + + @Override + public int getRowCount() { // 重写方法,获取表格的行数 + return InRecords.size(); // 返回InRecords的大小 + } + + /* public Float getAllPrice() { + return BufferImpl.InBufferAllPrice(); + } + */ + @Override + public int getColumnCount() { // 重写方法,获取表格的列数 + return columnName.length; // 返回columnName数组的长度 + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { // 重写方法,获取指定单元格的值 + inRecord = InRecords.get(rowIndex); // 获取指定行的进货记录 +/* System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + iNumber=inRecord.getiNumber(); // 获取订单号 + if(columnIndex==0) { + return inRecord.getiNumber(); // 返回订单号 + }else if(columnIndex==1) { + return inRecord.getId(); // 返回id + }else if(columnIndex==2) { + return inRecord.getSum(); // 返回数量 + }else if(columnIndex==3) { + return inRecord.getInPrice(); // 返回金额 + }else { + return null; // 如果列索引不匹配,返回null + } + } + + public String getINumber() { // 返回要修改或删除的记录的订单号 + return iNumber; // 返回类的成员变量iNumber + } + + + @Override + public String getColumnName(int column) { // 重写方法,获取指定列的列名 + return columnName[column]; // 返回columnName数组中指定索引的值 + } + + + +} diff --git a/branch_zyx/My_branch/InTableModel.java b/branch_zyx/My_branch/InTableModel.java new file mode 100644 index 0000000..41fb2a0 --- /dev/null +++ b/branch_zyx/My_branch/InTableModel.java @@ -0,0 +1,106 @@ +package com.lingnan.supermarket.table; // 声明当前类所在的包 + +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 + +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 + +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,表示进货订单的数据传输对象 + +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于显示进货对话框 + + + + +public class InTableModel extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于创建进货表格数据模型 + + // 定义列名数组,用于表格的列标题 + private String [] columnName = {"id","名称","数量","单价","价格","保质期","类别","供应商id"}; + + // 创建productionImpl实例,用于操作产品数据 + private productionImpl prodDao = new productionImpl(); + + // 声明一个Vector,用于存储Production对象集合 + private Vector v; + + // 声明一个String变量,用于存储id + String id ; + + + // 构造函数,接收一个Vector类型的参数 + public InTableModel(Vector v) { + System.out.println("调用InTableModel里面的构造函数"); // 打印日志信息 + this.v=v; // 将传入的Vector赋值给类的成员变量v + } + + + + + // 获取表格的行数,即数据集合的大小 + public int getRowCount() { + return v.size(); // 返回Vector v的大小 + } + + // 计算所有商品的总价格 + public Float getAllPrice() { + Float allPrice=(float) 0; // 初始化总价格为0 + for(Production p:v) { // 遍历Vector v中的所有Production对象 + allPrice+=p.getPrice(); // 累加每个商品的价格 + } + return allPrice; // 返回计算出的总价格 + } + + // 重写方法,获取表格的列数,即列名数组的长度 + @Override + public int getColumnCount() { + return columnName.length; // 返回columnName数组的长度 + } + + // 重写方法,获取指定行和列的单元格值 + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + Production p = v.get(rowIndex); // 从Vector v中获取指定行的Production对象 + id=p.getId(); // 将Production对象的id赋值给类的成员变量id + if(columnIndex==0) { // 判断列索引,并返回相应的值 + return p.getId(); + }else if(columnIndex==1) { + return p.getName(); // 返回商品名称 + }else if(columnIndex==2) { + return p.getSum(); // 返回商品数量 + }else if(columnIndex==3) { + return p.getInPrice(); // 返回商品进货单价 + }else if(columnIndex==4) { + return p.getPrice(); // 返回商品价格 + }else if(columnIndex==5) { + return p.getLife(); // 返回商品保质期 + }else if(columnIndex==6) { + return p.getName2()+p.getId2(); // 返回商品类别和类别id的组合 + }else if(columnIndex==7) { + return p.getSupplyId(); // 返回供应商id + }else { + return null; // 如果列索引不匹配,返回null + } + } + + // 获取要修改或删除的记录的id + public String getId() { + return id; // 返回类的成员变量id + } + + // 重写方法,获取指定列的列名 + @Override + public String getColumnName(int column) { + return columnName[column]; // 返回columnName数组中指定索引的值 + } + + + + + + +} diff --git a/branch_zyx/My_branch/InView.java b/branch_zyx/My_branch/InView.java new file mode 100644 index 0000000..fc657b2 --- /dev/null +++ b/branch_zyx/My_branch/InView.java @@ -0,0 +1,716 @@ +// 定义包名,表明该类属于com.lingnan.supermarket.view包 +package com.lingnan.supermarket.view; + +// 导入必要的Java Swing和AWT类库以及自定义的类库 +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.Vector; + +import javax.mail.MessagingException; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.text.html.HTMLDocument.Iterator; + +import com.lingnan.supermarket.componet.BGPanel; +import com.lingnan.supermarket.dao.impl.BufferImpl; +import com.lingnan.supermarket.dao.impl.UserServiceImpl; +import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; +import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; +import com.lingnan.supermarket.dao.impl.prodCatalogImpl; +import com.lingnan.supermarket.dialog.ChangeStatusDialog; +import com.lingnan.supermarket.dialog.ChangeSumDialog; +import com.lingnan.supermarket.dialog.InDialog; +import com.lingnan.supermarket.dialog.UserDialog; +import com.lingnan.supermarket.dto.Buffer; +import com.lingnan.supermarket.dto.InRecord; +import com.lingnan.supermarket.dto.Production; +import com.lingnan.supermarket.dto.User; +import com.lingnan.supermarket.table.*; +import com.lingnan.supermarket.utils.CreateOrder; +import com.lingnan.supermarket.utils.FontUtil; +import com.lingnan.supermarket.utils.SendQQMailUtil; +import com.lingnan.supermarket.utils.TimeAndOrder; +import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; + +// 声明InView类,继承JPanel并实现ActionListener接口 +public class InView extends JPanel implements ActionListener{ + + // 定义类的成员变量,用于构建界面元素 + // 上面的工具栏面板 + private JPanel toolBarPanel; + + // 搜索面板 + private JPanel searchPanel; + private JLabel nameLabel,locationLabel; // 标签用于显示文本 + private JTextField nameSearchTF; // 文本框用于输入搜索内容 + private JButton searchBtn,StockBtn,exitBtn; // 按钮用于执行操作 + + // 操作面板 + private JPanel opePanel; + private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn,detailBtn; // 操作按钮 + + // 中间的表格滚动面板 + private JScrollPane tableScrollPane; + private JTable inTable; // 表格用于显示数据 + + // 下面的面板 + private JPanel bottomPanel,bottomPanelLeft,bottomPanelRight; // 底部面板 + private JLabel countInfoLabel,countInfoLabel2; // 标签用于显示统计信息 + + // 缓冲区相关变量 + private Buffer Buffer; + private BufferImpl BufferImpl; + + // 定义一个静态的Vector集合,用于存储Production对象 + private static Vector v = new Vector(); + + // 定义一个下拉框组件,用于选择不同的状态 + private JComboBox combo; + // 定义一个字符串数组,包含所有可能的状态选项 + private String[] status ={"全部","已入库","待入库","已取消"}; + // 定义一个变量,用于存储当前选中的目录 + private int catalog; + + // 定义一个JFrame对象,用于表示主窗口 + private JFrame jFrame; + // 定义一个User对象,用于存储当前用户信息 + private User user; + + // 定义一个InTableModel对象,用于管理表格数据模型 + private InTableModel inTableModel ; + + // 实例化BufferImpl对象,用于操作缓冲区数据 + private BufferImpl bufferImpl = new BufferImpl(); + + // 定义一个标记变量,用于区分是从进货表还是提醒过来的表 + private int mark;/*标记从提醒那里来1是进货表,0是提醒过来的表*/ + + // 定义一个inOrderServiceImpl对象,用于处理进货订单服务 + private inOrderServiceImpl inOrderImpl; + + // 定义一个浮点数变量,用于存储总价 + private Float allPrice; + // 定义一个整数变量,用于存储选中的行号 + private int row; + // 定义一个字符串变量,用于存储用户名 + private String uname; + + // InView类的构造方法,接收主窗口、用户、货物集合和标记作为参数 + public InView(JFrame jFrame,User user,Vector v,int mark) { + // 设置布局管理器为边界布局 + this.setLayout(new BorderLayout()); + // 初始化成员变量 + this.jFrame = jFrame; + this.user = user; + // 获取进货缓冲区的保存的货物并删除缓冲区 + this.v =bufferImpl.allInBuffer(); + bufferImpl.DelAllInBuffer(); + + // 初始化标记变量 + this.mark=mark; + // 打印标记值,用于调试 + System.out.println("mark="+mark); + // 获取并存储用户名 + uname = user.getUsername(); + // 初始化视图 + initView(); + + + } + + // 初始化视图的方法 + private void initView() { + + + // 创建工具栏面板,并设置布局管理器为边界布局 + toolBarPanel = new JPanel(new BorderLayout()); + + // 创建搜索面板,并设置布局管理器为流式布局,靠右对齐 + searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + // 创建并初始化标签,用于显示“订单号” + nameLabel = new JLabel("订单号"); + // 创建并初始化文本框,用于输入搜索内容,宽度为20 + nameSearchTF = new JTextField(20); + // 创建并初始化搜索按钮,并设置图标 + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); + // 为搜索按钮添加动作监听器 + searchBtn.addActionListener(this); + // 创建并初始化位置标签,并设置字体和前景色 + locationLabel=new JLabel("当前位置>进货系统"); + locationLabel.setFont(new FontUtil().userFont); + locationLabel.setForeground(new Color(18, 150, 219)); + + + + // 创建并初始化下拉框,使用状态数组作为选项 + combo = new JComboBox(status); + // 为下拉框添加项目监听器 + combo.addItemListener(new MyItemListener()); + + + + + // 创建操作面板,并设置布局管理器为流式布局,靠左对齐 + opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); +// 创建并初始化添加按钮,并设置图标 + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); +// 创建并初始化更新按钮,并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\change.png")); +// 创建并初始化删除按钮,并设置图标 + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); +// 创建并初始化历史按钮,并设置图标 + historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); +// 创建并初始化返回按钮,并设置图标 + backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); +// 创建并初始化详情按钮,并设置图标 + detailBtn = new JButton(new ImageIcon("static\\icon\\detail.png")); + +// 为添加按钮添加动作监听器 + addBtn.addActionListener(this); +// 为更新按钮添加动作监听器 + updateBtn.addActionListener(this); +// 为删除按钮添加动作监听器 + deleteBtn.addActionListener(this); +// 为历史按钮添加动作监听器 + historyBtn.addActionListener(this); +// 为返回按钮添加动作监听器 + backBtn.addActionListener(this); +// 为详情按钮添加动作监听器 + detailBtn.addActionListener(this); + +// 设置返回按钮初始不可见,它在记录页面时才会显示 + backBtn.setVisible(false);/*在记录页面显示出来*/ +// 设置详情按钮初始不可见,它在订单详情页时才会显示 + detailBtn.setVisible(false);/*在订单详情页显示出来*/ + +// 将添加按钮添加到操作面板 + opePanel.add(addBtn); +// 将返回按钮添加到操作面板 + opePanel.add(backBtn); +// 将详情按钮添加到操作面板 + opePanel.add(detailBtn); +// 将更新按钮添加到操作面板 + opePanel.add(updateBtn); +// 将删除按钮添加到操作面板 + opePanel.add(deleteBtn); +// 将历史按钮添加到操作面板 + opePanel.add(historyBtn); + +// 将位置标签添加到搜索面板 + searchPanel.add(locationLabel); +// 将订单号标签添加到搜索面板 + searchPanel.add(nameLabel); +// 将搜索文本框添加到搜索面板 + searchPanel.add(nameSearchTF); +// 将搜索按钮添加到搜索面板 + searchPanel.add(searchBtn); +// 将状态下拉框添加到搜索面板 + searchPanel.add(combo); + + + +// 将搜索面板添加到工具栏面板的西边(West) + toolBarPanel.add(searchPanel,"West"); +// 将操作面板添加到工具栏面板的东边(East) + toolBarPanel.add(opePanel,"East"); + + + + //中间表 + // 创建一个表格模型,并传入数据向量v + inTableModel = new InTableModel(v); + +// 创建一个新的表格,使用上面创建的表格模型 + inTable = new JTable(inTableModel); +// 设置表格的字体 + inTable.setFont(FontUtil.tableFont); +// 设置表格的行高 + inTable.setRowHeight(50); +// 创建一个滚动面板,并将表格添加到滚动面板中 + tableScrollPane = new JScrollPane(inTable); + +// 获取表格模型中的所有商品总价 + allPrice = inTableModel.getAllPrice(); +// 获取表格模型中的行数,即商品种类数量 + row = inTableModel.getRowCount(); + +// 创建底部左侧面板,并设置布局为右对齐流式布局 + bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.RIGHT)); +// 创建一个标签用于显示商品种类和总价信息 + countInfoLabel = new JLabel("商品种类:"+row+",总价:"+allPrice); +// 将商品信息标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel,"Left"); + +// 创建底部右侧面板,并设置布局为左对齐流式布局 + bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.LEFT)); +// 创建并初始化结账按钮,并设置图标 + StockBtn =new JButton(new ImageIcon("static\\icon\\stock.png"));/*结账按钮*/ +// 创建并初始化退出按钮,并设置图标 + exitBtn =new JButton(new ImageIcon("static\\icon\\exit.png"));/*退出按钮*/ +// 为结账按钮添加动作监听器 + StockBtn.addActionListener(this); +// 为退出按钮添加动作监听器 + exitBtn.addActionListener(this); +// 将结账按钮添加到底部右侧面板 + bottomPanelRight.add(StockBtn); +// 将退出按钮添加到底部右侧面板 + bottomPanelRight.add(exitBtn); + +// 创建底部面板,并设置布局为边界布局 + bottomPanel = new JPanel(new BorderLayout()); +// 将底部右侧面板添加到底部面板的东边 + bottomPanel.add(bottomPanelRight,"East"); +// 将底部左侧面板添加到底部面板的西边 + bottomPanel.add(bottomPanelLeft,"West"); + + +// 将工具栏面板添加到窗口的北边 + this.add(toolBarPanel,"North"); +// 将表格滚动面板添加到窗口的中间 + this.add(tableScrollPane,"Center");/*将表格放到中间*/ +// 将底部面板添加到窗口的南边 + this.add(bottomPanel,"South"); + +// 如果标记为1,表示是从提醒模块过来的,则刷新缓冲区 + if(mark==1) /*判断是不是从提醒那里过来的*/{ + refreshBuffer(v); + } +// 如果标记为0,则执行进货订单记录操作 + else if(mark==0) { + InOrderRecord(); + } + + + + + + + // 设置窗口为可见状态,这样用户就可以看到并与之交互 + setVisible(true); + + + + + + + + } + + // 提供一个静态方法,用于获取存储Production对象的Vector集合 + public static Vector getVector(){ + return v; + } + + // 定义一个内部类MyItemListener,实现ItemListener接口来监听下拉框项目的状态改变 + public class MyItemListener implements ItemListener { + + // 重写itemStateChanged方法,当下拉框中的项目状态改变时被调用 + @Override + public void itemStateChanged(ItemEvent e) { + // 将事件源转换为JComboBox类型 + JComboBox cb = (JComboBox) e.getSource(); + // 获取当前选中的项目,并转换为字符串 + String catalog1 = (String) cb.getSelectedItem(); + // 根据选中的项目设置相应的分类代码 + if(catalog1.equals("全部")) + catalog=0; + else if(catalog1.equals("已入库")) + catalog=1; + else if(catalog1.equals("待入库")) + catalog=2; + else if(catalog1.equals("已取消")) + catalog=3; + + // 根据分类代码执行查找操作 + resultOfFindStatus(catalog); + + } + + } + + // 设置按钮组件的可见性 + public void OrderView() { + // 设置返回按钮为可见 + backBtn.setVisible(true); + // 设置详情按钮为可见 + detailBtn.setVisible(true); + // 设置更新按钮为可见 + updateBtn.setVisible(true); + // 设置删除按钮为可见 + deleteBtn.setVisible(true); + // 设置添加按钮为不可见 + addBtn.setVisible(false); + // 设置历史按钮为不可见 + historyBtn.setVisible(false); + } + + // 根据订单编号查询结果,并更新界面 + public void resultOfNumber(String iNumber) { + // 重置标记 + this.mark=0; + // 创建InOrderTM对象,用于处理订单数据 + InOrderTM inOrderTM = new InOrderTM(); + // 根据订单编号查询结果 + inOrderTM.resultOfNumber(iNumber); + // 设置表格模型为查询结果 + inTable.setModel(inOrderTM); + // 清除底部左侧面板的内容 + bottomPanelLeft.removeAll(); + // 创建一个标签,显示记录总数 + countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel); + // 更新按钮组件的可见性 + OrderView(); + } + + + // 根据状态分类代码查询订单,并更新界面 + public void resultOfFindStatus(int catalog) { + // 重置标记 + this.mark=0; + // 创建InOrderTM对象,用于处理订单数据 + InOrderTM inOrderTM = new InOrderTM(); + // 根据分类代码查询订单 + inOrderTM.resultOfFind(catalog); + // 设置表格模型为查询结果 + inTable.setModel(inOrderTM); + // 清除底部左侧面板的内容 + bottomPanelLeft.removeAll(); + // 创建一个标签,显示记录总数 + countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel); + // 更新按钮组件的可见性 + OrderView(); + } + + // 刷新缓冲区数据,并更新界面 + public void refreshBuffer(Vector v) { + // 设置标记为1,表示刷新操作 + this.mark=1; + // 创建InTableModel对象,使用传入的Vector作为数据源 + InTableModel inTableModel = new InTableModel(v); + // 设置表格模型为新的数据模型 + inTable.setModel(inTableModel); + // 清除底部左侧面板的内容 + bottomPanelLeft.removeAll(); + // 创建一个标签,显示商品种类和总价信息 + countInfoLabel = new JLabel("商品种类:"+inTableModel.getRowCount()+",总价:"+inTableModel.getAllPrice()); + // 将标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel); + // 设置按钮的可见性 + backBtn.setVisible(false); + detailBtn.setVisible(false); + historyBtn.setVisible(true); + updateBtn.setVisible(true); + addBtn.setVisible(true); + deleteBtn.setVisible(true); + + // 更新总价和记录数 + allPrice = inTableModel.getAllPrice(); + row = inTableModel.getRowCount(); + } + + // 调出所有进货订单记录,并更新界面 + public void InOrderRecord() { + // 重置标记 + this.mark=0; + // 创建InOrderTM对象,用于处理订单数据 + InOrderTM inOrderTM = new InOrderTM(); + // 获取所有进货订单记录 + inOrderTM.allInOrderRecord(); + // 设置表格模型为所有订单记录 + inTable.setModel(inOrderTM); + // 清除底部左侧面板的内容 + bottomPanelLeft.removeAll(); + // 创建一个标签,显示记录总数 + countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel); + // 更新按钮组件的可见性 + OrderView(); + } + + // 根据订单编号查询进货记录,并更新界面 + public void InRecord(String iNumber) { + // 设置标记为2,表示按订单编号查询 + this.mark=2; + // 创建InRecordTM对象,使用订单编号作为查询条件 + InRecordTM inRecordTM = new InRecordTM(iNumber); + // 查询进货记录 + inRecordTM.findInRecordByINumber(); + // 设置表格模型为查询结果 + inTable.setModel(inRecordTM); + // 清除底部左侧面板的内容 + bottomPanelLeft.removeAll(); + // 创建一个标签,显示订单号和记录总数 + countInfoLabel = new JLabel("订单号@"+iNumber+"共有"+inRecordTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 + bottomPanelLeft.add(countInfoLabel); + // 更新按钮的可见性 + backBtn.setVisible(true); + detailBtn.setVisible(false); + updateBtn.setVisible(false); + addBtn.setVisible(false); + historyBtn.setVisible(false); + deleteBtn.setVisible(false); + } + + + + + + + /*按钮监听时间*/ + @Override + public void actionPerformed(ActionEvent e) { + // 创建购物车实例 + BufferImpl = new BufferImpl();/*获得购物车*/ + // 获取事件源对象 + Object source = e.getSource(); + + // 如果事件源是搜索按钮 + if(searchBtn==source) { + // 从搜索文本框中获取订单号 + String number = nameSearchTF.getText(); + // 打印搜索后的订单号 + System.out.println("搜索后的订单:"+number); + // 根据订单号进行搜索并处理结果 + resultOfNumber(number); + } + + // 如果事件源是添加按钮 + else if(addBtn==source) { + // 创建添加对话框实例,并传入窗口框架、向量数据、用户信息 + InDialog outDialog = new InDialog(jFrame,v,user); + // 设置对话框为可见 + outDialog.setVisible(true); + // 获取对话框返回的向量数据 + v=outDialog.getVector(); + // 刷新购物车数据 + refreshBuffer(v); + + } + + + else if(updateBtn==source) { /*更新*/ + // 打印当前操作标记值 + System.out.println("mark="+mark); + // 获取表格中被选中的行索引 + int rowIndex = inTable.getSelectedRow(); + // 如果没有行被选中,弹出提示对话框并返回 + if(rowIndex==-1) { + JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); + return; + } + // 如果标记值为1,表示当前操作是进货表修改 + if(mark==1) { + // 从选中的行中获取ID + String id =(String) inTable.getValueAt(rowIndex,0); + // 创建修改数量的对话框实例,并传入相关参数 + ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"In",v); + // 设置对话框为可见 + changesumDialog.setVisible(true); + // 获取对话框返回的向量数据 + v = changesumDialog.getVector(); + // 打印更改状态后向量的大小 + System.out.println("更改状态后v.size="+v.size()); + // 刷新缓冲区数据 + refreshBuffer(v); + } + + //inOrder修改,修改状态 + else if(mark==0) { + // 从选中的行中获取订单编号 + String iNumber =(String) inTable.getValueAt(rowIndex,0); + // 从选中的行中获取订单状态 + String status =(String) inTable.getValueAt(rowIndex,4); + // 如果订单状态为"已入库",则弹出提示信息并返回 + if(status.equals("已入库")) { + JOptionPane.showMessageDialog(this,"订单上的货物已入库无法修改状态","提示",JOptionPane.INFORMATION_MESSAGE); + return; + } + + // 创建修改状态对话框实例,并传入相关参数 + ChangeStatusDialog changeStatusDialog = new ChangeStatusDialog(jFrame,iNumber,status); + // 设置对话框为可见 + changeStatusDialog.setVisible(true); + // 刷新主界面提醒 + MainView.refreshRemind(); + // 刷新首页 + HomeView.refreshHome(); + // 重新加载订单记录 + InOrderRecord(); + } + + + } + + + else if(deleteBtn==source) { + // 获取表格中被选中的行索引 + int rowIndex = inTable.getSelectedRow(); + // 如果没有行被选中,弹出提示对话框并返回 + if(rowIndex==-1) { + JOptionPane.showMessageDialog(this,"请选中一条"); + return; + } + + /*删除进货表的*/ + if(mark==1) { + // 打印日志信息,表示将删除进货表中的记录 + System.out.println("删除进货表"); + // 从选中的行中获取记录的ID + String id =(String) inTable.getValueAt(rowIndex,0); + // 弹出确认对话框,询问用户是否删除指定ID的记录 + int select = JOptionPane.showConfirmDialog(this,"是否删除id为"+id+"的记录","提示",JOptionPane.YES_NO_OPTION); + // 如果用户选择"是",则执行删除操作 + if(select==JOptionPane.YES_OPTION) {/*选择是*/ + // 遍历向量v,寻找匹配的ID进行删除 + for(int i =0;i(); + refreshBuffer(v); + // 刷新主界面提醒 + MainView.refreshRemind(); + // 弹出提示对话框,显示邮件发送成功和订单信息 + JOptionPane.showConfirmDialog(null,"发送邮件成功\r\n订单号:"+s[0]+"\r\n负责人:"+uname, "提示", JOptionPane.YES_OPTION); + + } + + + } + + }else if(exitBtn==source) { + // 弹出确认对话框,询问是否退出并清空购物车 + int res = JOptionPane.showConfirmDialog(null,"确定退出并清空购物车吗", "结账", JOptionPane.YES_NO_OPTION); + if(res==JOptionPane.YES_OPTION)/*如果退出*/{ + // 将购物车数组置空并刷新缓冲区 + v=new Vector();/*将数组置空*/ + refreshBuffer(v); + // 弹出提示对话框,显示退出成功 + JOptionPane.showConfirmDialog(null,"退出成功", "提示", JOptionPane.PLAIN_MESSAGE); + } + + } + } + } diff --git a/branch_zyx/My_branch/MainView.java b/branch_zyx/My_branch/MainView.java new file mode 100644 index 0000000..af24167 --- /dev/null +++ b/branch_zyx/My_branch/MainView.java @@ -0,0 +1,702 @@ +package com.lingnan.supermarket.view; // 定义包名,所有视图相关的类都在这个包下 + +import java.awt.event.ActionEvent; // 导入ActionEvent类,用于监听动作事件 +import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现动作事件监听 +import java.awt.event.MouseEvent; // 导入MouseEvent类,用于监听鼠标事件 +import java.awt.event.MouseListener; // 导入MouseListener接口,用于实现鼠标事件监听 +import java.awt.event.WindowEvent; // 导入WindowEvent类,用于监听窗口事件 +import java.awt.event.WindowListener; // 导入WindowListener接口,用于实现窗口事件监听 +import java.io.File; // 导入File类,用于文件操作 +import java.io.IOException; // 导入IOException类,用于处理输入输出异常 +import java.util.Date; // 导入Date类,用于处理日期 +import java.util.Random; // 导入Random类,用于生成随机数 +import java.util.Vector; // 导入Vector类,用于实现动态数组 + +import javax.imageio.ImageIO; // 导入ImageIO类,用于图像输入输出 +import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 +import javax.swing.JButton; // 导入JButton类,用于创建按钮 +import javax.swing.JLabel; // 导入JLabel类,用于创建标签 +import javax.swing.JMenu; // 导入JMenu类,用于创建菜单 +import javax.swing.JMenuBar; // 导入JMenuBar类,用于创建菜单栏 +import javax.swing.JMenuItem; // 导入JMenuItem类,用于创建菜单项 +import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.JSplitPane; // 导入JSplitPane类,用于创建分隔面板 +import javax.swing.Timer; // 导入Timer类,用于实现定时器 + +import com.lingnan.supermarket.componet.BGPanel; // 导入自定义的BGPanel类 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入BufferImpl类,可能是数据访问层的实现 +import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; // 导入inOrderServiceImpl类,可能是订单服务的实现 +import com.lingnan.supermarket.dialog.CloseDialog; // 导入CloseDialog类,可能是关闭对话框 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能是入库对话框 +import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类,可能是用户对话框 +import com.lingnan.supermarket.dialog.UserInfDialog; // 导入UserInfDialog类,可能是用户信息对话框 +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,可能是订单数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入Production类,可能是产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,可能是用户数据传输对象 +import com.lingnan.supermarket.utils.DateUtil; // 导入DateUtil类,可能是日期工具类 +import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,可能是字体工具类 +import com.lingnan.supermarket.view.base.BaseView; // 导入BaseView类,可能是视图基类 + +import java.awt.*; // 导入awt包中的所有类 + +// 主视图类,继承自BaseView,并实现多个事件监听接口 +public class MainView extends BaseView implements ActionListener, MouseListener,WindowListener{ + + + JMenuBar menuBar; // 声明菜单栏变量 + JMenu settingMenu,helpMenu; // 声明设置菜单和帮助菜单变量 + + JMenuItem skinMenuItem,configMenuItem; // 声明皮肤菜单项和配置菜单项变量 + + + JSplitPane containerPanel; // 声明分隔面板变量,用于左右布局 + + CardLayout rightPanelLayout; // 声明卡片布局管理器变量,用于右侧面板 + JPanel leftPanel,rightPanel; // 声明左侧和右侧面板变量 + + /*菜单栏组件*/ + JLabel logoLabel,userMenuLabel1,homeMenuLabel,userMenuLabel,inMenuLabel, + outMenuLabel,storageMenuLabel,supplierMenuLabel,catalogMenuLabel; + // 声明菜单栏中各个标签的变量 + + static JLabel remindMenuLabel;/*声明静态标签变量,用于全局调用刷新*/ + + JPanel bottomPanel; // 声明底部面板变量 + + JLabel timeLabel; // 声明时间标签变量 + + JPanel purposePanel,timePanel; // 声明目的面板和时间面板变量 + JLabel purposeLabel; // 声明目的标签变量 + + + JButton saveBtn,unSaveBtn,cancleBtn;/*退出时按钮*/ + + // + Timer timer; // 声明定时器变量,用于执行周期性任务 + + private User user ;/*从登录界面传过来的用户信息,用于当前视图的用户上下文*/ + + private BufferImpl bufferImpl; // 声明BufferImpl对象,可能是用于缓存处理的实现 + + private Image bgImage ; // 声明背景图片变量 + private String iconSkin; // 声明图标皮肤路径变量 + private int skin; // 声明皮肤编号变量 + + private Vector vP=new Vector() ;/*用于进货缓存,存储产品信息*/ + + private int location; // 声明位置变量,可能用于记录当前视图的状态或位置 + + private int sSuper=-1;//界面权限,用于标识用户权限级别 + + private static inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 声明并实例化订单服务实现类 + + private static int unConfirmmark;/*未确认订单的数量*/ + + // 构造方法,接收用户信息、皮肤编号和图标皮肤路径 + public MainView(User user,int skin,String iconSkin) { + + super(1300,850,"新民超市管理系统欢迎您",user,skin); // 调用父类构造方法,设置窗口大小、标题、用户信息和皮肤 + timer = new Timer(1000,this); // 创建定时器,每1000毫秒执行一次 + timer.start(); // 启动定时器 + this.user = user; // 保存用户信息到当前视图 + this.sSuper=user.getUsuper();//界面权限,从用户信息中获取权限级别 + System.out.println("userid="+user.getId()); // 打印用户ID + this.addWindowListener(this); // 为当前窗口添加窗口事件监听器 + this.skin = skin; // 保存皮肤编号 + this.iconSkin = iconSkin; // 保存图标皮肤路径 + ImageIcon icon=new ImageIcon(iconSkin); // 创建ImageIcon对象,加载图标皮肤 + this.setIconImage(icon.getImage()); // 设置窗口图标 + // 获得未进货的信息 + Vector vInOrder; + vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找未确认的订单 + unConfirmmark=vInOrder.size(); // 设置未确认订单的数量 + initView(user,skin); // 初始化视图 + } + + // 另一个构造方法,只接收用户信息 + public MainView(User user) { + super(1300,850,"新民超市管理系统欢迎您"); // 调用父类构造方法,设置窗口大小和标题 + + timer = new Timer(1000,this); // 创建定时器,每1000毫秒执行一次 + + timer.start(); // 启动定时器 + + this.user = user; // 保存用户信息到当前视图 + + this.sSuper=user.getUsuper();//界面权限,从用户信息中获取权限级别 + + System.out.println("userid="+user.getId()); // 打印用户ID + + this.addWindowListener(this); // 为当前窗口添加窗口事件监听器 + // 获得未进货的信息 + Vector vInOrder; + + vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找未确认的订单 + + unConfirmmark=vInOrder.size(); // 设置未确认订单的数量 + + initView(user,skin); // 初始化视图,这里没有为skin赋值,可能会出错 + + } + + + public static void refreshRemind() { + Vector vInOrder; // 声明未确认订单的向量 + vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找所有未确认的订单 + unConfirmmark = vInOrder.size(); // 获取未确认订单的数量 + remindMenuLabel.setText("待确认进货:" + unConfirmmark); // 更新菜单标签,显示未确认订单的数量 + } + +// 以下是注释掉的代码,没有实现功能 +/* public static User getUserInf() { + return user; // 返回用户信息 +}*/ + + @Override + protected void initView(User user, int skin) { + // 初始化视图的方法,接收用户信息和皮肤编号 + + /*菜单栏*/ + menuBar = new JMenuBar(); // 创建菜单栏 + + settingMenu = new JMenu("设置"); // 创建设置菜单 + + helpMenu = new JMenu("帮助"); // 创建帮助菜单 + + skinMenuItem = new JMenuItem("随机切换皮肤", new ImageIcon("static\\icon\\skin.png")); // 创建切换皮肤的菜单项 + + /*for循环被注释掉了,没有实际作用 + for(int i = 3;i<9;i++) { + + }*/ + configMenuItem = new JMenuItem("参数设置", new ImageIcon("static\\icon\\setting.png")); // 创建参数设置的菜单项 + skinMenuItem.addActionListener(this); // 为切换皮肤菜单项添加动作监听器 + + settingMenu.add(configMenuItem); // 将参数设置菜单项添加到设置菜单 + settingMenu.add(skinMenuItem); // 将切换皮肤菜单项添加到设置菜单 + menuBar.add(settingMenu); // 将设置菜单添加到菜单栏 + menuBar.add(helpMenu); // 将帮助菜单添加到菜单栏 + + setJMenuBar(menuBar); // 将菜单栏设置到当前窗口 + + /*左边菜单栏设置*/ + try { + bgImage = ImageIO.read(new File("static\\bg\\bg" + skin + ".jpg")); // 读取背景图片 + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); // 打印异常堆栈信息 + + } + + leftPanel = new BGPanel(bgImage); /*皮肤*/ // 创建带有背景的左边面板 + leftPanel.setLayout(null); // 设置左边面板布局为空,即绝对布局 + + /*菜单栏:用户登录信息*/ + System.out.println("用户头像地址==" + user.getImg()); // 打印用户头像地址 + JLabel logoLabel = new JLabel(new ImageIcon(user.getImg()), JLabel.LEFT); // 创建用户头像标签 + System.out.println(user.getImg()); // 再次打印用户头像地址 + leftPanel.add(logoLabel); // 将用户头像标签添加到左边面板 + logoLabel.setBounds(25, 30, 150, 150); // 设置用户头像标签的位置和大小 + + /*账号名字*/ + String x = UsuperIcon(user.getUsuper()); /*判断权限返回icon地址*/ // 根据用户权限返回相应的图标地址 + + System.out.println("身份地址:" + x); // 打印身份图标地址 + + userMenuLabel1 = new JLabel("|" + user.getUsername() + "|" + user.getRname(), new ImageIcon(x), JLabel.LEFT); // 创建用户信息标签 + + userMenuLabel1.setFont(FontUtil.userFont); // 设置用户信息标签的字体 + + userMenuLabel1.addMouseListener(this); // 为用户信息标签添加鼠标监听器 + + userMenuLabel1.setBounds(20, 170, 180, 32); // 设置用户信息标签的位置和大小 + + userMenuLabel1.setForeground(Color.white); // 设置用户信息标签的前景色为白色 + + leftPanel.add(userMenuLabel1); /*添加用户选项到菜单栏*/ // 将用户信息标签添加到左边面板 + + + + + /*菜单栏:首页*/ + homeMenuLabel = new JLabel("新民首页", new ImageIcon("static\\icon\\home1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示首页菜单 + homeMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + homeMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + homeMenuLabel.setBounds(20, 250, 150, 32); // 设置菜单标签的位置和大小 + homeMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(homeMenuLabel); // 将首页菜单标签添加到左侧面板 + + /*菜单栏:人员管理*/ + userMenuLabel = new JLabel("人员管理", new ImageIcon("static\\icon\\user1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示人员管理菜单 + userMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + userMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + userMenuLabel.setBounds(20, 300, 150, 32); // 设置菜单标签的位置和大小 + userMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(userMenuLabel); // 将人员管理菜单标签添加到左侧面板 + + /*菜单栏:进货系统*/ + inMenuLabel = new JLabel("进货系统", new ImageIcon("static\\icon\\in1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示进货系统菜单 + inMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + inMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + inMenuLabel.setBounds(20, 350, 150, 32); // 设置菜单标签的位置和大小 + inMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(inMenuLabel); // 将进货系统菜单标签添加到左侧面板 + + /*菜单栏:收银系统*/ + outMenuLabel = new JLabel("收银系统", new ImageIcon("static\\icon\\out1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示收银系统菜单 + outMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + outMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + outMenuLabel.setBounds(20, 400, 150, 32); // 设置菜单标签的位置和大小 + outMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(outMenuLabel); // 将收银系统菜单标签添加到左侧面板 + + /*菜单栏:库存*/ + storageMenuLabel = new JLabel("商品库存", new ImageIcon("static\\icon\\storage1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品库存菜单 + storageMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + storageMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + storageMenuLabel.setBounds(20, 450, 150, 32); // 设置菜单标签的位置和大小 + storageMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(storageMenuLabel); // 将商品库存菜单标签添加到左侧面板 + + /*菜单栏:供应商*/ + supplierMenuLabel = new JLabel("供应商", new ImageIcon("static\\icon\\supplier1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示供应商菜单 + supplierMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + supplierMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + supplierMenuLabel.setBounds(20, 500, 150, 32); // 设置菜单标签的位置和大小 + supplierMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(supplierMenuLabel); // 将供应商菜单标签添加到左侧面板 + + /*菜单栏:商品目录*/ + catalogMenuLabel = new JLabel("商品目录", new ImageIcon("static\\icon\\catalog1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品目录菜单 + catalogMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + catalogMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + catalogMenuLabel.setBounds(20, 550, 150, 32); // 设置菜单标签的位置和大小 + catalogMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(catalogMenuLabel); // 将商品目录菜单标签添加到左侧面板 + + + /*提醒进货确认模块*/ + remindMenuLabel = new JLabel("待确认进货:"+unConfirmmark, new ImageIcon("static\\icon\\remind1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于显示待确认进货的数量 + remindMenuLabel.setFont(FontUtil.remindFont); // 设置提醒菜单标签的字体样式 + remindMenuLabel.addMouseListener(this); // 为提醒菜单标签添加鼠标事件监听器 + remindMenuLabel.setBounds(0, 650, 200, 32); // 设置提醒菜单标签的位置和大小 + remindMenuLabel.setForeground(Color.white); // 设置提醒菜单标签的前景色为白色 + leftPanel.add(remindMenuLabel); // 将提醒菜单标签添加到左侧面板 + +// 设置右侧面板的布局管理器为卡片布局 + rightPanelLayout = new CardLayout(); + +// 0.超市首页展示,创建并实例化首页视图面板 + JPanel homePanel = new HomeView(this); + +// 1.用户管理界面:用户的列表,创建并实例化用户管理视图面板 + JPanel userPanel = new UserView(this); + +// 2.进货系统界面,创建并实例化进货系统视图面板 + JPanel inPanel = new InView(this, user, vP, 1); + +// 3.收银系统界面,创建并实例化收银系统视图面板 + JPanel outPanel = new OutView(this, user); + +// 4.库存系统界面,创建并实例化库存系统视图面板 + JPanel storagePanel = new StorageView(this); + +// 5.供应商界面,创建并实例化供应商视图面板 + JPanel supplierPanel = new SupplierView(this); + +// 6.商品目录界面,创建并实例化商品目录视图面板 + JPanel ProdCatalogPanel = new ProdCatalogView(this); + +// 7.超市总览界面,创建并实例化超市总览视图面板 + JPanel superPanel = new SuperView(this); + +// 8.进货信息提示界面,创建并实例化进货信息提示视图面板 + JPanel inPanel2 = new InView(this, user, vP, 0); + +// 创建右侧面板并设置布局管理器为之前定义的卡片布局 + rightPanel = new JPanel(rightPanelLayout); + rightPanel.add(homePanel, "0"); // 添加首页视图面板并设置其索引为"0" + rightPanel.add(userPanel, "1"); // 添加用户管理视图面板并设置其索引为"1" + rightPanel.add(inPanel, "2"); // 添加进货系统视图面板并设置其索引为"2" + rightPanel.add(outPanel, "3"); // 添加收银系统视图面板并设置其索引为"3" + rightPanel.add(storagePanel, "4"); // 添加库存系统视图面板并设置其索引为"4" + rightPanel.add(supplierPanel, "5"); // 添加供应商视图面板并设置其索引为"5" + rightPanel.add(ProdCatalogPanel, "6"); // 添加商品目录视图面板并设置其索引为"6" + rightPanel.add(superPanel, "7"); // 添加超市总览视图面板并设置其索引为"7" + rightPanel.add(inPanel2, "8"); // 添加进货信息提示视图面板并设置其索引为"8" + +// 创建一个分割面板,将左侧面板和右侧面板水平分割 + containerPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel); + containerPanel.setDividerLocation(180); // 设置分割线的位置 + containerPanel.setDividerSize(0); // 设置分割线的尺寸为0,即隐藏分割线 + +// 创建底部面板,默认使用流式布局 + bottomPanel = new JPanel(); + bottomPanel.setBackground(Color.WHITE); // 设置底部面板的背景色为白色 + bottomPanel.setLayout(new BorderLayout()); // 设置底部面板的布局管理器为边界布局 + +// 创建目的地区面板,用于显示当前位置信息 + purposePanel = new JPanel(); + purposePanel.setLayout(new FlowLayout(FlowLayout.LEFT)); // 设置目的地区面板的布局管理器为左对齐的流式布局 + purposePanel.setBackground(Color.WHITE); // 设置目的地区面板的背景色为白色 + purposeLabel = new JLabel("当前位置是:超市首页"); // 创建标签显示当前位置信息 + purposePanel.add(purposeLabel); // 将位置信息标签添加到目的地区面板 + + + // 创建一个新的 JPanel 实例用于显示时间 + timePanel=new JPanel(); +// 设置 timePanel 的布局为 FlowLayout,并指定元素靠右对齐 + timePanel.setLayout(new FlowLayout(FlowLayout.TRAILING)); +// 设置 timePanel 的背景颜色为白色 + timePanel.setBackground(Color.WHITE); +// 创建一个新的 JLabel 实例,显示当前日期和时间,使用 DateUtil 工具类进行格式化 + timeLabel = new JLabel(DateUtil.dateToString(new Date(),null)); +// 将 timeLabel 添加到 timePanel 中 + timePanel.add(timeLabel); +// 将 purposePanel 添加到 bottomPanel 的西边(West) + bottomPanel.add(purposePanel,"West"); +// 将 timePanel 添加到 bottomPanel 的东边(East) + bottomPanel.add(timePanel,"East"); +// 获取当前窗口的内容窗格 + Container container = getContentPane(); +// 将 containerPanel 添加到内容窗格的中心(Center) + container.add(containerPanel,"Center"); +// 将 bottomPanel 添加到内容窗格的南边(South) + container.add(bottomPanel,"South"); + + } + + @Override + // 定义当触发动作事件时的处理方法 + public void actionPerformed(ActionEvent e) { + // 获取触发事件的源对象 + Object source = e.getSource(); + // 更新时间标签以显示当前时间 + timeLabel.setText(DateUtil.dateToString(new Date(),null)); + // 检查事件源是否为皮肤菜单项,如果是则进行换肤操作 + if(source==skinMenuItem)/*换肤*/{ + // 打印换肤操作信息到控制台 + System.out.println("切换皮肤"); + // 创建一个新的随机数生成器实例 + Random random=new Random(); + // 生成一个0到9之间的随机数作为皮肤编号 + skin=random.nextInt(10); + // 销毁当前窗口 + this.dispose(); + // 创建并显示一个新的主视图窗口,传入用户信息、皮肤编号和图标皮肤 + new MainView(user,skin,iconSkin); + + } + + } + + @Override/*左侧菜单栏点击事件*/ + // 定义当鼠标点击事件发生时的处理方法 + public void mouseClicked(MouseEvent e) { + // 获取触发事件的源对象 + Object source = e.getSource(); + // 检查事件源是否为首页菜单标签,如果是则显示对应的面板 + if(source==homeMenuLabel) { + rightPanelLayout.show(rightPanel,"0"); // 显示首页面板 + location=0; // 更新当前位置索引为0 + } + // 检查事件源是否为用户菜单标签,根据权限显示不同面板 + else if(source==userMenuLabel) { + if(sSuper==0) // 如果权限为0 + rightPanelLayout.show(rightPanel,"1"); // 显示用户面板1 + else{ // 如果权限不为0 + rightPanelLayout.show(rightPanel,"7"); // 显示用户面板7 + } + location=1; // 更新当前位置索引为1 + } + // 检查事件源是否为入库菜单标签,根据权限显示不同面板 + else if(source==inMenuLabel) { + if(sSuper==2) // 如果权限为2 + rightPanelLayout.show(rightPanel,"7"); // 显示面板7 + else{ // 如果权限不为2 + rightPanelLayout.show(rightPanel,"2"); // 显示入库面板 + } + location=2; // 更新当前位置索引为2 + } + // 检查事件源是否为出库菜单标签,如果是则显示对应的面板 + else if(source==outMenuLabel) { + rightPanelLayout.show(rightPanel,"3"); // 显示出库面板 + location=3; // 更新当前位置索引为3 + } + // 检查事件源是否为库存菜单标签,如果是则显示对应的面板 + else if(source==storageMenuLabel) { + rightPanelLayout.show(rightPanel,"4"); // 显示库存面板 + location=4; // 更新当前位置索引为4 + } + // 检查事件源是否为供应商菜单标签,如果是则显示对应的面板 + else if(source==supplierMenuLabel) { + rightPanelLayout.show(rightPanel,"5"); // 显示供应商面板 + location=5; // 更新当前位置索引为5 + } + // 检查事件源是否为目录菜单标签,如果是则显示对应的面板 + else if(source==catalogMenuLabel) { + rightPanelLayout.show(rightPanel,"6"); // 显示目录面板 + location=6; // 更新当前位置索引为6 + } + // 检查事件源是否为提醒菜单标签,根据权限显示不同面板 + else if(source==remindMenuLabel) { + if(sSuper==2) // 如果权限为2 + rightPanelLayout.show(rightPanel,"7"); // 显示面板7 + else{ // 如果权限不为2 + rightPanelLayout.show(rightPanel,"8"); // 显示提醒面板 + } + location=7; // 更新当前位置索引为7 + } + // 检查事件源是否为用户信息菜单标签1,如果是则显示用户信息对话框 + else if(source==userMenuLabel1){ + UserInfDialog userInfDialog = new UserInfDialog(this,user); // 创建用户信息对话框 + userInfDialog.setVisible(true); // 显示用户信息对话框 + location=8; // 更新当前位置索引为8 + } + + // 调用refreshRemove方法,可能用于刷新界面或执行其他操作 + refreshRemove(); + } + + //获取当前位置 + // 定义一个方法用于刷新和移除面板内容 + public void refreshRemove(){ + + // 从目的面板中移除所有组件 + purposePanel.removeAll(); + + // 根据当前的位置索引设置不同的目的标签文本 + if(location==0){ + purposeLabel = new JLabel("当前位置是:"+homeMenuLabel.getText()); // 设置当前位置为首页 + } + else if(location==1){ + purposeLabel = new JLabel("当前位置是:"+userMenuLabel.getText()); // 设置当前位置为用户菜单 + } + else if(location==2){ + purposeLabel = new JLabel("当前位置是:"+inMenuLabel.getText()); // 设置当前位置为入库菜单 + } + else if(location==3){ + purposeLabel = new JLabel("当前位置是:"+outMenuLabel.getText()); // 设置当前位置为出库菜单 + } + else if(location==4){ + purposeLabel = new JLabel("当前位置是:"+storageMenuLabel.getText()); // 设置当前位置为库存菜单 + } + else if(location==5){ + purposeLabel = new JLabel("当前位置是:"+supplierMenuLabel.getText()); // 设置当前位置为供应商菜单 + } + else{ + purposeLabel = new JLabel("当前位置是:"+catalogMenuLabel.getText()); // 设置当前位置为目录菜单 + } + + // 将新的目的标签添加到目的面板 + purposePanel.add(purposeLabel); + + // 可能需要调用重新绘制界面或更新界面显示的方法,但这里没有显示出来 + } + + + @Override + public void mousePressed(MouseEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseReleased(MouseEvent e) { + // TODO Auto-generated method stub + + } + + @Override/*鼠标焦点时*/ + // 重写鼠标进入组件事件的处理方法 + public void mouseEntered(MouseEvent e) { + // 获取触发事件的源对象 + Object source = e.getSource(); + + // 如果事件源是首页菜单标签,则改变前景色和图标 + if(source==homeMenuLabel) { + homeMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是用户菜单标签,则改变前景色和图标 + if(source==userMenuLabel) { + userMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + userMenuLabel.setIcon(new ImageIcon("static\\icon\\user2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是入库菜单标签,则改变前景色和图标 + else if(source==inMenuLabel) { + inMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + inMenuLabel.setIcon(new ImageIcon("static\\icon\\in2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是出库菜单标签,则改变前景色和图标 + else if(source==outMenuLabel) { + outMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + outMenuLabel.setIcon(new ImageIcon("static\\icon\\out2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是库存菜单标签,则改变前景色和图标 + else if(source==storageMenuLabel) { + storageMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是供应商菜单标签,则改变前景色和图标 + else if(source==supplierMenuLabel) { + supplierMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是目录菜单标签,则改变前景色和图标 + else if(source==catalogMenuLabel) { + catalogMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是用户菜单标签1,则改变前景色 + else if(source==userMenuLabel1) { + userMenuLabel1.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标进入图标 + } + // 方法结束,没有设置图标的变化,只是改变了前景色 + } + + + @Override + // 重写鼠标离开组件事件的处理方法 + public void mouseExited(MouseEvent e) { + // 获取触发事件的源对象 + Object source = e.getSource(); + + // 如果事件源是首页菜单标签,则恢复前景色和图标 + if(source==homeMenuLabel) { + homeMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是用户菜单标签,则恢复前景色和图标 + else if(source==userMenuLabel) { + userMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + userMenuLabel.setIcon(new ImageIcon("static\\icon\\user1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是入库菜单标签,则恢复前景色和图标 + else if(source==inMenuLabel) { + inMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + inMenuLabel.setIcon(new ImageIcon("static\\icon\\in1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是出库菜单标签,则恢复前景色和图标 + else if(source==outMenuLabel) { + outMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + outMenuLabel.setIcon(new ImageIcon("static\\icon\\out1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是库存菜单标签,则恢复前景色和图标 + else if(source==storageMenuLabel) { + storageMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是供应商菜单标签,则恢复前景色和图标 + else if(source==supplierMenuLabel) { + supplierMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是目录菜单标签,则恢复前景色和图标 + else if(source==catalogMenuLabel) { + catalogMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源不是上述任何一个标签,则默认处理用户菜单标签1 + else { + userMenuLabel1.setForeground(Color.white); // 恢复前景色为白色 + // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标离开图标 + } + // 方法结束,所有菜单标签的前景色和图标已根据鼠标离开事件进行了相应的恢复 + } + + + + @Override + protected void initView() { + // TODO Auto-generated method stub + + } + + @Override + public void windowOpened(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + // 重写窗口关闭事件的处理方法 + public void windowClosing(WindowEvent e) { + // TODO Auto-generated method stub + // 获取触发事件的源对象 + Object source = e.getSource(); + + // 如果事件源是当前窗口对象,执行以下操作 + if(source==this) { + // 关闭窗口时检查进货系统和出货系统是否还有记录 + this.vP =InView.getVector(); // 获取进货系统的记录向量 + System.out.println("v的size="+vP.size()); // 打印进货系统记录的数量 + bufferImpl = new BufferImpl(); // 创建缓冲区实现对象 + + // 如果进货系统的购物车还有记录或者出货系统的缓冲区还有记录 + if(vP.size()!=0||bufferImpl.allOutBuffer().size()!=0) { + // 如果购物车还有记录,则显示关闭确认对话框 + CloseDialog closeDialog = new CloseDialog(this,vP); // 创建关闭对话框 + closeDialog.setVisible(true); // 显示关闭对话框 + } else { + // 如果没有记录,则直接退出程序 + System.exit(0); // 安全退出程序 + } + } + // 方法结束,窗口关闭事件已处理 + } + + + @Override + public void windowClosed(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowIconified(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowDeiconified(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowActivated(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowDeactivated(WindowEvent e) { + // TODO Auto-generated method stub + + } + + + + + + + +} diff --git a/branch_zyx/My_branch/ProdCatalog.java b/branch_zyx/My_branch/ProdCatalog.java new file mode 100644 index 0000000..18fd506 --- /dev/null +++ b/branch_zyx/My_branch/ProdCatalog.java @@ -0,0 +1,25 @@ +package com.lingnan.supermarket.dto; // 声明当前类所在的包 + +// 定义产品目录类ProdCatalog +public class ProdCatalog { + private String id; // 产品目录ID + private String name; // 产品目录名称 + + // getId方法,用于获取产品目录ID + public String getId() { + return id; // 返回产品目录ID + } + // setId方法,用于设置产品目录ID + public void setId(String id) { + this.id = id; // 将参数id赋值给成员变量id + } + // getName方法,用于获取产品目录名称 + public String getName() { + return name; // 返回产品目录名称 + } + // setName方法,用于设置产品目录名称 + public void setName(String name) { + this.name = name; // 将参数name赋值给成员变量name + } + +} diff --git a/branch_zyx/My_branch/ProdCatalogTM.java b/branch_zyx/My_branch/ProdCatalogTM.java new file mode 100644 index 0000000..5552622 --- /dev/null +++ b/branch_zyx/My_branch/ProdCatalogTM.java @@ -0,0 +1,69 @@ +package com.lingnan.supermarket.table; // 声明当前类所在的包 + +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 + +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 + +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 + + + +public class ProdCatalogTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于产品目录的表格数据模型 + + private String [] columnName = {"类别id","类别名称","商品id","商品名称"}; // 定义列名数组,用于表格的列标题 + + private productionImpl prodDao = new productionImpl(); // 创建productionImpl实例,用于操作产品数据 + + private Vector prods; // 声明一个Vector,用于存储产品列表 + + public void all() { + // 查找全部数据 + prods = prodDao.findAllproduction(); // 调用findAllproduction方法,获取所有产品数据 + } + public void ById2(Production p) { + // 根据类别id查找数据 + prods = prodDao.findProductionById2(p.getId2()); // 调用findProductionById2方法,根据类别id获取产品数据 + } + + @Override + public int getRowCount() { + return prods.size(); // 返回产品列表的大小,即表格的行数 + } + + @Override + public int getColumnCount() { + return columnName.length; // 返回列名数组的长度,即表格的列数 + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + Production prod = prods.get(rowIndex); // 获取指定行的产品对象 + // 以下注释掉的是打印语句,用于调试 + /*System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + if(columnIndex==0) { + return prod.getId2(); // 返回类别id + }else if(columnIndex==1) { + return prod.getName2(); // 返回类别名称 + }else if(columnIndex==2) { + return prod.getId(); // 返回商品id + }else if(columnIndex==3) { + return prod.getName(); // 返回商品名称 + }else { + return null; // 如果列索引不匹配,返回null + } + } + + @Override + public String getColumnName(int column) { + return columnName[column]; // 返回指定列的列名 + } + + + +} diff --git a/branch_zyx/My_branch/ProdCatalogView.java b/branch_zyx/My_branch/ProdCatalogView.java new file mode 100644 index 0000000..6972c99 --- /dev/null +++ b/branch_zyx/My_branch/ProdCatalogView.java @@ -0,0 +1,200 @@ +package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 + +import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 +import java.awt.Color; // 导入Color类,用于定义颜色 +import java.awt.FlowLayout; // 导入FlowLayout布局管理器类 +import java.awt.event.ActionEvent; // 导入ActionEvent类,用于处理按钮点击等事件 +import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现事件监听 +import java.awt.event.ItemEvent; // 导入ItemEvent类,用于处理下拉框选择事件 +import java.awt.event.ItemListener; // 导入ItemListener接口,用于实现下拉框事件监听 +import java.util.ArrayList; // 导入ArrayList类,用于存储动态数组 + +import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 +import javax.swing.JButton; // 导入JButton类,用于创建按钮 +import javax.swing.JComboBox; // 导入JComboBox类,用于创建下拉框 +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 +import javax.swing.JLabel; // 导入JLabel类,用于创建标签 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建滚动面板 +import javax.swing.JTable; // 导入JTable类,用于创建表格 +import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 + +import com.lingnan.supermarket.dao.impl.prodCatalogImpl; // 导入prodCatalogImpl类,用于操作商品目录数据 +import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类,用于显示用户对话框 +import com.lingnan.supermarket.dto.ProdCatalog; // 导入ProdCatalog类,用于表示商品目录数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入Production类,用于表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,用于表示用户数据传输对象 +import com.lingnan.supermarket.table.ProdCatalogTM; // 导入ProdCatalogTM类,用于表示商品目录表格模型 +import com.lingnan.supermarket.table.StorageTableModel; // 导入StorageTableModel类,用于表示库存表格模型 +import com.lingnan.supermarket.table.UserTableModel; // 导入UserTableModel类,用于表示用户表格模型 +import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,用于字体工具类 + +public class ProdCatalogView extends JPanel { // 定义ProdCatalogView类,继承自JPanel + + // 上面 + private JPanel toolBarPanel; // 工具栏面板 + + private JPanel searchPanel; // 搜索面板 + private JLabel logLabel, locationLabel; // 标签,用于显示文本 + private JTextField nameSearchTF; // 文本框,用于输入搜索内容 + private JButton searchBtn; // 搜索按钮 + + private JPanel opePanel; // 操作面板 + private JButton addBtn, updateBtn, deleteBtn; // 添加、更新、删除按钮 + + private String catalog = "0"; // 商品目录ID + private JComboBox combo; // 下拉框,用于选择商品目录 + private String log[]=null; // 商品目录名称数组 + private ArrayListalog=null; // 商品目录名称列表 + private ProdCatalogTM prodCatalogTM; // 商品目录表格模型 + private ProdCatalog pc; // 商品目录数据传输对象 + private prodCatalogImpl pci; // 商品目录数据操作实现类 + + // 中间 + private JScrollPane tableScrollPane; // 表格滚动面板 + private JTable prodCatalogTable; // 商品目录表格 + + // 下面 + private JPanel bottomPanel; // 底部面板 + private JLabel countInfoLabel; // 标签,用于显示记录总数 + + private JFrame jFrame; // 窗口框架 + + // 构造方法,接收一个JFrame参数 + public ProdCatalogView(JFrame jFrame) { + this.setLayout(new BorderLayout()); // 设置面板布局为BorderLayout + initView(); // 初始化视图 + this.jFrame = jFrame; // 保存传入的JFrame实例 + } + + + private void initView() { + // 初始化视图方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel = new JLabel("商品目录"); // 创建商品目录标签并设置文本 + locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 + logLabel = new JLabel("分类"); // 创建分类标签并设置文本 + nameSearchTF = new JTextField(10); // 创建文本框并设置大小 + + searchBtn = new JButton("搜索", new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标和文本 + + // 创建操作面板和按钮,并设置图标(注释部分,未使用) + // opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + // addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); + // updateBtn = new JButton(new ImageIcon("static\\icon\\update.png")); + // deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); + + // 为按钮添加事件监听(注释部分,未使用) + // addBtn.addActionListener(this); + // updateBtn.addActionListener(this); + // deleteBtn.addActionListener(this); + + // 将按钮添加到操作面板(注释部分,未使用) + // opePanel.add(addBtn); + // opePanel.add(updateBtn); + // opePanel.add(deleteBtn); + + pci=new prodCatalogImpl(); // 创建商品目录数据操作实现类实例 + this.alog=pci.findNameProdCatalog(); // 查找所有商品目录名称 + this.log=new String[alog.size()]; // 创建字符串数组以存储商品目录名称 + for(int i=0;i(log); // 创建下拉框并设置选项 + combo.addItemListener(new MyItemListener()); // 为下拉框添加事件监听器 + + searchPanel.add(locationLabel); // 将商品目录标签添加到搜索面板 + searchPanel.add(logLabel); // 将分类标签添加到搜索面板 + searchPanel.add(combo); // 将下拉框添加到搜索面板 + /* + * searchPanel.add(nameSearchTF); // 将文本框添加到搜索面板(注释部分,未使用) + * searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板(注释部分,未使用) + */ + + toolBarPanel.add(searchPanel, "West"); // 将搜索面板添加到工具栏面板的西边 + // toolBarPanel.add(opePanel, "East"); // 将操作面板添加到工具栏面板的东边(注释部分,未使用) + + // 中间表格 + prodCatalogTM = new ProdCatalogTM(); // 创建商品目录表格模型 + prodCatalogTM.all(); // 加载所有商品目录数据 + prodCatalogTable = new JTable(prodCatalogTM); // 创建表格并设置模型 + prodCatalogTable.setFont(FontUtil.tableFont); // 设置表格字体 + prodCatalogTable.setRowHeight(50); // 设置表格行高 + tableScrollPane = new JScrollPane(prodCatalogTable); // 创建滚动面板并添加表格 + + // 下面 + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共" + prodCatalogTable.getRowCount() + "条"); // 创建记录数标签并设置文本 + bottomPanel.add(countInfoLabel); // 将记录数标签添加到底部面板 + + this.add(toolBarPanel, "North"); // 将工具栏面板添加到面板的北边 + this.add(tableScrollPane, "Center"); /* 将表格放到中间 */ // 将表格滚动面板添加到面板的中间 + this.add(bottomPanel, "South"); // 将底部面板添加到面板的南边 + + setVisible(true); // 设置面板为可见 + + } + + +// @Override +// public void actionPerformed(ActionEvent e) { +// Object source = e.getSource(); +// if (addBtn == source) { // 如果事件源是添加按钮 +// UserDialog userDialog = new UserDialog(jFrame); // 创建用户对话框 +// userDialog.setVisible(true); // 设置用户对话框为可见 +// } else if (updateBtn == source) { // 如果事件源是更新按钮 +// // 更新按钮的事件处理代码(未实现) +// } else if (deleteBtn == source) { // 如果事件源是删除按钮 +// // 删除按钮的事件处理代码(未实现) + +// } + +// } + + public class MyItemListener implements ItemListener { // 创建一个内部类实现ItemListener接口 + + @Override + public void itemStateChanged(ItemEvent e) { // 重写itemStateChanged方法 + JComboBox cb = (JComboBox) e.getSource(); // 获取事件源下拉框 + String catalog1 = (String) cb.getSelectedItem(); // 获取选中的商品目录名称 + pci =new prodCatalogImpl(); // 创建商品目录数据操作实现类实例 + for(int i=0;ialog=null; // 用于存储类别信息的列表 + private ProdCatalogTM prodCatalogTM; // 产品目录表格模型 + private ProdCatalog pc; // 产品目录数据传输对象 + private prodCatalogImpl pci; // 产品目录服务实现类 + private JComboBox combo; // 下拉框组件 + private String id2; // 产品目录ID + private String name2; // 产品目录名称 + + // 下拉供应商类别相关变量 + private String superlier[]=null; // 用于存储供应商信息的数组 + private ArrayListasuperlier=null; // 用于存储供应商信息的列表 + private SupplierInf si; // 供应商信息数据传输对象 + private SupplierInfImpl sii; // 供应商信息服务实现类 + private JComboBox combo1; // 供应商下拉框组件 + private int supplyid; // 供应商ID + + private StorageView storageView; // 库存视图引用 + + private Production production; // 产品数据传输对象 + + + public ProductionDialog(JFrame parent) { // 构造函数,接收一个父窗口作为参数 + super(parent, "添加"); // 调用父类构造函数,设置对话框标题为"添加" + + setSize(350, 500); // 设置对话框大小 + + setLocationRelativeTo(null); // 设置对话框相对于屏幕居中 + + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框不可调整大小 + + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + initView(); // 初始化视图 + } + + private void initView() { // 初始化视图的方法 + idPanel = new JPanel(); // 创建一个面板用于显示商品编号 + idLabel = new JLabel("商品编号"); // 创建一个标签显示"商品编号" + idTF = new JTextField(15); // 创建一个文本框用于输入商品编号,宽度为15 + idPanel.add(idLabel); // 将标签添加到面板 + idPanel.add(idTF); // 将文本框添加到面板 + + + namePanel = new JPanel(); // 创建一个面板用于显示名称 + nameLabel = new JLabel("名称"); // 创建一个标签显示"名称" + nameTF = new JTextField(15); // 创建一个文本框用于输入名称,宽度为15 + namePanel.add(nameLabel); // 将标签添加到面板 + namePanel.add(nameTF); // 将文本框添加到面板 + + + inpricePanel = new JPanel(); // 创建一个面板用于显示进货单价 + inpriceLabel = new JLabel("进货单价"); // 创建一个标签显示"进货单价" + inpriceTF = new JTextField(15); // 创建一个文本框用于输入进货单价,宽度为15 + inpricePanel.add(inpriceLabel); // 将标签添加到面板 + inpricePanel.add(inpriceTF); // 将文本框添加到面板 + + + outpricePanel = new JPanel(); // 创建一个面板用于显示购买单价 + outpriceLabel = new JLabel("购买单价"); // 创建一个标签显示"购买单价" + outpriceTF = new JTextField(15); // 创建一个文本框用于输入购买单价,宽度为15 + outpricePanel.add(outpriceLabel); // 将标签添加到面板 + outpricePanel.add(outpriceTF); // 将文本框添加到面板 + + + lifePanel = new JPanel(); // 创建一个面板用于显示保质期 + lifeLabel = new JLabel("保质期(月份数)"); // 创建一个标签显示"保质期(月份数)" + lifeTF = new JTextField(15); // 创建一个文本框用于输入保质期,宽度为15 + lifePanel.add(lifeLabel); // 将标签添加到面板 + lifePanel.add(lifeTF); // 将文本框添加到面板 + + + + sumPanel = new JPanel(); // 创建一个面板用于显示库存 + sumLabel = new JLabel("库存"); // 创建一个标签显示"库存" + sumTF = new JTextField(15); // 创建一个文本框用于输入库存数量,宽度为15 + sumPanel.add(sumLabel); // 将标签添加到面板 + sumPanel.add(sumTF); // 将文本框添加到面板 + +//供应商名下拉框 传递supplyid + supplyidPanel = new JPanel(); // 创建一个面板用于显示供应商信息 + supplyidLabel = new JLabel("供应商"); // 创建一个标签显示"供应商" +//supplyidTF = new JTextField(15); // 注释掉的代码,原本可能是用于输入供应商ID的文本框 + + sii=new SupplierInfImpl(); // 创建供应商信息服务的实例 + this.asuperlier=sii.findNameSupplier(); // 获取所有供应商名称的列表 + this.superlier=new String[asuperlier.size()]; // 创建一个字符串数组用于存储供应商名称 + for(int i=0;i(superlier); // 创建一个下拉框组件,用于选择供应商 + combo1.addItemListener(new MyItemListener1()); // 为下拉框添加项目监听器 + supplyidPanel.add(supplyidLabel); // 将标签添加到面板 + supplyidPanel.add(combo1); // 将下拉框添加到面板 + +/* id2Panel = new JPanel(); +id2Label = new JLabel("分类id"); +id2TF = new JTextField(id2,15); +id2Panel.add(id2Label); +id2Panel.add(id2TF);*/ +//类名下拉框 + name2Panel = new JPanel(); // 创建一个面板用于显示类名 + name2Label = new JLabel("类名"); // 创建一个标签显示"类名" + pci=new prodCatalogImpl(); // 创建产品目录服务的实例 + this.alog=pci.findNameProdCatalog(); // 获取所有产品目录名称的列表 + this.log=new String[alog.size()]; // 创建一个字符串数组用于存储产品目录名称 + for(int i=0;i(log); // 创建一个下拉框组件,用于选择产品目录 + combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 + name2Panel.add(name2Label); // 将标签添加到面板 + name2Panel.add(combo); // 将下拉框添加到面板 + + addressPanel = new JPanel(); // 创建一个面板用于显示地址 + addressLabel = new JLabel("地址"); // 创建一个标签显示"地址" + addressTF = new JTextField(15); // 创建一个文本框用于输入地址,宽度为15 + addressPanel.add(addressLabel); // 将标签添加到面板 + addressPanel.add(addressTF); // 将文本框添加到面板 + + contactPanel = new JPanel(); // 创建一个面板用于显示联系方式 + contactLabel = new JLabel("电话"); // 创建一个标签显示"电话" + contactTF = new JTextField(15); // 创建一个文本框用于输入电话,宽度为15 + contactPanel.add(contactLabel); // 将标签添加到面板 + contactPanel.add(contactTF); // 将文本框添加到面板 + + opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 + saveBtn = new JButton("保存"); // 创建一个保存按钮 + cancelBtn = new JButton("取消"); // 创建一个取消按钮 + saveBtn.addActionListener(this); // 为保存按钮添加动作监听器 + cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 + opePanel.add(saveBtn); // 将保存按钮添加到面板 + opePanel.add(cancelBtn); // 将取消按钮添加到面板 + + Container container = getContentPane(); // 获取对话框的内容面板 + container.add(idPanel); // 将商品编号面板添加到内容面板 + container.add(namePanel); // 将名称面板添加到内容面板 + container.add(inpricePanel); // 将进货单价面板添加到内容面板 + container.add(outpricePanel); // 将购买单价面板添加到内容面板 + container.add(lifePanel); // 将保质期面板添加到内容面板 + container.add(sumPanel); // 将库存面板添加到内容面板 + container.add(supplyidPanel); // 将供应商面板添加到内容面板 +//container.add(id2Panel); // 注释掉的代码,原本可能是用于添加分类ID面板 + container.add(name2Panel); // 将类名面板添加到内容面板 + container.add(opePanel); // 将操作按钮面板添加到内容面板 + + } + + @Override + public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 + Object source = e.getSource(); // 获取事件源 + if (source == saveBtn) { // 如果事件源是保存按钮 + // 思路获取数据 + // 保存到数据库 + // 关闭对话框 + // 刷新table + + String name = nameTF.getText(); // 获取名称文本框的内容 + String id = idTF.getText(); // 获取商品编号文本框的内容 + float inprice = Float.parseFloat((inpriceTF.getText())); // 将进货单价文本框的内容转换为浮点数 + float outprice = Float.parseFloat(outpriceTF.getText()); // 将销售单价文本框的内容转换为浮点数 + int life = Integer.parseInt(lifeTF.getText()); // 将保质期文本框的内容转换为整数 + int sum = Integer.parseInt(sumTF.getText()); // 将库存文本框的内容转换为整数 + + // TODO 参数校验 + if (this.production == null) { // 如果production对象为空,表示是添加新商品 + if(supplyid==-1){ // 如果供应商ID为-1,表示商品检索出错 + JOptionPane.showMessageDialog(this, "商品检索出错", "提示", + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + return; // 退出方法 + } + if(supplyid==0){ // 如果供应商ID为0,表示未选择商品名 + JOptionPane.showMessageDialog(this, "请选择商品名", "提示", + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + return; // 退出方法 + } + if(id2.equals("0")){ // 如果分类ID为"0",表示未选择商品类 + JOptionPane.showMessageDialog(this, "请选择商品类", "提示", + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + return; // 退出方法 + } + + Production production = new Production(); // 创建新的Production对象 + production.setId(id); // 设置商品编号 + production.setName(name); // 设置商品名称 + production.setInPrice(inprice); // 设置进货单价 + production.setOutPrice(outprice); // 设置销售单价 + production.setLife(life); // 设置保质期 + production.setSum(sum); // 设置库存 + production.setSupplyId(supplyid); // 设置供应商ID + production.setId2(id2); // 设置分类ID + production.setName2(name2); // 设置分类名称 + int result = productionService.addProduction(production); // 调用服务添加商品 + // int result = 1; // 注释掉的代码,可能是用于测试 + if (result == 1) { // 如果添加成功 + + JOptionPane.showMessageDialog(this, "添加成功", "提示", + JOptionPane.INFORMATION_MESSAGE); // 显示成功消息 + this.dispose(); // 关闭对话框 + } else if(result == 2){ // 如果返回值为2,表示已存在该商品 + JOptionPane.showMessageDialog(this, "已存在该商品", "提示", + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + } + else { // 如果添加失败 + JOptionPane.showMessageDialog(this, "出错!添加失败", "提示", + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + + } + }/*else{ + //更新 + SupplierInf supplierInf= new SupplierInf(); + supplierInf.setName(name); + supplierInf.setAddress(address); + supplierInf.setContact(contact); + supplierInf.setId(this.supplierInf.getId()); + + int result = supplierInfService.updateSupplierInf(supplierInf); + if(result==1){ + JOptionPane.showMessageDialog(this, "更新成功", "提示", + JOptionPane.INFORMATION_MESSAGE); + } + }*/ + + } else if (source == cancelBtn) { // 如果事件源是取消按钮 + + this.dispose(); // 关闭对话框 + } + } + + // 定义一个内部类MyItemListener实现ItemListener接口 + public class MyItemListener implements ItemListener { + + @Override + public void itemStateChanged(ItemEvent e) { // 实现itemStateChanged方法 + JComboBox cb = (JComboBox) e.getSource(); // 获取事件源,即下拉框组件 + name2 = (String) cb.getSelectedItem(); // 获取选中的商品类名称 + pci =new prodCatalogImpl(); // 创建商品分类服务实现类对象 + for(int i=0;i storageRecords; // 声明一个Vector,用于存储存储记录列表 + private StorageRecord storageRecord ; // 声明一个StorageRecord对象,用于存储单条记录 + + String oNumber ;/*订单号*/ // 声明一个字符串变量,用于存储订单号 + + public void allStoragrRecord() { // 定义一个方法,用于获取所有存储记录 + //将添加的商品加入到静态变量Vector数组中 + /*prod = InDialog.getProduction();*/ + storageRecords = srDao.findAllStorageRecord(); // 调用srDao的方法获取所有存储记录并赋值给storageRecords + } + + + @Override + public int getRowCount() { // 重写getRowCount方法,返回表格的行数 + return storageRecords.size(); // 返回storageRecords的大小,即记录的数量 + } + +/* public Float getAllPrice() { + return BufferImpl.InBufferAllPrice(); + }*/ + + @Override + public int getColumnCount() { // 重写getColumnCount方法,返回表格的列数 + return columnName.length; // 返回columnName数组的长度,即列的数量 + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { // 重写getValueAt方法,返回指定单元格的值 + storageRecord = storageRecords.get(rowIndex); // 获取指定行的存储记录 +/* System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + oNumber=storageRecord.getTheNumber(); // 获取订单号并赋值给oNumber + if(columnIndex==0) { + return storageRecord.getTheNumber(); // 返回订单号 + }else if(columnIndex==1) { + return storageRecord.getcDate(); // 返回操作时间 + }else if(columnIndex==2) { + return storageRecord.getId(); // 返回商品编号 + }else if(columnIndex==3) { + return storageRecord.getExecute(); // 返回进货/出货操作 + }else if(columnIndex==4) { + return storageRecord.getNum(); // 返回数量 + }else { + return null; // 如果列索引不匹配,返回null + } + } + + + + + @Override + public String getColumnName(int column) { // 重写getColumnName方法,返回指定列的列名 + return columnName[column]; // 返回columnName数组中指定索引的值 + } + + + +} diff --git a/branch_zyx/My_branch/StorageTableModel.java b/branch_zyx/My_branch/StorageTableModel.java new file mode 100644 index 0000000..43f6f91 --- /dev/null +++ b/branch_zyx/My_branch/StorageTableModel.java @@ -0,0 +1,74 @@ +package com.lingnan.supermarket.table; // 包声明,指定当前类所在的包 + +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 + +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 + +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 + + + +public class StorageTableModel extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于存储表格数据模型 + + private String [] columnName = {"id","名称","保质期","数量","类别","供应商编号"}; // 定义列名数组,用于表格的列标题 + + private productionImpl prodDao = new productionImpl(); // 创建productionImpl对象,用于操作产品数据 + + private Vector prods; // 声明一个Vector,用于存储Production对象列表 + + public void all() { + // 查找全部数据,并更新prods向量 + prods = prodDao.findAllproduction(); + } + + public void Byname(Production p) { + // 根据产品名称查找数据,并更新prods向量 + prods = prodDao.findproduction(p.getName()); + } + + @Override + public int getRowCount() { + // 获取表格的行数,即prods向量的元素数量 + return prods.size(); + } + + @Override + public int getColumnCount() { + // 获取表格的列数,即columnName数组的长度 + return columnName.length; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + // 获取指定行和列的单元格值 + Production prod = prods.get(rowIndex); // 获取指定行的Production对象 + if(columnIndex==0) { + return prod.getId(); // 返回产品ID + }else if(columnIndex==1) { + return prod.getName(); // 返回产品名称 + }else if(columnIndex==2) { + return prod.getLife(); // 返回产品保质期 + }else if(columnIndex==3) { + return prod.getSum(); // 返回产品数量 + }else if(columnIndex==4) { + return prod.getName2()+prod.getId2(); // 返回产品类别和ID的组合 + }else if(columnIndex==5) { + return prod.getSupplyId(); // 返回产品供应商编号 + }else { + return null; // 如果列索引不匹配,返回null + } + } + + @Override + public String getColumnName(int column) { + // 获取指定列的列名 + return columnName[column]; // 返回columnName数组中指定索引的值 + } + + + +} diff --git a/branch_zyx/My_branch/StorageView.java b/branch_zyx/My_branch/StorageView.java new file mode 100644 index 0000000..48d5677 --- /dev/null +++ b/branch_zyx/My_branch/StorageView.java @@ -0,0 +1,228 @@ +package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 + +import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 +import java.awt.Color; // 导入Color类,用于定义颜色 +import java.awt.FlowLayout; // 导入FlowLayout布局管理器类 +import java.awt.event.ActionEvent; // 导入事件监听接口 +import java.awt.event.ActionListener; // 导入事件监听器接口 + +import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 +import javax.swing.JButton; // 导入JButton类,用于创建按钮 +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 +import javax.swing.JLabel; // 导入JLabel类,用于创建标签 +import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建滚动面板 +import javax.swing.JTable; // 导入JTable类,用于创建表格 +import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 + +import com.lingnan.supermarket.dao.productionService; // 导入productionService接口 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入productionImpl实现类 +import com.lingnan.supermarket.dialog.ProductionDialog; // 导入ProductionDialog类 +import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类 +import com.lingnan.supermarket.dto.Production; // 导入Production类 +import com.lingnan.supermarket.table.StorageRecordTM; // 导入StorageRecordTM类 +import com.lingnan.supermarket.table.StorageTableModel; // 导入StorageTableModel类 +import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,用于字体设置 + +public class StorageView extends JPanel implements ActionListener{ // 创建StorageView类,继承JPanel并实现ActionListener接口 + + //上面 + private JPanel toolBarPanel; // 工具栏面板变量声明 + + private JPanel searchPanel; // 搜索面板变量声明 + private JLabel nameLabel,locationLabel; // 标签变量声明 + private JTextField nameSearchTF; // 文本框变量声明 + private JButton searchBtn; // 搜索按钮变量声明 + + private JPanel opePanel; // 操作面板变量声明 + private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn; // 按钮变量声明 + + //中间 + private JScrollPane tableScrollPane; // 表格滚动面板变量声明 + private JTable storageTable; // 表格变量声明 + + //下面 + private JPanel bottomPanel; // 底部面板变量声明 + private JLabel countInfoLabel; // 记录总数标签变量声明 + + private StorageTableModel storageTableModel ; // 表格模型变量声明 + private JFrame jFrame; // 窗口变量声明 + + private productionService productionService=new productionImpl(); // 创建productionService实例 + + public StorageView(JFrame jFrame) { // StorageView构造方法 + this.setLayout(new BorderLayout()); // 设置布局管理器为BorderLayout + initView(); // 初始化视图 + this.jFrame = jFrame; // 将传入的JFrame实例赋值给成员变量 + } + + private void initView() { // 初始化视图的方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel=new JLabel("当前位置>商品库存"); // 创建位置标签并设置文本 + locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 + nameLabel = new JLabel("商品名"); // 创建商品名标签并设置文本 + nameSearchTF = new JTextField(10); // 创建文本框并设置大小 + + + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 + backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); // 创建返回按钮并设置图标 + historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); // 创建历史按钮并设置图标 + backBtn.setVisible(false); // 设置返回按钮为不可见 + + addBtn.addActionListener(this); // 为添加按钮添加事件监听器 + updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 + deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 + searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 + backBtn.addActionListener(this); // 为返回按钮添加事件监听器 + historyBtn.addActionListener(this); // 为历史按钮添加事件监听器 + + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(updateBtn); // 将更新按钮添加到操作面板 + opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 + opePanel.add(backBtn); // 将返回按钮添加到操作面板 + opePanel.add(historyBtn); // 将历史按钮添加到操作面板 + + searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 + searchPanel.add(nameLabel); // 将商品名标签添加到搜索面板 + searchPanel.add(nameSearchTF); // 将商品名文本框添加到搜索面板 + searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 + + toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 + toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 + + //中间表格 + storageTableModel = new StorageTableModel(); // 创建表格模型实例 + storageTableModel.all(); // 调用表格模型的方法以加载所有数据 + storageTable = new JTable(storageTableModel); // 创建表格并设置模型 + storageTable.setFont(FontUtil.tableFont); // 设置表格字体 + storageTable.setRowHeight(50); // 设置表格行高 + + tableScrollPane = new JScrollPane(storageTable); // 创建滚动面板并添加表格 + + //下面 + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共"+storageTableModel.getRowCount()+"条"); // 创建记录总数标签并设置文本 + bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 + + this.add(toolBarPanel,"North"); // 将工具栏面板添加到面板的北边 + this.add(tableScrollPane,"Center"); /*将表格放到中间*/ // 将表格滚动面板添加到面板的中间 + this.add(bottomPanel,"South"); // 将底部面板添加到面板的南边 + + setVisible(true); // 设置面板为可见 + + } + + + @Override + public void actionPerformed(ActionEvent e) { + Object source = e.getSource(); // 获取事件源 + if(addBtn==source) { // 如果事件源是添加按钮 + //添加数据的对话框 + ProductionDialog productionDialog = new ProductionDialog(jFrame); // 创建添加数据的对话框 + productionDialog.setVisible(true); // 设置对话框为可见 + refreshProduction(); // 刷新生产数据 + }else if(updateBtn==source) { // 如果事件源是更新按钮 + refreshProduction(); // 刷新生产数据 + }else if(historyBtn==source) { // 如果事件源是历史按钮 + storageRecord(); // 处理库存记录 + }else if(backBtn==source) { // 如果事件源是返回按钮 + refreshProduction(); // 刷新生产数据 + } + + else if(deleteBtn==source) { // 如果事件源是删除按钮 + //获取选中记录,删除 + int[] rowIndexs = storageTable.getSelectedRows(); // 获取表格中所有选中行的索引 + if(rowIndexs.length==0) { // 如果没有选中任何行 + JOptionPane.showMessageDialog(this,"请至少选中一条"); // 显示提示信息 + return; // 结束方法执行 + } + + int select=JOptionPane.showConfirmDialog(this,"是否删除选中的"+rowIndexs.length+"条记录","提示",JOptionPane.YES_NO_OPTION); // 显示确认删除的对话框 + if(select==JOptionPane.YES_OPTION){ // 如果用户选择是 + for(int i=0;i suppliers; + + // 定义供应商ID变量 + private int id=0; + + // 查找全部供应商信息的方法 + public void all() { + // 查找全部数据 + suppliers = supplierInfService.findAllSupplierInf(); + } + + // 根据名称查找供应商信息的方法 + public void Byname(SupplierInf supplierInf) { + // 根据名称查找供应商信息 + suppliers = supplierInfService.findByNameSupplierInf(supplierInf); + + } + + // 重写获取行数的方法 + @Override + public int getRowCount() { + // 返回供应商列表的大小 + return suppliers.size(); + } + + // 重写获取列数的方法 + @Override + public int getColumnCount() { + // 返回列名数组的长度 + return columnName.length; + } + + // 重写获取单元格值的方法 + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + // 获取指定行的供应商信息 + SupplierInf prod = suppliers.get(rowIndex); + // 根据列索引返回相应的供应商信息属性 + if(columnIndex==0) { + return prod.getId(); + }else if(columnIndex==1) { + return prod.getName(); + }else if(columnIndex==2) { + return prod.getAddress(); + }else if(columnIndex==3) { + return prod.getContact(); + }else if(columnIndex==4){ + return prod.getEmail(); + } + else { + return null; + } + } + + // 重写获取列名的方法 + @Override + public String getColumnName(int column) { + // 返回指定列索引的列名 + return columnName[column]; + } + +/* + public int getId() { + return id; + } + public int getValueAt(int rowIndex){ + SupplierInf supplierInf = suppliers.get(rowIndex); + id=suppliers.get(rowIndex).getId(); + //System.out.println("rowIndex"+rowIndex); + //System.out.println("columnIndex"+columnIndex); + return supplierInf.getId(); + } + + */ + + + +} diff --git a/branch_zyx/My_branch/SupplierView.java b/branch_zyx/My_branch/SupplierView.java new file mode 100644 index 0000000..bf0d059 --- /dev/null +++ b/branch_zyx/My_branch/SupplierView.java @@ -0,0 +1,179 @@ +package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 + +import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 +import java.awt.Color; // 导入Color类,用于定义颜色 +import java.awt.FlowLayout; // 导入FlowLayout布局管理器类,用于流式布局 +import java.awt.event.ActionEvent; // 导入ActionEvent类,用于处理动作事件 +import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现事件监听 + +import javax.swing.ImageIcon; // 导入ImageIcon类,用于处理图片 +import javax.swing.JButton; // 导入JButton类,用于创建按钮 +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 +import javax.swing.JLabel; // 导入JLabel类,用于创建标签 +import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建带滚动条的容器 +import javax.swing.JTable; // 导入JTable类,用于创建表格 +import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 + +import com.lingnan.supermarket.dao.SupplierInfService; // 导入供应商信息服务的接口 +import com.lingnan.supermarket.dao.impl.SupplierInfImpl; // 导入供应商信息服务的实现类 +import com.lingnan.supermarket.dialog.SupplierInfDialog; // 导入供应商信息对话框类 +import com.lingnan.supermarket.dto.SupplierInf; // 导入供应商信息数据传输对象 +import com.lingnan.supermarket.table.SupplierTableModel; // 导入供应商信息表格模型类 +import com.lingnan.supermarket.utils.FontUtil; // 导入字体工具类 + +public class SupplierView extends JPanel implements ActionListener{ // 定义一个公共类SupplierView,继承JPanel并实现ActionListener接口 + + //上面 + private JPanel toolBarPanel; // 工具栏面板的私有成员变量 + + private JPanel searchPanel; // 搜索面板的私有成员变量 + private JLabel nameLabel,locationLabel; // 标签的私有成员变量,用于显示文本 + private JTextField nameSearchTF; // 文本框的私有成员变量,用于输入搜索内容 + private JButton searchBtn; // 搜索按钮的私有成员变量 + + private JPanel opePanel; // 操作面板的私有成员变量 + private JButton addBtn,updateBtn,deleteBtn; // 按钮的私有成员变量,用于添加、更新、删除操作 + + //中间 + private JScrollPane tableScrollPane; // 带滚动条的表格面板的私有成员变量 + private JTable supplierTable; // 表格的私有成员变量,用于显示供应商信息 + + //下面 + private JPanel bottomPanel; // 底部面板的私有成员变量 + private JLabel countInfoLabel; // 标签的私有成员变量,用于显示记录总数信息 + + private SupplierTableModel supplierTableModel; // 供应商信息表格模型的私有成员变量 + private JFrame jFrame; // 窗口的私有成员变量 + private SupplierInfService supplierInfService = new SupplierInfImpl(); // 供应商信息服务的实例化对象 + + public SupplierView(JFrame jFrame) { // SupplierView类的构造方法,接收一个JFrame参数 + this.setLayout(new BorderLayout()); // 设置面板的布局为BorderLayout + initView(); // 调用初始化视图的方法 + this.jFrame = jFrame; // 将传入的JFrame窗口对象赋值给类的成员变量 + } + + private void initView() { // 初始化视图的私有方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel=new JLabel("当前位置>供应商"); // 创建标签并设置文本为当前位置信息 + locationLabel.setFont(new FontUtil().userFont); // 设置标签的字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签的前景色(文字颜色) + nameLabel = new JLabel("公司名称"); // 创建标签并设置文本为公司名称 + nameSearchTF = new JTextField(10); // 创建文本框并设置大小为10个字符宽度 + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮 + + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 + + addBtn.addActionListener(this); // 为添加按钮添加事件监听器 + updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 + deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 + searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 + + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(updateBtn); // 将更新按钮添加到操作面板 + opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 + + searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 + searchPanel.add(nameLabel); // 将公司名称标签添加到搜索面板 + searchPanel.add(nameSearchTF); // 将公司名称文本框添加到搜索面板 + searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 + + + toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 + toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 + + + //中间表格 + supplierTableModel = new SupplierTableModel(); // 创建供应商表格模型对象 + supplierTableModel.all(); // 调用表格模型的方法以加载所有数据 + supplierTable = new JTable(supplierTableModel); // 创建表格并设置模型 + supplierTable.setFont(FontUtil.tableFont); // 设置表格字体 + supplierTable.setRowHeight(50); // 设置表格行高 + + tableScrollPane = new JScrollPane(supplierTable); // 创建带滚动条的容器并添加表格 + + //下面 + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建标签并设置显示记录总数的文本 + bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 + + this.add(toolBarPanel,"North"); // 将工具栏面板添加到主面板的北边 + this.add(tableScrollPane,"Center"); // 将带滚动条的表格容器添加到主面板的中间 + this.add(bottomPanel,"South"); // 将底部面板添加到主面板的南边 + + setVisible(true); // 设置主面板可见(通常不需要,因为主面板会在添加到窗口时自动设置为可见) + } + + @Override + public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 + Object source = e.getSource(); // 获取事件源 + if(addBtn==source) { // 如果事件源是添加按钮 + SupplierInfDialog supplierInfDialog = new SupplierInfDialog(jFrame, null); // 创建供应商信息对话框 + supplierInfDialog.setVisible(true); // 设置对话框可见 + refreshSupplier(); // 刷新供应商信息 + }else if(updateBtn==source) { // 如果事件源是更新按钮 + refreshSupplier(); // 刷新供应商信息 + }else if(deleteBtn==source) { // 如果事件源是删除按钮 + //获取选中记录 + int rowIndex = supplierTable.getSelectedRow(); // 获取表格中选中的行索引 + if(rowIndex==-1) { // 如果没有行被选中 + JOptionPane.showMessageDialog(this,"请选中一条"); // 显示提示信息 + return; // 结束方法执行 + } + int id = (Integer)supplierTable.getValueAt(rowIndex,0); // 获取选中行的ID + int select=JOptionPane.showConfirmDialog(this,"是否删除id="+id,"提示",JOptionPane.YES_NO_OPTION); // 显示确认删除的对话框并获取用户的选择 + if(select==JOptionPane.YES_OPTION){ // 如果用户在确认对话框中选择“是” + if(supplierInfService.deleteSupplierInf(id)==1) { // 尝试删除供应商信息,如果成功返回1 + JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示删除成功的消息 + refreshSupplier(); // 刷新供应商信息 + }else { + JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); // 显示删除失败的消息 + } + } + }else if(searchBtn==source){ // 如果事件源是搜索按钮 + System.out.println("搜索"); // 打印搜索操作信息到控制台 + refreshFindRname(); // 调用方法刷新搜索结果 + } + } + // 根据名称刷新供应商信息的方法 + public void refreshFindRname() { + String name = nameSearchTF.getText(); // 获取搜索文本框中的文本 + SupplierInf supplierInf = new SupplierInf(); // 创建供应商信息对象 + supplierInf.setName(name); // 设置供应商名称为搜索文本 + + + supplierTableModel = new SupplierTableModel(); // 创建新的供应商表格模型 + supplierTableModel.Byname(supplierInf); // 调用表格模型的方法按名称查询供应商信息 + + supplierTable.setModel(supplierTableModel); // 更新表格模型以显示查询结果 + + refreshCount(); // 刷新记录总数 + } + // 刷新供应商信息的方法 + public void refreshSupplier() { + supplierTableModel = new SupplierTableModel(); // 创建新的供应商表格模型 + supplierTableModel.all(); // 加载所有供应商信息 + supplierTable.setModel(supplierTableModel); // 更新表格模型以显示所有供应商信息 + + refreshCount(); // 刷新记录总数 + } + // 刷新记录总数的方法 + public void refreshCount(){ + bottomPanel.removeAll(); // 清除底部面板上的所有组件 + countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建新的标签显示记录总数 + bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 + } + +} diff --git a/branch_zyx/ProdCatalog.java b/branch_zyx/ProdCatalog.java new file mode 100644 index 0000000..18fd506 --- /dev/null +++ b/branch_zyx/ProdCatalog.java @@ -0,0 +1,25 @@ +package com.lingnan.supermarket.dto; // 声明当前类所在的包 + +// 定义产品目录类ProdCatalog +public class ProdCatalog { + private String id; // 产品目录ID + private String name; // 产品目录名称 + + // getId方法,用于获取产品目录ID + public String getId() { + return id; // 返回产品目录ID + } + // setId方法,用于设置产品目录ID + public void setId(String id) { + this.id = id; // 将参数id赋值给成员变量id + } + // getName方法,用于获取产品目录名称 + public String getName() { + return name; // 返回产品目录名称 + } + // setName方法,用于设置产品目录名称 + public void setName(String name) { + this.name = name; // 将参数name赋值给成员变量name + } + +} diff --git a/branch_zyx/ProdCatalogTM.java b/branch_zyx/ProdCatalogTM.java new file mode 100644 index 0000000..5552622 --- /dev/null +++ b/branch_zyx/ProdCatalogTM.java @@ -0,0 +1,69 @@ +package com.lingnan.supermarket.table; // 声明当前类所在的包 + +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 + +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 + +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 + + + +public class ProdCatalogTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于产品目录的表格数据模型 + + private String [] columnName = {"类别id","类别名称","商品id","商品名称"}; // 定义列名数组,用于表格的列标题 + + private productionImpl prodDao = new productionImpl(); // 创建productionImpl实例,用于操作产品数据 + + private Vector prods; // 声明一个Vector,用于存储产品列表 + + public void all() { + // 查找全部数据 + prods = prodDao.findAllproduction(); // 调用findAllproduction方法,获取所有产品数据 + } + public void ById2(Production p) { + // 根据类别id查找数据 + prods = prodDao.findProductionById2(p.getId2()); // 调用findProductionById2方法,根据类别id获取产品数据 + } + + @Override + public int getRowCount() { + return prods.size(); // 返回产品列表的大小,即表格的行数 + } + + @Override + public int getColumnCount() { + return columnName.length; // 返回列名数组的长度,即表格的列数 + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + Production prod = prods.get(rowIndex); // 获取指定行的产品对象 + // 以下注释掉的是打印语句,用于调试 + /*System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + if(columnIndex==0) { + return prod.getId2(); // 返回类别id + }else if(columnIndex==1) { + return prod.getName2(); // 返回类别名称 + }else if(columnIndex==2) { + return prod.getId(); // 返回商品id + }else if(columnIndex==3) { + return prod.getName(); // 返回商品名称 + }else { + return null; // 如果列索引不匹配,返回null + } + } + + @Override + public String getColumnName(int column) { + return columnName[column]; // 返回指定列的列名 + } + + + +} diff --git a/branch_zyx/ProdCatalogView.java b/branch_zyx/ProdCatalogView.java new file mode 100644 index 0000000..6972c99 --- /dev/null +++ b/branch_zyx/ProdCatalogView.java @@ -0,0 +1,200 @@ +package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 + +import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 +import java.awt.Color; // 导入Color类,用于定义颜色 +import java.awt.FlowLayout; // 导入FlowLayout布局管理器类 +import java.awt.event.ActionEvent; // 导入ActionEvent类,用于处理按钮点击等事件 +import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现事件监听 +import java.awt.event.ItemEvent; // 导入ItemEvent类,用于处理下拉框选择事件 +import java.awt.event.ItemListener; // 导入ItemListener接口,用于实现下拉框事件监听 +import java.util.ArrayList; // 导入ArrayList类,用于存储动态数组 + +import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 +import javax.swing.JButton; // 导入JButton类,用于创建按钮 +import javax.swing.JComboBox; // 导入JComboBox类,用于创建下拉框 +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 +import javax.swing.JLabel; // 导入JLabel类,用于创建标签 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建滚动面板 +import javax.swing.JTable; // 导入JTable类,用于创建表格 +import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 + +import com.lingnan.supermarket.dao.impl.prodCatalogImpl; // 导入prodCatalogImpl类,用于操作商品目录数据 +import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类,用于显示用户对话框 +import com.lingnan.supermarket.dto.ProdCatalog; // 导入ProdCatalog类,用于表示商品目录数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入Production类,用于表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,用于表示用户数据传输对象 +import com.lingnan.supermarket.table.ProdCatalogTM; // 导入ProdCatalogTM类,用于表示商品目录表格模型 +import com.lingnan.supermarket.table.StorageTableModel; // 导入StorageTableModel类,用于表示库存表格模型 +import com.lingnan.supermarket.table.UserTableModel; // 导入UserTableModel类,用于表示用户表格模型 +import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,用于字体工具类 + +public class ProdCatalogView extends JPanel { // 定义ProdCatalogView类,继承自JPanel + + // 上面 + private JPanel toolBarPanel; // 工具栏面板 + + private JPanel searchPanel; // 搜索面板 + private JLabel logLabel, locationLabel; // 标签,用于显示文本 + private JTextField nameSearchTF; // 文本框,用于输入搜索内容 + private JButton searchBtn; // 搜索按钮 + + private JPanel opePanel; // 操作面板 + private JButton addBtn, updateBtn, deleteBtn; // 添加、更新、删除按钮 + + private String catalog = "0"; // 商品目录ID + private JComboBox combo; // 下拉框,用于选择商品目录 + private String log[]=null; // 商品目录名称数组 + private ArrayListalog=null; // 商品目录名称列表 + private ProdCatalogTM prodCatalogTM; // 商品目录表格模型 + private ProdCatalog pc; // 商品目录数据传输对象 + private prodCatalogImpl pci; // 商品目录数据操作实现类 + + // 中间 + private JScrollPane tableScrollPane; // 表格滚动面板 + private JTable prodCatalogTable; // 商品目录表格 + + // 下面 + private JPanel bottomPanel; // 底部面板 + private JLabel countInfoLabel; // 标签,用于显示记录总数 + + private JFrame jFrame; // 窗口框架 + + // 构造方法,接收一个JFrame参数 + public ProdCatalogView(JFrame jFrame) { + this.setLayout(new BorderLayout()); // 设置面板布局为BorderLayout + initView(); // 初始化视图 + this.jFrame = jFrame; // 保存传入的JFrame实例 + } + + + private void initView() { + // 初始化视图方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel = new JLabel("商品目录"); // 创建商品目录标签并设置文本 + locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 + logLabel = new JLabel("分类"); // 创建分类标签并设置文本 + nameSearchTF = new JTextField(10); // 创建文本框并设置大小 + + searchBtn = new JButton("搜索", new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标和文本 + + // 创建操作面板和按钮,并设置图标(注释部分,未使用) + // opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + // addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); + // updateBtn = new JButton(new ImageIcon("static\\icon\\update.png")); + // deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); + + // 为按钮添加事件监听(注释部分,未使用) + // addBtn.addActionListener(this); + // updateBtn.addActionListener(this); + // deleteBtn.addActionListener(this); + + // 将按钮添加到操作面板(注释部分,未使用) + // opePanel.add(addBtn); + // opePanel.add(updateBtn); + // opePanel.add(deleteBtn); + + pci=new prodCatalogImpl(); // 创建商品目录数据操作实现类实例 + this.alog=pci.findNameProdCatalog(); // 查找所有商品目录名称 + this.log=new String[alog.size()]; // 创建字符串数组以存储商品目录名称 + for(int i=0;i(log); // 创建下拉框并设置选项 + combo.addItemListener(new MyItemListener()); // 为下拉框添加事件监听器 + + searchPanel.add(locationLabel); // 将商品目录标签添加到搜索面板 + searchPanel.add(logLabel); // 将分类标签添加到搜索面板 + searchPanel.add(combo); // 将下拉框添加到搜索面板 + /* + * searchPanel.add(nameSearchTF); // 将文本框添加到搜索面板(注释部分,未使用) + * searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板(注释部分,未使用) + */ + + toolBarPanel.add(searchPanel, "West"); // 将搜索面板添加到工具栏面板的西边 + // toolBarPanel.add(opePanel, "East"); // 将操作面板添加到工具栏面板的东边(注释部分,未使用) + + // 中间表格 + prodCatalogTM = new ProdCatalogTM(); // 创建商品目录表格模型 + prodCatalogTM.all(); // 加载所有商品目录数据 + prodCatalogTable = new JTable(prodCatalogTM); // 创建表格并设置模型 + prodCatalogTable.setFont(FontUtil.tableFont); // 设置表格字体 + prodCatalogTable.setRowHeight(50); // 设置表格行高 + tableScrollPane = new JScrollPane(prodCatalogTable); // 创建滚动面板并添加表格 + + // 下面 + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共" + prodCatalogTable.getRowCount() + "条"); // 创建记录数标签并设置文本 + bottomPanel.add(countInfoLabel); // 将记录数标签添加到底部面板 + + this.add(toolBarPanel, "North"); // 将工具栏面板添加到面板的北边 + this.add(tableScrollPane, "Center"); /* 将表格放到中间 */ // 将表格滚动面板添加到面板的中间 + this.add(bottomPanel, "South"); // 将底部面板添加到面板的南边 + + setVisible(true); // 设置面板为可见 + + } + + +// @Override +// public void actionPerformed(ActionEvent e) { +// Object source = e.getSource(); +// if (addBtn == source) { // 如果事件源是添加按钮 +// UserDialog userDialog = new UserDialog(jFrame); // 创建用户对话框 +// userDialog.setVisible(true); // 设置用户对话框为可见 +// } else if (updateBtn == source) { // 如果事件源是更新按钮 +// // 更新按钮的事件处理代码(未实现) +// } else if (deleteBtn == source) { // 如果事件源是删除按钮 +// // 删除按钮的事件处理代码(未实现) + +// } + +// } + + public class MyItemListener implements ItemListener { // 创建一个内部类实现ItemListener接口 + + @Override + public void itemStateChanged(ItemEvent e) { // 重写itemStateChanged方法 + JComboBox cb = (JComboBox) e.getSource(); // 获取事件源下拉框 + String catalog1 = (String) cb.getSelectedItem(); // 获取选中的商品目录名称 + pci =new prodCatalogImpl(); // 创建商品目录数据操作实现类实例 + for(int i=0;ialog=null; // 用于存储类别信息的列表 + private ProdCatalogTM prodCatalogTM; // 产品目录表格模型 + private ProdCatalog pc; // 产品目录数据传输对象 + private prodCatalogImpl pci; // 产品目录服务实现类 + private JComboBox combo; // 下拉框组件 + private String id2; // 产品目录ID + private String name2; // 产品目录名称 + + // 下拉供应商类别相关变量 + private String superlier[]=null; // 用于存储供应商信息的数组 + private ArrayListasuperlier=null; // 用于存储供应商信息的列表 + private SupplierInf si; // 供应商信息数据传输对象 + private SupplierInfImpl sii; // 供应商信息服务实现类 + private JComboBox combo1; // 供应商下拉框组件 + private int supplyid; // 供应商ID + + private StorageView storageView; // 库存视图引用 + + private Production production; // 产品数据传输对象 + + + public ProductionDialog(JFrame parent) { // 构造函数,接收一个父窗口作为参数 + super(parent, "添加"); // 调用父类构造函数,设置对话框标题为"添加" + + setSize(350, 500); // 设置对话框大小 + + setLocationRelativeTo(null); // 设置对话框相对于屏幕居中 + + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框不可调整大小 + + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + initView(); // 初始化视图 + } + + private void initView() { // 初始化视图的方法 + idPanel = new JPanel(); // 创建一个面板用于显示商品编号 + idLabel = new JLabel("商品编号"); // 创建一个标签显示"商品编号" + idTF = new JTextField(15); // 创建一个文本框用于输入商品编号,宽度为15 + idPanel.add(idLabel); // 将标签添加到面板 + idPanel.add(idTF); // 将文本框添加到面板 + + + namePanel = new JPanel(); // 创建一个面板用于显示名称 + nameLabel = new JLabel("名称"); // 创建一个标签显示"名称" + nameTF = new JTextField(15); // 创建一个文本框用于输入名称,宽度为15 + namePanel.add(nameLabel); // 将标签添加到面板 + namePanel.add(nameTF); // 将文本框添加到面板 + + + inpricePanel = new JPanel(); // 创建一个面板用于显示进货单价 + inpriceLabel = new JLabel("进货单价"); // 创建一个标签显示"进货单价" + inpriceTF = new JTextField(15); // 创建一个文本框用于输入进货单价,宽度为15 + inpricePanel.add(inpriceLabel); // 将标签添加到面板 + inpricePanel.add(inpriceTF); // 将文本框添加到面板 + + + outpricePanel = new JPanel(); // 创建一个面板用于显示购买单价 + outpriceLabel = new JLabel("购买单价"); // 创建一个标签显示"购买单价" + outpriceTF = new JTextField(15); // 创建一个文本框用于输入购买单价,宽度为15 + outpricePanel.add(outpriceLabel); // 将标签添加到面板 + outpricePanel.add(outpriceTF); // 将文本框添加到面板 + + + lifePanel = new JPanel(); // 创建一个面板用于显示保质期 + lifeLabel = new JLabel("保质期(月份数)"); // 创建一个标签显示"保质期(月份数)" + lifeTF = new JTextField(15); // 创建一个文本框用于输入保质期,宽度为15 + lifePanel.add(lifeLabel); // 将标签添加到面板 + lifePanel.add(lifeTF); // 将文本框添加到面板 + + + + sumPanel = new JPanel(); // 创建一个面板用于显示库存 + sumLabel = new JLabel("库存"); // 创建一个标签显示"库存" + sumTF = new JTextField(15); // 创建一个文本框用于输入库存数量,宽度为15 + sumPanel.add(sumLabel); // 将标签添加到面板 + sumPanel.add(sumTF); // 将文本框添加到面板 + +//供应商名下拉框 传递supplyid + supplyidPanel = new JPanel(); // 创建一个面板用于显示供应商信息 + supplyidLabel = new JLabel("供应商"); // 创建一个标签显示"供应商" +//supplyidTF = new JTextField(15); // 注释掉的代码,原本可能是用于输入供应商ID的文本框 + + sii=new SupplierInfImpl(); // 创建供应商信息服务的实例 + this.asuperlier=sii.findNameSupplier(); // 获取所有供应商名称的列表 + this.superlier=new String[asuperlier.size()]; // 创建一个字符串数组用于存储供应商名称 + for(int i=0;i(superlier); // 创建一个下拉框组件,用于选择供应商 + combo1.addItemListener(new MyItemListener1()); // 为下拉框添加项目监听器 + supplyidPanel.add(supplyidLabel); // 将标签添加到面板 + supplyidPanel.add(combo1); // 将下拉框添加到面板 + +/* id2Panel = new JPanel(); +id2Label = new JLabel("分类id"); +id2TF = new JTextField(id2,15); +id2Panel.add(id2Label); +id2Panel.add(id2TF);*/ +//类名下拉框 + name2Panel = new JPanel(); // 创建一个面板用于显示类名 + name2Label = new JLabel("类名"); // 创建一个标签显示"类名" + pci=new prodCatalogImpl(); // 创建产品目录服务的实例 + this.alog=pci.findNameProdCatalog(); // 获取所有产品目录名称的列表 + this.log=new String[alog.size()]; // 创建一个字符串数组用于存储产品目录名称 + for(int i=0;i(log); // 创建一个下拉框组件,用于选择产品目录 + combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 + name2Panel.add(name2Label); // 将标签添加到面板 + name2Panel.add(combo); // 将下拉框添加到面板 + + addressPanel = new JPanel(); // 创建一个面板用于显示地址 + addressLabel = new JLabel("地址"); // 创建一个标签显示"地址" + addressTF = new JTextField(15); // 创建一个文本框用于输入地址,宽度为15 + addressPanel.add(addressLabel); // 将标签添加到面板 + addressPanel.add(addressTF); // 将文本框添加到面板 + + contactPanel = new JPanel(); // 创建一个面板用于显示联系方式 + contactLabel = new JLabel("电话"); // 创建一个标签显示"电话" + contactTF = new JTextField(15); // 创建一个文本框用于输入电话,宽度为15 + contactPanel.add(contactLabel); // 将标签添加到面板 + contactPanel.add(contactTF); // 将文本框添加到面板 + + opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 + saveBtn = new JButton("保存"); // 创建一个保存按钮 + cancelBtn = new JButton("取消"); // 创建一个取消按钮 + saveBtn.addActionListener(this); // 为保存按钮添加动作监听器 + cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 + opePanel.add(saveBtn); // 将保存按钮添加到面板 + opePanel.add(cancelBtn); // 将取消按钮添加到面板 + + Container container = getContentPane(); // 获取对话框的内容面板 + container.add(idPanel); // 将商品编号面板添加到内容面板 + container.add(namePanel); // 将名称面板添加到内容面板 + container.add(inpricePanel); // 将进货单价面板添加到内容面板 + container.add(outpricePanel); // 将购买单价面板添加到内容面板 + container.add(lifePanel); // 将保质期面板添加到内容面板 + container.add(sumPanel); // 将库存面板添加到内容面板 + container.add(supplyidPanel); // 将供应商面板添加到内容面板 +//container.add(id2Panel); // 注释掉的代码,原本可能是用于添加分类ID面板 + container.add(name2Panel); // 将类名面板添加到内容面板 + container.add(opePanel); // 将操作按钮面板添加到内容面板 + + } + + @Override + public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 + Object source = e.getSource(); // 获取事件源 + if (source == saveBtn) { // 如果事件源是保存按钮 + // 思路获取数据 + // 保存到数据库 + // 关闭对话框 + // 刷新table + + String name = nameTF.getText(); // 获取名称文本框的内容 + String id = idTF.getText(); // 获取商品编号文本框的内容 + float inprice = Float.parseFloat((inpriceTF.getText())); // 将进货单价文本框的内容转换为浮点数 + float outprice = Float.parseFloat(outpriceTF.getText()); // 将销售单价文本框的内容转换为浮点数 + int life = Integer.parseInt(lifeTF.getText()); // 将保质期文本框的内容转换为整数 + int sum = Integer.parseInt(sumTF.getText()); // 将库存文本框的内容转换为整数 + + // TODO 参数校验 + if (this.production == null) { // 如果production对象为空,表示是添加新商品 + if(supplyid==-1){ // 如果供应商ID为-1,表示商品检索出错 + JOptionPane.showMessageDialog(this, "商品检索出错", "提示", + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + return; // 退出方法 + } + if(supplyid==0){ // 如果供应商ID为0,表示未选择商品名 + JOptionPane.showMessageDialog(this, "请选择商品名", "提示", + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + return; // 退出方法 + } + if(id2.equals("0")){ // 如果分类ID为"0",表示未选择商品类 + JOptionPane.showMessageDialog(this, "请选择商品类", "提示", + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + return; // 退出方法 + } + + Production production = new Production(); // 创建新的Production对象 + production.setId(id); // 设置商品编号 + production.setName(name); // 设置商品名称 + production.setInPrice(inprice); // 设置进货单价 + production.setOutPrice(outprice); // 设置销售单价 + production.setLife(life); // 设置保质期 + production.setSum(sum); // 设置库存 + production.setSupplyId(supplyid); // 设置供应商ID + production.setId2(id2); // 设置分类ID + production.setName2(name2); // 设置分类名称 + int result = productionService.addProduction(production); // 调用服务添加商品 + // int result = 1; // 注释掉的代码,可能是用于测试 + if (result == 1) { // 如果添加成功 + + JOptionPane.showMessageDialog(this, "添加成功", "提示", + JOptionPane.INFORMATION_MESSAGE); // 显示成功消息 + this.dispose(); // 关闭对话框 + } else if(result == 2){ // 如果返回值为2,表示已存在该商品 + JOptionPane.showMessageDialog(this, "已存在该商品", "提示", + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + } + else { // 如果添加失败 + JOptionPane.showMessageDialog(this, "出错!添加失败", "提示", + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + + } + }/*else{ + //更新 + SupplierInf supplierInf= new SupplierInf(); + supplierInf.setName(name); + supplierInf.setAddress(address); + supplierInf.setContact(contact); + supplierInf.setId(this.supplierInf.getId()); + + int result = supplierInfService.updateSupplierInf(supplierInf); + if(result==1){ + JOptionPane.showMessageDialog(this, "更新成功", "提示", + JOptionPane.INFORMATION_MESSAGE); + } + }*/ + + } else if (source == cancelBtn) { // 如果事件源是取消按钮 + + this.dispose(); // 关闭对话框 + } + } + + // 定义一个内部类MyItemListener实现ItemListener接口 + public class MyItemListener implements ItemListener { + + @Override + public void itemStateChanged(ItemEvent e) { // 实现itemStateChanged方法 + JComboBox cb = (JComboBox) e.getSource(); // 获取事件源,即下拉框组件 + name2 = (String) cb.getSelectedItem(); // 获取选中的商品类名称 + pci =new prodCatalogImpl(); // 创建商品分类服务实现类对象 + for(int i=0;i storageRecords; // 声明一个Vector,用于存储存储记录列表 + private StorageRecord storageRecord ; // 声明一个StorageRecord对象,用于存储单条记录 + + String oNumber ;/*订单号*/ // 声明一个字符串变量,用于存储订单号 + + public void allStoragrRecord() { // 定义一个方法,用于获取所有存储记录 + //将添加的商品加入到静态变量Vector数组中 + /*prod = InDialog.getProduction();*/ + storageRecords = srDao.findAllStorageRecord(); // 调用srDao的方法获取所有存储记录并赋值给storageRecords + } + + + @Override + public int getRowCount() { // 重写getRowCount方法,返回表格的行数 + return storageRecords.size(); // 返回storageRecords的大小,即记录的数量 + } + +/* public Float getAllPrice() { + return BufferImpl.InBufferAllPrice(); + }*/ + + @Override + public int getColumnCount() { // 重写getColumnCount方法,返回表格的列数 + return columnName.length; // 返回columnName数组的长度,即列的数量 + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { // 重写getValueAt方法,返回指定单元格的值 + storageRecord = storageRecords.get(rowIndex); // 获取指定行的存储记录 +/* System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + oNumber=storageRecord.getTheNumber(); // 获取订单号并赋值给oNumber + if(columnIndex==0) { + return storageRecord.getTheNumber(); // 返回订单号 + }else if(columnIndex==1) { + return storageRecord.getcDate(); // 返回操作时间 + }else if(columnIndex==2) { + return storageRecord.getId(); // 返回商品编号 + }else if(columnIndex==3) { + return storageRecord.getExecute(); // 返回进货/出货操作 + }else if(columnIndex==4) { + return storageRecord.getNum(); // 返回数量 + }else { + return null; // 如果列索引不匹配,返回null + } + } + + + + + @Override + public String getColumnName(int column) { // 重写getColumnName方法,返回指定列的列名 + return columnName[column]; // 返回columnName数组中指定索引的值 + } + + + +} diff --git a/branch_zyx/StorageTableModel.java b/branch_zyx/StorageTableModel.java new file mode 100644 index 0000000..43f6f91 --- /dev/null +++ b/branch_zyx/StorageTableModel.java @@ -0,0 +1,74 @@ +package com.lingnan.supermarket.table; // 包声明,指定当前类所在的包 + +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 + +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 + +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 + + + +public class StorageTableModel extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于存储表格数据模型 + + private String [] columnName = {"id","名称","保质期","数量","类别","供应商编号"}; // 定义列名数组,用于表格的列标题 + + private productionImpl prodDao = new productionImpl(); // 创建productionImpl对象,用于操作产品数据 + + private Vector prods; // 声明一个Vector,用于存储Production对象列表 + + public void all() { + // 查找全部数据,并更新prods向量 + prods = prodDao.findAllproduction(); + } + + public void Byname(Production p) { + // 根据产品名称查找数据,并更新prods向量 + prods = prodDao.findproduction(p.getName()); + } + + @Override + public int getRowCount() { + // 获取表格的行数,即prods向量的元素数量 + return prods.size(); + } + + @Override + public int getColumnCount() { + // 获取表格的列数,即columnName数组的长度 + return columnName.length; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + // 获取指定行和列的单元格值 + Production prod = prods.get(rowIndex); // 获取指定行的Production对象 + if(columnIndex==0) { + return prod.getId(); // 返回产品ID + }else if(columnIndex==1) { + return prod.getName(); // 返回产品名称 + }else if(columnIndex==2) { + return prod.getLife(); // 返回产品保质期 + }else if(columnIndex==3) { + return prod.getSum(); // 返回产品数量 + }else if(columnIndex==4) { + return prod.getName2()+prod.getId2(); // 返回产品类别和ID的组合 + }else if(columnIndex==5) { + return prod.getSupplyId(); // 返回产品供应商编号 + }else { + return null; // 如果列索引不匹配,返回null + } + } + + @Override + public String getColumnName(int column) { + // 获取指定列的列名 + return columnName[column]; // 返回columnName数组中指定索引的值 + } + + + +} diff --git a/branch_zyx/StorageView.java b/branch_zyx/StorageView.java new file mode 100644 index 0000000..48d5677 --- /dev/null +++ b/branch_zyx/StorageView.java @@ -0,0 +1,228 @@ +package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 + +import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 +import java.awt.Color; // 导入Color类,用于定义颜色 +import java.awt.FlowLayout; // 导入FlowLayout布局管理器类 +import java.awt.event.ActionEvent; // 导入事件监听接口 +import java.awt.event.ActionListener; // 导入事件监听器接口 + +import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 +import javax.swing.JButton; // 导入JButton类,用于创建按钮 +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 +import javax.swing.JLabel; // 导入JLabel类,用于创建标签 +import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建滚动面板 +import javax.swing.JTable; // 导入JTable类,用于创建表格 +import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 + +import com.lingnan.supermarket.dao.productionService; // 导入productionService接口 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入productionImpl实现类 +import com.lingnan.supermarket.dialog.ProductionDialog; // 导入ProductionDialog类 +import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类 +import com.lingnan.supermarket.dto.Production; // 导入Production类 +import com.lingnan.supermarket.table.StorageRecordTM; // 导入StorageRecordTM类 +import com.lingnan.supermarket.table.StorageTableModel; // 导入StorageTableModel类 +import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,用于字体设置 + +public class StorageView extends JPanel implements ActionListener{ // 创建StorageView类,继承JPanel并实现ActionListener接口 + + //上面 + private JPanel toolBarPanel; // 工具栏面板变量声明 + + private JPanel searchPanel; // 搜索面板变量声明 + private JLabel nameLabel,locationLabel; // 标签变量声明 + private JTextField nameSearchTF; // 文本框变量声明 + private JButton searchBtn; // 搜索按钮变量声明 + + private JPanel opePanel; // 操作面板变量声明 + private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn; // 按钮变量声明 + + //中间 + private JScrollPane tableScrollPane; // 表格滚动面板变量声明 + private JTable storageTable; // 表格变量声明 + + //下面 + private JPanel bottomPanel; // 底部面板变量声明 + private JLabel countInfoLabel; // 记录总数标签变量声明 + + private StorageTableModel storageTableModel ; // 表格模型变量声明 + private JFrame jFrame; // 窗口变量声明 + + private productionService productionService=new productionImpl(); // 创建productionService实例 + + public StorageView(JFrame jFrame) { // StorageView构造方法 + this.setLayout(new BorderLayout()); // 设置布局管理器为BorderLayout + initView(); // 初始化视图 + this.jFrame = jFrame; // 将传入的JFrame实例赋值给成员变量 + } + + private void initView() { // 初始化视图的方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel=new JLabel("当前位置>商品库存"); // 创建位置标签并设置文本 + locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 + nameLabel = new JLabel("商品名"); // 创建商品名标签并设置文本 + nameSearchTF = new JTextField(10); // 创建文本框并设置大小 + + + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 + backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); // 创建返回按钮并设置图标 + historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); // 创建历史按钮并设置图标 + backBtn.setVisible(false); // 设置返回按钮为不可见 + + addBtn.addActionListener(this); // 为添加按钮添加事件监听器 + updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 + deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 + searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 + backBtn.addActionListener(this); // 为返回按钮添加事件监听器 + historyBtn.addActionListener(this); // 为历史按钮添加事件监听器 + + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(updateBtn); // 将更新按钮添加到操作面板 + opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 + opePanel.add(backBtn); // 将返回按钮添加到操作面板 + opePanel.add(historyBtn); // 将历史按钮添加到操作面板 + + searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 + searchPanel.add(nameLabel); // 将商品名标签添加到搜索面板 + searchPanel.add(nameSearchTF); // 将商品名文本框添加到搜索面板 + searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 + + toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 + toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 + + //中间表格 + storageTableModel = new StorageTableModel(); // 创建表格模型实例 + storageTableModel.all(); // 调用表格模型的方法以加载所有数据 + storageTable = new JTable(storageTableModel); // 创建表格并设置模型 + storageTable.setFont(FontUtil.tableFont); // 设置表格字体 + storageTable.setRowHeight(50); // 设置表格行高 + + tableScrollPane = new JScrollPane(storageTable); // 创建滚动面板并添加表格 + + //下面 + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共"+storageTableModel.getRowCount()+"条"); // 创建记录总数标签并设置文本 + bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 + + this.add(toolBarPanel,"North"); // 将工具栏面板添加到面板的北边 + this.add(tableScrollPane,"Center"); /*将表格放到中间*/ // 将表格滚动面板添加到面板的中间 + this.add(bottomPanel,"South"); // 将底部面板添加到面板的南边 + + setVisible(true); // 设置面板为可见 + + } + + + @Override + public void actionPerformed(ActionEvent e) { + Object source = e.getSource(); // 获取事件源 + if(addBtn==source) { // 如果事件源是添加按钮 + //添加数据的对话框 + ProductionDialog productionDialog = new ProductionDialog(jFrame); // 创建添加数据的对话框 + productionDialog.setVisible(true); // 设置对话框为可见 + refreshProduction(); // 刷新生产数据 + }else if(updateBtn==source) { // 如果事件源是更新按钮 + refreshProduction(); // 刷新生产数据 + }else if(historyBtn==source) { // 如果事件源是历史按钮 + storageRecord(); // 处理库存记录 + }else if(backBtn==source) { // 如果事件源是返回按钮 + refreshProduction(); // 刷新生产数据 + } + + else if(deleteBtn==source) { // 如果事件源是删除按钮 + //获取选中记录,删除 + int[] rowIndexs = storageTable.getSelectedRows(); // 获取表格中所有选中行的索引 + if(rowIndexs.length==0) { // 如果没有选中任何行 + JOptionPane.showMessageDialog(this,"请至少选中一条"); // 显示提示信息 + return; // 结束方法执行 + } + + int select=JOptionPane.showConfirmDialog(this,"是否删除选中的"+rowIndexs.length+"条记录","提示",JOptionPane.YES_NO_OPTION); // 显示确认删除的对话框 + if(select==JOptionPane.YES_OPTION){ // 如果用户选择是 + for(int i=0;i suppliers; + + // 定义供应商ID变量 + private int id=0; + + // 查找全部供应商信息的方法 + public void all() { + // 查找全部数据 + suppliers = supplierInfService.findAllSupplierInf(); + } + + // 根据名称查找供应商信息的方法 + public void Byname(SupplierInf supplierInf) { + // 根据名称查找供应商信息 + suppliers = supplierInfService.findByNameSupplierInf(supplierInf); + + } + + // 重写获取行数的方法 + @Override + public int getRowCount() { + // 返回供应商列表的大小 + return suppliers.size(); + } + + // 重写获取列数的方法 + @Override + public int getColumnCount() { + // 返回列名数组的长度 + return columnName.length; + } + + // 重写获取单元格值的方法 + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + // 获取指定行的供应商信息 + SupplierInf prod = suppliers.get(rowIndex); + // 根据列索引返回相应的供应商信息属性 + if(columnIndex==0) { + return prod.getId(); + }else if(columnIndex==1) { + return prod.getName(); + }else if(columnIndex==2) { + return prod.getAddress(); + }else if(columnIndex==3) { + return prod.getContact(); + }else if(columnIndex==4){ + return prod.getEmail(); + } + else { + return null; + } + } + + // 重写获取列名的方法 + @Override + public String getColumnName(int column) { + // 返回指定列索引的列名 + return columnName[column]; + } + +/* + public int getId() { + return id; + } + public int getValueAt(int rowIndex){ + SupplierInf supplierInf = suppliers.get(rowIndex); + id=suppliers.get(rowIndex).getId(); + //System.out.println("rowIndex"+rowIndex); + //System.out.println("columnIndex"+columnIndex); + return supplierInf.getId(); + } + + */ + + + +} diff --git a/branch_zyx/SupplierView.java b/branch_zyx/SupplierView.java new file mode 100644 index 0000000..bf0d059 --- /dev/null +++ b/branch_zyx/SupplierView.java @@ -0,0 +1,179 @@ +package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 + +import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 +import java.awt.Color; // 导入Color类,用于定义颜色 +import java.awt.FlowLayout; // 导入FlowLayout布局管理器类,用于流式布局 +import java.awt.event.ActionEvent; // 导入ActionEvent类,用于处理动作事件 +import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现事件监听 + +import javax.swing.ImageIcon; // 导入ImageIcon类,用于处理图片 +import javax.swing.JButton; // 导入JButton类,用于创建按钮 +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 +import javax.swing.JLabel; // 导入JLabel类,用于创建标签 +import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建带滚动条的容器 +import javax.swing.JTable; // 导入JTable类,用于创建表格 +import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 + +import com.lingnan.supermarket.dao.SupplierInfService; // 导入供应商信息服务的接口 +import com.lingnan.supermarket.dao.impl.SupplierInfImpl; // 导入供应商信息服务的实现类 +import com.lingnan.supermarket.dialog.SupplierInfDialog; // 导入供应商信息对话框类 +import com.lingnan.supermarket.dto.SupplierInf; // 导入供应商信息数据传输对象 +import com.lingnan.supermarket.table.SupplierTableModel; // 导入供应商信息表格模型类 +import com.lingnan.supermarket.utils.FontUtil; // 导入字体工具类 + +public class SupplierView extends JPanel implements ActionListener{ // 定义一个公共类SupplierView,继承JPanel并实现ActionListener接口 + + //上面 + private JPanel toolBarPanel; // 工具栏面板的私有成员变量 + + private JPanel searchPanel; // 搜索面板的私有成员变量 + private JLabel nameLabel,locationLabel; // 标签的私有成员变量,用于显示文本 + private JTextField nameSearchTF; // 文本框的私有成员变量,用于输入搜索内容 + private JButton searchBtn; // 搜索按钮的私有成员变量 + + private JPanel opePanel; // 操作面板的私有成员变量 + private JButton addBtn,updateBtn,deleteBtn; // 按钮的私有成员变量,用于添加、更新、删除操作 + + //中间 + private JScrollPane tableScrollPane; // 带滚动条的表格面板的私有成员变量 + private JTable supplierTable; // 表格的私有成员变量,用于显示供应商信息 + + //下面 + private JPanel bottomPanel; // 底部面板的私有成员变量 + private JLabel countInfoLabel; // 标签的私有成员变量,用于显示记录总数信息 + + private SupplierTableModel supplierTableModel; // 供应商信息表格模型的私有成员变量 + private JFrame jFrame; // 窗口的私有成员变量 + private SupplierInfService supplierInfService = new SupplierInfImpl(); // 供应商信息服务的实例化对象 + + public SupplierView(JFrame jFrame) { // SupplierView类的构造方法,接收一个JFrame参数 + this.setLayout(new BorderLayout()); // 设置面板的布局为BorderLayout + initView(); // 调用初始化视图的方法 + this.jFrame = jFrame; // 将传入的JFrame窗口对象赋值给类的成员变量 + } + + private void initView() { // 初始化视图的私有方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel=new JLabel("当前位置>供应商"); // 创建标签并设置文本为当前位置信息 + locationLabel.setFont(new FontUtil().userFont); // 设置标签的字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签的前景色(文字颜色) + nameLabel = new JLabel("公司名称"); // 创建标签并设置文本为公司名称 + nameSearchTF = new JTextField(10); // 创建文本框并设置大小为10个字符宽度 + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮 + + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 + + addBtn.addActionListener(this); // 为添加按钮添加事件监听器 + updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 + deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 + searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 + + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(updateBtn); // 将更新按钮添加到操作面板 + opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 + + searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 + searchPanel.add(nameLabel); // 将公司名称标签添加到搜索面板 + searchPanel.add(nameSearchTF); // 将公司名称文本框添加到搜索面板 + searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 + + + toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 + toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 + + + //中间表格 + supplierTableModel = new SupplierTableModel(); // 创建供应商表格模型对象 + supplierTableModel.all(); // 调用表格模型的方法以加载所有数据 + supplierTable = new JTable(supplierTableModel); // 创建表格并设置模型 + supplierTable.setFont(FontUtil.tableFont); // 设置表格字体 + supplierTable.setRowHeight(50); // 设置表格行高 + + tableScrollPane = new JScrollPane(supplierTable); // 创建带滚动条的容器并添加表格 + + //下面 + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建标签并设置显示记录总数的文本 + bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 + + this.add(toolBarPanel,"North"); // 将工具栏面板添加到主面板的北边 + this.add(tableScrollPane,"Center"); // 将带滚动条的表格容器添加到主面板的中间 + this.add(bottomPanel,"South"); // 将底部面板添加到主面板的南边 + + setVisible(true); // 设置主面板可见(通常不需要,因为主面板会在添加到窗口时自动设置为可见) + } + + @Override + public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 + Object source = e.getSource(); // 获取事件源 + if(addBtn==source) { // 如果事件源是添加按钮 + SupplierInfDialog supplierInfDialog = new SupplierInfDialog(jFrame, null); // 创建供应商信息对话框 + supplierInfDialog.setVisible(true); // 设置对话框可见 + refreshSupplier(); // 刷新供应商信息 + }else if(updateBtn==source) { // 如果事件源是更新按钮 + refreshSupplier(); // 刷新供应商信息 + }else if(deleteBtn==source) { // 如果事件源是删除按钮 + //获取选中记录 + int rowIndex = supplierTable.getSelectedRow(); // 获取表格中选中的行索引 + if(rowIndex==-1) { // 如果没有行被选中 + JOptionPane.showMessageDialog(this,"请选中一条"); // 显示提示信息 + return; // 结束方法执行 + } + int id = (Integer)supplierTable.getValueAt(rowIndex,0); // 获取选中行的ID + int select=JOptionPane.showConfirmDialog(this,"是否删除id="+id,"提示",JOptionPane.YES_NO_OPTION); // 显示确认删除的对话框并获取用户的选择 + if(select==JOptionPane.YES_OPTION){ // 如果用户在确认对话框中选择“是” + if(supplierInfService.deleteSupplierInf(id)==1) { // 尝试删除供应商信息,如果成功返回1 + JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示删除成功的消息 + refreshSupplier(); // 刷新供应商信息 + }else { + JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); // 显示删除失败的消息 + } + } + }else if(searchBtn==source){ // 如果事件源是搜索按钮 + System.out.println("搜索"); // 打印搜索操作信息到控制台 + refreshFindRname(); // 调用方法刷新搜索结果 + } + } + // 根据名称刷新供应商信息的方法 + public void refreshFindRname() { + String name = nameSearchTF.getText(); // 获取搜索文本框中的文本 + SupplierInf supplierInf = new SupplierInf(); // 创建供应商信息对象 + supplierInf.setName(name); // 设置供应商名称为搜索文本 + + + supplierTableModel = new SupplierTableModel(); // 创建新的供应商表格模型 + supplierTableModel.Byname(supplierInf); // 调用表格模型的方法按名称查询供应商信息 + + supplierTable.setModel(supplierTableModel); // 更新表格模型以显示查询结果 + + refreshCount(); // 刷新记录总数 + } + // 刷新供应商信息的方法 + public void refreshSupplier() { + supplierTableModel = new SupplierTableModel(); // 创建新的供应商表格模型 + supplierTableModel.all(); // 加载所有供应商信息 + supplierTable.setModel(supplierTableModel); // 更新表格模型以显示所有供应商信息 + + refreshCount(); // 刷新记录总数 + } + // 刷新记录总数的方法 + public void refreshCount(){ + bottomPanel.removeAll(); // 清除底部面板上的所有组件 + countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建新的标签显示记录总数 + bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 + } + +} From 73af0fcd38670b691be0ef19cfffb47924f23a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E9=83=91=E4=BA=A6=E6=AD=86=E2=80=9D?= <“kttsj2257wy@163.com”> Date: Thu, 12 Dec 2024 10:48:36 +0800 Subject: [PATCH 2/4] branch --- branch_zyx/My_branch/ChangeStatusDialog.java | 189 ----- branch_zyx/My_branch/ChangeSumDialog.java | 186 ----- branch_zyx/My_branch/InDialog.java | 230 ------ branch_zyx/My_branch/InOrder.java | 62 -- branch_zyx/My_branch/InOrderTM.java | 124 ---- branch_zyx/My_branch/InRecord.java | 35 - branch_zyx/My_branch/InRecordTM.java | 93 --- branch_zyx/My_branch/InTableModel.java | 106 --- branch_zyx/My_branch/InView.java | 716 ------------------- branch_zyx/My_branch/MainView.java | 702 ------------------ branch_zyx/My_branch/ProdCatalog.java | 25 - branch_zyx/My_branch/ProdCatalogTM.java | 69 -- branch_zyx/My_branch/ProdCatalogView.java | 200 ------ branch_zyx/My_branch/ProductionDialog.java | 320 --------- branch_zyx/My_branch/StorageRecord.java | 46 -- branch_zyx/My_branch/StorageRecordTM.java | 75 -- branch_zyx/My_branch/StorageTableModel.java | 74 -- branch_zyx/My_branch/StorageView.java | 228 ------ branch_zyx/My_branch/SuperView.java | 37 - branch_zyx/My_branch/SupplierInf.java | 53 -- branch_zyx/My_branch/SupplierInfDialog.java | 151 ---- branch_zyx/My_branch/SupplierTableModel.java | 105 --- branch_zyx/My_branch/SupplierView.java | 179 ----- 23 files changed, 4005 deletions(-) delete mode 100644 branch_zyx/My_branch/ChangeStatusDialog.java delete mode 100644 branch_zyx/My_branch/ChangeSumDialog.java delete mode 100644 branch_zyx/My_branch/InDialog.java delete mode 100644 branch_zyx/My_branch/InOrder.java delete mode 100644 branch_zyx/My_branch/InOrderTM.java delete mode 100644 branch_zyx/My_branch/InRecord.java delete mode 100644 branch_zyx/My_branch/InRecordTM.java delete mode 100644 branch_zyx/My_branch/InTableModel.java delete mode 100644 branch_zyx/My_branch/InView.java delete mode 100644 branch_zyx/My_branch/MainView.java delete mode 100644 branch_zyx/My_branch/ProdCatalog.java delete mode 100644 branch_zyx/My_branch/ProdCatalogTM.java delete mode 100644 branch_zyx/My_branch/ProdCatalogView.java delete mode 100644 branch_zyx/My_branch/ProductionDialog.java delete mode 100644 branch_zyx/My_branch/StorageRecord.java delete mode 100644 branch_zyx/My_branch/StorageRecordTM.java delete mode 100644 branch_zyx/My_branch/StorageTableModel.java delete mode 100644 branch_zyx/My_branch/StorageView.java delete mode 100644 branch_zyx/My_branch/SuperView.java delete mode 100644 branch_zyx/My_branch/SupplierInf.java delete mode 100644 branch_zyx/My_branch/SupplierInfDialog.java delete mode 100644 branch_zyx/My_branch/SupplierTableModel.java delete mode 100644 branch_zyx/My_branch/SupplierView.java diff --git a/branch_zyx/My_branch/ChangeStatusDialog.java b/branch_zyx/My_branch/ChangeStatusDialog.java deleted file mode 100644 index 7e6235f..0000000 --- a/branch_zyx/My_branch/ChangeStatusDialog.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.lingnan.supermarket.dialog; // 声明当前类所在的包 - -import java.awt.Container; // 导入AWT容器类 -import java.awt.FlowLayout; // 导入流式布局类 -import java.awt.event.ActionEvent; // 导入动作事件类 -import java.awt.event.ActionListener; // 导入动作监听器接口 -import java.awt.event.ItemEvent; // 导入项目事件类 -import java.awt.event.ItemListener; // 导入项目监听器接口 -import java.util.Vector; // 导入向量类,用于存储对象集合 - -import javax.swing.JButton; // 导入Swing按钮组件 -import javax.swing.JComboBox; // 导入Swing下拉框组件 -import javax.swing.JDialog; // 导入Swing对话框组件 -import javax.swing.JFrame; // 导入Swing顶层窗口组件 -import javax.swing.JLabel; // 导入Swing标签组件 -import javax.swing.JOptionPane; // 导入Swing对话框工具类 -import javax.swing.JPanel; // 导入Swing面板组件 -import javax.swing.JTable; // 导入Swing表格组件 -import javax.swing.JTextField; // 导入Swing文本框组件 - -import com.lingnan.supermarket.*; // 导入超市项目相关包 -import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 -import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区实现类 -import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 -import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; // 导入入库订单服务实现类 -import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; // 导入入库记录服务实现类 -import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 -import com.lingnan.supermarket.dao.impl.storageRecordImpl; // 导入库存记录服务实现类 -import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 -import com.lingnan.supermarket.dto.InOrder; // 导入入库订单数据传输对象 -import com.lingnan.supermarket.dto.InRecord; // 导入入库记录数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 -import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 -import com.lingnan.supermarket.utils.TimeAndOrder; // 导入时间和订单工具类 -import com.lingnan.supermarket.view.HomeView; // 导入主页视图类 -import com.lingnan.supermarket.view.OutView; // 导入出库视图类 -import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener - - - -public class ChangeStatusDialog extends JDialog implements ActionListener{ // 定义一个对话框类,实现动作监听器接口 - - private JPanel statusPanel,opePanel,titlePanel,comboPanel; // 声明面板变量,用于不同的功能区域 - - private JLabel titleLabel,statusLabel; // 声明标签变量,用于显示标题和状态信息 - - private JButton UpdateBtn,cancelBtn; // 声明按钮变量,用于更新和取消操作 - - private String iNumber; // 订单编号 - private String status; // 订单状态 - - private Vector InRecords; // 存储入库记录的向量 - - private JComboBox combo; // 下拉框组件,用于选择订单状态 - - private String[] log = { "待入库", "已入库", "取消订单" }; // 订单状态数组 - - private inRecordServiceImpl inRecordImpl; // 入库记录服务实现类 - - private int catalog; // 分类标识 - - private productionImpl productionImpl; // 产品服务实现类 - - // 构造方法,接收父窗口、订单编号和订单状态作为参数 - public ChangeStatusDialog(JFrame parent,String iNumber,String status) { - super(parent,"修改进货订单状态"); // 调用父类构造方法,设置对话框标题 - - setSize(400,200); // 设置对话框大小 - setLocationRelativeTo(null); // 设置对话框相对于父窗口居中 - setModal(true); // 设置对话框为模态 - setResizable(false); // 设置对话框大小不可变 - this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 - - this.iNumber=iNumber; // 将传入的订单编号赋值给成员变量 - this.status=status; // 将传入的订单状态赋值给成员变量 - initView(); // 调用方法初始化视图 - } - - - - - - - - private void initView() { // 初始化视图的私有方法 - - titlePanel = new JPanel(); // 创建标题面板 - titleLabel = new JLabel("修改订单为"+iNumber+"的状态"); // 创建标题标签,显示订单编号 - titlePanel.add(titleLabel); // 将标题标签添加到标题面板 - - statusPanel = new JPanel(); // 创建状态面板 - statusLabel = new JLabel("当前状态:"+status); // 创建状态标签,显示当前订单状态 - statusPanel.add(statusLabel); // 将状态标签添加到状态面板 - - comboPanel = new JPanel(); // 创建下拉框面板 - combo = new JComboBox(log); // 创建下拉框,使用订单状态数组初始化 - combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 - comboPanel.add(combo); // 将下拉框添加到下拉框面板 - - opePanel = new JPanel(); // 创建操作按钮面板 - UpdateBtn = new JButton("更改"); // 创建更改按钮 - cancelBtn = new JButton("取消"); // 创建取消按钮 - UpdateBtn.addActionListener(this); // 为更改按钮添加动作监听器 - cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 - opePanel.add(UpdateBtn); // 将更改按钮添加到操作按钮面板 - opePanel.add(cancelBtn); // 将取消按钮添加到操作按钮面板 - - Container container = getContentPane(); // 获取内容面板 - container.add(titlePanel,"North"); // 将标题面板添加到内容面板的北部 - container.add(statusPanel,"Center"); // 将状态面板添加到内容面板的中心 - container.add(comboPanel,"South"); // 将下拉框面板添加到内容面板的南部 - container.add(opePanel); // 将操作按钮面板添加到内容面板 - - } - - public class MyItemListener implements ItemListener { // 定义一个内部类,实现项目监听器接口 - - @Override - public void itemStateChanged(ItemEvent e) { // 实现项目状态改变时的处理方法 - JComboBox cb = (JComboBox) e.getSource(); // 获取事件源,即下拉框 - String catalog1 = (String) cb.getSelectedItem(); // 获取下拉框选中的项 - if (catalog1.equals("已入库")) { // 如果选中项为"已入库" - catalog = 1; // 将分类标识设置为1 - } - else if (catalog1.equals("待入库")) { // 如果选中项为"待入库" - catalog = 2; // 将分类标识设置为2 - } else if (catalog1.equals("取消订单")) { // 如果选中项为"取消订单" - catalog = 3; // 将分类标识设置为3 - - } - - } - - } - - - - public Vector getVector(){ // 定义一个公共方法,返回一个InRecord类型的Vector - return InRecords; // 返回成员变量InRecords,它是一个包含InRecord对象的Vector - } - - - - - - - @Override - public void actionPerformed(ActionEvent e) { // 重写actionPerformed方法以响应按钮点击事件 - Object source = e.getSource(); // 获取事件源 - if(source==UpdateBtn){ // 如果事件源是更新按钮 - System.out.println("此时此刻的catalog为"+catalog); // 打印当前catalog的值 - //这里修改进货订单表的状态*/ - inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 创建进货订单服务实现类的实例 - inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建进货记录服务实现类的实例 - storageRecordImpl storageRecordImpl = new storageRecordImpl(); // 创建库存记录服务实现类的实例 - productionImpl = new productionImpl(); // 创建产品服务实现类的实例 - Production p ; // 声明产品对象 - //获得订单信息 - - //修改状态 - inOrderImpl.updateInOrderStatus(iNumber,catalog); // 更新进货订单的状态 - //确认进货,修改状态并对库存和库存日志修改 - if(catalog==1) { // 如果catalog等于1 - //获得订单详细信息 - this.InRecords = inRecordImpl.findByIdinRecord(iNumber); // 根据订单编号查找进货记录 - //遍历添加库存 - String s[]=TimeAndOrder.TimeAndOrder("");/*生成时间*/ - for(InRecord i:InRecords) { // 遍历进货记录 - //查找到原来的价格 - //更新库存表 - productionImpl.updateProductionSum(i.getId(),i.getSum()); // 更新产品库存数量 - //增加库存日志表 - storageRecordImpl.insertStorageRecord(iNumber,s[1], i.getId(),"+", i.getSum()); // 插入库存记录 - } - - JOptionPane.showMessageDialog(this,"订单已确认,库存更新成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示消息对话框 - } - /*刷新首页*/ - this.dispose(); // 关闭当前对话框 - - } - else if(source == cancelBtn) { // 如果事件源是取消按钮 - - this.dispose(); // 关闭当前对话框 - - } - } -} diff --git a/branch_zyx/My_branch/ChangeSumDialog.java b/branch_zyx/My_branch/ChangeSumDialog.java deleted file mode 100644 index 6476689..0000000 --- a/branch_zyx/My_branch/ChangeSumDialog.java +++ /dev/null @@ -1,186 +0,0 @@ -package com.lingnan.supermarket.dialog; // 声明当前类所在的包 - -import java.awt.Container; // 导入AWT容器类 -import java.awt.FlowLayout; // 导入流式布局类 -import java.awt.event.ActionEvent; // 导入动作事件类 -import java.awt.event.ActionListener; // 导入动作监听器接口 -import java.util.Vector; // 导入向量类,用于存储对象集合 - -import javax.swing.JButton; // 导入Swing按钮组件 -import javax.swing.JDialog; // 导入Swing对话框组件 -import javax.swing.JFrame; // 导入Swing顶层窗口组件 -import javax.swing.JLabel; // 导入Swing标签组件 -import javax.swing.JOptionPane; // 导入Swing对话框工具类 -import javax.swing.JPanel; // 导入Swing面板组件 -import javax.swing.JTable; // 导入Swing表格组件 -import javax.swing.JTextField; // 导入Swing文本框组件 - -import com.lingnan.supermarket.*; // 导入超市项目相关的包 -import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 -import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区服务实现类 -import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 -import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 -import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 -import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 -import com.lingnan.supermarket.view.OutView; // 导入出库视图类 - - - -public class ChangeSumDialog extends JDialog implements ActionListener{ // 定义一个对话框类ChangeSumDialog,继承自JDialog并实现ActionListener接口 - - private JPanel prodIdPanel,sumPanel,phonePanel,opePanel,titlePanel; // 声明多个面板变量,用于布局不同的组件 - - private JLabel prodIdLabel,sumLabel,titleLabel; // 声明标签变量,用于显示文本 - private JTextField prodIdTF,sumTF; // 声明文本框变量,用于输入数据 - - private JButton UpdateBtn,cancelBtn; // 声明按钮变量,用于执行更新和取消操作 - - private OutTableModel outTableModel = new OutTableModel(); // 创建出库表格模型实例 - - private Buffer buffer; // 声明缓冲区对象变量 - - private String prodId,mark; /*mark用来标记是进货还是出货系统*/ // 声明字符串变量,用于存储产品ID和标记 - - private Vector v; // 声明向量变量,用于存储产品集合 - - public ChangeSumDialog(JFrame parent,String prodId,String mark,Vector v) { // 构造方法,接收父窗口、产品ID、标记和产品集合作为参数 - super(parent,"更改商品数量"); // 调用父类构造方法,设置对话框标题 - - setSize(350,200); // 设置对话框大小 - setLocationRelativeTo(null); // 设置对话框相对于父窗口居中显示 - setModal(true); // 设置对话框为模态 - setResizable(false); // 设置对话框不可调整大小 - this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 - - this.prodId=prodId; // 将参数prodId赋值给成员变量prodId - this.mark=mark; // 将参数mark赋值给成员变量mark - this.v = v; // 将参数v赋值给成员变量v - initView(); // 初始化视图 - - } - - public ChangeSumDialog(JFrame parent,String prodId,String mark) { // 另一个构造方法,接收父窗口、产品ID和标记作为参数 - super(parent,"更改商品数量"); // 调用父类构造方法,设置对话框标题为"更改商品数量" - - setSize(350,200); // 设置对话框大小为350x200像素 - setLocationRelativeTo(null); // 设置对话框位置相对于父窗口居中显示 - setModal(true); // 设置对话框为模态,即用户必须处理完此对话框才能操作其他窗口 - setResizable(false); // 设置对话框大小不可变 - this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 - - this.prodId=prodId; // 将传入的产品ID赋值给成员变量prodId - this.mark=mark; // 将传入的标记赋值给成员变量mark - initView(); // 调用方法初始化视图 - - } - - - - - - private void initView() { - - titlePanel = new JPanel(); - titleLabel = new JLabel("修改商品id为"+prodId+"的数量"); - titlePanel.add(titleLabel); - - - - sumPanel = new JPanel(); - sumLabel = new JLabel("数量"); - sumTF = new JTextField(15); - sumPanel.add(sumLabel); - sumPanel.add(sumTF); - - - opePanel = new JPanel(); - UpdateBtn = new JButton("更改"); - cancelBtn = new JButton("取消"); - UpdateBtn.addActionListener(this); - cancelBtn.addActionListener(this); - opePanel.add(UpdateBtn); - opePanel.add(cancelBtn); - - Container container = getContentPane(); - container.add(titlePanel); - container.add(sumPanel); - container.add(opePanel); - } - - public Vector getVector(){ - return v; - } - - @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if(source==UpdateBtn){ - - //TODO 参数校验 - /*/返回这个记录的信息*/ - - int sum = Integer.parseInt(sumTF.getText());/*获得数量*/ - System.out.println("所要修改的数量sum="+sum); - - if(sumTF.getText().equals("")) { - JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); - return; - } - - if(sum<0) {/*判断输入大于0*/ - JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); - return; - } - - - - - BufferImpl bufferImpl = new BufferImpl(); - - productionImpl productionImpl = new productionImpl(); - Production production = new Production(); - production = productionImpl.findByIdProduction(prodId); - - Buffer buffer = new Buffer(); - boolean flag = false; - - if(mark=="In") {/*进货界面*/ - for(Production p:v) { - if(p.getId().equals(prodId)) - p.setSum(sum); - } - - } - - else if(mark=="Out") {/*出货界面*/ - buffer = bufferImpl.findInBufferbyId(prodId); - if(buffer!=null) {/*记录有这条数据*/ - if(sum>production.getSum())/*修改数量超过库存*/ - JOptionPane.showMessageDialog(this,"库存数量为:"+production.getSum()+",修改数量请勿超过库存","提示",JOptionPane.ERROR_MESSAGE); - else - flag = bufferImpl.UpdateInBufferById(prodId, sum); - - } - - } - - - if(flag = true) {/*如果修改成功*/ - - JOptionPane.showMessageDialog(this,"修改成功","提示",JOptionPane.INFORMATION_MESSAGE); - dispose(); - - }else { - JOptionPane.showMessageDialog(this,"修改失败","提示",JOptionPane.ERROR_MESSAGE); - dispose(); - } - } - - else if(source == cancelBtn) { - - this.dispose(); - } - } -} diff --git a/branch_zyx/My_branch/InDialog.java b/branch_zyx/My_branch/InDialog.java deleted file mode 100644 index 04f10a5..0000000 --- a/branch_zyx/My_branch/InDialog.java +++ /dev/null @@ -1,230 +0,0 @@ -package com.lingnan.supermarket.dialog; // 声明当前类所在的包 - -import java.awt.Container; // 导入AWT容器类 -import java.awt.FlowLayout; // 导入流式布局类 -import java.awt.event.ActionEvent; // 导入动作事件类 -import java.awt.event.ActionListener; // 导入动作监听器接口 -import java.awt.event.ItemEvent; // 导入项目事件类 -import java.awt.event.ItemListener; // 导入项目监听器接口 -import java.util.Vector; // 导入向量类,用于存储对象集合 - -import javax.swing.JButton; // 导入按钮组件类 -import javax.swing.JComboBox; // 导入下拉框组件类 -import javax.swing.JDialog; // 导入对话框组件类 -import javax.swing.JFrame; // 导入顶层窗口类 -import javax.swing.JLabel; // 导入标签组件类 -import javax.swing.JOptionPane; // 导入对话框工具类 -import javax.swing.JPanel; // 导入面板组件类 -import javax.swing.JTable; // 导入表格组件类 -import javax.swing.JTextField; // 导入文本框组件类 - -import com.lingnan.supermarket.*; // 导入超市项目相关的所有类 -import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 -import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区服务实现类 -import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 -import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 -import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 -import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 -import com.lingnan.supermarket.view.InView; // 导入进货视图类 -import com.lingnan.supermarket.view.OutView; // 导出出库视图类 -import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener - - - -public class InDialog extends JDialog implements ActionListener{ // 定义一个对话框类InDialog,继承自JDialog并实现ActionListener接口 - - private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; // 声明面板变量,用于不同功能的面板 - - private JLabel prodIdLabel,sumLabel; // 声明标签变量,用于显示文本 - private JTextField prodIdTF,sumTF; // 声明文本框变量,用于输入数据 - - private JButton addBtn,cancelBtn; // 声明按钮变量,用于添加和取消操作 - - private OutTableModel outTableModel = new OutTableModel(); // 创建出库表格模型实例 - - private Production production; // 声明产品数据传输对象 - private productionImpl productionImpl; // 声明产品服务实现类 - - private Vector v; // 声明产品集合变量 - - private User user; // 声明用户数据传输对象 - - private JFrame JFramparent; // 声明顶层窗口变量,用于存储父窗口 - - private JComboBox combo; // 声明下拉框组件变量 - private String allProdId[] = null; // 声明字符串数组,用于存储所有产品ID - private Vector vAll; // 声明产品集合变量,用于存储所有产品 - private static String catalog; // 声明静态字符串变量,用于存储分类信息 - - public InDialog(JFrame parent,Vector v,User user) { // 构造方法,接收父窗口、产品集合和用户对象 - super(parent,"添加商品"); // 调用父类构造方法,设置对话框标题 - - setSize(250,200); // 设置对话框大小 - setLocationRelativeTo(null); // 设置对话框居中显示 - setModal(true); // 设置对话框为模态 - setResizable(false); // 设置对话框不可调整大小 - this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 - JFramparent=parent; // 初始化父窗口变量 - this.v=v; // 初始化产品集合变量 - this.user = user; // 初始化用户对象 - initView(); // 初始化视图 - - - - } - - - - - - private void initView() { - prodIdPanel = new JPanel(); // 创建一个面板用于显示产品编号 - prodIdLabel = new JLabel("编号"); // 创建一个标签显示"编号" - - productionImpl= new productionImpl(); // 实例化产品服务实现类 - vAll=productionImpl.findAllproduction(); // 调用方法获取所有产品信息 - allProdId = new String[vAll.size()]; // 初始化字符串数组,用于存储所有产品ID - for(int i=0;i(allProdId); // 创建下拉框,并使用产品ID数组初始化 - combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 - - - prodIdPanel.add(prodIdLabel); // 将标签添加到编号面板 - prodIdPanel.add(combo); // 将下拉框添加到编号面板 - - - - sumPanel = new JPanel(); // 创建一个面板用于显示数量 - sumLabel = new JLabel("数量"); // 创建一个标签显示"数量" - sumTF = new JTextField(10); // 创建一个文本框用于输入数量,宽度为10 - sumPanel.add(sumLabel); // 将标签添加到数量面板 - sumPanel.add(sumTF); // 将文本框添加到数量面板 - - - opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 - addBtn = new JButton("添加"); // 创建一个按钮显示"添加" - cancelBtn = new JButton("取消"); // 创建一个按钮显示"取消" - addBtn.addActionListener(this); // 为添加按钮添加动作监听器 - cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 - opePanel.add(addBtn); // 将添加按钮添加到操作面板 - opePanel.add(cancelBtn); // 将取消按钮添加到操作面板 - - - Container container = getContentPane(); // 获取内容面板 - container.add(prodIdPanel); // 将编号面板添加到内容面板 - container.add(sumPanel); // 将数量面板添加到内容面板 - container.add(opePanel); // 将操作面板添加到内容面板 - } - - /*将数组传到inview的刷新方法里面再刷新*/ - public Vector getVector(){ // 提供一个方法获取产品集合 - return v; - } - - //下拉框监听 - static class MyItemListener implements ItemListener{ // 定义一个内部类实现ItemListener接口 - - @Override - public void itemStateChanged(ItemEvent e) { // 实现项目状态改变时的处理方法 - JComboBox cb=(JComboBox)e.getSource(); // 获取事件源下拉框 - String select=(String) cb.getSelectedItem(); // 获取选中项的值 - catalog=select; // 更新分类信息为选中项的值 - - } - - } - - - - - - - - - @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); // 获取事件源 - if(source==addBtn){ // 如果事件源是添加按钮 - //1.判断是否存在这个商品 - //2.如果存在就获取这条商品记录为一个对象 - //3.判断购物缓冲区是否有这个记录 - //3.1如果有update数量和price - //3.2如果没有就insert这条记录,把sum更新 - //保存到数据库 - //关闭对话框 - //刷新table - - - String prodId =catalog; // 获取选中的商品ID - System.out.println("proId="+prodId); // 打印商品ID - System.out.println("vatalog="+catalog); // 打印分类信息 - - - if(sumTF.getText().equals("")) { // 判断数量文本框是否为空 - JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); - return; - } - int sum = Integer.parseInt(sumTF.getText()) ; // 将文本框中的数量转换为整数 - - if(sum<0) {/*判断输入大于0*/ - JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); - return; - } - - //TODO 参数校验 - /*/判断是已添加,未添加还是不存在*/ - productionImpl productionImpl = new productionImpl(); // 实例化产品服务实现类 - production = new Production(); // 创建产品对象 - production = productionImpl.findByIdProduction(prodId); // 根据ID查找产品 - - - if(production!=null) {/*商品库有这个商品存在*/ - int mark = 0; // 标记变量,用于判断商品是否已存在于购物缓冲区 - for(Production p:v) { // 遍历购物缓冲区 - - - if(p.getId().equals(prodId)){/*如果数组中存在相同商品就更新数量和价格*/ - sum=p.getSum()+sum;/*数量*/ - p.setSum(sum); - p.setPrice(sum*p.getInPrice());/*进货价格*/ - mark = 1; // 更新标记 - break; - } - - } - if(mark==0) {/*插入新的*/ - System.out.println("缓存区不存在,插入新的数据"); - production.setSum(sum);/*更新价格和数量后插入新的*/ - production.setPrice(sum*production.getInPrice()); - v.add(production); // 将新产品添加到购物缓冲区 - - } - - System.out.println("插入后v的大小"+v.size()); // 打印购物缓冲区大小 - this.dispose(); // 关闭对话框 - JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE); // 显示添加成功消息 - - } - - - - else {/*商品库没有这个商品*/ - JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE); // 显示商品不存在消息 - } - } - else if(source == cancelBtn) { // 如果事件源是取消按钮 - - this.dispose(); // 关闭对话框 - - } - } - - - -} diff --git a/branch_zyx/My_branch/InOrder.java b/branch_zyx/My_branch/InOrder.java deleted file mode 100644 index 4e999c1..0000000 --- a/branch_zyx/My_branch/InOrder.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.lingnan.supermarket.dto; // 声明当前类所在的包 - -import java.util.Date; // 导入Date类,尽管在此类中没有直接使用 - -// 定义进货订单类InOrder -public class InOrder { - private String iNumber; // 进货订单编号 - private Float allInPrice; // 总进货价格 - private String inDate; // 进货日期 - private String principal; // 负责人 - private int status; // 订单状态 - private int delmark; // 删除标记 - - // getiNumber方法,用于获取进货订单编号 - public String getiNumber() { - return iNumber; // 返回进货订单编号 - } - // setiNumber方法,用于设置进货订单编号 - public void setiNumber(String iNumber) { - this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber - } - // getAllInPrice方法,用于获取总进货价格 - public Float getAllInPrice() { - return allInPrice; // 返回总进货价格 - } - // setAllInPrice方法,用于设置总进货价格 - public void setAllInPrice(Float allInPrice) { - this.allInPrice = allInPrice; // 将参数allInPrice赋值给成员变量allInPrice - } - // getInDate方法,用于获取进货日期 - public String getInDate() { - return inDate; // 返回进货日期 - } - // setInDate方法,用于设置进货日期 - public void setInDate(String inDate) { - this.inDate = inDate; // 将参数inDate赋值给成员变量inDate - } - // getPrincipal方法,用于获取负责人 - public String getPrincipal() { - return principal; // 返回负责人 - } - // setPrincipal方法,用于设置负责人 - public void setPrincipal(String principal) { - this.principal = principal; // 将参数principal赋值给成员变量principal - } - // getStatus方法,用于获取订单状态 - public int getStatus() { - return status; // 返回订单状态 - } - // setStatus方法,用于设置订单状态 - public void setStatus(int status) { - this.status = status; // 将参数status赋值给成员变量status - } - // getDelmark方法,用于获取删除标记 - public int getDelmark() { - return delmark; // 返回删除标记 - } - // setDelmark方法,用于设置删除标记 - public void setDelmark(int delmark) { - this.delmark = delmark; // 将参数delmark赋值给成员变量delmark - } -} diff --git a/branch_zyx/My_branch/InOrderTM.java b/branch_zyx/My_branch/InOrderTM.java deleted file mode 100644 index bb9922d..0000000 --- a/branch_zyx/My_branch/InOrderTM.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.lingnan.supermarket.table; // 声明当前类所在的包 - -import java.util.List; // 导入List接口,用于表示列表 -import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 - -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 -import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 - -import com.lingnan.supermarket.dto.Buffer; // 导入Buffer数据传输对象 -import com.lingnan.supermarket.dto.InOrder; // 导入InOrder数据传输对象 -import com.lingnan.supermarket.dto.Buffer; // 重复导入Buffer数据传输对象,可能是错误 -import com.lingnan.supermarket.dto.Production; // 导入Production数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User数据传输对象 -import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 -import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 -import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于进货对话框 - - - -public class InOrderTM extends AbstractTableModel{ // 定义一个类InOrderTM,继承自AbstractTableModel类,用于表格模型 - - private String [] columnName = {"订单号","总价","时间","负责人","状态"}; // 定义列名数组,用于表格的列标题 - - private productionImpl prodDao = new productionImpl(); // 创建productionImpl对象,用于操作产品数据 - - private Vector InOrders; // 声明一个Vector数组,用于存储InOrder对象 - private inOrderServiceImpl inOrderImpl= new inOrderServiceImpl(); // 创建inOrderServiceImpl对象,用于操作订单数据 - private InOrder inOrder ; // 声明InOrder对象,用于单个订单操作 - - String iNumber ; // 声明一个String变量,用于存储订单号 - - - public void allInOrderRecord() { // 定义一个方法,用于获取所有订单记录 - //将添加的商品加入到静态变量Vector数组中 - /*prod = InDialog.getProduction();*/ - InOrders = inOrderImpl.findAllInOrder(); // 调用inOrderImpl的方法,获取所有订单并赋值给InOrders - } - - //查找分类结果 - public void resultOfFind(int catalog) { // 定义一个方法,根据分类查找订单 - if(catalog==0) // 如果分类为0,查找所有订单 - InOrders = inOrderImpl.findAllInOrder(); // 获取所有订单 - else - InOrders = inOrderImpl.FindStatus(catalog); // 否则根据状态查找订单 - } - - //根据订单号查找 - public void resultOfNumber(String Number) { // 定义一个方法,根据订单号查找订单 - InOrders=new Vector(); // 初始化InOrders为新的Vector对象 - inOrder = inOrderImpl.findByIdinOrder(Number); // 根据订单号查找订单 - InOrders.add(inOrder); // 将找到的订单添加到InOrders中 - } - - - - - - - - @Override -// 重写getRowCount方法,返回表格的行数,即订单列表的大小 - public int getRowCount() { - return InOrders.size(); // 返回InOrders Vector的大小 - } - -/* -// 获取所有订单的总价格,此方法已被注释掉 -public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); -} -*/ - - @Override -// 重写getColumnCount方法,返回表格的列数,即列名数组的长度 - public int getColumnCount() { - return columnName.length; // 返回columnName数组的长度 - } - - @Override -// 重写getValueAt方法,根据行索引和列索引获取表格单元格的值 - public Object getValueAt(int rowIndex, int columnIndex) { - inOrder = InOrders.get(rowIndex); // 获取指定行的订单对象 - // 以下代码已被注释,可能是用于调试的打印语句 - /*System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - iNumber=inOrder.getiNumber(); // 获取订单号并赋值给iNumber - if(columnIndex==0) { // 如果是第一列,返回订单号 - return inOrder.getiNumber(); - }else if(columnIndex==1) { // 如果是第二列,返回订单总价 - return inOrder.getAllInPrice(); - }else if(columnIndex==2) { // 如果是第三列,返回订单日期 - return inOrder.getInDate(); - }else if(columnIndex==3) { // 如果是第四列,返回负责人 - return inOrder.getPrincipal(); - }else if(columnIndex==4) { // 如果是第五列,返回订单状态 - String status = null; - if(inOrder.getStatus()==1) - status= "已入库"; - else if(inOrder.getStatus()==2) - status= "待入库"; - else if(inOrder.getStatus()==3) - status= "已取消"; - return status; - }else { // 如果列索引不匹配,返回null - return null; - } - } - - // 返回要修改或删除的记录的订单号 - public String getINumber() { - return iNumber; // 返回类的成员变量iNumber - } - - - @Override -// 重写getColumnName方法,根据列索引获取列名 - public String getColumnName(int column) { - return columnName[column]; // 返回columnName数组中指定索引的值 - } - - - -} diff --git a/branch_zyx/My_branch/InRecord.java b/branch_zyx/My_branch/InRecord.java deleted file mode 100644 index c5e69ed..0000000 --- a/branch_zyx/My_branch/InRecord.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.lingnan.supermarket.dto; // 声明当前类所在的包 - -import com.lingnan.supermarket.dto.base.BsDomain; // 导入基础域类BsDomain - -// 定义进货记录类InRecord,继承自BsDomain -public class InRecord extends BsDomain{ - private String iNumber; // 进货编号 - private int sum; // 进货数量 - private Float inPrice; // 进货单价 - - // getiNumber方法,用于获取进货编号 - public String getiNumber() { - return iNumber; // 返回进货编号 - } - // setiNumber方法,用于设置进货编号 - public void setiNumber(String iNumber) { - this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber - } - // getSum方法,用于获取进货数量 - public int getSum() { - return sum; // 返回进货数量 - } - // setSum方法,用于设置进货数量 - public void setSum(int sum) { - this.sum = sum; // 将参数sum赋值给成员变量sum - } - // getInPrice方法,用于获取进货单价 - public Float getInPrice() { - return inPrice; // 返回进货单价 - } - // setInPrice方法,用于设置进货单价 - public void setInPrice(Float inPrice) { - this.inPrice = inPrice; // 将参数inPrice赋值给成员变量inPrice - } -} diff --git a/branch_zyx/My_branch/InRecordTM.java b/branch_zyx/My_branch/InRecordTM.java deleted file mode 100644 index 820425f..0000000 --- a/branch_zyx/My_branch/InRecordTM.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.lingnan.supermarket.table; // 声明当前类所在的包 - -import java.util.List; // 导入List接口,用于表示列表 -import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 - -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 -import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 - -import com.lingnan.supermarket.dto.Buffer; // 导入Buffer类,可能用于临时数据存储 -import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,表示进货订单 -import com.lingnan.supermarket.dto.InRecord; // 导入InRecord类,表示进货记录 -import com.lingnan.supermarket.dto.Buffer; // 重复导入Buffer类,可能是错误,应该删除 -import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品 -import com.lingnan.supermarket.dto.User; // 导入User类,表示用户 -import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 -import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 -import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于显示进货对话框 - - - -public class InRecordTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于创建进货记录表格数据模型 - - private String [] columnName = {"订单号","id","数量","金额"}; // 定义列名数组,用于表格的列标题 - - private productionImpl prodDao = new productionImpl(); // 创建productionImpl实例,用于操作产品数据 - - private Vector InRecords; // 声明一个Vector类型的变量,用于存储进货记录 - - private inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建inRecordServiceImpl实例,用于操作进货记录数据 - private InRecord inRecord= new InRecord(); // 创建InRecord实例,用于存储单条进货记录 - - - private String iNumber ;/*订单号*/ // 声明一个String变量,用于存储订单号 - - - public InRecordTM(String iNumber) { // 构造函数,接收订单号参数 - this.iNumber=iNumber; // 将传入的订单号赋值给类的成员变量 - } - - public void findInRecordByINumber() { // 根据订单号查找进货记录的方法 - //将添加的商品加入到静态变量Vector数组中 - /*prod = InDialog.getProduction();*/ - InRecords = inRecordImpl.findByIdinRecord(iNumber); // 根据订单号查询进货记录并赋值给InRecords - } - - - @Override - public int getRowCount() { // 重写方法,获取表格的行数 - return InRecords.size(); // 返回InRecords的大小 - } - - /* public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); - } - */ - @Override - public int getColumnCount() { // 重写方法,获取表格的列数 - return columnName.length; // 返回columnName数组的长度 - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { // 重写方法,获取指定单元格的值 - inRecord = InRecords.get(rowIndex); // 获取指定行的进货记录 -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - iNumber=inRecord.getiNumber(); // 获取订单号 - if(columnIndex==0) { - return inRecord.getiNumber(); // 返回订单号 - }else if(columnIndex==1) { - return inRecord.getId(); // 返回id - }else if(columnIndex==2) { - return inRecord.getSum(); // 返回数量 - }else if(columnIndex==3) { - return inRecord.getInPrice(); // 返回金额 - }else { - return null; // 如果列索引不匹配,返回null - } - } - - public String getINumber() { // 返回要修改或删除的记录的订单号 - return iNumber; // 返回类的成员变量iNumber - } - - - @Override - public String getColumnName(int column) { // 重写方法,获取指定列的列名 - return columnName[column]; // 返回columnName数组中指定索引的值 - } - - - -} diff --git a/branch_zyx/My_branch/InTableModel.java b/branch_zyx/My_branch/InTableModel.java deleted file mode 100644 index 41fb2a0..0000000 --- a/branch_zyx/My_branch/InTableModel.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.lingnan.supermarket.table; // 声明当前类所在的包 - -import java.util.List; // 导入List接口,用于表示列表 -import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 - -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 -import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 - -import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,表示进货订单的数据传输对象 - -import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 -import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 -import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 -import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于显示进货对话框 - - - - -public class InTableModel extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于创建进货表格数据模型 - - // 定义列名数组,用于表格的列标题 - private String [] columnName = {"id","名称","数量","单价","价格","保质期","类别","供应商id"}; - - // 创建productionImpl实例,用于操作产品数据 - private productionImpl prodDao = new productionImpl(); - - // 声明一个Vector,用于存储Production对象集合 - private Vector v; - - // 声明一个String变量,用于存储id - String id ; - - - // 构造函数,接收一个Vector类型的参数 - public InTableModel(Vector v) { - System.out.println("调用InTableModel里面的构造函数"); // 打印日志信息 - this.v=v; // 将传入的Vector赋值给类的成员变量v - } - - - - - // 获取表格的行数,即数据集合的大小 - public int getRowCount() { - return v.size(); // 返回Vector v的大小 - } - - // 计算所有商品的总价格 - public Float getAllPrice() { - Float allPrice=(float) 0; // 初始化总价格为0 - for(Production p:v) { // 遍历Vector v中的所有Production对象 - allPrice+=p.getPrice(); // 累加每个商品的价格 - } - return allPrice; // 返回计算出的总价格 - } - - // 重写方法,获取表格的列数,即列名数组的长度 - @Override - public int getColumnCount() { - return columnName.length; // 返回columnName数组的长度 - } - - // 重写方法,获取指定行和列的单元格值 - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - Production p = v.get(rowIndex); // 从Vector v中获取指定行的Production对象 - id=p.getId(); // 将Production对象的id赋值给类的成员变量id - if(columnIndex==0) { // 判断列索引,并返回相应的值 - return p.getId(); - }else if(columnIndex==1) { - return p.getName(); // 返回商品名称 - }else if(columnIndex==2) { - return p.getSum(); // 返回商品数量 - }else if(columnIndex==3) { - return p.getInPrice(); // 返回商品进货单价 - }else if(columnIndex==4) { - return p.getPrice(); // 返回商品价格 - }else if(columnIndex==5) { - return p.getLife(); // 返回商品保质期 - }else if(columnIndex==6) { - return p.getName2()+p.getId2(); // 返回商品类别和类别id的组合 - }else if(columnIndex==7) { - return p.getSupplyId(); // 返回供应商id - }else { - return null; // 如果列索引不匹配,返回null - } - } - - // 获取要修改或删除的记录的id - public String getId() { - return id; // 返回类的成员变量id - } - - // 重写方法,获取指定列的列名 - @Override - public String getColumnName(int column) { - return columnName[column]; // 返回columnName数组中指定索引的值 - } - - - - - - -} diff --git a/branch_zyx/My_branch/InView.java b/branch_zyx/My_branch/InView.java deleted file mode 100644 index fc657b2..0000000 --- a/branch_zyx/My_branch/InView.java +++ /dev/null @@ -1,716 +0,0 @@ -// 定义包名,表明该类属于com.lingnan.supermarket.view包 -package com.lingnan.supermarket.view; - -// 导入必要的Java Swing和AWT类库以及自定义的类库 -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.Vector; - -import javax.mail.MessagingException; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTextField; -import javax.swing.text.html.HTMLDocument.Iterator; - -import com.lingnan.supermarket.componet.BGPanel; -import com.lingnan.supermarket.dao.impl.BufferImpl; -import com.lingnan.supermarket.dao.impl.UserServiceImpl; -import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; -import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; -import com.lingnan.supermarket.dao.impl.prodCatalogImpl; -import com.lingnan.supermarket.dialog.ChangeStatusDialog; -import com.lingnan.supermarket.dialog.ChangeSumDialog; -import com.lingnan.supermarket.dialog.InDialog; -import com.lingnan.supermarket.dialog.UserDialog; -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.InRecord; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.table.*; -import com.lingnan.supermarket.utils.CreateOrder; -import com.lingnan.supermarket.utils.FontUtil; -import com.lingnan.supermarket.utils.SendQQMailUtil; -import com.lingnan.supermarket.utils.TimeAndOrder; -import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; - -// 声明InView类,继承JPanel并实现ActionListener接口 -public class InView extends JPanel implements ActionListener{ - - // 定义类的成员变量,用于构建界面元素 - // 上面的工具栏面板 - private JPanel toolBarPanel; - - // 搜索面板 - private JPanel searchPanel; - private JLabel nameLabel,locationLabel; // 标签用于显示文本 - private JTextField nameSearchTF; // 文本框用于输入搜索内容 - private JButton searchBtn,StockBtn,exitBtn; // 按钮用于执行操作 - - // 操作面板 - private JPanel opePanel; - private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn,detailBtn; // 操作按钮 - - // 中间的表格滚动面板 - private JScrollPane tableScrollPane; - private JTable inTable; // 表格用于显示数据 - - // 下面的面板 - private JPanel bottomPanel,bottomPanelLeft,bottomPanelRight; // 底部面板 - private JLabel countInfoLabel,countInfoLabel2; // 标签用于显示统计信息 - - // 缓冲区相关变量 - private Buffer Buffer; - private BufferImpl BufferImpl; - - // 定义一个静态的Vector集合,用于存储Production对象 - private static Vector v = new Vector(); - - // 定义一个下拉框组件,用于选择不同的状态 - private JComboBox combo; - // 定义一个字符串数组,包含所有可能的状态选项 - private String[] status ={"全部","已入库","待入库","已取消"}; - // 定义一个变量,用于存储当前选中的目录 - private int catalog; - - // 定义一个JFrame对象,用于表示主窗口 - private JFrame jFrame; - // 定义一个User对象,用于存储当前用户信息 - private User user; - - // 定义一个InTableModel对象,用于管理表格数据模型 - private InTableModel inTableModel ; - - // 实例化BufferImpl对象,用于操作缓冲区数据 - private BufferImpl bufferImpl = new BufferImpl(); - - // 定义一个标记变量,用于区分是从进货表还是提醒过来的表 - private int mark;/*标记从提醒那里来1是进货表,0是提醒过来的表*/ - - // 定义一个inOrderServiceImpl对象,用于处理进货订单服务 - private inOrderServiceImpl inOrderImpl; - - // 定义一个浮点数变量,用于存储总价 - private Float allPrice; - // 定义一个整数变量,用于存储选中的行号 - private int row; - // 定义一个字符串变量,用于存储用户名 - private String uname; - - // InView类的构造方法,接收主窗口、用户、货物集合和标记作为参数 - public InView(JFrame jFrame,User user,Vector v,int mark) { - // 设置布局管理器为边界布局 - this.setLayout(new BorderLayout()); - // 初始化成员变量 - this.jFrame = jFrame; - this.user = user; - // 获取进货缓冲区的保存的货物并删除缓冲区 - this.v =bufferImpl.allInBuffer(); - bufferImpl.DelAllInBuffer(); - - // 初始化标记变量 - this.mark=mark; - // 打印标记值,用于调试 - System.out.println("mark="+mark); - // 获取并存储用户名 - uname = user.getUsername(); - // 初始化视图 - initView(); - - - } - - // 初始化视图的方法 - private void initView() { - - - // 创建工具栏面板,并设置布局管理器为边界布局 - toolBarPanel = new JPanel(new BorderLayout()); - - // 创建搜索面板,并设置布局管理器为流式布局,靠右对齐 - searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - // 创建并初始化标签,用于显示“订单号” - nameLabel = new JLabel("订单号"); - // 创建并初始化文本框,用于输入搜索内容,宽度为20 - nameSearchTF = new JTextField(20); - // 创建并初始化搜索按钮,并设置图标 - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); - // 为搜索按钮添加动作监听器 - searchBtn.addActionListener(this); - // 创建并初始化位置标签,并设置字体和前景色 - locationLabel=new JLabel("当前位置>进货系统"); - locationLabel.setFont(new FontUtil().userFont); - locationLabel.setForeground(new Color(18, 150, 219)); - - - - // 创建并初始化下拉框,使用状态数组作为选项 - combo = new JComboBox(status); - // 为下拉框添加项目监听器 - combo.addItemListener(new MyItemListener()); - - - - - // 创建操作面板,并设置布局管理器为流式布局,靠左对齐 - opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); -// 创建并初始化添加按钮,并设置图标 - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); -// 创建并初始化更新按钮,并设置图标 - updateBtn =new JButton(new ImageIcon("static\\icon\\change.png")); -// 创建并初始化删除按钮,并设置图标 - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); -// 创建并初始化历史按钮,并设置图标 - historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); -// 创建并初始化返回按钮,并设置图标 - backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); -// 创建并初始化详情按钮,并设置图标 - detailBtn = new JButton(new ImageIcon("static\\icon\\detail.png")); - -// 为添加按钮添加动作监听器 - addBtn.addActionListener(this); -// 为更新按钮添加动作监听器 - updateBtn.addActionListener(this); -// 为删除按钮添加动作监听器 - deleteBtn.addActionListener(this); -// 为历史按钮添加动作监听器 - historyBtn.addActionListener(this); -// 为返回按钮添加动作监听器 - backBtn.addActionListener(this); -// 为详情按钮添加动作监听器 - detailBtn.addActionListener(this); - -// 设置返回按钮初始不可见,它在记录页面时才会显示 - backBtn.setVisible(false);/*在记录页面显示出来*/ -// 设置详情按钮初始不可见,它在订单详情页时才会显示 - detailBtn.setVisible(false);/*在订单详情页显示出来*/ - -// 将添加按钮添加到操作面板 - opePanel.add(addBtn); -// 将返回按钮添加到操作面板 - opePanel.add(backBtn); -// 将详情按钮添加到操作面板 - opePanel.add(detailBtn); -// 将更新按钮添加到操作面板 - opePanel.add(updateBtn); -// 将删除按钮添加到操作面板 - opePanel.add(deleteBtn); -// 将历史按钮添加到操作面板 - opePanel.add(historyBtn); - -// 将位置标签添加到搜索面板 - searchPanel.add(locationLabel); -// 将订单号标签添加到搜索面板 - searchPanel.add(nameLabel); -// 将搜索文本框添加到搜索面板 - searchPanel.add(nameSearchTF); -// 将搜索按钮添加到搜索面板 - searchPanel.add(searchBtn); -// 将状态下拉框添加到搜索面板 - searchPanel.add(combo); - - - -// 将搜索面板添加到工具栏面板的西边(West) - toolBarPanel.add(searchPanel,"West"); -// 将操作面板添加到工具栏面板的东边(East) - toolBarPanel.add(opePanel,"East"); - - - - //中间表 - // 创建一个表格模型,并传入数据向量v - inTableModel = new InTableModel(v); - -// 创建一个新的表格,使用上面创建的表格模型 - inTable = new JTable(inTableModel); -// 设置表格的字体 - inTable.setFont(FontUtil.tableFont); -// 设置表格的行高 - inTable.setRowHeight(50); -// 创建一个滚动面板,并将表格添加到滚动面板中 - tableScrollPane = new JScrollPane(inTable); - -// 获取表格模型中的所有商品总价 - allPrice = inTableModel.getAllPrice(); -// 获取表格模型中的行数,即商品种类数量 - row = inTableModel.getRowCount(); - -// 创建底部左侧面板,并设置布局为右对齐流式布局 - bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.RIGHT)); -// 创建一个标签用于显示商品种类和总价信息 - countInfoLabel = new JLabel("商品种类:"+row+",总价:"+allPrice); -// 将商品信息标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel,"Left"); - -// 创建底部右侧面板,并设置布局为左对齐流式布局 - bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.LEFT)); -// 创建并初始化结账按钮,并设置图标 - StockBtn =new JButton(new ImageIcon("static\\icon\\stock.png"));/*结账按钮*/ -// 创建并初始化退出按钮,并设置图标 - exitBtn =new JButton(new ImageIcon("static\\icon\\exit.png"));/*退出按钮*/ -// 为结账按钮添加动作监听器 - StockBtn.addActionListener(this); -// 为退出按钮添加动作监听器 - exitBtn.addActionListener(this); -// 将结账按钮添加到底部右侧面板 - bottomPanelRight.add(StockBtn); -// 将退出按钮添加到底部右侧面板 - bottomPanelRight.add(exitBtn); - -// 创建底部面板,并设置布局为边界布局 - bottomPanel = new JPanel(new BorderLayout()); -// 将底部右侧面板添加到底部面板的东边 - bottomPanel.add(bottomPanelRight,"East"); -// 将底部左侧面板添加到底部面板的西边 - bottomPanel.add(bottomPanelLeft,"West"); - - -// 将工具栏面板添加到窗口的北边 - this.add(toolBarPanel,"North"); -// 将表格滚动面板添加到窗口的中间 - this.add(tableScrollPane,"Center");/*将表格放到中间*/ -// 将底部面板添加到窗口的南边 - this.add(bottomPanel,"South"); - -// 如果标记为1,表示是从提醒模块过来的,则刷新缓冲区 - if(mark==1) /*判断是不是从提醒那里过来的*/{ - refreshBuffer(v); - } -// 如果标记为0,则执行进货订单记录操作 - else if(mark==0) { - InOrderRecord(); - } - - - - - - - // 设置窗口为可见状态,这样用户就可以看到并与之交互 - setVisible(true); - - - - - - - - } - - // 提供一个静态方法,用于获取存储Production对象的Vector集合 - public static Vector getVector(){ - return v; - } - - // 定义一个内部类MyItemListener,实现ItemListener接口来监听下拉框项目的状态改变 - public class MyItemListener implements ItemListener { - - // 重写itemStateChanged方法,当下拉框中的项目状态改变时被调用 - @Override - public void itemStateChanged(ItemEvent e) { - // 将事件源转换为JComboBox类型 - JComboBox cb = (JComboBox) e.getSource(); - // 获取当前选中的项目,并转换为字符串 - String catalog1 = (String) cb.getSelectedItem(); - // 根据选中的项目设置相应的分类代码 - if(catalog1.equals("全部")) - catalog=0; - else if(catalog1.equals("已入库")) - catalog=1; - else if(catalog1.equals("待入库")) - catalog=2; - else if(catalog1.equals("已取消")) - catalog=3; - - // 根据分类代码执行查找操作 - resultOfFindStatus(catalog); - - } - - } - - // 设置按钮组件的可见性 - public void OrderView() { - // 设置返回按钮为可见 - backBtn.setVisible(true); - // 设置详情按钮为可见 - detailBtn.setVisible(true); - // 设置更新按钮为可见 - updateBtn.setVisible(true); - // 设置删除按钮为可见 - deleteBtn.setVisible(true); - // 设置添加按钮为不可见 - addBtn.setVisible(false); - // 设置历史按钮为不可见 - historyBtn.setVisible(false); - } - - // 根据订单编号查询结果,并更新界面 - public void resultOfNumber(String iNumber) { - // 重置标记 - this.mark=0; - // 创建InOrderTM对象,用于处理订单数据 - InOrderTM inOrderTM = new InOrderTM(); - // 根据订单编号查询结果 - inOrderTM.resultOfNumber(iNumber); - // 设置表格模型为查询结果 - inTable.setModel(inOrderTM); - // 清除底部左侧面板的内容 - bottomPanelLeft.removeAll(); - // 创建一个标签,显示记录总数 - countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel); - // 更新按钮组件的可见性 - OrderView(); - } - - - // 根据状态分类代码查询订单,并更新界面 - public void resultOfFindStatus(int catalog) { - // 重置标记 - this.mark=0; - // 创建InOrderTM对象,用于处理订单数据 - InOrderTM inOrderTM = new InOrderTM(); - // 根据分类代码查询订单 - inOrderTM.resultOfFind(catalog); - // 设置表格模型为查询结果 - inTable.setModel(inOrderTM); - // 清除底部左侧面板的内容 - bottomPanelLeft.removeAll(); - // 创建一个标签,显示记录总数 - countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel); - // 更新按钮组件的可见性 - OrderView(); - } - - // 刷新缓冲区数据,并更新界面 - public void refreshBuffer(Vector v) { - // 设置标记为1,表示刷新操作 - this.mark=1; - // 创建InTableModel对象,使用传入的Vector作为数据源 - InTableModel inTableModel = new InTableModel(v); - // 设置表格模型为新的数据模型 - inTable.setModel(inTableModel); - // 清除底部左侧面板的内容 - bottomPanelLeft.removeAll(); - // 创建一个标签,显示商品种类和总价信息 - countInfoLabel = new JLabel("商品种类:"+inTableModel.getRowCount()+",总价:"+inTableModel.getAllPrice()); - // 将标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel); - // 设置按钮的可见性 - backBtn.setVisible(false); - detailBtn.setVisible(false); - historyBtn.setVisible(true); - updateBtn.setVisible(true); - addBtn.setVisible(true); - deleteBtn.setVisible(true); - - // 更新总价和记录数 - allPrice = inTableModel.getAllPrice(); - row = inTableModel.getRowCount(); - } - - // 调出所有进货订单记录,并更新界面 - public void InOrderRecord() { - // 重置标记 - this.mark=0; - // 创建InOrderTM对象,用于处理订单数据 - InOrderTM inOrderTM = new InOrderTM(); - // 获取所有进货订单记录 - inOrderTM.allInOrderRecord(); - // 设置表格模型为所有订单记录 - inTable.setModel(inOrderTM); - // 清除底部左侧面板的内容 - bottomPanelLeft.removeAll(); - // 创建一个标签,显示记录总数 - countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel); - // 更新按钮组件的可见性 - OrderView(); - } - - // 根据订单编号查询进货记录,并更新界面 - public void InRecord(String iNumber) { - // 设置标记为2,表示按订单编号查询 - this.mark=2; - // 创建InRecordTM对象,使用订单编号作为查询条件 - InRecordTM inRecordTM = new InRecordTM(iNumber); - // 查询进货记录 - inRecordTM.findInRecordByINumber(); - // 设置表格模型为查询结果 - inTable.setModel(inRecordTM); - // 清除底部左侧面板的内容 - bottomPanelLeft.removeAll(); - // 创建一个标签,显示订单号和记录总数 - countInfoLabel = new JLabel("订单号@"+iNumber+"共有"+inRecordTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel); - // 更新按钮的可见性 - backBtn.setVisible(true); - detailBtn.setVisible(false); - updateBtn.setVisible(false); - addBtn.setVisible(false); - historyBtn.setVisible(false); - deleteBtn.setVisible(false); - } - - - - - - - /*按钮监听时间*/ - @Override - public void actionPerformed(ActionEvent e) { - // 创建购物车实例 - BufferImpl = new BufferImpl();/*获得购物车*/ - // 获取事件源对象 - Object source = e.getSource(); - - // 如果事件源是搜索按钮 - if(searchBtn==source) { - // 从搜索文本框中获取订单号 - String number = nameSearchTF.getText(); - // 打印搜索后的订单号 - System.out.println("搜索后的订单:"+number); - // 根据订单号进行搜索并处理结果 - resultOfNumber(number); - } - - // 如果事件源是添加按钮 - else if(addBtn==source) { - // 创建添加对话框实例,并传入窗口框架、向量数据、用户信息 - InDialog outDialog = new InDialog(jFrame,v,user); - // 设置对话框为可见 - outDialog.setVisible(true); - // 获取对话框返回的向量数据 - v=outDialog.getVector(); - // 刷新购物车数据 - refreshBuffer(v); - - } - - - else if(updateBtn==source) { /*更新*/ - // 打印当前操作标记值 - System.out.println("mark="+mark); - // 获取表格中被选中的行索引 - int rowIndex = inTable.getSelectedRow(); - // 如果没有行被选中,弹出提示对话框并返回 - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); - return; - } - // 如果标记值为1,表示当前操作是进货表修改 - if(mark==1) { - // 从选中的行中获取ID - String id =(String) inTable.getValueAt(rowIndex,0); - // 创建修改数量的对话框实例,并传入相关参数 - ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"In",v); - // 设置对话框为可见 - changesumDialog.setVisible(true); - // 获取对话框返回的向量数据 - v = changesumDialog.getVector(); - // 打印更改状态后向量的大小 - System.out.println("更改状态后v.size="+v.size()); - // 刷新缓冲区数据 - refreshBuffer(v); - } - - //inOrder修改,修改状态 - else if(mark==0) { - // 从选中的行中获取订单编号 - String iNumber =(String) inTable.getValueAt(rowIndex,0); - // 从选中的行中获取订单状态 - String status =(String) inTable.getValueAt(rowIndex,4); - // 如果订单状态为"已入库",则弹出提示信息并返回 - if(status.equals("已入库")) { - JOptionPane.showMessageDialog(this,"订单上的货物已入库无法修改状态","提示",JOptionPane.INFORMATION_MESSAGE); - return; - } - - // 创建修改状态对话框实例,并传入相关参数 - ChangeStatusDialog changeStatusDialog = new ChangeStatusDialog(jFrame,iNumber,status); - // 设置对话框为可见 - changeStatusDialog.setVisible(true); - // 刷新主界面提醒 - MainView.refreshRemind(); - // 刷新首页 - HomeView.refreshHome(); - // 重新加载订单记录 - InOrderRecord(); - } - - - } - - - else if(deleteBtn==source) { - // 获取表格中被选中的行索引 - int rowIndex = inTable.getSelectedRow(); - // 如果没有行被选中,弹出提示对话框并返回 - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条"); - return; - } - - /*删除进货表的*/ - if(mark==1) { - // 打印日志信息,表示将删除进货表中的记录 - System.out.println("删除进货表"); - // 从选中的行中获取记录的ID - String id =(String) inTable.getValueAt(rowIndex,0); - // 弹出确认对话框,询问用户是否删除指定ID的记录 - int select = JOptionPane.showConfirmDialog(this,"是否删除id为"+id+"的记录","提示",JOptionPane.YES_NO_OPTION); - // 如果用户选择"是",则执行删除操作 - if(select==JOptionPane.YES_OPTION) {/*选择是*/ - // 遍历向量v,寻找匹配的ID进行删除 - for(int i =0;i(); - refreshBuffer(v); - // 刷新主界面提醒 - MainView.refreshRemind(); - // 弹出提示对话框,显示邮件发送成功和订单信息 - JOptionPane.showConfirmDialog(null,"发送邮件成功\r\n订单号:"+s[0]+"\r\n负责人:"+uname, "提示", JOptionPane.YES_OPTION); - - } - - - } - - }else if(exitBtn==source) { - // 弹出确认对话框,询问是否退出并清空购物车 - int res = JOptionPane.showConfirmDialog(null,"确定退出并清空购物车吗", "结账", JOptionPane.YES_NO_OPTION); - if(res==JOptionPane.YES_OPTION)/*如果退出*/{ - // 将购物车数组置空并刷新缓冲区 - v=new Vector();/*将数组置空*/ - refreshBuffer(v); - // 弹出提示对话框,显示退出成功 - JOptionPane.showConfirmDialog(null,"退出成功", "提示", JOptionPane.PLAIN_MESSAGE); - } - - } - } - } diff --git a/branch_zyx/My_branch/MainView.java b/branch_zyx/My_branch/MainView.java deleted file mode 100644 index af24167..0000000 --- a/branch_zyx/My_branch/MainView.java +++ /dev/null @@ -1,702 +0,0 @@ -package com.lingnan.supermarket.view; // 定义包名,所有视图相关的类都在这个包下 - -import java.awt.event.ActionEvent; // 导入ActionEvent类,用于监听动作事件 -import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现动作事件监听 -import java.awt.event.MouseEvent; // 导入MouseEvent类,用于监听鼠标事件 -import java.awt.event.MouseListener; // 导入MouseListener接口,用于实现鼠标事件监听 -import java.awt.event.WindowEvent; // 导入WindowEvent类,用于监听窗口事件 -import java.awt.event.WindowListener; // 导入WindowListener接口,用于实现窗口事件监听 -import java.io.File; // 导入File类,用于文件操作 -import java.io.IOException; // 导入IOException类,用于处理输入输出异常 -import java.util.Date; // 导入Date类,用于处理日期 -import java.util.Random; // 导入Random类,用于生成随机数 -import java.util.Vector; // 导入Vector类,用于实现动态数组 - -import javax.imageio.ImageIO; // 导入ImageIO类,用于图像输入输出 -import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 -import javax.swing.JButton; // 导入JButton类,用于创建按钮 -import javax.swing.JLabel; // 导入JLabel类,用于创建标签 -import javax.swing.JMenu; // 导入JMenu类,用于创建菜单 -import javax.swing.JMenuBar; // 导入JMenuBar类,用于创建菜单栏 -import javax.swing.JMenuItem; // 导入JMenuItem类,用于创建菜单项 -import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 -import javax.swing.JPanel; // 导入JPanel类,用于创建面板 -import javax.swing.JSplitPane; // 导入JSplitPane类,用于创建分隔面板 -import javax.swing.Timer; // 导入Timer类,用于实现定时器 - -import com.lingnan.supermarket.componet.BGPanel; // 导入自定义的BGPanel类 -import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入BufferImpl类,可能是数据访问层的实现 -import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; // 导入inOrderServiceImpl类,可能是订单服务的实现 -import com.lingnan.supermarket.dialog.CloseDialog; // 导入CloseDialog类,可能是关闭对话框 -import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能是入库对话框 -import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类,可能是用户对话框 -import com.lingnan.supermarket.dialog.UserInfDialog; // 导入UserInfDialog类,可能是用户信息对话框 -import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,可能是订单数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入Production类,可能是产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User类,可能是用户数据传输对象 -import com.lingnan.supermarket.utils.DateUtil; // 导入DateUtil类,可能是日期工具类 -import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,可能是字体工具类 -import com.lingnan.supermarket.view.base.BaseView; // 导入BaseView类,可能是视图基类 - -import java.awt.*; // 导入awt包中的所有类 - -// 主视图类,继承自BaseView,并实现多个事件监听接口 -public class MainView extends BaseView implements ActionListener, MouseListener,WindowListener{ - - - JMenuBar menuBar; // 声明菜单栏变量 - JMenu settingMenu,helpMenu; // 声明设置菜单和帮助菜单变量 - - JMenuItem skinMenuItem,configMenuItem; // 声明皮肤菜单项和配置菜单项变量 - - - JSplitPane containerPanel; // 声明分隔面板变量,用于左右布局 - - CardLayout rightPanelLayout; // 声明卡片布局管理器变量,用于右侧面板 - JPanel leftPanel,rightPanel; // 声明左侧和右侧面板变量 - - /*菜单栏组件*/ - JLabel logoLabel,userMenuLabel1,homeMenuLabel,userMenuLabel,inMenuLabel, - outMenuLabel,storageMenuLabel,supplierMenuLabel,catalogMenuLabel; - // 声明菜单栏中各个标签的变量 - - static JLabel remindMenuLabel;/*声明静态标签变量,用于全局调用刷新*/ - - JPanel bottomPanel; // 声明底部面板变量 - - JLabel timeLabel; // 声明时间标签变量 - - JPanel purposePanel,timePanel; // 声明目的面板和时间面板变量 - JLabel purposeLabel; // 声明目的标签变量 - - - JButton saveBtn,unSaveBtn,cancleBtn;/*退出时按钮*/ - - // - Timer timer; // 声明定时器变量,用于执行周期性任务 - - private User user ;/*从登录界面传过来的用户信息,用于当前视图的用户上下文*/ - - private BufferImpl bufferImpl; // 声明BufferImpl对象,可能是用于缓存处理的实现 - - private Image bgImage ; // 声明背景图片变量 - private String iconSkin; // 声明图标皮肤路径变量 - private int skin; // 声明皮肤编号变量 - - private Vector vP=new Vector() ;/*用于进货缓存,存储产品信息*/ - - private int location; // 声明位置变量,可能用于记录当前视图的状态或位置 - - private int sSuper=-1;//界面权限,用于标识用户权限级别 - - private static inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 声明并实例化订单服务实现类 - - private static int unConfirmmark;/*未确认订单的数量*/ - - // 构造方法,接收用户信息、皮肤编号和图标皮肤路径 - public MainView(User user,int skin,String iconSkin) { - - super(1300,850,"新民超市管理系统欢迎您",user,skin); // 调用父类构造方法,设置窗口大小、标题、用户信息和皮肤 - timer = new Timer(1000,this); // 创建定时器,每1000毫秒执行一次 - timer.start(); // 启动定时器 - this.user = user; // 保存用户信息到当前视图 - this.sSuper=user.getUsuper();//界面权限,从用户信息中获取权限级别 - System.out.println("userid="+user.getId()); // 打印用户ID - this.addWindowListener(this); // 为当前窗口添加窗口事件监听器 - this.skin = skin; // 保存皮肤编号 - this.iconSkin = iconSkin; // 保存图标皮肤路径 - ImageIcon icon=new ImageIcon(iconSkin); // 创建ImageIcon对象,加载图标皮肤 - this.setIconImage(icon.getImage()); // 设置窗口图标 - // 获得未进货的信息 - Vector vInOrder; - vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找未确认的订单 - unConfirmmark=vInOrder.size(); // 设置未确认订单的数量 - initView(user,skin); // 初始化视图 - } - - // 另一个构造方法,只接收用户信息 - public MainView(User user) { - super(1300,850,"新民超市管理系统欢迎您"); // 调用父类构造方法,设置窗口大小和标题 - - timer = new Timer(1000,this); // 创建定时器,每1000毫秒执行一次 - - timer.start(); // 启动定时器 - - this.user = user; // 保存用户信息到当前视图 - - this.sSuper=user.getUsuper();//界面权限,从用户信息中获取权限级别 - - System.out.println("userid="+user.getId()); // 打印用户ID - - this.addWindowListener(this); // 为当前窗口添加窗口事件监听器 - // 获得未进货的信息 - Vector vInOrder; - - vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找未确认的订单 - - unConfirmmark=vInOrder.size(); // 设置未确认订单的数量 - - initView(user,skin); // 初始化视图,这里没有为skin赋值,可能会出错 - - } - - - public static void refreshRemind() { - Vector vInOrder; // 声明未确认订单的向量 - vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找所有未确认的订单 - unConfirmmark = vInOrder.size(); // 获取未确认订单的数量 - remindMenuLabel.setText("待确认进货:" + unConfirmmark); // 更新菜单标签,显示未确认订单的数量 - } - -// 以下是注释掉的代码,没有实现功能 -/* public static User getUserInf() { - return user; // 返回用户信息 -}*/ - - @Override - protected void initView(User user, int skin) { - // 初始化视图的方法,接收用户信息和皮肤编号 - - /*菜单栏*/ - menuBar = new JMenuBar(); // 创建菜单栏 - - settingMenu = new JMenu("设置"); // 创建设置菜单 - - helpMenu = new JMenu("帮助"); // 创建帮助菜单 - - skinMenuItem = new JMenuItem("随机切换皮肤", new ImageIcon("static\\icon\\skin.png")); // 创建切换皮肤的菜单项 - - /*for循环被注释掉了,没有实际作用 - for(int i = 3;i<9;i++) { - - }*/ - configMenuItem = new JMenuItem("参数设置", new ImageIcon("static\\icon\\setting.png")); // 创建参数设置的菜单项 - skinMenuItem.addActionListener(this); // 为切换皮肤菜单项添加动作监听器 - - settingMenu.add(configMenuItem); // 将参数设置菜单项添加到设置菜单 - settingMenu.add(skinMenuItem); // 将切换皮肤菜单项添加到设置菜单 - menuBar.add(settingMenu); // 将设置菜单添加到菜单栏 - menuBar.add(helpMenu); // 将帮助菜单添加到菜单栏 - - setJMenuBar(menuBar); // 将菜单栏设置到当前窗口 - - /*左边菜单栏设置*/ - try { - bgImage = ImageIO.read(new File("static\\bg\\bg" + skin + ".jpg")); // 读取背景图片 - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); // 打印异常堆栈信息 - - } - - leftPanel = new BGPanel(bgImage); /*皮肤*/ // 创建带有背景的左边面板 - leftPanel.setLayout(null); // 设置左边面板布局为空,即绝对布局 - - /*菜单栏:用户登录信息*/ - System.out.println("用户头像地址==" + user.getImg()); // 打印用户头像地址 - JLabel logoLabel = new JLabel(new ImageIcon(user.getImg()), JLabel.LEFT); // 创建用户头像标签 - System.out.println(user.getImg()); // 再次打印用户头像地址 - leftPanel.add(logoLabel); // 将用户头像标签添加到左边面板 - logoLabel.setBounds(25, 30, 150, 150); // 设置用户头像标签的位置和大小 - - /*账号名字*/ - String x = UsuperIcon(user.getUsuper()); /*判断权限返回icon地址*/ // 根据用户权限返回相应的图标地址 - - System.out.println("身份地址:" + x); // 打印身份图标地址 - - userMenuLabel1 = new JLabel("|" + user.getUsername() + "|" + user.getRname(), new ImageIcon(x), JLabel.LEFT); // 创建用户信息标签 - - userMenuLabel1.setFont(FontUtil.userFont); // 设置用户信息标签的字体 - - userMenuLabel1.addMouseListener(this); // 为用户信息标签添加鼠标监听器 - - userMenuLabel1.setBounds(20, 170, 180, 32); // 设置用户信息标签的位置和大小 - - userMenuLabel1.setForeground(Color.white); // 设置用户信息标签的前景色为白色 - - leftPanel.add(userMenuLabel1); /*添加用户选项到菜单栏*/ // 将用户信息标签添加到左边面板 - - - - - /*菜单栏:首页*/ - homeMenuLabel = new JLabel("新民首页", new ImageIcon("static\\icon\\home1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示首页菜单 - homeMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - homeMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - homeMenuLabel.setBounds(20, 250, 150, 32); // 设置菜单标签的位置和大小 - homeMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(homeMenuLabel); // 将首页菜单标签添加到左侧面板 - - /*菜单栏:人员管理*/ - userMenuLabel = new JLabel("人员管理", new ImageIcon("static\\icon\\user1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示人员管理菜单 - userMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - userMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - userMenuLabel.setBounds(20, 300, 150, 32); // 设置菜单标签的位置和大小 - userMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(userMenuLabel); // 将人员管理菜单标签添加到左侧面板 - - /*菜单栏:进货系统*/ - inMenuLabel = new JLabel("进货系统", new ImageIcon("static\\icon\\in1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示进货系统菜单 - inMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - inMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - inMenuLabel.setBounds(20, 350, 150, 32); // 设置菜单标签的位置和大小 - inMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(inMenuLabel); // 将进货系统菜单标签添加到左侧面板 - - /*菜单栏:收银系统*/ - outMenuLabel = new JLabel("收银系统", new ImageIcon("static\\icon\\out1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示收银系统菜单 - outMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - outMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - outMenuLabel.setBounds(20, 400, 150, 32); // 设置菜单标签的位置和大小 - outMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(outMenuLabel); // 将收银系统菜单标签添加到左侧面板 - - /*菜单栏:库存*/ - storageMenuLabel = new JLabel("商品库存", new ImageIcon("static\\icon\\storage1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品库存菜单 - storageMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - storageMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - storageMenuLabel.setBounds(20, 450, 150, 32); // 设置菜单标签的位置和大小 - storageMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(storageMenuLabel); // 将商品库存菜单标签添加到左侧面板 - - /*菜单栏:供应商*/ - supplierMenuLabel = new JLabel("供应商", new ImageIcon("static\\icon\\supplier1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示供应商菜单 - supplierMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - supplierMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - supplierMenuLabel.setBounds(20, 500, 150, 32); // 设置菜单标签的位置和大小 - supplierMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(supplierMenuLabel); // 将供应商菜单标签添加到左侧面板 - - /*菜单栏:商品目录*/ - catalogMenuLabel = new JLabel("商品目录", new ImageIcon("static\\icon\\catalog1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品目录菜单 - catalogMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - catalogMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - catalogMenuLabel.setBounds(20, 550, 150, 32); // 设置菜单标签的位置和大小 - catalogMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(catalogMenuLabel); // 将商品目录菜单标签添加到左侧面板 - - - /*提醒进货确认模块*/ - remindMenuLabel = new JLabel("待确认进货:"+unConfirmmark, new ImageIcon("static\\icon\\remind1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于显示待确认进货的数量 - remindMenuLabel.setFont(FontUtil.remindFont); // 设置提醒菜单标签的字体样式 - remindMenuLabel.addMouseListener(this); // 为提醒菜单标签添加鼠标事件监听器 - remindMenuLabel.setBounds(0, 650, 200, 32); // 设置提醒菜单标签的位置和大小 - remindMenuLabel.setForeground(Color.white); // 设置提醒菜单标签的前景色为白色 - leftPanel.add(remindMenuLabel); // 将提醒菜单标签添加到左侧面板 - -// 设置右侧面板的布局管理器为卡片布局 - rightPanelLayout = new CardLayout(); - -// 0.超市首页展示,创建并实例化首页视图面板 - JPanel homePanel = new HomeView(this); - -// 1.用户管理界面:用户的列表,创建并实例化用户管理视图面板 - JPanel userPanel = new UserView(this); - -// 2.进货系统界面,创建并实例化进货系统视图面板 - JPanel inPanel = new InView(this, user, vP, 1); - -// 3.收银系统界面,创建并实例化收银系统视图面板 - JPanel outPanel = new OutView(this, user); - -// 4.库存系统界面,创建并实例化库存系统视图面板 - JPanel storagePanel = new StorageView(this); - -// 5.供应商界面,创建并实例化供应商视图面板 - JPanel supplierPanel = new SupplierView(this); - -// 6.商品目录界面,创建并实例化商品目录视图面板 - JPanel ProdCatalogPanel = new ProdCatalogView(this); - -// 7.超市总览界面,创建并实例化超市总览视图面板 - JPanel superPanel = new SuperView(this); - -// 8.进货信息提示界面,创建并实例化进货信息提示视图面板 - JPanel inPanel2 = new InView(this, user, vP, 0); - -// 创建右侧面板并设置布局管理器为之前定义的卡片布局 - rightPanel = new JPanel(rightPanelLayout); - rightPanel.add(homePanel, "0"); // 添加首页视图面板并设置其索引为"0" - rightPanel.add(userPanel, "1"); // 添加用户管理视图面板并设置其索引为"1" - rightPanel.add(inPanel, "2"); // 添加进货系统视图面板并设置其索引为"2" - rightPanel.add(outPanel, "3"); // 添加收银系统视图面板并设置其索引为"3" - rightPanel.add(storagePanel, "4"); // 添加库存系统视图面板并设置其索引为"4" - rightPanel.add(supplierPanel, "5"); // 添加供应商视图面板并设置其索引为"5" - rightPanel.add(ProdCatalogPanel, "6"); // 添加商品目录视图面板并设置其索引为"6" - rightPanel.add(superPanel, "7"); // 添加超市总览视图面板并设置其索引为"7" - rightPanel.add(inPanel2, "8"); // 添加进货信息提示视图面板并设置其索引为"8" - -// 创建一个分割面板,将左侧面板和右侧面板水平分割 - containerPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel); - containerPanel.setDividerLocation(180); // 设置分割线的位置 - containerPanel.setDividerSize(0); // 设置分割线的尺寸为0,即隐藏分割线 - -// 创建底部面板,默认使用流式布局 - bottomPanel = new JPanel(); - bottomPanel.setBackground(Color.WHITE); // 设置底部面板的背景色为白色 - bottomPanel.setLayout(new BorderLayout()); // 设置底部面板的布局管理器为边界布局 - -// 创建目的地区面板,用于显示当前位置信息 - purposePanel = new JPanel(); - purposePanel.setLayout(new FlowLayout(FlowLayout.LEFT)); // 设置目的地区面板的布局管理器为左对齐的流式布局 - purposePanel.setBackground(Color.WHITE); // 设置目的地区面板的背景色为白色 - purposeLabel = new JLabel("当前位置是:超市首页"); // 创建标签显示当前位置信息 - purposePanel.add(purposeLabel); // 将位置信息标签添加到目的地区面板 - - - // 创建一个新的 JPanel 实例用于显示时间 - timePanel=new JPanel(); -// 设置 timePanel 的布局为 FlowLayout,并指定元素靠右对齐 - timePanel.setLayout(new FlowLayout(FlowLayout.TRAILING)); -// 设置 timePanel 的背景颜色为白色 - timePanel.setBackground(Color.WHITE); -// 创建一个新的 JLabel 实例,显示当前日期和时间,使用 DateUtil 工具类进行格式化 - timeLabel = new JLabel(DateUtil.dateToString(new Date(),null)); -// 将 timeLabel 添加到 timePanel 中 - timePanel.add(timeLabel); -// 将 purposePanel 添加到 bottomPanel 的西边(West) - bottomPanel.add(purposePanel,"West"); -// 将 timePanel 添加到 bottomPanel 的东边(East) - bottomPanel.add(timePanel,"East"); -// 获取当前窗口的内容窗格 - Container container = getContentPane(); -// 将 containerPanel 添加到内容窗格的中心(Center) - container.add(containerPanel,"Center"); -// 将 bottomPanel 添加到内容窗格的南边(South) - container.add(bottomPanel,"South"); - - } - - @Override - // 定义当触发动作事件时的处理方法 - public void actionPerformed(ActionEvent e) { - // 获取触发事件的源对象 - Object source = e.getSource(); - // 更新时间标签以显示当前时间 - timeLabel.setText(DateUtil.dateToString(new Date(),null)); - // 检查事件源是否为皮肤菜单项,如果是则进行换肤操作 - if(source==skinMenuItem)/*换肤*/{ - // 打印换肤操作信息到控制台 - System.out.println("切换皮肤"); - // 创建一个新的随机数生成器实例 - Random random=new Random(); - // 生成一个0到9之间的随机数作为皮肤编号 - skin=random.nextInt(10); - // 销毁当前窗口 - this.dispose(); - // 创建并显示一个新的主视图窗口,传入用户信息、皮肤编号和图标皮肤 - new MainView(user,skin,iconSkin); - - } - - } - - @Override/*左侧菜单栏点击事件*/ - // 定义当鼠标点击事件发生时的处理方法 - public void mouseClicked(MouseEvent e) { - // 获取触发事件的源对象 - Object source = e.getSource(); - // 检查事件源是否为首页菜单标签,如果是则显示对应的面板 - if(source==homeMenuLabel) { - rightPanelLayout.show(rightPanel,"0"); // 显示首页面板 - location=0; // 更新当前位置索引为0 - } - // 检查事件源是否为用户菜单标签,根据权限显示不同面板 - else if(source==userMenuLabel) { - if(sSuper==0) // 如果权限为0 - rightPanelLayout.show(rightPanel,"1"); // 显示用户面板1 - else{ // 如果权限不为0 - rightPanelLayout.show(rightPanel,"7"); // 显示用户面板7 - } - location=1; // 更新当前位置索引为1 - } - // 检查事件源是否为入库菜单标签,根据权限显示不同面板 - else if(source==inMenuLabel) { - if(sSuper==2) // 如果权限为2 - rightPanelLayout.show(rightPanel,"7"); // 显示面板7 - else{ // 如果权限不为2 - rightPanelLayout.show(rightPanel,"2"); // 显示入库面板 - } - location=2; // 更新当前位置索引为2 - } - // 检查事件源是否为出库菜单标签,如果是则显示对应的面板 - else if(source==outMenuLabel) { - rightPanelLayout.show(rightPanel,"3"); // 显示出库面板 - location=3; // 更新当前位置索引为3 - } - // 检查事件源是否为库存菜单标签,如果是则显示对应的面板 - else if(source==storageMenuLabel) { - rightPanelLayout.show(rightPanel,"4"); // 显示库存面板 - location=4; // 更新当前位置索引为4 - } - // 检查事件源是否为供应商菜单标签,如果是则显示对应的面板 - else if(source==supplierMenuLabel) { - rightPanelLayout.show(rightPanel,"5"); // 显示供应商面板 - location=5; // 更新当前位置索引为5 - } - // 检查事件源是否为目录菜单标签,如果是则显示对应的面板 - else if(source==catalogMenuLabel) { - rightPanelLayout.show(rightPanel,"6"); // 显示目录面板 - location=6; // 更新当前位置索引为6 - } - // 检查事件源是否为提醒菜单标签,根据权限显示不同面板 - else if(source==remindMenuLabel) { - if(sSuper==2) // 如果权限为2 - rightPanelLayout.show(rightPanel,"7"); // 显示面板7 - else{ // 如果权限不为2 - rightPanelLayout.show(rightPanel,"8"); // 显示提醒面板 - } - location=7; // 更新当前位置索引为7 - } - // 检查事件源是否为用户信息菜单标签1,如果是则显示用户信息对话框 - else if(source==userMenuLabel1){ - UserInfDialog userInfDialog = new UserInfDialog(this,user); // 创建用户信息对话框 - userInfDialog.setVisible(true); // 显示用户信息对话框 - location=8; // 更新当前位置索引为8 - } - - // 调用refreshRemove方法,可能用于刷新界面或执行其他操作 - refreshRemove(); - } - - //获取当前位置 - // 定义一个方法用于刷新和移除面板内容 - public void refreshRemove(){ - - // 从目的面板中移除所有组件 - purposePanel.removeAll(); - - // 根据当前的位置索引设置不同的目的标签文本 - if(location==0){ - purposeLabel = new JLabel("当前位置是:"+homeMenuLabel.getText()); // 设置当前位置为首页 - } - else if(location==1){ - purposeLabel = new JLabel("当前位置是:"+userMenuLabel.getText()); // 设置当前位置为用户菜单 - } - else if(location==2){ - purposeLabel = new JLabel("当前位置是:"+inMenuLabel.getText()); // 设置当前位置为入库菜单 - } - else if(location==3){ - purposeLabel = new JLabel("当前位置是:"+outMenuLabel.getText()); // 设置当前位置为出库菜单 - } - else if(location==4){ - purposeLabel = new JLabel("当前位置是:"+storageMenuLabel.getText()); // 设置当前位置为库存菜单 - } - else if(location==5){ - purposeLabel = new JLabel("当前位置是:"+supplierMenuLabel.getText()); // 设置当前位置为供应商菜单 - } - else{ - purposeLabel = new JLabel("当前位置是:"+catalogMenuLabel.getText()); // 设置当前位置为目录菜单 - } - - // 将新的目的标签添加到目的面板 - purposePanel.add(purposeLabel); - - // 可能需要调用重新绘制界面或更新界面显示的方法,但这里没有显示出来 - } - - - @Override - public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseReleased(MouseEvent e) { - // TODO Auto-generated method stub - - } - - @Override/*鼠标焦点时*/ - // 重写鼠标进入组件事件的处理方法 - public void mouseEntered(MouseEvent e) { - // 获取触发事件的源对象 - Object source = e.getSource(); - - // 如果事件源是首页菜单标签,则改变前景色和图标 - if(source==homeMenuLabel) { - homeMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是用户菜单标签,则改变前景色和图标 - if(source==userMenuLabel) { - userMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - userMenuLabel.setIcon(new ImageIcon("static\\icon\\user2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是入库菜单标签,则改变前景色和图标 - else if(source==inMenuLabel) { - inMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - inMenuLabel.setIcon(new ImageIcon("static\\icon\\in2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是出库菜单标签,则改变前景色和图标 - else if(source==outMenuLabel) { - outMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - outMenuLabel.setIcon(new ImageIcon("static\\icon\\out2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是库存菜单标签,则改变前景色和图标 - else if(source==storageMenuLabel) { - storageMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是供应商菜单标签,则改变前景色和图标 - else if(source==supplierMenuLabel) { - supplierMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是目录菜单标签,则改变前景色和图标 - else if(source==catalogMenuLabel) { - catalogMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是用户菜单标签1,则改变前景色 - else if(source==userMenuLabel1) { - userMenuLabel1.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标进入图标 - } - // 方法结束,没有设置图标的变化,只是改变了前景色 - } - - - @Override - // 重写鼠标离开组件事件的处理方法 - public void mouseExited(MouseEvent e) { - // 获取触发事件的源对象 - Object source = e.getSource(); - - // 如果事件源是首页菜单标签,则恢复前景色和图标 - if(source==homeMenuLabel) { - homeMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是用户菜单标签,则恢复前景色和图标 - else if(source==userMenuLabel) { - userMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - userMenuLabel.setIcon(new ImageIcon("static\\icon\\user1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是入库菜单标签,则恢复前景色和图标 - else if(source==inMenuLabel) { - inMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - inMenuLabel.setIcon(new ImageIcon("static\\icon\\in1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是出库菜单标签,则恢复前景色和图标 - else if(source==outMenuLabel) { - outMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - outMenuLabel.setIcon(new ImageIcon("static\\icon\\out1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是库存菜单标签,则恢复前景色和图标 - else if(source==storageMenuLabel) { - storageMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是供应商菜单标签,则恢复前景色和图标 - else if(source==supplierMenuLabel) { - supplierMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是目录菜单标签,则恢复前景色和图标 - else if(source==catalogMenuLabel) { - catalogMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源不是上述任何一个标签,则默认处理用户菜单标签1 - else { - userMenuLabel1.setForeground(Color.white); // 恢复前景色为白色 - // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标离开图标 - } - // 方法结束,所有菜单标签的前景色和图标已根据鼠标离开事件进行了相应的恢复 - } - - - - @Override - protected void initView() { - // TODO Auto-generated method stub - - } - - @Override - public void windowOpened(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - // 重写窗口关闭事件的处理方法 - public void windowClosing(WindowEvent e) { - // TODO Auto-generated method stub - // 获取触发事件的源对象 - Object source = e.getSource(); - - // 如果事件源是当前窗口对象,执行以下操作 - if(source==this) { - // 关闭窗口时检查进货系统和出货系统是否还有记录 - this.vP =InView.getVector(); // 获取进货系统的记录向量 - System.out.println("v的size="+vP.size()); // 打印进货系统记录的数量 - bufferImpl = new BufferImpl(); // 创建缓冲区实现对象 - - // 如果进货系统的购物车还有记录或者出货系统的缓冲区还有记录 - if(vP.size()!=0||bufferImpl.allOutBuffer().size()!=0) { - // 如果购物车还有记录,则显示关闭确认对话框 - CloseDialog closeDialog = new CloseDialog(this,vP); // 创建关闭对话框 - closeDialog.setVisible(true); // 显示关闭对话框 - } else { - // 如果没有记录,则直接退出程序 - System.exit(0); // 安全退出程序 - } - } - // 方法结束,窗口关闭事件已处理 - } - - - @Override - public void windowClosed(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowIconified(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowDeiconified(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowActivated(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowDeactivated(WindowEvent e) { - // TODO Auto-generated method stub - - } - - - - - - - -} diff --git a/branch_zyx/My_branch/ProdCatalog.java b/branch_zyx/My_branch/ProdCatalog.java deleted file mode 100644 index 18fd506..0000000 --- a/branch_zyx/My_branch/ProdCatalog.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.lingnan.supermarket.dto; // 声明当前类所在的包 - -// 定义产品目录类ProdCatalog -public class ProdCatalog { - private String id; // 产品目录ID - private String name; // 产品目录名称 - - // getId方法,用于获取产品目录ID - public String getId() { - return id; // 返回产品目录ID - } - // setId方法,用于设置产品目录ID - public void setId(String id) { - this.id = id; // 将参数id赋值给成员变量id - } - // getName方法,用于获取产品目录名称 - public String getName() { - return name; // 返回产品目录名称 - } - // setName方法,用于设置产品目录名称 - public void setName(String name) { - this.name = name; // 将参数name赋值给成员变量name - } - -} diff --git a/branch_zyx/My_branch/ProdCatalogTM.java b/branch_zyx/My_branch/ProdCatalogTM.java deleted file mode 100644 index 5552622..0000000 --- a/branch_zyx/My_branch/ProdCatalogTM.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.lingnan.supermarket.table; // 声明当前类所在的包 - -import java.util.List; // 导入List接口,用于表示列表 -import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 - -import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 - -import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 -import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 -import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 - - - -public class ProdCatalogTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于产品目录的表格数据模型 - - private String [] columnName = {"类别id","类别名称","商品id","商品名称"}; // 定义列名数组,用于表格的列标题 - - private productionImpl prodDao = new productionImpl(); // 创建productionImpl实例,用于操作产品数据 - - private Vector prods; // 声明一个Vector,用于存储产品列表 - - public void all() { - // 查找全部数据 - prods = prodDao.findAllproduction(); // 调用findAllproduction方法,获取所有产品数据 - } - public void ById2(Production p) { - // 根据类别id查找数据 - prods = prodDao.findProductionById2(p.getId2()); // 调用findProductionById2方法,根据类别id获取产品数据 - } - - @Override - public int getRowCount() { - return prods.size(); // 返回产品列表的大小,即表格的行数 - } - - @Override - public int getColumnCount() { - return columnName.length; // 返回列名数组的长度,即表格的列数 - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - Production prod = prods.get(rowIndex); // 获取指定行的产品对象 - // 以下注释掉的是打印语句,用于调试 - /*System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - if(columnIndex==0) { - return prod.getId2(); // 返回类别id - }else if(columnIndex==1) { - return prod.getName2(); // 返回类别名称 - }else if(columnIndex==2) { - return prod.getId(); // 返回商品id - }else if(columnIndex==3) { - return prod.getName(); // 返回商品名称 - }else { - return null; // 如果列索引不匹配,返回null - } - } - - @Override - public String getColumnName(int column) { - return columnName[column]; // 返回指定列的列名 - } - - - -} diff --git a/branch_zyx/My_branch/ProdCatalogView.java b/branch_zyx/My_branch/ProdCatalogView.java deleted file mode 100644 index 6972c99..0000000 --- a/branch_zyx/My_branch/ProdCatalogView.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 - -import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 -import java.awt.Color; // 导入Color类,用于定义颜色 -import java.awt.FlowLayout; // 导入FlowLayout布局管理器类 -import java.awt.event.ActionEvent; // 导入ActionEvent类,用于处理按钮点击等事件 -import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现事件监听 -import java.awt.event.ItemEvent; // 导入ItemEvent类,用于处理下拉框选择事件 -import java.awt.event.ItemListener; // 导入ItemListener接口,用于实现下拉框事件监听 -import java.util.ArrayList; // 导入ArrayList类,用于存储动态数组 - -import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 -import javax.swing.JButton; // 导入JButton类,用于创建按钮 -import javax.swing.JComboBox; // 导入JComboBox类,用于创建下拉框 -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 -import javax.swing.JLabel; // 导入JLabel类,用于创建标签 -import javax.swing.JPanel; // 导入JPanel类,用于创建面板 -import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建滚动面板 -import javax.swing.JTable; // 导入JTable类,用于创建表格 -import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 - -import com.lingnan.supermarket.dao.impl.prodCatalogImpl; // 导入prodCatalogImpl类,用于操作商品目录数据 -import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类,用于显示用户对话框 -import com.lingnan.supermarket.dto.ProdCatalog; // 导入ProdCatalog类,用于表示商品目录数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入Production类,用于表示产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User类,用于表示用户数据传输对象 -import com.lingnan.supermarket.table.ProdCatalogTM; // 导入ProdCatalogTM类,用于表示商品目录表格模型 -import com.lingnan.supermarket.table.StorageTableModel; // 导入StorageTableModel类,用于表示库存表格模型 -import com.lingnan.supermarket.table.UserTableModel; // 导入UserTableModel类,用于表示用户表格模型 -import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,用于字体工具类 - -public class ProdCatalogView extends JPanel { // 定义ProdCatalogView类,继承自JPanel - - // 上面 - private JPanel toolBarPanel; // 工具栏面板 - - private JPanel searchPanel; // 搜索面板 - private JLabel logLabel, locationLabel; // 标签,用于显示文本 - private JTextField nameSearchTF; // 文本框,用于输入搜索内容 - private JButton searchBtn; // 搜索按钮 - - private JPanel opePanel; // 操作面板 - private JButton addBtn, updateBtn, deleteBtn; // 添加、更新、删除按钮 - - private String catalog = "0"; // 商品目录ID - private JComboBox combo; // 下拉框,用于选择商品目录 - private String log[]=null; // 商品目录名称数组 - private ArrayListalog=null; // 商品目录名称列表 - private ProdCatalogTM prodCatalogTM; // 商品目录表格模型 - private ProdCatalog pc; // 商品目录数据传输对象 - private prodCatalogImpl pci; // 商品目录数据操作实现类 - - // 中间 - private JScrollPane tableScrollPane; // 表格滚动面板 - private JTable prodCatalogTable; // 商品目录表格 - - // 下面 - private JPanel bottomPanel; // 底部面板 - private JLabel countInfoLabel; // 标签,用于显示记录总数 - - private JFrame jFrame; // 窗口框架 - - // 构造方法,接收一个JFrame参数 - public ProdCatalogView(JFrame jFrame) { - this.setLayout(new BorderLayout()); // 设置面板布局为BorderLayout - initView(); // 初始化视图 - this.jFrame = jFrame; // 保存传入的JFrame实例 - } - - - private void initView() { - // 初始化视图方法 - - toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout - - searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout - locationLabel = new JLabel("商品目录"); // 创建商品目录标签并设置文本 - locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 - locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 - logLabel = new JLabel("分类"); // 创建分类标签并设置文本 - nameSearchTF = new JTextField(10); // 创建文本框并设置大小 - - searchBtn = new JButton("搜索", new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标和文本 - - // 创建操作面板和按钮,并设置图标(注释部分,未使用) - // opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - // addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); - // updateBtn = new JButton(new ImageIcon("static\\icon\\update.png")); - // deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); - - // 为按钮添加事件监听(注释部分,未使用) - // addBtn.addActionListener(this); - // updateBtn.addActionListener(this); - // deleteBtn.addActionListener(this); - - // 将按钮添加到操作面板(注释部分,未使用) - // opePanel.add(addBtn); - // opePanel.add(updateBtn); - // opePanel.add(deleteBtn); - - pci=new prodCatalogImpl(); // 创建商品目录数据操作实现类实例 - this.alog=pci.findNameProdCatalog(); // 查找所有商品目录名称 - this.log=new String[alog.size()]; // 创建字符串数组以存储商品目录名称 - for(int i=0;i(log); // 创建下拉框并设置选项 - combo.addItemListener(new MyItemListener()); // 为下拉框添加事件监听器 - - searchPanel.add(locationLabel); // 将商品目录标签添加到搜索面板 - searchPanel.add(logLabel); // 将分类标签添加到搜索面板 - searchPanel.add(combo); // 将下拉框添加到搜索面板 - /* - * searchPanel.add(nameSearchTF); // 将文本框添加到搜索面板(注释部分,未使用) - * searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板(注释部分,未使用) - */ - - toolBarPanel.add(searchPanel, "West"); // 将搜索面板添加到工具栏面板的西边 - // toolBarPanel.add(opePanel, "East"); // 将操作面板添加到工具栏面板的东边(注释部分,未使用) - - // 中间表格 - prodCatalogTM = new ProdCatalogTM(); // 创建商品目录表格模型 - prodCatalogTM.all(); // 加载所有商品目录数据 - prodCatalogTable = new JTable(prodCatalogTM); // 创建表格并设置模型 - prodCatalogTable.setFont(FontUtil.tableFont); // 设置表格字体 - prodCatalogTable.setRowHeight(50); // 设置表格行高 - tableScrollPane = new JScrollPane(prodCatalogTable); // 创建滚动面板并添加表格 - - // 下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout - countInfoLabel = new JLabel("总共" + prodCatalogTable.getRowCount() + "条"); // 创建记录数标签并设置文本 - bottomPanel.add(countInfoLabel); // 将记录数标签添加到底部面板 - - this.add(toolBarPanel, "North"); // 将工具栏面板添加到面板的北边 - this.add(tableScrollPane, "Center"); /* 将表格放到中间 */ // 将表格滚动面板添加到面板的中间 - this.add(bottomPanel, "South"); // 将底部面板添加到面板的南边 - - setVisible(true); // 设置面板为可见 - - } - - -// @Override -// public void actionPerformed(ActionEvent e) { -// Object source = e.getSource(); -// if (addBtn == source) { // 如果事件源是添加按钮 -// UserDialog userDialog = new UserDialog(jFrame); // 创建用户对话框 -// userDialog.setVisible(true); // 设置用户对话框为可见 -// } else if (updateBtn == source) { // 如果事件源是更新按钮 -// // 更新按钮的事件处理代码(未实现) -// } else if (deleteBtn == source) { // 如果事件源是删除按钮 -// // 删除按钮的事件处理代码(未实现) - -// } - -// } - - public class MyItemListener implements ItemListener { // 创建一个内部类实现ItemListener接口 - - @Override - public void itemStateChanged(ItemEvent e) { // 重写itemStateChanged方法 - JComboBox cb = (JComboBox) e.getSource(); // 获取事件源下拉框 - String catalog1 = (String) cb.getSelectedItem(); // 获取选中的商品目录名称 - pci =new prodCatalogImpl(); // 创建商品目录数据操作实现类实例 - for(int i=0;ialog=null; // 用于存储类别信息的列表 - private ProdCatalogTM prodCatalogTM; // 产品目录表格模型 - private ProdCatalog pc; // 产品目录数据传输对象 - private prodCatalogImpl pci; // 产品目录服务实现类 - private JComboBox combo; // 下拉框组件 - private String id2; // 产品目录ID - private String name2; // 产品目录名称 - - // 下拉供应商类别相关变量 - private String superlier[]=null; // 用于存储供应商信息的数组 - private ArrayListasuperlier=null; // 用于存储供应商信息的列表 - private SupplierInf si; // 供应商信息数据传输对象 - private SupplierInfImpl sii; // 供应商信息服务实现类 - private JComboBox combo1; // 供应商下拉框组件 - private int supplyid; // 供应商ID - - private StorageView storageView; // 库存视图引用 - - private Production production; // 产品数据传输对象 - - - public ProductionDialog(JFrame parent) { // 构造函数,接收一个父窗口作为参数 - super(parent, "添加"); // 调用父类构造函数,设置对话框标题为"添加" - - setSize(350, 500); // 设置对话框大小 - - setLocationRelativeTo(null); // 设置对话框相对于屏幕居中 - - setModal(true); // 设置对话框为模态 - setResizable(false); // 设置对话框不可调整大小 - - this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 - - initView(); // 初始化视图 - } - - private void initView() { // 初始化视图的方法 - idPanel = new JPanel(); // 创建一个面板用于显示商品编号 - idLabel = new JLabel("商品编号"); // 创建一个标签显示"商品编号" - idTF = new JTextField(15); // 创建一个文本框用于输入商品编号,宽度为15 - idPanel.add(idLabel); // 将标签添加到面板 - idPanel.add(idTF); // 将文本框添加到面板 - - - namePanel = new JPanel(); // 创建一个面板用于显示名称 - nameLabel = new JLabel("名称"); // 创建一个标签显示"名称" - nameTF = new JTextField(15); // 创建一个文本框用于输入名称,宽度为15 - namePanel.add(nameLabel); // 将标签添加到面板 - namePanel.add(nameTF); // 将文本框添加到面板 - - - inpricePanel = new JPanel(); // 创建一个面板用于显示进货单价 - inpriceLabel = new JLabel("进货单价"); // 创建一个标签显示"进货单价" - inpriceTF = new JTextField(15); // 创建一个文本框用于输入进货单价,宽度为15 - inpricePanel.add(inpriceLabel); // 将标签添加到面板 - inpricePanel.add(inpriceTF); // 将文本框添加到面板 - - - outpricePanel = new JPanel(); // 创建一个面板用于显示购买单价 - outpriceLabel = new JLabel("购买单价"); // 创建一个标签显示"购买单价" - outpriceTF = new JTextField(15); // 创建一个文本框用于输入购买单价,宽度为15 - outpricePanel.add(outpriceLabel); // 将标签添加到面板 - outpricePanel.add(outpriceTF); // 将文本框添加到面板 - - - lifePanel = new JPanel(); // 创建一个面板用于显示保质期 - lifeLabel = new JLabel("保质期(月份数)"); // 创建一个标签显示"保质期(月份数)" - lifeTF = new JTextField(15); // 创建一个文本框用于输入保质期,宽度为15 - lifePanel.add(lifeLabel); // 将标签添加到面板 - lifePanel.add(lifeTF); // 将文本框添加到面板 - - - - sumPanel = new JPanel(); // 创建一个面板用于显示库存 - sumLabel = new JLabel("库存"); // 创建一个标签显示"库存" - sumTF = new JTextField(15); // 创建一个文本框用于输入库存数量,宽度为15 - sumPanel.add(sumLabel); // 将标签添加到面板 - sumPanel.add(sumTF); // 将文本框添加到面板 - -//供应商名下拉框 传递supplyid - supplyidPanel = new JPanel(); // 创建一个面板用于显示供应商信息 - supplyidLabel = new JLabel("供应商"); // 创建一个标签显示"供应商" -//supplyidTF = new JTextField(15); // 注释掉的代码,原本可能是用于输入供应商ID的文本框 - - sii=new SupplierInfImpl(); // 创建供应商信息服务的实例 - this.asuperlier=sii.findNameSupplier(); // 获取所有供应商名称的列表 - this.superlier=new String[asuperlier.size()]; // 创建一个字符串数组用于存储供应商名称 - for(int i=0;i(superlier); // 创建一个下拉框组件,用于选择供应商 - combo1.addItemListener(new MyItemListener1()); // 为下拉框添加项目监听器 - supplyidPanel.add(supplyidLabel); // 将标签添加到面板 - supplyidPanel.add(combo1); // 将下拉框添加到面板 - -/* id2Panel = new JPanel(); -id2Label = new JLabel("分类id"); -id2TF = new JTextField(id2,15); -id2Panel.add(id2Label); -id2Panel.add(id2TF);*/ -//类名下拉框 - name2Panel = new JPanel(); // 创建一个面板用于显示类名 - name2Label = new JLabel("类名"); // 创建一个标签显示"类名" - pci=new prodCatalogImpl(); // 创建产品目录服务的实例 - this.alog=pci.findNameProdCatalog(); // 获取所有产品目录名称的列表 - this.log=new String[alog.size()]; // 创建一个字符串数组用于存储产品目录名称 - for(int i=0;i(log); // 创建一个下拉框组件,用于选择产品目录 - combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 - name2Panel.add(name2Label); // 将标签添加到面板 - name2Panel.add(combo); // 将下拉框添加到面板 - - addressPanel = new JPanel(); // 创建一个面板用于显示地址 - addressLabel = new JLabel("地址"); // 创建一个标签显示"地址" - addressTF = new JTextField(15); // 创建一个文本框用于输入地址,宽度为15 - addressPanel.add(addressLabel); // 将标签添加到面板 - addressPanel.add(addressTF); // 将文本框添加到面板 - - contactPanel = new JPanel(); // 创建一个面板用于显示联系方式 - contactLabel = new JLabel("电话"); // 创建一个标签显示"电话" - contactTF = new JTextField(15); // 创建一个文本框用于输入电话,宽度为15 - contactPanel.add(contactLabel); // 将标签添加到面板 - contactPanel.add(contactTF); // 将文本框添加到面板 - - opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 - saveBtn = new JButton("保存"); // 创建一个保存按钮 - cancelBtn = new JButton("取消"); // 创建一个取消按钮 - saveBtn.addActionListener(this); // 为保存按钮添加动作监听器 - cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 - opePanel.add(saveBtn); // 将保存按钮添加到面板 - opePanel.add(cancelBtn); // 将取消按钮添加到面板 - - Container container = getContentPane(); // 获取对话框的内容面板 - container.add(idPanel); // 将商品编号面板添加到内容面板 - container.add(namePanel); // 将名称面板添加到内容面板 - container.add(inpricePanel); // 将进货单价面板添加到内容面板 - container.add(outpricePanel); // 将购买单价面板添加到内容面板 - container.add(lifePanel); // 将保质期面板添加到内容面板 - container.add(sumPanel); // 将库存面板添加到内容面板 - container.add(supplyidPanel); // 将供应商面板添加到内容面板 -//container.add(id2Panel); // 注释掉的代码,原本可能是用于添加分类ID面板 - container.add(name2Panel); // 将类名面板添加到内容面板 - container.add(opePanel); // 将操作按钮面板添加到内容面板 - - } - - @Override - public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 - Object source = e.getSource(); // 获取事件源 - if (source == saveBtn) { // 如果事件源是保存按钮 - // 思路获取数据 - // 保存到数据库 - // 关闭对话框 - // 刷新table - - String name = nameTF.getText(); // 获取名称文本框的内容 - String id = idTF.getText(); // 获取商品编号文本框的内容 - float inprice = Float.parseFloat((inpriceTF.getText())); // 将进货单价文本框的内容转换为浮点数 - float outprice = Float.parseFloat(outpriceTF.getText()); // 将销售单价文本框的内容转换为浮点数 - int life = Integer.parseInt(lifeTF.getText()); // 将保质期文本框的内容转换为整数 - int sum = Integer.parseInt(sumTF.getText()); // 将库存文本框的内容转换为整数 - - // TODO 参数校验 - if (this.production == null) { // 如果production对象为空,表示是添加新商品 - if(supplyid==-1){ // 如果供应商ID为-1,表示商品检索出错 - JOptionPane.showMessageDialog(this, "商品检索出错", "提示", - JOptionPane.ERROR_MESSAGE); // 显示错误消息 - return; // 退出方法 - } - if(supplyid==0){ // 如果供应商ID为0,表示未选择商品名 - JOptionPane.showMessageDialog(this, "请选择商品名", "提示", - JOptionPane.ERROR_MESSAGE); // 显示错误消息 - return; // 退出方法 - } - if(id2.equals("0")){ // 如果分类ID为"0",表示未选择商品类 - JOptionPane.showMessageDialog(this, "请选择商品类", "提示", - JOptionPane.ERROR_MESSAGE); // 显示错误消息 - return; // 退出方法 - } - - Production production = new Production(); // 创建新的Production对象 - production.setId(id); // 设置商品编号 - production.setName(name); // 设置商品名称 - production.setInPrice(inprice); // 设置进货单价 - production.setOutPrice(outprice); // 设置销售单价 - production.setLife(life); // 设置保质期 - production.setSum(sum); // 设置库存 - production.setSupplyId(supplyid); // 设置供应商ID - production.setId2(id2); // 设置分类ID - production.setName2(name2); // 设置分类名称 - int result = productionService.addProduction(production); // 调用服务添加商品 - // int result = 1; // 注释掉的代码,可能是用于测试 - if (result == 1) { // 如果添加成功 - - JOptionPane.showMessageDialog(this, "添加成功", "提示", - JOptionPane.INFORMATION_MESSAGE); // 显示成功消息 - this.dispose(); // 关闭对话框 - } else if(result == 2){ // 如果返回值为2,表示已存在该商品 - JOptionPane.showMessageDialog(this, "已存在该商品", "提示", - JOptionPane.ERROR_MESSAGE); // 显示错误消息 - } - else { // 如果添加失败 - JOptionPane.showMessageDialog(this, "出错!添加失败", "提示", - JOptionPane.ERROR_MESSAGE); // 显示错误消息 - - } - }/*else{ - //更新 - SupplierInf supplierInf= new SupplierInf(); - supplierInf.setName(name); - supplierInf.setAddress(address); - supplierInf.setContact(contact); - supplierInf.setId(this.supplierInf.getId()); - - int result = supplierInfService.updateSupplierInf(supplierInf); - if(result==1){ - JOptionPane.showMessageDialog(this, "更新成功", "提示", - JOptionPane.INFORMATION_MESSAGE); - } - }*/ - - } else if (source == cancelBtn) { // 如果事件源是取消按钮 - - this.dispose(); // 关闭对话框 - } - } - - // 定义一个内部类MyItemListener实现ItemListener接口 - public class MyItemListener implements ItemListener { - - @Override - public void itemStateChanged(ItemEvent e) { // 实现itemStateChanged方法 - JComboBox cb = (JComboBox) e.getSource(); // 获取事件源,即下拉框组件 - name2 = (String) cb.getSelectedItem(); // 获取选中的商品类名称 - pci =new prodCatalogImpl(); // 创建商品分类服务实现类对象 - for(int i=0;i storageRecords; // 声明一个Vector,用于存储存储记录列表 - private StorageRecord storageRecord ; // 声明一个StorageRecord对象,用于存储单条记录 - - String oNumber ;/*订单号*/ // 声明一个字符串变量,用于存储订单号 - - public void allStoragrRecord() { // 定义一个方法,用于获取所有存储记录 - //将添加的商品加入到静态变量Vector数组中 - /*prod = InDialog.getProduction();*/ - storageRecords = srDao.findAllStorageRecord(); // 调用srDao的方法获取所有存储记录并赋值给storageRecords - } - - - @Override - public int getRowCount() { // 重写getRowCount方法,返回表格的行数 - return storageRecords.size(); // 返回storageRecords的大小,即记录的数量 - } - -/* public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); - }*/ - - @Override - public int getColumnCount() { // 重写getColumnCount方法,返回表格的列数 - return columnName.length; // 返回columnName数组的长度,即列的数量 - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { // 重写getValueAt方法,返回指定单元格的值 - storageRecord = storageRecords.get(rowIndex); // 获取指定行的存储记录 -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - oNumber=storageRecord.getTheNumber(); // 获取订单号并赋值给oNumber - if(columnIndex==0) { - return storageRecord.getTheNumber(); // 返回订单号 - }else if(columnIndex==1) { - return storageRecord.getcDate(); // 返回操作时间 - }else if(columnIndex==2) { - return storageRecord.getId(); // 返回商品编号 - }else if(columnIndex==3) { - return storageRecord.getExecute(); // 返回进货/出货操作 - }else if(columnIndex==4) { - return storageRecord.getNum(); // 返回数量 - }else { - return null; // 如果列索引不匹配,返回null - } - } - - - - - @Override - public String getColumnName(int column) { // 重写getColumnName方法,返回指定列的列名 - return columnName[column]; // 返回columnName数组中指定索引的值 - } - - - -} diff --git a/branch_zyx/My_branch/StorageTableModel.java b/branch_zyx/My_branch/StorageTableModel.java deleted file mode 100644 index 43f6f91..0000000 --- a/branch_zyx/My_branch/StorageTableModel.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.lingnan.supermarket.table; // 包声明,指定当前类所在的包 - -import java.util.List; // 导入List接口,用于表示列表 -import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 - -import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 - -import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 -import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 -import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 - - - -public class StorageTableModel extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于存储表格数据模型 - - private String [] columnName = {"id","名称","保质期","数量","类别","供应商编号"}; // 定义列名数组,用于表格的列标题 - - private productionImpl prodDao = new productionImpl(); // 创建productionImpl对象,用于操作产品数据 - - private Vector prods; // 声明一个Vector,用于存储Production对象列表 - - public void all() { - // 查找全部数据,并更新prods向量 - prods = prodDao.findAllproduction(); - } - - public void Byname(Production p) { - // 根据产品名称查找数据,并更新prods向量 - prods = prodDao.findproduction(p.getName()); - } - - @Override - public int getRowCount() { - // 获取表格的行数,即prods向量的元素数量 - return prods.size(); - } - - @Override - public int getColumnCount() { - // 获取表格的列数,即columnName数组的长度 - return columnName.length; - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - // 获取指定行和列的单元格值 - Production prod = prods.get(rowIndex); // 获取指定行的Production对象 - if(columnIndex==0) { - return prod.getId(); // 返回产品ID - }else if(columnIndex==1) { - return prod.getName(); // 返回产品名称 - }else if(columnIndex==2) { - return prod.getLife(); // 返回产品保质期 - }else if(columnIndex==3) { - return prod.getSum(); // 返回产品数量 - }else if(columnIndex==4) { - return prod.getName2()+prod.getId2(); // 返回产品类别和ID的组合 - }else if(columnIndex==5) { - return prod.getSupplyId(); // 返回产品供应商编号 - }else { - return null; // 如果列索引不匹配,返回null - } - } - - @Override - public String getColumnName(int column) { - // 获取指定列的列名 - return columnName[column]; // 返回columnName数组中指定索引的值 - } - - - -} diff --git a/branch_zyx/My_branch/StorageView.java b/branch_zyx/My_branch/StorageView.java deleted file mode 100644 index 48d5677..0000000 --- a/branch_zyx/My_branch/StorageView.java +++ /dev/null @@ -1,228 +0,0 @@ -package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 - -import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 -import java.awt.Color; // 导入Color类,用于定义颜色 -import java.awt.FlowLayout; // 导入FlowLayout布局管理器类 -import java.awt.event.ActionEvent; // 导入事件监听接口 -import java.awt.event.ActionListener; // 导入事件监听器接口 - -import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 -import javax.swing.JButton; // 导入JButton类,用于创建按钮 -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 -import javax.swing.JLabel; // 导入JLabel类,用于创建标签 -import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 -import javax.swing.JPanel; // 导入JPanel类,用于创建面板 -import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建滚动面板 -import javax.swing.JTable; // 导入JTable类,用于创建表格 -import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 - -import com.lingnan.supermarket.dao.productionService; // 导入productionService接口 -import com.lingnan.supermarket.dao.impl.productionImpl; // 导入productionImpl实现类 -import com.lingnan.supermarket.dialog.ProductionDialog; // 导入ProductionDialog类 -import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类 -import com.lingnan.supermarket.dto.Production; // 导入Production类 -import com.lingnan.supermarket.table.StorageRecordTM; // 导入StorageRecordTM类 -import com.lingnan.supermarket.table.StorageTableModel; // 导入StorageTableModel类 -import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,用于字体设置 - -public class StorageView extends JPanel implements ActionListener{ // 创建StorageView类,继承JPanel并实现ActionListener接口 - - //上面 - private JPanel toolBarPanel; // 工具栏面板变量声明 - - private JPanel searchPanel; // 搜索面板变量声明 - private JLabel nameLabel,locationLabel; // 标签变量声明 - private JTextField nameSearchTF; // 文本框变量声明 - private JButton searchBtn; // 搜索按钮变量声明 - - private JPanel opePanel; // 操作面板变量声明 - private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn; // 按钮变量声明 - - //中间 - private JScrollPane tableScrollPane; // 表格滚动面板变量声明 - private JTable storageTable; // 表格变量声明 - - //下面 - private JPanel bottomPanel; // 底部面板变量声明 - private JLabel countInfoLabel; // 记录总数标签变量声明 - - private StorageTableModel storageTableModel ; // 表格模型变量声明 - private JFrame jFrame; // 窗口变量声明 - - private productionService productionService=new productionImpl(); // 创建productionService实例 - - public StorageView(JFrame jFrame) { // StorageView构造方法 - this.setLayout(new BorderLayout()); // 设置布局管理器为BorderLayout - initView(); // 初始化视图 - this.jFrame = jFrame; // 将传入的JFrame实例赋值给成员变量 - } - - private void initView() { // 初始化视图的方法 - - toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout - - searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout - locationLabel=new JLabel("当前位置>商品库存"); // 创建位置标签并设置文本 - locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 - locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 - nameLabel = new JLabel("商品名"); // 创建商品名标签并设置文本 - nameSearchTF = new JTextField(10); // 创建文本框并设置大小 - - - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 - - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 - updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 - backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); // 创建返回按钮并设置图标 - historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); // 创建历史按钮并设置图标 - backBtn.setVisible(false); // 设置返回按钮为不可见 - - addBtn.addActionListener(this); // 为添加按钮添加事件监听器 - updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 - deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 - searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 - backBtn.addActionListener(this); // 为返回按钮添加事件监听器 - historyBtn.addActionListener(this); // 为历史按钮添加事件监听器 - - opePanel.add(addBtn); // 将添加按钮添加到操作面板 - opePanel.add(updateBtn); // 将更新按钮添加到操作面板 - opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 - opePanel.add(backBtn); // 将返回按钮添加到操作面板 - opePanel.add(historyBtn); // 将历史按钮添加到操作面板 - - searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 - searchPanel.add(nameLabel); // 将商品名标签添加到搜索面板 - searchPanel.add(nameSearchTF); // 将商品名文本框添加到搜索面板 - searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 - - toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 - toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 - - //中间表格 - storageTableModel = new StorageTableModel(); // 创建表格模型实例 - storageTableModel.all(); // 调用表格模型的方法以加载所有数据 - storageTable = new JTable(storageTableModel); // 创建表格并设置模型 - storageTable.setFont(FontUtil.tableFont); // 设置表格字体 - storageTable.setRowHeight(50); // 设置表格行高 - - tableScrollPane = new JScrollPane(storageTable); // 创建滚动面板并添加表格 - - //下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout - countInfoLabel = new JLabel("总共"+storageTableModel.getRowCount()+"条"); // 创建记录总数标签并设置文本 - bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 - - this.add(toolBarPanel,"North"); // 将工具栏面板添加到面板的北边 - this.add(tableScrollPane,"Center"); /*将表格放到中间*/ // 将表格滚动面板添加到面板的中间 - this.add(bottomPanel,"South"); // 将底部面板添加到面板的南边 - - setVisible(true); // 设置面板为可见 - - } - - - @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); // 获取事件源 - if(addBtn==source) { // 如果事件源是添加按钮 - //添加数据的对话框 - ProductionDialog productionDialog = new ProductionDialog(jFrame); // 创建添加数据的对话框 - productionDialog.setVisible(true); // 设置对话框为可见 - refreshProduction(); // 刷新生产数据 - }else if(updateBtn==source) { // 如果事件源是更新按钮 - refreshProduction(); // 刷新生产数据 - }else if(historyBtn==source) { // 如果事件源是历史按钮 - storageRecord(); // 处理库存记录 - }else if(backBtn==source) { // 如果事件源是返回按钮 - refreshProduction(); // 刷新生产数据 - } - - else if(deleteBtn==source) { // 如果事件源是删除按钮 - //获取选中记录,删除 - int[] rowIndexs = storageTable.getSelectedRows(); // 获取表格中所有选中行的索引 - if(rowIndexs.length==0) { // 如果没有选中任何行 - JOptionPane.showMessageDialog(this,"请至少选中一条"); // 显示提示信息 - return; // 结束方法执行 - } - - int select=JOptionPane.showConfirmDialog(this,"是否删除选中的"+rowIndexs.length+"条记录","提示",JOptionPane.YES_NO_OPTION); // 显示确认删除的对话框 - if(select==JOptionPane.YES_OPTION){ // 如果用户选择是 - for(int i=0;i suppliers; - - // 定义供应商ID变量 - private int id=0; - - // 查找全部供应商信息的方法 - public void all() { - // 查找全部数据 - suppliers = supplierInfService.findAllSupplierInf(); - } - - // 根据名称查找供应商信息的方法 - public void Byname(SupplierInf supplierInf) { - // 根据名称查找供应商信息 - suppliers = supplierInfService.findByNameSupplierInf(supplierInf); - - } - - // 重写获取行数的方法 - @Override - public int getRowCount() { - // 返回供应商列表的大小 - return suppliers.size(); - } - - // 重写获取列数的方法 - @Override - public int getColumnCount() { - // 返回列名数组的长度 - return columnName.length; - } - - // 重写获取单元格值的方法 - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - // 获取指定行的供应商信息 - SupplierInf prod = suppliers.get(rowIndex); - // 根据列索引返回相应的供应商信息属性 - if(columnIndex==0) { - return prod.getId(); - }else if(columnIndex==1) { - return prod.getName(); - }else if(columnIndex==2) { - return prod.getAddress(); - }else if(columnIndex==3) { - return prod.getContact(); - }else if(columnIndex==4){ - return prod.getEmail(); - } - else { - return null; - } - } - - // 重写获取列名的方法 - @Override - public String getColumnName(int column) { - // 返回指定列索引的列名 - return columnName[column]; - } - -/* - public int getId() { - return id; - } - public int getValueAt(int rowIndex){ - SupplierInf supplierInf = suppliers.get(rowIndex); - id=suppliers.get(rowIndex).getId(); - //System.out.println("rowIndex"+rowIndex); - //System.out.println("columnIndex"+columnIndex); - return supplierInf.getId(); - } - - */ - - - -} diff --git a/branch_zyx/My_branch/SupplierView.java b/branch_zyx/My_branch/SupplierView.java deleted file mode 100644 index bf0d059..0000000 --- a/branch_zyx/My_branch/SupplierView.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 - -import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 -import java.awt.Color; // 导入Color类,用于定义颜色 -import java.awt.FlowLayout; // 导入FlowLayout布局管理器类,用于流式布局 -import java.awt.event.ActionEvent; // 导入ActionEvent类,用于处理动作事件 -import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现事件监听 - -import javax.swing.ImageIcon; // 导入ImageIcon类,用于处理图片 -import javax.swing.JButton; // 导入JButton类,用于创建按钮 -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 -import javax.swing.JLabel; // 导入JLabel类,用于创建标签 -import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 -import javax.swing.JPanel; // 导入JPanel类,用于创建面板 -import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建带滚动条的容器 -import javax.swing.JTable; // 导入JTable类,用于创建表格 -import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 - -import com.lingnan.supermarket.dao.SupplierInfService; // 导入供应商信息服务的接口 -import com.lingnan.supermarket.dao.impl.SupplierInfImpl; // 导入供应商信息服务的实现类 -import com.lingnan.supermarket.dialog.SupplierInfDialog; // 导入供应商信息对话框类 -import com.lingnan.supermarket.dto.SupplierInf; // 导入供应商信息数据传输对象 -import com.lingnan.supermarket.table.SupplierTableModel; // 导入供应商信息表格模型类 -import com.lingnan.supermarket.utils.FontUtil; // 导入字体工具类 - -public class SupplierView extends JPanel implements ActionListener{ // 定义一个公共类SupplierView,继承JPanel并实现ActionListener接口 - - //上面 - private JPanel toolBarPanel; // 工具栏面板的私有成员变量 - - private JPanel searchPanel; // 搜索面板的私有成员变量 - private JLabel nameLabel,locationLabel; // 标签的私有成员变量,用于显示文本 - private JTextField nameSearchTF; // 文本框的私有成员变量,用于输入搜索内容 - private JButton searchBtn; // 搜索按钮的私有成员变量 - - private JPanel opePanel; // 操作面板的私有成员变量 - private JButton addBtn,updateBtn,deleteBtn; // 按钮的私有成员变量,用于添加、更新、删除操作 - - //中间 - private JScrollPane tableScrollPane; // 带滚动条的表格面板的私有成员变量 - private JTable supplierTable; // 表格的私有成员变量,用于显示供应商信息 - - //下面 - private JPanel bottomPanel; // 底部面板的私有成员变量 - private JLabel countInfoLabel; // 标签的私有成员变量,用于显示记录总数信息 - - private SupplierTableModel supplierTableModel; // 供应商信息表格模型的私有成员变量 - private JFrame jFrame; // 窗口的私有成员变量 - private SupplierInfService supplierInfService = new SupplierInfImpl(); // 供应商信息服务的实例化对象 - - public SupplierView(JFrame jFrame) { // SupplierView类的构造方法,接收一个JFrame参数 - this.setLayout(new BorderLayout()); // 设置面板的布局为BorderLayout - initView(); // 调用初始化视图的方法 - this.jFrame = jFrame; // 将传入的JFrame窗口对象赋值给类的成员变量 - } - - private void initView() { // 初始化视图的私有方法 - - toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout - - searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout - locationLabel=new JLabel("当前位置>供应商"); // 创建标签并设置文本为当前位置信息 - locationLabel.setFont(new FontUtil().userFont); // 设置标签的字体 - locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签的前景色(文字颜色) - nameLabel = new JLabel("公司名称"); // 创建标签并设置文本为公司名称 - nameSearchTF = new JTextField(10); // 创建文本框并设置大小为10个字符宽度 - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 - updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮 - - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 - - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 - updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 - - addBtn.addActionListener(this); // 为添加按钮添加事件监听器 - updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 - deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 - searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 - - opePanel.add(addBtn); // 将添加按钮添加到操作面板 - opePanel.add(updateBtn); // 将更新按钮添加到操作面板 - opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 - - searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 - searchPanel.add(nameLabel); // 将公司名称标签添加到搜索面板 - searchPanel.add(nameSearchTF); // 将公司名称文本框添加到搜索面板 - searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 - - - toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 - toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 - - - //中间表格 - supplierTableModel = new SupplierTableModel(); // 创建供应商表格模型对象 - supplierTableModel.all(); // 调用表格模型的方法以加载所有数据 - supplierTable = new JTable(supplierTableModel); // 创建表格并设置模型 - supplierTable.setFont(FontUtil.tableFont); // 设置表格字体 - supplierTable.setRowHeight(50); // 设置表格行高 - - tableScrollPane = new JScrollPane(supplierTable); // 创建带滚动条的容器并添加表格 - - //下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout - countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建标签并设置显示记录总数的文本 - bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 - - this.add(toolBarPanel,"North"); // 将工具栏面板添加到主面板的北边 - this.add(tableScrollPane,"Center"); // 将带滚动条的表格容器添加到主面板的中间 - this.add(bottomPanel,"South"); // 将底部面板添加到主面板的南边 - - setVisible(true); // 设置主面板可见(通常不需要,因为主面板会在添加到窗口时自动设置为可见) - } - - @Override - public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 - Object source = e.getSource(); // 获取事件源 - if(addBtn==source) { // 如果事件源是添加按钮 - SupplierInfDialog supplierInfDialog = new SupplierInfDialog(jFrame, null); // 创建供应商信息对话框 - supplierInfDialog.setVisible(true); // 设置对话框可见 - refreshSupplier(); // 刷新供应商信息 - }else if(updateBtn==source) { // 如果事件源是更新按钮 - refreshSupplier(); // 刷新供应商信息 - }else if(deleteBtn==source) { // 如果事件源是删除按钮 - //获取选中记录 - int rowIndex = supplierTable.getSelectedRow(); // 获取表格中选中的行索引 - if(rowIndex==-1) { // 如果没有行被选中 - JOptionPane.showMessageDialog(this,"请选中一条"); // 显示提示信息 - return; // 结束方法执行 - } - int id = (Integer)supplierTable.getValueAt(rowIndex,0); // 获取选中行的ID - int select=JOptionPane.showConfirmDialog(this,"是否删除id="+id,"提示",JOptionPane.YES_NO_OPTION); // 显示确认删除的对话框并获取用户的选择 - if(select==JOptionPane.YES_OPTION){ // 如果用户在确认对话框中选择“是” - if(supplierInfService.deleteSupplierInf(id)==1) { // 尝试删除供应商信息,如果成功返回1 - JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示删除成功的消息 - refreshSupplier(); // 刷新供应商信息 - }else { - JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); // 显示删除失败的消息 - } - } - }else if(searchBtn==source){ // 如果事件源是搜索按钮 - System.out.println("搜索"); // 打印搜索操作信息到控制台 - refreshFindRname(); // 调用方法刷新搜索结果 - } - } - // 根据名称刷新供应商信息的方法 - public void refreshFindRname() { - String name = nameSearchTF.getText(); // 获取搜索文本框中的文本 - SupplierInf supplierInf = new SupplierInf(); // 创建供应商信息对象 - supplierInf.setName(name); // 设置供应商名称为搜索文本 - - - supplierTableModel = new SupplierTableModel(); // 创建新的供应商表格模型 - supplierTableModel.Byname(supplierInf); // 调用表格模型的方法按名称查询供应商信息 - - supplierTable.setModel(supplierTableModel); // 更新表格模型以显示查询结果 - - refreshCount(); // 刷新记录总数 - } - // 刷新供应商信息的方法 - public void refreshSupplier() { - supplierTableModel = new SupplierTableModel(); // 创建新的供应商表格模型 - supplierTableModel.all(); // 加载所有供应商信息 - supplierTable.setModel(supplierTableModel); // 更新表格模型以显示所有供应商信息 - - refreshCount(); // 刷新记录总数 - } - // 刷新记录总数的方法 - public void refreshCount(){ - bottomPanel.removeAll(); // 清除底部面板上的所有组件 - countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建新的标签显示记录总数 - bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 - } - -} From ad2c3c0b1d268a3c9f3c5260459fac1e086cc00f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E9=83=91=E4=BA=A6=E6=AD=86=E2=80=9D?= <“kttsj2257wy@163.com”> Date: Thu, 12 Dec 2024 13:08:50 +0800 Subject: [PATCH 3/4] branch --- .../lingnan/supermarket/componet/BGPanel.java | 39 +- .../lingnan/supermarket/dao/UserService.java | 28 +- .../supermarket/dao/impl/BufferImpl.java | 950 ++++++++---------- .../supermarket/dao/impl/SupplierInfImpl.java | 350 +++---- .../supermarket/dao/impl/UserServiceImpl.java | 401 ++++---- .../dao/impl/inOrderServiceImpl.java | 351 +++---- .../dao/impl/inRecordServiceImpl.java | 250 +++-- .../supermarket/dao/inOrderService.java | 11 +- .../dialog/ChangeStatusDialog.java | 311 +++--- .../supermarket/dialog/ChangeSumDialog.java | 149 +-- .../lingnan/supermarket/dialog/InDialog.java | 339 ++++--- .../supermarket/dialog/ProductionDialog.java | 505 +++++----- .../supermarket/dialog/SupplierInfDialog.java | 215 ++-- .../supermarket/dialog/UserDialog.java | 146 ++- .../supermarket/dialog/UserInfDialog.java | 177 +--- .../com/lingnan/supermarket/dto/InOrder.java | 62 +- .../com/lingnan/supermarket/dto/InRecord.java | 44 +- .../lingnan/supermarket/dto/ProdCatalog.java | 23 +- .../supermarket/dto/StorageRecord.java | 72 +- .../lingnan/supermarket/dto/SupplierInf.java | 40 +- .../src/com/lingnan/supermarket/dto/User.java | 53 +- .../lingnan/supermarket/table/InOrderTM.java | 133 +-- .../lingnan/supermarket/table/InRecordTM.java | 103 +- .../supermarket/table/InTableModel.java | 125 ++- .../supermarket/table/ProdCatalogTM.java | 66 +- .../supermarket/table/StorageRecordTM.java | 82 +- .../supermarket/table/StorageTableModel.java | 67 +- .../supermarket/table/SupplierTableModel.java | 42 +- .../supermarket/table/UserTableModel.java | 111 +- .../com/lingnan/supermarket/view/Demo4.java | 122 +-- .../lingnan/supermarket/view/HomeView.java | 349 +++---- .../com/lingnan/supermarket/view/InView.java | 603 +++++++---- .../lingnan/supermarket/view/LoginView.java | 193 ++-- .../lingnan/supermarket/view/MainView.java | 932 +++++++++-------- .../supermarket/view/ProdCatalogView.java | 286 +++--- .../lingnan/supermarket/view/StorageView.java | 390 +++---- .../lingnan/supermarket/view/SuperView.java | 56 +- .../supermarket/view/SupplierView.java | 316 +++--- .../lingnan/supermarket/view/UserView.java | 236 ++--- 39 files changed, 4304 insertions(+), 4424 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/componet/BGPanel.java b/Supermarket/src/com/lingnan/supermarket/componet/BGPanel.java index a953dc7..8ea3ea2 100644 --- a/Supermarket/src/com/lingnan/supermarket/componet/BGPanel.java +++ b/Supermarket/src/com/lingnan/supermarket/componet/BGPanel.java @@ -1,46 +1,35 @@ package com.lingnan.supermarket.componet; + import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; + import javax.swing.JPanel; public class BGPanel extends JPanel{ + private Image image; - public BGPanel(Image image) { - // 定义一个构造方法,接收一个Image类型的参数image,用于创建BGPanel对象时传入要显示的图像 this.image = image; - // 将传入的参数image赋值给类的成员变量image - + int width = Toolkit.getDefaultToolkit().getScreenSize().width; - // 通过默认工具包(Toolkit)获取屏幕的宽度,存储在局部变量width中 int height = Toolkit.getDefaultToolkit().getScreenSize().height; - // 通过默认工具包(Toolkit)获取屏幕的高度,存储在局部变量height中 this.setSize(width, height); - // 设置该面板(BGPanel)的大小为整个屏幕的大小,即宽度和高度分别为获取到的屏幕宽高 } - - public BGPanel(Image image, int width, int height) { - // 定义另一个构造方法,接收一个Image类型的参数image以及表示宽度和高度的两个int类型参数,用于更灵活地创建BGPanel对象并指定其大小 + + public BGPanel(Image image,int width,int height) { this.image = image; - // 将传入的参数image赋值给类的成员变量image - + + this.setSize(width, height); - // 设置该面板(BGPanel)的大小为传入的指定宽度width和指定高度height } - - + + @Override protected void paintComponent(Graphics g) { - // 重写JPanel类中的paintComponent方法,用于绘制面板上的图像 super.paintComponent(g); - // 调用父类(JPanel)的paintComponent方法,以确保完成一些默认的绘制操作,比如背景清除等 - - g.drawImage(image, 0, 0, getWidth(), getHeight(), this); - // 使用传入的Graphics对象g在面板上绘制图像,参数含义如下: - // image:要绘制的图像对象,就是之前保存的成员变量image - // 0, 0:表示在面板上绘制图像的起始坐标(x坐标和y坐标),这里从面板的左上角(0, 0)位置开始绘制 - // getWidth(), getHeight():获取当前面板的宽度和高度,用于指定绘制图像时按照面板的实际大小进行拉伸或缩放,确保图像填满整个面板 - // this:表示图像观察者,用于接收图像绘制过程中的相关通知等 + g.drawImage(image,0,0,getWidth(),getHeight(),this); + } -} \ No newline at end of file + +} diff --git a/Supermarket/src/com/lingnan/supermarket/dao/UserService.java b/Supermarket/src/com/lingnan/supermarket/dao/UserService.java index 50ce43d..119d626 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/UserService.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/UserService.java @@ -1,27 +1,19 @@ package com.lingnan.supermarket.dao; + import java.util.Vector; import com.lingnan.supermarket.dto.User; -// 用户服务接口,定义了一系列与用户操作相关的方法 -public interface UserService { - - // 查询所有用户的方法,返回一个存储用户对象的Vector数组 - Vector allUser(); - - // 根据用户真实姓名查找用户的方法,返回一个存储匹配用户对象的Vector数组 - Vector findByrnameUser(User user); - - // 用户登录方法,传入用户名、密码和用户级别参数,返回一个User对象(可能表示登录成功的用户信息) - User login(String loginName, String password, int usuper); - - // 添加用户的方法,传入一个User对象,返回一个整数表示添加操作是否成功(1表示成功,0表示失败) +public interface UserService { + + Vector allUser (); + Vector findByrnameUser(User user); + User login(String loginName,String password,int usuper); int addUser(User user); - - // 根据用户id删除用户记录的方法,传入用户id,返回一个整数表示删除操作是否成功(1表示成功,0表示失败) int deleteUser(int id); - - // 根据用户id更新用户信息的方法,传入一个User对象,返回一个整数表示更新操作是否成功(1表示成功,0表示失败) + + //根据所给的id改 int updateByIdUser(User user); -} \ No newline at end of file + +} diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/BufferImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/BufferImpl.java index 6133106..35da321 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/BufferImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/BufferImpl.java @@ -1,122 +1,122 @@ package com.lingnan.supermarket.dao.impl; -import com.lingnan.supermarket.dao.BufferService; -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.utils.JDBCUtil; - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Vector; -// 实现BufferService接口的缓冲区操作类 +import com.lingnan.supermarket.dao.BufferService; +import com.lingnan.supermarket.dto.Buffer; +import com.lingnan.supermarket.dto.Production; +import com.lingnan.supermarket.utils.JDBCUtil; + public class BufferImpl implements BufferService { + + + + /*------------------------收银出货模块-----------------------*/ /*返回出货缓冲表所有delmark=1的记录并排序*/ - // 获取所有出货缓冲区的记录 public Vector allOutBuffer(){ - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet=null; // 初始化结果集对象 - Vector v = new Vector(); // 创建一个向量用于存储Buffer对象 - Buffer Buffer; // 声明一个Buffer对象 + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet=null; + Vector v = new Vector(); + Buffer Buffer; try { - pstmt = conn.prepareStatement("select * from OutBuffer "); // 准备SQL查询语句 - resultSet = pstmt.executeQuery(); // 执行查询 - while(resultSet.next()) { // 遍历结果集 - Buffer = new Buffer(); // 创建一个新的Buffer对象 - Buffer.setId(resultSet.getString("id")); // 设置商品ID - Buffer.setName(resultSet.getString("name")); // 设置商品名称 - Buffer.setInPrice(resultSet.getFloat("inPrice")); // 设置进货价格 - Buffer.setOutPrice(resultSet.getFloat("OutPrice")); // 设置出货价格 - Buffer.setLife(resultSet.getInt("life")); // 设置商品保质期 - Buffer.setSum(resultSet.getInt("sum")); // 设置商品数量 - Buffer.setSupplyId(resultSet.getInt("supplyId")); // 设置供应商ID - Buffer.setId2(resultSet.getString("id2")); // 设置商品类别ID - Buffer.setName2(resultSet.getString("name2")); // 设置商品类别名称 - Buffer.setPrice(resultSet.getFloat("price")); // 设置商品总价 - Buffer.setDelmark(resultSet.getInt("delmark")); // 设置删除标记 - v.add(Buffer); // 将Buffer对象添加到向量中 + pstmt = conn.prepareStatement("select * from OutBuffer "); + resultSet = pstmt.executeQuery(); + while(resultSet.next()) { + Buffer = new Buffer(); + Buffer.setId(resultSet.getString("id")); + Buffer.setName(resultSet.getString("name")); + Buffer.setInPrice(resultSet.getFloat("inPrice")); + Buffer.setOutPrice(resultSet.getFloat("OutPrice")); + Buffer.setLife(resultSet.getInt("life")); + Buffer.setSum(resultSet.getInt("sum")); + Buffer.setSupplyId(resultSet.getInt("supplyId")); + Buffer.setId2(resultSet.getString("id2")); + Buffer.setName2(resultSet.getString("name2")); + Buffer.setPrice(resultSet.getFloat("price")); + Buffer.setDelmark(resultSet.getInt("delmark")); + v.add(Buffer); } - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + + } catch (SQLException e) { + e.printStackTrace(); + }finally { + JDBCUtil.close(resultSet, pstmt, conn); } - return v; // 返回存储所有Buffer对象的向量 + return v; } /*通过id查找返回boolean*/ - // 根据ID查找出货缓冲区的记录 - public Buffer findOutBufferbyId(String id) + public Buffer findOutBufferbyId(String id) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet=null; // 初始化结果集对象 - Buffer buffer = new Buffer(); // 创建一个新的Buffer对象 - try { - pstmt = conn.prepareStatement("select * from OutBuffer where id=? "); // 准备SQL查询语句 - pstmt.setString(1, id); // 设置查询参数 - resultSet = pstmt.executeQuery(); // 执行查询 - - if(resultSet.next()) { // 如果找到对应记录 - buffer.setId(resultSet.getString("id")); // 设置商品ID - buffer.setName(resultSet.getString("name")); // 设置商品名称 - buffer.setInPrice(resultSet.getFloat("inPrice")); // 设置进货价格 - buffer.setOutPrice(resultSet.getFloat("OutPrice")); // 设置出货价格 - buffer.setLife(resultSet.getInt("life")); // 设置商品保质期 - buffer.setSum(resultSet.getInt("sum")); // 设置商品数量 - buffer.setSupplyId(resultSet.getInt("supplyId")); // 设置供应商ID - buffer.setId2(resultSet.getString("id2")); // 设置商品类别ID - buffer.setName2(resultSet.getString("name2")); // 设置商品类别名称 - buffer.setPrice(resultSet.getFloat("price")); // 设置商品总价 - buffer.setDelmark(resultSet.getInt("delmark")); // 设置删除标记 - flag = true; // 设置标志为true - }else { - return null; // 没有找到该商品,返回null - } - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet=null; + Buffer buffer = new Buffer(); + try { + pstmt = conn.prepareStatement("select * from OutBuffer where id=? "); + pstmt.setString(1, id); + resultSet = pstmt.executeQuery(); + + if(resultSet.next()) { + buffer.setId(resultSet.getString("id")); + buffer.setName(resultSet.getString("name")); + buffer.setInPrice(resultSet.getFloat("inPrice")); + buffer.setOutPrice(resultSet.getFloat("OutPrice")); + buffer.setLife(resultSet.getInt("life")); + buffer.setSum(resultSet.getInt("sum")); + buffer.setSupplyId(resultSet.getInt("supplyId")); + buffer.setId2(resultSet.getString("id2")); + buffer.setName2(resultSet.getString("name2")); + buffer.setPrice(resultSet.getFloat("price")); + buffer.setDelmark(resultSet.getInt("delmark")); + flag = true; + }else { + return null; } - return buffer; // 返回找到的Buffer对象 + + } catch (SQLException e) { + e.printStackTrace(); + }finally { + JDBCUtil.close(resultSet, pstmt, conn); } + return buffer; +} /*如果缓冲区没有那就把整条记录插入插入操作*/ - // 向出货缓冲区添加新商品记录 public boolean addOutBufferNewProd(String id,int sum) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet=null; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet=null; try { - pstmt = conn.prepareStatement("call InsertOutBuffer(?,?) "); // 准备存储过程调用语句 - pstmt.setString(1, id); // 设置商品ID参数 - pstmt.setInt(2, sum); // 设置商品数量参数 - - - if( pstmt.executeUpdate()==1) { // 执行更新操作 - flag = true; // 如果成功执行插入,设置标志为true + pstmt = conn.prepareStatement("call InsertOutBuffer(?,?) "); + pstmt.setString(1, id); + pstmt.setInt(2, sum); + + + if( pstmt.executeUpdate()==1) { + flag = true; } - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + + } catch (SQLException e) { + e.printStackTrace(); + }finally { + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回插入结果标志 + return flag; } - - + + /*根据商品id获取sum和outprice public Buffer findOutBufferSumAndOutPrice(String id) { Buffer Buffer = new Buffer(); @@ -127,13 +127,13 @@ public class BufferImpl implements BufferService { pstmt = conn.prepareStatement("select * from OutBuffer where id=? "); pstmt.setString(1, id); resultSet = pstmt.executeQuery(); - + if(resultSet.next()) { Buffer.setSum(resultSet.getInt("sum")); Buffer.setOutPrice(resultSet.getFloat("OutPrice")); } - + } catch (SQLException e) { e.printStackTrace(); }finally { @@ -143,351 +143,320 @@ public class BufferImpl implements BufferService { } */ - + /*如果delmark是1,即是已经添加的商品*/ - // 更新已存在商品的出货缓冲区记录 public boolean addOutBufferExeistProd(String id,int sum,Buffer buffer){ - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null;; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - pstmt = conn.prepareStatement("update OutBuffer set sum=?,price=? where id=? "); // 准备SQL更新语句 - pstmt.setInt(1, sum+buffer.getSum()); // 设置更新后的商品数量 - pstmt.setFloat(2,( sum+buffer.getSum()*buffer.getOutPrice())); // 设置更新后的商品总价 - pstmt.setString(3, id); // 设置商品ID - if(pstmt.executeUpdate()==1) { // 执行更新操作 - flag = true; // 如果成功执行更新,设置标志为true + pstmt = conn.prepareStatement("update OutBuffer set sum=?,price=? where id=? "); + pstmt.setInt(1, sum+buffer.getSum()); + pstmt.setFloat(2,( sum+buffer.getSum()*buffer.getOutPrice())); + pstmt.setString(3, id); + if(pstmt.executeUpdate()==1) { + flag = true; } + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回更新结果标志 + return flag; } /*获得购物车总价*/ - // 计算出货缓冲区所有商品的总价 public Float OutBufferAllPrice(){ - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null;; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - pstmt = conn.prepareStatement("select sum(price) from OutBuffer "); // 准备SQL查询语句 - resultSet=pstmt.executeQuery(); // 执行查询 - if(resultSet.next()) { // 如果有结果 - return resultSet.getFloat("sum(price)"); // 返回总价 + pstmt = conn.prepareStatement("select sum(price) from OutBuffer "); + resultSet=pstmt.executeQuery(); + if(resultSet.next()) { + return resultSet.getFloat("sum(price)"); } + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return null; // 如果没有结果,返回null + return null; } - - + + /*结账后对5个表进行操作*/ - // 进行结账操作并更新数据库 public boolean Account(String number,String time,String id,int sum,Float price){ - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null;; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - pstmt = conn.prepareStatement("call Account(?,?,?,?,?)"); // 准备存储过程调用语句 - pstmt.setString(1,number); // 设置订单号 - pstmt.setString(2,time ); // 设置时间 - pstmt.setString(3,id ); // 设置商品ID - pstmt.setInt(4,sum ); // 设置商品数量 - pstmt.setFloat(5, price); // 设置商品总价 - if(pstmt.execute()) // 执行更新操作 - flag = true; // 如果成功执行更新,设置标志为true - - + pstmt = conn.prepareStatement("call Account(?,?,?,?,?)"); + pstmt.setString(1,number); + pstmt.setString(2,time ); + pstmt.setString(3,id ); + pstmt.setInt(4,sum ); + pstmt.setFloat(5, price); + if(pstmt.execute()) + flag = true; - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回更新结果标志 + return flag; } - + /*删除所有购物车*/ - // 清空出货缓冲区 public boolean DelAllOutBuffer(){ - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null;; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - pstmt = conn.prepareStatement("delete from OutBuffer"); // 准备SQL删除语句 - if(pstmt.execute()) // 执行删除操作 - flag = true; // 如果成功执行删除,设置标志为true - - - flag = true; // 如果成功执行删除,设置标志为true + pstmt = conn.prepareStatement("delete from OutBuffer"); + if(pstmt.execute()) + flag = true; - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回删除结果标志 + return flag; } /*往订单表插入一条记录*/ - // 向订单表插入一条新记录 public boolean InsertOutOrder(String number,Float allPrice,String time,String username){ - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null;; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - pstmt = conn.prepareStatement("insert into OutOrder values(?,?,?,?,?)"); // 准备SQL插入语句 - pstmt.setString(1, number); // 设置订单号 - pstmt.setFloat(2, allPrice); // 设置总价 - pstmt.setString(3, time); // 设置时间 - pstmt.setString(4, username); // 设置用户名 - pstmt.setInt(5, 1); // 设置删除标记 - if(pstmt.execute()) // 执行插入操作 - flag = true; // 如果成功执行插入,设置标志为true + pstmt = conn.prepareStatement("insert into OutOrder values(?,?,?,?,?)"); + pstmt.setString(1, number); + pstmt.setFloat(2, allPrice); + pstmt.setString(3, time); + pstmt.setString(4, username); + pstmt.setInt(5, 1); + if(pstmt.execute()) + flag = true; - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回插入结果标志 + return flag; } /*删除缓冲区OutBuffer一条记录通过id*/ - // 根据ID删除出货缓冲区的一条记录 public boolean DelOutBufferById(String id) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null; try { - pstmt = conn.prepareStatement("delete from OutBuffer where id=?"); // 准备SQL删除语句 - pstmt.setString(1, id); // 设置商品ID - if(pstmt.executeUpdate()==1) // 执行删除操作 - flag = true; // 如果成功执行删除,设置标志为true - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 + pstmt = conn.prepareStatement("delete from OutBuffer where id=?"); + pstmt.setString(1, id); + if(pstmt.executeUpdate()==1) + flag = true; + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回删除结果标志 + return flag; } - + /*更改记录通过id*/ - // 更新出货缓冲区记录 public boolean UpdateOutBufferById(String id,int sum) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null; try { - pstmt = conn.prepareStatement("update OutBuffer set sum=? where id=?"); // 准备SQL更新语句 - pstmt.setInt(1, sum); // 设置更新后的商品数量 - pstmt.setString(2, id); // 设置商品ID - if(pstmt.execute()) // 执行更新操作 - flag = true; // 如果成功执行更新,设置标志为true - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 + pstmt = conn.prepareStatement("upadte OutBuffer set sum=? where id=?"); + pstmt.setInt(1, sum); + pstmt.setString(2, id); + if(pstmt.execute()) + flag = true; + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回更新结果标志 + return flag; } - - - - - - - - - + + + + + + + + + + + + /*---------------------------进货模块----------------------------*/ - /*编辑人程文锋2210461197*/ /*返回出货缓冲表所有delmark=1的记录并排序*/ - // 获取所有进货缓冲区的记录 - /** - * 从数据库中获取所有在库的商品信息,并返回一个包含Production对象的向量。 - * - * @return 包含所有Production对象的向量 - */ public Vector allInBuffer(){ - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet=null; // 初始化结果集对象 - Vector v = new Vector(); // 创建一个向量用于存储Production对象 - Production production; // 声明一个Production对象 + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet=null; + Vector v = new Vector(); + Production production; try { - pstmt = conn.prepareStatement("select * from InBuffer "); // 准备SQL查询语句 - resultSet = pstmt.executeQuery(); // 执行查询 - while(resultSet.next()) { // 遍历结果集 - production = new Production(); // 创建一个新的Production对象 - production.setId(resultSet.getString("id")); // 设置商品ID - production.setName(resultSet.getString("name")); // 设置商品名称 - production.setInPrice(resultSet.getFloat("inPrice")); // 设置进货价格 - production.setOutPrice(resultSet.getFloat("OutPrice")); // 设置出货价格 - production.setLife(resultSet.getInt("life")); // 设置商品保质期 - production.setSum(resultSet.getInt("sum")); // 设置商品数量 - production.setSupplyId(resultSet.getInt("supplyId")); // 设置供应商ID - production.setId2(resultSet.getString("id2")); // 设置商品类别ID - production.setName2(resultSet.getString("name2")); // 设置商品类别名称 - production.setPrice(resultSet.getFloat("price")); // 设置商品总价 - production.setDelmark(resultSet.getInt("delmark")); // 设置删除标记 - v.add(production); // 将Production对象添加到向量中 + pstmt = conn.prepareStatement("select * from InBuffer "); + resultSet = pstmt.executeQuery(); + while(resultSet.next()) { + production = new Production(); + production.setId(resultSet.getString("id")); + production.setName(resultSet.getString("name")); + production.setInPrice(resultSet.getFloat("inPrice")); + production.setOutPrice(resultSet.getFloat("OutPrice")); + production.setLife(resultSet.getInt("life")); + production.setSum(resultSet.getInt("sum")); + production.setSupplyId(resultSet.getInt("supplyId")); + production.setId2(resultSet.getString("id2")); + production.setName2(resultSet.getString("name2")); + production.setPrice(resultSet.getFloat("price")); + production.setDelmark(resultSet.getInt("delmark")); + v.add(production); } - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + + } catch (SQLException e) { + e.printStackTrace(); + }finally { + JDBCUtil.close(resultSet, pstmt, conn); } - return v; // 返回存储所有Production对象的向量 + return v; } - /** - * 根据商品ID在数据库中查找对应的Buffer对象 - * @param id 商品的ID - * @return 找到的Buffer对象,若未找到则返回null - */ - public Buffer findInBufferbyId(String id) + /*通过id查找返回boolean*/ + public Buffer findInBufferbyId(String id) { - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet=null; // 初始化结果集对象 - Buffer buffer = new Buffer(); // 创建一个新的Buffer对象 - try { - pstmt = conn.prepareStatement("select * from InBuffer where id=? "); // 准备SQL查询语句 - pstmt.setString(1, id); // 设置查询参数 - resultSet = pstmt.executeQuery(); // 执行查询 - - if(resultSet.next()) { // 如果找到对应记录 - buffer.setId(resultSet.getString("id")); // 设置商品ID - buffer.setName(resultSet.getString("name")); // 设置商品名称 - buffer.setInPrice(resultSet.getFloat("inPrice")); // 设置进货价格 - buffer.setOutPrice(resultSet.getFloat("OutPrice")); // 设置出货价格 - buffer.setLife(resultSet.getInt("life")); // 设置商品保质期 - buffer.setSum(resultSet.getInt("sum")); // 设置商品数量 - buffer.setSupplyId(resultSet.getInt("supplyId")); // 设置供应商ID - buffer.setId2(resultSet.getString("id2")); // 设置商品类别ID - buffer.setName2(resultSet.getString("name2")); // 设置商品类别名称 - buffer.setPrice(resultSet.getFloat("price")); // 设置商品总价 - buffer.setDelmark(resultSet.getInt("delmark")); // 设置删除标记 - } - else { - return null; // 没有找到该商品,返回null - } - - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet=null; + Buffer buffer = new Buffer(); + try { + pstmt = conn.prepareStatement("select * from InBuffer where id=? "); + pstmt.setString(1, id); + resultSet = pstmt.executeQuery(); + + if(resultSet.next()) { + buffer.setId(resultSet.getString("id")); + buffer.setName(resultSet.getString("name")); + buffer.setInPrice(resultSet.getFloat("inPrice")); + buffer.setOutPrice(resultSet.getFloat("OutPrice")); + buffer.setLife(resultSet.getInt("life")); + buffer.setSum(resultSet.getInt("sum")); + buffer.setSupplyId(resultSet.getInt("supplyId")); + buffer.setId2(resultSet.getString("id2")); + buffer.setName2(resultSet.getString("name2")); + buffer.setPrice(resultSet.getFloat("price")); + buffer.setDelmark(resultSet.getInt("delmark")); + } + else { + return null; } - return buffer; // 返回找到的Buffer对象 - } - + + } catch (SQLException e) { + e.printStackTrace(); + }finally { + JDBCUtil.close(resultSet, pstmt, conn); + } + return buffer; +} /*如果缓冲区没有那就把整条记录插入插入操作*/ -// 向进货缓冲区添加新商品记录 - /** - * 添加新商品记录到进货缓冲区 - * - * @param id 商品ID - * @param sum 商品数量 - * @return 返回插入操作是否成功的标志 - */ public boolean addInBufferNewProd(String id,int sum) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet=null; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet=null; try { - pstmt = conn.prepareStatement("call InsertInBuffer(?,?) "); // 准备存储过程调用语句 - pstmt.setString(1, id); // 设置商品ID参数 - pstmt.setInt(2, sum); // 设置商品数量参数 - - - if( pstmt.executeUpdate()==1) { // 执行更新操作 - flag = true; // 如果成功执行插入,设置标志为true + pstmt = conn.prepareStatement("call InsertInBuffer(?,?) "); + pstmt.setString(1, id); + pstmt.setInt(2, sum); + + + if( pstmt.executeUpdate()==1) { + flag = true; } - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + + } catch (SQLException e) { + e.printStackTrace(); + }finally { + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回插入结果标志 + return flag; } - - - - // 向进货缓冲区插入一条记录 - // 此方法负责将一个商品记录插入到进货缓冲区中,并返回插入操作是否成功的标志 + public boolean insertInBuffer(Production p) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet=null; // 初始化结果集对象 - try { - pstmt = conn.prepareStatement("insert into InBuffer values(?,?,?,?,?,?,?,?,?,?,?)"); // 准备SQL插入语句 - pstmt.setString(1, p.getId()); // 设置商品ID - pstmt.setString(2, p.getName()); // 设置商品名称 - pstmt.setFloat(3, p.getInPrice()); // 设置进货价格 - pstmt.setFloat(4, p.getOutPrice()); // 设置出货价格 - pstmt.setInt(5, p.getLife()); // 设置商品保质期 - pstmt.setInt(6, p.getSum()); // 设置商品数量 - pstmt.setInt(7, p.getSupplyId()); // 设置供应商ID - pstmt.setString(8, p.getId2()); // 设置商品类别ID - pstmt.setString(9, p.getName2()); // 设置商品类别名称 - pstmt.setFloat(10,p.getPrice()); // 设置商品总价 - pstmt.setInt(11, 1); // 设置删除标记 - pstmt.executeUpdate(); // 执行插入操作 - - - if( pstmt.execute()) { // 如果成功执行插入,设置标志为true - flag = true; - } - - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet=null; + try { + pstmt = conn.prepareStatement("insert into InBuffer values(?,?,?,?,?,?,?,?,?,?,?)"); + pstmt.setString(1, p.getId()); + pstmt.setString(2, p.getName()); + pstmt.setFloat(3, p.getInPrice()); + pstmt.setFloat(4, p.getOutPrice()); + pstmt.setInt(5, p.getLife()); + pstmt.setInt(6, p.getSum()); + pstmt.setInt(7, p.getSupplyId()); + pstmt.setString(8, p.getId2()); + pstmt.setString(9, p.getName2()); + pstmt.setFloat(10,p.getPrice()); + pstmt.setInt(11, 1); + pstmt.executeUpdate(); + + + if( pstmt.execute()) { + flag = true; } - return flag; // 返回插入结果标志 - } + + } catch (SQLException e) { + e.printStackTrace(); + }finally { + JDBCUtil.close(resultSet, pstmt, conn); + } + return flag; +} + /* 根据商品id获取sum和outprice public Buffer findInBufferSumAndInPrice(String id) { Buffer Buffer = new Buffer(); @@ -498,13 +467,13 @@ public class BufferImpl implements BufferService { pstmt = conn.prepareStatement("select * from InBuffer where id=? "); pstmt.setString(1, id); resultSet = pstmt.executeQuery(); - + if(resultSet.next()) { Buffer.setSum(resultSet.getInt("sum")); Buffer.setOutPrice(resultSet.getFloat("InPrice")); } - + } catch (SQLException e) { e.printStackTrace(); }finally { @@ -512,206 +481,165 @@ public class BufferImpl implements BufferService { } return Buffer; }*/ + /*如果delmark是1,即是已经添加的商品*/ - // 更新已存在商品的进货缓冲区记录 - // 方法名称:addInBufferExeistProd - // 参数: - // id - 商品的唯一标识符 - // sum - 要添加的商品数量 - // buffer - 包含商品信息的缓冲区对象 - // 返回值:布尔值,表示更新操作是否成功 public boolean addInBufferExeistProd(String id,int sum,Buffer buffer){ - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null;; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - pstmt = conn.prepareStatement("update InBuffer set sum=?,price=? where id=? "); // 准备SQL更新语句 - pstmt.setInt(1, sum+buffer.getSum()); // 设置更新后的商品数量 - pstmt.setFloat(2,( sum+buffer.getSum()*buffer.getInPrice())); // 设置更新后的商品总价 - pstmt.setString(3, id); // 设置商品ID - if(pstmt.executeUpdate()==1) { // 执行更新操作 - flag = true; // 如果成功执行更新,设置标志为true + pstmt = conn.prepareStatement("update InBuffer set sum=?,price=? where id=? "); + pstmt.setInt(1, sum+buffer.getSum()); + pstmt.setFloat(2,( sum+buffer.getSum()*buffer.getInPrice())); + pstmt.setString(3, id); + if(pstmt.executeUpdate()==1) { + flag = true; } - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回更新结果标志 + return flag; } - /*获得购物车总价*/ -// 计算进货缓冲区所有商品的总价 -// 此方法用于计算数据库中进货缓冲区所有商品的总价,并返回相应的浮点数值。 public Float InBufferAllPrice(){ - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null;; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - pstmt = conn.prepareStatement("select sum(price) from InBuffer "); // 准备SQL查询语句 - resultSet=pstmt.executeQuery(); // 执行查询 - if(resultSet.next()) { // 如果有结果 - return resultSet.getFloat("sum(price)"); // 返回总价 + pstmt = conn.prepareStatement("select sum(price) from InBuffer "); + resultSet=pstmt.executeQuery(); + if(resultSet.next()) { + return resultSet.getFloat("sum(price)"); } + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return null; // 如果没有结果,返回null + return null; } - - + + /*结账后对5个表进行操作*/ -// 进行进货时的记录操作 - /** - * 在库存中记录进货信息的函数 - * - * @param number 订单号 - * @param time 进货时间 - * @param id 商品ID - * @param sum 商品数量 - * @param price 商品总价 - * @return 返回操作是否成功的标志 - */ public boolean Stock(String number,String time,String id,int sum,Float price){ - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null;; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - pstmt = conn.prepareStatement("call Stock(?,?,?,?,?)"); // 准备存储过程调用语句 - pstmt.setString(1,number); // 设置订单号 - pstmt.setString(2,time ); // 设置时间 - pstmt.setString(3,id ); // 设置商品ID - pstmt.setInt(4,sum ); // 设置商品数量 - pstmt.setFloat(5, price); // 设置商品总价 - if(pstmt.executeUpdate()==1) // 执行更新操作 - flag = true; // 如果成功执行更新,设置标志为true - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 - } - return flag; // 返回更新结果标志 - } + pstmt = conn.prepareStatement("call Stock(?,?,?,?,?)"); + pstmt.setString(1,number); + pstmt.setString(2,time ); + pstmt.setString(3,id ); + pstmt.setInt(4,sum ); + pstmt.setFloat(5, price); + if(pstmt.executeUpdate()==1) + flag = true; + + + } catch (SQLException e) { + e.printStackTrace(); + }finally { + JDBCUtil.close(resultSet, pstmt, conn); + } + return flag; + } + /*删除所有购物车*/ - // 清空进货缓冲区 - /** - * 从数据库中删除进货缓冲区中的所有记录 - * - * @return 返回操作是否成功的标志 - */ public boolean DelAllInBuffer(){ - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null;; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - pstmt = conn.prepareStatement("delete from InBuffer"); // 准备SQL删除语句 - if(pstmt.execute()) // 执行删除操作 - flag = true; // 如果成功执行删除,设置标志为true - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 - - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + pstmt = conn.prepareStatement("delete from InBuffer"); + if(pstmt.execute()) + flag = true; + + + + } catch (SQLException e) { + e.printStackTrace(); + }finally { + + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回删除结果标志 + return flag; } + /*删除缓冲区InBuffer一条记录通过id*/ - // 根据ID删除进货缓冲区的一条记录 - /** - * 根据商品ID删除进货缓冲区中的一条记录 - * - * @param id 商品ID - * @return 删除操作是否成功的标志 - */ public boolean DelInBufferById(String id) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null;; // 初始化结果集对象 + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - pstmt = conn.prepareStatement("delete from InBuffer where id=?"); // 准备SQL删除语句 - pstmt.setString(1, id); // 设置商品ID - if(pstmt.executeUpdate()==1) // 执行删除操作 - flag = true; // 如果成功执行删除,设置标志为true - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 + pstmt = conn.prepareStatement("delete from InBuffer where id=?"); + pstmt.setString(1, id); + if(pstmt.executeUpdate()==1) + flag = true; + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回删除结果标志 + return flag; } - - - - - - /*更改记录通过id*/ - // 更新进货缓冲区记录 - /** - * 更新进货缓冲区中指定商品ID的数量。 - * - * @param id 商品的ID - * @param sum 更新后的商品数量 - * @return 返回更新是否成功的标志 - */ -public boolean UpdateInBufferById(String id,int sum) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet = null; // 初始化结果集对象 + + + + /*更改记录通过id*/ + public boolean UpdateInBufferById(String id,int sum) { + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null; try { - pstmt = conn.prepareStatement("update InBuffer set sum=? where id=?"); // 准备SQL更新语句 - pstmt.setInt(1, sum); // 设置更新后的商品数量 - pstmt.setString(2, id); // 设置商品ID - if(pstmt.execute()) // 执行更新操作 - flag = true; // 如果成功执行更新,设置标志为true - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - }finally { // 无论是否发生异常,都会执行的代码块 + pstmt = conn.prepareStatement("upadte InBuffer set sum=? where id=?"); + pstmt.setInt(1, sum); + pstmt.setString(2, id); + if(pstmt.execute()) + flag = true; + + } catch (SQLException e) { + e.printStackTrace(); + }finally { - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回更新结果标志 + return flag; } - - /** - * 按照顺序插入订单 - * - * @param number 订单编号 - * @param allPrice 总价格 - * @param time 订单时间 - * @param username 用户名 - * @return 返回插入成功与否 - */ @Override public boolean InsertInOrder(String number, Float allPrice, String time, String username) { // TODO Auto-generated method stub - // 插入订单的操作 return false; } + + + + } + + diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/SupplierInfImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/SupplierInfImpl.java index c35f6b1..26b2dab 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/SupplierInfImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/SupplierInfImpl.java @@ -1,9 +1,5 @@ package com.lingnan.supermarket.dao.impl; -import com.lingnan.supermarket.dao.SupplierInfService; -import com.lingnan.supermarket.dto.SupplierInf; -import com.lingnan.supermarket.utils.JDBCUtil; - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -12,255 +8,211 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.Vector; +import com.lingnan.supermarket.dao.SupplierInfService; +import com.lingnan.supermarket.dto.ProdCatalog; +import com.lingnan.supermarket.dto.SupplierInf; +import com.lingnan.supermarket.dto.User; +import com.lingnan.supermarket.utils.JDBCUtil; -/** - * 供应商信息服务实现类 - * @cwf 2210461197 2024/12/1 - */ - -// 实现供应商信息服务接口的类 public class SupplierInfImpl implements SupplierInfService{ - // 查询所有供应商信息的方法 @Override - // 该方法用于查找所有未被标记为删除的供应商信息,返回一个供应商信息的向量 - // 此方法连接数据库,执行查询,并将结果封装为供应商信息对象的向量 public Vector findAllSupplierInf() { - Vector supplierInfs = new Vector(); // 创建一个向量用于存储供应商信息 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 - ResultSet resultSet=null; // 初始化结果集对象 - - String SQL = "select * from supplierInf where delmark = 1"; // SQL查询语句,选择未被标记为删除的供应商信息 - + Vector supplierInfs = new Vector(); + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + ResultSet resultSet=null; + + String SQL = "select * from supplierInf where delmark = 1"; + try { - preparedStatement = conn.prepareStatement(SQL); // 准备SQL语句 - resultSet = preparedStatement.executeQuery(); // 执行查询 - while(resultSet.next()) { // 遍历结果集 - SupplierInf supplierInf = new SupplierInf(); // 创建一个新的供应商信息对象 - supplierInf.setId(resultSet.getInt("id")); // 设置供应商ID - supplierInf.setName(resultSet.getString("name")); // 设置供应商名称 - supplierInf.setContact(resultSet.getString("contact")); // 设置供应商联系人 - supplierInf.setEmail(resultSet.getString("email")); // 设置供应商邮箱 - supplierInf.setAddress(resultSet.getString("address")); // 设置供应商地址 - supplierInf.setDelmark(resultSet.getInt("delmark")); // 设置删除标记 - supplierInfs.add(supplierInf); // 将供应商信息对象添加到向量中 + preparedStatement = conn.prepareStatement(SQL); + resultSet = preparedStatement.executeQuery(); + while(resultSet.next()) { + SupplierInf supplierInf = new SupplierInf(); + supplierInf.setId(resultSet.getInt("id")); + supplierInf.setName(resultSet.getString("name")); + supplierInf.setContact(resultSet.getString("contact")); + supplierInf.setEmail(resultSet.getString("email")); + supplierInf.setAddress(resultSet.getString("address")); + supplierInf.setDelmark(resultSet.getInt("delmark")); + supplierInfs.add(supplierInf); } - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - // 关闭数据库连接和相关资源 - JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 + + } catch (SQLException e) { + e.printStackTrace(); + } finally { + JDBCUtil.close(resultSet, preparedStatement, conn); } - return supplierInfs; // 返回存储所有供应商信息的向量 + return supplierInfs; } - // 根据供应商名称查询供应商信息的方法 @Override - // 定义一个查找供应商信息的方法,根据传入的供应商对象进行查询 - /** - * 根据供应商名称查找供应商信息 - * @param supplierInf 包含供应商名称的供应商信息对象 - * @return 返回包含查询到的供应商信息的向量 - */ public Vector findByNameSupplierInf(SupplierInf supplierInf) { //SupplierInf supplierInf = new SupplierInf(); - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - Vector v = new Vector<>(); // 创建一个向量用于存储供应商信息 - System.out.println(supplierInf.getName()); // 打印供应商名称 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 - ResultSet resultSet = null; // 初始化结果集对象 + Connection conn = JDBCUtil.getConn(); + Vector v = new Vector<>(); + System.out.println(supplierInf.getName()); + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; try { - if(!supplierInf.getName().equals("")){ // 如果供应商名称不为空 - String s='%'+supplierInf.getName()+'%'; // 构建模糊查询字符串 - preparedStatement = conn.prepareStatement("select * from supplierInf where name like ? and delmark = 1"); // 准备SQL查询语句 - preparedStatement.setString(1, s); // 设置查询参数 + if(!supplierInf.getName().equals("")){ + String s='%'+supplierInf.getName()+'%'; + preparedStatement = conn.prepareStatement("select * from supplierInf where name like ? and delmark = 1"); + preparedStatement.setString(1, s); }else - preparedStatement = conn.prepareStatement("select * from supplierInf where delmark = 1"); // 准备SQL查询语句,选择未被标记为删除的供应商信息 - - resultSet = preparedStatement.executeQuery(); // 执行查询 - while (resultSet.next()) { // 遍历结果集 - supplierInf = new SupplierInf(); // 创建一个新的供应商信息对象 - supplierInf.setId(resultSet.getInt("id")); // 设置供应商ID - supplierInf.setName(resultSet.getString("name")); // 设置供应商名称 - supplierInf.setAddress(resultSet.getString("address")); // 设置供应商地址 - supplierInf.setContact(resultSet.getString("contact")); // 设置供应商联系人 - supplierInf.setEmail(resultSet.getString("email")); // 设置供应商邮箱 - supplierInf.setDelmark(1); // 设置删除标记 - v.add(supplierInf); // 将供应商信息对象添加到向量中 - } - Iterator it=v.iterator(); // 获取向量的迭代器 - while(it.hasNext()){ // 遍历向量 - supplierInf=it.next(); // 获取下一个供应商信息对象 - System.out.println(supplierInf.getId()+" "+supplierInf.getName()+" "+supplierInf.getAddress()+" "+supplierInf.getContact()+" "+supplierInf.getEmail()+" "+supplierInf.getDelmark()+" "); // 打印供应商信息 + preparedStatement = conn.prepareStatement("select * from supplierInf where delmark = 1"); + resultSet = preparedStatement.executeQuery(); + while (resultSet.next()) { + supplierInf = new SupplierInf(); + supplierInf.setId(resultSet.getInt("id")); + supplierInf.setName(resultSet.getString("name")); + supplierInf.setAddress(resultSet.getString("address")); + supplierInf.setContact(resultSet.getString("contact")); + supplierInf.setEmail(resultSet.getString("email")); + supplierInf.setDelmark(1); + v.add(supplierInf); } - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 + Iterator it=v.iterator(); + while(it.hasNext()){ + supplierInf=it.next(); + System.out.println(supplierInf.getId()+" "+supplierInf.getName()+" "+supplierInf.getAddress()+" "+supplierInf.getContact()+" "+supplierInf.getEmail()+" "+supplierInf.getDelmark()+" "); + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + JDBCUtil.close(resultSet, preparedStatement, conn); } - return v; // 返回存储供应商信息的向量 + return v; } -// 添加供应商信息的方法 - /** - * 添加供应商信息 - * - * @param supplierInf 供应商信息对象 - * @return 插入结果标志,1表示成功,0表示失败 - */ + @Override public int addSupplierInf(SupplierInf supplierInf) { - int flag = 0; // 初始化标志为0 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 - + int flag = 0; + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + try { preparedStatement = conn.prepareStatement - ("insert into supplierInf values (null,?,?,?,?,?)"); // 准备SQL插入语句 + ("insert into supplierInf values (null,?,?,?,?,?)"); //preparedStatement.setInt(1, supplierInf.getId()); - preparedStatement.setString(1, supplierInf.getName()); // 设置供应商名称 - preparedStatement.setString(2, supplierInf.getAddress()); // 设置供应商地址 - preparedStatement.setString(3, supplierInf.getContact()); // 设置供应商联系人 - preparedStatement.setString(4, supplierInf.getEmail()); // 设置供应商邮箱 - preparedStatement.setInt(5, 1); // 设置删除标记 - preparedStatement.executeUpdate(); // 执行插入操作 - flag = 1; // 设置标志为1,表示插入成功 - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(null,preparedStatement, conn); // 关闭预编译语句和数据库连接 + preparedStatement.setString(1, supplierInf.getName()); + preparedStatement.setString(2, supplierInf.getAddress()); + preparedStatement.setString(3, supplierInf.getContact()); + preparedStatement.setString(4, supplierInf.getEmail()); + preparedStatement.setInt(5, 1); + preparedStatement.executeUpdate(); + flag = 1; + } catch (SQLException e) { + e.printStackTrace(); + } finally { + JDBCUtil.close(null,preparedStatement, conn); } - - return flag; // 返回插入结果标志 + + return flag; } - // 删除供应商信息的方法 - /** - * 删除指定ID的供应商信息 - * - * @param id 要删除的供应商ID - * @return 删除操作的结果标志,1表示成功,0表示失败 - */ + @Override public int deleteSupplierInf(int id) { - int flag = 0; // 初始化标志为0 - - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 - + int flag = 0; + + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + try { preparedStatement = conn.prepareStatement - ("delete from supplierInf where id = ?"); // 准备SQL删除语句 - preparedStatement.setInt(1, id); // 设置供应商ID - preparedStatement.executeUpdate(); // 执行删除操作 - flag = 1; // 设置标志为1,表示删除成功 - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(null,preparedStatement, conn); // 关闭预编译语句和数据库连接 + ("delete from supplierInf where id = ?"); + preparedStatement.setInt(1, id); + preparedStatement.executeUpdate(); + flag = 1; + } catch (SQLException e) { + e.printStackTrace(); + } finally { + JDBCUtil.close(null,preparedStatement, conn); } - return flag; // 返回删除结果标志 + return flag; } - // 更新供应商信息的方法 - /** - * 更新供应商信息 - * - * @param supplierInf 供应商信息对象 - * @return 更新结果标志,1表示成功,0表示失败 - */ @Override public int updateSupplierInf(SupplierInf supplierInf) { - int flag=0; // 初始化标志为0 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + int flag=0; + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; try { - preparedStatement = conn.prepareStatement("update supplierInf set name=?,address=?,contact=?,email=?,delmark=? where id = ?"); // 准备SQL更新语句 - preparedStatement.setString(1,supplierInf.getName()); // 设置供应商名称 - preparedStatement.setString(2,supplierInf.getAddress()); // 设置供应商地址 - preparedStatement.setString(3,supplierInf.getContact()); // 设置供应商联系人 - preparedStatement.setString(4, supplierInf.getEmail()); // 设置供应商邮箱 - preparedStatement.setInt(5, supplierInf.getDelmark()); // 设置删除标记 - preparedStatement.setInt(6,supplierInf.getId()); // 设置供应商ID - preparedStatement.executeUpdate(); // 执行更新操作 - flag = 1; // 设置标志为1,表示更新成功 - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(null, preparedStatement, conn); // 关闭预编译语句和数据库连接 + preparedStatement = conn.prepareStatement("update supplierInf set name=?,address=?,contact=?,email=?,delmark=? where id = ?"); + preparedStatement.setString(1,supplierInf.getName()); + preparedStatement.setString(2,supplierInf.getAddress()); + preparedStatement.setString(3,supplierInf.getContact()); + preparedStatement.setString(4, supplierInf.getEmail()); + preparedStatement.setInt(5, supplierInf.getDelmark()); + preparedStatement.setInt(6,supplierInf.getId()); + preparedStatement.executeUpdate(); + flag = 1; + + } catch (SQLException e) { + e.printStackTrace(); + } finally { + JDBCUtil.close(null, preparedStatement, conn); } - return flag; // 返回更新结果标志 + return flag; } - - - // 获取所有供应商名称的方法 - // 该方法从数据库中查询所有供应商的名称,并将其存储在一个列表中返回 + @Override public ArrayList findNameSupplier() { - Connection conn=JDBCUtil.getConn(); // 获取数据库连接 - ArrayList v = new ArrayList(); // 创建一个列表用于存储供应商名称 - SupplierInf supplierInf; // 声明一个供应商信息对象 - PreparedStatement pstmt = null; // 初始化预编译语句对象 - ResultSet resultSet=null; // 初始化结果集对象 - v.add("全部"); // 添加默认选项“全部” + Connection conn=JDBCUtil.getConn(); + ArrayList v = new ArrayList(); + SupplierInf supplierInf; + PreparedStatement pstmt = null; + ResultSet resultSet=null; + v.add("全部"); try { - pstmt = conn.prepareStatement("select * from supplierInf"); // 准备SQL查询语句 - resultSet = pstmt.executeQuery(); // 执行查询 - while(resultSet.next()){ // 遍历结果集 - - v.add(resultSet.getString("name")); // 将供应商名称添加到列表中 + pstmt = conn.prepareStatement("select * from supplierInf"); + resultSet = pstmt.executeQuery(); + while(resultSet.next()){ + + v.add(resultSet.getString("name")); } - } catch (SQLException e) { // 捕获SQL异常 + } catch (SQLException e) { // TODO Auto-generated catch block - e.printStackTrace(); // 打印异常堆栈信息 - }finally{ // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + e.printStackTrace(); + }finally{ + JDBCUtil.close(resultSet, pstmt, conn); } - - - return v; // 返回存储供应商名称的列表 + + + return v; } - // 根据供应商名称查找其ID的方法 - /** - * 根据给定的供应商名称查找对应的供应商ID。 - * 如果名称为“全部”,返回默认ID(0)。 - * 如果未找到对应的供应商,返回-1作为标志。 - * - * @param name 供应商名称 - * @return 供应商ID或标志 - */ @Override public int findIdSupplierByName(String name) { - int flag = -1; // 初始化标志为-1 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 - ResultSet resultSet= null; // 初始化结果集对象 - int id=0; // 初始化供应商ID为0 + int flag = -1; + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + ResultSet resultSet= null; + int id=0; try { - if(name.equals("全部")) // 如果供应商名称为“全部” - return id; // 返回默认ID + if(name.equals("全部")) + return id; preparedStatement = conn.prepareStatement - ("select * from supplierInf where name=?"); // 准备SQL查询语句 - preparedStatement.setString(1, name); // 设置查询参数 - resultSet=preparedStatement.executeQuery(); // 执行查询 - if(resultSet.next()){ // 如果找到对应记录 - return resultSet.getInt("id"); // 返回供应商ID + ("select * from supplierInf where name=?"); + preparedStatement.setString(1, name); + resultSet=preparedStatement.executeQuery(); + if(resultSet.next()){ + return resultSet.getInt("id"); } - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(null,preparedStatement, conn); // 关闭预编译语句和数据库连接 + + } catch (SQLException e) { + e.printStackTrace(); + } finally { + JDBCUtil.close(null,preparedStatement, conn); } - - return flag; // 返回查询结果标志 + + return flag; } + - -} \ No newline at end of file +} diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/UserServiceImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/UserServiceImpl.java index 90eb5f9..da344b5 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/UserServiceImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/UserServiceImpl.java @@ -11,283 +11,266 @@ import com.lingnan.supermarket.dao.UserService; import com.lingnan.supermarket.dto.User; import com.lingnan.supermarket.utils.JDBCUtil; -// UserServiceImpl类实现了UserService接口,用于处理与用户相关的数据库操作 public class UserServiceImpl implements UserService { - // 实现用户登录功能 + public User login(String Name, String password) { - // 获取数据库连接 - Connection conn = JDBCUtil.getConn(); - // 用于存储查询到的用户信息,初始化为null - User user = null; + Connection conn=JDBCUtil.getConn(); + User user=null; PreparedStatement pstmt = null; - ResultSet resultSet = null; - + ResultSet resultSet=null; try { - // 准备SQL语句,用于查询满足条件的用户记录 - // 条件是用户名、密码匹配且delmark为1(可能表示未删除状态) - pstmt = conn.prepareStatement("select * from User where name=? and password=? and delmark = 1"); - pstmt.setString(1, Name); - pstmt.setString(2, password); + pstmt = conn.prepareStatement("select *from User where name=? and password=? and delmark = 1"); + pstmt.setString(1,Name); + pstmt.setString(2,password); - // 执行查询操作并获取结果集 resultSet = pstmt.executeQuery(); - // 如果结果集中有下一条记录,说明找到了匹配的用户 - if (resultSet.next()) { - // 创建一个新的User对象来存储查询到的用户信息 - user = new User(); - // 输出查询到的用户信息(这里可能是用于调试目的) - System.out.println(resultSet.getInt("id") + " " + resultSet.getString("name") + " " + resultSet.getString("password") + " " + resultSet.getInt("sSuper")); - // 将查询到的用户信息设置到User对象中 + if(resultSet.next()){ + user=new User(); + System.out.println(resultSet.getInt("id")+" "+resultSet.getString("name")+" "+resultSet.getString("password")+" "+resultSet.getInt("sSuper")); user.setId(resultSet.getInt("id")); user.setUsername(resultSet.getString("name")); user.setRname(resultSet.getString("rname")); user.setPassword(resultSet.getString("password")); user.setPhone(resultSet.getString("phone")); - user.setUsuper(resultSet.getInt("sSuper")); + user.setUsuper(resultSet.getInt("sSuper")); user.setImg(resultSet.getString("img")); user.setDelmark(1); } } catch (SQLException e) { - // 捕获SQL异常并打印异常信息(这里可以考虑更完善的异常处理,比如记录日志等) + // TODO Auto-generated catch block e.printStackTrace(); - } finally { - // 关闭数据库相关资源,释放连接、语句和结果集 + }finally{ JDBCUtil.close(resultSet, pstmt, conn); } - - // 返回查询到的用户对象,如果未找到则返回null + + return user; } - // 添加用户基本信息到数据库的方法 + +//添加用户基本信息 public int addUser(User user) { - // 用于标记添加操作是否成功,初始化为0表示失败 - int flag = 0; - // 获取数据库连接 - Connection conn = JDBCUtil.getConn(); - // 设置默认的用户图片路径(这里可能需要根据实际情况进行调整) - String s = "static\\userimg\\u1.png"; - // 准备插入用户信息的SQL语句,注意values中的null是为了让数据库自动生成id(假设id是自增主键) - String SQL = "insert into User values(null,?,?,?,?,?,?,?)"; - + int flag=0; + Connection conn=JDBCUtil.getConn(); + String s="static\\userimg\\u1.png"; + String SQL="insert into User values(null,?,?,?,?,?,?,?)"; + System.out.println(SQL); - + + PreparedStatement preparedStatement = null; - ResultSet resultSet = null; - + ResultSet resultSet=null; try { - // 准备SQL语句 preparedStatement = conn.prepareStatement(SQL); - // 设置SQL语句中的参数,将用户对象的各个属性值传入 - preparedStatement.setString(1, user.getUsername()); - preparedStatement.setString(2, user.getRname()); - preparedStatement.setString(3, user.getPassword()); - preparedStatement.setString(4, user.getPhone()); - preparedStatement.setInt(5, user.getUsuper()); - preparedStatement.setString(6, s); - preparedStatement.setInt(7, 1); - // 执行插入操作 + preparedStatement.setString(1,user.getUsername()); + preparedStatement.setString(2,user.getRname()); + preparedStatement.setString(3,user.getPassword()); + preparedStatement.setString(4,user.getPhone()); + preparedStatement.setInt(5,user.getUsuper()); + preparedStatement.setString(6,s); + preparedStatement.setInt(7,1); preparedStatement.executeUpdate(); - // 如果插入成功,将标记设置为1 - flag = 1; + flag=1; } catch (SQLException e) { - // 捕获SQL异常并打印异常信息 + // TODO Auto-generated catch block e.printStackTrace(); - } finally { - // 关闭数据库相关资源 + }finally{ JDBCUtil.close(resultSet, preparedStatement, conn); } - - // 返回操作结果标记,1表示成功,0表示失败 + + return flag; } - // 查询所有用户信息的方法,返回一个存储用户对象的Vector数组 - public Vector allUser() { - // 获取数据库连接 - Connection conn = JDBCUtil.getConn(); - // 创建一个Vector来存储查询到的所有用户对象 - Vector v = new Vector<>(); - User user; - PreparedStatement pstmt = null; - ResultSet resultSet = null; - - try { - // 准备查询所有未删除用户(delmark = 1)的SQL语句 - pstmt = conn.prepareStatement("select * from User where delmark = 1"); - - // 执行查询操作并获取结果集 - resultSet = pstmt.executeQuery(); - // 遍历结果集,将每条记录转换为一个User对象并添加到Vector中 - while (resultSet.next()) { - user = new User(); - user.setId(resultSet.getInt("id")); - user.setUsername(resultSet.getString("name")); - user.setRname(resultSet.getString("rname")); - user.setPassword(resultSet.getString("password")); - user.setPhone(resultSet.getString("phone")); - user.setUsuper(resultSet.getInt("sSuper")); - user.setImg(resultSet.getString("img")); - user.setDelmark(1); - v.add(user); - } - } catch (SQLException e) { - // 捕获SQL异常并打印异常信息 - e.printStackTrace(); - } finally { - // 关闭数据库相关资源 - JDBCUtil.close(resultSet, pstmt, conn); - } - // 返回存储所有用户对象的Vector - return v; + /*查找所有用户,返回vector数组*/ + public Vector allUser(){ + Connection conn=JDBCUtil.getConn(); + Vector v = new Vector<>(); + User user ; + PreparedStatement pstmt = null; + ResultSet resultSet=null; + try { + pstmt = conn.prepareStatement("select *from User where delmark = 1"); + + resultSet = pstmt.executeQuery(); + while(resultSet.next()){ + user= new User(); + user.setId(resultSet.getInt("id")); + user.setUsername(resultSet.getString("name")); + user.setRname(resultSet.getString("rname")); + user.setPassword(resultSet.getString("password")); + user.setPhone(resultSet.getString("phone")); + user.setUsuper(resultSet.getInt("sSuper")); + user.setImg(resultSet.getString("img")); + user.setDelmark(1); + v.add(user); + } + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally{ + JDBCUtil.close(resultSet, pstmt, conn); + } + + + return v; + } + + //通过真实姓名 + public Vector findByrnameUser(User user) { + Connection conn=JDBCUtil.getConn(); + Vector v = new Vector<>(); + System.out.println(user.getRname()); + PreparedStatement pstmt = null; + ResultSet resultSet=null; + try { + if(!user.getRname().equals("")){ + + String s='%'+user.getRname()+'%'; + pstmt = conn.prepareStatement("select * from user where rname like ? and delmark = 1"); + pstmt.setString(1,s); + } + else + pstmt = conn.prepareStatement("select * from user where delmark = 1"); + + + resultSet = pstmt.executeQuery(); + while(resultSet.next()){ + user= new User(); + user.setId(resultSet.getInt("id")); + user.setUsername(resultSet.getString("name")); + user.setRname(resultSet.getString("rname")); + user.setPassword(resultSet.getString("password")); + user.setPhone(resultSet.getString("phone")); + user.setUsuper(resultSet.getInt("sSuper")); + user.setImg(resultSet.getString("img")); + user.setDelmark(1); + v.add(user); + + } + + + Iterator it=v.iterator(); + while(it.hasNext()){ + user=it.next(); + System.out.println(user.getId()+" "+user.getUsername()+" "+user.getRname()+" "+user.getPassword()+" "+user.getPhone()+" "+user.getUsuper()+" "+user.getImg()+" "+user.getDelmark()+" "); + } + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally{ + JDBCUtil.close(resultSet, pstmt, conn); + } + + + return v; + } - // 根据用户的真实姓名查找用户信息的方法,返回一个存储匹配用户对象的Vector数组 - public Vector findByrnameUser(User user) { - // 获取数据库连接 - Connection conn = JDBCUtil.getConn(); - // 创建一个Vector来存储查询到的匹配用户对象 - Vector v = new Vector<>(); - // 输出传入的用户真实姓名(可能用于调试目的) - System.out.println(user.getRname()); - PreparedStatement pstmt = null; - ResultSet resultSet = null; - - try { - // 如果传入的用户真实姓名不为空字符串 - if (!user.getRname().equals("")) { - // 构造模糊查询的条件,使用%作为通配符 - String s = "%" + user.getRname() + "%"; - // 准备根据真实姓名模糊查询用户的SQL语句,且只查询未删除的用户(delmark = 1) - pstmt = conn.prepareStatement("select * from user where rname like? and delmark = 1"); - pstmt.setString(1, s); - } else { - // 如果传入的真实姓名为空字符串,则查询所有未删除的用户 - pstmt = conn.prepareStatement("select * from user where delmark = 1"); - } - - // 执行查询操作并获取结果集 - resultSet = pstmt.executeQuery(); - // 遍历结果集,将每条记录转换为一个User对象并添加到Vector中 - while (resultSet.next()) { - user = new User(); - user.setId(resultSet.getInt("id")); - user.setUsername(resultSet.getString("name")); - user.setRname(resultSet.getString("rname")); - user.setPassword(resultSet.getString("password")); - user.setPhone(resultSet.getString("phone")); - user.setUsuper(resultSet.getInt("sSuper")); - user.setImg(resultSet.getString("img")); - user.setDelmark(1); - v.add(user); - } - - // 遍历查询到的用户对象并输出相关信息(可能用于调试目的) - Iterator it = v.iterator(); - while (it.hasNext()) { - user = it.next(); - System.out.println(user.getId() + " " + user.getUsername() + " " + user.getRname() + " " + user.getPassword() + " " + user.getPhone() + " " + user.getUsuper() + " " + user.getImg() + " " + user.getDelmark() + " "); - } - } catch (SQLException e) { - // 捕获SQL异常并打印异常信息 - e.printStackTrace(); - } finally { - // 关闭数据库相关资源 - JDBCUtil.close(resultSet, pstmt, conn); - } - - // 返回存储匹配用户对象的Vector - return v; - } - - // 根据用户id删除用户记录的方法 @Override + //按id编号删除某用户记录 public int deleteUser(int id) { - // 用于标记删除操作是否成功,初始化为0表示失败 - int flag = 0; - // 获取数据库连接 - Connection conn = JDBCUtil.getConn(); - - // 准备删除指定id用户记录的SQL语句 - String SQL = "delete from user where id=?"; - + int flag=0; + Connection conn=JDBCUtil.getConn(); + + String SQL="delete from user where id=?"; + PreparedStatement preparedStatement = null; - ResultSet resultSet = null; - + ResultSet resultSet=null; try { - // 准备SQL语句并设置要删除的用户id参数 preparedStatement = conn.prepareStatement(SQL); - preparedStatement.setInt(1, id); - - // 执行删除操作 + preparedStatement.setInt(1,id); + preparedStatement.executeUpdate(); - // 如果删除成功,将标记设置为1 - flag = 1; + flag=1; } catch (SQLException e) { - // 捕获SQL异常并打印异常信息 + // TODO Auto-generated catch block e.printStackTrace(); - } finally { - // 关闭数据库相关资源 + }finally{ JDBCUtil.close(resultSet, preparedStatement, conn); } - - // 返回操作结果标记,1表示成功,0表示失败 + + return flag; + } - // 此方法在原代码中未实现具体功能,只是按照接口定义返回null - // 可能是需要根据具体业务需求进一步完善的登录方法,传入了用户名、密码和用户级别参数 + + + + + + @Override public User login(String loginName, String password, int usuper) { // TODO Auto-generated method stub return null; } + /*public static void main(String[] args) { + User user=new User(); + user.setUsername("whf"); + user.setRname("fafafa"); + user.setPassword("1111"); + user.setPhone("66666"); + user.setUsuper(1); + UserServiceImpl usi=new UserServiceImpl(); + usi.addUser(user); + }*/ + - // 根据用户id更新用户信息的方法 @Override public int updateByIdUser(User user) { - // 用于标记更新操作是否成功,初始化为0表示失败 - int flag = 0; - // 获取要更新的用户id - int id = user.getId(); + int flag=0; + int id=user.getId(); System.out.println(id); - // 获取数据库连接 - Connection conn = JDBCUtil.getConn(); - // 准备更新用户信息的SQL语句,根据指定的id更新用户的各项信息 - String SQL = "update User set name=?,rname=?,password=?,phone=?,sSuper=?,img=?,delmark=? where id=? "; - + Connection conn=JDBCUtil.getConn(); + String SQL="update User set name=?,rname=?,password=?,phone=?,sSuper=?,img=?,delmark=? where id=? "; + System.out.println(SQL); - + + PreparedStatement preparedStatement = null; - ResultSet resultSet = null; - + ResultSet resultSet=null; try { - // 准备SQL语句 preparedStatement = conn.prepareStatement(SQL); - // 设置SQL语句中的参数,将用户对象的各个属性值传入 - preparedStatement.setString(1, user.getUsername()); - preparedStatement.setString(2, user.getRname()); - preparedStatement.setString(3, user.getPassword()); - preparedStatement.setString(4, user.getPhone()); - preparedStatement.setInt(5, user.getUsuper()); - preparedStatement.setString(6, user.getImg()); - preparedStatement.setInt(7, 1); - preparedStatement.setInt(8, id); - // 执行更新操作 + preparedStatement.setString(1,user.getUsername()); + preparedStatement.setString(2,user.getRname()); + preparedStatement.setString(3,user.getPassword()); + preparedStatement.setString(4,user.getPhone()); + preparedStatement.setInt(5,user.getUsuper()); + preparedStatement.setString(6,user.getImg()); + preparedStatement.setInt(7,1); + preparedStatement.setInt(8,id); preparedStatement.executeUpdate(); - // 如果更新成功,将标记设置为1 - flag = 1; + flag=1; } catch (SQLException e) { - // 捕获SQL异常并打印异常信息 + // TODO Auto-generated catch block e.printStackTrace(); - } finally { - // 关闭数据库相关资源 + }finally{ JDBCUtil.close(resultSet, preparedStatement, conn); } - - // 返回操作结果标记,1表示成功,0表示失败 + + return flag; } -} \ No newline at end of file +/* public static void main(String[] args) { + User user=new User(); + user.setId(1); + user.setUsername("z001"); + user.setRname("陈龙"); + user.setPassword("0.00.0"); + user.setPhone("6666776"); + user.setUsuper(0); + user.setImg("static\\userimg\\u1.png"); + user.setDelmark(1); + UserServiceImpl usi=new UserServiceImpl(); + int flag=usi.updateByIdUser(user); + if(flag==1){ + System.out.println("ok"); + } + System.out.println(user.getId()+" "+user.getUsername()+" "+user.getRname()+" "+user.getPassword()+" "+user.getPhone()+" "+user.getUsuper()+" "+user.getImg()+" "+user.getDelmark()+" "); + }*/ + +} diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java index 620a3f3..fd81c3b 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java @@ -1,62 +1,68 @@ package com.lingnan.supermarket.dao.impl; +import java.sql.Connection; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.Vector; + import com.lingnan.supermarket.dao.inOrderService; import com.lingnan.supermarket.dto.InOrder; +import com.lingnan.supermarket.utils.DateUtil; import com.lingnan.supermarket.utils.JDBCUtil; -import java.sql.*; -import java.util.Vector; - public class inOrderServiceImpl implements inOrderService{ - + @Override - public Vector findAllInOrder() { - Vector inOrders = new Vector(); // 创建一个向量用于存储InOrder对象 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 声明预编译语句对象 - ResultSet resultSet = null; // 声明结果集对象 - - // SQL查询语句,选择未删除的订单并按入库日期降序排列 + public Vector findAllInOrder (){ + Vector inOrders = new Vector(); + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + ResultSet resultSet=null; + String SQL = "select * from inOrder where delmark=1 order by inDate desc"; - + try { - preparedStatement = conn.prepareStatement(SQL); // 准备SQL语句 - resultSet = preparedStatement.executeQuery(); // 执行查询 - while (resultSet.next()) { // 遍历结果集 - InOrder inOrder = new InOrder(); // 创建InOrder对象 - // 从结果集中获取属性并设置到inOrder对象 + preparedStatement = conn.prepareStatement(SQL); + resultSet = preparedStatement.executeQuery(); + while(resultSet.next()) { + InOrder inOrder = new InOrder(); inOrder.setiNumber(resultSet.getString("iNumber")); inOrder.setAllInPrice(resultSet.getFloat("allInPrice")); inOrder.setInDate(resultSet.getString("inDate")); inOrder.setPrincipal(resultSet.getString("principal")); inOrder.setStatus(resultSet.getInt("status")); inOrder.setDelmark(resultSet.getInt("Delmark")); - inOrders.add(inOrder); // 将InOrder对象添加到向量中 + inOrders.add(inOrder); } - + } catch (SQLException e) { - e.printStackTrace(); // 捕获并打印异常堆栈信息 + e.printStackTrace(); } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, preparedStatement, conn); } - return inOrders; // 返回存储所有InOrder对象的向量 + return inOrders; + } - + + @Override public InOrder findByIdinOrder(String iNumber) { - InOrder inOrder = new InOrder(); // 创建InOrder对象 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 声明预编译语句对象 - ResultSet resultSet = null; // 声明结果集对象 + + InOrder inOrder = new InOrder(); + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; try { - // 准备SQL语句,根据订单号查找特定的订单 preparedStatement = conn.prepareStatement("select * from inOrder where iNumber = ?"); - preparedStatement.setString(1, iNumber); // 设置订单号参数 - resultSet = preparedStatement.executeQuery(); // 执行查询 - if (resultSet.next()) { // 如果找到对应记录 - // 从结果集中获取属性并设置到inOrder对象 + preparedStatement.setString(1, iNumber); + resultSet = preparedStatement.executeQuery(); + if (resultSet.next()) { inOrder.setiNumber(resultSet.getString("iNumber")); inOrder.setAllInPrice(resultSet.getFloat("allInPrice")); inOrder.setInDate(resultSet.getString("inDate")); @@ -64,204 +70,205 @@ public class inOrderServiceImpl implements inOrderService{ inOrder.setStatus(resultSet.getInt("status")); } else { return null; // 没有找到该订单或订单不存在,返回null - } + } } catch (SQLException e) { - e.printStackTrace(); // 捕获并打印异常堆栈信息 + e.printStackTrace(); } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, preparedStatement, conn); } - return inOrder; // 返回找到的InOrder对象 + return inOrder; } - + + @Override public int addInOrder(String iNumber, float allInPrice) { - int flag = 0; // 状态标志,初始化为0 - Timestamp inDate = new Timestamp(System.currentTimeMillis()); // 获取当前时间戳 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 声明预编译语句对象 - + int flag = 0; + Timestamp inDate = new Timestamp(System.currentTimeMillis()); + //System.out.println(inDate); + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + try { - // 准备SQL插入语句 - preparedStatement = conn.prepareStatement("insert into inOrder values (?,?,?,?)"); - preparedStatement.setString(1, iNumber); // 设置订单号参数 - preparedStatement.setFloat(2, allInPrice); // 设置总价格参数 - preparedStatement.setTimestamp(3, inDate); // 设置入库日期 - preparedStatement.setString(4, "a1"); // 设置其他固定参数(例如:默认的负责人ID) - preparedStatement.executeUpdate(); // 执行插入操作 - flag = 1; // 标记插入成功 + preparedStatement = conn.prepareStatement + ("insert into inOrder values (?,?,?,?)"); + preparedStatement.setString(1, iNumber); + preparedStatement.setFloat(2, allInPrice); + preparedStatement.setTimestamp(3, inDate); + preparedStatement.setString(4, "a1"); + preparedStatement.executeUpdate(); + flag = 1; } catch (SQLException e) { - flag = -1; // 插入失败时标记为-1 - e.printStackTrace(); // 捕获并打印异常堆栈信息 + flag = -1; + e.printStackTrace(); } finally { - JDBCUtil.close(null, preparedStatement, conn); // 关闭预编译语句和数据库连接 + JDBCUtil.close(null,preparedStatement, conn); } - - return flag; // 返回插入结果标志 + + return flag; } + @Override public int deleteInOrder(String iNumber) { - int flag = 0; // 状态标志,初始化为0 - - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 声明预编译语句对象 - + int flag = 0; + + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + try { - // 准备SQL更新语句,将delmark标记为0表示逻辑删除 - preparedStatement = conn.prepareStatement("update inOrder set delmark=0 where iNumber = ?"); - preparedStatement.setString(1, iNumber); // 设置订单号参数 - preparedStatement.executeUpdate(); // 执行更新操作 - flag = 1; // 标记删除成功 + preparedStatement = conn.prepareStatement + ("update inOrder set delmark=0 where iNumber = ?"); + preparedStatement.setString(1, iNumber); + preparedStatement.executeUpdate(); + flag = 1; } catch (SQLException e) { - flag = -1; // 删除失败时标记为-1 - e.printStackTrace(); // 捕获并打印异常堆栈信息 + flag = -1; + e.printStackTrace(); } finally { - JDBCUtil.close(null, preparedStatement, conn); // 关闭预编译语句和数据库连接 + JDBCUtil.close(null,preparedStatement, conn); } - return flag; // 返回删除结果标志 + return flag; } /*往订单表插入一条记录*/ - // 插入新的进货订单 - public boolean InsertInOrder(String number, Float allPrice, String time, String username, int c) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement pstmt = null; // 声明预编译语句对象 - ResultSet resultSet = null; // 声明结果集对象 + public boolean InsertInOrder(String number,Float allPrice,String time,String username,int c){ + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null;; try { - // 准备SQL插入语句 pstmt = conn.prepareStatement("insert into InOrder values(?,?,?,?,?,?)"); - pstmt.setString(1, number); // 设置订单号 - pstmt.setFloat(2, allPrice); // 设置总价格 - pstmt.setString(3, time); // 设置入库时间 - pstmt.setString(4, username); // 设置负责人用户名 - pstmt.setInt(5, 2); // 设置状态,假设2代表某个特定状态 - pstmt.setInt(6, 1); // 设置删除标记,假设1表示未删除 - - // 执行插入操作 - if (pstmt.execute()) - flag = true; // 如果成功执行插入,设置标志为true - + pstmt.setString(1, number); + pstmt.setFloat(2, allPrice); + pstmt.setString(3, time); + pstmt.setString(4, username); + pstmt.setInt(5, 2); + pstmt.setInt(6, 1); + + if(pstmt.execute()) + flag = true; + + + } catch (SQLException e) { - e.printStackTrace(); // 捕获并打印异常堆栈信息 - } finally { - JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + e.printStackTrace(); + }finally { + + JDBCUtil.close(resultSet, pstmt, conn); } - return flag; // 返回插入结果标志 + return flag; } - /* 更新状态 */ - public boolean updateInOrderStatus(String iNumber, int status) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 声明预编译语句对象 + /*更新状态*/ + public boolean updateInOrderStatus(String iNumber,int status) { + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; try { - // 准备SQL更新语句,更新指定订单号的状态 preparedStatement = conn.prepareStatement("update inOrder set status=? where iNumber=?"); - preparedStatement.setInt(1, status); // 设置状态 - preparedStatement.setString(2, iNumber); // 设置订单号 - // 如果更新操作影响了一行,则设置标志为true - if (preparedStatement.executeUpdate() == 1) + preparedStatement.setInt(1, status); + preparedStatement.setString(2,iNumber); + if(preparedStatement.executeUpdate()==1) flag = true; } catch (SQLException e) { - e.printStackTrace(); // 捕获并打印异常堆栈信息 + e.printStackTrace(); } finally { - JDBCUtil.close(null, preparedStatement, conn); // 关闭预编译语句和数据库连接 + JDBCUtil.close(null,preparedStatement, conn); } - return flag; // 返回更新结果标志 + return flag; } - - // 查找所有待入库订单(待确认) - public Vector findUnconfirmInOrder() { - Vector inOrders = new Vector(); // 创建一个向量用于存储InOrder对象 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 声明预编译语句对象 - ResultSet resultSet = null; // 声明结果集对象 - - // SQL查询语句,选择状态为2并且未删除的订单 + + //查找所有待入库订单*/待确认 + public Vector findUnconfirmInOrder(){ + Vector inOrders = new Vector(); + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + ResultSet resultSet=null; + String SQL = "select * from inOrder where status=2 and delmark=1"; - + try { - preparedStatement = conn.prepareStatement(SQL); // 准备SQL语句 - resultSet = preparedStatement.executeQuery(); // 执行查询 - while (resultSet.next()) { // 遍历结果集 - InOrder inOrder = new InOrder(); // 创建InOrder对象 - // 从结果集中获取属性并设置到inOrder对象 - inOrder.setiNumber(resultSet.getString("iNumber")); // 设置订单号 - inOrder.setAllInPrice(resultSet.getFloat("allInPrice")); // 设置总价格 - inOrder.setInDate(resultSet.getString("inDate")); // 设置入库日期 - inOrder.setPrincipal(resultSet.getString("principal")); // 设置负责人 - inOrder.setStatus(resultSet.getInt("status")); // 设置订单状态 - inOrder.setDelmark(resultSet.getInt("Delmark")); // 设置删除标记 - inOrders.add(inOrder); // 将InOrder对象添加到向量中 + preparedStatement = conn.prepareStatement(SQL); + resultSet = preparedStatement.executeQuery(); + while(resultSet.next()) { + InOrder inOrder = new InOrder(); + inOrder.setiNumber(resultSet.getString("iNumber")); + inOrder.setAllInPrice(resultSet.getFloat("allInPrice")); + inOrder.setInDate(resultSet.getString("inDate")); + inOrder.setPrincipal(resultSet.getString("principal")); + inOrder.setStatus(resultSet.getInt("status")); + inOrder.setDelmark(resultSet.getInt("Delmark")); + inOrders.add(inOrder); } - + } catch (SQLException e) { - e.printStackTrace(); // 捕获并打印异常堆栈信息 + e.printStackTrace(); } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, preparedStatement, conn); } - return inOrders; // 返回存储待确认订单的向量 + return inOrders; + } - - // 获取今日进货金额 + + //获取今日进货金额 public Float TodayInPrice(String date) { - InOrder inOrder = new InOrder(); // 创建InOrder对象 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 声明预编译语句对象 - ResultSet resultSet = null; // 声明结果集对象 - Float allInPrice = (float) 0; // 初始化总进货金额为0 + + InOrder inOrder = new InOrder(); + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + Float allInPrice=(float) 0; try { - // 准备SQL查询语句,计算指定日期的进货金额总和 preparedStatement = conn.prepareStatement("select sum(allInPrice) from inOrder where inDate>=? and inDate<=date_add(?,interval 1 day)"); - preparedStatement.setString(1, date); // 设置起始日期 - preparedStatement.setString(2, date); // 设置结束日期(起始日期+1天) - resultSet = preparedStatement.executeQuery(); // 执行查询 - if (resultSet.next()) { // 如果有结果 - allInPrice = resultSet.getFloat("sum(allInPrice)"); // 获取总进货金额 - } + preparedStatement.setString(1, date); + preparedStatement.setString(2, date); + resultSet = preparedStatement.executeQuery(); + if (resultSet.next()) { + allInPrice=resultSet.getFloat("sum(allInPrice)"); + } } catch (SQLException e) { - e.printStackTrace(); // 捕获并打印异常堆栈信息 + e.printStackTrace(); } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, preparedStatement, conn); } - return allInPrice; // 返回总进货金额 + return allInPrice; } - // 查找指定状态订单 - public Vector FindStatus(int status) { - Vector inOrders = new Vector(); // 创建一个向量用于存储InOrder对象 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 声明预编译语句对象 - ResultSet resultSet = null; // 声明结果集对象 - - try { - // 准备SQL查询语句,根据状态查找订单 + //查找指定状态订单 + public Vector FindStatus(int status){ + Vector inOrders = new Vector(); + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + ResultSet resultSet=null; + + + + try { preparedStatement = conn.prepareStatement("select * from inOrder where status=? and delmark=1 order by inDate desc"); - preparedStatement.setInt(1, status); // 设置状态参数 - resultSet = preparedStatement.executeQuery(); // 执行查询 - while (resultSet.next()) { // 遍历结果集 - InOrder inOrder = new InOrder(); // 创建InOrder对象 - // 从结果集中获取属性并设置到inOrder对象 - inOrder.setiNumber(resultSet.getString("iNumber")); // 设置订单号 - inOrder.setAllInPrice(resultSet.getFloat("allInPrice")); // 设置总价格 - inOrder.setInDate(resultSet.getString("inDate")); // 设置入库日期 - inOrder.setPrincipal(resultSet.getString("principal")); // 设置负责人 - inOrder.setStatus(resultSet.getInt("status")); // 设置订单状态 - inOrder.setDelmark(resultSet.getInt("Delmark")); // 设置删除标记 - inOrders.add(inOrder); // 将InOrder对象添加到向量中 + preparedStatement.setInt(1, status); + resultSet = preparedStatement.executeQuery(); + while(resultSet.next()) { + InOrder inOrder = new InOrder(); + inOrder.setiNumber(resultSet.getString("iNumber")); + inOrder.setAllInPrice(resultSet.getFloat("allInPrice")); + inOrder.setInDate(resultSet.getString("inDate")); + inOrder.setPrincipal(resultSet.getString("principal")); + inOrder.setStatus(resultSet.getInt("status")); + inOrder.setDelmark(resultSet.getInt("Delmark")); + inOrders.add(inOrder); } - + } catch (SQLException e) { - e.printStackTrace(); // 捕获并打印异常堆栈信息 + e.printStackTrace(); } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 + JDBCUtil.close(resultSet, preparedStatement, conn); } - return inOrders; // 返回指定状态的订单向量 + return inOrders; + } } diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/inRecordServiceImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/inRecordServiceImpl.java index 9964df6..bf5f585 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/inRecordServiceImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/inRecordServiceImpl.java @@ -1,174 +1,152 @@ package com.lingnan.supermarket.dao.impl; -import com.lingnan.supermarket.dao.inRecordService; -import com.lingnan.supermarket.dto.InRecord; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.utils.JDBCUtil; - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Timestamp; import java.util.Vector; -/** - * 进货记录服务实现类 - * @cwf2210461197 2024/12/2 - * @version 1.0 - */ + +import com.lingnan.supermarket.dao.inRecordService; +import com.lingnan.supermarket.dto.InOrder; +import com.lingnan.supermarket.dto.InRecord; +import com.lingnan.supermarket.dto.Production; +import com.lingnan.supermarket.dto.User; +import com.lingnan.supermarket.utils.JDBCUtil; public class inRecordServiceImpl implements inRecordService{ - /** - * 查询所有进货记录的方法 - * @return 包含所有进货记录的向量 - */ + @Override public Vector findAllinRecord() { - Vector inRecords = new Vector(); // 创建一个向量用于存储进货记录 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 - ResultSet resultSet=null; // 初始化结果集对象 - - String SQL = "select * from inRecord"; // SQL查询语句,选择所有进货记录 - + Vector inRecords = new Vector(); + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + ResultSet resultSet=null; + + String SQL = "select * from inRecord"; + try { - preparedStatement = conn.prepareStatement(SQL); // 准备SQL语句 - resultSet = preparedStatement.executeQuery(); // 执行查询 - while(resultSet.next()) { // 遍历结果集 - InRecord inRecord = new InRecord(); // 创建一个新的进货记录对象 - inRecord.setiNumber(resultSet.getString("iNumber")); // 设置进货单号 - inRecord.setSum(resultSet.getInt("sum")); // 设置进货数量 - inRecord.setInPrice(resultSet.getFloat("inPrice")); // 设置进货价格 - inRecords.add(inRecord); // 将进货记录对象添加到向量中 + preparedStatement = conn.prepareStatement(SQL); + resultSet = preparedStatement.executeQuery(); + while(resultSet.next()) { + InRecord inRecord = new InRecord(); + inRecord.setiNumber(resultSet.getString("iNumber")); + inRecord.setSum(resultSet.getInt("sum")); + inRecord.setInPrice(resultSet.getFloat("inPrice")); + inRecords.add(inRecord); } - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 + + } catch (SQLException e) { + e.printStackTrace(); + } finally { + JDBCUtil.close(resultSet, preparedStatement, conn); } - return inRecords; // 返回存储所有进货记录的向量 + return inRecords; } - - /** - * 根据进货单号查询进货记录 - * - * @param iNumber 进货单号 - * @return 包含符合条件的进货记录的向量 - */ -@Override + @Override public Vector findByIdinRecord(String iNumber) { - InRecord inRecord; // 声明一个进货记录对象 - Vector v = new Vector(); // 创建一个向量用于存储进货记录 - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 - ResultSet resultSet = null; // 初始化结果集对象 + InRecord inRecord; + Vector v = new Vector(); + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; try { - preparedStatement = conn.prepareStatement("select * from inRecord where iNumber = ?"); // 准备SQL查询语句 - preparedStatement.setString(1, iNumber); // 设置查询参数 - resultSet = preparedStatement.executeQuery(); // 执行查询 - while(resultSet.next()) { // 遍历结果集 - inRecord = new InRecord(); // 创建一个新的进货记录对象 - inRecord.setiNumber(resultSet.getString("iNumber")); // 设置进货单号 - inRecord.setId(resultSet.getString("id")); // 设置商品ID - inRecord.setSum(resultSet.getInt("sum")); // 设置进货数量 - inRecord.setInPrice(resultSet.getFloat("Price")); // 设置进货价格 - v.add(inRecord); // 将进货记录对象添加到向量中 - } - - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 + preparedStatement = conn.prepareStatement("select * from inRecord where iNumber = ?"); + preparedStatement.setString(1, iNumber); + resultSet = preparedStatement.executeQuery(); + while(resultSet.next()) { + inRecord = new InRecord(); + inRecord.setiNumber(resultSet.getString("iNumber")); + inRecord.setId(resultSet.getString("id")); + inRecord.setSum(resultSet.getInt("sum")); + inRecord.setInPrice(resultSet.getFloat("Price")); + v.add(inRecord); + } + + } catch (SQLException e) { + e.printStackTrace(); + } finally { + JDBCUtil.close(resultSet, preparedStatement, conn); } - return v; // 返回存储进货记录的向量 + return v; } - @Override - // 该方法用于将进货记录添加到数据库中。 -// 参数 ir 是一个包含进货信息的对象。 -// 返回值 flag 表示插入的结果,1表示成功,-1表示失败。 -public int addinRecord(InRecord ir) { - int flag = 0; // 初始化标志为0 - - String iNumber = ir.getiNumber(); // 获取进货单号 - int sum = ir.getSum(); // 获取进货数量 - Float inPrice = ir.getInPrice(); // 获取进货价格 - - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 - + public int addinRecord(InRecord ir) { + int flag = 0; + + String iNumber = ir.getiNumber(); + int sum = ir.getSum(); + Float inPrice = ir.getInPrice(); + + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + try { preparedStatement = conn.prepareStatement - ("insert into inRecord values (?,?,?)"); // 准备SQL插入语句 - preparedStatement.setString(1, iNumber); // 设置进货单号 - preparedStatement.setInt(2, sum); // 设置进货数量 - preparedStatement.setFloat(3, inPrice); // 设置进货价格 - preparedStatement.executeUpdate(); // 执行插入操作 - flag = 1; // 设置标志为1,表示插入成功 - } catch (SQLException e) { // 捕获SQL异常 - flag = -1; // 设置标志为-1,表示插入失败 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(null,preparedStatement, conn); // 关闭预编译语句和数据库连接 + ("insert into inRecord values (?,?,?)"); + preparedStatement.setString(1, iNumber); + preparedStatement.setInt(2, sum); + preparedStatement.setFloat(3, inPrice); + preparedStatement.executeUpdate(); + flag = 1; + } catch (SQLException e) { + flag = -1; + e.printStackTrace(); + } finally { + JDBCUtil.close(null,preparedStatement, conn); } - - return flag; // 返回插入结果标志 + + return flag; } - - // 删除进货记录方法,根据进货单号进行删除操作 -@Override + @Override public int deleteinRecord(String iNumber) { - int flag = 0; // 初始化标志为0 - - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 - + int flag = 0; + + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + try { preparedStatement = conn.prepareStatement - ("delete from inRecord where iNumber = ?"); // 准备SQL删除语句 - preparedStatement.setString(1, iNumber); // 设置进货单号 - preparedStatement.executeUpdate(); // 执行删除操作 - flag = 1; // 设置标志为1,表示删除成功 - } catch (SQLException e) { // 捕获SQL异常 - flag = -1; // 设置标志为-1,表示删除失败 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(null,preparedStatement, conn); // 关闭预编译语句和数据库连接 + ("delete from inRecord where iNumber = ?"); + preparedStatement.setString(1, iNumber); + preparedStatement.executeUpdate(); + flag = 1; + } catch (SQLException e) { + flag = -1; + e.printStackTrace(); + } finally { + JDBCUtil.close(null,preparedStatement, conn); } - return flag; // 返回删除结果标志 + return flag; } - /** - * 将进货记录插入到数据库中 - * - * @param iNumber 进货单号 - * @param p 进货的商品对象 - * @return 成功插入返回true,失败返回false - */ -public boolean insertInRecord(String iNumber,Production p) { - boolean flag = false; // 初始化标志为false - Connection conn = JDBCUtil.getConn(); // 获取数据库连接 - PreparedStatement preparedStatement = null; // 初始化预编译语句对象 - + public boolean insertInRecord(String iNumber,Production p) { + boolean flag = false; + Connection conn = JDBCUtil.getConn(); + PreparedStatement preparedStatement = null; + try { - preparedStatement = conn.prepareStatement("insert into inRecord values(?,?,?,?)"); // 准备SQL插入语句 - preparedStatement.setString(1, iNumber); // 设置进货单号 - preparedStatement.setString(2, p.getId()); // 设置商品ID - preparedStatement.setInt(3,p.getSum()); // 设置进货数量 - preparedStatement.setFloat(4, p.getPrice()); // 设置进货价格 - - if(preparedStatement.executeUpdate()==1) // 执行插入操作 - flag = true; // 如果成功执行插入,设置标志为true - } catch (SQLException e) { // 捕获SQL异常 - e.printStackTrace(); // 打印异常堆栈信息 - } finally { // 无论是否发生异常,都会执行的代码块 - JDBCUtil.close(null,preparedStatement, conn); // 关闭预编译语句和数据库连接 + preparedStatement = conn.prepareStatement("insert into inRecord values(?,?,?,?)"); + preparedStatement.setString(1, iNumber); + preparedStatement.setString(2, p.getId()); + preparedStatement.setInt(3,p.getSum()); + preparedStatement.setFloat(4, p.getPrice()); + + if(preparedStatement.executeUpdate()==1) + flag = true; + } catch (SQLException e) { + e.printStackTrace(); + } finally { + JDBCUtil.close(null,preparedStatement, conn); } - return flag; // 返回插入结果标志 + return flag; } -} \ No newline at end of file + + + +} diff --git a/Supermarket/src/com/lingnan/supermarket/dao/inOrderService.java b/Supermarket/src/com/lingnan/supermarket/dao/inOrderService.java index 6ca4286..293aa66 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/inOrderService.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/inOrderService.java @@ -1,19 +1,18 @@ package com.lingnan.supermarket.dao; -import com.lingnan.supermarket.dto.InOrder; - import java.util.Vector; -// 进货订单服务接口,定义了与进货订单相关的操作 +import com.lingnan.supermarket.dto.InOrder; + public interface inOrderService { //查询全部进货订单 Vector findAllInOrder (); //查询某个进货订单 InOrder findByIdinOrder (String iNumber); - + //默认princial为a1. 创建时new一个时间插入,总价随机模拟 - // 添加新的进货订单 int addInOrder(String iNumber,float allInPrice ); - // 删除指定的进货订单 int deleteInOrder(String iNumber); + + } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java index 637df04..7e6235f 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java @@ -1,184 +1,189 @@ -package com.lingnan.supermarket.dialog; - -import java.awt.Container; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.Vector; - -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JDialog; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTable; -import javax.swing.JTextField; - -import com.lingnan.supermarket.*; -import com.lingnan.supermarket.dao.UserService; -import com.lingnan.supermarket.dao.impl.BufferImpl; -import com.lingnan.supermarket.dao.impl.UserServiceImpl; -import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; -import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; -import com.lingnan.supermarket.dao.impl.productionImpl; -import com.lingnan.supermarket.dao.impl.storageRecordImpl; -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.InOrder; -import com.lingnan.supermarket.dto.InRecord; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.table.OutTableModel; -import com.lingnan.supermarket.utils.TimeAndOrder; -import com.lingnan.supermarket.view.HomeView; -import com.lingnan.supermarket.view.OutView; -import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; - - -public class ChangeStatusDialog extends JDialog implements ActionListener{ - - - private JPanel statusPanel,opePanel,titlePanel,comboPanel; - private JLabel titleLabel,statusLabel; - private JButton UpdateBtn,cancelBtn; - - private String iNumber; - private String status; - - private Vector InRecords; - - private JComboBox combo; - - private String[] log = { "待入库", "已入库", "取消订单" }; - - private inRecordServiceImpl inRecordImpl; - - private int catalog; - - - private productionImpl productionImpl; - - - - +package com.lingnan.supermarket.dialog; // 声明当前类所在的包 + +import java.awt.Container; // 导入AWT容器类 +import java.awt.FlowLayout; // 导入流式布局类 +import java.awt.event.ActionEvent; // 导入动作事件类 +import java.awt.event.ActionListener; // 导入动作监听器接口 +import java.awt.event.ItemEvent; // 导入项目事件类 +import java.awt.event.ItemListener; // 导入项目监听器接口 +import java.util.Vector; // 导入向量类,用于存储对象集合 + +import javax.swing.JButton; // 导入Swing按钮组件 +import javax.swing.JComboBox; // 导入Swing下拉框组件 +import javax.swing.JDialog; // 导入Swing对话框组件 +import javax.swing.JFrame; // 导入Swing顶层窗口组件 +import javax.swing.JLabel; // 导入Swing标签组件 +import javax.swing.JOptionPane; // 导入Swing对话框工具类 +import javax.swing.JPanel; // 导入Swing面板组件 +import javax.swing.JTable; // 导入Swing表格组件 +import javax.swing.JTextField; // 导入Swing文本框组件 + +import com.lingnan.supermarket.*; // 导入超市项目相关包 +import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区实现类 +import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 +import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; // 导入入库订单服务实现类 +import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; // 导入入库记录服务实现类 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 +import com.lingnan.supermarket.dao.impl.storageRecordImpl; // 导入库存记录服务实现类 +import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 +import com.lingnan.supermarket.dto.InOrder; // 导入入库订单数据传输对象 +import com.lingnan.supermarket.dto.InRecord; // 导入入库记录数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 +import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 +import com.lingnan.supermarket.utils.TimeAndOrder; // 导入时间和订单工具类 +import com.lingnan.supermarket.view.HomeView; // 导入主页视图类 +import com.lingnan.supermarket.view.OutView; // 导入出库视图类 +import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener + + + +public class ChangeStatusDialog extends JDialog implements ActionListener{ // 定义一个对话框类,实现动作监听器接口 + + private JPanel statusPanel,opePanel,titlePanel,comboPanel; // 声明面板变量,用于不同的功能区域 + + private JLabel titleLabel,statusLabel; // 声明标签变量,用于显示标题和状态信息 + + private JButton UpdateBtn,cancelBtn; // 声明按钮变量,用于更新和取消操作 + + private String iNumber; // 订单编号 + private String status; // 订单状态 + + private Vector InRecords; // 存储入库记录的向量 + + private JComboBox combo; // 下拉框组件,用于选择订单状态 + + private String[] log = { "待入库", "已入库", "取消订单" }; // 订单状态数组 + + private inRecordServiceImpl inRecordImpl; // 入库记录服务实现类 + + private int catalog; // 分类标识 + + private productionImpl productionImpl; // 产品服务实现类 + + // 构造方法,接收父窗口、订单编号和订单状态作为参数 public ChangeStatusDialog(JFrame parent,String iNumber,String status) { - super(parent,"修改进货订单状态"); - - setSize(400,200); - setLocationRelativeTo(null); - setModal(true); - setResizable(false); - this.setLayout(new FlowLayout()); - - this.iNumber=iNumber; - this.status=status; - initView(); + super(parent,"修改进货订单状态"); // 调用父类构造方法,设置对话框标题 + + setSize(400,200); // 设置对话框大小 + setLocationRelativeTo(null); // 设置对话框相对于父窗口居中 + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框大小不可变 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + this.iNumber=iNumber; // 将传入的订单编号赋值给成员变量 + this.status=status; // 将传入的订单状态赋值给成员变量 + initView(); // 调用方法初始化视图 } - - - - - private void initView() { - - titlePanel = new JPanel(); - titleLabel = new JLabel("修改订单为"+iNumber+"的状态"); - titlePanel.add(titleLabel); - - - statusPanel = new JPanel(); - statusLabel = new JLabel("当前状态:"+status); - statusPanel.add(statusLabel); - - - comboPanel = new JPanel(); - combo = new JComboBox(log);/*下拉表*/ - combo.addItemListener(new MyItemListener()); - comboPanel.add(combo); - - - opePanel = new JPanel(); - UpdateBtn = new JButton("更改"); - cancelBtn = new JButton("取消"); - UpdateBtn.addActionListener(this); - cancelBtn.addActionListener(this); - opePanel.add(UpdateBtn); - opePanel.add(cancelBtn); - - Container container = getContentPane(); - container.add(titlePanel,"North"); - container.add(statusPanel,"Center"); - container.add(comboPanel,"South"); - container.add(opePanel); - - - } - - public class MyItemListener implements ItemListener { + + + + + + + + private void initView() { // 初始化视图的私有方法 + + titlePanel = new JPanel(); // 创建标题面板 + titleLabel = new JLabel("修改订单为"+iNumber+"的状态"); // 创建标题标签,显示订单编号 + titlePanel.add(titleLabel); // 将标题标签添加到标题面板 + + statusPanel = new JPanel(); // 创建状态面板 + statusLabel = new JLabel("当前状态:"+status); // 创建状态标签,显示当前订单状态 + statusPanel.add(statusLabel); // 将状态标签添加到状态面板 + + comboPanel = new JPanel(); // 创建下拉框面板 + combo = new JComboBox(log); // 创建下拉框,使用订单状态数组初始化 + combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 + comboPanel.add(combo); // 将下拉框添加到下拉框面板 + + opePanel = new JPanel(); // 创建操作按钮面板 + UpdateBtn = new JButton("更改"); // 创建更改按钮 + cancelBtn = new JButton("取消"); // 创建取消按钮 + UpdateBtn.addActionListener(this); // 为更改按钮添加动作监听器 + cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 + opePanel.add(UpdateBtn); // 将更改按钮添加到操作按钮面板 + opePanel.add(cancelBtn); // 将取消按钮添加到操作按钮面板 + + Container container = getContentPane(); // 获取内容面板 + container.add(titlePanel,"North"); // 将标题面板添加到内容面板的北部 + container.add(statusPanel,"Center"); // 将状态面板添加到内容面板的中心 + container.add(comboPanel,"South"); // 将下拉框面板添加到内容面板的南部 + container.add(opePanel); // 将操作按钮面板添加到内容面板 + + } + + public class MyItemListener implements ItemListener { // 定义一个内部类,实现项目监听器接口 @Override - public void itemStateChanged(ItemEvent e) { - JComboBox cb = (JComboBox) e.getSource(); - String catalog1 = (String) cb.getSelectedItem(); - if (catalog1.equals("已入库")) { - catalog = 1; + public void itemStateChanged(ItemEvent e) { // 实现项目状态改变时的处理方法 + JComboBox cb = (JComboBox) e.getSource(); // 获取事件源,即下拉框 + String catalog1 = (String) cb.getSelectedItem(); // 获取下拉框选中的项 + if (catalog1.equals("已入库")) { // 如果选中项为"已入库" + catalog = 1; // 将分类标识设置为1 } - else if (catalog1.equals("待入库")) { - catalog = 2; - } else if (catalog1.equals("取消订单")) { - catalog = 3; + else if (catalog1.equals("待入库")) { // 如果选中项为"待入库" + catalog = 2; // 将分类标识设置为2 + } else if (catalog1.equals("取消订单")) { // 如果选中项为"取消订单" + catalog = 3; // 将分类标识设置为3 + } } } - - public Vector getVector(){ - return InRecords; + + + public Vector getVector(){ // 定义一个公共方法,返回一个InRecord类型的Vector + return InRecords; // 返回成员变量InRecords,它是一个包含InRecord对象的Vector } - + + + + + @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if(source==UpdateBtn){ - System.out.println("此时此刻的catalog为"+catalog); + public void actionPerformed(ActionEvent e) { // 重写actionPerformed方法以响应按钮点击事件 + Object source = e.getSource(); // 获取事件源 + if(source==UpdateBtn){ // 如果事件源是更新按钮 + System.out.println("此时此刻的catalog为"+catalog); // 打印当前catalog的值 //这里修改进货订单表的状态*/ - inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); - inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); - storageRecordImpl storageRecordImpl = new storageRecordImpl(); - productionImpl = new productionImpl(); - Production p ; + inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 创建进货订单服务实现类的实例 + inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建进货记录服务实现类的实例 + storageRecordImpl storageRecordImpl = new storageRecordImpl(); // 创建库存记录服务实现类的实例 + productionImpl = new productionImpl(); // 创建产品服务实现类的实例 + Production p ; // 声明产品对象 //获得订单信息 - + //修改状态 - inOrderImpl.updateInOrderStatus(iNumber,catalog); + inOrderImpl.updateInOrderStatus(iNumber,catalog); // 更新进货订单的状态 //确认进货,修改状态并对库存和库存日志修改 - if(catalog==1) { + if(catalog==1) { // 如果catalog等于1 //获得订单详细信息 - this.InRecords = inRecordImpl.findByIdinRecord(iNumber); + this.InRecords = inRecordImpl.findByIdinRecord(iNumber); // 根据订单编号查找进货记录 //遍历添加库存 String s[]=TimeAndOrder.TimeAndOrder("");/*生成时间*/ - for(InRecord i:InRecords) { + for(InRecord i:InRecords) { // 遍历进货记录 //查找到原来的价格 //更新库存表 - productionImpl.updateProductionSum(i.getId(),i.getSum()); + productionImpl.updateProductionSum(i.getId(),i.getSum()); // 更新产品库存数量 //增加库存日志表 - storageRecordImpl.insertStorageRecord(iNumber,s[1], i.getId(),"+", i.getSum()); + storageRecordImpl.insertStorageRecord(iNumber,s[1], i.getId(),"+", i.getSum()); // 插入库存记录 } - - JOptionPane.showMessageDialog(this,"订单已确认,库存更新成功","提示",JOptionPane.INFORMATION_MESSAGE); - } + + JOptionPane.showMessageDialog(this,"订单已确认,库存更新成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示消息对话框 + } /*刷新首页*/ - this.dispose(); + this.dispose(); // 关闭当前对话框 } - else if(source == cancelBtn) { - - this.dispose(); + else if(source == cancelBtn) { // 如果事件源是取消按钮 + + this.dispose(); // 关闭当前对话框 + } } } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java index 5c95dc2..6476689 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java @@ -1,78 +1,79 @@ -package com.lingnan.supermarket.dialog; - -import java.awt.Container; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Vector; - -import javax.swing.JButton; -import javax.swing.JDialog; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTable; -import javax.swing.JTextField; - -import com.lingnan.supermarket.*; -import com.lingnan.supermarket.dao.UserService; -import com.lingnan.supermarket.dao.impl.BufferImpl; -import com.lingnan.supermarket.dao.impl.UserServiceImpl; -import com.lingnan.supermarket.dao.impl.productionImpl; -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.table.OutTableModel; -import com.lingnan.supermarket.view.OutView; - - -public class ChangeSumDialog extends JDialog implements ActionListener{ - - - private JPanel prodIdPanel,sumPanel,phonePanel,opePanel,titlePanel; - - private JLabel prodIdLabel,sumLabel,titleLabel; - private JTextField prodIdTF,sumTF; - - private JButton UpdateBtn,cancelBtn; - - - private OutTableModel outTableModel = new OutTableModel(); - - private Buffer buffer; - - private String prodId,mark;/*mark用来标记是进货还是出货系统*/ - - private Vector v; - - public ChangeSumDialog(JFrame parent,String prodId,String mark,Vector v) { - super(parent,"更改商品数量"); - - setSize(350,200); - setLocationRelativeTo(null); - setModal(true); - setResizable(false); - this.setLayout(new FlowLayout()); - - this.prodId=prodId; - this.mark=mark; - this.v = v; - initView(); +package com.lingnan.supermarket.dialog; // 声明当前类所在的包 + +import java.awt.Container; // 导入AWT容器类 +import java.awt.FlowLayout; // 导入流式布局类 +import java.awt.event.ActionEvent; // 导入动作事件类 +import java.awt.event.ActionListener; // 导入动作监听器接口 +import java.util.Vector; // 导入向量类,用于存储对象集合 + +import javax.swing.JButton; // 导入Swing按钮组件 +import javax.swing.JDialog; // 导入Swing对话框组件 +import javax.swing.JFrame; // 导入Swing顶层窗口组件 +import javax.swing.JLabel; // 导入Swing标签组件 +import javax.swing.JOptionPane; // 导入Swing对话框工具类 +import javax.swing.JPanel; // 导入Swing面板组件 +import javax.swing.JTable; // 导入Swing表格组件 +import javax.swing.JTextField; // 导入Swing文本框组件 + +import com.lingnan.supermarket.*; // 导入超市项目相关的包 +import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区服务实现类 +import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 +import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 +import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 +import com.lingnan.supermarket.view.OutView; // 导入出库视图类 + + + +public class ChangeSumDialog extends JDialog implements ActionListener{ // 定义一个对话框类ChangeSumDialog,继承自JDialog并实现ActionListener接口 + + private JPanel prodIdPanel,sumPanel,phonePanel,opePanel,titlePanel; // 声明多个面板变量,用于布局不同的组件 + + private JLabel prodIdLabel,sumLabel,titleLabel; // 声明标签变量,用于显示文本 + private JTextField prodIdTF,sumTF; // 声明文本框变量,用于输入数据 + + private JButton UpdateBtn,cancelBtn; // 声明按钮变量,用于执行更新和取消操作 + + private OutTableModel outTableModel = new OutTableModel(); // 创建出库表格模型实例 + + private Buffer buffer; // 声明缓冲区对象变量 + + private String prodId,mark; /*mark用来标记是进货还是出货系统*/ // 声明字符串变量,用于存储产品ID和标记 + + private Vector v; // 声明向量变量,用于存储产品集合 + + public ChangeSumDialog(JFrame parent,String prodId,String mark,Vector v) { // 构造方法,接收父窗口、产品ID、标记和产品集合作为参数 + super(parent,"更改商品数量"); // 调用父类构造方法,设置对话框标题 + + setSize(350,200); // 设置对话框大小 + setLocationRelativeTo(null); // 设置对话框相对于父窗口居中显示 + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框不可调整大小 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + this.prodId=prodId; // 将参数prodId赋值给成员变量prodId + this.mark=mark; // 将参数mark赋值给成员变量mark + this.v = v; // 将参数v赋值给成员变量v + initView(); // 初始化视图 + } - - public ChangeSumDialog(JFrame parent,String prodId,String mark) { - super(parent,"更改商品数量"); - - setSize(350,200); - setLocationRelativeTo(null); - setModal(true); - setResizable(false); - this.setLayout(new FlowLayout()); - - this.prodId=prodId; - this.mark=mark; - initView(); + + public ChangeSumDialog(JFrame parent,String prodId,String mark) { // 另一个构造方法,接收父窗口、产品ID和标记作为参数 + super(parent,"更改商品数量"); // 调用父类构造方法,设置对话框标题为"更改商品数量" + + setSize(350,200); // 设置对话框大小为350x200像素 + setLocationRelativeTo(null); // 设置对话框位置相对于父窗口居中显示 + setModal(true); // 设置对话框为模态,即用户必须处理完此对话框才能操作其他窗口 + setResizable(false); // 设置对话框大小不可变 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + this.prodId=prodId; // 将传入的产品ID赋值给成员变量prodId + this.mark=mark; // 将传入的标记赋值给成员变量mark + initView(); // 调用方法初始化视图 + } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java index 78ff81d..04f10a5 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java @@ -1,225 +1,230 @@ -package com.lingnan.supermarket.dialog; - -import java.awt.Container; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.Vector; - -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JDialog; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTable; -import javax.swing.JTextField; - -import com.lingnan.supermarket.*; -import com.lingnan.supermarket.dao.UserService; -import com.lingnan.supermarket.dao.impl.BufferImpl; -import com.lingnan.supermarket.dao.impl.UserServiceImpl; -import com.lingnan.supermarket.dao.impl.productionImpl; -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.table.OutTableModel; -import com.lingnan.supermarket.view.InView; -import com.lingnan.supermarket.view.OutView; -import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; - - -public class InDialog extends JDialog implements ActionListener{ - - - private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; - - private JLabel prodIdLabel,sumLabel; - private JTextField prodIdTF,sumTF; - - private JButton addBtn,cancelBtn; - - - private OutTableModel outTableModel = new OutTableModel(); - - private Production production; - private productionImpl productionImpl; - - private Vector v; - - private User user; - - private JFrame JFramparent; - - private JComboBox combo; - private String allProdId[] = null; - private Vector vAll; - private static String catalog; - - public InDialog(JFrame parent,Vector v,User user) { - super(parent,"添加商品"); - - setSize(250,200); - setLocationRelativeTo(null); - setModal(true); - setResizable(false); - this.setLayout(new FlowLayout()); - JFramparent=parent; - this.v=v; - this.user = user; - initView(); +package com.lingnan.supermarket.dialog; // 声明当前类所在的包 + +import java.awt.Container; // 导入AWT容器类 +import java.awt.FlowLayout; // 导入流式布局类 +import java.awt.event.ActionEvent; // 导入动作事件类 +import java.awt.event.ActionListener; // 导入动作监听器接口 +import java.awt.event.ItemEvent; // 导入项目事件类 +import java.awt.event.ItemListener; // 导入项目监听器接口 +import java.util.Vector; // 导入向量类,用于存储对象集合 + +import javax.swing.JButton; // 导入按钮组件类 +import javax.swing.JComboBox; // 导入下拉框组件类 +import javax.swing.JDialog; // 导入对话框组件类 +import javax.swing.JFrame; // 导入顶层窗口类 +import javax.swing.JLabel; // 导入标签组件类 +import javax.swing.JOptionPane; // 导入对话框工具类 +import javax.swing.JPanel; // 导入面板组件类 +import javax.swing.JTable; // 导入表格组件类 +import javax.swing.JTextField; // 导入文本框组件类 + +import com.lingnan.supermarket.*; // 导入超市项目相关的所有类 +import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区服务实现类 +import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 +import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 +import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 +import com.lingnan.supermarket.view.InView; // 导入进货视图类 +import com.lingnan.supermarket.view.OutView; // 导出出库视图类 +import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener + + + +public class InDialog extends JDialog implements ActionListener{ // 定义一个对话框类InDialog,继承自JDialog并实现ActionListener接口 + + private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; // 声明面板变量,用于不同功能的面板 + + private JLabel prodIdLabel,sumLabel; // 声明标签变量,用于显示文本 + private JTextField prodIdTF,sumTF; // 声明文本框变量,用于输入数据 + + private JButton addBtn,cancelBtn; // 声明按钮变量,用于添加和取消操作 + + private OutTableModel outTableModel = new OutTableModel(); // 创建出库表格模型实例 + + private Production production; // 声明产品数据传输对象 + private productionImpl productionImpl; // 声明产品服务实现类 + + private Vector v; // 声明产品集合变量 + + private User user; // 声明用户数据传输对象 + + private JFrame JFramparent; // 声明顶层窗口变量,用于存储父窗口 + + private JComboBox combo; // 声明下拉框组件变量 + private String allProdId[] = null; // 声明字符串数组,用于存储所有产品ID + private Vector vAll; // 声明产品集合变量,用于存储所有产品 + private static String catalog; // 声明静态字符串变量,用于存储分类信息 + + public InDialog(JFrame parent,Vector v,User user) { // 构造方法,接收父窗口、产品集合和用户对象 + super(parent,"添加商品"); // 调用父类构造方法,设置对话框标题 + + setSize(250,200); // 设置对话框大小 + setLocationRelativeTo(null); // 设置对话框居中显示 + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框不可调整大小 + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + JFramparent=parent; // 初始化父窗口变量 + this.v=v; // 初始化产品集合变量 + this.user = user; // 初始化用户对象 + initView(); // 初始化视图 + } - - - - - + + + + + private void initView() { - prodIdPanel = new JPanel(); - prodIdLabel = new JLabel("编号"); - + prodIdPanel = new JPanel(); // 创建一个面板用于显示产品编号 + prodIdLabel = new JLabel("编号"); // 创建一个标签显示"编号" - productionImpl= new productionImpl(); - vAll=productionImpl.findAllproduction(); - allProdId = new String[vAll.size()]; - for(int i=0;i(allProdId); - combo.addItemListener(new MyItemListener()); - - prodIdPanel.add(prodIdLabel); - prodIdPanel.add(combo); - - - - sumPanel = new JPanel(); - sumLabel = new JLabel("数量"); - sumTF = new JTextField(10); - sumPanel.add(sumLabel); - sumPanel.add(sumTF); - - - opePanel = new JPanel(); - addBtn = new JButton("添加"); - cancelBtn = new JButton("取消"); - addBtn.addActionListener(this); - cancelBtn.addActionListener(this); - opePanel.add(addBtn); - opePanel.add(cancelBtn); - - Container container = getContentPane(); - container.add(prodIdPanel); - container.add(sumPanel); - container.add(opePanel); + catalog = allProdId[0]; // 设置默认分类为第一个产品ID + System.out.println(allProdId[0]); // 打印第一个产品ID + combo = new JComboBox(allProdId); // 创建下拉框,并使用产品ID数组初始化 + combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 + + + prodIdPanel.add(prodIdLabel); // 将标签添加到编号面板 + prodIdPanel.add(combo); // 将下拉框添加到编号面板 + + + + sumPanel = new JPanel(); // 创建一个面板用于显示数量 + sumLabel = new JLabel("数量"); // 创建一个标签显示"数量" + sumTF = new JTextField(10); // 创建一个文本框用于输入数量,宽度为10 + sumPanel.add(sumLabel); // 将标签添加到数量面板 + sumPanel.add(sumTF); // 将文本框添加到数量面板 + + + opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 + addBtn = new JButton("添加"); // 创建一个按钮显示"添加" + cancelBtn = new JButton("取消"); // 创建一个按钮显示"取消" + addBtn.addActionListener(this); // 为添加按钮添加动作监听器 + cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(cancelBtn); // 将取消按钮添加到操作面板 + + + Container container = getContentPane(); // 获取内容面板 + container.add(prodIdPanel); // 将编号面板添加到内容面板 + container.add(sumPanel); // 将数量面板添加到内容面板 + container.add(opePanel); // 将操作面板添加到内容面板 } - + /*将数组传到inview的刷新方法里面再刷新*/ - public Vector getVector(){ + public Vector getVector(){ // 提供一个方法获取产品集合 return v; } - - + //下拉框监听 - static class MyItemListener implements ItemListener{ + static class MyItemListener implements ItemListener{ // 定义一个内部类实现ItemListener接口 @Override - public void itemStateChanged(ItemEvent e) { - JComboBox cb=(JComboBox)e.getSource(); - String select=(String) cb.getSelectedItem(); - catalog=select; + public void itemStateChanged(ItemEvent e) { // 实现项目状态改变时的处理方法 + JComboBox cb=(JComboBox)e.getSource(); // 获取事件源下拉框 + String select=(String) cb.getSelectedItem(); // 获取选中项的值 + catalog=select; // 更新分类信息为选中项的值 + } } - - - - - - - + + + + + + + @Override public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if(source==addBtn){ + Object source = e.getSource(); // 获取事件源 + if(source==addBtn){ // 如果事件源是添加按钮 //1.判断是否存在这个商品 //2.如果存在就获取这条商品记录为一个对象 //3.判断购物缓冲区是否有这个记录 - //3.1如果有update数量和price - //3.2如果没有就insert这条记录,把sum更新 + //3.1如果有update数量和price + //3.2如果没有就insert这条记录,把sum更新 //保存到数据库 //关闭对话框 //刷新table - - String prodId =catalog; - System.out.println("proId="+prodId); - System.out.println("vatalog="+catalog); - - if(sumTF.getText().equals("")) { + + String prodId =catalog; // 获取选中的商品ID + System.out.println("proId="+prodId); // 打印商品ID + System.out.println("vatalog="+catalog); // 打印分类信息 + + + if(sumTF.getText().equals("")) { // 判断数量文本框是否为空 JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); return; } - int sum = Integer.parseInt(sumTF.getText()) ; + int sum = Integer.parseInt(sumTF.getText()) ; // 将文本框中的数量转换为整数 if(sum<0) {/*判断输入大于0*/ JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); return; } - + //TODO 参数校验 /*/判断是已添加,未添加还是不存在*/ - productionImpl productionImpl = new productionImpl(); - production = new Production(); - production = productionImpl.findByIdProduction(prodId); + productionImpl productionImpl = new productionImpl(); // 实例化产品服务实现类 + production = new Production(); // 创建产品对象 + production = productionImpl.findByIdProduction(prodId); // 根据ID查找产品 if(production!=null) {/*商品库有这个商品存在*/ - int mark = 0; - for(Production p:v) { - + int mark = 0; // 标记变量,用于判断商品是否已存在于购物缓冲区 + for(Production p:v) { // 遍历购物缓冲区 + + if(p.getId().equals(prodId)){/*如果数组中存在相同商品就更新数量和价格*/ sum=p.getSum()+sum;/*数量*/ p.setSum(sum); p.setPrice(sum*p.getInPrice());/*进货价格*/ - mark = 1; + mark = 1; // 更新标记 break; } - + } if(mark==0) {/*插入新的*/ System.out.println("缓存区不存在,插入新的数据"); - production.setSum(sum);/*更新价格和数量后插入心的*/ + production.setSum(sum);/*更新价格和数量后插入新的*/ production.setPrice(sum*production.getInPrice()); - v.add(production); + v.add(production); // 将新产品添加到购物缓冲区 - } - - System.out.println("插入后v的大小"+v.size()); - this.dispose(); - JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE); - - - } - - - else {/*商品库没有这个商品*/ - JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE); } + + System.out.println("插入后v的大小"+v.size()); // 打印购物缓冲区大小 + this.dispose(); // 关闭对话框 + JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE); // 显示添加成功消息 + + } + + + + else {/*商品库没有这个商品*/ + JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE); // 显示商品不存在消息 + } } - else if(source == cancelBtn) { - - this.dispose(); + else if(source == cancelBtn) { // 如果事件源是取消按钮 + + this.dispose(); // 关闭对话框 + } } + } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java index 9016fb9..d2ea00f 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java @@ -1,272 +1,267 @@ -package com.lingnan.supermarket.dialog; - -import java.awt.Container; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.ArrayList; - -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JDialog; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTextField; - -import com.lingnan.supermarket.*; -import com.lingnan.supermarket.dao.SupplierInfService; -import com.lingnan.supermarket.dao.productionService; -import com.lingnan.supermarket.dao.impl.SupplierInfImpl; -import com.lingnan.supermarket.dao.impl.prodCatalogImpl; -import com.lingnan.supermarket.dao.impl.productionImpl; -import com.lingnan.supermarket.dto.ProdCatalog; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.SupplierInf; -import com.lingnan.supermarket.table.ProdCatalogTM; -import com.lingnan.supermarket.view.StorageView; -import com.lingnan.supermarket.view.SupplierView; -import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; - -public class ProductionDialog extends JDialog implements ActionListener { - - private JPanel namePanel, addressPanel, contactPanel, - opePanel,idPanel,inpricePanel,outpricePanel,lifePanel, - sumPanel,supplyidPanel,id2Panel,name2Panel; - - private JLabel nameLabel, addressLabel, contactLabel, - idLabel,inpriceLabel,outpriceLabel,lifeLabel,sumLabel, - supplyidLabel,id2Label,name2Label; - private JTextField nameTF, addressTF, contactTF, - idTF,inpriceTF,outpriceTF,lifeTF,sumTF, - supplyidTF,id2TF,name2TF; - - private JButton saveBtn, cancelBtn; - - private productionService productionService = new productionImpl(); - - //下拉类别 - private String log[]=null; - private ArrayListalog=null; - private ProdCatalogTM prodCatalogTM; - private ProdCatalog pc; - private prodCatalogImpl pci; - private JComboBox combo; - private String id2; - private String name2; - - //下拉供应商类别 - private String superlier[]=null; - private ArrayListasuperlier=null; - private SupplierInf si; - private SupplierInfImpl sii; - private JComboBox combo1; - private int supplyid; - - private StorageView storageView; - - private Production production; - - public ProductionDialog(JFrame parent) { - super(parent, "添加"); - +package com.lingnan.supermarket.dialog; // 声明当前类所在的包 + +import java.awt.Container; // 导入AWT容器类 +import java.awt.FlowLayout; // 导入流式布局类 +import java.awt.event.ActionEvent; // 导入动作事件类 +import java.awt.event.ActionListener; // 导入动作监听器接口 +import java.awt.event.ItemEvent; // 导入项目事件类 +import java.awt.event.ItemListener; // 导入项目监听器接口 +import java.util.ArrayList; // 导入ArrayList类 + +import javax.swing.JButton; // 导入Swing的按钮组件 +import javax.swing.JComboBox; // 导入Swing的下拉框组件 +import javax.swing.JDialog; // 导入Swing的对话框组件 +import javax.swing.JFrame; // 导入Swing的窗口框架组件 +import javax.swing.JLabel; // 导入Swing的标签组件 +import javax.swing.JOptionPane; // 导入Swing的对话框工具类 +import javax.swing.JPanel; // 导入Swing的面板组件 +import javax.swing.JTextField; // 导入Swing的文本框组件 + +import com.lingnan.supermarket.*; // 导入supermarket包下的所有类 +import com.lingnan.supermarket.dao.SupplierInfService; // 导入供应商信息服务接口 +import com.lingnan.supermarket.dao.productionService; // 导入产品服务接口 +import com.lingnan.supermarket.dao.impl.SupplierInfImpl; // 导入供应商信息服务的实现类 +import com.lingnan.supermarket.dao.impl.prodCatalogImpl; // 导入产品目录服务的实现类 +import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务的实现类 +import com.lingnan.supermarket.dto.ProdCatalog; // 导入产品目录数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.SupplierInf; // 导入供应商信息数据传输对象 +import com.lingnan.supermarket.table.ProdCatalogTM; // 导入产品目录表格模型 +import com.lingnan.supermarket.view.StorageView; // 导入库存视图 +import com.lingnan.supermarket.view.SupplierView; // 导入供应商视图 +import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener + +public class ProductionDialog extends JDialog implements ActionListener { // 定义一个对话框类ProductionDialog,继承自JDialog并实现ActionListener接口 + + private JPanel namePanel, addressPanel, contactPanel, // 声明多个面板变量 + opePanel,idPanel,inpricePanel,outpricePanel,lifePanel, // 用于不同信息的布局 + sumPanel,supplyidPanel,id2Panel,name2Panel; // + + private JLabel nameLabel, addressLabel, contactLabel, // 声明多个标签变量 + idLabel,inpriceLabel,outpriceLabel,lifeLabel,sumLabel, // 用于显示不同信息的标签 + supplyidLabel,id2Label,name2Label; // + private JTextField nameTF, addressTF, contactTF, // 声明多个文本框变量 + idTF,inpriceTF,outpriceTF,lifeTF,sumTF, // 用于输入不同信息 + supplyidTF,id2TF,name2TF; // + + private JButton saveBtn, cancelBtn; // 声明保存和取消按钮变量 + + private productionService productionService = new productionImpl(); // 实例化产品服务 - setSize(350, 500); + // 下拉类别相关变量 + private String log[]=null; // 用于存储类别信息的数组 + private ArrayListalog=null; // 用于存储类别信息的列表 + private ProdCatalogTM prodCatalogTM; // 产品目录表格模型 + private ProdCatalog pc; // 产品目录数据传输对象 + private prodCatalogImpl pci; // 产品目录服务实现类 + private JComboBox combo; // 下拉框组件 + private String id2; // 产品目录ID + private String name2; // 产品目录名称 - setLocationRelativeTo(null); + // 下拉供应商类别相关变量 + private String superlier[]=null; // 用于存储供应商信息的数组 + private ArrayListasuperlier=null; // 用于存储供应商信息的列表 + private SupplierInf si; // 供应商信息数据传输对象 + private SupplierInfImpl sii; // 供应商信息服务实现类 + private JComboBox combo1; // 供应商下拉框组件 + private int supplyid; // 供应商ID - setModal(true); - setResizable(false); + private StorageView storageView; // 库存视图引用 - this.setLayout(new FlowLayout()); + private Production production; // 产品数据传输对象 - initView(); + + public ProductionDialog(JFrame parent) { // 构造函数,接收一个父窗口作为参数 + super(parent, "添加"); // 调用父类构造函数,设置对话框标题为"添加" + + setSize(350, 500); // 设置对话框大小 + + setLocationRelativeTo(null); // 设置对话框相对于屏幕居中 + + setModal(true); // 设置对话框为模态 + setResizable(false); // 设置对话框不可调整大小 + + this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 + + initView(); // 初始化视图 } - private void initView() { - idPanel = new JPanel(); - idLabel = new JLabel("商品编号"); - idTF = new JTextField(15); - idPanel.add(idLabel); - idPanel.add(idTF); + private void initView() { // 初始化视图的方法 + idPanel = new JPanel(); // 创建一个面板用于显示商品编号 + idLabel = new JLabel("商品编号"); // 创建一个标签显示"商品编号" + idTF = new JTextField(15); // 创建一个文本框用于输入商品编号,宽度为15 + idPanel.add(idLabel); // 将标签添加到面板 + idPanel.add(idTF); // 将文本框添加到面板 - - namePanel = new JPanel(); - nameLabel = new JLabel("名称"); - nameTF = new JTextField(15); - namePanel.add(nameLabel); - namePanel.add(nameTF); - - - inpricePanel = new JPanel(); - inpriceLabel = new JLabel("进货单价"); - inpriceTF = new JTextField(15); - inpricePanel.add(inpriceLabel); - inpricePanel.add(inpriceTF); - - outpricePanel = new JPanel(); - outpriceLabel = new JLabel("购买单价"); - outpriceTF = new JTextField(15); - outpricePanel.add(outpriceLabel); - outpricePanel.add(outpriceTF); - - - lifePanel = new JPanel(); - lifeLabel = new JLabel("保质期(月份数)"); - lifeTF = new JTextField(15); - lifePanel.add(lifeLabel); - lifePanel.add(lifeTF); - - - sumPanel = new JPanel(); - sumLabel = new JLabel("库存"); - sumTF = new JTextField(15); - sumPanel.add(sumLabel); - sumPanel.add(sumTF); - - //供应商名下拉框 传递supplyid - supplyidPanel = new JPanel(); - supplyidLabel = new JLabel("供应商"); -// supplyidTF = new JTextField(15); - - sii=new SupplierInfImpl(); - this.asuperlier=sii.findNameSupplier(); - this.superlier=new String[asuperlier.size()]; + + namePanel = new JPanel(); // 创建一个面板用于显示名称 + nameLabel = new JLabel("名称"); // 创建一个标签显示"名称" + nameTF = new JTextField(15); // 创建一个文本框用于输入名称,宽度为15 + namePanel.add(nameLabel); // 将标签添加到面板 + namePanel.add(nameTF); // 将文本框添加到面板 + + + inpricePanel = new JPanel(); // 创建一个面板用于显示进货单价 + inpriceLabel = new JLabel("进货单价"); // 创建一个标签显示"进货单价" + inpriceTF = new JTextField(15); // 创建一个文本框用于输入进货单价,宽度为15 + inpricePanel.add(inpriceLabel); // 将标签添加到面板 + inpricePanel.add(inpriceTF); // 将文本框添加到面板 + + + outpricePanel = new JPanel(); // 创建一个面板用于显示购买单价 + outpriceLabel = new JLabel("购买单价"); // 创建一个标签显示"购买单价" + outpriceTF = new JTextField(15); // 创建一个文本框用于输入购买单价,宽度为15 + outpricePanel.add(outpriceLabel); // 将标签添加到面板 + outpricePanel.add(outpriceTF); // 将文本框添加到面板 + + + lifePanel = new JPanel(); // 创建一个面板用于显示保质期 + lifeLabel = new JLabel("保质期(月份数)"); // 创建一个标签显示"保质期(月份数)" + lifeTF = new JTextField(15); // 创建一个文本框用于输入保质期,宽度为15 + lifePanel.add(lifeLabel); // 将标签添加到面板 + lifePanel.add(lifeTF); // 将文本框添加到面板 + + + + sumPanel = new JPanel(); // 创建一个面板用于显示库存 + sumLabel = new JLabel("库存"); // 创建一个标签显示"库存" + sumTF = new JTextField(15); // 创建一个文本框用于输入库存数量,宽度为15 + sumPanel.add(sumLabel); // 将标签添加到面板 + sumPanel.add(sumTF); // 将文本框添加到面板 + +//供应商名下拉框 传递supplyid + supplyidPanel = new JPanel(); // 创建一个面板用于显示供应商信息 + supplyidLabel = new JLabel("供应商"); // 创建一个标签显示"供应商" +//supplyidTF = new JTextField(15); // 注释掉的代码,原本可能是用于输入供应商ID的文本框 + + sii=new SupplierInfImpl(); // 创建供应商信息服务的实例 + this.asuperlier=sii.findNameSupplier(); // 获取所有供应商名称的列表 + this.superlier=new String[asuperlier.size()]; // 创建一个字符串数组用于存储供应商名称 for(int i=0;i(superlier); - combo1.addItemListener(new MyItemListener1()); - - supplyidPanel.add(supplyidLabel); - supplyidPanel.add(combo1); - - - - - - /* id2Panel = new JPanel(); - id2Label = new JLabel("分类id"); - id2TF = new JTextField(id2,15); - id2Panel.add(id2Label); - id2Panel.add(id2TF);*/ - //类名下拉框 - name2Panel = new JPanel(); - name2Label = new JLabel("类名"); - pci=new prodCatalogImpl(); - this.alog=pci.findNameProdCatalog(); - this.log=new String[alog.size()]; + + combo1 = new JComboBox(superlier); // 创建一个下拉框组件,用于选择供应商 + combo1.addItemListener(new MyItemListener1()); // 为下拉框添加项目监听器 + supplyidPanel.add(supplyidLabel); // 将标签添加到面板 + supplyidPanel.add(combo1); // 将下拉框添加到面板 + +/* id2Panel = new JPanel(); +id2Label = new JLabel("分类id"); +id2TF = new JTextField(id2,15); +id2Panel.add(id2Label); +id2Panel.add(id2TF);*/ +//类名下拉框 + name2Panel = new JPanel(); // 创建一个面板用于显示类名 + name2Label = new JLabel("类名"); // 创建一个标签显示"类名" + pci=new prodCatalogImpl(); // 创建产品目录服务的实例 + this.alog=pci.findNameProdCatalog(); // 获取所有产品目录名称的列表 + this.log=new String[alog.size()]; // 创建一个字符串数组用于存储产品目录名称 for(int i=0;i(log); - combo.addItemListener(new MyItemListener()); - name2Panel.add(name2Label); - name2Panel.add(combo); + log[i]=alog.get(i); // 将产品目录名称填充到字符串数组中 + + combo = new JComboBox(log); // 创建一个下拉框组件,用于选择产品目录 + combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 + name2Panel.add(name2Label); // 将标签添加到面板 + name2Panel.add(combo); // 将下拉框添加到面板 + + addressPanel = new JPanel(); // 创建一个面板用于显示地址 + addressLabel = new JLabel("地址"); // 创建一个标签显示"地址" + addressTF = new JTextField(15); // 创建一个文本框用于输入地址,宽度为15 + addressPanel.add(addressLabel); // 将标签添加到面板 + addressPanel.add(addressTF); // 将文本框添加到面板 + + contactPanel = new JPanel(); // 创建一个面板用于显示联系方式 + contactLabel = new JLabel("电话"); // 创建一个标签显示"电话" + contactTF = new JTextField(15); // 创建一个文本框用于输入电话,宽度为15 + contactPanel.add(contactLabel); // 将标签添加到面板 + contactPanel.add(contactTF); // 将文本框添加到面板 + + opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 + saveBtn = new JButton("保存"); // 创建一个保存按钮 + cancelBtn = new JButton("取消"); // 创建一个取消按钮 + saveBtn.addActionListener(this); // 为保存按钮添加动作监听器 + cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 + opePanel.add(saveBtn); // 将保存按钮添加到面板 + opePanel.add(cancelBtn); // 将取消按钮添加到面板 + + Container container = getContentPane(); // 获取对话框的内容面板 + container.add(idPanel); // 将商品编号面板添加到内容面板 + container.add(namePanel); // 将名称面板添加到内容面板 + container.add(inpricePanel); // 将进货单价面板添加到内容面板 + container.add(outpricePanel); // 将购买单价面板添加到内容面板 + container.add(lifePanel); // 将保质期面板添加到内容面板 + container.add(sumPanel); // 将库存面板添加到内容面板 + container.add(supplyidPanel); // 将供应商面板添加到内容面板 +//container.add(id2Panel); // 注释掉的代码,原本可能是用于添加分类ID面板 + container.add(name2Panel); // 将类名面板添加到内容面板 + container.add(opePanel); // 将操作按钮面板添加到内容面板 - - addressPanel = new JPanel(); - addressLabel = new JLabel("地址"); - addressTF = new JTextField(15); - addressPanel.add(addressLabel); - addressPanel.add(addressTF); - - contactPanel = new JPanel(); - contactLabel = new JLabel("电话"); - contactTF = new JTextField(15); - contactPanel.add(contactLabel); - contactPanel.add(contactTF); - - opePanel = new JPanel(); - saveBtn = new JButton("保存"); - cancelBtn = new JButton("取消"); - saveBtn.addActionListener(this); - cancelBtn.addActionListener(this); - opePanel.add(saveBtn); - opePanel.add(cancelBtn); - - Container container = getContentPane(); - container.add(idPanel); - container.add(namePanel); - container.add(inpricePanel); - container.add(outpricePanel); - container.add(lifePanel); - container.add(sumPanel); - container.add(supplyidPanel); -// container.add(id2Panel); - container.add(name2Panel); - container.add(opePanel); } @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if (source == saveBtn) { + public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 + Object source = e.getSource(); // 获取事件源 + if (source == saveBtn) { // 如果事件源是保存按钮 // 思路获取数据 // 保存到数据库 // 关闭对话框 // 刷新table - String name = nameTF.getText(); - String id = idTF.getText(); - float inprice = Float.parseFloat((inpriceTF.getText())); - float outprice = Float.parseFloat(outpriceTF.getText()); - int life = Integer.parseInt(lifeTF.getText()); - int sum = Integer.parseInt(sumTF.getText()); - - + String name = nameTF.getText(); // 获取名称文本框的内容 + String id = idTF.getText(); // 获取商品编号文本框的内容 + float inprice = Float.parseFloat((inpriceTF.getText())); // 将进货单价文本框的内容转换为浮点数 + float outprice = Float.parseFloat(outpriceTF.getText()); // 将销售单价文本框的内容转换为浮点数 + int life = Integer.parseInt(lifeTF.getText()); // 将保质期文本框的内容转换为整数 + int sum = Integer.parseInt(sumTF.getText()); // 将库存文本框的内容转换为整数 // TODO 参数校验 - if (this.production == null) { - if(supplyid==-1){ + if (this.production == null) { // 如果production对象为空,表示是添加新商品 + if(supplyid==-1){ // 如果供应商ID为-1,表示商品检索出错 JOptionPane.showMessageDialog(this, "商品检索出错", "提示", - JOptionPane.ERROR_MESSAGE); - return; + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + return; // 退出方法 } - if(supplyid==0){ + if(supplyid==0){ // 如果供应商ID为0,表示未选择商品名 JOptionPane.showMessageDialog(this, "请选择商品名", "提示", - JOptionPane.ERROR_MESSAGE); - return; + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + return; // 退出方法 } - if(id2.equals("0")){ + if(id2.equals("0")){ // 如果分类ID为"0",表示未选择商品类 JOptionPane.showMessageDialog(this, "请选择商品类", "提示", - JOptionPane.ERROR_MESSAGE); - return; + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + return; // 退出方法 } - - Production production = new Production(); - production.setId(id); - production.setName(name); - production.setInPrice(inprice); - production.setOutPrice(outprice); - production.setLife(life); - production.setSum(sum); - production.setSupplyId(supplyid); - production.setId2(id2); - production.setName2(name2); - int result = productionService.addProduction(production); - // int result = 1; - if (result == 1) { + + Production production = new Production(); // 创建新的Production对象 + production.setId(id); // 设置商品编号 + production.setName(name); // 设置商品名称 + production.setInPrice(inprice); // 设置进货单价 + production.setOutPrice(outprice); // 设置销售单价 + production.setLife(life); // 设置保质期 + production.setSum(sum); // 设置库存 + production.setSupplyId(supplyid); // 设置供应商ID + production.setId2(id2); // 设置分类ID + production.setName2(name2); // 设置分类名称 + int result = productionService.addProduction(production); // 调用服务添加商品 + // int result = 1; // 注释掉的代码,可能是用于测试 + if (result == 1) { // 如果添加成功 JOptionPane.showMessageDialog(this, "添加成功", "提示", - JOptionPane.INFORMATION_MESSAGE); - this.dispose(); - } else if(result == 2){ + JOptionPane.INFORMATION_MESSAGE); // 显示成功消息 + this.dispose(); // 关闭对话框 + } else if(result == 2){ // 如果返回值为2,表示已存在该商品 JOptionPane.showMessageDialog(this, "已存在该商品", "提示", - JOptionPane.ERROR_MESSAGE); + JOptionPane.ERROR_MESSAGE); // 显示错误消息 } - else { + else { // 如果添加失败 JOptionPane.showMessageDialog(this, "出错!添加失败", "提示", - JOptionPane.ERROR_MESSAGE); + JOptionPane.ERROR_MESSAGE); // 显示错误消息 + } }/*else{ //更新 @@ -283,37 +278,41 @@ public class ProductionDialog extends JDialog implements ActionListener { } }*/ - } else if (source == cancelBtn) { + } else if (source == cancelBtn) { // 如果事件源是取消按钮 - this.dispose(); + this.dispose(); // 关闭对话框 } } + + // 定义一个内部类MyItemListener实现ItemListener接口 public class MyItemListener implements ItemListener { @Override - public void itemStateChanged(ItemEvent e) { - JComboBox cb = (JComboBox) e.getSource(); - name2 = (String) cb.getSelectedItem(); - pci =new prodCatalogImpl(); - for(int i=0;i combo; - // 下拉框中的选项内容,包括请选择身份以及不同的权限角色 - private String[] identity = { "请选择身份", "收银员", "管理员", "超级管理员" }; - - // 构造函数,用于创建添加用户信息的对话框 + private String [] identity={"请选择身份","收银员","管理员","超级管理员"}; + public UserDialog(JFrame parent) { - // 调用父类JDialog的构造函数,设置对话框的标题为"添加" - super(parent, "添加"); - - // 设置对话框的大小 - setSize(350, 300); - - // 设置对话框在屏幕中央显示 + super(parent,"添加"); + + setSize(350,300); + setLocationRelativeTo(null); - - // 设置对话框为模态对话框,即显示时会阻塞其他窗口的操作 + setModal(true); - - // 设置对话框大小不可调整 setResizable(false); - - // 设置对话框的布局为流式布局 + this.setLayout(new FlowLayout()); - - // 初始化对话框的视图组件 + initView(); } - - // 初始化对话框视图组件的方法 + private void initView() { - // 姓名面板及相关组件的初始化 namePanel = new JPanel(); nameLabel = new JLabel("姓名"); nameTF = new JTextField(15); namePanel.add(nameLabel); namePanel.add(nameTF); - - // 账号面板及相关组件的初始化 + loginNamePanel = new JPanel(); loginNameLabel = new JLabel("账号"); loginNameTF = new JTextField(15); loginNamePanel.add(loginNameLabel); loginNamePanel.add(loginNameTF); - - // 手机面板及相关组件的初始化 + phonePanel = new JPanel(); phoneLabel = new JLabel("手机"); phoneTF = new JTextField(15); phonePanel.add(phoneLabel); phonePanel.add(phoneTF); - - // 密码面板及相关组件的初始化 + passwordPanel = new JPanel(); passwordLabel = new JLabel("密码"); passwordTF = new JTextField(15); passwordPanel.add(passwordLabel); passwordPanel.add(passwordTF); - - // 权限面板及相关组件的初始化 + sSuperPanel = new JPanel(); sSuperLabel = new JLabel("权限"); - // 这里原本有一个文本框用于输入权限,后改为下拉框,所以注释掉了 - // sSuperTF = new JTextField(15); - combo = new JComboBox(identity); - // 为下拉框添加监听器,用于监听选项变化事件 +// sSuperTF = new JTextField(15); + combo= new JComboBox(identity); combo.addItemListener(new MyItemListener()); sSuperPanel.add(sSuperLabel); sSuperPanel.add(combo); - - // 操作按钮面板及相关组件的初始化 + +// sSuperPanel.add(sSuperTF); + opePanel = new JPanel(); saveBtn = new JButton("保存"); cancelBtn = new JButton("取消"); - // 为保存按钮和取消按钮添加点击事件监听器 saveBtn.addActionListener(this); cancelBtn.addActionListener(this); opePanel.add(saveBtn); opePanel.add(cancelBtn); - - // 将各个面板添加到对话框的内容面板中 + Container container = getContentPane(); container.add(namePanel); container.add(loginNamePanel); @@ -126,64 +105,57 @@ public class UserDialog extends JDialog implements ActionListener { container.add(opePanel); } - // 处理按钮点击事件的方法,实现了ActionListener接口中的方法 @Override public void actionPerformed(ActionEvent e) { - // 获取触发事件的源组件 Object source = e.getSource(); - if (source == saveBtn) { - // 如果点击的是保存按钮,执行以下操作: - - // 获取用户在文本框中输入的姓名、账号、手机和密码信息 + if(source==saveBtn){ + //思路获取数据 + //保存到数据库 + //关闭对话框 + //刷新table + String name = nameTF.getText(); String loginName = loginNameTF.getText(); String phone = phoneTF.getText(); - String password = passwordTF.getText(); - - // TODO 参数校验部分,这里应该对获取到的用户输入信息进行合法性校验,比如非空、格式等校验,但目前未实现具体逻辑 - - // 创建一个新的User对象,用于存储要添加到数据库的用户信息 + String password=passwordTF.getText(); + + //TODO 参数校验 User user = new User(); user.setRname(name); user.setUsername(loginName); user.setPhone(phone); user.setPassword(password); user.setUsuper(sSuper); - - // 调用用户服务接口的添加用户方法,将用户信息添加到数据库中,并获取返回结果 + + + int result = userService.addUser(user); - if (result == 1) { - // 如果添加成功,关闭当前对话框 + if(result==1) { this.dispose(); - // 弹出提示框显示添加成功信息 - JOptionPane.showMessageDialog(this, "添加成功", "提示", JOptionPane.INFORMATION_MESSAGE); - } else { - // 如果添加失败,弹出提示框显示添加失败信息 - JOptionPane.showMessageDialog(this, "添加失败", "提示", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.INFORMATION_MESSAGE); + }else { + JOptionPane.showMessageDialog(this,"添加失败","提示",JOptionPane.ERROR_MESSAGE); } - } else if (source == cancelBtn) { - // 如果点击的是取消按钮,直接关闭当前对话框 + }else if(source == cancelBtn) { + this.dispose(); } } - - // 内部类,实现了ItemListener接口,用于监听下拉框选项变化事件 - static class MyItemListener implements ItemListener { + static class MyItemListener implements ItemListener{ @Override public void itemStateChanged(ItemEvent e) { - // 获取触发事件的下拉框组件 - JComboBox cb = (JComboBox) e.getSource(); - // 获取当前选中的下拉框选项内容 - String sSuper1 = (String) cb.getSelectedItem(); - if (sSuper1.equals("请选择身份")) - sSuper = -1; - else if (sSuper1.equals("收银员")) - sSuper = 2; + JComboBox cb=(JComboBox)e.getSource(); + String sSuper1=(String) cb.getSelectedItem(); + if(sSuper1.equals("请选择身份")) + sSuper=-1; + else if(sSuper1.equals("收银员")) + sSuper=2; else if (sSuper1.equals("管理员")) - sSuper = 1; + sSuper=1; else - sSuper = 0; + sSuper=0; } + } } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/UserInfDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/UserInfDialog.java index a4a7721..af17b61 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/UserInfDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/UserInfDialog.java @@ -22,257 +22,146 @@ import com.lingnan.supermarket.dao.impl.UserServiceImpl; import com.lingnan.supermarket.dto.User; import com.lingnan.supermarket.view.LoginView; -// UserInfDialog类继承自JDialog,用于创建一个修改用户信息的对话框窗口,并实现了ActionListener接口来处理按钮点击事件 public class UserInfDialog extends JDialog implements ActionListener { - // 构建对话框界面的各个面板、标签、文本框和按钮等组件的声明 - private JPanel namePanel, loginNamePanel, phonePanel, opePanel, passwordPanel, sSuperPanel; - // 用于存放姓名相关组件的面板 - private JLabel nameLabel, loginNameLabel, phoneLabel, passwordLabel, sSuperLabel; - // 分别对应姓名、登录名、联系电话、密码、权限等信息的标签组件,用于在界面上显示相应的文字提示 + private JPanel namePanel, loginNamePanel, phonePanel, opePanel, + passwordPanel, sSuperPanel; + + private JLabel nameLabel, loginNameLabel, phoneLabel, passwordLabel, + sSuperLabel; private JTextField nameTF, loginNameTF, phoneTF, passwordTF, sSuperTF; - // 分别对应姓名、登录名、联系电话、密码、权限等信息的文本框组件,用于用户输入或显示相应信息 + private JButton saveBtn, cancelBtn; - // 保存按钮和取消按钮,用于触发保存修改信息或取消操作的动作 - // 用户服务接口的实现类实例,用于调用与用户相关的数据库操作方法 private UserService userService = new UserServiceImpl(); - // 创建UserServiceImpl类的实例,通过该实例可以调用具体实现的用户相关数据库操作,比如更新用户信息等 - // 要修改信息的用户对象 private User user; - // 存储当前要在对话框中进行信息修改操作的用户对象,包含了该用户原本的各种信息 - - // 用于存储用户权限级别,初始值为从传入的用户对象中获取的权限级别 + // 下拉权限框 private int sSuper = -1; - // 记录用户的权限级别,初始化为 -1,后续会根据传入用户对象的权限情况进行赋值 - - // 下拉框组件,用于选择用户权限 private JComboBox combo; - // 定义一个下拉框组件,用于展示可选的用户权限选项,其选项内容为字符串类型 - - // 下拉框中的选项内容,包括当前权限以及不同的权限角色 - private String[] identity = { "当前权限", "收银员", "管理员", "超级管理员","进货员" }; - // 定义一个字符串数组,存储下拉框中可供选择的用户权限选项内容 - - // 父窗口JFrame的引用,可能用于在某些操作后对父窗口进行处理 + private String[] identity = { "当前权限", "收银员", "管理员", "超级管理员" }; + private JFrame JFrame; - // 保存传入的父窗口(JFrame类型)的引用 - // 构造函数,用于创建修改用户信息的对话框,传入父窗口JFrame和要修改信息的用户对象 public UserInfDialog(JFrame parent, User user) { - // 调用父类JDialog的构造函数,设置对话框的标题为"添加" super(parent, "添加"); this.user = user; - // 将传入的要修改信息的用户对象赋值给当前类的成员变量user - - // 设置当前用户的权限级别 this.sSuper = user.getUsuper(); - // 从传入的用户对象中获取其原本的权限级别,并赋值给当前类的成员变量sSuper - // 设置对话框的大小 setSize(350, 300); - // 设置对话框的宽度为350像素,高度为300像素,确定对话框在屏幕上显示的初始大小 - // 设置对话框在屏幕中央显示 setLocationRelativeTo(null); - // 通过传入null参数,使对话框在屏幕的中心位置显示 - // 设置对话框为模态对话框,即显示时会阻塞其他窗口的操作 setModal(true); - // 模态对话框会强制用户在关闭它之前只能与该对话框进行交互,不能操作其他窗口 - - // 设置对话框大小不可调整 setResizable(false); - // 禁止用户通过拖动边框等方式改变对话框的大小,保持固定的布局和显示效果 - // 设置对话框的布局为流式布局 this.setLayout(new FlowLayout()); - // 使用流式布局来排列对话框内的组件,组件会按照添加的顺序从左到右、从上到下依次排列 - - // 保存父窗口的引用 - this.JFrame = parent; - // 将传入的父窗口引用赋值给当前类的成员变量JFrame + + this.JFrame=parent; - // 初始化对话框的视图组件 initView(); } - // 初始化对话框视图组件的方法 private void initView() { - // 姓名面板及相关组件的初始化,文本框中显示当前用户的姓名信息 namePanel = new JPanel(); - // 创建一个新的面板,用于存放姓名相关的标签和文本框组件 nameLabel = new JLabel("姓名"); - // 创建一个显示"姓名"文字的标签组件 nameTF = new JTextField(user.getRname(), 15); - // 创建一个文本框组件,初始内容设置为传入用户对象的真实姓名(通过user.getRname()获取),文本框宽度设置为可显示15个字符左右 namePanel.add(nameLabel); - // 将姓名标签添加到姓名面板中 namePanel.add(nameTF); - // 将姓名文本框添加到姓名面板中 - // 账号面板及相关组件的初始化,文本框中显示当前用户的账号信息 loginNamePanel = new JPanel(); - // 创建一个新的面板,用于存放账号相关的标签和文本框组件 loginNameLabel = new JLabel("账号"); - // 创建一个显示"账号"文字的标签组件 loginNameTF = new JTextField(user.getUsername(), 15); - // 创建一个文本框组件,初始内容设置为传入用户对象的用户名(通过user.getUsername()获取),文本框宽度设置为可显示15个字符左右 loginNamePanel.add(loginNameLabel); - // 将账号标签添加到账号面板中 loginNamePanel.add(loginNameTF); - // 将账号文本框添加到账号面板中 - // 手机面板及相关组件的初始化,文本框中显示当前用户的手机信息 phonePanel = new JPanel(); - // 创建一个新的面板,用于存放手机相关的标签和文本框组件 - phoneLabel = new JLabel("电话"); - // 创建一个显示"联系"文字的标签组件 + phoneLabel = new JLabel("联系"); phoneTF = new JTextField(user.getPhone(), 15); - // 创建一个文本框组件,初始内容设置为传入用户对象的手机号码(通过user.getPhone()获取),文本框宽度设置为可显示15个字符左右 phonePanel.add(phoneLabel); - // 将手机标签添加到手机面板中 phonePanel.add(phoneTF); - // 将手机文本框添加到手机面板中 - // 密码面板及相关组件的初始化,文本框中显示当前用户的密码信息 passwordPanel = new JPanel(); - // 创建一个新的面板,用于存放密码相关的标签和文本框组件 passwordLabel = new JLabel("密码"); - // 创建一个显示"密码"文字的标签组件 passwordTF = new JTextField(user.getPassword(), 15); - // 创建一个文本框组件,初始内容设置为传入用户对象的密码(通过user.getPassword()获取),文本框宽度设置为可显示15个字符左右 passwordPanel.add(passwordLabel); - // 将密码标签添加到密码面板中 passwordPanel.add(passwordTF); - // 将密码文本框添加到密码面板中 +/* sSuperPanel = new JPanel(); + sSuperLabel = new JLabel("权限"); + // sSuperTF = new JTextField(15); + combo = new JComboBox(identity); + combo.addItemListener(new MyItemListener()); + sSuperPanel.add(sSuperLabel); + sSuperPanel.add(combo);*/ - sSuperPanel = new JPanel(); - sSuperLabel = new JLabel("权限"); - // sSuperTF = new JTextField(15); - combo = new JComboBox(identity); - combo.addItemListener(new MyItemListener()); - sSuperPanel.add(sSuperLabel); - sSuperPanel.add(combo); + // sSuperPanel.add(sSuperTF); - // 上述被注释掉的代码原本用于创建权限相关的面板、标签、下拉框组件,并为下拉框添加选项改变的监听器,用于实现完整的权限选择功能,但目前处于简化状态 - - // 操作按钮面板及相关组件的初始化 opePanel = new JPanel(); - // 创建一个新的面板,用于存放操作按钮(保存和取消按钮) saveBtn = new JButton("保存"); - // 创建一个显示"保存"文字的按钮组件,用于触发保存用户信息修改的操作 cancelBtn = new JButton("取消"); - // 创建一个显示"取消"文字的按钮组件,用于触发取消当前修改操作的动作 - // 为保存按钮和取消按钮添加点击事件监听器 saveBtn.addActionListener(this); - // 将保存按钮的点击事件绑定到当前类(实现了ActionListener接口)的actionPerformed方法上,以便处理保存按钮被点击后的操作逻辑 cancelBtn.addActionListener(this); - // 将取消按钮的点击事件绑定到当前类(实现了ActionListener接口)的actionPerformed方法上,以便处理取消按钮被点击后的操作逻辑 opePanel.add(saveBtn); - // 将保存按钮添加到操作按钮面板中 opePanel.add(cancelBtn); - // 将取消按钮添加到操作按钮面板中 - // 将各个面板添加到对话框的内容面板中 Container container = getContentPane(); - // 获取对话框的内容面板,用于添加其他组件面板 container.add(namePanel); - // 将姓名面板添加到对话框的内容面板中 container.add(loginNamePanel); - // 将账号面板添加到对话框的内容面板中 container.add(passwordPanel); - // 将密码面板添加到对话框的内容面板中 container.add(phonePanel); - container.add(sSuperPanel); - // 原本可能添加权限面板 + /*container.add(sSuperPanel);*/ container.add(opePanel); - // 将操作按钮面板添加到对话框的内容面板中 } - // 处理按钮点击事件的方法,实现了ActionListener接口中的方法 @Override public void actionPerformed(ActionEvent e) { - // 获取触发事件的源组件 Object source = e.getSource(); if (source == saveBtn) { - // 如果点击的是保存按钮,执行以下操作: + // 思路获取数据 + // 保存到数据库 + // 关闭对话框 + // 刷新table - // 获取用户在文本框中修改后的姓名、账号、手机和密码信息 String name = nameTF.getText(); - // 获取姓名文本框中用户输入或修改后的姓名内容 String loginName = loginNameTF.getText(); - // 获取账号文本框中用户输入或修改后的账号内容 String phone = phoneTF.getText(); - // 获取手机文本框中用户输入或修改后的手机号码内容 String password = passwordTF.getText(); - // 获取密码文本框中用户输入或修改后的密码内容 - - // 此处注释提示了后续应该添加对获取到的用户输入信息进行合法性校验的代码 - // 创建一个新的User对象,用于存储要更新到数据库的用户信息,设置了部分从原用户对象获取的信息以及修改后的信息 + // TODO 参数校验 User user1 = new User(); user1.setId(user.getId()); - // 设置新用户对象的id为原用户对象的id,确保更新的是正确的用户记录 user1.setRname(name); - // 设置新用户对象的真实姓名为获取到的修改后的姓名内容 user1.setUsername(loginName); - // 设置新用户对象的用户名(账号)为获取到的修改后的账号内容 user1.setPhone(phone); - // 设置新用户对象的手机号码为获取到的修改后的手机号码内容 user1.setPassword(password); - // 设置新用户对象的密码为获取到的修改后的密码内容 user1.setImg(user.getImg()); - // 设置新用户对象的图片相关信息(这里不太明确具体用途,可能是用户头像之类的图片信息)为原用户对象的对应信息 user1.setUsuper(sSuper); - // 设置新用户对象的权限级别为当前记录的权限级别(在构造函数或其他地方已确定) - // 调用用户服务接口的根据用户id更新用户信息的方法,将更新后的用户信息保存到数据库中,并获取返回结果 int result = userService.updateByIdUser(user1); if (result == 1) { - // 如果更新成功,关闭当前对话框 this.dispose(); - // 通过调用dispose方法关闭当前的对话框窗口,释放相关资源 - - // 弹出提示框显示修改成功信息,并提示重新登录 - JOptionPane.showMessageDialog(this, "修改成功,请重新登陆", "提示", JOptionPane.INFORMATION_MESSAGE); - // 使用JOptionPane弹出一个信息提示框,向用户显示修改成功的消息,并提示需要重新登录,提示框的图标为信息图标(INFORMATION_MESSAGE表示) - - // 关闭父窗口 + JOptionPane.showMessageDialog(this, "修改成功,请重新登陆", "提示", + JOptionPane.INFORMATION_MESSAGE); this.JFrame.dispose(); - // 通过调用父窗口的dispose方法关闭父窗口 - - // 创建并显示新的登录视图 new LoginView(); - // 创建一个新的登录视图(LoginView类的实例)并显示出来,方便用户重新登录系统 } else { - // 如果更新失败,弹出提示框显示修改失败信息 - JOptionPane.showMessageDialog(this, "修改失败", "提示", JOptionPane.ERROR_MESSAGE); - // 使用JOptionPane弹出一个错误提示框,向用户显示修改失败的消息 + JOptionPane.showMessageDialog(this, "修改失败", "提示", + JOptionPane.ERROR_MESSAGE); } } else if (source == cancelBtn) { - // 如果点击的是取消按钮,直接关闭当前对话框 + this.dispose(); - // 通过调用dispose方法关闭当前对话框,放弃本次修改操作,释放相关资源 } } - // 实现了ItemListener接口,用于监听下拉框选项变化事件 public class MyItemListener implements ItemListener { @Override public void itemStateChanged(ItemEvent e) { - // 获取触发事件的下拉框组件 JComboBox cb = (JComboBox) e.getSource(); - // 从事件源中获取触发选项改变事件的下拉框对象 - - // 获取当前选中的下拉框选项内容 String sSuper1 = (String) cb.getSelectedItem(); - // 获取下拉框当前选中的选项对应的字符串内容 - if (sSuper1.equals("当前权限")) sSuper = user.getUsuper(); else if (sSuper1.equals("收银员")) @@ -281,7 +170,7 @@ public class UserInfDialog extends JDialog implements ActionListener { sSuper = 1; else sSuper = 0; - // 根据下拉框选中的不同选项内容,来设置当前用户的权限级别,不同的数字0、1、2对应不同的权限 } + } -} \ No newline at end of file +} diff --git a/Supermarket/src/com/lingnan/supermarket/dto/InOrder.java b/Supermarket/src/com/lingnan/supermarket/dto/InOrder.java index 07620d1..4e999c1 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/InOrder.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/InOrder.java @@ -1,48 +1,62 @@ -package com.lingnan.supermarket.dto; +package com.lingnan.supermarket.dto; // 声明当前类所在的包 -import java.util.Date; +import java.util.Date; // 导入Date类,尽管在此类中没有直接使用 +// 定义进货订单类InOrder public class InOrder { - private String iNumber; - private Float allInPrice; - private String inDate; - private String principal; - private int status; - private int delmark; + private String iNumber; // 进货订单编号 + private Float allInPrice; // 总进货价格 + private String inDate; // 进货日期 + private String principal; // 负责人 + private int status; // 订单状态 + private int delmark; // 删除标记 + + // getiNumber方法,用于获取进货订单编号 public String getiNumber() { - return iNumber; + return iNumber; // 返回进货订单编号 } + // setiNumber方法,用于设置进货订单编号 public void setiNumber(String iNumber) { - this.iNumber = iNumber; + this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber } + // getAllInPrice方法,用于获取总进货价格 public Float getAllInPrice() { - return allInPrice; + return allInPrice; // 返回总进货价格 } + // setAllInPrice方法,用于设置总进货价格 public void setAllInPrice(Float allInPrice) { - this.allInPrice = allInPrice; + this.allInPrice = allInPrice; // 将参数allInPrice赋值给成员变量allInPrice } + // getInDate方法,用于获取进货日期 public String getInDate() { - return inDate; + return inDate; // 返回进货日期 } + // setInDate方法,用于设置进货日期 public void setInDate(String inDate) { - this.inDate = inDate; + this.inDate = inDate; // 将参数inDate赋值给成员变量inDate } + // getPrincipal方法,用于获取负责人 public String getPrincipal() { - return principal; + return principal; // 返回负责人 } + // setPrincipal方法,用于设置负责人 public void setPrincipal(String principal) { - this.principal = principal; - } - public int getDelmark() { - return delmark; - } - public void setDelmark(int delmark) { - this.delmark = delmark; + this.principal = principal; // 将参数principal赋值给成员变量principal } + // getStatus方法,用于获取订单状态 public int getStatus() { - return status; + return status; // 返回订单状态 } + // setStatus方法,用于设置订单状态 public void setStatus(int status) { - this.status = status; + this.status = status; // 将参数status赋值给成员变量status + } + // getDelmark方法,用于获取删除标记 + public int getDelmark() { + return delmark; // 返回删除标记 + } + // setDelmark方法,用于设置删除标记 + public void setDelmark(int delmark) { + this.delmark = delmark; // 将参数delmark赋值给成员变量delmark } } diff --git a/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java b/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java index 24a7c77..c5e69ed 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java @@ -1,41 +1,35 @@ -package com.lingnan.supermarket.dto; +package com.lingnan.supermarket.dto; // 声明当前类所在的包 -import com.lingnan.supermarket.dto.base.BsDomain; +import com.lingnan.supermarket.dto.base.BsDomain; // 导入基础域类BsDomain -// 表示入库记录的数据传输对象类,继承自BsDomain -public class InRecord extends BsDomain { - private String iNumber; // 入库编号 - private int sum; // 入库总数 - private Float inPrice; // 入库单价 +// 定义进货记录类InRecord,继承自BsDomain +public class InRecord extends BsDomain{ + private String iNumber; // 进货编号 + private int sum; // 进货数量 + private Float inPrice; // 进货单价 - // 获取入库编号 + // getiNumber方法,用于获取进货编号 public String getiNumber() { - return iNumber; + return iNumber; // 返回进货编号 } - - // 设置入库编号 + // setiNumber方法,用于设置进货编号 public void setiNumber(String iNumber) { - this.iNumber = iNumber; + this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber } - - // 获取入库总数 + // getSum方法,用于获取进货数量 public int getSum() { - return sum; + return sum; // 返回进货数量 } - - // 设置入库总数 + // setSum方法,用于设置进货数量 public void setSum(int sum) { - this.sum = sum; + this.sum = sum; // 将参数sum赋值给成员变量sum } - - // 获取入库单价 + // getInPrice方法,用于获取进货单价 public Float getInPrice() { - return inPrice; + return inPrice; // 返回进货单价 } - - // 设置入库单价 + // setInPrice方法,用于设置进货单价 public void setInPrice(Float inPrice) { - this.inPrice = inPrice; + this.inPrice = inPrice; // 将参数inPrice赋值给成员变量inPrice } } - diff --git a/Supermarket/src/com/lingnan/supermarket/dto/ProdCatalog.java b/Supermarket/src/com/lingnan/supermarket/dto/ProdCatalog.java index 260f059..18fd506 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/ProdCatalog.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/ProdCatalog.java @@ -1,20 +1,25 @@ -package com.lingnan.supermarket.dto; +package com.lingnan.supermarket.dto; // 声明当前类所在的包 +// 定义产品目录类ProdCatalog public class ProdCatalog { - private String id; - private String name; - + private String id; // 产品目录ID + private String name; // 产品目录名称 + + // getId方法,用于获取产品目录ID public String getId() { - return id; + return id; // 返回产品目录ID } + // setId方法,用于设置产品目录ID public void setId(String id) { - this.id = id; + this.id = id; // 将参数id赋值给成员变量id } + // getName方法,用于获取产品目录名称 public String getName() { - return name; + return name; // 返回产品目录名称 } + // setName方法,用于设置产品目录名称 public void setName(String name) { - this.name = name; + this.name = name; // 将参数name赋值给成员变量name } - + } diff --git a/Supermarket/src/com/lingnan/supermarket/dto/StorageRecord.java b/Supermarket/src/com/lingnan/supermarket/dto/StorageRecord.java index 0aa3b09..2afe8c6 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/StorageRecord.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/StorageRecord.java @@ -1,36 +1,46 @@ -package com.lingnan.supermarket.dto; +package com.lingnan.supermarket.dto; // 声明当前类所在的包 -import java.util.Date; +import java.util.Date; // 导入Date类,用于处理日期和时间 -import com.lingnan.supermarket.dto.base.BsDomain; +import com.lingnan.supermarket.dto.base.BsDomain; // 导入基础域类BsDomain +// 定义存储记录类StorageRecord,继承自BsDomain public class StorageRecord extends BsDomain{ - private String theNumber; - private String cDate; - private int num; - private String execute; - public String getTheNumber() { - return theNumber; - } - public void setTheNumber(String theNumber) { - this.theNumber = theNumber; - } - public String getcDate() { - return cDate; - } - public void setcDate(String cDate) { - this.cDate = cDate; - } - public int getNum() { - return num; - } - public void setNum(int num) { - this.num = num; - } - public String getExecute() { - return execute; - } - public void setExecute(String execute) { - this.execute = execute; - } + private String theNumber; // 存储记录编号 + private String cDate; // 记录创建日期 + private int num; // 存储数量 + private String execute; // 执行操作(可能是执行人或者操作类型) + + // getTheNumber方法,用于获取存储记录编号 + public String getTheNumber() { + return theNumber; // 返回存储记录编号 + } + // setTheNumber方法,用于设置存储记录编号 + public void setTheNumber(String theNumber) { + this.theNumber = theNumber; // 将参数theNumber赋值给成员变量theNumber + } + // getcDate方法,用于获取记录创建日期 + public String getcDate() { + return cDate; // 返回记录创建日期 + } + // setcDate方法,用于设置记录创建日期 + public void setcDate(String cDate) { + this.cDate = cDate; // 将参数cDate赋值给成员变量cDate + } + // getNum方法,用于获取存储数量 + public int getNum() { + return num; // 返回存储数量 + } + // setNum方法,用于设置存储数量 + public void setNum(int num) { + this.num = num; // 将参数num赋值给成员变量num + } + // getExecute方法,用于获取执行操作 + public String getExecute() { + return execute; // 返回执行操作 + } + // setExecute方法,用于设置执行操作 + public void setExecute(String execute) { + this.execute = execute; // 将参数execute赋值给成员变量execute + } } diff --git a/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java b/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java index a5dbb2c..65a2e9f 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java @@ -1,43 +1,53 @@ -package com.lingnan.supermarket.dto; +package com.lingnan.supermarket.dto; // 声明当前类所在的包 -import com.lingnan.supermarket.dto.base.BaseDomain; +import com.lingnan.supermarket.dto.base.BaseDomain; // 导入基础域类BaseDomain -// 供应商信息类,继承自BaseDomain +// 定义供应商信息类SupplierInf,继承自BaseDomain public class SupplierInf extends BaseDomain{ private String name; // 供应商名称 private String address; // 供应商地址 - private String contact; // 供应商联系人 - private String email; // 供应商电子邮件 + private String contact; // 供应商联系方式 + private String email; // 供应商邮箱 + // getEmail方法,用于获取供应商邮箱 public String getEmail() { - return email; + return email; // 返回邮箱 } + // setEmail方法,用于设置供应商邮箱 public void setEmail(String email) { - this.email = email; + this.email = email; // 将参数email赋值给成员变量email } private int delmark; // 删除标记 + // getDelmark方法,用于获取删除标记 public int getDelmark() { - return delmark; + return delmark; // 返回删除标记 } + // setDelmark方法,用于设置删除标记 public void setDelmark(int delmark) { - this.delmark = delmark; + this.delmark = delmark; // 将参数delmark赋值给成员变量delmark } + // getName方法,用于获取供应商名称 public String getName() { - return name; + return name; // 返回供应商名称 } + // setName方法,用于设置供应商名称 public void setName(String name) { - this.name = name; + this.name = name; // 将参数name赋值给成员变量name } + // getAddress方法,用于获取供应商地址 public String getAddress() { - return address; + return address; // 返回供应商地址 } + // setAddress方法,用于设置供应商地址 public void setAddress(String address) { - this.address = address; + this.address = address; // 将参数address赋值给成员变量address } + // getContact方法,用于获取供应商联系方式 public String getContact() { - return contact; + return contact; // 返回供应商联系方式 } + // setContact方法,用于设置供应商联系方式 public void setContact(String contact) { - this.contact = contact; + this.contact = contact; // 将参数contact赋值给成员变量contact } } diff --git a/Supermarket/src/com/lingnan/supermarket/dto/User.java b/Supermarket/src/com/lingnan/supermarket/dto/User.java index 1d89b15..676a03c 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/User.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/User.java @@ -2,98 +2,59 @@ package com.lingnan.supermarket.dto; import com.lingnan.supermarket.dto.base.BaseDomain; -// User类继承自BaseDomain类,用于表示超市系统中的用户信息实体类 -// 该类包含了与用户相关的各种属性信息以及对应的访问器(getter)和修改器(setter)方法 + public class User extends BaseDomain { - // 用户名,可能用于登录系统等场景 private String username; - - // 用户的真实姓名 - private String rname; - - // 用户的登录密码 + private String rname ; private String password; - - // 用户的联系电话 private String phone; - - // 用户的头像图片路径或相关标识(具体根据业务需求确定其存储内容) private String img; - - // 用户的权限级别,不同的整数值可能代表不同的权限角色,例如:0可能代表超级管理员,1代表管理员,2代表收银员等(具体含义由业务定义) private int usuper; - - // 标记用户记录是否已被删除,例如:1表示未删除,0表示已删除(具体取值含义由业务定义) - private int delmark; - - // 获取用户头像图片相关信息的方法 + private int delmark ; + + public String getImg() { return img; } - - // 设置用户头像图片相关信息的方法 public void setImg(String img) { this.img = img; } - - // 获取用户联系电话的方法 public String getPhone() { return phone; } - - // 设置用户联系电话的方法 public void setPhone(String phone) { this.phone = phone; } - - // 获取用户真实姓名的方法 public String getRname() { return rname; } - - // 设置用户真实姓名的方法 public void setRname(String rname) { this.rname = rname; } - - // 获取用户记录删除标记的方法 public int getDelmark() { return delmark; } - - // 设置用户记录删除标记的方法 public void setDelmark(int delmark) { this.delmark = delmark; } - - // 获取用户名的方法 public String getUsername() { return username; } - - // 设置用户名的方法 public void setUsername(String username) { this.username = username; } - - // 获取用户登录密码的方法 public String getPassword() { return password; } - - // 设置用户登录密码的方法 public void setPassword(String password) { this.password = password; } - - // 获取用户权限级别的方法 public int getUsuper() { return usuper; } - - // 设置用户权限级别的方法 public void setUsuper(int usuper) { this.usuper = usuper; } -} \ No newline at end of file + +} diff --git a/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java b/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java index e662052..bb9922d 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java @@ -1,86 +1,99 @@ -package com.lingnan.supermarket.table; +package com.lingnan.supermarket.table; // 声明当前类所在的包 -import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; -import com.lingnan.supermarket.dao.impl.productionImpl; -import com.lingnan.supermarket.dto.InOrder; +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 -import javax.swing.table.AbstractTableModel; -import java.util.Vector; +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 -// 定义InOrderTM类,继承自AbstractTableModel -public class InOrderTM extends AbstractTableModel{ +import com.lingnan.supermarket.dto.Buffer; // 导入Buffer数据传输对象 +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder数据传输对象 +import com.lingnan.supermarket.dto.Buffer; // 重复导入Buffer数据传输对象,可能是错误 +import com.lingnan.supermarket.dto.Production; // 导入Production数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于进货对话框 - // 定义列名数组 - private String [] columnName = {"订单号","总价","时间","负责人","状态"}; - // 实例化生产实现类 - private productionImpl prodDao = new productionImpl(); - // 用于存储InOrder对象的向量 - private Vector InOrders; - // 实例化入库订单服务实现类 - private inOrderServiceImpl inOrderImpl= new inOrderServiceImpl(); - // 用于存储当前操作的InOrder对象 - private InOrder inOrder ; +public class InOrderTM extends AbstractTableModel{ // 定义一个类InOrderTM,继承自AbstractTableModel类,用于表格模型 - // 用于存储当前操作的订单号 - String iNumber ;/*订单号*/ + private String [] columnName = {"订单号","总价","时间","负责人","状态"}; // 定义列名数组,用于表格的列标题 - // 获取所有入库订单记录 - public void allInOrderRecord() { - // 将添加的商品加入到静态变量Vector数组中 + private productionImpl prodDao = new productionImpl(); // 创建productionImpl对象,用于操作产品数据 + + private Vector InOrders; // 声明一个Vector数组,用于存储InOrder对象 + private inOrderServiceImpl inOrderImpl= new inOrderServiceImpl(); // 创建inOrderServiceImpl对象,用于操作订单数据 + private InOrder inOrder ; // 声明InOrder对象,用于单个订单操作 + + String iNumber ; // 声明一个String变量,用于存储订单号 + + + public void allInOrderRecord() { // 定义一个方法,用于获取所有订单记录 + //将添加的商品加入到静态变量Vector数组中 /*prod = InDialog.getProduction();*/ - InOrders = inOrderImpl.findAllInOrder(); + InOrders = inOrderImpl.findAllInOrder(); // 调用inOrderImpl的方法,获取所有订单并赋值给InOrders } - // 根据分类查找结果 - public void resultOfFind(int catalog) { - if(catalog==0) - InOrders = inOrderImpl.findAllInOrder(); + //查找分类结果 + public void resultOfFind(int catalog) { // 定义一个方法,根据分类查找订单 + if(catalog==0) // 如果分类为0,查找所有订单 + InOrders = inOrderImpl.findAllInOrder(); // 获取所有订单 else - InOrders = inOrderImpl.FindStatus(catalog); + InOrders = inOrderImpl.FindStatus(catalog); // 否则根据状态查找订单 } - // 根据订单号查找 - public void resultOfNumber(String Number) { - InOrders=new Vector(); - inOrder = inOrderImpl.findByIdinOrder(Number); - InOrders.add(inOrder); + //根据订单号查找 + public void resultOfNumber(String Number) { // 定义一个方法,根据订单号查找订单 + InOrders=new Vector(); // 初始化InOrders为新的Vector对象 + inOrder = inOrderImpl.findByIdinOrder(Number); // 根据订单号查找订单 + InOrders.add(inOrder); // 将找到的订单添加到InOrders中 } - // 返回表格行数 + + + + + + @Override +// 重写getRowCount方法,返回表格的行数,即订单列表的大小 public int getRowCount() { - return InOrders.size(); + return InOrders.size(); // 返回InOrders Vector的大小 } - /* public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); - } - */ - // 返回列数 +/* +// 获取所有订单的总价格,此方法已被注释掉 +public Float getAllPrice() { + return BufferImpl.InBufferAllPrice(); +} +*/ + @Override +// 重写getColumnCount方法,返回表格的列数,即列名数组的长度 public int getColumnCount() { - return columnName.length; + return columnName.length; // 返回columnName数组的长度 } - // 获取指定单元格的值 @Override +// 重写getValueAt方法,根据行索引和列索引获取表格单元格的值 public Object getValueAt(int rowIndex, int columnIndex) { - inOrder = InOrders.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - iNumber=inOrder.getiNumber(); - if(columnIndex==0) { + inOrder = InOrders.get(rowIndex); // 获取指定行的订单对象 + // 以下代码已被注释,可能是用于调试的打印语句 + /*System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + iNumber=inOrder.getiNumber(); // 获取订单号并赋值给iNumber + if(columnIndex==0) { // 如果是第一列,返回订单号 return inOrder.getiNumber(); - }else if(columnIndex==1) { + }else if(columnIndex==1) { // 如果是第二列,返回订单总价 return inOrder.getAllInPrice(); - }else if(columnIndex==2) { + }else if(columnIndex==2) { // 如果是第三列,返回订单日期 return inOrder.getInDate(); - }else if(columnIndex==3) { + }else if(columnIndex==3) { // 如果是第四列,返回负责人 return inOrder.getPrincipal(); - }else if(columnIndex==4) { + }else if(columnIndex==4) { // 如果是第五列,返回订单状态 String status = null; if(inOrder.getStatus()==1) status= "已入库"; @@ -89,21 +102,23 @@ public class InOrderTM extends AbstractTableModel{ else if(inOrder.getStatus()==3) status= "已取消"; return status; - }else { + }else { // 如果列索引不匹配,返回null return null; } } // 返回要修改或删除的记录的订单号 - public String getINumber() { /*返回要修改或删除的记录*/ - return iNumber; + public String getINumber() { + return iNumber; // 返回类的成员变量iNumber } - // 返回指定列的列名 + @Override +// 重写getColumnName方法,根据列索引获取列名 public String getColumnName(int column) { - return columnName[column]; + return columnName[column]; // 返回columnName数组中指定索引的值 } -} \ No newline at end of file + +} diff --git a/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java b/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java index ee3dbef..820425f 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java @@ -1,90 +1,93 @@ -package com.lingnan.supermarket.table; +package com.lingnan.supermarket.table; // 声明当前类所在的包 -import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; -import com.lingnan.supermarket.dao.impl.productionImpl; -import com.lingnan.supermarket.dto.InRecord; +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 -import javax.swing.table.AbstractTableModel; -import java.util.Vector; +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 -// 定义InRecordTM类,继承自AbstractTableModel -public class InRecordTM extends AbstractTableModel{ +import com.lingnan.supermarket.dto.Buffer; // 导入Buffer类,可能用于临时数据存储 +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,表示进货订单 +import com.lingnan.supermarket.dto.InRecord; // 导入InRecord类,表示进货记录 +import com.lingnan.supermarket.dto.Buffer; // 重复导入Buffer类,可能是错误,应该删除 +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于显示进货对话框 - // 定义列名数组 - private String [] columnName = {"订单号","id","数量","金额"}; - // 实例化生产实现类 - private productionImpl prodDao = new productionImpl(); - // 用于存储InRecord对象的向量 - private Vector InRecords; - // 实例化入库记录服务实现类 - private inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); - // 用于存储当前操作的InRecord对象 - private InRecord inRecord= new InRecord(); +public class InRecordTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于创建进货记录表格数据模型 - // 用于存储当前操作的订单号 - private String iNumber ;/*订单号*/ + private String [] columnName = {"订单号","id","数量","金额"}; // 定义列名数组,用于表格的列标题 - // 构造方法,接收一个订单号作为参数 - public InRecordTM(String iNumber) { - this.iNumber=iNumber; + private productionImpl prodDao = new productionImpl(); // 创建productionImpl实例,用于操作产品数据 + + private Vector InRecords; // 声明一个Vector类型的变量,用于存储进货记录 + + private inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建inRecordServiceImpl实例,用于操作进货记录数据 + private InRecord inRecord= new InRecord(); // 创建InRecord实例,用于存储单条进货记录 + + + private String iNumber ;/*订单号*/ // 声明一个String变量,用于存储订单号 + + + public InRecordTM(String iNumber) { // 构造函数,接收订单号参数 + this.iNumber=iNumber; // 将传入的订单号赋值给类的成员变量 } - // 根据订单号查找入库记录 - public void findInRecordByINumber() { - // 将添加的商品加入到静态变量Vector数组中 + public void findInRecordByINumber() { // 根据订单号查找进货记录的方法 + //将添加的商品加入到静态变量Vector数组中 /*prod = InDialog.getProduction();*/ - InRecords = inRecordImpl.findByIdinRecord(iNumber); + InRecords = inRecordImpl.findByIdinRecord(iNumber); // 根据订单号查询进货记录并赋值给InRecords } - // 返回表格行数 + @Override - public int getRowCount() { - return InRecords.size(); + public int getRowCount() { // 重写方法,获取表格的行数 + return InRecords.size(); // 返回InRecords的大小 } /* public Float getAllPrice() { return BufferImpl.InBufferAllPrice(); } */ - // 返回列数 @Override - public int getColumnCount() { - return columnName.length; + public int getColumnCount() { // 重写方法,获取表格的列数 + return columnName.length; // 返回columnName数组的长度 } - // 获取指定单元格的值 @Override - public Object getValueAt(int rowIndex, int columnIndex) { - inRecord = InRecords.get(rowIndex); + public Object getValueAt(int rowIndex, int columnIndex) { // 重写方法,获取指定单元格的值 + inRecord = InRecords.get(rowIndex); // 获取指定行的进货记录 /* System.out.println( "id="+users.get(rowIndex).getId()); System.out.println("rowIndex"+rowIndex); System.out.println("columnIndex"+columnIndex);*/ - iNumber=inRecord.getiNumber(); + iNumber=inRecord.getiNumber(); // 获取订单号 if(columnIndex==0) { - return inRecord.getiNumber(); + return inRecord.getiNumber(); // 返回订单号 }else if(columnIndex==1) { - return inRecord.getId(); + return inRecord.getId(); // 返回id }else if(columnIndex==2) { - return inRecord.getSum(); + return inRecord.getSum(); // 返回数量 }else if(columnIndex==3) { - return inRecord.getInPrice(); + return inRecord.getInPrice(); // 返回金额 }else { - return null; + return null; // 如果列索引不匹配,返回null } } - // 返回要修改或删除的记录的订单号 - public String getINumber() { /*返回要修改或删除的记录*/ - return iNumber; + public String getINumber() { // 返回要修改或删除的记录的订单号 + return iNumber; // 返回类的成员变量iNumber } - // 返回指定列的列名 + @Override - public String getColumnName(int column) { - return columnName[column]; + public String getColumnName(int column) { // 重写方法,获取指定列的列名 + return columnName[column]; // 返回columnName数组中指定索引的值 } - -} \ No newline at end of file + + +} diff --git a/Supermarket/src/com/lingnan/supermarket/table/InTableModel.java b/Supermarket/src/com/lingnan/supermarket/table/InTableModel.java index 8deb7ee..41fb2a0 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InTableModel.java @@ -1,87 +1,106 @@ -package com.lingnan.supermarket.table; // 定义包名 +package com.lingnan.supermarket.table; // 声明当前类所在的包 -import com.lingnan.supermarket.dao.impl.productionImpl; -import com.lingnan.supermarket.dto.Production; +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 -import javax.swing.table.AbstractTableModel; -import java.util.Vector; +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 -// 定义InTableModel类,继承自AbstractTableModel -public class InTableModel extends AbstractTableModel { +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,表示进货订单的数据传输对象 - // 列名数组 - private String[] columnName = {"id", "名称", "数量", "单价", "价格", "保质期", "类别", "供应商id"}; +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于显示进货对话框 - // 声明生产实现类的实例 + + + +public class InTableModel extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于创建进货表格数据模型 + + // 定义列名数组,用于表格的列标题 + private String [] columnName = {"id","名称","数量","单价","价格","保质期","类别","供应商id"}; + + // 创建productionImpl实例,用于操作产品数据 private productionImpl prodDao = new productionImpl(); - // 用于存储Production对象的向量 - private Vector v; + // 声明一个Vector,用于存储Production对象集合 + private Vector v; + + // 声明一个String变量,用于存储id + String id ; - // 用于存储选中记录的id - String id; - // 构造方法,接收一个Production的向量作为参数 + // 构造函数,接收一个Vector类型的参数 public InTableModel(Vector v) { - System.out.println("调用InTableModel里面的构造函数"); - this.v = v; // 将传入的向量赋值给实例变量 + System.out.println("调用InTableModel里面的构造函数"); // 打印日志信息 + this.v=v; // 将传入的Vector赋值给类的成员变量v } - // 返回表格行数 + + + + // 获取表格的行数,即数据集合的大小 public int getRowCount() { - return v.size(); // 向量的大小即为行数 + return v.size(); // 返回Vector v的大小 } - // 计算并返回所有商品的总价格 + // 计算所有商品的总价格 public Float getAllPrice() { - Float allPrice = (float) 0; // 初始化总价格为0 - for (Production p : v) { // 遍历每个Production对象 - allPrice += p.getPrice(); // 累加单个产品的价格 + Float allPrice=(float) 0; // 初始化总价格为0 + for(Production p:v) { // 遍历Vector v中的所有Production对象 + allPrice+=p.getPrice(); // 累加每个商品的价格 } - return allPrice; // 返回总价格 + return allPrice; // 返回计算出的总价格 } - // 返回列数 + // 重写方法,获取表格的列数,即列名数组的长度 @Override public int getColumnCount() { - return columnName.length; // 列数为列名数组的长度 + return columnName.length; // 返回columnName数组的长度 } - // 获取指定单元格的值 + // 重写方法,获取指定行和列的单元格值 @Override public Object getValueAt(int rowIndex, int columnIndex) { - Production p = v.get(rowIndex); // 获取行索引对应的Production对象 - id = p.getId(); // 获取产品ID - // 根据列索引返回相应的属性值 - if (columnIndex == 0) { - return p.getId(); // 返回ID - } else if (columnIndex == 1) { - return p.getName(); // 返回名称 - } else if (columnIndex == 2) { - return p.getSum(); // 返回数量 - } else if (columnIndex == 3) { - return p.getInPrice(); // 返回单价 - } else if (columnIndex == 4) { - return p.getPrice(); // 返回价格 - } else if (columnIndex == 5) { - return p.getLife(); // 返回保质期 - } else if (columnIndex == 6) { - return p.getName2() + p.getId2(); // 返回类别 - } else if (columnIndex == 7) { - return p.getSupplyId(); // 返回供应商ID - } else { - return null; // 其他情况返回null + Production p = v.get(rowIndex); // 从Vector v中获取指定行的Production对象 + id=p.getId(); // 将Production对象的id赋值给类的成员变量id + if(columnIndex==0) { // 判断列索引,并返回相应的值 + return p.getId(); + }else if(columnIndex==1) { + return p.getName(); // 返回商品名称 + }else if(columnIndex==2) { + return p.getSum(); // 返回商品数量 + }else if(columnIndex==3) { + return p.getInPrice(); // 返回商品进货单价 + }else if(columnIndex==4) { + return p.getPrice(); // 返回商品价格 + }else if(columnIndex==5) { + return p.getLife(); // 返回商品保质期 + }else if(columnIndex==6) { + return p.getName2()+p.getId2(); // 返回商品类别和类别id的组合 + }else if(columnIndex==7) { + return p.getSupplyId(); // 返回供应商id + }else { + return null; // 如果列索引不匹配,返回null } } - // 返回要修改或删除的记录的ID + // 获取要修改或删除的记录的id public String getId() { - return id; // 返回当前选中记录的ID + return id; // 返回类的成员变量id } - // 返回指定列的列名 + // 重写方法,获取指定列的列名 @Override public String getColumnName(int column) { - return columnName[column]; // 返回列名 + return columnName[column]; // 返回columnName数组中指定索引的值 } -} \ No newline at end of file + + + + + + +} diff --git a/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java b/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java index e93774b..5552622 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java @@ -1,65 +1,69 @@ -package com.lingnan.supermarket.table; +package com.lingnan.supermarket.table; // 声明当前类所在的包 -import java.util.List; -import java.util.Vector; +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 -import javax.swing.table.AbstractTableModel; +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.dao.UserService; -import com.lingnan.supermarket.dao.impl.*; +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 -public class ProdCatalogTM extends AbstractTableModel{ - - private String [] columnName = {"类别id","类别名称","商品id","商品名称"}; - private productionImpl prodDao = new productionImpl(); - - private Vector prods; +public class ProdCatalogTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于产品目录的表格数据模型 + + private String [] columnName = {"类别id","类别名称","商品id","商品名称"}; // 定义列名数组,用于表格的列标题 + + private productionImpl prodDao = new productionImpl(); // 创建productionImpl实例,用于操作产品数据 + + private Vector prods; // 声明一个Vector,用于存储产品列表 + public void all() { - //查找全部数据 - prods = prodDao.findAllproduction(); + // 查找全部数据 + prods = prodDao.findAllproduction(); // 调用findAllproduction方法,获取所有产品数据 } public void ById2(Production p) { - //查找全部数据 - prods = prodDao.findProductionById2(p.getId2()); + // 根据类别id查找数据 + prods = prodDao.findProductionById2(p.getId2()); // 调用findProductionById2方法,根据类别id获取产品数据 } - + @Override public int getRowCount() { - return prods.size(); + return prods.size(); // 返回产品列表的大小,即表格的行数 } @Override - public int getColumnCount() { - return columnName.length; + public int getColumnCount() { + return columnName.length; // 返回列名数组的长度,即表格的列数 } @Override public Object getValueAt(int rowIndex, int columnIndex) { - Production prod = prods.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); + Production prod = prods.get(rowIndex); // 获取指定行的产品对象 + // 以下注释掉的是打印语句,用于调试 + /*System.out.println( "id="+users.get(rowIndex).getId()); System.out.println("rowIndex"+rowIndex); System.out.println("columnIndex"+columnIndex);*/ if(columnIndex==0) { - return prod.getId2(); + return prod.getId2(); // 返回类别id }else if(columnIndex==1) { - return prod.getName2(); + return prod.getName2(); // 返回类别名称 }else if(columnIndex==2) { - return prod.getId(); + return prod.getId(); // 返回商品id }else if(columnIndex==3) { - return prod.getName(); + return prod.getName(); // 返回商品名称 }else { - return null; + return null; // 如果列索引不匹配,返回null } } - + @Override public String getColumnName(int column) { - return columnName[column]; + return columnName[column]; // 返回指定列的列名 } + } diff --git a/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java b/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java index 18e43d9..987cae5 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java @@ -1,75 +1,75 @@ -package com.lingnan.supermarket.table; +package com.lingnan.supermarket.table; // 声明当前类所在的包 -import java.util.Vector; +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 -import javax.swing.table.AbstractTableModel; +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 -import com.lingnan.supermarket.dao.impl.storageRecordImpl; -import com.lingnan.supermarket.dto.StorageRecord; +import com.lingnan.supermarket.dao.impl.storageRecordImpl; // 导入storageRecordImpl类,可能是用于操作存储记录的数据访问实现 +import com.lingnan.supermarket.dto.StorageRecord; // 导入StorageRecord类,表示存储记录的数据传输对象 -public class StorageRecordTM extends AbstractTableModel{ - - private String [] columnName = {"订单号","操作时间","商品编号","进货+/出货-","数量"}; +public class StorageRecordTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于存储存储记录的表格数据模型 - private storageRecordImpl srDao = new storageRecordImpl(); - - private Vector storageRecords; - private StorageRecord storageRecord ; - - String oNumber ;/*订单号*/ - - - public void allStoragrRecord() { + private String [] columnName = {"订单号","操作时间","商品编号","进货+/出货-","数量"}; // 定义列名数组,用于表格的列标题 + + private storageRecordImpl srDao = new storageRecordImpl(); // 创建storageRecordImpl实例,用于操作存储记录的数据访问 + + private Vector storageRecords; // 声明一个Vector,用于存储存储记录列表 + private StorageRecord storageRecord ; // 声明一个StorageRecord对象,用于存储单条记录 + + String oNumber ;/*订单号*/ // 声明一个字符串变量,用于存储订单号 + + public void allStoragrRecord() { // 定义一个方法,用于获取所有存储记录 //将添加的商品加入到静态变量Vector数组中 /*prod = InDialog.getProduction();*/ - storageRecords = srDao.findAllStorageRecord(); + storageRecords = srDao.findAllStorageRecord(); // 调用srDao的方法获取所有存储记录并赋值给storageRecords } - - + + @Override - public int getRowCount() { - return storageRecords.size(); + public int getRowCount() { // 重写getRowCount方法,返回表格的行数 + return storageRecords.size(); // 返回storageRecords的大小,即记录的数量 } - + /* public Float getAllPrice() { return BufferImpl.InBufferAllPrice(); - } -*/ + }*/ + @Override - public int getColumnCount() { - return columnName.length; + public int getColumnCount() { // 重写getColumnCount方法,返回表格的列数 + return columnName.length; // 返回columnName数组的长度,即列的数量 } @Override - public Object getValueAt(int rowIndex, int columnIndex) { - storageRecord = storageRecords.get(rowIndex); + public Object getValueAt(int rowIndex, int columnIndex) { // 重写getValueAt方法,返回指定单元格的值 + storageRecord = storageRecords.get(rowIndex); // 获取指定行的存储记录 /* System.out.println( "id="+users.get(rowIndex).getId()); System.out.println("rowIndex"+rowIndex); System.out.println("columnIndex"+columnIndex);*/ - oNumber=storageRecord.getTheNumber(); + oNumber=storageRecord.getTheNumber(); // 获取订单号并赋值给oNumber if(columnIndex==0) { - return storageRecord.getTheNumber(); + return storageRecord.getTheNumber(); // 返回订单号 }else if(columnIndex==1) { - return storageRecord.getcDate(); + return storageRecord.getcDate(); // 返回操作时间 }else if(columnIndex==2) { - return storageRecord.getId(); + return storageRecord.getId(); // 返回商品编号 }else if(columnIndex==3) { - return storageRecord.getExecute(); + return storageRecord.getExecute(); // 返回进货/出货操作 }else if(columnIndex==4) { - return storageRecord.getNum(); + return storageRecord.getNum(); // 返回数量 }else { - return null; + return null; // 如果列索引不匹配,返回null } } - - - + + + @Override - public String getColumnName(int column) { - return columnName[column]; + public String getColumnName(int column) { // 重写getColumnName方法,返回指定列的列名 + return columnName[column]; // 返回columnName数组中指定索引的值 } + } diff --git a/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java b/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java index 1d23b82..43f6f91 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java @@ -1,69 +1,74 @@ -package com.lingnan.supermarket.table; +package com.lingnan.supermarket.table; // 包声明,指定当前类所在的包 -import java.util.List; -import java.util.Vector; +import java.util.List; // 导入List接口,用于表示列表 +import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 -import javax.swing.table.AbstractTableModel; +import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.dao.UserService; -import com.lingnan.supermarket.dao.impl.*; +import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 +import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 -public class StorageTableModel extends AbstractTableModel{ - - private String [] columnName = {"id","名称","保质期","数量","类别","供应商编号"}; - private productionImpl prodDao = new productionImpl(); - - private Vector prods; +public class StorageTableModel extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于存储表格数据模型 + + private String [] columnName = {"id","名称","保质期","数量","类别","供应商编号"}; // 定义列名数组,用于表格的列标题 + + private productionImpl prodDao = new productionImpl(); // 创建productionImpl对象,用于操作产品数据 + + private Vector prods; // 声明一个Vector,用于存储Production对象列表 + public void all() { - //查找全部数据 + // 查找全部数据,并更新prods向量 prods = prodDao.findAllproduction(); } + public void Byname(Production p) { - //查找全部数据 + // 根据产品名称查找数据,并更新prods向量 prods = prodDao.findproduction(p.getName()); } - + @Override public int getRowCount() { + // 获取表格的行数,即prods向量的元素数量 return prods.size(); } @Override - public int getColumnCount() { + public int getColumnCount() { + // 获取表格的列数,即columnName数组的长度 return columnName.length; } @Override public Object getValueAt(int rowIndex, int columnIndex) { - Production prod = prods.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ + // 获取指定行和列的单元格值 + Production prod = prods.get(rowIndex); // 获取指定行的Production对象 if(columnIndex==0) { - return prod.getId(); + return prod.getId(); // 返回产品ID }else if(columnIndex==1) { - return prod.getName(); + return prod.getName(); // 返回产品名称 }else if(columnIndex==2) { - return prod.getLife(); + return prod.getLife(); // 返回产品保质期 }else if(columnIndex==3) { - return prod.getSum(); + return prod.getSum(); // 返回产品数量 }else if(columnIndex==4) { - return prod.getName2()+prod.getId2(); + return prod.getName2()+prod.getId2(); // 返回产品类别和ID的组合 }else if(columnIndex==5) { - return prod.getSupplyId(); + return prod.getSupplyId(); // 返回产品供应商编号 }else { - return null; + return null; // 如果列索引不匹配,返回null } } - + @Override public String getColumnName(int column) { - return columnName[column]; + // 获取指定列的列名 + return columnName[column]; // 返回columnName数组中指定索引的值 } + } diff --git a/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java b/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java index 8d1fe4f..e49126c 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java @@ -13,50 +13,60 @@ import com.lingnan.supermarket.dao.impl.*; public class SupplierTableModel extends AbstractTableModel{ - + + // 定义表格列名数组 private String [] columnName = {"id","名称","地址","联系方式","邮箱"}; + // 声明供应商信息服务接口实例 //private SupplierInfImpl supplierDao = new SupplierInfImpl(); private SupplierInfService supplierInfService = new SupplierInfImpl(); - + + // 创建供应商信息对象 private SupplierInf supplierInf = new SupplierInf(); - + + // 创建供应商信息列表 private Vector suppliers; - + + // 定义供应商ID变量 private int id=0; - + + // 查找全部供应商信息的方法 public void all() { - //查找全部数据 + // 查找全部数据 suppliers = supplierInfService.findAllSupplierInf(); } + // 根据名称查找供应商信息的方法 public void Byname(SupplierInf supplierInf) { + // 根据名称查找供应商信息 suppliers = supplierInfService.findByNameSupplierInf(supplierInf); - + } - + // 重写获取行数的方法 @Override public int getRowCount() { + // 返回供应商列表的大小 return suppliers.size(); } + // 重写获取列数的方法 @Override - public int getColumnCount() { + public int getColumnCount() { + // 返回列名数组的长度 return columnName.length; } + // 重写获取单元格值的方法 @Override public Object getValueAt(int rowIndex, int columnIndex) { + // 获取指定行的供应商信息 SupplierInf prod = suppliers.get(rowIndex); - //id = supplierInf.getId(); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ + // 根据列索引返回相应的供应商信息属性 if(columnIndex==0) { return prod.getId(); }else if(columnIndex==1) { - return prod.getName(); + return prod.getName(); }else if(columnIndex==2) { return prod.getAddress(); }else if(columnIndex==3) { @@ -68,9 +78,11 @@ public class SupplierTableModel extends AbstractTableModel{ return null; } } - + + // 重写获取列名的方法 @Override public String getColumnName(int column) { + // 返回指定列索引的列名 return columnName[column]; } diff --git a/Supermarket/src/com/lingnan/supermarket/table/UserTableModel.java b/Supermarket/src/com/lingnan/supermarket/table/UserTableModel.java index 0e63ec9..fd0e631 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/UserTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/UserTableModel.java @@ -7,112 +7,83 @@ import javax.swing.table.AbstractTableModel; import com.lingnan.supermarket.dto.User; import com.lingnan.supermarket.dao.UserService; -import com.lingnan.supermarket.dao.impl.UserServiceImpl; +import com.lingnan.supermarket.dao.impl.*; -// UserTableModel类继承自AbstractTableModel,用于为Swing中的表格组件提供数据模型 -// 它负责管理和提供与用户信息相关的数据,以便在表格中展示 -public class UserTableModel extends AbstractTableModel { - // 定义表格列名数组,用于指定表格每一列的标题 - private String[] columnName = { "id", "工号", "密码", "姓名", "权限", "电话" }; +public class UserTableModel extends AbstractTableModel{ + + private String [] columnName = {"id","工号","密码","姓名","权限","电话"}; - // 用户服务接口的实现类实例,用于调用与用户相关的数据库操作方法,以获取用户数据 private UserService userService = new UserServiceImpl(); - - // 用于存储当前行对应的用户ID,初始化为0 - private int id = 0; - - // 存储用户信息的向量,用于保存从数据库中获取的用户数据列表,以便在表格中显示 + private int id=0; private Vector users; - - // 方法用于获取所有用户的数据,并将其存储在users向量中 - // 该方法会调用userService的allUser方法从数据库中查询所有用户信息 public void all() { - // 查找全部数据 + //查找全部数据 users = userService.allUser(); } - - // 根据传入的用户对象,通过调用userService的findByrnameUser方法 - // 从数据库中查找匹配该用户真实姓名的相关用户数据,并存储在users向量中 public void Byrname(User user) { users = userService.findByrnameUser(user); } - - // 重写AbstractTableModel中的方法,用于获取表格的行数 - // 返回值是存储用户数据的向量users的大小,即表格中显示的用户记录行数 + + @Override public int getRowCount() { return users.size(); } - // 重写AbstractTableModel中的方法,用于获取表格的列数 - // 返回值是列名数组columnName的长度,即表格中显示的列数 @Override - public int getColumnCount() { + public int getColumnCount() { return columnName.length; } - // 重写AbstractTableModel中的方法,用于获取指定单元格的值 - // 根据传入的行索引rowIndex和列索引columnIndex,从users向量中获取对应的用户对象 - // 然后根据列索引返回该用户对象相应属性的值,以便在表格相应单元格中显示 @Override public Object getValueAt(int rowIndex, int columnIndex) { - // 从users向量中获取指定行索引的用户对象 User user = users.get(rowIndex); - id = user.getId(); - /* - * 以下几行代码可能是用于调试目的,输出当前获取到的用户ID、行索引和列索引信息 - * System.out.println( "id=" + users.get(rowIndex).getId()); - * System.out.println("rowIndex" + rowIndex); - * System.out.println("columnIndex" + columnIndex); - */ - if (columnIndex == 0) { - // 如果列索引为0,返回用户的ID + id=user.getId(); + /* System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + if(columnIndex==0) { return user.getId(); - } else if (columnIndex == 1) { - // 如果列索引为1,返回用户的工号(这里假设工号对应用户名属性,具体根据业务需求可能有调整) - return user.getUsername(); - } else if (columnIndex == 2) { - // 如果列索引为2,返回用户的密码 - return user.getPassword(); - } else if (columnIndex == 3) { - // 如果列索引为3,返回用户的姓名 + }else if(columnIndex==1) { + return user.getUsername(); + }else if(columnIndex==2) { + return user.getPassword(); + }else if(columnIndex==3) { return user.getRname(); - } else if (columnIndex == 4) { - // 如果列索引为4,返回用户的权限级别 + }else if(columnIndex==4) { return user.getUsuper(); - } else if (columnIndex == 5) { - // 如果列索引为5,返回用户的电话 + }else if(columnIndex==5) { return user.getPhone(); - } else { - // 如果列索引不在有效范围内,返回null + }else { return null; } + + } - - // 获取当前行对应的用户ID的方法 - public int getid() { + public int getid(){ return id; } - - // 该方法的实现可能存在一些混淆,它的名字看起来像是获取指定行索引单元格的值,但实际上它只返回了用户的ID - // 可能原本是想实现类似getValueAt的功能,但代码逻辑不太完整或准确 public int getValueAt(int rowIndex) { User user = users.get(rowIndex); - id = users.get(rowIndex).getId(); - /* - * 以下几行代码可能是用于调试目的,输出当前获取到的用户ID、行索引信息 - * System.out.println( "id=" + users.get(rowIndex).getId()); - * System.out.println("rowIndex" + rowIndex); - * System.out.println("columnIndex" + columnIndex); - */ - return user.getId(); + id=users.get(rowIndex).getId(); +/* System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + return user.getId(); + + + } - - // 重写AbstractTableModel中的方法,用于获取指定列的列名 - // 根据传入的列索引column,从列名数组columnName中获取对应的列名并返回 + + + + + @Override public String getColumnName(int column) { return columnName[column]; } -} \ No newline at end of file + + +} diff --git a/Supermarket/src/com/lingnan/supermarket/view/Demo4.java b/Supermarket/src/com/lingnan/supermarket/view/Demo4.java index b7d015c..a9d35fb 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/Demo4.java +++ b/Supermarket/src/com/lingnan/supermarket/view/Demo4.java @@ -1,94 +1,82 @@ package com.lingnan.supermarket.view; - -import java.awt.*; +import java.awt. *; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; -import javax.swing.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Scanner; -import java.awt.event.*; -// Demo4类用于创建一个展示图片切换效果的图形界面程序 -public class Demo4 extends JFrame implements ActionListener { +import javax.swing. *; - // 创建一个静态的Demo4类的实例tplb,用于在静态方法中方便地访问该类的相关属性和方法,实现类似单例模式的效果 - static Demo4 tplb = new Demo4(); - // 创建一个静态的JLabel组件pan,用于在界面上显示图片等内容,作为图片展示的载体 - static JLabel pan = new JLabel(); - // 创建一个静态的ImageIcon数组imgs,用于存储多个图片资源 - static ImageIcon[] imgs = { - new ImageIcon("s"), - new ImageIcon("static\\bg\\bg1.jpg"), - new ImageIcon("static\\bg\\bg2.jpg"), - new ImageIcon("static\\bg\\bg3.jpg"), - new ImageIcon("static\\bg\\bg4.jpg"), - new ImageIcon("static\\bg\\bg5.jpg"), - new ImageIcon("static\\bg\\bg6.jpg"), - new ImageIcon("static\\bg\\bg7.jpg"), - }; - - // settplb方法用于设置JFrame的一些基本属性,使其成为一个合适的图形界面窗口展示出来 - public static void settplb() { - // 设置窗口的标题 +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Scanner; +import java.awt.event.*; +public class Demo4 extends JFrame implements ActionListener +{ + static Demo4 tplb=new Demo4(); + static JLabel pan=new JLabel(); + + static ImageIcon[] imgs = { + new ImageIcon("s"), + new ImageIcon("static\\bg\\bg1.jpg"), + new ImageIcon("static\\bg\\bg2.jpg"), + new ImageIcon("static\\bg\\bg3.jpg"), + new ImageIcon("static\\bg\\bg4.jpg"), + new ImageIcon("static\\bg\\bg5.jpg"), + new ImageIcon("static\\bg\\bg6.jpg"), + new ImageIcon("static\\bg\\bg7.jpg"), + }; + + public static void settplb()/*�ܿ��*/ + { tplb.setTitle("ͼƬ�ֲ�����"); - // 设置窗口的布局管理器为null,意味着后续添加组件时需要手动指定组件的位置和大小(绝对布局) tplb.setLayout(null); - // 设置窗口的大小为宽度700像素,高度800像素 - tplb.setSize(700, 800); - // 设置窗口大小不可调整,用户不能通过拖动边框等方式改变窗口大小 + tplb.setSize(700,800); tplb.setResizable(false); - // 设置窗口在屏幕上居中显示,使窗口展示位置更美观合理 - tplb.setLocationRelativeTo(null); - // 设置当窗口关闭时,整个应用程序随之退出,这是一种常见的关闭窗口行为设置 - tplb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - // 设置窗口可见,使其显示在屏幕上,否则窗口创建后是不可见的状态 + tplb.setLocationRelativeTo(null);/*���þ���*/ + tplb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*�رճ���*/ tplb.setVisible(true); } - // setpan方法用于设置JLabel组件的位置等属性,并添加到窗口中,同时启动一个定时器来实现图片的定时切换功能 - public static void setpan() { - // 设置JLabel组件pan的位置和大小,x坐标为50像素,y坐标为50像素,宽度和高度都为500像素,确定其在窗口中的显示区域 - pan.setBounds(50, 50, 500, 500); - // 将pan这个JLabel组件添加到tplb这个窗口实例中,使其成为窗口内容的一部分 - tplb.add(pan); - // 创建一个定时器对象timer,设置每隔1秒触发一次事件,并且指定事件监听器为L - Timer timer = new Timer(1000, L); - // 启动定时器,开始计时,一旦达到设定的时间间隔就会切换图片 - timer.start(); - } - - // 定义一个实现了ActionListener接口的匿名内部类L,用于处理定时器触发的事件,实现图片在JLabel组件上的切换效果 - static ActionListener L = new ActionListener() { - int index; // 定义一个整型变量index,用于记录当前要显示的图片在imgs数组中的索引位置 + public static void setpan() + { + pan.setBounds(50, 50, 500, 500); + tplb.add(pan); + Timer timer = new Timer(1000,L); + timer.start(); + } + + static ActionListener L=new ActionListener() + { + int index; @Override - public void actionPerformed(ActionEvent e) { - // 将pan这个JLabel组件的图标设置为imgs数组中当前索引对应的图片,实现图片的切换展示效果 + public void actionPerformed(ActionEvent e) + { pan.setIcon(imgs[index]); - // 将索引值加1,准备切换到下一张图片 index++; - // 如果索引值达到了imgs数组的长度7,表示已经到最后一张图片了,将索引重置为0,实现循环切换图片的效果 - if (index == 7) - index = 0; + if(index==7) + index=0; } }; - - // 调用设置窗口和图片展示相关的方法来展示图形界面效果 - public static void main(String[] args) { - // 调用settplb方法,设置窗口的基本属性并使其显示出来 - settplb(); - // 调用setpan方法,设置图片展示的JLabel组件相关属性并启动图片切换的定时器功能 - setpan(); - } + + + + + public static void main(String[] args) { + settplb(); + setpan(); + } @Override public void actionPerformed(ActionEvent e) { // TODO �Զ����ɵķ������ + } -} \ No newline at end of file + + + +} diff --git a/Supermarket/src/com/lingnan/supermarket/view/HomeView.java b/Supermarket/src/com/lingnan/supermarket/view/HomeView.java index 0c3b1f1..d98388d 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/HomeView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/HomeView.java @@ -1,12 +1,13 @@ package com.lingnan.supermarket.view; - -import java.awt.*; +import java.awt. *; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; + import javax.imageio.ImageIO; -import javax.swing.*; +import javax.swing. *; + import com.lingnan.supermarket.componet.BGPanel; import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; import com.lingnan.supermarket.dao.impl.outOrderServiceImpl; @@ -15,221 +16,161 @@ import com.lingnan.supermarket.table.UserTableModel; import com.lingnan.supermarket.utils.FontUtil; import com.lingnan.supermarket.utils.TimeAndOrder; import com.lingnan.supermarket.view.base.BaseView; + import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import java.util.Scanner; import java.awt.event.*; - -// HomeView类用于构建超市管理系统中首页的视图界面,展示如图片轮播、关键业务数据以及提供数据刷新功能 -public class HomeView extends JPanel implements ActionListener { - - // 用于展示图片轮播效果的JLabel组件 - private JLabel pan; - - // 用于显示今日进货总金额相关信息 - private static JLabel pan1; - - // 用于显示今日收银总金额相关信息 - private static JLabel pan2; - - // 用于显示今日被投诉次数相关信息 - private static JLabel pan3; - - private JFrame jFrame; - - private JPanel tplbPanel; - - // 用于存储背景图片的Image对象,初始化为null - private Image bgImage = null; - - // 定义的ImageIcon数组,用于存储多张图片资源,以实现图片轮播功能 - private ImageIcon[] imgs; - - // 静态的Float类型变量,记录今日进货的总金额 - private static Float allInPrice; - - // 静态的Float类型变量,记录今日收银的总金额 - private static Float allOutPrice; - - // 用于触发刷新操作的按钮组件 - private JButton refreshBtn; - - private JPanel priceJPanel; - - // 存储当前日期信息,方便在类内不同方法中按日期查询业务数据 - private static String date; - - // 是实现进货订单相关业务逻辑的服务层接口的类实例,用于获取进货相关数据 - private static inOrderServiceImpl inOrderImpl; - - // 用于实现销售订单相关业务逻辑,获取收银相关数据 - private static outOrderServiceImpl outOrderImpl; - - // 构造函数,用于创建HomeView实例并初始化界面相关组件 - public HomeView(JFrame jFrame) { - this.setLayout(null); //设置布局为null - this.jFrame = jFrame; //保存父窗口引用 - initView(); //调用initView方法初始化组件 - } - - // 初始化视图界面组件的方法,负责创建、配置各组件并设置其属性、添加组件到面板以及为按钮添加事件监听器等操作,构建首页界面展示效果 - private void initView() { - - // 创建一个JLabel组件pan,设置其初始位置和大小,用于后续图片轮播展示 - pan = new JLabel(); - pan.setBounds(0, 0, 1280, 351); - - /*tplbPanel.add(pan);*/ - - // 创建包含7个元素的ImageIcon数组imgs,用于存储图片轮播的图片资源,通过循环从指定路径加载图片文件创建ImageIcon对象 - imgs = new ImageIcon[7]; - for (int i = 0; i < 7; i++) { - imgs[i] = new ImageIcon("static\\轮播\\0" + i + ".jpg"); - } - - // 设置图片轮播起始图片 - pan.setIcon(imgs[6]); - - // 创建一个定时器对象timer,设置时间间隔为2500毫秒(2.5秒),指定事件监听器为L,然后启动定时器实现图片定时轮播 - Timer timer = new Timer(2500, L); - timer.start(); - - // 将pan这个JLabel组件添加到当前面板中,使其能在界面上显示出来参与图片轮播 - this.add(pan); - - // 调用TimeAndOrder工具类的yMdTime方法获取当前日期信息 - date = TimeAndOrder.yMdTime(); - - //用于调用其实现的与进货订单相关业务方法获取数据 - inOrderImpl = new inOrderServiceImpl(); - - // 创建outOrderServiceImpl类的实例,用于调用与销售订单相关业务方法获取销售相关数据,如获取今日收银总金额 - outOrderImpl = new outOrderServiceImpl(); - - // 调用inOrderImpl的TodayInPrice方法,传入当前日期date,获取今日进货的总金额,用于界面显示及其他业务逻辑处理 - allInPrice = inOrderImpl.TodayInPrice(date); - - // 调用outOrderImpl的TodayOutPrice方法,传入date获取今日收银总金额,用于展示销售数据及相关操作 - allOutPrice = outOrderImpl.TodayOutPrice(date); - - // 在控制台打印今日进货总金额信息,用于调试或简单日志记录 - System.out.println("今日allInprice=" + allInPrice); - - // 在控制台打印今日收银总金额信息,起到调试或日志记录作用 - System.out.println("今日allOutprice=" + allOutPrice); - - // 创建一个JLabel组件pan1,设置其显示文本为包含今日进货总金额的内容,并设置图标及文本在图标的左侧显示,用于直观展示进货金额信息 - pan1 = new JLabel("今日进货总金额:" + allInPrice + "元", new ImageIcon("static\\icon\\money.png"), JLabel.LEFT); - - // 设置pan1这个JLabel组件的字体为通过FontUtil类获取的适用于首页显示的特定字体 - pan1.setFont(FontUtil.homeFont); - - // 设置pan1在界面中的位置和大小 - pan1.setBounds(280, 300, 600, 200); - - // 创建JLabel组件pan2,设置其显示文本为包含今日收银总金额的内容,同样设置图标及文本位置,用于展示收银金额信息 - pan2 = new JLabel("今日收银总金额:" + allOutPrice + "元", new ImageIcon("static\\icon\\income.png"), JLabel.LEFT); - - // 设置pan2的字体为首页特定字体 - pan2.setFont(FontUtil.homeFont); - - // 设置pan2在界面中的位置和大小 - pan2.setBounds(280, 400, 600, 200); - - // 创建JLabel组件pan3,设置其显示文本为今日被投诉次数相关内容(初值为0次),设置图标及文本位置,用于展示投诉情况信息 - pan3 = new JLabel("今日被投诉次数:0次", new ImageIcon("static\\icon\\complaints.png"), JLabel.LEFT); - - // 设置pan3的字体为首页特定字体 - pan3.setFont(FontUtil.homeFont); - - // 设置pan3在界面中的位置和大小 - pan3.setBounds(280, 500, 600, 200); - - - /*priceJPanel = new JPanel(); - priceJPanel.setBounds(100, 200, 700, 500);*/ - - // 将pan1、pan2、pan3这三个用于显示关键信息的JLabel组件添加到当前面板(HomeView)中,使其在界面上展示出来供用户查看相关业务数据 - this.add(pan1); - this.add(pan2); - this.add(pan3); - - // 创建一个按钮组件refreshBtn,使用指定图标文件创建按钮图标 - refreshBtn = new JButton(new ImageIcon("static\\icon\\refresh.png")); - - // 为refreshBtn按钮添加点击事件监听器,将点击事件绑定到当前类的actionPerformed方法上 - refreshBtn.addActionListener(this); - - // 设置refreshBtn按钮在界面中的位置和大小 - refreshBtn.setBounds(1050, 700, 40, 40); - - // 将refreshBtn按钮添加到当前面板(HomeView)中 - this.add(refreshBtn); - } - - // 定义一个实现了ActionListener接口的匿名内部类L,用于处理定时器触发的事件,实现图片在pan这个JLabel组件上的定时切换展示,达到图片轮播效果 - ActionListener L = new ActionListener() { - int index; // 定义变量index,用于记录当前要显示图片在imgs数组中的索引位置,初始默认为0 - - @Override - public void actionPerformed(ActionEvent e) { - // 将pan这个JLabel组件的图标设置为imgs数组中当前索引index对应的图片,实现图片切换展示效果,定时器触发时更新显示图片 - pan.setIcon(imgs[index]); - // 将索引值index加1,准备切换到下一张图片 - index++; - // 判断索引值是否达到imgs数组长度7,若达到则重置为0,实现图片循环轮播 - if (index == 7) - index = 0; - } - }; - - // 定义静态方法refreshHome,用于刷新首页界面上显示的关键数据(进货、收银金额等) +public class HomeView extends JPanel implements ActionListener +{ + + private JLabel pan; + +private static JLabel pan1; + +private static JLabel pan2; + +private static JLabel pan3; + + private JFrame jFrame; + + private JPanel tplbPanel; + + private Image bgImage = null; + + private ImageIcon[] imgs; + + private static Float allInPrice; + +private static Float allOutPrice; + + private JButton refreshBtn; + + private JPanel priceJPanel; + + private static String date; + + private static inOrderServiceImpl inOrderImpl ; + private static outOrderServiceImpl outOrderImpl; + + + + public HomeView(JFrame jFrame) { + this.setLayout(null); + this.jFrame = jFrame; + initView(); + + } + + + private void initView() { + + + + pan = new JLabel(); + pan.setBounds(0,0, 1280,351); + + /*tplbPanel.add(pan);*/ + + imgs =new ImageIcon[7]; + for(int i =0;i<7;i++) { + imgs[i]=new ImageIcon("static\\轮播\\0"+i+".jpg"); + } + pan.setIcon(imgs[6]); + Timer timer = new Timer(2500,L); + timer.start(); + this.add(pan); + + date= TimeAndOrder.yMdTime();/*获取今天时间*/ + inOrderImpl = new inOrderServiceImpl(); + outOrderImpl = new outOrderServiceImpl(); + + allInPrice=inOrderImpl.TodayInPrice(date); + allOutPrice=outOrderImpl.TodayOutPrice(date); + System.out.println("今日allInprice="+allInPrice); + System.out.println("今日allOutprice="+allOutPrice); + + pan1 = new JLabel("今日进货总金额:"+allInPrice+"元",new ImageIcon("static\\icon\\money.png"),JLabel.LEFT); + pan2 = new JLabel("今日收银总金额:"+allOutPrice+"元",new ImageIcon("static\\icon\\income.png"),JLabel.LEFT); + pan3 = new JLabel("今日被投诉次数:0次",new ImageIcon("static\\icon\\complaints.png"),JLabel.LEFT); + + pan1.setFont(FontUtil.homeFont); + pan2.setFont(FontUtil.homeFont); + pan3.setFont(FontUtil.homeFont); + + pan1.setBounds(280,300, 600,200); + pan2.setBounds(280,400, 600,200); + pan3.setBounds(280,500, 600,200); + + /* priceJPanel = new JPanel(); + priceJPanel.setBounds(100,200,700,500);*/ + this.add(pan1); + this.add(pan2); + this.add(pan3); + + + + refreshBtn = new JButton(new ImageIcon("static\\icon\\refresh.png")); + refreshBtn.addActionListener(this); + refreshBtn.setBounds(1050,700, 40,40); + this.add(refreshBtn); + + + + + } + ActionListener L=new ActionListener() + { + int index; + @Override + public void actionPerformed(ActionEvent e) + { + pan.setIcon(imgs[index]); + index++; + if(index==7) + index=0; + } + }; + public static void refreshHome() { - // 再次调用TimeAndOrder工具类的yMdTime方法获取当前最新日期信息 - date = TimeAndOrder.yMdTime(); - - // 调用inOrderImpl的TodayInPrice方法,传入最新日期date,重新获取今日进货总金额并更新allInPrice变量的值 - allInPrice = inOrderImpl.TodayInPrice(date); - - // 调用outOrderImpl的TodayOutPrice方法,传入date重新获取今日收银总金额并更新allOutPrice变量的值 - allOutPrice = outOrderImpl.TodayOutPrice(date); - - // 在控制台打印更新后的今日进货总金额信息 - System.out.println("今日allInPrice=" + allInPrice); - - // 在控制台打印更新后的今日收银总金额信息 - System.out.println("今日allOutPrice=" + allOutPrice); - - // 更新pan1这个JLabel组件的文本内容,显示最新的进货总金额信息,实现界面数据实时刷新 - pan1.setText("今日进货总金额:" + allInPrice + "元"); - - // 更新pan2的文本内容,显示最新的收银总金额信息,保证销售数据在界面上及时更新展示 - pan2.setText("今日收银总金额:" + allOutPrice + "元"); - - // 更新pan3的文本内容,开始显示0次投诉 - pan3.setText("今日被投诉次数:0次"); - - /*priceJPanel = new JPanel(); - priceJPanel.setBounds(100, 200, 700, 500);*/ - - /*this.add(pan1); - this.add(pan2); - this.add(pan3);*/ + date= TimeAndOrder.yMdTime();/*获取今天时间*/ + + allInPrice=inOrderImpl.TodayInPrice(date); + allOutPrice=outOrderImpl.TodayOutPrice(date); + System.out.println("今日allInprice="+allInPrice); + System.out.println("今日allOutprice="+allOutPrice); + + pan1.setText("今日进货总金额:"+allInPrice+"元"); + pan2.setText("今日收银总金额:"+allOutPrice+"元"); + pan3.setText("今日被投诉次数:0次"); + + + /* priceJPanel = new JPanel(); + priceJPanel.setBounds(100,200,700,500);*/ +/* this.add(pan1); + this.add(pan2); + this.add(pan3);*/ } - - // 实现ActionListener接口的actionPerformed方法 + + + + + + @Override public void actionPerformed(ActionEvent e) { - // 获取触发被点击的按钮 + // TODO Auto-generated method stub Object source = e.getSource(); - if (source == refreshBtn) { - // 如果点击的是refreshBtn按钮,创建一个新的HomeView实例 + if(source==refreshBtn) { new HomeView(jFrame); - // 调用refreshHome方法,刷新首页界面上显示的关键数据,更新界面展示内容 refreshHome(); } + } + + + } \ No newline at end of file diff --git a/Supermarket/src/com/lingnan/supermarket/view/InView.java b/Supermarket/src/com/lingnan/supermarket/view/InView.java index 6738cf3..fc657b2 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/InView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/InView.java @@ -1,5 +1,7 @@ +// 定义包名,表明该类属于com.lingnan.supermarket.view包 package com.lingnan.supermarket.view; +// 导入必要的Java Swing和AWT类库以及自定义的类库 import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; @@ -43,193 +45,286 @@ import com.lingnan.supermarket.utils.SendQQMailUtil; import com.lingnan.supermarket.utils.TimeAndOrder; import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; +// 声明InView类,继承JPanel并实现ActionListener接口 public class InView extends JPanel implements ActionListener{ - - - //上面 + + // 定义类的成员变量,用于构建界面元素 + // 上面的工具栏面板 private JPanel toolBarPanel; - + + // 搜索面板 private JPanel searchPanel; - private JLabel nameLabel,locationLabel; - private JTextField nameSearchTF; - private JButton searchBtn,StockBtn,exitBtn; - + private JLabel nameLabel,locationLabel; // 标签用于显示文本 + private JTextField nameSearchTF; // 文本框用于输入搜索内容 + private JButton searchBtn,StockBtn,exitBtn; // 按钮用于执行操作 + + // 操作面板 private JPanel opePanel; - private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn,detailBtn; - - //中间 + private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn,detailBtn; // 操作按钮 + + // 中间的表格滚动面板 private JScrollPane tableScrollPane; - private JTable inTable; - - //下面 - private JPanel bottomPanel,bottomPanelLeft,bottomPanelRight; - private JLabel countInfoLabel,countInfoLabel2; - + private JTable inTable; // 表格用于显示数据 + + // 下面的面板 + private JPanel bottomPanel,bottomPanelLeft,bottomPanelRight; // 底部面板 + private JLabel countInfoLabel,countInfoLabel2; // 标签用于显示统计信息 + + // 缓冲区相关变量 private Buffer Buffer; private BufferImpl BufferImpl; - + + // 定义一个静态的Vector集合,用于存储Production对象 private static Vector v = new Vector(); - + + // 定义一个下拉框组件,用于选择不同的状态 private JComboBox combo; + // 定义一个字符串数组,包含所有可能的状态选项 private String[] status ={"全部","已入库","待入库","已取消"}; + // 定义一个变量,用于存储当前选中的目录 private int catalog; - + + // 定义一个JFrame对象,用于表示主窗口 private JFrame jFrame; + // 定义一个User对象,用于存储当前用户信息 private User user; - + + // 定义一个InTableModel对象,用于管理表格数据模型 private InTableModel inTableModel ; - + + // 实例化BufferImpl对象,用于操作缓冲区数据 private BufferImpl bufferImpl = new BufferImpl(); - + + // 定义一个标记变量,用于区分是从进货表还是提醒过来的表 private int mark;/*标记从提醒那里来1是进货表,0是提醒过来的表*/ - + + // 定义一个inOrderServiceImpl对象,用于处理进货订单服务 private inOrderServiceImpl inOrderImpl; - + + // 定义一个浮点数变量,用于存储总价 private Float allPrice; + // 定义一个整数变量,用于存储选中的行号 private int row; + // 定义一个字符串变量,用于存储用户名 private String uname; - + + // InView类的构造方法,接收主窗口、用户、货物集合和标记作为参数 public InView(JFrame jFrame,User user,Vector v,int mark) { - this.setLayout(new BorderLayout()); + // 设置布局管理器为边界布局 + this.setLayout(new BorderLayout()); + // 初始化成员变量 this.jFrame = jFrame; this.user = user; - //获得进货缓冲区的保存的货物并删除缓冲区 + // 获取进货缓冲区的保存的货物并删除缓冲区 this.v =bufferImpl.allInBuffer(); bufferImpl.DelAllInBuffer(); - + + // 初始化标记变量 this.mark=mark; + // 打印标记值,用于调试 System.out.println("mark="+mark); + // 获取并存储用户名 uname = user.getUsername(); + // 初始化视图 initView(); - - + + } - + + // 初始化视图的方法 private void initView() { - - toolBarPanel = new JPanel(new BorderLayout()); - - searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + + // 创建工具栏面板,并设置布局管理器为边界布局 + toolBarPanel = new JPanel(new BorderLayout()); + + // 创建搜索面板,并设置布局管理器为流式布局,靠右对齐 + searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + // 创建并初始化标签,用于显示“订单号” nameLabel = new JLabel("订单号"); + // 创建并初始化文本框,用于输入搜索内容,宽度为20 nameSearchTF = new JTextField(20); + // 创建并初始化搜索按钮,并设置图标 searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); + // 为搜索按钮添加动作监听器 searchBtn.addActionListener(this); + // 创建并初始化位置标签,并设置字体和前景色 locationLabel=new JLabel("当前位置>进货系统"); locationLabel.setFont(new FontUtil().userFont); locationLabel.setForeground(new Color(18, 150, 219)); - - - + + + + // 创建并初始化下拉框,使用状态数组作为选项 combo = new JComboBox(status); + // 为下拉框添加项目监听器 combo.addItemListener(new MyItemListener()); - - - - opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + + + + + // 创建操作面板,并设置布局管理器为流式布局,靠左对齐 + opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); +// 创建并初始化添加按钮,并设置图标 addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); +// 创建并初始化更新按钮,并设置图标 updateBtn =new JButton(new ImageIcon("static\\icon\\change.png")); +// 创建并初始化删除按钮,并设置图标 deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); +// 创建并初始化历史按钮,并设置图标 historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); +// 创建并初始化返回按钮,并设置图标 backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); +// 创建并初始化详情按钮,并设置图标 detailBtn = new JButton(new ImageIcon("static\\icon\\detail.png")); - + +// 为添加按钮添加动作监听器 addBtn.addActionListener(this); +// 为更新按钮添加动作监听器 updateBtn.addActionListener(this); +// 为删除按钮添加动作监听器 deleteBtn.addActionListener(this); +// 为历史按钮添加动作监听器 historyBtn.addActionListener(this); +// 为返回按钮添加动作监听器 backBtn.addActionListener(this); +// 为详情按钮添加动作监听器 detailBtn.addActionListener(this); - + +// 设置返回按钮初始不可见,它在记录页面时才会显示 backBtn.setVisible(false);/*在记录页面显示出来*/ +// 设置详情按钮初始不可见,它在订单详情页时才会显示 detailBtn.setVisible(false);/*在订单详情页显示出来*/ - + +// 将添加按钮添加到操作面板 opePanel.add(addBtn); +// 将返回按钮添加到操作面板 opePanel.add(backBtn); +// 将详情按钮添加到操作面板 opePanel.add(detailBtn); - opePanel.add(updateBtn); +// 将更新按钮添加到操作面板 + opePanel.add(updateBtn); +// 将删除按钮添加到操作面板 opePanel.add(deleteBtn); +// 将历史按钮添加到操作面板 opePanel.add(historyBtn); - - + +// 将位置标签添加到搜索面板 searchPanel.add(locationLabel); +// 将订单号标签添加到搜索面板 searchPanel.add(nameLabel); +// 将搜索文本框添加到搜索面板 searchPanel.add(nameSearchTF); +// 将搜索按钮添加到搜索面板 searchPanel.add(searchBtn); +// 将状态下拉框添加到搜索面板 searchPanel.add(combo); - - - + + + +// 将搜索面板添加到工具栏面板的西边(West) toolBarPanel.add(searchPanel,"West"); +// 将操作面板添加到工具栏面板的东边(East) toolBarPanel.add(opePanel,"East"); - - + + + //中间表 + // 创建一个表格模型,并传入数据向量v inTableModel = new InTableModel(v); +// 创建一个新的表格,使用上面创建的表格模型 inTable = new JTable(inTableModel); +// 设置表格的字体 inTable.setFont(FontUtil.tableFont); +// 设置表格的行高 inTable.setRowHeight(50); +// 创建一个滚动面板,并将表格添加到滚动面板中 tableScrollPane = new JScrollPane(inTable); - + +// 获取表格模型中的所有商品总价 allPrice = inTableModel.getAllPrice(); +// 获取表格模型中的行数,即商品种类数量 row = inTableModel.getRowCount(); - - //下面 +// 创建底部左侧面板,并设置布局为右对齐流式布局 bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - countInfoLabel = new JLabel("商品种类:"+row+",总价:"+allPrice); +// 创建一个标签用于显示商品种类和总价信息 + countInfoLabel = new JLabel("商品种类:"+row+",总价:"+allPrice); +// 将商品信息标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel,"Left"); - + +// 创建底部右侧面板,并设置布局为左对齐流式布局 bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.LEFT)); +// 创建并初始化结账按钮,并设置图标 StockBtn =new JButton(new ImageIcon("static\\icon\\stock.png"));/*结账按钮*/ +// 创建并初始化退出按钮,并设置图标 exitBtn =new JButton(new ImageIcon("static\\icon\\exit.png"));/*退出按钮*/ +// 为结账按钮添加动作监听器 StockBtn.addActionListener(this); +// 为退出按钮添加动作监听器 exitBtn.addActionListener(this); +// 将结账按钮添加到底部右侧面板 bottomPanelRight.add(StockBtn); +// 将退出按钮添加到底部右侧面板 bottomPanelRight.add(exitBtn); - + +// 创建底部面板,并设置布局为边界布局 bottomPanel = new JPanel(new BorderLayout()); +// 将底部右侧面板添加到底部面板的东边 bottomPanel.add(bottomPanelRight,"East"); +// 将底部左侧面板添加到底部面板的西边 bottomPanel.add(bottomPanelLeft,"West"); - - + + +// 将工具栏面板添加到窗口的北边 this.add(toolBarPanel,"North"); +// 将表格滚动面板添加到窗口的中间 this.add(tableScrollPane,"Center");/*将表格放到中间*/ +// 将底部面板添加到窗口的南边 this.add(bottomPanel,"South"); - + +// 如果标记为1,表示是从提醒模块过来的,则刷新缓冲区 if(mark==1) /*判断是不是从提醒那里过来的*/{ refreshBuffer(v); } - +// 如果标记为0,则执行进货订单记录操作 else if(mark==0) { InOrderRecord(); } - - - + + + + + // 设置窗口为可见状态,这样用户就可以看到并与之交互 setVisible(true); - - - - - + + + + + + } - + + // 提供一个静态方法,用于获取存储Production对象的Vector集合 public static Vector getVector(){ return v; } - - + + // 定义一个内部类MyItemListener,实现ItemListener接口来监听下拉框项目的状态改变 public class MyItemListener implements ItemListener { + // 重写itemStateChanged方法,当下拉框中的项目状态改变时被调用 @Override public void itemStateChanged(ItemEvent e) { + // 将事件源转换为JComboBox类型 JComboBox cb = (JComboBox) e.getSource(); + // 获取当前选中的项目,并转换为字符串 String catalog1 = (String) cb.getSelectedItem(); + // 根据选中的项目设置相应的分类代码 if(catalog1.equals("全部")) catalog=0; else if(catalog1.equals("已入库")) @@ -238,276 +333,384 @@ public class InView extends JPanel implements ActionListener{ catalog=2; else if(catalog1.equals("已取消")) catalog=3; - - resultOfFindStatus(catalog); - } + // 根据分类代码执行查找操作 + resultOfFindStatus(catalog); } + } - - - //按钮组件隐藏 + // 设置按钮组件的可见性 public void OrderView() { + // 设置返回按钮为可见 backBtn.setVisible(true); + // 设置详情按钮为可见 detailBtn.setVisible(true); + // 设置更新按钮为可见 updateBtn.setVisible(true); + // 设置删除按钮为可见 deleteBtn.setVisible(true); + // 设置添加按钮为不可见 addBtn.setVisible(false); + // 设置历史按钮为不可见 historyBtn.setVisible(false); } - - + + // 根据订单编号查询结果,并更新界面 public void resultOfNumber(String iNumber) { + // 重置标记 this.mark=0; + // 创建InOrderTM对象,用于处理订单数据 InOrderTM inOrderTM = new InOrderTM(); + // 根据订单编号查询结果 inOrderTM.resultOfNumber(iNumber); + // 设置表格模型为查询结果 inTable.setModel(inOrderTM); + // 清除底部左侧面板的内容 bottomPanelLeft.removeAll(); + // 创建一个标签,显示记录总数 countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); + // 更新按钮组件的可见性 OrderView(); - } - + } + + + // 根据状态分类代码查询订单,并更新界面 public void resultOfFindStatus(int catalog) { + // 重置标记 this.mark=0; + // 创建InOrderTM对象,用于处理订单数据 InOrderTM inOrderTM = new InOrderTM(); + // 根据分类代码查询订单 inOrderTM.resultOfFind(catalog); + // 设置表格模型为查询结果 inTable.setModel(inOrderTM); + // 清除底部左侧面板的内容 bottomPanelLeft.removeAll(); + // 创建一个标签,显示记录总数 countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); + // 更新按钮组件的可见性 OrderView(); } - - /*刷新*/ - public void refreshBuffer(Vector v) { - this.mark=1; - + // 刷新缓冲区数据,并更新界面 + public void refreshBuffer(Vector v) { + // 设置标记为1,表示刷新操作 + this.mark=1; + // 创建InTableModel对象,使用传入的Vector作为数据源 InTableModel inTableModel = new InTableModel(v); + // 设置表格模型为新的数据模型 inTable.setModel(inTableModel); + // 清除底部左侧面板的内容 bottomPanelLeft.removeAll(); + // 创建一个标签,显示商品种类和总价信息 countInfoLabel = new JLabel("商品种类:"+inTableModel.getRowCount()+",总价:"+inTableModel.getAllPrice()); + // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); + // 设置按钮的可见性 backBtn.setVisible(false); detailBtn.setVisible(false); historyBtn.setVisible(true); updateBtn.setVisible(true); addBtn.setVisible(true); deleteBtn.setVisible(true); - - allPrice = inTableModel.getAllPrice(); + + // 更新总价和记录数 + allPrice = inTableModel.getAllPrice(); row = inTableModel.getRowCount(); } - - /*调出进货订单表*/ + + // 调出所有进货订单记录,并更新界面 public void InOrderRecord() { + // 重置标记 this.mark=0; + // 创建InOrderTM对象,用于处理订单数据 InOrderTM inOrderTM = new InOrderTM(); + // 获取所有进货订单记录 inOrderTM.allInOrderRecord(); + // 设置表格模型为所有订单记录 inTable.setModel(inOrderTM); + // 清除底部左侧面板的内容 bottomPanelLeft.removeAll(); + // 创建一个标签,显示记录总数 countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); + // 更新按钮组件的可见性 OrderView(); - } - - /*调出进货订单表*/ + + // 根据订单编号查询进货记录,并更新界面 public void InRecord(String iNumber) { + // 设置标记为2,表示按订单编号查询 this.mark=2; + // 创建InRecordTM对象,使用订单编号作为查询条件 InRecordTM inRecordTM = new InRecordTM(iNumber); + // 查询进货记录 inRecordTM.findInRecordByINumber(); + // 设置表格模型为查询结果 inTable.setModel(inRecordTM); + // 清除底部左侧面板的内容 bottomPanelLeft.removeAll(); + // 创建一个标签,显示订单号和记录总数 countInfoLabel = new JLabel("订单号@"+iNumber+"共有"+inRecordTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); + // 更新按钮的可见性 backBtn.setVisible(true); detailBtn.setVisible(false); updateBtn.setVisible(false); addBtn.setVisible(false); historyBtn.setVisible(false); deleteBtn.setVisible(false); - } - - - - + + + + + /*按钮监听时间*/ @Override public void actionPerformed(ActionEvent e) { + // 创建购物车实例 BufferImpl = new BufferImpl();/*获得购物车*/ + // 获取事件源对象 Object source = e.getSource(); - + + // 如果事件源是搜索按钮 if(searchBtn==source) { + // 从搜索文本框中获取订单号 String number = nameSearchTF.getText(); + // 打印搜索后的订单号 System.out.println("搜索后的订单:"+number); + // 根据订单号进行搜索并处理结果 resultOfNumber(number); } - else if(addBtn==source) {/*添加*/ + // 如果事件源是添加按钮 + else if(addBtn==source) { + // 创建添加对话框实例,并传入窗口框架、向量数据、用户信息 InDialog outDialog = new InDialog(jFrame,v,user); + // 设置对话框为可见 outDialog.setVisible(true); + // 获取对话框返回的向量数据 v=outDialog.getVector(); + // 刷新购物车数据 refreshBuffer(v); - + } - - - else if(updateBtn==source) {/*更新*/ + + + else if(updateBtn==source) { /*更新*/ + // 打印当前操作标记值 System.out.println("mark="+mark); + // 获取表格中被选中的行索引 int rowIndex = inTable.getSelectedRow(); + // 如果没有行被选中,弹出提示对话框并返回 if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); - return; - } - //进货表修改 + JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); + return; + } + // 如果标记值为1,表示当前操作是进货表修改 if(mark==1) { - String id =(String) inTable.getValueAt(rowIndex,0); - ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"In",v); - changesumDialog.setVisible(true); - v = changesumDialog.getVector(); - System.out.println("更改状态后v.size="+v.size()); - refreshBuffer(v); + // 从选中的行中获取ID + String id =(String) inTable.getValueAt(rowIndex,0); + // 创建修改数量的对话框实例,并传入相关参数 + ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"In",v); + // 设置对话框为可见 + changesumDialog.setVisible(true); + // 获取对话框返回的向量数据 + v = changesumDialog.getVector(); + // 打印更改状态后向量的大小 + System.out.println("更改状态后v.size="+v.size()); + // 刷新缓冲区数据 + refreshBuffer(v); } - + //inOrder修改,修改状态 - else if(mark==0) { + else if(mark==0) { + // 从选中的行中获取订单编号 String iNumber =(String) inTable.getValueAt(rowIndex,0); + // 从选中的行中获取订单状态 String status =(String) inTable.getValueAt(rowIndex,4); + // 如果订单状态为"已入库",则弹出提示信息并返回 if(status.equals("已入库")) { JOptionPane.showMessageDialog(this,"订单上的货物已入库无法修改状态","提示",JOptionPane.INFORMATION_MESSAGE); return; } - + + // 创建修改状态对话框实例,并传入相关参数 ChangeStatusDialog changeStatusDialog = new ChangeStatusDialog(jFrame,iNumber,status); + // 设置对话框为可见 changeStatusDialog.setVisible(true); + // 刷新主界面提醒 MainView.refreshRemind(); + // 刷新首页 HomeView.refreshHome(); + // 重新加载订单记录 InOrderRecord(); } - + + } - - + + else if(deleteBtn==source) { + // 获取表格中被选中的行索引 int rowIndex = inTable.getSelectedRow(); + // 如果没有行被选中,弹出提示对话框并返回 if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条"); - return; - } - + JOptionPane.showMessageDialog(this,"请选中一条"); + return; + } + /*删除进货表的*/ if(mark==1) { + // 打印日志信息,表示将删除进货表中的记录 System.out.println("删除进货表"); - String id =(String) inTable.getValueAt(rowIndex,0); - int select = JOptionPane.showConfirmDialog(this,"是否删除id为"+id+"的记录","提示",JOptionPane.YES_NO_OPTION); - if(select==JOptionPane.YES_OPTION) {/*选择是*/ - for(int i =0;i(); - refreshBuffer(v); - MainView.refreshRemind(); - JOptionPane.showConfirmDialog(null,"发送邮件成功\r\n订单号:"+s[0]+"\r\n负责人:"+uname, "提示", JOptionPane.YES_OPTION); - + + + // 生成订单文本 + CreateOrder createOrder = new CreateOrder(); + String OrderText = createOrder.CreateOrder(v, s[0], s[1], allPrice,uname); + try {/*发送邮件*/ + SendQQMailUtil QQEmail = new SendQQMailUtil("sender@qq.com","自行获取 SMTP 授权码","receiver@qq.com","@新民超市进货需求申请",OrderText); + } catch (MessagingException e1) { + // 异常处理,打印堆栈跟踪 + e1.printStackTrace(); } - - + // 清空购物车并刷新缓冲区 + v=new Vector(); + refreshBuffer(v); + // 刷新主界面提醒 + MainView.refreshRemind(); + // 弹出提示对话框,显示邮件发送成功和订单信息 + JOptionPane.showConfirmDialog(null,"发送邮件成功\r\n订单号:"+s[0]+"\r\n负责人:"+uname, "提示", JOptionPane.YES_OPTION); + } - + + + } + }else if(exitBtn==source) { + // 弹出确认对话框,询问是否退出并清空购物车 int res = JOptionPane.showConfirmDialog(null,"确定退出并清空购物车吗", "结账", JOptionPane.YES_NO_OPTION); if(res==JOptionPane.YES_OPTION)/*如果退出*/{ + // 将购物车数组置空并刷新缓冲区 v=new Vector();/*将数组置空*/ refreshBuffer(v); + // 弹出提示对话框,显示退出成功 JOptionPane.showConfirmDialog(null,"退出成功", "提示", JOptionPane.PLAIN_MESSAGE); - } } + + } } } diff --git a/Supermarket/src/com/lingnan/supermarket/view/LoginView.java b/Supermarket/src/com/lingnan/supermarket/view/LoginView.java index 6579aa3..e52dcb4 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/LoginView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/LoginView.java @@ -24,160 +24,135 @@ import javax.swing.JPasswordField; import javax.swing.JRadioButton; import javax.swing.JTextField; -// 导入用户相关服务层接口及实现类,用于处理用户登录等业务逻辑 import com.lingnan.supermarket.dao.UserService; import com.lingnan.supermarket.dao.impl.UserServiceImpl; -// 导入用户数据传输对象相关类,用于传递用户相关的数据信息 import com.lingnan.supermarket.dto.Production; import com.lingnan.supermarket.dto.User; import com.lingnan.supermarket.componet.BGPanel; import com.lingnan.supermarket.view.base.BaseView; -// 登录视图类,实现ActionListener接口用于处理按钮点击等事件 -public class LoginView extends BaseView implements ActionListener { - - // 组件声明 - - // 用于容纳其他面板和组件的主面板,整体布局容器 - private JPanel containerPanel; - // 用于放置用户名相关组件的面板 - private JPanel namePanel; - // 用于放置密码相关组件的面板 - private JPanel passwordPanel; - - // 用户名标签 - private JLabel nameLabel; - // 密码标签 - private JLabel pwdLabel; - // 用于输入用户名的文本框 - private JTextField nameTF; - // 用于输入密码的密码框 - private JPasswordField pwdTF; - - // 登录按钮,点击后触发登录验证等相关操作 - private JButton loginBtn; - - // 用于存储登录成功后的用户对象信息,初始化为null - private User user = null; - - /* - * 创建窗口的构造方法 - * 参数: - * int width:窗口的宽度 - * int height:窗口的高度 - * String title:窗口的标题 - */ - public LoginView() { - // 调用父类(BaseView)的构造方法来设置窗口的大小和标题 +public class LoginView extends BaseView implements ActionListener{ + + //setLayout(null); + //setBounds(x,y,width,height) + private JPanel containerPanel,namePanel,passwordPanel; + + private JLabel nameLabel,pwdLabel; + private JTextField nameTF; + private JPasswordField pwdTF; + + private JButton loginBtn; + + private User user=null; + + + /*创建窗口*/ + public LoginView() { super(350, 250, "新民超市"); - // 创建一个ImageIcon对象,用于设置窗口的图标,传入的参数是图标图片的路径及文件名 - ImageIcon icon = new ImageIcon("static\\icon\\新.png"); - // 设置窗口的图标,通过获取ImageIcon中的Image对象来设置 + ImageIcon icon=new ImageIcon("static\\icon\\新.png"); //xxx代表图片存放路径,2.png图片名称及格式 this.setIconImage(icon.getImage()); + } - /* - * 添加组件到界面的方法,重写自父类的initView方法,用于初始化界面视图组件及布局等 - */ - @Override + /*添加组件*/ + @Override/*界面*/ protected void initView() { + Image bgImage = null; try { - // 尝试从指定文件路径读取背景图片,若读取失败会抛出IOException异常 bgImage = ImageIO.read(new File("static\\bg\\bg1.jpg")); } catch (IOException e) { e.printStackTrace(); } - // 创建一个自定义的背景面板,传入读取到的背景图片,用于作为整个界面的背景容器 - containerPanel = new BGPanel(bgImage); - - // 用户名相关组件的设置 - // 创建放置用户名相关组件的面板 - namePanel = new JPanel(); - // 创建用户名标签,通过传入一个ImageIcon来显示带有图标的提示信息 + containerPanel = new BGPanel(bgImage); + + + + //用户名 + namePanel = new JPanel(); nameLabel = new JLabel(new ImageIcon("static\\icon\\loginName.png")); - // 创建用户名输入文本框,并设置默认显示的文本内容以及文本框的宽度 - nameTF = new JTextField("z001", 22); - // 将用户名标签和输入文本框添加到用户名面板中 + nameTF = new JTextField("z001",22); namePanel.add(nameLabel); namePanel.add(nameTF); - // 密码相关组件的设置 - // 创建放置密码相关组件的面板 + + //密码 passwordPanel = new JPanel(); - // 创建密码标签,通过传入一个ImageIcon来显示带有图标的提示信息 pwdLabel = new JLabel(new ImageIcon("static\\icon\\pwd.png")); - // 创建密码输入文本框 - pwdTF = new JPasswordField("0.00.0", 22); - // 将密码标签和密码输入文本框添加到密码面板中 + pwdTF = new JPasswordField("0.00.0",22); passwordPanel.add(pwdLabel); passwordPanel.add(pwdTF); - - // 创建登录按钮,并设置按钮上显示的文本内容 + + //登录 loginBtn = new JButton("登录"); - // 为登录按钮添加ActionListener监听器,当按钮被点击时会触发相应的事件处理方法 loginBtn.addActionListener(this); + + + - // 将用户名面板、密码面板和登录按钮添加到主容器面板中,确定它们在界面中的布局顺序等 + + /*添加组件*/ containerPanel.add(namePanel); containerPanel.add(passwordPanel); containerPanel.add(loginBtn); - // 获取窗口的内容面板,将主容器面板添加到内容面板中,使得界面组件能够正确显示在窗口内 + + + Container container = getContentPane(); container.add(containerPanel); } - - /* - * 处理按钮点击等事件的方法,实现ActionListener接口的抽象方法,用于处理界面中的交互事件 - * 参数: - * ActionEvent e:包含了事件相关的信息,例如事件源(哪个组件触发的事件)等 - */ + + /*事件处理*/ @Override public void actionPerformed(ActionEvent e) { - // 判断事件源是否是登录按钮 - if (e.getSource() == loginBtn) { - // 获取用户名输入文本框中的文本内容,作为登录用户名 - String loginName = nameTF.getText(); - // 获取密码输入文本框中的密码内容,通过将char数组转换为字符串的方式获取 - String password = new String(pwdTF.getPassword()); - System.out.println("点击登录后"); - System.out.println("用户名为" + loginName); - System.out.println("密码为" + password); - // 创建用户服务层的实现类对象,用于调用登录相关的业务逻辑方法 - UserServiceImpl userService = new UserServiceImpl(); - // 调用用户服务层的登录方法,传入用户名和密码进行登录验证,返回验证后的用户对象 - user = userService.login(loginName, password); - - // 根据登录验证结果进行相应处理 - if (user == null) { - // 如果用户对象为null,说明登录失败,弹出提示框告知用户账号或密码错误 - JOptionPane.showMessageDialog(this, "账号或密码错误"); - } else { - // 如果登录成功,生成一个随机数,用于后续可能的界面皮肤等相关随机选择逻辑 - Random random = new Random(); - int skin = random.nextInt(10); - System.out.println("skin=" + skin); - // 设置默认的图标皮肤 - String iconSkin = "static\\icon\\新.png"; - // 创建主界面对象,传入登录成功的用户对象、随机生成的皮肤编号以及图标皮肤路径,进入主界面展示相关功能 - new MainView(user, skin, iconSkin); - // 关闭当前登录窗口,释放资源等 - this.dispose(); - } + /*如果点击登录*/ + if(e.getSource()==loginBtn){ + String loginName = nameTF.getText(); + String password = new String(pwdTF.getPassword()); + System.out.println("点击登录后"); + System.out.println("用户名为"+loginName); + System.out.println("密码为"+password); + //TODO 参数校验 + UserServiceImpl userService = new UserServiceImpl(); + user = userService.login(loginName, password); + + if(user==null) { + JOptionPane.showMessageDialog(this,"账号或密码错误"); + }else { + //去到主界面 + Random random=new Random(); + int skin=random.nextInt(10); + System.out.println("skin="+skin); + String iconSkin = "static\\icon\\新.png";/*默认icon*/ + new MainView(user,skin,iconSkin); + this.dispose(); + } } + } + + public static void main(String[] args) { - //设置界面外观 Nimbus.Nimbus(); - // 创建登录视图(LoginView)对象,启动登录界面展示 LoginView loginView = new LoginView(); - } + } @Override - protected void initView(User user, int skin) { + protected void initView(User user,int skin) { // TODO Auto-generated method stub - + } -} \ No newline at end of file + + + + + + + + +} + + + diff --git a/Supermarket/src/com/lingnan/supermarket/view/MainView.java b/Supermarket/src/com/lingnan/supermarket/view/MainView.java index 2d25fde..af24167 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/MainView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/MainView.java @@ -1,455 +1,500 @@ -package com.lingnan.supermarket.view; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; -import java.io.File; -import java.io.IOException; -import java.util.Date; -import java.util.Random; -import java.util.Vector; - -import javax.imageio.ImageIO; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JSplitPane; -import javax.swing.Timer; - -import com.lingnan.supermarket.componet.BGPanel; -import com.lingnan.supermarket.dao.impl.BufferImpl; -import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; -import com.lingnan.supermarket.dialog.CloseDialog; -import com.lingnan.supermarket.dialog.InDialog; -import com.lingnan.supermarket.dialog.UserDialog; -import com.lingnan.supermarket.dialog.UserInfDialog; -import com.lingnan.supermarket.dto.InOrder; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.utils.DateUtil; -import com.lingnan.supermarket.utils.FontUtil; -import com.lingnan.supermarket.view.base.BaseView; - -import java.awt.*; - +package com.lingnan.supermarket.view; // 定义包名,所有视图相关的类都在这个包下 + +import java.awt.event.ActionEvent; // 导入ActionEvent类,用于监听动作事件 +import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现动作事件监听 +import java.awt.event.MouseEvent; // 导入MouseEvent类,用于监听鼠标事件 +import java.awt.event.MouseListener; // 导入MouseListener接口,用于实现鼠标事件监听 +import java.awt.event.WindowEvent; // 导入WindowEvent类,用于监听窗口事件 +import java.awt.event.WindowListener; // 导入WindowListener接口,用于实现窗口事件监听 +import java.io.File; // 导入File类,用于文件操作 +import java.io.IOException; // 导入IOException类,用于处理输入输出异常 +import java.util.Date; // 导入Date类,用于处理日期 +import java.util.Random; // 导入Random类,用于生成随机数 +import java.util.Vector; // 导入Vector类,用于实现动态数组 + +import javax.imageio.ImageIO; // 导入ImageIO类,用于图像输入输出 +import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 +import javax.swing.JButton; // 导入JButton类,用于创建按钮 +import javax.swing.JLabel; // 导入JLabel类,用于创建标签 +import javax.swing.JMenu; // 导入JMenu类,用于创建菜单 +import javax.swing.JMenuBar; // 导入JMenuBar类,用于创建菜单栏 +import javax.swing.JMenuItem; // 导入JMenuItem类,用于创建菜单项 +import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.JSplitPane; // 导入JSplitPane类,用于创建分隔面板 +import javax.swing.Timer; // 导入Timer类,用于实现定时器 + +import com.lingnan.supermarket.componet.BGPanel; // 导入自定义的BGPanel类 +import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入BufferImpl类,可能是数据访问层的实现 +import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; // 导入inOrderServiceImpl类,可能是订单服务的实现 +import com.lingnan.supermarket.dialog.CloseDialog; // 导入CloseDialog类,可能是关闭对话框 +import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能是入库对话框 +import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类,可能是用户对话框 +import com.lingnan.supermarket.dialog.UserInfDialog; // 导入UserInfDialog类,可能是用户信息对话框 +import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,可能是订单数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入Production类,可能是产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,可能是用户数据传输对象 +import com.lingnan.supermarket.utils.DateUtil; // 导入DateUtil类,可能是日期工具类 +import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,可能是字体工具类 +import com.lingnan.supermarket.view.base.BaseView; // 导入BaseView类,可能是视图基类 + +import java.awt.*; // 导入awt包中的所有类 + +// 主视图类,继承自BaseView,并实现多个事件监听接口 public class MainView extends BaseView implements ActionListener, MouseListener,WindowListener{ - - - JMenuBar menuBar; - JMenu settingMenu,helpMenu; - - JMenuItem skinMenuItem,configMenuItem; - - - JSplitPane containerPanel; - - CardLayout rightPanelLayout; - JPanel leftPanel,rightPanel; - - /*菜单栏*/ + + + JMenuBar menuBar; // 声明菜单栏变量 + JMenu settingMenu,helpMenu; // 声明设置菜单和帮助菜单变量 + + JMenuItem skinMenuItem,configMenuItem; // 声明皮肤菜单项和配置菜单项变量 + + + JSplitPane containerPanel; // 声明分隔面板变量,用于左右布局 + + CardLayout rightPanelLayout; // 声明卡片布局管理器变量,用于右侧面板 + JPanel leftPanel,rightPanel; // 声明左侧和右侧面板变量 + + /*菜单栏组件*/ JLabel logoLabel,userMenuLabel1,homeMenuLabel,userMenuLabel,inMenuLabel, - outMenuLabel,storageMenuLabel,supplierMenuLabel,catalogMenuLabel; - - static JLabel remindMenuLabel;/*全局调用刷新*/ - - JPanel bottomPanel; - - JLabel timeLabel; - - JPanel purposePanel,timePanel; - JLabel purposeLabel; - - + outMenuLabel,storageMenuLabel,supplierMenuLabel,catalogMenuLabel; + // 声明菜单栏中各个标签的变量 + + static JLabel remindMenuLabel;/*声明静态标签变量,用于全局调用刷新*/ + + JPanel bottomPanel; // 声明底部面板变量 + + JLabel timeLabel; // 声明时间标签变量 + + JPanel purposePanel,timePanel; // 声明目的面板和时间面板变量 + JLabel purposeLabel; // 声明目的标签变量 + + JButton saveBtn,unSaveBtn,cancleBtn;/*退出时按钮*/ // - Timer timer; - - private User user ;/*从登录界面传过来的用户信息*/ - - private BufferImpl bufferImpl; - - private Image bgImage ; - private String iconSkin; - private int skin; - - private Vector vP=new Vector() ;/*用于进货缓存*/ + Timer timer; // 声明定时器变量,用于执行周期性任务 - - private int location; + private User user ;/*从登录界面传过来的用户信息,用于当前视图的用户上下文*/ - private int sSuper=-1;//界面权限 - - private static inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); - private static int unConfirmmark;/*未确认订单*/ - + private BufferImpl bufferImpl; // 声明BufferImpl对象,可能是用于缓存处理的实现 + + private Image bgImage ; // 声明背景图片变量 + private String iconSkin; // 声明图标皮肤路径变量 + private int skin; // 声明皮肤编号变量 + + private Vector vP=new Vector() ;/*用于进货缓存,存储产品信息*/ + + private int location; // 声明位置变量,可能用于记录当前视图的状态或位置 + + private int sSuper=-1;//界面权限,用于标识用户权限级别 + + private static inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 声明并实例化订单服务实现类 + + private static int unConfirmmark;/*未确认订单的数量*/ + + // 构造方法,接收用户信息、皮肤编号和图标皮肤路径 public MainView(User user,int skin,String iconSkin) { - super(1300,850,"新民超市管理系统欢迎您",user,skin); - timer = new Timer(1000,this); - timer.start(); - this.user = user; - - this.sSuper=user.getUsuper();//界面权限 - System.out.println("userid="+user.getId()); - this.addWindowListener(this); - - this.skin = skin; - this.iconSkin = iconSkin; - ImageIcon icon=new ImageIcon(iconSkin); //xxx代表图片存放路径,2.png图片名称及格式 - this.setIconImage(icon.getImage()); - - //获得未进货的信息 - Vector vInOrder; - vInOrder = inOrderImpl.findUnconfirmInOrder(); - unConfirmmark=vInOrder.size(); - - initView(user,skin); + super(1300,850,"新民超市管理系统欢迎您",user,skin); // 调用父类构造方法,设置窗口大小、标题、用户信息和皮肤 + timer = new Timer(1000,this); // 创建定时器,每1000毫秒执行一次 + timer.start(); // 启动定时器 + this.user = user; // 保存用户信息到当前视图 + this.sSuper=user.getUsuper();//界面权限,从用户信息中获取权限级别 + System.out.println("userid="+user.getId()); // 打印用户ID + this.addWindowListener(this); // 为当前窗口添加窗口事件监听器 + this.skin = skin; // 保存皮肤编号 + this.iconSkin = iconSkin; // 保存图标皮肤路径 + ImageIcon icon=new ImageIcon(iconSkin); // 创建ImageIcon对象,加载图标皮肤 + this.setIconImage(icon.getImage()); // 设置窗口图标 + // 获得未进货的信息 + Vector vInOrder; + vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找未确认的订单 + unConfirmmark=vInOrder.size(); // 设置未确认订单的数量 + initView(user,skin); // 初始化视图 } + // 另一个构造方法,只接收用户信息 public MainView(User user) { - super(1300,850,"新民超市管理系统欢迎您"); - timer = new Timer(1000,this); - timer.start(); - this.user = user; - - this.sSuper=user.getUsuper();//界面权限 - System.out.println("userid="+user.getId()); - this.addWindowListener(this); - + super(1300,850,"新民超市管理系统欢迎您"); // 调用父类构造方法,设置窗口大小和标题 - - //获得未进货的信息 + timer = new Timer(1000,this); // 创建定时器,每1000毫秒执行一次 + + timer.start(); // 启动定时器 + + this.user = user; // 保存用户信息到当前视图 + + this.sSuper=user.getUsuper();//界面权限,从用户信息中获取权限级别 + + System.out.println("userid="+user.getId()); // 打印用户ID + + this.addWindowListener(this); // 为当前窗口添加窗口事件监听器 + // 获得未进货的信息 Vector vInOrder; - vInOrder = inOrderImpl.findUnconfirmInOrder(); - unConfirmmark=vInOrder.size(); - - initView(user,skin); + vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找未确认的订单 + + unConfirmmark=vInOrder.size(); // 设置未确认订单的数量 + + initView(user,skin); // 初始化视图,这里没有为skin赋值,可能会出错 + } - + + public static void refreshRemind() { - Vector vInOrder; - vInOrder = inOrderImpl.findUnconfirmInOrder(); - unConfirmmark=vInOrder.size(); - remindMenuLabel.setText("待确认进货:"+unConfirmmark); + Vector vInOrder; // 声明未确认订单的向量 + vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找所有未确认的订单 + unConfirmmark = vInOrder.size(); // 获取未确认订单的数量 + remindMenuLabel.setText("待确认进货:" + unConfirmmark); // 更新菜单标签,显示未确认订单的数量 } - - - - +// 以下是注释掉的代码,没有实现功能 /* public static User getUserInf() { - return user; - }*/ + return user; // 返回用户信息 +}*/ @Override - protected void initView(User user,int skin) { - - - - + protected void initView(User user, int skin) { + // 初始化视图的方法,接收用户信息和皮肤编号 + /*菜单栏*/ - menuBar = new JMenuBar(); - - settingMenu = new JMenu("设置"); - - helpMenu = new JMenu("帮助"); - - skinMenuItem = new JMenuItem("随机切换皮肤",new ImageIcon("static\\icon\\skin.png")); + menuBar = new JMenuBar(); // 创建菜单栏 -/* for(int i = 3;i<9;i++) { - - }*/ - configMenuItem = new JMenuItem("参数设置",new ImageIcon("static\\icon\\setting.png")); - skinMenuItem.addActionListener(this); - - settingMenu.add(configMenuItem); - settingMenu.add(skinMenuItem); - menuBar.add(settingMenu); - menuBar.add(helpMenu); - - setJMenuBar(menuBar); - + settingMenu = new JMenu("设置"); // 创建设置菜单 + + helpMenu = new JMenu("帮助"); // 创建帮助菜单 + + skinMenuItem = new JMenuItem("随机切换皮肤", new ImageIcon("static\\icon\\skin.png")); // 创建切换皮肤的菜单项 + + /*for循环被注释掉了,没有实际作用 + for(int i = 3;i<9;i++) { + + }*/ + configMenuItem = new JMenuItem("参数设置", new ImageIcon("static\\icon\\setting.png")); // 创建参数设置的菜单项 + skinMenuItem.addActionListener(this); // 为切换皮肤菜单项添加动作监听器 + + settingMenu.add(configMenuItem); // 将参数设置菜单项添加到设置菜单 + settingMenu.add(skinMenuItem); // 将切换皮肤菜单项添加到设置菜单 + menuBar.add(settingMenu); // 将设置菜单添加到菜单栏 + menuBar.add(helpMenu); // 将帮助菜单添加到菜单栏 + + setJMenuBar(menuBar); // 将菜单栏设置到当前窗口 /*左边菜单栏设置*/ - - try { - bgImage = ImageIO.read(new File("static\\bg\\bg"+skin+".jpg")); + bgImage = ImageIO.read(new File("static\\bg\\bg" + skin + ".jpg")); // 读取背景图片 } catch (IOException e) { // TODO Auto-generated catch block - e.printStackTrace(); + e.printStackTrace(); // 打印异常堆栈信息 + } - - leftPanel = new BGPanel(bgImage);/*皮肤*/ - leftPanel.setLayout(null); - + leftPanel = new BGPanel(bgImage); /*皮肤*/ // 创建带有背景的左边面板 + leftPanel.setLayout(null); // 设置左边面板布局为空,即绝对布局 + /*菜单栏:用户登录信息*/ - System.out.println("用户头像地址=="+user.getImg()); - JLabel logoLabel = new JLabel(new ImageIcon(user.getImg()),JLabel.LEFT); - System.out.println(user.getImg()); - leftPanel.add(logoLabel); - logoLabel.setBounds(25, 30,150,150); - + System.out.println("用户头像地址==" + user.getImg()); // 打印用户头像地址 + JLabel logoLabel = new JLabel(new ImageIcon(user.getImg()), JLabel.LEFT); // 创建用户头像标签 + System.out.println(user.getImg()); // 再次打印用户头像地址 + leftPanel.add(logoLabel); // 将用户头像标签添加到左边面板 + logoLabel.setBounds(25, 30, 150, 150); // 设置用户头像标签的位置和大小 + /*账号名字*/ - String x = UsuperIcon(user.getUsuper());/*判断权限返回icon地址*/ - System.out.println("身份地址:"+x); - userMenuLabel1 = new JLabel("|"+user.getUsername()+"|"+user.getRname(),new ImageIcon(x),JLabel.LEFT); - userMenuLabel1.setFont(FontUtil.userFont); - userMenuLabel1.addMouseListener(this); - userMenuLabel1.setBounds(20, 170,180,32); - userMenuLabel1.setForeground(Color.white); - leftPanel.add(userMenuLabel1);/*添加用户选项到菜单栏*/ - - - + String x = UsuperIcon(user.getUsuper()); /*判断权限返回icon地址*/ // 根据用户权限返回相应的图标地址 + + System.out.println("身份地址:" + x); // 打印身份图标地址 + + userMenuLabel1 = new JLabel("|" + user.getUsername() + "|" + user.getRname(), new ImageIcon(x), JLabel.LEFT); // 创建用户信息标签 + + userMenuLabel1.setFont(FontUtil.userFont); // 设置用户信息标签的字体 + + userMenuLabel1.addMouseListener(this); // 为用户信息标签添加鼠标监听器 + + userMenuLabel1.setBounds(20, 170, 180, 32); // 设置用户信息标签的位置和大小 + + userMenuLabel1.setForeground(Color.white); // 设置用户信息标签的前景色为白色 + + leftPanel.add(userMenuLabel1); /*添加用户选项到菜单栏*/ // 将用户信息标签添加到左边面板 + + + + /*菜单栏:首页*/ - homeMenuLabel = new JLabel("新民首页",new ImageIcon("static\\icon\\home1.png"),JLabel.LEFT); - homeMenuLabel.setFont(FontUtil.menuFont); - homeMenuLabel.addMouseListener(this); - homeMenuLabel.setBounds(20, 250,150,32); - homeMenuLabel.setForeground(Color.white); - leftPanel.add(homeMenuLabel);/*添加用户选项到菜单栏*/ - - - + homeMenuLabel = new JLabel("新民首页", new ImageIcon("static\\icon\\home1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示首页菜单 + homeMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + homeMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + homeMenuLabel.setBounds(20, 250, 150, 32); // 设置菜单标签的位置和大小 + homeMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(homeMenuLabel); // 将首页菜单标签添加到左侧面板 + /*菜单栏:人员管理*/ - userMenuLabel = new JLabel("人员管理",new ImageIcon("static\\icon\\user1.png"),JLabel.LEFT); - userMenuLabel.setFont(FontUtil.menuFont); - userMenuLabel.addMouseListener(this); - userMenuLabel.setBounds(20, 300,150,32); - userMenuLabel.setForeground(Color.white); - leftPanel.add(userMenuLabel);/*添加用户选项到菜单栏*/ - + userMenuLabel = new JLabel("人员管理", new ImageIcon("static\\icon\\user1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示人员管理菜单 + userMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + userMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + userMenuLabel.setBounds(20, 300, 150, 32); // 设置菜单标签的位置和大小 + userMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(userMenuLabel); // 将人员管理菜单标签添加到左侧面板 + /*菜单栏:进货系统*/ - inMenuLabel = new JLabel("进货系统",new ImageIcon("static\\icon\\in1.png") ,JLabel.LEFT); - inMenuLabel.setFont(FontUtil.menuFont); - inMenuLabel.addMouseListener(this); - inMenuLabel.setBounds(20, 350,150,32); - inMenuLabel.setForeground(Color.white); - leftPanel.add(inMenuLabel); - + inMenuLabel = new JLabel("进货系统", new ImageIcon("static\\icon\\in1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示进货系统菜单 + inMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + inMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + inMenuLabel.setBounds(20, 350, 150, 32); // 设置菜单标签的位置和大小 + inMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(inMenuLabel); // 将进货系统菜单标签添加到左侧面板 + /*菜单栏:收银系统*/ - outMenuLabel = new JLabel("收银系统",new ImageIcon("static\\icon\\out1.png") ,JLabel.LEFT); - outMenuLabel.setFont(FontUtil.menuFont); - outMenuLabel.addMouseListener(this); - outMenuLabel.setBounds(20, 400,150,32); - outMenuLabel.setForeground(Color.white); - leftPanel.add(outMenuLabel); - + outMenuLabel = new JLabel("收银系统", new ImageIcon("static\\icon\\out1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示收银系统菜单 + outMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + outMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + outMenuLabel.setBounds(20, 400, 150, 32); // 设置菜单标签的位置和大小 + outMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(outMenuLabel); // 将收银系统菜单标签添加到左侧面板 + /*菜单栏:库存*/ - storageMenuLabel = new JLabel("商品库存",new ImageIcon("static\\icon\\storage1.png") ,JLabel.LEFT); - storageMenuLabel.setFont(FontUtil.menuFont); - storageMenuLabel.addMouseListener(this); - storageMenuLabel.setBounds(20, 450,150,32); - storageMenuLabel.setForeground(Color.white); - leftPanel.add(storageMenuLabel); - + storageMenuLabel = new JLabel("商品库存", new ImageIcon("static\\icon\\storage1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品库存菜单 + storageMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + storageMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + storageMenuLabel.setBounds(20, 450, 150, 32); // 设置菜单标签的位置和大小 + storageMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(storageMenuLabel); // 将商品库存菜单标签添加到左侧面板 + /*菜单栏:供应商*/ - supplierMenuLabel = new JLabel("供应商",new ImageIcon("static\\icon\\supplier1.png") ,JLabel.LEFT); - supplierMenuLabel.setFont(FontUtil.menuFont); - supplierMenuLabel.addMouseListener(this); - supplierMenuLabel.setBounds(20, 500,150,32); - supplierMenuLabel.setForeground(Color.white); - leftPanel.add(supplierMenuLabel); - + supplierMenuLabel = new JLabel("供应商", new ImageIcon("static\\icon\\supplier1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示供应商菜单 + supplierMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + supplierMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + supplierMenuLabel.setBounds(20, 500, 150, 32); // 设置菜单标签的位置和大小 + supplierMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(supplierMenuLabel); // 将供应商菜单标签添加到左侧面板 + /*菜单栏:商品目录*/ - catalogMenuLabel = new JLabel("商品目录",new ImageIcon("static\\icon\\catalog1.png") ,JLabel.LEFT); - catalogMenuLabel.setFont(FontUtil.menuFont); - catalogMenuLabel.addMouseListener(this); - catalogMenuLabel.setBounds(20,550,150,32); - catalogMenuLabel.setForeground(Color.white); - leftPanel.add(catalogMenuLabel); - + catalogMenuLabel = new JLabel("商品目录", new ImageIcon("static\\icon\\catalog1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品目录菜单 + catalogMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 + catalogMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 + catalogMenuLabel.setBounds(20, 550, 150, 32); // 设置菜单标签的位置和大小 + catalogMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 + leftPanel.add(catalogMenuLabel); // 将商品目录菜单标签添加到左侧面板 + + /*提醒进货确认模块*/ - remindMenuLabel = new JLabel("待确认进货:"+unConfirmmark,new ImageIcon("static\\icon\\remind1.png") ,JLabel.LEFT); - remindMenuLabel.setFont(FontUtil.remindFont); - remindMenuLabel.addMouseListener(this); - remindMenuLabel.setBounds(0,650,200,32); - remindMenuLabel.setForeground(Color.white); - leftPanel.add(remindMenuLabel); - - + remindMenuLabel = new JLabel("待确认进货:"+unConfirmmark, new ImageIcon("static\\icon\\remind1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于显示待确认进货的数量 + remindMenuLabel.setFont(FontUtil.remindFont); // 设置提醒菜单标签的字体样式 + remindMenuLabel.addMouseListener(this); // 为提醒菜单标签添加鼠标事件监听器 + remindMenuLabel.setBounds(0, 650, 200, 32); // 设置提醒菜单标签的位置和大小 + remindMenuLabel.setForeground(Color.white); // 设置提醒菜单标签的前景色为白色 + leftPanel.add(remindMenuLabel); // 将提醒菜单标签添加到左侧面板 + +// 设置右侧面板的布局管理器为卡片布局 rightPanelLayout = new CardLayout(); - - //0.超市首页展示 + +// 0.超市首页展示,创建并实例化首页视图面板 JPanel homePanel = new HomeView(this); - - //1.用户管理界面:用户的列表 + +// 1.用户管理界面:用户的列表,创建并实例化用户管理视图面板 JPanel userPanel = new UserView(this); - - //2.进货系统界面 - JPanel inPanel = new InView(this,user,vP,1); - - //3收银系统界面 - JPanel outPanel = new OutView(this,user); - - //4.库存系统界面 + +// 2.进货系统界面,创建并实例化进货系统视图面板 + JPanel inPanel = new InView(this, user, vP, 1); + +// 3.收银系统界面,创建并实例化收银系统视图面板 + JPanel outPanel = new OutView(this, user); + +// 4.库存系统界面,创建并实例化库存系统视图面板 JPanel storagePanel = new StorageView(this); - - //5.供应商界面 + +// 5.供应商界面,创建并实例化供应商视图面板 JPanel supplierPanel = new SupplierView(this); - - //6商品目录界面 + +// 6.商品目录界面,创建并实例化商品目录视图面板 JPanel ProdCatalogPanel = new ProdCatalogView(this); - //7商品目录界面 +// 7.超市总览界面,创建并实例化超市总览视图面板 JPanel superPanel = new SuperView(this); - - //8进货信息提示 - JPanel inPanel2 = new InView(this,user,vP,0); - - /*添加界面并给索引*/ + +// 8.进货信息提示界面,创建并实例化进货信息提示视图面板 + JPanel inPanel2 = new InView(this, user, vP, 0); + +// 创建右侧面板并设置布局管理器为之前定义的卡片布局 rightPanel = new JPanel(rightPanelLayout); - rightPanel.add(homePanel, "0"); - rightPanel.add(userPanel, "1"); - rightPanel.add(inPanel, "2"); - rightPanel.add(outPanel, "3"); - rightPanel.add(storagePanel, "4"); - rightPanel.add(supplierPanel, "5"); - rightPanel.add(ProdCatalogPanel, "6"); - rightPanel.add(superPanel, "7"); - rightPanel.add(inPanel2, "8"); - - - containerPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,leftPanel,rightPanel); - containerPanel.setDividerLocation(180); - containerPanel.setDividerSize(0); - - bottomPanel = new JPanel();//默认的布局是流式布局 - - bottomPanel.setBackground(Color.WHITE); - bottomPanel.setLayout(new BorderLayout()); - + rightPanel.add(homePanel, "0"); // 添加首页视图面板并设置其索引为"0" + rightPanel.add(userPanel, "1"); // 添加用户管理视图面板并设置其索引为"1" + rightPanel.add(inPanel, "2"); // 添加进货系统视图面板并设置其索引为"2" + rightPanel.add(outPanel, "3"); // 添加收银系统视图面板并设置其索引为"3" + rightPanel.add(storagePanel, "4"); // 添加库存系统视图面板并设置其索引为"4" + rightPanel.add(supplierPanel, "5"); // 添加供应商视图面板并设置其索引为"5" + rightPanel.add(ProdCatalogPanel, "6"); // 添加商品目录视图面板并设置其索引为"6" + rightPanel.add(superPanel, "7"); // 添加超市总览视图面板并设置其索引为"7" + rightPanel.add(inPanel2, "8"); // 添加进货信息提示视图面板并设置其索引为"8" + +// 创建一个分割面板,将左侧面板和右侧面板水平分割 + containerPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel); + containerPanel.setDividerLocation(180); // 设置分割线的位置 + containerPanel.setDividerSize(0); // 设置分割线的尺寸为0,即隐藏分割线 + +// 创建底部面板,默认使用流式布局 + bottomPanel = new JPanel(); + bottomPanel.setBackground(Color.WHITE); // 设置底部面板的背景色为白色 + bottomPanel.setLayout(new BorderLayout()); // 设置底部面板的布局管理器为边界布局 + +// 创建目的地区面板,用于显示当前位置信息 purposePanel = new JPanel(); - purposePanel.setLayout(new FlowLayout(FlowLayout.LEFT)); - purposePanel.setBackground(Color.WHITE); - purposeLabel = new JLabel("当前位置是:超市首页"); - purposePanel.add(purposeLabel); - + purposePanel.setLayout(new FlowLayout(FlowLayout.LEFT)); // 设置目的地区面板的布局管理器为左对齐的流式布局 + purposePanel.setBackground(Color.WHITE); // 设置目的地区面板的背景色为白色 + purposeLabel = new JLabel("当前位置是:超市首页"); // 创建标签显示当前位置信息 + purposePanel.add(purposeLabel); // 将位置信息标签添加到目的地区面板 + + + // 创建一个新的 JPanel 实例用于显示时间 timePanel=new JPanel(); +// 设置 timePanel 的布局为 FlowLayout,并指定元素靠右对齐 timePanel.setLayout(new FlowLayout(FlowLayout.TRAILING)); +// 设置 timePanel 的背景颜色为白色 timePanel.setBackground(Color.WHITE); +// 创建一个新的 JLabel 实例,显示当前日期和时间,使用 DateUtil 工具类进行格式化 timeLabel = new JLabel(DateUtil.dateToString(new Date(),null)); +// 将 timeLabel 添加到 timePanel 中 timePanel.add(timeLabel); - +// 将 purposePanel 添加到 bottomPanel 的西边(West) bottomPanel.add(purposePanel,"West"); +// 将 timePanel 添加到 bottomPanel 的东边(East) bottomPanel.add(timePanel,"East"); +// 获取当前窗口的内容窗格 Container container = getContentPane(); +// 将 containerPanel 添加到内容窗格的中心(Center) container.add(containerPanel,"Center"); +// 将 bottomPanel 添加到内容窗格的南边(South) container.add(bottomPanel,"South"); + } @Override + // 定义当触发动作事件时的处理方法 public void actionPerformed(ActionEvent e) { + // 获取触发事件的源对象 Object source = e.getSource(); + // 更新时间标签以显示当前时间 timeLabel.setText(DateUtil.dateToString(new Date(),null)); + // 检查事件源是否为皮肤菜单项,如果是则进行换肤操作 if(source==skinMenuItem)/*换肤*/{ + // 打印换肤操作信息到控制台 System.out.println("切换皮肤"); + // 创建一个新的随机数生成器实例 Random random=new Random(); + // 生成一个0到9之间的随机数作为皮肤编号 skin=random.nextInt(10); + // 销毁当前窗口 this.dispose(); + // 创建并显示一个新的主视图窗口,传入用户信息、皮肤编号和图标皮肤 new MainView(user,skin,iconSkin); + } - + } @Override/*左侧菜单栏点击事件*/ + // 定义当鼠标点击事件发生时的处理方法 public void mouseClicked(MouseEvent e) { + // 获取触发事件的源对象 Object source = e.getSource(); + // 检查事件源是否为首页菜单标签,如果是则显示对应的面板 if(source==homeMenuLabel) { - rightPanelLayout.show(rightPanel,"0"); - location=0; - }else if(source==userMenuLabel) { - if(sSuper==0) - rightPanelLayout.show(rightPanel,"1"); - else{ - rightPanelLayout.show(rightPanel,"7"); + rightPanelLayout.show(rightPanel,"0"); // 显示首页面板 + location=0; // 更新当前位置索引为0 + } + // 检查事件源是否为用户菜单标签,根据权限显示不同面板 + else if(source==userMenuLabel) { + if(sSuper==0) // 如果权限为0 + rightPanelLayout.show(rightPanel,"1"); // 显示用户面板1 + else{ // 如果权限不为0 + rightPanelLayout.show(rightPanel,"7"); // 显示用户面板7 } - location=1; + location=1; // 更新当前位置索引为1 } + // 检查事件源是否为入库菜单标签,根据权限显示不同面板 else if(source==inMenuLabel) { - if(sSuper==2) - rightPanelLayout.show(rightPanel,"7"); - else{ - rightPanelLayout.show(rightPanel,"2"); - + if(sSuper==2) // 如果权限为2 + rightPanelLayout.show(rightPanel,"7"); // 显示面板7 + else{ // 如果权限不为2 + rightPanelLayout.show(rightPanel,"2"); // 显示入库面板 } - location=2; + location=2; // 更新当前位置索引为2 } + // 检查事件源是否为出库菜单标签,如果是则显示对应的面板 else if(source==outMenuLabel) { - rightPanelLayout.show(rightPanel,"3"); - location=3; + rightPanelLayout.show(rightPanel,"3"); // 显示出库面板 + location=3; // 更新当前位置索引为3 } + // 检查事件源是否为库存菜单标签,如果是则显示对应的面板 else if(source==storageMenuLabel) { - rightPanelLayout.show(rightPanel,"4"); - location=4; + rightPanelLayout.show(rightPanel,"4"); // 显示库存面板 + location=4; // 更新当前位置索引为4 } + // 检查事件源是否为供应商菜单标签,如果是则显示对应的面板 else if(source==supplierMenuLabel) { - rightPanelLayout.show(rightPanel,"5"); - - location=5; - + rightPanelLayout.show(rightPanel,"5"); // 显示供应商面板 + location=5; // 更新当前位置索引为5 } - else if(source==catalogMenuLabel) { - rightPanelLayout.show(rightPanel,"6"); - location=6; - - }else if(source==remindMenuLabel) { - if(sSuper==2) - rightPanelLayout.show(rightPanel,"7"); - else{ - rightPanelLayout.show(rightPanel,"8"); + // 检查事件源是否为目录菜单标签,如果是则显示对应的面板 + else if(source==catalogMenuLabel) { + rightPanelLayout.show(rightPanel,"6"); // 显示目录面板 + location=6; // 更新当前位置索引为6 + } + // 检查事件源是否为提醒菜单标签,根据权限显示不同面板 + else if(source==remindMenuLabel) { + if(sSuper==2) // 如果权限为2 + rightPanelLayout.show(rightPanel,"7"); // 显示面板7 + else{ // 如果权限不为2 + rightPanelLayout.show(rightPanel,"8"); // 显示提醒面板 } - location=7; - }else if(source==userMenuLabel1){ - - UserInfDialog userInfDialog = new UserInfDialog(this,user); - userInfDialog.setVisible(true); - location=8; + location=7; // 更新当前位置索引为7 } - + // 检查事件源是否为用户信息菜单标签1,如果是则显示用户信息对话框 + else if(source==userMenuLabel1){ + UserInfDialog userInfDialog = new UserInfDialog(this,user); // 创建用户信息对话框 + userInfDialog.setVisible(true); // 显示用户信息对话框 + location=8; // 更新当前位置索引为8 + } + + // 调用refreshRemove方法,可能用于刷新界面或执行其他操作 refreshRemove(); } + //获取当前位置 - public void refreshRemove(){ - - purposePanel.removeAll(); - if(location==0){ - purposeLabel = new JLabel("当前位置是:"+homeMenuLabel.getText()); - - }else if(location==1){ - purposeLabel = new JLabel("当前位置是:"+userMenuLabel.getText()); - - }else if(location==2){ - purposeLabel = new JLabel("当前位置是:"+inMenuLabel.getText()); - - }else if(location==3){ - purposeLabel = new JLabel("当前位置是:"+outMenuLabel.getText()); - - }else if(location==4){ - purposeLabel = new JLabel("当前位置是:"+storageMenuLabel.getText()); - - }else if(location==5){ - purposeLabel = new JLabel("当前位置是:"+supplierMenuLabel.getText()); - - }else{ - purposeLabel = new JLabel("当前位置是:"+catalogMenuLabel.getText()); - } - - purposePanel.add(purposeLabel); - + // 定义一个方法用于刷新和移除面板内容 + public void refreshRemove(){ + + // 从目的面板中移除所有组件 + purposePanel.removeAll(); + + // 根据当前的位置索引设置不同的目的标签文本 + if(location==0){ + purposeLabel = new JLabel("当前位置是:"+homeMenuLabel.getText()); // 设置当前位置为首页 + } + else if(location==1){ + purposeLabel = new JLabel("当前位置是:"+userMenuLabel.getText()); // 设置当前位置为用户菜单 + } + else if(location==2){ + purposeLabel = new JLabel("当前位置是:"+inMenuLabel.getText()); // 设置当前位置为入库菜单 + } + else if(location==3){ + purposeLabel = new JLabel("当前位置是:"+outMenuLabel.getText()); // 设置当前位置为出库菜单 + } + else if(location==4){ + purposeLabel = new JLabel("当前位置是:"+storageMenuLabel.getText()); // 设置当前位置为库存菜单 } + else if(location==5){ + purposeLabel = new JLabel("当前位置是:"+supplierMenuLabel.getText()); // 设置当前位置为供应商菜单 + } + else{ + purposeLabel = new JLabel("当前位置是:"+catalogMenuLabel.getText()); // 设置当前位置为目录菜单 + } + + // 将新的目的标签添加到目的面板 + purposePanel.add(purposeLabel); + + // 可能需要调用重新绘制界面或更新界面显示的方法,但这里没有显示出来 + } + @Override public void mousePressed(MouseEvent e) { @@ -464,71 +509,120 @@ public class MainView extends BaseView implements ActionListener, MouseListener, } @Override/*鼠标焦点时*/ + // 重写鼠标进入组件事件的处理方法 public void mouseEntered(MouseEvent e) { + // 获取触发事件的源对象 Object source = e.getSource(); + + // 如果事件源是首页菜单标签,则改变前景色和图标 if(source==homeMenuLabel) { - homeMenuLabel.setForeground(new Color(18, 150, 219)); - homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home2.png")); + homeMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home2.png")); // 设置鼠标进入时的图标 } + + // 如果事件源是用户菜单标签,则改变前景色和图标 if(source==userMenuLabel) { - userMenuLabel.setForeground(new Color(18, 150, 219)); - userMenuLabel.setIcon(new ImageIcon("static\\icon\\user2.png")); - }else if(source==inMenuLabel) { - inMenuLabel.setForeground(new Color(18, 150, 219)); - inMenuLabel.setIcon(new ImageIcon("static\\icon\\in2.png")); - }else if(source==outMenuLabel) { - outMenuLabel.setForeground(new Color(18, 150, 219)); - outMenuLabel.setIcon(new ImageIcon("static\\icon\\out2.png")); - }else if(source==storageMenuLabel) { - storageMenuLabel.setForeground(new Color(18, 150, 219)); - storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage2.png")); - }else if(source==supplierMenuLabel) { - supplierMenuLabel.setForeground(new Color(18, 150, 219)); - supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier2.png")); - }else if(source==catalogMenuLabel) { - catalogMenuLabel.setForeground(new Color(18, 150, 219)); - catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog2.png")); - } + userMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + userMenuLabel.setIcon(new ImageIcon("static\\icon\\user2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是入库菜单标签,则改变前景色和图标 + else if(source==inMenuLabel) { + inMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + inMenuLabel.setIcon(new ImageIcon("static\\icon\\in2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是出库菜单标签,则改变前景色和图标 + else if(source==outMenuLabel) { + outMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + outMenuLabel.setIcon(new ImageIcon("static\\icon\\out2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是库存菜单标签,则改变前景色和图标 + else if(source==storageMenuLabel) { + storageMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是供应商菜单标签,则改变前景色和图标 + else if(source==supplierMenuLabel) { + supplierMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是目录菜单标签,则改变前景色和图标 + else if(source==catalogMenuLabel) { + catalogMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog2.png")); // 设置鼠标进入时的图标 + } + + // 如果事件源是用户菜单标签1,则改变前景色 else if(source==userMenuLabel1) { - userMenuLabel1.setForeground(new Color(18, 150, 219)); - + userMenuLabel1.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 + // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标进入图标 + } + // 方法结束,没有设置图标的变化,只是改变了前景色 } -} + @Override + // 重写鼠标离开组件事件的处理方法 public void mouseExited(MouseEvent e) { - Object source = e.getSource(); + // 获取触发事件的源对象 + Object source = e.getSource(); + + // 如果事件源是首页菜单标签,则恢复前景色和图标 if(source==homeMenuLabel) { - homeMenuLabel.setForeground(Color.white); - homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home1.png")); + homeMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home1.png")); // 设置鼠标离开时的默认图标 } + + // 如果事件源是用户菜单标签,则恢复前景色和图标 else if(source==userMenuLabel) { - userMenuLabel.setForeground(Color.white); - userMenuLabel.setIcon(new ImageIcon("static\\icon\\user1.png")); - }else if(source==inMenuLabel) { - inMenuLabel.setForeground(Color.white); - inMenuLabel.setIcon(new ImageIcon("static\\icon\\in1.png")); - }else if(source==outMenuLabel) { - outMenuLabel.setForeground(Color.white); - outMenuLabel.setIcon(new ImageIcon("static\\icon\\out1.png")); - }else if(source==storageMenuLabel) { - storageMenuLabel.setForeground(Color.white); - storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage1.png")); - }else if(source==supplierMenuLabel) { - supplierMenuLabel.setForeground(Color.white); - supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier1.png")); - }else if(source==catalogMenuLabel) { - catalogMenuLabel.setForeground(Color.white); - catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog1.png")); - } + userMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + userMenuLabel.setIcon(new ImageIcon("static\\icon\\user1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是入库菜单标签,则恢复前景色和图标 + else if(source==inMenuLabel) { + inMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + inMenuLabel.setIcon(new ImageIcon("static\\icon\\in1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是出库菜单标签,则恢复前景色和图标 + else if(source==outMenuLabel) { + outMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + outMenuLabel.setIcon(new ImageIcon("static\\icon\\out1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是库存菜单标签,则恢复前景色和图标 + else if(source==storageMenuLabel) { + storageMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是供应商菜单标签,则恢复前景色和图标 + else if(source==supplierMenuLabel) { + supplierMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源是目录菜单标签,则恢复前景色和图标 + else if(source==catalogMenuLabel) { + catalogMenuLabel.setForeground(Color.white); // 恢复前景色为白色 + catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog1.png")); // 设置鼠标离开时的默认图标 + } + + // 如果事件源不是上述任何一个标签,则默认处理用户菜单标签1 else { - userMenuLabel1.setForeground(Color.white); - - } - + userMenuLabel1.setForeground(Color.white); // 恢复前景色为白色 + // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标离开图标 + } + // 方法结束,所有菜单标签的前景色和图标已根据鼠标离开事件进行了相应的恢复 } + @Override protected void initView() { // TODO Auto-generated method stub @@ -542,23 +636,33 @@ public class MainView extends BaseView implements ActionListener, MouseListener, } @Override + // 重写窗口关闭事件的处理方法 public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub - Object source = e.getSource(); - if(source==this) {/*关闭窗口时检查进货系统和出货系统是否还有记录*/ - this.vP =InView.getVector(); - System.out.println("v的size="+vP.size()); - bufferImpl = new BufferImpl(); - if(vP.size()!=0||bufferImpl.allOutBuffer().size()!=0) {/*如果购物车还有记录*/ - CloseDialog closeDialog = new CloseDialog(this,vP); - closeDialog.setVisible(true); - }else - System.exit(0); - + // 获取触发事件的源对象 + Object source = e.getSource(); + // 如果事件源是当前窗口对象,执行以下操作 + if(source==this) { + // 关闭窗口时检查进货系统和出货系统是否还有记录 + this.vP =InView.getVector(); // 获取进货系统的记录向量 + System.out.println("v的size="+vP.size()); // 打印进货系统记录的数量 + bufferImpl = new BufferImpl(); // 创建缓冲区实现对象 + + // 如果进货系统的购物车还有记录或者出货系统的缓冲区还有记录 + if(vP.size()!=0||bufferImpl.allOutBuffer().size()!=0) { + // 如果购物车还有记录,则显示关闭确认对话框 + CloseDialog closeDialog = new CloseDialog(this,vP); // 创建关闭对话框 + closeDialog.setVisible(true); // 显示关闭对话框 + } else { + // 如果没有记录,则直接退出程序 + System.exit(0); // 安全退出程序 + } } + // 方法结束,窗口关闭事件已处理 } + @Override public void windowClosed(WindowEvent e) { // TODO Auto-generated method stub diff --git a/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java b/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java index 5eef1f0..6972c99 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java @@ -1,194 +1,200 @@ -package com.lingnan.supermarket.view; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.ArrayList; - -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTextField; - -import com.lingnan.supermarket.dao.impl.prodCatalogImpl; -import com.lingnan.supermarket.dialog.UserDialog; -import com.lingnan.supermarket.dto.ProdCatalog; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.table.ProdCatalogTM; -import com.lingnan.supermarket.table.StorageTableModel; -import com.lingnan.supermarket.table.UserTableModel; -import com.lingnan.supermarket.utils.FontUtil; - -public class ProdCatalogView extends JPanel { +package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 + +import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 +import java.awt.Color; // 导入Color类,用于定义颜色 +import java.awt.FlowLayout; // 导入FlowLayout布局管理器类 +import java.awt.event.ActionEvent; // 导入ActionEvent类,用于处理按钮点击等事件 +import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现事件监听 +import java.awt.event.ItemEvent; // 导入ItemEvent类,用于处理下拉框选择事件 +import java.awt.event.ItemListener; // 导入ItemListener接口,用于实现下拉框事件监听 +import java.util.ArrayList; // 导入ArrayList类,用于存储动态数组 + +import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 +import javax.swing.JButton; // 导入JButton类,用于创建按钮 +import javax.swing.JComboBox; // 导入JComboBox类,用于创建下拉框 +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 +import javax.swing.JLabel; // 导入JLabel类,用于创建标签 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建滚动面板 +import javax.swing.JTable; // 导入JTable类,用于创建表格 +import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 + +import com.lingnan.supermarket.dao.impl.prodCatalogImpl; // 导入prodCatalogImpl类,用于操作商品目录数据 +import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类,用于显示用户对话框 +import com.lingnan.supermarket.dto.ProdCatalog; // 导入ProdCatalog类,用于表示商品目录数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入Production类,用于表示产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入User类,用于表示用户数据传输对象 +import com.lingnan.supermarket.table.ProdCatalogTM; // 导入ProdCatalogTM类,用于表示商品目录表格模型 +import com.lingnan.supermarket.table.StorageTableModel; // 导入StorageTableModel类,用于表示库存表格模型 +import com.lingnan.supermarket.table.UserTableModel; // 导入UserTableModel类,用于表示用户表格模型 +import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,用于字体工具类 + +public class ProdCatalogView extends JPanel { // 定义ProdCatalogView类,继承自JPanel // 上面 - private JPanel toolBarPanel; + private JPanel toolBarPanel; // 工具栏面板 - private JPanel searchPanel; - private JLabel logLabel, locationLabel; - private JTextField nameSearchTF; - private JButton searchBtn; + private JPanel searchPanel; // 搜索面板 + private JLabel logLabel, locationLabel; // 标签,用于显示文本 + private JTextField nameSearchTF; // 文本框,用于输入搜索内容 + private JButton searchBtn; // 搜索按钮 - private JPanel opePanel; - private JButton addBtn, updateBtn, deleteBtn; + private JPanel opePanel; // 操作面板 + private JButton addBtn, updateBtn, deleteBtn; // 添加、更新、删除按钮 - private String catalog = "0"; - private JComboBox combo; - private String log[]=null; - private ArrayListalog=null; - private ProdCatalogTM prodCatalogTM; - private ProdCatalog pc; - private prodCatalogImpl pci; + private String catalog = "0"; // 商品目录ID + private JComboBox combo; // 下拉框,用于选择商品目录 + private String log[]=null; // 商品目录名称数组 + private ArrayListalog=null; // 商品目录名称列表 + private ProdCatalogTM prodCatalogTM; // 商品目录表格模型 + private ProdCatalog pc; // 商品目录数据传输对象 + private prodCatalogImpl pci; // 商品目录数据操作实现类 // 中间 - private JScrollPane tableScrollPane; - private JTable prodCatalogTable; + private JScrollPane tableScrollPane; // 表格滚动面板 + private JTable prodCatalogTable; // 商品目录表格 // 下面 - private JPanel bottomPanel; - private JLabel countInfoLabel; + private JPanel bottomPanel; // 底部面板 + private JLabel countInfoLabel; // 标签,用于显示记录总数 - private JFrame jFrame; + private JFrame jFrame; // 窗口框架 + // 构造方法,接收一个JFrame参数 public ProdCatalogView(JFrame jFrame) { - this.setLayout(new BorderLayout()); - initView(); - this.jFrame = jFrame; + this.setLayout(new BorderLayout()); // 设置面板布局为BorderLayout + initView(); // 初始化视图 + this.jFrame = jFrame; // 保存传入的JFrame实例 } - - private void initView() { - toolBarPanel = new JPanel(new BorderLayout()); - - searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - locationLabel = new JLabel("商品目录"); - locationLabel.setFont(new FontUtil().userFont); - locationLabel.setForeground(new Color(18, 150, 219)); - logLabel = new JLabel("分类"); - nameSearchTF = new JTextField(10); - - searchBtn = new JButton("搜索", new ImageIcon("static\\icon\\search.png")); - -// opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); -// addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); -// updateBtn = new JButton(new ImageIcon("static\\icon\\update.png")); -// deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); - -// addBtn.addActionListener(this); -// updateBtn.addActionListener(this); -// deleteBtn.addActionListener(this); - -// opePanel.add(addBtn); -// opePanel.add(updateBtn); -// opePanel.add(deleteBtn); - - pci=new prodCatalogImpl(); - this.alog=pci.findNameProdCatalog(); - this.log=new String[alog.size()]; + private void initView() { + // 初始化视图方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel = new JLabel("商品目录"); // 创建商品目录标签并设置文本 + locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 + logLabel = new JLabel("分类"); // 创建分类标签并设置文本 + nameSearchTF = new JTextField(10); // 创建文本框并设置大小 + + searchBtn = new JButton("搜索", new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标和文本 + + // 创建操作面板和按钮,并设置图标(注释部分,未使用) + // opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + // addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); + // updateBtn = new JButton(new ImageIcon("static\\icon\\update.png")); + // deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); + + // 为按钮添加事件监听(注释部分,未使用) + // addBtn.addActionListener(this); + // updateBtn.addActionListener(this); + // deleteBtn.addActionListener(this); + + // 将按钮添加到操作面板(注释部分,未使用) + // opePanel.add(addBtn); + // opePanel.add(updateBtn); + // opePanel.add(deleteBtn); + + pci=new prodCatalogImpl(); // 创建商品目录数据操作实现类实例 + this.alog=pci.findNameProdCatalog(); // 查找所有商品目录名称 + this.log=new String[alog.size()]; // 创建字符串数组以存储商品目录名称 for(int i=0;i(log); - combo.addItemListener(new MyItemListener()); + combo = new JComboBox(log); // 创建下拉框并设置选项 + combo.addItemListener(new MyItemListener()); // 为下拉框添加事件监听器 - searchPanel.add(locationLabel); - searchPanel.add(logLabel); - searchPanel.add(combo); + searchPanel.add(locationLabel); // 将商品目录标签添加到搜索面板 + searchPanel.add(logLabel); // 将分类标签添加到搜索面板 + searchPanel.add(combo); // 将下拉框添加到搜索面板 /* - * searchPanel.add(nameSearchTF); searchPanel.add(searchBtn); + * searchPanel.add(nameSearchTF); // 将文本框添加到搜索面板(注释部分,未使用) + * searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板(注释部分,未使用) */ - toolBarPanel.add(searchPanel, "West"); -// toolBarPanel.add(opePanel, "East"); + toolBarPanel.add(searchPanel, "West"); // 将搜索面板添加到工具栏面板的西边 + // toolBarPanel.add(opePanel, "East"); // 将操作面板添加到工具栏面板的东边(注释部分,未使用) // 中间表格 - prodCatalogTM = new ProdCatalogTM(); - prodCatalogTM.all(); - prodCatalogTable = new JTable(prodCatalogTM); - prodCatalogTable.setFont(FontUtil.tableFont); - prodCatalogTable.setRowHeight(50); - tableScrollPane = new JScrollPane(prodCatalogTable); + prodCatalogTM = new ProdCatalogTM(); // 创建商品目录表格模型 + prodCatalogTM.all(); // 加载所有商品目录数据 + prodCatalogTable = new JTable(prodCatalogTM); // 创建表格并设置模型 + prodCatalogTable.setFont(FontUtil.tableFont); // 设置表格字体 + prodCatalogTable.setRowHeight(50); // 设置表格行高 + tableScrollPane = new JScrollPane(prodCatalogTable); // 创建滚动面板并添加表格 // 下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - countInfoLabel = new JLabel("总共" + prodCatalogTable.getRowCount() + "条"); - bottomPanel.add(countInfoLabel); + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共" + prodCatalogTable.getRowCount() + "条"); // 创建记录数标签并设置文本 + bottomPanel.add(countInfoLabel); // 将记录数标签添加到底部面板 - this.add(toolBarPanel, "North"); - this.add(tableScrollPane, "Center");/* 将表格放到中间 */ - this.add(bottomPanel, "South"); + this.add(toolBarPanel, "North"); // 将工具栏面板添加到面板的北边 + this.add(tableScrollPane, "Center"); /* 将表格放到中间 */ // 将表格滚动面板添加到面板的中间 + this.add(bottomPanel, "South"); // 将底部面板添加到面板的南边 + + setVisible(true); // 设置面板为可见 - setVisible(true); } + // @Override // public void actionPerformed(ActionEvent e) { // Object source = e.getSource(); -// if (addBtn == source) { -// UserDialog userDialog = new UserDialog(jFrame); -// userDialog.setVisible(true); -// } else if (updateBtn == source) { -// -// } else if (deleteBtn == source) { -// +// if (addBtn == source) { // 如果事件源是添加按钮 +// UserDialog userDialog = new UserDialog(jFrame); // 创建用户对话框 +// userDialog.setVisible(true); // 设置用户对话框为可见 +// } else if (updateBtn == source) { // 如果事件源是更新按钮 +// // 更新按钮的事件处理代码(未实现) +// } else if (deleteBtn == source) { // 如果事件源是删除按钮 +// // 删除按钮的事件处理代码(未实现) + // } + // } - public class MyItemListener implements ItemListener { + public class MyItemListener implements ItemListener { // 创建一个内部类实现ItemListener接口 @Override - public void itemStateChanged(ItemEvent e) { - JComboBox cb = (JComboBox) e.getSource(); - String catalog1 = (String) cb.getSelectedItem(); - pci =new prodCatalogImpl(); - for(int i=0;i商品库存"); - locationLabel.setFont(new FontUtil().userFont); - locationLabel.setForeground(new Color(18, 150, 219)); - nameLabel = new JLabel("商品名"); - nameSearchTF = new JTextField(10); - - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); - - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); - updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); - backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); - historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); - backBtn.setVisible(false); - - addBtn.addActionListener(this); - updateBtn.addActionListener(this); - deleteBtn.addActionListener(this); - searchBtn.addActionListener(this); - backBtn.addActionListener(this); - historyBtn.addActionListener(this); - - opePanel.add(addBtn); - opePanel.add(updateBtn); - opePanel.add(deleteBtn); - opePanel.add(backBtn); - opePanel.add(historyBtn); - - searchPanel.add(locationLabel); - searchPanel.add(nameLabel); - searchPanel.add(nameSearchTF); - searchPanel.add(searchBtn); - - - toolBarPanel.add(searchPanel,"West"); - toolBarPanel.add(opePanel,"East"); - - + + private void initView() { // 初始化视图的方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel=new JLabel("当前位置>商品库存"); // 创建位置标签并设置文本 + locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 + nameLabel = new JLabel("商品名"); // 创建商品名标签并设置文本 + nameSearchTF = new JTextField(10); // 创建文本框并设置大小 + + + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 + backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); // 创建返回按钮并设置图标 + historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); // 创建历史按钮并设置图标 + backBtn.setVisible(false); // 设置返回按钮为不可见 + + addBtn.addActionListener(this); // 为添加按钮添加事件监听器 + updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 + deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 + searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 + backBtn.addActionListener(this); // 为返回按钮添加事件监听器 + historyBtn.addActionListener(this); // 为历史按钮添加事件监听器 + + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(updateBtn); // 将更新按钮添加到操作面板 + opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 + opePanel.add(backBtn); // 将返回按钮添加到操作面板 + opePanel.add(historyBtn); // 将历史按钮添加到操作面板 + + searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 + searchPanel.add(nameLabel); // 将商品名标签添加到搜索面板 + searchPanel.add(nameSearchTF); // 将商品名文本框添加到搜索面板 + searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 + + toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 + toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 + //中间表格 - storageTableModel = new StorageTableModel(); - storageTableModel.all(); - storageTable = new JTable(storageTableModel); - storageTable.setFont(FontUtil.tableFont); - storageTable.setRowHeight(50); - - tableScrollPane = new JScrollPane(storageTable); - + storageTableModel = new StorageTableModel(); // 创建表格模型实例 + storageTableModel.all(); // 调用表格模型的方法以加载所有数据 + storageTable = new JTable(storageTableModel); // 创建表格并设置模型 + storageTable.setFont(FontUtil.tableFont); // 设置表格字体 + storageTable.setRowHeight(50); // 设置表格行高 + + tableScrollPane = new JScrollPane(storageTable); // 创建滚动面板并添加表格 + //下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - countInfoLabel = new JLabel("总共"+storageTableModel.getRowCount()+"条"); - bottomPanel.add(countInfoLabel); - - - this.add(toolBarPanel,"North"); - this.add(tableScrollPane,"Center");/*将表格放到中间*/ - this.add(bottomPanel,"South"); - - setVisible(true); + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共"+storageTableModel.getRowCount()+"条"); // 创建记录总数标签并设置文本 + bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 + + this.add(toolBarPanel,"North"); // 将工具栏面板添加到面板的北边 + this.add(tableScrollPane,"Center"); /*将表格放到中间*/ // 将表格滚动面板添加到面板的中间 + this.add(bottomPanel,"South"); // 将底部面板添加到面板的南边 + + setVisible(true); // 设置面板为可见 + } + @Override public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if(addBtn==source) { + Object source = e.getSource(); // 获取事件源 + if(addBtn==source) { // 如果事件源是添加按钮 //添加数据的对话框 - ProductionDialog productionDialog = new ProductionDialog(jFrame); - productionDialog.setVisible(true); - refreshProduction(); - }else if(updateBtn==source) { - refreshProduction(); - }else if(historyBtn==source) { - storageRecord(); - }else if(backBtn==source) { - refreshProduction(); + ProductionDialog productionDialog = new ProductionDialog(jFrame); // 创建添加数据的对话框 + productionDialog.setVisible(true); // 设置对话框为可见 + refreshProduction(); // 刷新生产数据 + }else if(updateBtn==source) { // 如果事件源是更新按钮 + refreshProduction(); // 刷新生产数据 + }else if(historyBtn==source) { // 如果事件源是历史按钮 + storageRecord(); // 处理库存记录 + }else if(backBtn==source) { // 如果事件源是返回按钮 + refreshProduction(); // 刷新生产数据 } - - else if(deleteBtn==source) { + + else if(deleteBtn==source) { // 如果事件源是删除按钮 //获取选中记录,删除 - int[] rowIndexs = storageTable.getSelectedRows(); - if(rowIndexs.length==0) { - JOptionPane.showMessageDialog(this,"请至少选中一条"); - return; + int[] rowIndexs = storageTable.getSelectedRows(); // 获取表格中所有选中行的索引 + if(rowIndexs.length==0) { // 如果没有选中任何行 + JOptionPane.showMessageDialog(this,"请至少选中一条"); // 显示提示信息 + return; // 结束方法执行 } - int select=JOptionPane.showConfirmDialog(this,"是否删除选中的"+rowIndexs.length+"条记录","提示",JOptionPane.YES_NO_OPTION); - if(select==JOptionPane.YES_OPTION){ - - for(int i=0;i供应商"); - locationLabel.setFont(new FontUtil().userFont); - locationLabel.setForeground(new Color(18, 150, 219)); - nameLabel = new JLabel("公司名称"); - nameSearchTF = new JTextField(10); - - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); - - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); - updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); - - addBtn.addActionListener(this); - updateBtn.addActionListener(this); - deleteBtn.addActionListener(this); - searchBtn.addActionListener(this); - - opePanel.add(addBtn); - opePanel.add(updateBtn); - opePanel.add(deleteBtn); - - searchPanel.add(locationLabel); - searchPanel.add(nameLabel); - searchPanel.add(nameSearchTF); - searchPanel.add(searchBtn); - - - toolBarPanel.add(searchPanel,"West"); - toolBarPanel.add(opePanel,"East"); - - + + private void initView() { // 初始化视图的私有方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel=new JLabel("当前位置>供应商"); // 创建标签并设置文本为当前位置信息 + locationLabel.setFont(new FontUtil().userFont); // 设置标签的字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签的前景色(文字颜色) + nameLabel = new JLabel("公司名称"); // 创建标签并设置文本为公司名称 + nameSearchTF = new JTextField(10); // 创建文本框并设置大小为10个字符宽度 + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮 + + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 + + addBtn.addActionListener(this); // 为添加按钮添加事件监听器 + updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 + deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 + searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 + + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(updateBtn); // 将更新按钮添加到操作面板 + opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 + + searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 + searchPanel.add(nameLabel); // 将公司名称标签添加到搜索面板 + searchPanel.add(nameSearchTF); // 将公司名称文本框添加到搜索面板 + searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 + + + toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 + toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 + + //中间表格 - SupplierTableModel supplierTableModel = new SupplierTableModel(); - supplierTableModel.all(); - supplierTable = new JTable(supplierTableModel); - supplierTable.setFont(FontUtil.tableFont); - supplierTable.setRowHeight(50); - - tableScrollPane = new JScrollPane(supplierTable);/*滑动条*/ - + supplierTableModel = new SupplierTableModel(); // 创建供应商表格模型对象 + supplierTableModel.all(); // 调用表格模型的方法以加载所有数据 + supplierTable = new JTable(supplierTableModel); // 创建表格并设置模型 + supplierTable.setFont(FontUtil.tableFont); // 设置表格字体 + supplierTable.setRowHeight(50); // 设置表格行高 + + tableScrollPane = new JScrollPane(supplierTable); // 创建带滚动条的容器并添加表格 + //下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); - bottomPanel.add(countInfoLabel); - - - this.add(toolBarPanel,"North"); - this.add(tableScrollPane,"Center");/*将表格放到中间*/ - this.add(bottomPanel,"South"); - - setVisible(true); + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建标签并设置显示记录总数的文本 + bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 + + this.add(toolBarPanel,"North"); // 将工具栏面板添加到主面板的北边 + this.add(tableScrollPane,"Center"); // 将带滚动条的表格容器添加到主面板的中间 + this.add(bottomPanel,"South"); // 将底部面板添加到主面板的南边 + + setVisible(true); // 设置主面板可见(通常不需要,因为主面板会在添加到窗口时自动设置为可见) } @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if(addBtn==source) { - SupplierInfDialog supplierInfDialog = new SupplierInfDialog(jFrame, null); - supplierInfDialog.setVisible(true); - refreshSupplier(); - }else if(updateBtn==source) { - refreshSupplier(); - }else if(deleteBtn==source) { + public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 + Object source = e.getSource(); // 获取事件源 + if(addBtn==source) { // 如果事件源是添加按钮 + SupplierInfDialog supplierInfDialog = new SupplierInfDialog(jFrame, null); // 创建供应商信息对话框 + supplierInfDialog.setVisible(true); // 设置对话框可见 + refreshSupplier(); // 刷新供应商信息 + }else if(updateBtn==source) { // 如果事件源是更新按钮 + refreshSupplier(); // 刷新供应商信息 + }else if(deleteBtn==source) { // 如果事件源是删除按钮 //获取选中记录 - int rowIndex = supplierTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条"); - return; - } - int id = (Integer)supplierTable.getValueAt(rowIndex,0); - int select=JOptionPane.showConfirmDialog(this,"是否删除id="+id,"提示",JOptionPane.YES_NO_OPTION); - if(select==JOptionPane.YES_OPTION){ - if(supplierInfService.deleteSupplierInf(id)==1) { - JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); - refreshSupplier(); - }else { - JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); + int rowIndex = supplierTable.getSelectedRow(); // 获取表格中选中的行索引 + if(rowIndex==-1) { // 如果没有行被选中 + JOptionPane.showMessageDialog(this,"请选中一条"); // 显示提示信息 + return; // 结束方法执行 } + int id = (Integer)supplierTable.getValueAt(rowIndex,0); // 获取选中行的ID + int select=JOptionPane.showConfirmDialog(this,"是否删除id="+id,"提示",JOptionPane.YES_NO_OPTION); // 显示确认删除的对话框并获取用户的选择 + if(select==JOptionPane.YES_OPTION){ // 如果用户在确认对话框中选择“是” + if(supplierInfService.deleteSupplierInf(id)==1) { // 尝试删除供应商信息,如果成功返回1 + JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示删除成功的消息 + refreshSupplier(); // 刷新供应商信息 + }else { + JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); // 显示删除失败的消息 + } } - }else{ - System.out.println("搜索"); - refreshFindRname(); + }else if(searchBtn==source){ // 如果事件源是搜索按钮 + System.out.println("搜索"); // 打印搜索操作信息到控制台 + refreshFindRname(); // 调用方法刷新搜索结果 } } + // 根据名称刷新供应商信息的方法 public void refreshFindRname() { - String name = nameSearchTF.getText(); - SupplierInf supplierInf =new SupplierInf(); - supplierInf.setName(name); - - - supplierTableModel = new SupplierTableModel(); - supplierTableModel.Byname(supplierInf); - - supplierTable.setModel(supplierTableModel); - - refreshCount(); - + String name = nameSearchTF.getText(); // 获取搜索文本框中的文本 + SupplierInf supplierInf = new SupplierInf(); // 创建供应商信息对象 + supplierInf.setName(name); // 设置供应商名称为搜索文本 + + + supplierTableModel = new SupplierTableModel(); // 创建新的供应商表格模型 + supplierTableModel.Byname(supplierInf); // 调用表格模型的方法按名称查询供应商信息 + + supplierTable.setModel(supplierTableModel); // 更新表格模型以显示查询结果 + + refreshCount(); // 刷新记录总数 } + // 刷新供应商信息的方法 public void refreshSupplier() { - supplierTableModel = new SupplierTableModel(); - supplierTableModel.all(); - supplierTable.setModel(supplierTableModel); - - refreshCount(); + supplierTableModel = new SupplierTableModel(); // 创建新的供应商表格模型 + supplierTableModel.all(); // 加载所有供应商信息 + supplierTable.setModel(supplierTableModel); // 更新表格模型以显示所有供应商信息 + + refreshCount(); // 刷新记录总数 } + // 刷新记录总数的方法 public void refreshCount(){ - bottomPanel.removeAll(); - countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); - bottomPanel.add(countInfoLabel); + bottomPanel.removeAll(); // 清除底部面板上的所有组件 + countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建新的标签显示记录总数 + bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 } - -} \ No newline at end of file + +} diff --git a/Supermarket/src/com/lingnan/supermarket/view/UserView.java b/Supermarket/src/com/lingnan/supermarket/view/UserView.java index d8eec3c..6d460d0 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/UserView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/UserView.java @@ -23,231 +23,163 @@ import com.lingnan.supermarket.dto.User; import com.lingnan.supermarket.table.UserTableModel; import com.lingnan.supermarket.utils.FontUtil; -// UserView类继承自JPanel并实现ActionListener接口,用于构建用户管理界面相关的视图,处理用户交互动作 -public class UserView extends JPanel implements ActionListener { - - // 用于存放整个顶部工具栏相关组件的面板 +public class UserView extends JPanel implements ActionListener{ + + + //上面 private JPanel toolBarPanel; - - // 用于存放搜索相关组件的面板 + private JPanel searchPanel; - // 用于显示"姓名"提示文字的标签 - private JLabel nameLabel, locationLabel; - // 用于输入姓名进行搜索的文本框 + private JLabel nameLabel,locationLabel; private JTextField nameSearchTF; - // 用于触发搜索操作的按钮 private JButton searchBtn; - - // 用于存放操作按钮(添加、更新、删除等)的面板 + private JPanel opePanel; - // 用于触发添加用户操作的按钮 - private JButton addBtn, updateBtn, deleteBtn; - - // 界面中部相关组件声明 - // 用于存放表格并提供滚动功能的滚动面板,以便在表格内容较多时可以滚动查看 + private JButton addBtn,updateBtn,deleteBtn; + + //中间 private JScrollPane tableScrollPane; - // 用于展示用户数据的表格组件 private JTable userTable; - - // 用于记录删除操作时选中记录的用户id,初始化为0 + + //删除时选中赋值给id private int id; - - // 界面下部相关组件声明 - // 用于存放记录数相关提示信息的面板 + + //下面 private JPanel bottomPanel; - // 用于显示用户记录总数相关提示信息的标签 private JLabel countInfoLabel; - - // 对父窗口(JFrame类型)的引用 + private JFrame jFrame; - - // 用户表格数据模型对象,用于管理表格中的数据,与数据库等数据源进行交互获取和更新数据等 - private UserTableModel userTableModel; - - // 用户服务接口的实现类实例,通过它可以调用与用户相关的数据库操作方法,如增删改查等功能 - private UserService userService = new UserServiceImpl(); - - // 构造函数,接收一个JFrame类型的参数jFrame,用于创建用户管理视图,并初始化界面组件 + + + private UserTableModel userTableModel ; + + + private UserService userService=new UserServiceImpl(); public UserView(JFrame jFrame) { - // 设置该面板(UserView)的布局为BorderLayout,将界面划分为北、南、东、西、中五个区域来放置组件 this.setLayout(new BorderLayout()); - // 调用初始化视图组件的方法 initView(); - // 将传入的父窗口引用保存到成员变量jFrame中 this.jFrame = jFrame; } - - // 初始化用户管理视图界面组件的方法 + private void initView() { - // 创建一个新的面板toolBarPanel,设置其布局为BorderLayout,用于存放顶部的搜索和操作按钮等组件 - toolBarPanel = new JPanel(new BorderLayout()); - - // 创建一个新的面板searchPanel,设置其布局为FlowLayout,且组件左对齐,用于存放搜索相关的组件 - searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - // 创建一个显示当前位置提示信息的标签,这里显示为"当前位置>人员管理" - locationLabel = new JLabel("当前位置>人员管理"); - // 设置标签的字体为通过FontUtil类获取的特定字体(这里假设FontUtil类用于统一管理字体相关设置) + + toolBarPanel = new JPanel(new BorderLayout()); + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + locationLabel=new JLabel("当前位置>人员管理"); locationLabel.setFont(new FontUtil().userFont); - // 设置标签的前景色(文字颜色)为特定的蓝色(RGB值为18, 150, 219) locationLabel.setForeground(new Color(18, 150, 219)); - // 创建一个显示"姓名"文字的标签,用于提示用户在旁边的文本框中输入姓名进行搜索 nameLabel = new JLabel("姓名"); - // 创建一个文本框,用于用户输入要搜索的姓名,设置其可显示的宽度大致为10个字符左右 nameSearchTF = new JTextField(10); - // 创建一个按钮,使用指定路径下的图标文件作为按钮的图标,用于触发搜索操作 + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); - - // 创建一个新的面板opePanel,设置其布局为FlowLayout,且组件右对齐,用于存放操作按钮(添加、更新、删除) - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - // 创建一个按钮,使用指定路径下的图标文件("static\\icon\\add.png")作为按钮的图标,用于触发添加用户操作 - addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); - // 创建一个按钮,使用指定路径下的图标文件("static\\icon\\update.png")作为按钮的图标,用于触发更新用户操作 - updateBtn = new JButton(new ImageIcon("static\\icon\\update.png")); - // 创建一个按钮,使用指定路径下的图标文件("static\\icon\\delete.png")作为按钮的图标,用于触发删除用户操作 - deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); - - // 为添加、更新、删除和搜索按钮添加点击事件监听器,将按钮的点击事件绑定到当前类(实现了ActionListener接口)的actionPerformed方法上,以便处理相应的操作逻辑 + + /*右边功能模块*/ + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); + addBtn.addActionListener(this); updateBtn.addActionListener(this); deleteBtn.addActionListener(this); searchBtn.addActionListener(this); - - // 将添加、更新、删除按钮依次添加到操作按钮面板opePanel中 + opePanel.add(addBtn); opePanel.add(updateBtn); opePanel.add(deleteBtn); - - // 将位置提示标签、姓名标签、姓名搜索文本框和搜索按钮依次添加到搜索面板searchPanel中 + searchPanel.add(locationLabel); searchPanel.add(nameLabel); searchPanel.add(nameSearchTF); searchPanel.add(searchBtn); - - // 将搜索面板添加到toolBarPanel的西边(左侧)区域,将操作按钮面板添加到toolBarPanel的东边(右侧)区域 - toolBarPanel.add(searchPanel, "West"); - toolBarPanel.add(opePanel, "East"); - - // 创建用户表格数据模型对象 - userTableModel = new UserTableModel(); - // 调用数据模型的方法获取所有用户数据,用于初始化表格显示内容(这里假设UserTableModel类中的all方法用于从数据库等数据源获取全部用户数据并填充到模型中) + + + toolBarPanel.add(searchPanel,"West"); + toolBarPanel.add(opePanel,"East"); + + + //中间表格 + userTableModel = new UserTableModel(); userTableModel.all(); - - // 创建一个JTable对象,使用前面创建的用户表格数据模型userTableModel来管理表格中的数据展示和交互 + userTable = new JTable(userTableModel); - // 设置表格的字体为通过FontUtil类获取的适用于表格的特定字体(假设FontUtil类中定义了相关字体常量) userTable.setFont(FontUtil.tableFont); - // 设置表格每行的高度为50像素,调整表格的显示样式 userTable.setRowHeight(50); - // 创建一个滚动面板,将用户表格添加到滚动面板中,以便在表格内容较多时可以通过滚动条查看全部内容 tableScrollPane = new JScrollPane(userTable); - - // 创建一个新的面板bottomPanel,设置其布局为FlowLayout,且组件左对齐,用于存放记录数相关提示信息 + + //下面 bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - // 创建一个显示用户记录总数的标签,初始文本为"总共"加上通过用户表格数据模型获取的行数(假设UserTableModel类的getRowCount方法返回当前模型中的数据行数)以及"条"字 - countInfoLabel = new JLabel("总共" + userTableModel.getRowCount() + "条"); - // 将记录数标签添加到bottomPanel面板中 + countInfoLabel = new JLabel("总共"+userTableModel.getRowCount()+"条"); bottomPanel.add(countInfoLabel); - - // 将顶部工具栏面板添加到当前面板(UserView)的北部(上方)区域 - this.add(toolBarPanel, "North"); - // 将包含用户表格的滚动面板添加到当前面板(UserView)的中部区域,使其在界面中间显示 - this.add(tableScrollPane, "Center"); - // 将记录数面板添加到当前面板(UserView)的南部(下方)区域 - this.add(bottomPanel, "South"); - - // 设置当前面板(UserView)可见,使其在界面上显示出来 + + + this.add(toolBarPanel,"North"); + this.add(tableScrollPane,"Center");/*将表格放到中间*/ + this.add(bottomPanel,"South"); + setVisible(true); } - // 处理按钮点击等用户交互动作的方法,实现了ActionListener接口中的方法 @Override public void actionPerformed(ActionEvent e) { - // 获取触发事件的源组件(即被点击的按钮等组件) Object source = e.getSource(); - if (addBtn == source) { - // 如果点击的是添加按钮,执行以下操作: - - // 创建一个用于添加用户信息的对话框 + if(addBtn==source) { + //添加数据的对话框 UserDialog userDialog = new UserDialog(jFrame); - // 设置该对话框可见,显示在屏幕上,让用户进行添加用户信息的操作 userDialog.setVisible(true); - // 调用刷新用户数据的方法,用于在添加操作完成后更新界面上的用户数据显示 refreshUser(); - } else if (updateBtn == source) { - // 如果点击的是更新按钮,调用刷新用户数据的方法,用于在更新操作相关逻辑完成后更新界面上的用户数据显示 + }else if(updateBtn==source) { + refreshUser(); - } else if (deleteBtn == source) { - // 如果点击的是删除按钮,获取用户在表格中选中的行索引,如果没有选中任何行,则返回 -1 + }else if(deleteBtn==source) { + //获取选中记录 int rowIndex = userTable.getSelectedRow(); - if (rowIndex == -1) { - // 如果没有选中行,弹出提示框提醒用户需要选中一条记录后再进行删除操作 - JOptionPane.showMessageDialog(this, "请选中一条"); + if(rowIndex==-1) { + JOptionPane.showMessageDialog(this,"请选中一条"); return; } - // 获取选中行的第一列的值,并转换为整数类型,赋值给id变量,用于后续删除操作时确定要删除的用户记录 - int id = (Integer) userTable.getValueAt(rowIndex, 0); - // 弹出确认对话框,询问用户是否确定删除指定id的用户记录,提供"是"和"否"两个选项,返回用户选择的结果 - int select = JOptionPane.showConfirmDialog(this, "是否删除id=" + id, "提示", JOptionPane.YES_NO_OPTION); - if (select == JOptionPane.YES_OPTION) { - // 如果用户选择了"是"(确认删除),执行以下操作: - - // 调用用户服务接口的删除用户方法,传入要删除的用户id,尝试从数据库中删除对应的用户记录,并获取返回结果(假设返回1表示删除成功,其他值表示失败) - if (userService.deleteUser(id) == 1) { - // 如果删除成功,弹出提示框显示"删除成功"的消息,提示框的图标为信息图标 - JOptionPane.showMessageDialog(this, "删除成功", "提示", JOptionPane.INFORMATION_MESSAGE); - } else { - // 如果删除失败,弹出提示框显示"删除失败"的消息,提示框的图标为错误图标 - JOptionPane.showMessageDialog(this, "删除失败", "提示", JOptionPane.ERROR_MESSAGE); + int id = (Integer)userTable.getValueAt(rowIndex,0); + int select=JOptionPane.showConfirmDialog(this,"是否删除id="+id,"提示",JOptionPane.YES_NO_OPTION); + if(select==JOptionPane.YES_OPTION){ + + if(userService.deleteUser(id)==1) { + JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); + + }else { + JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); } } - // 无论删除操作是否成功,都调用刷新用户数据的方法,更新界面上的用户数据显示,确保表格等显示内容与数据库中的最新数据一致 refreshUser(); - } else { - // 如果点击的是搜索按钮(即其他未明确匹配的按钮点击情况,这里目前代码逻辑中只存在搜索按钮可能进入此分支),执行以下操作: - + + }else{ System.out.println("搜索"); - // 调用刷新按姓名搜索结果的方法,根据用户在姓名搜索文本框中输入的内容进行数据刷新和表格显示更新 refreshFindRname(); } + } - - // 根据姓名进行搜索并刷新表格显示内容的方法 public void refreshFindRname() { - // 获取用户在姓名搜索文本框中输入的姓名内容 String rname = nameSearchTF.getText(); - // 创建一个临时的User对象,用于传递搜索条件 - User user = new User(); - // 将获取到的姓名设置到临时User对象中,作为搜索条件 + User user =new User(); user.setRname(rname); - // 创建一个新的用户表格数据模型对象,用于重新获取和设置符合搜索条件的数据 userTableModel = new UserTableModel(); - // 调用用户表格数据模型的方法,根据传入的包含姓名条件的User对象进行数据查询,获取符合条件的用户数据 userTableModel.Byrname(user); - // 将更新后的用户表格数据模型设置给用户表格 userTable.setModel(userTableModel); - // 同时调用刷新记录数的方法,更新界面下方显示的用户记录总数提示信息 - refreshCount(); + //同时更新下面的记录数 + refreshCount(); } - - // 刷新用户数据显示 public void refreshUser() { - // 创建一个新的用户表格数据模型对象 userTableModel = new UserTableModel(); - // 调用数据模型的方法获取所有用户数据,重新填充模型 userTableModel.all(); - // 将更新后的用户表格数据模型设置给用户表格,使表格显示最新的全部用户数据内容 userTable.setModel(userTableModel); - // 同时调用刷新记录数的方法,更新界面下方显示的用户记录总数提示信息 + //同时更新下面的记录数 refreshCount(); + } - - // 刷新界面下方显示的用户记录总数提示信息的方法 - public void refreshCount() { - // 移除bottomPanel面板中之前添加的所有组件,更新显示新的记录数 + public void refreshCount(){ bottomPanel.removeAll(); - // 创建一个新的显示用户记录总数的标签,文本内容为"总共"加上通过用户表格数据模型获取的当前行数以及"条"字 - countInfoLabel = new JLabel("总共" + userTableModel.getRowCount() + "条"); - // 将新的记录数标签添加到bottomPanel面板中,实现记录数提示信息的更新显示 + countInfoLabel = new JLabel("总共"+userTableModel.getRowCount()+"条"); bottomPanel.add(countInfoLabel); } -} \ No newline at end of file +} + From 0e72da5c2ec63ffcb0b4448d456e9b35864a49b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E9=83=91=E4=BA=A6=E6=AD=86=E2=80=9D?= <“kttsj2257wy@163.com”> Date: Thu, 12 Dec 2024 13:47:38 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- branch_zyx/ChangeStatusDialog.java | 189 -------- branch_zyx/ChangeSumDialog.java | 186 -------- branch_zyx/InDialog.java | 230 --------- branch_zyx/InOrder.java | 62 --- branch_zyx/InOrderTM.java | 124 ----- branch_zyx/InRecord.java | 35 -- branch_zyx/InRecordTM.java | 93 ---- branch_zyx/InTableModel.java | 106 ----- branch_zyx/InView.java | 716 ----------------------------- branch_zyx/MainView.java | 702 ---------------------------- branch_zyx/ProdCatalog.java | 25 - branch_zyx/ProdCatalogTM.java | 69 --- branch_zyx/ProdCatalogView.java | 200 -------- branch_zyx/ProductionDialog.java | 320 ------------- branch_zyx/StorageRecord.java | 46 -- branch_zyx/StorageRecordTM.java | 75 --- branch_zyx/StorageTableModel.java | 74 --- branch_zyx/StorageView.java | 228 --------- branch_zyx/SuperView.java | 37 -- branch_zyx/SupplierInf.java | 53 --- branch_zyx/SupplierInfDialog.java | 151 ------ branch_zyx/SupplierTableModel.java | 105 ----- branch_zyx/SupplierView.java | 179 -------- 23 files changed, 4005 deletions(-) delete mode 100644 branch_zyx/ChangeStatusDialog.java delete mode 100644 branch_zyx/ChangeSumDialog.java delete mode 100644 branch_zyx/InDialog.java delete mode 100644 branch_zyx/InOrder.java delete mode 100644 branch_zyx/InOrderTM.java delete mode 100644 branch_zyx/InRecord.java delete mode 100644 branch_zyx/InRecordTM.java delete mode 100644 branch_zyx/InTableModel.java delete mode 100644 branch_zyx/InView.java delete mode 100644 branch_zyx/MainView.java delete mode 100644 branch_zyx/ProdCatalog.java delete mode 100644 branch_zyx/ProdCatalogTM.java delete mode 100644 branch_zyx/ProdCatalogView.java delete mode 100644 branch_zyx/ProductionDialog.java delete mode 100644 branch_zyx/StorageRecord.java delete mode 100644 branch_zyx/StorageRecordTM.java delete mode 100644 branch_zyx/StorageTableModel.java delete mode 100644 branch_zyx/StorageView.java delete mode 100644 branch_zyx/SuperView.java delete mode 100644 branch_zyx/SupplierInf.java delete mode 100644 branch_zyx/SupplierInfDialog.java delete mode 100644 branch_zyx/SupplierTableModel.java delete mode 100644 branch_zyx/SupplierView.java diff --git a/branch_zyx/ChangeStatusDialog.java b/branch_zyx/ChangeStatusDialog.java deleted file mode 100644 index 7e6235f..0000000 --- a/branch_zyx/ChangeStatusDialog.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.lingnan.supermarket.dialog; // 声明当前类所在的包 - -import java.awt.Container; // 导入AWT容器类 -import java.awt.FlowLayout; // 导入流式布局类 -import java.awt.event.ActionEvent; // 导入动作事件类 -import java.awt.event.ActionListener; // 导入动作监听器接口 -import java.awt.event.ItemEvent; // 导入项目事件类 -import java.awt.event.ItemListener; // 导入项目监听器接口 -import java.util.Vector; // 导入向量类,用于存储对象集合 - -import javax.swing.JButton; // 导入Swing按钮组件 -import javax.swing.JComboBox; // 导入Swing下拉框组件 -import javax.swing.JDialog; // 导入Swing对话框组件 -import javax.swing.JFrame; // 导入Swing顶层窗口组件 -import javax.swing.JLabel; // 导入Swing标签组件 -import javax.swing.JOptionPane; // 导入Swing对话框工具类 -import javax.swing.JPanel; // 导入Swing面板组件 -import javax.swing.JTable; // 导入Swing表格组件 -import javax.swing.JTextField; // 导入Swing文本框组件 - -import com.lingnan.supermarket.*; // 导入超市项目相关包 -import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 -import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区实现类 -import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 -import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; // 导入入库订单服务实现类 -import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; // 导入入库记录服务实现类 -import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 -import com.lingnan.supermarket.dao.impl.storageRecordImpl; // 导入库存记录服务实现类 -import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 -import com.lingnan.supermarket.dto.InOrder; // 导入入库订单数据传输对象 -import com.lingnan.supermarket.dto.InRecord; // 导入入库记录数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 -import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 -import com.lingnan.supermarket.utils.TimeAndOrder; // 导入时间和订单工具类 -import com.lingnan.supermarket.view.HomeView; // 导入主页视图类 -import com.lingnan.supermarket.view.OutView; // 导入出库视图类 -import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener - - - -public class ChangeStatusDialog extends JDialog implements ActionListener{ // 定义一个对话框类,实现动作监听器接口 - - private JPanel statusPanel,opePanel,titlePanel,comboPanel; // 声明面板变量,用于不同的功能区域 - - private JLabel titleLabel,statusLabel; // 声明标签变量,用于显示标题和状态信息 - - private JButton UpdateBtn,cancelBtn; // 声明按钮变量,用于更新和取消操作 - - private String iNumber; // 订单编号 - private String status; // 订单状态 - - private Vector InRecords; // 存储入库记录的向量 - - private JComboBox combo; // 下拉框组件,用于选择订单状态 - - private String[] log = { "待入库", "已入库", "取消订单" }; // 订单状态数组 - - private inRecordServiceImpl inRecordImpl; // 入库记录服务实现类 - - private int catalog; // 分类标识 - - private productionImpl productionImpl; // 产品服务实现类 - - // 构造方法,接收父窗口、订单编号和订单状态作为参数 - public ChangeStatusDialog(JFrame parent,String iNumber,String status) { - super(parent,"修改进货订单状态"); // 调用父类构造方法,设置对话框标题 - - setSize(400,200); // 设置对话框大小 - setLocationRelativeTo(null); // 设置对话框相对于父窗口居中 - setModal(true); // 设置对话框为模态 - setResizable(false); // 设置对话框大小不可变 - this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 - - this.iNumber=iNumber; // 将传入的订单编号赋值给成员变量 - this.status=status; // 将传入的订单状态赋值给成员变量 - initView(); // 调用方法初始化视图 - } - - - - - - - - private void initView() { // 初始化视图的私有方法 - - titlePanel = new JPanel(); // 创建标题面板 - titleLabel = new JLabel("修改订单为"+iNumber+"的状态"); // 创建标题标签,显示订单编号 - titlePanel.add(titleLabel); // 将标题标签添加到标题面板 - - statusPanel = new JPanel(); // 创建状态面板 - statusLabel = new JLabel("当前状态:"+status); // 创建状态标签,显示当前订单状态 - statusPanel.add(statusLabel); // 将状态标签添加到状态面板 - - comboPanel = new JPanel(); // 创建下拉框面板 - combo = new JComboBox(log); // 创建下拉框,使用订单状态数组初始化 - combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 - comboPanel.add(combo); // 将下拉框添加到下拉框面板 - - opePanel = new JPanel(); // 创建操作按钮面板 - UpdateBtn = new JButton("更改"); // 创建更改按钮 - cancelBtn = new JButton("取消"); // 创建取消按钮 - UpdateBtn.addActionListener(this); // 为更改按钮添加动作监听器 - cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 - opePanel.add(UpdateBtn); // 将更改按钮添加到操作按钮面板 - opePanel.add(cancelBtn); // 将取消按钮添加到操作按钮面板 - - Container container = getContentPane(); // 获取内容面板 - container.add(titlePanel,"North"); // 将标题面板添加到内容面板的北部 - container.add(statusPanel,"Center"); // 将状态面板添加到内容面板的中心 - container.add(comboPanel,"South"); // 将下拉框面板添加到内容面板的南部 - container.add(opePanel); // 将操作按钮面板添加到内容面板 - - } - - public class MyItemListener implements ItemListener { // 定义一个内部类,实现项目监听器接口 - - @Override - public void itemStateChanged(ItemEvent e) { // 实现项目状态改变时的处理方法 - JComboBox cb = (JComboBox) e.getSource(); // 获取事件源,即下拉框 - String catalog1 = (String) cb.getSelectedItem(); // 获取下拉框选中的项 - if (catalog1.equals("已入库")) { // 如果选中项为"已入库" - catalog = 1; // 将分类标识设置为1 - } - else if (catalog1.equals("待入库")) { // 如果选中项为"待入库" - catalog = 2; // 将分类标识设置为2 - } else if (catalog1.equals("取消订单")) { // 如果选中项为"取消订单" - catalog = 3; // 将分类标识设置为3 - - } - - } - - } - - - - public Vector getVector(){ // 定义一个公共方法,返回一个InRecord类型的Vector - return InRecords; // 返回成员变量InRecords,它是一个包含InRecord对象的Vector - } - - - - - - - @Override - public void actionPerformed(ActionEvent e) { // 重写actionPerformed方法以响应按钮点击事件 - Object source = e.getSource(); // 获取事件源 - if(source==UpdateBtn){ // 如果事件源是更新按钮 - System.out.println("此时此刻的catalog为"+catalog); // 打印当前catalog的值 - //这里修改进货订单表的状态*/ - inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 创建进货订单服务实现类的实例 - inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建进货记录服务实现类的实例 - storageRecordImpl storageRecordImpl = new storageRecordImpl(); // 创建库存记录服务实现类的实例 - productionImpl = new productionImpl(); // 创建产品服务实现类的实例 - Production p ; // 声明产品对象 - //获得订单信息 - - //修改状态 - inOrderImpl.updateInOrderStatus(iNumber,catalog); // 更新进货订单的状态 - //确认进货,修改状态并对库存和库存日志修改 - if(catalog==1) { // 如果catalog等于1 - //获得订单详细信息 - this.InRecords = inRecordImpl.findByIdinRecord(iNumber); // 根据订单编号查找进货记录 - //遍历添加库存 - String s[]=TimeAndOrder.TimeAndOrder("");/*生成时间*/ - for(InRecord i:InRecords) { // 遍历进货记录 - //查找到原来的价格 - //更新库存表 - productionImpl.updateProductionSum(i.getId(),i.getSum()); // 更新产品库存数量 - //增加库存日志表 - storageRecordImpl.insertStorageRecord(iNumber,s[1], i.getId(),"+", i.getSum()); // 插入库存记录 - } - - JOptionPane.showMessageDialog(this,"订单已确认,库存更新成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示消息对话框 - } - /*刷新首页*/ - this.dispose(); // 关闭当前对话框 - - } - else if(source == cancelBtn) { // 如果事件源是取消按钮 - - this.dispose(); // 关闭当前对话框 - - } - } -} diff --git a/branch_zyx/ChangeSumDialog.java b/branch_zyx/ChangeSumDialog.java deleted file mode 100644 index 6476689..0000000 --- a/branch_zyx/ChangeSumDialog.java +++ /dev/null @@ -1,186 +0,0 @@ -package com.lingnan.supermarket.dialog; // 声明当前类所在的包 - -import java.awt.Container; // 导入AWT容器类 -import java.awt.FlowLayout; // 导入流式布局类 -import java.awt.event.ActionEvent; // 导入动作事件类 -import java.awt.event.ActionListener; // 导入动作监听器接口 -import java.util.Vector; // 导入向量类,用于存储对象集合 - -import javax.swing.JButton; // 导入Swing按钮组件 -import javax.swing.JDialog; // 导入Swing对话框组件 -import javax.swing.JFrame; // 导入Swing顶层窗口组件 -import javax.swing.JLabel; // 导入Swing标签组件 -import javax.swing.JOptionPane; // 导入Swing对话框工具类 -import javax.swing.JPanel; // 导入Swing面板组件 -import javax.swing.JTable; // 导入Swing表格组件 -import javax.swing.JTextField; // 导入Swing文本框组件 - -import com.lingnan.supermarket.*; // 导入超市项目相关的包 -import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 -import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区服务实现类 -import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 -import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 -import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 -import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 -import com.lingnan.supermarket.view.OutView; // 导入出库视图类 - - - -public class ChangeSumDialog extends JDialog implements ActionListener{ // 定义一个对话框类ChangeSumDialog,继承自JDialog并实现ActionListener接口 - - private JPanel prodIdPanel,sumPanel,phonePanel,opePanel,titlePanel; // 声明多个面板变量,用于布局不同的组件 - - private JLabel prodIdLabel,sumLabel,titleLabel; // 声明标签变量,用于显示文本 - private JTextField prodIdTF,sumTF; // 声明文本框变量,用于输入数据 - - private JButton UpdateBtn,cancelBtn; // 声明按钮变量,用于执行更新和取消操作 - - private OutTableModel outTableModel = new OutTableModel(); // 创建出库表格模型实例 - - private Buffer buffer; // 声明缓冲区对象变量 - - private String prodId,mark; /*mark用来标记是进货还是出货系统*/ // 声明字符串变量,用于存储产品ID和标记 - - private Vector v; // 声明向量变量,用于存储产品集合 - - public ChangeSumDialog(JFrame parent,String prodId,String mark,Vector v) { // 构造方法,接收父窗口、产品ID、标记和产品集合作为参数 - super(parent,"更改商品数量"); // 调用父类构造方法,设置对话框标题 - - setSize(350,200); // 设置对话框大小 - setLocationRelativeTo(null); // 设置对话框相对于父窗口居中显示 - setModal(true); // 设置对话框为模态 - setResizable(false); // 设置对话框不可调整大小 - this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 - - this.prodId=prodId; // 将参数prodId赋值给成员变量prodId - this.mark=mark; // 将参数mark赋值给成员变量mark - this.v = v; // 将参数v赋值给成员变量v - initView(); // 初始化视图 - - } - - public ChangeSumDialog(JFrame parent,String prodId,String mark) { // 另一个构造方法,接收父窗口、产品ID和标记作为参数 - super(parent,"更改商品数量"); // 调用父类构造方法,设置对话框标题为"更改商品数量" - - setSize(350,200); // 设置对话框大小为350x200像素 - setLocationRelativeTo(null); // 设置对话框位置相对于父窗口居中显示 - setModal(true); // 设置对话框为模态,即用户必须处理完此对话框才能操作其他窗口 - setResizable(false); // 设置对话框大小不可变 - this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 - - this.prodId=prodId; // 将传入的产品ID赋值给成员变量prodId - this.mark=mark; // 将传入的标记赋值给成员变量mark - initView(); // 调用方法初始化视图 - - } - - - - - - private void initView() { - - titlePanel = new JPanel(); - titleLabel = new JLabel("修改商品id为"+prodId+"的数量"); - titlePanel.add(titleLabel); - - - - sumPanel = new JPanel(); - sumLabel = new JLabel("数量"); - sumTF = new JTextField(15); - sumPanel.add(sumLabel); - sumPanel.add(sumTF); - - - opePanel = new JPanel(); - UpdateBtn = new JButton("更改"); - cancelBtn = new JButton("取消"); - UpdateBtn.addActionListener(this); - cancelBtn.addActionListener(this); - opePanel.add(UpdateBtn); - opePanel.add(cancelBtn); - - Container container = getContentPane(); - container.add(titlePanel); - container.add(sumPanel); - container.add(opePanel); - } - - public Vector getVector(){ - return v; - } - - @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if(source==UpdateBtn){ - - //TODO 参数校验 - /*/返回这个记录的信息*/ - - int sum = Integer.parseInt(sumTF.getText());/*获得数量*/ - System.out.println("所要修改的数量sum="+sum); - - if(sumTF.getText().equals("")) { - JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); - return; - } - - if(sum<0) {/*判断输入大于0*/ - JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); - return; - } - - - - - BufferImpl bufferImpl = new BufferImpl(); - - productionImpl productionImpl = new productionImpl(); - Production production = new Production(); - production = productionImpl.findByIdProduction(prodId); - - Buffer buffer = new Buffer(); - boolean flag = false; - - if(mark=="In") {/*进货界面*/ - for(Production p:v) { - if(p.getId().equals(prodId)) - p.setSum(sum); - } - - } - - else if(mark=="Out") {/*出货界面*/ - buffer = bufferImpl.findInBufferbyId(prodId); - if(buffer!=null) {/*记录有这条数据*/ - if(sum>production.getSum())/*修改数量超过库存*/ - JOptionPane.showMessageDialog(this,"库存数量为:"+production.getSum()+",修改数量请勿超过库存","提示",JOptionPane.ERROR_MESSAGE); - else - flag = bufferImpl.UpdateInBufferById(prodId, sum); - - } - - } - - - if(flag = true) {/*如果修改成功*/ - - JOptionPane.showMessageDialog(this,"修改成功","提示",JOptionPane.INFORMATION_MESSAGE); - dispose(); - - }else { - JOptionPane.showMessageDialog(this,"修改失败","提示",JOptionPane.ERROR_MESSAGE); - dispose(); - } - } - - else if(source == cancelBtn) { - - this.dispose(); - } - } -} diff --git a/branch_zyx/InDialog.java b/branch_zyx/InDialog.java deleted file mode 100644 index 04f10a5..0000000 --- a/branch_zyx/InDialog.java +++ /dev/null @@ -1,230 +0,0 @@ -package com.lingnan.supermarket.dialog; // 声明当前类所在的包 - -import java.awt.Container; // 导入AWT容器类 -import java.awt.FlowLayout; // 导入流式布局类 -import java.awt.event.ActionEvent; // 导入动作事件类 -import java.awt.event.ActionListener; // 导入动作监听器接口 -import java.awt.event.ItemEvent; // 导入项目事件类 -import java.awt.event.ItemListener; // 导入项目监听器接口 -import java.util.Vector; // 导入向量类,用于存储对象集合 - -import javax.swing.JButton; // 导入按钮组件类 -import javax.swing.JComboBox; // 导入下拉框组件类 -import javax.swing.JDialog; // 导入对话框组件类 -import javax.swing.JFrame; // 导入顶层窗口类 -import javax.swing.JLabel; // 导入标签组件类 -import javax.swing.JOptionPane; // 导入对话框工具类 -import javax.swing.JPanel; // 导入面板组件类 -import javax.swing.JTable; // 导入表格组件类 -import javax.swing.JTextField; // 导入文本框组件类 - -import com.lingnan.supermarket.*; // 导入超市项目相关的所有类 -import com.lingnan.supermarket.dao.UserService; // 导入用户服务接口 -import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入缓冲区服务实现类 -import com.lingnan.supermarket.dao.impl.UserServiceImpl; // 导入用户服务实现类 -import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务实现类 -import com.lingnan.supermarket.dto.Buffer; // 导入缓冲区数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 -import com.lingnan.supermarket.table.OutTableModel; // 导入出库表格模型类 -import com.lingnan.supermarket.view.InView; // 导入进货视图类 -import com.lingnan.supermarket.view.OutView; // 导出出库视图类 -import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener - - - -public class InDialog extends JDialog implements ActionListener{ // 定义一个对话框类InDialog,继承自JDialog并实现ActionListener接口 - - private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; // 声明面板变量,用于不同功能的面板 - - private JLabel prodIdLabel,sumLabel; // 声明标签变量,用于显示文本 - private JTextField prodIdTF,sumTF; // 声明文本框变量,用于输入数据 - - private JButton addBtn,cancelBtn; // 声明按钮变量,用于添加和取消操作 - - private OutTableModel outTableModel = new OutTableModel(); // 创建出库表格模型实例 - - private Production production; // 声明产品数据传输对象 - private productionImpl productionImpl; // 声明产品服务实现类 - - private Vector v; // 声明产品集合变量 - - private User user; // 声明用户数据传输对象 - - private JFrame JFramparent; // 声明顶层窗口变量,用于存储父窗口 - - private JComboBox combo; // 声明下拉框组件变量 - private String allProdId[] = null; // 声明字符串数组,用于存储所有产品ID - private Vector vAll; // 声明产品集合变量,用于存储所有产品 - private static String catalog; // 声明静态字符串变量,用于存储分类信息 - - public InDialog(JFrame parent,Vector v,User user) { // 构造方法,接收父窗口、产品集合和用户对象 - super(parent,"添加商品"); // 调用父类构造方法,设置对话框标题 - - setSize(250,200); // 设置对话框大小 - setLocationRelativeTo(null); // 设置对话框居中显示 - setModal(true); // 设置对话框为模态 - setResizable(false); // 设置对话框不可调整大小 - this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 - JFramparent=parent; // 初始化父窗口变量 - this.v=v; // 初始化产品集合变量 - this.user = user; // 初始化用户对象 - initView(); // 初始化视图 - - - - } - - - - - - private void initView() { - prodIdPanel = new JPanel(); // 创建一个面板用于显示产品编号 - prodIdLabel = new JLabel("编号"); // 创建一个标签显示"编号" - - productionImpl= new productionImpl(); // 实例化产品服务实现类 - vAll=productionImpl.findAllproduction(); // 调用方法获取所有产品信息 - allProdId = new String[vAll.size()]; // 初始化字符串数组,用于存储所有产品ID - for(int i=0;i(allProdId); // 创建下拉框,并使用产品ID数组初始化 - combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 - - - prodIdPanel.add(prodIdLabel); // 将标签添加到编号面板 - prodIdPanel.add(combo); // 将下拉框添加到编号面板 - - - - sumPanel = new JPanel(); // 创建一个面板用于显示数量 - sumLabel = new JLabel("数量"); // 创建一个标签显示"数量" - sumTF = new JTextField(10); // 创建一个文本框用于输入数量,宽度为10 - sumPanel.add(sumLabel); // 将标签添加到数量面板 - sumPanel.add(sumTF); // 将文本框添加到数量面板 - - - opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 - addBtn = new JButton("添加"); // 创建一个按钮显示"添加" - cancelBtn = new JButton("取消"); // 创建一个按钮显示"取消" - addBtn.addActionListener(this); // 为添加按钮添加动作监听器 - cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 - opePanel.add(addBtn); // 将添加按钮添加到操作面板 - opePanel.add(cancelBtn); // 将取消按钮添加到操作面板 - - - Container container = getContentPane(); // 获取内容面板 - container.add(prodIdPanel); // 将编号面板添加到内容面板 - container.add(sumPanel); // 将数量面板添加到内容面板 - container.add(opePanel); // 将操作面板添加到内容面板 - } - - /*将数组传到inview的刷新方法里面再刷新*/ - public Vector getVector(){ // 提供一个方法获取产品集合 - return v; - } - - //下拉框监听 - static class MyItemListener implements ItemListener{ // 定义一个内部类实现ItemListener接口 - - @Override - public void itemStateChanged(ItemEvent e) { // 实现项目状态改变时的处理方法 - JComboBox cb=(JComboBox)e.getSource(); // 获取事件源下拉框 - String select=(String) cb.getSelectedItem(); // 获取选中项的值 - catalog=select; // 更新分类信息为选中项的值 - - } - - } - - - - - - - - - @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); // 获取事件源 - if(source==addBtn){ // 如果事件源是添加按钮 - //1.判断是否存在这个商品 - //2.如果存在就获取这条商品记录为一个对象 - //3.判断购物缓冲区是否有这个记录 - //3.1如果有update数量和price - //3.2如果没有就insert这条记录,把sum更新 - //保存到数据库 - //关闭对话框 - //刷新table - - - String prodId =catalog; // 获取选中的商品ID - System.out.println("proId="+prodId); // 打印商品ID - System.out.println("vatalog="+catalog); // 打印分类信息 - - - if(sumTF.getText().equals("")) { // 判断数量文本框是否为空 - JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); - return; - } - int sum = Integer.parseInt(sumTF.getText()) ; // 将文本框中的数量转换为整数 - - if(sum<0) {/*判断输入大于0*/ - JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); - return; - } - - //TODO 参数校验 - /*/判断是已添加,未添加还是不存在*/ - productionImpl productionImpl = new productionImpl(); // 实例化产品服务实现类 - production = new Production(); // 创建产品对象 - production = productionImpl.findByIdProduction(prodId); // 根据ID查找产品 - - - if(production!=null) {/*商品库有这个商品存在*/ - int mark = 0; // 标记变量,用于判断商品是否已存在于购物缓冲区 - for(Production p:v) { // 遍历购物缓冲区 - - - if(p.getId().equals(prodId)){/*如果数组中存在相同商品就更新数量和价格*/ - sum=p.getSum()+sum;/*数量*/ - p.setSum(sum); - p.setPrice(sum*p.getInPrice());/*进货价格*/ - mark = 1; // 更新标记 - break; - } - - } - if(mark==0) {/*插入新的*/ - System.out.println("缓存区不存在,插入新的数据"); - production.setSum(sum);/*更新价格和数量后插入新的*/ - production.setPrice(sum*production.getInPrice()); - v.add(production); // 将新产品添加到购物缓冲区 - - } - - System.out.println("插入后v的大小"+v.size()); // 打印购物缓冲区大小 - this.dispose(); // 关闭对话框 - JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE); // 显示添加成功消息 - - } - - - - else {/*商品库没有这个商品*/ - JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE); // 显示商品不存在消息 - } - } - else if(source == cancelBtn) { // 如果事件源是取消按钮 - - this.dispose(); // 关闭对话框 - - } - } - - - -} diff --git a/branch_zyx/InOrder.java b/branch_zyx/InOrder.java deleted file mode 100644 index 4e999c1..0000000 --- a/branch_zyx/InOrder.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.lingnan.supermarket.dto; // 声明当前类所在的包 - -import java.util.Date; // 导入Date类,尽管在此类中没有直接使用 - -// 定义进货订单类InOrder -public class InOrder { - private String iNumber; // 进货订单编号 - private Float allInPrice; // 总进货价格 - private String inDate; // 进货日期 - private String principal; // 负责人 - private int status; // 订单状态 - private int delmark; // 删除标记 - - // getiNumber方法,用于获取进货订单编号 - public String getiNumber() { - return iNumber; // 返回进货订单编号 - } - // setiNumber方法,用于设置进货订单编号 - public void setiNumber(String iNumber) { - this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber - } - // getAllInPrice方法,用于获取总进货价格 - public Float getAllInPrice() { - return allInPrice; // 返回总进货价格 - } - // setAllInPrice方法,用于设置总进货价格 - public void setAllInPrice(Float allInPrice) { - this.allInPrice = allInPrice; // 将参数allInPrice赋值给成员变量allInPrice - } - // getInDate方法,用于获取进货日期 - public String getInDate() { - return inDate; // 返回进货日期 - } - // setInDate方法,用于设置进货日期 - public void setInDate(String inDate) { - this.inDate = inDate; // 将参数inDate赋值给成员变量inDate - } - // getPrincipal方法,用于获取负责人 - public String getPrincipal() { - return principal; // 返回负责人 - } - // setPrincipal方法,用于设置负责人 - public void setPrincipal(String principal) { - this.principal = principal; // 将参数principal赋值给成员变量principal - } - // getStatus方法,用于获取订单状态 - public int getStatus() { - return status; // 返回订单状态 - } - // setStatus方法,用于设置订单状态 - public void setStatus(int status) { - this.status = status; // 将参数status赋值给成员变量status - } - // getDelmark方法,用于获取删除标记 - public int getDelmark() { - return delmark; // 返回删除标记 - } - // setDelmark方法,用于设置删除标记 - public void setDelmark(int delmark) { - this.delmark = delmark; // 将参数delmark赋值给成员变量delmark - } -} diff --git a/branch_zyx/InOrderTM.java b/branch_zyx/InOrderTM.java deleted file mode 100644 index bb9922d..0000000 --- a/branch_zyx/InOrderTM.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.lingnan.supermarket.table; // 声明当前类所在的包 - -import java.util.List; // 导入List接口,用于表示列表 -import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 - -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 -import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 - -import com.lingnan.supermarket.dto.Buffer; // 导入Buffer数据传输对象 -import com.lingnan.supermarket.dto.InOrder; // 导入InOrder数据传输对象 -import com.lingnan.supermarket.dto.Buffer; // 重复导入Buffer数据传输对象,可能是错误 -import com.lingnan.supermarket.dto.Production; // 导入Production数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User数据传输对象 -import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 -import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 -import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于进货对话框 - - - -public class InOrderTM extends AbstractTableModel{ // 定义一个类InOrderTM,继承自AbstractTableModel类,用于表格模型 - - private String [] columnName = {"订单号","总价","时间","负责人","状态"}; // 定义列名数组,用于表格的列标题 - - private productionImpl prodDao = new productionImpl(); // 创建productionImpl对象,用于操作产品数据 - - private Vector InOrders; // 声明一个Vector数组,用于存储InOrder对象 - private inOrderServiceImpl inOrderImpl= new inOrderServiceImpl(); // 创建inOrderServiceImpl对象,用于操作订单数据 - private InOrder inOrder ; // 声明InOrder对象,用于单个订单操作 - - String iNumber ; // 声明一个String变量,用于存储订单号 - - - public void allInOrderRecord() { // 定义一个方法,用于获取所有订单记录 - //将添加的商品加入到静态变量Vector数组中 - /*prod = InDialog.getProduction();*/ - InOrders = inOrderImpl.findAllInOrder(); // 调用inOrderImpl的方法,获取所有订单并赋值给InOrders - } - - //查找分类结果 - public void resultOfFind(int catalog) { // 定义一个方法,根据分类查找订单 - if(catalog==0) // 如果分类为0,查找所有订单 - InOrders = inOrderImpl.findAllInOrder(); // 获取所有订单 - else - InOrders = inOrderImpl.FindStatus(catalog); // 否则根据状态查找订单 - } - - //根据订单号查找 - public void resultOfNumber(String Number) { // 定义一个方法,根据订单号查找订单 - InOrders=new Vector(); // 初始化InOrders为新的Vector对象 - inOrder = inOrderImpl.findByIdinOrder(Number); // 根据订单号查找订单 - InOrders.add(inOrder); // 将找到的订单添加到InOrders中 - } - - - - - - - - @Override -// 重写getRowCount方法,返回表格的行数,即订单列表的大小 - public int getRowCount() { - return InOrders.size(); // 返回InOrders Vector的大小 - } - -/* -// 获取所有订单的总价格,此方法已被注释掉 -public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); -} -*/ - - @Override -// 重写getColumnCount方法,返回表格的列数,即列名数组的长度 - public int getColumnCount() { - return columnName.length; // 返回columnName数组的长度 - } - - @Override -// 重写getValueAt方法,根据行索引和列索引获取表格单元格的值 - public Object getValueAt(int rowIndex, int columnIndex) { - inOrder = InOrders.get(rowIndex); // 获取指定行的订单对象 - // 以下代码已被注释,可能是用于调试的打印语句 - /*System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - iNumber=inOrder.getiNumber(); // 获取订单号并赋值给iNumber - if(columnIndex==0) { // 如果是第一列,返回订单号 - return inOrder.getiNumber(); - }else if(columnIndex==1) { // 如果是第二列,返回订单总价 - return inOrder.getAllInPrice(); - }else if(columnIndex==2) { // 如果是第三列,返回订单日期 - return inOrder.getInDate(); - }else if(columnIndex==3) { // 如果是第四列,返回负责人 - return inOrder.getPrincipal(); - }else if(columnIndex==4) { // 如果是第五列,返回订单状态 - String status = null; - if(inOrder.getStatus()==1) - status= "已入库"; - else if(inOrder.getStatus()==2) - status= "待入库"; - else if(inOrder.getStatus()==3) - status= "已取消"; - return status; - }else { // 如果列索引不匹配,返回null - return null; - } - } - - // 返回要修改或删除的记录的订单号 - public String getINumber() { - return iNumber; // 返回类的成员变量iNumber - } - - - @Override -// 重写getColumnName方法,根据列索引获取列名 - public String getColumnName(int column) { - return columnName[column]; // 返回columnName数组中指定索引的值 - } - - - -} diff --git a/branch_zyx/InRecord.java b/branch_zyx/InRecord.java deleted file mode 100644 index c5e69ed..0000000 --- a/branch_zyx/InRecord.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.lingnan.supermarket.dto; // 声明当前类所在的包 - -import com.lingnan.supermarket.dto.base.BsDomain; // 导入基础域类BsDomain - -// 定义进货记录类InRecord,继承自BsDomain -public class InRecord extends BsDomain{ - private String iNumber; // 进货编号 - private int sum; // 进货数量 - private Float inPrice; // 进货单价 - - // getiNumber方法,用于获取进货编号 - public String getiNumber() { - return iNumber; // 返回进货编号 - } - // setiNumber方法,用于设置进货编号 - public void setiNumber(String iNumber) { - this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber - } - // getSum方法,用于获取进货数量 - public int getSum() { - return sum; // 返回进货数量 - } - // setSum方法,用于设置进货数量 - public void setSum(int sum) { - this.sum = sum; // 将参数sum赋值给成员变量sum - } - // getInPrice方法,用于获取进货单价 - public Float getInPrice() { - return inPrice; // 返回进货单价 - } - // setInPrice方法,用于设置进货单价 - public void setInPrice(Float inPrice) { - this.inPrice = inPrice; // 将参数inPrice赋值给成员变量inPrice - } -} diff --git a/branch_zyx/InRecordTM.java b/branch_zyx/InRecordTM.java deleted file mode 100644 index 820425f..0000000 --- a/branch_zyx/InRecordTM.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.lingnan.supermarket.table; // 声明当前类所在的包 - -import java.util.List; // 导入List接口,用于表示列表 -import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 - -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 -import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 - -import com.lingnan.supermarket.dto.Buffer; // 导入Buffer类,可能用于临时数据存储 -import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,表示进货订单 -import com.lingnan.supermarket.dto.InRecord; // 导入InRecord类,表示进货记录 -import com.lingnan.supermarket.dto.Buffer; // 重复导入Buffer类,可能是错误,应该删除 -import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品 -import com.lingnan.supermarket.dto.User; // 导入User类,表示用户 -import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 -import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 -import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于显示进货对话框 - - - -public class InRecordTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于创建进货记录表格数据模型 - - private String [] columnName = {"订单号","id","数量","金额"}; // 定义列名数组,用于表格的列标题 - - private productionImpl prodDao = new productionImpl(); // 创建productionImpl实例,用于操作产品数据 - - private Vector InRecords; // 声明一个Vector类型的变量,用于存储进货记录 - - private inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建inRecordServiceImpl实例,用于操作进货记录数据 - private InRecord inRecord= new InRecord(); // 创建InRecord实例,用于存储单条进货记录 - - - private String iNumber ;/*订单号*/ // 声明一个String变量,用于存储订单号 - - - public InRecordTM(String iNumber) { // 构造函数,接收订单号参数 - this.iNumber=iNumber; // 将传入的订单号赋值给类的成员变量 - } - - public void findInRecordByINumber() { // 根据订单号查找进货记录的方法 - //将添加的商品加入到静态变量Vector数组中 - /*prod = InDialog.getProduction();*/ - InRecords = inRecordImpl.findByIdinRecord(iNumber); // 根据订单号查询进货记录并赋值给InRecords - } - - - @Override - public int getRowCount() { // 重写方法,获取表格的行数 - return InRecords.size(); // 返回InRecords的大小 - } - - /* public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); - } - */ - @Override - public int getColumnCount() { // 重写方法,获取表格的列数 - return columnName.length; // 返回columnName数组的长度 - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { // 重写方法,获取指定单元格的值 - inRecord = InRecords.get(rowIndex); // 获取指定行的进货记录 -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - iNumber=inRecord.getiNumber(); // 获取订单号 - if(columnIndex==0) { - return inRecord.getiNumber(); // 返回订单号 - }else if(columnIndex==1) { - return inRecord.getId(); // 返回id - }else if(columnIndex==2) { - return inRecord.getSum(); // 返回数量 - }else if(columnIndex==3) { - return inRecord.getInPrice(); // 返回金额 - }else { - return null; // 如果列索引不匹配,返回null - } - } - - public String getINumber() { // 返回要修改或删除的记录的订单号 - return iNumber; // 返回类的成员变量iNumber - } - - - @Override - public String getColumnName(int column) { // 重写方法,获取指定列的列名 - return columnName[column]; // 返回columnName数组中指定索引的值 - } - - - -} diff --git a/branch_zyx/InTableModel.java b/branch_zyx/InTableModel.java deleted file mode 100644 index 41fb2a0..0000000 --- a/branch_zyx/InTableModel.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.lingnan.supermarket.table; // 声明当前类所在的包 - -import java.util.List; // 导入List接口,用于表示列表 -import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 - -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 -import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 - -import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,表示进货订单的数据传输对象 - -import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 -import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 -import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 -import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能用于显示进货对话框 - - - - -public class InTableModel extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于创建进货表格数据模型 - - // 定义列名数组,用于表格的列标题 - private String [] columnName = {"id","名称","数量","单价","价格","保质期","类别","供应商id"}; - - // 创建productionImpl实例,用于操作产品数据 - private productionImpl prodDao = new productionImpl(); - - // 声明一个Vector,用于存储Production对象集合 - private Vector v; - - // 声明一个String变量,用于存储id - String id ; - - - // 构造函数,接收一个Vector类型的参数 - public InTableModel(Vector v) { - System.out.println("调用InTableModel里面的构造函数"); // 打印日志信息 - this.v=v; // 将传入的Vector赋值给类的成员变量v - } - - - - - // 获取表格的行数,即数据集合的大小 - public int getRowCount() { - return v.size(); // 返回Vector v的大小 - } - - // 计算所有商品的总价格 - public Float getAllPrice() { - Float allPrice=(float) 0; // 初始化总价格为0 - for(Production p:v) { // 遍历Vector v中的所有Production对象 - allPrice+=p.getPrice(); // 累加每个商品的价格 - } - return allPrice; // 返回计算出的总价格 - } - - // 重写方法,获取表格的列数,即列名数组的长度 - @Override - public int getColumnCount() { - return columnName.length; // 返回columnName数组的长度 - } - - // 重写方法,获取指定行和列的单元格值 - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - Production p = v.get(rowIndex); // 从Vector v中获取指定行的Production对象 - id=p.getId(); // 将Production对象的id赋值给类的成员变量id - if(columnIndex==0) { // 判断列索引,并返回相应的值 - return p.getId(); - }else if(columnIndex==1) { - return p.getName(); // 返回商品名称 - }else if(columnIndex==2) { - return p.getSum(); // 返回商品数量 - }else if(columnIndex==3) { - return p.getInPrice(); // 返回商品进货单价 - }else if(columnIndex==4) { - return p.getPrice(); // 返回商品价格 - }else if(columnIndex==5) { - return p.getLife(); // 返回商品保质期 - }else if(columnIndex==6) { - return p.getName2()+p.getId2(); // 返回商品类别和类别id的组合 - }else if(columnIndex==7) { - return p.getSupplyId(); // 返回供应商id - }else { - return null; // 如果列索引不匹配,返回null - } - } - - // 获取要修改或删除的记录的id - public String getId() { - return id; // 返回类的成员变量id - } - - // 重写方法,获取指定列的列名 - @Override - public String getColumnName(int column) { - return columnName[column]; // 返回columnName数组中指定索引的值 - } - - - - - - -} diff --git a/branch_zyx/InView.java b/branch_zyx/InView.java deleted file mode 100644 index fc657b2..0000000 --- a/branch_zyx/InView.java +++ /dev/null @@ -1,716 +0,0 @@ -// 定义包名,表明该类属于com.lingnan.supermarket.view包 -package com.lingnan.supermarket.view; - -// 导入必要的Java Swing和AWT类库以及自定义的类库 -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.Vector; - -import javax.mail.MessagingException; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTextField; -import javax.swing.text.html.HTMLDocument.Iterator; - -import com.lingnan.supermarket.componet.BGPanel; -import com.lingnan.supermarket.dao.impl.BufferImpl; -import com.lingnan.supermarket.dao.impl.UserServiceImpl; -import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; -import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; -import com.lingnan.supermarket.dao.impl.prodCatalogImpl; -import com.lingnan.supermarket.dialog.ChangeStatusDialog; -import com.lingnan.supermarket.dialog.ChangeSumDialog; -import com.lingnan.supermarket.dialog.InDialog; -import com.lingnan.supermarket.dialog.UserDialog; -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.InRecord; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.table.*; -import com.lingnan.supermarket.utils.CreateOrder; -import com.lingnan.supermarket.utils.FontUtil; -import com.lingnan.supermarket.utils.SendQQMailUtil; -import com.lingnan.supermarket.utils.TimeAndOrder; -import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; - -// 声明InView类,继承JPanel并实现ActionListener接口 -public class InView extends JPanel implements ActionListener{ - - // 定义类的成员变量,用于构建界面元素 - // 上面的工具栏面板 - private JPanel toolBarPanel; - - // 搜索面板 - private JPanel searchPanel; - private JLabel nameLabel,locationLabel; // 标签用于显示文本 - private JTextField nameSearchTF; // 文本框用于输入搜索内容 - private JButton searchBtn,StockBtn,exitBtn; // 按钮用于执行操作 - - // 操作面板 - private JPanel opePanel; - private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn,detailBtn; // 操作按钮 - - // 中间的表格滚动面板 - private JScrollPane tableScrollPane; - private JTable inTable; // 表格用于显示数据 - - // 下面的面板 - private JPanel bottomPanel,bottomPanelLeft,bottomPanelRight; // 底部面板 - private JLabel countInfoLabel,countInfoLabel2; // 标签用于显示统计信息 - - // 缓冲区相关变量 - private Buffer Buffer; - private BufferImpl BufferImpl; - - // 定义一个静态的Vector集合,用于存储Production对象 - private static Vector v = new Vector(); - - // 定义一个下拉框组件,用于选择不同的状态 - private JComboBox combo; - // 定义一个字符串数组,包含所有可能的状态选项 - private String[] status ={"全部","已入库","待入库","已取消"}; - // 定义一个变量,用于存储当前选中的目录 - private int catalog; - - // 定义一个JFrame对象,用于表示主窗口 - private JFrame jFrame; - // 定义一个User对象,用于存储当前用户信息 - private User user; - - // 定义一个InTableModel对象,用于管理表格数据模型 - private InTableModel inTableModel ; - - // 实例化BufferImpl对象,用于操作缓冲区数据 - private BufferImpl bufferImpl = new BufferImpl(); - - // 定义一个标记变量,用于区分是从进货表还是提醒过来的表 - private int mark;/*标记从提醒那里来1是进货表,0是提醒过来的表*/ - - // 定义一个inOrderServiceImpl对象,用于处理进货订单服务 - private inOrderServiceImpl inOrderImpl; - - // 定义一个浮点数变量,用于存储总价 - private Float allPrice; - // 定义一个整数变量,用于存储选中的行号 - private int row; - // 定义一个字符串变量,用于存储用户名 - private String uname; - - // InView类的构造方法,接收主窗口、用户、货物集合和标记作为参数 - public InView(JFrame jFrame,User user,Vector v,int mark) { - // 设置布局管理器为边界布局 - this.setLayout(new BorderLayout()); - // 初始化成员变量 - this.jFrame = jFrame; - this.user = user; - // 获取进货缓冲区的保存的货物并删除缓冲区 - this.v =bufferImpl.allInBuffer(); - bufferImpl.DelAllInBuffer(); - - // 初始化标记变量 - this.mark=mark; - // 打印标记值,用于调试 - System.out.println("mark="+mark); - // 获取并存储用户名 - uname = user.getUsername(); - // 初始化视图 - initView(); - - - } - - // 初始化视图的方法 - private void initView() { - - - // 创建工具栏面板,并设置布局管理器为边界布局 - toolBarPanel = new JPanel(new BorderLayout()); - - // 创建搜索面板,并设置布局管理器为流式布局,靠右对齐 - searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - // 创建并初始化标签,用于显示“订单号” - nameLabel = new JLabel("订单号"); - // 创建并初始化文本框,用于输入搜索内容,宽度为20 - nameSearchTF = new JTextField(20); - // 创建并初始化搜索按钮,并设置图标 - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); - // 为搜索按钮添加动作监听器 - searchBtn.addActionListener(this); - // 创建并初始化位置标签,并设置字体和前景色 - locationLabel=new JLabel("当前位置>进货系统"); - locationLabel.setFont(new FontUtil().userFont); - locationLabel.setForeground(new Color(18, 150, 219)); - - - - // 创建并初始化下拉框,使用状态数组作为选项 - combo = new JComboBox(status); - // 为下拉框添加项目监听器 - combo.addItemListener(new MyItemListener()); - - - - - // 创建操作面板,并设置布局管理器为流式布局,靠左对齐 - opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); -// 创建并初始化添加按钮,并设置图标 - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); -// 创建并初始化更新按钮,并设置图标 - updateBtn =new JButton(new ImageIcon("static\\icon\\change.png")); -// 创建并初始化删除按钮,并设置图标 - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); -// 创建并初始化历史按钮,并设置图标 - historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); -// 创建并初始化返回按钮,并设置图标 - backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); -// 创建并初始化详情按钮,并设置图标 - detailBtn = new JButton(new ImageIcon("static\\icon\\detail.png")); - -// 为添加按钮添加动作监听器 - addBtn.addActionListener(this); -// 为更新按钮添加动作监听器 - updateBtn.addActionListener(this); -// 为删除按钮添加动作监听器 - deleteBtn.addActionListener(this); -// 为历史按钮添加动作监听器 - historyBtn.addActionListener(this); -// 为返回按钮添加动作监听器 - backBtn.addActionListener(this); -// 为详情按钮添加动作监听器 - detailBtn.addActionListener(this); - -// 设置返回按钮初始不可见,它在记录页面时才会显示 - backBtn.setVisible(false);/*在记录页面显示出来*/ -// 设置详情按钮初始不可见,它在订单详情页时才会显示 - detailBtn.setVisible(false);/*在订单详情页显示出来*/ - -// 将添加按钮添加到操作面板 - opePanel.add(addBtn); -// 将返回按钮添加到操作面板 - opePanel.add(backBtn); -// 将详情按钮添加到操作面板 - opePanel.add(detailBtn); -// 将更新按钮添加到操作面板 - opePanel.add(updateBtn); -// 将删除按钮添加到操作面板 - opePanel.add(deleteBtn); -// 将历史按钮添加到操作面板 - opePanel.add(historyBtn); - -// 将位置标签添加到搜索面板 - searchPanel.add(locationLabel); -// 将订单号标签添加到搜索面板 - searchPanel.add(nameLabel); -// 将搜索文本框添加到搜索面板 - searchPanel.add(nameSearchTF); -// 将搜索按钮添加到搜索面板 - searchPanel.add(searchBtn); -// 将状态下拉框添加到搜索面板 - searchPanel.add(combo); - - - -// 将搜索面板添加到工具栏面板的西边(West) - toolBarPanel.add(searchPanel,"West"); -// 将操作面板添加到工具栏面板的东边(East) - toolBarPanel.add(opePanel,"East"); - - - - //中间表 - // 创建一个表格模型,并传入数据向量v - inTableModel = new InTableModel(v); - -// 创建一个新的表格,使用上面创建的表格模型 - inTable = new JTable(inTableModel); -// 设置表格的字体 - inTable.setFont(FontUtil.tableFont); -// 设置表格的行高 - inTable.setRowHeight(50); -// 创建一个滚动面板,并将表格添加到滚动面板中 - tableScrollPane = new JScrollPane(inTable); - -// 获取表格模型中的所有商品总价 - allPrice = inTableModel.getAllPrice(); -// 获取表格模型中的行数,即商品种类数量 - row = inTableModel.getRowCount(); - -// 创建底部左侧面板,并设置布局为右对齐流式布局 - bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.RIGHT)); -// 创建一个标签用于显示商品种类和总价信息 - countInfoLabel = new JLabel("商品种类:"+row+",总价:"+allPrice); -// 将商品信息标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel,"Left"); - -// 创建底部右侧面板,并设置布局为左对齐流式布局 - bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.LEFT)); -// 创建并初始化结账按钮,并设置图标 - StockBtn =new JButton(new ImageIcon("static\\icon\\stock.png"));/*结账按钮*/ -// 创建并初始化退出按钮,并设置图标 - exitBtn =new JButton(new ImageIcon("static\\icon\\exit.png"));/*退出按钮*/ -// 为结账按钮添加动作监听器 - StockBtn.addActionListener(this); -// 为退出按钮添加动作监听器 - exitBtn.addActionListener(this); -// 将结账按钮添加到底部右侧面板 - bottomPanelRight.add(StockBtn); -// 将退出按钮添加到底部右侧面板 - bottomPanelRight.add(exitBtn); - -// 创建底部面板,并设置布局为边界布局 - bottomPanel = new JPanel(new BorderLayout()); -// 将底部右侧面板添加到底部面板的东边 - bottomPanel.add(bottomPanelRight,"East"); -// 将底部左侧面板添加到底部面板的西边 - bottomPanel.add(bottomPanelLeft,"West"); - - -// 将工具栏面板添加到窗口的北边 - this.add(toolBarPanel,"North"); -// 将表格滚动面板添加到窗口的中间 - this.add(tableScrollPane,"Center");/*将表格放到中间*/ -// 将底部面板添加到窗口的南边 - this.add(bottomPanel,"South"); - -// 如果标记为1,表示是从提醒模块过来的,则刷新缓冲区 - if(mark==1) /*判断是不是从提醒那里过来的*/{ - refreshBuffer(v); - } -// 如果标记为0,则执行进货订单记录操作 - else if(mark==0) { - InOrderRecord(); - } - - - - - - - // 设置窗口为可见状态,这样用户就可以看到并与之交互 - setVisible(true); - - - - - - - - } - - // 提供一个静态方法,用于获取存储Production对象的Vector集合 - public static Vector getVector(){ - return v; - } - - // 定义一个内部类MyItemListener,实现ItemListener接口来监听下拉框项目的状态改变 - public class MyItemListener implements ItemListener { - - // 重写itemStateChanged方法,当下拉框中的项目状态改变时被调用 - @Override - public void itemStateChanged(ItemEvent e) { - // 将事件源转换为JComboBox类型 - JComboBox cb = (JComboBox) e.getSource(); - // 获取当前选中的项目,并转换为字符串 - String catalog1 = (String) cb.getSelectedItem(); - // 根据选中的项目设置相应的分类代码 - if(catalog1.equals("全部")) - catalog=0; - else if(catalog1.equals("已入库")) - catalog=1; - else if(catalog1.equals("待入库")) - catalog=2; - else if(catalog1.equals("已取消")) - catalog=3; - - // 根据分类代码执行查找操作 - resultOfFindStatus(catalog); - - } - - } - - // 设置按钮组件的可见性 - public void OrderView() { - // 设置返回按钮为可见 - backBtn.setVisible(true); - // 设置详情按钮为可见 - detailBtn.setVisible(true); - // 设置更新按钮为可见 - updateBtn.setVisible(true); - // 设置删除按钮为可见 - deleteBtn.setVisible(true); - // 设置添加按钮为不可见 - addBtn.setVisible(false); - // 设置历史按钮为不可见 - historyBtn.setVisible(false); - } - - // 根据订单编号查询结果,并更新界面 - public void resultOfNumber(String iNumber) { - // 重置标记 - this.mark=0; - // 创建InOrderTM对象,用于处理订单数据 - InOrderTM inOrderTM = new InOrderTM(); - // 根据订单编号查询结果 - inOrderTM.resultOfNumber(iNumber); - // 设置表格模型为查询结果 - inTable.setModel(inOrderTM); - // 清除底部左侧面板的内容 - bottomPanelLeft.removeAll(); - // 创建一个标签,显示记录总数 - countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel); - // 更新按钮组件的可见性 - OrderView(); - } - - - // 根据状态分类代码查询订单,并更新界面 - public void resultOfFindStatus(int catalog) { - // 重置标记 - this.mark=0; - // 创建InOrderTM对象,用于处理订单数据 - InOrderTM inOrderTM = new InOrderTM(); - // 根据分类代码查询订单 - inOrderTM.resultOfFind(catalog); - // 设置表格模型为查询结果 - inTable.setModel(inOrderTM); - // 清除底部左侧面板的内容 - bottomPanelLeft.removeAll(); - // 创建一个标签,显示记录总数 - countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel); - // 更新按钮组件的可见性 - OrderView(); - } - - // 刷新缓冲区数据,并更新界面 - public void refreshBuffer(Vector v) { - // 设置标记为1,表示刷新操作 - this.mark=1; - // 创建InTableModel对象,使用传入的Vector作为数据源 - InTableModel inTableModel = new InTableModel(v); - // 设置表格模型为新的数据模型 - inTable.setModel(inTableModel); - // 清除底部左侧面板的内容 - bottomPanelLeft.removeAll(); - // 创建一个标签,显示商品种类和总价信息 - countInfoLabel = new JLabel("商品种类:"+inTableModel.getRowCount()+",总价:"+inTableModel.getAllPrice()); - // 将标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel); - // 设置按钮的可见性 - backBtn.setVisible(false); - detailBtn.setVisible(false); - historyBtn.setVisible(true); - updateBtn.setVisible(true); - addBtn.setVisible(true); - deleteBtn.setVisible(true); - - // 更新总价和记录数 - allPrice = inTableModel.getAllPrice(); - row = inTableModel.getRowCount(); - } - - // 调出所有进货订单记录,并更新界面 - public void InOrderRecord() { - // 重置标记 - this.mark=0; - // 创建InOrderTM对象,用于处理订单数据 - InOrderTM inOrderTM = new InOrderTM(); - // 获取所有进货订单记录 - inOrderTM.allInOrderRecord(); - // 设置表格模型为所有订单记录 - inTable.setModel(inOrderTM); - // 清除底部左侧面板的内容 - bottomPanelLeft.removeAll(); - // 创建一个标签,显示记录总数 - countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel); - // 更新按钮组件的可见性 - OrderView(); - } - - // 根据订单编号查询进货记录,并更新界面 - public void InRecord(String iNumber) { - // 设置标记为2,表示按订单编号查询 - this.mark=2; - // 创建InRecordTM对象,使用订单编号作为查询条件 - InRecordTM inRecordTM = new InRecordTM(iNumber); - // 查询进货记录 - inRecordTM.findInRecordByINumber(); - // 设置表格模型为查询结果 - inTable.setModel(inRecordTM); - // 清除底部左侧面板的内容 - bottomPanelLeft.removeAll(); - // 创建一个标签,显示订单号和记录总数 - countInfoLabel = new JLabel("订单号@"+iNumber+"共有"+inRecordTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 - bottomPanelLeft.add(countInfoLabel); - // 更新按钮的可见性 - backBtn.setVisible(true); - detailBtn.setVisible(false); - updateBtn.setVisible(false); - addBtn.setVisible(false); - historyBtn.setVisible(false); - deleteBtn.setVisible(false); - } - - - - - - - /*按钮监听时间*/ - @Override - public void actionPerformed(ActionEvent e) { - // 创建购物车实例 - BufferImpl = new BufferImpl();/*获得购物车*/ - // 获取事件源对象 - Object source = e.getSource(); - - // 如果事件源是搜索按钮 - if(searchBtn==source) { - // 从搜索文本框中获取订单号 - String number = nameSearchTF.getText(); - // 打印搜索后的订单号 - System.out.println("搜索后的订单:"+number); - // 根据订单号进行搜索并处理结果 - resultOfNumber(number); - } - - // 如果事件源是添加按钮 - else if(addBtn==source) { - // 创建添加对话框实例,并传入窗口框架、向量数据、用户信息 - InDialog outDialog = new InDialog(jFrame,v,user); - // 设置对话框为可见 - outDialog.setVisible(true); - // 获取对话框返回的向量数据 - v=outDialog.getVector(); - // 刷新购物车数据 - refreshBuffer(v); - - } - - - else if(updateBtn==source) { /*更新*/ - // 打印当前操作标记值 - System.out.println("mark="+mark); - // 获取表格中被选中的行索引 - int rowIndex = inTable.getSelectedRow(); - // 如果没有行被选中,弹出提示对话框并返回 - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); - return; - } - // 如果标记值为1,表示当前操作是进货表修改 - if(mark==1) { - // 从选中的行中获取ID - String id =(String) inTable.getValueAt(rowIndex,0); - // 创建修改数量的对话框实例,并传入相关参数 - ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"In",v); - // 设置对话框为可见 - changesumDialog.setVisible(true); - // 获取对话框返回的向量数据 - v = changesumDialog.getVector(); - // 打印更改状态后向量的大小 - System.out.println("更改状态后v.size="+v.size()); - // 刷新缓冲区数据 - refreshBuffer(v); - } - - //inOrder修改,修改状态 - else if(mark==0) { - // 从选中的行中获取订单编号 - String iNumber =(String) inTable.getValueAt(rowIndex,0); - // 从选中的行中获取订单状态 - String status =(String) inTable.getValueAt(rowIndex,4); - // 如果订单状态为"已入库",则弹出提示信息并返回 - if(status.equals("已入库")) { - JOptionPane.showMessageDialog(this,"订单上的货物已入库无法修改状态","提示",JOptionPane.INFORMATION_MESSAGE); - return; - } - - // 创建修改状态对话框实例,并传入相关参数 - ChangeStatusDialog changeStatusDialog = new ChangeStatusDialog(jFrame,iNumber,status); - // 设置对话框为可见 - changeStatusDialog.setVisible(true); - // 刷新主界面提醒 - MainView.refreshRemind(); - // 刷新首页 - HomeView.refreshHome(); - // 重新加载订单记录 - InOrderRecord(); - } - - - } - - - else if(deleteBtn==source) { - // 获取表格中被选中的行索引 - int rowIndex = inTable.getSelectedRow(); - // 如果没有行被选中,弹出提示对话框并返回 - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条"); - return; - } - - /*删除进货表的*/ - if(mark==1) { - // 打印日志信息,表示将删除进货表中的记录 - System.out.println("删除进货表"); - // 从选中的行中获取记录的ID - String id =(String) inTable.getValueAt(rowIndex,0); - // 弹出确认对话框,询问用户是否删除指定ID的记录 - int select = JOptionPane.showConfirmDialog(this,"是否删除id为"+id+"的记录","提示",JOptionPane.YES_NO_OPTION); - // 如果用户选择"是",则执行删除操作 - if(select==JOptionPane.YES_OPTION) {/*选择是*/ - // 遍历向量v,寻找匹配的ID进行删除 - for(int i =0;i(); - refreshBuffer(v); - // 刷新主界面提醒 - MainView.refreshRemind(); - // 弹出提示对话框,显示邮件发送成功和订单信息 - JOptionPane.showConfirmDialog(null,"发送邮件成功\r\n订单号:"+s[0]+"\r\n负责人:"+uname, "提示", JOptionPane.YES_OPTION); - - } - - - } - - }else if(exitBtn==source) { - // 弹出确认对话框,询问是否退出并清空购物车 - int res = JOptionPane.showConfirmDialog(null,"确定退出并清空购物车吗", "结账", JOptionPane.YES_NO_OPTION); - if(res==JOptionPane.YES_OPTION)/*如果退出*/{ - // 将购物车数组置空并刷新缓冲区 - v=new Vector();/*将数组置空*/ - refreshBuffer(v); - // 弹出提示对话框,显示退出成功 - JOptionPane.showConfirmDialog(null,"退出成功", "提示", JOptionPane.PLAIN_MESSAGE); - } - - } - } - } diff --git a/branch_zyx/MainView.java b/branch_zyx/MainView.java deleted file mode 100644 index af24167..0000000 --- a/branch_zyx/MainView.java +++ /dev/null @@ -1,702 +0,0 @@ -package com.lingnan.supermarket.view; // 定义包名,所有视图相关的类都在这个包下 - -import java.awt.event.ActionEvent; // 导入ActionEvent类,用于监听动作事件 -import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现动作事件监听 -import java.awt.event.MouseEvent; // 导入MouseEvent类,用于监听鼠标事件 -import java.awt.event.MouseListener; // 导入MouseListener接口,用于实现鼠标事件监听 -import java.awt.event.WindowEvent; // 导入WindowEvent类,用于监听窗口事件 -import java.awt.event.WindowListener; // 导入WindowListener接口,用于实现窗口事件监听 -import java.io.File; // 导入File类,用于文件操作 -import java.io.IOException; // 导入IOException类,用于处理输入输出异常 -import java.util.Date; // 导入Date类,用于处理日期 -import java.util.Random; // 导入Random类,用于生成随机数 -import java.util.Vector; // 导入Vector类,用于实现动态数组 - -import javax.imageio.ImageIO; // 导入ImageIO类,用于图像输入输出 -import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 -import javax.swing.JButton; // 导入JButton类,用于创建按钮 -import javax.swing.JLabel; // 导入JLabel类,用于创建标签 -import javax.swing.JMenu; // 导入JMenu类,用于创建菜单 -import javax.swing.JMenuBar; // 导入JMenuBar类,用于创建菜单栏 -import javax.swing.JMenuItem; // 导入JMenuItem类,用于创建菜单项 -import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 -import javax.swing.JPanel; // 导入JPanel类,用于创建面板 -import javax.swing.JSplitPane; // 导入JSplitPane类,用于创建分隔面板 -import javax.swing.Timer; // 导入Timer类,用于实现定时器 - -import com.lingnan.supermarket.componet.BGPanel; // 导入自定义的BGPanel类 -import com.lingnan.supermarket.dao.impl.BufferImpl; // 导入BufferImpl类,可能是数据访问层的实现 -import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; // 导入inOrderServiceImpl类,可能是订单服务的实现 -import com.lingnan.supermarket.dialog.CloseDialog; // 导入CloseDialog类,可能是关闭对话框 -import com.lingnan.supermarket.dialog.InDialog; // 导入InDialog类,可能是入库对话框 -import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类,可能是用户对话框 -import com.lingnan.supermarket.dialog.UserInfDialog; // 导入UserInfDialog类,可能是用户信息对话框 -import com.lingnan.supermarket.dto.InOrder; // 导入InOrder类,可能是订单数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入Production类,可能是产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User类,可能是用户数据传输对象 -import com.lingnan.supermarket.utils.DateUtil; // 导入DateUtil类,可能是日期工具类 -import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,可能是字体工具类 -import com.lingnan.supermarket.view.base.BaseView; // 导入BaseView类,可能是视图基类 - -import java.awt.*; // 导入awt包中的所有类 - -// 主视图类,继承自BaseView,并实现多个事件监听接口 -public class MainView extends BaseView implements ActionListener, MouseListener,WindowListener{ - - - JMenuBar menuBar; // 声明菜单栏变量 - JMenu settingMenu,helpMenu; // 声明设置菜单和帮助菜单变量 - - JMenuItem skinMenuItem,configMenuItem; // 声明皮肤菜单项和配置菜单项变量 - - - JSplitPane containerPanel; // 声明分隔面板变量,用于左右布局 - - CardLayout rightPanelLayout; // 声明卡片布局管理器变量,用于右侧面板 - JPanel leftPanel,rightPanel; // 声明左侧和右侧面板变量 - - /*菜单栏组件*/ - JLabel logoLabel,userMenuLabel1,homeMenuLabel,userMenuLabel,inMenuLabel, - outMenuLabel,storageMenuLabel,supplierMenuLabel,catalogMenuLabel; - // 声明菜单栏中各个标签的变量 - - static JLabel remindMenuLabel;/*声明静态标签变量,用于全局调用刷新*/ - - JPanel bottomPanel; // 声明底部面板变量 - - JLabel timeLabel; // 声明时间标签变量 - - JPanel purposePanel,timePanel; // 声明目的面板和时间面板变量 - JLabel purposeLabel; // 声明目的标签变量 - - - JButton saveBtn,unSaveBtn,cancleBtn;/*退出时按钮*/ - - // - Timer timer; // 声明定时器变量,用于执行周期性任务 - - private User user ;/*从登录界面传过来的用户信息,用于当前视图的用户上下文*/ - - private BufferImpl bufferImpl; // 声明BufferImpl对象,可能是用于缓存处理的实现 - - private Image bgImage ; // 声明背景图片变量 - private String iconSkin; // 声明图标皮肤路径变量 - private int skin; // 声明皮肤编号变量 - - private Vector vP=new Vector() ;/*用于进货缓存,存储产品信息*/ - - private int location; // 声明位置变量,可能用于记录当前视图的状态或位置 - - private int sSuper=-1;//界面权限,用于标识用户权限级别 - - private static inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 声明并实例化订单服务实现类 - - private static int unConfirmmark;/*未确认订单的数量*/ - - // 构造方法,接收用户信息、皮肤编号和图标皮肤路径 - public MainView(User user,int skin,String iconSkin) { - - super(1300,850,"新民超市管理系统欢迎您",user,skin); // 调用父类构造方法,设置窗口大小、标题、用户信息和皮肤 - timer = new Timer(1000,this); // 创建定时器,每1000毫秒执行一次 - timer.start(); // 启动定时器 - this.user = user; // 保存用户信息到当前视图 - this.sSuper=user.getUsuper();//界面权限,从用户信息中获取权限级别 - System.out.println("userid="+user.getId()); // 打印用户ID - this.addWindowListener(this); // 为当前窗口添加窗口事件监听器 - this.skin = skin; // 保存皮肤编号 - this.iconSkin = iconSkin; // 保存图标皮肤路径 - ImageIcon icon=new ImageIcon(iconSkin); // 创建ImageIcon对象,加载图标皮肤 - this.setIconImage(icon.getImage()); // 设置窗口图标 - // 获得未进货的信息 - Vector vInOrder; - vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找未确认的订单 - unConfirmmark=vInOrder.size(); // 设置未确认订单的数量 - initView(user,skin); // 初始化视图 - } - - // 另一个构造方法,只接收用户信息 - public MainView(User user) { - super(1300,850,"新民超市管理系统欢迎您"); // 调用父类构造方法,设置窗口大小和标题 - - timer = new Timer(1000,this); // 创建定时器,每1000毫秒执行一次 - - timer.start(); // 启动定时器 - - this.user = user; // 保存用户信息到当前视图 - - this.sSuper=user.getUsuper();//界面权限,从用户信息中获取权限级别 - - System.out.println("userid="+user.getId()); // 打印用户ID - - this.addWindowListener(this); // 为当前窗口添加窗口事件监听器 - // 获得未进货的信息 - Vector vInOrder; - - vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找未确认的订单 - - unConfirmmark=vInOrder.size(); // 设置未确认订单的数量 - - initView(user,skin); // 初始化视图,这里没有为skin赋值,可能会出错 - - } - - - public static void refreshRemind() { - Vector vInOrder; // 声明未确认订单的向量 - vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找所有未确认的订单 - unConfirmmark = vInOrder.size(); // 获取未确认订单的数量 - remindMenuLabel.setText("待确认进货:" + unConfirmmark); // 更新菜单标签,显示未确认订单的数量 - } - -// 以下是注释掉的代码,没有实现功能 -/* public static User getUserInf() { - return user; // 返回用户信息 -}*/ - - @Override - protected void initView(User user, int skin) { - // 初始化视图的方法,接收用户信息和皮肤编号 - - /*菜单栏*/ - menuBar = new JMenuBar(); // 创建菜单栏 - - settingMenu = new JMenu("设置"); // 创建设置菜单 - - helpMenu = new JMenu("帮助"); // 创建帮助菜单 - - skinMenuItem = new JMenuItem("随机切换皮肤", new ImageIcon("static\\icon\\skin.png")); // 创建切换皮肤的菜单项 - - /*for循环被注释掉了,没有实际作用 - for(int i = 3;i<9;i++) { - - }*/ - configMenuItem = new JMenuItem("参数设置", new ImageIcon("static\\icon\\setting.png")); // 创建参数设置的菜单项 - skinMenuItem.addActionListener(this); // 为切换皮肤菜单项添加动作监听器 - - settingMenu.add(configMenuItem); // 将参数设置菜单项添加到设置菜单 - settingMenu.add(skinMenuItem); // 将切换皮肤菜单项添加到设置菜单 - menuBar.add(settingMenu); // 将设置菜单添加到菜单栏 - menuBar.add(helpMenu); // 将帮助菜单添加到菜单栏 - - setJMenuBar(menuBar); // 将菜单栏设置到当前窗口 - - /*左边菜单栏设置*/ - try { - bgImage = ImageIO.read(new File("static\\bg\\bg" + skin + ".jpg")); // 读取背景图片 - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); // 打印异常堆栈信息 - - } - - leftPanel = new BGPanel(bgImage); /*皮肤*/ // 创建带有背景的左边面板 - leftPanel.setLayout(null); // 设置左边面板布局为空,即绝对布局 - - /*菜单栏:用户登录信息*/ - System.out.println("用户头像地址==" + user.getImg()); // 打印用户头像地址 - JLabel logoLabel = new JLabel(new ImageIcon(user.getImg()), JLabel.LEFT); // 创建用户头像标签 - System.out.println(user.getImg()); // 再次打印用户头像地址 - leftPanel.add(logoLabel); // 将用户头像标签添加到左边面板 - logoLabel.setBounds(25, 30, 150, 150); // 设置用户头像标签的位置和大小 - - /*账号名字*/ - String x = UsuperIcon(user.getUsuper()); /*判断权限返回icon地址*/ // 根据用户权限返回相应的图标地址 - - System.out.println("身份地址:" + x); // 打印身份图标地址 - - userMenuLabel1 = new JLabel("|" + user.getUsername() + "|" + user.getRname(), new ImageIcon(x), JLabel.LEFT); // 创建用户信息标签 - - userMenuLabel1.setFont(FontUtil.userFont); // 设置用户信息标签的字体 - - userMenuLabel1.addMouseListener(this); // 为用户信息标签添加鼠标监听器 - - userMenuLabel1.setBounds(20, 170, 180, 32); // 设置用户信息标签的位置和大小 - - userMenuLabel1.setForeground(Color.white); // 设置用户信息标签的前景色为白色 - - leftPanel.add(userMenuLabel1); /*添加用户选项到菜单栏*/ // 将用户信息标签添加到左边面板 - - - - - /*菜单栏:首页*/ - homeMenuLabel = new JLabel("新民首页", new ImageIcon("static\\icon\\home1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示首页菜单 - homeMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - homeMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - homeMenuLabel.setBounds(20, 250, 150, 32); // 设置菜单标签的位置和大小 - homeMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(homeMenuLabel); // 将首页菜单标签添加到左侧面板 - - /*菜单栏:人员管理*/ - userMenuLabel = new JLabel("人员管理", new ImageIcon("static\\icon\\user1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示人员管理菜单 - userMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - userMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - userMenuLabel.setBounds(20, 300, 150, 32); // 设置菜单标签的位置和大小 - userMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(userMenuLabel); // 将人员管理菜单标签添加到左侧面板 - - /*菜单栏:进货系统*/ - inMenuLabel = new JLabel("进货系统", new ImageIcon("static\\icon\\in1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示进货系统菜单 - inMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - inMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - inMenuLabel.setBounds(20, 350, 150, 32); // 设置菜单标签的位置和大小 - inMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(inMenuLabel); // 将进货系统菜单标签添加到左侧面板 - - /*菜单栏:收银系统*/ - outMenuLabel = new JLabel("收银系统", new ImageIcon("static\\icon\\out1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示收银系统菜单 - outMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - outMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - outMenuLabel.setBounds(20, 400, 150, 32); // 设置菜单标签的位置和大小 - outMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(outMenuLabel); // 将收银系统菜单标签添加到左侧面板 - - /*菜单栏:库存*/ - storageMenuLabel = new JLabel("商品库存", new ImageIcon("static\\icon\\storage1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品库存菜单 - storageMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - storageMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - storageMenuLabel.setBounds(20, 450, 150, 32); // 设置菜单标签的位置和大小 - storageMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(storageMenuLabel); // 将商品库存菜单标签添加到左侧面板 - - /*菜单栏:供应商*/ - supplierMenuLabel = new JLabel("供应商", new ImageIcon("static\\icon\\supplier1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示供应商菜单 - supplierMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - supplierMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - supplierMenuLabel.setBounds(20, 500, 150, 32); // 设置菜单标签的位置和大小 - supplierMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(supplierMenuLabel); // 将供应商菜单标签添加到左侧面板 - - /*菜单栏:商品目录*/ - catalogMenuLabel = new JLabel("商品目录", new ImageIcon("static\\icon\\catalog1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品目录菜单 - catalogMenuLabel.setFont(FontUtil.menuFont); // 设置菜单标签的字体样式 - catalogMenuLabel.addMouseListener(this); // 为菜单标签添加鼠标事件监听器 - catalogMenuLabel.setBounds(20, 550, 150, 32); // 设置菜单标签的位置和大小 - catalogMenuLabel.setForeground(Color.white); // 设置菜单标签的前景色为白色 - leftPanel.add(catalogMenuLabel); // 将商品目录菜单标签添加到左侧面板 - - - /*提醒进货确认模块*/ - remindMenuLabel = new JLabel("待确认进货:"+unConfirmmark, new ImageIcon("static\\icon\\remind1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于显示待确认进货的数量 - remindMenuLabel.setFont(FontUtil.remindFont); // 设置提醒菜单标签的字体样式 - remindMenuLabel.addMouseListener(this); // 为提醒菜单标签添加鼠标事件监听器 - remindMenuLabel.setBounds(0, 650, 200, 32); // 设置提醒菜单标签的位置和大小 - remindMenuLabel.setForeground(Color.white); // 设置提醒菜单标签的前景色为白色 - leftPanel.add(remindMenuLabel); // 将提醒菜单标签添加到左侧面板 - -// 设置右侧面板的布局管理器为卡片布局 - rightPanelLayout = new CardLayout(); - -// 0.超市首页展示,创建并实例化首页视图面板 - JPanel homePanel = new HomeView(this); - -// 1.用户管理界面:用户的列表,创建并实例化用户管理视图面板 - JPanel userPanel = new UserView(this); - -// 2.进货系统界面,创建并实例化进货系统视图面板 - JPanel inPanel = new InView(this, user, vP, 1); - -// 3.收银系统界面,创建并实例化收银系统视图面板 - JPanel outPanel = new OutView(this, user); - -// 4.库存系统界面,创建并实例化库存系统视图面板 - JPanel storagePanel = new StorageView(this); - -// 5.供应商界面,创建并实例化供应商视图面板 - JPanel supplierPanel = new SupplierView(this); - -// 6.商品目录界面,创建并实例化商品目录视图面板 - JPanel ProdCatalogPanel = new ProdCatalogView(this); - -// 7.超市总览界面,创建并实例化超市总览视图面板 - JPanel superPanel = new SuperView(this); - -// 8.进货信息提示界面,创建并实例化进货信息提示视图面板 - JPanel inPanel2 = new InView(this, user, vP, 0); - -// 创建右侧面板并设置布局管理器为之前定义的卡片布局 - rightPanel = new JPanel(rightPanelLayout); - rightPanel.add(homePanel, "0"); // 添加首页视图面板并设置其索引为"0" - rightPanel.add(userPanel, "1"); // 添加用户管理视图面板并设置其索引为"1" - rightPanel.add(inPanel, "2"); // 添加进货系统视图面板并设置其索引为"2" - rightPanel.add(outPanel, "3"); // 添加收银系统视图面板并设置其索引为"3" - rightPanel.add(storagePanel, "4"); // 添加库存系统视图面板并设置其索引为"4" - rightPanel.add(supplierPanel, "5"); // 添加供应商视图面板并设置其索引为"5" - rightPanel.add(ProdCatalogPanel, "6"); // 添加商品目录视图面板并设置其索引为"6" - rightPanel.add(superPanel, "7"); // 添加超市总览视图面板并设置其索引为"7" - rightPanel.add(inPanel2, "8"); // 添加进货信息提示视图面板并设置其索引为"8" - -// 创建一个分割面板,将左侧面板和右侧面板水平分割 - containerPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel); - containerPanel.setDividerLocation(180); // 设置分割线的位置 - containerPanel.setDividerSize(0); // 设置分割线的尺寸为0,即隐藏分割线 - -// 创建底部面板,默认使用流式布局 - bottomPanel = new JPanel(); - bottomPanel.setBackground(Color.WHITE); // 设置底部面板的背景色为白色 - bottomPanel.setLayout(new BorderLayout()); // 设置底部面板的布局管理器为边界布局 - -// 创建目的地区面板,用于显示当前位置信息 - purposePanel = new JPanel(); - purposePanel.setLayout(new FlowLayout(FlowLayout.LEFT)); // 设置目的地区面板的布局管理器为左对齐的流式布局 - purposePanel.setBackground(Color.WHITE); // 设置目的地区面板的背景色为白色 - purposeLabel = new JLabel("当前位置是:超市首页"); // 创建标签显示当前位置信息 - purposePanel.add(purposeLabel); // 将位置信息标签添加到目的地区面板 - - - // 创建一个新的 JPanel 实例用于显示时间 - timePanel=new JPanel(); -// 设置 timePanel 的布局为 FlowLayout,并指定元素靠右对齐 - timePanel.setLayout(new FlowLayout(FlowLayout.TRAILING)); -// 设置 timePanel 的背景颜色为白色 - timePanel.setBackground(Color.WHITE); -// 创建一个新的 JLabel 实例,显示当前日期和时间,使用 DateUtil 工具类进行格式化 - timeLabel = new JLabel(DateUtil.dateToString(new Date(),null)); -// 将 timeLabel 添加到 timePanel 中 - timePanel.add(timeLabel); -// 将 purposePanel 添加到 bottomPanel 的西边(West) - bottomPanel.add(purposePanel,"West"); -// 将 timePanel 添加到 bottomPanel 的东边(East) - bottomPanel.add(timePanel,"East"); -// 获取当前窗口的内容窗格 - Container container = getContentPane(); -// 将 containerPanel 添加到内容窗格的中心(Center) - container.add(containerPanel,"Center"); -// 将 bottomPanel 添加到内容窗格的南边(South) - container.add(bottomPanel,"South"); - - } - - @Override - // 定义当触发动作事件时的处理方法 - public void actionPerformed(ActionEvent e) { - // 获取触发事件的源对象 - Object source = e.getSource(); - // 更新时间标签以显示当前时间 - timeLabel.setText(DateUtil.dateToString(new Date(),null)); - // 检查事件源是否为皮肤菜单项,如果是则进行换肤操作 - if(source==skinMenuItem)/*换肤*/{ - // 打印换肤操作信息到控制台 - System.out.println("切换皮肤"); - // 创建一个新的随机数生成器实例 - Random random=new Random(); - // 生成一个0到9之间的随机数作为皮肤编号 - skin=random.nextInt(10); - // 销毁当前窗口 - this.dispose(); - // 创建并显示一个新的主视图窗口,传入用户信息、皮肤编号和图标皮肤 - new MainView(user,skin,iconSkin); - - } - - } - - @Override/*左侧菜单栏点击事件*/ - // 定义当鼠标点击事件发生时的处理方法 - public void mouseClicked(MouseEvent e) { - // 获取触发事件的源对象 - Object source = e.getSource(); - // 检查事件源是否为首页菜单标签,如果是则显示对应的面板 - if(source==homeMenuLabel) { - rightPanelLayout.show(rightPanel,"0"); // 显示首页面板 - location=0; // 更新当前位置索引为0 - } - // 检查事件源是否为用户菜单标签,根据权限显示不同面板 - else if(source==userMenuLabel) { - if(sSuper==0) // 如果权限为0 - rightPanelLayout.show(rightPanel,"1"); // 显示用户面板1 - else{ // 如果权限不为0 - rightPanelLayout.show(rightPanel,"7"); // 显示用户面板7 - } - location=1; // 更新当前位置索引为1 - } - // 检查事件源是否为入库菜单标签,根据权限显示不同面板 - else if(source==inMenuLabel) { - if(sSuper==2) // 如果权限为2 - rightPanelLayout.show(rightPanel,"7"); // 显示面板7 - else{ // 如果权限不为2 - rightPanelLayout.show(rightPanel,"2"); // 显示入库面板 - } - location=2; // 更新当前位置索引为2 - } - // 检查事件源是否为出库菜单标签,如果是则显示对应的面板 - else if(source==outMenuLabel) { - rightPanelLayout.show(rightPanel,"3"); // 显示出库面板 - location=3; // 更新当前位置索引为3 - } - // 检查事件源是否为库存菜单标签,如果是则显示对应的面板 - else if(source==storageMenuLabel) { - rightPanelLayout.show(rightPanel,"4"); // 显示库存面板 - location=4; // 更新当前位置索引为4 - } - // 检查事件源是否为供应商菜单标签,如果是则显示对应的面板 - else if(source==supplierMenuLabel) { - rightPanelLayout.show(rightPanel,"5"); // 显示供应商面板 - location=5; // 更新当前位置索引为5 - } - // 检查事件源是否为目录菜单标签,如果是则显示对应的面板 - else if(source==catalogMenuLabel) { - rightPanelLayout.show(rightPanel,"6"); // 显示目录面板 - location=6; // 更新当前位置索引为6 - } - // 检查事件源是否为提醒菜单标签,根据权限显示不同面板 - else if(source==remindMenuLabel) { - if(sSuper==2) // 如果权限为2 - rightPanelLayout.show(rightPanel,"7"); // 显示面板7 - else{ // 如果权限不为2 - rightPanelLayout.show(rightPanel,"8"); // 显示提醒面板 - } - location=7; // 更新当前位置索引为7 - } - // 检查事件源是否为用户信息菜单标签1,如果是则显示用户信息对话框 - else if(source==userMenuLabel1){ - UserInfDialog userInfDialog = new UserInfDialog(this,user); // 创建用户信息对话框 - userInfDialog.setVisible(true); // 显示用户信息对话框 - location=8; // 更新当前位置索引为8 - } - - // 调用refreshRemove方法,可能用于刷新界面或执行其他操作 - refreshRemove(); - } - - //获取当前位置 - // 定义一个方法用于刷新和移除面板内容 - public void refreshRemove(){ - - // 从目的面板中移除所有组件 - purposePanel.removeAll(); - - // 根据当前的位置索引设置不同的目的标签文本 - if(location==0){ - purposeLabel = new JLabel("当前位置是:"+homeMenuLabel.getText()); // 设置当前位置为首页 - } - else if(location==1){ - purposeLabel = new JLabel("当前位置是:"+userMenuLabel.getText()); // 设置当前位置为用户菜单 - } - else if(location==2){ - purposeLabel = new JLabel("当前位置是:"+inMenuLabel.getText()); // 设置当前位置为入库菜单 - } - else if(location==3){ - purposeLabel = new JLabel("当前位置是:"+outMenuLabel.getText()); // 设置当前位置为出库菜单 - } - else if(location==4){ - purposeLabel = new JLabel("当前位置是:"+storageMenuLabel.getText()); // 设置当前位置为库存菜单 - } - else if(location==5){ - purposeLabel = new JLabel("当前位置是:"+supplierMenuLabel.getText()); // 设置当前位置为供应商菜单 - } - else{ - purposeLabel = new JLabel("当前位置是:"+catalogMenuLabel.getText()); // 设置当前位置为目录菜单 - } - - // 将新的目的标签添加到目的面板 - purposePanel.add(purposeLabel); - - // 可能需要调用重新绘制界面或更新界面显示的方法,但这里没有显示出来 - } - - - @Override - public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseReleased(MouseEvent e) { - // TODO Auto-generated method stub - - } - - @Override/*鼠标焦点时*/ - // 重写鼠标进入组件事件的处理方法 - public void mouseEntered(MouseEvent e) { - // 获取触发事件的源对象 - Object source = e.getSource(); - - // 如果事件源是首页菜单标签,则改变前景色和图标 - if(source==homeMenuLabel) { - homeMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是用户菜单标签,则改变前景色和图标 - if(source==userMenuLabel) { - userMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - userMenuLabel.setIcon(new ImageIcon("static\\icon\\user2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是入库菜单标签,则改变前景色和图标 - else if(source==inMenuLabel) { - inMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - inMenuLabel.setIcon(new ImageIcon("static\\icon\\in2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是出库菜单标签,则改变前景色和图标 - else if(source==outMenuLabel) { - outMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - outMenuLabel.setIcon(new ImageIcon("static\\icon\\out2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是库存菜单标签,则改变前景色和图标 - else if(source==storageMenuLabel) { - storageMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是供应商菜单标签,则改变前景色和图标 - else if(source==supplierMenuLabel) { - supplierMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是目录菜单标签,则改变前景色和图标 - else if(source==catalogMenuLabel) { - catalogMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog2.png")); // 设置鼠标进入时的图标 - } - - // 如果事件源是用户菜单标签1,则改变前景色 - else if(source==userMenuLabel1) { - userMenuLabel1.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 - // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标进入图标 - } - // 方法结束,没有设置图标的变化,只是改变了前景色 - } - - - @Override - // 重写鼠标离开组件事件的处理方法 - public void mouseExited(MouseEvent e) { - // 获取触发事件的源对象 - Object source = e.getSource(); - - // 如果事件源是首页菜单标签,则恢复前景色和图标 - if(source==homeMenuLabel) { - homeMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是用户菜单标签,则恢复前景色和图标 - else if(source==userMenuLabel) { - userMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - userMenuLabel.setIcon(new ImageIcon("static\\icon\\user1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是入库菜单标签,则恢复前景色和图标 - else if(source==inMenuLabel) { - inMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - inMenuLabel.setIcon(new ImageIcon("static\\icon\\in1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是出库菜单标签,则恢复前景色和图标 - else if(source==outMenuLabel) { - outMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - outMenuLabel.setIcon(new ImageIcon("static\\icon\\out1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是库存菜单标签,则恢复前景色和图标 - else if(source==storageMenuLabel) { - storageMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - storageMenuLabel.setIcon(new ImageIcon("static\\icon\\storage1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是供应商菜单标签,则恢复前景色和图标 - else if(source==supplierMenuLabel) { - supplierMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源是目录菜单标签,则恢复前景色和图标 - else if(source==catalogMenuLabel) { - catalogMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog1.png")); // 设置鼠标离开时的默认图标 - } - - // 如果事件源不是上述任何一个标签,则默认处理用户菜单标签1 - else { - userMenuLabel1.setForeground(Color.white); // 恢复前景色为白色 - // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标离开图标 - } - // 方法结束,所有菜单标签的前景色和图标已根据鼠标离开事件进行了相应的恢复 - } - - - - @Override - protected void initView() { - // TODO Auto-generated method stub - - } - - @Override - public void windowOpened(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - // 重写窗口关闭事件的处理方法 - public void windowClosing(WindowEvent e) { - // TODO Auto-generated method stub - // 获取触发事件的源对象 - Object source = e.getSource(); - - // 如果事件源是当前窗口对象,执行以下操作 - if(source==this) { - // 关闭窗口时检查进货系统和出货系统是否还有记录 - this.vP =InView.getVector(); // 获取进货系统的记录向量 - System.out.println("v的size="+vP.size()); // 打印进货系统记录的数量 - bufferImpl = new BufferImpl(); // 创建缓冲区实现对象 - - // 如果进货系统的购物车还有记录或者出货系统的缓冲区还有记录 - if(vP.size()!=0||bufferImpl.allOutBuffer().size()!=0) { - // 如果购物车还有记录,则显示关闭确认对话框 - CloseDialog closeDialog = new CloseDialog(this,vP); // 创建关闭对话框 - closeDialog.setVisible(true); // 显示关闭对话框 - } else { - // 如果没有记录,则直接退出程序 - System.exit(0); // 安全退出程序 - } - } - // 方法结束,窗口关闭事件已处理 - } - - - @Override - public void windowClosed(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowIconified(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowDeiconified(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowActivated(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowDeactivated(WindowEvent e) { - // TODO Auto-generated method stub - - } - - - - - - - -} diff --git a/branch_zyx/ProdCatalog.java b/branch_zyx/ProdCatalog.java deleted file mode 100644 index 18fd506..0000000 --- a/branch_zyx/ProdCatalog.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.lingnan.supermarket.dto; // 声明当前类所在的包 - -// 定义产品目录类ProdCatalog -public class ProdCatalog { - private String id; // 产品目录ID - private String name; // 产品目录名称 - - // getId方法,用于获取产品目录ID - public String getId() { - return id; // 返回产品目录ID - } - // setId方法,用于设置产品目录ID - public void setId(String id) { - this.id = id; // 将参数id赋值给成员变量id - } - // getName方法,用于获取产品目录名称 - public String getName() { - return name; // 返回产品目录名称 - } - // setName方法,用于设置产品目录名称 - public void setName(String name) { - this.name = name; // 将参数name赋值给成员变量name - } - -} diff --git a/branch_zyx/ProdCatalogTM.java b/branch_zyx/ProdCatalogTM.java deleted file mode 100644 index 5552622..0000000 --- a/branch_zyx/ProdCatalogTM.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.lingnan.supermarket.table; // 声明当前类所在的包 - -import java.util.List; // 导入List接口,用于表示列表 -import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 - -import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 - -import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 -import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 -import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 - - - -public class ProdCatalogTM extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于产品目录的表格数据模型 - - private String [] columnName = {"类别id","类别名称","商品id","商品名称"}; // 定义列名数组,用于表格的列标题 - - private productionImpl prodDao = new productionImpl(); // 创建productionImpl实例,用于操作产品数据 - - private Vector prods; // 声明一个Vector,用于存储产品列表 - - public void all() { - // 查找全部数据 - prods = prodDao.findAllproduction(); // 调用findAllproduction方法,获取所有产品数据 - } - public void ById2(Production p) { - // 根据类别id查找数据 - prods = prodDao.findProductionById2(p.getId2()); // 调用findProductionById2方法,根据类别id获取产品数据 - } - - @Override - public int getRowCount() { - return prods.size(); // 返回产品列表的大小,即表格的行数 - } - - @Override - public int getColumnCount() { - return columnName.length; // 返回列名数组的长度,即表格的列数 - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - Production prod = prods.get(rowIndex); // 获取指定行的产品对象 - // 以下注释掉的是打印语句,用于调试 - /*System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - if(columnIndex==0) { - return prod.getId2(); // 返回类别id - }else if(columnIndex==1) { - return prod.getName2(); // 返回类别名称 - }else if(columnIndex==2) { - return prod.getId(); // 返回商品id - }else if(columnIndex==3) { - return prod.getName(); // 返回商品名称 - }else { - return null; // 如果列索引不匹配,返回null - } - } - - @Override - public String getColumnName(int column) { - return columnName[column]; // 返回指定列的列名 - } - - - -} diff --git a/branch_zyx/ProdCatalogView.java b/branch_zyx/ProdCatalogView.java deleted file mode 100644 index 6972c99..0000000 --- a/branch_zyx/ProdCatalogView.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 - -import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 -import java.awt.Color; // 导入Color类,用于定义颜色 -import java.awt.FlowLayout; // 导入FlowLayout布局管理器类 -import java.awt.event.ActionEvent; // 导入ActionEvent类,用于处理按钮点击等事件 -import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现事件监听 -import java.awt.event.ItemEvent; // 导入ItemEvent类,用于处理下拉框选择事件 -import java.awt.event.ItemListener; // 导入ItemListener接口,用于实现下拉框事件监听 -import java.util.ArrayList; // 导入ArrayList类,用于存储动态数组 - -import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 -import javax.swing.JButton; // 导入JButton类,用于创建按钮 -import javax.swing.JComboBox; // 导入JComboBox类,用于创建下拉框 -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口框架 -import javax.swing.JLabel; // 导入JLabel类,用于创建标签 -import javax.swing.JPanel; // 导入JPanel类,用于创建面板 -import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建滚动面板 -import javax.swing.JTable; // 导入JTable类,用于创建表格 -import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 - -import com.lingnan.supermarket.dao.impl.prodCatalogImpl; // 导入prodCatalogImpl类,用于操作商品目录数据 -import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类,用于显示用户对话框 -import com.lingnan.supermarket.dto.ProdCatalog; // 导入ProdCatalog类,用于表示商品目录数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入Production类,用于表示产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User类,用于表示用户数据传输对象 -import com.lingnan.supermarket.table.ProdCatalogTM; // 导入ProdCatalogTM类,用于表示商品目录表格模型 -import com.lingnan.supermarket.table.StorageTableModel; // 导入StorageTableModel类,用于表示库存表格模型 -import com.lingnan.supermarket.table.UserTableModel; // 导入UserTableModel类,用于表示用户表格模型 -import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,用于字体工具类 - -public class ProdCatalogView extends JPanel { // 定义ProdCatalogView类,继承自JPanel - - // 上面 - private JPanel toolBarPanel; // 工具栏面板 - - private JPanel searchPanel; // 搜索面板 - private JLabel logLabel, locationLabel; // 标签,用于显示文本 - private JTextField nameSearchTF; // 文本框,用于输入搜索内容 - private JButton searchBtn; // 搜索按钮 - - private JPanel opePanel; // 操作面板 - private JButton addBtn, updateBtn, deleteBtn; // 添加、更新、删除按钮 - - private String catalog = "0"; // 商品目录ID - private JComboBox combo; // 下拉框,用于选择商品目录 - private String log[]=null; // 商品目录名称数组 - private ArrayListalog=null; // 商品目录名称列表 - private ProdCatalogTM prodCatalogTM; // 商品目录表格模型 - private ProdCatalog pc; // 商品目录数据传输对象 - private prodCatalogImpl pci; // 商品目录数据操作实现类 - - // 中间 - private JScrollPane tableScrollPane; // 表格滚动面板 - private JTable prodCatalogTable; // 商品目录表格 - - // 下面 - private JPanel bottomPanel; // 底部面板 - private JLabel countInfoLabel; // 标签,用于显示记录总数 - - private JFrame jFrame; // 窗口框架 - - // 构造方法,接收一个JFrame参数 - public ProdCatalogView(JFrame jFrame) { - this.setLayout(new BorderLayout()); // 设置面板布局为BorderLayout - initView(); // 初始化视图 - this.jFrame = jFrame; // 保存传入的JFrame实例 - } - - - private void initView() { - // 初始化视图方法 - - toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout - - searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout - locationLabel = new JLabel("商品目录"); // 创建商品目录标签并设置文本 - locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 - locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 - logLabel = new JLabel("分类"); // 创建分类标签并设置文本 - nameSearchTF = new JTextField(10); // 创建文本框并设置大小 - - searchBtn = new JButton("搜索", new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标和文本 - - // 创建操作面板和按钮,并设置图标(注释部分,未使用) - // opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - // addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); - // updateBtn = new JButton(new ImageIcon("static\\icon\\update.png")); - // deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); - - // 为按钮添加事件监听(注释部分,未使用) - // addBtn.addActionListener(this); - // updateBtn.addActionListener(this); - // deleteBtn.addActionListener(this); - - // 将按钮添加到操作面板(注释部分,未使用) - // opePanel.add(addBtn); - // opePanel.add(updateBtn); - // opePanel.add(deleteBtn); - - pci=new prodCatalogImpl(); // 创建商品目录数据操作实现类实例 - this.alog=pci.findNameProdCatalog(); // 查找所有商品目录名称 - this.log=new String[alog.size()]; // 创建字符串数组以存储商品目录名称 - for(int i=0;i(log); // 创建下拉框并设置选项 - combo.addItemListener(new MyItemListener()); // 为下拉框添加事件监听器 - - searchPanel.add(locationLabel); // 将商品目录标签添加到搜索面板 - searchPanel.add(logLabel); // 将分类标签添加到搜索面板 - searchPanel.add(combo); // 将下拉框添加到搜索面板 - /* - * searchPanel.add(nameSearchTF); // 将文本框添加到搜索面板(注释部分,未使用) - * searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板(注释部分,未使用) - */ - - toolBarPanel.add(searchPanel, "West"); // 将搜索面板添加到工具栏面板的西边 - // toolBarPanel.add(opePanel, "East"); // 将操作面板添加到工具栏面板的东边(注释部分,未使用) - - // 中间表格 - prodCatalogTM = new ProdCatalogTM(); // 创建商品目录表格模型 - prodCatalogTM.all(); // 加载所有商品目录数据 - prodCatalogTable = new JTable(prodCatalogTM); // 创建表格并设置模型 - prodCatalogTable.setFont(FontUtil.tableFont); // 设置表格字体 - prodCatalogTable.setRowHeight(50); // 设置表格行高 - tableScrollPane = new JScrollPane(prodCatalogTable); // 创建滚动面板并添加表格 - - // 下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout - countInfoLabel = new JLabel("总共" + prodCatalogTable.getRowCount() + "条"); // 创建记录数标签并设置文本 - bottomPanel.add(countInfoLabel); // 将记录数标签添加到底部面板 - - this.add(toolBarPanel, "North"); // 将工具栏面板添加到面板的北边 - this.add(tableScrollPane, "Center"); /* 将表格放到中间 */ // 将表格滚动面板添加到面板的中间 - this.add(bottomPanel, "South"); // 将底部面板添加到面板的南边 - - setVisible(true); // 设置面板为可见 - - } - - -// @Override -// public void actionPerformed(ActionEvent e) { -// Object source = e.getSource(); -// if (addBtn == source) { // 如果事件源是添加按钮 -// UserDialog userDialog = new UserDialog(jFrame); // 创建用户对话框 -// userDialog.setVisible(true); // 设置用户对话框为可见 -// } else if (updateBtn == source) { // 如果事件源是更新按钮 -// // 更新按钮的事件处理代码(未实现) -// } else if (deleteBtn == source) { // 如果事件源是删除按钮 -// // 删除按钮的事件处理代码(未实现) - -// } - -// } - - public class MyItemListener implements ItemListener { // 创建一个内部类实现ItemListener接口 - - @Override - public void itemStateChanged(ItemEvent e) { // 重写itemStateChanged方法 - JComboBox cb = (JComboBox) e.getSource(); // 获取事件源下拉框 - String catalog1 = (String) cb.getSelectedItem(); // 获取选中的商品目录名称 - pci =new prodCatalogImpl(); // 创建商品目录数据操作实现类实例 - for(int i=0;ialog=null; // 用于存储类别信息的列表 - private ProdCatalogTM prodCatalogTM; // 产品目录表格模型 - private ProdCatalog pc; // 产品目录数据传输对象 - private prodCatalogImpl pci; // 产品目录服务实现类 - private JComboBox combo; // 下拉框组件 - private String id2; // 产品目录ID - private String name2; // 产品目录名称 - - // 下拉供应商类别相关变量 - private String superlier[]=null; // 用于存储供应商信息的数组 - private ArrayListasuperlier=null; // 用于存储供应商信息的列表 - private SupplierInf si; // 供应商信息数据传输对象 - private SupplierInfImpl sii; // 供应商信息服务实现类 - private JComboBox combo1; // 供应商下拉框组件 - private int supplyid; // 供应商ID - - private StorageView storageView; // 库存视图引用 - - private Production production; // 产品数据传输对象 - - - public ProductionDialog(JFrame parent) { // 构造函数,接收一个父窗口作为参数 - super(parent, "添加"); // 调用父类构造函数,设置对话框标题为"添加" - - setSize(350, 500); // 设置对话框大小 - - setLocationRelativeTo(null); // 设置对话框相对于屏幕居中 - - setModal(true); // 设置对话框为模态 - setResizable(false); // 设置对话框不可调整大小 - - this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 - - initView(); // 初始化视图 - } - - private void initView() { // 初始化视图的方法 - idPanel = new JPanel(); // 创建一个面板用于显示商品编号 - idLabel = new JLabel("商品编号"); // 创建一个标签显示"商品编号" - idTF = new JTextField(15); // 创建一个文本框用于输入商品编号,宽度为15 - idPanel.add(idLabel); // 将标签添加到面板 - idPanel.add(idTF); // 将文本框添加到面板 - - - namePanel = new JPanel(); // 创建一个面板用于显示名称 - nameLabel = new JLabel("名称"); // 创建一个标签显示"名称" - nameTF = new JTextField(15); // 创建一个文本框用于输入名称,宽度为15 - namePanel.add(nameLabel); // 将标签添加到面板 - namePanel.add(nameTF); // 将文本框添加到面板 - - - inpricePanel = new JPanel(); // 创建一个面板用于显示进货单价 - inpriceLabel = new JLabel("进货单价"); // 创建一个标签显示"进货单价" - inpriceTF = new JTextField(15); // 创建一个文本框用于输入进货单价,宽度为15 - inpricePanel.add(inpriceLabel); // 将标签添加到面板 - inpricePanel.add(inpriceTF); // 将文本框添加到面板 - - - outpricePanel = new JPanel(); // 创建一个面板用于显示购买单价 - outpriceLabel = new JLabel("购买单价"); // 创建一个标签显示"购买单价" - outpriceTF = new JTextField(15); // 创建一个文本框用于输入购买单价,宽度为15 - outpricePanel.add(outpriceLabel); // 将标签添加到面板 - outpricePanel.add(outpriceTF); // 将文本框添加到面板 - - - lifePanel = new JPanel(); // 创建一个面板用于显示保质期 - lifeLabel = new JLabel("保质期(月份数)"); // 创建一个标签显示"保质期(月份数)" - lifeTF = new JTextField(15); // 创建一个文本框用于输入保质期,宽度为15 - lifePanel.add(lifeLabel); // 将标签添加到面板 - lifePanel.add(lifeTF); // 将文本框添加到面板 - - - - sumPanel = new JPanel(); // 创建一个面板用于显示库存 - sumLabel = new JLabel("库存"); // 创建一个标签显示"库存" - sumTF = new JTextField(15); // 创建一个文本框用于输入库存数量,宽度为15 - sumPanel.add(sumLabel); // 将标签添加到面板 - sumPanel.add(sumTF); // 将文本框添加到面板 - -//供应商名下拉框 传递supplyid - supplyidPanel = new JPanel(); // 创建一个面板用于显示供应商信息 - supplyidLabel = new JLabel("供应商"); // 创建一个标签显示"供应商" -//supplyidTF = new JTextField(15); // 注释掉的代码,原本可能是用于输入供应商ID的文本框 - - sii=new SupplierInfImpl(); // 创建供应商信息服务的实例 - this.asuperlier=sii.findNameSupplier(); // 获取所有供应商名称的列表 - this.superlier=new String[asuperlier.size()]; // 创建一个字符串数组用于存储供应商名称 - for(int i=0;i(superlier); // 创建一个下拉框组件,用于选择供应商 - combo1.addItemListener(new MyItemListener1()); // 为下拉框添加项目监听器 - supplyidPanel.add(supplyidLabel); // 将标签添加到面板 - supplyidPanel.add(combo1); // 将下拉框添加到面板 - -/* id2Panel = new JPanel(); -id2Label = new JLabel("分类id"); -id2TF = new JTextField(id2,15); -id2Panel.add(id2Label); -id2Panel.add(id2TF);*/ -//类名下拉框 - name2Panel = new JPanel(); // 创建一个面板用于显示类名 - name2Label = new JLabel("类名"); // 创建一个标签显示"类名" - pci=new prodCatalogImpl(); // 创建产品目录服务的实例 - this.alog=pci.findNameProdCatalog(); // 获取所有产品目录名称的列表 - this.log=new String[alog.size()]; // 创建一个字符串数组用于存储产品目录名称 - for(int i=0;i(log); // 创建一个下拉框组件,用于选择产品目录 - combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 - name2Panel.add(name2Label); // 将标签添加到面板 - name2Panel.add(combo); // 将下拉框添加到面板 - - addressPanel = new JPanel(); // 创建一个面板用于显示地址 - addressLabel = new JLabel("地址"); // 创建一个标签显示"地址" - addressTF = new JTextField(15); // 创建一个文本框用于输入地址,宽度为15 - addressPanel.add(addressLabel); // 将标签添加到面板 - addressPanel.add(addressTF); // 将文本框添加到面板 - - contactPanel = new JPanel(); // 创建一个面板用于显示联系方式 - contactLabel = new JLabel("电话"); // 创建一个标签显示"电话" - contactTF = new JTextField(15); // 创建一个文本框用于输入电话,宽度为15 - contactPanel.add(contactLabel); // 将标签添加到面板 - contactPanel.add(contactTF); // 将文本框添加到面板 - - opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 - saveBtn = new JButton("保存"); // 创建一个保存按钮 - cancelBtn = new JButton("取消"); // 创建一个取消按钮 - saveBtn.addActionListener(this); // 为保存按钮添加动作监听器 - cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 - opePanel.add(saveBtn); // 将保存按钮添加到面板 - opePanel.add(cancelBtn); // 将取消按钮添加到面板 - - Container container = getContentPane(); // 获取对话框的内容面板 - container.add(idPanel); // 将商品编号面板添加到内容面板 - container.add(namePanel); // 将名称面板添加到内容面板 - container.add(inpricePanel); // 将进货单价面板添加到内容面板 - container.add(outpricePanel); // 将购买单价面板添加到内容面板 - container.add(lifePanel); // 将保质期面板添加到内容面板 - container.add(sumPanel); // 将库存面板添加到内容面板 - container.add(supplyidPanel); // 将供应商面板添加到内容面板 -//container.add(id2Panel); // 注释掉的代码,原本可能是用于添加分类ID面板 - container.add(name2Panel); // 将类名面板添加到内容面板 - container.add(opePanel); // 将操作按钮面板添加到内容面板 - - } - - @Override - public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 - Object source = e.getSource(); // 获取事件源 - if (source == saveBtn) { // 如果事件源是保存按钮 - // 思路获取数据 - // 保存到数据库 - // 关闭对话框 - // 刷新table - - String name = nameTF.getText(); // 获取名称文本框的内容 - String id = idTF.getText(); // 获取商品编号文本框的内容 - float inprice = Float.parseFloat((inpriceTF.getText())); // 将进货单价文本框的内容转换为浮点数 - float outprice = Float.parseFloat(outpriceTF.getText()); // 将销售单价文本框的内容转换为浮点数 - int life = Integer.parseInt(lifeTF.getText()); // 将保质期文本框的内容转换为整数 - int sum = Integer.parseInt(sumTF.getText()); // 将库存文本框的内容转换为整数 - - // TODO 参数校验 - if (this.production == null) { // 如果production对象为空,表示是添加新商品 - if(supplyid==-1){ // 如果供应商ID为-1,表示商品检索出错 - JOptionPane.showMessageDialog(this, "商品检索出错", "提示", - JOptionPane.ERROR_MESSAGE); // 显示错误消息 - return; // 退出方法 - } - if(supplyid==0){ // 如果供应商ID为0,表示未选择商品名 - JOptionPane.showMessageDialog(this, "请选择商品名", "提示", - JOptionPane.ERROR_MESSAGE); // 显示错误消息 - return; // 退出方法 - } - if(id2.equals("0")){ // 如果分类ID为"0",表示未选择商品类 - JOptionPane.showMessageDialog(this, "请选择商品类", "提示", - JOptionPane.ERROR_MESSAGE); // 显示错误消息 - return; // 退出方法 - } - - Production production = new Production(); // 创建新的Production对象 - production.setId(id); // 设置商品编号 - production.setName(name); // 设置商品名称 - production.setInPrice(inprice); // 设置进货单价 - production.setOutPrice(outprice); // 设置销售单价 - production.setLife(life); // 设置保质期 - production.setSum(sum); // 设置库存 - production.setSupplyId(supplyid); // 设置供应商ID - production.setId2(id2); // 设置分类ID - production.setName2(name2); // 设置分类名称 - int result = productionService.addProduction(production); // 调用服务添加商品 - // int result = 1; // 注释掉的代码,可能是用于测试 - if (result == 1) { // 如果添加成功 - - JOptionPane.showMessageDialog(this, "添加成功", "提示", - JOptionPane.INFORMATION_MESSAGE); // 显示成功消息 - this.dispose(); // 关闭对话框 - } else if(result == 2){ // 如果返回值为2,表示已存在该商品 - JOptionPane.showMessageDialog(this, "已存在该商品", "提示", - JOptionPane.ERROR_MESSAGE); // 显示错误消息 - } - else { // 如果添加失败 - JOptionPane.showMessageDialog(this, "出错!添加失败", "提示", - JOptionPane.ERROR_MESSAGE); // 显示错误消息 - - } - }/*else{ - //更新 - SupplierInf supplierInf= new SupplierInf(); - supplierInf.setName(name); - supplierInf.setAddress(address); - supplierInf.setContact(contact); - supplierInf.setId(this.supplierInf.getId()); - - int result = supplierInfService.updateSupplierInf(supplierInf); - if(result==1){ - JOptionPane.showMessageDialog(this, "更新成功", "提示", - JOptionPane.INFORMATION_MESSAGE); - } - }*/ - - } else if (source == cancelBtn) { // 如果事件源是取消按钮 - - this.dispose(); // 关闭对话框 - } - } - - // 定义一个内部类MyItemListener实现ItemListener接口 - public class MyItemListener implements ItemListener { - - @Override - public void itemStateChanged(ItemEvent e) { // 实现itemStateChanged方法 - JComboBox cb = (JComboBox) e.getSource(); // 获取事件源,即下拉框组件 - name2 = (String) cb.getSelectedItem(); // 获取选中的商品类名称 - pci =new prodCatalogImpl(); // 创建商品分类服务实现类对象 - for(int i=0;i storageRecords; // 声明一个Vector,用于存储存储记录列表 - private StorageRecord storageRecord ; // 声明一个StorageRecord对象,用于存储单条记录 - - String oNumber ;/*订单号*/ // 声明一个字符串变量,用于存储订单号 - - public void allStoragrRecord() { // 定义一个方法,用于获取所有存储记录 - //将添加的商品加入到静态变量Vector数组中 - /*prod = InDialog.getProduction();*/ - storageRecords = srDao.findAllStorageRecord(); // 调用srDao的方法获取所有存储记录并赋值给storageRecords - } - - - @Override - public int getRowCount() { // 重写getRowCount方法,返回表格的行数 - return storageRecords.size(); // 返回storageRecords的大小,即记录的数量 - } - -/* public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); - }*/ - - @Override - public int getColumnCount() { // 重写getColumnCount方法,返回表格的列数 - return columnName.length; // 返回columnName数组的长度,即列的数量 - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { // 重写getValueAt方法,返回指定单元格的值 - storageRecord = storageRecords.get(rowIndex); // 获取指定行的存储记录 -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - oNumber=storageRecord.getTheNumber(); // 获取订单号并赋值给oNumber - if(columnIndex==0) { - return storageRecord.getTheNumber(); // 返回订单号 - }else if(columnIndex==1) { - return storageRecord.getcDate(); // 返回操作时间 - }else if(columnIndex==2) { - return storageRecord.getId(); // 返回商品编号 - }else if(columnIndex==3) { - return storageRecord.getExecute(); // 返回进货/出货操作 - }else if(columnIndex==4) { - return storageRecord.getNum(); // 返回数量 - }else { - return null; // 如果列索引不匹配,返回null - } - } - - - - - @Override - public String getColumnName(int column) { // 重写getColumnName方法,返回指定列的列名 - return columnName[column]; // 返回columnName数组中指定索引的值 - } - - - -} diff --git a/branch_zyx/StorageTableModel.java b/branch_zyx/StorageTableModel.java deleted file mode 100644 index 43f6f91..0000000 --- a/branch_zyx/StorageTableModel.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.lingnan.supermarket.table; // 包声明,指定当前类所在的包 - -import java.util.List; // 导入List接口,用于表示列表 -import java.util.Vector; // 导入Vector类,用于实现可增长的对象数组 - -import javax.swing.table.AbstractTableModel; // 导入AbstractTableModel类,用于创建表格模型 - -import com.lingnan.supermarket.dto.Production; // 导入Production类,表示产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入User类,表示用户数据传输对象 -import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,用于用户数据访问 -import com.lingnan.supermarket.dao.impl.*; // 导入所有实现类,可能用于数据访问层的具体实现 - - - -public class StorageTableModel extends AbstractTableModel{ // 定义一个类,继承自AbstractTableModel,用于存储表格数据模型 - - private String [] columnName = {"id","名称","保质期","数量","类别","供应商编号"}; // 定义列名数组,用于表格的列标题 - - private productionImpl prodDao = new productionImpl(); // 创建productionImpl对象,用于操作产品数据 - - private Vector prods; // 声明一个Vector,用于存储Production对象列表 - - public void all() { - // 查找全部数据,并更新prods向量 - prods = prodDao.findAllproduction(); - } - - public void Byname(Production p) { - // 根据产品名称查找数据,并更新prods向量 - prods = prodDao.findproduction(p.getName()); - } - - @Override - public int getRowCount() { - // 获取表格的行数,即prods向量的元素数量 - return prods.size(); - } - - @Override - public int getColumnCount() { - // 获取表格的列数,即columnName数组的长度 - return columnName.length; - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - // 获取指定行和列的单元格值 - Production prod = prods.get(rowIndex); // 获取指定行的Production对象 - if(columnIndex==0) { - return prod.getId(); // 返回产品ID - }else if(columnIndex==1) { - return prod.getName(); // 返回产品名称 - }else if(columnIndex==2) { - return prod.getLife(); // 返回产品保质期 - }else if(columnIndex==3) { - return prod.getSum(); // 返回产品数量 - }else if(columnIndex==4) { - return prod.getName2()+prod.getId2(); // 返回产品类别和ID的组合 - }else if(columnIndex==5) { - return prod.getSupplyId(); // 返回产品供应商编号 - }else { - return null; // 如果列索引不匹配,返回null - } - } - - @Override - public String getColumnName(int column) { - // 获取指定列的列名 - return columnName[column]; // 返回columnName数组中指定索引的值 - } - - - -} diff --git a/branch_zyx/StorageView.java b/branch_zyx/StorageView.java deleted file mode 100644 index 48d5677..0000000 --- a/branch_zyx/StorageView.java +++ /dev/null @@ -1,228 +0,0 @@ -package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 - -import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 -import java.awt.Color; // 导入Color类,用于定义颜色 -import java.awt.FlowLayout; // 导入FlowLayout布局管理器类 -import java.awt.event.ActionEvent; // 导入事件监听接口 -import java.awt.event.ActionListener; // 导入事件监听器接口 - -import javax.swing.ImageIcon; // 导入ImageIcon类,用于显示图片 -import javax.swing.JButton; // 导入JButton类,用于创建按钮 -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 -import javax.swing.JLabel; // 导入JLabel类,用于创建标签 -import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 -import javax.swing.JPanel; // 导入JPanel类,用于创建面板 -import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建滚动面板 -import javax.swing.JTable; // 导入JTable类,用于创建表格 -import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 - -import com.lingnan.supermarket.dao.productionService; // 导入productionService接口 -import com.lingnan.supermarket.dao.impl.productionImpl; // 导入productionImpl实现类 -import com.lingnan.supermarket.dialog.ProductionDialog; // 导入ProductionDialog类 -import com.lingnan.supermarket.dialog.UserDialog; // 导入UserDialog类 -import com.lingnan.supermarket.dto.Production; // 导入Production类 -import com.lingnan.supermarket.table.StorageRecordTM; // 导入StorageRecordTM类 -import com.lingnan.supermarket.table.StorageTableModel; // 导入StorageTableModel类 -import com.lingnan.supermarket.utils.FontUtil; // 导入FontUtil类,用于字体设置 - -public class StorageView extends JPanel implements ActionListener{ // 创建StorageView类,继承JPanel并实现ActionListener接口 - - //上面 - private JPanel toolBarPanel; // 工具栏面板变量声明 - - private JPanel searchPanel; // 搜索面板变量声明 - private JLabel nameLabel,locationLabel; // 标签变量声明 - private JTextField nameSearchTF; // 文本框变量声明 - private JButton searchBtn; // 搜索按钮变量声明 - - private JPanel opePanel; // 操作面板变量声明 - private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn; // 按钮变量声明 - - //中间 - private JScrollPane tableScrollPane; // 表格滚动面板变量声明 - private JTable storageTable; // 表格变量声明 - - //下面 - private JPanel bottomPanel; // 底部面板变量声明 - private JLabel countInfoLabel; // 记录总数标签变量声明 - - private StorageTableModel storageTableModel ; // 表格模型变量声明 - private JFrame jFrame; // 窗口变量声明 - - private productionService productionService=new productionImpl(); // 创建productionService实例 - - public StorageView(JFrame jFrame) { // StorageView构造方法 - this.setLayout(new BorderLayout()); // 设置布局管理器为BorderLayout - initView(); // 初始化视图 - this.jFrame = jFrame; // 将传入的JFrame实例赋值给成员变量 - } - - private void initView() { // 初始化视图的方法 - - toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout - - searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout - locationLabel=new JLabel("当前位置>商品库存"); // 创建位置标签并设置文本 - locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 - locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 - nameLabel = new JLabel("商品名"); // 创建商品名标签并设置文本 - nameSearchTF = new JTextField(10); // 创建文本框并设置大小 - - - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 - - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 - updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 - backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); // 创建返回按钮并设置图标 - historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); // 创建历史按钮并设置图标 - backBtn.setVisible(false); // 设置返回按钮为不可见 - - addBtn.addActionListener(this); // 为添加按钮添加事件监听器 - updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 - deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 - searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 - backBtn.addActionListener(this); // 为返回按钮添加事件监听器 - historyBtn.addActionListener(this); // 为历史按钮添加事件监听器 - - opePanel.add(addBtn); // 将添加按钮添加到操作面板 - opePanel.add(updateBtn); // 将更新按钮添加到操作面板 - opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 - opePanel.add(backBtn); // 将返回按钮添加到操作面板 - opePanel.add(historyBtn); // 将历史按钮添加到操作面板 - - searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 - searchPanel.add(nameLabel); // 将商品名标签添加到搜索面板 - searchPanel.add(nameSearchTF); // 将商品名文本框添加到搜索面板 - searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 - - toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 - toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 - - //中间表格 - storageTableModel = new StorageTableModel(); // 创建表格模型实例 - storageTableModel.all(); // 调用表格模型的方法以加载所有数据 - storageTable = new JTable(storageTableModel); // 创建表格并设置模型 - storageTable.setFont(FontUtil.tableFont); // 设置表格字体 - storageTable.setRowHeight(50); // 设置表格行高 - - tableScrollPane = new JScrollPane(storageTable); // 创建滚动面板并添加表格 - - //下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout - countInfoLabel = new JLabel("总共"+storageTableModel.getRowCount()+"条"); // 创建记录总数标签并设置文本 - bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 - - this.add(toolBarPanel,"North"); // 将工具栏面板添加到面板的北边 - this.add(tableScrollPane,"Center"); /*将表格放到中间*/ // 将表格滚动面板添加到面板的中间 - this.add(bottomPanel,"South"); // 将底部面板添加到面板的南边 - - setVisible(true); // 设置面板为可见 - - } - - - @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); // 获取事件源 - if(addBtn==source) { // 如果事件源是添加按钮 - //添加数据的对话框 - ProductionDialog productionDialog = new ProductionDialog(jFrame); // 创建添加数据的对话框 - productionDialog.setVisible(true); // 设置对话框为可见 - refreshProduction(); // 刷新生产数据 - }else if(updateBtn==source) { // 如果事件源是更新按钮 - refreshProduction(); // 刷新生产数据 - }else if(historyBtn==source) { // 如果事件源是历史按钮 - storageRecord(); // 处理库存记录 - }else if(backBtn==source) { // 如果事件源是返回按钮 - refreshProduction(); // 刷新生产数据 - } - - else if(deleteBtn==source) { // 如果事件源是删除按钮 - //获取选中记录,删除 - int[] rowIndexs = storageTable.getSelectedRows(); // 获取表格中所有选中行的索引 - if(rowIndexs.length==0) { // 如果没有选中任何行 - JOptionPane.showMessageDialog(this,"请至少选中一条"); // 显示提示信息 - return; // 结束方法执行 - } - - int select=JOptionPane.showConfirmDialog(this,"是否删除选中的"+rowIndexs.length+"条记录","提示",JOptionPane.YES_NO_OPTION); // 显示确认删除的对话框 - if(select==JOptionPane.YES_OPTION){ // 如果用户选择是 - for(int i=0;i suppliers; - - // 定义供应商ID变量 - private int id=0; - - // 查找全部供应商信息的方法 - public void all() { - // 查找全部数据 - suppliers = supplierInfService.findAllSupplierInf(); - } - - // 根据名称查找供应商信息的方法 - public void Byname(SupplierInf supplierInf) { - // 根据名称查找供应商信息 - suppliers = supplierInfService.findByNameSupplierInf(supplierInf); - - } - - // 重写获取行数的方法 - @Override - public int getRowCount() { - // 返回供应商列表的大小 - return suppliers.size(); - } - - // 重写获取列数的方法 - @Override - public int getColumnCount() { - // 返回列名数组的长度 - return columnName.length; - } - - // 重写获取单元格值的方法 - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - // 获取指定行的供应商信息 - SupplierInf prod = suppliers.get(rowIndex); - // 根据列索引返回相应的供应商信息属性 - if(columnIndex==0) { - return prod.getId(); - }else if(columnIndex==1) { - return prod.getName(); - }else if(columnIndex==2) { - return prod.getAddress(); - }else if(columnIndex==3) { - return prod.getContact(); - }else if(columnIndex==4){ - return prod.getEmail(); - } - else { - return null; - } - } - - // 重写获取列名的方法 - @Override - public String getColumnName(int column) { - // 返回指定列索引的列名 - return columnName[column]; - } - -/* - public int getId() { - return id; - } - public int getValueAt(int rowIndex){ - SupplierInf supplierInf = suppliers.get(rowIndex); - id=suppliers.get(rowIndex).getId(); - //System.out.println("rowIndex"+rowIndex); - //System.out.println("columnIndex"+columnIndex); - return supplierInf.getId(); - } - - */ - - - -} diff --git a/branch_zyx/SupplierView.java b/branch_zyx/SupplierView.java deleted file mode 100644 index bf0d059..0000000 --- a/branch_zyx/SupplierView.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.lingnan.supermarket.view; // 定义包名,表示这个类属于com.lingnan.supermarket.view包 - -import java.awt.BorderLayout; // 导入BorderLayout布局管理器类 -import java.awt.Color; // 导入Color类,用于定义颜色 -import java.awt.FlowLayout; // 导入FlowLayout布局管理器类,用于流式布局 -import java.awt.event.ActionEvent; // 导入ActionEvent类,用于处理动作事件 -import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现事件监听 - -import javax.swing.ImageIcon; // 导入ImageIcon类,用于处理图片 -import javax.swing.JButton; // 导入JButton类,用于创建按钮 -import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 -import javax.swing.JLabel; // 导入JLabel类,用于创建标签 -import javax.swing.JOptionPane; // 导入JOptionPane类,用于显示对话框 -import javax.swing.JPanel; // 导入JPanel类,用于创建面板 -import javax.swing.JScrollPane; // 导入JScrollPane类,用于创建带滚动条的容器 -import javax.swing.JTable; // 导入JTable类,用于创建表格 -import javax.swing.JTextField; // 导入JTextField类,用于创建文本框 - -import com.lingnan.supermarket.dao.SupplierInfService; // 导入供应商信息服务的接口 -import com.lingnan.supermarket.dao.impl.SupplierInfImpl; // 导入供应商信息服务的实现类 -import com.lingnan.supermarket.dialog.SupplierInfDialog; // 导入供应商信息对话框类 -import com.lingnan.supermarket.dto.SupplierInf; // 导入供应商信息数据传输对象 -import com.lingnan.supermarket.table.SupplierTableModel; // 导入供应商信息表格模型类 -import com.lingnan.supermarket.utils.FontUtil; // 导入字体工具类 - -public class SupplierView extends JPanel implements ActionListener{ // 定义一个公共类SupplierView,继承JPanel并实现ActionListener接口 - - //上面 - private JPanel toolBarPanel; // 工具栏面板的私有成员变量 - - private JPanel searchPanel; // 搜索面板的私有成员变量 - private JLabel nameLabel,locationLabel; // 标签的私有成员变量,用于显示文本 - private JTextField nameSearchTF; // 文本框的私有成员变量,用于输入搜索内容 - private JButton searchBtn; // 搜索按钮的私有成员变量 - - private JPanel opePanel; // 操作面板的私有成员变量 - private JButton addBtn,updateBtn,deleteBtn; // 按钮的私有成员变量,用于添加、更新、删除操作 - - //中间 - private JScrollPane tableScrollPane; // 带滚动条的表格面板的私有成员变量 - private JTable supplierTable; // 表格的私有成员变量,用于显示供应商信息 - - //下面 - private JPanel bottomPanel; // 底部面板的私有成员变量 - private JLabel countInfoLabel; // 标签的私有成员变量,用于显示记录总数信息 - - private SupplierTableModel supplierTableModel; // 供应商信息表格模型的私有成员变量 - private JFrame jFrame; // 窗口的私有成员变量 - private SupplierInfService supplierInfService = new SupplierInfImpl(); // 供应商信息服务的实例化对象 - - public SupplierView(JFrame jFrame) { // SupplierView类的构造方法,接收一个JFrame参数 - this.setLayout(new BorderLayout()); // 设置面板的布局为BorderLayout - initView(); // 调用初始化视图的方法 - this.jFrame = jFrame; // 将传入的JFrame窗口对象赋值给类的成员变量 - } - - private void initView() { // 初始化视图的私有方法 - - toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout - - searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout - locationLabel=new JLabel("当前位置>供应商"); // 创建标签并设置文本为当前位置信息 - locationLabel.setFont(new FontUtil().userFont); // 设置标签的字体 - locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签的前景色(文字颜色) - nameLabel = new JLabel("公司名称"); // 创建标签并设置文本为公司名称 - nameSearchTF = new JTextField(10); // 创建文本框并设置大小为10个字符宽度 - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 - updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮 - - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 - - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 - updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 - - addBtn.addActionListener(this); // 为添加按钮添加事件监听器 - updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 - deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 - searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 - - opePanel.add(addBtn); // 将添加按钮添加到操作面板 - opePanel.add(updateBtn); // 将更新按钮添加到操作面板 - opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 - - searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 - searchPanel.add(nameLabel); // 将公司名称标签添加到搜索面板 - searchPanel.add(nameSearchTF); // 将公司名称文本框添加到搜索面板 - searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 - - - toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 - toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 - - - //中间表格 - supplierTableModel = new SupplierTableModel(); // 创建供应商表格模型对象 - supplierTableModel.all(); // 调用表格模型的方法以加载所有数据 - supplierTable = new JTable(supplierTableModel); // 创建表格并设置模型 - supplierTable.setFont(FontUtil.tableFont); // 设置表格字体 - supplierTable.setRowHeight(50); // 设置表格行高 - - tableScrollPane = new JScrollPane(supplierTable); // 创建带滚动条的容器并添加表格 - - //下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout - countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建标签并设置显示记录总数的文本 - bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 - - this.add(toolBarPanel,"North"); // 将工具栏面板添加到主面板的北边 - this.add(tableScrollPane,"Center"); // 将带滚动条的表格容器添加到主面板的中间 - this.add(bottomPanel,"South"); // 将底部面板添加到主面板的南边 - - setVisible(true); // 设置主面板可见(通常不需要,因为主面板会在添加到窗口时自动设置为可见) - } - - @Override - public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 - Object source = e.getSource(); // 获取事件源 - if(addBtn==source) { // 如果事件源是添加按钮 - SupplierInfDialog supplierInfDialog = new SupplierInfDialog(jFrame, null); // 创建供应商信息对话框 - supplierInfDialog.setVisible(true); // 设置对话框可见 - refreshSupplier(); // 刷新供应商信息 - }else if(updateBtn==source) { // 如果事件源是更新按钮 - refreshSupplier(); // 刷新供应商信息 - }else if(deleteBtn==source) { // 如果事件源是删除按钮 - //获取选中记录 - int rowIndex = supplierTable.getSelectedRow(); // 获取表格中选中的行索引 - if(rowIndex==-1) { // 如果没有行被选中 - JOptionPane.showMessageDialog(this,"请选中一条"); // 显示提示信息 - return; // 结束方法执行 - } - int id = (Integer)supplierTable.getValueAt(rowIndex,0); // 获取选中行的ID - int select=JOptionPane.showConfirmDialog(this,"是否删除id="+id,"提示",JOptionPane.YES_NO_OPTION); // 显示确认删除的对话框并获取用户的选择 - if(select==JOptionPane.YES_OPTION){ // 如果用户在确认对话框中选择“是” - if(supplierInfService.deleteSupplierInf(id)==1) { // 尝试删除供应商信息,如果成功返回1 - JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示删除成功的消息 - refreshSupplier(); // 刷新供应商信息 - }else { - JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); // 显示删除失败的消息 - } - } - }else if(searchBtn==source){ // 如果事件源是搜索按钮 - System.out.println("搜索"); // 打印搜索操作信息到控制台 - refreshFindRname(); // 调用方法刷新搜索结果 - } - } - // 根据名称刷新供应商信息的方法 - public void refreshFindRname() { - String name = nameSearchTF.getText(); // 获取搜索文本框中的文本 - SupplierInf supplierInf = new SupplierInf(); // 创建供应商信息对象 - supplierInf.setName(name); // 设置供应商名称为搜索文本 - - - supplierTableModel = new SupplierTableModel(); // 创建新的供应商表格模型 - supplierTableModel.Byname(supplierInf); // 调用表格模型的方法按名称查询供应商信息 - - supplierTable.setModel(supplierTableModel); // 更新表格模型以显示查询结果 - - refreshCount(); // 刷新记录总数 - } - // 刷新供应商信息的方法 - public void refreshSupplier() { - supplierTableModel = new SupplierTableModel(); // 创建新的供应商表格模型 - supplierTableModel.all(); // 加载所有供应商信息 - supplierTable.setModel(supplierTableModel); // 更新表格模型以显示所有供应商信息 - - refreshCount(); // 刷新记录总数 - } - // 刷新记录总数的方法 - public void refreshCount(){ - bottomPanel.removeAll(); // 清除底部面板上的所有组件 - countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建新的标签显示记录总数 - bottomPanel.add(countInfoLabel); // 将记录总数标签添加到底部面板 - } - -}