From e95c524ffd6380eed6204851bba4bd46c9e3cc88 Mon Sep 17 00:00:00 2001 From: cwfeng Date: Sun, 1 Dec 2024 15:32:02 +0800 Subject: [PATCH 01/20] inOrderServiceImpl.java --- .../dao/impl/inOrderServiceImpl.java | 351 +++++++++--------- 1 file changed, 172 insertions(+), 179 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java index fd81c3b..620a3f3 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java @@ -1,68 +1,62 @@ 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(); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet=null; - + public Vector findAllInOrder() { + Vector inOrders = new Vector(); // 创建一个向量用于存储InOrder对象 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 声明预编译语句对象 + ResultSet resultSet = null; // 声明结果集对象 + + // SQL查询语句,选择未删除的订单并按入库日期降序排列 String SQL = "select * from inOrder where delmark=1 order by inDate desc"; - + try { - preparedStatement = conn.prepareStatement(SQL); - resultSet = preparedStatement.executeQuery(); - while(resultSet.next()) { - InOrder inOrder = new InOrder(); + 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); + inOrders.add(inOrder); // 将InOrder对象添加到向量中 } - + } catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); // 捕获并打印异常堆栈信息 } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); + JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 } - return inOrders; - + return inOrders; // 返回存储所有InOrder对象的向量 } - - + @Override public InOrder findByIdinOrder(String iNumber) { - - InOrder inOrder = new InOrder(); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet = null; + InOrder inOrder = new InOrder(); // 创建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()) { + preparedStatement.setString(1, iNumber); // 设置订单号参数 + resultSet = preparedStatement.executeQuery(); // 执行查询 + if (resultSet.next()) { // 如果找到对应记录 + // 从结果集中获取属性并设置到inOrder对象 inOrder.setiNumber(resultSet.getString("iNumber")); inOrder.setAllInPrice(resultSet.getFloat("allInPrice")); inOrder.setInDate(resultSet.getString("inDate")); @@ -70,205 +64,204 @@ 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; + return inOrder; // 返回找到的InOrder对象 } - - + @Override public int addInOrder(String iNumber, float allInPrice) { - int flag = 0; - Timestamp inDate = new Timestamp(System.currentTimeMillis()); - //System.out.println(inDate); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + int flag = 0; // 状态标志,初始化为0 + Timestamp inDate = new Timestamp(System.currentTimeMillis()); // 获取当前时间戳 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 声明预编译语句对象 + try { - 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; + // 准备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; // 标记插入成功 } catch (SQLException e) { - flag = -1; - e.printStackTrace(); + flag = -1; // 插入失败时标记为-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; - - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + int flag = 0; // 状态标志,初始化为0 + + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 声明预编译语句对象 + try { - preparedStatement = conn.prepareStatement - ("update inOrder set delmark=0 where iNumber = ?"); - preparedStatement.setString(1, iNumber); - preparedStatement.executeUpdate(); - flag = 1; + // 准备SQL更新语句,将delmark标记为0表示逻辑删除 + preparedStatement = conn.prepareStatement("update inOrder set delmark=0 where iNumber = ?"); + preparedStatement.setString(1, iNumber); // 设置订单号参数 + preparedStatement.executeUpdate(); // 执行更新操作 + flag = 1; // 标记删除成功 } catch (SQLException e) { - flag = -1; - e.printStackTrace(); + flag = -1; // 删除失败时标记为-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; - 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; // 初始化标志为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); - pstmt.setInt(6, 1); - - if(pstmt.execute()) - flag = true; - - - - } catch (SQLException e) { - e.printStackTrace(); - }finally { + 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 - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { + e.printStackTrace(); // 捕获并打印异常堆栈信息 + } finally { + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回插入结果标志 } - /*更新状态*/ - public boolean updateInOrderStatus(String iNumber,int status) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; + /* 更新状态 */ + public boolean updateInOrderStatus(String iNumber, int status) { + boolean flag = false; // 初始化标志为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); - if(preparedStatement.executeUpdate()==1) + preparedStatement.setInt(1, status); // 设置状态 + preparedStatement.setString(2, iNumber); // 设置订单号 + // 如果更新操作影响了一行,则设置标志为true + 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(); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet=null; - + + // 查找所有待入库订单(待确认) + public Vector findUnconfirmInOrder() { + Vector inOrders = new Vector(); // 创建一个向量用于存储InOrder对象 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 声明预编译语句对象 + ResultSet resultSet = null; // 声明结果集对象 + + // SQL查询语句,选择状态为2并且未删除的订单 String SQL = "select * from inOrder where status=2 and delmark=1"; - + try { - 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); + 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对象添加到向量中 } - + } 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(); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet = null; - Float allInPrice=(float) 0; + // 获取今日进货金额 + 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 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); - resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - allInPrice=resultSet.getFloat("sum(allInPrice)"); - } + preparedStatement.setString(1, date); // 设置起始日期 + preparedStatement.setString(2, date); // 设置结束日期(起始日期+1天) + 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(); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet=null; - - - - try { + // 查找指定状态订单 + public Vector FindStatus(int status) { + Vector inOrders = new Vector(); // 创建一个向量用于存储InOrder对象 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 声明预编译语句对象 + ResultSet resultSet = null; // 声明结果集对象 + + try { + // 准备SQL查询语句,根据状态查找订单 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.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); + 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对象添加到向量中 } - + } catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); // 捕获并打印异常堆栈信息 } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); + JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 } - return inOrders; - + return inOrders; // 返回指定状态的订单向量 } } From e9cf9c9e44a6e751961a10d547e8cc83b598904f Mon Sep 17 00:00:00 2001 From: cwfeng Date: Thu, 5 Dec 2024 22:27:35 +0800 Subject: [PATCH 02/20] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=BF=9B?= =?UTF-8?q?=E8=B4=A7=E6=A8=A1=E5=9D=97=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supermarket/dao/impl/BufferImpl.java | 950 ++++++++++-------- .../supermarket/dao/impl/SupplierInfImpl.java | 350 ++++--- .../dao/impl/inRecordServiceImpl.java | 250 ++--- .../supermarket/dao/inOrderService.java | 11 +- .../com/lingnan/supermarket/dto/InRecord.java | 22 +- .../lingnan/supermarket/dto/SupplierInf.java | 18 +- .../lingnan/supermarket/table/InOrderTM.java | 74 +- .../lingnan/supermarket/table/InRecordTM.java | 73 +- .../supermarket/table/InTableModel.java | 130 ++- 9 files changed, 1011 insertions(+), 867 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/BufferImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/BufferImpl.java index 35da321..6133106 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; -import com.lingnan.supermarket.dao.BufferService; -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.utils.JDBCUtil; - +// 实现BufferService接口的缓冲区操作类 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; + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 + Vector v = new Vector(); // 创建一个向量用于存储Buffer对象 + Buffer Buffer; // 声明一个Buffer对象 try { - 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); + 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对象添加到向量中 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return v; + return v; // 返回存储所有Buffer对象的向量 } /*通过id查找返回boolean*/ - public Buffer findOutBufferbyId(String id) + // 根据ID查找出货缓冲区的记录 + public Buffer findOutBufferbyId(String id) { - 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; + 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); // 关闭结果集、预编译语句和数据库连接 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + return buffer; // 返回找到的Buffer对象 } - return buffer; -} /*如果缓冲区没有那就把整条记录插入插入操作*/ + // 向出货缓冲区添加新商品记录 public boolean addOutBufferNewProd(String id,int sum) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet=null; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("call InsertOutBuffer(?,?) "); - pstmt.setString(1, id); - pstmt.setInt(2, sum); - - - if( pstmt.executeUpdate()==1) { - flag = true; + pstmt = conn.prepareStatement("call InsertOutBuffer(?,?) "); // 准备存储过程调用语句 + pstmt.setString(1, id); // 设置商品ID参数 + pstmt.setInt(2, sum); // 设置商品数量参数 + + + if( pstmt.executeUpdate()==1) { // 执行更新操作 + flag = true; // 如果成功执行插入,设置标志为true } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + 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,320 +143,351 @@ public class BufferImpl implements BufferService { } */ - + /*如果delmark是1,即是已经添加的商品*/ + // 更新已存在商品的出货缓冲区记录 public boolean addOutBufferExeistProd(String id,int sum,Buffer buffer){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - 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; + 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 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回更新结果标志 } /*获得购物车总价*/ + // 计算出货缓冲区所有商品的总价 public Float OutBufferAllPrice(){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("select sum(price) from OutBuffer "); - resultSet=pstmt.executeQuery(); - if(resultSet.next()) { - return resultSet.getFloat("sum(price)"); + pstmt = conn.prepareStatement("select sum(price) from OutBuffer "); // 准备SQL查询语句 + resultSet=pstmt.executeQuery(); // 执行查询 + if(resultSet.next()) { // 如果有结果 + return resultSet.getFloat("sum(price)"); // 返回总价 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return null; + return null; // 如果没有结果,返回null } - - + + /*结账后对5个表进行操作*/ + // 进行结账操作并更新数据库 public boolean Account(String number,String time,String id,int sum,Float price){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为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 ); - pstmt.setInt(4,sum ); - pstmt.setFloat(5, price); - if(pstmt.execute()) - flag = true; + 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 - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回更新结果标志 } - + /*删除所有购物车*/ + // 清空出货缓冲区 public boolean DelAllOutBuffer(){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("delete from OutBuffer"); - if(pstmt.execute()) - flag = true; + pstmt = conn.prepareStatement("delete from OutBuffer"); // 准备SQL删除语句 + if(pstmt.execute()) // 执行删除操作 + flag = true; // 如果成功执行删除,设置标志为true - - } catch (SQLException e) { - e.printStackTrace(); - }finally { + flag = true; // 如果成功执行删除,设置标志为true - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } /*往订单表插入一条记录*/ + // 向订单表插入一条新记录 public boolean InsertOutOrder(String number,Float allPrice,String time,String username){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - 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; + 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 - - } 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; // 返回插入结果标志 } /*删除缓冲区OutBuffer一条记录通过id*/ + // 根据ID删除出货缓冲区的一条记录 public boolean DelOutBufferById(String id) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("delete from OutBuffer where id=?"); - pstmt.setString(1, id); - if(pstmt.executeUpdate()==1) - flag = true; - - } catch (SQLException e) { - e.printStackTrace(); - }finally { + pstmt = conn.prepareStatement("delete from OutBuffer where id=?"); // 准备SQL删除语句 + pstmt.setString(1, id); // 设置商品ID + if(pstmt.executeUpdate()==1) // 执行删除操作 + flag = true; // 如果成功执行删除,设置标志为true - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } - + /*更改记录通过id*/ + // 更新出货缓冲区记录 public boolean UpdateOutBufferById(String id,int sum) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null; // 初始化结果集对象 try { - 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 { + 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 - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + 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; + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 + Vector v = new Vector(); // 创建一个向量用于存储Production对象 + Production production; // 声明一个Production对象 try { - 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); + 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对象添加到向量中 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return v; + return v; // 返回存储所有Production对象的向量 } - /*通过id查找返回boolean*/ - public Buffer findInBufferbyId(String id) + /** + * 根据商品ID在数据库中查找对应的Buffer对象 + * @param id 商品的ID + * @return 找到的Buffer对象,若未找到则返回null + */ + public Buffer findInBufferbyId(String id) { - 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; - } + 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) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + } + return buffer; // 返回找到的Buffer对象 } - return buffer; -} + + /*如果缓冲区没有那就把整条记录插入插入操作*/ +// 向进货缓冲区添加新商品记录 + /** + * 添加新商品记录到进货缓冲区 + * + * @param id 商品ID + * @param sum 商品数量 + * @return 返回插入操作是否成功的标志 + */ public boolean addInBufferNewProd(String id,int sum) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet=null; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("call InsertInBuffer(?,?) "); - pstmt.setString(1, id); - pstmt.setInt(2, sum); - - - if( pstmt.executeUpdate()==1) { - flag = true; + pstmt = conn.prepareStatement("call InsertInBuffer(?,?) "); // 准备存储过程调用语句 + pstmt.setString(1, id); // 设置商品ID参数 + pstmt.setInt(2, sum); // 设置商品数量参数 + + + if( pstmt.executeUpdate()==1) { // 执行更新操作 + flag = true; // 如果成功执行插入,设置标志为true } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回插入结果标志 } - + + + + // 向进货缓冲区插入一条记录 + // 此方法负责将一个商品记录插入到进货缓冲区中,并返回插入操作是否成功的标志 public boolean insertInBuffer(Production p) { - 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; - } + 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) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + } + return flag; // 返回插入结果标志 } - return flag; -} - + /* 根据商品id获取sum和outprice public Buffer findInBufferSumAndInPrice(String id) { Buffer Buffer = new Buffer(); @@ -467,13 +498,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 { @@ -481,165 +512,206 @@ 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; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - 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; + 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 } - - } 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 InBufferAllPrice(){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("select sum(price) from InBuffer "); - resultSet=pstmt.executeQuery(); - if(resultSet.next()) { - return resultSet.getFloat("sum(price)"); + pstmt = conn.prepareStatement("select sum(price) from InBuffer "); // 准备SQL查询语句 + resultSet=pstmt.executeQuery(); // 执行查询 + if(resultSet.next()) { // 如果有结果 + return resultSet.getFloat("sum(price)"); // 返回总价 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return null; + return null; // 如果没有结果,返回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; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为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 ); - 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); + 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; + return flag; // 返回更新结果标志 } - + + /*删除所有购物车*/ + // 清空进货缓冲区 + /** + * 从数据库中删除进货缓冲区中的所有记录 + * + * @return 返回操作是否成功的标志 + */ public boolean DelAllInBuffer(){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("delete from InBuffer"); - if(pstmt.execute()) - flag = true; - - - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - - JDBCUtil.close(resultSet, pstmt, conn); + 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); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } - /*删除缓冲区InBuffer一条记录通过id*/ + // 根据ID删除进货缓冲区的一条记录 + /** + * 根据商品ID删除进货缓冲区中的一条记录 + * + * @param id 商品ID + * @return 删除操作是否成功的标志 + */ public boolean DelInBufferById(String id) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("delete from InBuffer where id=?"); - pstmt.setString(1, id); - if(pstmt.executeUpdate()==1) - flag = true; - - } catch (SQLException e) { - e.printStackTrace(); - }finally { + pstmt = conn.prepareStatement("delete from InBuffer where id=?"); // 准备SQL删除语句 + pstmt.setString(1, id); // 设置商品ID + if(pstmt.executeUpdate()==1) // 执行删除操作 + flag = true; // 如果成功执行删除,设置标志为true - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } - - - - /*更改记录通过id*/ - public boolean UpdateInBufferById(String id,int sum) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null; + + + + + + /*更改记录通过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; // 初始化结果集对象 try { - 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 { + 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 - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + 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 26b2dab..c35f6b1 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/SupplierInfImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/SupplierInfImpl.java @@ -1,5 +1,9 @@ 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; @@ -8,211 +12,255 @@ 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"; - + Vector supplierInfs = new Vector(); // 创建一个向量用于存储供应商信息 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 + + String SQL = "select * from supplierInf where delmark = 1"; // SQL查询语句,选择未被标记为删除的供应商信息 + try { - 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); + 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); // 将供应商信息对象添加到向量中 } - - } catch (SQLException e) { - e.printStackTrace(); - } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); + + } catch (SQLException e) { // 捕获SQL异常 + 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"); - preparedStatement.setString(1, s); + 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); // 设置查询参数 }else - 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); + 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()+" "); // 打印供应商信息 } - 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); + } catch (SQLException e) { // 捕获SQL异常 + 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; - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + int flag = 0; // 初始化标志为0 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + try { preparedStatement = conn.prepareStatement - ("insert into supplierInf values (null,?,?,?,?,?)"); + ("insert into supplierInf values (null,?,?,?,?,?)"); // 准备SQL插入语句 //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; - } catch (SQLException e) { - 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; // 设置标志为1,表示插入成功 + } catch (SQLException e) { // 捕获SQL异常 + 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; - - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + int flag = 0; // 初始化标志为0 + + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + try { preparedStatement = conn.prepareStatement - ("delete from supplierInf where id = ?"); - preparedStatement.setInt(1, id); - preparedStatement.executeUpdate(); - flag = 1; - } catch (SQLException e) { - e.printStackTrace(); - } finally { - JDBCUtil.close(null,preparedStatement, conn); + ("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); // 关闭预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } + // 更新供应商信息的方法 + /** + * 更新供应商信息 + * + * @param supplierInf 供应商信息对象 + * @return 更新结果标志,1表示成功,0表示失败 + */ @Override public int updateSupplierInf(SupplierInf supplierInf) { - int flag=0; - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; + int flag=0; // 初始化标志为0 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 try { - 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); + 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); // 关闭预编译语句和数据库连接 } - 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"); - resultSet = pstmt.executeQuery(); - while(resultSet.next()){ - - v.add(resultSet.getString("name")); + pstmt = conn.prepareStatement("select * from supplierInf"); // 准备SQL查询语句 + resultSet = pstmt.executeQuery(); // 执行查询 + while(resultSet.next()){ // 遍历结果集 + + v.add(resultSet.getString("name")); // 将供应商名称添加到列表中 } - } catch (SQLException e) { + } catch (SQLException e) { // 捕获SQL异常 // 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; - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet= null; - int id=0; + int flag = -1; // 初始化标志为-1 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + ResultSet resultSet= null; // 初始化结果集对象 + int id=0; // 初始化供应商ID为0 try { - if(name.equals("全部")) - return id; + if(name.equals("全部")) // 如果供应商名称为“全部” + return id; // 返回默认ID preparedStatement = conn.prepareStatement - ("select * from supplierInf where name=?"); - preparedStatement.setString(1, name); - resultSet=preparedStatement.executeQuery(); - if(resultSet.next()){ - return resultSet.getInt("id"); + ("select * from supplierInf where name=?"); // 准备SQL查询语句 + preparedStatement.setString(1, name); // 设置查询参数 + resultSet=preparedStatement.executeQuery(); // 执行查询 + if(resultSet.next()){ // 如果找到对应记录 + return resultSet.getInt("id"); // 返回供应商ID } - - } catch (SQLException e) { - e.printStackTrace(); - } finally { - JDBCUtil.close(null,preparedStatement, conn); + + } catch (SQLException e) { // 捕获SQL异常 + 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/inRecordServiceImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/inRecordServiceImpl.java index bf5f585..9964df6 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/inRecordServiceImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/inRecordServiceImpl.java @@ -1,152 +1,174 @@ 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; - -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; +/** + * 进货记录服务实现类 + * @cwf2210461197 2024/12/2 + * @version 1.0 + */ 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"; - + Vector inRecords = new Vector(); // 创建一个向量用于存储进货记录 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 + + String SQL = "select * from inRecord"; // SQL查询语句,选择所有进货记录 + try { - 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); + 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); // 将进货记录对象添加到向量中 } - - } catch (SQLException e) { - e.printStackTrace(); - } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + } finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 } - return inRecords; + return inRecords; // 返回存储所有进货记录的向量 } - @Override + + /** + * 根据进货单号查询进货记录 + * + * @param iNumber 进货单号 + * @return 包含符合条件的进货记录的向量 + */ +@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 = ?"); - 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); + 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); // 关闭结果集、预编译语句和数据库连接 } - return v; + return v; // 返回存储进货记录的向量 } + @Override - 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; - + // 该方法用于将进货记录添加到数据库中。 +// 参数 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; // 初始化预编译语句对象 + try { preparedStatement = conn.prepareStatement - ("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); + ("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); // 关闭预编译语句和数据库连接 } - - return flag; + + return flag; // 返回插入结果标志 } - @Override + + // 删除进货记录方法,根据进货单号进行删除操作 +@Override public int deleteinRecord(String iNumber) { - int flag = 0; - - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + int flag = 0; // 初始化标志为0 + + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + try { preparedStatement = conn.prepareStatement - ("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); + ("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); // 关闭预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } - public boolean insertInRecord(String iNumber,Production p) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + /** + * 将进货记录插入到数据库中 + * + * @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; // 初始化预编译语句对象 + try { - 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); + 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); // 关闭预编译语句和数据库连接 } - 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 293aa66..6ca4286 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/inOrderService.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/inOrderService.java @@ -1,18 +1,19 @@ package com.lingnan.supermarket.dao; -import java.util.Vector; - import com.lingnan.supermarket.dto.InOrder; +import java.util.Vector; + +// 进货订单服务接口,定义了与进货订单相关的操作 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/dto/InRecord.java b/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java index 5bc40f7..24a7c77 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java @@ -2,26 +2,40 @@ package com.lingnan.supermarket.dto; import com.lingnan.supermarket.dto.base.BsDomain; -public class InRecord extends BsDomain{ - private String iNumber; - private int sum; - private Float inPrice; +// 表示入库记录的数据传输对象类,继承自BsDomain +public class InRecord extends BsDomain { + private String iNumber; // 入库编号 + private int sum; // 入库总数 + private Float inPrice; // 入库单价 + + // 获取入库编号 public String getiNumber() { return iNumber; } + + // 设置入库编号 public void setiNumber(String iNumber) { this.iNumber = iNumber; } + + // 获取入库总数 public int getSum() { return sum; } + + // 设置入库总数 public void setSum(int sum) { this.sum = sum; } + + // 获取入库单价 public Float getInPrice() { return inPrice; } + + // 设置入库单价 public void setInPrice(Float inPrice) { this.inPrice = inPrice; } } + diff --git a/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java b/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java index 96c027a..a5dbb2c 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java @@ -2,22 +2,20 @@ package com.lingnan.supermarket.dto; import com.lingnan.supermarket.dto.base.BaseDomain; - +// 供应商信息类,继承自BaseDomain public class SupplierInf extends BaseDomain{ - private String name; - private String address; - private String contact; - private String email; + private String name; // 供应商名称 + private String address; // 供应商地址 + private String contact; // 供应商联系人 + private String email; // 供应商电子邮件 public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } - private int delmark; - - - + private int delmark; // 删除标记 + public int getDelmark() { return delmark; } @@ -42,4 +40,4 @@ public class SupplierInf extends BaseDomain{ public void setContact(String contact) { this.contact = contact; } - } +} diff --git a/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java b/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java index 60934ee..e662052 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java @@ -1,69 +1,70 @@ package com.lingnan.supermarket.table; -import java.util.List; -import java.util.Vector; - -import javax.swing.JFrame; -import javax.swing.table.AbstractTableModel; - -import com.lingnan.supermarket.dto.Buffer; +import com.lingnan.supermarket.dao.impl.inOrderServiceImpl; +import com.lingnan.supermarket.dao.impl.productionImpl; import com.lingnan.supermarket.dto.InOrder; -import com.lingnan.supermarket.dto.Buffer; -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.dialog.InDialog; +import javax.swing.table.AbstractTableModel; +import java.util.Vector; +// 定义InOrderTM类,继承自AbstractTableModel public class InOrderTM extends AbstractTableModel{ - + + // 定义列名数组 private String [] columnName = {"订单号","总价","时间","负责人","状态"}; + // 实例化生产实现类 private productionImpl prodDao = new productionImpl(); - + + // 用于存储InOrder对象的向量 private Vector InOrders; + // 实例化入库订单服务实现类 private inOrderServiceImpl inOrderImpl= new inOrderServiceImpl(); + // 用于存储当前操作的InOrder对象 private InOrder inOrder ; - + + // 用于存储当前操作的订单号 String iNumber ;/*订单号*/ - - + + // 获取所有入库订单记录 public void allInOrderRecord() { - //将添加的商品加入到静态变量Vector数组中 + // 将添加的商品加入到静态变量Vector数组中 /*prod = InDialog.getProduction();*/ InOrders = inOrderImpl.findAllInOrder(); } - - //查找分类结果 + + // 根据分类查找结果 public void resultOfFind(int catalog) { if(catalog==0) InOrders = inOrderImpl.findAllInOrder(); else InOrders = inOrderImpl.FindStatus(catalog); } - - //根据订单查找 + + // 根据订单号查找 public void resultOfNumber(String Number) { InOrders=new Vector(); inOrder = inOrderImpl.findByIdinOrder(Number); InOrders.add(inOrder); } + // 返回表格行数 @Override public int getRowCount() { return InOrders.size(); } - -/* public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); - } -*/ + + /* public Float getAllPrice() { + return BufferImpl.InBufferAllPrice(); + } + */ + // 返回列数 @Override - public int getColumnCount() { + public int getColumnCount() { return columnName.length; } + // 获取指定单元格的值 @Override public Object getValueAt(int rowIndex, int columnIndex) { inOrder = InOrders.get(rowIndex); @@ -76,7 +77,7 @@ public class InOrderTM extends AbstractTableModel{ }else if(columnIndex==1) { return inOrder.getAllInPrice(); }else if(columnIndex==2) { - return inOrder.getInDate(); + return inOrder.getInDate(); }else if(columnIndex==3) { return inOrder.getPrincipal(); }else if(columnIndex==4) { @@ -92,16 +93,17 @@ public class InOrderTM extends AbstractTableModel{ return null; } } - + + // 返回要修改或删除的记录的订单号 public String getINumber() { /*返回要修改或删除的记录*/ return iNumber; } - - + + // 返回指定列的列名 @Override public String getColumnName(int column) { return columnName[column]; } - - -} + + +} \ 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 8bb0ad9..ee3dbef 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java @@ -1,62 +1,60 @@ package com.lingnan.supermarket.table; -import java.util.List; -import java.util.Vector; - -import javax.swing.JFrame; -import javax.swing.table.AbstractTableModel; - -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.InOrder; +import com.lingnan.supermarket.dao.impl.inRecordServiceImpl; +import com.lingnan.supermarket.dao.impl.productionImpl; import com.lingnan.supermarket.dto.InRecord; -import com.lingnan.supermarket.dto.Buffer; -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.dialog.InDialog; +import javax.swing.table.AbstractTableModel; +import java.util.Vector; +// 定义InRecordTM类,继承自AbstractTableModel public class InRecordTM extends AbstractTableModel{ - + + // 定义列名数组 private String [] columnName = {"订单号","id","数量","金额"}; + // 实例化生产实现类 private productionImpl prodDao = new productionImpl(); - + + // 用于存储InRecord对象的向量 private Vector InRecords; - + // 实例化入库记录服务实现类 private inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); + // 用于存储当前操作的InRecord对象 private InRecord inRecord= new InRecord(); - + // 用于存储当前操作的订单号 private String iNumber ;/*订单号*/ - - + + // 构造方法,接收一个订单号作为参数 public InRecordTM(String iNumber) { this.iNumber=iNumber; } - + + // 根据订单号查找入库记录 public void findInRecordByINumber() { - //将添加的商品加入到静态变量Vector数组中 + // 将添加的商品加入到静态变量Vector数组中 /*prod = InDialog.getProduction();*/ InRecords = inRecordImpl.findByIdinRecord(iNumber); } - - + + // 返回表格行数 @Override public int getRowCount() { return InRecords.size(); } - -/* public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); - } -*/ + + /* public Float getAllPrice() { + return BufferImpl.InBufferAllPrice(); + } + */ + // 返回列数 @Override - public int getColumnCount() { + public int getColumnCount() { return columnName.length; } + // 获取指定单元格的值 @Override public Object getValueAt(int rowIndex, int columnIndex) { inRecord = InRecords.get(rowIndex); @@ -69,23 +67,24 @@ public class InRecordTM extends AbstractTableModel{ }else if(columnIndex==1) { return inRecord.getId(); }else if(columnIndex==2) { - return inRecord.getSum(); + return inRecord.getSum(); }else if(columnIndex==3) { return inRecord.getInPrice(); }else { return null; } } - + + // 返回要修改或删除的记录的订单号 public String getINumber() { /*返回要修改或删除的记录*/ return iNumber; } - - + + // 返回指定列的列名 @Override public String getColumnName(int column) { return columnName[column]; } - - -} + + +} \ 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 b8f28ad..8deb7ee 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InTableModel.java @@ -1,99 +1,87 @@ -package com.lingnan.supermarket.table; +package com.lingnan.supermarket.table; // 定义包名 -import java.util.List; -import java.util.Vector; +import com.lingnan.supermarket.dao.impl.productionImpl; +import com.lingnan.supermarket.dto.Production; -import javax.swing.JFrame; import javax.swing.table.AbstractTableModel; +import java.util.Vector; +// 定义InTableModel类,继承自AbstractTableModel +public class InTableModel extends AbstractTableModel { -import com.lingnan.supermarket.dto.InOrder; - -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.dialog.InDialog; - + // 列名数组 + private String[] columnName = {"id", "名称", "数量", "单价", "价格", "保质期", "类别", "供应商id"}; + // 声明生产实现类的实例 + private productionImpl prodDao = new productionImpl(); -public class InTableModel extends AbstractTableModel{ - - - private String [] columnName = {"id","名称","数量","单价","价格","保质期","类别","供应商id"}; + // 用于存储Production对象的向量 + private Vector v; - private productionImpl prodDao = new productionImpl(); - - private Vector v; + // 用于存储选中记录的id + String id; - - String id ; - - + // 构造方法,接收一个Production的向量作为参数 public InTableModel(Vector v) { - System.out.println("调用imtablemodel里面的构造函数"); - this.v=v; + System.out.println("调用InTableModel里面的构造函数"); + this.v = v; // 将传入的向量赋值给实例变量 } - - - + + // 返回表格行数 public int getRowCount() { - return v.size(); + return v.size(); // 向量的大小即为行数 } - + + // 计算并返回所有商品的总价格 public Float getAllPrice() { - Float allPrice=(float) 0; - for(Production p:v) { - allPrice+=p.getPrice(); + Float allPrice = (float) 0; // 初始化总价格为0 + for (Production p : v) { // 遍历每个Production对象 + allPrice += p.getPrice(); // 累加单个产品的价格 } - return allPrice; + return allPrice; // 返回总价格 } + // 返回列数 @Override - public int getColumnCount() { - return columnName.length; + public int getColumnCount() { + return columnName.length; // 列数为列名数组的长度 } + // 获取指定单元格的值 @Override public Object getValueAt(int rowIndex, int columnIndex) { - Production p = v.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - id=p.getId(); - 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(); - }else if(columnIndex==7) { - return p.getSupplyId(); - }else { - return null; + 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 } } - - public String getId() { /*返回要修改或删除的记录*/ - return id; + + // 返回要修改或删除的记录的ID + public String getId() { + return id; // 返回当前选中记录的ID } - - + + // 返回指定列的列名 @Override public String getColumnName(int column) { - return columnName[column]; + return columnName[column]; // 返回列名 } - - - - - -} +} \ No newline at end of file From dc9579ed19b5526f2ae60db0ceda150676e88740 Mon Sep 17 00:00:00 2001 From: pxeyinm2q Date: Fri, 6 Dec 2024 12:54:25 +0800 Subject: [PATCH 03/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E8=BF=9B?= =?UTF-8?q?=E8=B4=A7=E6=A8=A1=E5=9D=97=E7=9A=84=E4=BB=A3=E7=A0=81=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=20(#2)=20Co-authored-by:=20pxeyinm2q=20=20Co-committed-by:=20pxeyinm2q=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supermarket/dao/impl/BufferImpl.java | 950 ++++++++++-------- .../supermarket/dao/impl/SupplierInfImpl.java | 350 ++++--- .../dao/impl/inOrderServiceImpl.java | 351 ++++--- .../dao/impl/inRecordServiceImpl.java | 250 ++--- 4 files changed, 1018 insertions(+), 883 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/BufferImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/BufferImpl.java index 35da321..6133106 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; -import com.lingnan.supermarket.dao.BufferService; -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.utils.JDBCUtil; - +// 实现BufferService接口的缓冲区操作类 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; + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 + Vector v = new Vector(); // 创建一个向量用于存储Buffer对象 + Buffer Buffer; // 声明一个Buffer对象 try { - 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); + 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对象添加到向量中 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return v; + return v; // 返回存储所有Buffer对象的向量 } /*通过id查找返回boolean*/ - public Buffer findOutBufferbyId(String id) + // 根据ID查找出货缓冲区的记录 + public Buffer findOutBufferbyId(String id) { - 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; + 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); // 关闭结果集、预编译语句和数据库连接 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + return buffer; // 返回找到的Buffer对象 } - return buffer; -} /*如果缓冲区没有那就把整条记录插入插入操作*/ + // 向出货缓冲区添加新商品记录 public boolean addOutBufferNewProd(String id,int sum) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet=null; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("call InsertOutBuffer(?,?) "); - pstmt.setString(1, id); - pstmt.setInt(2, sum); - - - if( pstmt.executeUpdate()==1) { - flag = true; + pstmt = conn.prepareStatement("call InsertOutBuffer(?,?) "); // 准备存储过程调用语句 + pstmt.setString(1, id); // 设置商品ID参数 + pstmt.setInt(2, sum); // 设置商品数量参数 + + + if( pstmt.executeUpdate()==1) { // 执行更新操作 + flag = true; // 如果成功执行插入,设置标志为true } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + 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,320 +143,351 @@ public class BufferImpl implements BufferService { } */ - + /*如果delmark是1,即是已经添加的商品*/ + // 更新已存在商品的出货缓冲区记录 public boolean addOutBufferExeistProd(String id,int sum,Buffer buffer){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - 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; + 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 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回更新结果标志 } /*获得购物车总价*/ + // 计算出货缓冲区所有商品的总价 public Float OutBufferAllPrice(){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("select sum(price) from OutBuffer "); - resultSet=pstmt.executeQuery(); - if(resultSet.next()) { - return resultSet.getFloat("sum(price)"); + pstmt = conn.prepareStatement("select sum(price) from OutBuffer "); // 准备SQL查询语句 + resultSet=pstmt.executeQuery(); // 执行查询 + if(resultSet.next()) { // 如果有结果 + return resultSet.getFloat("sum(price)"); // 返回总价 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return null; + return null; // 如果没有结果,返回null } - - + + /*结账后对5个表进行操作*/ + // 进行结账操作并更新数据库 public boolean Account(String number,String time,String id,int sum,Float price){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为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 ); - pstmt.setInt(4,sum ); - pstmt.setFloat(5, price); - if(pstmt.execute()) - flag = true; + 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 - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回更新结果标志 } - + /*删除所有购物车*/ + // 清空出货缓冲区 public boolean DelAllOutBuffer(){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("delete from OutBuffer"); - if(pstmt.execute()) - flag = true; + pstmt = conn.prepareStatement("delete from OutBuffer"); // 准备SQL删除语句 + if(pstmt.execute()) // 执行删除操作 + flag = true; // 如果成功执行删除,设置标志为true - - } catch (SQLException e) { - e.printStackTrace(); - }finally { + flag = true; // 如果成功执行删除,设置标志为true - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } /*往订单表插入一条记录*/ + // 向订单表插入一条新记录 public boolean InsertOutOrder(String number,Float allPrice,String time,String username){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - 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; + 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 - - } 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; // 返回插入结果标志 } /*删除缓冲区OutBuffer一条记录通过id*/ + // 根据ID删除出货缓冲区的一条记录 public boolean DelOutBufferById(String id) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("delete from OutBuffer where id=?"); - pstmt.setString(1, id); - if(pstmt.executeUpdate()==1) - flag = true; - - } catch (SQLException e) { - e.printStackTrace(); - }finally { + pstmt = conn.prepareStatement("delete from OutBuffer where id=?"); // 准备SQL删除语句 + pstmt.setString(1, id); // 设置商品ID + if(pstmt.executeUpdate()==1) // 执行删除操作 + flag = true; // 如果成功执行删除,设置标志为true - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } - + /*更改记录通过id*/ + // 更新出货缓冲区记录 public boolean UpdateOutBufferById(String id,int sum) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null; // 初始化结果集对象 try { - 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 { + 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 - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + 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; + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 + Vector v = new Vector(); // 创建一个向量用于存储Production对象 + Production production; // 声明一个Production对象 try { - 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); + 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对象添加到向量中 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return v; + return v; // 返回存储所有Production对象的向量 } - /*通过id查找返回boolean*/ - public Buffer findInBufferbyId(String id) + /** + * 根据商品ID在数据库中查找对应的Buffer对象 + * @param id 商品的ID + * @return 找到的Buffer对象,若未找到则返回null + */ + public Buffer findInBufferbyId(String id) { - 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; - } + 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) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + } + return buffer; // 返回找到的Buffer对象 } - return buffer; -} + + /*如果缓冲区没有那就把整条记录插入插入操作*/ +// 向进货缓冲区添加新商品记录 + /** + * 添加新商品记录到进货缓冲区 + * + * @param id 商品ID + * @param sum 商品数量 + * @return 返回插入操作是否成功的标志 + */ public boolean addInBufferNewProd(String id,int sum) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet=null; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("call InsertInBuffer(?,?) "); - pstmt.setString(1, id); - pstmt.setInt(2, sum); - - - if( pstmt.executeUpdate()==1) { - flag = true; + pstmt = conn.prepareStatement("call InsertInBuffer(?,?) "); // 准备存储过程调用语句 + pstmt.setString(1, id); // 设置商品ID参数 + pstmt.setInt(2, sum); // 设置商品数量参数 + + + if( pstmt.executeUpdate()==1) { // 执行更新操作 + flag = true; // 如果成功执行插入,设置标志为true } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回插入结果标志 } - + + + + // 向进货缓冲区插入一条记录 + // 此方法负责将一个商品记录插入到进货缓冲区中,并返回插入操作是否成功的标志 public boolean insertInBuffer(Production p) { - 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; - } + 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) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 + } + return flag; // 返回插入结果标志 } - return flag; -} - + /* 根据商品id获取sum和outprice public Buffer findInBufferSumAndInPrice(String id) { Buffer Buffer = new Buffer(); @@ -467,13 +498,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 { @@ -481,165 +512,206 @@ 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; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - 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; + 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 } - - } 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 InBufferAllPrice(){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("select sum(price) from InBuffer "); - resultSet=pstmt.executeQuery(); - if(resultSet.next()) { - return resultSet.getFloat("sum(price)"); + pstmt = conn.prepareStatement("select sum(price) from InBuffer "); // 准备SQL查询语句 + resultSet=pstmt.executeQuery(); // 执行查询 + if(resultSet.next()) { // 如果有结果 + return resultSet.getFloat("sum(price)"); // 返回总价 } - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return null; + return null; // 如果没有结果,返回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; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为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 ); - 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); + 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; + return flag; // 返回更新结果标志 } - + + /*删除所有购物车*/ + // 清空进货缓冲区 + /** + * 从数据库中删除进货缓冲区中的所有记录 + * + * @return 返回操作是否成功的标志 + */ public boolean DelAllInBuffer(){ - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("delete from InBuffer"); - if(pstmt.execute()) - flag = true; - - - - } catch (SQLException e) { - e.printStackTrace(); - }finally { - - JDBCUtil.close(resultSet, pstmt, conn); + 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); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } - /*删除缓冲区InBuffer一条记录通过id*/ + // 根据ID删除进货缓冲区的一条记录 + /** + * 根据商品ID删除进货缓冲区中的一条记录 + * + * @param id 商品ID + * @return 删除操作是否成功的标志 + */ public boolean DelInBufferById(String id) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null;; + boolean flag = false; // 初始化标志为false + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement pstmt = null; // 初始化预编译语句对象 + ResultSet resultSet = null;; // 初始化结果集对象 try { - pstmt = conn.prepareStatement("delete from InBuffer where id=?"); - pstmt.setString(1, id); - if(pstmt.executeUpdate()==1) - flag = true; - - } catch (SQLException e) { - e.printStackTrace(); - }finally { + pstmt = conn.prepareStatement("delete from InBuffer where id=?"); // 准备SQL删除语句 + pstmt.setString(1, id); // 设置商品ID + if(pstmt.executeUpdate()==1) // 执行删除操作 + flag = true; // 如果成功执行删除,设置标志为true - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } - - - - /*更改记录通过id*/ - public boolean UpdateInBufferById(String id,int sum) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement pstmt = null; - ResultSet resultSet = null; + + + + + + /*更改记录通过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; // 初始化结果集对象 try { - 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 { + 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 - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + }finally { // 无论是否发生异常,都会执行的代码块 + + 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 26b2dab..c35f6b1 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/SupplierInfImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/SupplierInfImpl.java @@ -1,5 +1,9 @@ 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; @@ -8,211 +12,255 @@ 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"; - + Vector supplierInfs = new Vector(); // 创建一个向量用于存储供应商信息 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 + + String SQL = "select * from supplierInf where delmark = 1"; // SQL查询语句,选择未被标记为删除的供应商信息 + try { - 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); + 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); // 将供应商信息对象添加到向量中 } - - } catch (SQLException e) { - e.printStackTrace(); - } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); + + } catch (SQLException e) { // 捕获SQL异常 + 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"); - preparedStatement.setString(1, s); + 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); // 设置查询参数 }else - 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); + 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()+" "); // 打印供应商信息 } - 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); + } catch (SQLException e) { // 捕获SQL异常 + 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; - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + int flag = 0; // 初始化标志为0 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + try { preparedStatement = conn.prepareStatement - ("insert into supplierInf values (null,?,?,?,?,?)"); + ("insert into supplierInf values (null,?,?,?,?,?)"); // 准备SQL插入语句 //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; - } catch (SQLException e) { - 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; // 设置标志为1,表示插入成功 + } catch (SQLException e) { // 捕获SQL异常 + 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; - - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + int flag = 0; // 初始化标志为0 + + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + try { preparedStatement = conn.prepareStatement - ("delete from supplierInf where id = ?"); - preparedStatement.setInt(1, id); - preparedStatement.executeUpdate(); - flag = 1; - } catch (SQLException e) { - e.printStackTrace(); - } finally { - JDBCUtil.close(null,preparedStatement, conn); + ("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); // 关闭预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } + // 更新供应商信息的方法 + /** + * 更新供应商信息 + * + * @param supplierInf 供应商信息对象 + * @return 更新结果标志,1表示成功,0表示失败 + */ @Override public int updateSupplierInf(SupplierInf supplierInf) { - int flag=0; - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; + int flag=0; // 初始化标志为0 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 try { - 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); + 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); // 关闭预编译语句和数据库连接 } - 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"); - resultSet = pstmt.executeQuery(); - while(resultSet.next()){ - - v.add(resultSet.getString("name")); + pstmt = conn.prepareStatement("select * from supplierInf"); // 准备SQL查询语句 + resultSet = pstmt.executeQuery(); // 执行查询 + while(resultSet.next()){ // 遍历结果集 + + v.add(resultSet.getString("name")); // 将供应商名称添加到列表中 } - } catch (SQLException e) { + } catch (SQLException e) { // 捕获SQL异常 // 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; - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet= null; - int id=0; + int flag = -1; // 初始化标志为-1 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + ResultSet resultSet= null; // 初始化结果集对象 + int id=0; // 初始化供应商ID为0 try { - if(name.equals("全部")) - return id; + if(name.equals("全部")) // 如果供应商名称为“全部” + return id; // 返回默认ID preparedStatement = conn.prepareStatement - ("select * from supplierInf where name=?"); - preparedStatement.setString(1, name); - resultSet=preparedStatement.executeQuery(); - if(resultSet.next()){ - return resultSet.getInt("id"); + ("select * from supplierInf where name=?"); // 准备SQL查询语句 + preparedStatement.setString(1, name); // 设置查询参数 + resultSet=preparedStatement.executeQuery(); // 执行查询 + if(resultSet.next()){ // 如果找到对应记录 + return resultSet.getInt("id"); // 返回供应商ID } - - } catch (SQLException e) { - e.printStackTrace(); - } finally { - JDBCUtil.close(null,preparedStatement, conn); + + } catch (SQLException e) { // 捕获SQL异常 + 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/inOrderServiceImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java index fd81c3b..620a3f3 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.java @@ -1,68 +1,62 @@ 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(); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet=null; - + public Vector findAllInOrder() { + Vector inOrders = new Vector(); // 创建一个向量用于存储InOrder对象 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 声明预编译语句对象 + ResultSet resultSet = null; // 声明结果集对象 + + // SQL查询语句,选择未删除的订单并按入库日期降序排列 String SQL = "select * from inOrder where delmark=1 order by inDate desc"; - + try { - preparedStatement = conn.prepareStatement(SQL); - resultSet = preparedStatement.executeQuery(); - while(resultSet.next()) { - InOrder inOrder = new InOrder(); + 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); + inOrders.add(inOrder); // 将InOrder对象添加到向量中 } - + } catch (SQLException e) { - e.printStackTrace(); + e.printStackTrace(); // 捕获并打印异常堆栈信息 } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); + JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 } - return inOrders; - + return inOrders; // 返回存储所有InOrder对象的向量 } - - + @Override public InOrder findByIdinOrder(String iNumber) { - - InOrder inOrder = new InOrder(); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet = null; + InOrder inOrder = new InOrder(); // 创建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()) { + preparedStatement.setString(1, iNumber); // 设置订单号参数 + resultSet = preparedStatement.executeQuery(); // 执行查询 + if (resultSet.next()) { // 如果找到对应记录 + // 从结果集中获取属性并设置到inOrder对象 inOrder.setiNumber(resultSet.getString("iNumber")); inOrder.setAllInPrice(resultSet.getFloat("allInPrice")); inOrder.setInDate(resultSet.getString("inDate")); @@ -70,205 +64,204 @@ 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; + return inOrder; // 返回找到的InOrder对象 } - - + @Override public int addInOrder(String iNumber, float allInPrice) { - int flag = 0; - Timestamp inDate = new Timestamp(System.currentTimeMillis()); - //System.out.println(inDate); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + int flag = 0; // 状态标志,初始化为0 + Timestamp inDate = new Timestamp(System.currentTimeMillis()); // 获取当前时间戳 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 声明预编译语句对象 + try { - 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; + // 准备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; // 标记插入成功 } catch (SQLException e) { - flag = -1; - e.printStackTrace(); + flag = -1; // 插入失败时标记为-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; - - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + int flag = 0; // 状态标志,初始化为0 + + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 声明预编译语句对象 + try { - preparedStatement = conn.prepareStatement - ("update inOrder set delmark=0 where iNumber = ?"); - preparedStatement.setString(1, iNumber); - preparedStatement.executeUpdate(); - flag = 1; + // 准备SQL更新语句,将delmark标记为0表示逻辑删除 + preparedStatement = conn.prepareStatement("update inOrder set delmark=0 where iNumber = ?"); + preparedStatement.setString(1, iNumber); // 设置订单号参数 + preparedStatement.executeUpdate(); // 执行更新操作 + flag = 1; // 标记删除成功 } catch (SQLException e) { - flag = -1; - e.printStackTrace(); + flag = -1; // 删除失败时标记为-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; - 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; // 初始化标志为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); - pstmt.setInt(6, 1); - - if(pstmt.execute()) - flag = true; - - - - } catch (SQLException e) { - e.printStackTrace(); - }finally { + 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 - JDBCUtil.close(resultSet, pstmt, conn); + } catch (SQLException e) { + e.printStackTrace(); // 捕获并打印异常堆栈信息 + } finally { + JDBCUtil.close(resultSet, pstmt, conn); // 关闭结果集、预编译语句和数据库连接 } - return flag; + return flag; // 返回插入结果标志 } - /*更新状态*/ - public boolean updateInOrderStatus(String iNumber,int status) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; + /* 更新状态 */ + public boolean updateInOrderStatus(String iNumber, int status) { + boolean flag = false; // 初始化标志为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); - if(preparedStatement.executeUpdate()==1) + preparedStatement.setInt(1, status); // 设置状态 + preparedStatement.setString(2, iNumber); // 设置订单号 + // 如果更新操作影响了一行,则设置标志为true + 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(); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet=null; - + + // 查找所有待入库订单(待确认) + public Vector findUnconfirmInOrder() { + Vector inOrders = new Vector(); // 创建一个向量用于存储InOrder对象 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 声明预编译语句对象 + ResultSet resultSet = null; // 声明结果集对象 + + // SQL查询语句,选择状态为2并且未删除的订单 String SQL = "select * from inOrder where status=2 and delmark=1"; - + try { - 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); + 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对象添加到向量中 } - + } 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(); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet = null; - Float allInPrice=(float) 0; + // 获取今日进货金额 + 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 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); - resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - allInPrice=resultSet.getFloat("sum(allInPrice)"); - } + preparedStatement.setString(1, date); // 设置起始日期 + preparedStatement.setString(2, date); // 设置结束日期(起始日期+1天) + 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(); - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - ResultSet resultSet=null; - - - - try { + // 查找指定状态订单 + public Vector FindStatus(int status) { + Vector inOrders = new Vector(); // 创建一个向量用于存储InOrder对象 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 声明预编译语句对象 + ResultSet resultSet = null; // 声明结果集对象 + + try { + // 准备SQL查询语句,根据状态查找订单 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.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); + 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对象添加到向量中 } - + } 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 bf5f585..9964df6 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/inRecordServiceImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/inRecordServiceImpl.java @@ -1,152 +1,174 @@ 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; - -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; +/** + * 进货记录服务实现类 + * @cwf2210461197 2024/12/2 + * @version 1.0 + */ 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"; - + Vector inRecords = new Vector(); // 创建一个向量用于存储进货记录 + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + ResultSet resultSet=null; // 初始化结果集对象 + + String SQL = "select * from inRecord"; // SQL查询语句,选择所有进货记录 + try { - 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); + 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); // 将进货记录对象添加到向量中 } - - } catch (SQLException e) { - e.printStackTrace(); - } finally { - JDBCUtil.close(resultSet, preparedStatement, conn); + + } catch (SQLException e) { // 捕获SQL异常 + e.printStackTrace(); // 打印异常堆栈信息 + } finally { // 无论是否发生异常,都会执行的代码块 + JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭结果集、预编译语句和数据库连接 } - return inRecords; + return inRecords; // 返回存储所有进货记录的向量 } - @Override + + /** + * 根据进货单号查询进货记录 + * + * @param iNumber 进货单号 + * @return 包含符合条件的进货记录的向量 + */ +@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 = ?"); - 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); + 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); // 关闭结果集、预编译语句和数据库连接 } - return v; + return v; // 返回存储进货记录的向量 } + @Override - 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; - + // 该方法用于将进货记录添加到数据库中。 +// 参数 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; // 初始化预编译语句对象 + try { preparedStatement = conn.prepareStatement - ("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); + ("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); // 关闭预编译语句和数据库连接 } - - return flag; + + return flag; // 返回插入结果标志 } - @Override + + // 删除进货记录方法,根据进货单号进行删除操作 +@Override public int deleteinRecord(String iNumber) { - int flag = 0; - - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + int flag = 0; // 初始化标志为0 + + Connection conn = JDBCUtil.getConn(); // 获取数据库连接 + PreparedStatement preparedStatement = null; // 初始化预编译语句对象 + try { preparedStatement = conn.prepareStatement - ("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); + ("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); // 关闭预编译语句和数据库连接 } - return flag; + return flag; // 返回删除结果标志 } - public boolean insertInRecord(String iNumber,Production p) { - boolean flag = false; - Connection conn = JDBCUtil.getConn(); - PreparedStatement preparedStatement = null; - + /** + * 将进货记录插入到数据库中 + * + * @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; // 初始化预编译语句对象 + try { - 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); + 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); // 关闭预编译语句和数据库连接 } - return flag; + return flag; // 返回插入结果标志 } - - - -} +} \ No newline at end of file From 7af44e20cacf28c5c77e26244661e9294f6c42fd Mon Sep 17 00:00:00 2001 From: HouXinyu <2283543175@qq.com> Date: Wed, 11 Dec 2024 14:50:41 +0800 Subject: [PATCH 04/20] 4444 --- test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test.txt b/test.txt index d800886..aa33b94 100644 --- a/test.txt +++ b/test.txt @@ -1 +1 @@ -123 \ No newline at end of file +12354545 \ No newline at end of file From b4dc94dd9d3f6249fcfcdc7c1472ec03d673fb07 Mon Sep 17 00:00:00 2001 From: HouXinyu <2283543175@qq.com> Date: Wed, 11 Dec 2024 14:52:00 +0800 Subject: [PATCH 05/20] 255 --- test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test.txt b/test.txt index d800886..336f153 100644 --- a/test.txt +++ b/test.txt @@ -1 +1 @@ -123 \ No newline at end of file +1234566464 \ No newline at end of file From 9afac5cf0b4ca8109e0a54494aa18ec5d899ccda Mon Sep 17 00:00:00 2001 From: HouXinyu <2283543175@qq.com> Date: Wed, 11 Dec 2024 15:26:12 +0800 Subject: [PATCH 06/20] 256 --- .../5b23e521-053a-47c0-ae28-a98b513bc6ec.xml | 39 +------ .../5b23e521-053a-47c0-ae28-a98b513bc6ec.xml | 39 +------ .../supermarket/componet/BGPanel.class | Bin 1147 -> 1147 bytes .../supermarket/dao/impl/BufferImpl.class | Bin 13034 -> 13040 bytes .../dao/impl/SupplierInfImpl.class | Bin 7051 -> 7048 bytes .../dao/impl/UserServiceImpl.class | Bin 7202 -> 7169 bytes .../dao/impl/inOrderServiceImpl.class | Bin 7464 -> 7456 bytes .../dao/impl/inRecordServiceImpl.class | Bin 4968 -> 4968 bytes .../dao/impl/prodCatalogImpl.class | Bin 4909 -> 4891 bytes .../supermarket/dao/impl/productionImpl.class | Bin 8566 -> 8560 bytes .../ChangeStatusDialog$MyItemListener.class | Bin 1387 -> 1369 bytes .../dialog/ChangeStatusDialog.class | Bin 5894 -> 5799 bytes .../supermarket/dialog/ChangeSumDialog.class | Bin 5929 -> 5821 bytes .../supermarket/dialog/CloseDialog.class | Bin 3622 -> 3580 bytes .../lingnan/supermarket/dialog/InDialog.class | Bin 6252 -> 6160 bytes .../supermarket/dialog/OutDialog.class | Bin 4874 -> 4799 bytes .../supermarket/dialog/ProductionDialog.class | Bin 9557 -> 9432 bytes .../dialog/SupplierInfDialog.class | Bin 4084 -> 4049 bytes .../dialog/UserDialog$MyItemListener.class | Bin 1157 -> 1136 bytes .../supermarket/dialog/UserDialog.class | Bin 4813 -> 4744 bytes .../dialog/UserInfDialog$MyItemListener.class | Bin 1551 -> 1533 bytes .../supermarket/dialog/UserInfDialog.class | Bin 5295 -> 5567 bytes .../com/lingnan/supermarket/dto/User.class | Bin 1721 -> 1721 bytes .../lingnan/supermarket/table/InOrderTM.class | Bin 2856 -> 2814 bytes .../supermarket/table/InRecordTM.class | Bin 2279 -> 2267 bytes .../supermarket/table/InTableModel.class | Bin 3052 -> 3012 bytes .../supermarket/table/OutOrderTM.class | Bin 2453 -> 2435 bytes .../supermarket/table/OutRecordTM.class | Bin 2294 -> 2282 bytes .../supermarket/table/OutTableModel.class | Bin 2577 -> 2552 bytes .../supermarket/table/ProdCatalogTM.class | Bin 1999 -> 1983 bytes .../supermarket/table/StorageRecordTM.class | Bin 2071 -> 2044 bytes .../supermarket/table/StorageTableModel.class | Bin 2361 -> 2338 bytes .../table/SupplierTableModel.class | Bin 2259 -> 2245 bytes .../supermarket/table/UserTableModel.class | Bin 2484 -> 2469 bytes .../supermarket/utils/CreateOrder.class | Bin 2422 -> 2373 bytes .../lingnan/supermarket/utils/FontUtil.class | Bin 686 -> 683 bytes .../lingnan/supermarket/utils/tplbTest.class | Bin 2165 -> 2153 bytes .../com/lingnan/supermarket/view/Demo4.class | Bin 2134 -> 2122 bytes .../lingnan/supermarket/view/HomeView.class | Bin 4672 -> 4621 bytes .../view/InView$MyItemListener.class | Bin 1455 -> 1434 bytes .../com/lingnan/supermarket/view/InView.class | Bin 14647 -> 14282 bytes .../lingnan/supermarket/view/LoginView.class | Bin 4527 -> 4482 bytes .../lingnan/supermarket/view/MainView.class | Bin 14842 -> 14702 bytes .../lingnan/supermarket/view/OutView.class | Bin 10103 -> 9884 bytes .../supermarket/view/ProdCatalogView.class | Bin 5729 -> 5711 bytes .../supermarket/view/StorageView.class | Bin 6686 -> 6612 bytes .../supermarket/view/SupplierView.class | Bin 5903 -> 5844 bytes .../lingnan/supermarket/view/UserView.class | Bin 5732 -> 5675 bytes .../supermarket/view/base/BaseView.class | Bin 1934 -> 1916 bytes .../lingnan/supermarket/componet/BGPanel.java | 40 ++++--- .../supermarket/dialog/UserInfDialog.java | 109 +++++++++++++++--- 51 files changed, 120 insertions(+), 107 deletions(-) diff --git a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml b/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml index 905f93f..6ba1d51 100644 --- a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml +++ b/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml @@ -1,44 +1,7 @@ - - lower/lower - InnoDB - InnoDB - |root||root|localhost|ALTER|G -|root||root|localhost|ALTER ROUTINE|G -|root||root|localhost|CREATE|G -|root||root|localhost|CREATE ROUTINE|G -|root||root|localhost|CREATE TABLESPACE|G -|root||root|localhost|CREATE TEMPORARY TABLES|G -|root||root|localhost|CREATE USER|G -|root||root|localhost|CREATE VIEW|G -|root||root|localhost|DELETE|G -|root||root|localhost|DROP|G -|root||root|localhost|EVENT|G -|root||root|localhost|EXECUTE|G -|root||root|localhost|FILE|G -|root||root|localhost|INDEX|G -|root||root|localhost|INSERT|G -|root||root|localhost|LOCK TABLES|G -|root||root|localhost|PROCESS|G -|root||root|localhost|REFERENCES|G -|root||root|localhost|RELOAD|G -|root||root|localhost|REPLICATION CLIENT|G -|root||root|localhost|REPLICATION SLAVE|G -|root||root|localhost|SELECT|G -|root||root|localhost|SHOW DATABASES|G -|root||root|localhost|SHOW VIEW|G -|root||root|localhost|SHUTDOWN|G -|root||mysql.session|localhost|SUPER|G -|root||root|localhost|SUPER|G -|root||root|localhost|TRIGGER|G -|root||root|localhost|UPDATE|G -|root||root|localhost|grant option|G -performance_schema|schema||mysql.session|localhost|SELECT|G -sys|schema||mysql.sys|localhost|TRIGGER|G - 5.7.44 - + big5 1 diff --git a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml b/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml index 905f93f..6ba1d51 100644 --- a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml +++ b/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml @@ -1,44 +1,7 @@ - - lower/lower - InnoDB - InnoDB - |root||root|localhost|ALTER|G -|root||root|localhost|ALTER ROUTINE|G -|root||root|localhost|CREATE|G -|root||root|localhost|CREATE ROUTINE|G -|root||root|localhost|CREATE TABLESPACE|G -|root||root|localhost|CREATE TEMPORARY TABLES|G -|root||root|localhost|CREATE USER|G -|root||root|localhost|CREATE VIEW|G -|root||root|localhost|DELETE|G -|root||root|localhost|DROP|G -|root||root|localhost|EVENT|G -|root||root|localhost|EXECUTE|G -|root||root|localhost|FILE|G -|root||root|localhost|INDEX|G -|root||root|localhost|INSERT|G -|root||root|localhost|LOCK TABLES|G -|root||root|localhost|PROCESS|G -|root||root|localhost|REFERENCES|G -|root||root|localhost|RELOAD|G -|root||root|localhost|REPLICATION CLIENT|G -|root||root|localhost|REPLICATION SLAVE|G -|root||root|localhost|SELECT|G -|root||root|localhost|SHOW DATABASES|G -|root||root|localhost|SHOW VIEW|G -|root||root|localhost|SHUTDOWN|G -|root||mysql.session|localhost|SUPER|G -|root||root|localhost|SUPER|G -|root||root|localhost|TRIGGER|G -|root||root|localhost|UPDATE|G -|root||root|localhost|grant option|G -performance_schema|schema||mysql.session|localhost|SELECT|G -sys|schema||mysql.sys|localhost|TRIGGER|G - 5.7.44 - + big5 1 diff --git a/Supermarket/bin/com/lingnan/supermarket/componet/BGPanel.class b/Supermarket/bin/com/lingnan/supermarket/componet/BGPanel.class index 48fb91731c1ae2154c3789cd79e2d96b12ee0d8d..a42e4a1caa418317da53327797933728d18ae7fe 100644 GIT binary patch delta 65 zcmey(@tb2q7_%rB0}BHW11AGNgD`_2gDj9#W)Pj6&78_B4wR7u%E$oa diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/impl/BufferImpl.class b/Supermarket/bin/com/lingnan/supermarket/dao/impl/BufferImpl.class index 9f357e5bd54151b682114d1a63da34a5b6e45d38..0fd2a16478e90e3aaf76830edde213ae5dcbfc2a 100644 GIT binary patch delta 1941 zcmY+Dc~F&Q7{!0j3$Yr8fr5Z6W(K$*Dh85>feEgNqL_+^S5i?7sdOAeb8oTirdcjI zQ<}E8eJ(Vk32ifKV`^fWlUhwKSxt>i+l*5uYntgF&OMj={=Rdb=l#C*{pj1ZH7syS zWxdb8J2c9BH*B2+|Lu~BX8Cu7b@1l5+8b!Cy^P3V)(}k~Z3&_sA;b_#9PNoGnFP}4 zKu;3sPZC4*%{Wr1rX%&-#UeVfio01)XSQ( zL^01YSePNasfh0|jH3+aEF<`Wk$U)8u1c>Yor%Vs@15nO+q)T)Ik+GqykL}*{r}#OqTk1&$}9% zWhFU^)={iyT5YJb0paD%Q|eWrZ2e6F-mI*8wIU50)lbmcZBtkGZHqGENP zD!kKAma+`f4+@ycEPWHA3sK8##Rw%PM7>ifI)~E;pT|2Kw`Dz6bqu8 z1=B~%&bLsCEsRkX&KNCzlHEy_Mc}j6OqZV{|EP44bcscI)g5vyzdg?42(oxWErC{+ zNLx!H(UM8C6uQ_w^s-dp?;_he(NBJ$e37(NT4rhfbs6*g4<@}{m?2URf-RFU>&flb zn;6R?+4_iduPE7MSsr=Tp8?jF0?QR8kCF1DrIVypmhZpWV~KYxIole_2(&Q@HddX> ziL~*ww+X^c6t04vHi`aL$xxfjIIE)CrciG_b(_j6t7g4D#5S8oqfO^So52aIQ{(tZ7tKQ;{E!Ob3LNqAELQQ88ZEP`dwuFwhlyqB8Z(G6r zwvrNik_vl@nf5gE?HN|uDqgf_*<#P(*=jzp=V`GuoV5*Hlzt_>W*hm=Ug8IPnH%zd z$ltUL7GxVO)HeMS#`~;O2P=GAgWaLQ?$ls+X|Q`VSWlDKt4SPCh(@jFu%^+ZFb65L zL%IcrwI01?(n{$RYxZ(FZ?%RaLLF6~W9sveE7v zonfAR#xgt0T06&P`&>i)f<1PDz4i?U?J|e$E1KTd*a@~n{8Qkr9(931hSK3cn=yDk3dQE=s+*%n)RQ6K zM?Ob-zjUCR=aqC1vixO2EEi%0p>8Fu+*7o5PwV(Iq`6geaW5#{8XbL(Y`0n|U(nGt z6iG{^Wp1svE+febUl(Q@!EQTY?hS5tZxQ3(CfV%}W~UIl$a4G1a|amU_E6wFA@(y; VezbIww8}N=b=_u1{97{%{sN}6lo|j4 delta 1825 zcmY+Ddr*{R7{$-?g50GMK>@ifsK|n_semquAS}5ka%V*#MOYXW#1XtjhMHN9W>a5Y z^43MXrFr|%yd-3KuS}cKRI=2{M9n}QHIwQz%{0?L`}@w$zUMv9dA@D8-?H!8KyL#)*ZmY!k9~EMqs_k$K((65%9K};NbsHlMJ>dvnIKdAt@JBZU@-qkq1jC3B z4CGT1LXm+mj6-i!q7UlO7xNL0W$1@Bh`<*9az7$*3{g1C6BjTDmtaCGp2bz_8`N!N z2l)W8Cd;SG$YO$N4M3=SX@r;&w=$i@}q^72C5ByW@V8UG;)@R$yrD3mT3CoZHH>7!7j zkM}vOtjpnm6)a*U+_4ItSj}42aMZO-w~i^+)BRmKZbmW39*+$uMI$PxYpAD_bIEzw zs$Dj|sXg@FYTd!fc5<>^blpu?9o}d{0QR!PeJrGzlkMZo&2(?!YzH~lAFndoc!F*x>2``4zhK5MxuUPQf-`jdnr>&=%sJ%a8;r$eW^85Y z7nt)~Orfr$o<%MoU%_`;O|QM$>gXPtIlxQ%EZUZcYYcszp?~BxKk=Fy4E+n=jGJ6Z zJA-#{>vwqFuiSDw;;GGK3Yms`nk}YE%MCo0{fI#y)8ThIJYmqM4BE+{ed~yO=CWG}1!(nN#!co#0Y7|^#G`dM9{3VN4*|f^R zK*>dt+>lD|TFv3S5$jXq7TtrM^Mk zMs|=7r1F3Nq7C}uu=CPT%@9)=qK3^(gO^N4FR4YC)FD!4B35Q0MP?&g=3uma4JTw^{0Pmb#Lqu3{7Ku!*${v5u>0WE&e9=6zV?1HJ)`T+K$VrV*uN zxopyt!Z%67hqT(pdA4(&kGScb-1IJl%5Fr<9+*YvW}CQ=y_{zss^nwLk^NXC2e3j8 z;ypRUQk$_yTF@lN@rj&3i+qkFaumm@&rqKuTgmU`%)f=N!A0F?^9!arNzS0f z7+Pe)Rb|0L<)DYk0$HYJXc>lu+N%S4OTD&z GK3o)*VA`^Vb$Pc`iZ zS3{-UWw{;KZN_Q!hew&Jsf=YBVN55S7$!13!O>N&gVV-ExD zY6P>o~$jb@wZV6ppLg33aL=lVjwF7l;=L%Y+r2YzU1U@t%|Fd8sx^wMnYYQoW!l zFEUI1-Lxvys|xe7LTpi&R#uC9g-OC>+AObgmGRw>%uUI3N~TK^w`AhhiRSq{lK8l+a*T<8q5NOURWIXt#Ux&92Yt+> zU+aFOHNMq$1|>bD4Gd`RcS?Lv$qtbvED#p)-df=bnCvfd_*D+S$>DcN{*dHPrZ7yj z36bQmhW(`*^;^UK(S7*KTK*}{5mI%YF3b?-nlbEWlzamR#Y@G@g|)&uV`~_VI{hD- C&Y;Ku delta 708 zcmWNP+f$5j9L7Jth8;UYq}j5KL*#sD;-ZzAB7_`UcD5RdWLHE-#%!a~+Fi{kszpw- zWrjw`7;j=+Af}LJoW_Og#)TVyK^LBRFP`_A-|v0C&+~lWR@Y@$uYHF7Z~N7WQ2(FM zpurh!vN^3Z`@mF_V118IF+K;=NMbt4#50EkQgASj`FfVJfDBT}Vj(+OL=kEDSlCh|aUDGGmW$cC`cgy-s8M!5!F25usRvZ*$GtkVR@0Sg?Rkk*B36`Gr9=s;d@*8#NO4g!Ml`R{l#0}9 zQnN3$SFEIo2txQ^g%I-#K1i$+Lf#MOfByeB&pFTYoa*q(aG>Gmxl2HIODqq(G5?7# zjiUm23rc2{6faE8Nv&&IXMv3W)IIOZ^%<6Fbay}b(%q21Pnu)VJ{~w0!*hpc7VB7? z1sz^n$g$>pa4g=P<4>~$uiT#!K^0GcvLCWa8hP+1yAGQ(-5pRyPuBL(C!Rxji96*7(S%w__M znMj05tfZI?OlK35*}@cD@m=D3gf+riX8sW`qM6?Riu+~eh;)W~RiO=5GFy|Fi^Du( znNNsC5??|lrRs4hy;#Ozmdi$jsjOg*BuiPvddk?&YARX7KFQaznWL=Zxa^z~zbJl1 z*dV;kR(E6kqhP3KJ;B_1as+?Q-ok_(7TF;K6*5q%?suvC-7>IOgRj>3_cKDnpTI$i z)XxkK%j!|tJ0=^)Dd&Vbt&_ON8BTIT()Xz68K-%rn~z-Jv#k8!lKHu8rQEbKZrNI{ z+Ip_pX7TMYx~R~hT6lm4Z)Z}G4ZN$(+}CCvYBP@%kH^Gm=_x!VofitjO9kOAJ$Of0 zN_}`uKk>ohLxlyxLO#0TkL@p|#I!t26Ymi~X`HUC!b IR<&I78#9%{wg3PC delta 899 zcmX|39yOm%{;pBT9x4j*G5Vq9lq-#j;>|X*nCsrJhP6b=hbQ>WmQ# z<`rLMEQ>jeU~3if3KrgAqqVWMW?NhTIIrcFfu*J8B>Sqfy?^|k-}5~0?|XadiaLsd zBmWMZ0A^dHC3q<=$b*Nj#`)qGY>ie$*T0>a@7?zGT735X);;Pk2sr#=j#222`m-(5 z4F~3BC0NMMkB%jB*5QnW9ZRz0JNG6zmcnn2rMgvtEKBot1*Z6X8M%w|%G}t*h!wkC z31b%WT0`{~OXdM4;U|S4sU#55HASnaGROtXO;!YHHUmlQlG9qLv@B~9*^;yRIenUb05oDf!}KjM=dso3Cv|8MI!Me zA&N<(L=+YZ{wa-KBqEEovxH|w6(sU9$*dLlE7G=(M_Dg=8w45U1zy$e zYi#0mYS>5fe|8mV9} z?BN^f|3QJB5w(l7GAb{w@e$*EYysM>hEJ@XPHW_VHPK-^)b9&vqfLtr)lRy->PUr^ zeyL=7luWOZIjrZ=N0=i_5lS`#6mXPTl2@n)QN%IkaYC65%BUe_GAOf#Sk15-N$;{# z-pTY5i=ETJ^BQ)6BvDJ_XAQfg*YvBLzAUk$Ji(ZTTv1%V>*qh@{Z)y*CTsqb{J$jg oI&IvL=ZZ;k&W@4g?oTRXMkKMRh{b^rhX diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.class b/Supermarket/bin/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.class index 6eb7a4a9836950ad15b3cd9a63acf54da42c2c04..faf169f7c6c382dc4334b56805955f25419171ef 100644 GIT binary patch delta 865 zcmWNPYfO$|7{~ulO%fenB`xQ(#!5D7L`=~nnFz%DRZO&u(B0e~coPK*g{GaRIeP92>bv1^b3T;VuHC${Nu6~BqP0n)H5P8T= zo_s^)tzjA|Urp3-1irrXceca8l^0aR-wkITw_(GajMZ|oz@hc)dbb^s+qc# z`Z9PO>{5W)>sx0Yb?;9Oge?fR8E^*6OS9-bn|C3au2BBwXp!bBPGL&XJf&;C^0WZ9 z#VP^IzzQuL#!aY*&=o=TT%7n^~SM3Gq0QV&tIZc#D-qE99eilqYB^ zZi2NMt~Gc|<{&|pC|sqA(jl$X5#*I4sX|*+iNIq-WkOPcz)IzVrQl&z+0wkDjqu|r zJfVR)DHkT?tvV)oMw4_7RrRQ9BKKzUZh)eZT${9vIu=X>lXTwJ?~`d*FQKlL;n`5v zhV^z@U7^)gjCNr18s<8Q^9JE|u_`xFbPGSX(Rznfxy#Uc5MXCj?m^s5^By|dS(P4E z#m=kywqD;K))7Fi#(B`~9j7>qlDl(ee{5KhyFHWBSVKeIwuRtlkgI|70A$Xw|Rn`pxq{r2dz6 k`=?q%sxtI0rJp5 zdCFft8l=H|Mr()yHB`YGrYH^9QjJimMk-UIl+Ujv8l$5ct1?Z{2~E^VjZ>AztCn*k z=L_HsuvvljZja+8B?zius6y0F)8(a51t^SR;XH~^kY;I)B9)-oTFtj~&DBoLgKEAC zz#{Ol;#H~`C}U;gT+O)#YyvN8fwimuUQ=kz^sG-@jwxxe9JB;u%jB*9H!HE1gq>AL zP1aYN672xn3(|;Z-Ux*6}S(o4CsWv%x%VwB~pfnWlm!NhNL_SgGX_9tm3a)~=3+FBpj0NMh$NtPa)FkYaqxKV1 zfm~IH@FMxCnCuS_QHiGMAVD2cw5(c07)d&Ug>q!s5LrfK#}HBukxje6LauF{w5jJn0BW{lp(el5b0g|a*q)2qv!z^ThafJzC1!_8+~b~FHaEk6cKF@ zw9}V1`qIv%=hkkIO6vx{mbe$Ny@c%*m3d9rZ|LY-@_0wj-Xr=03;YP%Cu-BddOKO# zXIA=!)pd|ZC(G$z37v%AWzY35HI}c8>|x|LMt*1H4>t9a7XBjQ-?Z=#{{Jf8NXf=% uvvE+aaa4inrBc&dHshp98l`DZ8?aJ({G(jV=2wBZFyTP#DIVXp)g#mSR%Knx&a3YW^vg zZrnRp=X>AZ*Lk0Fek?zh?;?|tdSx;FIx>kR3p3dyl0!0iq>)c91z0Ggnj&oaYNHrC zCCpID0%a^w#fDzDsK7@he$7XkPo>w=8>|tpIbb;IW#2#ojU>@TDlM{Zm06p9YNw74 zZ9D0si*dS{rH4&=*=0ypcFq~#l0gERA2dHp!_qH?BhEy(;cyYf1TjqNgj@F0q>C|2 zMtRJMdtN*qC0NkWMHzePXN?io8B+!)%eYu!N;{8sUg@UP$3`S0slaI2mi-RViWkS8 zO4`?n166gXYK~-ors(HNa*UM|YQ${Qu0gwIX}7eGi-20!$QBU}oC&Q-{!V3wS<}YDj&@$DPa0q=R+v>~4DJZON1_f=I8aH4 zy5fiuj#a~n@O~Qfu}xJpai*L;UFBDf00Yu7sgsLX&}20nL7^_?^omrj)$xsrxK&$s ls^wlWALZ;xIYROsma}I$dy$`zoP}i|BzRcBNaQd3@E*begm0HOdOrT_o{ delta 93 zcmbQOwpMM!F;+*;XG^-Dw{3qmVL2lMlYtQ<1Lw;Li(by1{cQClkbp5GgAh>QdE1U> rOZEd9k6V_4m2$r9?SD3B>+?-(CjVfK0NMZcLhwScV+R!p=A5eLiN58Cum=GC3;_QCHYq_n{(Njr2y^(4{rbf diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeStatusDialog$MyItemListener.class b/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeStatusDialog$MyItemListener.class index f97e071d6dca43059dcf9a7b723b3ab17f870da6..1a2b49caf3250f501692d0acbc4477704dfe0769 100644 GIT binary patch delta 118 zcmaFOb(3pDK9ecu)9ss{wl00TYcdam4TCK^gB=fpJ%a-y1LxCytq=)D2A-$=)1GbX zc(HEL)846!3=WeQG8<0zX5`=ejVXhXv3znoOP^vj0|!G5g8)MBO~g zX+{R2m%THeEm-k<`S$0N8XtEoc)Df&=7mhF85t`k`?B;Y)-Z4|)G`P#)G2LspnVNLbJ>cvgP$~kltnenknHw+z8B=luznPi(f45B{=@sMEyz|m>+Uk~i z{xvMlmTXxeb^56MxWC$GOF&lI+>&~mPR`k~N`f}0IV04Xw~o0xw8YIUPp$TOW7BG7 zbDo&stJ0hfe``48<u{Yi1CgKeAL7jF7b`a{Gf|pT;Vs};-g0b zT$M1_WFx&!B-kSN+-z{Yv_D`O4z-NXKvH2Tb~4Hy9;wN=VxKBvf*#V`Aft)rdL|Y2 Yg7@V3K!Hz8@fnw|s_~r}C$#40A1Zde{Qv*} delta 594 zcmY+AU2Ka{9EYECL6y>~l4TN!AhyH^k!+E;K-he*S1gQ_MSWB@-&x#j%XAIaR$sGj zOluqMXshyeU4um;aZ4f*S0Xg;X&b>EH!hrwG$iNZ{m;-dtADY%6zDOMVO7V%G28-kSx2id*RNP^#D?-+ zUOCz|eYs*phNrl`Vb^(=r`7$(NN+bg#isRTPt~z_J@L6CtP*9mN|jgmf)@V^i(D=F zGqO8j#BNUk{m*1~D&IM%|CntvRd2;a9ZRUEiUw-f&N_Bb%T6}4Tcvy0#a*=?l2%;0OWr6?bXjA#TPw&Pz3Y!%5zAijR2s!fAfe$}if) zOwI@!XGJCF#4;{w!m&;C>J5&i!l^NXo6Mz;YWfu{%mxP7!l1H=aDaOXGeR5pxx@o* eF-Dw63YOp%DPHr0x9Geh!w0f_BBwoF`1LoR2LnI= diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeSumDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeSumDialog.class index c835e1e72847c21da1f77e73cd4da44650670b36..edc1b1026550b7836a89b36042e68228b74303bc 100644 GIT binary patch delta 330 zcmZ3fw^w(ABfGHBv)NmoP1*T$YTMJvjnAfTc-h`RIhOsjvfz{b>)_&w13*OZ5@;Ea~S$cKI?3Fv8)kd zCftDH(p+1RsgmrBQap^(jO>gI4D5_DJdCo8a*Pc8FV=5=v2XIz)}>F^^*o!p1!&^4 z{t3^Q?3!H4sVF6hkX^F;$*w*FxT%x(bH0odc)Dxy)3q}ojsrU0ijhHH2Vy-$45X`7fYd#O7AwxY}?CFw?FSaaYWYC-Zfm3oa4~yvL I2=0sA0QfYc_W%F@ delta 468 zcmZ8dxlTe+6gz`1r!!GE;SNR3d4E>2$Eo1+8y}U+iJ0F5TD9@QWGjpc7{%kAlO3M~C=wpRD9&M=pG>gZ1D5D15?M8(q z-U*z+55gK%3`Tk(<@U{7_I=$nN69A+UZdY1O@fm+g)pmzvg|g`lW8^f`nR6O8BGTz z0>^MfP=|T~hj4(PANWv*ZqK5P{U8J!;Oyf51b@hij7$}s-MOL$s+yn(N83%AUuV_e z6-yO(F+7ktzdYUP#xO}}CTKwk0VJF!xPXfYMiKFe*o%-0sz2EBJc?*uyVMlBPJuf2 z7F+Hl-PSKzSI3www~tp-8gp~(xn4CUO7)*E6Ax8*q%5cwtY2TRm@NdGb=ccKsClq* viRImbMp(Ec-aG>Vf*ZJrFgH93RJb?KGWP`S;2K4^QtK$WPUfjxH%yRU*!lJM diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/CloseDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/CloseDialog.class index f75dc3323bf3da29bf41228af98583f437889f40..ab82379436a5747ff2d77a1f2987b1c1aa5854fd 100644 GIT binary patch delta 126 zcmZ1`^GAAvFe^LTv;GOsm+YD>%eq`c{aMqB7yD;Co3rZq?#VBsIfr=c^DiR92prnpX}&`2{?fS*q-)Jd$z4(ay;8q UULJ_dv#A@N^{(5@&Mwam00XK)xc~qF delta 168 zcmew(y-a3ZIrU|K$GgV1=bKhMpETk9 zjy=z}%zfG4@~&gnv*yNU+uNV*Z+ku&B=xR!!P7yX7S-E=?&(gzS>#Pj>YgJfGD9HTDXZRlWN2J(HiVo$<71*OMK+AjX^(@AvdP>z@QP z?%A{r5XH}W*YPmwGTJgS2t#C^PUtHGN?R0hRKW!P!B!pnDDe~ nJ|hD^#Ak4$85z`*^KFN delta 362 zcmZ9I%}N4M7>3WOg`H_uMlc|_3z7(I7g5XBE$Rk>_O)nV(^&Sy{N$+-$7qDe8Ei^Z zQ#2>(4!Vcwoa2$8TWFkxMavJK?|ENdBmI@GRbq)aaqkAzI&p5fYLk4P8jc7~VH|=5 zyfi7{kBJ#Pj41+Qy(3z3h~IDQPt8IBab5oGHA$h14YZy>V~q%Q!5##Ns|8wenbXEY zv^^)WT$Y(t)_&xw9w_(h+6x8WeSbu1uQc-%$QIraQmOfWWFTkh%S}k8x#5xvk6Jc2 z>*0+ZVdY?TR4dnD*yXA@@N3LFV~0iRc4?==uZraPjrd9wS*G^+uR-gC1`#g8H3*WU z0@@|fPq=E4wiQtiVJ?&Ph+2l5BHRKPfgy&0k zP5#cNDJzMPU9$Yiu0Dh3vsxg=GBW5-c3_p5?9U=Txte`asQlAilb^1g0g-&Nqxb2O z`S17izy+;%7(OyG^Dwe7vhpypF|zY8axi2wGC+OstYgB{uKA1%{1C5zw6C459cK)^B>ceBR66`A?@$e>Pz`4?`lubw&p5$${(=lf#*WC#SOJ zb8$Z3)AVe?@~3zxF3kxyg@+-EA)1ka^JVYMXA4$5 zU%q{EI9sNw#Pdn*&!??_zJ2Y>-u}nUOP^0&12o|M{=FcTeY>Bvtb5!zYw}GtO&tw1 zm5&?SpKYB3RB7;X!iuNeYo5)T|8m+UuugrT10^R1u!v3eW1pm__iVzJXOlKRpS%L@ zv}fBUKi$^)Zf48NDYKt$-1~gP#^(*QpRL#pG-L9Ac5y=_zxQo<*0Sd5^4W|G67X<< XXa^bCy9{ih2G~LYX8z3y9PwNLTzIjy diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/ProductionDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/ProductionDialog.class index ea8ac5e9ed17721c11db5c35e5136fe47933cd66..eb9ddd9b7bdfd317108ca96cb4b324da8e7c8ad9 100644 GIT binary patch delta 447 zcmZ9I!Ab&A6o${;OeA+qC3i&xk+sR%1Z~^ZuAZP5i4?+2Gp(zpr75Xtg*evK;Ed%i zdV#=o%(*i{5WPWj8``w~zW@9`=Y4ayq0Gr+64wk&RN0cO$P{xiWKpZ1$F#=2<+VKt zGbyX7P&frf;Swqok`N<6?ZJhuHZhem4UNK?pfy2{T&lLsp7KWvg4P912|8&G%C_3# zrOE;?#ZBXx=afYXMPW6Bbu26ib%xXJ0)=w{t_4U7FmAqFpq_Q6vXS@0BUxR;8A+kc zKE3lS?3rM)Z+k|b xuX#L!i3%leFmznh?wt`>YT2EJdyGKP?fmLT-2~RVw%Q;NW?P={!){<0_yH-?(dz&J delta 568 zcmZ{hzfaph6vv;p8l53^B^D}FB>Dp}l&KP1S6I4tYX6cdBqdQ&$H5nx;NW02Y3z~~ zLWmM*YMHTHyC7xh(s1v%h5ie@^ANExo$kJ$?|bk2ZoF~1*~2P}%|wXy#0p0Hdt$o*~*aDWnMzyX0GY-?bm_XP+0Xg7sb#k$K& z#{{a1X)5MJ!f>a2^WMYa$t|X)n3iHJ#XQ1c4&wqFdcw~Ci=$`qVE#U?zAR8$pTRmmp}METQIl;O3AzDhk^(326jlYWQLkpl>85B-n_Lt0F| zSY4bhkF`6pDIc9o@;-CFiI1_oD!w$r?9n9c(m$!CjYaO{cqWn(YZX~1oZ98G6JA>* z+PU^!gF8u?NRssV{Wq`8=}(GMAG2RsP$$|?7;CV=j?U0_h)Vq`I%i%%SQTFAP0~B^-&FZE;~~A6neUln^FJjoE!O}5 diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/SupplierInfDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/SupplierInfDialog.class index bb919d11813e58131fe76b19ddf33c0a76454be1..d2ff2fec881d72aea4035d3082bc1e53d02001b3 100644 GIT binary patch delta 167 zcmew&e^GveAS*lDv+cW|b}g7J&ANu2?dgQx=gT)tzQAf}&h~W9hNp8Ico@7Hym%M_ z82ot{+!$OK8Q7jr+4^GrTpk7=ka!?S+#M|bvT5D(bsHypvZ;%*J=s6^>Dn1Q48aT` zKpju}r#;)&F}a&9M~nwz+p~@dPrK#=rJnUqc)n!UWHEL%UZ~X5B^zICSvpyPRc3QG HdnX3~cx^=5 delta 202 zcmca8|3!X-AS)N=(-n(ftl#u>`Mk*ztZO(qUiQv480Sx{;3~mfAj0~JFCoFohxB2;uy*vy)AgMr*lsiOf+S+$*``)#6OtxlI zm*#x7z5Ut#w&#;q@Gt~3gn+d6&V06D#q;IcCzrG3$P2+;@Um~qvz9eam(K>N>D&FR kW!>Y(S(AUVsR<+0JlnVJ#lF=qmM@zu%POa&R(U-r%hss@TY-@V}do|b1#T@aDY;!L58j1wm3GB>DBVc=kx${@fn mjX{!OI)fs^3<6Z*|#|+5D|OGxFNbP0UVz6cn2SnY_#x4~JB2rCwOE;9TsoGXX0% z{-4Nh&Fj>RacRW*WnQap(Cn!(BbwDYL5t2AT6LOe6li8n7)oGkFR0&kw<#$?bM zy{&Vqz|R)=@%j4r-Tc#->~-EN*JeM(jWGNOZKCL~uDd6(+*LS`stghvXW zL}OMWCzC~M%KoK{#5;Q`Dex#+PufxZevx|vPAXW!I@Ys^EmW~xowaPEjvXAPhNIM` zXG%*J`0FTPH_OefCX`y17QUz@d{@FV zO3vmqztuke&?c0KSV6n+;1yL|6gBw7emX=mm&7?P3m={03SHt(1>NESSB2!77^X)g zxh_)N5LtS~XKsqG_+_Z|}slJf@yOj_^bc_KbF( Z(?Oh0HL#zTgh;5$F_nFlPAy(7{sP`(wJrbv delta 631 zcmZ9ITS${(9L9fdx@Jiq_pdH!A2_txhNaVZwV`y@O) zV|X5ET;i)BOaH!lv;HM6=S-^UcA0k;qoGA(qQ~%gBV$wF9FL6$6M}V-e!DR~C!^?)_0xP2Ft_Oh+bN{~^63zICldhWyeUkd8t9ZG3K}#dP0~zP1~S zA&qLPH0r6-D5q3liS*4HQ$9Io*Qkl1h8U_?L8g7y7#cRaMm1_0gapdKF&sg+0#%nd)4bf#t-RHP-DUkUNC_jX2s!<}w>;XA4(UwyP@Bb#l3(4Bu4dZYd)jlwhX{CoRfw X8=YLlrPOY^=s~BKA^HO?8`8xuC_>|E diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/UserInfDialog$MyItemListener.class b/Supermarket/bin/com/lingnan/supermarket/dialog/UserInfDialog$MyItemListener.class index f3a2c279604c1077846461b7ac92df7ba3c41198..47acaf6654445d062067ce60852d15ac1444f472 100644 GIT binary patch delta 140 zcmeC@`OCc_g~^HM>E6jtJA0qaZGJg(0uO^DgA+T0GY^9cgDX3O8xMm!g9i_TCxaIw z1Lw0T+g?uI_H^P5Ap7~ch0iCnf!WrR^;sk*76?yvW8~lbndu876C=mumn@6a7k2!=Hbi41Ee&u5JT03HE2cK`qY diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/UserInfDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/UserInfDialog.class index b3b2d9ff7fc0c78c9d636d7d32dc141461dfa783..f8fd5765da2bcc5e21ed07c025ed32d023ff8a33 100644 GIT binary patch delta 2585 zcmZuzdtBD#75|`0aB z!n105PB$M@?Rgh3D88s0UQ+F46|cB>Rq+pM{-bKIsrZwN*A?GT^Pg3FQ^i{@jw`Dn3^6iHc8E{71!qN8o?>EL+2!c5%iPI3gaFh|iN4oOUGE z!%`e@CC(AQBaS0(+j^NAJ4#paj(8-5=Z22Py`1u0e9z$f_<_LR+Zl;&YBH#m5rRpf zweiWJ=l!W}E$R&J!rh?{{YgO+Jrs&=+}zu^ZlIxF5Z}8cJP-;;AJ|U4Z|@_0^|e+{ z=nt>&JJ@p8V(=rZGh$?6RXKAjR@W2-?p}Ro zm60SFYw%;NH~0za1c~K=nbm>2a@N$8RoMB4^Gbn}A9G(CTZMFbBoz?0aGyeYLokazp6jQNiFw+6pj=@+vsE z42j6W`N+d$6e1sUF$eScEWko6!i`vrVtxo#vMgmR$SPiS6W<(<7|KfAhx>`DZRS~G zHOD(uoT@FqO94;>>o8>_lD%@~P!VFs(SV z69r*R=W;TCr-pIKk|90c>Woy}iIfh^V1Sv$iL*K}y909u7gyOuAzzr28OE21g+n+) zZD9m$G+h+hXklDkl*LtQ7}qRO<5YMrQud!$+@BltRNMf;7Mx#N} z@Q|cqhvcDA=Hg*lgq^Y+yQB=wQjN!C9d^ro*drmd%1-Q;-RO{g=#(yW$q_{4SsapA zaai6$kM!b*5*WnTK}H4{k;9DPMeim@b>kQ(4G#?9A7Lv_VFx}%3qHd>Hh)BX=$1G;AW6pxGRPy zJcw=7VtLL+{1m~hOkfg6b~}xJ9$JG2wuZy-6Y&rm#MQE&9j_h++Cfs{5J4jzCUraM zpMuykJUiY&lY>Vb{M^AW&iUEJjLtAn%vnD>b;M{FkD^(>7o1E?XKtKKRw-?12YgRZ z9c*SlHvp;jDz;UaTg%X}J9vy43L`y^Uk(MzA?h321MH^%7sd>3uwl}4!*09n2?U59 MozwWw$Ssi10h!`l1poj5 delta 2390 zcmZux3wTu35&mbh$-R3y5?D+~K!G9^NYF$9A)sRAp+XQrZH!fGqKG^sD#3_V76T?i z1wxicAtuWbzAH-H$tuOrN?neFk`6b`{|CyPcnKLuz zcI56E89MgW!6N|1NNxaE;8!Yk*oZi|5{(viI!Hy6Dj&13%f{n2cH7uvqgi!(9ZbSL zhpa_KtBU<9TnlXu`k_e=PpInwWd|*^JIG1|JY?apjnEMX1JR)_M=ktX1OCRrVEk4! zzfgSX_ui^z8FDkyI>X((hqT*Exf3oqKgE5JO zf41?LkQ)A~s=sN4e|PXYo^ygZG$(w^Y2X;vE%H6)_c^D!Np}RlM5^ z@8Nxo_JNJ#Ho7f*=-^WP%fY|#frXD8%tn)qk1hPivhiOFpIG>`Wv7hw_ofE_v+x<4 z&D7!dQ(rpeb}TU{$5KHc+W2VKo_*2C!v@RoxgbCMMj$KPoi@N;j%tHjaa*{rl@SVd zZEud%wnQIkh_7EAt=b)HIw(kwuU`>usEcjb8(&-B-Eo+j&i01xL#twyYkD+Uo#EQ( zhCT77>i;tt+=ZVRe1R_wzQPG35HaGD6eE5~5%gP7az{yCNkw_yv_)l^6@?|s%9fTJ zNtHB%yK#>}6{^DxR{yiE#!m!6^}aK2NyYrd^YW$_mXyw2#LLAxcC+YMWgRakmO%+h z1)1S(zRZvjTLP+f4CdixBfZ2JT%)l9owYUH2UbK6cNpA&QX?m+=X^ThTF)Neus61; zGQP6a;6}CgR{H|A|1|OY75k%`Hh12?)nKmL)78FE?boSYZ#L`OVlP};US76Xt8J@} zbyRhR8x3xOD&lK5#~Kmof!;Jh;PB$_f)q*pa|9I8mSlyxcy4KjLUC~H= zd}Dod-^%0FyW$V-i@H^@ZENB+k?77Xv8HA%Z(VzA)$X_N-6H7U)Bf;Nfxc-YWTYiI z;nxGXnZa*@#*VmMM;_~n>=2Cds?B!_Wnz+@96n~Jx7_74O3QZB&lkFap9;Z``BZ)2 zeEBi)>1;gY3_N5nJ!H>4ygrE>vUld_JmiQxnsxl#8(vtBA_(V=nQS zR_Eg%pNZyV2QOv~K0s=6+L6^#+h>4;#uNv~w&9%p7)KosfU#4P#%*H~w7Pm+#-_=5tNjYwndvIGws<1@X^HZqZ%uIAA(M`IZ$+WB4 zJ7KLqPxMe;fFA++9?f-e-poNf_$l{7Z==h!gxIXDCS}Ia^6uJ0=yk;erWP zwnd$|_>qeXL)jMHCTCmOeiu^+sV=4x(p*gI@w>>y#UA&$xP(7tfCHHB!#Q?_?Qg(P z&SyqWurN5&{{&{yp6TMUcFbn7IYkkeoZ#ibnJF|ykgnwx?0}^|(Ltnyyh)U@{ovlF zVi`{2OftAFgJ>DfuH+dz}Tn5h%U@iA{5NZ)xN9t#y)eNzg1>`ez4OtqKRxsQWK8;Ea zqLztlZTmN?ew2weaww@xQO9IHY@&S({3n<@VBr@QHe1+Yq5eDnTlq9jFi=X;9>Nx` zW3N6oD||RHVN7Igd?oDCz^nJew~I8fuxWGvvc0Q#tHRp0B_E!}&0Gp$pkLyVWS~5v h{z7*^n!h*9aFg&z#_{1%&uu$f3^=qE@#$X$`5GFkG}Hh9 diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/User.class b/Supermarket/bin/com/lingnan/supermarket/dto/User.class index 472ba9496cfaedc203b753ab17c1a921bc5a5673..c18a70e8caf9f437248a61cd898ef59a741886e2 100644 GIT binary patch delta 169 zcmdnVyOVdrT_#5M$$@O5lRq=5Gb(^t2Fx0)stl|QYLgpT#V40A>rb|06`Q;hD5?(> zH2{nLW!7gj0jqXm(U{!FCNsH>MW4|QEOMGfgVhD`iwC^aa-0zpjZ-EY!w?n065Dja{vGU delta 169 zcmdnVyOVdrT_#4h$$@O5lRq=5GYWxO2Fx0)q71AIVv`$L#V40A>oZD##diY5rGery zVDY~|aXGNK6N?6`B2ZijEZ)YV&!_?xKMfRD2a0Qe#rawFCog6en;gQb!Kw=s)dPyU iF&cnX-UW&o1I0|hDizuE8O?y=wv)41WG1g-;|Bm>+$V7W diff --git a/Supermarket/bin/com/lingnan/supermarket/table/InOrderTM.class b/Supermarket/bin/com/lingnan/supermarket/table/InOrderTM.class index 4e0822f98412f70ccd5c623c5955408a1035a1a2..c9bf084b27b5d5cf0df048c96d538d7dc2126b3e 100644 GIT binary patch delta 217 zcmZ1>_D^)fGiF217wZ;1?Vb9xe>)=s+p~t1pfIr@JNt)jZwTieLl9`=>qI*1^c2KJlW&P-F06&}Q&uFlO*$uwd|Ka9{{vaAgPt ziUa{+Fhd9s#xsO6q%wpt6flG{lrcmwG%`dov@k?5v@yg?4&*9iOq_g}%Z@R9G84BN E0C%xVrT_o{ delta 260 zcmew-x!_$dtQA8kW_O?G=F%hU{vmxthW=5OIcR6esT_;O(?)UX#;Aik- zkYey>kYfm7P-6&W&}Il?FlGp5uwV#ba9{{!aAgQ%@MQ=GibeoMA{pWtq8L&cq8SPp lVi?L8Vi_74;uu400!i{x8|U{0RRc) zzn$o`sOFrX0RRT)vAgAns{sHDU{ fWo+q(jOm@C=bD7(o`mUupyh|X=9RFs+XN8@aiu{v delta 182 zcmV;n07?JE7wi|H1ZD{7jhf}QhtQq@014@jf#kfj<(awx014@hm*$(A=Z>!d014)` zpy`y0=ZUxh01xK3hvvVE<+q*bkBINTy#W9T=ew)uud?Nzh5-N&=D3>XwwULzvgwVV z<&=eF3;-+uEdc;8lV1TDlMMkDlY9gZH#X;zi{*x@=9Q#rZFFH`Y-Me4WMypWma^rt kgyy}l>5!=9i>&8>uj!Vn=ZdoBnz8ARf$zV)v$F&d2O^_kJOBUy diff --git a/Supermarket/bin/com/lingnan/supermarket/table/OutOrderTM.class b/Supermarket/bin/com/lingnan/supermarket/table/OutOrderTM.class index 807961fe6bbdb167b55a891bd9833bdecf13cee1..cb4ca6e1c5d0f3c08bfd9077e8641e60d619454f 100644 GIT binary patch delta 53 zcmbO#+$_9d8M6lGi*<{h_D+4;znzhR?ODU_C%eIn>DyjT-@?ei`C`lb7h4uT*|lr) I1Lm!)0J;quO8@`> delta 71 zcmZn`o+`Xy8M77t^GS`5I~F|MGXG`o%=i2EGBR+!>|66<-R9?g>p|@P=BEp$K3lw> akpZZ3!t=J>&*x8nwsj6r<>qtDTUh~O4ky)=sQ)UVy1KYEy8(y~e0~s&dC%#-Xmxn=?L5`6@ Sf3hQs6Wp OSoUsO)8?JbhO7W}n;n_} diff --git a/Supermarket/bin/com/lingnan/supermarket/table/OutTableModel.class b/Supermarket/bin/com/lingnan/supermarket/table/OutTableModel.class index 6190e1bfae9c89bb423dd309942c576fa4310221..369e79ae07bd1ac52e210f1cc13a35527d9302e9 100644 GIT binary patch delta 81 zcmbOz@Q0~tW_*@8Wc44hB)&wa6F k#j`o{fr8IB?ta>_nvsF~$-dc7cTIUZwJme=O=b%=08cC^aR2}S delta 106 zcmV-w0G0pv6Ok0Kd;?tw>5ZD@wujK30RRc&gi|2{B0RRu?w}5qu-zr6tf3Fo`3=&!QnpN0Vd5azg==C+vUu(Iim MpXHQ=v%mv52Hl`KeEBme*a delta 79 zcmdnbf1ZECUnVE+=et+GSikA%{I<*#Mg~DR?`7|-r`y^u%wuHWe%U+!>GbK(CM*Z5 Ofb(D~HtRD_U;zN%a4Yrz diff --git a/Supermarket/bin/com/lingnan/supermarket/table/StorageRecordTM.class b/Supermarket/bin/com/lingnan/supermarket/table/StorageRecordTM.class index 0a91b4dfc8658a5f42ed053dd24151696e71f137..e59a6458296375522849f21d32396def39438f15 100644 GIT binary patch delta 80 zcmbO(@P~hcG_y13i*<{h_D+4;znzhR=h@`mCwu2So4)Pk^esT{)2VGwCpSLdGYu@u i|6>2_7h9HV>pyMZ1*CNu8Q7jp-SD!#e{&`CJQe_;cq!ii delta 107 zcmV-x0F?jy50?5qZr NytL(+y0cybo&^7kJ%a!M diff --git a/Supermarket/bin/com/lingnan/supermarket/table/StorageTableModel.class b/Supermarket/bin/com/lingnan/supermarket/table/StorageTableModel.class index 74d0fce28329bbef01a1a59c7d2c895cff3abd38..e0b4d571ad365434e54dc85b8f98c8d993a625c6 100644 GIT binary patch delta 68 zcmV-K0K5OW5~32YHv=~Y<&cf%r?3G43FN<>=(MQjoSy*z2IiHp>4%R200!r=yXAmv~W delta 91 zcmV-h0Hpt-61ftvHv>)x>5ZD@wujK30RRu?w}5qu-zr6tf3F(i45ZD@wujK30RRc5qcv ik+A2qp#cC1>6WeThQ98GhztN603DMM1RJx513m@gIwZsZ diff --git a/Supermarket/bin/com/lingnan/supermarket/table/UserTableModel.class b/Supermarket/bin/com/lingnan/supermarket/table/UserTableModel.class index 9de7223646c429b7bf521b662ff4be1df0914feb..ac589efee51c1e10cb3f91e624eb46021dd2f61a 100644 GIT binary patch delta 194 zcmdlYyi|CD6tgzl)9p*2_HSooV0*g0?fHU65M%k|rxSXCjAwJ3U(TEWWIUg;^~L(R zn?so8nR)pbSQrEuv>8Mg%oxNcH?X;~DlqUeC{8}b=EkbVz{j9IS(M$AQFn4YyDg*1 zgZSj#Y;LTQ z415eyliAok8RaJju-h`KOzvavv(#kZVbEd_XV7DiX3%F)U@%}%WiSMa7y)_43?@Km z$zaN02Q<%_!JNUH!Ga+GC=$wGJvo#km(g+ZVU7e&7oZug42le%lXWMm delta 234 zcmX>q^i62Pd1h}P<(Iv)o^ETuFi!y$0L7<2n?37!-+F|&^2`3lCwsO$ow*BHY}%%0 z9n0QLYnsf@QeH2q{IYM&vl;!*cg}b|X~MKswd7EA~Z+SUk(UZN+&u8r2{Dvix1puKb Bbe#YI diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/FontUtil.class b/Supermarket/bin/com/lingnan/supermarket/utils/FontUtil.class index 314fedaaadfe10cafb489f201dc305e5a2ff4652..8c89bca68252e5a7150952e2fe37619de98cbd1c 100644 GIT binary patch delta 20 ccmZ3-x|(%^F(W(M)17;s&S~3h%UH+=092|782|tP delta 23 fcmZ3@x{h^&F(Vh}%T@E9xAr~Tv2U{#V<95|cSs6C diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/tplbTest.class b/Supermarket/bin/com/lingnan/supermarket/utils/tplbTest.class index 85f00060f01cb0a7c4abf8ffa43d3855448314ca..8eb35e4c77c618a047486b782fc968f19e596399 100644 GIT binary patch delta 38 jcmew=@KRtyHla7|!C3zMqK)7kr;cecNrGXKTG=`YqVf7ZPn$bL3$2{L2zT&A_G0R2WD;{X5v diff --git a/Supermarket/bin/com/lingnan/supermarket/view/HomeView.class b/Supermarket/bin/com/lingnan/supermarket/view/HomeView.class index 48591f122dd140061dd15b77f9077376d90b7f73..4bdddef729f2beb82c505bfbf3200e3ab83e41fb 100644 GIT binary patch delta 174 zcmX@0(yOxJF)JT`aY+@j2C%e0zO<$UrljE6JP?VXRYRkiL zhT#D_!$Tg1M+_Gk8HC^p{7Xw9Di|5WAc8OU&wjCG`Ll-IFWV=+Tr}5;k%9SXYx87h yb`>$Gif2={y_~!au3~a0yP~udRP&H&__}>CIQzbGQHrD_SG~ delta 204 zcmeBGIiRxPF{_|ZaYaq>sj=UgJswk~+OviaHKm6PwYNx6u^ zxrsSB{-q@aMVZN|wu}r)aPenzS3cV|=UM;amwjuVuAKFB=Duf(H@x4!*NTyW?PYI2 zkTqGGT}26@;bnir(*;wXP27m4VR9UIz^FsCC@? delta 90 zcmbQmy`Fo68aN%KaWpHC;;D5Sq$Fu%PPy5@RP1y2& e|6Y*D`VCJfu0;`nsM*{8bj3uVn$2}gGRy!gJuI*Q diff --git a/Supermarket/bin/com/lingnan/supermarket/view/InView.class b/Supermarket/bin/com/lingnan/supermarket/view/InView.class index b79f9693ace08e8ad9e3fa7d50121e7a458ac84f..c6d8d2280514e980bbebd96d6b71129a6b188284 100644 GIT binary patch delta 921 zcmZ8fO-~b16rDFlKI%ZhLZ#L~iBS_lqS3^J1cj9=5)zFImp~IS5~LUsmBeZ5&=xE$ zJ_-VD`XLlBp)F2rONUC_n)oZ6_c1H|1?p?ZB4KyuzB}ifd(O=}zD;BX8oO$cw5_?f z0auUmpOCbPim+UNk^a}LA6UjYuk38R01Wjsl|cRw3gqFgQS7jw5=1_~TJn=p>JB|z zr`atcD@2J3oXY)x?Pe?dE!4;_n*M;c1{9h_&`GxZWKZb@TwOO76;;W@)w6QbDJ1PN zY8;8vR0fqoaMU!=VmM;!2OQJ7hr>Sj)zo5c#lbMiCQxvJti92PejcpBW|Q@uPzz_y z)ZG+-g?}o5OW?A=kMqNT>!j(tCi>LEu38YwG)!##End&!rF|UAXr2Ik+;Z=cS?`d! z92T7nf4XOC?4`X=;2r$1z)$hd0e4L&R10%ua<;H<=g2+062o#xJxnoF9fJwSfgsr^ z!tT~54~-{O0M3ZKF>Q52_m0L{7R~s58U>Sje{57O6qzxVJ> zW}`Iw;f7i)vX-^MfC7t}=+s;(RmoA0Y;)NACntMGCdS#u%tp1ip)V9f%kL?lp^6tUn@zs9dt z_SiFyo!Cz7##Zda@q^k% z`|U@|!_%pxG`8g?zD_bsSKgQsY<`6<$+v?dMe)xPKm=q zOtl|+Q&3HE{~A>_b;$PGWj#|ywE~+dtfgVk!y@hvaD5y15~!qEv!weo?BRZ8Zuqh^ zGs^u*h(YMrZMdAD$5A5p23Ja99#gWRy3q-cZYmh6x$C<9%LnDlFbE7w= zPH|wlbx|<1>Fpdg?3#Ua?3EcFIKZY0969cf!G0Qxp%dESxPkNc$fRmHqdghD_};rr z^)P3Ps*v&Nt`P2N^xT`v8mlZAhhN%Q?Qq4WXJw2fdE}vi@Z#9V)=OORKw%YE4tQ`? z_tvO>)T*N+`u){Ai$C1DZjqLyFD%j>={r&Q$fQ66U|a5y3jX1O&CY+ffoc`g8OZrC z9z$1-rb40s**f_{=!Vol6XoKeJthiTe(Y=O~wP^~F;jcrXX|i>C1w=||}&Q5c6(kuGDW2)jG5(csauGQC@*pQXFnwc$x^ zerE7?QabWjg9YMdCO#~ z{rS?9E3fm=qpsc44TpHB4V5yqJky`v{Opry9@vLe5?fv#G?u0PdSUFXYYSX)FrSyj zN=#GfOK15#QxuPSs1LFYa3pZ0W;jFF{<$!3ee+p@6m!^!aetV}E<@F+-vJ388TcQm zZ?pYE*L}cN+B}jcaPAL*ChPZ;kkcSkA{WV?t}8_!1FmlzH*Dz0Qr2f_ZKyUNBUALu bo6Nb|XFx!r@T#^nKB097&R2e$ICJS=7mlVdWI^YdbWvYRbgs~FkY zp3mIPnBJy-X-((qf6=k01Q&v3d*#2}v?~@(7co;r1eBxpF w%8gPP0zRWPTt7oCMof9!i47&H$0uS4le$(cNS3fWOjBHeW8~V z7CmlR_H_Pipy1POEibmr=VAEB@QH`vGs6o;2L9&_Tc1v!`MhJ!vu%?>di>a}loX#& qn(%&S!_&R{U-oTzwqW`5853VlSodUK!?USf&nLBm95Rpn2`2y$3vLYn diff --git a/Supermarket/bin/com/lingnan/supermarket/view/MainView.class b/Supermarket/bin/com/lingnan/supermarket/view/MainView.class index 9184f414c547b0eb6b6f9f1febba5922ad4aeac7..c9026fba02d8d0b01c1d62cb7807b4c63e7557cf 100644 GIT binary patch delta 416 zcmY+AOG^S_7=_0mL736;8bKzNv=M?@v}bgj-~{~pNCoF7{_A7PvWA+LCDy!+GwmmLU)+2;9dkXBA)HQl4*)JDN?ar zm$l@rk%FRWnqxKD&PAe=y@gMcn`7IOgwdoX4j$gcv6`SZ0v33uO2w)jsP>XDKdfrR zg9y7Q0bVCz(e7|ePOPu3u*?VZqGJs0W*ViK+JSfe$N9HR(*nxz^0?X8=Nv*A@G#t# z!|HsJyqVGN>v`Q<=TzwL^hw*P`rv;Co^21DVUwozeXHBcULE5Bvwjff^_KFNz2E%} DMUUsc delta 591 zcmZ{h&ubGw6vt;33&FJ;^8;P97HmPGQt$^Jgx);)52z3XDI$Am#Y7QL>AJ3ovSyQs zrfwP%yP-+7HEYr?Hcid{AylDZ-gFSs;<1-H3%VlWZTQZ6AKv@C{{6kU^GLjOk!4hx zPEo5tagJn{>3f&1S9UrYsL$zoW80|GW}DRYUdpCxFWAcuJKYUziF>k48V<=ewvw|n zH`7y7bd5hu@3(qnVkE#rlCII$x`;N>R{;fRzR}k^r1nlk-@G7-_YX!-3FrhXJSE*c zw3E!pkz$>!G?`iN>s>OVF{omlnaDgN*HK!GYk=RnAG0$}7lz^m744;)&Y{WiqBrPEWeUHbEA;l>@V)o_y!kVcJ6(Aj2nJkZnJ2S6 z)u5e#9y!R{lqZr-J1N`7F_Eczv@UB*vOEC;$_OL$cwe}-61;_@A)cM(bXq=5$|@Tp z*u)k=8(FVXa5))(Ev1F>j{OiN@dUOYu3{b!Hv-UdS$6!Ruem-yTh?{RVRg447W zsa&}0lPVICO3R{6H~L4Wh>sF;X?`zH@C|MtY`*bg)wNa$2tfz=pu}6lOpn~GI!ti=b9zSW}Wqdm^Kmis#eUz+^K)LE0IwG z61oIy_?f^fc&*_Vf?ts#>=$>Q_4He1nOJk%B?Xpi%2ZHg>%|{>%S&SjLp(MU3T|3& zJeMpb8Fj6a^6M8Gb_jmMml}R2*u@_NeIMn+ubUeJXc4F|zfxp45OM(CZ delta 830 zcmZ`%Nl#Nz6uu`hAb1(XXmCi35!uLs#OQ*g8h?N+b>T{*3u26l8kbP|+A_V@;Xw;+ zp#>USZE2w`q~$@IxYOuP#W5k&J1ux@Ox$`4row{V$+_nn&iQWW#-Hwm4|UB=%xf(V zMo2C!)XDAAn!aAw-+qBd7pON&W+QZIjx0Nw&v8|_`blJ*dKQ_H=4zB>R|+%Ljl7I7?o-j(2)+IC3z~#w6xxdbFDQ(bxAQmjlwnbCTcpI zQn8}`8(Yrqv&7<4fa>HpFUD!X3h1JK{qRYB>rjjSw4wXTW#)A<+nR)u=n%Ji=&~;B z9a2`9VD2DUEYe&_n&&Zv2ExLZsmPQYZr?h65L6BTIwf3+IT)Zet5Cgc*q{lm=iV+m zpeEstlaW-_cEzD)P$gBi2J{z=?R_m(kkE2eNs?F)!+ZD$=>H2XF7sl7$6jJY(a&1= zgyA!+13Lcb`Lmln_g_dc(;lHI&%-;t4=lCt1;bag0qEL6zBd&cv(E_kYtomTH|+(X z`e|^+bOza~mH5Yhm4<~jzq8yKNwJ+@BZ_Np`aCqib72cc3~gY@!Z(cGqIb3M9m5YW z0G$(Bs;tDMBj$BWYh<=Wr>3{_C5d9j=niwU%$dBh1juBO&Q%ia0(4%cM{J?q`sztZ zD$hrgEHfjWQE!1n6?wsGtvj3U_O;2#%)v>PNmnn}P`}shE_X|%>1Gath5d9XwA;MI zR_0B|DjP2fUqZHo>LI$qN5Uko6Hj_`%(riWLO&gdVb}sw9{(TWsOn+12{IiJ>X>8z S)F!`OtFG4I?BnK+6Mq3FUge?y diff --git a/Supermarket/bin/com/lingnan/supermarket/view/ProdCatalogView.class b/Supermarket/bin/com/lingnan/supermarket/view/ProdCatalogView.class index ad04087fa9b7b519296ff68ea7eabc4f57e9122a..006a9068bdcd33cde5e92c68ec354cdae728cc8e 100644 GIT binary patch delta 84 zcmV-a0IUDuEYB>ku?P(e<&}ozlY!@(uI0Uzlf(#G2L|PchUc-nlPC#02L|SloaeNn qvuz2)0UQSAfV<^|u?ztq0U-<#rjQ8`xo*sDljVYFe)+ffLO|m3~Vp^JKyi$yV;SO Gj~f81MK0C= diff --git a/Supermarket/bin/com/lingnan/supermarket/view/StorageView.class b/Supermarket/bin/com/lingnan/supermarket/view/StorageView.class index 33c5f3ef693e3fb3d6674a7ea3903fe773c542f5..fdfbfccfad374f25f736cd0204bb072ca6ab0dd8 100644 GIT binary patch delta 213 zcmbPda>aNz@#80{GCc^DlS9YHK7Mh50*a~Dqj#98bi`eOa|7wwy$ZkYJ8q4UX( zwNG|50Ht^sy%;SR8APAWSpRgwvZoyjUd~(sk$*m`g^__1sN}`E4Nvz@Wn^G`)<5C- zl3kN8a5-uVKvX_mvhl^1r8=1@wjgtY7#V~h;?E`n-96{|?#a*Q&fo0KeVGpcc$00% delta 307 zcmca&JkMl9CcB#IizOSLP1^i)(Sm1N7eC$B{(M@S-OJwjPp40RHeva*30r`2&nK^# z+{_*&zz-LH**oj~{=J)@vtMUa;(Xb+=EeF=Px}}0FxoNN^DsIvI)YeEj0|iq`#XW^ zCg0*Lu2*?J3265Er?ZwlZ|r~8u?#5wbV=un)``!yO$M?dDtQ>a7%dnX6kqnYyz7|t zthw=J@1*BlyPvJ@dpT`2MET1JD}c%w8Tf!Y4lQ}t)(&((SODmb-OpOqJ#L)E$RM7T zSe96!UtFG@cc_o*wl^EQ(XZyCj*thz{@?|=iDYhV6gBTg4;j%CL_CMX$ X@_gHr=X)BTP1^Eo@9NEr+?V+PN+7BM diff --git a/Supermarket/bin/com/lingnan/supermarket/view/SupplierView.class b/Supermarket/bin/com/lingnan/supermarket/view/SupplierView.class index 5e35ec5626fc58e42dd4cb2f281c66e4cf924d01..2f20ef04acc2bf85b2a7fbd548511ba8f0dd8ce2 100644 GIT binary patch delta 194 zcmeCzyP~_{GMl*A)4h|QcJ@Bm+xvX)I=d(PW}P6$=}$bczK?-u6f$ODcsX-PW{NE%1KYFy3D1}8n*5Ga(})Km{;Xrd)2{hE ojHZlsj0{k*r%N`z*s_$J(VmCVfzc79ZNi-ATNZ7O;M&du0GH}3`Vo-XNp(K_+jw#h&?M1FD$r>c_Z%l?*k9kZS_H@@th z^t@~Lv(DYlFZK;w5mYgzZWan|HRoSKe8aM_oATb{M7dAfWy52Gog9U}um=Gne& iFZQi|v3wajqdgC!1EV9@ls(UOw?1uJv00XDI}ZTAzJ}TW diff --git a/Supermarket/bin/com/lingnan/supermarket/view/UserView.class b/Supermarket/bin/com/lingnan/supermarket/view/UserView.class index 2de250af055672a99a87fef473c232cfc0c8797e..7aac3e5b903d271f72f7a1692c05fccd75efbea6 100644 GIT binary patch delta 191 zcmaE&vs!1vBsM9@r+X(q?d*NBxA*zpb#_m7?Rq+K#`ARxpHFC;yn`)@o$cxJ$xkQr zZkA!6!YIS`tYP=l){Q)j>WmsZjGByEAeJ^G1M{=F3nyRV$Q9s!v3~o@hR!ED);`(M z01}MmRF&j^He>zM3Co^#EO&>A^-pY delta 248 zcmZ3j^F(LEBsMkG7fUugo3#1qq6N>kE`GYL{rR*uyJuVHJe}O~tZno2-3#9DX?fPv zHF*tN6c^{S{p)~ApEXV0%*#H7QHk?q-3P@g zXRG@%Q*0R-fadRh*0Sz#K2V9S@^DqXXEKJ combo; + // 定义一个下拉框组件,用于展示可选的用户权限选项,其选项内容为字符串类型 + // 下拉框中的选项内容,包括当前权限以及不同的权限角色 - private String[] identity = { "当前权限", "收银员", "管理员", "超级管理员" }; + private String[] identity = { "当前权限", "收银员", "管理员", "超级管理员","进货员" }; + // 定义一个字符串数组,存储下拉框中可供选择的用户权限选项内容 // 父窗口JFrame的引用,可能用于在某些操作后对父窗口进行处理 private JFrame JFrame; + // 保存传入的父窗口(JFrame类型)的引用 // 构造函数,用于创建修改用户信息的对话框,传入父窗口JFrame和要修改信息的用户对象 public UserInfDialog(JFrame parent, User user) { - // 调用父类JDialog的构造函数,设置对话框的标题为"添加"(这里标题可能需要根据实际情况修改为更合适的,比如"修改用户信息") + // 调用父类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 // 初始化对话框的视图组件 initView(); @@ -84,34 +103,53 @@ public class UserInfDialog extends JDialog implements ActionListener { // 姓名面板及相关组件的初始化,文本框中显示当前用户的姓名信息 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); @@ -119,26 +157,40 @@ public class UserInfDialog extends JDialog implements ActionListener { combo.addItemListener(new MyItemListener()); sSuperPanel.add(sSuperLabel); sSuperPanel.add(combo); - */ + + // 上述被注释掉的代码原本用于创建权限相关的面板、标签、下拉框组件,并为下拉框添加选项改变的监听器,用于实现完整的权限选择功能,但目前处于简化状态 // 操作按钮面板及相关组件的初始化 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接口中的方法 @@ -151,60 +203,85 @@ public class UserInfDialog extends JDialog implements ActionListener { // 获取用户在文本框中修改后的姓名、账号、手机和密码信息 String name = nameTF.getText(); + // 获取姓名文本框中用户输入或修改后的姓名内容 String loginName = loginNameTF.getText(); + // 获取账号文本框中用户输入或修改后的账号内容 String phone = phoneTF.getText(); + // 获取手机文本框中用户输入或修改后的手机号码内容 String password = passwordTF.getText(); + // 获取密码文本框中用户输入或修改后的密码内容 - // TODO 参数校验部分,这里应该对获取到的用户输入信息进行合法性校验,比如非空、格式等校验,但目前未实现具体逻辑 + // 此处注释提示了后续应该添加对获取到的用户输入信息进行合法性校验的代码 // 创建一个新的User对象,用于存储要更新到数据库的用户信息,设置了部分从原用户对象获取的信息以及修改后的信息 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表示) + // 关闭父窗口 this.JFrame.dispose(); + // 通过调用父窗口的dispose方法关闭父窗口 + // 创建并显示新的登录视图 new LoginView(); + // 创建一个新的登录视图(LoginView类的实例)并显示出来,方便用户重新登录系统 } else { // 如果更新失败,弹出提示框显示修改失败信息 JOptionPane.showMessageDialog(this, "修改失败", "提示", JOptionPane.ERROR_MESSAGE); + // 使用JOptionPane弹出一个错误提示框,向用户显示修改失败的消息 } } else if (source == cancelBtn) { // 如果点击的是取消按钮,直接关闭当前对话框 this.dispose(); + // 通过调用dispose方法关闭当前对话框,放弃本次修改操作,释放相关资源 } } - // 内部类,实现了ItemListener接口,用于监听下拉框选项变化事件(这里部分代码被注释掉,可能原本有完整的权限选择功能,后简化了) + // 实现了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("收银员")) sSuper = 2; - else if (sSuper1.equals("管理员")): - sSuper = 1; - else - sSuper = 0; + else if (sSuper1.equals("管理员")) + sSuper = 1; + else + sSuper = 0; + // 根据下拉框选中的不同选项内容,来设置当前用户的权限级别,不同的数字0、1、2对应不同的权限 } } } \ No newline at end of file From ad3aaccc5c17b0e1fad99f413e031fc488d02daa Mon Sep 17 00:00:00 2001 From: HouXinyu <2283543175@qq.com> Date: Wed, 11 Dec 2024 16:12:38 +0800 Subject: [PATCH 07/20] 257 --- .../com/lingnan/supermarket/view/Demo4.java | 122 +++--- .../lingnan/supermarket/view/HomeView.java | 349 ++++++++++-------- .../lingnan/supermarket/view/LoginView.java | 193 +++++----- .../lingnan/supermarket/view/UserView.java | 236 +++++++----- 4 files changed, 532 insertions(+), 368 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/view/Demo4.java b/Supermarket/src/com/lingnan/supermarket/view/Demo4.java index a9d35fb..b7d015c 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/Demo4.java +++ b/Supermarket/src/com/lingnan/supermarket/view/Demo4.java @@ -1,82 +1,94 @@ 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 javax.swing.*; 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()/*�ܿ��*/ - { + +// Demo4类用于创建一个展示图片切换效果的图形界面程序 +public class Demo4 extends JFrame implements ActionListener { + + // 创建一个静态的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() { + // 设置窗口的标题 tplb.setTitle("ͼƬ�ֲ�����"); + // 设置窗口的布局管理器为null,意味着后续添加组件时需要手动指定组件的位置和大小(绝对布局) tplb.setLayout(null); - tplb.setSize(700,800); + // 设置窗口的大小为宽度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) - { + public void actionPerformed(ActionEvent e) { + // 将pan这个JLabel组件的图标设置为imgs数组中当前索引对应的图片,实现图片的切换展示效果 pan.setIcon(imgs[index]); + // 将索引值加1,准备切换到下一张图片 index++; - if(index==7) - index=0; + // 如果索引值达到了imgs数组的长度7,表示已经到最后一张图片了,将索引重置为0,实现循环切换图片的效果 + if (index == 7) + index = 0; } }; - - - - - public static void main(String[] args) { - settplb(); - setpan(); - } + + // 调用设置窗口和图片展示相关的方法来展示图形界面效果 + public static void main(String[] args) { + // 调用settplb方法,设置窗口的基本属性并使其显示出来 + settplb(); + // 调用setpan方法,设置图片展示的JLabel组件相关属性并启动图片切换的定时器功能 + 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 d98388d..0c3b1f1 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/HomeView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/HomeView.java @@ -1,13 +1,12 @@ 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; @@ -16,161 +15,221 @@ 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.*; -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; - } - }; - + +// 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 static void refreshHome() { - 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);*/ + // 再次调用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);*/ } - - - - - - + + // 实现ActionListener接口的actionPerformed方法 @Override public void actionPerformed(ActionEvent e) { - // TODO Auto-generated method stub + // 获取触发被点击的按钮 Object source = e.getSource(); - if(source==refreshBtn) { + if (source == refreshBtn) { + // 如果点击的是refreshBtn按钮,创建一个新的HomeView实例 new HomeView(jFrame); + // 调用refreshHome方法,刷新首页界面上显示的关键数据,更新界面展示内容 refreshHome(); } - } - - - } \ No newline at end of file diff --git a/Supermarket/src/com/lingnan/supermarket/view/LoginView.java b/Supermarket/src/com/lingnan/supermarket/view/LoginView.java index e52dcb4..6579aa3 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/LoginView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/LoginView.java @@ -24,135 +24,160 @@ 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; -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() { +// 登录视图类,实现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)的构造方法来设置窗口的大小和标题 super(350, 250, "新民超市"); - ImageIcon icon=new ImageIcon("static\\icon\\新.png"); //xxx代表图片存放路径,2.png图片名称及格式 + // 创建一个ImageIcon对象,用于设置窗口的图标,传入的参数是图标图片的路径及文件名 + ImageIcon icon = new ImageIcon("static\\icon\\新.png"); + // 设置窗口的图标,通过获取ImageIcon中的Image对象来设置 this.setIconImage(icon.getImage()); - } - /*添加组件*/ - @Override/*界面*/ + /* + * 添加组件到界面的方法,重写自父类的initView方法,用于初始化界面视图组件及布局等 + */ + @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(); + // 创建一个自定义的背景面板,传入读取到的背景图片,用于作为整个界面的背景容器 + containerPanel = new BGPanel(bgImage); + + // 用户名相关组件的设置 + // 创建放置用户名相关组件的面板 + namePanel = new JPanel(); + // 创建用户名标签,通过传入一个ImageIcon来显示带有图标的提示信息 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(); - 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(); - } + // 判断事件源是否是登录按钮 + 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(); + } } - } - - 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/UserView.java b/Supermarket/src/com/lingnan/supermarket/view/UserView.java index 6d460d0..d8eec3c 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/UserView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/UserView.java @@ -23,163 +23,231 @@ import com.lingnan.supermarket.dto.User; import com.lingnan.supermarket.table.UserTableModel; import com.lingnan.supermarket.utils.FontUtil; -public class UserView extends JPanel implements ActionListener{ - - - //上面 +// UserView类继承自JPanel并实现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 + + // 用于记录删除操作时选中记录的用户id,初始化为0 private int id; - - //下面 + + // 界面下部相关组件声明 + // 用于存放记录数相关提示信息的面板 private JPanel bottomPanel; + // 用于显示用户记录总数相关提示信息的标签 private JLabel countInfoLabel; - + + // 对父窗口(JFrame类型)的引用 private JFrame jFrame; - - - private UserTableModel userTableModel ; - - - private UserService userService=new UserServiceImpl(); + + // 用户表格数据模型对象,用于管理表格中的数据,与数据库等数据源进行交互获取和更新数据等 + private UserTableModel userTableModel; + + // 用户服务接口的实现类实例,通过它可以调用与用户相关的数据库操作方法,如增删改查等功能 + private UserService userService = new UserServiceImpl(); + + // 构造函数,接收一个JFrame类型的参数jFrame,用于创建用户管理视图,并初始化界面组件 public UserView(JFrame jFrame) { + // 设置该面板(UserView)的布局为BorderLayout,将界面划分为北、南、东、西、中五个区域来放置组件 this.setLayout(new BorderLayout()); + // 调用初始化视图组件的方法 initView(); + // 将传入的父窗口引用保存到成员变量jFrame中 this.jFrame = jFrame; } - + + // 初始化用户管理视图界面组件的方法 private void initView() { - - toolBarPanel = new JPanel(new BorderLayout()); - - searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - locationLabel=new JLabel("当前位置>人员管理"); + // 创建一个新的面板toolBarPanel,设置其布局为BorderLayout,用于存放顶部的搜索和操作按钮等组件 + toolBarPanel = new JPanel(new BorderLayout()); + + // 创建一个新的面板searchPanel,设置其布局为FlowLayout,且组件左对齐,用于存放搜索相关的组件 + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + // 创建一个显示当前位置提示信息的标签,这里显示为"当前位置>人员管理" + locationLabel = new JLabel("当前位置>人员管理"); + // 设置标签的字体为通过FontUtil类获取的特定字体(这里假设FontUtil类用于统一管理字体相关设置) 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 = 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")); - + + // 创建一个新的面板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方法上,以便处理相应的操作逻辑 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.add(searchPanel,"West"); - toolBarPanel.add(opePanel,"East"); - - - //中间表格 - userTableModel = new UserTableModel(); + + // 将搜索面板添加到toolBarPanel的西边(左侧)区域,将操作按钮面板添加到toolBarPanel的东边(右侧)区域 + toolBarPanel.add(searchPanel, "West"); + toolBarPanel.add(opePanel, "East"); + + // 创建用户表格数据模型对象 + userTableModel = new UserTableModel(); + // 调用数据模型的方法获取所有用户数据,用于初始化表格显示内容(这里假设UserTableModel类中的all方法用于从数据库等数据源获取全部用户数据并填充到模型中) 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)); - countInfoLabel = new JLabel("总共"+userTableModel.getRowCount()+"条"); + // 创建一个显示用户记录总数的标签,初始文本为"总共"加上通过用户表格数据模型获取的行数(假设UserTableModel类的getRowCount方法返回当前模型中的数据行数)以及"条"字 + countInfoLabel = new JLabel("总共" + userTableModel.getRowCount() + "条"); + // 将记录数标签添加到bottomPanel面板中 bottomPanel.add(countInfoLabel); - - - this.add(toolBarPanel,"North"); - this.add(tableScrollPane,"Center");/*将表格放到中间*/ - this.add(bottomPanel,"South"); - + + // 将顶部工具栏面板添加到当前面板(UserView)的北部(上方)区域 + this.add(toolBarPanel, "North"); + // 将包含用户表格的滚动面板添加到当前面板(UserView)的中部区域,使其在界面中间显示 + this.add(tableScrollPane, "Center"); + // 将记录数面板添加到当前面板(UserView)的南部(下方)区域 + this.add(bottomPanel, "South"); + + // 设置当前面板(UserView)可见,使其在界面上显示出来 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) { - //获取选中记录 + } else if (deleteBtn == source) { + // 如果点击的是删除按钮,获取用户在表格中选中的行索引,如果没有选中任何行,则返回 -1 int rowIndex = userTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条"); + if (rowIndex == -1) { + // 如果没有选中行,弹出提示框提醒用户需要选中一条记录后再进行删除操作 + JOptionPane.showMessageDialog(this, "请选中一条"); return; } - 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); + // 获取选中行的第一列的值,并转换为整数类型,赋值给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); } } + // 无论删除操作是否成功,都调用刷新用户数据的方法,更新界面上的用户数据显示,确保表格等显示内容与数据库中的最新数据一致 refreshUser(); - - }else{ + } else { + // 如果点击的是搜索按钮(即其他未明确匹配的按钮点击情况,这里目前代码逻辑中只存在搜索按钮可能进入此分支),执行以下操作: + System.out.println("搜索"); + // 调用刷新按姓名搜索结果的方法,根据用户在姓名搜索文本框中输入的内容进行数据刷新和表格显示更新 refreshFindRname(); } - } + + // 根据姓名进行搜索并刷新表格显示内容的方法 public void refreshFindRname() { + // 获取用户在姓名搜索文本框中输入的姓名内容 String rname = nameSearchTF.getText(); - User user =new User(); + // 创建一个临时的User对象,用于传递搜索条件 + User user = new User(); + // 将获取到的姓名设置到临时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(){ + + // 刷新界面下方显示的用户记录总数提示信息的方法 + public void refreshCount() { + // 移除bottomPanel面板中之前添加的所有组件,更新显示新的记录数 bottomPanel.removeAll(); - countInfoLabel = new JLabel("总共"+userTableModel.getRowCount()+"条"); + // 创建一个新的显示用户记录总数的标签,文本内容为"总共"加上通过用户表格数据模型获取的当前行数以及"条"字 + countInfoLabel = new JLabel("总共" + userTableModel.getRowCount() + "条"); + // 将新的记录数标签添加到bottomPanel面板中,实现记录数提示信息的更新显示 bottomPanel.add(countInfoLabel); } -} - +} \ No newline at end of file From 7fe44258db18919d222754faff55e08c121ef85e Mon Sep 17 00:00:00 2001 From: Redmi Date: Thu, 12 Dec 2024 00:07:50 +0800 Subject: [PATCH 08/20] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lingnan/supermarket/view/OutView.java | 486 +++++++++--------- 1 file changed, 230 insertions(+), 256 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/view/OutView.java b/Supermarket/src/com/lingnan/supermarket/view/OutView.java index 01a2ddb..a1979f2 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/OutView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/OutView.java @@ -16,323 +16,297 @@ 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.dao.impl.BufferImpl; import com.lingnan.supermarket.dialog.ChangeSumDialog; import com.lingnan.supermarket.dialog.OutDialog; -import com.lingnan.supermarket.dialog.UserDialog; import com.lingnan.supermarket.dto.Buffer; import com.lingnan.supermarket.dto.User; import com.lingnan.supermarket.table.*; import com.lingnan.supermarket.utils.FontUtil; import com.lingnan.supermarket.utils.TimeAndOrder; -public class OutView extends JPanel implements ActionListener{ - - +public class OutView extends JPanel implements ActionListener { + + //上面 private JPanel toolBarPanel; - + private JPanel searchPanel; - private JLabel nameLabel,locationLabel; + private JLabel nameLabel, locationLabel; private JTextField nameSearchTF; - private JButton searchBtn,AccountBtn,exitBtn; - + private JButton searchBtn, AccountBtn, 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 outTable; - + //下面 - private JPanel bottomPanel,bottomPanelLeft,bottomPanelRight; - private JLabel countInfoLabel,countInfoLabel2; - + private JPanel bottomPanel, bottomPanelLeft, bottomPanelRight; + private JLabel countInfoLabel, countInfoLabel2; + private Buffer Buffer; private BufferImpl BufferImpl; - + private Vector v; - - + + private JFrame jFrame; private User user; - + private OutTableModel outTableModel = new OutTableModel(); - + private int mark;/*标记订单表和订单详情表*/ - - public OutView(JFrame jFrame,User user) { - this.setLayout(new BorderLayout()); - initView(); - this.jFrame = jFrame; - this.user = user; + + public OutView(JFrame jFrame, User user) { + this.setLayout(new BorderLayout()); // 设置主布局为BorderLayout + initView(); // 初始化界面组件 + this.jFrame = jFrame; // 将传入的JFrame赋值给成员变量 + this.user = user; // 将传入的User赋值给成员变量 } - + private void initView() { - - toolBarPanel = new JPanel(new BorderLayout()); - - searchPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - nameLabel = new JLabel("订单号"); - 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)); - - 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")); - backBtn.setVisible(false);/*在记录页面显示出来*/ - detailBtn.setVisible(false);/*在订单详情页显示出来*/ - - - addBtn.addActionListener(this); - updateBtn.addActionListener(this); - deleteBtn.addActionListener(this); - historyBtn.addActionListener(this); - backBtn.addActionListener(this); - detailBtn.addActionListener(this); - - opePanel.add(addBtn); + + toolBarPanel = new JPanel(new BorderLayout()); // 创建顶部工具栏面板,设置为BorderLayout布局 + + searchPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); // 创建搜索面板,设置为居中对齐的FlowLayout布局 + nameLabel = new JLabel("订单号"); // 创建“订单号”标签 + nameSearchTF = new JTextField(20); // 创建订单号输入框,长度为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)); // 设置标签字体颜色 + + opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建操作按钮面板,设置为左对齐的FlowLayout布局 + 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")); // 创建查看详情按钮并设置图标 + backBtn.setVisible(false); // 初始时隐藏返回按钮,记录页面显示 + detailBtn.setVisible(false); // 初始时隐藏查看详情按钮,订单详情页显示 + + addBtn.addActionListener(this); // 为添加按钮添加点击事件监听 + updateBtn.addActionListener(this); // 为更新按钮添加点击事件监听 + deleteBtn.addActionListener(this); // 为删除按钮添加点击事件监听 + historyBtn.addActionListener(this); // 为历史记录按钮添加点击事件监听 + backBtn.addActionListener(this); // 为返回按钮添加点击事件监听 + detailBtn.addActionListener(this); // 为查看详情按钮添加点击事件监听 + + // 将各按钮添加到操作面板 + 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); - - - toolBarPanel.add(searchPanel,"West"); - toolBarPanel.add(opePanel,"East"); - - - //中间表格 - outTableModel = new OutTableModel(); - outTableModel.allOutBuffer();/*查找所有购物车*/ - outTable = new JTable(outTableModel); - outTable.setFont(FontUtil.tableFont); - outTable.setRowHeight(50); - tableScrollPane = new JScrollPane(outTable); - - //下面 - bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.LEFT)); - countInfoLabel = new JLabel("商品种类:"+outTableModel.getRowCount()+",总价:"+outTableModel.getAllPrice()); - bottomPanelLeft.add(countInfoLabel); - - bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - AccountBtn =new JButton(new ImageIcon("static\\icon\\Account.png"));/*结账按钮*/ - exitBtn =new JButton(new ImageIcon("static\\icon\\exit.png"));/*退出按钮*/ - AccountBtn.addActionListener(this); - exitBtn.addActionListener(this); - bottomPanelRight.add(AccountBtn); - bottomPanelRight.add(exitBtn); - + + // 将搜索面板和操作面板分别添加到工具栏的两侧 + toolBarPanel.add(searchPanel, "West"); + toolBarPanel.add(opePanel, "East"); + + // 中间表格区域 + outTableModel = new OutTableModel(); // 创建订单表格数据模型 + outTableModel.allOutBuffer(); // 查询所有购物车数据 + outTable = new JTable(outTableModel); // 创建表格并设置数据模型 + outTable.setFont(FontUtil.tableFont); // 设置表格字体样式 + outTable.setRowHeight(50); // 设置表格行高 + tableScrollPane = new JScrollPane(outTable); // 创建带滚动条的表格 + + // 底部左侧面板,用于显示统计信息 + bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 设置为左对齐的FlowLayout布局 + countInfoLabel = new JLabel("商品种类:" + outTableModel.getRowCount() + ",总价:" + outTableModel.getAllPrice()); // 显示商品种类和总价 + bottomPanelLeft.add(countInfoLabel); // 将统计信息标签添加到左侧面板 + + // 底部右侧面板,用于显示操作按钮 + bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 设置为右对齐的FlowLayout布局 + AccountBtn = new JButton(new ImageIcon("static\\icon\\Account.png")); // 创建结账按钮并设置图标 + exitBtn = new JButton(new ImageIcon("static\\icon\\exit.png")); // 创建退出按钮并设置图标 + AccountBtn.addActionListener(this); // 为结账按钮添加点击事件监听 + exitBtn.addActionListener(this); // 为退出按钮添加点击事件监听 + bottomPanelRight.add(AccountBtn); // 将结账按钮添加到底部右侧面板 + 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");*/ - this.add(bottomPanel,"South"); - - setVisible(true); + bottomPanel.add(bottomPanelRight, "East"); // 将右侧面板添加到底部面板的右侧 + bottomPanel.add(bottomPanelLeft, "West"); // 将左侧面板添加到底部面板的左侧 + + // 将工具栏、表格和底部面板依次添加到主面板 + this.add(toolBarPanel, "North"); // 将工具栏放在顶部 + this.add(tableScrollPane, "Center"); // 将表格区域放在中间 + this.add(bottomPanel, "South"); // 将底部面板放在底部 + + setVisible(true); // 设置主面板为可见状态 } - - - //按钮组件隐藏 + + // 按钮组件隐藏和显示设置 public void OrderView() { - backBtn.setVisible(true); - detailBtn.setVisible(true); - updateBtn.setVisible(false); - deleteBtn.setVisible(true); - addBtn.setVisible(false); - historyBtn.setVisible(false); + backBtn.setVisible(true); // 显示返回按钮 + detailBtn.setVisible(true); // 显示查看详情按钮 + updateBtn.setVisible(false); // 隐藏更新按钮 + deleteBtn.setVisible(true); // 显示删除按钮 + addBtn.setVisible(false); // 隐藏添加按钮 + historyBtn.setVisible(false); // 隐藏历史记录按钮 } - - - - - + + //通过订单查找 public void resultOfNumber(String oNumber) { - this.mark=1; - OutOrderTM outOrderTM = new OutOrderTM(); - outOrderTM.resultOfNumber(oNumber); - outTable.setModel(outOrderTM); - bottomPanelLeft.removeAll(); - countInfoLabel = new JLabel("共"+outOrderTM.getRowCount()+"条记录"); - bottomPanelLeft.add(countInfoLabel); - OrderView(); + this.mark = 1; // 设置标记为1,表示当前显示的是订单数据 + OutOrderTM outOrderTM = new OutOrderTM(); // 创建一个OutOrderTM对象,用于存储订单数据 + outOrderTM.resultOfNumber(oNumber); // 根据订单号查询相关的订单数据 + outTable.setModel(outOrderTM); // 设置表格数据模型为查询到的订单数据 + bottomPanelLeft.removeAll(); // 清除底部左侧面板的所有组件 + countInfoLabel = new JLabel("共" + outOrderTM.getRowCount() + "条记录"); // 显示当前记录的数量 + bottomPanelLeft.add(countInfoLabel); // 将记录数量标签添加到左侧面板 + OrderView(); // 调用OrderView方法,更新按钮的显示状态 } - - + /*刷新*/ public void refreshOutBuffer() { - OutTableModel outTableModel = new OutTableModel(); - outTableModel.allOutBuffer(); - outTable.setModel(outTableModel); - bottomPanelLeft.removeAll(); - countInfoLabel = new JLabel("商品种类:"+outTableModel.getRowCount()+",总价:"+outTableModel.getAllPrice()); - bottomPanelLeft.add(countInfoLabel); - backBtn.setVisible(false); - detailBtn.setVisible(false); - historyBtn.setVisible(true); - updateBtn.setVisible(true); - addBtn.setVisible(true); - deleteBtn.setVisible(true); + OutTableModel outTableModel = new OutTableModel(); // 创建一个新的OutTableModel对象 + outTableModel.allOutBuffer(); // 查询所有购物车数据 + outTable.setModel(outTableModel); // 设置表格数据模型为查询到的所有购物车数据 + bottomPanelLeft.removeAll(); // 清除底部左侧面板的所有组件 + countInfoLabel = new JLabel("商品种类:" + outTableModel.getRowCount() + ",总价:" + outTableModel.getAllPrice()); // 显示商品种类和总价 + bottomPanelLeft.add(countInfoLabel); // 将统计信息标签添加到左侧面板 + backBtn.setVisible(false); // 隐藏返回按钮 + detailBtn.setVisible(false); // 隐藏查看详情按钮 + historyBtn.setVisible(true); // 显示历史记录按钮 + updateBtn.setVisible(true); // 显示更新按钮 + addBtn.setVisible(true); // 显示添加按钮 + deleteBtn.setVisible(true); // 显示删除按钮 } - + /*调出收银出货订单表*/ public void OutOrderRecord() { - this.mark=1; - OutOrderTM outOrderTM = new OutOrderTM(); - outOrderTM.allOutOrderRecord(); - outTable.setModel(outOrderTM); - bottomPanelLeft.removeAll(); - countInfoLabel = new JLabel("共"+outOrderTM.getRowCount()+"条记录"); - bottomPanelLeft.add(countInfoLabel); - OrderView(); + this.mark = 1; // 设置标记为1,表示当前显示的是订单记录数据 + OutOrderTM outOrderTM = new OutOrderTM(); // 创建一个OutOrderTM对象,用于存储订单记录数据 + outOrderTM.allOutOrderRecord(); // 查询所有的出货订单记录 + outTable.setModel(outOrderTM); // 设置表格数据模型为查询到的订单记录 + bottomPanelLeft.removeAll(); // 清除底部左侧面板的所有组件 + countInfoLabel = new JLabel("共" + outOrderTM.getRowCount() + "条记录"); // 显示订单记录的数量 + bottomPanelLeft.add(countInfoLabel); // 将订单记录数量标签添加到左侧面板 + OrderView(); // 调用OrderView方法,更新按钮的显示状态 } - + public void OutRecord(String oNumber) { - this.mark=0; - OutRecordTM outRecordTM = new OutRecordTM(oNumber); - outRecordTM.findOutRecordByINumber(); - outTable.setModel(outRecordTM); - bottomPanelLeft.removeAll(); - countInfoLabel = new JLabel("订单号@"+oNumber+"共有"+outRecordTM.getRowCount()+"条记录"); - bottomPanelLeft.add(countInfoLabel); - backBtn.setVisible(true); - detailBtn.setVisible(false); - updateBtn.setVisible(false); - addBtn.setVisible(false); - historyBtn.setVisible(false); - deleteBtn.setVisible(false); + this.mark = 0; // 设置标记为0,表示当前显示的是订单详情数据 + OutRecordTM outRecordTM = new OutRecordTM(oNumber); // 创建一个OutRecordTM对象,根据订单号查询订单详情数据 + outRecordTM.findOutRecordByINumber(); // 查询根据订单号找到的订单详情 + outTable.setModel(outRecordTM); // 设置表格数据模型为查询到的订单详情数据 + bottomPanelLeft.removeAll(); // 清除底部左侧面板的所有组件 + countInfoLabel = new JLabel("订单号@" + oNumber + "共有" + outRecordTM.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(); - resultOfNumber(number); - } - - if(addBtn==source) { - OutDialog outDialog = new OutDialog(jFrame); - outDialog.setVisible(true); - refreshOutBuffer(); - } - - else if(updateBtn==source) { - int rowIndex = outTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); - return; - } - String id =(String) outTable.getValueAt(rowIndex,0); - ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"Out"); - changesumDialog.setVisible(true); - refreshOutBuffer(); + BufferImpl = new BufferImpl(); // 创建BufferImpl对象,用于获取购物车数据 + Object source = e.getSource(); // 获取触发事件的按钮 + + if (searchBtn == source) { // 如果点击的是搜索按钮 + String number = nameSearchTF.getText(); // 获取订单号 + resultOfNumber(number); // 根据订单号查询订单数据 } - - else if(deleteBtn==source) { - int rowIndex = outTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条"); - return; - } - String id =(String) outTable.getValueAt(rowIndex,0); - int select = JOptionPane.showConfirmDialog(this,"是否删除id为"+id+"的记录","提示",JOptionPane.YES_NO_OPTION); - if(select==JOptionPane.YES_OPTION) {/*选择是*/ - if(BufferImpl.DelOutBufferById(id)==true) { - JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); - }else { - JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); - } - refreshOutBuffer(); - } - - - }else if(historyBtn==source) {/*查看历史全部记录*/ - OutOrderRecord(); - }else if(backBtn==source) {/*历史记录中的返回按钮*/ - System.out.println("outView中的mark="+mark); - if(mark==1) { - refreshOutBuffer(); - }else if(mark==0) { - OutOrderRecord(); + + if (addBtn == source) { // 如果点击的是添加按钮 + OutDialog outDialog = new OutDialog(jFrame); // 创建OutDialog对话框 + outDialog.setVisible(true); // 显示添加对话框 + refreshOutBuffer(); // 刷新购物车数据 + } else if (updateBtn == source) { // 如果点击的是更新按钮 + int rowIndex = outTable.getSelectedRow(); // 获取选中的表格行索引 + if (rowIndex == -1) { // 如果没有选中行 + JOptionPane.showMessageDialog(this, "请选中一条进行更改数量"); // 提示用户选择记录 + return; } - - }else if(detailBtn==source) {/*查看订单详细*/ - - int rowIndex = outTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条查看订单详细信息"); + String id = (String) outTable.getValueAt(rowIndex, 0); // 获取选中行的订单ID + ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame, id, "Out"); // 创建修改数量的对话框 + changesumDialog.setVisible(true); // 显示修改对话框 + refreshOutBuffer(); // 刷新购物车数据 + } else if (deleteBtn == source) { // 如果点击的是删除按钮 + int rowIndex = outTable.getSelectedRow(); // 获取选中的表格行索引 + if (rowIndex == -1) { // 如果没有选中行 + JOptionPane.showMessageDialog(this, "请选中一条"); // 提示用户选择记录 return; } - - String oNumber =(String) outTable.getValueAt(rowIndex,0); - System.out.println("详情订单号为="+oNumber); - OutRecord(oNumber); - } - - - - else if(AccountBtn==source) {/*结账*/ - refreshOutBuffer(); - v = BufferImpl.allOutBuffer(); - if(v.size()==0)/*购物车为空*/{ - JOptionPane.showMessageDialog(null,"您的购物车为空", "提示", JOptionPane.YES_OPTION); - } - else {/*购物车不为空*/ - int res = JOptionPane.showConfirmDialog(null,"总金额:"+outTableModel.getAllPrice()+"元\r\n是否已经结账", "结账", JOptionPane.YES_NO_OPTION); - if(res==JOptionPane.YES_OPTION)/*如果已经结账*/{ - - String[] s =TimeAndOrder.TimeAndOrder(user.getUsername());/*获得时间和订单号*/ - - BufferImpl.InsertOutOrder(s[0],outTableModel.getAllPrice(), s[1], user.getUsername());/*往订单表插入一条记录*/ - for(int i=0;i Date: Thu, 12 Dec 2024 10:39:53 +0800 Subject: [PATCH 09/20] 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 10/20] 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 11/20] 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 12/20] =?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); // 将记录总数标签添加到底部面板 - } - -} From 865f39f7c0e2ccd6a259879e87a0b85a0535ddfd 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 14:09:58 +0800 Subject: [PATCH 13/20] branch --- Supermarket/.classpath | 6 +- Supermarket/.idea/.gitignore | 3 - Supermarket/.idea/dataSources.local.xml | 22 - Supermarket/.idea/dataSources.xml | 12 - .../5b23e521-053a-47c0-ae28-a98b513bc6ec.xml | 1291 ----------------- .../schema/information_schema.FNRwLQ.meta | 2 - .../storage_v2/_src_/schema/mysql.osA4Bg.meta | 2 - .../schema/performance_schema.kIw0nw.meta | 2 - .../storage_v2/_src_/schema/sys.zb4BAA.meta | 2 - Supermarket/.idea/misc.xml | 6 - Supermarket/.idea/modules.xml | 8 - Supermarket/.settings/README.md | 184 +++ Supermarket/Supermarket.iml | 51 - Supermarket/bin/.classpath | 6 +- Supermarket/bin/.idea/.gitignore | 3 - Supermarket/bin/.idea/dataSources.local.xml | 22 - Supermarket/bin/.idea/dataSources.xml | 12 - .../5b23e521-053a-47c0-ae28-a98b513bc6ec.xml | 1291 ----------------- .../schema/information_schema.FNRwLQ.meta | 2 - .../storage_v2/_src_/schema/mysql.osA4Bg.meta | 2 - .../schema/performance_schema.kIw0nw.meta | 2 - .../storage_v2/_src_/schema/sys.zb4BAA.meta | 2 - Supermarket/bin/.idea/misc.xml | 6 - Supermarket/bin/.idea/modules.xml | 8 - Supermarket/bin/Supermarket.iml | 51 - .../supermarket/componet/BGPanel.class | Bin 1147 -> 1147 bytes .../supermarket/dao/BufferService.class | Bin 1189 -> 1189 bytes .../supermarket/dao/SupplierInfService.class | Bin 791 -> 791 bytes .../lingnan/supermarket/dao/UserService.class | Bin 638 -> 638 bytes .../supermarket/dao/impl/BufferImpl.class | Bin 13040 -> 12638 bytes .../dao/impl/SupplierInfImpl.class | Bin 7048 -> 6982 bytes .../dao/impl/UserServiceImpl.class | Bin 7169 -> 7176 bytes .../dao/impl/inOrderServiceImpl.class | Bin 7456 -> 7282 bytes .../dao/impl/inRecordServiceImpl.class | Bin 4968 -> 4871 bytes .../dao/impl/outOrderServiceImpl.class | Bin 5023 -> 4905 bytes .../dao/impl/outRecordServiceImpl.class | Bin 4354 -> 4264 bytes .../dao/impl/prodCatalogImpl.class | Bin 4891 -> 4759 bytes .../supermarket/dao/impl/productionImpl.class | Bin 8560 -> 8461 bytes .../dao/impl/storageRecordImpl.class | Bin 3919 -> 3864 bytes .../supermarket/dao/inOrderService.class | Bin 447 -> 447 bytes .../supermarket/dao/inRecordService.class | Bin 543 -> 543 bytes .../supermarket/dao/outOrderService.class | Bin 455 -> 455 bytes .../supermarket/dao/outRecordService.class | Bin 552 -> 552 bytes .../supermarket/dao/prodCatalogService.class | Bin 615 -> 615 bytes .../supermarket/dao/productionService.class | Bin 800 -> 800 bytes .../dao/storageRecordService.class | Bin 389 -> 389 bytes .../ChangeStatusDialog$MyItemListener.class | Bin 1369 -> 1352 bytes .../dialog/ChangeStatusDialog.class | Bin 5799 -> 5763 bytes .../supermarket/dialog/ChangeSumDialog.class | Bin 5821 -> 5829 bytes .../supermarket/dialog/CloseDialog.class | Bin 3580 -> 3602 bytes .../dialog/InDialog$MyItemListener.class | Bin 950 -> 930 bytes .../lingnan/supermarket/dialog/InDialog.class | Bin 6160 -> 6122 bytes .../supermarket/dialog/OutDialog.class | Bin 4799 -> 4771 bytes .../ProductionDialog$MyItemListener.class | Bin 1991 -> 1895 bytes .../ProductionDialog$MyItemListener1.class | Bin 1860 -> 1783 bytes .../supermarket/dialog/ProductionDialog.class | Bin 9432 -> 9178 bytes .../dialog/SupplierInfDialog.class | Bin 4049 -> 4059 bytes .../dialog/UserDialog$MyItemListener.class | Bin 1136 -> 1124 bytes .../supermarket/dialog/UserDialog.class | Bin 4744 -> 4718 bytes .../dialog/UserInfDialog$MyItemListener.class | Bin 1533 -> 1509 bytes .../supermarket/dialog/UserInfDialog.class | Bin 5567 -> 5184 bytes .../com/lingnan/supermarket/dto/Buffer.class | Bin 330 -> 330 bytes .../com/lingnan/supermarket/dto/InOrder.class | Bin 1607 -> 1607 bytes .../lingnan/supermarket/dto/InRecord.class | Bin 1041 -> 1041 bytes .../lingnan/supermarket/dto/OutOrder.class | Bin 1484 -> 1484 bytes .../lingnan/supermarket/dto/OutRecord.class | Bin 1047 -> 1047 bytes .../lingnan/supermarket/dto/ProdCatalog.class | Bin 740 -> 740 bytes .../lingnan/supermarket/dto/Production.class | Bin 342 -> 342 bytes .../supermarket/dto/StorageRecord.class | Bin 1182 -> 1182 bytes .../lingnan/supermarket/dto/SupplierInf.class | Bin 1366 -> 1366 bytes .../com/lingnan/supermarket/dto/User.class | Bin 1721 -> 1721 bytes .../supermarket/dto/base/BaseDomain.class | Bin 568 -> 568 bytes .../supermarket/dto/base/BaseProduction.class | Bin 2549 -> 2549 bytes .../supermarket/dto/base/BsDomain.class | Bin 559 -> 559 bytes .../lingnan/supermarket/table/InOrderTM.class | Bin 2814 -> 2815 bytes .../supermarket/table/InRecordTM.class | Bin 2267 -> 2267 bytes .../supermarket/table/InTableModel.class | Bin 3012 -> 3065 bytes .../supermarket/table/OutOrderTM.class | Bin 2435 -> 2439 bytes .../supermarket/table/OutRecordTM.class | Bin 2282 -> 2282 bytes .../supermarket/table/OutTableModel.class | Bin 2552 -> 2633 bytes .../supermarket/table/ProdCatalogTM.class | Bin 1983 -> 1984 bytes .../supermarket/table/StorageRecordTM.class | Bin 2044 -> 2048 bytes .../supermarket/table/StorageTableModel.class | Bin 2338 -> 2419 bytes .../table/SupplierTableModel.class | Bin 2245 -> 2246 bytes .../supermarket/table/UserTableModel.class | Bin 2469 -> 2470 bytes .../supermarket/utils/CreateOrder.class | Bin 2373 -> 2557 bytes .../lingnan/supermarket/utils/DateUtil.class | Bin 879 -> 876 bytes .../lingnan/supermarket/utils/EmailTest.class | Bin 532 -> 532 bytes .../lingnan/supermarket/utils/FontUtil.class | Bin 683 -> 691 bytes .../lingnan/supermarket/utils/JDBCUtil.class | Bin 2461 -> 2424 bytes .../supermarket/utils/SendQQMailUtil.class | Bin 2735 -> 2732 bytes .../com/lingnan/supermarket/utils/Test.class | Bin 504 -> 512 bytes .../supermarket/utils/TimeAndOrder.class | Bin 1731 -> 1792 bytes .../supermarket/utils/tplbTest$1.class | Bin 867 -> 867 bytes .../lingnan/supermarket/utils/tplbTest.class | Bin 2153 -> 2209 bytes .../lingnan/supermarket/view/Demo4$1.class | Bin 852 -> 852 bytes .../com/lingnan/supermarket/view/Demo4.class | Bin 2122 -> 2178 bytes .../lingnan/supermarket/view/HomeView$1.class | Bin 1096 -> 1082 bytes .../lingnan/supermarket/view/HomeView.class | Bin 4621 -> 4569 bytes .../view/InView$MyItemListener.class | Bin 1434 -> 1410 bytes .../com/lingnan/supermarket/view/InView.class | Bin 14282 -> 14216 bytes .../lingnan/supermarket/view/LoginView.class | Bin 4482 -> 4459 bytes .../lingnan/supermarket/view/MainView.class | Bin 14702 -> 14760 bytes .../com/lingnan/supermarket/view/Nimbus.class | Bin 649 -> 642 bytes .../lingnan/supermarket/view/OutView.class | Bin 9884 -> 9882 bytes .../view/ProdCatalogView$MyItemListener.class | Bin 2155 -> 2059 bytes .../supermarket/view/ProdCatalogView.class | Bin 5711 -> 5538 bytes .../supermarket/view/StorageView.class | Bin 6612 -> 6592 bytes .../lingnan/supermarket/view/SuperView.class | Bin 1092 -> 1060 bytes .../supermarket/view/SupplierView.class | Bin 5844 -> 5839 bytes .../lingnan/supermarket/view/UserView.class | Bin 5675 -> 5671 bytes .../supermarket/view/base/BaseView.class | Bin 1916 -> 1916 bytes Supermarket/bin/config/jdbc.properties | 4 - Supermarket/bin/jdbc.properties | 2 +- Supermarket/config/jdbc.properties | 2 +- .../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 ++- 154 files changed, 4496 insertions(+), 7238 deletions(-) delete mode 100644 Supermarket/.idea/.gitignore delete mode 100644 Supermarket/.idea/dataSources.local.xml delete mode 100644 Supermarket/.idea/dataSources.xml delete mode 100644 Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml delete mode 100644 Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/information_schema.FNRwLQ.meta delete mode 100644 Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/mysql.osA4Bg.meta delete mode 100644 Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/performance_schema.kIw0nw.meta delete mode 100644 Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/sys.zb4BAA.meta delete mode 100644 Supermarket/.idea/misc.xml delete mode 100644 Supermarket/.idea/modules.xml create mode 100644 Supermarket/.settings/README.md delete mode 100644 Supermarket/Supermarket.iml delete mode 100644 Supermarket/bin/.idea/.gitignore delete mode 100644 Supermarket/bin/.idea/dataSources.local.xml delete mode 100644 Supermarket/bin/.idea/dataSources.xml delete mode 100644 Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml delete mode 100644 Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/information_schema.FNRwLQ.meta delete mode 100644 Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/mysql.osA4Bg.meta delete mode 100644 Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/performance_schema.kIw0nw.meta delete mode 100644 Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/sys.zb4BAA.meta delete mode 100644 Supermarket/bin/.idea/misc.xml delete mode 100644 Supermarket/bin/.idea/modules.xml delete mode 100644 Supermarket/bin/Supermarket.iml delete mode 100644 Supermarket/bin/config/jdbc.properties diff --git a/Supermarket/.classpath b/Supermarket/.classpath index f2404ae..b9e2849 100644 --- a/Supermarket/.classpath +++ b/Supermarket/.classpath @@ -4,8 +4,8 @@ - - - + + + diff --git a/Supermarket/.idea/.gitignore b/Supermarket/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/Supermarket/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/Supermarket/.idea/dataSources.local.xml b/Supermarket/.idea/dataSources.local.xml deleted file mode 100644 index 4d6a9c3..0000000 --- a/Supermarket/.idea/dataSources.local.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - #@ - ` - - - master_key - root - - - - - - - - - - - \ No newline at end of file diff --git a/Supermarket/.idea/dataSources.xml b/Supermarket/.idea/dataSources.xml deleted file mode 100644 index 84f5765..0000000 --- a/Supermarket/.idea/dataSources.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - mysql.8 - true - com.mysql.jdbc.Driver - jdbc:mysql://localhost:3306 - $ProjectFileDir$ - - - \ No newline at end of file diff --git a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml b/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml deleted file mode 100644 index 6ba1d51..0000000 --- a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml +++ /dev/null @@ -1,1291 +0,0 @@ - - - - - - big5 - 1 - - - big5 - - - dec8 - 1 - - - dec8 - - - cp850 - 1 - - - cp850 - - - hp8 - 1 - - - hp8 - - - koi8r - 1 - - - koi8r - - - latin1 - - - latin1 - 1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin2 - - - latin2 - 1 - - - latin2 - - - latin2 - - - latin2 - - - swe7 - 1 - - - swe7 - - - ascii - 1 - - - ascii - - - ujis - 1 - - - ujis - - - sjis - 1 - - - sjis - - - hebrew - 1 - - - hebrew - - - tis620 - 1 - - - tis620 - - - euckr - 1 - - - euckr - - - koi8u - 1 - - - koi8u - - - gb2312 - 1 - - - gb2312 - - - greek - 1 - - - greek - - - cp1250 - 1 - - - cp1250 - - - cp1250 - - - cp1250 - - - cp1250 - - - gbk - 1 - - - gbk - - - latin5 - 1 - - - latin5 - - - armscii8 - 1 - - - armscii8 - - - utf8 - 1 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - ucs2 - 1 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - cp866 - 1 - - - cp866 - - - keybcs2 - 1 - - - keybcs2 - - - macce - 1 - - - macce - - - macroman - 1 - - - macroman - - - cp852 - 1 - - - cp852 - - - latin7 - - - latin7 - 1 - - - latin7 - - - latin7 - - - utf8mb4 - 1 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - cp1251 - - - cp1251 - - - cp1251 - - - cp1251 - 1 - - - cp1251 - - - utf16 - 1 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16le - 1 - - - utf16le - - - cp1256 - 1 - - - cp1256 - - - cp1257 - - - cp1257 - - - cp1257 - 1 - - - utf32 - 1 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - binary - 1 - - - geostd8 - 1 - - - geostd8 - - - cp932 - 1 - - - cp932 - - - eucjpms - 1 - - - eucjpms - - - gb18030 - 1 - - - gb18030 - - - gb18030 - - - utf8_general_ci - - - latin1_swedish_ci - - - utf8_general_ci - - - latin1_swedish_ci - - - utf8_general_ci - - - utf8mb4_general_ci - - - utf8mb4_unicode_ci - - - localhost - - - localhost - - - localhost - - - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - float|0s - 3 - - - float|0s - 4 - - - int(11)|0s - 5 - - - int(11)|0s - 6 - - - int(11)|0s - 7 - - - varchar(20)|0s - 8 - - - varchar(20)|0s - 9 - - - float|0s - 10 - - - int(11)|0s - 0 - 11 - - - supplyId - id - supplierinf - - - id2 - id - prodcatalog - - - id - btree - 1 - - - name - btree - 1 - - - supplyId - btree - - - id2 - btree - - - 1 - 1 - PRIMARY - - - name - - - varchar(30)|0s - 1 - 1 - - - float|0s - 2 - - - timestamp|0s - CURRENT_TIMESTAMP - 1 - CURRENT_TIMESTAMP - 3 - - - varchar(15)|0s - 4 - - - int(11)|0s - 2 - 5 - - - int(11)|0s - 1 - 6 - - - iNumber - btree - 1 - - - 1 - 1 - PRIMARY - - - varchar(30)|0s - 1 - - - varchar(20)|0s - 2 - - - int(11)|0s - 3 - - - float|0s - 4 - - - iNumber - iNumber - inorder - - - iNumber - btree - - - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - float|0s - 3 - - - float|0s - 4 - - - int(11)|0s - 5 - - - int(11)|0s - 6 - - - int(11)|0s - 7 - - - varchar(20)|0s - 8 - - - varchar(20)|0s - 9 - - - float|0s - 10 - - - int(11)|0s - 0 - 11 - - - supplyId - id - supplierinf - - - id2 - id - prodcatalog - - - id - btree - 1 - - - name - btree - 1 - - - supplyId - btree - - - id2 - btree - - - 1 - 1 - PRIMARY - - - name - - - varchar(30)|0s - 1 - 1 - - - float|0s - 2 - - - timestamp|0s - CURRENT_TIMESTAMP - 1 - CURRENT_TIMESTAMP - 3 - - - varchar(15)|0s - 4 - - - int(11)|0s - 1 - 5 - - - oNumber - btree - 1 - - - 1 - 1 - PRIMARY - - - varchar(30)|0s - 1 - - - varchar(20)|0s - 2 - - - int(11)|0s - 3 - - - float|0s - 4 - - - oNumber - oNumber - outorder - - - oNumber - btree - - - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - id - btree - 1 - - - 1 - 1 - PRIMARY - - - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - float|0s - 3 - - - float|0s - 4 - - - int(11)|0s - 5 - - - int(11)|0s - 6 - - - int(11)|0s - 7 - - - varchar(20)|0s - 8 - - - varchar(20)|0s - 9 - - - float|0s - 10 - - - int(11)|0s - 1 - 11 - - - id2 - id - prodcatalog - - - id - btree - 1 - - - name - btree - 1 - - - id2 - btree - - - 1 - 1 - PRIMARY - - - name - - - varchar(30)|0s - 1 - - - timestamp|0s - CURRENT_TIMESTAMP - 1 - CURRENT_TIMESTAMP - 2 - - - varchar(20)|0s - 3 - - - enum('+', '-')|0e - 4 - - - int(11)|0s - 5 - - - 9 - int(11)|0s - 1 - 1 - - - varchar(30)|0s - 2 - - - varchar(50)|0s - 3 - - - varchar(11)|0s - 4 - - - varchar(50)|0s - 5 - - - int(11)|0s - 1 - 6 - - - id - btree - 1 - - - name - btree - 1 - - - 1 - 1 - PRIMARY - - - name - - - 6 - int(11)|0s - 1 - 1 - - - varchar(15)|0s - 2 - - - varchar(255)|0s - 3 - - - varchar(20)|0s - 1 - 4 - - - varchar(11)|0s - 5 - - - int(11)|0s - 1 - 6 - - - varchar(50)|0s - 7 - - - int(11)|0s - 1 - 8 - - - id - btree - 1 - - - name - btree - 1 - - - 1 - 1 - PRIMARY - - - name - -
-
\ No newline at end of file diff --git a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/information_schema.FNRwLQ.meta b/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/information_schema.FNRwLQ.meta deleted file mode 100644 index 1ff3db2..0000000 --- a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/information_schema.FNRwLQ.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:information_schema -! [null, 0, null, null, -2147483648, -2147483648] diff --git a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/mysql.osA4Bg.meta b/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/mysql.osA4Bg.meta deleted file mode 100644 index 86a53f1..0000000 --- a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/mysql.osA4Bg.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:mysql -! [null, 0, null, null, -2147483648, -2147483648] diff --git a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/performance_schema.kIw0nw.meta b/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/performance_schema.kIw0nw.meta deleted file mode 100644 index 9394db1..0000000 --- a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/performance_schema.kIw0nw.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:performance_schema -! [null, 0, null, null, -2147483648, -2147483648] diff --git a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/sys.zb4BAA.meta b/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/sys.zb4BAA.meta deleted file mode 100644 index 2f4470b..0000000 --- a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/sys.zb4BAA.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:sys -! [null, 0, null, null, -2147483648, -2147483648] diff --git a/Supermarket/.idea/misc.xml b/Supermarket/.idea/misc.xml deleted file mode 100644 index 0f2ad58..0000000 --- a/Supermarket/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Supermarket/.idea/modules.xml b/Supermarket/.idea/modules.xml deleted file mode 100644 index 4b59c4b..0000000 --- a/Supermarket/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Supermarket/.settings/README.md b/Supermarket/.settings/README.md new file mode 100644 index 0000000..4495ac6 --- /dev/null +++ b/Supermarket/.settings/README.md @@ -0,0 +1,184 @@ +
+ + + +## 写在前面 + +初次引入可能会报错,所以食用前请重新引入好三个jar包,都在lib目录下 + +![](https://cdn.jsdelivr.net/gh/lifealsoisgg/MyProject-SupermarketSystem/images/build.jpg) + +其它修改 + +> 1. 修改config/jdbc.properties里面连接mysql数据库的属性值为自己的。 +> +> 2. 进货功能的邮件发送方面,调用的类为**com.lingnan.supermarket.util/SendQQMailUtil.java**,在**com.lingnan.supermarket.view/InView.java**下调用,如图,照着SendQQMailUtil.java的属性修改即可,前提要开通QQEmail的SMTP服务(自行百度),调用位置如图。**请务必使用自己的SMTP服务方便邮件的发送与接收,如果你实在要用我的请务必将收件人邮箱改为自己的,否则你这边是看不到邮件是否发送成功(修改下面第三个参数的邮箱为自己的即可)!!!** +> +> ![image](https://user-images.githubusercontent.com/52524117/161801771-879d0e13-7133-4efb-94a6-d1c0efb3c608.png) + + + +整个项目的运行入口在**com.lingnan.supermarket.view/LoginView.java**下即main函数放的地方 + + + +## 工具&环境tools + +> - 数据库:Mysql5.7 +> - java环境:Java1.8 +> - 编辑器:Eclipse +> - 服务器:Tomcat8 + + + +## 首页home + +
+ + + +## 人员管理manage + +权限0为超管,1为收货员,2为进货员 + +
+ + + +## 进货系统import + +这里在添加要进货物时偷了懒只有选择编号加入。右上角添加按钮即可添加要进的货,右下角第一个按钮就是确认进货,点击后会发送邮件给相应的仓库,公司等,这里只是模拟。 + +`进货流程就是`(理想情况,实际还需看需求) + +> 1. 进货员添加进货商品 +> 2. 确认进货订单后会发送邮件 +> 3. 供货方收到邮件后准备进货 +> 4. 商场收到货,进货员线下清点好后更改订单状态为已入库 +> 5. 系统库存自动增加 + + + +### 添加进货 + +
+ +### 更改进货数量 + +
+ +### 确认进货订单&发送进货邮件 + +
+ + + + +
+
+ + + +### 供货方查看邮件内容 + +没有用到表格或html,只是简单的字符串排版 + +
+ +### 更改进货订单状态 + +模拟当进货成功后,==修改订单状态==为已入库或者已取消,如果已入库后库存数量会自动增加 + +
+ + + + +
+
+ + + +## 收银系统cashier + +也是没扫描机器,所以只能模拟。 + +`收银流程如下` + +> 1. 添加商品,如果库存不够会提示 +> 2. (手动)确认结账 +> 3. 支付成功后库存减少 + + + +### 添加商品 + +
+ +### 库存不够提示 + +
+ +### 收银结账&支付成功 + +
+ + + + +
+
+ + + +### 首页更新 + +
+ + + +## 商品库存storage + +### 总览 + +
+ +### 库存日志 + +#### 进货库存日志 + +
+ + + + +
+
+ + + +#### 收银库存日志 + +
+ + + + +
+
+ + + +## 供应商supplier + +
+ + + +## 商品目录catalog + +
+ + +## 写在最后last +一个很古老的 swing 项目 diff --git a/Supermarket/Supermarket.iml b/Supermarket/Supermarket.iml deleted file mode 100644 index ae3b314..0000000 --- a/Supermarket/Supermarket.iml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Supermarket/bin/.classpath b/Supermarket/bin/.classpath index f2404ae..b9e2849 100644 --- a/Supermarket/bin/.classpath +++ b/Supermarket/bin/.classpath @@ -4,8 +4,8 @@ - - - + + + diff --git a/Supermarket/bin/.idea/.gitignore b/Supermarket/bin/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/Supermarket/bin/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/Supermarket/bin/.idea/dataSources.local.xml b/Supermarket/bin/.idea/dataSources.local.xml deleted file mode 100644 index 4d6a9c3..0000000 --- a/Supermarket/bin/.idea/dataSources.local.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - #@ - ` - - - master_key - root - - - - - - - - - - - \ No newline at end of file diff --git a/Supermarket/bin/.idea/dataSources.xml b/Supermarket/bin/.idea/dataSources.xml deleted file mode 100644 index 84f5765..0000000 --- a/Supermarket/bin/.idea/dataSources.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - mysql.8 - true - com.mysql.jdbc.Driver - jdbc:mysql://localhost:3306 - $ProjectFileDir$ - - - \ No newline at end of file diff --git a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml b/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml deleted file mode 100644 index 6ba1d51..0000000 --- a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml +++ /dev/null @@ -1,1291 +0,0 @@ - - - - - - big5 - 1 - - - big5 - - - dec8 - 1 - - - dec8 - - - cp850 - 1 - - - cp850 - - - hp8 - 1 - - - hp8 - - - koi8r - 1 - - - koi8r - - - latin1 - - - latin1 - 1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin2 - - - latin2 - 1 - - - latin2 - - - latin2 - - - latin2 - - - swe7 - 1 - - - swe7 - - - ascii - 1 - - - ascii - - - ujis - 1 - - - ujis - - - sjis - 1 - - - sjis - - - hebrew - 1 - - - hebrew - - - tis620 - 1 - - - tis620 - - - euckr - 1 - - - euckr - - - koi8u - 1 - - - koi8u - - - gb2312 - 1 - - - gb2312 - - - greek - 1 - - - greek - - - cp1250 - 1 - - - cp1250 - - - cp1250 - - - cp1250 - - - cp1250 - - - gbk - 1 - - - gbk - - - latin5 - 1 - - - latin5 - - - armscii8 - 1 - - - armscii8 - - - utf8 - 1 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - utf8 - - - ucs2 - 1 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - cp866 - 1 - - - cp866 - - - keybcs2 - 1 - - - keybcs2 - - - macce - 1 - - - macce - - - macroman - 1 - - - macroman - - - cp852 - 1 - - - cp852 - - - latin7 - - - latin7 - 1 - - - latin7 - - - latin7 - - - utf8mb4 - 1 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - cp1251 - - - cp1251 - - - cp1251 - - - cp1251 - 1 - - - cp1251 - - - utf16 - 1 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16le - 1 - - - utf16le - - - cp1256 - 1 - - - cp1256 - - - cp1257 - - - cp1257 - - - cp1257 - 1 - - - utf32 - 1 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - binary - 1 - - - geostd8 - 1 - - - geostd8 - - - cp932 - 1 - - - cp932 - - - eucjpms - 1 - - - eucjpms - - - gb18030 - 1 - - - gb18030 - - - gb18030 - - - utf8_general_ci - - - latin1_swedish_ci - - - utf8_general_ci - - - latin1_swedish_ci - - - utf8_general_ci - - - utf8mb4_general_ci - - - utf8mb4_unicode_ci - - - localhost - - - localhost - - - localhost - - - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - InnoDB - utf8mb4_unicode_ci -
- - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - float|0s - 3 - - - float|0s - 4 - - - int(11)|0s - 5 - - - int(11)|0s - 6 - - - int(11)|0s - 7 - - - varchar(20)|0s - 8 - - - varchar(20)|0s - 9 - - - float|0s - 10 - - - int(11)|0s - 0 - 11 - - - supplyId - id - supplierinf - - - id2 - id - prodcatalog - - - id - btree - 1 - - - name - btree - 1 - - - supplyId - btree - - - id2 - btree - - - 1 - 1 - PRIMARY - - - name - - - varchar(30)|0s - 1 - 1 - - - float|0s - 2 - - - timestamp|0s - CURRENT_TIMESTAMP - 1 - CURRENT_TIMESTAMP - 3 - - - varchar(15)|0s - 4 - - - int(11)|0s - 2 - 5 - - - int(11)|0s - 1 - 6 - - - iNumber - btree - 1 - - - 1 - 1 - PRIMARY - - - varchar(30)|0s - 1 - - - varchar(20)|0s - 2 - - - int(11)|0s - 3 - - - float|0s - 4 - - - iNumber - iNumber - inorder - - - iNumber - btree - - - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - float|0s - 3 - - - float|0s - 4 - - - int(11)|0s - 5 - - - int(11)|0s - 6 - - - int(11)|0s - 7 - - - varchar(20)|0s - 8 - - - varchar(20)|0s - 9 - - - float|0s - 10 - - - int(11)|0s - 0 - 11 - - - supplyId - id - supplierinf - - - id2 - id - prodcatalog - - - id - btree - 1 - - - name - btree - 1 - - - supplyId - btree - - - id2 - btree - - - 1 - 1 - PRIMARY - - - name - - - varchar(30)|0s - 1 - 1 - - - float|0s - 2 - - - timestamp|0s - CURRENT_TIMESTAMP - 1 - CURRENT_TIMESTAMP - 3 - - - varchar(15)|0s - 4 - - - int(11)|0s - 1 - 5 - - - oNumber - btree - 1 - - - 1 - 1 - PRIMARY - - - varchar(30)|0s - 1 - - - varchar(20)|0s - 2 - - - int(11)|0s - 3 - - - float|0s - 4 - - - oNumber - oNumber - outorder - - - oNumber - btree - - - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - id - btree - 1 - - - 1 - 1 - PRIMARY - - - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - float|0s - 3 - - - float|0s - 4 - - - int(11)|0s - 5 - - - int(11)|0s - 6 - - - int(11)|0s - 7 - - - varchar(20)|0s - 8 - - - varchar(20)|0s - 9 - - - float|0s - 10 - - - int(11)|0s - 1 - 11 - - - id2 - id - prodcatalog - - - id - btree - 1 - - - name - btree - 1 - - - id2 - btree - - - 1 - 1 - PRIMARY - - - name - - - varchar(30)|0s - 1 - - - timestamp|0s - CURRENT_TIMESTAMP - 1 - CURRENT_TIMESTAMP - 2 - - - varchar(20)|0s - 3 - - - enum('+', '-')|0e - 4 - - - int(11)|0s - 5 - - - 9 - int(11)|0s - 1 - 1 - - - varchar(30)|0s - 2 - - - varchar(50)|0s - 3 - - - varchar(11)|0s - 4 - - - varchar(50)|0s - 5 - - - int(11)|0s - 1 - 6 - - - id - btree - 1 - - - name - btree - 1 - - - 1 - 1 - PRIMARY - - - name - - - 6 - int(11)|0s - 1 - 1 - - - varchar(15)|0s - 2 - - - varchar(255)|0s - 3 - - - varchar(20)|0s - 1 - 4 - - - varchar(11)|0s - 5 - - - int(11)|0s - 1 - 6 - - - varchar(50)|0s - 7 - - - int(11)|0s - 1 - 8 - - - id - btree - 1 - - - name - btree - 1 - - - 1 - 1 - PRIMARY - - - name - -
-
\ No newline at end of file diff --git a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/information_schema.FNRwLQ.meta b/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/information_schema.FNRwLQ.meta deleted file mode 100644 index 1ff3db2..0000000 --- a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/information_schema.FNRwLQ.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:information_schema -! [null, 0, null, null, -2147483648, -2147483648] diff --git a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/mysql.osA4Bg.meta b/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/mysql.osA4Bg.meta deleted file mode 100644 index 86a53f1..0000000 --- a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/mysql.osA4Bg.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:mysql -! [null, 0, null, null, -2147483648, -2147483648] diff --git a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/performance_schema.kIw0nw.meta b/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/performance_schema.kIw0nw.meta deleted file mode 100644 index 9394db1..0000000 --- a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/performance_schema.kIw0nw.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:performance_schema -! [null, 0, null, null, -2147483648, -2147483648] diff --git a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/sys.zb4BAA.meta b/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/sys.zb4BAA.meta deleted file mode 100644 index 2f4470b..0000000 --- a/Supermarket/bin/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec/storage_v2/_src_/schema/sys.zb4BAA.meta +++ /dev/null @@ -1,2 +0,0 @@ -#n:sys -! [null, 0, null, null, -2147483648, -2147483648] diff --git a/Supermarket/bin/.idea/misc.xml b/Supermarket/bin/.idea/misc.xml deleted file mode 100644 index 0f2ad58..0000000 --- a/Supermarket/bin/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Supermarket/bin/.idea/modules.xml b/Supermarket/bin/.idea/modules.xml deleted file mode 100644 index 4b59c4b..0000000 --- a/Supermarket/bin/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Supermarket/bin/Supermarket.iml b/Supermarket/bin/Supermarket.iml deleted file mode 100644 index ae3b314..0000000 --- a/Supermarket/bin/Supermarket.iml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Supermarket/bin/com/lingnan/supermarket/componet/BGPanel.class b/Supermarket/bin/com/lingnan/supermarket/componet/BGPanel.class index a42e4a1caa418317da53327797933728d18ae7fe..a1ff00cbb558f15faa1b06ef6e2dda012df295c2 100644 GIT binary patch literal 1147 zcma)4YflqF6g|@iOY0O$c?cCm1hw5N>jQih(FhT18a08G#BW18wj=Fsv%96nPyQtn z1mg#PfIrH3XLo4{ezD0;XYQRj=iGbG?>|3(0a(Ke12Kj|-RW3uWjAeMTVAg#-Hvb% zrEgKZ>)5n;x$|DwvTY#2kozQ##AnOv(*x^G5NAlLj%Z4TY*lA1(f6&2j+7ZjHk7UW zO@_(B#bmL@kl1n>GL1McaTwqX@j|hd0>c$7vrbpJNhJ3=>W1 zZ_AIO*Y=|X!&IR-4Y8M6!-dbC@2rL=d|7t%d*{=v5DNZV76T}~m7c>`CX zs)M=)S&ju&QVm!11A{QEpA!&zrb54=sK8mFo8BFG(mj%Hx%h$l-6Ts5ubnXvdV1ICxpnzU z>5lTqyQ^9Y&4vs{)@O)mchN3Rdjq4irs(vQ&I$ToF;9^;OW%?Cf$*=}*u zoL@M>^>1`9hMTnJ10+r_GlViuzRZ$0Ca{bgZc*M0F;PH~PJ|wClYF{E9wL+l(m=k6 z)R>W)Mx-V?P;-$v7a&j3I!(;8#65S8F*{()MvMrQX-2&Z854TS5o3*X=v>|`o#IZ( vJVquSH&0;E_kg~K`@^coNF7LX5{tyT6!6Z3uLrz&Y~UGTGi=h`7@q$HXIbiB literal 1147 zcma)4TTc^F5dKatEUgPHw;~l(1f|^y>jk_O&|3(0a(L}EJm=9fsR{QEMiHS+Zo)!vNDA% zT@+P{sl1Xhce7Z*ss>BLJ%+Sw^M+tBs-O4?w|LLDDk@TD7}}7w^tTu$3zsj82Mnog zr%n&Ys?rv3yX_<4?(?G-MJB3FjkgZCE7ds)ru?S#7|d$TX+Tqgnx5FwnCFTYacU|6T z%9>YJnXEyQ`ikN^hU}ixb!+04R5J94$f|0L4g>dfjABf~104^srehtCG(6TZgR44b zm3e}vI<8?($1{|5Y@n=RQ^yvbGZg+;I5kiqezv?GwaI!Dbb}#TP~44pO8bt}I+mn! zydnG@@sW31ejJ-B6#D|BC^dA1Quk`E5cZz@LK1U>X*;qlY)?8iB?b(FWr(8;nn$mL zcj-dd^I@uY7|w|3(UdY2cpVLDJf?clVY;uoycg^j!}`E{!j-GguTMKz%y1ds9eKh% z5pKEo0SmOkBeePq2{jJ#lH?m0Cp$r>uXIk)|B`tQW|qDq@dL>-q)w6Eyzqv$%(?k9 zXx}I=fl0D?43W*!OC1@iI!X2B$u43VQ*>j7HR+V26IBneX^$w6=1*1Tp{XT^*yJNN z^@xoTv$>2s5mcTbJ4?uOgnfMg(TEX^2oa<;L{wggm{Lm@As!Hq1ToB;rE?6I%u^(i rN%IUD`m*$0Iqa(*C3Z?n8p~8^CBV&vuVdUiDZ5U!8E#N+0yqBx_1WqL diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/BufferService.class b/Supermarket/bin/com/lingnan/supermarket/dao/BufferService.class index e2012f8616dbc4cd3671fc5652a695a66b177f18..dfad2fac034bc09354cd9fbb82befb69bc8677a8 100644 GIT binary patch delta 192 zcmZ3=xs;Rl)W2Q(7#J8#7}VJrm?ke^))8Z8U}0ns$Vx0r)Xz!GOV{^L%1TWx*(fl9 zS%!^~fsuh3sGNa81gMCWfepxK2lAL0I3_c**yc(wfHX@o@PKJ4Bzb9|xC{dqSX>q= pFUPR%&ty8zTcF0~1ga1A_<)BLg!73y{wW2;raxpLf`4UL- zl0d!`NFGQ_GeG2J7gOcprR)1AWu+#UY!rxP zN@HVWU}RthDraC|2P$G^U<2~mfjlM#4j`YCfeX&(2J(3rco{&3@j+>R1_3Z%kUl|Pzyy?JU|?rqWMF1s z0rFXaJSGMx50vI*-~;pd83f?!1cCBG48lM&7#T#sCW!(7 DHOC3b diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/UserService.class b/Supermarket/bin/com/lingnan/supermarket/dao/UserService.class index b32b0dba9597f793ab13dd11ec4f8422aee5b3f8..ce92c1654cfc896f73784155a18d1e3c01b2b422 100644 GIT binary patch delta 142 zcmeyz@{dK})W2Q(7#J8#7)03_m>3z4*Kd`<=~IG-EH=V9Pw02#)|zz?Pc R7zDwz5Qq;{DGb&r0suGr5as{? delta 134 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 gp6E$5o!qyvjuWVn6QtOjAjRhRDK@2QEx5NfqL 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 E09x{JH~;_u diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/impl/SupplierInfImpl.class b/Supermarket/bin/com/lingnan/supermarket/dao/impl/SupplierInfImpl.class index edc9cfc9a69db4ee8244e0cfbc783ae054ebc4c0..a321a9d66acd9bd6969fb96787086a79b1d236d9 100644 GIT binary patch literal 6982 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 PnxWKWucgXV1xEBgZZooB diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/impl/UserServiceImpl.class b/Supermarket/bin/com/lingnan/supermarket/dao/impl/UserServiceImpl.class index 90181f1d6ff36d71c29bd98a4af760da1e26f05d..29d1685bf233f82d8ebddfc8497fd90b1e4dbfb5 100644 GIT binary patch literal 7176 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 CL$6r? diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.class b/Supermarket/bin/com/lingnan/supermarket/dao/impl/inOrderServiceImpl.class index faf169f7c6c382dc4334b56805955f25419171ef..69670d6f432ef022abb85d637ed62c5e598ef937 100644 GIT binary patch literal 7282 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 literal 7456 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 literal 5023 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 A$^ZZW diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/impl/outRecordServiceImpl.class b/Supermarket/bin/com/lingnan/supermarket/dao/impl/outRecordServiceImpl.class index c84096e8c7d0ed094bb9aee3ad02002f85514d34..418841618da612b1a94c5b9c68db04a371e4335e 100644 GIT binary patch literal 4264 zcma)8{dW_`6}@9iT3KG8_zNo#P$(D++fi_ukVrN-7&{R${*p1^7>F#bjX;*<)yg&` zr7ca;G$C!$uaq?XNSoAYp(Sn3ad6X9e(mYM)N@Mj%&t}fY!1iA+L_rmZ{EB2y*vA# z|NY}%0KSDUHPi?^lgiIWvYFgmE}4rIO9jK6Pns7EE0Rv;BboU^Hj*z{<3=iPrW1y_ zm`NFNE^6=yeB(lLF&W7wb90fAnF~hB(%=*5e3--geF^w_GP#U(NT9YoJSpJm&!>$5 zYEiF4gI{3FP$p*#m*!^-b0RsDH3S-l@~LEYGHGVy+*$Nk=QBltgF_EHeZzEOOlCHd zOTUoKj+C<%Xlf4+sT50ACL5V#f_amcb%_kYvPvdn>0QU9XX6;Ge8lx1I~3E0# zhya>UA3!S}(-0JB+bAQsr5HJO^ho~+j&y9t4gqb>u=?}4oWQnnXvKwWL@qJ@Oge$2`gzC^G41Rc&gn- zN)n3n`vsuLSG zilwZTFf4-EDX@1Vu+r7g2hf3fKO%%HZKhUJ_l(7fLMNk3R#wZ+oB45wGeAsl9d@YuM-c-=j5dBh7kj-a2W zJR(t=XBV}{!}K;F;3u`CCc9R;d{M_sh;xxH2ebL)MotFi zh}&W^TQWvwWs?j#L|2SrGN>^f<46e9Gbk3l3PPG!6^im03s1_5KcQn1Cz*aSoxU$u zTU=t{DVf7*9aDIPDdvo2#!uCl3g8URX*kPmE_sQup@HR;QII9C<5i_31(qclOr|bQ zn8_4XrWG?fQs8;sR5o8^KleG|$)a`nkJ%y1wMqe3)~b3-DpJ^5qulLAEU@np#Y;dCu5FdG zssU$2E%%D_r9xS#9Wbj9d33!L*rez?o-8QY*RWL9&#H_xP$X>mQmYf^&HR#cbx4sv zaw(o>LE3kk`Osdjijp~vRM+mkB3EVj=;`=zMIgL^5{H(~8>SI*6eH9dIxHpgyE?vy ztE5bJx{_I`hjE*RDh$|Ee!L-2lS#{7d`rg8Q6oPIZ(L_d6Y* z;P;GtR*K=Ilr*I%gL2=eIzGc6DVD@colDHx6k3pR1A+XmQ-Eu68( zu$5K~%C=ED5jW`E&-wMQ(RBJNw)<^tJ1&Mr)YI^I)Y}>Ku3=XVhP&3VS0L(HLEqQt zpkY_k7xV=^4NtD&sT!=}Sv8BUp-0a8)a>XQ25WE|$5t`g5%jHM;$+aXhEoC`-TmhZ zLej-5rh}fY&f7??pe3p~rshLp@ri{hTp__Gm~s# zdaWF7$4=}ZyN~m`V<)89T$}MOGPpnpx8iMFM3#{?)89OD5XJLPL{=kcKu52Q(}KJwqDKjA~e}m&9JiYc7GWD+2$`(`7Z> zB5{&75%oG$Mtxlk-&XWRJwcDBV-4S_g(N^S>0LqGVe&XxuJ9-)-*-rTQ%+n?<>c)u zN`t;mMJY=}QTpWyc9TI(QtBmriqqDpzdQ;0@3=#sq_q)O@g`|)#5ICmru8hgaeRPK zcC*-@Mu0Fj;vh+TjzB%nvXAmjjK4j25xtn;=T#Di32+~lxq21-6v?CXIY_SqxX$M% zwEUFMoBVF7PRp+LqIQwaLS=57fd67ZvO7k0bsDgmuJKp43D(^y4|m)o5Zf_|1WDSCX#xVqB}K+2X_)UvnbR0S9VaLg?7kDU zJVmljv+GWguqi_O3Tc}r{AbvMXSw4XtzN}R(l*V{wmHlY;1mf=!{YOG0xLQlsTupVN-|0Kg zT_)#O-yGl?=Ye`SH$%(M{!jnR$O_BtKc)o^RQE-T}`JL)Cgq=I-m zP0>RB>~YXXwAHEtyN-Z`2~!Qm{RPEOn9EjaU@N4Xlrss)SBT%S%r6cR0{_ c6?D5m=)&;Ybxo{7tZRkYcv-9LE9vk52XJKZaR2}S literal 4354 zcmb7H`*#!95&l-MmE{G4jRA#66vD%RiJUYfMPObA2NB~ZZwSpItwA7b#cE}Yp`_5X zc~F`@(xz!>Y1*bFEp4C=gTgtbKldN#AJcP6zqwkigfSd)INp0_cJA!V_sz@||Nh@s z{{-+d?#0jnQ^)Zb0x)C9ARC3%j8U9u#!2LwaSEq(qU9IC6Dh!aY-yLi1_4a?x_eOy{)aCbOoU%#9WENxSS0TN&HQj#$ok zE@P#s+^AvBXs(dmmd_8=UTc`wvAXY+Ic_G)ZZ4nPZ)IHDp=FcrLBp!Yf6uj(zAv8A z82N&#yV99_a%8A)=S0RTx;eYRw=v%*lW3jktD%ftC}?P}yXc{UF;yMREjm`wbgb-% zYr58$Rd6*duGB6Lv?5U(C3PHHlHj9!vP1NWX!f z;zQPefuG^$ECd4|;TIZKJhs^zo6o?<_@#kQaLvH4aLmB3aoxag@G0{&@LT-O!0+*y zfj{7efzR;;Q&mAuZ&L$*lnhosCd|ayla^y8ylO~vC$<>)6K;}(T-Ly!aZN*5p>E(W z_|m{F+&1u6{7u91T%lw+ZX#E3?RwgYaWh}GN{Nmwo&2}jz~Au?15>zT;4Uf#zQS$J zpDIh!5PLKf4eK9^)sqHejWE>(1IJI19}S&Pa^=(J6@Z2|AIo|xiNda z8Cgf4IW*HJ2Z=Xx<~4#<9Xj%%Am`k)DN`-DjgomdlebG8Fk8LD!b%;cI@CTX-ZeCh zJ^4^ekyjXDS_PlSgd7c>=!q>Ur8 znPNTvwi?wBVI;UK0>T|>1$=B&=J9?R0*ZbD9i@%O1+97|s##tc?JH(^@8dbF;?F(~ zDgFiwbLGtCvy)Pit0vktcc9(oCV+K(MwGGzFK};E4QSd$NyCeHiB>$U{R=@vsr&dI z0*CG(*moD9JzBq(3blq);m&xtf=B@U>nhMSq(bpf1yPM-x91+3Xdg>O;*of$wYdT# zz!5e}NwX_x5owN+=2p-e;ACr?!o0Qd$Q0TS+;~ulht_r8#rzvch>IyK^c5{B-P_0Y z`)h9@gmx4$$={>0USY74xTMxAxT@BWO86KpfHtNxj|sP9Hs)h47IL=;OR*R$v4rU_ z#Rfc!*O0(IVmgXt7{l}Q+kvyhb`mRaftHsjzf1WF*AKaVM6?CSVS3-d-{9ZiUxb!n ztj8zD6hO%@lAqkFuDy$5$M_Uvk{vJ^;~-G#%7h%+t`Aw^stSmg`n!m?cDWH zvkKt{3?!mshmM^(dUd>}W0#IJ@L#0UI(850c)b~YG!9@7kM(1~WA#7$R1@`Il1<@K zONBjtQ;~J8amA^S8CqMxGeHQeLT^~;R`m9H^zLB=)X5cLk;n965qzRWSkl0AJknX^ z`BpqkG8NIw$g3_y`4MU79;&WZqY^O%J z?hvk%&=uEdy70-~DP#}tCfP$I+wjO9<`+k>mrrToPx#dsy<7}-ubsluem)y8ZVvLhGa zAiMJrIXp~2ju6wMWaSNVc#PH=zRgnmEo$E6)1;I^UVSBlb6hX5qoq%evi#qmcj-Ov9w-Uu!jPoFMQiZ1(#bI*3kRFBE2xH4AW_88c3Irc8 zl&IqDh{nF;-_a^{;CA*|o}VO7 z=jmab-F22|P0-gQ5jsy#ldQq>95fdc&YS5)I#6&9)ANvz^N_++a31h*j^K5Lq>QFr fUXMtGO9ja;gsat0=%o4;gu`mUX=GYP+?)Rgn0x&| diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/impl/prodCatalogImpl.class b/Supermarket/bin/com/lingnan/supermarket/dao/impl/prodCatalogImpl.class index dfab04b57e3449a6c063fff7275db95e29cf38bf..607bf87ccd0c64d19e8624d471b683f5bd1d70ef 100644 GIT binary patch literal 4759 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 diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/impl/productionImpl.class b/Supermarket/bin/com/lingnan/supermarket/dao/impl/productionImpl.class index 90154e98d1d825e496bff5427776d616a8f7b802..fafca5d60da139b8abb190b795d7089215a6a38b 100644 GIT binary patch literal 8461 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 PTI?%xh$&vnRqg))89>sY literal 8560 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 J&mCKE`+w+kwm<*? literal 3919 zcmb7{`*##)8OOh~yR$Rd47Wgn11;Sm(hUjSS~1dvl0pKqu%RRyf{FGr*_|WMO&+sYCRr%^rXa|V}JMm@SpGp@%z3rJGqdk960;lpWEkop56T8 z-+%i%fCIRl!WS{FVIqYX##8tvzNO=tc07yc+VMQBc1)tAp`1b+#&y_YJtY>?I!=pm zMu#IdFNnoO9V23_=%|WKH-#GNV&{^O?+N)04Sotc(bO?3R9x0EC&qd4@q&gIHGEsc zcN8QKJFep&Q4r5`k10qD)XKJkO$Eob&orx(wl```R=CqqsFkeBnB_TQ9d0K48KCWPV6u6Jg=NXD+xuBpw6S%Y- zQ1^ZKL`(gdFj-kc3bs0K!}k1DY6@$pxmWT3vy<t3y#r+Uqv zvrA2%Tk%G-%4Ev(&Q!&k=9CXp#ah!V*(V%PRb7qcu@H6fs7O`=U&3Amn^%{ChN}j? zj~^&_tYKG}cIkcTDX&&duMm??v&L*MJvpB)4KnM}WxK)da>c+kyh6+deuy8DwSnt+ zRYCW<#k;zsScFd5z-xHjz>o2UfuG$10NUtu8+U?+f31TMn+_-{l$Gv(pjuC;JWj1|RTE06y)wer;7q zX01xoZe;ptE z`b=?syjA`NUyrgkG<>UCSCCmtXV7m%V4|CJ^nWlCMIA6Q%AAhYT5;$LRS1+>aqG~% z{VZg$GA=spmKDqBTIJON3ex+Kh`L&;)EZ3Nr$SA_@+Cw|-b4uzTCgf}M65Q|`CUwe z{4yH#EKv(>w4&uoS0=xP?R+LeE}5vAyo~vVFni9`MKEM~rJ^cNZ;K+W; z&quh*a#T2~`#y#82`4dR_?eWOUFhcA2rghBdbna=!G7N2W96TSL+9SYXNZk|ig@7; z5<|)vC70+>b84@tE+QGjnf;5<6yy?SViCH+=J)((Xyg4vsL`VA~j2ITML9RB2 zt4(sXc@bO0S%+M04bQg8Rp%nQVo>g2`vShuVgZfC52ARQSz6e@{Nke`BoM24q52<6D56>ObpuFhp&;#MoK(L32|C@ z3ppI3mxuXAPz>%r$=MO^JOcGD^B}3AU&B)xj%qljVL-zm@Gnf|H5@;y;Y2%K5@~Ug z&+<6MPl5g~A^MM%Awn0(m7E%49opaVpd>GlCwdmKD-OY4Bms$pNpO<+(GkHGizpAo zA_6ZK5qGgzf!$O|RMOrpvPsa6b~Y1txFGLd!P~$~q_I9I8W&jGLGQ{YfVQ`+tD9*wnGZ!P2KaN*0LCNR%)8IVi zkCWX5rH|u7j=#q#CC2Q?HToWLo9941JS0YkJn0JuP34eGrX?@N+kPE&Hal4~=yj)wwvx~aF= z>1uBPQBSg#1x=lW6wdTc5>1P}MLf*b|2~q5zNFb^>ZT^a?8&9flmN4|wI$act<3h% zJClDTn~fObpKm+m*ra8Xa3IDeF3T}sGsc<#qaEkD&MIq1nJ=bUp);&VhgElhHF1$q zsW4?-6#3WS7-sPtrA)%(ZJ)PhITKQ6@iND&ctJ9$OKAa=z|Fo%YU2c5RYfuV6QZl&nLt3;!$1GKQzg QaD)su(1!EW6T>(D1C)rnQvd(} diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/inOrderService.class b/Supermarket/bin/com/lingnan/supermarket/dao/inOrderService.class index d11b0eff17e9de6d598e7ec5546797a038bdc3ad..1cd3cab82a19b098917d5f89cdf2843fddc152a6 100644 GIT binary patch delta 112 zcmdnbyq}r()W2Q(7#J8#7zEiFm?k?i>WZ;5urM+RWF?j*>gOcprR)1AWu+#UY!onL zv}0prU}RthDraC|0V-l;U<2~mfjlM#4j`YCfeR?X$iU6O1EzTy_<(YZ4E$gf0sypz B4kZ8p delta 110 zcmdnbyq{U%)W2Q(7#J8#7zEiF_}Li*HU=0nPUO`MWMmM?N-Rs%&q>Tn*Y{7#N=+_d zV`N}tU;-*;U|?ZkWMF1s0rFXaJSGM3zfC&o%n-ohv(#?HXP$RLoFSeB@tlbDyT@1K;F znq0C`po7tkjgf(off=ZYfq@06h?Rj2$Y%%gm>4*Kd`<=~IG-EH=V9OlDr98fW8ep> K0U8QcDF^`LUk~sA delta 118 zcmbQwGM`1@)W2Q(7#J8#7=+jv1lSn_HwJbvPUO{#WMmM?N-Rs%&q>Tn*Y{7#N=+_d zV`N}tU;-*;U|?ZkWMF1s0rFXaJSGM3zfC$5*AoWdw1#?HXP$RLoFSeB@tlbDyT@1K;F znq0C`z=F|^jgf(off=ZYfq@06h?Rj2$Y%%gm>4*Kd`<=~padfWHvTn*Y{7#N=+_d zV`N}tU;-*;U|?ZkWMF1s0rFXaJSGMl|Pzywsxz`(-7$iU3N0_3v-c}xs!Kt4MI2b|9dk! JmM~bS2mrOd5E%df delta 118 zcmX|&*$qHI6h+UBVeH#bh(rT=5Pd1duY>|Lq6_gd5nuP7yWHkB_4Vv0Fw$F`rQ7C1 qt;MiTZiy5MEhR)o5nzNvA??``gX9UR*Noh2@#Q7ezpuqL{@K3$tO{NL diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/productionService.class b/Supermarket/bin/com/lingnan/supermarket/dao/productionService.class index daa22fc4388e5f64c93dde9e37d6a738f4c9b8f2..244af8467ede370371e86c1a3d2a3c3f6db0ec84 100644 GIT binary patch delta 174 zcmZ3$wt!9G)W2Q(7#J8#7$n&lm>3y!C&o)oZe|h@V`pGtWDv+oEKAhSNz6;v_fN`7 zO)l9e5YAM_#>l|Pzzo#Hz`zMq#LB=1Tn*Y{7#N=+_d zV`N}tU;-*;VBln7WMF1s0rFXaJSGM5cc1_lNb23~dsrpbbg#$xOYEQ|~SS&3zd`ZH7XjS*gh-8wD5{ o_1G907#Wy>${84#fQncd*noU?5RZWa$me9>05cc1_lNb23~dsZgvKqjbV(86M2mt85sn!63Y_xa}x8?_5G8wQj<&A n7#SEDn1G5I7?@ZX8JHPZfP7XEkAV%yXJ_C5vKbjT!6IA$h{z2* diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeStatusDialog$MyItemListener.class b/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeStatusDialog$MyItemListener.class index 1a2b49caf3250f501692d0acbc4477704dfe0769..6568787891a8201e70912d470c3ec75ffa445089 100644 GIT binary patch delta 647 zcmY+C&rcIU6vscaTiABlmbIYrQ=wETEfqvSLD2}Ois*rad##%WsEwhGi6`Tshzcs1 zXyQ>5{bcKGw}?Hyp03l@fc zVa&8!1QhO4_EvVNkS*qiu3lU6a%GD~{nO~#oL=n+p$I!z1Z_;39YVMYGcmBRxi_q) z^;dI5&#D2b5qv^b)tjJ8>uZh9Pg=~6W3z4E+QkUHM=Oxe3( z(f1$2e0gQDm=AJH5vpyyt5sgrwzW-+euo4DdfDuiaw*algL>T@bsbJHqzGnnIj>ZT z59=@HL~J3*N#9_nvTqRNl)|Y!e)he(_T$aV+Qw7;NZr%{qyLWRnPSmfnJHvTC9kB2 z%-#0EE-#kKp6G%tSC-L$a$Ua{(nLe{A#90F^_Ci# zPJM0DLaXc)2RVe)_bon&K|tn9sVawe>7E;`a&(v2m2@;-<@j?V$@e&ck0f7{NJoeN zX$^I)H60zPYfXM$qi8;YiI0#JP^bv_DlYeEXH713pEwUlFY}Nw*15^DitgPlkH0p8$v AmH+?% delta 665 zcmY+C%WD&16vcnvOqxl?N%Lr{@lkDUYumJGlUg5*_Mt&Akf>19b*w{3sX>~ch>upK z+Jz!vP;e`VJ3-O3bWyr2{s;a65jQSexl+87h~nm6?m1`9ckX4j&Clk{r(YYJz&NM; zSoE6&7%&+mW-w&pVb~z(&*? zYA6{{nEAOmyIk%~B*vU?+Qd?ZZaG^3MJp;4a(9tyYBGn3NNtm8N@h*E85{bDimjo& zYiQb~dPM^_>5#g!sgk~1Ceb(ClqmMF_m9`MXgtE@hHB_rEO~OnHCndto{L9}8orkV zV;@kSb^Mp#5Q|65e_%@!?1)EpG(gK$dR@@XqvPf|gkS1yeB6;u?n;t-^s&qc_et@9 zG!M!0sF62@=b{_sZ{QsJ=#-#7&aj^Y5;epmU2-CwgQ5(e|D?~L$Dp@8EOeiMn!Fj6 NZpw$2{9wCKzX8VCdA9%n diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeStatusDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeStatusDialog.class index 84beb052b1ae3c61d97a4ed9f3afeb8f0d4f5fe6..8f700de04e8519c9577898746c03074d22b83dd4 100644 GIT binary patch literal 5763 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 literal 5799 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 diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeSumDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeSumDialog.class index edc1b1026550b7836a89b36042e68228b74303bc..d698a06aad7e18f4fe9e85eb8e4e84fc1b79a73e 100644 GIT binary patch literal 5829 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 literal 5821 zcmb_g33yc175;CwH+gv>WFSZsP!KQ~mH~@M6G(xWXfOdv0tl_NFUboToXm_fZ-`hc zT19Zhim15PMpEm-(qw{33))4kwVSQoY;A2xh~4aNt5y2n`(7p!NccY5e);n5z2}{K z?m6fFXLqtjiHtO)W&c|N)XqS&K$j1{JzNkY-n_N68 zxt@}br{&`rN!zDkzm9xI!T}8jHGD}&0opw1kYlF@2|0G@7>h%4+q06rTh4ks__7?o zqT#TP$v7ex&&kL08ouhm*K|yC_I%xgZ%FzJlJcTF_azHkce3$a ze9wdL%L8B4@dNzOgV%KY2tW4VCm#G%!_Rbl7_WQqa}B@Hu@G$<-q2Ad$6xALEbT1A zuQa@=qg>kXYaPGA(H!)mPd<)Go__gw%Y)xa0l$-r-+S-}5B@0EZ+q}3so$SH_=|?W zYWSOmzYF9#+7Es3JQ#^-ehhzuky!Q1EG!nWr|uV;EBasTn;_b91dCT!V``R zOm#b82L~3e&}y@O7@>;l3UxW0&F;eEXjE4zFn*{yb=FmOWxxtHa(5}*D@+<+d zIr%r&M7jFE-v_2k3$_smQ`WC}5Wf)D#VM zQ)Sd_u}V+YZX`;I0;R=kXhS(YDUeqk2wBVHE%jDZ`Bz#LZZLyu%xFM*(j{it&4HM} zoRL)zn8ENye|a+dgdNi%AN?2|z1=r1sC=y6*j14p+0{|r72k4x8-{?{kV z-5z;iYXVlQKzflRWH*FEwn;Y=eomzN%~soAK0uX#*=X4gddN~#d=g~HQZ@|vH0(kcfyt(a3ksh)IDf?PYW`EUE-_C*G=B zBBu=2Ml4Khz!5NaWEBPk4BbK@`XGg1Zwi_lso8q|6Z8`t2g_SH z*>1*MEF6zEkS{g(SJZD}cvEn0t!*}3QDa6_XlVF{O3UxC05JD6?K9bH_$L*pRZ=Pg zK}s5XLSW3637ZG>Juu+0N|LBotlGX(pj~?naM7qcz+>hOVqie0m6j{_?Xa+us4TkWD zYy<1$VOazI_yjgEO$<>gSyJRy-9Q8C4SY=QQnn^5p;JqwEahhdjo@Wu_3pf4yU)R6)ddI4y3B>#& zX;+~p&NReXLZj0)F~JZM#Uw^u|GuvN!@GL7J>L7wZGF2tq%J$}Jl57Npd6P}bwxzx zd|9Clake;zrw#6GYd_k3$DHJer$EOr0VUuc2}?=t!B}wuZu*EjhJ?H!CW|QoQ%=S0 zlvIJVs*onmHN;dgjp1R4>Eb*?6iHtf69K{}bmkA1Z9~iuGYv6I%oZ5k+r6vz>H8cY z5I!Z$Su-8?J2bke_tqo*iEaHywmZCr@QXPDhRe0%&fZ%dF~nSnYnRsBcA&rGae>(* zYCUWzI}ut=ffJaR46f8vQXPodmdf~}2gAcjAp&O(yG3PPH^%&`T36Xt)MQ5?FfAoh zk5u?&snKGVT^qQX7|$%Ks*;ofQe=gd;96w`Ic~P(-}8HrdSR+?EZTS}HFb*o$o z$xR&0u^v0@G+Qa7 ztE?Qw;w_6g9Vo+>xoV(PpIGKqW*u7mo!ak|iW7}ZmK=>I$dt#FI*6t!o=8X2SrIcD zv$!0=D=fz;AgtX&WU@-9vj`0I-u{3rc3O!5EVm8B@=?oXk(O}e^L zZ&M)DxO5A@ladVu8}i|hGjfA5B;nCBj%g{~wCwnjfttMfApy*7TC*8juC9O1uH(18z#4vNr(rEF<2QerEYfOR?~W|LYRyhTjhADC8d<*8$nvg66ZL9j z%~m5zvKm>8)yOtRjR9;@BU=SL4gI)8h}|fo$^VTKjt=n^=lmebUWXleybt)!_J)6^;&x{Rh?$~V=@OrN7j(#(panH5PhD`c-pmD6OW z>6jpz=^p8VeqKaAFT&f2F`SNF*MkBs$9d04V7#vbxg5NOd?avY7tZR$1QN&ae?kHi z*A8x;q&9ocRy^l$F?rqSye>@X#JOai#Q$^D24{Zm(9KiHKW&|NdKb>?M3J*7Rtq0D z7WopG!O`cAQzgw6Cg&tmlLTf~ORg~q%vvialLjVJqiYe? z;}W*9tJ!VW<8rp-8weB=+qk-mJ?u^22E$|uKz;_ZjezgYUq62yRlPYDA3?fa6anP6PigD0)Bj0bsO?*;F z+Cg49fg)DVNMLr&Oo}SnE6O;~tNufnQ+5z@2X66v-rU3lKE&HgV4ln4y&!@4dl+-x z3%v`{52571#0TZ7)Lr#pAtA7+B%=pqoP4Atvj>YgSyGZ!C^aW0mX>7opq#XeO0@L( z9uh}+EB0a$CwU1}mSh)ZKZ}b6_TW4@yF}nQEH2Rt^#rOM2~;4vP^WIo+K<21j*jm* z5Ut*idKYBSPJ(1rJ4XAwwGO+p&XX?m?PYf2>%qix7pC$$;*68c$Yo*}k86mRYZ-l8 z8Hd*~4sXD6+{nzljk)($BIb6Y;tpoTo#gr~wi7+K;BM@~ZXCotcpmo>JNNMy&IkEh z=0kWB52KIhdK-_50z4)r;|WoOC)qVWB^F?xSc3hc0tdw<=nyNB5Op}D0Mf)Cau4#S z(e2p5*?2JvH}jlyo_~~D+(vM0Vn)85nq*R!SEsu6682`;)nA!0dEQn@^U{Wmuy57>#5*4#B@P_V&sX4HN3@kgy4uWQ_n3h_o zc@oVstqjWY8asF?>HeYr!EZ|6dY-=bXz!U_Z#_Khdq3xWfA8$z< zF2NUCpGkd@VWEgIimfq{<_^6vZpc`a9V@JN+u>z#tGia;Zgtrzs!%D8tY%n>mv~Uo zN<>>PGfYCU2-Gkv7Y!?B!n7l%(ak4#`)Q04V55Y>P_0M|$8|!v-tHu@7i2JbgMneJI9g|DL=&%9W~am@2E!O} z$(H}`Xi1lCTL}dwt>D(k$=m0St7ygsQ4?p#M}dNbgutyUeVM2TbTEt)fljKqeW-ub z*(ba)8^)`lX^hgNmvDo4!eo&dI3Osf&yosHBM9~PIx1q~OWk+_Qt+o=jZW25A zIA2szu@~>jc$eQ%iv0}xu%8zNrV@JZ6CsLtM@~Ul#eoch2N@p6L=}f|M8<~_@?3Pf zY%?B?7)`d-$-wauUmYk@#-Ja^WgO#{T$s!7G4>My5=M_L;}d=|r@SgvwNpx zFy2nQZD%-*&-tmq+IL>XR~VEraE~jd6<$Sqv1vPoPL*Gay~!QI z6;Fu9&oX?A@A%C?l_7dM&u{@3DWyeEuAp{Yny*)>nad2{V~DymdQ5WrLN2inz+o5` z6}d}|_~LkcWtY9AtGU_e6i8oXxF(pa5|bll(j*@96TWKR?hBWVt+(~2wmQ9IZHC^z zJ~HXb##Ta%|Klr7VG5n(rGGzi;Sn6Acke+UE7hzdTDgAWohu*9%3S2Rb}%c6O0G@J zaV2rZmGp*PNgH(K6DV?Jie3?2KG`)&+(t^NB~RA#B&Jeii2PoXi?oXTvSB=}T}OGt zFe=iRt_7t{LF{%gLz5iL(R>b`)4UE|pqwhoS?pkmR++{!Z5XdyqBFdBm3}p-^g9nS zuNpHoRZDtl<_6SZ1zB_#R$>)(CN$Bb2dhbE_dO-#@rajC9_mq=3?JFRS-N-)UA#7p zb)-fc^2vBTjZNARIfk&w!RF|LoEWL8=7#*1VYH^vMiv?Eu3=@2t*()z(l*UO7fCBC zlUW%PG56RZ2;F)}PrAB;?X?vYS?A!bs8C`;5pZ}24&K6+yBLhmOpwLk7_Dv>dTBlh zyYWtT&KZQ0p9*^`9PFv177x&TAEeP&DY_US;D@lx!J+xSL6l7NUByueKjFlR%lI_^ z3kPQ?+&9g^H&GEgC*j21o8Bw9lp4e=ae_5~;)f0u*$&cCkur!pk&zsLA~t;G!8R8X zb%D*)mrgWnq|ZbX!idp+4ccB4ZK;K}YN7$HC#mxD~X2gDBw>W8Eh} zFRtSU8rqMY_z^bXWk@pi%J_xePCrm|ms+3?*gYqv2+sUQ I1s?qVA1peZ4gdfE literal 3580 zcmb7G{d*ME6@G8BVK&1+J`jRJ3?SlW15T^9wI+=~Ff}#-%Em;fwVmuvl7ZQob$2!a ztQBc%wUt7(3fAw|2BpQXCL0u$e)oC$C-i3t{MO(5JpFj@o!MkV2#-GdJbTYQ_uO;O zdC$4;oqzoI!%qO*fxpMGU&rk@puyEqjchG$gQxS)mw!3=_ptoSYbfZ@k(HA`S{0=< zreR!1UAXU{hC^{2*3pPZq{a8-%A->HzJ|x*IHF^9xbk=$N2UG;ar{t@Kawj?NQXbx z@gyGA@f3cd;ioz_hOVF1aST6OisLvT|9-CFnOZ!HU&Qg8j^}Yw8lKXrc|l6Ql%8JH z@REj?HM}CQG?(`?J(=B>XS)K|_3pREtb=A@-0?=t`;@j_AYLeDBMUt@>U(xHiTk;- z82Rb7hOXjAX(K<8MLayWzguAS{6qWggF&}ryBTh%;la{GD_CRp_P`TZIp27DF$jE* zmbFDMRko>3TVC1??U(t*px+vD?LI#vBiquO_OqtT^gPQm3&otB&szBdc3=k5%G_0H zPQUt4ad_Cy_hfU|+?=s|)1i&Ieb$_tW5t4<7uc}qnVG;h@23rI#h5^&O3o|>j%yCs z>A;r@wJC?O2F1KB(6PXv;3 zi7p~1P}l2t_ReB<$j&P~Wwd_UatExuBaw@gv0&6G2y9+FEXQ*F5wpwn3-%5r%fND0 z-u8k84H(8HuxkEMhjQiPQlBl6&w-LmIWA!uaO`n`>V#C(rhPB42mq@Y-VxIp56rHz zmMPR(3g_K+e%Q}v?TkQ67@M-R$C#eEO_|&yWd*Is2_zOrip^0`K(+|Wur@4`Jbj^0 z0$K2j`84gKR&p)g<6T4h*-VUaSt_v72l}j>Dwc*~=Z6@|G~k^z0r z96xdCjSmg%#OnfWpX2_>E&B}Yz&!?jgm zeX9$k73?789A@9vBzk(}Oi~Jr- z?2|qWYWCO#=dk28)?2z%y(zG!!cC~_vpj2r46Y83R<8`R+RBg*k`;R^LYTYIb4q~* zZVBmP4!sQ(4z7l;iedSP9Y|hcdh(SfcP3gZkBE4TY@jaId>#|H;i?r>ltm=yJ0uIz zVA*X&HR&|0aK#HI*>tw9v#}_Ha=p1t8?_2M`S2^k<)x2#YEscJsY7g{EZ4~q<<9`q zkxlP-0b9bhvh))&%6v7w=cJL#&xhrX$LBWa@xphS7xOdoZ>tQ;KIriDSVHw$-45H` z=DNFzLD`$mRvB;#4*Le{`K5I`1V1I~P$dbApOsbkN;KXXjbt6ACl9HyBO1SkPBp(f z8p%9rPQp{3DI2qz zK5D{T9-zc$fh){J+=v+Gz!`>D$MEW>&_Jvj3Xl#;e%IhSg+*~2ID7l37y=`1+C}G2( z6q=+UF{@ITb)$juy;#bMt!CC6Ss{}(>R@I)v=|^#4-uhZV&oB@!_+)MT%KY6CyBso z_!gha2Nj;HLKGrAPhthv9wbHr-=>cct0rPz!xN9Rm2guZ^V~?lZl1!X%`%kBtsLyLN8(J~Qs(ii8trjs`V_%5TeP>&&^kmha45CNM{;4o1bB^C}Iz<#bA;Lk-K zSt8-#F+8j?PqG86n^s8GN%xR@9RalwENME8m}rUYqX8^u8#9DHn~|G{FFpGJP zIqzK37ga1E%OIQ0rf{5WnbzcLe<%DPdY_k93~II05hsFWZR_G)7 zj&!})$HY6PcS_Hg`D07^Q@Ej}w}igKDDDGhJ*aEH%z%bPED@(n-DTuRYJw!^p_6zC S1>%rUM2WmYQ;g19f&2~T`BYl~ delta 528 zcmZWmxlY4C5Pg$tgK@wF!hM7*C*TMn1OicDQ3NGWAVG;tSfNBYq}bvR1qB61XQig$ z4`>3SK&kmC#5gGsQ0%9`Abe=LZJ^8DwEi1XAWy`9p6Vz;#(I}giB`v~Q&e2vI zep+dyJ=Z%b6m$zDR3woiL`vqld8u0$#p;>9Yt$+ywe8xainL2=E~%GIrVi{nD+Cr) zEMmzCt@r<;_fJZ)U^~arhCw3@lV&4?-ZN<*$TH{UsoNkS?r8BFf?^g5(z50zF6_h1AbSRx f9l|j8s&OkL80BB}V2oLYarCiNVVU4h))4##xh`B3 diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/InDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/InDialog.class index fb0be84bfd35d95598f26ce3d804f16dfb7f805d..aa844eecc5d4691030d0e12377f0f1dafefca0f2 100644 GIT binary patch literal 6122 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 Re=5ULb=bo27MTvue*tJ4zuEu* literal 6160 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 B$;JQx diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/OutDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/OutDialog.class index 48e52f631c16a8d0054b093cf1d22adc28cecaf1..f9bbab359575fb75685d5b0b51b8046193b0cc06 100644 GIT binary patch literal 4771 zcmb7Id3+S*8GgPbWH!q{U?C`nwNj+X23!P08bIXKg#-fO5CmnCosfmyoppDX0M#n3 z98w_2Ris#Gi$HA=p=3h|1*I(>MOxcR4_kY&0efigR*TZ-o0%lLA;Dk&$bQ%RzTbO) z&*aq)Pn-fUTx2WA5-6-P!oE;2vN)neeDOq7kA=0^Qr+|gf?CK}?3B&}d%F3-wR98#i4Cs(CU>d&h7L}wQ9gGCcy9911%+zjjObhFyislI9OrR<*+$5kj zH8iHy?@euAliIq7)DyEV;u?fP4k((SEfa@#d^$9W2}n1rQt3a zpgBRkRv^DL7}2LC!j*c=3c7$t8W))P^i;~orZqUV%_b1EAYWmuHW`H@M%{K?m>-dwK7 zs*PA!r_XQhK-EdIm0NnQ###ky1p2hw<}ErE>+l2>pdA%PB34BcdN!M2WzF=;C3=-f z17_p%DmGvv`vHk%nzSW#`cNL~@T7vx0^O{8?c`g*HzllM3$`+6Sh~&K+7~o@#*F4M4$aO2DPs)DaHx1CHSRqT`1r9`FPp@<9n1>nX(JgeYqnPyws ztN1#;K?U`P5?Y9jBcm)G2N%tE;W>u+^5KTdr?#e6Ka+ZHL(}$SE<8`hrn=3S_MLF! zD2^%krsJQM2Yq@}c3+u)D(aDBV#jNY+A=*JXScIodx6nu+0t5!X-|yF`IP5p`EGS2L%LMX+PWMwgB7i&~$9vX}O*>-#B&1( zK}_u8-3Km6-N zjFTmC6Th6YB;v3}w=)t~SZm@SYb5rtMgkmbBm%KUVhL*`day>KV{2s5a+LSOlv@SJu0}EJ+E7S1LoFazV{eUkD(%o1#_MG zd~4pqyvSy*w3q|w%++LA#J_;UEa%mk%r&H6GS3rgK%^dqy?Dr4#7S&;lSpukJ7bO9 zbA-ux+?pq`qO_Q+DM>ssS56i+Pio|()syqBkc}afyo*5_OOM=5KaRr~dh1?#YBqgU zNl+W%Y9*#(H8J!Slo1q6!vRdkVU+Wgo53fe0_QLbZ;<0H%)uqhP4oU`$NT3PsmHL2 zUKjW*K4*JB>jJ&+2E@YRBpxptBn{dxCUc-y*H1f&O^w(#&$FWeI|nE6R1!}ovDZ2E zJd?zMUGQ*8FRr(iPoay~bI5Zz`#6pqaSo27VMI-45$8GkVTt1Ht&rk%ZuQPh;*AlmHX?c3xw9B6ha`SJ zBCjB)Aa7BDYajYi8g2LmZ76Uh@k<)vXhDeuIX1(u=N`Z?IeiI($obK1N&J2;)8LZV z^9Nhn0rd5H{?t6rm#&QOhazcY$g>$(;8}jV0{62AEMQ$%^P6@ti>3yC1Tm8z0Tl@0 zL4*-t(8DnJYx1ig!N4seBwm4y1o%7gFmd1`L~oB0daXhO!}$UO`XbigWvs>Pq zxY|yR<^mQA@ebZ)>U1L2U+`BJZUJTdjdx{J?{|3LKbcUqxPX7*-?Z{EyoUeaJ>*j3 zy?7u0W!pH)esqO&E^0aiA8?k34|&&Abp8N-1y>au%)5d<;woK|r$8uJZSQh+TEQ6w h=ZS2uV5oQ>`2$_=A^$3Ci2s6eD8ZGW*=(;O>wml1a0dVY literal 4799 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 V{vj1{5=SR9m`r@^{Rx+@ zTwA3`X_dvwh2P+>_~@IAMNn9T#mwB>)wl2I)7@vj|N8tDz$mgBLWBv+E1Hh&7F^+) z<;too6-DW(^v%329Is$5mArh#@@>zZt{P(VuhPCOX6&*rU0Kr5M2I{Q&xPp-w_q;j zo=D5r&`jvATEz?Bl+UH>oAt*C&HiJ%96LuC$~1^zoDW~IUE7}^jK&*2omeI`rM$ds z1!1oN4J|stXgAP`2q7F-4(%D+l?#<(PL}S9oFfSx8P5{VvMAYV9~hfd5`@V{LHt7^ zXB4rS)T}RjnR?7T$~++&&uqisjN)=Uv8>|=x-=Xm9NEdsKsSyNS_{(8dX7-lynze2xEXwy zunW!;5C3OfM-MI=7{?W!R{5+V9G;WTprh-XFY!PDnJ{n-lbb*|VY!0|sbY1op3aNaKzsDsOwZa%ojU)O>9cB_2}aswkxn_HT$WsbeOtww=b8nN zpFN;RL@6Qv7(%>nh0gD`>Te>%7C=u9e1wtwgnjR;KKuFI%s!yg=-{=X)_m#!4)T`) z;ZP9a2j9@dw!**~4sRejpZox0a1AFm(6f%1+I>Ot{wEBs<4kzs9Y&RD9YeLxSaf&| zm)@XTZEL2hfx{ZEuVdzQn4*E}*SEjFDR^Nhcs(i|>PHL3aflL#QIbnDfNL~}d%RvD zvkE;~gBL(&pty-NgKxnj%;6TN--k(LFwb!pIBpxlKatQ7r8A0~MK*=7gxma8tP!{K G9nc?@@fIWi delta 851 zcmYjPOHUJF6g{^yWy&~(Dae~DSRSQCJDs8;Dheo2qzabUxNtGl2`QFBXd~!`4gP@1 zER0(>u1&Nwk`UrT6F2?=W8%uCI~OKC?pKJgnEN>Ad|%F;?|!fQSpVSDpLcrzhOkhJ z0HP`yFsR}z&MAngkYOl@t1yvJFr>mKNE7EpxFEts6*U+Z)g{4>i0ZO}D+;bE7vi*02T?LOa*Z2P$;n z6nCtz-p0>{)95<9>l>skUK?OJT86X_ITd*W8Z5)RkD3aUjA(b^yT60l3e=1=8Wczc zC-z=q_@LAdk)TVOD}LdxlpK^t2y73ZsPv&_@vr zQ4}*Yh%DDRid83xu*ER1P&XfugxUWyEhB^;p2den^rDX^?q}W)={Ld(!Zh*=UIqsk Q^dN#DXO-mv-uq6_Kdrf(mH+?% diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/ProductionDialog$MyItemListener1.class b/Supermarket/bin/com/lingnan/supermarket/dialog/ProductionDialog$MyItemListener1.class index dec8820617ec2b565ec5c5e75e9a7f055488be58..07ab296873045d8f21a4c9e18189d5ef2317e5cf 100644 GIT binary patch delta 827 zcmZ8fO-~b16g{^y?Udm`N2Ne32$Z620jEGIg^Em0)aIPb@QU71qsbYnyhqq`~8uN_+Xni(m~1bpjf^Iu!T>YG4qQNOZaU zGfq?GmAI_q4+evAxbcLkOqNn^bovOHftA) z;UwW+q`cDSG^qo@Wyw7+U?P6Z7$VG88GCBOq>d2!1qP5HcxkwU)P?Hdog+L8J=>duuvx6^k}2^JSh&ujX^blFfJ@Tgm(2&kZsR zxhUSVi}M=jeAZUC?qUScW8EJiVmqjRU*(+O)59Fl08Vl&WXyk^LIdAy0vflEO8nv$ zZU%34SJ1SN)=Wv)&hFxzl2qR!+AG0b^!nBQ3i@8dFY`leu(yKY zU0isnl3zWd?Y;T)LkdzL1%>1QGz2fD_@zA?=BG1)FpXl6#xTe6O&YJNO&kh3Qp?gX zg^MiLi$zT15>IU4GG;K#g*%YM9A_%h+@c=J0m2$uHH0W6y}81u3s*7Ew{(qoff>+W DGR=_J delta 816 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 ED{2~Nz5oCK diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/SupplierInfDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/SupplierInfDialog.class index d2ff2fec881d72aea4035d3082bc1e53d02001b3..be81895a178780dff7f73f963e02b5d60767b752 100644 GIT binary patch literal 4059 zcmaJ@dwf*Y5&lkIce7l1EDwojL0cr*1cIWd2~wVs&;(Kv5`&a-v$=!|yL*@2n*{I$ zqLor8Xf4=QgbG5@iqMjcLaWw3Z0*CopSJy{0s4RcF8$`*yI~hdf63mNbI#11IWu#< zIUoM_{5t^d!9NWYDa?+!iQ2f6>`7Y5+DvcCPA9DNX4|XncC5JDQ`_2`O2r*J-I(04 zM9&x~Q5e6;>a(`iX8NgEyF9m0rf{1q)LQ*st=(rQz1oE_&vBDYPR6s7c3Po4X(j9y zD{03SCNvdT(X;gmrq$h@wlkSP%8a>5&x(1$Fl;9*Cmsw!ZYpO?8*Z|?ZeUo?<{1v8 za)yJUZ#Wo~iJNT=3X=TGAKN-G;1tJ-C4u8I3_KeNuY zCO2lu6-0g3&wz<7t7zCYP943Mo=?M=vQ%$#cP&xi>h30S0tQdXLw zxDFcpBpdiF_q-l6!e~LYWT(x9fsg^#PobE;)ge609fl6EV0uiX=3_Ct=mKdJllp_=ZE1+!Xr87f^cgSqg#2AbgE@ff@#tWA=5f(`XuI$na1DD@CEVF$k z#`=<5O-%G9x0@Ixl8;gH-%p*sbo#7FK4D^1)B>$F2~*KokFZ z_wdjgFNU!TYsAhMP27yhA$&1Id=bYE9RNaR?g>yckqO5awVthub2VtGPl6 z*5nxW9^T&;JH5e8Cv4_%>Ikkbm5!(Vd>Ka#98tJM!_u|gP|KP4CSIWfJV&eBn-;8} zkUN5|#Fbr}?3l*`tiy2=ui^x;hQd;M*NO&^C&B)fiBDjvf!7pfjMzB}u{(@Yf)l6k zhKbX1Aq3J^5VK|OjES={7v|hTzc0)5cTJqjO-mXWBbm;c7?f!NucgwbN8xQ;FmRq2 zI-)l>>|-Xrhwn4ZtdzVLh(b-}$hcB?too|P5Z)zN`u*eL?gK-6j)d?7*5<|i2QD2y zAI1;yV*@`T9v58hl_{NXR+WjL-~*OxW~1BR%ohpq(SPbF%*(5RtJl`A!2I;(%>-Er zdc@C6d?)~GbUT@pn_;i}#jvkK$Io6q_o{+oQQUg9s`IafUu!%|CMcdr-cCX35R&8> zBRH+=FdyK!F+(fQEONo)g)K}!U1*gHy>Zr=YE-zXmFeBwY^5~78~Cfj*sJ#Zy$pO@ zFzcU{W#iX&gCp%?QeGzgIL;C~xSe%d%wH*Cvq%t}&(k8oK23>ini97(B`Rr3WY&~u zs41~dQzDtBgkVjHk(v?#H6^}jN~F@1*rX{tyr%5$n(`WvieJ;Thj(!F3dhBy3!>GL zPYz;w^a3h72N4~>%xKL3YNO-Sx^b!|i@TyKi+iIbSv(Le&f-A|E}-C|EEY!x@z7bl z!*YJ3L~h_to_Z=zKZE#L#oekoGn3z0n9aX>+|9l}2cMzjG=G0Ip_wCkf)!XvAB7Xo zi}=UJ%^CVzRD%+Zp*-&2!u?kbpq1?E&Pc}~ItQ?pgLR!_#|&cq0AkT|Ts?=iS=b!` zAJhD>vg0dn*2;-|WtR#Le~Ca@c(+h_i?5u~%Dwr@{S@B9UvHo+e1DN32~tbT;$_?T62nc4pj^L_;@m5CNr!FSQ^Sf#4as_sRb zTF3`b13J`7K6oBRr?Rj{Z6YjZuvXX5B)=y78lvPZd<|b`#VC9OFZq?DUSs8y)9XXk zSsZSzk&v9g4iZ+xu@$6D?y7O>`mwq)GABPk*9Dwny}e#%R2Va}_;!U+ z!MpG#Nof|}At}pZfTA-ijJNSt5$1*_hDwfNd^GY-N1QeUYRXuLmH1D zL#bY_^po2PkF+1#@F>Io1i!oR7@j757W3f=upCdy@W~K|Ps#9<44;N!#Nqw%kZsH_%<#C(H}(Cz(5E~@VfYUBZ!LzE*bcaf$u7mB&{xcot3l`3gcUL zTD{ipXu2<++#X%6r40(E6^o_pblTH0JDp_4>dbi4klkg)6W%1~bmyFD$1T>@+c?%z zpJPue=h&ONj=f2-gxS%gFeyLA4tsZ|DQ+iXbXVfVDQYENkir`}Ld~VEUVB9*sZgHp zW<^gX<0QpLrWz2W3iDe!ovvtt2})YYC^hUv0T;`rIkl7JW zD=ZjslUUqJINOH~%fsETB@%bHm9mqWTguT5TOlaNa#LAYDWSP{&A3uIo2b>7iLR6~ z6)Am|vR>m(a-E&p=A^ppn8I{7DO%I+<$lpdt+Gn^260==n(s+44%N)#OZ~}Vr9+|# zi~Z4_NwEs(-0;% z)vYtD8~3t-Hw}D`y{`~z*Tzk8xrzzC@^jN!E8%jBs{@w?51cfy8Q*6Kzh4E%ySfwp zYiZ_O?6#R$j}0as#zqrw;Rhyuh##5wF|L^S39cxN)0vS&HYJ?C7Hf~wlQHpAyluh; zOE-KgwwPFn`)^*!HT>Y=gV)ZSldaz|(TvqRUY>`c&KH%RnOK9hCVq}zm{=uFiw9pk zH+X!Xi4S45iFLBrq~+I+^k0ANxQP~#KPd7KYWaVjJbUfzc@wQ7Zxi_gBG<6Ys9v^)51rzP)ki8Bay_(%`;vsaHco)Ak@hkk=z;6s(Ht}2h&cyHW2NRp{VTHLP zWY~ELyd16V)>Th* zH}QA;!^A)3COq50Q|GT=c=`RxVT2yNIVoTC_Sbiw|R!uu!3lCN5wN=XaLR!R>B9hcafnoe^Z@Ddo*(S5;Q|w;0Au z-LUycO01>13pvEvoTcy91P-Yp&3UuJFkUimYc!mO$Thkj7lblSG-h|wRFc0+J}eY! zM{JneKDY{Fm>VAwD%4bt{0`+eT|*VIzAU}N>1*W&5AQEm+e>`89li(OYv2L4PvV_d z->?yjr@NiBjhXxcYXsk9enl1t{P8=rKoCn)B9x{?Bu$AxniBprC6;MQ?9!B2r75vb zQ^K64gf&eGW114BG$lT1N+j2mV6G{FiL{V$ZN^79KEl~coEMTVk5q@%016_PP`Ggb zfqoQ4YWh(eDN~P>shTW|h{_@u31m?cDa;~7#Zgo=vlty2z?k!ThmUfMAjEMF3{2{NdB$##>N>0OwE{ z?qACN$M&O)YP#G(TiK*)_gH8&B~Y zPo=?R{!Q_Wg`b*lJk2$pu8n8-jb~DM8vkZ^#=_6cH=gAhe?S}G={KHDd)O6t{gyBKO*j=T2E@I9EoHxkF>_4b42Dj6Q0+}d}LAEQq5Ue7SRpDOwKXW za?Gq8Ge?-=J3fF}yr0GVFY0bg!abOcdr^ma+{b@E9^m*8mhv{2A;~-3%Px3|J@7oM z`~-X86~52|)Ow50{kyE}_xN^S=R5shzU?=#R`D5E6?jn1M4PHYySj^SZzI;LCTvh^ z@vve|C<~j^PCm0~R`M1`GQq70w}z-$i|yFKicyGTr&~Gd7%QiQy2q-snBS_?bQ=43 zY*s|w8d6?vU44KIFRHG-hzyfnS6@tK!45Ldwx-v0t zXa*HDlCUzy#K)!>jE0RHxBdm>vGWgT{HC~ZanE zp!hN6QbI#WpnKMuv+`BTspN0nnU!TvLz^#^RBzj5+p)c?0%|%lEf5;3%}4_(I!tKL z8&ieGs*^Ub9|tuY5Qw+lvF>|$IVT-2U-abNiNG^)2r+*}=~p!*{0|~NWgw2jCXOH` z5UEJ7B&+NzXMz$9z5i({d3D>V=twbj=l$C5!^c}s-t4Tu-TeH;KoZAH^kcyPq4aea zIDxc=L4l0lqhv-*WRMlmt#Vnq?m&Sfq>Gtp9YX@`TZ_$IzxlJVq+^(L``zmH!Xr{Y zB5Dr=j8g4hy)3WWRmr}$U0ENut!k|@91JO779B^{$Eud=N>`w3az2oL!*)H%I8xx! zc*0z_!oziuwbRQJ1u>jmgYmI-ZPK>2f(z)RZ-V`qfi6UdTn6^h2G!sAT8KDtvWe&h z;*^lTt`GZ#JDMBg$D`NJb(m@6R!+;5;r64OR+%yHV(W0oo6UCIA2c delta 671 zcmY*XJ8aWX6g|&&V%ITgaA|3P(u5Xh+ya#Fi`r_-LYR;c z3sx9lLQDu%;*V3M0(C87VPr4;3`h*DAg*H;2H$hvx%ZxX-jg?!pGxubpY|sJCvi@N zhG7+laYV*Z6(UAtv2exuKSY7HbOZ3D^S|aA460qJaMvBStOA2HQqGl;L4qEYVHdryKp$P4PASSv zLPi)fT3~NF<=qtH9da2u<>4STpa*?~413W}F&theF^RA|8bDZsI5`$HAgv*GHLu45 z$WM?ER-oK?4kNF3MMNwj(s^Bt2q_{IF~rb;h|qxnmEvnCcuTw9A&vLQ;sfyk3TUB- z6_n7%C9HN_8j+Lh|7?;e8reri6`aR@93ZPHOke;9X~7^#Cn5btRz^lfHkFd7eu!8B QL+B+`X);0o+8!u>0j;`=?f?J) diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/UserDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/UserDialog.class index 1c4ec24e5e83c7aab3110cfab3bbf9c70b65d6b6..09441cae9312d6230fff0c473471cdab480208dd 100644 GIT binary patch literal 4718 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 GFh2m1o(x+6 diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/UserInfDialog$MyItemListener.class b/Supermarket/bin/com/lingnan/supermarket/dialog/UserInfDialog$MyItemListener.class index 47acaf6654445d062067ce60852d15ac1444f472..d0aca31aa65b186bbf320f2cb6165141b59a07a8 100644 GIT binary patch delta 797 zcmYL{%TH5L5XOI}w{XktwN$F|7AUAts4bxQKzx9rCBQ-gJ54Iy5DZZ5EsBYeg^39Z zlQ!3dEQ~QeP@^U$T8W8<8^*{Ld818ifSjPLXM#sxxqVCB`9{7==cmYN=-@#DzxU7vE28# z>dEDzLeS?osGv%xQc)r3iXxM0YMf53ab9PyV)wP=&E#CnzBM^B5gX`BO4U! zfJrkgiel@=Y;ww$a?OMPka;1^+$V=j4iZ!NlH=o+Z8yag7jxOT^IHo` zYCD}e9g2EMt?bIAVxzW|Hl=BY6(yo_)SkU=r3*bsxWq?Hj&f|9tzFTP%f=cKEn_~q z1+(@rzv1LpbB}!Vh`av&>3a6QxXyw~Ia?|`FHcI$%vkBZsibXNqCYTn+wH;Nq@A%O zE*+9`vWif_pgRj0qDTA^46**gNIen(BhvZ_GxC|hheFOyvBi=DPbd>>7S0ACc8MpQ zVh>W^rT8fXUfD0V<|$vHcBm~+-3sC1XjxO9{fm@GJ_@z0Wg>av%XBT#87(_rxD2=# zMTJ;hwCu!o%v*^0-D^#bt}G2#Rz$?ZGko(rC&&vbc}bKdx_HGIUNgWOMtRF6-W9Y* z{>uBOU4(LyQ}PBMW1JR*M_7jGrB4c+73u)qO?T|II^j@Aemv(S>Y<bU

kR1;S$Of)V` zsN+HwMqRlhG0{pi8rJ>{O(FaOR~YZKM&jbVcR$X%=ic*Pt!1}m?)&f0-vA8Zax+|r zsc<8%B7vkpN`;KHK)(WAg%blR2604X>`~hqRxqOAn80y?69S_IXZd!~jOv8+WW|%L ze3`I9r1!X{9%jqNoynqEHcG}aLCco-%q-tD*17W!w)%f-?H)6~9NwWrUv zUOn1bTh(v|X9Y4E&S65}yoL+7s3D6>gyyXm)g7x^tGr};d;RV9>SMMmt>f+g)xDBm zGz#U)d{{_*vFn6@^@al0PwMp&+zUo|)>z`aF>eoR-E~AHLXu_RtePtn4AYDb=&a35 zpDm81NKpoaE1sZrRT5EV<`UP;`}b^xm>|1%P1gqrgY|1GquE#%5q>E*xH*u=V++F% z=wQDcKHmN8jkE9IQ;jD+g5saxcwfhK@a|*`NI@st9Ssx$=wgrY^=kYM*oW@FwSF*0 z=3G8e#fr2Ec`8{&(el(%&+ zC^v$d4UlZxZc^f=fH=1TYK1~=@Q@Ed@*_3X6?3p!Gw4At6GWN71$o#0+y?~?`FslJ4|CLkK7{yG`KF8ico6gltBH_6 diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/UserInfDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/UserInfDialog.class index f8fd5765da2bcc5e21ed07c025ed32d023ff8a33..d693610a05f8cdc94337eaba75c735ab1ebf88cd 100644 GIT binary patch literal 5184 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 M-?(Zle@y2e0`+-~6951J literal 5567 zcmb7I3wTu35&loI$=z%&1Qx9CEJK)1b zIOrqRD#N2P9FpNN1BZR+hlgcyL|A_+*y9F%=EERI;Li>G!i!(}FciNMjwcK}De|83 zVK|-^$}__ItYE+P;yHoO3&RV7{YHity?9CBZ-x9j!Csc(_g=gr@KquIL9o|kc-@OP z1pd*$n?6jzpJeiufj|2&9Y=-ICX{vq9bO#s;cUmQ<6gWi^ml~v7dgheKKvEW`tTn9 zCbqtB;P0Y|hrI~@kl~*)d?3TWWcarXAIk8N4F8egzxntdJ{D=8c=4%M!BEPFB`V9O zvhj(bJU%SN!(NqRs9ZxCh9XPvxoavCc3ovCp0Fc!Ou?*(5Y7r)@wgpV$ctEY_5v$n zhZXu)uCf}f)xmgED6%3rM^j5FA{<>2ip=Zc^VP46MpB!+(fSnHtDZueqOn?6UVgl) zq27+UGp(u8THcK&P0i5c@;RE^NvC*s?uvJ3xpI(2vbx z8u}Q5`BH|<#OqkCIpS8MU6zO_6lMx7Ye*!b5lYOfu_85gSo7pJ#O+v>9cv8L*b2p! zHPO0Yn4XMSkziaLQD?=jv=hNvD;m6{iKfmI@fWQ!xk^5Yi31jsiL4V6tU+u)GfDTi>&2gQv8+C z8Y{fmiiKqE5vMyCNE^vuhQGI|tUBb|VD`&(|y$3SO#@CD|&6 zkQ!@suEVsm2<6n?L}QY@(kr;@n)6c?XYTU?09@sNy$WoiA7(`w-v=q)2!7cGSKLh ztO+HgEc}A9KIckx-49=tK5BVLCyCs%&OnbBXPdYRUpMg$e3NczZ)t72VTXyeDqo@G z^Db!#YC-0&ONq&SKG!G6IWuDsZJHPuaN_`UhLS?d~DA)6Jc2#CW|py zT%i}+_N?vLagB*OSsX5laamlc7aa$hh=^H*8D^yloftI2#JBKmh0-3w*v;J^mDwIe z&S|C^sZKX>g(%m~?)0Nm_Ic8yhqtvoc)N)PG;-Fq@wWElIulK3G}S0|hN(uYF@`EK zRGz7dRlrnZ)nJ7YJsRd_uc^kVGfg#K1x;1LK&S~aOq5}g43p^?b(UaL)Ko)FGu3o8 z!&Idb@L@*}Kh(bEK>NB)Z8vOx@6nr%?P)oF{f742_I7M-J-&6VA~ z@9HRBL_VRko9vjQP;@Vl$Dp&YzY4q`fnQ@^Y24xL!T6@#`X+`5a(r=XR$B@xhSVsbkjJ zZw<0YL1khQt6&HUGZ-tVT%yi(W{0e2L@>21?v(s;gP%`S+MOF2&Qg&Pv@6rcL~mj2tCsauoD>99 z5`6-mB>D!jlkihwKT7PML}6fTGX?}&FmRu?XFbOm=*{tb7#IUTf*6RYn1nJ+LpjdF z9RAJ2d@RHwEJigyRcjfK5F=4XAK$>8BOL2-BW~i1=fDP@QfW;5lEpv1Zk*F*@o=0& zb$ke^Z5w7j900i=^|HX z9j?Jm~R3q+H*W!M4BOX+nu}5vkK6O8u)n2ry12~`_N2_`ohtx}WOuddHsvVE(lpf%u zsFTv%5OH@Lc8>}RnNnNJf7$Xv!Q(MIPu#q+(*F7oIQ__*)@BHhX_+-_KX}N zjPvXnxvjW}d0#QZ7;KQnG@p~i#e)rURSq@=^U}^G$Vp-zL2eTBQ)~;8_>#u6l32){ z+ z^@Up`LfP~$c%=t%e1aGBN%X?AD8zFZh8I{CUPK9A;eVaIiVN`?F2)-y2XC?%yoJjd zk1*O9!?#)F-eKh4Wf^!Mx8eibiI1=wA7d|TL95EbVU?r3dl~&!h#z1Jxw5I@7TiY6 zLp|&9ePTJ(b~SD%mP?&Y*vhOhD1AKcU~YKD=bgpo2<6<#h~%IZ+i(}-ww>#f;rW!R z^9<}TaJPXU8u(G#znwJbQwqxNTxUG?iY^+ul%@3nqFLHWxnux_ zbfpPR+wE391NYKEMM3xB$F86tq3n?OGn2X#V>%43m@M3{xgLN;=;PXSw!q7wJ_C0# B0?z;d diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/Buffer.class b/Supermarket/bin/com/lingnan/supermarket/dto/Buffer.class index 9064935e6b007c767ce52bd614cde164e399edf1..5bb2c40e64026c92ba017ec3119c20fe2fde3c03 100644 GIT binary patch delta 154 zcmX@bbc%`h)W2Q(7#J8#7zEfEm?kbzWn*VxVPw#s7%MaJiLe4A1Dj1|US^3MBLlOB zW*8#_i*tTTDi;GY11ApyD+Aj^?SfziMFyZO&Vc-Sw7#aA0BohNa0RKf200000 delta 154 zcmX@bbc#v))W2Q(7#J8#7zDT&m>GE48Ti;4_!$}4Y%=pQOY9gKm^C!R7#Ucc^HWkM zwimGSFt9MNPUKZ(W@ONxC?GR2L^zm1k%0-Q6$BW85GW5M*?>HKFrR^eRcku~<3^wW g69YStWCIEV1sOPiBoCC$$-o8VF*0xiNhSs!09phP>Hq)$ diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/InOrder.class b/Supermarket/bin/com/lingnan/supermarket/dto/InOrder.class index 01faf7921af9fe1f5813badfbcb4d51344bf58e3..34206caee3981ae6d527f86a0fd0081343adbc59 100644 GIT binary patch literal 1607 zcma)*-)|B@5XZj@6a){;uTrtC*i!TW%W19pplM=knvjsz1k?8gE_n4g$Z_~r`JhP~ z6CeBo{G*IBcNFNkB);t2?tW+HGqZEQ|NQ&~;0Ui1hzL}AqoHA2&cKn5F`14{cPQP@ zrf2lMkNvEL&t9|$MTK^qI&H@ zAohOLH&cirr{Nyf1=ib^V+J@MW!I*lx%Q|h?F;Ezyq_J$yiXRzuD1W9Y%XD7dh;R+ zdTptQS(!-)JkYR)IH@N~>J9y0F_Wh$=_%;4zOWoOkaO51 zg>CumWap}eBoigcIXD&2NI{Pg^qEC94Jj6BB${6YHJ{wHox0s(ZBs)UT2SKrGN!j~ zQg{4EW917CcUj4)gH!VAjHYhSJhk{;wAoZOd1SClE>W7tI3nCc`igMfzNHd;OO(E) zxV|M4vT5?9r>8YTJA~~+5r!^iNqCnr;?0W-6+6ippKCQQ%uTc6Ha!xCq zx3E2PJ|^M_r>ZxuQCg%<`KKAGD(gom1}X&U8I9{@>K!~(fRw`^c_qj$_EaF{Fi4To zZLR>}hBHV-*^&J)NJ$CuSlyBRFvvE6?5qIc7iW+sN)SB^QdWZ0)gXEpWRE~9D?oVU z7^H!xv}Wje7Xx;MgRh|(sVYGXJexT$W@PIc2VoGMKx!*Mc-9%@xf0|s4AM}79H~JL U!yrupF;;-^&&MDy{nB6k1(4(16#xJL literal 1607 zcma)*+iuf95Qb-S#KxgHHKnwr&@|vA5OXMS0jh+kDn*JYQmWo>94ojucH}rb6&D~; zA#uS2@KA^u9~x)bNZicq&d%Z6-|OFhe*OZ0BY35P0zCz8fI;R7nWto)k$Fz$s0c5L z@RC8%e!rNGET2JjaLGS&!{P447zV!WPF^!mx#RTR558?$3@WLNQ^(^0CKPP%2 z%&^3?XWYTyJmA4%&VcoC!q{@A-2a5(H@0gB#|*N1`+`C4oj1n9je+f25yUwkIT)!9 zJd-;Y+_z~T2Xnzk8#}fJrZ+Vlq;t7z%oj7ur{-2*j04Z;yJ!B`@(Fxm1=m-r>+KZ! z@^bT3&Zhov3Q?A@(c6>=wUu6p3?*!p&Z?)oMM>05!DjtLFf2*d8pcuNL_ZCWQd_#q zNg^U@hoY*OaUII({iOLY7GA;gWUUUpg>PD?HfgKH67}d~Yfyu_1}fatK!cJ7w`jFN zrV14e%1~j@{13qyl$Vd^Y;)lK!zsZDnmm;k8?tgqe72^LXT6?mw*u% z+D+UU=o$Ka=LfKFVOj%iAqv74uC;i58@6%B;12AdT`m3&nXf`|Nm{%MdvWnG5@%>s zr+WpNf2$%-Hi1ld{xLV^>> zfmD&42(m2&Y04GJi6FZOvbP3=zBqv#N$i5V$B?rliAO{H2TmwQ+jzAv3L$u-> zDSQ#$NJ|Q$Lpv^Bewv*tD2O0Bg0$Cw&|4>vjufOQf^?-IT{%cm1nD7&u?B>GJ_30Z HUj6Z3z|h>* diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/InRecord.class b/Supermarket/bin/com/lingnan/supermarket/dto/InRecord.class index b6d813f7c342aa9f2f7c9fa910e97cf11901ae51..e0581f192a8e8a5f5274abb7f13583d4d713e4cd 100644 GIT binary patch delta 349 zcmZvXu}%U(6h-g6C%el!u#o~5(Wronfk`xxnuL z-~$Zd&4z?vZ063Jx%b=|pZKKqz4=@M7~>`e$%h$mj3ZeY=lhRo3Pxse4C`N>(<%&F z78OMPcU(^A7BLdJGxz1#v#27KCo`SkO3kcb28D#~D0oX%lWMFECF@$#=~mUKR)+7W z%Z%K~;prSrd8H!H(cUE{N+eB0!_h)7zsOyLqJTL?XJ^`D=Qxv$3t4j12drZ+BPTxXAms{;#_$KkTybsnA_0n=se{Kj0@m delta 367 zcmZvXy-or_6ot>s!0rNrs|nGSzZJzra1#otO*A%y5T1Yn2n7XNP}0Uix?B&eD`RN xT|!x3ML`jz13+m-!@i0`PRM{VD*pgd_JaUbga-ghkg~rj_W5fJxS(JXwGCWDD8m2% diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/OutOrder.class b/Supermarket/bin/com/lingnan/supermarket/dto/OutOrder.class index 076b370fcf3867a609653806386b8c5ac85a48f7..ae5a202484509eba6323a68d996e9a4232f74c99 100644 GIT binary patch literal 1484 zcma))%Wl(95QhJgOVcE7ljcTCN=r)GIw{m#$_i8oQB{f*HAqF>JB}4x96NFxo{9xX zt&mvo06Y|8#&+VwI1-yP=Q8upcV_1IpP#<~oZ)o_34x|&j}+6ehL&n6lj&G@Mym5! zca?!_E4``Pa|XJTK}w)_tA0@xQ?-UluYap+u0Y1VnvVLqBT(vwuh*_adT#{ss%etM z2glHKfvp9XOVd_e@<`hks!MN0|843TrouP$lpT|bW{g#n@(gs7u>?d%VC}788Sc42 zQf}P{q~6;DJ%=Pp5;jo~D0B@=_rX4@eUs!%U0YMl8`UxR99*W{PsT*xsQW(^AfVh( zcjy1D$gPF%1V7F~;Gu*x*2sIZ;9Zsfb!PNUl6<#Vqw`fXbq> z@6W>P%<7l6G?NUA%Zf)5vdEDqbNZg;Kr3`)DT$=0gMKSG@YR65px+cdg_`dLKRu)IKbiUw_F_QxqadYNkOmIoK=z{`RZ3S| z0m6l5kSA!yfE-3awqrq#A;*CnMnUQXvbzF=JIx@i*w(b8AbYVOPvcwDj)F7@2NN5QhJgJ&v2C*(jtGQbOybP_vXPP$fiFsZ!J+74_b6tl;9l`GT!2J{ z#03w)Lm_7DERJy`Zf4Fh=bvxp%f zluG!4bnm48DRvq(a3!~LkPi7h%(B(1fuT39cLV!0f11X7b2O!CBv_qR2~Oa9%HexT<9o_Pz5p5q zRLRz8r;-=s)7>8s-~6yT*-UVV2Ce1!`VMwzCvX?{$gV&Bj>Ol$M56T9=rr$n0I zRNbRnBvz><|FlFEm3@Uq5QQK;qj8-~eII)#$rqabwxX>0)DMl(nY z`!OJ?D9BDM$Ro7lKvGeVCV}j30O6lzkjJrKla7My#ey8fe@!|H(jt)k4In&f3~~sC nY;;C4Um`Qojs@wUJAb^Ik>)KjQIJCdQ8s|^tTV`wpYh3GCkfxx diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/OutRecord.class b/Supermarket/bin/com/lingnan/supermarket/dto/OutRecord.class index b638aa9e0c1656432e05b3ca63d8abe49b9f4978..76f9fb9c6c819ec3ce923ac8e212fa33859a5ca8 100644 GIT binary patch delta 368 zcmZXOF-rqM5QX3Fn!C%nr&vT!6FrUbjPW2KsZ*%Eg}o3#!9p$43W9Z-V~TYCiUdJW ztn(Z4TY_)TfM}Y1J2P*-dBb2BM3dS3Cx8x`KD2zOrsrcx;YhwzExPXYZ`!B*^T+$% z-9z5E3PTvIS}eonFHd0^3L6$Bc=@bTRNEFl0y$AX<-SE3q1>voF7{|Pykwx=27lUl z3#Ezb(?K%dh*g`asHN5$R^&owYk#{Vtjj>Bag5FRMwdj*4X<@P=5V63#2s>&EmY^G zU+f4qshBk0L9zg-jyb$ES>h5pz;2QMe}cNa641cG0)PqXGBuezo4`*QO5^YwhzBa) delta 353 zcmZvXPfh|c7{y;(m_OJNOi)Ha5y2605;v^bcmNY!xMRgJNVtFtn=aUS3Wx~{4=^#F zfU^+aXWW=!(eJhW-uLV4GFnE1Vz>DOFvhTk09P@p=t~($xek$qxN)JoGL}U@8W^n-PlA%$!b&ZaDNhatK5D;yk#mAi%>#x#H4WR_XTIcDWs;Je` z2b6!*`O*K|6|{fVS$cxj-^7GO&52-iw`Q}@xnG#5mEyF7T*3Hblci^9mxkMGHlI!2 im2{G!gY!Lrihn2I0^JgTuUGum%VJ0B} diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/ProdCatalog.class b/Supermarket/bin/com/lingnan/supermarket/dto/ProdCatalog.class index 81f0fdf7325efee2081ac3c95a98014a246def29..b126ac453f82546193a9e0ec0fe12c135319fd04 100644 GIT binary patch literal 740 zcma)&O;5r=5Qg8SK%rDViXeU+JPDZCi#H7y5)+dKO)%V-c2kS}Fs1mrG|`xN@CW## zjI)IV1x(B)vpci%&O9@pU+*6P&TyzA!*Fazf$4jp8}iVc&K^V@@c3RNrjtbGO&mFW zo^U^MRb&~e6aL6epNFn_J)Q_VVaRw6gJCT{hDl7-&Ka^H4+KO0!VA5m$Dp)3BZ~GT zM`%!>>nNbeP_evF3}(St#J7CxlftkfoBJakd(vM7v&o$|W$0M{p{j>QJRdC5?~HZ4>Q5`; z!bWie&4sv^vQew<$t&v1)*8iu5^?Hjg=XsK7wsjQoJUgcYy@eof|NIc>}>{Vt%B63 Qo$&{VT&M)uPe(ua21bf?UH||9 literal 740 zcma)&%}T>S6ot>EP145L+Su0rg)7?%X5&ujrXUER3YG4sNvKovBWdb$DJX&qAHata z@1%uljUWSe=AM~*&o}qu^X(nLDGm&%*e;`p9T|3Y?CIENP=v=|ITQZC?SMyPdypm~ z8lN!~BOdw;+PR2C+GQxT+Cx%%u}5mv5s}}Yg(E+?;iG^Q%ZXhc40$4Cz7UJ)t(Y>j z9XAf`fci!}vZu3qKM8qq=cl%p#`bj*dp(}=AeOf3*iSEssorYmQK{4Ub))tBR`Tgo z-p{~wdO1HCgLsy>{)Ld78{h0s!LwQ^&F69i)W2Q(7#J8#7zEfEm>3z5}p&7== zz~Y>rlFG%v%)rURz{-)W2Q(7#J8#7zDT&m>GE48Ti;4_!$}4Y%=pQOY9gKm^C!R7#Ucc^HWkM zc2}_SFt9MNPUO{OW@ONxC?GR2LO7T~k%0-Q6$BW85GW5M*?>HKFrR^eRcku~<3^wW h69YStWCIF=NDd&$17@=_a58WKd5jF)K$3}p2LNy}5f=ae diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/StorageRecord.class b/Supermarket/bin/com/lingnan/supermarket/dto/StorageRecord.class index d964bd707147f8d0c360750c59d12ad1797ffed5..a4310a30b3ba8d594760272247fe9c852cf81591 100644 GIT binary patch literal 1182 zcma))O>fgc5Qg7P96K>CZPPZTq@`c9IH`m$+(11*L5dV{pjGc1XO+6dcI6MmkKzCl z6%q%206z*bv$Yh(bp)3k@9sM@&%Ep3e}4V~@B)1cHG!TVhu$=ZCXtN1G`~?vD3gyW z^Tt{1oo8_(C+dUp<78~X_=kKXQ{}x*&*D%9kw7cEQt$I{q!NMl@LGP7-c&{ts+v&0 zmjVs{OlC@;9_68c7zkMEv+{F3GhYQ!ke$+{+q)Dn-o#^NqmE?<58wza4}++vej!Iw z%4iQ`UrsM&67aq_G_tE86*w9G_n5@xOjLF;V_$cB_vu>@*mTfTx=|?b7<0NdOZ(6oO ztEmqytkO42Nq{!iCkezCfZW*LQ?KT&Hu)z%S1iQ4B9ohR*a%8I#j~;NR=WEwCa81tWra4BR>!yiUUYg zNF4Y8d?>`s)+mZ`1ecke*_oZ+{OzB=zW)I51Opc~jvQFH&*lM}hio3%@NM)3oZ?Eo zF5{8P1iHhw@`DVfGMNPDMHVHKrvhepDhnmhPRdw7oC(li86`NNFKyG0V4%fg>D1!M+S73DX+C)eg6YVvP!y0CikNjp_8LLfgc5Qg8)m)q2kP}-D!(KgW3NlJa;2C4)tNRgsmf_mRLOECB&avXjY2au?c zIPe4bQHUAaEydaNva>t;&df8j`}@z&UjUxNHc${aazfws++ZBYz@E+~D)MFYNyYXk z4(-8gGVxp$^@8^XN&?-x#6vk%_G?2AFm$AMDI=H9nX?psaH(3me^(2)`X$Dtv5McMNNZMmzKdlDJTkG23TdY| z+I4GQ%H&l_cYfU&HPhqx$0n*+p-YOtxhz>d4lpR-f=0-?Cnm~V#~>a1(sZxVA+q4e zguwz%l(|#QSvp?UbWJQ>Yce-!2H`An)LWNFSHCrZ6Mi-vP+XDzOBn?wpk09rC6V)hHMbOL8dY?`F)s?)u~#=p|l#9O0o>Pd!1s>;eU8u!E0+t|^7?0(6CG_)Xl*q;O0 zzQS%EWRpO)7J%?T8RS4ak!F4(J6e#Z`iV62AbSL|zW{_^oUXUS(c`3pokyS)Ga literal 1366 zcma))O>fgc5Qg7P;y85;NlP2(2lNBlI!UQ7+(4C}1u0V0OHl6{dm9Xn9XSraiUUYg zNF4Y9{3yhXlQiIN5SN*q@yyOMulMJ#?>_)MgKMFJqa~Pd*fiKQ*|gXkn|NyCM4%MO zff88lyq6!P8_KBfcGDz?`p*SS>HCQqjp*dXQ7XMuz)%Ajgp~1BIFQK)0nrvHzX+lr zJryWAjZ3=pEcWTrYA1-)#dy$D$y?bAvoWzJ!%LY298Z&_^j$zR8XYelxFL;>WaN&< zLzVCVmAZZ!yWR0{7zQe7M^{8v>8teh1Z2%==-4Zxn~HVkb^%jbbjkT_3j(J-Eb6*R zm7F%0nN)U>iDc5($%$KE&cxxSc|c#zW@7P|dC-l=iKpHKEJW>(eNI?<8#S!hxC6_^ zT~uu>@oAZj4NKtYKgAJf{j0JkN6LLg<~%0(BJ9yysL*>cP~eGlD)7+E)7;DxQ|1Ya z{4$6hD`ZzGa>)zwM)MoQm#pj_*>aXFV~x)CqyX!vQzUR756J%A{1t`Ixn^72yn)SW z^C^)QcvQ1>jlz7im1V26Q7yZnKB=0HXEff2skgAL0V#gUfz-7i5Ao<0$ksKAd5{eP z*<1j^f-=aCR*_O(k!>x=u3nK+9%P3=b{Bx~pJ$LgEr^i^+1G;X>p_e>$N_;IE&$=D i#~_cjAmu!WqXl`Q2Px-4S_E>u0EFK@gB)a!;qW&iVZ1N^ diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/User.class b/Supermarket/bin/com/lingnan/supermarket/dto/User.class index c18a70e8caf9f437248a61cd898ef59a741886e2..5d49207846a7a8416f4a8c471bb03fc420580232 100644 GIT binary patch literal 1721 zcmaKs&2G~`5XWcp{b2}%CbXoKCKTc%Z5(JQ6i^SeLW&fjibC(3#7YgZ9oY`N6bF!~ zkT~!FJQQMPV^gtR_p)ox{%7VlGi(3;^Ya$~^kF{>2?m>E*EVLBGj+IQ_=~ye+1&eR z2F4_CjrYFkWg*3&bCqhuebab_%aLny%VCgPpr6BSlRXqun74(gMZJ!Ozt2oeTtz#uy@XT*f&mzHA%2dL6prwmeu?!+uW63QA} zhZ2L*&~nT-3wvaG@AzmY(z|0mJLR55@1ZdjoLN4D#_+15sB}clOwC|GNGp2law&OW za7TjzWKijc%8GtjNVqu+bxc)~*F6pLeG)Gm-Zn~)PYEhb?3hUG*b1>@BgKxv#g3)n zUcv}CUtDkCn}IvSJ>C8RH@^wlEnG9gn1L01)|LXOKo#E@+=f+L|9AclYhNYjveLN* z>!I@jk|!utyK@d}7pV)vTEXh7B0_bk3eyuB)kV~Il^`23$f^=#Qw_2qgVYdYJqCmt zO(1n8NJ9qMP=ai!K^ihh9YGo~Aanx=(iy-|N5c((y iWLG(wzC4;eCCHw7G<_LlA3>hSfY4unK%R=r@a!+vH`iGJ literal 1721 zcmai!OK;Oa5P)a%upP$`2u*pEM_MT40d;}!D4-r_goqR>)I#CFWs_K`A+{sifj`9o zBq}5h`~ZFwVrK0&u&m)SvpYMp^UciKKYo7u4gek4Fu?@71SMD}ag)R?61PcoNZcWD zSBHB#+-G3SA}92@=P;=D-}3j|o^XF`@5Z6)j~_B9riaFqN708M9HD8tANc5>cfBzK zZ5GX@PRM}u80aHs;_>hunjg8o8*idlqq)bRuoa9jq|$eNXM5%iobUx7OhnRP$R~R| zbZMU&3-P`iF<9vj1J9lyh|hgnq@l~5*dE1!{Sv_uP#ZgOk3be0O;rI}l%Cfbe;*T? zffqbaDl*XbaEaEPq%UMmmnK@fhb3ZVSh9(yN2WrfM^~27jqsBAGJ5>BqjX2Tq_g?1 zB;t~GmPAytHg|(rICP%4)UguXwML_|U;%0toB+#$3W;MRPC?azGOdo2I0;n-_5U@J zLHl1W10Ff{V-(%MH}7TU z&D37)C9n7W0bq%707sxShtdt;Ra=pn$wDc(=x788&F-io2xJ;QqFJ>oo z;SUFzD0u{3F;QFYql+FlfdqYGL_X(ibbfI~dM5cbhkwlj3|sS>YKINYvIk)scqXB031 delta 270 zcmdnNvV%qH)W2Q(7#J8#7$mqDSQtb&8JHPF*%`#x8N??B8cyt~n=HcUz{SJB&cMOL zz{y28aZC(cK$4At5lAvK za05vmFq;)f^8$H{415gyK#~*4)(6rcb*x%j7??Hy8OWMBuxb`y5QJ*B1FB{M>S5E; l-parPwAuoyoeL}sax*X32r-BFUxS}Q{bjLXvJ6at3L;=Do)9D(Jf7oh!C znqUBiDJS zG2RHVV^*bh>hNOwrd_vN<5{|$$=S6^!AP1sKb?24$P8Zs8b-V@E?NtPxY_s>;+ne> zMRg?#=1SDUm1vkNLGMbG!Ie0$D*@+9^dGVp88FdUd+?<}Dv%9{pVa%^HG70L>TZVV zF@CF_0rk@Wz7%>wgIMo6|Dd67f^&z|d6-6g=S`d}#HkWfS2T2!y4l_B#_4<92tA&a zpPtdUE=)a2V-k?@F9JxP6l8+p_dxouXj}y8N4kLk5H2W#OiDo#BFLZ=;WXJlIh*#gLR00=)%46-K$*%v|fq#y@!kbM#403e3} zApAZu$f2|~DX}$2QjjBgYf>Ue1|Zo05PrBBBu#Iyink^sR^&tqa!e<_^UbZn%bF2E TP66^R0EGW3804*cPjmkOSHCg3 literal 2549 zcmb7_SyK~15XXCSlf;WdQ9SStpezF3iWf$s5zrv-OS0l(vP&f!tNc!urBzZ^`QQie zLs|a+yGs&>*#}>`XL_cmf7{(N`}@z&Um~(7>v=gS$G4<)&x(h>~sC&6d^vU`Xbk z<2wEloJ&(12>--u;P^vT$F*0wtxdbVZf!PU8LoPDtGQvd9nK?T%75>447paVdo8nx z4{$Bl1drY3;kIu!e9zppI=1;3Vy*2px^>_2To9zUY@f`drKthFUK-M!aCxk>f0dkh zxG(R01JIFumv0<~jPtObDOD=-umZOA z3sJz1{w(M9D#QrYph#J42}k6pusGxh202(59kv{7(U2i(y?Qc4e@2g}2}b@&+Fnt4 zPPAckFm2&_khPlEZP)Fx!-|glTa#HfV^L1anW7w$!$mnIM~iZd;s~e1GE$ULiZR-b z({_SloYM(8X^8osZD7dZ{tZ~&+_vk!oW(Uch>KQ`1Tip5Fn*wc5NJ>Y8X$oNWS~J3 zXs`tuc!367pz%e}$Hd@QLQZ04LL1QO=^tWz!yo|!kxXDr$~laS;RZP`7cevAqFjQU z#JKPLT@qhm7<3-iI$xGj;swDm81$X0g#h1AWSGhu4+M2D#&Rq$gCbDrGlIV$hjC0b^t+4ZE4bK zX)b6%=JcgWt00#FQi=g#s}kgz%tKD15`#UG`J$9&S_`s(-%RM-?~(Jnl2Jjf0%SG@ zgm;A?*R>#76=Y5eazhW2RY4X2vKRw$GXlA#?U9_?BR8}lxAi@eQ$cP6F71-Yy5ks%f2AwV9*fbe-D$UQAcUIkg!g51}GWHy3urM+RWF?j*>gOcprR)1AWu+#UOq4R< z;$mQC;O1dqXW*FVRn5i8z{nuX!@$bGHu0z}8-pT{%RD)dQN5mPBhWx51|A^E1{7of z>f!~GJYY5}10MrFkO#DaK@doC0@?aN8l;X@YYT(W1|S1jGdotzA`GHX&2~W5Oh7$s oTH0F~gn(9CK(%v$g}H$ay28aZC(cK$4At5lAvK za05vmFq;)f^8$H{415gyK#~*4)(6rcb*x%j7??Hy8OWO1v1%4z5QJ*B1FB{M>S5E; m-parPwAuoyoeM0?4RkXP*a$I*GN}C^w*h?vwpj>lr7!?t5*R=L diff --git a/Supermarket/bin/com/lingnan/supermarket/table/InOrderTM.class b/Supermarket/bin/com/lingnan/supermarket/table/InOrderTM.class index c9bf084b27b5d5cf0df048c96d538d7dc2126b3e..a1fe7258597a0ea17f8879ddcef10ff5ad488d75 100644 GIT binary patch literal 2815 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 Lm=X&Ya6|t9kdux! diff --git a/Supermarket/bin/com/lingnan/supermarket/table/InRecordTM.class b/Supermarket/bin/com/lingnan/supermarket/table/InRecordTM.class index e5bda6a72eb31da4c8f199e46c551ce1063be2c8..8fddcf49e6dcbf4d7c5bc7858478e727e041023c 100644 GIT binary patch delta 1170 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 literal 3012 zcmb7FX?qh@6n>{|GShSlB|t$4S`?*Ci$OM*B2bFeXepIoC8+2$8OlI16VnL=_XRC3 zxPl9c))ibnL?0;%ihlM#_>Hps1s}Kf%!H7D{lJswxpVHh=brPPbI*J7`#&d60a%8w zLukil6-f=tG;GoEfQAP(JfvZ(hKDsgQjaJM6@ww@*esh=J<>2WYztus+eKrAumd|o z$RI0{-2ewUSsqo97xi!mv*F5FL8M)BX+)&mvg`@rF+48P6S6$1;;9g>!)Dn$Ez&b0 zJuA|4B0aBSuZkBGgi=nXkhS}atf^r71HC(pT}CWp*h8^|o44$tP6cW%@1)lmj)I$d zQ%*LPq1ra=*l;0d=CekAr|HJhh7+^0xlBxK3n|xf>^Qf)t?W_|_T3g-D-#%{uYQ94)ARgIM{2dTy$Txr>syGp^#*2_Y4whbt#>vqxv zFtyjR&Avi*(9CZ#1~b%zd!3Y#88Gse>`Tfzce^#Lpkq>St{BJSwr9VduB8Oc)vosB zF1TBLIjAehTi`bgneIksq}wUju7cXuwz#kB%4GWUR!ZKqwXNb&doqsU%B$oQv`(5u zy1K*)G^6Zq+W&ZKOt?mB=XxXOrLE#c6{8BK5L>s`T_t!SDh7;9!R#W|=GJ(;64{2q z9qbH3)AG(p+)kUjiBhuh8`RT~3JL=B66br*s7kEdt&QcVeoxPAtqN1N3;KS^fP_=X zr_3HpUVU2S)7>a!(6Ivh6f|8*3!R6z@bt;!6u6!l`F-;{aby$3eWK<6XR`;D$+YRketY_i;$a2Ux4)Lmbv|FE;9&jLUU=B+|zc zWlW-cqT^FB{S0dq%(}FwYYSE;ZRT}+F1NnGmpYD!bX1nF%@?V7E@q^^|G~T?5yJp_t#PZlh##J`Lo?+L_^1vyup=bKU zuw*(}w#!B{jV$|ly63A}?G05LW$cTSsd8`$wf#U9Gn2z=*m{gjs_qgJZP+Fp=&9t; z1$Jvz8FcdnmQ*D}Sn76TxX;|}PmL|~ZF`$)R+UK^+9rd;Bd=G89`ck#E6tc%ijqhb z)5>>Mp88x2Qc4t9v1u189=Ba{$Ygmr5Gr#i>4{XvM%*ri5@)^EHdaC6i`yk+mXXVu zHfO@3(m<`MWyQeq*7t-PZ_E0{WxJp+uXsUr>{*4c8`;b>X^1G7t_VlEH8= zkyOKKBB_P7M6xLuuIH+TLy2Q(h@OO=JdVa=nDRZQhMUGQE!utz;qU0P7PoSpgCN)W zL^z94ufkefi@W(ZzX1zy8&8`3_~^t+?ubOFPmH%y*7@}{OUs$8qO=-oxC;Iy{ECeh z{Q==|O#ha0jTblQ>D#;*z8|d=LqQi&`1jwXbsg_4Z}<^2dVMD|*LVDcW`!f8g~BWa zzhQP?`#7#zG>$p^42tQIfB$GN@}i$)Gs_5;KfvO*u>6bpTgo&f!4}%Ipb6brM~R_I zFaor>13d(CC$&>h^EVn*+@&J^C$6XV?sAfgxsxP=#Mf}@(iB%zq!=uxcn^Achb2-v zN-2&?c5}xuSJH_xm&h^9iyVR`Vlh%T=1Erxye1CY#8|mlv_4E{Qk{I|)tJF#XY*a= zdHvCig)CMF%d?CHx|Id$!d;Z&xQAuw=en8cZN++wpbt;7mtNpRmtse~*BmXC0T`uC zpI5w5TJ^CMIvy`Qg_M0Nw7)PWe=3g np1`Kkq&+|U-bKZ0E=Rc310yvGk z3R(oxWxJBK%<58At7cc~HN&ZB&K<+ey4r$eWD9k-;OK@kH=`gX(6_AJ)9z_JC}3<`zIi~E#U@_+2HrXkerp9k=c5eJ0&9VwXmt8l? zwxi4Jr&YX*5hh+VtNO&t2!Va+fo*-3lSQ9Vu>(ngosO|mx7@;FxT*Wo+YiRTyn^v? z-x^vvi5$A5fDcrh!vrIwfb(DG^-v@G{B?XyOV%5EP3oLfu?xFpq6;c6;u8Bx({+JY zWEK{ddBk!9HwD_44EMUdI%(IduGfQkiM^^~8hLi(iuo1K-cANhdY3^Em*m2{X4Q=e zf;!XreBheb+5x-d`B24m6v@kYso`~T3O?eM)U=Tr3QS@SH&lF#5-%q*Mh7d}wZ@|* z-MFP<4^k5Msfy3=xnGLEb640+b2CHo>cC-I(aOJzI9lZK=cq*)2o@xI*xDR)CNXhawho|IL4Ct8+g=+=RJ%OEz8hpij3`}wj8y+PacnQa1&=Y zaGva={GH##)Qy+?DXIm}a62+oJ&2`o^{nIO<1+F=#$mpt@`R+`#Fd{p z_MM1(>%$F-6OrPX2!A5L$B94kbSpa7fR0D#Srmwp_5Q(nWg8S^k)z$4xb{2dWSxGI z^BcI?^APR9Y^^8uLpb?lt*0%Te6iLOk0$z>SR-Ytx1B>?AD!b3G=+n>fJ3~2`f-US zUB)REaRyg-?_K4WY0O~OliTY{ifk)j3Aa5n3NSfp!7};di1n+gY>7K41?6PS+_Oy>zvI0k}Lm*#H0l literal 2435 zcmb7FU2_v<6n?h(*fiOal2Q;Tii$N2$O0lDtw<@h1eyk$S`7HLO_s8Bvm3V?ieC8# z9IqT^xY5yD$Eh<-n1PYeTYm>Q_$M5ncfXnzGmaO1^PcmbkLR58ob4ZfKYR?}BtB2$ zMa;;!ltM9u%PCw*VYVL!P?9m1MhY`RD9gB-M#dN37q@w#uEDcv)nl0h@Y|U<{Ce@Z^sjID~?ld%KMR(P@W~)Y{X{y4uRdWs7DpI6(zuj`n zPF;6aCFK0@E!QyBMZM z4i(+GW7PBjaVk_x80{USJ3D)1&$Sv$x)as7wS~zE!!q1+5@PwWMG5gKyUuE}vxcSn zehb=?Nlk9nu4(3?<`_Z_lyUc#!R8fuVsV9W)Qg1@d$Ch9&9FK1dd+s~5_UNHYRh!X zH$$ky`RB(i;ANI|civu`vRjtxK`zpnx+#w;fjUjaqGq=AN!skr7mH(E!OBawIbPyO zIrdu7s_S4OX|oj>E|NF zD|XAN>C=Yja5n79Lg}dBx`H=wRKnnP-jkQle*WR<*WW(<=7EIdpI<$C^2oc~>-=?Z zL%eQ$_iW?GCl4PgcnJq3sQ+^{6ugXAB%J(Dw~&opBvtS_@(PwvQ}8Mdh48!fNjRw1O2(DmaWI3QRNUhi5>`Sq`mU15ra@tN;frED93sCM|Hk2-n^Ny8 zk?~?$oqMrm4FcwlUFVjr8eftzG4f3qZDCnNaIpr_?u#Yy>$vLhd%_Ru779QDcX?bJXJ~!BzOZ(7al+=$iJem8q38h)p#ymsU~uXN;R2FR@#sYkC3W9Kz|!) zUNgKZZ4CTE*FGHMnM0iCFwZ@NwU^08aGV;&504XglM*Q&r9Mkfky7-IA+|Aso)b!{`gk9Umm z3q*XFn{&j=v)hjqTM-@d-;yfmUa#a3`rX>h?uK>~A$x2r*5>YQMU@CAP gr?udTOlNujiS6!H&)pxX9AT4Lm%t{m0+DX|A8G42<^TWy diff --git a/Supermarket/bin/com/lingnan/supermarket/table/OutRecordTM.class b/Supermarket/bin/com/lingnan/supermarket/table/OutRecordTM.class index 8c8a214ecb736d4160f5445f8e7e37f9ae47b770..4b80742c9e2cb25121401ded5449291fc1234c8f 100644 GIT binary patch literal 2282 zcmb7ET~8ck6n@@i*;$t1qf1L`!AeEG7G+vWi@I0}w6xo@EV78jYIWEh=)mp{8D^pS z2YO{1V|rs^()8LGOuAq+HePt;|EQ5aVSL`1VOXHVcr)+Eoadb9Jm;ME&wqY-0bmG4 z1tEdHoK@5cW@)*km$dcrnqe1pd)06>M_()$TBhvG8ad0(&!rWF1>RcGH}r?v`X&*+ z$=Kq$W9vC*P6ESEKTc0L!jl}ltgI-otUg+6PgrI)@&<(UAF`-P94V~ zuUnc~Tq|hOww!ZJtCZrA=vY8(T_EoHFFR&In>TWfWz(WAYceONY?DFqh{4G5F&%3^ z>*Q5>YOwZ1kii9pkH_xu4G>ww-Y|29&$=$S7w9?O%K-*d%9<`07Y#c|^q`QD5wm1E zR|QV>9@V*TULZWdqQp>x(<)kUMxds*Z(hM!f#$Q3d@1m;cj8 zpkbA^F(f=s11cKOsNjM?*Rh_e^^HOEke5_6p;@xItl|XX0!>q9$?&9idt2&n<@Cb5 zZkw{#{mZcPz+@BlA6w5Olf<5CT{27g%wAuOf0^>)$UH_=d;pd+E=~An-;5p5{i+%t z>F%UV4QJNcoUqCz$E|%ThU=JAaAU6lss=~JO^mZ;*3GXtH;sf&xRdOo zW4xHx3uR-Bu3CFjslKX~%Pg*N_>$85l!`Q_8IAU`F<)(`VMfJ=nB_RrF6i=;z13d* z2Se6rPQ^#kx|Y_dyuA5X#a+oa!kcWl7{e#{RKY!g6Z@T=DmlioVXOEI_c=@(l742% zrC%M#HzR!wU#QTr=t;*S&Db1azGDY?O%^QOVI`xswV5jAjfVmvMTqzE`8N$&N6)RM z^)Q=bQ`dVZ56Kj~lo8J*RmxgrJ7-Lq1+r-lx@RsuAhX4J7QKc~djugl zlH7&lSh*`Zfq(1Wy~=wIiMwaZyDJ->t3sO=oaFZuPv6o@i0jS74q6k+Z+LB?Cf=4^ z2*+Q~F4V@~$Sy?U=d%@bCVoZN!VY>W=;b!S?b{W+!>z{c#R>)!{S^%TPnn zdJx80bf6vm{9YmbG4x^*eHiB7RxdQ(#d|!Fgq%qd6L=qIe1cb*uHe7sMB+K)J;%^C zk`;{ZM~b;#1~}Q8>s9saeXoKM$9-ReT&1rl-HdKy;s@?SWF_U4_rq2AXn?;J;4k?2 z2=SdS4x_JCp(6o0h1*0)ssCUmvUIaDlhL+q-1!}v6pqKiZDc54`**1KPh0Kbr+bI& zR(tJJGV_-)3uPr0^Z)<= delta 1174 zcmZ8fTTc^V5Ix`CzGYboEncA_$i=c~t001csDNU+W^;^taz1R{$KqgaI!G zIZo&}sbfgTDILKw)Z#S983Q^7MR1nmoPqK}FwAk@fU6K(5b28|7ZNCJ;1VtiGa^c^ z2y<1Kh=FUkF3=5*n=;3(rO{W+_Q~lQ2HDp-!cZQMr9#Ok1IhGc%6S*GEv3sIR(tJ5 zWwZT4y*OZ^4IK9TN@M#St}e7o8?XK?O1NnYb@Z9Gx5wOeFBo#2CisD)!9vw%TvyUQ$@tIGsw2 z2S#F}spJ%c@+k2%W{)X#?FR2R7@V>m2+R3bnRU>53& ztc?Ea&LUSkdBLSy%hRaNVbePbB>2f{PNHiAfnFjwSR&Y0B+zINzVd(fu?^i?sk;l^ z)FsaOm88hzLnP%gs%vxD`~@y?9HOhrVGEte`x@oNDC1QY{svn!UUdPkLT1|sY|nVL zQnDt)GDIuGZ~x>S&SmQhgG!eT;Sdfx5<}=AB%zl&G$<`*rMTA-^c9y3kQX;nX_i~i wZoJRc4GPtg!lO7=Z0@1ze(}d}>gKiW|M%Z=`U{_(mzLu=?kva9@5~$c1LVWBmjD0& diff --git a/Supermarket/bin/com/lingnan/supermarket/table/OutTableModel.class b/Supermarket/bin/com/lingnan/supermarket/table/OutTableModel.class index 369e79ae07bd1ac52e210f1cc13a35527d9302e9..7973663d4f6614ccb36b25c798111d0b1adad929 100644 GIT binary patch literal 2633 zcmb7FTXWM^5dMziSc*7-;E+JU zE6@vtUU=zc%3C|rKA0JjFr=k@?(ZPb{)bMddnCniL(-X!XXMqM-TijI-97sK@7s3( zJb^DHgc!EutU}T>ilarXm@K;`-7aYMY28UW+OVl7)2?$|2!mE$HzkA_Hl5PWXlIk< zG4ctFdWXx7t>tPg8I+u5x`pD9R?r!mPYejJq^XgQ>e%Gk#UPbzD}O+<7LKivv1V z(vRHLLtzwO7MKj}i+jzcIcHAJk#3`CI6Vw?@wN;@xQ|FwP={uYWoVMn!q7CI7a1!V zLPlQ3Llj`<>gD_2S7fXq`QEk4pBJylcv$E!U%NX!C1V}QB;33Hvy2T?^xa>-{p02j z_rCc~#v^oe|Hkypr5|NH%CO|_ov&wZe>rpQf{||k!($xvh)8H-Nd8aq6~xgjVr=D* zAWPWxA7fN);2bjw+I{~W9F17Yux!96>O*c}Shu}l6D_rJnwimTLkwS_3_B+cYWLz@ zSYTwS3tTfz8e<<{VDI913cDFr#M>Sij4n}E7e@mW;%roRj#*=UmRoeZCZ-hZMX!W? zvyH2nIgb62Na}n zj6=n7hI)#Z%Gc0VyUoHd!||Ljl*mx*z0hSjUJ$fINT<351ux=d2`^E}bAz8MI{K(? zbG(9A$@`3`F+JkdSX*LXMm44}%#j1-B4{S=0-9;f`W1}eq=ZqLsyPIYaS`7T>G#)0 zooz-Mr#Vc~44Gnj0R>Qz!xH(6ng)y!UBYV&E9WBnm)U;TF!Q=C9LgMyAVEYCBy=cP zfinVojA3)U<{k`MR+~(4H7Y3KoVX*-i~iNP1m|rTf%FE)n*vEto5~YT3F91Z;~i3I zrIKDGe%crEejs3wJ~3OudmQh3`8$@6CZH~GTofz_x>dJSGS7)YkZo%$Rm|&W8CZ%A z{Tn~fMErfD@5SPmW_8SHOB+>3%bgz7O2M)>5|lsw{wHMK90yELsXi**)T-s$IlbR7 zY2l*(`fhC#{lW&?>^l1Lg%J{0A4wr`eR==1?sU4ulR4?>S|V8@9bMG)TuyJ7$cxec zP+|(vM3ejrR%GjD3`s*|!6 zS@A^TCbmyv=L9o}Wk#kru?1&~K{o zm#hALIIw^}rE#z_&p*DP|KTeB_5eRZ_?z#{M{lq3j#SZ8IO3zT_0-ugA&!ge*G%H+ z-;f@PeFeFF634|%00{PKd*sZbin552~W<0FzngjB}I z_=NB;6Y?_1f1yP}x`FcszP6D}KgAWFErJhub0GYG#%C0z9o89t-< HA$C8VaRY2(~E_tVX5Z=I> zg4F~yE+ZGh3gpG1i(?{$NgNfF5yCMX7nCWEf{bDa>yQ?VC8(01-V&58s3{qa3|B%Z zXPIuHnAQrqgw7+w$Fvh#!qkeBiHu_##mPPia>=&xdo@eK*5RC0NSG8CwPIq*E$Mba zvybaeBClBqqfjyvLf6eXhE+_F71n#)i3#1Fk`VEoyN+Qd#`K(H*}QJe7tnQ>Sq-X%r2oUqVxCTRF`f(`-ZV6=Ab;)L?Oo$8>~pV$^j!gAw``ZBaGTq|DDlLffS79I~bd zEw|`+d8B;VfN37IjhvWGY-8PUhD=Ly=w>PH2E7SZOhXimX{M_W(9iN%DphYaI)03O zrHk$ezTB*BHGx)<+bt@{#|WE?Gbd_*gG1rnqbRnzi;)fKxhk1Di+ zeqhcoW4U%tA2Pf?-`A|o0+K48#5M`xMtDjH7B^nC z8zgw%z4|kecIVe`|G56c-EY35@ZPn#`HMfY@;kS`p1<|w{FU=YUd2YlB_#eQ##L;> z6B0K4r&$eiDz>6m#SWZM(Syx0rd6CoQpG9st2m9fC2UyKUA6Tp-oY6a?~3Crk}}>? z@jgCK@gdI1_((A4Ra_7*FCr;nMPu{!xQ3b6Z51C27oXr$6`u*}k~lsWCW{vJ08mTl z76DEsrl$EoBz%p5@hQjFa&_33uxtUz_rC=GZ0ls)#3|!6q2Ezml-fEp5n&P3 z3vW}zMKx5zi^gjom_bq*x4;;+=A?>_KB?P$x=x5i8lCVKseX?t8eAl?x6H1xqkKPx z_;A!*d21@t7^*j4SYCz36-$}qura}6g;3836%$QUQTt?@K^}Tj0@KC?`}&%am~ic|Jw% z99l>L>G%yu@v!m>0@v4QuQCs8v6GNYYwV*2}N(qtH#~ESCL5IslPV(35x9*(+81 zo#=mnJ=5qaH`vD>Xuqo(e@i8Pkn!7YH%9NNvkq3H@5X>1U0TOnMd!|n>{riX`EOW} zj(!EDXBI2V(dMfj^-ww5auscqt-6WTaRVI4=c zo`xG{@d!WN{LJFfax_dc;qWn`EQz9HRZ3@})Eo2$bC#NeEMLVG^@kXLA0xLz z`3qe#_P45PtGZ?hRZ}?NcZ=Zz{1Mxt*QXO_T<)t>Bg%N*izs23rU8un0}S+E AMF0Q* diff --git a/Supermarket/bin/com/lingnan/supermarket/table/ProdCatalogTM.class b/Supermarket/bin/com/lingnan/supermarket/table/ProdCatalogTM.class index 033463da9e61b75ee2736b7be3b6d0d97e585c02..70ae613798fc613980cb10e5325ded4378dd1fb7 100644 GIT binary patch literal 1984 zcmb7E-%}f96g^)OvPoDdq=nWJ+oCNd;m1NMRvSPmwKfVA8;r*4!;-AH?Iz1?Hd1}_ z#qq@%XB=OA>YESxkUBzV?AYru8GYIPe%y2JJ@?-4{`vQBPXN4( zj}=4&#%p#%v&`mZQ*Uam_Lku^bmyMoYOcOv8QPj-*Ozoxx9rXJ6$LSYi+AFvQJSR_Q+6Ffivr3P$*=3Sz|3;D zDC)YcnT;(=leX=eYue2cw?y~Ila@f*r*6BZrB#fYYdgG5mQ4zB+YX)29Wj{e?#{J6 z$-bxJ0;%G2X47;R1ftnoMIg3BeJMmSsG<-33Qh_P92S?rkU-+;!^eAH|76w^I4z+1 zyS;C}dHQ1~f#-O?_x)FU-+d|XM|kh={QD#Xo>$R>xPtQn+W*W>3g<8=IbKkqAR%yK z*=!oC?Z$@Tcr}t)vunCl(H&FPEI5q0pPJ0*WY_c@(-X{4RJSbYGN&Ssae={4%w~Pj zvi3_Ra4MTSQih@oaZ*JRDVFov=cRgq{h00Qz5Z-*a+MTja9IISV_h@!3`S+!&$6VO zhU+;CqdM4_Qpyz-ui`Z}u9UJCwq6k9SoUZ;A0tmdYzh2lJp#Rq>$bhUWVf5H*Keg1 zUdN(>H~#Ih16{7-8s^!LE%OUDc|V~`-ir&+DIQdGt8FZjYB*ae1p#_WZ*AP=ODRhB zw^ZCjiQZ^0FqA#sZU*nDSeCg<&`v(;f=vFZid*uqhli!QJb72eZF!;uW&}9)cBxr6 z?lT?q)9cTL;3Ot{M4+$i>a}|-`c}}0eMI|e{P}SxtZ;(FeKJm)vfXxS#tqYAF4D4K z;n13rj}xP8wJ6746cPEXxQfW9;r-cvyzTYY^1(13^z(ayCmXaD{7>W`VIZ&kj&wDe zK2@&9(!=FyPx?%`8c&}s?;w+ZjC0jTxUhrKhaS_5{H77(x1ZkuT;Oh;>x(>5eNJ4$ z72VCC~USrg!nm zFSdlh@TGd zapE&i4x=v}K*vM$b-YQG)btB|$$ZXA?<2do@dsvBGe00PNqL=2?18s>yOZhhS1X-N z++VGAM2Enr7iym61}Bw@DT>rEglU{*>z+q}0bE9oLt+ZETwU=3%KJ{k#LS|Mbx-ar z-s37lrW`6vRuu1(xfij&Fr;86nUn+W15|_fi!_z>Q>6Nlf{f^3^5#8nei@X|n}QEL LZvuBb`;Yzs4^Y4y literal 1983 zcmb7EOK%%h6#j1f7~7d9j?;uk!Xxy7<0hFVZFtmaAWdm&aMDtTfGJd(*d|Onp0UPb zQrNLUY>_kt=bn4ccfNDacjwQ)e|rqz zJZ`5jj=YAY1TH49oWL6iyqUxpRy15nA%VQytV-*$wBAZ#1XtwtY6{m-kjvW|-jVL2 zT-M~WuHm|d8v?0{Yq#pox>>IYjNU5VF+Vd6+jO>#lJ8m0c3wbhcy9Hw=?csjD{kGe z>2^%VXto+PuWovGYrau6UBjw3Y(vJjD!%191#X!glb)tPCV+1FmThd-D!%LSFj=w) z<+nT*U;0RY2Ui!RHT@W~v?VDab$X5~+ z4T1lhATYRH^KZI4t8UBjRgVRMA^KL;_&V+s9h;`zs;w|)JX$gMk7%o~Rs`z_F5VR_?Bu4Rt}34_#rkKrCa~1Ms0-;sG9|RdQQirFO+q z*Dl8u-rby(nT{9mqConv;ze)HtVHc$4y|7!ocFV#t41}8e6 z!qWoA|J0|BXYj0!cX3n41SWNqu%Y8UY-)I4#|N0vQO1V?r~Bd_7_5$4GXEpFe2fiB zqF>$-dJ;G(Z{nWO+~ET=f{2x^rtg^*UyWgnlBV89KCztYifzkD1y4=jc(ya@gYPTO znJI0C=LetmsD$c1q>hkJXM1GRnd_18!RUHQ^4&G9FZjwLEG%$HB3%XYREmg?CZ-tj zC)06ZivO^2{`n#pkTazchBoir> zqnT)_9LvN?<#;Au+J%;TghcrvlDkMfP)ILv9b!GXMv*3B1}C`F13a9>DefqOu+{}~ zlC|_)?pLJtFt`i7i3bOdnRx?{UB-C=cF|>(2wBaB`DZ)%apr4}4`-k1 z$&QEFb1;}Cd-{d7qWmt(>JxiN|ACS9$@@smvc2|X^ao{S+LN)s8f{O;1M7HOw3!%D zRC7qt&T$BHY|@}8&Qb*P9QXo@o@3kRd9q0BRYfQl6b&zCk@54Y-9={1la$V!b3}|V y6C6(TFN|qeOeT{IdxbCo|2#wG{50A9#DZkhdwCao#-N4OG`yy&3B0c2FZ=_>W55^y diff --git a/Supermarket/bin/com/lingnan/supermarket/table/StorageRecordTM.class b/Supermarket/bin/com/lingnan/supermarket/table/StorageRecordTM.class index e59a6458296375522849f21d32396def39438f15..902a22653fbdd69077b02a3e8ee574ba4ec9f67e 100644 GIT binary patch literal 2048 zcmb7FOH&+G6#g#r=wY}#G6B>uMuLREU}!QS9sOi4<-1D8scfP*-_21*C z00xkgP{VLiv+}ZO6mkW%AQwwZx}8_;Te>4V>Vm1uieuSoPM_5^%g)YCNeD7@-c)a^ zD{^s}P`=y9Lea5R&6yLRDJ!d+3{lN8OZmdIn%5Z)U!4>v*;EOmI5t63456Yuu38KO zlLu9iRV~@bFPU<&x{x$k2;Q*ASY(KKNlK1k%JaHL5b~;33~J6P*;K~G7aWETPVHEG z+fNNswE8_c8G2s<&mdXTrTl_!S4!Q>M|j967|t+5pu1@$05WdyvES9 zpT-E@pdNRA{$cCx>eju@2-+C<_Wis6Jo$e6;l{IvYZ1IjmaWxqw(fuZ@9z&>pSKtq zcmDWpXYI#cdF#$&dY_Eo7(;k_wfyYPy;?B5%@IOa!f}S=t4}A2PPB+H-5e4kly1@} z=w9=#NCX3xrkeArZ3xl$#-MYsXz6~LpM)`no&%?{ zU$~;B366R+L@|mh9Pc4blAr{0H~g7Ykx?y4f&74@5lsR)#W5|A5khL?szcfw#fKap z31f(i>8!9Q9CN}VI-Xe3wUXyJ&+&;MC`@J&LKGQXmGBwEq34oL7aTpO+Z>iy}$xZ{HH3XgX z4AU8X)$}|}yBwhzy-y`J(VU1pL2D)udtJ!{V@H%sC>B>T;n-0nBgNX4b#x?tLuY0a zUF$gU3xR6TL(dq3^sJ+2J&se7ep)BU!o9%g#XGd4E5DNT0wG0Go=B|W#0L7-k$fI6 zN~gdPiqcjUhgaeZ;0&Qf@kx4%I1vhy+`!;ZwDxKeO#*p6@D@;cs+e~UVQSB?iC?QSN^@la(m zQ;vr#o7r+)dV~fK^YO3vw9LwsBH$7|NCX3YL~)YnIgO+A-?WRG>BS)J&f*;XUBY=x z(2X#K6lO7mYZ!LhX!lC>+n}QH1^om`*YPF&YM|0uLa2*#-be=v(EL7AbSNewQB@sn aNl{NV$yeO?t)5FIzJ#nBpFwy17yk#wMdq3S delta 1106 zcmZ8gO-~b16g_V`of+C!3KbBc0*WFnltL9y5Jf&j{6M9O)-Noj5)9G=S~YH}E@VZ} zOpruf5EmK~V@g7cK>^psU*Osz>|Gk;eJxbtqW7Kq?mOq+bDMdX^V=Hz`e$(&zyS=I zP=pp0M>HJO(5m5>hBgiDS=fON6`dwzp+zLe1?m#$gbCd^DZ(igr^U?~6LQca&{=`b ziEv(oUJ<+|T);&YeJU<7m;#}Z$lPcf(<9P&9)o!(814<-YY#<6!wiN>N4Fj{H0s~v z#{(SuP|1*U+ke;Z9`TP3xxL}B;n5+6thEoXlatfQsRahUs!#q{dbK)}Sf81vG&%hw zsXzMp`FW~pU0Zp%HvhKDot#*t)5V~yPRG_KrZ|dW*XyMEQjVP{;kXPRM=8owT;aHi zT8?YD&fw5^&x2LlmtsZi1r zxuZXo^YnLec@(>7-$nE%8X*ZUge2i4b&?M-dLiz1(~qVn3^6-Jg=(}~iVn&Gq`>H` zb1r~6wIxVCgU#Ue$u`;RGun(^pJG$IKGmjrj*%kpUBT$zT5PTsd-YLY_mj7ovwy>29+k^eYaYTvsom>mw{lbT( zI05Sy@;WlM-;|bj9M5{ zYi^+Rf);6oNAFQxQL&z~^avaC(J=H?*QZ?dqk)iwMtY^fSiw2BQsE#D2?KQ5OhvJ4 fmAYxg9?@s(_PSF33(`+A`YM`I`V7rVig5TZAh5I4 diff --git a/Supermarket/bin/com/lingnan/supermarket/table/StorageTableModel.class b/Supermarket/bin/com/lingnan/supermarket/table/StorageTableModel.class index e0b4d571ad365434e54dc85b8f98c8d993a625c6..2a7bf8cba23551d7c534ee2cc7cf7b735b24192d 100644 GIT binary patch literal 2419 zcma)8-%}e^6#gy=*(EF#(gL-lmR6`ClrA8&mLLk$+9=T4t<D)}gmO|A(BA#Yom)2hYLJH8u} zjB3exE^o-()=fLQWhQA!-qn0(fgw_Yb{*Z2r?fP2ro$RVr=%R$rr<-{42E_O=UDRj za-_sCL4}5NQ+I|L0$iX0{o&y^--&3YqldQ(e|~aH#6g;G-dWrD^hXhg81_6^|9a#87aO-f-u(H? zja#cVU^pzH8X*DC{7>I@sa6ciZ0# zI@ffn@b2AlcGd}1Eub0(58Ex_IAn&#tZrsT3}dT}4Eti8+gg+0G54sR$2zCN7{EyZCn(!pMfIO9OL!iqNR6|aQ&MZ0SEXEeG6@Moc!8mwCsUcp(b#r< z?~oe<%QHN2E)2EA>4LR5X1S*02{0MP7+w}|`jO}=WG~?iMo6Fw`b|=OJ-Lo~SJ3wk z)5er)xY`IoHOG=kpP-lIxtTe-Ith;cnuKvoP&Be) z!4BQ^bf!y~SCWQO8Q!;p}JNn2_@ubC9EdnfO0fIfZ7cN%#K?|S?ltHg#UwIIRa zMc|T9+VU$#ZlAq6KdYS)pdkWQbtMckF~h` zJcmkP^pq=>Yp1m{xd1a26^a~CQbHuEq{PV6$_m=zYdDfx zMf(am?s%Zj(ilOI#(EkX&_$~gG>_4aRDwq*;FFpia54{o-MpE zodPXHdw&IvRL1GUbL7oaIO`=1qR(-bG#OO~HsR}&P5S;*R6|BTEt5?eYJ-&a4{M*(a_wK0h4wb#nB1v96r@tsC zUe7F#-de<~zhPi9`W3|PA|?yb;IcRCFGQ=CQA>NT-^0a1G*nt#_7=i2qHCB=(dpaw zFtZAcX4i_CFTyHB#geJbO<92=1-#q_sXL%f@y|vBWHg}%2hfW{=tDbI{22Xt>80y% ziuyZ@lek2W_f=YDknl2!mspo8n}v((UcItdq*)aqU&azuJAfM$sScsP(IjA?Mv@M4 osocbSehCs}%q1Z30=D*Xj+ONvspzCojwj%KFCN1Op8bda0^v73%m4rY literal 2338 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 SC!^HMDOhsL3EXt^jeh{F`w12R delta 1153 zcmZuvOHWf#5dKc@ZSSQV9<6}YRs@t+d9=1DC@2CVii(daQhXLDwOAp6>OxJb?pzqH z*SIj6xG>R$Ath1>qQng@T=*{#{S6v*&b>_`#x|Mr&77HUzL|4B+m>yKFTdX}0cgTi zE1c+1(5a$IMVE>LD!Nr1%)w^#C^%$A4myN$SV6B9+;EPF$kALJL!Us$1v+8HNt_ZU zAo5NNb4HkcVa^IOpdhGVkYOg~VcLCDR2!9A9?L~qtK6*l%wCClXhY_K9*!E+G8B%5 zZiGCs(0IfXh)+hxBMg?6M-NtCrv!MOT6uAYfq%dIWcA(Rx2Fp$A0ATt$Gz#*=@||e zwrI@cS2;?tm7zLW=t%x4=;SCvIY$+$6`bQZj|&_X*v4@YmlRy)2*J-Wgkg>mggHhL z;kY79RG2YDh}D^_aU{EHS)(9bD$%@Bz4k^LbQprK$D=V%e|R`PG07lLMQ?_++j6P) zN-opB%H;_LYa|@+7#W!iPfZz4*Ti@{G#qD8>8ATyC>ldK?bS(7WQIwMLdYZr(NCH{ zKS?(jw(Gc(?rA8(3dLxBWZmT5A_hihhkG8(t$swp6qM{zASm1AK+tSA2Z9#6B@k5X zN+1o@y@;IPJgjNt666H)(#Us9X%x)ped@@T5GPOo88%d+2wsY`lHPiXa-$m>&`2JG zC#$556q1qz(Ya@lyMRK5G;C|MR!RU3nMY%;QRQc;yx2hmVyGTSdTxQvRJQ=T>3>ue z$fxZHsuCkzP$kF};>8jf{eAFfSbe$=TEZ-BbJ*~f@=Oo|Tj&Nf$eJoOtEwqm@6FU( zs9s(Ax4JP?Ju0Xy+47y(m1)0B&1AZ37ww&MDEb86=XwUUVGhM9m;6#kB`KHLKpRso zi-8;|mtvqzDV8D%33b{}r8yz=x((7yL!w7BeI`OgJ6Z^t=*j%pP1}&LhoT(jUno}4 unnORzYs21*z*fo?FQkb1oIcTL{d#)WZCcUW6;lR%j{Ed}jQWX!{eJ-myr@C| diff --git a/Supermarket/bin/com/lingnan/supermarket/table/UserTableModel.class b/Supermarket/bin/com/lingnan/supermarket/table/UserTableModel.class index ac589efee51c1e10cb3f91e624eb46021dd2f61a..90a0b4ec4997464b4a3a61b7e0dc926a828cb8d0 100644 GIT binary patch literal 2470 zcma)6TW=d>5It)<-nFwyQ>RU7(55X3p=o--G)_a@B$#sB*xPhldpE4t zN#PA4@rI}bFCbOw3*rT-Mj{CXQSr?GCduyZF*VHn5&rC>6+ZmA$%aw_$zJz-Q$1>M)jg;%y>(5K+JbRAOAUMG6NbQi4>ZPMdg zrBXH=nMhzt&yZDCpyU*^35c44gpXhMtV(vqEP0Mgt60HeSzg^G`rsym;jQC&e!QU( zf<%Wc+ww*fgj4Am1(7il5l0x^I<}!p#ZCoX8*9@L)9@U9AFqD%`14f_dxZSp(o z){qqPw_iNI`8m3AD*fQl0g|E$EtWCab?@e)odQ0XkR3U;K@o7y!b${5tq4xOgwKXh$5SqD>F z=2%{9V|qs9^si*W&Jn+6eZ<-Ar0ba6rocN+#f(v@o1=v4N#$|@U2?sy&fVey3<>nt zbzH$XqtRZ$&eYTFR7@!7+p<#uhjHXFspAbyap#DZyiwcvpsX(bQ$*=W>ico z*uK6N!Jj&2MOm6<`{@hRqK>z4-RDQN!*6SI0$MMIFn>qKyKCl?My%euGfKDf#zL?~f+%sQA|#%-s)J9zjs8*G(2wR>jQXHFp#`Vzmds05 zg;Bc&IqL`Zm>?JZ+=(!+c?2PGE+~b>#>-#syZq(C(5geqoxB3v0Ce$tJ2i{+QusTZ zSw$k#75xP}is3|0p%_W*Diqriy9>o=qPI{~6MG9qEwQh#jQ-5e*k4@5!DSrEgqM-} zULt4s-9t1mQiKr>6Mqm1u3QIY$Q&34M{txco|a|~!^~Oa(3#2nfI|!@-5 zFR(kXs|BgEiF6ugf@&_43t_uWA{~B+v!SO!?M5f|NT?p)Jb(f?ws2&2r3 z=)Eh*{fhiV=I9Epu7J%*CBKFyUX5hrzLefV34+Zth2zjilzQ zt%lMdbXXQM!s3B6`;;Ni$Iy!``gk=D;siAVeDOx}a~7va(ICcfnz!W)CaIZbmqm{= zeyUA6XHnq{3X*0~r4%Ci6-jXzHnkmy{*68r`B*Hbi@|i7tYrh%+E{mLBWa^8q_wq> zwh)l!uqLq;=@!!RVkXuYY|?kcm(~MxO2-RK^dgrlCj<5QV9m19L0LNX%3{R$egHQJ kKEyIZ46ZU>fA4@`xOH5nC8R%iY7hb5Hfr{yQ8N|vTp7P^EE)N#VK3y1 zo@?0)g9D`RSG`BO_Ktfl^Qq z7Z7y?X&=AgS=IcES@s;4Udf_GEU)1bec%a)p^fu-e!jtBf+U74+wz7LMEkQd3Sy&9 zg>c>DmTgWpYICN0*_f;HBt7nwjp~fyT4Em@#=L75t2?}5Do;4e=48YK!K+LfHL6tw z>d6mWTk^NJe?x@I<6>oXf(`|{{@a`EFPPpXXL;0V*q-c;bawG z=qqI_kK0m&T1oi0)K$@GxMlNgwZ&??E(_f2=)+DOyRciu zoQ^UoI`&|%4iob#7Ia+0aUB+}E9l!0JD8}B8>p(N>99qRgGC+hi^Ua7U7UGn=vcy{ zf`c2OJxyT>_6T-v=IhJ6Zh7BjWUlVHM%io8sbK#`sOzpIwMxZ`VJO(r9}MuHm$7@^ zvMYh0eaC_SBkCuvE#>Bqwhf+Ys#_mY4^gT~!8#3vG8NJ*P;mjbtr}D|KOBUa5Au zw`viQQ`a2Z#7@4)JNTf-5D}uJ6%itnztoxhrNp3MpS1TQNt<_oYmO%_;N(l%nZqu@pw3o*s-U`L(osfE-P zA|1htj2E4pMO6BBOQZw$u_^L2sC_JNzl7T6y9ZD}H;&>Zf+_rWJRX1^m3u&Ab=|Aj z{0$RD*cy=F7cjO}lol2>5XK(~;uDNdK3E@ptSvebM!$?#g6w}VmmqXjWba)?`e*b^ z<_@i5%PO{#_{^8k#IBi%-Idn1W+v`i+nbq$Z#~n@sCUspzh}S4bIpwAANMwuCZVIU znPD~$oZy^>IkD5|C7XRXN8Ow!w_}{w1WB31tC*t4MU3)qe+-woo53_nvW=WyYDniS zy?0BJX7L)W2+_wR#Ze40TPG5KqEE$8GMUtcC{Ki}IO+02Wr0<|_wGwp6K$C^eQ*JexsLuxr+sX!Q>AZGAFG9YrE<5UwCQ=sbWMjrQoFWAN?CK(;hGY diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/CreateOrder.class b/Supermarket/bin/com/lingnan/supermarket/utils/CreateOrder.class index 1c9a168c81732b9103026ec0596eda5273fcc683..5a3c7d2804cc1839ec81734e2dc0519e5a0b9376 100644 GIT binary patch literal 2557 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 diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/DateUtil.class b/Supermarket/bin/com/lingnan/supermarket/utils/DateUtil.class index 1c6928379dbe0c947444d85eaaee3c3455ddea48..ea304574d7196097c2bc34a4396ae05faa309730 100644 GIT binary patch delta 453 zcmYjNO-lk%6g_W7XLM5YBdyHJO7c4kqJ=~RMFb%&qM)Ve5Q-m=8nnsZAoB}awXKap zL8~C>U$hVU2ibY!rnflv-FwbG@4ow^eQVy&--Biq@TEi6ZO6HuB4JpP7I2->0D7WiY5nRtUZ4f0baf;}f2pGN0 z-0)$V71?ajOq#}C;lCX95iI4hA8-Xjk8os%2J?GqW-HJdvX@Ely#8^g|{JrZ}C#3py`b0z83;YYv@i=-hCyJeMXwNkxqRI8P4 zx6<$H$RMjDhx{;@+Yt!2%^S1aF?-GO(M7v)X$gc}YGAcGFFmaQ diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/EmailTest.class b/Supermarket/bin/com/lingnan/supermarket/utils/EmailTest.class index 41a0d5c22ad85618801683cbebdd2fa09b1cc754..531b4ec262ccd28cd5999d160f9eadf119871068 100644 GIT binary patch delta 293 zcmbQjGKEFp)W2Q(7#J8#7$n&lm>3zHSD9OyvD`sa9nrzCb z&dkmrGC77(Vd7GS`r!Q1qU2P!%$!t420qu^#LS$K)Z!97kVOoN3_xRn4q;$m0`2{@+d9< delta 266 zcmZXNJrBWP5Xb*l?elmk>YYWHybWE9ViB{=C@C7LP!f$8BtAn^U&JIa_yE3;O`KXJ zF1eTg-Tm&)>RIhPUbj1dE-GFql9pW^#}d~^&gOsL?y*rX?DS+fecewRtj=& DkZvEO diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/FontUtil.class b/Supermarket/bin/com/lingnan/supermarket/utils/FontUtil.class index 8c89bca68252e5a7150952e2fe37619de98cbd1c..dc6c887799b25cdde4003535b825fc86aeec46ce 100644 GIT binary patch literal 691 zcma)($xh=y5QhKG;yA`3A*^AB9fE@dzRZniE=Wj75geF_#IfVFz~BWrZMbmeDR>FQ z0kMb&;5~Sa(Nwn+A#V84_5a;n)nAq0|2@9}_ywng97EHKLpSiF(}+jzAiWex$dd~p z-BkL)z}=4{`Il4)1%}!=zv6Ddqf_^&cP>21V1^<})g^{%M<4TRsk3(JFdc{_JG2rJ z`cXeK=2;wyOqM0@1w(DNJp%FNZ-%_n>M|7e;=U-M%24@I+QbBd@$vNfad&HB9FsPt zFil(SVfw6-v1rs|nNWMX2M4Wg84R;FiZGOF*eGS{hYd4R3pUD`TC!omP;L27T z&X264Pk)YVUE9Tbs+YqutuwlM8C805k>1-T)y4!-s~aE&8p)8vrO0Tnxb=wD&k}~- TG<1r(s#;yghE8tMn#1OQg$Iaa literal 683 zcma)3%TC)+5Ir{}j^j8b4X=h$9(_<#sr7~(Q8$&4kRrMOBC))2uHb@wT{+k7AM`8w z6IBK3ed({6EA$M2dH7Ag#eojTMRE5 zUNO9G;!P9V0)D1Uxt|*=Fh9JIUu7)6*_Z=+lq{#JsFFdUGHoUm@z3*2Rc_15ar)qU z18ubZC@>f8j0EbR@`>WM+Ni@a8>`}&YXy44Jdx>07Ml4(ux`)wR3I8Ac^0SIoEd52 zY57GJnJg}qjZ3T3sZ(}B9;+K9RObc;M|oK!YF~5v4lCoD54=x^9u_G0Xg2}x_V>Tr zAKy9qHbjU{h$js53|)q&=m>28pBjO#>z_(<7JnXJsD$ph5>*Fv!6RGHPJ0IjJ0on- z1GMSA8tC(6^7=g7S(@)GNpO}_kgb8Ph6Tb!Vli1kw(;%?;-^b55qd7@VVV4}D!>Y! z5%X!l>}N}3`5XR4?X)*n@Aj`y|AoekE;{Nxrp+0RT-Kk_o}(?+Aix@yUH2B9v5j?- Q{+_%6ol;Hf7=Aty-DI1Ah} zsTcNFlv@uosO?O9RWJIJdQtm)Up8SyJMB2K@AsbH=RM@lzkm4+z)5%-S_JxwZaG`B zomIzlvejC}^2(;SX8GBgZb^Z)GuFqLqOp_6W4CTE2ScU2|Ew+?Ps+0)|An7&@h!<)z~AR{A=+ zuuns`K z_z+Gy4&tzZBQOMZjwl4;5a=_o13RVgsDWeXCmtnMD9|0m+!i3cs3V1phBT8^aiqe` zMgeGYFcO0yLha@}!vae?he2%jM+KTHH%(5kL>_3cEH`zx`BJ_m;4Y3&F z@-b>4E+4vlj2qAq(=jRWxF~RBTW1Tdf6=Wu%S~{IOWt;@Lan@Hc?;%JiMb^6ZqY0) znw~A+0W)E5fy0TZcYj+a1O&}PvaKd?@cTj&qsn(t zp-f6g1cx~o{ym#(n9BdZou+?HE{*Fr0$q)5sjio@lEwArwB&T$z)cNba=R6HQaqtr zKW#eZs^uBDg|C=t;HhpVF#UlJhAIwrzXGel{QKTUXuHb^&V~ z4Kk4;Zf>pQ&s%;jr0$!(RkoZkF9bk(F@Yty8byvm6N09r1S~0B2@Bb@y2k|WNuk~7 z+PhT=#Jxs7ya`(wHJvm2c(vi|9hGJXs_4aLyPD(nZX~HRuTIuQTaI*V<5;^57f=y`$O z=jhFB;-d`==La`2ka>esd=K$mIL`M5`lrcjuk&JxH}v~<4xJ=F-o&S`aQcR%bEIEj zM3Uzed0vti6gjqmm<%=Xj5T!1Ysy2I!Vt3j+liw%&0I$?igCURn8S5`Z{ZPsLQ1=jh_3#oNrlg|8`>6*Bs?M!Pt1`6h_>hfJRRNBKoUGf=RQMi_dLw*4-GKq41Yc*cHUi(laNR_!2eWME9Qs+DY*VHl oisP}y7lWdNvhp|p2QESCqlQd4q7sfHs>kz8S%O=kK?~OZ0q9aSdjJ3c literal 2461 zcma)8TXWM^5dIE!kS!|-F}YDn2mwOkgqYHnOA}}yfdEk)z~rq5T&;^aa99fOe*R>qGxRe@gpM`kf>B0)@7d@j0tKyWj5F{Z`6vfBpC~fDdq2 z#}G~>k-}-YEXd`IjC)5>=~KyXW~Ofz30H>jcN?H8y^k26JA? z7U(t|*Ur@|E4E*-R?5_*O|NK`FI&DNpCe^FxaBaDF|+7ZvSo&FEjL@MGsTMK-?jsl zTrGQU{^Z;xrpW}fRXdpTTvuRVY&^`ccBh<`D!Ujso=Y3Sa09Kg`~~yWmqoi8op$B} zt9X0Ks;V4VdV!8&*{jiMcC6)f(XQ3YLEa9gTRM6McExtvb#0O5{gZyfPoTHu*+Qd9 ztpW3jNei5PDmL#U(AR=#3&tkQ6j?G=`^d!cvS*ju?>Z8?svgdj*|VG%oc8K&sof~$ zxYc^V7TZ>(8BId9)YBR)(oDk&>BRK%UfnO+rybeY&PI2pB%KWG#i)T@7%{M0E_*Pd zp=h84+V&~N$%eHz#lTIBYFIUJQ0})hI0B>pj}jWz4BQ6!+Pzjtl$RS-`KVUF| zFd;?46SW3&$KOzn=&G-=nXjob!wU>XF0Y--K~6D7^j7?eY+d= zj8is317tA4rz9q^pBm|W12J{hyN*rkh^-_39377rGaJyv;|QUXSTTi}W@z9DI&lmc5bV*S8f`tQs9ie%;m5&{#HCSD*ZFiC0h1$2Q& zNaXf2{u32`h&5=0&#)rE8G@Xpw8#`pe(rJ@ zwkZ`NDMmlp%^BLI@GXwfH>BHPBwsR=(3lmM*#-WV!~Mid+Q#I8h7;;A{s)Ao;pCqL L6PP2!Cd~g0(n~oy diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/SendQQMailUtil.class b/Supermarket/bin/com/lingnan/supermarket/utils/SendQQMailUtil.class index 2dfd88d9a55359927d1088a254c5bf33b7673b36..d906483c94d03ea60c32c582a2828ce299283131 100644 GIT binary patch delta 1437 zcmY*ZZBtuS5PoiwoBP6{mOxr=irNMWB@kj;&^DA-#A>Ofv;^BytM(Eu5X>97H!b*< zszt3<1&{AqU+Wh~$FU zFE?iC@S={P3PB0pZLP;NNZ80A!!MA*psb)x4C)HHnL%4Yw=(DgZ9$`gu!Qwf<{2}V zHnS74#H{UD8HOforMS7GBO!Rmb*FN%BZXAfNoY>NGBe!@TKLbNP*6py1UcbkoE{y` zXcINH^NVu5F4PW&7;fV=@@`k%!LSpZ{Gc2j)Nwm@DY!#I?b`Tmc!u3*m!RZD%5+vi zw}d+PT+vCTsghjYDmW?2))7aYioHDK4UxQ4g3r!4d11bbp$~WS%X05Y757M3moZc6 z4&m*X%-N2L0}`rSb$YrZnaij+xaLqkS8#M3!eIpi5^DZ$Qh(O5CaeO(Adc|AqkAi|}{;j{Un!yG!?HL}F5azv#$S{R73}-RJqsl;+P#!OYsCzYNde zdH$=?>1KR^;YD2Jel<$!dA!W<3g-DvwWmg?uQG5k?s77nv-w%+AAZ5Jxg>%0XR}tJ zFKybkWlN|YvXZHM%E~&!vw4e#oCcZJOom5n2O*Ex4Oh};xRUn5m9!NkCHhr?(Yb2U z{3O?5Jp$xdrd`s>b|X?jZKQ1x8zQClMbt;4iwH#w-y#|!hP;Sdu3+;LnnwcLDu}d~ z5iMhT8C^?=k5sTH?l=5_p1{5`dXE#@AGmiF_18$hT*ZB>+R;E_72W?IIvyBVv0cRj zab*eSNXbwtNXAt|UBdWCOpZRFr^%KA8&n3~%Ed!gEOCUA#wh&*KCx;eDcS c84dV=3ehOgM|8`BkMRjfol@kf=*!Ul1sPi|*#H0l literal 2735 zcmb_eTXPd-7=AWQyPIV>r9cT#%b`FU+C)VWTTlxYsk9VGI8;R4Cfjylvm16dP{gyM zcs}6ytmut*GB#ykbjCZ!8^%k2fH(Rd9G`EqmTj9GXPi#o@BQBIJ)g3_{(bEy0C(V9 z6nIDtnLJgVR^1-gP!1qBsF7&69Gv|?Pwgo-wpDo)~50v1XFvjuPjC=2e>DqMKt z>I~Wn^zg{ve3CY2e`WZcI>GpUw=ewpo-YX%V^Gm)2Iq&qBbivh_ zH+{<>#h>)|m;!6sVcMpDkAxE)^ELcml+GjcWw%qLy~Ts3ZS1dvq`?{Bi1~_ zk7PwHyAEZ1)1a~ywQz)F_P`9CLb7Lgp6S>UmIW-6S&=O&52%8nL{uNAv$Gh6YE&{L zd{?)c5?ba~e^Jq2>JVpMVDn1tQTawso^cWE#n;x@8Nw7AK*g`AK`+Aj|KPypUU`5 z!{_)y!`+Ggw_aKEl`d}BrLs|WKr*NF%R+? z-KrSFV;t0ufv8l-L4T8x42MgA{XK5@1GeYuc7g5M6*@I%dU|UL=Pi(y8v7i&s8iHd z*tWq!3bq)Bah71%481~dZN$k?u>FuxFw3T4`}uQaI=OJpT^q1%!`*G^9v7a3SbkW- z`sl{1tA`0$$gMh~i;_LFys9sCJgPYAxJqTYO4##Uy?)-9WSKSQcV=5kSQ)lbojn@t zt+{k2t>7>`F-V)k;zWN8BOMd|JO)!jqkWbYjjg4lv##r6!*M=lY7}-r=toHItt%=l zH5M$#Gq8?d6QccMv z$)!~!j}mK6E(@{cOQqkgVnujsNv;gB)C{&Nxw=NXiZwm7(mIlor*TV5Na&&WZD!~_}ijFEe zQ;90l-v`OqMmUBP;Y!4LCa{X1TdUEGHN3U*L#hqinchCE$3ASpVYH)wjVNIg&SEov z`8sit$-l(3UuMd$@%Qs*ru7$W!wpLQjvoAhUi^t2xGS&~q?s>w^TvepJ;PE6OcX2@ zV4`FV0VawT4=_=-M*8s`we3I?troBo_durYW4IUhv4l71bsu&yirtiHqPF|dPq>G- S7#_g8JXKn=_~Ca6iGKh!73fg_ diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/Test.class b/Supermarket/bin/com/lingnan/supermarket/utils/Test.class index 689a24db436c570205e2b258e9616ae68cf4f625..66917e8177547d99e4ce14f3d1dfea6caa4c9507 100644 GIT binary patch literal 512 zcmah_%SyvQ6g`u+c^PeOeLqoLRKaHBuEmYuDyY!X{WKlw)I3Tu5&SG&D7f$g{3!8G zS`a~S7-l&4o^$Tw^XvTszy%I17!1c@8vBtpCn9Zf~380=n1La8npD(%xDL-i^h3kMFCEV#cU{ij@s*n@{h`R_R}H@#kJHW z9KE`ZZW~9Sp=sxU0UI@#ge^kng!OS=U^iD@(Re0cV1r(_OqoQtuvtbyBI;=&_3396 cubsVN`$wkJpjuku%?a4W9wCN(dJPx~O5*K@%+-YcAHYVPVt47DKHsmDCpu<#uPpP`OMd zf}tKrC9d;$EYcw#M}#zkB;?VEr_$8lU`5}_jNv2*lh}`>nkugRET4-s=IOoAey(Md z`9qQE9)sNviBk-72T7iW;z}B8$Mm~1{=hw0uq|wR*ugFdG|wiqx)%04?Bjsp`2R@^ z4ddlUTuuF(@l1sJ7c_Xxw20}!NluORpdib{zfGmm1Dy&U(`8$Kzzo*hkRnC8_Ci=p zAr(Eo*BRjmRr+cZB@i7p?G9BwWk$Jr_6qh?v|ZY31z5%soxKHt@-kI6R(`~%WM;y7 ZMyXkTLB$v_7z4Lx)re{lQYWN@#uuhJZZ7}; diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/TimeAndOrder.class b/Supermarket/bin/com/lingnan/supermarket/utils/TimeAndOrder.class index 61597cc8f7069b773aa33e1ead7f35c6137f8297..c181e5b15406777c5807f08737d7a1efb974eee5 100644 GIT binary patch literal 1792 zcma)6ZBrXn7(Ev@*(6;H<+W)M`$7vzNEfkI8`@f+B9R1YgD6(5OLoD@{PS4#rHpZ3O0=$#}XK-_;thCG6Gxf+b@;yd%GbpTlxQp z76i0zgaXqul~aJVFkoW~x#wr!skqeBOYEv*Sl~*OAhdoA^_uM-IMx#*v{rob5~eUJ zFnq*cv05#f=C#$;lIxZljSPk`F5A5j^&v~py3@{6S%Nvg=Mc18eW~mjm_lZUV2;?WTG1yZemJ6Wq{;_Nqd}S7jzuL zZ4J|y;kE5XJqb*;0Y^C_w|0@}mfIw%$ae^f{GJ(}>AM-^kd{kP!yV|X?vb~$M^z{@ z@P6VA-S8ZG?wwPiYFb$ z;%5QdzQje;plx_+y1Tv>%Mhr4P-_`tPP`6fW`4PF)J^6QJ z8C(Z(^5X`s1cM}3l{=kJ!Dk|WjMVQm`jFu&k3okET(#JN&$qZs<01z5hQZ=76G`u1 z6Mtc_a)P1lp^;;ZRU<1)YyBmzmXz77(!%u?Zj}VN@`Xe%(O6jFV!*9 zh5i%FZRcNN{uuX0Q!RXuO}4Nwnx@slqgp}9CTf3Rsn9>)!m2bBX%v1VmKcADC_(fI zq8=dbEccVNavZF?ob-nnrrJiZfid_PM~KV#iC(|pYSi;?+!v}?XPyLprsq?3J%A&8 zhG(pjWn7I`KlAQm6Q4t2_7~Vv(b;kV?lLJq5i*_grg;%Sd#tOMNOdXu=O*wHP1?4~39d1guwqeKm! a4n(M_cAiSCee~?ZcSI=VV9=)zJFfvUKcKn* delta 933 zcmZuvOHUI~6#nkK?sS*}f&~g<#TU>A1q75Lf}luk2ax*07a46KkapU@KxBo98@FT< ze}yJKl42yfabw)LajpNvc-K)K zh{vV=b_VVgp1NtrWl(z3y=ex`u2d+{)8&5emlWA$(A{!v%76Ogb~fEYi9s%JQF18j zcUmha7f276;tO_ZjG_5IZfaT)K}82$2+;z?k->zvWW#hz(wos+jqdJ)y(J`}ovh}2 zIXVcNwFn$TC*1-#jtF@un@vKYO#?5~Pmr<)ke8a2eW;d?G(vM9z*9;*tW=>_5lE?t zzfe1Xv9yo66c6)8ql%0U0!fNgvnqu-` z70m)D0>s`B85+R*s!r?*>MJ#RI6(r?ka&)hI7Q?eu!GY$L$P6$ah8xwW38hbJv34; zmg(uD_#ygLqJ%VzBZC;?;F!S_66k}Dd5n^PeI!W${TQf;f^Dj$fQlX$s$_gEj*=Ex y(!z?xYf8)|4ynGHAL6$ET%CKY=|Z5&TnY?1O9?UC2`>g zxbY*{`U7r^b8+cS=A60b+?h=7Br!>3K7QWb0kp8AL5Z$Ky{I83knOp*Zlmw|SBrjy~kb)kbHWj-a4MZ&*@1;{HU{S+@fW?vJ7+Aux zfI4t}fqYw<-#3E0F6~d+ZpZ5%NX4pwB1%zCF`X0yDh4zpb*y1sgDEigUuIwfo6(VC zhF_fr0pr+bu*1F^1YUqDJyar2Kw7aX1k-YoCTp3$x_L-veZk zPF_stbhG}d;-|Rjs=dDG?r0Pu$qR6vV}FQb2uCu z9Gmjmkxz}RIEte1=CBvUaTqgrEooQfPcs>_c9~;KU>ZWeMMa>BZGki_4o{$ly3Ew_ z40boT4g6jZUHB*MZrJI|Q-`_Ic1sNURS+>0TFP?o$9I=xI&KB+uy>F=GN;Ip`#(y) zne%`KUChCdqJnyrP@|%AsFNY(6RX*j_YU?l8P5=!lV%gMq?MHnu#qEX$fH20miy2r zag_nI0d(&b#_k(Moslrkhc*n=viUPoo<4+;jJ3wT3IQr8Vvb_wN$X%P!2(GQi&!Ey P=)Zw1l|?3#7)bpAL^D8J diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/tplbTest.class b/Supermarket/bin/com/lingnan/supermarket/utils/tplbTest.class index 8eb35e4c77c618a047486b782fc968f19e596399..1dc293694d40bc148b9f06a596d06bba67ffd065 100644 GIT binary patch literal 2209 zcma)7+fx%)9R8Nv(^V4?M8$eRF;Ha%yildJiee-2Qc1C>y=;<0T-@y9?gkWR`rQ66 zeJRWYr)c}uhtBl1Z+-7uU;5nXcg_YAGjztxa?bDk?stCs_otr$oW+X-x-<-x-I`%r zPSr6T!>=z3uV#8rL}1hd%l3_6*)A1@A0!af(7j}?n9mGPGDRq2bSv;EI$yA@H9lF77e+=yV<&=A+l^b8uk|6GFUK6!X`0l)vCUR{)cao z^EI<7@@3Z{hgQ&VSW*AiD{>{L$_(5JKBm3g@H`byyA_d!h8`Vzk5$5iKj$PQTVNbzw#O->mB)pyX?IRX5uYR1VOpBYNFBdKcxa!Suyb%B6Du<3*1fWrv1EJi+TOCGGGlC; zyu-aYZJWL?d>o~#5&p#xMN%#yZttYrGV12Ishg9-J5I_TWXPT6>rcMr@B1xi3!CWP zK<^gz5!%0j1DWJ&3@k*pcyzzNi6e6hQ3VewIHuqe3XUuIq=FL)9#(Kt!5=6%6Ed9+ zA0d|^9~&6k!US!e+rarB=}Z?Ud0tfRb~A_`wnHxtq7Nt8krU|0W$ec+4&Xkq74F5S zID{AE`Ii5*z9aQRr3DOkuXqFZctsnSZ`nJhbjx#)bvVudPT&}Z zFwEf2AcqTtw%t$3?rVBbWp$HVJRwgCHfl|y(h+Gi@eKQ5dLN_?64VSxua;jfMy|)4Jb;YF;N7wx}pJsLCs}Y4(s6T44Ik5ORDmo z|B^fesun9~@|K5G465boc3d&;0h!Pd@`Vhi}qo#Z)W0 zF>T^{n)qV@c>y;B+!Rnq;g;YT0k=i_P8z-VM2@p5%n4^cjW&ELU_sb-1$>smqTs0% z?#Tt>`z9WwaR{HA_`<}OCcZLZn^-bYG_fp(R0=C;42p8efR*<=6->Hz7^=`fB3g5o z3}g#MznpU&ujJWYF08Dnplk<^RFtbkjvMAgYhH!XMFa6Q+cVHrShd&fC%N!3@8oV2 z>?P$=m~hG^TJ5{PN1QL)C6zDw9yN@Dfn!>lvmZw}wXVDX-nBheog&jz8olV4y&DJ^GQNfBIl+`k` z%r;MRN>bJa4Q6oU|C9`vmx}C)E=79IuLMOk?MUJWUUg(d`e5N*j9SQIh_(Oy#joH0 z^~=jYHVAgV79PT}u!=_(T$C+%@GY$2YnE|OGp7T)tSkfwEkvR-jJGXRux{Zoo)~D~ zt*wh^VFWn|;;Dsa63KZ17cgqz^y>}Q{uuN?8R*{aYG;fXLKxYRQ+%*g;yXIBx>geJ z&OX7I2=?*LHsPIX!W(bGJKuzNp$Tt7coyEl8E)3=lJ#$!tC^<86^Mt3u~lZM72Fd&2D& zi(E2U&{^dYud8|AK<_T=lYV*4_g+nPA8%Y!D|W?=CS5;NxA`&A*STR??I}%-1t)a$ z3QNdW{ff6NE6Y%7!Nl!luF!CECykY9cs4MQ%{K&1zbleYl9LleIKdBND>$A=z?8+| z*V~jq*O;Btm{U#MLOt#m;TTUjVuLt2yanS&5;2^uD*+k)0syO~fN^cMRkopi*+rak zU}6KYj(8ObVxx*AQG4t~d;EA6Eu<+))g&fSOBHFNL=|s{KSTRF$#4OI1N=n{q93Pt zI!%vnG1x4ZZ-@zU1?!$mNb0E0Y{1HlWyac#zxh^ifR@Rs;^5tFv@N#B|J*=k3+*?D ztLSK?*Td`JmS>p%VeMd)^F6kcZkF;1yhoi@ypM}@r*f8BrJkenIl3C=4(d8g5l*wb z*LTcN6_@aVzIGWO*3FFb91~u{fb;~I(HDDa!g{&I<43qcXyWQl`ajT(Jl}1jdvOar zn}}_rmsH;->tVjcp~d(%LC4`O^v^9OG<`(VNlhQsbc?3n)O1SI$24tf`naYuHKh}^ xLrv?X95ykqjY0Z6wTVollN}sEpaW@iqKjksEt862lDrtMv74a8V29-~{{^zN{PX|- diff --git a/Supermarket/bin/com/lingnan/supermarket/view/Demo4$1.class b/Supermarket/bin/com/lingnan/supermarket/view/Demo4$1.class index 191fa02df3daec48f1b264c93a4943a90405f2a4..2c1c9b3e576ad5b65194c79c209f49c84bb2d819 100644 GIT binary patch delta 411 zcmZWl%Syvg6r7v1O&hNowLa>jt+A~dt0~frx^$%!U5g7%C5WX2F-6_^1tK9o&|k3l z02kugbw5J<2yt#*dST9)^BRWRPxVvQ=g-?afI8LfmGZTcC=A6P3Rbw$iR#aYSI01I)h0}8<>heM7b(4gPeeV=>-DWhSIrp!1n?-z&eK7{}P delta 396 zcmW+yyH3ME5S+7(FEJNzNWwb=Oo+h*IYOj?k_r?=O$83J5RtJEj(`U74JTK0{6ZoE z5(OUsZN35t@dt>#6gxB8ot-`1&>Wie&%gH%06W;Sz_FOc0?G=OvM^Dxu#6QBhhvqa zDz6;*)X0m2I1X?2qaaDbgrU}wc2)j1(;s$P;aC$GhY+a26y zyA#|7eiXzP{&Bk#o_FPu!yIWlWd{8^h#874Wx4m0yGt@1wt{vT?WGUQNqel6elh0} z4SF93Lxu|K2BAhp$ElMeE^Nl3SvfLv543aEi9D|aijR=L2v$P z_)?e&PSN(Q51r|2-}>ISzVx}%-#HrzWayY#&iT&oeCNA=AHV(k)6W2g@gj;k4P7~> zXcR0vZ=1H^l{SQ1G~Fk{H#RM?WlV{pGaN-&L*u%+X+AT&EwUPSW?Zu+Ff;q^#P$rtF%-mUOvn2;q2Xl4vc+7fm=*4#nJoxLH{;~Y!jkD)@~pr( zLTHjD^w?tFqn_|(F~z{dwf+A3*O!0)^5%~nE{8vv#!q$JlmU+M#iHdGRBk7AOkr9> z1Hp{>+$s6YS|tOrd;{#RX|tSM=0OU&t>ZJK1Jw)GHm$5rrPIOPtd0!sYS1ZfUU=4a z;6^z0Ah^G$<32uTmZd(rCfj0O6u57SMMp#HA>ETsal^6MJ{7$SIu`K-z2w^|v1XPE z{$#=N#67mB62zdSDt0XE_)^*tC-0KwSt^(j9@t8Z#gA|JcIqhcat;(ti<{6$}F7X#dE(IXWhgkknHhD^haUbmi=5I_3$B z(Nsh0zHrwZw21Z1=RBaWtB(%wlLi-noE@8Ch^jZcfZtvb^JJl=jPTv1ZaX zhvQ_y^gQ9=JnaneuO4B<&PNcJ`Ut**4rGyg7*kxsyEo$+P_Zun%oz4~@HM z-bX8`)4Mp6h`mAkN@$-;;|F^Tr$gb!BcNooHe$G~+BxuS?06Yd7=ILkBLP3m4H# z=dL1!F;Z{MZ;+)|u^`XvO7pMmFfoIP!KC&NzcLE9mxt y7_!2Jr=IyJRm6<&Tqm)rfFSI1>S0T8SqZz;xQQ*Ub$F&8KF2n9*^EQn`TGymQ1J8s literal 2122 zcmah~TT@e46#h;w}Z++-YU;7*S)|Wna`mLRmfRonDnYGqlYwdN}`&&D|{{7=m07mgm0&z^o z(SaEg*AwI)3&{z&A>^izdw&=KPuI*;al?~;WZ2yr8vYU?D%1)`0H#%-0ykWZr+Vku7ru{fu-lBi@ zM&4dlMH(YcX^j!P?;kSfO7@z{6+D+7M&7_lZOz(SK~`-lH^^Qs1diwCopPX97`<91 z9M=i1Fk5C|kzpsj6=k3`@3?BVQd(C2g1ua%CY|>Rc5%`69a-0vk>H`jB4T9~)H-XS zq^phwPD%L&+76YsAWA8|WIJrFGgGTRTeR8QeBiUgab1P&OLJ{a%&g7UJ={_Ls^^!~ z3cJiSZ*y8&)&UK6aQy$A444xI-iSVm#JpGW3u?xZ#uNHFhU5|~oX4<*3!Oy}&I2P9N$U+e%3obkh8~B=Mc<3f)e7mG9_$XTl#AguiSg2sr!WJGI zNFDUnCud;@St;U)g{M-=M{+_M`%mce!im)dCy+bt zr~~L#9LDLAx1V^Gz(CIdkkxdzY?ssKYkOKy-y2X|roKp}(+btfRnHy*HR4j9v6PS}4;Jt65C4mMRitkt*Jhe1^`~%W?ssef$sTM-R?$ zb(R_5X0aI#*#H~lsMRyCA*!o7w+$;fk{n4HfAOp0O-81wiX(UT(7Kcg|FMnaE>brK zt4KH6>*RKDnv?ARm`*TEY>(`>o1y(O-lI<(?_<24RMv7tV*Y4vDT2K<)&X)f+o&#`o3 zcM#e`7p3kUo`?AoN0-8TBt*o&J7Hoa+Hm#;pal=@H%c=X}ASPXjfGo-L8)h|~!bzR*~>v}dFR%?z+ ziFY>R>5{IDc)Vvq;Y7`5oFp@K#d@U!{i%y31D*2tK=~E2tk~#6o^@%_$j*4!2=5#f zn|Z~Mv3VRON8iNg)^^m0TOL({v|yFfE!8+vc%Rzscz?4MB}tqxB_x(a4_c-cF7SOb zirh@4A5UKM*^lU~;sy)%6oTLQw;5(w_FlojDQ{#qc%*-XqGZKeM!O8BSZ5hU7~E0# z!&oOxN}68z#cc3Z4!NCsrcK4SuWrkd* z@yTM&qM95Yr#Tf4x|{8G>uBR3isM$SsBI4$Dq<6+{*`ns+(&y5T?=sJV%OZ6b zhhB@oC8Uw``NIltKl&L32T^-3*xuc5HGd?ZORAE1m2rhxt$kHEQM1{K<8mVm6{}Uz zsiaRTKlI)Sb!Yvh^TjBn9b+^-H%c9fGQN$X2SeT{+TeM5F3EJIp8@H560J$z#rX5r zDE}YEWfwCjHYXVP#gN$iE7LHel4(xOrexe}%fid~q3Z*`>ea{BIIu zcCN|lif3J5`=(@C(L^ie$%_3g{*S!jgc_&RIs0#dfVT+(#+eZ1Lie_+3&o^_22%w- RNRW|#gb_K8pe*sSo&nUhL!AHs diff --git a/Supermarket/bin/com/lingnan/supermarket/view/HomeView.class b/Supermarket/bin/com/lingnan/supermarket/view/HomeView.class index 4bdddef729f2beb82c505bfbf3200e3ab83e41fb..00180d704101ac3eed62fa625ee2e7be2310e17a 100644 GIT binary patch literal 4569 zcmb_fX?RrC8GcVfn8|RdNtC4o#f4=uAj96405+h&Ktj;OKm?07Gna5-=FW8HPC^7* zTcv8O3tMR`wgr`F1;K<&C=ux*mD)|a+SS@>3flHpfBLk2&$)Mo8A8M#o#)A%JKz1z zx1INU&zIN!bMj>XbMP+@iUcNw+w`r$R6DhUD^}~45%plWz|~S7)Z6W#(Pmh7uqJGqajVu$*@k5#1&R~8C2&=3 z!S-6c#fVl54CBk0&N9ncW(y48yfmrDj6s`}l$%QJM6^W(Fi1s7sp4sA4aM|U+9*?w zReVY!otm-Ml)%_^1u?0&p>W)yhEI=1L)Pk~8K#AD$3j$R-bXQ*88Hy#M0&{DJ zI-`gl51P~oy7~=9vW+g}Hd@i*X*J*E&D{;H-@2vlh(L%9c21*Qy@YXKf7&h#OG8>N})0s;S! zsTJ(1cD&8da4oL$(eEq`voVKwN*Q*o-of+*DxL5ZUL0ASZV^aHclSIE8b-?9pVaUv znT1y-F1tkFidxe$R;6PtMzT?FiK_FBhxKTao;2leS2)bxWDPK#N)LG2V^l{g zygQg&oHnDxqZg}~W6IWTGra!XsTT%z9a%rahm}|@PvTZucZ-*|m1UC}4H_D8J7JW<-Rff?P^j-c$S_Ybkjlzm|<=%t-nWL949ACV?CLq02OltV{%( zHEfYEDq&rdwggs8gM~QTLyxdfM7KH)*?UXku|(V=$yU2b6bgO#EK(kja|1)QQQ9`6 zsh|wD#)>F*&|u3Fc{=JMQY@j+rePc^J=iKRdniL6!aY8;JGk7YVLYz(;2wcFm$h>V z^6_E2W9VKD*I-1|kYWsn?}KJM$lJiO2{c2G5yHEPkazk! z2lhRqE)&K63neP|N<4q%B0Sf(Y&OEVbIog@Y)|;`RearpuL)eK!YTBp;R)G*9(u9t zsO80zq>P+*Cg-^K;+q1a9r?M_PnzJOf*p7?vj0E^00skdxuAo}bDYn?HlA7u|fHZ-q7zQJqyuWi1`o zFaq9EWN^ZRK7q+YVbf`rrE$x?oo%DxJ2*)$*~FlvOwxU>Go^quvIs9}IE9xT26411 z@)}sFN&5J%dyLsyxnqJC-zWX%hwn}nPVrCU6CnNjaw#QoGwwl2HFFi*|#2`iq7)B-sk8kH2twgRIMeCgqyVAJJT+9t;$)f+Hq2 z^l;cnr6$f0Soo2Ll7c#~$PUI?Qyh+KKC-C~8EBm%Ej8s(GBP{YPnY#2nT9M*>Pw<} zDrKZ_9qUxgzY-2*MRKsXT%vRuZa` z6SHdlxYGB@i$=ZYMWI&mJXgpOjo-r=2ak^56ZtEFVe|-04D?}AK=i^N=trQLzozvf z7!VoE3{36CTnaw%BK3+epWoLo2VepBRxyk1jAJ3aE~1~CXt@T}d^_5)ORa_cMGq=3 zK`BQ($9vI9+M##xKAkRV?!%{hQ4=_hn&RT}5|oP#87v8uc}`(jFG9r&x)|JXgev>7 zthpa6n=9)2P+ytBZ52%!tj%CuA2u}HFGOXT=fHp8ly;=8N4NaR=LdSw*^Mu& z0Cq8eZtTcl54~rwFDu`#yUUd-UFiAN1l3OL``d!K-pDA2zPM=%q4$nLmRc%VM9AyCjH; z6^J?sLtr^Cju639N8qf2AN5$lwE?$6$8CgX181p5+=C_#DQh@Bti?Xufv2zzN3kBS zau|IJ8-x#ciMi0lN=}-Mh=@BmOm0N0*vhf76Q(8XJ(X18$L`)cz)@K3JtP7845=YI*11cCqn literal 4621 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 diff --git a/Supermarket/bin/com/lingnan/supermarket/view/InView$MyItemListener.class b/Supermarket/bin/com/lingnan/supermarket/view/InView$MyItemListener.class index 998ea75c96504fe4d01ce6476907d576c8f8d9d8..6214395b9756c19ba0b433665a8862c85a24f3d7 100644 GIT binary patch literal 1410 zcma)6OHUI~7(KTXrVInr0`d|cP_!+SLBuEcqJq{GSfE`PT}-D}7?@76odT{6i8~i2 zCjI~;Ta6aNg0S{)7*u@6u+{k8X$_!~bTN14o_oLVJNG;1&YNGWYXJHYmEdCN)6*%{ zG^|NWv(#*EmS<90W`^79oWbYSs1>J|fAoIT=Bb#GwYkMJ65I^lX>CqZP0gBA#}m_B zwxNcTeiA0jG@AwGP3?&hR#?CRR<_w(69{q0z)8BQbaJ$;Etq|yb=u6 z3M6=Bl%ZBZCA|bImrC%=4J~1E245_#Yi3-_7-C)o-GVGbe<_9kY7jB^ z8q}}}TeEp&ih9J83~hnff4Va)`ZN%X%V=;R#Q}!ONp4T1a~YkO*9U@y zq&tKdkZ_QpL1bA_v-2dadOea(CDKFb1sQEPtl)^qQ!DatlceKGp_7D;U9wKt8H)9w zlXTcvT-toFB%>Y26a)|?h~LX;CN-#`c&wcag12OJAuOSrp`!$;74$%5@MyZuvyMZ8 zr3oGl#yvPrJ=s`(xv}_cWA(8IC&YAZ@z3;RarM!Ycln2c)@cQ2aCW;Ig_mltsE8j> zFo^Tynhek8Ondz9h+!p#)H&*gJ3y2e7-`e8x7-XaJ;BiE?D$6{vX4jCY|Tth5;xxt zfeVt*dNtM4XGXQzqFLpFAw~>g=c>Z3?GX-OP@)#y*@&rSvz!Rl?7qun1-cjXl!JM_ z;=<6s!A0{*$TU_te+m~NfE?<24JEXUnitNVeKc0k9^fr}G%C)wj5^fQjEsT(#SB{% z?FSlH*!69w=skW)wx0yYT*6}zl1gk?R9ltS|29Vg%Mn( Mx9BD#_gn+}4Vb)h{{R30 literal 1434 zcma)6OHUI~6#j0hoiYrx)`IwcfwqM*fcOFhrHU2{EHG$Xc{^NTa5{tS6m)G!+_^9@ z@dp^)YP1*@gtdRe;QJNh!i~mrr$oR<(#4#6&+DG=obTRw@pEAjKo`zeBZP#CFj`c! zBB`KFg&(?t_8>Y`1kkDCAi9D$6vW{mj!5mO6vq^FE9g;hoFU*&nuVrzhUSdnA23NcfD9ZvB4NL~%kvuZBLHWT=;pziMkZC7t0vYZ8mgbC2HMdZeKrDFvrBoWTG? z_453a<+%sT3wPyyac*@__B;1pm2PV|i*p*%7-Z)85Gtuk1mjG&A- z(C;7&hK*q1u)HGlm++AuMLo#|(t1hv(W)j|o`EIi;d|`GY$h3?7~mxuNj8+Dum#&m zqj>K$dI#8nohxU3rx-u^rdvv=T7rM5wS)~z2n;79N(sUH2qm6^RXs=b#fRuiM$}cK zzidn-BQ>kW4P|3}GNO4#O{NE=QEue-9JM9XNyJreP@&_s2bsX`t6KhUgT bzk&nN=tlC#$m&BJ+h|oOGerN?tzf?ZxKMV> diff --git a/Supermarket/bin/com/lingnan/supermarket/view/InView.class b/Supermarket/bin/com/lingnan/supermarket/view/InView.class index c6d8d2280514e980bbebd96d6b71129a6b188284..9f4f7db72c8f528d9f5c6beacba47084770cb206 100644 GIT binary patch literal 14216 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 RZTdCF08X2T4(zXp{~HPyMFju= diff --git a/Supermarket/bin/com/lingnan/supermarket/view/LoginView.class b/Supermarket/bin/com/lingnan/supermarket/view/LoginView.class index 0265a993edaac2e40cfa132b2b45ae475e46a62a..94cca87abd4cf488a92d7b9809fbb265a7c699d4 100644 GIT binary patch literal 4459 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 diff --git a/Supermarket/bin/com/lingnan/supermarket/view/Nimbus.class b/Supermarket/bin/com/lingnan/supermarket/view/Nimbus.class index 841691534ed7186cddc180927e513390620d1312..e288a9bb56c00a8953c09429a486e6e195692f45 100644 GIT binary patch delta 377 zcmYL_J4*vW6ot=Zce4*S4-=!&_)4LeAZ+2IiD)5$B4XhKtYlo5uu(Q4E}BlTvvW!3 zAFxiNVqvfU#6KaP)u;?}?;OtDZw_;--Ds)z&zDyKizw?zbl1e}vJO=s+mM&iIhR4* z**$4^ZYYpk@dH0x6;S3XhXU$)^VGATz_g(u8P$#z1KH?fVa7rZLpt&Tg_zQDF0OoX z4z_k=AnRV+Mgha!J5gD(P{f#yQGxvbdmA0sYlVI@uu(!%Ak%95LAV!6_iVo{T`#(y zkKRhxD1%WL9Z2xR2&_7l!!Fph>JyCKw{5Y;HlSjF)&9A_o}x05{u@5(52tgPXAC~T w*seZeq}RW1Ft37`ma7pJk7|@Ap((Ckv`KFq6Z9v!`LCNgiYggXlnG3K0l+FZg#Z8m delta 385 zcmYLF%SyvQ6g@Y|bds1pY;AqicR_3wve2F4Mg&Df#K%r#8be8ywA7&8iSAsMeuOI* z-Ke)z3_&fM-36@>#6R_Al2Br)w^2D5}*U0o~pQiU~ltL^#C zC}@NZ=9rdTSR!Qp+xykJ??r@s47J^>n}9XPJ9{crHNVv@QTdjTZnlCjI*gQeanw?t z&rS(`b-XlCJf5S?mCKnpi^>bA*KZGTO!Pqm4&R+00+L8^Wg-11J{^ctS?v}2Bh1~( wGeqxTATaq~bi{TAh`v;?naOi4Mw7gM?JZ_zFwC4R9|>(+B4@D82$vf2-#>^q6aWAK diff --git a/Supermarket/bin/com/lingnan/supermarket/view/OutView.class b/Supermarket/bin/com/lingnan/supermarket/view/OutView.class index c4c0a8f699fa7fb54a244d5bf1572be1e2d36386..28cc97598359272bd4fa5f9f59634e133fd69bfd 100644 GIT binary patch literal 9882 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 literal 9884 zcmbta33yahvaY)6q;Hy=1X{L$D5z)%OF~3P!=ey~1QI|J2mxH0%Yp*=OwoC&w1qksNjptG({-L9N`)ZT>O51r zBL!aU3qG;H%K?n$v3*l zXW7x?;ssnTHmHz=vz%O!G_A2_b@<>i4oe@G!Y&81$erw3|GTf`(!MTMG8uB)l=giNbnVfswF?^@`s z4F!U?SR@vB%5RFGggjoK>ZgS~3w&mAc`)Gf30bD}_VUE0Ad?=b3zf)%4oXx|V02p$ zfc(|AglTc3LbEc&)IAO|(_6I=pj5TZ0)J(|)?-?GKn_#Vgu2Q~GstvNVR@iB%Llvp zJ^rlPx*9WB?FrswhO#O`fh-G4bZ7Mns%v2G;a#us1hTxqu@?$D7V}~zw^Bk@UC8Up znr)UtiI_+(_JVDwE{N@4(E(vh*KA^+-YjP@R2$@SCH44Dmjd60uCt8Nx1kda%L_ zT9DMBSzG4|O|P{0;$T_($ntq`%8NrmIL&BTZx@=nQY^bgp*SS`!EvcN_Fa`q-d1>9+>` zj(!hmJ0>MC7R3GZA5cn^RK72;#3qFKJqA4{^X-@0ku>?_f!!@@H@B>7l0AHC(Bt$3 zQ}1@1qIt=ngY=}$D4HCtbY$-&0xhWaRG9_k0c5Y9rD=zs`yaaY=v7+jl`AMl4} zp=WSCKWgxP#+Fl~D#;7@0zu*Vn8APhsX(aULQOa2c>26 z-7OoJx7Dw0JJg(O@DYC6;G^6uy=M>#hP5thKGEESnPdE{03pEh{DMI*5)ANbMLb>= zb~$71_o)t=k^;w?Yk)53d0C%0Ef5SX#EH&B2osqSaYjQ64SI+Ez?9LI$3)Mg9hwdL z6MUb44L$LTqQ-=lRZwzr>-JqI4?Nj&Y_mb1;4Jb>GB@NWsYar(!7s}KSM-cs4M{<{ zb=#V=1dED}HHSg3(5p`VPlI3KR}KCRzi^h#of(zIqOTd$A{%&}o0$fkJlJ$<*_sna zo;Y!2nQZa7ttWTg-@3J-b<@+Wo1Z+jdY!>4;{w;ErIzw@hmT5#+8t6QNL!Ahg zBF68K5YAxE)T8yGgDva#wcNAw)Wdtd6(^1yh34C~th6)_jkT^@-?kUP_AWcUMx{4Y zqz3<<-!k}Zeg|RMBGY=$`j&fl$Tr{xHmqgup_2`d7}QE1JNaFM-{bdjUf?bg#-R+b zlv-!3lRq%{IDN`=$r-Y??s%ka+kKWbPafRY)_nJg=XSL&KZuZsVe4J1qK3vM#v0Tn zPW2RjXwYxyH79>$@E=A0y;@g1D*J1AqHWFolgIV}xoto8=fZh8wR*#;-P?1q*_Ksz zrMPU>G#zehUf0&V@ni!6Ws=o#GVJ*Yzu@FQ8T={#+2FtMUkyINEvO8;G*GnAH0Wi5 zKeggKa+{pllX6B+@n=r{+~6<7Z~L}xI(VY_AxoDjF)xO628IngPB!d0ar7vLgW7f- zXgRRu)UstQtB?8dyBryFg+v16M(x%Pzq%&iSEXJ|p1eQ=h``nHX!lLz>>+Pb;0Y?DQBe#Pfd*}J0EVN#08?!L*it! z%6B_ALBrju6o)*yAgjv&E->f9)IYIgJTAFGuhfR;WW?j5r1FU2+KCa-$609Vp@1bB z(tbOF_H_ek5~{H8X30UbI-2!Ax*kUX zny@O@Gi8XDyiTA*@fwiZVzQrx?MG~45= zGslBgZ+LOM4x{Wwcgm!L7Dso4h#-n@Ucg`J4Mr~&V>)%9xb-&gIEZb4f+28>?i0oFIH$s4Bh%@v9oXi4+8WmT2BU7W~g2f^?>*8V+Yw_3gokA2ovH zLwOzbs`f7t7N0m6%EVglt?=uCUBz5^ACX4`>+DERUaJs8x>{h>-6h^?b3EKqZZC)n z?T43ic4|AlyrmZS!7&8ywkb{NWNDoFtOFSbulLOVJ6eqBV{cs=<W#bd`@8btNfjhG�i?;D5U=!_-2GIGi=Aq5mr^aRa;n7*OtmPuRg2QD5}NHLAAJVs1|j)YH^uRE$V*N;u4_Rm+Thhh#I5P zRV_*;?B#XUe*^o#Jy`W|6;>^-&#FbGk5&inyYwEu?_+c)CEzd7kjy6H%x2Qcnkb=> z9Ox#Zn-nG|X7tRVjg*`@tdU%Y6sZsJJ&&CDP9O)3qcqB+el!uVNpvCQQwCi_$1yw5 zB2FLDM;L*P5{^|*#MAH>cXvw|$5cu}j}k5e_ikmj1WjZ#Qi=^pEps$cngVqPs7IOG z-9+a!Qcnzem38mgM7U_0oAb&X);`#&ZehToryMGp@E6|ZahWknx#Ccr8?naB7_2w~D*=g_wx&z$ zc80)gEl9s4j)gjA%A;ptM*hvP)M5=LS_%U=#XUPrrJ3mEx#!ruS?)6FVPkV+2lHzh zg9A2|+*Cw^X&U9wbh?VJrDB>%^YC3rC3GvzqV-ftduR?dQ5mAgT-@yE(f{CwFDG5c z{potXkZ$0iw16+Aavn_;oJS^4#SdV`RK@ei%T=_9Yw0Gw6F(8%N7eiw`FRi3@Iktn zoALYCD^$zx&|?0SmhhMOmFpY2oqwb|v{d@J)|c+o2GKGto9@!`Xr;E8R%t6}wYHh= z(e~3C?HJvwy-fFMZ_@qRaayaj&^qljtxs^!hJ+rpDWN}YP8duNCS=jW38QF>3O0rn zJnUe@@(^JK7OF*Q1|;FYQKj z+k;5Am$K=Rm;f{~Dgd5JYyrZQs3PHM$2Qa_Dz`-a3Z0 z?1+IPhOt{^sMv-thqy#XVVGu;*SMa@s{QeXHyK&A1aDvS@i}@}0ZyTp9W;)rsdA7Za<$&{lx7=%B_d2%p2K7L$ zOh+moh&Szg4ZZ^b=30`Uoo;6;7<$B z=5t<4^2zQ+=m7bqvpZkhfwB)yf4{ejA*R0#JjgnSRZ_u;4?z)_FGQ9q;^ zC>Q3VFsOhPd^pD;#HQP^v6XPp`{AOo(qe7YdDq&`n~Iv|B%M;u`x$+1DI+lnr9~2o zy!Uawd^mj7jpT=Y0!0vPz_5KJxePh0W?JU(Fx`wnCV>4B#U#rlH&N}h;c&kY;(1-Y zwh6Fdn9oByHcX4h4bXOyE7QH?2rWG%umRZWEzi@fxsGPKO;Jd9xNmQwJ8~1#6G7+a z7M()ijsTsyGw9sekq*SRQrR+CB^@LtyO-mGfZ$${aD-M~p4cmK3#zyV^2_Wh$4*Mi zbl>e>;W$F8>&eJ;-=h#$E6)5j5VOJAh2ffdei6eQ496U%dn1hQ19^bw!TjJ7ru$_8 zva+PEp4ZE83$L*VtiWg#2*`?fjjZjslQB!CruB`q z0lf`j`sEf%WA{dDH~1ejNHvybHdz9LhC~_nW?MZEh%)9-)VF9YQtT zk&uH{7Nk2I(v|5jJzSa~>cm*s?WS=e!-igoVcPOMZEd7&7^=ngs%>G~4iK7OSh}Ld zt$rFM!Z#=d{)zPeFS?PwB@ca10s4WK(T{XD6Wz;9YdL{7vxByCBJJiRdK4wXeom$) zcF}R}MxU@jpK}VG<}`$$9_-*===H|mK71bcib6pzs+@>tD_et@siYWZqyF^|{waK5&WCu;||Ks(G+v}bs#_Bi!w^Nlp+XM|- zv&U&Dbo&SVr>-i>wPtxaXiH9YXmTU^yUc1%+6LYKgB*MszagF$9@;YqeX1uRDiYGr z`v#W5Q;7Botn)2G+IO(+XzKYL4R+G^=YL22`Cl|tn(wK|Nk6du4Tz=Yq*ycA!+xOI Vu+@*i%Ks-_s$~(Zi9Z_izX6lvY19A! diff --git a/Supermarket/bin/com/lingnan/supermarket/view/ProdCatalogView$MyItemListener.class b/Supermarket/bin/com/lingnan/supermarket/view/ProdCatalogView$MyItemListener.class index d5cd8dd71da6457f5b2e4347f29d2b7c5c234ea0..b0708803c0f4ad02ed2b376d81f5950a2b950648 100644 GIT binary patch delta 943 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 KwyktY9n{-g$?m-X literal 5711 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 KTfGn$LA?&SUK-~B diff --git a/Supermarket/bin/com/lingnan/supermarket/view/StorageView.class b/Supermarket/bin/com/lingnan/supermarket/view/StorageView.class index fdfbfccfad374f25f736cd0204bb072ca6ab0dd8..ad745bfc0bc78ceeee61a1fccd711bcdd3606523 100644 GIT binary patch literal 6592 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 literal 6612 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 F{s;7mXsQ4J delta 658 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 literal 5675 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 diff --git a/Supermarket/bin/com/lingnan/supermarket/view/base/BaseView.class b/Supermarket/bin/com/lingnan/supermarket/view/base/BaseView.class index 0f912c16d67207c65867595cc19889ba8ceebc51..03d26cf15e99db5c12d4bdf0ec7ac7258968c8b2 100644 GIT binary patch literal 1916 zcmbVNQBxaL6#g!3vPoD<8-XIw0QwV|{H8XF|7HjrvXXO^(SO0r>gH>Kkb z@WmG$eQ@kced?Q|Go7^KgTD6%_z$%8KRAxx-3=iQW$H+Vn{)Sk_nhxL=j_eXzkmJ( zz%)Kq(I%jmsuiPbJDZN_7+!71ax130ZTZGs+uAkOP0upsxfHomp$H^DHSe1D3~!f5 zjHRq=RxE+&tnJwToWSvPF1IWZM%kpl;Jbun#)|^VLUqGRpdE1y5hMiK)8oYi1T+nu zI3f`9EPuuJ%M90(eo+hwKC0muk^(Bh1^Y8%Bg`lRb)#2B4-r9jbJsUks@3wg?Q1xW zK7nJKmcM9yV%Exj!y(X}9uE_>z%w#bzlH$}3Uu;Nq2yYY6DI3zJ+Nq3EXT8}P9~0% z7*;XVsE#4SHN6@}kRs1rd&A!n5IKoHrD0S)jc!@?=9Vv|y{;jRan^x3Z--cxC?{QS zXqb?$I9=D92PQQbvKAez#d5V|`lKS!XEdCZ1&+y{$iB&k(;CiWMj%0O(e~_hS!X4E zC+xwS8s5T1fj)X0MOr9VJ?kdNA&4unEVDq@vh7$mYL#`%T`_|oNtwG`G+kTn8xIwK z%k~5&mjC;7WvEXwZfH+PTZ)xMi}>MSBoEGoz{MBN+@YB_{Hn3)S#BoKqts{$q+SkZ z3A}CF5g1Fq92~@st_JUuoabC)&|2S$7~Y}eXFq)Z?90!8|LWTq^4vcE_5Slm4}mxUH^|>AJS%hRzQUIK8cglNk!tnp?86wj8I z4G^Uj309T6r%-4EOZsEP^wV{8=mUdwbUncJ|N3`Y=07e7bQ&nsgTN&35S8NFEKg^)uZW{I2& zncxyF`L{$wifpBIg;rZ&UBx_=^kYiC%8Wf4d{WdTbuDm}x_+Z4#_#N*x}y8KRJ|v< zr%P?o6=-Vzm!>f)0q-LPgS1Xi(@Am}B8OpWIz^tNxQ4Mn&#jO_Q%|<3C)?DMMW}~N zS&M6oE3GV*MHqJ?&=_UR5&oy3DvG>LfZ+RWVg;_Vexc?sSRvWt5s@GG4)Nqt{vmn? zlm|4IX?6@m9w3^$k)QaHp!T3eses}X51wK1&qBjFHfWknIZuHz6m}tyG8_hON*Tes zq$7B42=B2WZMeml{6+Z-nuiwnnOL_~;)jrZQD2RN_*E_w>;aNr6}?= zA&^igZp#gSOF-lWlIncJmYd2D^`#%acL*OZcf+XI7QMH8fh*4>awMD$ziO^}wmXpz zxYno&^grL7b@8^PBM?_m6%Bz%M&%gHJU=>kEVdfdMIfEY4;`*On^S8zhYBAtk;@-{+mWC_ zEr%NSRzg*K=raL_fTyDLWU!xF=8l4XlC}oUxpLLBm${1#ca4Kr)cW{+NbySp#2`2- zCn!(y^cWf~z(V#1i0rvKTCzQ->WKUZt&Zp;#KyHfRUeOL(^|HU_(rsxj#5cbsUu0P zHA{CR8>{2k_srIU7b&wyQl|LAF(lB&-*I%K9RujV1UfNI9P>nyCz5V@PK8L&gHt>a z6JEk;;#ArhYAu1*i#|l?KdL60xd-^;SR)$nI@{p&D{tcT&mGAtw$Dq?rek}&^aH#C zPLY3b8YB}Cp+<}e;%no}-9$HlUUE8%8EV%t81T6jB53l-HTmS4d~%Fae2A2hgUqY6 zR{}oW7!Ekbc+(ef)HO}5D-ir==_~Lmy~198$_lAWePXHSYa}|_mL8(3M|(i^IMvpk z=mW$$+LwmEqf;bkQGWn&l!512{0lH}kqsJSQ!bI*bISPBd}RMJNLhVT_DsJ GT>Kk)! 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 826a686744015333919702289c73ebc131b47318 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 20:50:39 +0800 Subject: [PATCH 14/20] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=87=B3=EF=BC=9Abranc?= =?UTF-8?q?h=5Fzyx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dialog/ChangeStatusDialog.java | 2 + .../supermarket/dialog/ChangeSumDialog.java | 62 +++++++++--------- .../lingnan/supermarket/dialog/InDialog.java | 4 +- .../supermarket/dialog/ProductionDialog.java | 4 +- .../lingnan/supermarket/table/InRecordTM.java | 2 + .../supermarket/table/ProdCatalogTM.java | 2 + .../supermarket/table/StorageRecordTM.java | 2 + .../supermarket/table/StorageTableModel.java | 2 + .../supermarket/table/SupplierTableModel.java | 4 +- .../com/lingnan/supermarket/view/InView.java | 4 +- .../lingnan/supermarket/view/MainView.java | 64 ++++++++++++------- 11 files changed, 92 insertions(+), 60 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java index 7e6235f..a5c06d8 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java @@ -122,6 +122,7 @@ public class ChangeStatusDialog extends JDialog implements ActionListener{ // String catalog1 = (String) cb.getSelectedItem(); // 获取下拉框选中的项 if (catalog1.equals("已入库")) { // 如果选中项为"已入库" catalog = 1; // 将分类标识设置为1 + } else if (catalog1.equals("待入库")) { // 如果选中项为"待入库" catalog = 2; // 将分类标识设置为2 @@ -130,6 +131,7 @@ public class ChangeStatusDialog extends JDialog implements ActionListener{ // } + } } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java index 6476689..df38fed 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java @@ -75,26 +75,26 @@ public class ChangeSumDialog extends JDialog implements ActionListener{ // 定 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("取消"); @@ -102,13 +102,13 @@ public class ChangeSumDialog extends JDialog implements ActionListener{ // 定 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; } @@ -117,13 +117,13 @@ public class ChangeSumDialog extends JDialog implements ActionListener{ // 定 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; @@ -133,27 +133,27 @@ public class ChangeSumDialog extends JDialog implements ActionListener{ // 定 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) {/*记录有这条数据*/ @@ -161,25 +161,25 @@ public class ChangeSumDialog extends JDialog implements ActionListener{ // 定 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/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java index 04f10a5..97acc56 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java @@ -18,6 +18,7 @@ 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; // 导入缓冲区服务实现类 @@ -73,6 +74,7 @@ public class InDialog extends JDialog implements ActionListener{ // 定义一个 + } @@ -137,7 +139,7 @@ public class InDialog extends JDialog implements ActionListener{ // 定义一个 catalog=select; // 更新分类信息为选中项的值 } - + } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java index d2ea00f..0d200c9 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java @@ -270,7 +270,7 @@ id2Panel.add(id2TF);*/ supplierInf.setAddress(address); supplierInf.setContact(contact); supplierInf.setId(this.supplierInf.getId()); - + int result = supplierInfService.updateSupplierInf(supplierInf); if(result==1){ JOptionPane.showMessageDialog(this, "更新成功", "提示", @@ -315,6 +315,6 @@ id2Panel.add(id2TF);*/ } } - + } } diff --git a/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java b/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java index 820425f..8ed625b 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java @@ -88,6 +88,8 @@ public class InRecordTM extends AbstractTableModel{ // 定义一个类,继承 return columnName[column]; // 返回columnName数组中指定索引的值 } + + } diff --git a/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java b/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java index 5552622..54531ce 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java @@ -64,6 +64,8 @@ public class ProdCatalogTM extends AbstractTableModel{ // 定义一个类,继 return columnName[column]; // 返回指定列的列名 } + + } diff --git a/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java b/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java index 987cae5..4261b6b 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java @@ -65,6 +65,7 @@ public class StorageRecordTM extends AbstractTableModel{ // 定义一个类, + @Override public String getColumnName(int column) { // 重写getColumnName方法,返回指定列的列名 return columnName[column]; // 返回columnName数组中指定索引的值 @@ -72,4 +73,5 @@ public class StorageRecordTM extends AbstractTableModel{ // 定义一个类, + } diff --git a/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java b/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java index 43f6f91..4cd9d76 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java @@ -69,6 +69,8 @@ public class StorageTableModel extends AbstractTableModel{ // 定义一个类, 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 e49126c..a753478 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java @@ -100,6 +100,6 @@ public class SupplierTableModel extends AbstractTableModel{ */ - - + + } diff --git a/Supermarket/src/com/lingnan/supermarket/view/InView.java b/Supermarket/src/com/lingnan/supermarket/view/InView.java index fc657b2..6d69d65 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/InView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/InView.java @@ -711,6 +711,8 @@ public class InView extends JPanel implements ActionListener{ JOptionPane.showConfirmDialog(null,"退出成功", "提示", JOptionPane.PLAIN_MESSAGE); } - } + + } } +} diff --git a/Supermarket/src/com/lingnan/supermarket/view/MainView.java b/Supermarket/src/com/lingnan/supermarket/view/MainView.java index af24167..3635cf6 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/MainView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/MainView.java @@ -1,5 +1,6 @@ package com.lingnan.supermarket.view; // 定义包名,所有视图相关的类都在这个包下 + import java.awt.event.ActionEvent; // 导入ActionEvent类,用于监听动作事件 import java.awt.event.ActionListener; // 导入ActionListener接口,用于实现动作事件监听 import java.awt.event.MouseEvent; // 导入MouseEvent类,用于监听鼠标事件 @@ -24,6 +25,7 @@ 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类,可能是订单服务的实现 @@ -38,8 +40,10 @@ 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{ @@ -141,6 +145,8 @@ public class MainView extends BaseView implements ActionListener, MouseListener, } + + public static void refreshRemind() { Vector vInOrder; // 声明未确认订单的向量 vInOrder = inOrderImpl.findUnconfirmInOrder(); // 查找所有未确认的订单 @@ -228,12 +234,14 @@ public class MainView extends BaseView implements ActionListener, MouseListener, 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); // 将人员管理菜单标签添加到左侧面板 + + 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);/*添加用户选项到菜单栏*/ + /*菜单栏:进货系统*/ inMenuLabel = new JLabel("进货系统", new ImageIcon("static\\icon\\in1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示进货系统菜单 @@ -243,13 +251,15 @@ public class MainView extends BaseView implements ActionListener, MouseListener, 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); // 将收银系统菜单标签添加到左侧面板 + 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); + /*菜单栏:库存*/ storageMenuLabel = new JLabel("商品库存", new ImageIcon("static\\icon\\storage1.png"), JLabel.LEFT); // 创建一个带有图标的JLabel,用于表示商品库存菜单 @@ -268,12 +278,15 @@ public class MainView extends BaseView implements ActionListener, MouseListener, 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); // 将商品目录菜单标签添加到左侧面板 + + + + 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); /*提醒进货确认模块*/ @@ -284,7 +297,9 @@ public class MainView extends BaseView implements ActionListener, MouseListener, remindMenuLabel.setForeground(Color.white); // 设置提醒菜单标签的前景色为白色 leftPanel.add(remindMenuLabel); // 将提醒菜单标签添加到左侧面板 + // 设置右侧面板的布局管理器为卡片布局 + rightPanelLayout = new CardLayout(); // 0.超市首页展示,创建并实例化首页视图面板 @@ -522,10 +537,12 @@ public class MainView extends BaseView implements ActionListener, MouseListener, // 如果事件源是用户菜单标签,则改变前景色和图标 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)); // 设置前景色为蓝色 @@ -550,6 +567,7 @@ public class MainView extends BaseView implements ActionListener, MouseListener, supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier2.png")); // 设置鼠标进入时的图标 } + // 如果事件源是目录菜单标签,则改变前景色和图标 else if(source==catalogMenuLabel) { catalogMenuLabel.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 @@ -557,6 +575,7 @@ public class MainView extends BaseView implements ActionListener, MouseListener, } // 如果事件源是用户菜单标签1,则改变前景色 + else if(source==userMenuLabel1) { userMenuLabel1.setForeground(new Color(18, 150, 219)); // 设置前景色为蓝色 // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标进入图标 @@ -577,6 +596,7 @@ public class MainView extends BaseView implements ActionListener, MouseListener, homeMenuLabel.setIcon(new ImageIcon("static\\icon\\home1.png")); // 设置鼠标离开时的默认图标 } + // 如果事件源是用户菜单标签,则恢复前景色和图标 else if(source==userMenuLabel) { userMenuLabel.setForeground(Color.white); // 恢复前景色为白色 @@ -607,13 +627,11 @@ public class MainView extends BaseView implements ActionListener, MouseListener, supplierMenuLabel.setIcon(new ImageIcon("static\\icon\\supplier1.png")); // 设置鼠标离开时的默认图标 } - // 如果事件源是目录菜单标签,则恢复前景色和图标 else if(source==catalogMenuLabel) { - catalogMenuLabel.setForeground(Color.white); // 恢复前景色为白色 - catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog1.png")); // 设置鼠标离开时的默认图标 - } + catalogMenuLabel.setForeground(Color.white); + catalogMenuLabel.setIcon(new ImageIcon("static\\icon\\catalog1.png")); + } - // 如果事件源不是上述任何一个标签,则默认处理用户菜单标签1 else { userMenuLabel1.setForeground(Color.white); // 恢复前景色为白色 // 注意:这里没有设置图标,可能是因为该标签没有对应的鼠标离开图标 From 10e470c0b4d165ee5c9e6cf9e4891410a702e9ca 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: Fri, 13 Dec 2024 14:32:47 +0800 Subject: [PATCH 15/20] =?UTF-8?q?test.txt=E6=B5=8B=E8=AF=95=E4=BF=AE?= =?UTF-8?q?=E6=94=B91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test.txt b/test.txt index d800886..2bf0721 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ -123 \ No newline at end of file +123 +z1 \ No newline at end of file From c2a8c327ddfb94ddc68542b838b6ef97786110fd 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: Fri, 13 Dec 2024 15:48:40 +0800 Subject: [PATCH 16/20] =?UTF-8?q?test.txt=E4=BF=AE=E6=94=B9=E6=B5=8B?= =?UTF-8?q?=E8=AF=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test.txt b/test.txt index 00bca14..a4ab653 100644 --- a/test.txt +++ b/test.txt @@ -1,4 +1,3 @@ - 123 -z1 +z1 z2 From 4d28ccac793f59802ddcbcffc458c0e1babfedd2 Mon Sep 17 00:00:00 2001 From: cwfeng Date: Fri, 13 Dec 2024 19:57:47 +0800 Subject: [PATCH 17/20] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=BF=9B?= =?UTF-8?q?=E8=B4=A7=E5=91=98=E8=A7=92=E8=89=B2=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=86=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supermarket/dialog/UserDialog.java | 11 +- .../supermarket/dialog/UserInfDialog.java | 121 ++++-------------- 2 files changed, 37 insertions(+), 95 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/UserDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/UserDialog.java index 406dcfc..9d747e8 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/UserDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/UserDialog.java @@ -39,7 +39,7 @@ public class UserDialog extends JDialog implements ActionListener { // 下拉框组件,用于选择用户权限 private JComboBox combo; // 下拉框中的选项内容,包括请选择身份以及不同的权限角色 - private String[] identity = { "请选择身份", "收银员", "管理员", "超级管理员" }; + private String[] identity = { "请选择身份", "进货员","收银员", "管理员", "超级管理员" }; // 构造函数,用于创建添加用户信息的对话框 public UserDialog(JFrame parent) { @@ -168,6 +168,13 @@ public class UserDialog extends JDialog implements ActionListener { } // 内部类,实现了ItemListener接口,用于监听下拉框选项变化事件 + /**、 + * 进行权限的修改 + * 添加进货员权限 + * cwf + * 2024/12/11 + */ + static class MyItemListener implements ItemListener { @Override @@ -182,6 +189,8 @@ public class UserDialog extends JDialog implements ActionListener { sSuper = 2; else if (sSuper1.equals("管理员")) sSuper = 1; + else if (sSuper1.equals("进货员")) // 2024/12/11 添加进货员权限 + sSuper = 3; // 2024/12/11 添加进货员权限 else sSuper = 0; } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/UserInfDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/UserInfDialog.java index a4a7721..3590fe4 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/UserInfDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/UserInfDialog.java @@ -1,3 +1,4 @@ + package com.lingnan.supermarket.dialog; import java.awt.Container; @@ -25,74 +26,54 @@ 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 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 = { "当前权限", "收银员", "管理员", "超级管理员","进货员" }; - // 定义一个字符串数组,存储下拉框中可供选择的用户权限选项内容 + private String[] identity = { "当前权限", "进货员","收银员", "管理员", "超级管理员" }; // 父窗口JFrame的引用,可能用于在某些操作后对父窗口进行处理 private JFrame JFrame; - // 保存传入的父窗口(JFrame类型)的引用 // 构造函数,用于创建修改用户信息的对话框,传入父窗口JFrame和要修改信息的用户对象 public UserInfDialog(JFrame parent, User user) { - // 调用父类JDialog的构造函数,设置对话框的标题为"添加" + // 调用父类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 // 初始化对话框的视图组件 initView(); @@ -103,53 +84,34 @@ public class UserInfDialog extends JDialog implements ActionListener { // 姓名面板及相关组件的初始化,文本框中显示当前用户的姓名信息 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); @@ -157,40 +119,26 @@ public class UserInfDialog extends JDialog implements ActionListener { combo.addItemListener(new MyItemListener()); sSuperPanel.add(sSuperLabel); sSuperPanel.add(combo); - - // 上述被注释掉的代码原本用于创建权限相关的面板、标签、下拉框组件,并为下拉框添加选项改变的监听器,用于实现完整的权限选择功能,但目前处于简化状态 + */ // 操作按钮面板及相关组件的初始化 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接口中的方法 @@ -203,85 +151,70 @@ public class UserInfDialog extends JDialog implements ActionListener { // 获取用户在文本框中修改后的姓名、账号、手机和密码信息 String name = nameTF.getText(); - // 获取姓名文本框中用户输入或修改后的姓名内容 String loginName = loginNameTF.getText(); - // 获取账号文本框中用户输入或修改后的账号内容 String phone = phoneTF.getText(); - // 获取手机文本框中用户输入或修改后的手机号码内容 String password = passwordTF.getText(); - // 获取密码文本框中用户输入或修改后的密码内容 - // 此处注释提示了后续应该添加对获取到的用户输入信息进行合法性校验的代码 + // TODO 参数校验部分,这里应该对获取到的用户输入信息进行合法性校验,比如非空、格式等校验,但目前未实现具体逻辑 // 创建一个新的User对象,用于存储要更新到数据库的用户信息,设置了部分从原用户对象获取的信息以及修改后的信息 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表示) - // 关闭父窗口 this.JFrame.dispose(); - // 通过调用父窗口的dispose方法关闭父窗口 - // 创建并显示新的登录视图 new LoginView(); - // 创建一个新的登录视图(LoginView类的实例)并显示出来,方便用户重新登录系统 } else { // 如果更新失败,弹出提示框显示修改失败信息 JOptionPane.showMessageDialog(this, "修改失败", "提示", JOptionPane.ERROR_MESSAGE); - // 使用JOptionPane弹出一个错误提示框,向用户显示修改失败的消息 } } else if (source == cancelBtn) { // 如果点击的是取消按钮,直接关闭当前对话框 this.dispose(); - // 通过调用dispose方法关闭当前对话框,放弃本次修改操作,释放相关资源 } } - // 实现了ItemListener接口,用于监听下拉框选项变化事件 + // 内部类,实现了ItemListener接口,用于监听下拉框选项变化事件(这里部分代码被注释掉,可能原本有完整的权限选择功能,后简化了) + + /** + * cwf 2024/12/11 + * 添加了进货员的信息 + * sSuper1.equals("进货员") + * sSuper = 3; + */ + 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(); + sSuper = user.getUsuper(); // 保持原权限 else if (sSuper1.equals("收银员")) - sSuper = 2; - else if (sSuper1.equals("管理员")) - sSuper = 1; + sSuper = 2; // 收银员权限 + else if (sSuper1.equals("管理员")) // 新增权限角色 + sSuper = 1; + else if (sSuper1.equals("进货员")) // 新增权限角色 + sSuper = 3; else - sSuper = 0; - // 根据下拉框选中的不同选项内容,来设置当前用户的权限级别,不同的数字0、1、2对应不同的权限 + sSuper = 0; // 超级管理员 } } } \ No newline at end of file From c3201163fa6f819b7717227f393f48ece213efa7 Mon Sep 17 00:00:00 2001 From: cwfeng Date: Fri, 13 Dec 2024 20:34:21 +0800 Subject: [PATCH 18/20] txt --- test.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test.txt b/test.txt index a4ab653..ded00c1 100644 --- a/test.txt +++ b/test.txt @@ -1,3 +1,4 @@ 123 -z1 z2 +z1 z2 13131 +d11111 \ No newline at end of file From d02b117bd84ba9cc7ebd2566e382a628fe25e802 Mon Sep 17 00:00:00 2001 From: HouXinyu <2283543175@qq.com> Date: Fri, 13 Dec 2024 21:53:47 +0800 Subject: [PATCH 19/20] d2 --- test.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test.txt b/test.txt index ded00c1..764a3c5 100644 --- a/test.txt +++ b/test.txt @@ -1,4 +1,5 @@ 123 z1 z2 13131 -d11111 \ No newline at end of file +d11111 +d2 \ No newline at end of file From e8f774d494c036b875580aa212ea23591917b3e7 Mon Sep 17 00:00:00 2001 From: HouXinyu <2283543175@qq.com> Date: Fri, 13 Dec 2024 23:22:03 +0800 Subject: [PATCH 20/20] d3 --- test.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test.txt b/test.txt index 764a3c5..8ce982f 100644 --- a/test.txt +++ b/test.txt @@ -2,4 +2,5 @@ z1 z2 13131 d11111 -d2 \ No newline at end of file +d2 +d3 \ No newline at end of file