Compare commits

..

26 Commits

Author SHA1 Message Date
p4vsywzlp 7a7c3179bd end
1 year ago
HouXinyu 3716d82083 end
1 year ago
HouXinyu ad2a162593 z5
1 year ago
HouXinyu b319190310 t3
1 year ago
HouXinyu 56521ce0d3 Merge remote-tracking branch 'remotes/origin/main' into developer
1 year ago
HouXinyu 2a5310d522 update
1 year ago
HouXinyu 4dbaa3a639 rollback
1 year ago
沈国良 93e6105851 增加备注
1 year ago
沈国良 7898a8bc8d 增加备注
1 year ago
沈国良 2cdeae95ab 增加备注
1 year ago
沈国良 4405166476 增加备注
1 year ago
沈国良 4cc69809c7 增加备注
1 year ago
沈国良 cbe7cb5560 增加备注
1 year ago
沈国良 ae7aaca6f6 增加备注
1 year ago
沈国良 8e14e78135 增加备注
1 year ago
沈国良 b5dfd2c50e 增加时间备注
1 year ago
沈国良 c554d51aa3 增加数据库备注
1 year ago
沈国良 849c0cd35a 增加模块备注
1 year ago
沈国良 22197c2e7e 增加收银模块备注
1 year ago
pxjfuz984 0a4699b5e1 Merge pull request '完成仓库管理部分注释' (#47) from pxjfuz984/test:branch_zyx into main
1 year ago
pxjfuz984 a1c62bdaf9 Merge pull request '仓库管理部分已注释' (#46) from pxjfuz984/test:branch_zyx into main
1 year ago
pxjfuz984 623f0ce250 Merge pull request 'dto文件部分修改' (#45) from pxjfuz984/test:branch_zyx into main
1 year ago
pxjfuz984 1110158a4f Merge pull request 'table部分修改' (#44) from pxjfuz984/test:branch_zyx into main
1 year ago
pxjfuz984 5d679b62fb Merge pull request 'base文件夹部分修改' (#43) from pxjfuz984/test:branch_zyx into main
1 year ago
pxjfuz984 4edbca8770 Merge pull request 'SuperView注释' (#42) from pxjfuz984/test:branch_zyx into main
1 year ago
pxjfuz984 44f09f4a38 Merge pull request 'test.txt修改测试看代码行数是否改变' (#41) from pxjfuz984/test:branch_zyx into main
1 year ago

@ -1,4 +1,4 @@
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/supermarket?serverTimezone=UTC
user=root
password=040820
password=123456

@ -1,4 +1,4 @@
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/supermarket?serverTimezone=UTC
user=root
password=040820
password=123456

@ -1,4 +1,4 @@
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/supermarket?serverTimezone=UTC
user=root
password=040820
password=123456

@ -8,16 +8,16 @@ 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中
// 通过默认工具包Toolkit获取屏幕的宽度
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
// 通过默认工具包Toolkit获取屏幕的高度存储在局部变量height中
// 通过默认工具包Toolkit获取屏幕的高度
this.setSize(width, height);
// 设置该面板BGPanel的大小为整个屏幕的大小,即宽度和高度分别为获取到的屏幕宽高
// 设置该面板的大小为整个屏幕的大小
}
public BGPanel(Image image, int width, int height) {
@ -37,7 +37,6 @@ public class BGPanel extends JPanel{
// 调用父类JPanel的paintComponent方法以确保完成一些默认的绘制操作比如背景清除等
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
// 使用传入的Graphics对象g在面板上绘制图像参数含义如下
// image要绘制的图像对象就是之前保存的成员变量image
// 0, 0表示在面板上绘制图像的起始坐标x坐标和y坐标这里从面板的左上角0, 0位置开始绘制
// getWidth(), getHeight():获取当前面板的宽度和高度,用于指定绘制图像时按照面板的实际大小进行拉伸或缩放,确保图像填满整个面板

@ -13,21 +13,29 @@ import com.lingnan.supermarket.dto.InOrder;
import com.lingnan.supermarket.dto.OutOrder;
import com.lingnan.supermarket.utils.JDBCUtil;
public class outOrderServiceImpl implements outOrderService{
// 实现outOrderService接口--用于处理与出库订单相关的数据访问操作
public class outOrderServiceImpl implements outOrderService {
// 查询所有出库订单信息,并按照日期降序排列返回
@Override
public Vector<OutOrder> findAllOutOrder() {
// 存储查询到的所有出库订单信息的向量集合
Vector<OutOrder> outOrders = new Vector<OutOrder>();
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement preparedStatement = null;
ResultSet resultSet=null;
ResultSet resultSet = null;
// 从OutOrder表中查询所有记录并按oDate字段降序排序
String SQL = "select * from OutOrder order by oDate desc";
try {
// 根据SQL语句创建预编译的Statement对象
preparedStatement = conn.prepareStatement(SQL);
// 执行查询操作
resultSet = preparedStatement.executeQuery();
while(resultSet.next()) {
// 遍历结果集将每条记录封装成OutOrder对象并添加到outOrders集合中
while (resultSet.next()) {
OutOrder outOrder = new OutOrder();
outOrder.setoNumber(resultSet.getString("oNumber"));
outOrder.setAllOutPrice(resultSet.getFloat("allOutPrice"));
@ -35,117 +43,147 @@ public class outOrderServiceImpl implements outOrderService{
outOrder.setPrincipal(resultSet.getString("principal"));
outOrders.add(outOrder);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭结果集、预编译语句以及数据库连接,释放相关资源
JDBCUtil.close(resultSet, preparedStatement, conn);
}
return outOrders;
}
// 根据订单编号查询对应的出库订单信息
@Override
public OutOrder findByIdOutOrder(String oNumber) {
// 用于存储查询到的出库订单信息的对象
OutOrder outOrder = new OutOrder();
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = conn.prepareStatement("select * from outOrder where oNumber = ?");
// 根据订单编号查询对应的出库订单记录
preparedStatement = conn.prepareStatement("select * from outOrder where oNumber =?");
// 设置查询的订单编号
preparedStatement.setString(1, oNumber);
// 执行查询操作
resultSet = preparedStatement.executeQuery();
// 如果结果集中有记录说明找到了对应的订单则将记录中的各字段值封装到outOrder对象中
if (resultSet.next()) {
outOrder.setoNumber(resultSet.getString("oNumber"));
outOrder.setAllOutPrice(resultSet.getFloat("allOutPrice"));
outOrder.setoDate(resultSet.getDate("oDate"));
outOrder.setPrincipal(resultSet.getString("principal"));
} else {
return null; // 没有找到该订单或订单不存在返回null
}
// 如果结果集中没有记录说明没有找到该订单或订单不存在返回null
return null;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭结果集、预编译语句以及数据库连接,释放相关资源
JDBCUtil.close(resultSet, preparedStatement, conn);
}
return outOrder;
}
// 向数据库中添加一条出库订单记录
@Override
public int addOutOrder(String oNumber, float allOutPrice) {
int flag = 0;
Timestamp oDate = new Timestamp(System.currentTimeMillis());
// 获取当前系统时间戳用于作为出库订单的日期oDate字段值表示订单创建时间
Timestamp oDate = new Timestamp(System.currentTimeMillis());
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement preparedStatement = null;
try {
preparedStatement = conn.prepareStatement
("insert into outOrder values (?,?,?,?)");
// 创建预编译的SQL插入语句向outOrder表中插入一条记录
preparedStatement = conn.prepareStatement("insert into outOrder values (?,?,?,?)");
// 设置预编译语句中的参数,依次为订单编号、总出库价格、订单日期、负责人(此处写死为"a1",可能后续需要改进)
preparedStatement.setString(1, oNumber);
preparedStatement.setFloat(2, allOutPrice);
preparedStatement.setTimestamp(3, oDate);
preparedStatement.setString(4, "a1");
// 执行插入操作
preparedStatement.executeUpdate();
// 如果插入成功将标志位flag设置为1表示操作成功
flag = 1;
} catch (SQLException e) {
// 如果插入出现异常将标志位flag设置为 -1表示操作失败
flag = -1;
e.printStackTrace();
} finally {
JDBCUtil.close(null,preparedStatement, conn);
// 关闭预编译语句以及数据库连接,释放相关资源
JDBCUtil.close(null, preparedStatement, conn);
}
return flag;
}
// 根据订单编号从数据库中删除对应的出库订单记录
@Override
public int deleteOutOrder(String oNumber) {
int flag = 0;
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement preparedStatement = null;
try {
preparedStatement = conn.prepareStatement
("delete from outOrder where oNumber = ?");
// 创建预编译的SQL删除语句根据订单编号oNumber删除对应的出库订单记录
preparedStatement = conn.prepareStatement("delete from outOrder where oNumber =?");
// 设置预编译语句中的参数,即要删除的订单编号
preparedStatement.setString(1, oNumber);
// 执行删除操作
preparedStatement.executeUpdate();
// 如果删除成功将标志位flag设置为1表示操作成功
flag = 1;
} catch (SQLException e) {
// 如果删除出现异常将标志位flag设置为 -1表示操作失败
flag = -1;
e.printStackTrace();
} finally {
JDBCUtil.close(null,preparedStatement, conn);
// 关闭预编译语句以及数据库连接,释放相关资源
JDBCUtil.close(null, preparedStatement, conn);
}
return flag;
}
//获取今日进货金额
public Float TodayOutPrice(String date) {
InOrder inOrder = new InOrder();
Connection conn = JDBCUtil.getConn();
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
Float allInPrice=(float) 0;
try {
preparedStatement = conn.prepareStatement("select sum(allOutPrice) from outOrder where oDate>=? and oDate<=date_add(?,interval 1 day)");
preparedStatement.setString(1, date);
preparedStatement.setString(2, date);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
allInPrice=resultSet.getFloat("sum(allOutPrice)");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(resultSet, preparedStatement, conn);
// 获取指定日期的今日出库金额总和(此处方法名可能有点混淆,从代码逻辑看是获取指定日期的出库金额总和)
public Float TodayOutPrice(String date) {
// 创建一个InOrder对象
InOrder inOrder = new InOrder();
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
// 用于存储查询到的今日出库金额总和初始为0
Float allInPrice = (float) 0;
try {
// 通过求和函数查询指定日期范围内的总出库价格
preparedStatement = conn.prepareStatement("select sum(allOutPrice) from outOrder where oDate>=? and oDate<=date_add(?,interval 1 day)");
// 设置两个参数均为传入的日期值,用于限定查询的日期范围
preparedStatement.setString(1, date);
preparedStatement.setString(2, date);
// 执行查询操作
resultSet = preparedStatement.executeQuery();
// 如果结果集中有记录说明查询到了对应的金额数据则将其取出赋值给allInPrice变量
if (resultSet.next()) {
allInPrice = resultSet.getFloat("sum(allOutPrice)");
}
return allInPrice;
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭结果集、预编译语句以及数据库连接,释放相关资源
JDBCUtil.close(resultSet, preparedStatement, conn);
}
}
return allInPrice;
}
}

@ -12,49 +12,66 @@ import com.lingnan.supermarket.dto.InRecord;
import com.lingnan.supermarket.dto.OutRecord;
import com.lingnan.supermarket.utils.JDBCUtil;
public class outRecordServiceImpl implements outRecordService{
// 实现了outRecordService接口--用于处理出库记录相关的数据操作逻辑
public class outRecordServiceImpl implements outRecordService {
// 查询所有出库记录信息
@Override
public Vector<OutRecord> findAllOutRecord() {
// 用于存储查询到的所有出库记录信息的向量集合
Vector<OutRecord> outRecords = new Vector<OutRecord>();
// 通过JDBCUtil工具类的静态方法来获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement preparedStatement = null;
ResultSet resultSet=null;
ResultSet resultSet = null;
// 从outRecord表中获取所有记录
String SQL = "select * from outRecord";
try {
// 根据SQL语句创建预编译的Statement对象
preparedStatement = conn.prepareStatement(SQL);
// 执行查询操作
resultSet = preparedStatement.executeQuery();
while(resultSet.next()) {
// 遍历结果集将每条记录封装成OutRecord对象并添加到outRecords集合中
while (resultSet.next()) {
OutRecord outRecord = new OutRecord();
outRecord.setoNumber(resultSet.getString("oNumber"));
outRecord.setSum(resultSet.getInt("sum"));
outRecord.setOutPrice(resultSet.getFloat("outPrice"));
outRecords.add(outRecord);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭结果集、预编译语句以及数据库连接,释放相关资源
JDBCUtil.close(resultSet, preparedStatement, conn);
}
return outRecords;
}
// 根据订单编号查询对应的出库记录信息,返回符合条件的多条记录
@Override
public Vector<OutRecord> findByIdOutRecordr(String oNumber) {
OutRecord outRecord ;
// 用于临时存储单个出库记录信息的对象
OutRecord outRecord;
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
// 存储查询到的符合条件的所有出库记录信息的向量集合
Vector<OutRecord> v = new Vector<OutRecord>();
try {
preparedStatement = conn.prepareStatement("select * from outRecord where oNumber = ?");
//根据给定的订单编号查询outRecord表中对应的记录
preparedStatement = conn.prepareStatement("select * from outRecord where oNumber =?");
// 设置要查询的订单编号
preparedStatement.setString(1, oNumber);
// 执行查询操作,获取结果集
resultSet = preparedStatement.executeQuery();
// 遍历结果集将每条符合条件的记录封装成OutRecord对象并添加到向量集合v中
while (resultSet.next()) {
outRecord = new OutRecord();
outRecord.setoNumber(resultSet.getString("oNumber"));
@ -62,68 +79,83 @@ public class outRecordServiceImpl implements outRecordService{
outRecord.setSum(resultSet.getInt("sum"));
outRecord.setOutPrice(resultSet.getFloat("Price"));
v.add(outRecord);
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭结果集、预编译语句以及数据库连接,释放相关资源
JDBCUtil.close(resultSet, preparedStatement, conn);
}
return v;
}
// 向数据库中添加一条出库记录信息
@Override
public int addoutRecord(OutRecord or) {
int flag = 0;
// 获取要添加的出库记录对象中的订单编号
String oNumber = or.getoNumber();
// 获取要添加的出库记录对象中的数量
int sum = or.getSum();
// 获取要添加的出库记录对象中的出库价格
Float outPrice = or.getOutPrice();
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement preparedStatement = null;
try {
preparedStatement = conn.prepareStatement
("insert into outRecord values (?,?,?)");
// 创建预编译的SQL插入语句向outRecord表中插入一条记录包含订单编号、数量、出库价格三个字段的值
preparedStatement = conn.prepareStatement("insert into outRecord values (?,?,?)");
// 设置预编译语句中的参数,依次为订单编号、数量、出库价格
preparedStatement.setString(1, oNumber);
preparedStatement.setInt(2, sum);
preparedStatement.setFloat(3, outPrice);
// 执行插入操作
preparedStatement.executeUpdate();
// 如果插入成功将标志位flag设置为1表示操作成功
flag = 1;
} catch (SQLException e) {
// 如果插入出现异常将标志位flag设置为 -1表示操作失败
flag = -1;
e.printStackTrace();
} finally {
JDBCUtil.close(null,preparedStatement, conn);
// 关闭预编译语句以及数据库连接释放相关资源此处结果集为null
JDBCUtil.close(null, preparedStatement, conn);
}
return flag;
}
// 根据订单编号从数据库中删除对应的出库记录信息
@Override
public int deleteOutOrder(String oNumber) {
int flag = 0;
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement preparedStatement = null;
try {
preparedStatement = conn.prepareStatement
("delete from outRecord where oNumber = ?");
// 创建预编译的SQL删除语句根据给定的订单编号删除outRecord表中对应的记录
preparedStatement = conn.prepareStatement("delete from outRecord where oNumber =?");
// 设置要删除的订单编号
preparedStatement.setString(1, oNumber);
// 执行删除操作
preparedStatement.executeUpdate();
// 如果删除成功将标志位flag设置为1表示操作成功
flag = 1;
} catch (SQLException e) {
// 如果删除出现异常将标志位flag设置为 -1表示操作失败
flag = -1;
e.printStackTrace();
} finally {
JDBCUtil.close(null,preparedStatement, conn);
// 关闭预编译语句以及数据库连接释放相关资源此处结果集为null
JDBCUtil.close(null, preparedStatement, conn);
}
return flag;
}
}
}

@ -12,214 +12,241 @@ import com.lingnan.supermarket.dao.prodCatalogService;
import com.lingnan.supermarket.dto.ProdCatalog;
import com.lingnan.supermarket.utils.JDBCUtil;
public class prodCatalogImpl implements prodCatalogService{
// 实现prodCatalogService接口--用于处理商品目录相关的数据持久化操作
public class prodCatalogImpl implements prodCatalogService {
/*将商品目录表和商品表联合查询*/
// 将商品目录表和商品表联合查询,获取商品目录及相关商品信息
@Override
public Vector<ProdCatalog> findProdCatalogAndProd() {
Connection conn=JDBCUtil.getConn();
// 通过JDBCUtil工具类来获取已经配置好的连接对象
Connection conn = JDBCUtil.getConn();
// 创建一个Vector容器存放查询到的ProdCatalog对象
Vector<ProdCatalog> v = new Vector<ProdCatalog>();
ProdCatalog prodCatalog;
PreparedStatement pstmt = null;
ResultSet resultSet=null;
ResultSet resultSet = null;
try {
// 通过预编译语句准备调用存储过程allProdCatalog
pstmt = conn.prepareStatement("call allProdCatalog()");
// 执行查询操作
resultSet = pstmt.executeQuery();
while(resultSet.next()){
// 遍历结果集将每一条记录封装成ProdCatalog对象并添加到Vector容器中
while (resultSet.next()) {
prodCatalog = new ProdCatalog();
// 设置ProdCatalog对象的id属性
prodCatalog.setId(resultSet.getString("id"));
// 设置ProdCatalog对象的name属性
prodCatalog.setName(resultSet.getString("name"));
v.add(prodCatalog);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
// 若出现SQL异常打印异常栈信息
e.printStackTrace();
}finally{
} finally {
// 通过JDBCUtil工具类提供的方法进行关闭操作
JDBCUtil.close(resultSet, pstmt, conn);
}
return v;
}
// 根据给定的id1查找商品目录名称
@Override
public String findProdCatalog(String id1 ) {
Connection conn=JDBCUtil.getConn();
public String findProdCatalog(String id1) {
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement pstmt = null;
ResultSet resultSet=null;
String catalog=null;
ResultSet resultSet = null;
String catalog = null;
try {
// 预编译SQL语句用于根据给定的id2查询prodCatalog表中的记录
pstmt = conn.prepareStatement("select *from prodCatalog where id2 =?");
pstmt.setString(1,id1);
// 设置SQL语句中的参数将传入的id1赋值给查询语句中的占位符
pstmt.setString(1, id1);
// 执行查询操作
resultSet = pstmt.executeQuery();
if(resultSet.next()){
catalog=resultSet.getString("name1");
// 如果结果集中有下一条记录则获取对应记录中的name1字段值作为商品目录名称
if (resultSet.next()) {
catalog = resultSet.getString("name1");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
} finally {
// 关闭相关资源
JDBCUtil.close(resultSet, pstmt, conn);
}
return catalog;
}
// 向商品目录表prodCatalog中添加一条记录
@Override
public int addProdCatalog(String id1, String id2) {
int flag=0;
String name1=null;
//01 食品 02 电器 03 生活用品 04 其他
if(id1.equals("01"))
name1="食品";
else if(id1.equals("02"))
name1="电器";
else if(id1.equals("03"))
name1="生活用品";
else
name1="其他";
//连接jdbc
Connection conn=JDBCUtil.getConn();
int flag = 0;
String name1 = null;
// 根据传入的id1判断商品类别名称01对应食品02对应电器03对应生活用品04对应其他
if (id1.equals("01"))
name1 = "食品";
else if (id1.equals("02"))
name1 = "电器";
else if (id1.equals("03"))
name1 = "生活用品";
else
name1 = "其他";
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement pstmt = null;
ResultSet resultSet=null;
ResultSet resultSet = null;
try {
// 预编译插入数据的SQL语句向prodCatalog表中插入三条数据
pstmt = conn.prepareStatement("insert into prodCatalog values(?,?,?)");
pstmt.setString(1,id1);
pstmt.setString(2,name1);
pstmt.setString(3,id2);
// 设置SQL语句中的第一个参数
pstmt.setString(1, id1);
// 设置SQL语句中的第二个参数
pstmt.setString(2, name1);
// 设置SQL语句中的第三个参数
pstmt.setString(3, id2);
// 执行插入操作若插入成功将flag置为1表示添加成功
pstmt.executeUpdate();
flag=1;
flag = 1;
} catch (SQLException e) {
e.printStackTrace();
}finally{
} finally {
// 关闭相关资源
JDBCUtil.close(resultSet, pstmt, conn);
}
return flag;
}
// 根据给定的id2删除商品目录表prodCatalog中的一条记录
@Override
public int deleteProdCatalog(String id2) {
int flag=0;
//连接jdbc
Connection conn=JDBCUtil.getConn();
int flag = 0;
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement pstmt = null;
ResultSet resultSet=null;
ResultSet resultSet = null;
try {
// 预编译删除数据的SQL语句根据传入的id2作为条件从prodCatalog表中删除对应的记录
pstmt = conn.prepareStatement("delete from prodCatalog where id2=?");
pstmt.setString(1,id2);
// 设置SQL语句中的参数将传入的id2赋值给查询语句中的占位符?
pstmt.setString(1, id2);
// 执行删除操作若删除成功将flag置为1表示删除成功
pstmt.executeUpdate();
flag=1;
flag = 1;
} catch (SQLException e) {
// TODO Auto-generated catch block
// 若出现SQL异常打印异常栈信息
e.printStackTrace();
}finally{
} finally {
// 关闭相关资源
JDBCUtil.close(resultSet, pstmt, conn);
}
return flag;
}
// 根据商品类production的name查询并输出类别id如果传入的name为"全部"则直接返回默认的catalogid "0"
@Override
//根据商品类production的name查询并输出类别id
public String findProdCatalogByname(String name) {
Connection conn=JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn();
PreparedStatement pstmt = null;
ResultSet resultSet=null;
String catalogid="0";
ResultSet resultSet = null;
String catalogid = "0";
try {
if(name.equals("全部")){
// 如果传入的商品名称为"全部"则直接返回默认的catalogid
if (name.equals("全部")) {
return catalogid;
}
// 预编译SQL语句用于根据给定的商品名称查询prodCatalog表中的记录获取对应的类别id
pstmt = conn.prepareStatement("select * from prodCatalog where name =?");
pstmt.setString(1,name);
// 设置SQL语句中的参数将传入的name赋值给查询语句中的占位符
pstmt.setString(1, name);
// 执行查询操作,获取结果集
resultSet = pstmt.executeQuery();
if(resultSet.next()){
catalogid=resultSet.getString("id");
// 如果结果集中有下一条记录则获取对应记录中的id字段值作为类别id
if (resultSet.next()) {
catalogid = resultSet.getString("id");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
// 若出现SQL异常打印异常栈信息
e.printStackTrace();
}finally{
} finally {
// 关闭相关资源
JDBCUtil.close(resultSet, pstmt, conn);
}
return catalogid;
}
/* public static void main(String[] args) {
ProdCatalog p=new ProdCatalog();
prodCatalogImpl pi=new prodCatalogImpl();
p.setName("全部");
System.out.println(pi.findProdCatalogByname(p.getName()));
}*/
/*
public static void main(String[] args) {
ProdCatalog p = new ProdCatalog();
prodCatalogImpl pi = new prodCatalogImpl();
p.setName("全部");
System.out.println(pi.findProdCatalogByname(p.getName()));
}
*/
// 查询商品目录表prodCatalog中的所有商品类别名称并添加"全部"作为第一个元素后返回
@Override
public ArrayList<String> findNameProdCatalog() {
Connection conn=JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn();
ArrayList<String> v = new ArrayList<String>();
// 先添加"全部"作为默认的第一个类别名称
v.add("全部");
ProdCatalog prodCatalog;
PreparedStatement pstmt = null;
ResultSet resultSet=null;
ResultSet resultSet = null;
try {
// 预编译查询所有记录的SQL语句用于获取prodCatalog表中的所有商品类别名称
pstmt = conn.prepareStatement("select * from prodCatalog");
// 执行查询操作
resultSet = pstmt.executeQuery();
while(resultSet.next()){
// 遍历结果集将每条记录中的商品类别名称添加到ArrayList容器中
while (resultSet.next()) {
v.add(resultSet.getString("name"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
// 若出现SQL异常打印异常栈信息
e.printStackTrace();
}finally{
} finally {
// 关闭相关资源
JDBCUtil.close(resultSet, pstmt, conn);
}
return v;
}
/*public static void main(String[] args) {
prodCatalogImpl pi=new prodCatalogImpl();
ArrayList<String>log=null;
log=pi.findNameProdCatalog();
String []s=new String[log.size()];
for(int i=0;i<log.size();i++)
{s[i]=log.get(i);
System.out.println(log.get(i));
}
for(int i=0;i<s.length;i++)
{
System.out.println(s[i]);
}
}*/
/*
public static void main(String[] args) {
prodCatalogImpl pi = new prodCatalogImpl();
ArrayList<String> log = null;
log = pi.findNameProdCatalog();
String[] s = new String[log.size()];
for (int i = 0; i < log.size(); i++) {
s[i] = log.get(i);
System.out.println(log.get(i));
}
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
}
*/
}

@ -19,73 +19,73 @@ public class productionImpl implements productionService {
public Vector<Production> findAllproduction() {
Vector<Production> productions = new Vector<Production>();
Connection conn = JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn(); // 获取数据库连接
String SQL = "select * from production where delmark = 1";
String SQL = "select * from production where delmark = 1"; // SQL查询语句只查询未被删除的商品
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = conn.prepareStatement(SQL);
preparedStatement = conn.prepareStatement(SQL); // 创建PreparedStatement对象
resultSet = preparedStatement.executeQuery();
resultSet = preparedStatement.executeQuery(); // 执行查询,获取结果集
while (resultSet.next()) {
while (resultSet.next()) { // 遍历结果集
Production 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.setDelmark(resultSet.getInt("delmark"));
productions.add(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.setDelmark(resultSet.getInt("delmark")); // 设置删除标记
productions.add(production); // 将商品信息添加到Vector中
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(resultSet, preparedStatement, conn);
JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭数据库资源
}
return productions;
return productions; // 返回所有商品信息
}
/* 用于收银系统通过商品id返回所有信息 */
public Production findByIdProduction(String id) {
Production production = new Production();
Connection conn = JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn(); // 获取数据库连接
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = conn
.prepareStatement("select * from production where id=? and delmark = 1");
preparedStatement.setString(1, id);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
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.setDelmark(resultSet.getInt("delmark"));
.prepareStatement("select * from production where id=? and delmark = 1"); // 查询指定ID且未被删除的商品
preparedStatement.setString(1, id); // 设置查询参数
resultSet = preparedStatement.executeQuery(); // 执行查询
if (resultSet.next()) { // 如果找到商品
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.setDelmark(resultSet.getInt("delmark")); // 设置删除标记
} else {
System.out.println("未找到");
return null;
return null; // 如果未找到商品返回null
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(resultSet, preparedStatement, conn);
JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭数据库资源
}
return production;
return production; // 返回商品信息
}
@Override
@ -94,35 +94,35 @@ public class productionImpl implements productionService {
*
*/
Vector<Production> productions = new Vector<Production>();
Connection conn = JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn(); // 获取数据库连接
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = conn.prepareStatement("select * from production where name like ? and delmark = 1");
String s='%'+name+'%';
preparedStatement.setString(1, s);
resultSet = preparedStatement.executeQuery();
preparedStatement = conn.prepareStatement("select * from production where name like ? and delmark = 1"); // 模糊查询商品名称
String s = '%' + name + '%'; // 构造模糊查询字符串
preparedStatement.setString(1, s); // 设置查询参数
resultSet = preparedStatement.executeQuery(); // 执行查询
while (resultSet.next()) {
while (resultSet.next()) { // 遍历结果集
Production 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.setDelmark(resultSet.getInt("delmark"));
productions.add(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.setDelmark(resultSet.getInt("delmark")); // 设置删除标记
productions.add(production); // 将商品信息添加到Vector中
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(resultSet, preparedStatement, conn);
JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭数据库资源
}
return productions;
return productions; // 返回所有匹配的商品信息
}
@Override
@ -131,34 +131,34 @@ public class productionImpl implements productionService {
*/
public Production findByNameProduction(String name) {
Production production = new Production();
Connection conn = JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn(); // 获取数据库连接
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = conn
.prepareStatement("select * from production where name=?");
preparedStatement.setString(1, name);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
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.setDelmark(resultSet.getInt("delmark"));
.prepareStatement("select * from production where name=?"); // 精确查询商品名称
preparedStatement.setString(1, name); // 设置查询参数
resultSet = preparedStatement.executeQuery(); // 执行查询
if (resultSet.next()) { // 如果找到商品
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.setDelmark(resultSet.getInt("delmark")); // 设置删除标记
} else {
return null;
return null; // 如果未找到商品返回null
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(resultSet, preparedStatement, conn);
JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭数据库资源
}
return production;
return production; // 返回商品信息
}
@Override
@ -167,39 +167,39 @@ public class productionImpl implements productionService {
*/
public int addProduction(Production p) {
int flag = 0;
Connection conn = JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn(); // 获取数据库连接
PreparedStatement preparedStatement = null;
PreparedStatement preparedStatement1 = null;
ResultSet resultSet1=null;
ResultSet resultSet1 = null;
// 假设商品不存在
try {
preparedStatement1 = conn.prepareStatement("select * from production where id=?");
preparedStatement1.setString(1, p.getId());
resultSet1=preparedStatement1.executeQuery();
if(resultSet1.next()){
return flag=2;
preparedStatement1 = conn.prepareStatement("select * from production where id=?"); // 检查商品是否已存在
preparedStatement1.setString(1, p.getId()); // 设置查询参数
resultSet1 = preparedStatement1.executeQuery(); // 执行查询
if (resultSet1.next()) {
return flag = 2; // 如果商品已存在返回2
}
preparedStatement = conn.prepareStatement("insert into production values(?,?,?,?,?,?,?,?,?,?,?)");
preparedStatement.setString(1, p.getId());
preparedStatement.setString(2, p.getName());
preparedStatement.setFloat(3, p.getInPrice());
preparedStatement.setFloat(4, p.getOutPrice());
preparedStatement.setInt(5, p.getLife());
preparedStatement.setInt(6, p.getSum());
preparedStatement.setInt(7, p.getSupplyId());
preparedStatement.setString(8, p.getId2());
preparedStatement.setString(9, p.getName2());
preparedStatement.setFloat(10, 0);
preparedStatement.setInt(11, 1);
preparedStatement.executeUpdate();
flag=1;
preparedStatement = conn.prepareStatement("insert into production values(?,?,?,?,?,?,?,?,?,?,?)"); // 插入新商品
preparedStatement.setString(1, p.getId()); // 设置商品ID
preparedStatement.setString(2, p.getName()); // 设置商品名称
preparedStatement.setFloat(3, p.getInPrice()); // 设置进价
preparedStatement.setFloat(4, p.getOutPrice()); // 设置售价
preparedStatement.setInt(5, p.getLife()); // 设置保质期
preparedStatement.setInt(6, p.getSum()); // 设置库存数量
preparedStatement.setInt(7, p.getSupplyId()); // 设置供应商ID
preparedStatement.setString(8, p.getId2()); // 设置商品类别ID
preparedStatement.setString(9, p.getName2()); // 设置商品类别名称
preparedStatement.setFloat(10, 0); // 设置未知字段
preparedStatement.setInt(11, 1); // 设置删除标记为1未删除
preparedStatement.executeUpdate(); // 执行插入
flag = 1; // 插入成功返回1
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(null, preparedStatement, conn);
JDBCUtil.close(null, preparedStatement, conn); // 关闭数据库资源
}
return flag;
return flag; // 返回操作结果
}
@Override
@ -208,22 +208,21 @@ public class productionImpl implements productionService {
*/
public int deleteProduction(String id) {
int flag = 0;
Connection conn = JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn(); // 获取数据库连接
PreparedStatement preparedStatement = null;
try {
preparedStatement = conn
.prepareStatement("delete from production where id = ?");
preparedStatement.setString(1, id);
preparedStatement.executeUpdate();
flag = 1;
.prepareStatement("delete from production where id = ?"); // 删除指定ID的商品
preparedStatement.setString(1, id); // 设置查询参数
preparedStatement.executeUpdate(); // 执行删除
flag = 1; // 删除成功返回1
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(null, preparedStatement, conn);
JDBCUtil.close(null, preparedStatement, conn); // 关闭数据库资源
}
return flag;
return flag; // 返回操作结果
}
@Override
@ -232,98 +231,99 @@ public class productionImpl implements productionService {
*/
public int updateProduction(Production p) {
int flag = 0;
Connection conn = JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn(); // 获取数据库连接
PreparedStatement preparedStatement = null;
try {
preparedStatement = conn
.prepareStatement("update production set name=?,inPrice=?,OutPrice=?,life=?,sum=?,delmark=? where id = ? and supplyId=?");
.prepareStatement("update production set name=?,inPrice=?,OutPrice=?,life=?,sum=?,delmark=? where id = ? and supplyId=?"); // 更新商品信息
preparedStatement.setString(1, p.getName());
preparedStatement.setFloat(2, p.getInPrice());
preparedStatement.setFloat(3, p.getOutPrice());
preparedStatement.setInt(4, p.getLife());
preparedStatement.setInt(5, p.getSum());
preparedStatement.setInt(6, p.getDelmark());
preparedStatement.setString(7, p.getId());
preparedStatement.setInt(8, p.getSupplyId());
preparedStatement.setString(1, p.getName()); // 设置商品名称
preparedStatement.setFloat(2, p.getInPrice()); // 设置进价
preparedStatement.setFloat(3, p.getOutPrice()); // 设置售价
preparedStatement.setInt(4, p.getLife()); // 设置保质期
preparedStatement.setInt(5, p.getSum()); // 设置库存数量
preparedStatement.setInt(6, p.getDelmark()); // 设置删除标记
preparedStatement.setString(7, p.getId()); // 设置商品ID
preparedStatement.setInt(8, p.getSupplyId()); // 设置供应商ID
preparedStatement.executeUpdate();
flag = 1;
preparedStatement.executeUpdate(); // 执行更新
flag = 1; // 更新成功返回1
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(null, preparedStatement, conn);
JDBCUtil.close(null, preparedStatement, conn); // 关闭数据库资源
}
return flag;
return flag; // 返回操作结果
}
@Override
public Vector<Production> findProductionById2(String id) {
/**
* id2
* id2
*/
Vector<Production> productions = new Vector<Production>();
Connection conn = JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn(); // 获取数据库连接
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
if(id.equals("0"))
preparedStatement = conn.prepareStatement("select * from production where delmark = 1");
else
{preparedStatement = conn.prepareStatement("select * from production where id2= ? and delmark = 1");
preparedStatement.setString(1, id);}
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
if (id.equals("0"))
preparedStatement = conn.prepareStatement("select * from production where delmark = 1"); // 查询所有未删除的商品
else {
preparedStatement = conn.prepareStatement("select * from production where id2= ? and delmark = 1"); // 查询指定类别ID且未删除的商品
preparedStatement.setString(1, id); // 设置查询参数
}
resultSet = preparedStatement.executeQuery(); // 执行查询
while (resultSet.next()) { // 遍历结果集
Production 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.setDelmark(resultSet.getInt("delmark"));
productions.add(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.setDelmark(resultSet.getInt("delmark")); // 设置删除标记
productions.add(production); // 将商品信息添加到Vector中
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(resultSet, preparedStatement, conn);
JDBCUtil.close(resultSet, preparedStatement, conn); // 关闭数据库资源
}
return productions;
return productions; // 返回所有匹配的商品信息
}
@Override
/**
*
*/
public boolean updateProductionSum(String prodId,int sum) {
public boolean updateProductionSum(String prodId, int sum) {
boolean flag = false;
Connection conn = JDBCUtil.getConn();
Connection conn = JDBCUtil.getConn(); // 获取数据库连接
PreparedStatement preparedStatement = null;
try {
preparedStatement = conn
.prepareStatement("update production set sum=?+(select sum from(select sum from production where id = ? and delmark=1 ) p) where id = ? and delmark=1;");
.prepareStatement("update production set sum=?+(select sum from(select sum from production where id = ? and delmark=1 ) p) where id = ? and delmark=1;"); // 更新商品库存数量
preparedStatement.setInt(1, sum);
preparedStatement.setString(2, prodId);
preparedStatement.setString(3, prodId);
preparedStatement.setInt(1, sum); // 设置新增库存数量
preparedStatement.setString(2, prodId); // 设置商品ID
preparedStatement.setString(3, prodId); // 设置商品ID
if(preparedStatement.executeUpdate()==1);
flag = true;
if (preparedStatement.executeUpdate() == 1)
flag = true; // 更新成功返回true
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(null, preparedStatement, conn);
JDBCUtil.close(null, preparedStatement, conn); // 关闭数据库资源
}
return flag;
return flag; // 返回操作结果
}
}
}

@ -4,121 +4,141 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Iterator;
import java.util.Vector;
// 导入相关的业务逻辑接口、数据传输对象以及工具类,用于数据库操作和日期处理等功能
import com.lingnan.supermarket.dao.storageRecordService;
import com.lingnan.supermarket.dto.StorageRecord;
import com.lingnan.supermarket.utils.DateUtil;
import com.lingnan.supermarket.utils.JDBCUtil;
// 实现storageRecordService接口--用于处理库存记录相关的数据持久化操作
public class storageRecordImpl implements storageRecordService {
// 查询所有库存记录信息并以Vector容器存储返回
@Override
public Vector<StorageRecord> findAllStorageRecord() {
Vector<StorageRecord> v=new Vector<StorageRecord>();
Connection conn=JDBCUtil.getConn();
// 创建一个Vector容器用于存放查询到的StorageRecord对象
Vector<StorageRecord> v = new Vector<StorageRecord>();
// 获取数据库连接通过JDBCUtil工具类来获取已经配置好的连接对象
Connection conn = JDBCUtil.getConn();
PreparedStatement pstmt = null;
ResultSet resultSet=null;
ResultSet resultSet = null;
try {
// 编写SQL查询语句从storageRecord表中查询所有记录并按照cDate字段降序排序
String sql = "select * from storageRecord order by cDate desc";
// 使用获取到的数据库连接对象预编译SQL语句
pstmt = conn.prepareStatement(sql);
String sql="select * from storageRecord order by cDate desc";
pstmt=conn.prepareStatement(sql);
resultSet=pstmt.executeQuery();
while(resultSet.next()) {
StorageRecord sr=new StorageRecord();
// 执行查询操作
resultSet = pstmt.executeQuery();
// 遍历结果集将每一条记录封装成StorageRecord对象并添加到Vector容器中
while (resultSet.next()) {
StorageRecord sr = new StorageRecord();
// 设置StorageRecord对象的id属性
sr.setId(resultSet.getString("id"));
// 设置StorageRecord对象的库存编号属性
sr.setTheNumber(resultSet.getString("theNumber"));
// 设置StorageRecord对象的数量属性
sr.setNum(resultSet.getInt("num"));
// 设置StorageRecord对象的执行情况属性
sr.setExecute(resultSet.getString("execute"));
// 通过DateUtil工具类的dateToString方法将数据库中获取的时间戳类型的日期数据转换为字符串类型方便后续使用第二个参数为null可能表示使用默认的日期格式转换具体看DateUtil实现
sr.setcDate(DateUtil.dateToString(resultSet.getTimestamp("cDate"), null));
// 将StorageRecord对象添加到Vector中
v.add(sr);
}
}
}
catch (SQLException e) {
} catch (SQLException e) {
// 若出现SQL异常打印异常栈信息
e.printStackTrace();
}finally {
} finally {
// 通过JDBCUtil工具类提供的方法进行关闭操作
JDBCUtil.close(resultSet, pstmt, conn);
}
return v;
return v;
}
// 根据给定的库存编号theNumber查找对应的库存记录信息并返回
@Override
public StorageRecord findByIdStorageRecord(String theNumber) {
StorageRecord sr=null;
Connection conn=JDBCUtil.getConn();
// 初始化一个StorageRecord对象为null用于存放查询到的库存记录信息如果没查到则返回null
StorageRecord sr = null;
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement pstmt = null;
ResultSet resultSet=null;
ResultSet resultSet = null;
try {
sr=new StorageRecord();
// 创建一个新的StorageRecord对象用于后续封装查询到的数据
sr = new StorageRecord();
// 预编译SQL语句用于根据给定的库存编号theNumber查询storageRecord表中的记录
pstmt = conn.prepareStatement("select *from storageRecord where theNumber=?");
pstmt.setString(1,theNumber);
// 设置SQL语句中的参数将传入的库存编号赋值给查询语句中的占位符
pstmt.setString(1, theNumber);
// 执行查询操作,获取结果集
resultSet = pstmt.executeQuery();
if(resultSet.next()){
// 如果结果集中有下一条记录则将对应记录中的各字段值封装到StorageRecord对象中
if (resultSet.next()) {
sr.setTheNumber((resultSet.getString("theNumber")));
sr.setId((resultSet.getString("id")));
sr.setNum(resultSet.getInt("num"));
sr.setExecute(resultSet.getString("execute"));
// 设置存储记录的创建日期,并进行格式化
sr.setcDate(DateUtil.dateToString(resultSet.getTimestamp("cDate"), null));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
// 若出现SQL异常打印异常栈信息
e.printStackTrace();
}finally{
} finally {
// 关闭相关资源
JDBCUtil.close(resultSet, pstmt, conn);
}
return sr;
}
public boolean insertStorageRecord(String iNumber,String time,String prodId,String execute,int sum) {
// 向库存记录表storageRecord中插入一条新的库存记录信息
public boolean insertStorageRecord(String iNumber, String time, String prodId, String execute, int sum) {
// 定义一个布尔变量用于标记插入操作是否成功初始化为false
boolean flag = false;
Connection conn=JDBCUtil.getConn();
// 获取数据库连接
Connection conn = JDBCUtil.getConn();
PreparedStatement pstmt = null;
ResultSet resultSet=null;
ResultSet resultSet = null;
try {
// 预编译插入数据的SQL语句向storageRecord表中插入五条数据
pstmt = conn.prepareStatement("insert into storageRecord values(?,?,?,?,?) ");
pstmt.setString(1,iNumber);
pstmt.setString(2,time);
pstmt.setString(3,prodId);
pstmt.setString(4,execute);
pstmt.setInt(5,sum);
if(pstmt.executeUpdate()==1){
flag = true;
// 设置SQL语句中的第一个参数
pstmt.setString(1, iNumber);
// 设置SQL语句中的第二个参数
pstmt.setString(2, time);
// 设置SQL语句中的第三个参数
pstmt.setString(3, prodId);
// 设置SQL语句中的第四个参数
pstmt.setString(4, execute);
// 设置SQL语句中的第五个参数
pstmt.setInt(5, sum);
// 执行插入操作若受影响的行数为1则将flag置为true表示插入成功
if (pstmt.executeUpdate() == 1) {
flag = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
// 若出现SQL异常打印异常栈信息
e.printStackTrace();
}finally{
} finally {
// 关闭相关资源
JDBCUtil.close(resultSet, pstmt, conn);
}
return flag;
}
}
}

@ -29,91 +29,157 @@ import com.lingnan.supermarket.table.OutTableModel;
import com.lingnan.supermarket.view.MainView;
import com.lingnan.supermarket.view.OutView;
public class CloseDialog extends JDialog implements ActionListener {
public class CloseDialog extends JDialog implements ActionListener{
/**
*
*/
private JPanel prodIdPanel,sumPanel,phonePanel,opePanel;
private JLabel prodIdLabel,sumLabel;
private JTextField prodIdTF,sumTF;
private JButton saveBtn,unSaveBtn,cancleBtn;
// Panel用于显示不同的用户信息
private JPanel prodIdPanel, sumPanel, phonePanel, opePanel;
// JLabel组件显示提示文本
private JLabel prodIdLabel, sumLabel;
// JTextField组件允许用户输入或显示文本
private JTextField prodIdTF, sumTF;
// JButton组件用户点击后触发保存、取消等操作
private JButton saveBtn, unSaveBtn, cancleBtn;
// 用于展示商品的表格模型
private OutTableModel outTableModel = new OutTableModel();
// 缓冲区操作的实现类,用于处理商品的存储与删除
private BufferImpl bufferImpl;
// 当前用户信息
private User user;
// 购物车中的商品列表
private Vector<Production> v;
public CloseDialog(JFrame parent,Vector<Production> v) {
super(parent,"提示");
setSize(350,130);
setLocationRelativeTo(null);
setModal(true);
setResizable(false);
this.setLayout(new FlowLayout());
this.v = v;
initView();
/**
*
* @param parent
* @param v
*/
public CloseDialog(JFrame parent, Vector<Production> v) {
super(parent, "提示"); // 设置对话框标题
setSize(350, 130); // 设置对话框窗口的大小
setLocationRelativeTo(null); // 将窗口放置在屏幕中央
setModal(true); // 设置对话框为模态,强制用户先处理此窗口才能继续操作其他窗口
setResizable(false); // 不允许调整窗口大小
this.setLayout(new FlowLayout()); // 设置窗口的布局方式为流式布局
this.v = v; // 将购物车中的商品列表传入此窗口
initView(); // 初始化界面组件
}
/**
*
*/
private void initView() {
// 创建并初始化显示产品ID的面板
prodIdPanel = new JPanel();
prodIdLabel = new JLabel("您还未结账,是否保存购物车");
prodIdPanel.add(prodIdLabel);
// 创建操作按钮的面板,并初始化按钮
opePanel = new JPanel();
saveBtn = new JButton("保存");
unSaveBtn = new JButton("不保存");
cancleBtn = new JButton("取消");
// 为按钮添加监听器,当按钮被点击时执行相应的操作
saveBtn.addActionListener(this);
unSaveBtn.addActionListener(this);
cancleBtn.addActionListener(this);
// 将按钮添加到面板中
opePanel.add(saveBtn);
opePanel.add(unSaveBtn);
opePanel.add(cancleBtn);
// 获取内容容器,并将各个面板添加到容器中
Container container = getContentPane();
container.add(prodIdPanel);
container.add(opePanel);
container.add(prodIdPanel); // 添加显示提示文本的面板
container.add(opePanel); // 添加操作按钮面板
debugLog("Initialized CloseDialog view."); // 输出调试日志,表示界面已经初始化
}
/**
*
*
*/
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
bufferImpl = new BufferImpl();
if(source==saveBtn){/*吧vector数组加入到缓冲区中*/
for(Production p:v) {
System.out.println("保存数据");
bufferImpl.insertInBuffer(p);
Object source = e.getSource(); // 获取事件源,判断点击的是哪个按钮
bufferImpl = new BufferImpl(); // 创建缓冲区操作实例
// 处理点击“保存”按钮的逻辑
if (source == saveBtn) {
debugLog("Save button clicked.");
// 遍历购物车中的所有商品,保存到缓冲区
for (Production p : v) {
debugLog("Saving product: " + p.getName()); // 打印调试信息,显示正在保存的商品
bufferImpl.insertInBuffer(p); // 将商品保存到缓冲区
}
// 结束程序
System.exit(0);
}else if(source==unSaveBtn) {
bufferImpl = new BufferImpl();
}
// 处理点击“不保存”按钮的逻辑
else if (source == unSaveBtn) {
debugLog("Don't save button clicked.");
// 删除所有缓冲区中的商品数据
bufferImpl.DelAllOutBuffer();
// 结束程序
System.exit(0);
}else if(source==cancleBtn) {
}
// 处理点击“取消”按钮的逻辑
else if (source == cancleBtn) {
debugLog("Cancel button clicked.");
// 关闭对话框,不做任何操作
setVisible(false);
}
}
}/*else if(source==WindowEvent)*/
/**
* 便
* @param message
*/
private void debugLog(String message) {
System.out.println("DEBUG: " + message); // 将调试信息输出到控制台
}
/**
*
*
* @param we
*/
public void windowClosing(WindowEvent we) {
debugLog("Window is closing.");
}
public void windowClosed(WindowEvent we) {
debugLog("Window closed.");
}
public void windowOpened(WindowEvent we) {
debugLog("Window opened.");
}
public void windowIconified(WindowEvent we) {
debugLog("Window minimized.");
}
public void windowDeiconified(WindowEvent we) {
debugLog("Window restored.");
}
public void windowActivated(WindowEvent we) {
debugLog("Window activated.");
}
public void windowDeactivated(WindowEvent we) {
debugLog("Window deactivated.");
}
}

@ -1,7 +1,5 @@
// 定义包名表明该类属于com.lingnan.supermarket.dialog包
package com.lingnan.supermarket.dialog;
// 导入所需的java.awt、java.awt.event、javax.swing包中的类
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
@ -20,7 +18,6 @@ import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
// 导入com.lingnan.supermarket包及其子包中的类
import com.lingnan.supermarket.*;
import com.lingnan.supermarket.dao.UserService;
import com.lingnan.supermarket.dao.impl.BufferImpl;
@ -32,379 +29,158 @@ 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;
// 定义InDialog类继承JDialog并实现ActionListener接口
public class InDialog extends JDialog implements ActionListener{
// 定义一个继承自JDialog的类InDialog用于显示添加商品的对话框
public class InDialog extends JDialog implements ActionListener {
// 声明面板变量
private JPanel prodIdPanel,sumPanel,phonePanel,opePanel;
// 定义面板、标签、文本框、按钮等组件
private JPanel prodIdPanel, sumPanel, phonePanel, opePanel;
private JLabel prodIdLabel, sumLabel;
private JTextField prodIdTF, sumTF;
private JButton addBtn, cancelBtn;
// 声明标签变量
private JLabel prodIdLabel,sumLabel;
// 声明文本框变量
private JTextField prodIdTF,sumTF;
// 声明按钮变量
private JButton addBtn,cancelBtn;
// 实例化OutTableModel对象
// 定义OutTableModel对象用于表格数据模型
private OutTableModel outTableModel = new OutTableModel();
// 声明Production对象
// 定义Production对象和productionImpl对象用于处理商品数据
private Production production;
// 声明productionImpl对象
private productionImpl productionImpl;
// 声明Vector<Production>对象
// 定义Vector集合用于存储商品数据
private Vector<Production> v;
// 声明User对象
// 定义User对象用于存储用户信息
private User user;
// 声明JFrame对象
// 定义JFrame对象用于存储父窗口
private JFrame JFramparent;
// 声明JComboBox<String>对象
// 定义JComboBox对象和字符串数组用于商品编号选择
private JComboBox<String> combo;
// 声明字符串数组
private String allProdId[] = null;
// 声明Vector<Production>对象
private Vector<Production> vAll;
// 声明静态字符串变量
private static String catalog;
// 构造方法接收JFrame、Vector<Production>和User对象作为参数
public InDialog(JFrame parent,Vector<Production> v,User user) {
super(parent,"添加商品");
// 设置对话框大小
setSize(250,200);
// 设置对话框相对于父窗口居中
setLocationRelativeTo(null);
// 设置对话框为模态
setModal(true);
// 设置对话框不可调整大小
setResizable(false);
// 设置对话框布局为FlowLayout
this.setLayout(new FlowLayout());
// 初始化父窗口引用
JFramparent=parent;
// 初始化Vector<Production>引用
this.v=v;
// 初始化User引用
this.user = user;
// 初始化视图
initView();
// 构造方法,初始化对话框并设置相关属性
public InDialog(JFrame parent, Vector<Production> 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对象
productionImpl= new productionImpl();
// 获取所有产品的列表
vAll=productionImpl.findAllproduction();
// 初始化字符串数组,长度与产品列表相同
allProdId = new String[vAll.size()];
// 遍历产品列表,将产品编号存入数组
for(int i=0;i<vAll.size();i++) {
allProdId[i]=vAll.elementAt(i).getId();
prodIdPanel = new JPanel(); // 创建商品编号面板
prodIdLabel = new JLabel("编号"); // 创建商品编号标签
productionImpl = new productionImpl(); // 创建productionImpl对象
vAll = productionImpl.findAllproduction(); // 获取所有商品数据
allProdId = new String[vAll.size()]; // 初始化商品编号数组
for (int i = 0; i < vAll.size(); i++) {
allProdId[i] = vAll.elementAt(i).getId(); // 将商品编号存入数组
}
// 设置默认目录为第一个产品编号
catalog = allProdId[0];
// 打印第一个产品编号
System.out.println(allProdId[0]);
// 创建下拉列表,使用产品编号数组作为数据源
combo = new JComboBox<String>(allProdId);
// 为下拉列表添加ItemListener监听器
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("取消");
// 为添加按钮添加ActionListener监听器
addBtn.addActionListener(this);
// 为取消按钮添加ActionListener监听器
cancelBtn.addActionListener(this);
// 将添加和取消按钮添加到操作按钮面板
opePanel.add(addBtn);
opePanel.add(cancelBtn);
// 获取内容面板
Container container = getContentPane();
// 将所有面板添加到内容面板
container.add(prodIdPanel);
container.add(sumPanel);
container.add(opePanel);
catalog = allProdId[0]; // 默认选择第一个商品编号
System.out.println(allProdId[0]); // 打印默认商品编号
combo = new JComboBox<String>(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); // 将操作面板添加到内容面板
}
// 提供一个方法来获取Vector<Production>对象
public Vector<Production> getVector(){
// 返回v对象
return v;
// 获取商品数据集合的方法
public Vector<Production> getVector() {
return v; // 返回商品数据集合
}
// 实现ItemListener接口的静态内部类用于监听下拉列表的事件
static class MyItemListener implements ItemListener{
// 下拉框监听器类
static class MyItemListener implements ItemListener {
@Override
// 当下拉列表的选项状态改变时触发此方法
public void itemStateChanged(ItemEvent e) {
// 将事件源转换为JComboBox
JComboBox cb=(JComboBox)e.getSource();
// 获取选中的选项
String select=(String) cb.getSelectedItem();
// 更新目录为选中的选项
catalog=select;
JComboBox cb = (JComboBox) e.getSource(); // 获取事件源
String select = (String) cb.getSelectedItem(); // 获取选中的商品编号
catalog = select; // 更新当前选中的商品编号
}
}
// 事件处理方法
@Override
// 实现ActionListener接口的actionPerformed方法用于处理按钮点击事件
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;
// 打印商品编号
System.out.println("proId="+prodId);
// 打印当前目录(应该是商品编号)
System.out.println("vatalog="+catalog);
// 判断数量文本框是否为空
if(sumTF.getText().equals("")) {
// 显示错误提示信息
JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE);
Object source = e.getSource(); // 获取事件源
if (source == addBtn) { // 如果事件源是添加按钮
String prodId = catalog; // 获取选中的商品编号
System.out.println("proId=" + prodId); // 打印商品编号
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()); // 获取输入的数量
// 判断输入的数量是否大于0
if(sum<0) {
// 显示错误提示信息
JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE);
if (sum < 0) { // 如果数量小于0
JOptionPane.showMessageDialog(this, "请输入大于0的数量", "提示", JOptionPane.ERROR_MESSAGE); // 提示输入大于0的数量
return;
}
// TODO 参数校验
// 判断商品是已添加、未添加还是不存在
productionImpl productionImpl = new productionImpl();
production = new Production();
// 根据商品编号查找商品
production = productionImpl.findByIdProduction(prodId);
// 参数校验
productionImpl productionImpl = new productionImpl(); // 创建productionImpl对象
production = new Production(); // 创建Production对象
production = productionImpl.findByIdProduction(prodId); // 根据商品编号查找商品
// 如果商品库中有这个商品存在
if(production!=null) {
// 标记变量,用于判断是否在购物缓冲区找到相同商品
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;
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) {
// 打印信息
if (mark == 0) { // 如果集合中不存在相同商品
System.out.println("缓存区不存在,插入新的数据");
// 更新商品的数量和价格
production.setSum(sum);
production.setPrice(sum*production.getInPrice());
// 将商品添加到购物缓冲区
v.add(production);
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);
System.out.println("插入后v的大小" + v.size()); // 打印集合大小
this.dispose(); // 关闭对话框
JOptionPane.showMessageDialog(this, "添加成功", "提示", JOptionPane.ERROR_MESSAGE); // 提示添加成功
} else { // 如果商品不存在
JOptionPane.showMessageDialog(this, "商品不存在", "提示", JOptionPane.ERROR_MESSAGE); // 提示商品不存在
}
// 如果商品库中没有这个商品
else {/*商品库没有这个商品*/
// 显示商品不存在的错误提示信息
JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE);
}
// 如果事件源是取消按钮
else if(source == cancelBtn) {
// 关闭当前对话框
this.dispose();
}
} else if (source == cancelBtn) { // 如果事件源是取消按钮
this.dispose(); // 关闭对话框
}
}
}
}

@ -11,7 +11,6 @@ import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import com.lingnan.supermarket.*;
@ -26,140 +25,134 @@ import com.lingnan.supermarket.table.OutTableModel;
import com.lingnan.supermarket.view.OutView;
public class OutDialog extends JDialog implements ActionListener{
private JPanel prodIdPanel,sumPanel,phonePanel,opePanel;
private JLabel prodIdLabel,sumLabel;
private JTextField prodIdTF,sumTF;
private JButton addBtn,cancelBtn;
public class OutDialog extends JDialog implements ActionListener {
// 定义JPanel组件用于组织界面元素
private JPanel prodIdPanel, sumPanel, phonePanel, opePanel;
// 定义JLabel用于显示文本
private JLabel prodIdLabel, sumLabel;
// 定义JTextField用于输入商品ID和数量
private JTextField prodIdTF, sumTF;
// 定义JButton按钮用于添加商品和取消操作
private JButton addBtn, cancelBtn;
// 创建OutTableModel对象用于管理表格数据
private OutTableModel outTableModel = new OutTableModel();
// 创建Buffer对象用于暂存添加的商品信息
private Buffer buffer;
// 构造函数,初始化对话框,设置窗口属性
public OutDialog(JFrame parent) {
super(parent,"添加商品");
setSize(350,300);
setLocationRelativeTo(null);
setModal(true);
setResizable(false);
this.setLayout(new FlowLayout());
initView();
super(parent, "添加商品");
setSize(350, 300); // 设置窗口大小
setLocationRelativeTo(null); // 设置窗口居中
setModal(true); // 设置为模态对话框,阻止父窗口操作
setResizable(false); // 设置不可调整窗口大小
this.setLayout(new FlowLayout()); // 设置布局方式为流式布局
initView(); // 调用初始化界面方法
}
// 初始化界面方法
private void initView() {
// 创建商品ID输入面板
prodIdPanel = new JPanel();
prodIdLabel = new JLabel("编号");
prodIdTF = new JTextField(15);
prodIdPanel.add(prodIdLabel);
prodIdPanel.add(prodIdTF);
prodIdTF = new JTextField(15); // 设置商品ID的文本框长度为15
prodIdPanel.add(prodIdLabel); // 将标签添加到面板
prodIdPanel.add(prodIdTF); // 将文本框添加到面板
// 创建数量输入面板
sumPanel = new JPanel();
sumLabel = new JLabel("数量");
sumTF = new JTextField(15);
sumPanel.add(sumLabel);
sumPanel.add(sumTF);
sumTF = new JTextField(15); // 设置数量的文本框长度为15
sumPanel.add(sumLabel); // 将标签添加到面板
sumPanel.add(sumTF); // 将文本框添加到面板
// 创建操作按钮面板
opePanel = new JPanel();
addBtn = new JButton("添加");
cancelBtn = new JButton("取消");
addBtn.addActionListener(this);
cancelBtn.addActionListener(this);
opePanel.add(addBtn);
opePanel.add(cancelBtn);
addBtn.addActionListener(this); // 添加按钮的事件监听
cancelBtn.addActionListener(this); // 取消按钮的事件监听
opePanel.add(addBtn); // 将添加按钮添加到面板
opePanel.add(cancelBtn); // 将取消按钮添加到面板
// 将所有面板添加到容器中
Container container = getContentPane();
container.add(prodIdPanel);
container.add(sumPanel);
container.add(opePanel);
container.add(prodIdPanel); // 添加商品ID面板
container.add(sumPanel); // 添加数量面板
container.add(opePanel); // 添加操作按钮面板
}
// 实现ActionListener接口的actionPerformed方法处理按钮点击事件
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source==addBtn){
//1.判断是否存在这个商品
//2.如果存在就获取这条商品记录为一个对象
//3.判断购物缓冲区是否有这个记录
//3.1如果有update数量和price
//3.2如果没有就insert这条记录把sum更新
//保存到数据库
//关闭对话框
//刷新table
String prodId =prodIdTF.getText();
System.out.println("proId="+prodId);
if(prodIdTF.getText().equals("")||sumTF.getText().equals("")) {
JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE);
return;
Object source = e.getSource(); // 获取触发事件的源对象
if (source == addBtn) { // 如果点击了"添加"按钮
// 获取商品ID和数量输入框的值
String prodId = prodIdTF.getText();
System.out.println("proId=" + prodId);
// 判断输入框是否为空
if (prodIdTF.getText().equals("") || sumTF.getText().equals("")) {
JOptionPane.showMessageDialog(this, "请输入完整", "提示", JOptionPane.ERROR_MESSAGE);
return; // 如果为空,弹出提示框并返回
}
int sum = Integer.parseInt(sumTF.getText()) ;
if(sum<0) {/*判断输入大于0*/
JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE);
return;
// 获取数量并进行格式化转换
int sum = Integer.parseInt(sumTF.getText());
// 判断数量是否为负数
if (sum < 0) {
JOptionPane.showMessageDialog(this, "请输入大于0的数量", "提示", JOptionPane.ERROR_MESSAGE);
return; // 如果为负数,弹出提示框并返回
}
//TODO 参数校验
/*/判断是已添加,未添加还是不存在*/
// 创建生产商品的实现对象,查询商品库
productionImpl productionImpl = new productionImpl();
Production production = new Production();
production = productionImpl.findByIdProduction(prodId);
if(production!=null) {/*商品库有这个商品存在*/
buffer = new Buffer();
BufferImpl BufferImpl = new BufferImpl();
buffer = BufferImpl.findOutBufferbyId(prodId);/*判断购物车是否有这个商品了,获得已添加的sum和价格*/
int allSum = production.getSum();
if(sum<0) {
JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE);
production = productionImpl.findByIdProduction(prodId); // 根据商品ID查询商品
if (production != null) { // 如果商品存在
buffer = new Buffer(); // 创建缓冲区对象
BufferImpl bufferImpl = new BufferImpl();
buffer = bufferImpl.findOutBufferbyId(prodId); // 查找购物车是否已存在该商品
int allSum = production.getSum(); // 获取商品的库存数量
// 如果商品库存不足,弹出提示框并返回
if (sum > allSum) {
JOptionPane.showMessageDialog(this, "库存数量不够,库存数:" + allSum, "提示", JOptionPane.ERROR_MESSAGE);
return;
}
if(buffer!=null)/*购物缓冲区已经有添加的商品*/{
int exeistSum = buffer.getSum();
if(sum+exeistSum>allSum)/*库存不够*/{
JOptionPane.showMessageDialog(this,"库存数量不够,库存数:"+allSum,"提示",JOptionPane.ERROR_MESSAGE);
return;
}else
BufferImpl.addOutBufferExeistProd(prodId, sum, buffer);
}
else if(buffer==null){/*添加新的商品*/
if(sum>allSum)/*库存不够*/{
JOptionPane.showMessageDialog(this,"库存数量不够,库存数:"+allSum,"提示",JOptionPane.ERROR_MESSAGE);
return;
}else
BufferImpl.addOutBufferNewProd(prodId, sum);
}
this.dispose();
JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE);
// 如果购物车中已经有该商品,更新数量和价格
if (buffer != null) {
int exeistSum = buffer.getSum(); // 获取购物车中该商品已有的数量
if (sum + exeistSum > allSum) { // 判断购物车中商品数量加起来是否超过库存
JOptionPane.showMessageDialog(this, "库存数量不够,库存数:" + allSum, "提示", JOptionPane.ERROR_MESSAGE);
return; // 如果超过库存,弹出提示框并返回
} else {
bufferImpl.addOutBufferExeistProd(prodId, sum, buffer); // 更新购物车中的商品数量
}
} else { // 如果购物车中没有该商品
bufferImpl.addOutBufferNewProd(prodId, sum); // 将商品添加到购物车
}
this.dispose(); // 关闭当前对话框
JOptionPane.showMessageDialog(this, "添加成功", "提示", JOptionPane.INFORMATION_MESSAGE); // 弹出添加成功提示
} else { // 如果商品不存在
JOptionPane.showMessageDialog(this, "商品不存在", "提示", JOptionPane.ERROR_MESSAGE); // 弹出商品不存在提示
}
else {
JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE);
}
}
else if(source == cancelBtn) {
this.dispose();
} else if (source == cancelBtn) { // 如果点击了"取消"按钮
this.dispose(); // 关闭当前对话框
}
}
}

@ -1,7 +1,5 @@
// 定义包名表明该类属于com.lingnan.supermarket.dialog包
package com.lingnan.supermarket.dialog;
// 导入所需的java.awt和javax.swing包中的类
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
@ -19,8 +17,6 @@ import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
// 导入com.lingnan.supermarket包中的相关类
import com.lingnan.supermarket.*;
import com.lingnan.supermarket.dao.SupplierInfService;
import com.lingnan.supermarket.dao.productionService;
import com.lingnan.supermarket.dao.impl.SupplierInfImpl;
@ -31,244 +27,180 @@ 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;
// 定义ProductionDialog类继承JDialog并实现ActionListener接口
/**
*
* JDialog
*/
public class ProductionDialog extends JDialog implements ActionListener {
// 声明多个JPanel对象用于布局
// 定义各个面板,用于组织界面布局
private JPanel namePanel, addressPanel, contactPanel,
opePanel,idPanel,inpricePanel,outpricePanel,lifePanel,
sumPanel,supplyidPanel,id2Panel,name2Panel;
opePanel, idPanel, inpricePanel, outpricePanel, lifePanel,
sumPanel, supplyidPanel, id2Panel, name2Panel;
// 声明多个JLabel对象用于显示文本
// 定义各个标签,用于显示提示信息
private JLabel nameLabel, addressLabel, contactLabel,
idLabel,inpriceLabel,outpriceLabel,lifeLabel,sumLabel,
supplyidLabel,id2Label,name2Label;
idLabel, inpriceLabel, outpriceLabel, lifeLabel, sumLabel,
supplyidLabel, id2Label, name2Label;
// 声明多个JTextField对象用于文本输入
// 定义各个文本框,用于用户输入数据
private JTextField nameTF, addressTF, contactTF,
idTF,inpriceTF,outpriceTF,lifeTF,sumTF,
supplyidTF,id2TF,name2TF;
idTF, inpriceTF, outpriceTF, lifeTF, sumTF,
supplyidTF, id2TF, name2TF;
// 声明按钮对象,用于保存和取消操作
// 定义保存和取消按钮
private JButton saveBtn, cancelBtn;
// 实例化productionService对象用于操作产品数据
// 商品服务接口的实现类,用于操作商品数据
private productionService productionService = new productionImpl();
// 下拉类别相关变量
private String log[]=null;
private ArrayList<String>alog=null;
private ProdCatalogTM prodCatalogTM;
private ProdCatalog pc;
private prodCatalogImpl pci;
private JComboBox<String> combo;
private String id2;
private String name2;
private String log[] = null; // 商品类别名称数组
private ArrayList<String> alog = null; // 商品类别名称列表
private ProdCatalogTM prodCatalogTM; // 商品类别表格模型
private ProdCatalog pc; // 商品类别对象
private prodCatalogImpl pci; // 商品类别服务实现类
private JComboBox<String> combo; // 商品类别下拉框
private String id2; // 商品类别ID
private String name2; // 商品类别名称
// 下拉供应商类别相关变量
private String superlier[]=null;
private ArrayList<String>asuperlier=null;
private SupplierInf si;
private SupplierInfImpl sii;
private JComboBox<String> combo1;
private int supplyid;
private String superlier[] = null; // 供应商名称数组
private ArrayList<String> asuperlier = null; // 供应商名称列表
private SupplierInf si; // 供应商对象
private SupplierInfImpl sii; // 供应商服务实现类
private JComboBox<String> combo1; // 供应商下拉框
private int supplyid; // 供应商ID
// StorageView对象用于界面更新
private StorageView storageView;
private StorageView storageView; // 库存视图
private Production production; // 商品对象
// 声明Production对象用于存储产品信息
private Production production;
// 构造方法接收一个JFrame对象作为父窗口并设置对话框标题为"添加"
/**
*
* @param parent
*/
public ProductionDialog(JFrame parent) {
super(parent, "添加");
super(parent, "添加"); // 调用父类构造函数,设置标题为“添加”
// 设置对话框大小为350x500像素
// 设置对话框大小
setSize(350, 500);
// 设置对话框相对于屏幕居中
// 设置对话框居中显示
setLocationRelativeTo(null);
// 设置对话框为模态,即不关闭此对话框无法操作其他窗口
// 设置为模态对话框,即打开对话框时,父窗口不可操作
setModal(true);
// 设置对话框不可调整大小
setResizable(false);
setResizable(false); // 禁止调整对话框大小
// 设置对话框的布局管理器为FlowLayout
// 设置布局为流式布局
this.setLayout(new FlowLayout());
// 初始化视图
initView();
}
// 初始化视图的方法
/**
*
*/
private void initView() {
// 创建商品编号输入面板
// 商品编号面板
idPanel = new JPanel();
// 创建商品编号标签
idLabel = new JLabel("商品编号");
// 创建商品编号文本框
idTF = new JTextField(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);
// 创建供应商选择面板
// 供应商名下拉框面板
supplyidPanel = new JPanel();
// 创建供应商标签
supplyidLabel = new JLabel("供应商");
// 注释掉的代码,原本可能用于创建供应商文本框,但现在使用下拉框
// supplyidTF = new JTextField(15);
// 实例化SupplierInfImpl对象用于操作供应商信息
sii=new SupplierInfImpl();
// 调用findNameSupplier方法获取所有供应商的名称并存储到asuperlier列表中
this.asuperlier=sii.findNameSupplier();
// 根据asuperlier列表的大小创建superlier字符串数组
this.superlier=new String[asuperlier.size()];
// 将asuperlier列表中的元素复制到superlier数组中
for(int i=0;i<asuperlier.size();i++)
superlier[i]=asuperlier.get(i);
// 遍历superlier数组并打印每个供应商的名称
for(int i=0;i<superlier.length;i++)
{
System.out.println(superlier[i]);
}
sii = new SupplierInfImpl(); // 创建供应商服务实现类对象
this.asuperlier = sii.findNameSupplier(); // 获取所有供应商名称
this.superlier = new String[asuperlier.size()]; // 初始化供应商名称数组
for (int i = 0; i < asuperlier.size(); i++)
superlier[i] = asuperlier.get(i); // 将供应商名称存入数组
// 创建一个新的JComboBox使用superlier数组作为下拉列表的数据源
combo1 = new JComboBox<String>(superlier);
// 为combo1添加一个ItemListener用于监听下拉列表选项的变化
combo1.addItemListener(new MyItemListener1());
combo1 = new JComboBox<String>(superlier); // 创建供应商下拉框
combo1.addItemListener(new MyItemListener1()); // 添加下拉框监听器
// 将供应商标签和下拉列表添加到supplyidPanel面板中
supplyidPanel.add(supplyidLabel);
supplyidPanel.add(combo1);
// 注释掉的代码原本可能用于创建分类id的输入面板
/* id2Panel = new JPanel();
id2Label = new JLabel("分类id");
id2TF = new JTextField(id2,15);
id2Panel.add(id2Label);
id2Panel.add(id2TF);*/
// 创建类名输入面板
// 类名下拉框面板
name2Panel = new JPanel();
// 创建类名标签
name2Label = new JLabel("类名");
// 实例化prodCatalogImpl对象用于操作产品目录信息
pci=new prodCatalogImpl();
// 调用findNameProdCatalog方法获取所有产品目录的名称并存储到alog列表中
this.alog=pci.findNameProdCatalog();
// 根据alog列表的大小创建log字符串数组
this.log=new String[alog.size()];
// 将alog列表中的元素复制到log数组中
for(int i=0;i<alog.size();i++)
log[i]=alog.get(i);
// 创建一个新的JComboBox使用log数组作为下拉列表的数据源
combo = new JComboBox<String>(log);
// 为combo添加一个ItemListener用于监听下拉列表选项的变化
combo.addItemListener(new MyItemListener());
// 将类名标签和下拉列表添加到name2Panel面板中
pci = new prodCatalogImpl(); // 创建商品类别服务实现类对象
this.alog = pci.findNameProdCatalog(); // 获取所有商品类别名称
this.log = new String[alog.size()]; // 初始化商品类别名称数组
for (int i = 0; i < alog.size(); i++)
log[i] = alog.get(i); // 将商品类别名称存入数组
combo = new JComboBox<String>(log); // 创建商品类别下拉框
combo.addItemListener(new MyItemListener()); // 添加下拉框监听器
name2Panel.add(name2Label);
name2Panel.add(combo);
// 创建地址输入面板
// 地址面板
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("取消");
// 为保存按钮添加ActionListener监听按钮点击事件
saveBtn.addActionListener(this);
// 为取消按钮添加ActionListener监听按钮点击事件
cancelBtn.addActionListener(this);
// 将保存和取消按钮添加到操作按钮面板
saveBtn.addActionListener(this); // 添加保存按钮监听器
cancelBtn.addActionListener(this); // 添加取消按钮监听器
opePanel.add(saveBtn);
opePanel.add(cancelBtn);
// 获取内容面板
// 将所有面板添加到容器中
Container container = getContentPane();
// 将所有面板添加到内容面板中
container.add(idPanel);
container.add(namePanel);
container.add(inpricePanel);
@ -276,205 +208,107 @@ public class ProductionDialog extends JDialog implements ActionListener {
container.add(lifePanel);
container.add(sumPanel);
container.add(supplyidPanel);
// 注释掉的代码,可能原本用于添加另一个面板
//container.add(id2Panel);
container.add(name2Panel);
container.add(opePanel);
}
// 重写actionPerformed方法以处理按钮点击事件
@Override
public void actionPerformed(ActionEvent e) {
// 获取事件源
Object source = e.getSource();
// 如果事件源是保存按钮
if (source == saveBtn) {
// 获取文本框中的数据
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 参数校验
// 如果production对象为null表示是添加新商品
if (this.production == null) {
// 如果supplyid为-1表示商品检索出错
if(supplyid==-1){
JOptionPane.showMessageDialog(this, "商品检索出错", "提示",
JOptionPane.ERROR_MESSAGE);
return; // 退出方法
}
// 如果supplyid为0表示用户没有选择商品名
if(supplyid==0){
JOptionPane.showMessageDialog(this, "请选择商品名", "提示",
JOptionPane.ERROR_MESSAGE);
return; // 退出方法
}
// 如果id2为"0",表示用户没有选择商品类
if(id2.equals("0")){
JOptionPane.showMessageDialog(this, "请选择商品类", "提示",
JOptionPane.ERROR_MESSAGE);
return; // 退出方法
}
// 创建一个新的Production对象
Production production = new Production();
// 设置商品ID
production.setId(id);
// 设置商品名称
production.setName(name);
// 设置商品进价
production.setInPrice(inprice);
// 设置商品售价
production.setOutPrice(outprice);
// 设置商品保质期
production.setLife(life);
// 设置商品库存
production.setSum(sum);
// 设置供应商ID
production.setSupplyId(supplyid);
// 设置商品类别ID
production.setId2(id2);
// 设置商品类别名称
production.setName2(name2);
// 调用productionService的addProduction方法添加商品并获取返回结果
int result = productionService.addProduction(production);
// int result = 1; // 注释掉的代码,可能是用于测试的硬编码结果
// 如果添加成功
if (result == 1) {
// 显示添加成功的消息框
JOptionPane.showMessageDialog(this, "添加成功", "提示",
JOptionPane.INFORMATION_MESSAGE);
// 关闭当前对话框
this.dispose();
}
// 如果返回结果为2表示已存在该商品
else if(result == 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);
/**
*
* @param e
*/
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == saveBtn) {
// 获取输入的数据
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());
// 参数校验
if (this.production == null) {
if (supplyid == -1) {
JOptionPane.showMessageDialog(this, "商品检索出错", "提示",
JOptionPane.ERROR_MESSAGE);
return;
}
}*/
// 如果事件源是取消按钮
else if (source == cancelBtn) {
// 关闭当前对话框
this.dispose();
if (supplyid == 0) {
JOptionPane.showMessageDialog(this, "请选择商品名", "提示",
JOptionPane.ERROR_MESSAGE);
return;
}
// 定义一个内部类MyItemListener实现ItemListener接口用于监听下拉列表选项的变化
public class MyItemListener implements ItemListener {
// 实现接口的itemStateChanged方法
@Override
public void itemStateChanged(ItemEvent e) {
// 将事件源转换为JComboBox
JComboBox cb = (JComboBox) e.getSource();
// 获取选中的下拉列表项,并转换为字符串
name2 = (String) cb.getSelectedItem();
// 创建prodCatalogImpl对象用于查询商品类别信息
pci =new prodCatalogImpl();
// 遍历log数组寻找与选中项匹配的商品类别名称
for(int i=0;i<log.length;i++){
// 如果找到匹配的商品类别名称
if(name2.equals(log[i]))
// 调用findProdCatalogByname方法获取商品类别ID
id2=pci.findProdCatalogByname(name2);
}
}
if (id2.equals("0")) {
JOptionPane.showMessageDialog(this, "请选择商品类", "提示",
JOptionPane.ERROR_MESSAGE);
return;
}
// 定义另一个内部类MyItemListener1实现ItemListener接口用于监听供应商下拉列表选项的变化
public class MyItemListener1 implements ItemListener {
// 实现接口的itemStateChanged方法
@Override
public void itemStateChanged(ItemEvent e) {
// 将事件源转换为JComboBox
JComboBox cb = (JComboBox) e.getSource();
// 获取选中的下拉列表项,并转换为字符串
String suppliername = (String) cb.getSelectedItem();
// 创建SupplierInfImpl对象用于查询供应商信息
sii =new SupplierInfImpl();
// 遍历superlier数组寻找与选中项匹配的供应商名称
for(int i=0;i<superlier.length;i++){
// 如果找到匹配的供应商名称
if(suppliername.equals(superlier[i]))
// 调用findIdSupplierByName方法获取供应商ID
supplyid=sii.findIdSupplierByName(suppliername);
}
// 创建商品对象并设置属性
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);
if (result == 1) {
JOptionPane.showMessageDialog(this, "添加成功", "提示",
JOptionPane.INFORMATION_MESSAGE);
this.dispose(); // 关闭对话框
} else if (result == 2) {
JOptionPane.showMessageDialog(this, "已存在该商品", "提示",
JOptionPane.ERROR_MESSAGE);
} else {
JOptionPane.showMessageDialog(this, "出错!添加失败", "提示",
JOptionPane.ERROR_MESSAGE);
}
}
} else if (source == cancelBtn) {
// 关闭对话框
this.dispose();
}
}
}
/**
*
*/
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 < log.length; i++) {
if (name2.equals(log[i]))
id2 = pci.findProdCatalogByname(name2); // 根据名称获取商品类别ID
}
}
}
/**
*
*/
public class MyItemListener1 implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
JComboBox cb = (JComboBox) e.getSource();
String suppliername = (String) cb.getSelectedItem(); // 获取选中的供应商名称
sii = new SupplierInfImpl();
for (int i = 0; i < superlier.length; i++) {
if (suppliername.equals(superlier[i]))
supplyid = sii.findIdSupplierByName(suppliername); // 根据名称获取供应商ID
}
}
}
}

@ -1,144 +1,98 @@
// 定义包名表明该类属于com.lingnan.supermarket.dialog包
package com.lingnan.supermarket.dialog;
// 导入java.awt.Container类用于布局管理
import java.awt.Container;
// 导入java.awt.FlowLayout类用于流式布局
import java.awt.FlowLayout;
// 导入java.awt.event.ActionEvent类用于处理动作事件
import java.awt.event.ActionEvent;
// 导入java.awt.event.ActionListener接口用于实现事件监听
import java.awt.event.ActionListener;
// 导入javax.swing.JButton类用于创建按钮
import javax.swing.JButton;
// 导入javax.swing.JDialog类用于创建对话框
import javax.swing.JDialog;
// 导入javax.swing.JFrame类用于创建主窗口框架
import javax.swing.JFrame;
// 导入javax.swing.JLabel类用于创建标签
import javax.swing.JLabel;
import javax.swing.JOptionPane;
// 导入javax.swing.JPanel类用于创建面板
import javax.swing.JPanel;
// 导入javax.swing.JTextField类用于创建文本框
import javax.swing.JTextField;
// 导入com.lingnan.supermarket包可能包含其他相关的类和接口
import com.lingnan.supermarket.*;
// 导入com.lingnan.supermarket.dao.SupplierInfService接口用于定义供应商信息操作服务
import com.lingnan.supermarket.dao.SupplierInfService;
// 导入com.lingnan.supermarket.dao.impl.SupplierInfImpl类用于实现SupplierInfService接口
import com.lingnan.supermarket.dao.impl.SupplierInfImpl;
// 导入com.lingnan.supermarket.dto.SupplierInf类用于表示供应商信息数据传输对象
import com.lingnan.supermarket.dto.SupplierInf;
// 导入com.lingnan.supermarket.view.SupplierView类用于供应商信息视图界面
import com.lingnan.supermarket.view.SupplierView;
// 定义SupplierInfDialog类该类继承自JDialog并实现ActionListener接口用于创建供应商信息对话框
public class SupplierInfDialog extends JDialog implements ActionListener {
// 声明面板变量,用于不同的输入区域
private JPanel namePanel, addressPanel, contactPanel, emailPanel, opePanel;
// 声明标签变量,用于显示文本信息
private JLabel nameLabel, addressLabel, contactLabel, emailLabel;
// 声明文本框变量,用于输入信息
private JTextField nameTF, addressTF, contactTF, emailTF;
// 声明按钮变量,用于执行保存和取消操作
private JButton saveBtn, cancelBtn;
// 声明SupplierInfService服务对象用于操作供应商信息
private SupplierInfService supplierInfService = new SupplierInfImpl();
private SupplierInfService supplierInfService = new SupplierInfImpl(); // 供应商信息服务接口的实现类
// 声明SupplierView视图对象用于更新供应商信息视图
private SupplierView supplierView;
private SupplierView supplierView; // 供应商视图对象
// 声明SupplierInf对象用于存储供应商信息
private SupplierInf supplierInf;
private SupplierInf supplierInf; // 供应商信息对象
// 构造方法,接收父窗口和供应商视图对象作为参数
//构造函数,初始化对话框
public SupplierInfDialog(JFrame parent, SupplierView supplierView) {
// 调用父类构造方法,设置对话框标题
super(parent, "添加");
// 将传入的供应商视图对象赋值给成员变量
this.supplierView = supplierView;
super(parent, "添加"); // 调用父类构造函数,设置对话框标题为“添加”
this.supplierView = supplierView; // 保存供应商视图对象
// 设置对话框大小
setSize(350, 300);
setSize(350, 300); // 设置对话框大小
// 设置对话框相对于父窗口居中
setLocationRelativeTo(null);
setLocationRelativeTo(null); // 设置对话框居中显示
// 设置对话框为模态,阻止其他窗口操作
setModal(true);
// 设置对话框不可调整大小
setResizable(false);
setModal(true); // 设置对话框为模态对话框
setResizable(false); // 禁止调整对话框大小
// 设置对话框的布局管理器为FlowLayout
this.setLayout(new FlowLayout());
this.setLayout(new FlowLayout()); // 设置对话框的布局为流式布局
// 初始化视图组件
initView();
initView(); // 初始化对话框界面
}
// 初始化视图组件的方法
/**
*
*/
private void initView() {
// 创建名称输入面板
// 名称面板
namePanel = new JPanel();
// 创建名称标签
nameLabel = new JLabel("名称");
// 创建名称文本框
nameTF = new JTextField(15);
// 将标签和文本框添加到名称输入面板
namePanel.add(nameLabel);
namePanel.add(nameTF);
// 创建地址输入面板
// 地址面板
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);
// 创建邮箱输入面板
// 邮箱面板
emailPanel = new JPanel();
// 创建邮箱标签
emailLabel = new JLabel("邮箱");
// 创建邮箱文本框
emailTF = new JTextField(15);
// 将标签和文本框添加到邮箱输入面板
emailPanel.add(emailLabel);
emailPanel.add(emailTF);
// 创建操作按钮面板
// 操作面板
opePanel = new JPanel();
// 创建保存按钮
saveBtn = new JButton("保存");
// 创建取消按钮
cancelBtn = new JButton("取消");
// 为保存按钮添加事件监听器当前类实现了ActionListener接口
saveBtn.addActionListener(this);
// 为取消按钮添加事件监听器当前类实现了ActionListener接口
cancelBtn.addActionListener(this);
// 将保存和取消按钮添加到操作按钮面板
saveBtn.addActionListener(this); // 为保存按钮添加事件监听器
cancelBtn.addActionListener(this); // 为取消按钮添加事件监听器
opePanel.add(saveBtn);
opePanel.add(cancelBtn);
// 获取对话框的内容面板
// 将各个面板添加到对话框的内容面板中
Container container = getContentPane();
// 将各个输入面板和操作按钮面板添加到内容面板
container.add(namePanel);
container.add(addressPanel);
container.add(contactPanel);
@ -146,83 +100,51 @@ public class SupplierInfDialog extends JDialog implements ActionListener {
container.add(opePanel);
}
// 实现ActionListener接口的actionPerformed方法用于处理按钮点击事件
/**
*
*
* @param e
*/
@Override
public void actionPerformed(ActionEvent e) {
// 获取事件源,即被点击的按钮
Object source = e.getSource();
// 判断如果事件源是保存按钮
if (source == saveBtn) {
Object source = e.getSource(); // 获取事件源
if (source == saveBtn) { // 如果事件源是保存按钮
// 获取用户输入的数据
String name = nameTF.getText();
String address = addressTF.getText();
String contact = contactTF.getText();
String email = emailTF.getText();
// TODO 参数校验,此处应有对输入数据的校验逻辑
// 如果supplierInf为null则进行添加操作
if (this.supplierInf == null) {
// TODO 参数校验
if (this.supplierInf == null) { // 如果当前没有供应商信息对象(即新增操作)
SupplierInf supplierInf = new SupplierInf();
supplierInf.setName(name);
supplierInf.setAddress(address);
supplierInf.setContact(contact);
supplierInf.setEmail(email);
// 调用服务层方法添加供应商信息,并获取操作结果
int result = supplierInfService.addSupplierInf(supplierInf);
// 如果添加成功
if (result == 1) {
// 显示添加成功的信息对话框
JOptionPane.showMessageDialog(this, "添加成功", "提示",
JOptionPane.INFORMATION_MESSAGE);
// 关闭当前对话框
this.dispose();
} else {
// 显示添加失败的信息对话框
JOptionPane.showMessageDialog(this, "添加失败", "提示",
JOptionPane.ERROR_MESSAGE);
int result = supplierInfService.addSupplierInf(supplierInf); // 调用服务接口添加供应商信息
if (result == 1) { // 如果添加成功
JOptionPane.showMessageDialog(this, "添加成功", "提示", JOptionPane.INFORMATION_MESSAGE);
this.dispose(); // 关闭对话框
} else { // 如果添加失败
JOptionPane.showMessageDialog(this, "添加失败", "提示", JOptionPane.ERROR_MESSAGE);
}
}/*else{
// 如果supplierInf不为null则进行更新操作此部分代码被注释掉
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();
} /*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(); // 关闭对话框
}
}
}
}

@ -2,6 +2,7 @@ package com.lingnan.supermarket.dto;
import com.lingnan.supermarket.dto.base.BaseProduction;
public class Buffer extends BaseProduction{
// 定义一个 Buffer 类,继承自 BaseProduction
public class Buffer extends BaseProduction {
}
}

@ -2,40 +2,71 @@ package com.lingnan.supermarket.dto;
import java.util.Date;
//表示出库订单的相关信息
public class OutOrder {
private String oNumber;
private Float allOutPrice;
private Date oDate;
private String principal;
private int delmark;
//出库订单编号
private String oNumber;
// 出库订单的总出库价格
private Float allOutPrice;
//出库日期
private Date oDate;
//负责人
private String principal;
//删除标记用于标识该订单是否被删除0已删除1未删除
private int delmark;
// 获取出库订单编号
public String getoNumber() {
return oNumber;
}
// 设置出库订单编号
public void setoNumber(String oNumber) {
this.oNumber = oNumber;
}
// 获取出库订单的总出库价格
public Float getAllOutPrice() {
return allOutPrice;
}
// 设置出库订单的总出库价格
public void setAllOutPrice(Float allOutPrice) {
this.allOutPrice = allOutPrice;
}
// 获取出库日期
public Date getoDate() {
return oDate;
}
// 设置出库日期
public void setoDate(Date oDate) {
this.oDate = oDate;
}
//获取负责人
public String getPrincipal() {
return principal;
}
//设置负责人
public void setPrincipal(String principal) {
this.principal = principal;
}
//获取删除标记
public int getDelmark() {
return delmark;
}
//设置删除标记
public void setDelmark(int delmark) {
this.delmark = delmark;
}
}
}

@ -2,26 +2,46 @@ package com.lingnan.supermarket.dto;
import com.lingnan.supermarket.dto.base.BsDomain;
public class OutRecord extends BsDomain{
private String oNumber;
private int sum;
private Float outPrice;
// 出库记录类
public class OutRecord extends BsDomain {
// 出库编号
private String oNumber;
// 出库数量
private int sum;
// 出库单价
private Float outPrice;
// 获取出库编号
public String getoNumber() {
return oNumber;
}
// 设置出库编号
public void setoNumber(String oNumber) {
this.oNumber = oNumber;
}
//获取出库数量
public int getSum() {
return sum;
}
//设置出库数量
public void setSum(int sum) {
this.sum = sum;
}
//获取出库单价
public Float getOutPrice() {
return outPrice;
}
//设置出库单价
public void setOutPrice(Float outPrice) {
this.outPrice = outPrice;
}
}
}

@ -1,15 +1,18 @@
package com.lingnan.supermarket.dto.base;
// 封装对象的通用属性
public class BaseDomain {
private Integer id;
// 获取 id 属性的 getter 方法
public Integer getId() {
return id;
}
// 设置 id 属性的 setter 方法
public void setId(Integer id) {
this.id = id;
}
}
}

@ -1,86 +1,148 @@
package com.lingnan.supermarket.dto.base;
// 封装商品相关的通用属性
public class BaseProduction {
// 商品标识符
private String id;
// 商品的名称
private String name;
private float inPrice;
private float OutPrice;
private int life;
private int sum;
private int supplyId;
private String id2;
private String name2;
private Float price;
private int delmark;
public String getId() {
// 商品的进货价格
private float inPrice;
// 商品的出货价格
private float OutPrice;
// 商品的保质期
private int life;
// 商品的库存数量
private int sum;
// 供应商的唯一标识符
private int supplyId;
// 商品的辅助标识符
private String id2;
// 商品的辅助名称
private String name2;
// 商品的总价格,浮点数类型
private Float price;
// 商品的删除标记用于标识商品是否被删除0未删除1已删除
private int delmark;
// 获取商品唯一标识符的方法
public String getId() {
return id;
}
// 设置商品唯一标识符
public void setId(String id) {
this.id = id;
}
// 获取商品删除标记
public int getDelmark() {
return delmark;
}
// 设置商品删除标记
public void setDelmark(int delmark) {
this.delmark = delmark;
}
// 获取商品库存数量
public int getSum() {
return sum;
}
// 设置商品库存数量
public void setSum(int sum) {
this.sum = sum;
}
// 获取商品名称
public String getName() {
return name;
}
// 设置商品名称
public void setName(String name) {
this.name = name;
}
// 获取商品进货价格
public float getInPrice() {
return inPrice;
}
// 设置商品进货价格
public void setInPrice(float inPrice) {
this.inPrice = inPrice;
}
// 获取商品出货价格
public float getOutPrice() {
return OutPrice;
}
// 设置商品出货价格
public void setOutPrice(float outPrice) {
OutPrice = outPrice;
}
// 获取商品保质期
public int getLife() {
return life;
}
// 设置商品保质期
public void setLife(int life) {
this.life = life;
}
// 获取商品辅助标识符
public String getId2() {
return id2;
}
// 设置商品辅助标识符
public void setId2(String id2) {
this.id2 = id2;
}
// 获取商品辅助名称
public String getName2() {
return name2;
}
// 设置商品辅助名称
public void setName2(String name2) {
this.name2 = name2;
}
// 获取供应商唯一标识符
public int getSupplyId() {
return supplyId;
}
// 设置供应商唯一标识符
public void setSupplyId(int supplyId) {
this.supplyId = supplyId;
}
// 获取商品总价格
public Float getPrice() {
return price;
}
// 设置商品总价格
public void setPrice(Float price) {
this.price = price;
}
}
}

@ -1,13 +1,13 @@
package com.lingnan.supermarket.dto.base;
public class BsDomain {
private String id;
private String id;
// 获取 id 属性的 getter 方法
public String getId() {
return id;
}
// 设置 id 属性的 setter 方法
public void setId(String id) {
this.id = id;
}
}
}

@ -1,119 +1,116 @@
// 定义InOrderTM类该类继承自AbstractTableModel用于创建表格模型
public class InOrderTM extends AbstractTableModel{
package com.lingnan.supermarket.table;
// 定义列名数组,存储表格的列标题
private String [] columnName = {"订单号","总价","时间","负责人","状态"};
import java.util.List;
import java.util.Vector;
// 创建Production接口的实现类对象用于操作Production数据
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.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;
//用于管理入库订单的表格数据
public class InOrderTM extends AbstractTableModel {
// 表格列名
private String[] columnName = {"订单号", "总价", "时间", "负责人", "状态"};
// 商品服务实现类
private productionImpl prodDao = new productionImpl();
// 定义一个Vector集合用于存储InOrder对象表示订单数据
private Vector<InOrder> InOrders;
// 创建inOrderService接口的实现类对象用于操作InOrder数据
private inOrderServiceImpl inOrderImpl= new inOrderServiceImpl();
// 定义InOrder对象用于存储当前操作的订单
private InOrder inOrder ;
// 入库订单数据集合
private Vector<InOrder> InOrders;
// 定义一个String变量用于存储订单号
String iNumber ;/*订单号*/
// 入库订单服务实现类
private inOrderServiceImpl inOrderImpl = new inOrderServiceImpl();
// 当前操作的入库订单对象
private InOrder inOrder;
// 定义方法allInOrderRecord用于获取所有订单记录
// 订单号
String iNumber;
//加载所有入库订单记录
public void allInOrderRecord() {
// 将添加的商品加入到静态变量Vector数组中
/*prod = InDialog.getProduction();*/
// 调用inOrderImpl的findAllInOrder方法获取所有订单记录并赋值给InOrders
// 从数据库中获取所有入库订单记录
InOrders = inOrderImpl.findAllInOrder();
}
// 定义方法resultOfFind根据分类结果获取订单记录
//根据分类查找入库订单记录0全部1已入库2待入库3已取消
public void resultOfFind(int catalog) {
// 如果分类编号为0获取所有订单记录
if(catalog==0)
if (catalog == 0) {
// 加载所有入库订单记录
InOrders = inOrderImpl.findAllInOrder();
else
// 否则,根据状态获取订单记录
} else {
// 根据状态查找入库订单记录
InOrders = inOrderImpl.FindStatus(catalog);
}
}
// 定义方法resultOfNumber根据订单号查找订单
// 根据订单号查找入库订单记录
public void resultOfNumber(String Number) {
// 初始化InOrders集合
InOrders=new Vector<InOrder>();
// 调用inOrderImpl的findByIdinOrder方法根据订单号查找订单并添加到InOrders集合中
InOrders = new Vector<InOrder>();
inOrder = inOrderImpl.findByIdinOrder(Number);
InOrders.add(inOrder);
}
// 重写getRowCount方法返回表格模型中的行数
//获取表格行数
@Override
public int getRowCount() {
return InOrders.size(); // 返回InOrders集合的大小即行数
return InOrders.size();
}
/* public Float getAllPrice() {
return BufferImpl.InBufferAllPrice();
}
*/
// 重写getColumnCount方法返回表格模型中的列数
// 获取表格列数
@Override
public int getColumnCount() {
return columnName.length; // 返回列名数组的长度,即列的数量
return columnName.length;
}
// 重写getValueAt方法根据行索引和列索引获取表格模型中的值
//获取指定单元格的值
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
inOrder = InOrders.get(rowIndex); // 从InOrders集合中获取指定行索引的InOrder对象
/* // 以下为打印调试信息,已被注释
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) { // 如果列索引为0
return inOrder.getiNumber(); // 返回订单号
}else if(columnIndex==1) { // 如果列索引为1
return inOrder.getAllInPrice(); // 返回订单的总价
}else if(columnIndex==2) { // 如果列索引为2
return inOrder.getInDate(); // 返回订单的时间
}else if(columnIndex==3) { // 如果列索引为3
return inOrder.getPrincipal(); // 返回订单的负责人
}else if(columnIndex==4) { // 如果列索引为4
String status = null; // 初始化状态字符串
if(inOrder.getStatus()==1) // 根据订单状态设置状态字符串
status= "已入库";
else if(inOrder.getStatus()==2)
status= "待入库";
else if(inOrder.getStatus()==3)
status= "已取消";
return status; // 返回订单的状态
}else { // 如果列索引不匹配上述任何情况
return null; // 返回null
inOrder = InOrders.get(rowIndex);
iNumber = inOrder.getiNumber();
// 根据列索引返回对应的数据
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 {
return null;
}
}
// 定义方法getINumber返回当前对象的订单号用于修改或删除记录
//获取当前操作的订单号
public String getINumber() {
return iNumber; // 返回当前对象的订单号
return iNumber;
}
// 重写getColumnName方法根据列索引返回对应的列名
//获取指定列的列名
@Override
public String getColumnName(int column) {
return columnName[column]; // 返回列名数组中对应索引的列名
return columnName[column];
}
}
}

@ -1,96 +1,91 @@
// 定义InRecordTM类该类继承自AbstractTableModel用于创建表格模型
public class InRecordTM extends AbstractTableModel{
package com.lingnan.supermarket.table;
// 定义列名数组,存储表格的列标题
private String [] columnName = {"订单号","id","数量","金额"};
import java.util.List;
import java.util.Vector;
// 创建Production接口的实现类对象用于操作Production数据
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.dto.InRecord;
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;
//用于管理入库记录的表格数据
public class InRecordTM extends AbstractTableModel {
// 表格列名数组
private String[] columnName = { "订单号", "id", "数量", "金额" };
// 商品数据访问对象
private productionImpl prodDao = new productionImpl();
// 定义一个Vector集合用于存储InRecord对象
private Vector<InRecord> InRecords;
// 入库记录数据集合
private Vector<InRecord> InRecords;
// 创建InRecord接口的实现类对象用于操作InRecord数据
// 入库记录服务实现类
private inRecordServiceImpl inRecordImpl = new inRecordServiceImpl();
// 创建InRecord对象用于存储特定的InRecord记录
private InRecord inRecord= new InRecord();
// 定义一个String类型的变量用于存储订单号
private String iNumber ;/*订单号*/
// 当前操作的入库记录对象
private InRecord inRecord = new InRecord();
// 订单号
private String iNumber;
// 构造方法接收订单号参数并初始化iNumber变量
//构造函数,初始化订单号
public InRecordTM(String iNumber) {
this.iNumber=iNumber;
this.iNumber = iNumber;
}
// 定义方法findInRecordByINumber用于根据订单号查询InRecord记录
//根据订单号查找入库记录
public void findInRecordByINumber() {
// 将添加的商品加入到静态变量Vector数组中
/*prod = InDialog.getProduction();*/
// 调用inRecordImpl的findByIdinRecord方法根据订单号查询记录并将结果赋值给InRecords
// 将添加的商品加入到静态变量 Vector 数组中
// prod = InDialog.getProduction();
InRecords = inRecordImpl.findByIdinRecord(iNumber);
}
// 重写getRowCount方法返回表格模型中的行数
//获取表格的行数
@Override
public int getRowCount() {
return InRecords.size(); // 返回InRecords集合的大小即行数
return InRecords.size();
}
/* public Float getAllPrice() {
return BufferImpl.InBufferAllPrice();
}
*/
// 重写getColumnCount方法返回表格模型中的列数
//获取表格的列数
@Override
public int getColumnCount() {
return columnName.length; // 返回列名数组的长度,即列的数量
return columnName.length;
}
// 重写getValueAt方法根据行索引和列索引获取表格模型中的值
//获取指定单元格的值
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
inRecord = InRecords.get(rowIndex); // 从InRecords集合中获取指定行索引的InRecord对象
/*
System.out.println( "id="+users.get(rowIndex).getId());
System.out.println("rowIndex"+rowIndex);
System.out.println("columnIndex"+columnIndex);*/
iNumber=inRecord.getiNumber(); // 从InRecord对象中获取订单号并赋值给iNumber变量
if(columnIndex==0) { // 如果列索引为0
return inRecord.getiNumber(); // 返回InRecord对象的订单号
}else if(columnIndex==1) { // 如果列索引为1
return inRecord.getId(); // 返回InRecord对象的ID
}else if(columnIndex==2) { // 如果列索引为2
return inRecord.getSum(); // 返回InRecord对象的数量
}else if(columnIndex==3) { // 如果列索引为3
return inRecord.getInPrice(); // 返回InRecord对象的金额
}else { // 如果列索引不匹配上述任何情况
return null; // 返回null
inRecord = InRecords.get(rowIndex);
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;
}
}
// 定义方法getINumber返回当前对象的订单号用于修改或删除记录
//获取订单
public String getINumber() {
return iNumber; // 返回当前对象的订单号
return iNumber;
}
// 重写getColumnName方法根据列索引返回对应的列名
// 获取指定列的列名
@Override
public String getColumnName(int column) {
return columnName[column]; // 返回列名数组中对应索引的列名
return columnName[column];
}
}

@ -18,76 +18,128 @@ import com.lingnan.supermarket.dao.impl.*;
import com.lingnan.supermarket.dialog.InDialog;
public class OutOrderTM extends AbstractTableModel{
private String [] columnName = {"订单号","总价","时间","负责人"};
public class OutOrderTM extends AbstractTableModel {
// 定义表格列名
private String[] columnName = {"订单号", "总价", "时间", "负责人"};
// 实现类对象,用于与数据库进行交互
private productionImpl prodDao = new productionImpl();
private Vector<OutOrder> outOrders;
private outOrderServiceImpl outOrderImpl= new outOrderServiceImpl();
private OutOrder outOrder ;
String oNumber ;/*订单号*/
// 存储所有订单记录的Vector
private Vector<OutOrder> outOrders;
// 用于从数据库获取订单数据的服务实现类
private outOrderServiceImpl outOrderImpl = new outOrderServiceImpl();
// 当前订单对象
private OutOrder outOrder;
// 当前订单号
String oNumber;
/**
*
*/
public void allOutOrderRecord() {
//将添加的商品加入到静态变量Vector数组中
/*prod = InDialog.getProduction();*/
// 调用服务层方法获取所有订单数据
outOrders = outOrderImpl.findAllOutOrder();
logMethodCall("allOutOrderRecord");
debugLog("Fetched " + outOrders.size() + " out orders.");
}
/**
*
* @param oNumber
*/
public void resultOfNumber(String oNumber) {
outOrders = new Vector<OutOrder>();
// 根据订单号查询订单
outOrder = outOrderImpl.findByIdOutOrder(oNumber);
outOrders.add(outOrder);
logMethodCall("resultOfNumber");
debugLog("Fetched order with oNumber: " + oNumber);
}
/**
*
*/
@Override
public int getRowCount() {
return outOrders.size();
}
/* public Float getAllPrice() {
return BufferImpl.InBufferAllPrice();
}
*/
/**
*
*/
@Override
public int getColumnCount() {
public int getColumnCount() {
return columnName.length;
}
/**
*
* @param rowIndex
* @param columnIndex
*/
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// 获取指定行的订单对象
outOrder = outOrders.get(rowIndex);
/* System.out.println( "id="+users.get(rowIndex).getId());
System.out.println("rowIndex"+rowIndex);
System.out.println("columnIndex"+columnIndex);*/
oNumber=outOrder.getoNumber();
if(columnIndex==0) {
// 根据列索引返回不同的订单属性
if (columnIndex == 0) {
return outOrder.getoNumber();
}else if(columnIndex==1) {
} else if (columnIndex == 1) {
return outOrder.getAllOutPrice();
}else if(columnIndex==2) {
} else if (columnIndex == 2) {
return outOrder.getoDate();
}else if(columnIndex==3) {
return outOrder.getPrincipal();
}else {
} else if (columnIndex == 3) {
return outOrder.getPrincipal();
} else {
return null;
}
}
public String getOutNumber() { /*返回要修改或删除的记录*/
/**
*
* @return
*/
public String getOutNumber() {
// 返回当前操作的订单号,用于修改或删除操作
return oNumber;
}
/**
*
* @param column
* @return
*/
@Override
public String getColumnName(int column) {
return columnName[column];
}
// 打印方法调用的日志信息
private void logMethodCall(String methodName) {
System.out.println("Method " + methodName + " was called.");
}
// 输出调试信息
private void debugLog(String message) {
System.out.println("DEBUG: " + message);
}
// 模拟查询订单的测试方法
public void testGetOutOrder() {
resultOfNumber("ORD12345"); // 使用一个示例订单号
debugLog("OutOrder with oNumber: " + oNumber + " fetched successfully.");
}
// 测试用例,模拟获取所有订单记录
public void testAllOutOrders() {
allOutOrderRecord(); // 获取所有订单
debugLog("Fetched " + outOrders.size() + " out orders.");
}
}

@ -17,82 +17,127 @@ import com.lingnan.supermarket.dao.impl.*;
import com.lingnan.supermarket.dialog.InDialog;
public class OutRecordTM extends AbstractTableModel{
/**
*
*/
public class OutRecordTM extends AbstractTableModel {
private String [] columnName = {"订单号","id","数量","金额"};
// 定义表格的列名
private String[] columnName = {"订单号", "id", "数量", "金额"};
// 用于从数据库获取商品数据的服务层对象
private productionImpl prodDao = new productionImpl();
private Vector<OutRecord> OutRecords;
// 存储所有出货记录的Vector
private Vector<OutRecord> OutRecords;
// 用于操作出货记录数据的服务实现类
private outRecordServiceImpl outRecordImpl = new outRecordServiceImpl();
private OutRecord outRecord= new OutRecord();
private String oNumber ;/*订单号*/
// 当前的出货记录对象
private OutRecord outRecord = new OutRecord();
// 当前订单号
private String oNumber;
/**
*
* @param oNumber
*/
public OutRecordTM(String oNumber) {
this.oNumber=oNumber;
this.oNumber = oNumber;
logMethodCall("OutRecordTM Constructor");
debugLog("OutRecordTM initialized with oNumber: " + oNumber);
}
/**
*
*/
public void findOutRecordByINumber() {
//将添加的商品加入到静态变量Vector数组中
/*prod = InDialog.getProduction();*/
// 调用数据库服务获取出货记录数据
OutRecords = outRecordImpl.findByIdOutRecordr(oNumber);
logMethodCall("findOutRecordByINumber");
debugLog("Fetched " + OutRecords.size() + " out records for oNumber: " + oNumber);
}
/**
*
* @return
*/
@Override
public int getRowCount() {
return OutRecords.size();
}
/* public Float getAllPrice() {
return BufferImpl.InBufferAllPrice();
}
*/
/**
*
* @return
*/
@Override
public int getColumnCount() {
public int getColumnCount() {
return columnName.length;
}
/**
*
* @param rowIndex
* @param columnIndex
* @return
*/
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
outRecord = OutRecords.get(rowIndex);
/* System.out.println( "id="+users.get(rowIndex).getId());
System.out.println("rowIndex"+rowIndex);
System.out.println("columnIndex"+columnIndex);*/
oNumber=outRecord.getoNumber();
if(columnIndex==0) {
// 根据列索引返回对应的出货记录属性
if (columnIndex == 0) {
return outRecord.getoNumber();
}else if(columnIndex==1) {
} else if (columnIndex == 1) {
return outRecord.getId();
}else if(columnIndex==2) {
return outRecord.getSum();
}else if(columnIndex==3) {
return outRecord.getOutPrice();
}else {
} else if (columnIndex == 2) {
return outRecord.getSum();
} else if (columnIndex == 3) {
return outRecord.getOutPrice();
} else {
return null;
}
}
public String getONumber() { /*返回要修改或删除的记录*/
/**
*
* @return
*/
public String getONumber() {
// 返回当前操作的订单号,用于修改或删除操作
return oNumber;
}
/**
*
* @param column
* @return
*/
@Override
public String getColumnName(int column) {
return columnName[column];
}
// 打印方法调用的日志信息
private void logMethodCall(String methodName) {
System.out.println("Method " + methodName + " was called.");
}
// 输出调试信息
private void debugLog(String message) {
System.out.println("DEBUG: " + message);
}
// 模拟查询出货记录的测试方法
public void testFindOutRecord() {
findOutRecordByINumber(); // 查询指定订单号的出货记录
debugLog("OutRecord with oNumber: " + oNumber + " fetched successfully.");
}
// 测试用例,模拟获取所有出货记录
public void testAllOutRecords() {
findOutRecordByINumber(); // 获取指定订单号的出货记录
debugLog("Fetched " + OutRecords.size() + " out records for oNumber: " + oNumber);
}
}

@ -14,68 +14,114 @@ import com.lingnan.supermarket.dao.impl.*;
import com.lingnan.supermarket.dialog.OutDialog;
public class OutTableModel extends AbstractTableModel{
private String [] columnName = {"id","名称","数量","单价","价格","保质期","类别","供应商id"};
public class OutTableModel extends AbstractTableModel {
// 定义列名,表示表格的各个列的名称
private String [] columnName = {"id", "名称", "数量", "单价", "价格", "保质期", "类别", "供应商id"};
// 创建生产商品的实现类对象
private productionImpl prodDao = new productionImpl();
private Vector<Buffer> Buffers;
private BufferImpl BufferImpl = new BufferImpl();
// 定义一个Vector用于存储Buffer对象
private Vector<Buffer> Buffers;
// Buffer实现类对象用于从数据库获取购物车中的商品数据
private BufferImpl BufferImpl = new BufferImpl();
/**
*
*/
public void allOutBuffer() {
//将添加的商品加入到静态变量Vector数组中
/*prod = OutDialog.getProduction();*/
// 从数据库获取购物车中的商品信息并将其存入Buffers
Buffers = BufferImpl.allOutBuffer();
// 打印调试信息查看Buffer数据
System.out.println("Fetched " + Buffers.size() + " items from the buffer.");
}
/**
*
*/
@Override
public int getRowCount() {
// 返回购物车中商品的数量
return Buffers.size();
}
/**
*
* @return
*/
public Float getAllPrice() {
// 获取购物车中所有商品的总价格
return BufferImpl.OutBufferAllPrice();
}
/**
*
*/
@Override
public int getColumnCount() {
public int getColumnCount() {
// 返回表格列的数量
return columnName.length;
}
/**
*
* @param rowIndex
* @param columnIndex
*/
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// 获取对应的Buffer对象
Buffer Buffer = Buffers.get(rowIndex);
/* System.out.println( "id="+users.get(rowIndex).getId());
System.out.println("rowIndex"+rowIndex);
System.out.println("columnIndex"+columnIndex);*/
if(columnIndex==0) {
// 根据列的索引返回对应的Buffer属性值
if(columnIndex == 0) {
return Buffer.getId();
}else if(columnIndex==1) {
return Buffer.getName();
}else if(columnIndex==2) {
return Buffer.getSum();
}else if(columnIndex==3) {
return Buffer.getOutPrice() ;
}else if(columnIndex==4) {
return Buffer.getPrice() ;
}else if(columnIndex==5) {
} else if(columnIndex == 1) {
return Buffer.getName();
} else if(columnIndex == 2) {
return Buffer.getSum();
} else if(columnIndex == 3) {
return Buffer.getOutPrice();
} else if(columnIndex == 4) {
return Buffer.getPrice();
} else if(columnIndex == 5) {
return Buffer.getLife();
}else if(columnIndex==6) {
return Buffer.getName2()+Buffer.getId2();
}else if(columnIndex==7) {
return Buffer.getSupplyId();
}else {
return null;
} else if(columnIndex == 6) {
return Buffer.getName2() + Buffer.getId2(); // 返回类别和供应商信息的组合
} else if(columnIndex == 7) {
return Buffer.getSupplyId(); // 供应商ID
} else {
return null; // 如果列索引不在有效范围内返回null
}
}
/**
*
* @param column
*/
@Override
public String getColumnName(int column) {
// 返回列名
return columnName[column];
}
// 打印日志,记录方法的调用
private void logMethodCall(String methodName) {
// 打印方法调用的日志信息
System.out.println("Method " + methodName + " was called.");
}
// 增加调试日志
public void debugLog(String message) {
System.out.println("DEBUG: " + message);
}
// 测试用例,模拟从购物车中获取所有商品的情况
public void testGetAllOutBuffer() {
allOutBuffer(); // 调用获取所有商品的方法
debugLog("OutBuffer contains " + Buffers.size() + " items.");
}
}

@ -6,11 +6,6 @@ import javax.swing.table.AbstractTableModel; // 导入Swing库中的AbstractTabl
import com.lingnan.supermarket.dao.impl.storageRecordImpl; // 导入自定义的storageRecordImpl类可能用于处理存储记录的数据访问对象
import com.lingnan.supermarket.dto.StorageRecord; // 导入自定义的StorageRecord类可能用于表示存储记录的数据传输对象
// 以下代码块是类的定义继承自AbstractTableModel用于创建表格模型
public class YourClassName extends AbstractTableModel {
// 类的成员变量和方法的定义将在这里开始
}
public class StorageRecordTM extends AbstractTableModel{ // 定义一个名为StorageRecordTM的类该类继承自AbstractTableModel类用于创建表格模型

@ -3,119 +3,90 @@ package com.lingnan.supermarket.table;
import java.util.List;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;
import com.lingnan.supermarket.dto.SupplierInf;
import com.lingnan.supermarket.dao.SupplierInfService;
import com.lingnan.supermarket.dao.impl.*;
import com.lingnan.supermarket.dao.impl.SupplierInfImpl;
public class SupplierTableModel extends AbstractTableModel{
// 管理供应商信息的表格数据
public class SupplierTableModel extends AbstractTableModel {
// 定义表格列名数组
private String [] columnName = {"id","名称","地址","联系方式","邮箱"};
// 定义表格列名数组
private String[] columnName = { "id", "名称", "地址", "电话", "邮箱" };
// 使用供应商信息服务接口,实例化为具体实现类
// 创建 SupplierInfService 对象,用于与数据库交互
private SupplierInfService supplierInfService = new SupplierInfImpl();
// 创建供应商信息对象
// 创建 SupplierInf 对象,用于存储单个供应商信息
private SupplierInf supplierInf = new SupplierInf();
// 创建供应商信息向量,用于存储表格数据
// 创建 Vector 集合,用于存储所有供应商信息
private Vector<SupplierInf> suppliers;
// 定义一个ID变量
private int id=0;
// 定义一个整型变量 id用于存储供应商的唯一标识符
private int id = 0;
// 查找全部供应商信息的方法
// 加载所有供应商信息的方法
public void all() {
// 查找全部数据并存储到suppliers向量中
// 从数据库中查找全部供应商信息
suppliers = supplierInfService.findAllSupplierInf();
}
// 根据名称查找供应商信息的方法
// 根据供应商名称加载供应商信息的方法
public void Byname(SupplierInf supplierInf) {
// 根据名称查找数据并存储到suppliers向量中
// 根据供应商名称查找供应商信息
suppliers = supplierInfService.findByNameSupplierInf(supplierInf);
}
// 重写获取行数的方法
// 获取表格行数的方法
@Override
public int getRowCount() {
// 返回供应商信息的数量
return suppliers.size();
return suppliers.size(); // 返回供应商集合的大小
}
// 重写获取列数的方法
// 获取表格列数的方法
@Override
public int getColumnCount() {
// 返回列名数组的长度
return columnName.length;
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();
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; // 如果列索引无效,返回 null
}
else {
return null;
}
}
}
}
// 获取指定列名的方法
@Override
public String getColumnName(int column) {
return columnName[column]; // 返回列名数组中指定索引的列名
}
// 重写获取列名的方法
@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();
}
*/
}
/*
*
* public int getId() {
* return id;
* }
*
* public int getValueAt(int rowIndex){
* SupplierInf supplierInf = suppliers.get(rowIndex);
* id = suppliers.get(rowIndex).getId();
* return supplierInf.getId();
* }
*/
}

@ -5,24 +5,38 @@ import java.util.Vector;
import com.lingnan.supermarket.dto.Buffer;
import com.lingnan.supermarket.dto.Production;
// 用于创建订单相关文本内容
public class CreateOrder {
public String CreateOrder(Vector<Production> v,String oNumber,String time,Float allPrice,String username) {
String xx="----------------------------------------------------------------------------\r\n";
String InRequireText=time+"\r\n"+xx;
InRequireText += "#名称 #单价 #数量 #金额\r\n";/*生成订单小票*/
for(Production p:v) {
InRequireText+=p.getName()+" "+p.getInPrice()+" "+p.getSum()+" "+p.getPrice()+"\r\n";
// 用于生成一个完整的订单文本信息,接收商品信息向量、订单编号、时间、总价以及负责人用户名等参数
public String CreateOrder(Vector<Production> v, String oNumber, String time, Float allPrice, String username) {
// 分割线
String xx = "----------------------------------------------------------------------------\r\n";
// 初始化订单文本内容
String InRequireText = time + "\r\n" + xx;
// 添加订单小票中商品信息展示的表头部分
InRequireText += "#名称 #单价 #数量 #金额\r\n";
//循环遍历传入的商品信息向量,将每个商品的具体信息按照设定的格式拼接添加到订单文本中
for (Production p : v) {
InRequireText += p.getName() + " " + p.getInPrice() + " " + p.getSum() + " " + p.getPrice() + "\r\n";
}
InRequireText+="\r\n"+xx;
InRequireText+="#总进货金额:"+allPrice+"元";
InRequireText+="\r\n#负责人:"+username;
InRequireText+="\r\n#订单编号:"+oNumber;
InRequireText+="\r\n#地址:新民超市";
InRequireText+="\r\n#联系电话:xxx";
// 添加一条分割线
InRequireText += "\r\n" + xx;
// 显示本次进货的总价金额
InRequireText += "#总进货金额:" + allPrice + "元";
// 显示订单的负责人
InRequireText += "\r\n#负责人:" + username;
// 添加订单编号信息到订单文本中
InRequireText += "\r\n#订单编号:" + oNumber;
// 添加超市地址信息到订单文本中,注明订单对应的收货地址等相关信息
InRequireText += "\r\n#地址:新民超市";
// 添加联系电话信息到订单文本中
InRequireText += "\r\n#联系电话:xxx";
// 返回最终生成的完整订单文本内容
return InRequireText;
}
}

@ -3,20 +3,14 @@ package com.lingnan.supermarket.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
// 用于处理日期相关操作的工具类
public class DateUtil {
/**
*
* @param date
* @param pattern
* @return
*/
public static String dateToString(Date date,String pattern) {
public static String dateToString(Date date, String pattern) {
// 创建SimpleDateFormat对象它是Java中用于格式化日期的类通过指定的模式将日期转换为相应格式的字符串。
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
simpleDateFormat.applyPattern(pattern==null?"yyyy-MM-dd HH:mm:ss":pattern);
// 使用applyPattern方法设置日期格式化的模式。如果传入的pattern为null就使用默认的"yyyy-MM-dd HH:mm:ss"格式。
simpleDateFormat.applyPattern(pattern == null? "yyyy-MM-dd HH:mm:ss" : pattern);
// 调用format方法将传入的Date对象按照设置好的模式进行格式化最终返回格式化后的日期字符串。
return simpleDateFormat.format(date);
}
}
}

@ -5,10 +5,9 @@ import javax.mail.internet.AddressException;
public class EmailTest {
//Java程序的入口点
// 这里声明抛出AddressException和MessagingException异常意味着在方法执行过程中如果出现邮件地址相关或邮件发送相关的异常将直接向上抛出由调用者处理
public static void main(String[] args) throws AddressException, MessagingException {
// TODO Auto-generated method stub
}
}
}

@ -8,81 +8,104 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
// 用于管理数据库连接相关的操作,如加载数据库配置、获取数据库连接以及释放相关资源等
public class JDBCUtil {
// 用于存储数据库连接相关的配置信息,通过读取配置文件将配置项加载到该对象中
private static Properties properties;
// 数据库连接的URL地址
private static String url;
// 数据库连接的用户名
private static String user;
// 数据库连接的密码
private static String password;
// 静态代码块,在类加载时执行,主要用于加载数据库配置文件并注册数据库驱动,同时获取配置文件中的连接相关信息
static {
// 通过类加载器获取配置文件的输入流,该文件应位于类路径下,以便能够正确读取
InputStream inputStream = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
// 创建一个Properties对象用于存储键值对形式的配置信息
properties = new Properties();
try {
// 将从输入流中读取配置文件的内容加载到Properties对象中
properties.load(inputStream);
} catch (IOException e) {
// 若加载配置文件出现IO异常打印异常栈信息
e.printStackTrace();
}finally {
if(inputStream!=null){
} finally {
// 在完成配置文件读取后释放资源
if (inputStream!= null) {
try {
inputStream.close();
} catch (IOException e) {
// 关闭流失败,打印错误信息
e.printStackTrace();
}
}
}
//注册驱动
// 注册数据库驱动
try {
//类加载会触发static里面代码
// 从配置文件中获取驱动类名属性,并加载该驱动类,类加载过程会执行驱动类中相关的静态代码,完成驱动在系统中的注册
Class.forName(properties.getProperty("driver"));
url= properties.getProperty("url");
user= properties.getProperty("user");
password= properties.getProperty("password");
// 从配置文件中获取数据库连接的URL地址属性
url = properties.getProperty("url");
// 从配置文件中获取数据库连接的用户名属性
user = properties.getProperty("user");
// 从配置文件中获取数据库连接的密码属性
password = properties.getProperty("password");
} catch (ClassNotFoundException e) {
// 若找不到指定的驱动类,打印异常栈信息
e.printStackTrace();
}
}
/**
*
* @return
* DriverManagerURL
* SQLnull
*
* @return null
*/
public static Connection getConn() {
try {
// 通过DriverManager获取数据库连接
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// 连接失败时,打印错误信息
e.printStackTrace();
return null;
}
}
/**
*
* @param resultSet
* @param statement
* @param connection
* ResultSetStatementConnection
* nullnullcloseSQL
*
* @param resultSet null
* @param statement PreparedStatementStatementSQLnull
* @param connection null
*/
public static void close(ResultSet resultSet,Statement statement,Connection connection) {
public static void close(ResultSet resultSet, Statement statement, Connection connection) {
try {
if(resultSet!=null) {
resultSet.close();
}
if(statement!=null) {
statement.close();
}
if(connection!=null) {
connection.close();
}
// 如果结果集对象不为null则关闭结果集释放相关资源
if (resultSet!= null) {
resultSet.close();
}
// 如果语句执行对象不为null则关闭语句执行对象释放相关资源
if (statement!= null) {
statement.close();
}
// 如果数据库连接对象不为null则关闭数据库连接释放相关资源
if (connection!= null) {
connection.close();
}
} catch (SQLException e) {
// 如果关闭资源时发生错误,打印错误信息
e.printStackTrace();
}
}
}

@ -1,9 +1,9 @@
package com.lingnan.supermarket.utils;
//用于演示静态代码块的使用
public class Test {
static {
System.out.println("tasdasd.");
System.out.println("tasdasd."); // 打印一条测试信息
}
}
}

@ -4,40 +4,61 @@ import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Random;
//生成订单号和时间戳
public class TimeAndOrder {
public static String[] TimeAndOrder(String username) {
// TODO Auto-generated method stub
// 创建一个长度为2的字符串数组用于存储订单号和时间戳
String[] s = new String[2];
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式
// 创建两个SimpleDateFormat对象分别用于格式化日期和时间
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 格式化时间为 "yyyy-MM-dd HH:mm:ss"
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss"); // 格式化时间为 "yyyyMMddHHmmss"
// 获取当前时间的Calendar实例
Calendar cal = Calendar.getInstance();
String date1 = sdf1.format(cal.getTime());
String date2 = sdf2.format(cal.getTime());
Random random=new Random();
int result1=random.nextInt(10);
int result2=random.nextInt(10);
// 获取当前时间并格式化为字符串
String date1 = sdf1.format(cal.getTime()); // 格式化时间为 "yyyy-MM-dd HH:mm:ss"
String date2 = sdf2.format(cal.getTime()); // 格式化时间为 "yyyyMMddHHmmss"
s[0]=username+result1+date2+result2;
s[1]=date1;
System.out.println(s[0]);
System.out.println(s[1]);
// 创建一个随机数生成器
Random random = new Random();
return s;
// 生成两个随机数
int result1 = random.nextInt(10); // 生成0到9之间的随机数
int result2 = random.nextInt(10); // 生成0到9之间的随机数
// 生成订单号:用户名 + 随机数 + 时间戳 + 随机数
s[0] = username + result1 + date2 + result2;
// 将当前时间戳存入数组的第二个元素
s[1] = date1;
// 打印订单号和时间戳(用于调试)
System.out.println(s[0]); // 打印订单号
System.out.println(s[1]); // 打印时间戳
// 返回包含订单号和时间戳的字符串数组
return s;
}
/**
* "yyyy-MM-dd"
*
* @return
*/
public static String yMdTime() {
// TODO Auto-generated method stub
String[] s = new String[2];
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
// 创建一个SimpleDateFormat对象用于格式化日期
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); // 格式化日期为 "yyyy-MM-dd"
// 获取当前时间的Calendar实例
Calendar cal = Calendar.getInstance();
String date = sdf1.format(cal.getTime());
return date;
// 获取当前日期并格式化为字符串
String date = sdf1.format(cal.getTime()); // 格式化日期为 "yyyy-MM-dd"
// 返回当前日期的字符串表示
return date;
}
}
}

@ -1,82 +1,79 @@
package com.lingnan.supermarket.utils;
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 tplbTest extends JFrame implements ActionListener
{
static tplbTest tplb=new tplbTest();
static JLabel pan=new JLabel();
static ImageIcon[] imgs = {
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"),
new ImageIcon("static\\bg\\bg8.jpg"),
};
public static void settplb()/*<2A>ܿ<EFBFBD><DCBF>*/
{
tplb.setTitle("ͼƬ<CDBC>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>");
tplb.setLayout(null);
tplb.setSize(700,800);
tplb.setResizable(false);
tplb.setLocationRelativeTo(null);/*<2A><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD>*/
tplb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*<2A>رճ<D8B1><D5B3><EFBFBD>*/
tplb.setVisible(true);
//用于展示图片轮播效果
public class tplbTest extends JFrame implements ActionListener {
// 创建一个tplbTest实例
static tplbTest tplb = new tplbTest();
// 创建一个JLabel用于显示图片
static JLabel pan = new JLabel();
// 定义图片数组,包含多个图片路径
static ImageIcon[] imgs = {
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"),
new ImageIcon("static\\bg\\bg8.jpg"),
};
//设置窗口的基本属性
public static void settplb() {
tplb.setTitle("图片轮播测试"); // 设置窗口标题
tplb.setLayout(null); // 设置布局为空布局
tplb.setSize(700, 800); // 设置窗口大小
tplb.setResizable(false); // 设置窗口不可调整大小
tplb.setLocationRelativeTo(null); // 设置窗口居中显示
tplb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置关闭窗口时退出程序
tplb.setVisible(true); // 设置窗口可见
}
//设置图片显示区域,并启动定时器实现图片轮播
public static void setpan() {
pan.setBounds(50, 50, 500, 500); // 设置图片显示区域的坐标和大小
tplb.add(pan); // 将图片显示区域添加到窗口中
// 创建一个定时器每隔1000毫秒1秒触发一次
Timer timer = new Timer(1000, L);
timer.start(); // 启动定时器
}
//定义一个ActionListener用于定时切换图片
static ActionListener L = new ActionListener() {
int index; // 图片索引
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.setIcon(imgs[index]);
index++;
if(index==7)
index=0;
public void actionPerformed(ActionEvent e) {
pan.setIcon(imgs[index]); // 设置当前显示的图片
index++; // 图片索引加1
if (index == 7) // 如果索引超出图片数组范围
index = 0; // 重置索引为0
}
};
public static void main(String[] args) {
settplb();
setpan();
}
public static void main(String[] args) {
settplb(); // 设置窗口属性
setpan(); // 设置图片显示区域并启动定时器
}
//实现ActionListener接口的方法用于处理事件
@Override
public void actionPerformed(ActionEvent e) {
// TODO <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ɵķ<C9B5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 未实现
}
}
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save