From cbe7cb556031758d5fb2bd2d067d02dc47f5bd37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 18:57:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/impl/storageRecordImpl.java | 184 +++++++++------ .../supermarket/dialog/CloseDialog.java | 164 ++++++++++---- .../lingnan/supermarket/dialog/OutDialog.java | 211 +++++++++--------- .../supermarket/table/OutRecordTM.java | 135 +++++++---- 4 files changed, 424 insertions(+), 270 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java index c3bfb3e..36e12ff 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java @@ -4,16 +4,8 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Statement; -import java.util.Iterator; import java.util.Vector; - - - - - - import com.lingnan.supermarket.dao.storageRecordService; import com.lingnan.supermarket.dto.StorageRecord; import com.lingnan.supermarket.utils.DateUtil; @@ -21,104 +13,162 @@ import com.lingnan.supermarket.utils.JDBCUtil; public class storageRecordImpl implements storageRecordService { + /** + * 获取所有存储记录 + * + * @return Vector 所有存储记录的集合 + */ @Override public Vector findAllStorageRecord() { - Vector v=new Vector(); - - - Connection conn=JDBCUtil.getConn(); + + // 创建一个空的Vector对象,用于存储所有查询到的StorageRecord + Vector v = new Vector(); + + // 通过JDBC获取数据库连接 + Connection conn = JDBCUtil.getConn(); + + // 声明PreparedStatement和ResultSet对象 PreparedStatement pstmt = null; - ResultSet resultSet=null; + ResultSet resultSet = null; + try { - String sql="select * from storageRecord order by cDate desc"; - pstmt=conn.prepareStatement(sql); - - resultSet=pstmt.executeQuery(); - while(resultSet.next()) { - StorageRecord sr=new StorageRecord(); - sr.setId(resultSet.getString("id")); - sr.setTheNumber(resultSet.getString("theNumber")); - sr.setNum(resultSet.getInt("num")); - sr.setExecute(resultSet.getString("execute")); + // 编写SQL查询语句,按存储日期降序排列 + String sql = "select * from storageRecord order by cDate desc"; + + // 准备SQL语句 + pstmt = conn.prepareStatement(sql); + + // 执行查询,获取结果集 + resultSet = pstmt.executeQuery(); + + // 迭代结果集,将每条记录封装成StorageRecord对象 + while (resultSet.next()) { + StorageRecord sr = new StorageRecord(); + + // 设置StorageRecord对象的各个属性 + sr.setId(resultSet.getString("id")); // 设置id字段 + sr.setTheNumber(resultSet.getString("theNumber")); // 设置存储记录编号 + sr.setNum(resultSet.getInt("num")); // 设置数量字段 + sr.setExecute(resultSet.getString("execute")); // 设置执行状态字段 + // 设置创建日期字段,并通过DateUtil工具类格式化日期 sr.setcDate(DateUtil.dateToString(resultSet.getTimestamp("cDate"), null)); - v.add(sr); - } - - - } - catch (SQLException e) { + // 将StorageRecord对象添加到Vector中 + v.add(sr); + } + } catch (SQLException e) { + // 如果出现SQL异常,打印错误信息 e.printStackTrace(); - }finally { + } finally { + // 确保资源被关闭,避免内存泄漏 JDBCUtil.close(resultSet, pstmt, conn); - } - - - return v; + // 返回所有存储记录的Vector + return v; } - + /** + * 根据存储记录编号查找存储记录 + * + * @param theNumber 存储记录编号 + * @return StorageRecord 查找到的存储记录对象,如果未找到则为null + */ @Override public StorageRecord findByIdStorageRecord(String theNumber) { - - StorageRecord sr=null; - Connection conn=JDBCUtil.getConn(); + + // 创建一个空的StorageRecord对象,用于存储查询结果 + StorageRecord sr = null; + + // 获取数据库连接 + Connection conn = JDBCUtil.getConn(); + + // 声明PreparedStatement和ResultSet对象 PreparedStatement pstmt = null; - ResultSet resultSet=null; + ResultSet resultSet = null; try { - sr=new StorageRecord(); - pstmt = conn.prepareStatement("select *from storageRecord where theNumber=?"); - pstmt.setString(1,theNumber); + // 初始化StorageRecord对象 + sr = new StorageRecord(); + + // 编写SQL查询语句,通过存储记录编号查询特定记录 + pstmt = conn.prepareStatement("select * from storageRecord where theNumber=?"); + + // 设置查询条件,即存储记录编号 + pstmt.setString(1, theNumber); + + // 执行查询操作,并将结果存放在resultSet中 resultSet = pstmt.executeQuery(); - if(resultSet.next()){ - sr.setTheNumber((resultSet.getString("theNumber"))); - sr.setId((resultSet.getString("id"))); + + // 如果查询到数据,填充StorageRecord对象 + if (resultSet.next()) { + sr.setTheNumber(resultSet.getString("theNumber")); + sr.setId(resultSet.getString("id")); sr.setNum(resultSet.getInt("num")); sr.setExecute(resultSet.getString("execute")); + // 设置存储记录的创建日期,并进行格式化 sr.setcDate(DateUtil.dateToString(resultSet.getTimestamp("cDate"), null)); } - } catch (SQLException e) { - // TODO Auto-generated catch block + // 如果发生SQLException,打印堆栈信息 e.printStackTrace(); - }finally{ + } finally { + // 确保资源关闭,防止资源泄露 JDBCUtil.close(resultSet, pstmt, conn); } - - + + // 返回找到的存储记录对象,如果没有找到则返回null return sr; } - public boolean insertStorageRecord(String iNumber,String time,String prodId,String execute,int sum) { + /** + * 插入新的存储记录 + * + * @param iNumber 存储记录编号 + * @param time 存储记录时间 + * @param prodId 商品编号 + * @param execute 执行状态 + * @param sum 数量 + * @return boolean 插入是否成功,成功返回true,失败返回false + */ + public boolean insertStorageRecord(String iNumber, String time, String prodId, String execute, int sum) { + + // 默认插入操作失败 boolean flag = false; - Connection conn=JDBCUtil.getConn(); + + // 获取数据库连接 + Connection conn = JDBCUtil.getConn(); + + // 声明PreparedStatement和ResultSet对象 PreparedStatement pstmt = null; - ResultSet resultSet=null; + ResultSet resultSet = null; try { - pstmt = conn.prepareStatement("insert into storageRecord values(?,?,?,?,?) "); - pstmt.setString(1,iNumber); - pstmt.setString(2,time); - pstmt.setString(3,prodId); - pstmt.setString(4,execute); - pstmt.setInt(5,sum); - - if(pstmt.executeUpdate()==1){ - flag = true; + // 编写SQL插入语句,将数据插入到storageRecord表中 + pstmt = conn.prepareStatement("insert into storageRecord values(?,?,?,?,?)"); + + // 设置插入的字段值 + pstmt.setString(1, iNumber); // 存储记录编号 + pstmt.setString(2, time); // 存储记录时间 + pstmt.setString(3, prodId); // 商品编号 + pstmt.setString(4, execute); // 执行状态 + pstmt.setInt(5, sum); // 数量 + + // 执行插入操作,如果插入成功则返回1 + if (pstmt.executeUpdate() == 1) { + // 如果插入成功,设置标志位为true + flag = true; } - } catch (SQLException e) { - // TODO Auto-generated catch block + // 如果发生SQLException,打印堆栈信息 e.printStackTrace(); - }finally{ + } finally { + // 确保数据库连接和资源被关闭 JDBCUtil.close(resultSet, pstmt, conn); } - - + + // 返回插入操作的结果(成功返回true,失败返回false) return flag; } } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/CloseDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/CloseDialog.java index 492eb45..e429edd 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/CloseDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/CloseDialog.java @@ -29,91 +29,157 @@ import com.lingnan.supermarket.table.OutTableModel; import com.lingnan.supermarket.view.MainView; import com.lingnan.supermarket.view.OutView; +public class CloseDialog extends JDialog implements ActionListener { -public class CloseDialog extends JDialog implements ActionListener{ - - - /** - * - */ - private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; - - private JLabel prodIdLabel,sumLabel; - private JTextField prodIdTF,sumTF; - - private JButton saveBtn,unSaveBtn,cancleBtn; - - + // Panel用于显示不同的用户信息 + private JPanel prodIdPanel, sumPanel, phonePanel, opePanel; + + // JLabel组件,显示提示文本 + private JLabel prodIdLabel, sumLabel; + + // JTextField组件,允许用户输入或显示文本 + private JTextField prodIdTF, sumTF; + + // JButton组件,用户点击后触发保存、取消等操作 + private JButton saveBtn, unSaveBtn, cancleBtn; + + // 用于展示商品的表格模型 private OutTableModel outTableModel = new OutTableModel(); - + + // 缓冲区操作的实现类,用于处理商品的存储与删除 private BufferImpl bufferImpl; - + + // 当前用户信息 private User user; + + // 购物车中的商品列表 private Vector v; - - public CloseDialog(JFrame parent,Vector v) { - super(parent,"提示"); - setSize(350,130); - setLocationRelativeTo(null); - setModal(true); - setResizable(false); - this.setLayout(new FlowLayout()); - - this.v = v; - - initView(); + + /** + * 构造函数,初始化对话框窗口 + * @param parent 父窗口 + * @param v 购物车中所有的商品信息 + */ + public CloseDialog(JFrame parent, Vector v) { + super(parent, "提示"); // 设置对话框标题 + setSize(350, 130); // 设置对话框窗口的大小 + setLocationRelativeTo(null); // 将窗口放置在屏幕中央 + setModal(true); // 设置对话框为模态,强制用户先处理此窗口才能继续操作其他窗口 + setResizable(false); // 不允许调整窗口大小 + this.setLayout(new FlowLayout()); // 设置窗口的布局方式为流式布局 + + this.v = v; // 将购物车中的商品列表传入此窗口 + + initView(); // 初始化界面组件 } - - - - - + + /** + * 初始化界面组件,设置用户界面元素 + */ private void initView() { + // 创建并初始化显示产品ID的面板 prodIdPanel = new JPanel(); prodIdLabel = new JLabel("您还未结账,是否保存购物车"); prodIdPanel.add(prodIdLabel); - - + // 创建操作按钮的面板,并初始化按钮 opePanel = new JPanel(); saveBtn = new JButton("保存"); unSaveBtn = new JButton("不保存"); cancleBtn = new JButton("取消"); + + // 为按钮添加监听器,当按钮被点击时执行相应的操作 saveBtn.addActionListener(this); unSaveBtn.addActionListener(this); cancleBtn.addActionListener(this); + + // 将按钮添加到面板中 opePanel.add(saveBtn); opePanel.add(unSaveBtn); opePanel.add(cancleBtn); - + + // 获取内容容器,并将各个面板添加到容器中 Container container = getContentPane(); - container.add(prodIdPanel); - container.add(opePanel); + container.add(prodIdPanel); // 添加显示提示文本的面板 + container.add(opePanel); // 添加操作按钮面板 + + debugLog("Initialized CloseDialog view."); // 输出调试日志,表示界面已经初始化 } + /** + * 按钮点击事件处理方法 + * 该方法负责处理每个按钮点击后的相应逻辑 + */ @Override public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - bufferImpl = new BufferImpl(); - if(source==saveBtn){/*吧vector数组加入到缓冲区中*/ - for(Production p:v) { - System.out.println("保存数据"); - bufferImpl.insertInBuffer(p); + Object source = e.getSource(); // 获取事件源,判断点击的是哪个按钮 + bufferImpl = new BufferImpl(); // 创建缓冲区操作实例 + + // 处理点击“保存”按钮的逻辑 + if (source == saveBtn) { + debugLog("Save button clicked."); + // 遍历购物车中的所有商品,保存到缓冲区 + for (Production p : v) { + debugLog("Saving product: " + p.getName()); // 打印调试信息,显示正在保存的商品 + bufferImpl.insertInBuffer(p); // 将商品保存到缓冲区 } - + // 结束程序 System.exit(0); - }else if(source==unSaveBtn) { - bufferImpl = new BufferImpl(); + } + // 处理点击“不保存”按钮的逻辑 + else if (source == unSaveBtn) { + debugLog("Don't save button clicked."); + // 删除所有缓冲区中的商品数据 bufferImpl.DelAllOutBuffer(); + // 结束程序 System.exit(0); - }else if(source==cancleBtn) { + } + // 处理点击“取消”按钮的逻辑 + else if (source == cancleBtn) { + debugLog("Cancel button clicked."); + // 关闭对话框,不做任何操作 setVisible(false); + } + } - }/*else if(source==WindowEvent)*/ + /** + * 用于输出调试信息的日志方法,便于在控制台追踪程序执行情况 + * @param message 调试信息内容 + */ + private void debugLog(String message) { + System.out.println("DEBUG: " + message); // 将调试信息输出到控制台 } + /** + * 在窗口关闭时的额外操作 + * 例如,用户点击关闭按钮时,执行一些清理操作 + * @param we 窗口事件 + */ + public void windowClosing(WindowEvent we) { + debugLog("Window is closing."); + } + public void windowClosed(WindowEvent we) { + debugLog("Window closed."); + } + public void windowOpened(WindowEvent we) { + debugLog("Window opened."); + } + public void windowIconified(WindowEvent we) { + debugLog("Window minimized."); + } + public void windowDeiconified(WindowEvent we) { + debugLog("Window restored."); + } + + public void windowActivated(WindowEvent we) { + debugLog("Window activated."); + } + + public void windowDeactivated(WindowEvent we) { + debugLog("Window deactivated."); + } } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/OutDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/OutDialog.java index 43cbf84..bb9216c 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/OutDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/OutDialog.java @@ -11,7 +11,6 @@ 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.*; @@ -26,140 +25,134 @@ import com.lingnan.supermarket.table.OutTableModel; import com.lingnan.supermarket.view.OutView; -public class OutDialog extends JDialog implements ActionListener{ - - - private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; - - private JLabel prodIdLabel,sumLabel; - private JTextField prodIdTF,sumTF; - - private JButton addBtn,cancelBtn; - - +public class OutDialog extends JDialog implements ActionListener { + + // 定义JPanel组件,用于组织界面元素 + private JPanel prodIdPanel, sumPanel, phonePanel, opePanel; + + // 定义JLabel用于显示文本 + private JLabel prodIdLabel, sumLabel; + + // 定义JTextField用于输入商品ID和数量 + private JTextField prodIdTF, sumTF; + + // 定义JButton按钮,用于添加商品和取消操作 + private JButton addBtn, cancelBtn; + + // 创建OutTableModel对象,用于管理表格数据 private OutTableModel outTableModel = new OutTableModel(); - + + // 创建Buffer对象,用于暂存添加的商品信息 private Buffer buffer; - + + // 构造函数,初始化对话框,设置窗口属性 public OutDialog(JFrame parent) { - super(parent,"添加商品"); - - setSize(350,300); - setLocationRelativeTo(null); - setModal(true); - setResizable(false); - this.setLayout(new FlowLayout()); - - initView(); + super(parent, "添加商品"); + + setSize(350, 300); // 设置窗口大小 + setLocationRelativeTo(null); // 设置窗口居中 + setModal(true); // 设置为模态对话框,阻止父窗口操作 + setResizable(false); // 设置不可调整窗口大小 + this.setLayout(new FlowLayout()); // 设置布局方式为流式布局 + + initView(); // 调用初始化界面方法 } - - - - - + + // 初始化界面方法 private void initView() { + // 创建商品ID输入面板 prodIdPanel = new JPanel(); prodIdLabel = new JLabel("编号"); - prodIdTF = new JTextField(15); - prodIdPanel.add(prodIdLabel); - prodIdPanel.add(prodIdTF); - - + prodIdTF = new JTextField(15); // 设置商品ID的文本框长度为15 + prodIdPanel.add(prodIdLabel); // 将标签添加到面板 + prodIdPanel.add(prodIdTF); // 将文本框添加到面板 + + // 创建数量输入面板 sumPanel = new JPanel(); sumLabel = new JLabel("数量"); - sumTF = new JTextField(15); - sumPanel.add(sumLabel); - sumPanel.add(sumTF); - - + sumTF = new JTextField(15); // 设置数量的文本框长度为15 + 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); - + addBtn.addActionListener(this); // 添加按钮的事件监听 + cancelBtn.addActionListener(this); // 取消按钮的事件监听 + opePanel.add(addBtn); // 将添加按钮添加到面板 + opePanel.add(cancelBtn); // 将取消按钮添加到面板 + + // 将所有面板添加到容器中 Container container = getContentPane(); - container.add(prodIdPanel); - container.add(sumPanel); - container.add(opePanel); + container.add(prodIdPanel); // 添加商品ID面板 + container.add(sumPanel); // 添加数量面板 + container.add(opePanel); // 添加操作按钮面板 } + // 实现ActionListener接口的actionPerformed方法,处理按钮点击事件 @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 =prodIdTF.getText(); - System.out.println("proId="+prodId); - if(prodIdTF.getText().equals("")||sumTF.getText().equals("")) { - JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); - return; + Object source = e.getSource(); // 获取触发事件的源对象 + if (source == addBtn) { // 如果点击了"添加"按钮 + + // 获取商品ID和数量输入框的值 + String prodId = prodIdTF.getText(); + System.out.println("proId=" + prodId); + + // 判断输入框是否为空 + if (prodIdTF.getText().equals("") || 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; + + // 获取数量并进行格式化转换 + int sum = Integer.parseInt(sumTF.getText()); + + // 判断数量是否为负数 + if (sum < 0) { + JOptionPane.showMessageDialog(this, "请输入大于0的数量", "提示", JOptionPane.ERROR_MESSAGE); + return; // 如果为负数,弹出提示框并返回 } - - //TODO 参数校验 - /*/判断是已添加,未添加还是不存在*/ + + // 创建生产商品的实现对象,查询商品库 productionImpl productionImpl = new productionImpl(); Production production = new Production(); - production = productionImpl.findByIdProduction(prodId); - - - if(production!=null) {/*商品库有这个商品存在*/ - - buffer = new Buffer(); - BufferImpl BufferImpl = new BufferImpl(); - buffer = BufferImpl.findOutBufferbyId(prodId);/*判断购物车是否有这个商品了,获得已添加的sum和价格*/ - - int allSum = production.getSum(); - - if(sum<0) { - JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); + production = productionImpl.findByIdProduction(prodId); // 根据商品ID查询商品 + + if (production != null) { // 如果商品存在 + buffer = new Buffer(); // 创建缓冲区对象 + BufferImpl bufferImpl = new BufferImpl(); + buffer = bufferImpl.findOutBufferbyId(prodId); // 查找购物车是否已存在该商品 + + int allSum = production.getSum(); // 获取商品的库存数量 + + // 如果商品库存不足,弹出提示框并返回 + if (sum > allSum) { + JOptionPane.showMessageDialog(this, "库存数量不够,库存数:" + allSum, "提示", JOptionPane.ERROR_MESSAGE); return; } - - if(buffer!=null)/*购物缓冲区已经有添加的商品*/{ - int exeistSum = buffer.getSum(); - if(sum+exeistSum>allSum)/*库存不够*/{ - JOptionPane.showMessageDialog(this,"库存数量不够,库存数:"+allSum,"提示",JOptionPane.ERROR_MESSAGE); - return; - }else - BufferImpl.addOutBufferExeistProd(prodId, sum, buffer); - - } - else if(buffer==null){/*添加新的商品*/ - if(sum>allSum)/*库存不够*/{ - JOptionPane.showMessageDialog(this,"库存数量不够,库存数:"+allSum,"提示",JOptionPane.ERROR_MESSAGE); - return; - }else - BufferImpl.addOutBufferNewProd(prodId, sum); - } - this.dispose(); - JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE); + // 如果购物车中已经有该商品,更新数量和价格 + if (buffer != null) { + int exeistSum = buffer.getSum(); // 获取购物车中该商品已有的数量 + if (sum + exeistSum > allSum) { // 判断购物车中商品数量加起来是否超过库存 + JOptionPane.showMessageDialog(this, "库存数量不够,库存数:" + allSum, "提示", JOptionPane.ERROR_MESSAGE); + return; // 如果超过库存,弹出提示框并返回 + } else { + bufferImpl.addOutBufferExeistProd(prodId, sum, buffer); // 更新购物车中的商品数量 + } + } else { // 如果购物车中没有该商品 + bufferImpl.addOutBufferNewProd(prodId, sum); // 将商品添加到购物车 + } + this.dispose(); // 关闭当前对话框 + JOptionPane.showMessageDialog(this, "添加成功", "提示", JOptionPane.INFORMATION_MESSAGE); // 弹出添加成功提示 + } else { // 如果商品不存在 + 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/table/OutRecordTM.java b/Supermarket/src/com/lingnan/supermarket/table/OutRecordTM.java index ba7f8ae..27198ae 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/OutRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/OutRecordTM.java @@ -17,82 +17,127 @@ import com.lingnan.supermarket.dao.impl.*; import com.lingnan.supermarket.dialog.InDialog; -public class OutRecordTM extends AbstractTableModel{ - - /** - * - */ +public class OutRecordTM extends AbstractTableModel { - private String [] columnName = {"订单号","id","数量","金额"}; + // 定义表格的列名 + private String[] columnName = {"订单号", "id", "数量", "金额"}; + // 用于从数据库获取商品数据的服务层对象 private productionImpl prodDao = new productionImpl(); - - private Vector OutRecords; - + + // 存储所有出货记录的Vector + private Vector OutRecords; + + // 用于操作出货记录数据的服务实现类 private outRecordServiceImpl outRecordImpl = new outRecordServiceImpl(); - private OutRecord outRecord= new OutRecord(); - - private String oNumber ;/*订单号*/ - - + // 当前的出货记录对象 + private OutRecord outRecord = new OutRecord(); + + // 当前订单号 + private String oNumber; + + /** + * 构造方法,根据订单号初始化 + * @param oNumber 订单号 + */ public OutRecordTM(String oNumber) { - this.oNumber=oNumber; + this.oNumber = oNumber; + logMethodCall("OutRecordTM Constructor"); + debugLog("OutRecordTM initialized with oNumber: " + oNumber); } - + + /** + * 根据订单号查询出货记录 + */ public void findOutRecordByINumber() { - //将添加的商品加入到静态变量Vector数组中 - /*prod = InDialog.getProduction();*/ + // 调用数据库服务获取出货记录数据 OutRecords = outRecordImpl.findByIdOutRecordr(oNumber); + logMethodCall("findOutRecordByINumber"); + debugLog("Fetched " + OutRecords.size() + " out records for oNumber: " + oNumber); } - - - - + /** + * 获取表格的行数 + * @return 行数 + */ @Override public int getRowCount() { return OutRecords.size(); } - -/* public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); - } -*/ + + /** + * 获取表格的列数 + * @return 列数 + */ @Override - public int getColumnCount() { + public int getColumnCount() { return columnName.length; } + /** + * 获取单元格的值 + * @param rowIndex 行索引 + * @param columnIndex 列索引 + * @return 对应的值 + */ @Override public Object getValueAt(int rowIndex, int columnIndex) { outRecord = OutRecords.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - oNumber=outRecord.getoNumber(); - if(columnIndex==0) { + + // 根据列索引返回对应的出货记录属性 + if (columnIndex == 0) { return outRecord.getoNumber(); - }else if(columnIndex==1) { + } else if (columnIndex == 1) { return outRecord.getId(); - }else if(columnIndex==2) { - return outRecord.getSum(); - }else if(columnIndex==3) { - return outRecord.getOutPrice(); - }else { + } else if (columnIndex == 2) { + return outRecord.getSum(); + } else if (columnIndex == 3) { + return outRecord.getOutPrice(); + } else { return null; } } - - public String getONumber() { /*返回要修改或删除的记录*/ + + /** + * 获取当前订单号 + * @return 订单号 + */ + public String getONumber() { + // 返回当前操作的订单号,用于修改或删除操作 return oNumber; } - - + + /** + * 获取列名 + * @param column 列索引 + * @return 列名 + */ @Override public String getColumnName(int column) { return columnName[column]; } - - + + // 打印方法调用的日志信息 + private void logMethodCall(String methodName) { + System.out.println("Method " + methodName + " was called."); + } + + // 输出调试信息 + private void debugLog(String message) { + System.out.println("DEBUG: " + message); + } + + // 模拟查询出货记录的测试方法 + public void testFindOutRecord() { + findOutRecordByINumber(); // 查询指定订单号的出货记录 + debugLog("OutRecord with oNumber: " + oNumber + " fetched successfully."); + } + + // 测试用例,模拟获取所有出货记录 + public void testAllOutRecords() { + findOutRecordByINumber(); // 获取指定订单号的出货记录 + debugLog("Fetched " + OutRecords.size() + " out records for oNumber: " + oNumber); + } + }