From 272c25e960a502108998c5ee97e52149a89baab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E9=83=91=E4=BA=A6=E6=AD=86=E2=80=9D?= <“kttsj2257wy@163.com”> Date: Fri, 13 Dec 2024 22:46:42 +0800 Subject: [PATCH 01/30] =?UTF-8?q?test.txt=E4=BF=AE=E6=94=B9=E6=B5=8B?= =?UTF-8?q?=E8=AF=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test.txt b/test.txt index 764a3c5..97eee17 100644 --- a/test.txt +++ b/test.txt @@ -2,4 +2,5 @@ z1 z2 13131 d11111 -d2 \ No newline at end of file +d2 +Z3 \ No newline at end of file From 5a42e467fa77895be769fd3a9f2909c4791aa806 Mon Sep 17 00:00:00 2001 From: Redmi Date: Fri, 13 Dec 2024 23:09:46 +0800 Subject: [PATCH 02/30] 1111 --- test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test.txt b/test.txt index d800886..d253341 100644 --- a/test.txt +++ b/test.txt @@ -1 +1 @@ -123 \ No newline at end of file +123 qeqeqe \ No newline at end of file From dad9e9eb0c575e5c226e3b70b74a212770b677f9 Mon Sep 17 00:00:00 2001 From: Redmi Date: Fri, 13 Dec 2024 23:30:39 +0800 Subject: [PATCH 03/30] d4 --- test.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test.txt b/test.txt index ea0c778..97187db 100644 --- a/test.txt +++ b/test.txt @@ -4,3 +4,4 @@ z1 z2 13131 d11111 d2 d3 +d4w \ No newline at end of file From f2932379f002f81e708c846a48cb7061e6778017 Mon Sep 17 00:00:00 2001 From: Redmi Date: Fri, 13 Dec 2024 23:35:43 +0800 Subject: [PATCH 04/30] d56 --- test.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test.txt b/test.txt index 97187db..cff9950 100644 --- a/test.txt +++ b/test.txt @@ -4,4 +4,6 @@ z1 z2 13131 d11111 d2 d3 -d4w \ No newline at end of file +d4w +d5 +d6 \ No newline at end of file From 4f20056302b33365b31a79dc2da25a8bbe980613 Mon Sep 17 00:00:00 2001 From: Redmi Date: Fri, 13 Dec 2024 23:42:11 +0800 Subject: [PATCH 05/30] d7 --- test.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test.txt b/test.txt index cff9950..72f97be 100644 --- a/test.txt +++ b/test.txt @@ -6,4 +6,5 @@ d2 d3 d4w d5 -d6 \ No newline at end of file +d6 +d7 From caa10935360350b4383c7930db92b877ba1f9128 Mon Sep 17 00:00:00 2001 From: HouXinyu <2283543175@qq.com> Date: Fri, 13 Dec 2024 23:49:50 +0800 Subject: [PATCH 06/30] d8 --- test.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test.txt b/test.txt index 72f97be..2c43a63 100644 --- a/test.txt +++ b/test.txt @@ -8,3 +8,4 @@ d4w d5 d6 d7 +d8 \ No newline at end of file From ac909ed42f3f30ad4e6a9ec079173d4b48a3d249 Mon Sep 17 00:00:00 2001 From: Redmi Date: Fri, 13 Dec 2024 23:53:41 +0800 Subject: [PATCH 07/30] d89 --- test.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test.txt b/test.txt index 2c43a63..626a348 100644 --- a/test.txt +++ b/test.txt @@ -8,4 +8,5 @@ d4w d5 d6 d7 -d8 \ No newline at end of file +d8 +d9 \ No newline at end of file From 2bd45ddbd2eab8e4f989cab6fbb4202f5afa8aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 00:34:53 +0800 Subject: [PATCH 08/30] d10 --- test.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test.txt b/test.txt index 626a348..c2b72e8 100644 --- a/test.txt +++ b/test.txt @@ -9,4 +9,5 @@ d5 d6 d7 d8 -d9 \ No newline at end of file +d9 +d10 \ No newline at end of file From 6e730f22f26840d937d4c8651eba834939b11868 Mon Sep 17 00:00:00 2001 From: HouXinyu <2283543175@qq.com> Date: Sat, 14 Dec 2024 00:44:30 +0800 Subject: [PATCH 09/30] 111 --- test.txt | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/test.txt b/test.txt index b5ca4b0..350ae83 100644 --- a/test.txt +++ b/test.txt @@ -1,21 +1,12 @@ -<<<<<<< HEAD -123 445666+6 -111 - - -2222 -======= 123 z1 z2 13131 d11111 d2 d3 -<<<<<<< HEAD ->>>>>>> remotes/origin/developer -======= d4w d5 d6 d7 ->>>>>>> remotes/origin/main +顶顶顶 +444444 From 9274bc6f1e15301f5b8f5425c721debcc6be621b Mon Sep 17 00:00:00 2001 From: HouXinyu <2283543175@qq.com> Date: Sat, 14 Dec 2024 00:51:13 +0800 Subject: [PATCH 10/30] 84925+ --- test.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test.txt b/test.txt index 350ae83..554bd51 100644 --- a/test.txt +++ b/test.txt @@ -10,3 +10,4 @@ d6 d7 顶顶顶 444444 +11111 \ No newline at end of file From 0ecdef9993b9a25d67b72525af538f36975eb563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E4=BA=A6=E6=AD=86?= Date: Sat, 14 Dec 2024 08:52:59 +0800 Subject: [PATCH 11/30] =?UTF-8?q?test.txt=E4=BF=AE=E6=94=B9=E6=B5=8B?= =?UTF-8?q?=E8=AF=953?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test.txt b/test.txt index 5b5e97f..5076452 100644 --- a/test.txt +++ b/test.txt @@ -16,3 +16,4 @@ d7 顶顶顶 444444 11111 +Z4 \ No newline at end of file From a19fdbe104d8f8cbc4dbdedcbf02721025dbf2c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E4=BA=A6=E6=AD=86?= Date: Sat, 14 Dec 2024 11:41:09 +0800 Subject: [PATCH 12/30] =?UTF-8?q?SuperView.java=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lingnan/supermarket/view/SuperView.java | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/view/SuperView.java b/Supermarket/src/com/lingnan/supermarket/view/SuperView.java index 2ed7857..ea196f0 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/SuperView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/SuperView.java @@ -1,37 +1,37 @@ -package com.lingnan.supermarket.view; +package com.lingnan.supermarket.view; // 定义包名,表示这段代码属于com.lingnan.supermarket.view这个包 -import java.awt.BorderLayout; +import java.awt.BorderLayout; // 导入BorderLayout类,用于设置布局管理器 +import javax.swing.ImageIcon; // 导入ImageIcon类,用于处理图片 +import javax.swing.JFrame; // 导入JFrame类,用于创建窗口 +import javax.swing.JLabel; // 导入JLabel类,用于显示文本或图片 +import javax.swing.JPanel; // 导入JPanel类,用于创建面板 +import javax.swing.SwingUtilities; // 导入SwingUtilities类,用于在事件调度线程中执行代码 -import javax.swing.ImageIcon; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; +public class SuperView extends JPanel{ // 定义一个名为SuperView的公共类,继承自JPanel类 + private JLabel label; // 声明一个私有的JLabel类型的变量,用于显示图片 + private JFrame jFrame; // 声明一个私有的JFrame类型的变量,用于引用窗口 + public SuperView(JFrame jFrame) { // SuperView类的构造方法,接收一个JFrame类型的参数 + this.setLayout(new BorderLayout()); // 设置面板的布局管理器为BorderLayout + initView(); // 调用初始化视图的方法 + this.jFrame = jFrame; // 将传入的JFrame参数赋值给成员变量jFrame + } + + private void initView() { // 定义一个私有的初始化视图的方法 -public class SuperView extends JPanel{ - - private JLabel label; - private JFrame jFrame; - public SuperView(JFrame jFrame) { - this.setLayout(new BorderLayout()); - initView(); - this.jFrame = jFrame; - } - - private void initView() { - - //中间 - label = new JLabel(); - label.setIcon(new ImageIcon("static\\img\\3.png")); - label.setHorizontalAlignment(SwingUtilities.CENTER); - label.setVerticalAlignment(SwingUtilities.CENTER); - - this.add(label,"Center"); - - setVisible(true); + label = new JLabel(); // 创建一个JLabel对象 + label.setIcon(new ImageIcon("static\\img\\3.png")); // 设置JLabel的图标为指定的图片路径 + label.setHorizontalAlignment(SwingUtilities.CENTER); // 设置标签的水平对齐方式为居中 + label.setVerticalAlignment(SwingUtilities.CENTER); // 设置标签的垂直对齐方式为居中 + + this.add(label,"Center"); // 将标签添加到面板的中间位置 + + setVisible(true); // 设置面板可见 + + } + } From 43656d2b423b4ddb5efaf11270a2395b42aa84c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E4=BA=A6=E6=AD=86?= Date: Sat, 14 Dec 2024 12:29:19 +0800 Subject: [PATCH 13/30] =?UTF-8?q?base=E6=96=87=E4=BB=B6=E5=A4=B9=E9=83=A8?= =?UTF-8?q?=E5=88=86=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lingnan/supermarket/view/InView.java | 767 ++++++++++++------ .../supermarket/view/ProdCatalogView.java | 265 +++--- .../lingnan/supermarket/view/StorageView.java | 398 ++++----- .../supermarket/view/SupplierView.java | 326 ++++---- 4 files changed, 1045 insertions(+), 711 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/view/InView.java b/Supermarket/src/com/lingnan/supermarket/view/InView.java index 3a2e30d..5fadc90 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/InView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/InView.java @@ -43,193 +43,298 @@ import com.lingnan.supermarket.utils.SendQQMailUtil; import com.lingnan.supermarket.utils.TimeAndOrder; import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; +// 定义一个名为InView的类,继承自JPanel,并实现ActionListener接口 public class InView extends JPanel implements ActionListener{ - - - //上面 + + + // 定义顶部工具栏面板 private JPanel toolBarPanel; - + + // 定义搜索面板 private JPanel searchPanel; + // 定义标签 private JLabel nameLabel,locationLabel; + // 定义文本框,用于商品名称搜索 private JTextField nameSearchTF; + // 定义按钮,包括搜索、库存、退出等 private JButton searchBtn,StockBtn,exitBtn; - + + // 定义操作面板 private JPanel opePanel; + // 定义操作按钮,包括添加、更新、删除、历史、返回、详情等 private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn,detailBtn; - - //中间 + + // 定义中间部分的滚动面板和表格 private JScrollPane tableScrollPane; private JTable inTable; - - //下面 + + // 定义底部面板及其左右部分 private JPanel bottomPanel,bottomPanelLeft,bottomPanelRight; + // 定义显示记录数的标签 private JLabel countInfoLabel,countInfoLabel2; - + + // 定义缓冲区对象和其实现类 private Buffer Buffer; private BufferImpl BufferImpl; - + + + + // 定义一个静态的向量,用于存储Production对象 private static Vector v = new Vector(); - + + // 定义一个下拉框,用于选择状态 private JComboBox combo; + // 定义状态数组,包含不同的货物状态 private String[] status ={"全部","已入库","待入库","已取消"}; + // 定义商品目录ID private int catalog; - + + // 定义一个JFrame对象,用于引用主窗口 private JFrame jFrame; + // 定义一个User对象,用于存储当前用户信息 private User user; - + + // 定义一个表格模型,用于进货表格 private InTableModel inTableModel ; - + + // 实例化缓冲区实现类 private BufferImpl bufferImpl = new BufferImpl(); - + + // 定义一个标记,用于区分是从进货表还是提醒过来的表 private int mark;/*标记从提醒那里来1是进货表,0是提醒过来的表*/ - + + // 定义一个进货订单服务实现类 private inOrderServiceImpl inOrderImpl; - + + // 定义一个浮点数,用于存储总价 private Float allPrice; + // 定义一个整数,用于存储行号 private int row; + // 定义一个字符串,用于存储用户名 private String uname; - + + // InView类的构造方法,接收主窗口、用户、货物向量、标记作为参数 public InView(JFrame jFrame,User user,Vector v,int mark) { - this.setLayout(new BorderLayout()); + // 设置布局管理器为边界布局 + this.setLayout(new BorderLayout()); + // 保存传入的JFrame引用 this.jFrame = jFrame; + // 保存传入的用户对象 this.user = user; - //获得进货缓冲区的保存的货物并删除缓冲区 + // 获取进货缓冲区保存的货物并删除缓冲区中的数据 this.v =bufferImpl.allInBuffer(); bufferImpl.DelAllInBuffer(); - + + // 保存传入的标记 this.mark=mark; + // 打印标记值 System.out.println("mark="+mark); + // 获取用户名 uname = user.getUsername(); + // 初始化视图 initView(); - - + + } - + + // 初始化视图的方法 private void initView() { - - toolBarPanel = new JPanel(new BorderLayout()); - - searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + + // 创建工具栏面板,并设置布局管理器为边界布局 + toolBarPanel = new JPanel(new BorderLayout()); + + // 创建搜索面板,并设置布局管理器为流布局,对齐方式为右对齐 + searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + // 创建并初始化订单号标签 nameLabel = new JLabel("订单号"); + // 创建文本框,用于输入订单号,宽度为20 nameSearchTF = new JTextField(20); + // 创建搜索按钮,并设置图标 searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); + // 为搜索按钮添加动作监听器 searchBtn.addActionListener(this); + // 创建并初始化位置标签 locationLabel=new JLabel("当前位置>进货系统"); + // 设置位置标签的字体 locationLabel.setFont(new FontUtil().userFont); + // 设置位置标签的前景色 locationLabel.setForeground(new Color(18, 150, 219)); - - - + + + + + + // 创建下拉框,并使用状态数组初始化 combo = new JComboBox(status); +// 为下拉框添加项目监听器 combo.addItemListener(new MyItemListener()); - - - - opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + + + +// 创建操作面板,并设置布局管理器为流布局,对齐方式为左对齐 + opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); +// 创建添加按钮,并设置图标 addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); +// 创建更新按钮,并设置图标 updateBtn =new JButton(new ImageIcon("static\\icon\\change.png")); +// 创建删除按钮,并设置图标 deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); +// 创建历史按钮,并设置图标 historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); +// 创建返回按钮,并设置图标 backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); +// 创建详情按钮,并设置图标 detailBtn = new JButton(new ImageIcon("static\\icon\\detail.png")); - + +// 为添加按钮添加动作监听器 addBtn.addActionListener(this); +// 为更新按钮添加动作监听器 updateBtn.addActionListener(this); +// 为删除按钮添加动作监听器 deleteBtn.addActionListener(this); +// 为历史按钮添加动作监听器 historyBtn.addActionListener(this); +// 为返回按钮添加动作监听器 backBtn.addActionListener(this); +// 为详情按钮添加动作监听器 detailBtn.addActionListener(this); - - backBtn.setVisible(false);/*在记录页面显示出来*/ - detailBtn.setVisible(false);/*在订单详情页显示出来*/ - + +// 设置返回按钮为不可见,它在记录页面会显示出来 + backBtn.setVisible(false); +// 设置详情按钮为不可见,它在订单详情页会显示出来 + detailBtn.setVisible(false); + +// 将添加按钮添加到操作面板 opePanel.add(addBtn); +// 将返回按钮添加到操作面板 opePanel.add(backBtn); +// 将详情按钮添加到操作面板 opePanel.add(detailBtn); - opePanel.add(updateBtn); +// 将更新按钮添加到操作面板 + opePanel.add(updateBtn); +// 将删除按钮添加到操作面板 opePanel.add(deleteBtn); +// 将历史按钮添加到操作面板 opePanel.add(historyBtn); - - + +// 将位置标签添加到搜索面板 searchPanel.add(locationLabel); +// 将订单号标签添加到搜索面板 searchPanel.add(nameLabel); +// 将订单号文本框添加到搜索面板 searchPanel.add(nameSearchTF); +// 将搜索按钮添加到搜索面板 searchPanel.add(searchBtn); +// 将下拉框添加到搜索面板 searchPanel.add(combo); - - - + + + +// 将搜索面板添加到工具栏面板的西边 toolBarPanel.add(searchPanel,"West"); +// 将操作面板添加到工具栏面板的东边 toolBarPanel.add(opePanel,"East"); - - - //中间表 + + +// 初始化中间表格模型,使用货物向量v inTableModel = new InTableModel(v); + + // 创建表格,使用中间表格模型 inTable = new JTable(inTableModel); +// 设置表格字体 inTable.setFont(FontUtil.tableFont); +// 设置表格行高 inTable.setRowHeight(50); +// 创建滚动面板,并将表格添加到其中 tableScrollPane = new JScrollPane(inTable); - + +// 获取表格模型中的总价格 allPrice = inTableModel.getAllPrice(); +// 获取表格模型中的行数 row = inTableModel.getRowCount(); - - //下面 +// 创建底部左侧面板,并设置布局管理器为流布局,对齐方式为右对齐 bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - countInfoLabel = new JLabel("商品种类:"+row+",总价:"+allPrice); +// 创建并初始化显示商品种类和总价的标签 + countInfoLabel = new JLabel("商品种类:"+row+",总价:"+allPrice); +// 将标签添加到左侧面板,指定对齐方式为左对齐 bottomPanelLeft.add(countInfoLabel,"Left"); - + +// 创建底部右侧面板,并设置布局管理器为流布局,对齐方式为左对齐 bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.LEFT)); +// 创建结账按钮,并设置图标 StockBtn =new JButton(new ImageIcon("static\\icon\\stock.png"));/*结账按钮*/ +// 创建退出按钮,并设置图标 exitBtn =new JButton(new ImageIcon("static\\icon\\exit.png"));/*退出按钮*/ +// 为结账按钮添加动作监听器 StockBtn.addActionListener(this); +// 为退出按钮添加动作监听器 exitBtn.addActionListener(this); +// 将结账按钮添加到右侧面板 bottomPanelRight.add(StockBtn); +// 将退出按钮添加到右侧面板 bottomPanelRight.add(exitBtn); - + +// 创建底部面板,并设置布局管理器为边界布局 bottomPanel = new JPanel(new BorderLayout()); +// 将右侧面板添加到底部面板的东边 bottomPanel.add(bottomPanelRight,"East"); +// 将左侧面板添加到底部面板的西边 bottomPanel.add(bottomPanelLeft,"West"); - - + + +// 将工具栏面板添加到窗口的北边 this.add(toolBarPanel,"North"); +// 将滚动面板(含表格)添加到窗口的中间 this.add(tableScrollPane,"Center");/*将表格放到中间*/ +// 将底部面板添加到窗口的南边 this.add(bottomPanel,"South"); - + +// 如果标记为1,表示从提醒页面过来,刷新缓冲区 if(mark==1) /*判断是不是从提醒那里过来的*/{ refreshBuffer(v); } - +// 如果标记为0,执行进货订单记录操作 else if(mark==0) { InOrderRecord(); } - - - + + + + + + +// 设置窗口为可见 setVisible(true); - - - - - + + + + + + } - + + // 提供一个静态方法,用于获取存储Production对象的向量 public static Vector getVector(){ return v; } - - + + // 定义一个内部类,实现ItemListener接口,用于监听下拉框的项目状态改变事件 public class MyItemListener implements ItemListener { + // 重写itemStateChanged方法,当下拉框中的项目状态改变时被调用 @Override public void itemStateChanged(ItemEvent e) { + // 将事件源强制转换为JComboBox JComboBox cb = (JComboBox) e.getSource(); + // 获取下拉框中选中的项目,并转换为字符串 String catalog1 = (String) cb.getSelectedItem(); + // 根据选中的项目设置商品目录ID if(catalog1.equals("全部")) catalog=0; else if(catalog1.equals("已入库")) @@ -238,276 +343,424 @@ public class InView extends JPanel implements ActionListener{ catalog=2; else if(catalog1.equals("已取消")) catalog=3; - + + // 根据商品目录ID执行查找状态的结果处理 resultOfFindStatus(catalog); - } + + + } - - - //按钮组件隐藏 + } + + } + + + + + // 设置按钮组件的可见性,用于订单视图 public void OrderView() { + // 显示返回按钮 backBtn.setVisible(true); + // 显示详情按钮 detailBtn.setVisible(true); + // 显示更新按钮 updateBtn.setVisible(true); + // 显示删除按钮 deleteBtn.setVisible(true); + // 隐藏添加按钮 addBtn.setVisible(false); + // 隐藏历史按钮 historyBtn.setVisible(false); } - - + + // 根据订单编号处理结果 public void resultOfNumber(String iNumber) { + // 重置标记 this.mark=0; + // 创建订单表格模型 InOrderTM inOrderTM = new InOrderTM(); + // 根据订单编号查询结果 inOrderTM.resultOfNumber(iNumber); + // 更新表格模型 inTable.setModel(inOrderTM); + // 清空底部左侧面板 bottomPanelLeft.removeAll(); + // 创建并初始化显示记录数的标签 countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); + // 调用OrderView设置按钮可见性 OrderView(); - } - + } + + // 根据状态处理查询结果 public void resultOfFindStatus(int catalog) { + // 重置标记 this.mark=0; + // 创建订单表格模型 InOrderTM inOrderTM = new InOrderTM(); + // 根据状态查询结果 inOrderTM.resultOfFind(catalog); + // 更新表格模型 inTable.setModel(inOrderTM); + // 清空底部左侧面板 bottomPanelLeft.removeAll(); + // 创建并初始化显示记录数的标签 countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); + // 调用OrderView设置按钮可见性 OrderView(); } - - /*刷新*/ - public void refreshBuffer(Vector v) { - this.mark=1; - + // 刷新缓冲区,更新表格数据 + public void refreshBuffer(Vector v) { + // 设置标记 + this.mark=1; + // 创建商品表格模型 InTableModel inTableModel = new InTableModel(v); + // 更新表格模型 inTable.setModel(inTableModel); + // 清空底部左侧面板 bottomPanelLeft.removeAll(); + // 创建并初始化显示商品种类和总价的标签 countInfoLabel = new JLabel("商品种类:"+inTableModel.getRowCount()+",总价:"+inTableModel.getAllPrice()); + // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); + // 隐藏返回按钮 backBtn.setVisible(false); + // 隐藏详情按钮 detailBtn.setVisible(false); + // 显示历史按钮 historyBtn.setVisible(true); + // 显示更新按钮 updateBtn.setVisible(true); + // 显示添加按钮 addBtn.setVisible(true); + // 显示删除按钮 deleteBtn.setVisible(true); - - allPrice = inTableModel.getAllPrice(); + + // 更新总价和行数 + allPrice = inTableModel.getAllPrice(); row = inTableModel.getRowCount(); } - - /*调出进货订单表*/ + + + + + + /* 调出进货订单表 */ public void InOrderRecord() { + // 设置标记为0 this.mark=0; + // 创建进货订单表格模型 InOrderTM inOrderTM = new InOrderTM(); + // 获取所有进货订单记录 inOrderTM.allInOrderRecord(); + // 更新表格模型 inTable.setModel(inOrderTM); + // 清空底部左侧面板 bottomPanelLeft.removeAll(); + // 创建并初始化显示记录数的标签 countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); + // 调用OrderView设置按钮可见性 OrderView(); - } - - /*调出进货订单表*/ + + /* 根据订单号调出进货订单记录 */ public void InRecord(String iNumber) { + // 设置标记为2 this.mark=2; + // 创建进货记录表格模型,并传入订单号 InRecordTM inRecordTM = new InRecordTM(iNumber); + // 根据订单号查询进货记录 inRecordTM.findInRecordByINumber(); + // 更新表格模型 inTable.setModel(inRecordTM); + // 清空底部左侧面板 bottomPanelLeft.removeAll(); + // 创建并初始化显示订单号和记录数的标签 countInfoLabel = new JLabel("订单号@"+iNumber+"共有"+inRecordTM.getRowCount()+"条记录"); + // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); + // 设置按钮可见性 backBtn.setVisible(true); detailBtn.setVisible(false); updateBtn.setVisible(false); addBtn.setVisible(false); historyBtn.setVisible(false); deleteBtn.setVisible(false); - + + + } - - - - - - /*按钮监听时间*/ - @Override - public void actionPerformed(ActionEvent e) { - BufferImpl = new BufferImpl();/*获得购物车*/ + + +} + + + + + +/* 按钮监听事件 */ +@Override +public void actionPerformed(ActionEvent e) { + // 实例化购物车 + BufferImpl = new BufferImpl();/* 获得购物车 */ + // 获取事件源 Object source = e.getSource(); - + + // 如果事件源是搜索按钮 if(searchBtn==source) { - String number = nameSearchTF.getText(); - System.out.println("搜索后的订单:"+number); - resultOfNumber(number); + // 获取搜索框中的文本 + String number = nameSearchTF.getText(); + // 打印搜索后的订单号 + System.out.println("搜索后的订单:"+number); + // 处理搜索结果 + resultOfNumber(number); } - else if(addBtn==source) {/*添加*/ - InDialog outDialog = new InDialog(jFrame,v,user); - outDialog.setVisible(true); - v=outDialog.getVector(); - refreshBuffer(v); - + // 如果事件源是添加按钮 + else if(addBtn==source) {/* 添加 */ + // 创建并显示添加对话框 + InDialog outDialog = new InDialog(jFrame,v,user); + outDialog.setVisible(true); + // 获取对话框中的向量并更新 + v=outDialog.getVector(); + // 刷新购物车 + refreshBuffer(v); + + } + + + // 如果事件源是更新按钮 + else if(updateBtn==source) {/* 更新 */ + // 打印当前标记 + System.out.println("mark="+mark); + // 获取选中行的索引 + int rowIndex = inTable.getSelectedRow(); + // 如果没有选中行,弹出提示 + if(rowIndex==-1) { + JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); + return; } - - - else if(updateBtn==source) {/*更新*/ - System.out.println("mark="+mark); - int rowIndex = inTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); - return; - } - //进货表修改 - if(mark==1) { - String id =(String) inTable.getValueAt(rowIndex,0); - ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"In",v); - changesumDialog.setVisible(true); - v = changesumDialog.getVector(); - System.out.println("更改状态后v.size="+v.size()); - refreshBuffer(v); - } - - //inOrder修改,修改状态 - else if(mark==0) { - String iNumber =(String) inTable.getValueAt(rowIndex,0); - String status =(String) inTable.getValueAt(rowIndex,4); - if(status.equals("已入库")) { - JOptionPane.showMessageDialog(this,"订单上的货物已入库无法修改状态","提示",JOptionPane.INFORMATION_MESSAGE); - return; - } - - ChangeStatusDialog changeStatusDialog = new ChangeStatusDialog(jFrame,iNumber,status); - changeStatusDialog.setVisible(true); - MainView.refreshRemind(); - HomeView.refreshHome(); - InOrderRecord(); - } - + // 如果标记为1,表示进货表修改 + if(mark==1) { + // 获取选中行的ID + String id =(String) inTable.getValueAt(rowIndex,0); + // 创建并显示更改数量对话框 + ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"In",v); + changesumDialog.setVisible(true); + // 获取对话框中的向量并更新 + v = changesumDialog.getVector(); + // 打印更改状态后的向量大小 + System.out.println("更改状态后v.size="+v.size()); + // 刷新购物车 + refreshBuffer(v); } - - + + // 如果标记为0,表示inOrder修改,修改状态 + else if(mark==0) { + // 获取选中行的订单号和状态 + String iNumber =(String) inTable.getValueAt(rowIndex,0); + String status =(String) inTable.getValueAt(rowIndex,4); + // 如果状态为已入库,弹出提示 + if(status.equals("已入库")) { + JOptionPane.showMessageDialog(this,"订单上的货物已入库无法修改状态","提示",JOptionPane.INFORMATION_MESSAGE); + return; + } + + // 创建并显示更改状态对话框 + ChangeStatusDialog changeStatusDialog = new ChangeStatusDialog(jFrame,iNumber,status); + changeStatusDialog.setVisible(true); + // 刷新提醒和首页视图 + MainView.refreshRemind(); + HomeView.refreshHome(); + // 重新加载进货订单记录 + InOrderRecord(); + } + + } + + // 如果事件源是删除按钮 else if(deleteBtn==source) { - int rowIndex = inTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条"); - return; - } - - /*删除进货表的*/ - if(mark==1) { - System.out.println("删除进货表"); - String id =(String) inTable.getValueAt(rowIndex,0); - int select = JOptionPane.showConfirmDialog(this,"是否删除id为"+id+"的记录","提示",JOptionPane.YES_NO_OPTION); - if(select==JOptionPane.YES_OPTION) {/*选择是*/ - for(int i =0;i(); - refreshBuffer(v); - MainView.refreshRemind(); - JOptionPane.showConfirmDialog(null,"发送邮件成功\r\n订单号:"+s[0]+"\r\n负责人:"+uname, "提示", JOptionPane.YES_OPTION); - - } - - - } - + // 刷新购物车 + refreshBuffer(v); + + + + + + + // 如果购物车为空 + if(v.size()==0)/*购物车为空*/{ + // 显示提示信息 + JOptionPane.showMessageDialog(null,"您的进货页面为空", "提示", JOptionPane.YES_OPTION); + } +// 如果购物车不为空 + else {/*购物车不为空*/ + // 显示确认对话框,包含进价总金额、负责人等信息 + int res = JOptionPane.showConfirmDialog(null,"进价总金额:"+allPrice+"元\r\n负责人:"+uname+"\r\n发送邮件至 re@qq.com", "提交订单", JOptionPane.YES_NO_OPTION); + // 如果用户选择是,即已经结账 + if(res==JOptionPane.YES_OPTION)/*如果已经结账*/{ + + // 获取时间和订单号,s[0]为订单号,s[1]为时间 + String[] s =TimeAndOrder.TimeAndOrder(uname); + + // 往订单表插入一条记录 + inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); + inOrderImpl.InsertInOrder(s[0], allPrice, s[1],uname ,2); + + // 往inRecord表添加数据 + inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); + for(Production p:v) {/*往inRecord表添加数据*/ + inRecordImpl.insertInRecord(s[0], p); + } + + + // 生成订单文本 + CreateOrder createOrder = new CreateOrder(); + String OrderText = createOrder.CreateOrder(v, s[0], s[1], allPrice,uname); + try {/*发送邮件*/ + SendQQMailUtil QQEmail = new SendQQMailUtil("cwfeng5@qq.com","wlcinslohrgpdiac","1912638153@qq.com","@新民超市进货需求申请",OrderText); + } catch (MessagingException e1) { + // 打印异常堆栈信息 + e1.printStackTrace(); + } + // 清空购物车 + v=new Vector(); + // 刷新购物车显示 + refreshBuffer(v); + // 刷新主视图提醒 + MainView.refreshRemind(); + // 显示发送邮件成功提示 + JOptionPane.showConfirmDialog(null,"发送邮件成功\r\n订单号:"+s[0]+"\r\n负责人:"+uname, "提示", JOptionPane.YES_OPTION); + + + } + +// 如果事件源是退出按钮 }else if(exitBtn==source) { - int res = JOptionPane.showConfirmDialog(null,"确定退出并清空购物车吗", "结账", JOptionPane.YES_NO_OPTION); - if(res==JOptionPane.YES_OPTION)/*如果退出*/{ - v=new Vector();/*将数组置空*/ - refreshBuffer(v); - JOptionPane.showConfirmDialog(null,"退出成功", "提示", JOptionPane.PLAIN_MESSAGE); - } - } + // 显示确认对话框,询问是否退出并清空购物车 + int res = JOptionPane.showConfirmDialog(null,"确定退出并清空购物车吗", "结账", JOptionPane.YES_NO_OPTION); + // 如果用户选择是,即退出 + if(res==JOptionPane.YES_OPTION)/*如果退出*/{ + // 将购物车数组置空 + v=new Vector();/*将数组置空*/ + // 刷新购物车显示 + refreshBuffer(v); + // 显示退出成功提示 + JOptionPane.showConfirmDialog(null,"退出成功", "提示", JOptionPane.PLAIN_MESSAGE); + + + } + + } + + } + + } diff --git a/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java b/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java index 5eef1f0..42871db 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java @@ -1,146 +1,185 @@ -package com.lingnan.supermarket.view; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.ArrayList; - -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTextField; - -import com.lingnan.supermarket.dao.impl.prodCatalogImpl; -import com.lingnan.supermarket.dialog.UserDialog; -import com.lingnan.supermarket.dto.ProdCatalog; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.table.ProdCatalogTM; -import com.lingnan.supermarket.table.StorageTableModel; -import com.lingnan.supermarket.table.UserTableModel; -import com.lingnan.supermarket.utils.FontUtil; - -public class ProdCatalogView extends JPanel { +package com.lingnan.supermarket.view; // 定义包名,包含视图相关的类 + +import java.awt.BorderLayout; // 导入用于窗口布局的BorderLayout类 +import java.awt.Color; // 导入用于颜色处理的Color类 +import java.awt.FlowLayout; // 导入用于面板布局的FlowLayout类 +import java.awt.event.ActionEvent; // 导入用于处理动作事件的ActionEvent类 +import java.awt.event.ActionListener; // 导入用于监听动作事件的ActionListener接口 +import java.awt.event.ItemEvent; // 导入用于处理项目事件的ItemEvent类 +import java.awt.event.ItemListener; // 导入用于监听项目事件的ItemListener接口 +import java.util.ArrayList; // 导入用于数组列表的ArrayList类 + +import javax.swing.ImageIcon; // 导入用于处理图像图标的ImageIcon类 +import javax.swing.JButton; // 导入用于创建按钮的JButton类 +import javax.swing.JComboBox; // 导入用于创建组合框的JComboBox类 +import javax.swing.JFrame; // 导入用于创建窗口的JFrame类 +import javax.swing.JLabel; // 导入用于创建标签的JLabel类 +import javax.swing.JPanel; // 导入用于创建面板的JPanel类 +import javax.swing.JScrollPane; // 导入用于创建滚动窗格的JScrollPane类 +import javax.swing.JTable; // 导入用于创建表格的JTable类 +import javax.swing.JTextField; // 导入用于创建文本字段的JTextField类 + +import com.lingnan.supermarket.dao.impl.prodCatalogImpl; // 导入产品目录数据访问层的实现类 +import com.lingnan.supermarket.dialog.UserDialog; // 导入用户对话框类 +import com.lingnan.supermarket.dto.ProdCatalog; // 导入产品目录数据传输对象 +import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 +import com.lingnan.supermarket.table.ProdCatalogTM; // 导入产品目录表格模型 +import com.lingnan.supermarket.table.StorageTableModel; // 导入存储表格模型 +import com.lingnan.supermarket.table.UserTableModel; // 导入用户表格模型 +import com.lingnan.supermarket.utils.FontUtil; // 导入字体工具类 + +public class ProdCatalogView extends JPanel { // 创建一个公共类ProdCatalogView,继承自JPanel // 上面 - private JPanel toolBarPanel; + private JPanel toolBarPanel; // 工具栏面板 - private JPanel searchPanel; - private JLabel logLabel, locationLabel; - private JTextField nameSearchTF; - private JButton searchBtn; + private JPanel searchPanel; // 搜索面板 + private JLabel logLabel, locationLabel; // 日志标签和位置标签 + private JTextField nameSearchTF; // 名称搜索文本字段 + private JButton searchBtn; // 搜索按钮 - private JPanel opePanel; - private JButton addBtn, updateBtn, deleteBtn; + private JPanel opePanel; // 操作面板 + private JButton addBtn, updateBtn, deleteBtn; // 添加、更新、删除按钮 - private String catalog = "0"; - private JComboBox combo; - private String log[]=null; - private ArrayListalog=null; - private ProdCatalogTM prodCatalogTM; - private ProdCatalog pc; - private prodCatalogImpl pci; + private String catalog = "0"; // 目录字符串,默认为"0" + private JComboBox combo; // 字符串组合框 + private String log[]=null; // 日志数组 + private ArrayListalog=null; // 日志数组列表 + private ProdCatalogTM prodCatalogTM; // 产品目录表格模型 + private ProdCatalog pc; // 产品目录对象 + private prodCatalogImpl pci; // 产品目录数据访问层实现对象 // 中间 - private JScrollPane tableScrollPane; - private JTable prodCatalogTable; + private JScrollPane tableScrollPane; // 表格滚动窗格 + private JTable prodCatalogTable; // 产品目录表格 // 下面 - private JPanel bottomPanel; - private JLabel countInfoLabel; + private JPanel bottomPanel; // 底部面板 + private JLabel countInfoLabel; // 记录数信息标签 - private JFrame jFrame; + private JFrame jFrame; // 窗口对象 - public ProdCatalogView(JFrame jFrame) { - this.setLayout(new BorderLayout()); - initView(); - this.jFrame = jFrame; + public ProdCatalogView(JFrame jFrame) { // ProdCatalogView构造方法,接收一个JFrame参数 + this.setLayout(new BorderLayout()); // 设置面板布局为BorderLayout + initView(); // 初始化视图 + this.jFrame = jFrame; // 将传入的JFrame对象赋值给成员变量jFrame } - + private void initView() { + // 创建一个面板,使用边界布局管理器 toolBarPanel = new JPanel(new BorderLayout()); + // 创建搜索面板,使用流布局管理器,对齐方式为左对齐 searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + // 创建并初始化商品目录标签 locationLabel = new JLabel("商品目录"); + // 设置标签字体 locationLabel.setFont(new FontUtil().userFont); + // 设置标签前景色 locationLabel.setForeground(new Color(18, 150, 219)); + // 创建分类标签 logLabel = new JLabel("分类"); + // 创建文本框,用于输入搜索内容,指定宽度为10 nameSearchTF = new JTextField(10); + // 创建搜索按钮,并指定图标 searchBtn = new JButton("搜索", new ImageIcon("static\\icon\\search.png")); + // 创建操作面板,使用流布局管理器,对齐方式为右对齐 // opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); +// // 创建并初始化按钮,指定图标 // addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); // updateBtn = new JButton(new ImageIcon("static\\icon\\update.png")); // deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); - +// +// // 为按钮添加事件监听器 // addBtn.addActionListener(this); // updateBtn.addActionListener(this); // deleteBtn.addActionListener(this); - +// +// // 将按钮添加到操作面板 // opePanel.add(addBtn); // opePanel.add(updateBtn); // opePanel.add(deleteBtn); - + + // 实例化商品目录实现类 pci=new prodCatalogImpl(); + // 查找所有商品目录名称 this.alog=pci.findNameProdCatalog(); + // 创建字符串数组,用于存储商品目录名称 this.log=new String[alog.size()]; + // 将商品目录名称填充到数组 for(int i=0;i(log); + // 为下拉列表添加项目监听器 combo.addItemListener(new MyItemListener()); + // 将标签、下拉列表添加到搜索面板 searchPanel.add(locationLabel); searchPanel.add(logLabel); searchPanel.add(combo); /* - * searchPanel.add(nameSearchTF); searchPanel.add(searchBtn); + * 将文本框和搜索按钮添加到搜索面板,当前被注释 + * searchPanel.add(nameSearchTF); + * searchPanel.add(searchBtn); */ + // 将搜索面板添加到工具栏面板的西边 toolBarPanel.add(searchPanel, "West"); + // 将操作面板添加到工具栏面板的东边,当前被注释 // toolBarPanel.add(opePanel, "East"); - // 中间表格 + // 创建表格模型,并获取所有数据 prodCatalogTM = new ProdCatalogTM(); prodCatalogTM.all(); + // 创建表格,使用表格模型 prodCatalogTable = new JTable(prodCatalogTM); + // 设置表格字体 prodCatalogTable.setFont(FontUtil.tableFont); + // 设置表格行高 prodCatalogTable.setRowHeight(50); + // 创建滚动面板,并将表格添加到其中 tableScrollPane = new JScrollPane(prodCatalogTable); + } - // 下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - countInfoLabel = new JLabel("总共" + prodCatalogTable.getRowCount() + "条"); - bottomPanel.add(countInfoLabel); - - this.add(toolBarPanel, "North"); - this.add(tableScrollPane, "Center");/* 将表格放到中间 */ - this.add(bottomPanel, "South"); - setVisible(true); - } + // 下面 + // 创建底部面板,使用流布局管理器,对齐方式为左对齐 + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); +// 创建并初始化显示总记录数的标签 + countInfoLabel = new JLabel("总共" + prodCatalogTable.getRowCount() + "条"); +// 将记录数标签添加到底部面板 +bottomPanel.add(countInfoLabel); + +// 将工具栏面板添加到当前窗口的北部 +this.add(toolBarPanel, "North"); +// 将表格滚动面板添加到当前窗口的中间 +this.add(tableScrollPane, "Center");/* 将表格放到中间 */ +// 将底部面板添加到当前窗口的南部 +this.add(bottomPanel, "South"); + + // 设置当前窗口为可见 + setVisible(true); +} + +// 以下是注释掉的代码,实现按钮的事件监听 // @Override // public void actionPerformed(ActionEvent e) { // Object source = e.getSource(); @@ -148,47 +187,73 @@ public class ProdCatalogView extends JPanel { // UserDialog userDialog = new UserDialog(jFrame); // userDialog.setVisible(true); // } else if (updateBtn == source) { -// +// // 更新按钮的逻辑 // } else if (deleteBtn == source) { -// +// // 删除按钮的逻辑 // } // } - public class MyItemListener implements ItemListener { - - @Override - public void itemStateChanged(ItemEvent e) { - JComboBox cb = (JComboBox) e.getSource(); - String catalog1 = (String) cb.getSelectedItem(); - pci =new prodCatalogImpl(); - for(int i=0;i商品库存"); - locationLabel.setFont(new FontUtil().userFont); - locationLabel.setForeground(new Color(18, 150, 219)); - nameLabel = new JLabel("商品名"); - nameSearchTF = new JTextField(10); - - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); - - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); - updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); - backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); - historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); - backBtn.setVisible(false); - - addBtn.addActionListener(this); - updateBtn.addActionListener(this); - deleteBtn.addActionListener(this); - searchBtn.addActionListener(this); - backBtn.addActionListener(this); - historyBtn.addActionListener(this); - - opePanel.add(addBtn); - opePanel.add(updateBtn); - opePanel.add(deleteBtn); - opePanel.add(backBtn); - opePanel.add(historyBtn); - - searchPanel.add(locationLabel); - searchPanel.add(nameLabel); - searchPanel.add(nameSearchTF); - searchPanel.add(searchBtn); - - - toolBarPanel.add(searchPanel,"West"); - toolBarPanel.add(opePanel,"East"); - - + + private void initView() { // 初始化视图方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel=new JLabel("当前位置>商品库存"); // 创建当前位置标签并设置文本 + locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 + nameLabel = new JLabel("商品名"); // 创建商品名标签 + nameSearchTF = new JTextField(10); // 创建文本框用于输入商品名,大小为10 + + + + + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 + backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); // 创建返回按钮并设置图标 + historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); // 创建历史按钮并设置图标 + backBtn.setVisible(false); // 设置返回按钮不可见 + + addBtn.addActionListener(this); // 为添加按钮添加事件监听器 + updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 + deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 + searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 + backBtn.addActionListener(this); // 为返回按钮添加事件监听器 + historyBtn.addActionListener(this); // 为历史按钮添加事件监听器 + + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(updateBtn); // 将更新按钮添加到操作面板 + opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 + opePanel.add(backBtn); // 将返回按钮添加到操作面板 + opePanel.add(historyBtn); // 将历史按钮添加到操作面板 + + searchPanel.add(locationLabel); // 将位置标签添加到搜索面板 + searchPanel.add(nameLabel); // 将商品名标签添加到搜索面板 + searchPanel.add(nameSearchTF); // 将商品名文本框添加到搜索面板 + searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 + + + toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 + toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 + + //中间表格 - storageTableModel = new StorageTableModel(); - storageTableModel.all(); - storageTable = new JTable(storageTableModel); - storageTable.setFont(FontUtil.tableFont); - storageTable.setRowHeight(50); - - tableScrollPane = new JScrollPane(storageTable); - + storageTableModel = new StorageTableModel(); // 创建存储表格模型 + storageTableModel.all(); // 初始化表格模型数据 + storageTable = new JTable(storageTableModel); // 创建表格并设置模型 + storageTable.setFont(FontUtil.tableFont); // 设置表格字体 + storageTable.setRowHeight(50); // 设置表格行高 + + tableScrollPane = new JScrollPane(storageTable); // 创建滚动面板并包含表格 + //下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - countInfoLabel = new JLabel("总共"+storageTableModel.getRowCount()+"条"); - bottomPanel.add(countInfoLabel); - - - this.add(toolBarPanel,"North"); - this.add(tableScrollPane,"Center");/*将表格放到中间*/ - this.add(bottomPanel,"South"); - - setVisible(true); + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共"+storageTableModel.getRowCount()+"条"); // 创建记录数标签并设置文本 + bottomPanel.add(countInfoLabel); // 将记录数标签添加到底部面板 + + + this.add(toolBarPanel,"North"); // 将工具栏面板添加到当前面板的北边 + this.add(tableScrollPane,"Center"); /*将表格放到中间*/ + this.add(bottomPanel,"South"); // 将底部面板添加到当前面板的南边 + + setVisible(true); // 设置当前面板可见 } + + + + @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if(addBtn==source) { + public void actionPerformed(ActionEvent e) { // 重写actionPerformed方法以处理按钮点击事件 + Object source = e.getSource(); // 获取事件源 + if(addBtn==source) { // 如果事件源是添加按钮 //添加数据的对话框 - ProductionDialog productionDialog = new ProductionDialog(jFrame); - productionDialog.setVisible(true); - refreshProduction(); - }else if(updateBtn==source) { - refreshProduction(); - }else if(historyBtn==source) { - storageRecord(); - }else if(backBtn==source) { - refreshProduction(); + ProductionDialog productionDialog = new ProductionDialog(jFrame); // 创建添加数据的对话框 + productionDialog.setVisible(true); // 显示对话框 + refreshProduction(); // 刷新数据 + }else if(updateBtn==source) { // 如果事件源是更新按钮 + refreshProduction(); // 刷新数据 + }else if(historyBtn==source) { // 如果事件源是历史按钮 + storageRecord(); // 处理存储记录 + }else if(backBtn==source) { // 如果事件源是返回按钮 + refreshProduction(); // 刷新数据 } - - else if(deleteBtn==source) { + + else if(deleteBtn==source) { // 如果事件源是删除按钮 //获取选中记录,删除 - int[] rowIndexs = storageTable.getSelectedRows(); - if(rowIndexs.length==0) { - JOptionPane.showMessageDialog(this,"请至少选中一条"); - return; + int[] rowIndexs = storageTable.getSelectedRows(); // 获取表格中选中的行索引 + if(rowIndexs.length==0) { // 如果没有选中任何行 + JOptionPane.showMessageDialog(this,"请至少选中一条"); // 显示提示信息 + return; // 结束方法执行 } - int select=JOptionPane.showConfirmDialog(this,"是否删除选中的"+rowIndexs.length+"条记录","提示",JOptionPane.YES_NO_OPTION); - if(select==JOptionPane.YES_OPTION){ - - for(int i=0;i供应商"); - locationLabel.setFont(new FontUtil().userFont); - locationLabel.setForeground(new Color(18, 150, 219)); - nameLabel = new JLabel("公司名称"); - nameSearchTF = new JTextField(10); - - searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); - - opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); - updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); - - addBtn.addActionListener(this); - updateBtn.addActionListener(this); - deleteBtn.addActionListener(this); - searchBtn.addActionListener(this); - - opePanel.add(addBtn); - opePanel.add(updateBtn); - opePanel.add(deleteBtn); - - searchPanel.add(locationLabel); - searchPanel.add(nameLabel); - searchPanel.add(nameSearchTF); - searchPanel.add(searchBtn); - - - toolBarPanel.add(searchPanel,"West"); - toolBarPanel.add(opePanel,"East"); - - + + private void initView() { // 初始化视图方法 + + toolBarPanel = new JPanel(new BorderLayout()); // 创建工具栏面板并设置布局为BorderLayout + + searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建搜索面板并设置布局为左对齐的FlowLayout + locationLabel=new JLabel("当前位置>供应商"); // 创建当前位置标签 + locationLabel.setFont(new FontUtil().userFont); // 设置标签字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置标签前景色 + nameLabel = new JLabel("公司名称"); // 创建公司名称标签 + nameSearchTF = new JTextField(10); // 创建文本框用于输入公司名称,大小为10 + + + + + + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮并设置图标 + + opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建操作面板并设置布局为右对齐的FlowLayout + addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮并设置图标 + updateBtn =new JButton(new ImageIcon("static\\icon\\update.png")); // 创建更新按钮并设置图标 + deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮并设置图标 + + addBtn.addActionListener(this); // 为添加按钮添加事件监听器 + updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 + deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 + searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 + + opePanel.add(addBtn); // 将添加按钮添加到操作面板 + opePanel.add(updateBtn); // 将更新按钮添加到操作面板 + opePanel.add(deleteBtn); // 将删除按钮添加到操作面板 + + searchPanel.add(locationLabel); // 将当前位置标签添加到搜索面板 + searchPanel.add(nameLabel); // 将公司名称标签添加到搜索面板 + searchPanel.add(nameSearchTF); // 将公司名称文本框添加到搜索面板 + searchPanel.add(searchBtn); // 将搜索按钮添加到搜索面板 + + + toolBarPanel.add(searchPanel,"West"); // 将搜索面板添加到工具栏面板的西边 + toolBarPanel.add(opePanel,"East"); // 将操作面板添加到工具栏面板的东边 + + //中间表格 - SupplierTableModel supplierTableModel = new SupplierTableModel(); - supplierTableModel.all(); - supplierTable = new JTable(supplierTableModel); - supplierTable.setFont(FontUtil.tableFont); - supplierTable.setRowHeight(50); - - tableScrollPane = new JScrollPane(supplierTable);/*滑动条*/ - + supplierTableModel = new SupplierTableModel(); // 创建供应商表格模型实例 + supplierTableModel.all(); // 调用表格模型的方法以加载所有数据 + supplierTable = new JTable(supplierTableModel); // 创建表格并使用供应商表格模型 + supplierTable.setFont(FontUtil.tableFont); // 设置表格字体 + supplierTable.setRowHeight(50); // 设置表格行高为50像素 + + tableScrollPane = new JScrollPane(supplierTable); // 创建滚动面板并添加表格/*滑动条*/ + //下面 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); - bottomPanel.add(countInfoLabel); - - - this.add(toolBarPanel,"North"); - this.add(tableScrollPane,"Center");/*将表格放到中间*/ - this.add(bottomPanel,"South"); - - setVisible(true); + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部面板并设置布局为左对齐的FlowLayout + countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建信息标签并设置显示总条数 + bottomPanel.add(countInfoLabel); // 将信息标签添加到底部面板 + + + this.add(toolBarPanel,"North"); // 将工具栏面板添加到当前面板的北边 + this.add(tableScrollPane,"Center"); // 将表格滚动面板添加到当前面板的中间/*将表格放到中间*/ + this.add(bottomPanel,"South"); // 将底部面板添加到当前面板的南边 + + setVisible(true); // 设置当前面板可见 } + + + + @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if(addBtn==source) { - SupplierInfDialog supplierInfDialog = new SupplierInfDialog(jFrame, null); - supplierInfDialog.setVisible(true); - refreshSupplier(); - }else if(updateBtn==source) { - refreshSupplier(); - }else if(deleteBtn==source) { + public void actionPerformed(ActionEvent e) { // 重写actionPerformed方法以处理按钮点击事件 + Object source = e.getSource(); // 获取事件源 + if(addBtn==source) { // 如果事件源是添加按钮 + SupplierInfDialog supplierInfDialog = new SupplierInfDialog(jFrame, null); // 创建供应商信息对话框 + supplierInfDialog.setVisible(true); // 显示供应商信息对话框 + refreshSupplier(); // 刷新供应商列表 + }else if(updateBtn==source) { // 如果事件源是更新按钮 + refreshSupplier(); // 刷新供应商列表 + }else if(deleteBtn==source) { // 如果事件源是删除按钮 //获取选中记录 - int rowIndex = supplierTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条"); - return; - } - int id = (Integer)supplierTable.getValueAt(rowIndex,0); - int select=JOptionPane.showConfirmDialog(this,"是否删除id="+id,"提示",JOptionPane.YES_NO_OPTION); - if(select==JOptionPane.YES_OPTION){ - if(supplierInfService.deleteSupplierInf(id)==1) { - JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); - refreshSupplier(); - }else { - JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); + int rowIndex = supplierTable.getSelectedRow(); // 获取表格中选中的行索引 + if(rowIndex==-1) { // 如果没有选中任何行 + JOptionPane.showMessageDialog(this,"请选中一条"); // 显示提示信息 + return; // 结束方法执行 } + int id = (Integer)supplierTable.getValueAt(rowIndex,0); // 获取选中行的ID + int select=JOptionPane.showConfirmDialog(this,"是否删除id="+id,"提示",JOptionPane.YES_NO_OPTION); // 显示确认删除对话框 + if(select==JOptionPane.YES_OPTION){ // 如果用户选择是 + if(supplierInfService.deleteSupplierInf(id)==1) { // 尝试删除供应商信息 + JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); // 显示删除成功信息 + refreshSupplier(); // 刷新供应商列表 + }else { + JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); // 显示删除失败信息 + } } - }else{ - System.out.println("搜索"); - refreshFindRname(); + }else{ // 如果事件源不是以上按钮 + System.out.println("搜索"); // 输出搜索信息 + refreshFindRname(); // 刷新搜索结果 } } - public void refreshFindRname() { - String name = nameSearchTF.getText(); - SupplierInf supplierInf =new SupplierInf(); - supplierInf.setName(name); - - - supplierTableModel = new SupplierTableModel(); - supplierTableModel.Byname(supplierInf); - - supplierTable.setModel(supplierTableModel); - - refreshCount(); - + public void refreshFindRname() { // 刷新搜索结果的方法 + String name = nameSearchTF.getText(); // 获取文本框中的搜索名称 + SupplierInf supplierInf =new SupplierInf(); // 创建供应商信息对象 + supplierInf.setName(name); // 设置供应商名称 + + supplierTableModel = new SupplierTableModel(); // 创建供应商表格模型 + supplierTableModel.Byname(supplierInf); // 根据名称过滤供应商信息 + supplierTable.setModel(supplierTableModel); // 更新表格模型 + refreshCount(); // 刷新记录数显示 } - public void refreshSupplier() { - supplierTableModel = new SupplierTableModel(); - supplierTableModel.all(); - supplierTable.setModel(supplierTableModel); - - refreshCount(); + public void refreshSupplier() { // 刷新供应商列表的方法 + supplierTableModel = new SupplierTableModel(); // 创建供应商表格模型 + supplierTableModel.all(); // 加载所有供应商信息 + supplierTable.setModel(supplierTableModel); // 更新表格模型 + refreshCount(); // 刷新记录数显示 } - public void refreshCount(){ - bottomPanel.removeAll(); - countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); - bottomPanel.add(countInfoLabel); + public void refreshCount(){ // 刷新记录数显示的方法 + bottomPanel.removeAll(); // 清除底部面板上的所有组件 + countInfoLabel = new JLabel("总共"+supplierTableModel.getRowCount()+"条"); // 创建新的记录数标签 + bottomPanel.add(countInfoLabel); // 将记录数标签添加到底部面板 } - -} \ No newline at end of file + +} + + + + From 8a6015ba57b97a2a877163070f94f39f5ff62c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E4=BA=A6=E6=AD=86?= Date: Sat, 14 Dec 2024 13:15:36 +0800 Subject: [PATCH 14/30] =?UTF-8?q?table=E9=83=A8=E5=88=86=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lingnan/supermarket/table/InOrderTM.java | 132 ++++++++------- .../lingnan/supermarket/table/InRecordTM.java | 121 +++++++------- .../supermarket/table/InTableModel.java | 156 ++++++++++-------- .../supermarket/table/ProdCatalogTM.java | 101 +++++++----- .../supermarket/table/StorageRecordTM.java | 125 ++++++++------ .../supermarket/table/StorageTableModel.java | 61 +++++-- .../supermarket/table/SupplierTableModel.java | 66 +++++--- 7 files changed, 443 insertions(+), 319 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java b/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java index 60934ee..c7b78e0 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java @@ -1,107 +1,119 @@ -package com.lingnan.supermarket.table; - -import java.util.List; -import java.util.Vector; - -import javax.swing.JFrame; -import javax.swing.table.AbstractTableModel; - -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.InOrder; -import com.lingnan.supermarket.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; - - +// 定义InOrderTM类,该类继承自AbstractTableModel,用于创建表格模型 public class InOrderTM extends AbstractTableModel{ - + + // 定义列名数组,存储表格的列标题 private String [] columnName = {"订单号","总价","时间","负责人","状态"}; + // 创建Production接口的实现类对象,用于操作Production数据 private productionImpl prodDao = new productionImpl(); - + + // 定义一个Vector集合,用于存储InOrder对象,表示订单数据 private Vector InOrders; + // 创建inOrderService接口的实现类对象,用于操作InOrder数据 private inOrderServiceImpl inOrderImpl= new inOrderServiceImpl(); + // 定义InOrder对象,用于存储当前操作的订单 private InOrder inOrder ; - + + // 定义一个String变量,用于存储订单号 String iNumber ;/*订单号*/ - - + + + // 定义方法allInOrderRecord,用于获取所有订单记录 public void allInOrderRecord() { - //将添加的商品加入到静态变量Vector数组中 + // 将添加的商品加入到静态变量Vector数组中 /*prod = InDialog.getProduction();*/ + // 调用inOrderImpl的findAllInOrder方法,获取所有订单记录,并赋值给InOrders InOrders = inOrderImpl.findAllInOrder(); } - - //查找分类结果 + + // 定义方法resultOfFind,根据分类结果获取订单记录 public void resultOfFind(int catalog) { + // 如果分类编号为0,获取所有订单记录 if(catalog==0) InOrders = inOrderImpl.findAllInOrder(); else + // 否则,根据状态获取订单记录 InOrders = inOrderImpl.FindStatus(catalog); } - - //根据订单查找 + + // 定义方法resultOfNumber,根据订单号查找订单 public void resultOfNumber(String Number) { + // 初始化InOrders集合 InOrders=new Vector(); + // 调用inOrderImpl的findByIdinOrder方法,根据订单号查找订单,并添加到InOrders集合中 inOrder = inOrderImpl.findByIdinOrder(Number); InOrders.add(inOrder); } + // 重写getRowCount方法,返回表格模型中的行数 @Override public int getRowCount() { - return InOrders.size(); + return InOrders.size(); // 返回InOrders集合的大小,即行数 } - -/* public Float getAllPrice() { + + /* public Float getAllPrice() { return BufferImpl.InBufferAllPrice(); } */ + // 重写getColumnCount方法,返回表格模型中的列数 @Override - public int getColumnCount() { - return columnName.length; + public int getColumnCount() { + return columnName.length; // 返回列名数组的长度,即列的数量 } + // 重写getValueAt方法,根据行索引和列索引获取表格模型中的值 @Override public Object getValueAt(int rowIndex, int columnIndex) { - inOrder = InOrders.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - iNumber=inOrder.getiNumber(); - if(columnIndex==0) { - 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) + + 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; + return status; // 返回订单的状态 + }else { // 如果列索引不匹配上述任何情况 + return null; // 返回null + + } + + } - - public String getINumber() { /*返回要修改或删除的记录*/ - return iNumber; + + // 定义方法getINumber,返回当前对象的订单号,用于修改或删除记录 + public String getINumber() { + return iNumber; // 返回当前对象的订单号 + } - - + + + // 重写getColumnName方法,根据列索引返回对应的列名 @Override public String getColumnName(int column) { - return columnName[column]; + return columnName[column]; // 返回列名数组中对应索引的列名 + } - - + + } + diff --git a/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java b/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java index 8bb0ad9..89b2d8c 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java @@ -1,91 +1,96 @@ -package com.lingnan.supermarket.table; - -import java.util.List; -import java.util.Vector; - -import javax.swing.JFrame; -import javax.swing.table.AbstractTableModel; - -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.InOrder; -import com.lingnan.supermarket.dto.InRecord; -import com.lingnan.supermarket.dto.Buffer; -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.dao.UserService; -import com.lingnan.supermarket.dao.impl.*; -import com.lingnan.supermarket.dialog.InDialog; - - +// 定义InRecordTM类,该类继承自AbstractTableModel,用于创建表格模型 public class InRecordTM extends AbstractTableModel{ - + + // 定义列名数组,存储表格的列标题 private String [] columnName = {"订单号","id","数量","金额"}; + // 创建Production接口的实现类对象,用于操作Production数据 private productionImpl prodDao = new productionImpl(); - + + // 定义一个Vector集合,用于存储InRecord对象 private Vector InRecords; - + + // 创建InRecord接口的实现类对象,用于操作InRecord数据 private inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); + // 创建InRecord对象,用于存储特定的InRecord记录 private InRecord inRecord= new InRecord(); - + // 定义一个String类型的变量,用于存储订单号 private String iNumber ;/*订单号*/ - - + + + // 构造方法,接收订单号参数并初始化iNumber变量 public InRecordTM(String iNumber) { + this.iNumber=iNumber; + } - + + // 定义方法findInRecordByINumber,用于根据订单号查询InRecord记录 public void findInRecordByINumber() { - //将添加的商品加入到静态变量Vector数组中 + + // 将添加的商品加入到静态变量Vector数组中 /*prod = InDialog.getProduction();*/ + // 调用inRecordImpl的findByIdinRecord方法,根据订单号查询记录,并将结果赋值给InRecords InRecords = inRecordImpl.findByIdinRecord(iNumber); + } - - + + + // 重写getRowCount方法,返回表格模型中的行数 @Override public int getRowCount() { - return InRecords.size(); + + return InRecords.size(); // 返回InRecords集合的大小,即行数 + } - -/* public Float getAllPrice() { + + /* public Float getAllPrice() { return BufferImpl.InBufferAllPrice(); } */ + // 重写getColumnCount方法,返回表格模型中的列数 @Override - public int getColumnCount() { - return columnName.length; + public int getColumnCount() { + return columnName.length; // 返回列名数组的长度,即列的数量 } + // 重写getValueAt方法,根据行索引和列索引获取表格模型中的值 @Override public Object getValueAt(int rowIndex, int columnIndex) { - inRecord = InRecords.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - iNumber=inRecord.getiNumber(); - if(columnIndex==0) { - return inRecord.getiNumber(); - }else if(columnIndex==1) { - return inRecord.getId(); - }else if(columnIndex==2) { - return inRecord.getSum(); - }else if(columnIndex==3) { - return inRecord.getInPrice(); - }else { - return null; + 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 + } + } - - public String getINumber() { /*返回要修改或删除的记录*/ - return iNumber; + + // 定义方法getINumber,返回当前对象的订单号,用于修改或删除记录 + public String getINumber() { + + return iNumber; // 返回当前对象的订单号 + } - - + + + // 重写getColumnName方法,根据列索引返回对应的列名 @Override public String getColumnName(int column) { - return columnName[column]; + + return columnName[column]; // 返回列名数组中对应索引的列名 + } - - -} diff --git a/Supermarket/src/com/lingnan/supermarket/table/InTableModel.java b/Supermarket/src/com/lingnan/supermarket/table/InTableModel.java index b8f28ad..7c27e23 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InTableModel.java @@ -1,99 +1,121 @@ -package com.lingnan.supermarket.table; +package com.lingnan.supermarket.table; // 定义包名,表示这个类属于com.lingnan.supermarket.table包 -import java.util.List; -import java.util.Vector; +import java.util.List; // 导入Java的List接口,用于存储集合数据 +import java.util.Vector; // 导入Java的Vector类,用于存储表格数据 -import javax.swing.JFrame; -import javax.swing.table.AbstractTableModel; +import javax.swing.JFrame; // 导入Swing库中的JFrame类,用于创建窗口框架 +import javax.swing.table.AbstractTableModel; // 导入Swing库中的AbstractTableModel类,用于创建表格模型 +import com.lingnan.supermarket.dto.InOrder; // 导入自定义的InOrder类,但在此代码中未使用 +import com.lingnan.supermarket.dto.Production; // 导入自定义的Production类,可能用于表示商品的数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入自定义的User类,但在此代码中未使用 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,但在此代码中未使用 +import com.lingnan.supermarket.dao.impl.*; // 导入impl包下的所有类,可能包含数据访问层的实现类 +import com.lingnan.supermarket.dialog.InDialog; // 导入自定义的InDialog类,但在此代码中未使用 -import com.lingnan.supermarket.dto.InOrder; +public class InTableModel extends AbstractTableModel{ // 定义一个名为InTableModel的类,该类继承自AbstractTableModel类,用于创建表格模型 -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.dao.UserService; -import com.lingnan.supermarket.dao.impl.*; -import com.lingnan.supermarket.dialog.InDialog; + private String [] columnName = {"id","名称","数量","单价","价格","保质期","类别","供应商id"}; // 定义一个字符串数组,用于存储表格的列名 + private productionImpl prodDao = new productionImpl(); // 创建productionImpl类的实例,用于访问商品数据 + private Vector v; // 声明一个Vector类型的变量,用于存储商品列表 -public class InTableModel extends AbstractTableModel{ - - - private String [] columnName = {"id","名称","数量","单价","价格","保质期","类别","供应商id"}; + String id ; // 声明一个String类型的变量,用于存储id,但未初始化和使用 - private productionImpl prodDao = new productionImpl(); - - private Vector v; - - - String id ; - - - public InTableModel(Vector v) { - System.out.println("调用imtablemodel里面的构造函数"); - this.v=v; + public InTableModel(Vector v) { // 定义一个名为InTableModel的构造函数,接收Vector类型的参数 + System.out.println("调用imtablemodel里面的构造函数"); // 打印信息,表示构造函数被调用 + this.v=v; // 将传入的参数v赋值给成员变量v } - - - + + + + + // 定义一个方法getRowCount,用来获取集合v中的元素数量 public int getRowCount() { - return v.size(); + return v.size(); // 返回集合v的大小,即元素的数量 } - + + + + + // 定义一个方法getAllPrice,用来计算集合v中所有Production对象的价格总和 public Float getAllPrice() { - Float allPrice=(float) 0; - for(Production p:v) { - allPrice+=p.getPrice(); + + Float allPrice=(float) 0; // 初始化总价格为0.0 + + for(Production p:v) { // 遍历集合v中的每一个Production对象 + allPrice+=p.getPrice(); // 将当前Production对象的价格加到总价格上 } - return allPrice; + + return allPrice; // 返回计算出的总价格 + } + + // 重写getColumnCount方法,返回表格模型中的列数 @Override - public int getColumnCount() { - return columnName.length; + public int getColumnCount() { + return columnName.length; // 返回列名数组的长度,即列的数量 } + // 重写getValueAt方法,根据行索引和列索引获取表格模型中的值 @Override public Object getValueAt(int rowIndex, int columnIndex) { - Production p = v.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - id=p.getId(); - if(columnIndex==0) { - return p.getId(); - }else if(columnIndex==1) { - return p.getName(); - }else if(columnIndex==2) { - return p.getSum(); - }else if(columnIndex==3) { - return p.getInPrice() ; - }else if(columnIndex==4) { - return p.getPrice() ; - }else if(columnIndex==5) { - return p.getLife(); - }else if(columnIndex==6) { - return p.getName2()+p.getId2(); - }else if(columnIndex==7) { - return p.getSupplyId(); - }else { - return null; + + Production p = v.get(rowIndex); // 根据行索引从集合v中获取对应的Production对象 + /* 以下是注释掉的打印语句,用于调试,显示行索引、列索引和用户ID + System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex); */ + + id=p.getId(); // 将Production对象的ID赋值给id变量 + + if(columnIndex==0) { // 如果列索引为0 + return p.getId(); // 返回Production对象的ID + }else if(columnIndex==1) { // 如果列索引为1 + return p.getName(); // 返回Production对象的名称 + }else if(columnIndex==2) { // 如果列索引为2 + return p.getSum(); // 返回Production对象的Sum属性 + }else if(columnIndex==3) { // 如果列索引为3 + return p.getInPrice(); // 返回Production对象的InPrice属性 + }else if(columnIndex==4) { // 如果列索引为4 + return p.getPrice(); // 返回Production对象的Price属性 + }else if(columnIndex==5) { // 如果列索引为5 + return p.getLife(); // 返回Production对象的Life属性 + }else if(columnIndex==6) { // 如果列索引为6 + return p.getName2()+p.getId2(); // 返回Production对象的Name2和Id2拼接的字符串 + }else if(columnIndex==7) { // 如果列索引为7 + return p.getSupplyId(); // 返回Production对象的SupplyId属性 + }else { // 如果列索引不匹配上述任何情况 + return null; // 返回null + } + } - + + + + // 定义一个方法getId,用来获取当前对象的ID属性值 public String getId() { /*返回要修改或删除的记录*/ - return id; + + return id; // 返回当前对象的id字段值 + } - - + + + + // 重写getColumnName方法,根据列索引返回对应的列名 @Override public String getColumnName(int column) { - return columnName[column]; + + return columnName[column]; // 返回存储列名的数组中对应索引的列名 + } - - + + + } diff --git a/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java b/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java index e93774b..0d86874 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/ProdCatalogTM.java @@ -1,65 +1,76 @@ -package com.lingnan.supermarket.table; +package com.lingnan.supermarket.table; // 定义包名,表示这个类属于com.lingnan.supermarket.table包 -import java.util.List; -import java.util.Vector; +import java.util.List; // 导入Java的List接口,用于存储集合数据 +import java.util.Vector; // 导入Java的Vector类,用于存储表格数据 -import javax.swing.table.AbstractTableModel; +import javax.swing.table.AbstractTableModel; // 导入Swing库中的AbstractTableModel类,用于创建表格模型 -import com.lingnan.supermarket.dto.Production; -import com.lingnan.supermarket.dto.User; -import com.lingnan.supermarket.dao.UserService; -import com.lingnan.supermarket.dao.impl.*; +import com.lingnan.supermarket.dto.Production; // 导入自定义的Production类,可能用于表示商品的数据传输对象 +import com.lingnan.supermarket.dto.User; // 导入自定义的User类,但在此代码中未使用 +import com.lingnan.supermarket.dao.UserService; // 导入UserService接口,但在此代码中未使用 +import com.lingnan.supermarket.dao.impl.*; // 导入impl包下的所有类,可能包含数据访问层的实现类 +public class ProdCatalogTM extends AbstractTableModel{ // 定义一个名为ProdCatalogTM的类,该类继承自AbstractTableModel类,用于创建表格模型 -public class ProdCatalogTM extends AbstractTableModel{ - - private String [] columnName = {"类别id","类别名称","商品id","商品名称"}; + private String [] columnName = {"类别id","类别名称","商品id","商品名称"}; // 定义一个字符串数组,用于存储表格的列名 - private productionImpl prodDao = new productionImpl(); - - private Vector prods; - public void all() { + private productionImpl prodDao = new productionImpl(); // 创建productionImpl类的实例,用于访问商品数据 + + private Vector prods; // 声明一个Vector类型的变量,用于存储商品列表 + + + public void all() { // 定义一个名为all的方法,无参数 //查找全部数据 - prods = prodDao.findAllproduction(); + prods = prodDao.findAllproduction(); // 调用prodDao的findAllproduction方法,获取所有商品并赋值给prods变量 } - public void ById2(Production p) { + + + public void ById2(Production p) { // 定义一个名为ById2的方法,接收Production类型的参数 //查找全部数据 - prods = prodDao.findProductionById2(p.getId2()); + prods = prodDao.findProductionById2(p.getId2()); // 调用prodDao的findProductionById2方法,根据id2获取商品并赋值给prods变量 } - - @Override - public int getRowCount() { - return prods.size(); + + + @Override // 标记该方法重写了父类的方法 + public int getRowCount() { // 重写AbstractTableModel类的getRowCount方法,用于获取表格的行数 + return prods.size(); // 返回prods的大小,即商品的数量 } - @Override - public int getColumnCount() { - return columnName.length; + + @Override // 标记该方法重写了父类的方法 + public int getColumnCount() { // 重写AbstractTableModel类的getColumnCount方法,用于获取表格的列数 + return columnName.length; // 返回列名数组的长度,即表格的列数 } - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - Production prod = prods.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); + + @Override // 标记该方法重写了父类的方法 + public Object getValueAt(int rowIndex, int columnIndex) { // 重写AbstractTableModel类的getValueAt方法,用于获取表格中指定位置的值 + Production prod = prods.get(rowIndex); // 从prods中获取指定行的商品 + /* 以下三行代码被注释掉了,可能是用于调试打印信息 + System.out.println( "id="+users.get(rowIndex).getId()); System.out.println("rowIndex"+rowIndex); System.out.println("columnIndex"+columnIndex);*/ - if(columnIndex==0) { - return prod.getId2(); - }else if(columnIndex==1) { - return prod.getName2(); - }else if(columnIndex==2) { - return prod.getId(); - }else if(columnIndex==3) { - return prod.getName(); - }else { - return null; + if(columnIndex==0) { // 如果列索引为0,即第一列 + return prod.getId2(); // 返回类别id + }else if(columnIndex==1) { // 如果列索引为1,即第二列 + return prod.getName2(); // 返回类别名称 + }else if(columnIndex==2) { // 如果列索引为2,即第三列 + return prod.getId(); // 返回商品id + }else if(columnIndex==3) { // 如果列索引为3,即第四列 + return prod.getName(); // 返回商品名称 + }else { // 如果列索引不匹配以上任何列 + return null; // 返回null } + } - - @Override - public String getColumnName(int column) { - return columnName[column]; + + @Override // 标记该方法重写了父类的方法 + public String getColumnName(int column) { // 重写AbstractTableModel类的getColumnName方法,用于获取指定列的名称 + + return columnName[column]; // 返回columnName数组中指定索引的列名 + + } - - + + } diff --git a/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java b/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java index 18e43d9..38ba6ef 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java @@ -1,75 +1,90 @@ -package com.lingnan.supermarket.table; +package com.lingnan.supermarket.table; // 定义包名,表示这个类属于com.lingnan.supermarket.table包 -import java.util.Vector; +import java.util.Vector; // 导入Java的Vector类,用于存储表格数据 +import javax.swing.table.AbstractTableModel; // 导入Swing库中的AbstractTableModel类,用于创建表格模型 -import javax.swing.table.AbstractTableModel; +import com.lingnan.supermarket.dao.impl.storageRecordImpl; // 导入自定义的storageRecordImpl类,可能用于处理存储记录的数据访问对象 +import com.lingnan.supermarket.dto.StorageRecord; // 导入自定义的StorageRecord类,可能用于表示存储记录的数据传输对象 -import com.lingnan.supermarket.dao.impl.storageRecordImpl; -import com.lingnan.supermarket.dto.StorageRecord; +// 以下代码块是类的定义,继承自AbstractTableModel,用于创建表格模型 +public class YourClassName extends AbstractTableModel { + // 类的成员变量和方法的定义将在这里开始 +} + + +public class StorageRecordTM extends AbstractTableModel{ // 定义一个名为StorageRecordTM的类,该类继承自AbstractTableModel类,用于创建表格模型 + + private String [] columnName = {"订单号","操作时间","商品编号","进货+/出货-","数量"}; // 定义一个字符串数组,用于存储表格的列名 + + private storageRecordImpl srDao = new storageRecordImpl(); // 创建一个storageRecordImpl类的实例,用于操作存储记录的数据 + + private Vector storageRecords; // 声明一个Vector类型的变量,用于存储多个StorageRecord对象 + private StorageRecord storageRecord ; // 声明一个StorageRecord类型的变量,用于表示单个存储记录 + String oNumber ;/*订单号*/ // 声明一个String类型的变量,用于存储订单号,并添加注释说明 -public class StorageRecordTM extends AbstractTableModel{ - - private String [] columnName = {"订单号","操作时间","商品编号","进货+/出货-","数量"}; - private storageRecordImpl srDao = new storageRecordImpl(); - - private Vector storageRecords; - private StorageRecord storageRecord ; - - String oNumber ;/*订单号*/ - - - public void allStoragrRecord() { + + public void allStoragrRecord() { // 定义一个公共方法,用于获取所有存储记录 //将添加的商品加入到静态变量Vector数组中 - /*prod = InDialog.getProduction();*/ - storageRecords = srDao.findAllStorageRecord(); + /*prod = InDialog.getProduction();*/ // 这行代码被注释掉了,可能是用于从对话框获取商品信息 + storageRecords = srDao.findAllStorageRecord(); // 调用srDao的findAllStorageRecord方法,获取所有存储记录并赋值给storageRecords变量 } - - - @Override - public int getRowCount() { - return storageRecords.size(); + + + + @Override // 标记该方法重写了父类的方法 + public int getRowCount() { // 重写AbstractTableModel类的getRowCount方法,用于获取表格的行数 + return storageRecords.size(); // 返回storageRecords的大小,即存储记录的数量 } - + + + /* public Float getAllPrice() { return BufferImpl.InBufferAllPrice(); } */ - @Override - public int getColumnCount() { - return columnName.length; + + + @Override // 标记该方法重写了父类的方法 + public int getColumnCount() { // 重写AbstractTableModel类的getColumnCount方法,用于获取表格的列数 + return columnName.length; // 返回列名数组的长度,即表格的列数 } - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - storageRecord = storageRecords.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - oNumber=storageRecord.getTheNumber(); - if(columnIndex==0) { - return storageRecord.getTheNumber(); - }else if(columnIndex==1) { - return storageRecord.getcDate(); - }else if(columnIndex==2) { - return storageRecord.getId(); - }else if(columnIndex==3) { - return storageRecord.getExecute(); - }else if(columnIndex==4) { - return storageRecord.getNum(); - }else { - return null; + @Override // 标记该方法重写了父类的方法 + public Object getValueAt(int rowIndex, int columnIndex) { // 重写AbstractTableModel类的getValueAt方法,用于获取表格中指定位置的值 + storageRecord = storageRecords.get(rowIndex); // 从storageRecords中获取指定行的存储记录 + /* 以下三行代码被注释掉了,可能是用于调试打印信息 + System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + oNumber=storageRecord.getTheNumber(); // 从存储记录中获取订单号并赋值给oNumber变量 + if(columnIndex==0) { // 如果列索引为0,即第一列 + return storageRecord.getTheNumber(); // 返回订单号 + }else if(columnIndex==1) { // 如果列索引为1,即第二列 + return storageRecord.getcDate(); // 返回操作时间 + }else if(columnIndex==2) { // 如果列索引为2,即第三列 + return storageRecord.getId(); // 返回商品编号 + }else if(columnIndex==3) { // 如果列索引为3,即第四列 + return storageRecord.getExecute(); // 返回进货或出货标识 + }else if(columnIndex==4) { // 如果列索引为4,即第五列 + return storageRecord.getNum(); // 返回数量 + }else { // 如果列索引不匹配以上任何列 + return null; // 返回null } } - - - - @Override - public String getColumnName(int column) { - return columnName[column]; + + + @Override // 标记该方法重写了父类的方法 + public String getColumnName(int column) { // 重写AbstractTableModel类的getColumnName方法,用于获取指定列的名称 + + return columnName[column]; // 返回columnName数组中指定索引的列名 + + } - - + + + + } diff --git a/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java b/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java index 1d23b82..f94a129 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/StorageTableModel.java @@ -10,45 +10,68 @@ import com.lingnan.supermarket.dto.User; import com.lingnan.supermarket.dao.UserService; import com.lingnan.supermarket.dao.impl.*; - +// 定义一个表格模型类,用于存储和生产相关的数据 public class StorageTableModel extends AbstractTableModel{ - + + + // 定义列名数组 private String [] columnName = {"id","名称","保质期","数量","类别","供应商编号"}; + + // 实例化生产数据访问对象 private productionImpl prodDao = new productionImpl(); - + + + // 声明一个向量,用于存储生产数据 private Vector prods; + + + // 查找所有生产数据的方法 public void all() { - //查找全部数据 + // 查找全部数据并赋值给prods prods = prodDao.findAllproduction(); + + } + + // 根据名称查找生产数据的方法 public void Byname(Production p) { - //查找全部数据 + // 查找指定名称的生产数据并赋值给prods prods = prodDao.findproduction(p.getName()); + + } - + + // 重写获取行数的方法 @Override public int getRowCount() { + // 返回生产数据的数量 return prods.size(); + + } + // 重写获取列数的方法 @Override - public int getColumnCount() { + public int getColumnCount() { + // 返回列名数组的长度 return columnName.length; + + } + // 重写根据行索引和列索引获取单元格值的方法 @Override public Object getValueAt(int rowIndex, int columnIndex) { + // 获取指定行的生产数据对象 Production prod = prods.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ + // 根据列索引返回相应的数据 if(columnIndex==0) { return prod.getId(); }else if(columnIndex==1) { - return prod.getName(); + return prod.getName(); }else if(columnIndex==2) { - return prod.getLife(); + return prod.getLife(); }else if(columnIndex==3) { return prod.getSum(); }else if(columnIndex==4) { @@ -57,13 +80,21 @@ public class StorageTableModel extends AbstractTableModel{ return prod.getSupplyId(); }else { return null; + + } + + } - + + // 重写获取列名的方法 @Override public String getColumnName(int column) { + // 返回指定列的列名 return columnName[column]; + + } - - + + } diff --git a/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java b/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java index 8d1fe4f..f6860f5 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java @@ -13,50 +13,59 @@ import com.lingnan.supermarket.dao.impl.*; public class SupplierTableModel extends AbstractTableModel{ - + + // 定义表格列名数组 private String [] columnName = {"id","名称","地址","联系方式","邮箱"}; - //private SupplierInfImpl supplierDao = new SupplierInfImpl(); + // 使用供应商信息服务接口,实例化为具体实现类 private SupplierInfService supplierInfService = new SupplierInfImpl(); - + + // 创建供应商信息对象 private SupplierInf supplierInf = new SupplierInf(); - + + // 创建供应商信息向量,用于存储表格数据 private Vector suppliers; - + + // 定义一个ID变量 private int id=0; - + + // 查找全部供应商信息的方法 public void all() { - //查找全部数据 + // 查找全部数据并存储到suppliers向量中 suppliers = supplierInfService.findAllSupplierInf(); } + // 根据名称查找供应商信息的方法 public void Byname(SupplierInf supplierInf) { + // 根据名称查找数据并存储到suppliers向量中 suppliers = supplierInfService.findByNameSupplierInf(supplierInf); - + } - + // 重写获取行数的方法 @Override public int getRowCount() { + // 返回供应商信息的数量 return suppliers.size(); } + // 重写获取列数的方法 @Override - public int getColumnCount() { + public int getColumnCount() { + // 返回列名数组的长度 return columnName.length; } + // 重写获取单元格值的方法 @Override public Object getValueAt(int rowIndex, int columnIndex) { + // 获取指定行的供应商信息对象 SupplierInf prod = suppliers.get(rowIndex); - //id = supplierInf.getId(); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ + // 根据列索引返回相应的数据 if(columnIndex==0) { return prod.getId(); }else if(columnIndex==1) { - return prod.getName(); + return prod.getName(); }else if(columnIndex==2) { return prod.getAddress(); }else if(columnIndex==3) { @@ -66,13 +75,32 @@ public class SupplierTableModel extends AbstractTableModel{ } else { return null; + + } + + } - - @Override - public String getColumnName(int column) { - return columnName[column]; + + +} + + } + + } + + + +// 重写获取列名的方法 +@Override +public String getColumnName(int column) { + // 返回指定列的列名 + return columnName[column]; + + + } + /* public int getId() { From 50f85cd5555bfb507f230a716de22712bbd06301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E4=BA=A6=E6=AD=86?= Date: Sat, 14 Dec 2024 13:23:18 +0800 Subject: [PATCH 15/30] =?UTF-8?q?dto=E6=96=87=E4=BB=B6=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lingnan/supermarket/dto/InOrder.java | 185 +++++++++++++++--- .../com/lingnan/supermarket/dto/InRecord.java | 156 +++++++++++++-- .../lingnan/supermarket/dto/ProdCatalog.java | 128 +++++++++++- .../supermarket/dto/StorageRecord.java | 159 ++++++++++++--- .../lingnan/supermarket/dto/SupplierInf.java | 170 +++++++++++++--- .../lingnan/supermarket/table/InOrderTM.java | 2 +- 6 files changed, 707 insertions(+), 93 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dto/InOrder.java b/Supermarket/src/com/lingnan/supermarket/dto/InOrder.java index 07620d1..2658e30 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/InOrder.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/InOrder.java @@ -1,48 +1,189 @@ +// 定义包名,表明该类属于com.lingnan.supermarket.dto包 package com.lingnan.supermarket.dto; +// 导入java.util.Date类,尽管在此类中没有直接使用,但可能用于其他相关类或方法 import java.util.Date; +// 定义一个公共类InOrder,用于表示入库订单的信息 public class InOrder { - private String iNumber; - private Float allInPrice; - private String inDate; - private String principal; - private int status; - private int delmark; + // 定义私有成员变量iNumber,用于存储订单编号 + private String iNumber; + // 定义私有成员变量allInPrice,用于存储订单的总价 + private Float allInPrice; + // 定义私有成员变量inDate,用于存储订单的日期 + private String inDate; + // 定义私有成员变量principal,用于存储订单的负责人 + private String principal; + // 定义私有成员变量status,用于存储订单的状态 + private int status; + // 定义私有成员变量delmark,用于存储删除标记 + private int delmark; + + // 定义公共方法getiNumber,用于获取订单编号 public String getiNumber() { - return iNumber; + return iNumber; // 返回订单编号 } + // 定义公共方法setiNumber,用于设置订单编号 public void setiNumber(String iNumber) { - this.iNumber = iNumber; + this.iNumber = iNumber; // 将传入的参数赋值给成员变量iNumber } + // 定义公共方法getAllInPrice,用于获取订单的总价 public Float getAllInPrice() { - return allInPrice; + return allInPrice; // 返回订单的总价 } + // 定义公共方法setAllInPrice,用于设置订单的总价 public void setAllInPrice(Float allInPrice) { - this.allInPrice = allInPrice; + this.allInPrice = allInPrice; // 将传入的参数赋值给成员变量allInPrice } + // 定义公共方法getInDate,用于获取订单的日期 public String getInDate() { - return inDate; + return inDate; // 返回订单的日期 } + // 定义公共方法setInDate,用于设置订单的日期 public void setInDate(String inDate) { - this.inDate = inDate; + this.inDate = inDate; // 将传入的参数赋值给成员变量inDate } + // 定义公共方法getPrincipal,用于获取订单的负责人 public String getPrincipal() { - return principal; + return principal; // 返回订单的负责人 } + // 定义公共方法setPrincipal,用于设置订单的负责人 public void setPrincipal(String principal) { - this.principal = principal; - } - public int getDelmark() { - return delmark; - } - public void setDelmark(int delmark) { - this.delmark = delmark; + this.principal = principal; // 将传入的参数赋值给成员变量principal } + // 定义公共方法getStatus,用于获取订单的状态 public int getStatus() { - return status; + return status; // 返回订单的状态 } + // 定义公共方法setStatus,用于设置订单的状态 public void setStatus(int status) { - this.status = status; + this.status = status; // 将传入的参数赋值给成员变量status + } + // 定义公共方法getDelmark,用于获取删除标记 + public int getDelmark() { + return delmark; // 返回删除标记 + } + // 定义公共方法setDelmark,用于设置删除标记 + public void setDelmark(int delmark) { + this.delmark = delmark; // 将传入的参数赋值给成员变量delmark } } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java b/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java index 5bc40f7..312b4fb 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/InRecord.java @@ -1,27 +1,161 @@ -package com.lingnan.supermarket.dto; +package com.lingnan.supermarket.dto; // 声明当前类所在的包 -import com.lingnan.supermarket.dto.base.BsDomain; +import com.lingnan.supermarket.dto.base.BsDomain; // 导入基础域类BsDomain +// 定义进货记录类InRecord,继承自BsDomain public class InRecord extends BsDomain{ - private String iNumber; - private int sum; - private Float inPrice; + private String iNumber; // 进货编号 + private int sum; // 进货数量 + private Float inPrice; // 进货单价 + + // getiNumber方法,用于获取进货编号 public String getiNumber() { - return iNumber; + return iNumber; // 返回进货编号 } + // setiNumber方法,用于设置进货编号 public void setiNumber(String iNumber) { - this.iNumber = iNumber; + this.iNumber = iNumber; // 将参数iNumber赋值给成员变量iNumber } + // getSum方法,用于获取进货数量 public int getSum() { - return sum; + return sum; // 返回进货数量 } + // setSum方法,用于设置进货数量 public void setSum(int sum) { - this.sum = sum; + this.sum = sum; // 将参数sum赋值给成员变量sum } + // getInPrice方法,用于获取进货单价 public Float getInPrice() { - return inPrice; + return inPrice; // 返回进货单价 } + // setInPrice方法,用于设置进货单价 public void setInPrice(Float inPrice) { - this.inPrice = inPrice; + this.inPrice = inPrice; // 将参数inPrice赋值给成员变量inPrice } } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Supermarket/src/com/lingnan/supermarket/dto/ProdCatalog.java b/Supermarket/src/com/lingnan/supermarket/dto/ProdCatalog.java index 260f059..9275fd0 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/ProdCatalog.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/ProdCatalog.java @@ -1,20 +1,130 @@ -package com.lingnan.supermarket.dto; +package com.lingnan.supermarket.dto; // 声明当前类所在的包 +// 定义产品目录类ProdCatalog public class ProdCatalog { - private String id; - private String name; - + private String id; // 产品目录ID + private String name; // 产品目录名称 + + // getId方法,用于获取产品目录ID public String getId() { - return id; + return id; // 返回产品目录ID } + // setId方法,用于设置产品目录ID public void setId(String id) { - this.id = id; + this.id = id; // 将参数id赋值给成员变量id } + // getName方法,用于获取产品目录名称 public String getName() { - return name; + return name; // 返回产品目录名称 } + // setName方法,用于设置产品目录名称 public void setName(String name) { - this.name = name; + this.name = name; // 将参数name赋值给成员变量name } - + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Supermarket/src/com/lingnan/supermarket/dto/StorageRecord.java b/Supermarket/src/com/lingnan/supermarket/dto/StorageRecord.java index 0aa3b09..08158fd 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/StorageRecord.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/StorageRecord.java @@ -1,36 +1,139 @@ +// 定义包名,表明该类属于com.lingnan.supermarket.dto包 package com.lingnan.supermarket.dto; +// 导入java.util.Date类,用于处理日期 import java.util.Date; +// 导入com.lingnan.supermarket.dto.base.BsDomain类,表示StorageRecord类继承自BsDomain import com.lingnan.supermarket.dto.base.BsDomain; +// 定义一个公共类StorageRecord,继承自BsDomain类 public class StorageRecord extends BsDomain{ - private String theNumber; - private String cDate; - private int num; - private String execute; - public String getTheNumber() { - return theNumber; - } - public void setTheNumber(String theNumber) { - this.theNumber = theNumber; - } - public String getcDate() { - return cDate; - } - public void setcDate(String cDate) { - this.cDate = cDate; - } - public int getNum() { - return num; - } - public void setNum(int num) { - this.num = num; - } - public String getExecute() { - return execute; - } - public void setExecute(String execute) { - this.execute = execute; - } + // 定义私有成员变量theNumber,用于存储记录编号 + private String theNumber; + // 定义私有成员变量cDate,用于存储记录日期 + private String cDate; + // 定义私有成员变量num,用于存储数量 + private int num; + // 定义私有成员变量execute,用于存储执行操作 + private String execute; + + // 定义公共方法getTheNumber,用于获取记录编号 + public String getTheNumber() { + return theNumber; // 返回记录编号 + } + // 定义公共方法setTheNumber,用于设置记录编号 + public void setTheNumber(String theNumber) { + this.theNumber = theNumber; // 将传入的参数赋值给成员变量theNumber + } + // 定义公共方法getcDate,用于获取记录日期 + public String getcDate() { + return cDate; // 返回记录日期 + } + // 定义公共方法setcDate,用于设置记录日期 + public void setcDate(String cDate) { + this.cDate = cDate; // 将传入的参数赋值给成员变量cDate + } + // 定义公共方法getNum,用于获取数量 + public int getNum() { + return num; // 返回数量 + } + // 定义公共方法setNum,用于设置数量 + public void setNum(int num) { + this.num = num; // 将传入的参数赋值给成员变量num + } + // 定义公共方法getExecute,用于获取执行操作 + public String getExecute() { + return execute; // 返回执行操作 + } + // 定义公共方法setExecute,用于设置执行操作 + public void setExecute(String execute) { + this.execute = execute; // 将传入的参数赋值给成员变量execute + } } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java b/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java index 96c027a..e80a091 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/SupplierInf.java @@ -1,45 +1,171 @@ -package com.lingnan.supermarket.dto; - -import com.lingnan.supermarket.dto.base.BaseDomain; +package com.lingnan.supermarket.dto; // 声明当前类所在的包 +import com.lingnan.supermarket.dto.base.BaseDomain; // 导入基础域类BaseDomain +// 定义供应商信息类SupplierInf,继承自BaseDomain public class SupplierInf extends BaseDomain{ - private String name; - private String address; - private String contact; - private String email; + private String name; // 供应商名称 + private String address; // 供应商地址 + private String contact; // 供应商联系方式 + private String email; // 供应商邮箱 + // getEmail方法,用于获取供应商邮箱 public String getEmail() { - return email; + return email; // 返回邮箱 } + // setEmail方法,用于设置供应商邮箱 public void setEmail(String email) { - this.email = email; + this.email = email; // 将参数email赋值给成员变量email } - private int delmark; - - - + private int delmark; // 删除标记 + + // getDelmark方法,用于获取删除标记 public int getDelmark() { - return delmark; + return delmark; // 返回删除标记 } + // setDelmark方法,用于设置删除标记 public void setDelmark(int delmark) { - this.delmark = delmark; + this.delmark = delmark; // 将参数delmark赋值给成员变量delmark } + // getName方法,用于获取供应商名称 public String getName() { - return name; + return name; // 返回供应商名称 } + // setName方法,用于设置供应商名称 public void setName(String name) { - this.name = name; + this.name = name; // 将参数name赋值给成员变量name } + // getAddress方法,用于获取供应商地址 public String getAddress() { - return address; + return address; // 返回供应商地址 } + // setAddress方法,用于设置供应商地址 public void setAddress(String address) { - this.address = address; + this.address = address; // 将参数address赋值给成员变量address } + // getContact方法,用于获取供应商联系方式 public String getContact() { - return contact; + return contact; // 返回供应商联系方式 } + // setContact方法,用于设置供应商联系方式 public void setContact(String contact) { - this.contact = contact; - } + this.contact = contact; // 将参数contact赋值给成员变量contact } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java b/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java index c7b78e0..d261cd5 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InOrderTM.java @@ -73,7 +73,7 @@ public class InOrderTM extends AbstractTableModel{ System.out.println("columnIndex"+columnIndex);*/ iNumber=inOrder.getiNumber(); // 将当前订单的订单号赋值给iNumber变量 - + if(columnIndex==0) { // 如果列索引为0 return inOrder.getiNumber(); // 返回订单号 }else if(columnIndex==1) { // 如果列索引为1 From 5639047a028ef891ae8a353c07033d4796b9353b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E4=BA=A6=E6=AD=86?= Date: Sat, 14 Dec 2024 13:45:46 +0800 Subject: [PATCH 16/30] =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=B7=B2=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lingnan/supermarket/dialog/InDialog.java | 347 ++++++++++---- .../supermarket/dialog/ProductionDialog.java | 427 ++++++++++++------ .../supermarket/dialog/SupplierInfDialog.java | 138 ++++-- 3 files changed, 669 insertions(+), 243 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java index 78ff81d..7dd37eb 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/InDialog.java @@ -1,5 +1,7 @@ +// 定义包名,表明该类属于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; @@ -18,6 +20,7 @@ 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; @@ -31,195 +34,377 @@ 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{ - - + + // 声明面板变量 private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; - + + // 声明标签变量 private JLabel prodIdLabel,sumLabel; + // 声明文本框变量 private JTextField prodIdTF,sumTF; - + + // 声明按钮变量 private JButton addBtn,cancelBtn; - - + + + // 实例化OutTableModel对象 private OutTableModel outTableModel = new OutTableModel(); - + + // 声明Production对象 private Production production; + // 声明productionImpl对象 private productionImpl productionImpl; - + + // 声明Vector对象 private Vector v; - + + // 声明User对象 private User user; - + + // 声明JFrame对象 private JFrame JFramparent; - + + // 声明JComboBox对象 private JComboBox combo; + // 声明字符串数组 private String allProdId[] = null; + // 声明Vector对象 private Vector vAll; + // 声明静态字符串变量 private static String catalog; - + + // 构造方法,接收JFrame、Vector和User对象作为参数 public InDialog(JFrame parent,Vector v,User user) { super(parent,"添加商品"); - - setSize(250,200); - setLocationRelativeTo(null); + + // 设置对话框大小 + setSize(250,200); + // 设置对话框相对于父窗口居中 + setLocationRelativeTo(null); + // 设置对话框为模态 setModal(true); - setResizable(false); + // 设置对话框不可调整大小 + setResizable(false); + // 设置对话框布局为FlowLayout this.setLayout(new FlowLayout()); + // 初始化父窗口引用 JFramparent=parent; + // 初始化Vector引用 this.v=v; + // 初始化User引用 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(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); } - - /*将数组传到inview的刷新方法里面再刷新*/ + + // 提供一个方法来获取Vector对象 public Vector getVector(){ + // 返回v对象 return v; } - - - //下拉框监听 + + + // 实现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; } - + } - - - - - - - + + + + + + + + @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 - + // 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); return; } + // 将文本框中的字符串转换为整数 int sum = Integer.parseInt(sumTF.getText()) ; - if(sum<0) {/*判断输入大于0*/ + // 判断输入的数量是否大于0 + if(sum<0) { + // 显示错误提示信息 JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); return; } - - //TODO 参数校验 - /*/判断是已添加,未添加还是不存在*/ + + // TODO 参数校验 + // 判断商品是已添加、未添加还是不存在 productionImpl productionImpl = new productionImpl(); production = new 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;/*数量*/ + + // 如果找到相同商品编号 + if(p.getId().equals(prodId)){ + // 更新数量 + sum=p.getSum()+sum; p.setSum(sum); - p.setPrice(sum*p.getInPrice());/*进货价格*/ + // 更新价格 + p.setPrice(sum*p.getInPrice()); + // 设置标记为找到 mark = 1; break; } - + } - if(mark==0) {/*插入新的*/ + // 如果购物缓冲区中没有找到相同商品 + if(mark==0) { + // 打印信息 System.out.println("缓存区不存在,插入新的数据"); - production.setSum(sum);/*更新价格和数量后插入心的*/ + // 更新商品的数量和价格 + production.setSum(sum); production.setPrice(sum*production.getInPrice()); + // 将商品添加到购物缓冲区 v.add(production); - } - + } + + // 打印购物缓冲区的大小 System.out.println("插入后v的大小"+v.size()); + // 关闭对话框 this.dispose(); + // 显示添加成功的提示信息 JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE); - - - } - - else {/*商品库没有这个商品*/ - JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE); - } - } - else if(source == cancelBtn) { - - this.dispose(); - } + + } + + + // 如果商品库中没有这个商品 + else {/*商品库没有这个商品*/ + // 显示商品不存在的错误提示信息 + JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE); + } + + // 如果事件源是取消按钮 + else if(source == cancelBtn) { + // 关闭当前对话框 + this.dispose(); + + + } + + } } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java index 9016fb9..a2dbac8 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java @@ -1,5 +1,7 @@ +// 定义包名,表明该类属于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; @@ -17,6 +19,7 @@ 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; @@ -31,24 +34,31 @@ import com.lingnan.supermarket.view.StorageView; import com.lingnan.supermarket.view.SupplierView; import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; +// 定义ProductionDialog类,继承JDialog并实现ActionListener接口 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 ArrayListalog=null; private ProdCatalogTM prodCatalogTM; @@ -57,8 +67,8 @@ public class ProductionDialog extends JDialog implements ActionListener { private JComboBox combo; private String id2; private String name2; - - //下拉供应商类别 + + // 下拉供应商类别相关变量 private String superlier[]=null; private ArrayListasuperlier=null; private SupplierInf si; @@ -66,135 +76,199 @@ public class ProductionDialog extends JDialog implements ActionListener { private JComboBox combo1; private int supplyid; + // StorageView对象,用于界面更新 private StorageView storageView; + + // 声明Production对象,用于存储产品信息 private Production production; + // 构造方法,接收一个JFrame对象作为父窗口,并设置对话框标题为"添加" public ProductionDialog(JFrame parent) { super(parent, "添加"); - + // 设置对话框的大小为350x500像素 setSize(350, 500); + // 设置对话框相对于屏幕居中 setLocationRelativeTo(null); + // 设置对话框为模态,即不关闭此对话框无法操作其他窗口 setModal(true); + // 设置对话框不可调整大小 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); - - //供应商名下拉框 传递supplyid + + // 创建供应商选择面板 supplyidPanel = new JPanel(); + // 创建供应商标签 supplyidLabel = new JLabel("供应商"); -// supplyidTF = new JTextField(15); - + // 注释掉的代码,原本可能用于创建供应商文本框,但现在使用下拉框 +// 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(superlier); +// 为combo1添加一个ItemListener,用于监听下拉列表选项的变化 combo1.addItemListener(new MyItemListener1()); - + +// 将供应商标签和下拉列表添加到supplyidPanel面板中 supplyidPanel.add(supplyidLabel); supplyidPanel.add(combo1); - - - - - - /* id2Panel = new JPanel(); - id2Label = new JLabel("分类id"); - id2TF = new JTextField(id2,15); - id2Panel.add(id2Label); - id2Panel.add(id2TF);*/ - //类名下拉框 + + + +// 注释掉的代码,原本可能用于创建分类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(log); +// 为combo添加一个ItemListener,用于监听下拉列表选项的变化 combo.addItemListener(new MyItemListener()); +// 将类名标签和下拉列表添加到name2Panel面板中 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); +// 将保存和取消按钮添加到操作按钮面板 opePanel.add(saveBtn); opePanel.add(cancelBtn); +// 获取内容面板 Container container = getContentPane(); +// 将所有面板添加到内容面板中 container.add(idPanel); container.add(namePanel); container.add(inpricePanel); @@ -202,72 +276,97 @@ public class ProductionDialog extends JDialog implements ActionListener { container.add(lifePanel); container.add(sumPanel); container.add(supplyidPanel); -// container.add(id2Panel); +// 注释掉的代码,可能原本用于添加另一个面板 +//container.add(id2Panel); container.add(name2Panel); container.add(opePanel); - } - @Override - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if (source == saveBtn) { - // 思路获取数据 - // 保存到数据库 - // 关闭对话框 - // 刷新table - - String name = nameTF.getText(); - String id = idTF.getText(); - float inprice = Float.parseFloat((inpriceTF.getText())); - float outprice = Float.parseFloat(outpriceTF.getText()); - int life = Integer.parseInt(lifeTF.getText()); - int sum = Integer.parseInt(sumTF.getText()); - - - - // TODO 参数校验 - if (this.production == null) { - if(supplyid==-1){ - JOptionPane.showMessageDialog(this, "商品检索出错", "提示", - JOptionPane.ERROR_MESSAGE); - return; - } - if(supplyid==0){ - JOptionPane.showMessageDialog(this, "请选择商品名", "提示", - JOptionPane.ERROR_MESSAGE); - return; - } - if(id2.equals("0")){ - JOptionPane.showMessageDialog(this, "请选择商品类", "提示", - JOptionPane.ERROR_MESSAGE); - return; - } - - Production production = new Production(); - production.setId(id); - production.setName(name); - production.setInPrice(inprice); - production.setOutPrice(outprice); - production.setLife(life); - production.setSum(sum); - production.setSupplyId(supplyid); - production.setId2(id2); - production.setName2(name2); - int result = productionService.addProduction(production); - // int result = 1; - if (result == 1) { - - 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); - } +// 重写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(); @@ -283,39 +382,99 @@ public class ProductionDialog extends JDialog implements ActionListener { } }*/ - } else if (source == cancelBtn) { +// 如果事件源是取消按钮 + else if (source == cancelBtn) { + // 关闭当前对话框 + this.dispose(); + } - this.dispose(); - } - } - public class MyItemListener implements ItemListener { +// 定义一个内部类MyItemListener实现ItemListener接口,用于监听下拉列表选项的变化 + public class MyItemListener implements ItemListener { - @Override - public void itemStateChanged(ItemEvent e) { - JComboBox cb = (JComboBox) e.getSource(); - name2 = (String) cb.getSelectedItem(); - pci =new prodCatalogImpl(); - for(int i=0;i Date: Sat, 14 Dec 2024 13:54:54 +0800 Subject: [PATCH 17/30] =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=B3=A8=E9=87=8A=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dialog/ChangeStatusDialog.java | 217 ++++++++++++++---- .../supermarket/dialog/ChangeSumDialog.java | 191 ++++++++++----- 2 files changed, 303 insertions(+), 105 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java index 637df04..cf943a4 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeStatusDialog.java @@ -1,5 +1,7 @@ +// 定义包名,表明该类属于com.lingnan.supermarket.dialog包 package com.lingnan.supermarket.dialog; +// 导入必要的Java和Swing类库 import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; @@ -18,6 +20,7 @@ import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.JTextField; +// 导入项目相关的类和接口 import com.lingnan.supermarket.*; import com.lingnan.supermarket.dao.UserService; import com.lingnan.supermarket.dao.impl.BufferImpl; @@ -37,91 +40,128 @@ import com.lingnan.supermarket.view.HomeView; import com.lingnan.supermarket.view.OutView; import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; - +// 定义ChangeStatusDialog类,继承JDialog并实现ActionListener接口 public class ChangeStatusDialog extends JDialog implements ActionListener{ - - + + // 声明面板、标签、按钮等组件 private JPanel statusPanel,opePanel,titlePanel,comboPanel; private JLabel titleLabel,statusLabel; private JButton UpdateBtn,cancelBtn; + // 声明字符串变量,用于存储订单编号和状态 private String iNumber; private String status; - + + // 声明一个Vector集合,用于存储InRecord对象 private Vector InRecords; - + + // 声明一个JComboBox组件,用于显示订单状态选项 private JComboBox combo; + // 声明一个字符串数组,用于存储订单状态选项 private String[] log = { "待入库", "已入库", "取消订单" }; - + + // 声明inRecordServiceImpl对象,用于操作入库记录 private inRecordServiceImpl inRecordImpl; - + + // 声明一个整数变量,用于存储分类信息 private int catalog; - + // 声明productionImpl对象,用于操作商品信息 private productionImpl productionImpl; - - - - + + + + + + // 构造方法,接收父窗口、订单编号和状态作为参数 public ChangeStatusDialog(JFrame parent,String iNumber,String status) { + // 调用父类构造方法,设置对话框标题 super(parent,"修改进货订单状态"); - - setSize(400,200); - setLocationRelativeTo(null); + + // 设置对话框大小 + setSize(400,200); + // 设置对话框在屏幕中央显示 + setLocationRelativeTo(null); + // 设置对话框为模态 setModal(true); - setResizable(false); + // 设置对话框不可调整大小 + setResizable(false); + // 设置对话框布局为FlowLayout this.setLayout(new FlowLayout()); - + + // 初始化成员变量 this.iNumber=iNumber; this.status=status; + // 初始化视图 initView(); } - - - + // 初始化视图的私有方法 private void initView() { + // 创建标题面板 titlePanel = new JPanel(); + // 创建标题标签,显示订单编号 titleLabel = new JLabel("修改订单为"+iNumber+"的状态"); + // 将标题标签添加到标题面板 titlePanel.add(titleLabel); - + // 创建状态面板 statusPanel = new JPanel(); + // 创建状态标签,显示当前状态 statusLabel = new JLabel("当前状态:"+status); + // 将状态标签添加到状态面板 statusPanel.add(statusLabel); - + + // 创建组合框面板 comboPanel = new JPanel(); + // 创建组合框,用于选择订单状态 combo = new JComboBox(log);/*下拉表*/ + // 为组合框添加项目监听器 combo.addItemListener(new MyItemListener()); + // 将组合框添加到组合框面板 comboPanel.add(combo); - - + + + // 创建操作面板 opePanel = new JPanel(); + // 创建更新按钮 UpdateBtn = new JButton("更改"); + // 创建取消按钮 cancelBtn = new JButton("取消"); + // 为更新按钮添加动作监听器 UpdateBtn.addActionListener(this); + // 为取消按钮添加动作监听器 cancelBtn.addActionListener(this); + // 将按钮添加到操作面板 opePanel.add(UpdateBtn); opePanel.add(cancelBtn); - + + // 获取内容面板 Container container = getContentPane(); + // 将标题面板添加到内容面板的北部 container.add(titlePanel,"North"); + // 将状态面板添加到内容面板的中央 container.add(statusPanel,"Center"); + // 将组合框面板添加到内容面板的南部 container.add(comboPanel,"South"); + // 将操作面板添加到内容面板 container.add(opePanel); - - - } + } + // 内部类,实现ItemListener接口,用于监听组合框项目变化 public class MyItemListener implements ItemListener { + // 重写itemStateChanged方法,当组合框项目变化时调用 @Override public void itemStateChanged(ItemEvent e) { + // 获取触发事件的组合框 JComboBox cb = (JComboBox) e.getSource(); + // 获取选中的项目 String catalog1 = (String) cb.getSelectedItem(); + // 根据选中的项目设置分类变量 if (catalog1.equals("已入库")) { catalog = 1; } @@ -129,56 +169,143 @@ public class ChangeStatusDialog extends JDialog implements ActionListener{ catalog = 2; } else if (catalog1.equals("取消订单")) { catalog = 3; + } } } - + + // 公共方法,返回InRecords向量 public Vector getVector(){ + // 返回InRecords向量 return InRecords; } - + // 重写ActionListener接口的actionPerformed方法,用于处理按钮点击事件 @Override public void actionPerformed(ActionEvent e) { + // 获取事件源对象 Object source = e.getSource(); + // 如果事件源是更新按钮 if(source==UpdateBtn){ + // 打印当前分类变量的值 System.out.println("此时此刻的catalog为"+catalog); - //这里修改进货订单表的状态*/ + // 这里修改进货订单表的状态 inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); storageRecordImpl storageRecordImpl = new storageRecordImpl(); productionImpl = new productionImpl(); Production p ; - //获得订单信息 - - //修改状态 + // 获得订单信息 + + // 修改订单状态 inOrderImpl.updateInOrderStatus(iNumber,catalog); - //确认进货,修改状态并对库存和库存日志修改 + // 确认进货,修改状态并对库存和库存日志进行修改 if(catalog==1) { - //获得订单详细信息 + // 获得订单详细信息 this.InRecords = inRecordImpl.findByIdinRecord(iNumber); - //遍历添加库存 + // 遍历订单详细信息,添加库存 String s[]=TimeAndOrder.TimeAndOrder("");/*生成时间*/ for(InRecord i:InRecords) { - //查找到原来的价格 - //更新库存表 - productionImpl.updateProductionSum(i.getId(),i.getSum()); - //增加库存日志表 + // 查找到原来的价格 + // 更新库存表 + productionImpl.updateProductionSum(i.getId(),i.getSum()); + // 增加库存日志表记录 storageRecordImpl.insertStorageRecord(iNumber,s[1], i.getId(),"+", i.getSum()); } - + + // 弹出订单确认和库存更新成功的提示对话框 JOptionPane.showMessageDialog(this,"订单已确认,库存更新成功","提示",JOptionPane.INFORMATION_MESSAGE); - } - /*刷新首页*/ + } + // 刷新首页 this.dispose(); } + // 如果事件源是取消按钮 else if(source == cancelBtn) { - + // 关闭对话框 this.dispose(); + } } } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java index 5c95dc2..3dc3480 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/ChangeSumDialog.java @@ -1,5 +1,7 @@ +// 定义包名,表示该类属于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; @@ -15,6 +17,7 @@ import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.JTextField; +// 导入项目中的其他包和类 import com.lingnan.supermarket.*; import com.lingnan.supermarket.dao.UserService; import com.lingnan.supermarket.dao.impl.BufferImpl; @@ -26,160 +29,228 @@ import com.lingnan.supermarket.dto.User; import com.lingnan.supermarket.table.OutTableModel; import com.lingnan.supermarket.view.OutView; - +// 定义ChangeSumDialog类,继承JDialog并实现ActionListener接口 public class ChangeSumDialog extends JDialog implements ActionListener{ - - + + // 声明各种面板 private JPanel prodIdPanel,sumPanel,phonePanel,opePanel,titlePanel; - + + // 声明标签和文本框 private JLabel prodIdLabel,sumLabel,titleLabel; private JTextField prodIdTF,sumTF; - + + // 声明按钮 private JButton UpdateBtn,cancelBtn; - - + + + // 实例化OutTableModel对象 private OutTableModel outTableModel = new OutTableModel(); - + + // 声明Buffer对象 private Buffer buffer; - + + // 声明字符串变量,用于存储商品ID和标记 private String prodId,mark;/*mark用来标记是进货还是出货系统*/ - + + // 声明一个Vector集合,用于存储Production对象 private Vector v; - + + // 带参数的构造方法,初始化对话框并设置属性 public ChangeSumDialog(JFrame parent,String prodId,String mark,Vector v) { super(parent,"更改商品数量"); - - setSize(350,200); - setLocationRelativeTo(null); + + // 设置对话框大小 + setSize(350,200); + // 设置对话框相对于父窗口居中 + setLocationRelativeTo(null); + // 设置对话框为模态 setModal(true); - setResizable(false); + // 设置对话框不可调整大小 + setResizable(false); + // 设置对话框布局为FlowLayout this.setLayout(new FlowLayout()); - + + // 初始化成员变量 this.prodId=prodId; this.mark=mark; this.v = v; + // 初始化视图 initView(); } - + + // 另一个带参数的构造方法,初始化对话框并设置属性 public ChangeSumDialog(JFrame parent,String prodId,String mark) { super(parent,"更改商品数量"); - - setSize(350,200); - setLocationRelativeTo(null); + + // 设置对话框大小 + setSize(350,200); + // 设置对话框相对于父窗口居中 + setLocationRelativeTo(null); + // 设置对话框为模态 setModal(true); - setResizable(false); + // 设置对话框不可调整大小 + setResizable(false); + // 设置对话框布局为FlowLayout this.setLayout(new FlowLayout()); - + + // 初始化成员变量 this.prodId=prodId; this.mark=mark; + // 初始化视图 initView(); } - - - - - + + + + + + + // 私有方法,用于初始化视图 private void initView() { + // 创建标题面板 titlePanel = new JPanel(); + // 创建标题标签,显示要修改的商品ID titleLabel = new JLabel("修改商品id为"+prodId+"的数量"); + // 将标题标签添加到标题面板 titlePanel.add(titleLabel); - - + + + // 创建数量输入面板 sumPanel = new JPanel(); + // 创建数量标签 sumLabel = new JLabel("数量"); + // 创建文本框,用于输入数量,宽度为15个字符 sumTF = new JTextField(15); + // 将数量标签和文本框添加到数量输入面板 sumPanel.add(sumLabel); sumPanel.add(sumTF); - - + + + // 创建操作按钮面板 opePanel = new JPanel(); + // 创建更新按钮 UpdateBtn = new JButton("更改"); + // 创建取消按钮 cancelBtn = new JButton("取消"); + // 为更新按钮添加事件监听器 UpdateBtn.addActionListener(this); + // 为取消按钮添加事件监听器 cancelBtn.addActionListener(this); + // 将更新和取消按钮添加到操作按钮面板 opePanel.add(UpdateBtn); opePanel.add(cancelBtn); - + + // 获取内容面板 Container container = getContentPane(); + // 将标题面板、数量输入面板和操作按钮面板添加到内容面板 container.add(titlePanel); container.add(sumPanel); container.add(opePanel); - } - + } + + // 公共方法,用于获取Vector public Vector getVector(){ return v; } + // 实现ActionListener接口的actionPerformed方法 @Override public void actionPerformed(ActionEvent e) { + // 获取事件源 Object source = e.getSource(); + // 判断事件源是否为更新按钮 if(source==UpdateBtn){ - + //TODO 参数校验 /*/返回这个记录的信息*/ - + + // 从文本框中获取数量并转换为整数 int sum = Integer.parseInt(sumTF.getText());/*获得数量*/ + // 打印要修改的数量 System.out.println("所要修改的数量sum="+sum); - + + // 判断文本框是否为空 if(sumTF.getText().equals("")) { + // 弹出错误提示对话框 JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); return; } + // 判断输入的数量是否小于0 if(sum<0) {/*判断输入大于0*/ + // 弹出错误提示对话框 JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); return; } - - - - + + + + + + // 实例化BufferImpl对象,用于操作缓冲区数据 BufferImpl bufferImpl = new BufferImpl(); - + +// 实例化productionImpl对象,用于操作商品数据 productionImpl productionImpl = new productionImpl(); +// 创建一个新的Production对象 Production production = new Production(); +// 根据商品ID查找商品信息并赋值给production对象 production = productionImpl.findByIdProduction(prodId); - + +// 创建一个新的Buffer对象 Buffer buffer = new Buffer(); +// 标志变量,用于表示操作是否成功 boolean flag = false; - - if(mark=="In") {/*进货界面*/ + +// 如果标记为"进货" + if(mark=="In") { + // 遍历购物缓冲区中的商品 for(Production p:v) { + // 如果找到对应ID的商品,则更新其数量 if(p.getId().equals(prodId)) p.setSum(sum); } - + } - - else if(mark=="Out") {/*出货界面*/ + +// 如果标记为"出货" + else if(mark=="Out") { + // 根据商品ID查找缓冲区中的进货记录 buffer = bufferImpl.findInBufferbyId(prodId); - if(buffer!=null) {/*记录有这条数据*/ - if(sum>production.getSum())/*修改数量超过库存*/ + // 如果找到了对应的记录 + if(buffer!=null) { + // 如果修改的数量超过库存 + if(sum>production.getSum()) + // 弹出错误提示对话框 JOptionPane.showMessageDialog(this,"库存数量为:"+production.getSum()+",修改数量请勿超过库存","提示",JOptionPane.ERROR_MESSAGE); else + // 更新缓冲区中的进货记录,并设置标志变量 flag = bufferImpl.UpdateInBufferById(prodId, sum); - + } - + } - - if(flag = true) {/*如果修改成功*/ - +// 如果操作成功 + if(flag = true) { + // 弹出修改成功的提示对话框 JOptionPane.showMessageDialog(this,"修改成功","提示",JOptionPane.INFORMATION_MESSAGE); + // 关闭对话框 dispose(); - + }else { + // 弹出修改失败的提示对话框 JOptionPane.showMessageDialog(this,"修改失败","提示",JOptionPane.ERROR_MESSAGE); + // 关闭对话框 dispose(); } - } - - else if(source == cancelBtn) { - +// 如果事件源是取消按钮 + }else if(source == cancelBtn) { + // 关闭对话框 this.dispose(); + } } } From 22197c2e7e813bebace2819ff0f774c90e6e6daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 18:35:00 +0800 Subject: [PATCH 18/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=B6=E9=93=B6?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lingnan/supermarket/view/OutView.java | 457 +++++++++--------- 1 file changed, 235 insertions(+), 222 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/view/OutView.java b/Supermarket/src/com/lingnan/supermarket/view/OutView.java index 01a2ddb..038d142 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/OutView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/OutView.java @@ -29,194 +29,207 @@ import com.lingnan.supermarket.utils.FontUtil; import com.lingnan.supermarket.utils.TimeAndOrder; public class OutView extends JPanel implements ActionListener{ - - - //上面 + + // 声明工具栏相关组件 private JPanel toolBarPanel; - + + // 声明搜索区域相关组件 private JPanel searchPanel; - private JLabel nameLabel,locationLabel; + private JLabel nameLabel, locationLabel; private JTextField nameSearchTF; - private JButton searchBtn,AccountBtn,exitBtn; - + private JButton searchBtn, AccountBtn, exitBtn; + + // 声明操作区域相关组件 private JPanel opePanel; - private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn,detailBtn; - - //中间 + private JButton addBtn, updateBtn, deleteBtn, historyBtn, backBtn, detailBtn; + + // 声明中间区域的表格显示相关组件 private JScrollPane tableScrollPane; private JTable outTable; - - //下面 - private JPanel bottomPanel,bottomPanelLeft,bottomPanelRight; - private JLabel countInfoLabel,countInfoLabel2; - + + // 声明底部区域的相关组件 + private JPanel bottomPanel, bottomPanelLeft, bottomPanelRight; + private JLabel countInfoLabel, countInfoLabel2; + + // 声明业务数据相关变量 private Buffer Buffer; private BufferImpl BufferImpl; - + + // 声明用于展示的数据集合 private Vector v; - - + + // 声明当前视图的 JFrame 和用户对象 private JFrame jFrame; private User user; - + + // 声明表格数据模型 private OutTableModel outTableModel = new OutTableModel(); - - private int mark;/*标记订单表和订单详情表*/ - - public OutView(JFrame jFrame,User user) { + + // 标记订单表和订单详情表的区别 + private int mark; + + // 构造函数,初始化视图并设置 JFrame 和用户 + public OutView(JFrame jFrame, User user) { this.setLayout(new BorderLayout()); initView(); this.jFrame = jFrame; this.user = user; } - + + // 初始化视图组件 private void initView() { - - toolBarPanel = new JPanel(new BorderLayout()); - - searchPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + + // 初始化工具栏面板,使用边界布局 + toolBarPanel = new JPanel(new BorderLayout()); + + // 初始化搜索面板,使用流式布局 + searchPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); nameLabel = new JLabel("订单号"); nameSearchTF = new JTextField(20); - + + // 初始化搜索按钮,并为其添加事件监听器 searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); searchBtn.addActionListener(this); - locationLabel=new JLabel("当前位置>收银系统"); + + // 初始化当前位置标签 + locationLabel = new JLabel("当前位置>收银系统"); locationLabel.setFont(new FontUtil().userFont); locationLabel.setForeground(new Color(18, 150, 219)); - - opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); - updateBtn =new JButton(new ImageIcon("static\\icon\\change.png")); - deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); - historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); - backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); + + // 初始化操作面板,使用流式布局 + opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); + updateBtn = new JButton(new ImageIcon("static\\icon\\change.png")); + deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); + historyBtn = new JButton(new ImageIcon("static\\icon\\history.png")); + backBtn = new JButton(new ImageIcon("static\\icon\\back.png")); detailBtn = new JButton(new ImageIcon("static\\icon\\detail.png")); - backBtn.setVisible(false);/*在记录页面显示出来*/ - detailBtn.setVisible(false);/*在订单详情页显示出来*/ - - + + // 设置后退和详情按钮默认不可见 + backBtn.setVisible(false); + detailBtn.setVisible(false); + + // 为按钮添加事件监听器 addBtn.addActionListener(this); updateBtn.addActionListener(this); deleteBtn.addActionListener(this); + // 为按钮添加事件监听器 historyBtn.addActionListener(this); backBtn.addActionListener(this); detailBtn.addActionListener(this); - - opePanel.add(addBtn); + + // 将按钮添加到操作面板中 + opePanel.add(addBtn); opePanel.add(backBtn); opePanel.add(detailBtn); opePanel.add(updateBtn); opePanel.add(deleteBtn); opePanel.add(historyBtn); - + + // 将组件添加到搜索面板中 searchPanel.add(locationLabel); searchPanel.add(nameLabel); searchPanel.add(nameSearchTF); searchPanel.add(searchBtn); - - - toolBarPanel.add(searchPanel,"West"); - toolBarPanel.add(opePanel,"East"); - - - //中间表格 + + // 将搜索面板和操作面板添加到工具栏面板中 + toolBarPanel.add(searchPanel, "West"); + toolBarPanel.add(opePanel, "East"); + + // 中间部分的表格 outTableModel = new OutTableModel(); - outTableModel.allOutBuffer();/*查找所有购物车*/ + outTableModel.allOutBuffer(); // 查找所有购物车 outTable = new JTable(outTableModel); - outTable.setFont(FontUtil.tableFont); - outTable.setRowHeight(50); - tableScrollPane = new JScrollPane(outTable); - - //下面 + outTable.setFont(FontUtil.tableFont); // 设置表格字体 + outTable.setRowHeight(50); // 设置表格行高 + tableScrollPane = new JScrollPane(outTable); // 创建带滚动条的表格面板 + + // 下部分区域 bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.LEFT)); - countInfoLabel = new JLabel("商品种类:"+outTableModel.getRowCount()+",总价:"+outTableModel.getAllPrice()); + countInfoLabel = new JLabel("商品种类:" + outTableModel.getRowCount() + ", 总价:" + outTableModel.getAllPrice()); // 显示商品种类和总价 bottomPanelLeft.add(countInfoLabel); - + bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - AccountBtn =new JButton(new ImageIcon("static\\icon\\Account.png"));/*结账按钮*/ - exitBtn =new JButton(new ImageIcon("static\\icon\\exit.png"));/*退出按钮*/ - AccountBtn.addActionListener(this); - exitBtn.addActionListener(this); - bottomPanelRight.add(AccountBtn); - bottomPanelRight.add(exitBtn); - + AccountBtn = new JButton(new ImageIcon("static\\icon\\Account.png")); // 创建结账按钮 + exitBtn = new JButton(new ImageIcon("static\\icon\\exit.png")); // 创建退出按钮 + AccountBtn.addActionListener(this); // 为结账按钮添加事件监听器 + exitBtn.addActionListener(this); // 为退出按钮添加事件监听器 + bottomPanelRight.add(AccountBtn); // 将结账按钮添加到右侧面板 + bottomPanelRight.add(exitBtn); // 将退出按钮添加到右侧面板 + + // 创建底部面板并添加左右部分 bottomPanel = new JPanel(new BorderLayout()); - bottomPanel.add(bottomPanelRight,"East"); - bottomPanel.add(bottomPanelLeft,"West"); - - - this.add(toolBarPanel,"North"); - this.add(tableScrollPane,"Center");/*将表格放到中间*/ -/* this.add(bottomPanel,"South");*/ - this.add(bottomPanel,"South"); - + bottomPanel.add(bottomPanelRight, "East"); + bottomPanel.add(bottomPanelLeft, "West"); + + // 将工具栏、表格和底部面板添加到主面板 + this.add(toolBarPanel, "North"); + this.add(tableScrollPane, "Center"); // 将表格添加到中间 + this.add(bottomPanel, "South"); // 将底部面板添加到底部 + + // 设置界面可见 setVisible(true); } - - - //按钮组件隐藏 + + // 按钮组件隐藏,用于切换视图 public void OrderView() { - backBtn.setVisible(true); - detailBtn.setVisible(true); - updateBtn.setVisible(false); - deleteBtn.setVisible(true); - addBtn.setVisible(false); - historyBtn.setVisible(false); + backBtn.setVisible(true); // 显示返回按钮 + detailBtn.setVisible(true); // 显示详情按钮 + updateBtn.setVisible(false); // 隐藏更新按钮 + deleteBtn.setVisible(true); // 显示删除按钮 + addBtn.setVisible(false); // 隐藏添加按钮 + historyBtn.setVisible(false); // 隐藏历史按钮 } - - - - - - //通过订单查找 + + // 通过订单号查找对应订单并更新显示 public void resultOfNumber(String oNumber) { - this.mark=1; + this.mark = 1; // 设置标记为订单详情 OutOrderTM outOrderTM = new OutOrderTM(); - outOrderTM.resultOfNumber(oNumber); - outTable.setModel(outOrderTM); - bottomPanelLeft.removeAll(); - countInfoLabel = new JLabel("共"+outOrderTM.getRowCount()+"条记录"); + outOrderTM.resultOfNumber(oNumber); // 根据订单号查找订单 + outTable.setModel(outOrderTM); // 更新表格模型 + bottomPanelLeft.removeAll(); // 清空底部左侧面板 + countInfoLabel = new JLabel("共" + outOrderTM.getRowCount() + "条记录"); // 显示记录条数 bottomPanelLeft.add(countInfoLabel); - OrderView(); + OrderView(); // 切换到订单视图 } - - - /*刷新*/ + + // 刷新购物车数据 public void refreshOutBuffer() { OutTableModel outTableModel = new OutTableModel(); - outTableModel.allOutBuffer(); - outTable.setModel(outTableModel); - bottomPanelLeft.removeAll(); - countInfoLabel = new JLabel("商品种类:"+outTableModel.getRowCount()+",总价:"+outTableModel.getAllPrice()); + outTableModel.allOutBuffer(); // 查询所有购物车 + outTable.setModel(outTableModel); // 更新表格模型 + bottomPanelLeft.removeAll(); // 清空底部左侧面板 + countInfoLabel = new JLabel("商品种类:" + outTableModel.getRowCount() + ", 总价:" + outTableModel.getAllPrice()); // 显示商品种类和总价 bottomPanelLeft.add(countInfoLabel); - backBtn.setVisible(false); - detailBtn.setVisible(false); - historyBtn.setVisible(true); - updateBtn.setVisible(true); - addBtn.setVisible(true); - deleteBtn.setVisible(true); + backBtn.setVisible(false); // 隐藏返回按钮 + detailBtn.setVisible(false); // 隐藏详情按钮 + historyBtn.setVisible(true); // 显示历史按钮 + updateBtn.setVisible(true); // 显示更新按钮 + addBtn.setVisible(true); // 显示添加按钮 + deleteBtn.setVisible(true); // 显示删除按钮 } - - /*调出收银出货订单表*/ + + // 调出收银出货订单表 public void OutOrderRecord() { - this.mark=1; + this.mark = 1; // 设置标记为订单详情 OutOrderTM outOrderTM = new OutOrderTM(); - outOrderTM.allOutOrderRecord(); - outTable.setModel(outOrderTM); - bottomPanelLeft.removeAll(); - countInfoLabel = new JLabel("共"+outOrderTM.getRowCount()+"条记录"); + outOrderTM.allOutOrderRecord(); // 获取所有出货订单记录 + outTable.setModel(outOrderTM); // 更新表格模型 + bottomPanelLeft.removeAll(); // 清空底部左侧面板 + countInfoLabel = new JLabel("共" + outOrderTM.getRowCount() + "条记录"); // 显示记录条数 bottomPanelLeft.add(countInfoLabel); - OrderView(); + OrderView(); // 切换到订单视图 } - + // 处理查看订单记录的逻辑 public void OutRecord(String oNumber) { - this.mark=0; - OutRecordTM outRecordTM = new OutRecordTM(oNumber); - outRecordTM.findOutRecordByINumber(); - outTable.setModel(outRecordTM); - bottomPanelLeft.removeAll(); - countInfoLabel = new JLabel("订单号@"+oNumber+"共有"+outRecordTM.getRowCount()+"条记录"); - bottomPanelLeft.add(countInfoLabel); + this.mark = 0; // 设置标记为0,表示查看历史订单 + OutRecordTM outRecordTM = new OutRecordTM(oNumber); // 创建OutRecordTM实例 + outRecordTM.findOutRecordByINumber(); // 根据订单号查找订单记录 + outTable.setModel(outRecordTM); // 更新表格模型为查询结果 + bottomPanelLeft.removeAll(); // 清空底部左侧信息面板 + countInfoLabel = new JLabel("订单号@" + oNumber + "共有" + outRecordTM.getRowCount() + "条记录"); // 显示订单记录数 + bottomPanelLeft.add(countInfoLabel); // 将记录数标签添加到面板 + // 设置按钮的可见性 backBtn.setVisible(true); detailBtn.setVisible(false); updateBtn.setVisible(false); @@ -224,115 +237,115 @@ public class OutView extends JPanel implements ActionListener{ historyBtn.setVisible(false); deleteBtn.setVisible(false); } - - - /*按钮监听时间*/ + // 按钮点击事件监听 @Override public void actionPerformed(ActionEvent e) { - BufferImpl = new BufferImpl();/*获得购物车*/ - Object source = e.getSource(); - - if(searchBtn==source) { - String number = nameSearchTF.getText(); - resultOfNumber(number); + BufferImpl = new BufferImpl(); // 获取购物车数据 + Object source = e.getSource(); // 获取触发事件的源对象 + + // 搜索按钮点击事件 + if (searchBtn == source) { + String number = nameSearchTF.getText(); // 获取输入的订单号 + resultOfNumber(number); // 根据订单号查找对应订单 } - - if(addBtn==source) { - OutDialog outDialog = new OutDialog(jFrame); - outDialog.setVisible(true); - refreshOutBuffer(); + + // 添加按钮点击事件 + if (addBtn == source) { + OutDialog outDialog = new OutDialog(jFrame); // 创建并显示“添加”对话框 + outDialog.setVisible(true); + refreshOutBuffer(); // 刷新购物车数据 } - - else if(updateBtn==source) { - int rowIndex = outTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); - return; - } - String id =(String) outTable.getValueAt(rowIndex,0); - ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"Out"); - changesumDialog.setVisible(true); - refreshOutBuffer(); + + // 更新按钮点击事件 + else if (updateBtn == source) { + int rowIndex = outTable.getSelectedRow(); // 获取选中的行索引 + if (rowIndex == -1) { + JOptionPane.showMessageDialog(this, "请选中一条进行更改数量"); + return; + } + String id = (String) outTable.getValueAt(rowIndex, 0); // 获取选中行的ID + ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame, id, "Out"); // 创建并显示“更改数量”对话框 + changesumDialog.setVisible(true); + refreshOutBuffer(); // 刷新购物车数据 } - - else if(deleteBtn==source) { - int rowIndex = outTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条"); - return; - } - String id =(String) outTable.getValueAt(rowIndex,0); - int select = JOptionPane.showConfirmDialog(this,"是否删除id为"+id+"的记录","提示",JOptionPane.YES_NO_OPTION); - if(select==JOptionPane.YES_OPTION) {/*选择是*/ - if(BufferImpl.DelOutBufferById(id)==true) { - JOptionPane.showMessageDialog(this,"删除成功","提示",JOptionPane.INFORMATION_MESSAGE); - }else { - JOptionPane.showMessageDialog(this,"删除失败","提示",JOptionPane.ERROR_MESSAGE); - } - refreshOutBuffer(); - } - - - }else if(historyBtn==source) {/*查看历史全部记录*/ - OutOrderRecord(); - }else if(backBtn==source) {/*历史记录中的返回按钮*/ - System.out.println("outView中的mark="+mark); - if(mark==1) { - refreshOutBuffer(); - }else if(mark==0) { - OutOrderRecord(); + + // 删除按钮点击事件 + else if (deleteBtn == source) { + int rowIndex = outTable.getSelectedRow(); // 获取选中的行索引 + if (rowIndex == -1) { + JOptionPane.showMessageDialog(this, "请选中一条"); + return; + } + String id = (String) outTable.getValueAt(rowIndex, 0); // 获取选中行的ID + int select = JOptionPane.showConfirmDialog(this, "是否删除id为" + id + "的记录", "提示", JOptionPane.YES_NO_OPTION); + if (select == JOptionPane.YES_OPTION) { // 如果选择“是” + if (BufferImpl.DelOutBufferById(id) == true) { // 删除购物车中的记录 + JOptionPane.showMessageDialog(this, "删除成功", "提示", JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(this, "删除失败", "提示", JOptionPane.ERROR_MESSAGE); + } + refreshOutBuffer(); // 刷新购物车数据 + } + } + + // 查看历史记录按钮点击事件 + else if (historyBtn == source) { + OutOrderRecord(); // 查看出货历史订单记录 + } + + // 返回按钮点击事件 + else if (backBtn == source) { + System.out.println("outView中的mark=" + mark); + if (mark == 1) { + refreshOutBuffer(); // 刷新购物车数据 + } else if (mark == 0) { + OutOrderRecord(); // 刷新出货历史记录 } - - }else if(detailBtn==source) {/*查看订单详细*/ - - int rowIndex = outTable.getSelectedRow(); - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条查看订单详细信息"); + } + + // 查看订单详情按钮点击事件 + else if (detailBtn == source) { + int rowIndex = outTable.getSelectedRow(); // 获取选中的行索引 + if (rowIndex == -1) { + JOptionPane.showMessageDialog(this, "请选中一条查看订单详细信息"); return; } - - String oNumber =(String) outTable.getValueAt(rowIndex,0); - System.out.println("详情订单号为="+oNumber); - OutRecord(oNumber); + String oNumber = (String) outTable.getValueAt(rowIndex, 0); // 获取订单号 + System.out.println("详情订单号为=" + oNumber); + OutRecord(oNumber); // 查看订单详情 } - - - - else if(AccountBtn==source) {/*结账*/ - refreshOutBuffer(); - v = BufferImpl.allOutBuffer(); - if(v.size()==0)/*购物车为空*/{ - JOptionPane.showMessageDialog(null,"您的购物车为空", "提示", JOptionPane.YES_OPTION); - } - else {/*购物车不为空*/ - int res = JOptionPane.showConfirmDialog(null,"总金额:"+outTableModel.getAllPrice()+"元\r\n是否已经结账", "结账", JOptionPane.YES_NO_OPTION); - if(res==JOptionPane.YES_OPTION)/*如果已经结账*/{ - - String[] s =TimeAndOrder.TimeAndOrder(user.getUsername());/*获得时间和订单号*/ - - BufferImpl.InsertOutOrder(s[0],outTableModel.getAllPrice(), s[1], user.getUsername());/*往订单表插入一条记录*/ - for(int i=0;i Date: Sat, 14 Dec 2024 18:39:43 +0800 Subject: [PATCH 19/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supermarket/utils/CreateOrder.java | 97 ++++++++++++++++--- 1 file changed, 82 insertions(+), 15 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/utils/CreateOrder.java b/Supermarket/src/com/lingnan/supermarket/utils/CreateOrder.java index 89a9565..0321009 100644 --- a/Supermarket/src/com/lingnan/supermarket/utils/CreateOrder.java +++ b/Supermarket/src/com/lingnan/supermarket/utils/CreateOrder.java @@ -7,22 +7,89 @@ import com.lingnan.supermarket.dto.Production; public class CreateOrder { - - public String CreateOrder(Vector 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 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"; + + // 加入订单备注 + InRequireText += "\r\n#备注:谢谢光临,欢迎下次购买!"; + + // 空行分隔 + InRequireText += "\r\n"; + + // 添加当前时间的时间戳 + InRequireText += "#生成时间:" + System.currentTimeMillis() + "\r\n"; + + // 订单结束标记 + InRequireText += "----------------------------------------------------------------------------\r\n"; + + // 返回生成的订单小票文本 return InRequireText; } - + + // 日志记录方法(模拟) + private void logOrderCreation(String oNumber) { + // 这里模拟记录订单生成日志 + System.out.println("订单创建成功,订单编号:" + oNumber); + } + + // 模拟打印订单内容的方法 + public void printOrder(String orderContent) { + // 打印订单内容(实际应用中可能是发送到打印机) + System.out.println(orderContent); + } + + // 订单处理(模拟)方法 + public void processOrder(Vector v, String oNumber, String time, Float allPrice, String username) { + // 创建订单内容 + String orderContent = CreateOrder(v, oNumber, time, allPrice, username); + + // 打印订单 + printOrder(orderContent); + + // 记录订单创建日志 + logOrderCreation(oNumber); + } + + // 添加订单清单格式方法 + private String getOrderListFormat(Vector v) { + StringBuilder orderList = new StringBuilder(); + + for (Production p : v) { + orderList.append(p.getName()) + .append(" - 单价: ") + .append(p.getInPrice()) + .append(",数量: ") + .append(p.getSum()) + .append(",金额: ") + .append(p.getPrice()) + .append("\r\n"); + } + + return orderList.toString(); + } } From c554d51aa30dc34bf1a1072ce31b081fe7d5012f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 18:42:24 +0800 Subject: [PATCH 20/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lingnan/supermarket/utils/JDBCUtil.java | 146 ++++++++++++++---- 1 file changed, 112 insertions(+), 34 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/utils/JDBCUtil.java b/Supermarket/src/com/lingnan/supermarket/utils/JDBCUtil.java index fbc664e..e16b49d 100644 --- a/Supermarket/src/com/lingnan/supermarket/utils/JDBCUtil.java +++ b/Supermarket/src/com/lingnan/supermarket/utils/JDBCUtil.java @@ -8,81 +8,159 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; - + public class JDBCUtil { - + + // Properties对象用于加载配置文件 private static Properties properties; 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.load(inputStream); } catch (IOException e) { + // 如果加载配置文件失败,打印错误信息 e.printStackTrace(); - }finally { - if(inputStream!=null){ + } finally { + // 关闭输入流 + if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { + // 关闭流失败,打印错误信息 e.printStackTrace(); } } } - - //注册驱动 + + // 注册JDBC驱动 try { - //类加载会触发static里面代码 + // 加载JDBC驱动类 Class.forName(properties.getProperty("driver")); - - url= properties.getProperty("url"); - user= properties.getProperty("user"); - password= properties.getProperty("password"); + + // 获取数据库连接信息 + url = properties.getProperty("url"); + user = properties.getProperty("user"); + password = properties.getProperty("password"); + } catch (ClassNotFoundException e) { + // 如果驱动类加载失败,打印错误信息 e.printStackTrace(); } } - - + /** - * 获取连接 - * @return + * 获取数据库连接 + * + * @return 数据库连接 */ 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 + * 释放数据库资源 + * + * @param resultSet 结果集对象 + * @param statement SQL语句对象 + * @param connection 数据库连接对象 */ - 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(); - } + // 释放结果集资源 + if (resultSet != null) { + resultSet.close(); + } + + // 释放Statement资源 + if (statement != null) { + statement.close(); + } + + // 释放Connection资源 + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + // 如果关闭资源时发生错误,打印错误信息 e.printStackTrace(); } } - - + /** + * 打印当前数据库配置信息(用于调试) + */ + private static void printDbConfig() { + System.out.println("数据库连接信息:"); + System.out.println("JDBC驱动:" + properties.getProperty("driver")); + System.out.println("数据库URL:" + properties.getProperty("url")); + System.out.println("数据库用户名:" + properties.getProperty("user")); + System.out.println("数据库密码:" + properties.getProperty("password")); + } + + /** + * 获取数据库连接信息的字符串 + * + * @return 数据库连接字符串 + */ + private static String getDbConnectionString() { + return "jdbc connection info: " + url + " as user " + user; + } + + /** + * 测试数据库连接是否正常 + * + * @return true if connection is successful, otherwise false + */ + public static boolean testConnection() { + Connection connection = null; + try { + connection = getConn(); + if (connection != null) { + System.out.println("数据库连接成功!"); + return true; + } else { + System.out.println("数据库连接失败!"); + return false; + } + } catch (Exception e) { + System.out.println("测试数据库连接时发生异常:" + e.getMessage()); + return false; + } finally { + // 关闭连接 + close(null, null, connection); + } + } + + /** + * 记录数据库连接日志 + */ + private static void logConnectionStatus() { + System.out.println("正在尝试连接数据库..."); + } + + /** + * 关闭连接时记录日志 + */ + private static void logCloseConnection() { + System.out.println("数据库连接已关闭。"); + } } From b5dfd2c50e3ea6ba1fcc6a7d01b96b88d963c30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 18:44:31 +0800 Subject: [PATCH 21/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supermarket/utils/TimeAndOrder.java | 72 ++++++++++++++----- 1 file changed, 55 insertions(+), 17 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/utils/TimeAndOrder.java b/Supermarket/src/com/lingnan/supermarket/utils/TimeAndOrder.java index 55cb65f..eb05f55 100644 --- a/Supermarket/src/com/lingnan/supermarket/utils/TimeAndOrder.java +++ b/Supermarket/src/com/lingnan/supermarket/utils/TimeAndOrder.java @@ -5,39 +5,77 @@ import java.util.Calendar; import java.util.Random; public class TimeAndOrder { + + /** + * 生成一个包含订单号和时间的字符串数组 + * @param username 用户名,用于生成订单号 + * @return 一个包含订单号和当前时间的字符串数组 + */ 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"); // 当前时间的格式 + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss"); // 订单号日期格式(年月日时分秒) + + // 获取当前时间 Calendar cal = Calendar.getInstance(); - String date1 = sdf1.format(cal.getTime()); - String date2 = sdf2.format(cal.getTime()); + 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); + // 生成随机数,以增加订单号的随机性 + Random random = new Random(); + int result1 = random.nextInt(10); // 随机生成一个0到9之间的数字 + int result2 = random.nextInt(10); // 随机生成另一个0到9之间的数字 - s[0]=username+result1+date2+result2; - s[1]=date1; + // 生成订单号,将用户名、时间和随机数拼接在一起 + s[0] = username + result1 + date2 + result2; + + // 生成当前时间字符串 + s[1] = date1; + + // 打印生成的订单号和时间(调试用) System.out.println(s[0]); System.out.println(s[1]); + // 返回包含订单号和时间的字符串数组 return s; - } - + + /** + * 获取当前日期(不包含时间) + * @return 当前日期的字符串(格式:yyyy-MM-dd) + */ public static String yMdTime() { - // TODO Auto-generated method stub - - String[] s = new String[2]; + // 创建一个SimpleDateFormat对象,用于格式化当前日期 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + + // 获取当前时间 Calendar cal = Calendar.getInstance(); - String date = sdf1.format(cal.getTime()); + String date = sdf1.format(cal.getTime()); // 获取当前日期的字符串 + // 返回当前日期字符串 return date; + } + + /** + * 测试方法,输出当前时间和生成的订单号 + */ + public static void testMethod() { + // 输出当前时间和生成的订单号 + System.out.println("Current time: " + yMdTime()); + String[] orderDetails = TimeAndOrder("testUser"); + System.out.println("Generated order number: " + orderDetails[0]); + System.out.println("Generated time: " + orderDetails[1]); + } + /** + * 打印日志,记录方法调用 + */ + private static void logMethodCall(String methodName) { + // 模拟打印方法调用日志 + System.out.println("Method " + methodName + " was called."); } } From 8e14e781353e5f08f72bef4c5e76fa292eee6366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 18:46:50 +0800 Subject: [PATCH 22/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supermarket/table/OutTableModel.java | 118 ++++++++++++------ 1 file changed, 82 insertions(+), 36 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/table/OutTableModel.java b/Supermarket/src/com/lingnan/supermarket/table/OutTableModel.java index a25663b..810e3be 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/OutTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/OutTableModel.java @@ -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 Buffers; - private BufferImpl BufferImpl = new BufferImpl(); - - + + // 定义一个Vector用于存储Buffer对象 + private Vector 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."); + } + } From ae7aaca6f6511865cef8eb1bd35c2c0a3f78c6ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 18:48:27 +0800 Subject: [PATCH 23/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lingnan/supermarket/table/OutOrderTM.java | 130 ++++++++++++------ 1 file changed, 91 insertions(+), 39 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/table/OutOrderTM.java b/Supermarket/src/com/lingnan/supermarket/table/OutOrderTM.java index 5c36fe1..f0e9649 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/OutOrderTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/OutOrderTM.java @@ -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 outOrders; - private outOrderServiceImpl outOrderImpl= new outOrderServiceImpl(); - private OutOrder outOrder ; - - String oNumber ;/*订单号*/ - - + + // 存储所有订单记录的Vector + private Vector 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 = 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."); + } + } From cbe7cb556031758d5fb2bd2d067d02dc47f5bd37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 18:57:55 +0800 Subject: [PATCH 24/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/impl/storageRecordImpl.java | 184 +++++++++------ .../supermarket/dialog/CloseDialog.java | 164 ++++++++++---- .../lingnan/supermarket/dialog/OutDialog.java | 211 +++++++++--------- .../supermarket/table/OutRecordTM.java | 135 +++++++---- 4 files changed, 424 insertions(+), 270 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java index c3bfb3e..36e12ff 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java @@ -4,16 +4,8 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Statement; -import java.util.Iterator; import java.util.Vector; - - - - - - import com.lingnan.supermarket.dao.storageRecordService; import com.lingnan.supermarket.dto.StorageRecord; import com.lingnan.supermarket.utils.DateUtil; @@ -21,104 +13,162 @@ import com.lingnan.supermarket.utils.JDBCUtil; public class storageRecordImpl implements storageRecordService { + /** + * 获取所有存储记录 + * + * @return Vector 所有存储记录的集合 + */ @Override public Vector findAllStorageRecord() { - Vector v=new Vector(); - - - Connection conn=JDBCUtil.getConn(); + + // 创建一个空的Vector对象,用于存储所有查询到的StorageRecord + Vector v = new Vector(); + + // 通过JDBC获取数据库连接 + Connection conn = JDBCUtil.getConn(); + + // 声明PreparedStatement和ResultSet对象 PreparedStatement pstmt = null; - ResultSet resultSet=null; + ResultSet resultSet = null; + try { - String sql="select * from storageRecord order by cDate desc"; - pstmt=conn.prepareStatement(sql); - - resultSet=pstmt.executeQuery(); - while(resultSet.next()) { - StorageRecord sr=new StorageRecord(); - sr.setId(resultSet.getString("id")); - sr.setTheNumber(resultSet.getString("theNumber")); - sr.setNum(resultSet.getInt("num")); - sr.setExecute(resultSet.getString("execute")); + // 编写SQL查询语句,按存储日期降序排列 + String sql = "select * from storageRecord order by cDate desc"; + + // 准备SQL语句 + pstmt = conn.prepareStatement(sql); + + // 执行查询,获取结果集 + resultSet = pstmt.executeQuery(); + + // 迭代结果集,将每条记录封装成StorageRecord对象 + while (resultSet.next()) { + StorageRecord sr = new StorageRecord(); + + // 设置StorageRecord对象的各个属性 + sr.setId(resultSet.getString("id")); // 设置id字段 + sr.setTheNumber(resultSet.getString("theNumber")); // 设置存储记录编号 + sr.setNum(resultSet.getInt("num")); // 设置数量字段 + sr.setExecute(resultSet.getString("execute")); // 设置执行状态字段 + // 设置创建日期字段,并通过DateUtil工具类格式化日期 sr.setcDate(DateUtil.dateToString(resultSet.getTimestamp("cDate"), null)); - v.add(sr); - } - - - } - catch (SQLException e) { + // 将StorageRecord对象添加到Vector中 + v.add(sr); + } + } catch (SQLException e) { + // 如果出现SQL异常,打印错误信息 e.printStackTrace(); - }finally { + } finally { + // 确保资源被关闭,避免内存泄漏 JDBCUtil.close(resultSet, pstmt, conn); - } - - - return v; + // 返回所有存储记录的Vector + return v; } - + /** + * 根据存储记录编号查找存储记录 + * + * @param theNumber 存储记录编号 + * @return StorageRecord 查找到的存储记录对象,如果未找到则为null + */ @Override public StorageRecord findByIdStorageRecord(String theNumber) { - - StorageRecord sr=null; - Connection conn=JDBCUtil.getConn(); + + // 创建一个空的StorageRecord对象,用于存储查询结果 + StorageRecord sr = null; + + // 获取数据库连接 + Connection conn = JDBCUtil.getConn(); + + // 声明PreparedStatement和ResultSet对象 PreparedStatement pstmt = null; - ResultSet resultSet=null; + ResultSet resultSet = null; try { - sr=new StorageRecord(); - pstmt = conn.prepareStatement("select *from storageRecord where theNumber=?"); - pstmt.setString(1,theNumber); + // 初始化StorageRecord对象 + sr = new StorageRecord(); + + // 编写SQL查询语句,通过存储记录编号查询特定记录 + pstmt = conn.prepareStatement("select * from storageRecord where theNumber=?"); + + // 设置查询条件,即存储记录编号 + pstmt.setString(1, theNumber); + + // 执行查询操作,并将结果存放在resultSet中 resultSet = pstmt.executeQuery(); - if(resultSet.next()){ - sr.setTheNumber((resultSet.getString("theNumber"))); - sr.setId((resultSet.getString("id"))); + + // 如果查询到数据,填充StorageRecord对象 + if (resultSet.next()) { + sr.setTheNumber(resultSet.getString("theNumber")); + sr.setId(resultSet.getString("id")); sr.setNum(resultSet.getInt("num")); sr.setExecute(resultSet.getString("execute")); + // 设置存储记录的创建日期,并进行格式化 sr.setcDate(DateUtil.dateToString(resultSet.getTimestamp("cDate"), null)); } - } catch (SQLException e) { - // TODO Auto-generated catch block + // 如果发生SQLException,打印堆栈信息 e.printStackTrace(); - }finally{ + } finally { + // 确保资源关闭,防止资源泄露 JDBCUtil.close(resultSet, pstmt, conn); } - - + + // 返回找到的存储记录对象,如果没有找到则返回null return sr; } - public boolean insertStorageRecord(String iNumber,String time,String prodId,String execute,int sum) { + /** + * 插入新的存储记录 + * + * @param iNumber 存储记录编号 + * @param time 存储记录时间 + * @param prodId 商品编号 + * @param execute 执行状态 + * @param sum 数量 + * @return boolean 插入是否成功,成功返回true,失败返回false + */ + public boolean insertStorageRecord(String iNumber, String time, String prodId, String execute, int sum) { + + // 默认插入操作失败 boolean flag = false; - Connection conn=JDBCUtil.getConn(); + + // 获取数据库连接 + Connection conn = JDBCUtil.getConn(); + + // 声明PreparedStatement和ResultSet对象 PreparedStatement pstmt = null; - ResultSet resultSet=null; + ResultSet resultSet = null; try { - pstmt = conn.prepareStatement("insert into storageRecord values(?,?,?,?,?) "); - pstmt.setString(1,iNumber); - pstmt.setString(2,time); - pstmt.setString(3,prodId); - pstmt.setString(4,execute); - pstmt.setInt(5,sum); - - if(pstmt.executeUpdate()==1){ - flag = true; + // 编写SQL插入语句,将数据插入到storageRecord表中 + pstmt = conn.prepareStatement("insert into storageRecord values(?,?,?,?,?)"); + + // 设置插入的字段值 + pstmt.setString(1, iNumber); // 存储记录编号 + pstmt.setString(2, time); // 存储记录时间 + pstmt.setString(3, prodId); // 商品编号 + pstmt.setString(4, execute); // 执行状态 + pstmt.setInt(5, sum); // 数量 + + // 执行插入操作,如果插入成功则返回1 + if (pstmt.executeUpdate() == 1) { + // 如果插入成功,设置标志位为true + flag = true; } - } catch (SQLException e) { - // TODO Auto-generated catch block + // 如果发生SQLException,打印堆栈信息 e.printStackTrace(); - }finally{ + } finally { + // 确保数据库连接和资源被关闭 JDBCUtil.close(resultSet, pstmt, conn); } - - + + // 返回插入操作的结果(成功返回true,失败返回false) return flag; } } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/CloseDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/CloseDialog.java index 492eb45..e429edd 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/CloseDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/CloseDialog.java @@ -29,91 +29,157 @@ import com.lingnan.supermarket.table.OutTableModel; import com.lingnan.supermarket.view.MainView; import com.lingnan.supermarket.view.OutView; +public class CloseDialog extends JDialog implements ActionListener { -public class CloseDialog extends JDialog implements ActionListener{ - - - /** - * - */ - private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; - - private JLabel prodIdLabel,sumLabel; - private JTextField prodIdTF,sumTF; - - private JButton saveBtn,unSaveBtn,cancleBtn; - - + // Panel用于显示不同的用户信息 + private JPanel prodIdPanel, sumPanel, phonePanel, opePanel; + + // JLabel组件,显示提示文本 + private JLabel prodIdLabel, sumLabel; + + // JTextField组件,允许用户输入或显示文本 + private JTextField prodIdTF, sumTF; + + // JButton组件,用户点击后触发保存、取消等操作 + private JButton saveBtn, unSaveBtn, cancleBtn; + + // 用于展示商品的表格模型 private OutTableModel outTableModel = new OutTableModel(); - + + // 缓冲区操作的实现类,用于处理商品的存储与删除 private BufferImpl bufferImpl; - + + // 当前用户信息 private User user; + + // 购物车中的商品列表 private Vector v; - - public CloseDialog(JFrame parent,Vector v) { - super(parent,"提示"); - setSize(350,130); - setLocationRelativeTo(null); - setModal(true); - setResizable(false); - this.setLayout(new FlowLayout()); - - this.v = v; - - initView(); + + /** + * 构造函数,初始化对话框窗口 + * @param parent 父窗口 + * @param v 购物车中所有的商品信息 + */ + public CloseDialog(JFrame parent, Vector v) { + super(parent, "提示"); // 设置对话框标题 + setSize(350, 130); // 设置对话框窗口的大小 + setLocationRelativeTo(null); // 将窗口放置在屏幕中央 + setModal(true); // 设置对话框为模态,强制用户先处理此窗口才能继续操作其他窗口 + setResizable(false); // 不允许调整窗口大小 + this.setLayout(new FlowLayout()); // 设置窗口的布局方式为流式布局 + + this.v = v; // 将购物车中的商品列表传入此窗口 + + initView(); // 初始化界面组件 } - - - - - + + /** + * 初始化界面组件,设置用户界面元素 + */ private void initView() { + // 创建并初始化显示产品ID的面板 prodIdPanel = new JPanel(); prodIdLabel = new JLabel("您还未结账,是否保存购物车"); prodIdPanel.add(prodIdLabel); - - + // 创建操作按钮的面板,并初始化按钮 opePanel = new JPanel(); saveBtn = new JButton("保存"); unSaveBtn = new JButton("不保存"); cancleBtn = new JButton("取消"); + + // 为按钮添加监听器,当按钮被点击时执行相应的操作 saveBtn.addActionListener(this); unSaveBtn.addActionListener(this); cancleBtn.addActionListener(this); + + // 将按钮添加到面板中 opePanel.add(saveBtn); opePanel.add(unSaveBtn); opePanel.add(cancleBtn); - + + // 获取内容容器,并将各个面板添加到容器中 Container container = getContentPane(); - container.add(prodIdPanel); - container.add(opePanel); + container.add(prodIdPanel); // 添加显示提示文本的面板 + container.add(opePanel); // 添加操作按钮面板 + + debugLog("Initialized CloseDialog view."); // 输出调试日志,表示界面已经初始化 } + /** + * 按钮点击事件处理方法 + * 该方法负责处理每个按钮点击后的相应逻辑 + */ @Override public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - bufferImpl = new BufferImpl(); - if(source==saveBtn){/*吧vector数组加入到缓冲区中*/ - for(Production p:v) { - System.out.println("保存数据"); - bufferImpl.insertInBuffer(p); + Object source = e.getSource(); // 获取事件源,判断点击的是哪个按钮 + bufferImpl = new BufferImpl(); // 创建缓冲区操作实例 + + // 处理点击“保存”按钮的逻辑 + if (source == saveBtn) { + debugLog("Save button clicked."); + // 遍历购物车中的所有商品,保存到缓冲区 + for (Production p : v) { + debugLog("Saving product: " + p.getName()); // 打印调试信息,显示正在保存的商品 + bufferImpl.insertInBuffer(p); // 将商品保存到缓冲区 } - + // 结束程序 System.exit(0); - }else if(source==unSaveBtn) { - bufferImpl = new BufferImpl(); + } + // 处理点击“不保存”按钮的逻辑 + else if (source == unSaveBtn) { + debugLog("Don't save button clicked."); + // 删除所有缓冲区中的商品数据 bufferImpl.DelAllOutBuffer(); + // 结束程序 System.exit(0); - }else if(source==cancleBtn) { + } + // 处理点击“取消”按钮的逻辑 + else if (source == cancleBtn) { + debugLog("Cancel button clicked."); + // 关闭对话框,不做任何操作 setVisible(false); + } + } - }/*else if(source==WindowEvent)*/ + /** + * 用于输出调试信息的日志方法,便于在控制台追踪程序执行情况 + * @param message 调试信息内容 + */ + private void debugLog(String message) { + System.out.println("DEBUG: " + message); // 将调试信息输出到控制台 } + /** + * 在窗口关闭时的额外操作 + * 例如,用户点击关闭按钮时,执行一些清理操作 + * @param we 窗口事件 + */ + public void windowClosing(WindowEvent we) { + debugLog("Window is closing."); + } + public void windowClosed(WindowEvent we) { + debugLog("Window closed."); + } + public void windowOpened(WindowEvent we) { + debugLog("Window opened."); + } + public void windowIconified(WindowEvent we) { + debugLog("Window minimized."); + } + public void windowDeiconified(WindowEvent we) { + debugLog("Window restored."); + } + + public void windowActivated(WindowEvent we) { + debugLog("Window activated."); + } + + public void windowDeactivated(WindowEvent we) { + debugLog("Window deactivated."); + } } diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/OutDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/OutDialog.java index 43cbf84..bb9216c 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/OutDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/OutDialog.java @@ -11,7 +11,6 @@ import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; -import javax.swing.JTable; import javax.swing.JTextField; import com.lingnan.supermarket.*; @@ -26,140 +25,134 @@ import com.lingnan.supermarket.table.OutTableModel; import com.lingnan.supermarket.view.OutView; -public class OutDialog extends JDialog implements ActionListener{ - - - private JPanel prodIdPanel,sumPanel,phonePanel,opePanel; - - private JLabel prodIdLabel,sumLabel; - private JTextField prodIdTF,sumTF; - - private JButton addBtn,cancelBtn; - - +public class OutDialog extends JDialog implements ActionListener { + + // 定义JPanel组件,用于组织界面元素 + private JPanel prodIdPanel, sumPanel, phonePanel, opePanel; + + // 定义JLabel用于显示文本 + private JLabel prodIdLabel, sumLabel; + + // 定义JTextField用于输入商品ID和数量 + private JTextField prodIdTF, sumTF; + + // 定义JButton按钮,用于添加商品和取消操作 + private JButton addBtn, cancelBtn; + + // 创建OutTableModel对象,用于管理表格数据 private OutTableModel outTableModel = new OutTableModel(); - + + // 创建Buffer对象,用于暂存添加的商品信息 private Buffer buffer; - + + // 构造函数,初始化对话框,设置窗口属性 public OutDialog(JFrame parent) { - super(parent,"添加商品"); - - setSize(350,300); - setLocationRelativeTo(null); - setModal(true); - setResizable(false); - this.setLayout(new FlowLayout()); - - initView(); + super(parent, "添加商品"); + + setSize(350, 300); // 设置窗口大小 + setLocationRelativeTo(null); // 设置窗口居中 + setModal(true); // 设置为模态对话框,阻止父窗口操作 + setResizable(false); // 设置不可调整窗口大小 + this.setLayout(new FlowLayout()); // 设置布局方式为流式布局 + + initView(); // 调用初始化界面方法 } - - - - - + + // 初始化界面方法 private void initView() { + // 创建商品ID输入面板 prodIdPanel = new JPanel(); prodIdLabel = new JLabel("编号"); - prodIdTF = new JTextField(15); - prodIdPanel.add(prodIdLabel); - prodIdPanel.add(prodIdTF); - - + prodIdTF = new JTextField(15); // 设置商品ID的文本框长度为15 + prodIdPanel.add(prodIdLabel); // 将标签添加到面板 + prodIdPanel.add(prodIdTF); // 将文本框添加到面板 + + // 创建数量输入面板 sumPanel = new JPanel(); sumLabel = new JLabel("数量"); - sumTF = new JTextField(15); - sumPanel.add(sumLabel); - sumPanel.add(sumTF); - - + sumTF = new JTextField(15); // 设置数量的文本框长度为15 + sumPanel.add(sumLabel); // 将标签添加到面板 + sumPanel.add(sumTF); // 将文本框添加到面板 + + // 创建操作按钮面板 opePanel = new JPanel(); addBtn = new JButton("添加"); cancelBtn = new JButton("取消"); - addBtn.addActionListener(this); - cancelBtn.addActionListener(this); - opePanel.add(addBtn); - opePanel.add(cancelBtn); - + addBtn.addActionListener(this); // 添加按钮的事件监听 + cancelBtn.addActionListener(this); // 取消按钮的事件监听 + opePanel.add(addBtn); // 将添加按钮添加到面板 + opePanel.add(cancelBtn); // 将取消按钮添加到面板 + + // 将所有面板添加到容器中 Container container = getContentPane(); - container.add(prodIdPanel); - container.add(sumPanel); - container.add(opePanel); + container.add(prodIdPanel); // 添加商品ID面板 + container.add(sumPanel); // 添加数量面板 + container.add(opePanel); // 添加操作按钮面板 } + // 实现ActionListener接口的actionPerformed方法,处理按钮点击事件 @Override public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if(source==addBtn){ - //1.判断是否存在这个商品 - //2.如果存在就获取这条商品记录为一个对象 - //3.判断购物缓冲区是否有这个记录 - //3.1如果有update数量和price - //3.2如果没有就insert这条记录,把sum更新 - //保存到数据库 - //关闭对话框 - //刷新table - - String prodId =prodIdTF.getText(); - System.out.println("proId="+prodId); - if(prodIdTF.getText().equals("")||sumTF.getText().equals("")) { - JOptionPane.showMessageDialog(this,"请输入完整","提示",JOptionPane.ERROR_MESSAGE); - return; + Object source = e.getSource(); // 获取触发事件的源对象 + if (source == addBtn) { // 如果点击了"添加"按钮 + + // 获取商品ID和数量输入框的值 + String prodId = prodIdTF.getText(); + System.out.println("proId=" + prodId); + + // 判断输入框是否为空 + if (prodIdTF.getText().equals("") || sumTF.getText().equals("")) { + JOptionPane.showMessageDialog(this, "请输入完整", "提示", JOptionPane.ERROR_MESSAGE); + return; // 如果为空,弹出提示框并返回 } - int sum = Integer.parseInt(sumTF.getText()) ; - if(sum<0) {/*判断输入大于0*/ - JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); - return; + + // 获取数量并进行格式化转换 + int sum = Integer.parseInt(sumTF.getText()); + + // 判断数量是否为负数 + if (sum < 0) { + JOptionPane.showMessageDialog(this, "请输入大于0的数量", "提示", JOptionPane.ERROR_MESSAGE); + return; // 如果为负数,弹出提示框并返回 } - - //TODO 参数校验 - /*/判断是已添加,未添加还是不存在*/ + + // 创建生产商品的实现对象,查询商品库 productionImpl productionImpl = new productionImpl(); Production production = new Production(); - production = productionImpl.findByIdProduction(prodId); - - - if(production!=null) {/*商品库有这个商品存在*/ - - buffer = new Buffer(); - BufferImpl BufferImpl = new BufferImpl(); - buffer = BufferImpl.findOutBufferbyId(prodId);/*判断购物车是否有这个商品了,获得已添加的sum和价格*/ - - int allSum = production.getSum(); - - if(sum<0) { - JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); + production = productionImpl.findByIdProduction(prodId); // 根据商品ID查询商品 + + if (production != null) { // 如果商品存在 + buffer = new Buffer(); // 创建缓冲区对象 + BufferImpl bufferImpl = new BufferImpl(); + buffer = bufferImpl.findOutBufferbyId(prodId); // 查找购物车是否已存在该商品 + + int allSum = production.getSum(); // 获取商品的库存数量 + + // 如果商品库存不足,弹出提示框并返回 + if (sum > allSum) { + JOptionPane.showMessageDialog(this, "库存数量不够,库存数:" + allSum, "提示", JOptionPane.ERROR_MESSAGE); return; } - - if(buffer!=null)/*购物缓冲区已经有添加的商品*/{ - int exeistSum = buffer.getSum(); - if(sum+exeistSum>allSum)/*库存不够*/{ - JOptionPane.showMessageDialog(this,"库存数量不够,库存数:"+allSum,"提示",JOptionPane.ERROR_MESSAGE); - return; - }else - BufferImpl.addOutBufferExeistProd(prodId, sum, buffer); - - } - else if(buffer==null){/*添加新的商品*/ - if(sum>allSum)/*库存不够*/{ - JOptionPane.showMessageDialog(this,"库存数量不够,库存数:"+allSum,"提示",JOptionPane.ERROR_MESSAGE); - return; - }else - BufferImpl.addOutBufferNewProd(prodId, sum); - } - this.dispose(); - JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE); + // 如果购物车中已经有该商品,更新数量和价格 + if (buffer != null) { + int exeistSum = buffer.getSum(); // 获取购物车中该商品已有的数量 + if (sum + exeistSum > allSum) { // 判断购物车中商品数量加起来是否超过库存 + JOptionPane.showMessageDialog(this, "库存数量不够,库存数:" + allSum, "提示", JOptionPane.ERROR_MESSAGE); + return; // 如果超过库存,弹出提示框并返回 + } else { + bufferImpl.addOutBufferExeistProd(prodId, sum, buffer); // 更新购物车中的商品数量 + } + } else { // 如果购物车中没有该商品 + bufferImpl.addOutBufferNewProd(prodId, sum); // 将商品添加到购物车 + } + this.dispose(); // 关闭当前对话框 + JOptionPane.showMessageDialog(this, "添加成功", "提示", JOptionPane.INFORMATION_MESSAGE); // 弹出添加成功提示 + } else { // 如果商品不存在 + JOptionPane.showMessageDialog(this, "商品不存在", "提示", JOptionPane.ERROR_MESSAGE); // 弹出商品不存在提示 } - - else { - JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE); - } - } - else if(source == cancelBtn) { - - this.dispose(); + } else if (source == cancelBtn) { // 如果点击了"取消"按钮 + this.dispose(); // 关闭当前对话框 } } } diff --git a/Supermarket/src/com/lingnan/supermarket/table/OutRecordTM.java b/Supermarket/src/com/lingnan/supermarket/table/OutRecordTM.java index ba7f8ae..27198ae 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/OutRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/OutRecordTM.java @@ -17,82 +17,127 @@ import com.lingnan.supermarket.dao.impl.*; import com.lingnan.supermarket.dialog.InDialog; -public class OutRecordTM extends AbstractTableModel{ - - /** - * - */ +public class OutRecordTM extends AbstractTableModel { - private String [] columnName = {"订单号","id","数量","金额"}; + // 定义表格的列名 + private String[] columnName = {"订单号", "id", "数量", "金额"}; + // 用于从数据库获取商品数据的服务层对象 private productionImpl prodDao = new productionImpl(); - - private Vector OutRecords; - + + // 存储所有出货记录的Vector + private Vector OutRecords; + + // 用于操作出货记录数据的服务实现类 private outRecordServiceImpl outRecordImpl = new outRecordServiceImpl(); - private OutRecord outRecord= new OutRecord(); - - private String oNumber ;/*订单号*/ - - + // 当前的出货记录对象 + private OutRecord outRecord = new OutRecord(); + + // 当前订单号 + private String oNumber; + + /** + * 构造方法,根据订单号初始化 + * @param oNumber 订单号 + */ public OutRecordTM(String oNumber) { - this.oNumber=oNumber; + this.oNumber = oNumber; + logMethodCall("OutRecordTM Constructor"); + debugLog("OutRecordTM initialized with oNumber: " + oNumber); } - + + /** + * 根据订单号查询出货记录 + */ public void findOutRecordByINumber() { - //将添加的商品加入到静态变量Vector数组中 - /*prod = InDialog.getProduction();*/ + // 调用数据库服务获取出货记录数据 OutRecords = outRecordImpl.findByIdOutRecordr(oNumber); + logMethodCall("findOutRecordByINumber"); + debugLog("Fetched " + OutRecords.size() + " out records for oNumber: " + oNumber); } - - - - + /** + * 获取表格的行数 + * @return 行数 + */ @Override public int getRowCount() { return OutRecords.size(); } - -/* public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); - } -*/ + + /** + * 获取表格的列数 + * @return 列数 + */ @Override - public int getColumnCount() { + public int getColumnCount() { return columnName.length; } + /** + * 获取单元格的值 + * @param rowIndex 行索引 + * @param columnIndex 列索引 + * @return 对应的值 + */ @Override public Object getValueAt(int rowIndex, int columnIndex) { outRecord = OutRecords.get(rowIndex); -/* System.out.println( "id="+users.get(rowIndex).getId()); - System.out.println("rowIndex"+rowIndex); - System.out.println("columnIndex"+columnIndex);*/ - oNumber=outRecord.getoNumber(); - if(columnIndex==0) { + + // 根据列索引返回对应的出货记录属性 + if (columnIndex == 0) { return outRecord.getoNumber(); - }else if(columnIndex==1) { + } else if (columnIndex == 1) { return outRecord.getId(); - }else if(columnIndex==2) { - return outRecord.getSum(); - }else if(columnIndex==3) { - return outRecord.getOutPrice(); - }else { + } else if (columnIndex == 2) { + return outRecord.getSum(); + } else if (columnIndex == 3) { + return outRecord.getOutPrice(); + } else { return null; } } - - public String getONumber() { /*返回要修改或删除的记录*/ + + /** + * 获取当前订单号 + * @return 订单号 + */ + public String getONumber() { + // 返回当前操作的订单号,用于修改或删除操作 return oNumber; } - - + + /** + * 获取列名 + * @param column 列索引 + * @return 列名 + */ @Override public String getColumnName(int column) { return columnName[column]; } - - + + // 打印方法调用的日志信息 + private void logMethodCall(String methodName) { + System.out.println("Method " + methodName + " was called."); + } + + // 输出调试信息 + private void debugLog(String message) { + System.out.println("DEBUG: " + message); + } + + // 模拟查询出货记录的测试方法 + public void testFindOutRecord() { + findOutRecordByINumber(); // 查询指定订单号的出货记录 + debugLog("OutRecord with oNumber: " + oNumber + " fetched successfully."); + } + + // 测试用例,模拟获取所有出货记录 + public void testAllOutRecords() { + findOutRecordByINumber(); // 获取指定订单号的出货记录 + debugLog("Fetched " + OutRecords.size() + " out records for oNumber: " + oNumber); + } + } From 4cc69809c75632c8166c34de5f158aea1281e4df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 19:00:03 +0800 Subject: [PATCH 25/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lingnan/supermarket/dao/impl/storageRecordImpl.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java index 36e12ff..e19a442 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java @@ -164,6 +164,14 @@ public class storageRecordImpl implements storageRecordService { // 如果发生SQLException,打印堆栈信息 e.printStackTrace(); } finally { + + + + + + + + // 确保数据库连接和资源被关闭 JDBCUtil.close(resultSet, pstmt, conn); } From 44051664761d2e4b8748a1d141edb05329d4a460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 19:00:34 +0800 Subject: [PATCH 26/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java index e19a442..ce24a00 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java @@ -172,6 +172,7 @@ public class storageRecordImpl implements storageRecordService { + // 确保数据库连接和资源被关闭 JDBCUtil.close(resultSet, pstmt, conn); } From 2cdeae95aba0b8846ec3674fb077811cd161f64b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 19:02:06 +0800 Subject: [PATCH 27/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java index ce24a00..265d09e 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java @@ -173,6 +173,7 @@ public class storageRecordImpl implements storageRecordService { + // 确保数据库连接和资源被关闭 JDBCUtil.close(resultSet, pstmt, conn); } From 7898a8bc8d9b727bbb6422a0b983075973cc610d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sat, 14 Dec 2024 19:03:15 +0800 Subject: [PATCH 28/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Supermarket/src/com/lingnan/supermarket/view/OutView.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Supermarket/src/com/lingnan/supermarket/view/OutView.java b/Supermarket/src/com/lingnan/supermarket/view/OutView.java index 038d142..38fd902 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/OutView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/OutView.java @@ -1,3 +1,4 @@ + package com.lingnan.supermarket.view; import java.awt.BorderLayout; From 93e6105851b33e1c1a9b5f77a1425bd14d55c179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E5=9B=BD=E8=89=AF?= Date: Sun, 15 Dec 2024 18:04:33 +0800 Subject: [PATCH 29/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supermarket/dialog/SupplierInfDialog.java | 7 +- .../com/lingnan/supermarket/dto/OutOrder.java | 46 +++++++- .../lingnan/supermarket/dto/OutRecord.java | 33 +++++- .../supermarket/dto/base/BaseProduction.java | 104 +++++++++++++++--- .../com/lingnan/supermarket/view/OutView.java | 4 +- 5 files changed, 162 insertions(+), 32 deletions(-) diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/SupplierInfDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/SupplierInfDialog.java index 639316c..2273e36 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/SupplierInfDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/SupplierInfDialog.java @@ -11,15 +11,11 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; // 导入javax.swing.JButton类,用于创建按钮 -import javax.swing.JButton; +import javax.swing.*; // 导入javax.swing.JDialog类,用于创建对话框 -import javax.swing.JDialog; // 导入javax.swing.JFrame类,用于创建主窗口框架 -import javax.swing.JFrame; // 导入javax.swing.JLabel类,用于创建标签 -import javax.swing.JOptionPane; // 导入javax.swing.JPanel类,用于创建面板 -import javax.swing.JPanel; // 导入javax.swing.JTextField类,用于创建文本框 // 导入com.lingnan.supermarket包,可能包含其他相关的类和接口 @@ -30,6 +26,7 @@ import com.lingnan.supermarket.dao.SupplierInfService; import com.lingnan.supermarket.dao.impl.SupplierInfImpl; // 导入com.lingnan.supermarket.dto.SupplierInf类,用于表示供应商信息数据传输对象 import com.lingnan.supermarket.dto.SupplierInf; +import com.lingnan.supermarket.view.SupplierView; // 导入com.lingnan.supermarket.view.SupplierView类,用于供应商信息视图界面 // 定义SupplierInfDialog类,该类继承自JDialog并实现ActionListener接口,用于创建供应商信息对话框 diff --git a/Supermarket/src/com/lingnan/supermarket/dto/OutOrder.java b/Supermarket/src/com/lingnan/supermarket/dto/OutOrder.java index 464ea7f..34988f3 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/OutOrder.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/OutOrder.java @@ -3,39 +3,75 @@ 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; // 订单负责人,指派处理该订单的人员 + private int delmark; // 删除标志,标记是否已删除,1表示删除,0表示未删除 + + // 获取订单编号 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; } + + // 额外的方法示例,计算订单的总价格 + // 如果订单中有多个商品,可以通过此方法来更新订单总价格 + public void updateTotalPrice(Float price) { + this.allOutPrice += price; // 累加新的商品价格 + } + + // 额外方法示例:打印订单信息,用于调试或日志记录 + public void printOrderInfo() { + System.out.println("Order Number: " + this.oNumber); + System.out.println("Total Price: " + this.allOutPrice); + System.out.println("Order Date: " + this.oDate); + System.out.println("Principal: " + this.principal); + System.out.println("Delete Flag: " + this.delmark); + } } diff --git a/Supermarket/src/com/lingnan/supermarket/dto/OutRecord.java b/Supermarket/src/com/lingnan/supermarket/dto/OutRecord.java index 6abc8c3..2abd759 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/OutRecord.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/OutRecord.java @@ -2,26 +2,51 @@ 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; } + + // 额外方法示例:计算出货总价 + public Float calculateTotalOutPrice() { + return this.sum * this.outPrice; // 总价 = 数量 * 单价 + } + + // 打印出货记录信息 + public void printOutRecordInfo() { + System.out.println("Out Record Number: " + this.oNumber); + System.out.println("Out Record Sum: " + this.sum); + System.out.println("Out Record Price: " + this.outPrice); + } } diff --git a/Supermarket/src/com/lingnan/supermarket/dto/base/BaseProduction.java b/Supermarket/src/com/lingnan/supermarket/dto/base/BaseProduction.java index fa82d00..9005516 100644 --- a/Supermarket/src/com/lingnan/supermarket/dto/base/BaseProduction.java +++ b/Supermarket/src/com/lingnan/supermarket/dto/base/BaseProduction.java @@ -1,86 +1,156 @@ 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 String id; // 产品ID + private String name; // 产品名称 + private float inPrice; // 进价 + private float OutPrice; // 出价 + private int life; // 产品有效期,单位:天 + private int sum; // 当前库存量 + private int supplyId; // 供应商ID + private String id2; // 第二个ID,可能用于多重标识 + private String name2; // 第二个名称,可能用于多重标识 + private Float price; // 产品价格 + private int delmark; // 删除标志位,1表示删除,0表示未删除 + + // 默认构造函数 + public BaseProduction() { + // 空构造函数 + } + + // 获取产品ID + public String getId() { return id; } + + // 设置产品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; } - + + // 获取第二个ID public String getId2() { return id2; } + + // 设置第二个ID public void setId2(String id2) { this.id2 = id2; } - + + // 获取第二个名称 public String getName2() { return name2; } + + // 设置第二个名称 public void setName2(String name2) { this.name2 = name2; } - + + // 获取供应商ID public int getSupplyId() { return supplyId; } + + // 设置供应商ID public void setSupplyId(int supplyId) { this.supplyId = supplyId; } + + // 获取价格 public Float getPrice() { return price; } + + // 设置价格 public void setPrice(Float price) { this.price = price; } + + // 下面是一些额外的函数(示例) + // 计算产品总价 = 出价 * 库存量 + public float calculateTotalPrice() { + return this.OutPrice * this.sum; // 返回总价 + } + + // 判断产品是否过期 + public boolean isExpired() { + // 如果产品有效期小于当前天数,返回true + return this.life <= 0; + } + + // 打印产品信息(仅供测试) + public void printProductInfo() { + System.out.println("Product ID: " + this.id); + System.out.println("Product Name: " + this.name); + System.out.println("Product In Price: " + this.inPrice); + System.out.println("Product Out Price: " + this.OutPrice); + System.out.println("Product Life: " + this.life); + System.out.println("Product Sum: " + this.sum); + System.out.println("Product Supply ID: " + this.supplyId); + System.out.println("Product Price: " + this.price); + System.out.println("Product Delmark: " + this.delmark); + } } diff --git a/Supermarket/src/com/lingnan/supermarket/view/OutView.java b/Supermarket/src/com/lingnan/supermarket/view/OutView.java index 38fd902..4a3018a 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/OutView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/OutView.java @@ -29,7 +29,7 @@ import com.lingnan.supermarket.table.*; import com.lingnan.supermarket.utils.FontUtil; import com.lingnan.supermarket.utils.TimeAndOrder; -public class OutView extends JPanel implements ActionListener{ +public class OutView extends JPanel implements ActionListener { // 声明工具栏相关组件 private JPanel toolBarPanel; @@ -221,6 +221,7 @@ public class OutView extends JPanel implements ActionListener{ bottomPanelLeft.add(countInfoLabel); OrderView(); // 切换到订单视图 } + // 处理查看订单记录的逻辑 public void OutRecord(String oNumber) { this.mark = 0; // 设置标记为0,表示查看历史订单 @@ -350,3 +351,4 @@ public class OutView extends JPanel implements ActionListener{ } } } +} From 4dbaa3a63938ac3b958f4c04c50176a0f6fc57c0 Mon Sep 17 00:00:00 2001 From: HouXinyu <2283543175@qq.com> Date: Sun, 15 Dec 2024 19:38:33 +0800 Subject: [PATCH 30/30] rollback --- .../5b23e521-053a-47c0-ae28-a98b513bc6ec.xml | 1697 ----------------- .../supermarket/componet/BGPanel.class | Bin 1147 -> 1147 bytes .../dao/impl/storageRecordImpl.class | Bin 3919 -> 3918 bytes .../ChangeStatusDialog$MyItemListener.class | Bin 1369 -> 1369 bytes .../dialog/ChangeStatusDialog.class | Bin 5799 -> 5799 bytes .../supermarket/dialog/ChangeSumDialog.class | Bin 5821 -> 5817 bytes .../supermarket/dialog/CloseDialog.class | Bin 3580 -> 4963 bytes .../dialog/InDialog$MyItemListener.class | Bin 950 -> 950 bytes .../lingnan/supermarket/dialog/InDialog.class | Bin 6160 -> 6160 bytes .../supermarket/dialog/OutDialog.class | Bin 4799 -> 4756 bytes .../dialog/UserDialog$MyItemListener.class | Bin 1177 -> 1177 bytes .../dialog/UserInfDialog$MyItemListener.class | Bin 1578 -> 1578 bytes .../com/lingnan/supermarket/dto/InOrder.class | Bin 1607 -> 1607 bytes .../lingnan/supermarket/dto/InRecord.class | Bin 1041 -> 1041 bytes .../lingnan/supermarket/dto/ProdCatalog.class | Bin 740 -> 740 bytes .../supermarket/dto/StorageRecord.class | Bin 1182 -> 1182 bytes .../lingnan/supermarket/dto/SupplierInf.class | Bin 1366 -> 1366 bytes .../supermarket/table/InTableModel.class | Bin 3012 -> 3012 bytes .../supermarket/table/OutOrderTM.class | Bin 2435 -> 3491 bytes .../supermarket/table/OutRecordTM.class | Bin 2282 -> 3380 bytes .../supermarket/table/OutTableModel.class | Bin 2552 -> 3302 bytes .../supermarket/table/ProdCatalogTM.class | Bin 1983 -> 1983 bytes .../supermarket/table/StorageRecordTM.class | Bin 2044 -> 2044 bytes .../supermarket/table/StorageTableModel.class | Bin 2338 -> 2338 bytes .../table/SupplierTableModel.class | Bin 2245 -> 2239 bytes .../supermarket/utils/CreateOrder.class | Bin 2373 -> 3997 bytes .../lingnan/supermarket/utils/JDBCUtil.class | Bin 2461 -> 3937 bytes .../supermarket/utils/TimeAndOrder.class | Bin 1731 -> 2157 bytes .../lingnan/supermarket/view/Demo4$1.class | Bin 852 -> 852 bytes .../com/lingnan/supermarket/view/Demo4.class | Bin 2122 -> 2122 bytes .../lingnan/supermarket/view/HomeView$1.class | Bin 1096 -> 1096 bytes .../lingnan/supermarket/view/HomeView.class | Bin 4621 -> 4668 bytes .../com/lingnan/supermarket/view/InView.class | Bin 14274 -> 14282 bytes .../lingnan/supermarket/view/LoginView.class | Bin 4482 -> 4482 bytes .../lingnan/supermarket/view/MainView.class | Bin 14903 -> 14903 bytes .../lingnan/supermarket/view/OutView.class | Bin 9884 -> 9889 bytes .../supermarket/view/StorageView.class | Bin 6612 -> 6612 bytes .../lingnan/supermarket/view/SuperView.class | Bin 1092 -> 1092 bytes .../supermarket/view/SupplierView.class | Bin 5844 -> 5846 bytes .../lingnan/supermarket/view/UserView.class | Bin 5675 -> 5675 bytes Supermarket/bin/config/jdbc.properties | 2 +- Supermarket/bin/jdbc.properties | 2 +- Supermarket/config/jdbc.properties | 2 +- .../lingnan/supermarket/dialog/InDialog.java | 236 +-- .../supermarket/dialog/ProductionDialog.java | 377 ++-- .../supermarket/dialog/SupplierInfDialog.java | 141 +- .../com/lingnan/supermarket/dto/OutOrder.java | 46 +- .../lingnan/supermarket/dto/OutRecord.java | 33 +- .../supermarket/dto/base/BaseProduction.java | 104 +- .../lingnan/supermarket/table/InOrderTM.java | 108 +- .../lingnan/supermarket/table/InRecordTM.java | 97 +- .../supermarket/table/StorageRecordTM.java | 5 - .../supermarket/table/SupplierTableModel.java | 54 +- .../com/lingnan/supermarket/view/InView.java | 567 ++---- .../supermarket/view/ProdCatalogView.java | 247 +-- 55 files changed, 549 insertions(+), 3169 deletions(-) delete mode 100644 Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml diff --git a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml b/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml deleted file mode 100644 index a5df588..0000000 --- a/Supermarket/.idea/dataSources/5b23e521-053a-47c0-ae28-a98b513bc6ec.xml +++ /dev/null @@ -1,1697 +0,0 @@ - - - -<<<<<<< HEAD - - lower/lower - InnoDB - InnoDB - |root||root|localhost|ALLOW_NONEXISTENT_DEFINER|G -|root||root|localhost|ALTER|G -|root||root|localhost|ALTER ROUTINE|G -|root||root|localhost|APPLICATION_PASSWORD_ADMIN|G -|root||mysql.infoschema|localhost|AUDIT_ABORT_EXEMPT|G -|root||mysql.session|localhost|AUDIT_ABORT_EXEMPT|G -|root||mysql.sys|localhost|AUDIT_ABORT_EXEMPT|G -|root||root|localhost|AUDIT_ABORT_EXEMPT|G -|root||root|localhost|AUDIT_ADMIN|G -|root||mysql.session|localhost|AUTHENTICATION_POLICY_ADMIN|G -|root||root|localhost|AUTHENTICATION_POLICY_ADMIN|G -|root||mysql.session|localhost|BACKUP_ADMIN|G -|root||root|localhost|BACKUP_ADMIN|G -|root||root|localhost|BINLOG_ADMIN|G -|root||root|localhost|BINLOG_ENCRYPTION_ADMIN|G -|root||mysql.session|localhost|CLONE_ADMIN|G -|root||root|localhost|CLONE_ADMIN|G -|root||mysql.session|localhost|CONNECTION_ADMIN|G -|root||root|localhost|CONNECTION_ADMIN|G -|root||root|localhost|CREATE|G -|root||root|localhost|CREATE ROLE|G -|root||root|localhost|CREATE ROUTINE|G -|root||root|localhost|CREATE TABLESPACE|G -|root||root|localhost|CREATE TEMPORARY TABLES|G -|root||root|localhost|CREATE USER|G -|root||root|localhost|CREATE VIEW|G -|root||root|localhost|DELETE|G -|root||root|localhost|DROP|G -|root||root|localhost|DROP ROLE|G -|root||root|localhost|ENCRYPTION_KEY_ADMIN|G -|root||root|localhost|EVENT|G -|root||root|localhost|EXECUTE|G -|root||root|localhost|FILE|G -|root||mysql.infoschema|localhost|FIREWALL_EXEMPT|G -|root||mysql.session|localhost|FIREWALL_EXEMPT|G -|root||mysql.sys|localhost|FIREWALL_EXEMPT|G -|root||root|localhost|FIREWALL_EXEMPT|G -|root||root|localhost|FLUSH_OPTIMIZER_COSTS|G -|root||root|localhost|FLUSH_PRIVILEGES|G -|root||root|localhost|FLUSH_STATUS|G -|root||root|localhost|FLUSH_TABLES|G -|root||root|localhost|FLUSH_USER_RESOURCES|G -|root||root|localhost|GROUP_REPLICATION_ADMIN|G -|root||root|localhost|GROUP_REPLICATION_STREAM|G -|root||root|localhost|INDEX|G -|root||root|localhost|INNODB_REDO_LOG_ARCHIVE|G -|root||root|localhost|INNODB_REDO_LOG_ENABLE|G -|root||root|localhost|INSERT|G -|root||root|localhost|LOCK TABLES|G -|root||root|localhost|OPTIMIZE_LOCAL_TABLE|G -|root||root|localhost|PASSWORDLESS_USER_ADMIN|G -|root||mysql.session|localhost|PERSIST_RO_VARIABLES_ADMIN|G -|root||root|localhost|PERSIST_RO_VARIABLES_ADMIN|G -|root||root|localhost|PROCESS|G -|root||root|localhost|REFERENCES|G -|root||root|localhost|RELOAD|G -|root||root|localhost|REPLICATION CLIENT|G -|root||root|localhost|REPLICATION SLAVE|G -|root||root|localhost|REPLICATION_APPLIER|G -|root||root|localhost|REPLICATION_SLAVE_ADMIN|G -|root||root|localhost|RESOURCE_GROUP_ADMIN|G -|root||root|localhost|RESOURCE_GROUP_USER|G -|root||root|localhost|ROLE_ADMIN|G -|root||mysql.infoschema|localhost|SELECT|G -|root||root|localhost|SELECT|G -|root||root|localhost|SENSITIVE_VARIABLES_OBSERVER|G -|root||root|localhost|SERVICE_CONNECTION_ADMIN|G -|root||mysql.session|localhost|SESSION_VARIABLES_ADMIN|G -|root||root|localhost|SESSION_VARIABLES_ADMIN|G -|root||root|localhost|SET_ANY_DEFINER|G -|root||root|localhost|SHOW DATABASES|G -|root||root|localhost|SHOW VIEW|G -|root||root|localhost|SHOW_ROUTINE|G -|root||mysql.session|localhost|SHUTDOWN|G -|root||root|localhost|SHUTDOWN|G -|root||mysql.session|localhost|SUPER|G -|root||root|localhost|SUPER|G -|root||mysql.infoschema|localhost|SYSTEM_USER|G -|root||mysql.session|localhost|SYSTEM_USER|G -|root||mysql.sys|localhost|SYSTEM_USER|G -|root||root|localhost|SYSTEM_USER|G -|root||mysql.session|localhost|SYSTEM_VARIABLES_ADMIN|G -|root||root|localhost|SYSTEM_VARIABLES_ADMIN|G -|root||root|localhost|TABLE_ENCRYPTION_ADMIN|G -|root||root|localhost|TELEMETRY_LOG_ADMIN|G -|root||root|localhost|TRANSACTION_GTID_TAG|G -|root||root|localhost|TRIGGER|G -|root||root|localhost|UPDATE|G -|root||root|localhost|XA_RECOVER_ADMIN|G -|root||root|localhost|grant option|G -performance_schema|schema||mysql.session|localhost|SELECT|G -sys|schema||mysql.sys|localhost|TRIGGER|G - 8.4.0 - -======= - ->>>>>>> remotes/origin/developer - - big5 - 1 - - - big5 - - - dec8 - 1 - - - dec8 - - - cp850 - 1 - - - cp850 - - - hp8 - 1 - - - hp8 - - - koi8r - 1 - - - koi8r - - - latin1 - - - latin1 - 1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin2 - - - latin2 - 1 - - - latin2 - - - latin2 - - - latin2 - - - swe7 - 1 - - - swe7 - - - ascii - 1 - - - ascii - - - ujis - 1 - - - ujis - - - sjis - 1 - - - sjis - - - hebrew - 1 - - - hebrew - - - tis620 - 1 - - - tis620 - - - euckr - 1 - - - euckr - - - koi8u - 1 - - - koi8u - - - gb2312 - 1 - - - gb2312 - - - greek - 1 - - - greek - - - cp1250 - 1 - - - cp1250 - - - cp1250 - - - cp1250 - - - cp1250 - - - gbk - 1 - - - gbk - - - latin5 - 1 - - - latin5 - - - armscii8 - 1 - - - armscii8 - - - ucs2 - 1 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - cp866 - 1 - - - cp866 - - - keybcs2 - 1 - - - keybcs2 - - - macce - 1 - - - macce - - - macroman - 1 - - - macroman - - - cp852 - 1 - - - cp852 - - - latin7 - - - latin7 - 1 - - - latin7 - - - latin7 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - cp1251 - - - cp1251 - - - cp1251 - - - cp1251 - 1 - - - cp1251 - - - utf16 - 1 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16le - 1 - - - utf16le - - - cp1256 - 1 - - - cp1256 - - - cp1257 - - - cp1257 - - - cp1257 - 1 - - - utf32 - 1 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - binary - 1 - - - geostd8 - 1 - - - geostd8 - - - cp932 - 1 - - - cp932 - - - eucjpms - 1 - - - eucjpms - - - gb18030 - 1 - - - gb18030 - - - gb18030 - - - utf8mb3 - 1 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb4 - 1 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb4 - - - utf8mb3_general_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - - localhost - caching_sha2_password - - - 0 - localhost - caching_sha2_password - - - 0 - localhost - caching_sha2_password - - - 0 - localhost - caching_sha2_password - - - root@localhost - procedure - 320 - - - root@localhost - procedure - 196 - - - root@localhost - procedure - 199 - - - root@localhost - procedure - 184 - - - InnoDB - utf8mb4_0900_ai_ci -
- - InnoDB - utf8mb4_0900_ai_ci -
- - InnoDB - utf8mb4_0900_ai_ci -
- - InnoDB - utf8mb4_0900_ai_ci -
- - InnoDB - utf8mb4_0900_ai_ci -
- - InnoDB - utf8mb4_0900_ai_ci -
- - InnoDB - utf8mb4_0900_ai_ci -
- - InnoDB - utf8mb4_0900_ai_ci -
- - InnoDB - utf8mb4_0900_ai_ci -
- - InnoDB - utf8mb4_0900_ai_ci -
- - InnoDB - utf8mb4_0900_ai_ci -
- - varchar(30)|0s - 1 - - - timestamp|0s - 2 - - - varchar(20)|0s - 3 - - - int|0s - 4 - - - float|0s - 5 - - - varchar(10)|0s - 1 - - - int|0s - 2 - - - varchar(10)|0s - 1 - - - int|0s - 2 - - - varchar(30)|0s - 1 - - - timestamp|0s - 2 - - - varchar(20)|0s - 3 - - - int|0s - 4 - - - float|0s - 5 - - - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - float|0s - 3 - - - float|0s - 4 - - - int|0s - 5 - - - int|0s - 6 - - - int|0s - 7 - - - varchar(20)|0s - 8 - - - varchar(20)|0s - 9 - - - float|0s - 10 - - - int|0s - 0 - 11 - - - supplyId - id - supplierinf - - - id2 - id - prodcatalog - - - id - btree - 1 - - - name - btree - 1 - - - supplyId - btree - - - id2 - btree - - - 1 - 1 - PRIMARY - - - name - - - varchar(30)|0s - 1 - 1 - - - float|0s - 2 - - - timestamp|0s - 3 - - - varchar(15)|0s - 4 - - - int|0s - 2 - 5 - - - int|0s - 1 - 6 - - - iNumber - btree - 1 - - - 1 - 1 - PRIMARY - - - varchar(30)|0s - 1 - - - varchar(20)|0s - 2 - - - int|0s - 3 - - - float|0s - 4 - - - iNumber - iNumber - inorder - - - iNumber - btree - - - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - float|0s - 3 - - - float|0s - 4 - - - int|0s - 5 - - - int|0s - 6 - - - int|0s - 7 - - - varchar(20)|0s - 8 - - - varchar(20)|0s - 9 - - - float|0s - 10 - - - int|0s - 0 - 11 - - - supplyId - id - supplierinf - - - id2 - id - prodcatalog - - - id - btree - 1 - - - name - btree - 1 - - - supplyId - btree - - - id2 - btree - - - 1 - 1 - PRIMARY - - - name - - - varchar(30)|0s - 1 - 1 - - - float|0s - 2 - - - timestamp|0s - 3 - - - varchar(15)|0s - 4 - - - int|0s - 1 - 5 - - - oNumber - btree - 1 - - - 1 - 1 - PRIMARY - - - varchar(30)|0s - 1 - - - varchar(20)|0s - 2 - - - int|0s - 3 - - - float|0s - 4 - - - oNumber - oNumber - outorder - - - oNumber - btree - - - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - id - btree - 1 - - - 1 - 1 - PRIMARY - - - varchar(20)|0s - 1 - 1 - - - varchar(20)|0s - 2 - - - float|0s - 3 - - - float|0s - 4 - - - int|0s - 5 - - - int|0s - 6 - - - int|0s - 7 - - - varchar(20)|0s - 8 - - - varchar(20)|0s - 9 - - - float|0s - 10 - - - int|0s - 1 - 11 - - - id2 - id - prodcatalog - - - id - btree - 1 - - - name - btree - 1 - - - id2 - btree - - - 1 - 1 - PRIMARY - - - name - - - varchar(30)|0s - 1 - - - timestamp|0s - 2 - - - varchar(20)|0s - 3 - - - enum('+', '-')|0e - 4 - - - int|0s - 5 - - - 8 - int|0s - 1 - 1 - - - varchar(30)|0s - 2 - - - varchar(50)|0s - 3 - - - varchar(11)|0s - 4 - - - varchar(50)|0s - 5 - - - int|0s - 1 - 6 - - - id - btree - 1 - - - name - btree - 1 - - - 1 - 1 - PRIMARY - - - name - - - 5 - int|0s - 1 - 1 - - - varchar(15)|0s - 2 - - - varchar(15)|0s - 3 - - - varchar(20)|0s - 1 - 4 - - - varchar(11)|0s - 5 - - - int|0s - 1 - 6 - - - varchar(50)|0s - 7 - - - int|0s - 1 - 8 - - - id - btree - 1 - - - name - btree - 1 - - - 1 - 1 - PRIMARY - - - name - -
-
\ No newline at end of file diff --git a/Supermarket/bin/com/lingnan/supermarket/componet/BGPanel.class b/Supermarket/bin/com/lingnan/supermarket/componet/BGPanel.class index c96b6fde8f4ec45ec014e77064c52fc1e67a2293..a42e4a1caa418317da53327797933728d18ae7fe 100644 GIT binary patch delta 65 zcmey(@tb2q7_%rB0}BHW11AGNgD`_2gDj9#W)Pj6&78_B4wR7u%E$oaurw8URfE2~Pk3 diff --git a/Supermarket/bin/com/lingnan/supermarket/dao/impl/storageRecordImpl.class b/Supermarket/bin/com/lingnan/supermarket/dao/impl/storageRecordImpl.class index caa03f09b84e679143c1b9561034d8dbdc9cbfbe..a4ab5e5304d5eed4719b6a4b32c364329bab83e3 100644 GIT binary patch delta 329 zcmW-c-77-@7>A$3nYP9$Wo5PIqkPnf$w%^$LgLnETZnB^^VtY-L+wH>LWdX|NyHsH z@(;M@U-HY<^FHpeKfn@hqk4;^iE_mMpFaaznkAZEn^3PTlg1@xUaH%ur+jmjq8Nsc%ZY PCEpQ`#0+0f!7Ba%{3%1! delta 335 zcmWNM-7AA(7>BQyciNh*lqq5s`PxP+5|Wdd@2_DrA8BU!S~O-WC)5sT%Cf>uViuTrvk zOrxPvcDRg06Lwmt#fzI(>S)75yHW?8Iw86krkhE6h~XzmfDAzj^m0od_YCsH5YO~e zWPlgtSLJu{OZ;ZE;&VP2@i0}4Q$qv?6Vgpn&x|y)63j_6&j<_BEV9ZH38I{^%oTBN z*pMp59qT+Q7nMumoA|+Y#qJ6l(FE1(YLg^R_O!`9jT~r~L(O}nxsDkl&6Jw1aLO7v ZcF60;nX0p@%ITHoLcA6WTv{b}`5*2}K5_s6 diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeStatusDialog$MyItemListener.class b/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeStatusDialog$MyItemListener.class index 1a2b49caf3250f501692d0acbc4477704dfe0769..53ca79ca32abbc7ce329f6f2425bd658ff4ed00d 100644 GIT binary patch delta 51 zcmV-30L=f{3fT&W0HXj90HpvK0Hy#X0H^>i0I2{v0IC2(0IL8@ J0I!q$1YLFh4i^9b delta 51 zcmcb~b(3p@4+~@YWM7s(#cBo)h8hL|hFS(mhB^jSh6V;bhDHV}h9(AQhGqsIhPKIn GSYiQE&;@PR)-EFT^jpJJ1j;WinhaKGcz-qwM!-1B$-4>GDYUAZKqu~ zJB_L6kV&;mDw}>$CKJ&g(4|A4+spI3-nVR&jhe;k2++$kc0!C1#vp==D3ipPVF533 z{3HmlSRc1$B)UW&D@?G;6l?fMv&=dhY_da!W40)X_1QwBJZVG1%z(G=U9oY#G}5eZ(>LxX;;JGj=d8$8@HOOtu-^w~X09!b&C**1Be fsqm`yo0{)RJ4!xzqRR(gn!e48!8381=^^(&zY9XT delta 247 zcmWNLJxf9X7=@pA$c6|)w80?=7w>Qp8x(>T3)9d(7ELTD1IvoiK%}i7APC*?V-XR< zFaqgfL8H)G5JXc%b3dS^p_c<^I6Uy2p4l@84yUoiI3Z?;;A0t+D09SgSs_eZmxT5z z>#W&+=eeYlOpqeLCJST~-XhO7C3d)AmnvCW?9nI3kbOoR@T$ZIhkS9w56Ap+!XKyN zpdeEe#lx9+DOuu*NX3r2W@Y1&F)Svz!l0(II`cGGq^VC@s%@*HLxC=3u9dja^i_7t bGk3f&;Ej9UvH8>+-#l7R?guff;&kvI{pLHG diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeSumDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/ChangeSumDialog.class index edc1b1026550b7836a89b36042e68228b74303bc..613e05a4330b80b3f0f6e1d388f34afaa7bd52a3 100644 GIT binary patch delta 348 zcmXYrODKe46o#K~Axdh@n6j|>Q!eRGvyozAV#fVau1Sipu#m7pjD=g$sQFzM7D`G< z22(PL5}{C%Q4*3GD@}^jq&N$kx6bK(dY=P5pl^Me^jxCJ#7rJZIM65{1t%F4kwqyv zl#x$4E-K}!GPL-^^qPO7UWi5^nuKT;qD6>SA=-p!r;rYRjM=U#dWfYL8~xZBpqL@* z7?zToZblhojBzILGQ~2}tTBTR5Btn=Cf`fu2r|zT3%s#tcr7lqWZYX))uvx1bSk%p zWMG9TR*7SsL^fp1Cl1?`up`#H;=V@%0kJ(2!xOqVrH^w)xL}einZ3r~M%uU12+HuC sd>UGGRm*V=Ot0C0p4>)|5CPqmUwG{M?{a`p~-m-l+_d*AQcaqEcuBs+45$Bv0y(#XR`J{c5{jZ3>iinK~8 z#)BIlC5A2K&R+IUlq*r8M5PiQC90ID)_b24HM*&dC79e&=O>XyoHXf+R=l+7)J``Y zjMB*zT`cMpqK89zIiZg*0dDB$kpZ3<iGMgA|5oMcuc2vB}Gkd(U r&j$y5YP4^T#LBVQIF&5U#L2n12wS9#h*T04FBj6lrTDoreytCG?EX$n diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/CloseDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/CloseDialog.class index ab82379436a5747ff2d77a1f2987b1c1aa5854fd..0353617edf91fe16495f3bcc2cdc50d2f4fffa44 100644 GIT binary patch literal 4963 zcmb7Hd0-UP8UIZZGLvN>WRV*rqCnU{wyl=dgrX!N8X68sND6Ji$?hZ!?CxxLXA_Rv z16yx|dH_ZzkDIvJm}e-h1Es-uJ%m_g!yZ z{O`%<09=KCYq-OQrMOeYT|VSvXAx>~w~wD);O@1J^d8jRK) zawOH0<8f&2y-jrrCJ(-}$=u@9S!N{61EYAcU{RAshgt2!6igV*T%B?pJ4Vi;RIIU| zrzm8^LJ^mLjGc0tjMj*`+zt!P7BqzHXfQ(aVn!^OOvTMa)JSYLouDJQf-AGxDc9GU zYHKqS_0jl64~GpqXptvaJ;2Vx1*xQ&P%!I)cZMB1xQ0CBRXP;-rE$TOV?~0^X2`L{ zMp2_hU7b|IRIq3m!=j7IUPb4oLXJg<7E@H=A}eM&ixtc(8w_Jz!ibtx!-QAOYo-x3 zL{33*gB3GZq@t~6LgFd3wL?av*+^IdIgeQ2Y_yUJ=3iJX%ZS+R!J3GjG;8HtC>A#o zX3QBDfUaH&CJw%8YrOxu#@A-Z>p)4EtO=N!EwfWWewiQ?h3uGP5CD49&5@wd=>%)~ zsWhS3kT|b06K!@PYK9febaj)QW(Um+E|Dxt#au$G#1)iX7%2uvmIE0gbi;JlN#ge5 zG6`hTP9;L*^Fk?NFppQZZelP|$1#nL5!$@mh)ZXw_=bva(%P`unrd&b+nHUS%JNvF zlVF-iMb)U8Od9P&_vbhxK8L0wJZ@DsV#>BGN z-L0o*tTszfN?b~s(H0t;%ex~E+_=SpJDwt8vTwU)WB+yO~mIC26uux(Wqj zJ))oxgA9RPnkhpfJ6`@0baLdMlWnRc*7|S(X#sQkFEGM%vEDMOl5l zDDD$T5&cE9$<=0rV~5#fGYGOI*4WWF-#uR4)_8*N34^&=P_|CU&`DWsCarCv6*57D zNSVwEre%q7Y0HfmYiUBNlW&Asx&m1|SyyFheTGOc@`xyCb}WO^tSkY!aFlnAZ8sg! zvS@~Qz%lm9=4D^uwKz5kS#bupIL2~LPsy52iz(Z!qD;wtv4gvh>&dLgjcBw3{u|Im zGW7eEx~LnCr^4_U0CgrWBOP&?~MrBTFI?K05m^@G)|l zt)wNxD4*S+|H&J)M2WIu4s|n)C=GFY$6zweiwmYm443g=U?~*T@mD2Jv@?uEZ+2zQG$=_vM=9UXCpEa%5+dBWtl7*WsOVWcT9T>*ag{Mst26 z4Bp>LN;iMU@;P1`DEBM9$P1i8{@Pv?^k7t=L|I>g9cdH>lr+>pK^j^hKaC>t_{cLl z4LvZw2V(-g82bceW%9`38((G{_(xI zqz4lM-6V8lLK+iWGCY$woxIjRr596sFwI>|mx~$h;!?So$&=FpX_RuD;f*uBagx}R zQoAAMGqUD0Iwn+i3SKJb4c(dx_e^#O(++;TTa7$WC$F` z_fWf<=#L`r{_-?tFQ>(G2;JNsl+71Lb)hNXpGPIR7?Va|#e%0%uHXSIgs4 zTm|o=`ZBngEP3*j8t}i3zzh}k5DMx2jL+2pVJbd=4@zM>atT|UL)aq}c5nn?H|G*| zO%7p)DD3bE!akHs*tI!?Jw{=Vk04CAd>Cd+atJ#{VaG=hc1tc{)j5PcMPc0|2)i|x Vu$mmgdMWJ02*Pe-Oy=SC{{swDBM<-p delta 1291 zcmYk4YfzMB6vuz>-k#;l9AK}_L0(q8VpEx~ z{i;n5uN88L*Uj;U;&1^DZw5JHbCh0_c+3{habvw@D!r|EM{z>&u0`S2jx9}fO%2I( zbIM{kZvEl)y{G7Nssd4Of|E`%Fl%ChwVFjN*1XRLnh*I%(@$3OF!`6XPP0-D9$Q|HRl)+e&xZbA~JfO&F&NC|X zH5a(3xx|P?*jeu>bAI*}RVhB#e8FW4o$oSsWN57CwBm~9OGE1`zSexhx0>(F^Y6(H zrwSHXPTXHQJY>(aN{Y>7u~bs#TDhxpdvm+o=zlh*s^*G*3+`ZR~qe$Z3MF|&00~h5_xF{pLxRg2<%j6G8^X2ZPUY6D( z!9zlz!8uv9BC|sL5!qCPkRm3_IG2f{e}(*wuuzCnEyUttEu=Zs zdX!aC*I1^TheomWbx*x`^8HtfCCea@2C#0$7Z3-Wa=LC9$ea<&gCVqp5;>PrC^M8w z$x5Ld6Vlc4tWGjk35_SDeTxuCOY`00*)L5GOYvSQ-^XJNu+AlWbH2kk*8Z49CtKk|NYfFN-WE4^L|o4lm1uIq~(~^n9nFS8I$`7Ml#+UcNz`6 zt_E@07I+drNs8GZIy@yC)Fc`-i#{!)!zNLqmDRLKWV3uJI%pRy(q!1?&K|)hZ$hk> vIzBVr^-ZlmfhIR%4h7JZ%hR(@3%w7O~f(Kgw delta 31 mcmdnSzKwl@ATwk0WFcl>-gX8Kh7JY+hE4`ihOWsu%w7O~#Rp&j diff --git a/Supermarket/bin/com/lingnan/supermarket/dialog/InDialog.class b/Supermarket/bin/com/lingnan/supermarket/dialog/InDialog.class index fb0be84bfd35d95598f26ce3d804f16dfb7f805d..a5e905bb4be4160804ee956a6cbbe00073198a4c 100644 GIT binary patch delta 366 zcmWNLNhri|9K}Chk%J}~>Ms|Ja(9dhdN^O|z!mXnjU5;iRJ{8;v{?$tRftQYpkl5jhkq zw?y4iDk#H3rMF0bBkmd^s3n$ql4!t4BWA3W(}YcF2hH@T&qWK9v@%B05%lBrW)D8sm5LGr~)q&>@&lGO8HpiP@x@h&N26#5a5&` zXM8H>iwnNFlw^a3@9{q>4wWj^jz1@QaOr*m)KQFEYTZ3={NZYI|bv HylZLyCUjaF delta 366 zcmWO0ODF?y9KiAKPvjuUtR@$am4j)Gi(=*d3?*tzLllP0yg5)VO4MqJlM+JmY9^07 ziyyuix+EGPz6}5t^iQf-#~Y6&;zxl0`h(7|6jyE@|YELB6UA zD58*3iaj|RpA451LIsgn&{L@nRAI)d7OJtS+@N9`HS|-tUoMGpl z7W}mGK|4PR1>kP2P2wo=GW{O>A*i*E9jyd3(LmoNeO?97~ z@WmWz*|RoO71MM8|awH+O8S-3^@ zr$i&&G$bTS#{49$*j3z?!m5@UOKZZJjeLvmeCIpoJ@5OTw}Cr>=MnL_`QRnQM=u+B zpRSa?9EqnV9Wih58eD`iC}R=j6tkA)RA^?MMwNOtq$Bwy(o#hpo0(5F0k*K38U@-$ zot_rziPOMI8tG;SS7>I47^CduF}oONHxumP9j$y~A75x=n*IFXfc3PXWL^d*UXWPW zCb)fN=q1IEWWDvXpkJO?C;Y)xrhAOVp$S55uLv78HWAZpv(={5h&ozv=m3WqtM+&YfN8ikMEDy4H|QeaL7qqE2hsoE52IRRagfnT%A?at57-08{J*r YADUeBx#;)&W`X>r-AWoutx;piKW^Q9i2wiq delta 641 zcmZvZTS!z<7=^#>%ruu8F9%L&1U12=bEeU9aw1_gMa|4fvs9!WDsZ}xrlsAqCMUW_ znMWzQV1yVHbYb!o859&r*<1D&QBOh7y%a_L13k81_Wsvi``>G=f7t)r{~)Bi9-_Q) z@z#UEbgEPhWT?v2Gh3s_7s5#a8b!=!DL$65m|}v2iBLi*kyI!%pqiu1ri@(5@v}-u z71FSZTB>QLhHb2-Q>w$PS~w3>Ib0&_oO z#{()Jw8)PwF&^O?R}JR3tfYEjc4X(TypGqF7Hpio?2|c9Fe1{raiL3(UXf=L;omtRm|Y}) zhpB)t+85|S1o;km%cQW84>Hft$^@k?2Nn4}> IW{ diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/InOrder.class b/Supermarket/bin/com/lingnan/supermarket/dto/InOrder.class index 01faf7921af9fe1f5813badfbcb4d51344bf58e3..d028b1a10353dfea324adbfa6818ecdd6696ab46 100644 GIT binary patch delta 236 zcmX@kbDU?xO-5VJ^wg5zlEjkIVnzmL4NXr*2F_xH2#bcNW*8#_7f_K)YEEuqQ8thR zl!tOAi!qtA2`~uqFbGW!W?IO|G5J2L=wvQtbw&v=%bi(cawCh(^b}Z delta 236 zcmYkyI|{;35QX8H+>DP9A@PYIh>GS0A1STu1hEzbOAE135lmc#<>4_ocNDyJq_mwS;=O}GC9Vw<^OFiTf1^PSr;UJQ;8iFV9uhjn5)=BOhB+ mQ_7YpI}~Bt_=YrT@ld?ZcM7m8KB9qGWZElb(mepMp#KGXz&N@9 diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/InRecord.class b/Supermarket/bin/com/lingnan/supermarket/dto/InRecord.class index b6d813f7c342aa9f2f7c9fa910e97cf11901ae51..6dad50d181d54d2aa97210b8dbd0a5459d69a8de 100644 GIT binary patch delta 71 zcmbQpF_B|KBoiasWCdo?$@xs`jJ#mh8YT@^K?YU^p~*Ly+!#fHVz!f?G0RM@WY%Yt T1*_P{tih@XRG~EaHM1H3R`L** delta 83 zcmbQpF_B|KBoia+WCdo?$@xs`j9g&W8YT@^UItbMzR5S4+!zIbVz#WpK)%T2BxW~8 dF|e9_%o>wpnPvF78F&~Nflz^gfq{uZ5dhP+4xIo1 diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/ProdCatalog.class b/Supermarket/bin/com/lingnan/supermarket/dto/ProdCatalog.class index 81f0fdf7325efee2081ac3c95a98014a246def29..dc3f8800fbb1f0486f3d7aceaf90138baf5909a5 100644 GIT binary patch delta 49 zcmaFD`h<1ERz^ma$=euh7`Y~YX0&DHV_;?ApS+Jre6kOdKBLg&8YWv-F`$?@P)rQ~ DU)&5u delta 49 zcmaFD`h<1ERz^nV$=euh7&#_?X0&DHW?*IDnY@ole6kOdJ|o}c8YWv-L7GjMT1odD54Bj)z88Y0OcDMPyhe` diff --git a/Supermarket/bin/com/lingnan/supermarket/dto/SupplierInf.class b/Supermarket/bin/com/lingnan/supermarket/dto/SupplierInf.class index 5f442a44f875002fd94883a2ee0eabcb786544f3..dc3347a671b6aa7cf8bda0fc3c6038b15623f1e4 100644 GIT binary patch delta 97 zcmcb{b&YGoNhU_#$)}iXSp^wb8H6Squ!>JsX4YpEpB&6=%PI{NlL3pZ0gA~_z5^6f o28yYG#Y|cB8PzAJve-`6W|f(|56IJ>{Eo$z)flM41gJs{08*C~xBvhE delta 101 zcmcb{b&YGoNhU^~$)}iXS@{`Q83ZO9u!>JsX4YpEn;gt+%PI*JlLCva0gA~?z5^7K q2Z||x#Y|cB8I>ldve>e!0>#w8V*7w%8k66#*iK%=A~V^Yl^+0;5Ejq? diff --git a/Supermarket/bin/com/lingnan/supermarket/table/InTableModel.class b/Supermarket/bin/com/lingnan/supermarket/table/InTableModel.class index d4ef217447d0e007309f6ac7ee4669fb5ab0bcb7..1e1878b81952141649819ba87c3f97f2d6f0e758 100644 GIT binary patch delta 153 zcmX>ienfmj4~M7}0}F!?gE@l;gA;=^gBODggFl1p z1TnZV1Orus07XI>A{fFL;uyji%7Ls}hDe51hUm%fx$+s)CdYHzF&0do$E^kcM+6-q delta 153 zcmX>ienfmj4~M8C0}F#VgE@mFgA;=igBOD`gFl1HL?xBp4hSWWlpF diff --git a/Supermarket/bin/com/lingnan/supermarket/table/OutOrderTM.class b/Supermarket/bin/com/lingnan/supermarket/table/OutOrderTM.class index cb4ca6e1c5d0f3c08bfd9077e8641e60d619454f..a6e71e1241cd3e9c7b545e85bcf056ba12b1e773 100644 GIT binary patch literal 3491 zcmb7H`*YmX89nl2rL5(cC?o;fO_l~6duhB$FwiDxier;tuw&{CP7I|WYh_!BcD2=N znJ*0Sh9AhWuLbMjo2W9L;|kT;e%cuE|6UzR`6@Q{Y5W%`VYA7-%|&&u#4 z8J?5jc{%&zP523Zs^J9ORuZV&U!_WrT4ft0h!*)t3;d1$`3I94gy=M^aQ(h+4_ywh0>OzZ4~S&c8M(D}C)cA2DOXTl^(+HL)7pp$c%2uney>&;Kt!Gc#Bp(;%Ia=3`BwURwspC9+;8N;$& ztC{l>n82MFQNc7|6qWjwM)ukKs+F-HQ|)fD^W#GsUrjuDK~Y<)Q~-M{?H z`(Ipq{fkR03NrtE_S)yy!pY^vzb;>qw^!cz^2!IFU%jg1Zrr1w@PAgEj(hQS1w;SU zteNDg+}H6<9MSPAUeoan9Mtg`#ue;Xe}|)W$7MY;xX0|kTChtw9k1gJ9hY%JW^b|- zb9A3$*0Jmdb^IEqbUZH3B0*9OK*wA7jgD{OJ{`Zs?-cYlorc!AMJHIu#l>}yKyTw6 z1-EZ_yHr)`cvoQG!}~fu!0&Z@D9d3SRq>IIKj4pyc$5}7A-rhTa;!bqE)A;qla4LcMaXGx-DT6yeVoYK!c*h3NJ0Y%TCjD+mi_f=z_!+%@M^N~zRTkQ7czXVzlItXAy`8^PWi z)qSdZqY{e4OvARC^AvNu_eO=bdP)nt$dFMMN=Gk@m6{^4v)>SNBQZ*;IFdlCSt9K< z?JDjt1CR188-l!D(*}|bBz-Dr&eFvqsUG&(@cG4C(_@ago*8y6u^BZ39x$2*LM>&F ze56s)LB(>aCL@rp@(Z=VE|U}UpPV959j_p#1IlBYW!i5IOKR;lldUR;+zM{v2YQG< zJ2GgICcs&XRCV}dT|&X3aDJHktk`hQ0^$>r-yC(GVFTiLKUZb6a|Ya-UxAWW|Av;C zR-?5z(`K|4XWEVS;!MWK6qljquR)tx!KP(oIql$7UqFOyERJ z>p-{$wD`iG&@PfT!#7~GR^`-^YfUEh`(pbH?bXlLTTi5{Gl})X_;!r`DMe`|%BU#O z)ziRN|Bl@hqxUUzL}J{&)Z6xMb8*K~Z+o)nTk6dui#Ns&jE^V8_!=VB|q z!?bvu$?;wE;|c7=lgwa~ip^4sQphhCaY%F;#T1I+?MHEvvlcu;e;Ks(=(;4?8GxEkX;GLE{Z0J(juS87-T92=}v*{T}{jz z_g3rhk#LFK-MsP)Le#A2CE-K8*bw)>q=@FnBL8JTKx7 t{&%sOu6>E-PbMfcG0Gn5b0ER^9|}H#xyVNIGWu{S1+yoCF~bCy{SO+;Gx`7k delta 1056 zcmZ8fSx*yD7(LTY=Z@2>1uE3ikxfJ?2#P2O%Hl%Vi=ra#3#hoD#y1nK#%G`A&BVln zR~||tHPOUqeDhD}i+{s-zL`1@)AYOFcF%XtcV{K@I$8Mf=hGJe-FV`l4mpKU8)G)c zZA{ph+=88$QkZsNBPT&#Va7o`2u_Q4M$)qiXB|`^Cz*4SIWOUymqJDF8_A@HxKcbRAK4x19RqIF+KEZ#ogza-10|LUW z9FQgDHmH?-R!=OY1t_r^*2 zI}3XIH}zU!Zy);0!@f~ol$d$Zl*p7&^A#zP6=>SAjv2{mSee8WrhUE*0jF?Hc^t(t zUwa+{^dcA}rUkP_YxxF-FkIHt$mcWwh;@raU3VgxBJ;GUxwmk amFfEb`n-QVctaJEQxqoT3`&r3BYy!^^>@wy diff --git a/Supermarket/bin/com/lingnan/supermarket/table/OutRecordTM.class b/Supermarket/bin/com/lingnan/supermarket/table/OutRecordTM.class index 8c8a214ecb736d4160f5445f8e7e37f9ae47b770..dbe9f62f2f0ed0df196511b10af0aca1758f1451 100644 GIT binary patch literal 3380 zcmb7GX?N6Q6n-*oCutfA44bx9Mnx=xbP#uoEG@K-wp2SV<-uJ!tK6iO;=J&sU`W3(}_*%tw z9G3C8f+Gra1!D?I&B&uH!%(5%u-J^tsHkWOHxn{U6|Ldss5m~Rz*70H%CJ?e#bE`G zcu$JQ6XL`b+BI?4Q_!ctS22ZYaeQ3C39)%nn0!h+o)(X1R6L94#Oh=-p2rIcUR3as zikI<Xles|sFI@VbmQWSo|umK@8k+6VNiAz{s-fus7Ap0{+nk}rC$X;-=>$dj&9 z-lsbfZW<^#)x1Tqt=svUKWVsC-92V_`Lgch&FZ9;7kB-VXF7I)TWYIAzBg=?9JgGP zkO}Sko@wPrjFRWLywO}VY0vXrBIv&4!p`M=dQLtz-o1;KRyYg3gmVeEFR#0RH`XW` z?vzXT*3{@Td709OgRVq>X_lifz~H7z00?tQ;_H zBeZl-AG0XQ3^*m-8qr-->?2{LH(@fTTbG6BiOY*AIylG_tsgh-a-6lE6NLrD4V?l( zOU3Ypo#|f3w>=4z6(qD$)*Ez5BvvUH(JkND%RB2k3xzF-aE8W?vas}|xXyIJE*r-s zNVL)tHd-WEQS|iEu|a(@iba?lT7a^)GifmH!xb@(uv^!4);W&vr9)3_2g|7p8s3Cc z?$s@}gIWzXp|(;s#{9~FQ(@VvMy;k-nCI1=QSx5k2B}~I6E&PWtJtR|2#Ky@zhx^E}nY(;)TyN+=Lwx z^8b@(8g9ld5^nuhwYaSl?XKZY+$G`qWtEd%uAv({HQWuh@rFd;*X!MWQO-`A-b6Mc(Op>$XYi(mvl!O!F!pG83vX+<6}Pdu z`V6l$K@A!2Xm}R|arZq5ZCOT`b;Eg+9e3QMwR3o1!w16JhvM-O3Nk*{@CiQE@EJar z@r8!-_>v6~c1>1-mYvpXS#r-Z%3U%pX!uHmChyzd^I*R~*e5D|MI6tP2uP3Yc!ad( zmrCrjao@5|bV=B&M|v9c06E=Sfy1P$c2n2U9c zjz@`@4)JJh;-(;|!*|iIlAw!yR4MwD4Hccl_ecNO9482N)H361-G0{wlOO}mm_yOL|KM-l8 z1kt%l3FZcG_BHs)3f6Z}PErPI@-29ia(uV&&Tj1Cb1!#4qKP+wa&8_{PW}a{(S}Sz zakMehSR8H2G!;kFnRIa$a_(m+qw{E6g_-yMl+u`q7fUAMH{yAc^j@HqHW|u7X}z*iE;Mw*7^`1 z_F+GFL@GuH(My6kQ4~HJxB_yO>G=Mho3UU?kjwLIhz4-vWXXIrxU_6hyG;K;DzkS7QBpWBu)s zewzC7uS>P>OK7KK?faOhu#B@zKm&dCiv+YYz-xX(D~r zXgZJ9@MP1ExPGQ19UpFlwq>hxWLFry*=f6TKo=RkVQ=IWbv5zB> fkFGi&|D9o>w>RkRG#lwm!dqAD?NP>%!ejpc^$Q;m delta 1003 zcmZ9K$x;(h6o$V}LU$WlAfgB)VjMsLO%M#AD5A_W1P4IHdDbQCJVciZUGV^x6{;X* zxu9IQa^(}aaOp!>{c0d9v2+ApQsf==baO`btTLY(b;6|o&YdW1 z2YngYHua$iVzi1qB}AHjoqknZ6B;V3YEy`$hjYrrVTKj2MK672{$ZkuprNa4hyD5z zB@XP;`0u26z>=Y!Y$2faLO_|;()H)cWWDl+%oR^#iGv>$M=)~j;Qv4s-mT#KEBKx= z-WJ~3`yV|*!Aun%Z&%<03<_p;^;NS(<@08i#$<^@U#Qy+M{6k2v`ZrOo>~=6R!qgV z{w9ZushTb7!bNbzZ5!y-inklN`8v#6gB~C@0qc>#4SzHVHNB;ogVr};T diff --git a/Supermarket/bin/com/lingnan/supermarket/table/OutTableModel.class b/Supermarket/bin/com/lingnan/supermarket/table/OutTableModel.class index 369e79ae07bd1ac52e210f1cc13a35527d9302e9..a434e47b09be82b784bb8459559db7a750574dfc 100644 GIT binary patch literal 3302 zcmb7GZF>~u6}~4gJCn%($%a6UD_Jd-5QGJ4TPl<`2?iEJVp)h?QR`%PvKg4&S$Ag$ zs1(~;wJ%iLN_}s!+G?w97fXVdDEhg-1F-!My?XUNGn3s-NZP9(_L=jXIp^Hxedq80 z{^%-zyD_ixFjY)x$Z5!Hury3-C}^0`U~4$ufiL5P3P*|)tT ziL9UVY`2u=RkVlw>1nG{RS*x2`=0HjCas+3R`|LjW7C-DR|voBCV@RG1A1;Mw7h#S z&FCR5mAy0$r|^IQOIpvTOA9Hi2 zGig?Axkt=4Z^mYDD`R>hoSN{xK;aN=OIi%mamWk(P|#Vhyujpu8*-fc zD|Sw5GqAa-IHQhhdNi||dLuyvBUPP@Nz?JIA=+6tkWM#iO-vnU-l?Wl+}U&~Z=F)0 z2vXPt5hu3b)W((b*vP(uRT@F*t@b^9H_xuPR9WpMz!KYuKe= z%l}ksG`fLrV6TBuyky|(xJSjy242Cd3f3=;Z`ik;yj5YFj9Ol9#>yuRyoT3RykX!s zI3O2>vp#8iR_^6CIj!_ zO#|=B@kbm`@h1cC;e7*t#$QzYRW3CH7sccU;>h1b@RA&JIKYC3EtKSVC1=fQlGEx~ z`E7i$@802~`|n{Kqf*hHdJ`mbZpkz4Qk6Pt7!U(^2-*LV+hqn?!A42qsZ@2A%P|#7 z3{6$NikWMgdj)G3rg-rdY;LjBRi>3Y!1X!7z2O+xZi;K5yvO*2T9&v4{pq%uC!)7@y=bjh;{(yr=BS$q@I!QyM)dyxdgmpw~2 zqMgcpKgvblFcqv-32?MoePP*ZRE{*oqcMA$X%nXSwv$C6na-0Cl#E|4JEzlm+|Iw- zyZIT>h8CH1QY|vP!IN_c1-k=!5BZ!>(mHwEJUoYZdm8Pefbqf0PzJlSPtcNWjkjj9 zZSl5DwmsgS$;RTbOjeDnnXDGqGTE+Jyo0A2*E4hI9J~S}dl{?du$tr=l3jD?z8GK* z^NiCopquAf`n4XzxD6xZ7$GY5;a=VpnViU@DYORfwhs7q~~$~qM{GtqnuhWV}~x~L`ww}`MJLAM4;JIIm)V=V9lx^O?gH@}TO97aDfEXfhv zg`?PkN&ZPZz;^r&!^<)i4^r|Nxevj`!|?G4&fw7?^uaK^D0Bvjaaxvwou$qM!#7YR z#$n=T$Xx^NU+7hFq{A>ej18+OdX$F4Zr@Gu77D47>sxm&E!Bwtaa|}K%``Un+6kp4PIKT~jw#ufQ{h(IJH0qJW3 z*%pB;?fKCDN!-FO`iA|!y8S+;HMIW-7A7rA`;y2_ENY6=8xGiZB1EGg1GZx!n4L=p a>DTl;!!qo&Y@#fJ?1(Td0?MKcD1zbwj)2G_J18oSiW{znz8MdA z^Wb4fbR?P(&;A5Y#)H4XgE3ZhKi09u2)3PDdgKX9W6mNch+}D{xLnl*pVKmEVPGDYOVf{ysLm4!yoMq;B zXO^=J<)$mbujV0NL6Oyo=k!mKYedaec&g>M`&bZt>^NlmkTorH4*J@S2Ix;-p zHdLxWo1d~N6}TzZy)ZpJvD7w%Oqy*jtttWzkWxYp7HFL$3nbmb#S|yOgayTDHe@Tz z6>T6;NwHX}2V%&2a1ilmL=v5#ohoE~sKOyS6`Gb+N4T2!_@B(re~*|DVn4vMPQC-o zr_%|f!Hx87JTlBv125lCIi&#tOr#NyCxp0ngl!Vlif3;l(82_@sQX8-t)BXb5ALYX z{cnAJxPd_N7J*6)xHorRU%0JY4PW1Y!}j$`1~tpG3vm0XAtZc3qR)5*tuTb7pb@cV zq2!?9T7#QnDH}))8mjFW8`vEP8p2LW3mTdoPq&hyDa-hbjJ}V^q{^%i_Rx_{M+kd^ zMl_W%<33JSShmxeeLHQF=1RM(L^O3DPhF?b{?ch@*{Gqn;iZ>QOOZPI>c`Q92DFl( zE?Rppc~fY{0*+uAEtdFvTi}*>l1h0^B%e_;AqQPGNBKvoffkBJLHmt(f!0VVBW2ny mN^L_s&&!-~CzbH~uvgn*(I;4MMTF@Ej#=~yj#H)s9e)95eW-%~ diff --git a/Supermarket/bin/com/lingnan/supermarket/table/ProdCatalogTM.class b/Supermarket/bin/com/lingnan/supermarket/table/ProdCatalogTM.class index 033463da9e61b75ee2736b7be3b6d0d97e585c02..f5797c965627884678ab4b10a6e8ea325a3518a4 100644 GIT binary patch delta 101 zcmdnbzn_0YDJv&00}BH`g93x# C1rVzM diff --git a/Supermarket/bin/com/lingnan/supermarket/table/StorageRecordTM.class b/Supermarket/bin/com/lingnan/supermarket/table/StorageRecordTM.class index e59a6458296375522849f21d32396def39438f15..a4a7f43075f11a1fa7821fe7c039d598afca43f8 100644 GIT binary patch delta 93 zcmeyv|A&9W16EEh1{MY$22}>W$uC*k85JiNve`1~OLI(y*23H0v244nih9CwThFAu>$z|;EjP8@Kv8w?9rxp@O diff --git a/Supermarket/bin/com/lingnan/supermarket/table/StorageTableModel.class b/Supermarket/bin/com/lingnan/supermarket/table/StorageTableModel.class index e0b4d571ad365434e54dc85b8f98c8d993a625c6..f82a2cff0f3946287218c89717ffdf7b3c213e3b 100644 GIT binary patch delta 113 zcmV-%0FM8n5~32YnFa+C04o3%lb!}c1t0(m03(y;21f-b01p5wlQIWM0Wp(&2R#8g zle!0;HA4Ul07U>007d{607n2C07w8I07(EO07?KX080Qd089Wm08Ics08Ri`08ap1 T08jvA08*2T2yX#ill%xK5l$9E delta 113 zcmZ1^v`A>fOg2^l25knR$@AEpS;ZN+86+k@V{>PfX5eR#nQX-F$*3^7hTWD?b@DFu zxu#kSJPdja0u1^Lq6`KMQVfO+@(e}{Dh$R9It(U2o+*PRgBgPzgE>Pug9Sqjke9+> PJ-LS?pV4vh9}YDD#7q>1 diff --git a/Supermarket/bin/com/lingnan/supermarket/table/SupplierTableModel.class b/Supermarket/bin/com/lingnan/supermarket/table/SupplierTableModel.class index dddd3b22535fab501ec892dde79324ef4fa03a4c..bd8e1a58fc3fcbe80ed07e61ef69192e4fda9897 100644 GIT binary patch delta 20 ccmX>qxLH}8HnZRgWH{hK40(^&zlISlmx diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/CreateOrder.class b/Supermarket/bin/com/lingnan/supermarket/utils/CreateOrder.class index 1c9a168c81732b9103026ec0596eda5273fcc683..b89e86a19cf6e4c923df8ef42c7f4e8ca2e01c81 100644 GIT binary patch delta 1848 zcmZWqTXR!Y6#jOS=IoxHU`Z_!tR=MwC8U(QHWj%^!CEeIX}Joq#2QSKnx-fUhAO4y zemRtKu~s_H$c*R|%cNX7>WeSV_~buun$o_AuR0_8?UR)1kV*Fb*4}G>d#!J+-Tvh6 znV$Ul(Y@~hEJB|SAL=CPHEh#iN1YnBOYBhdPKjMQcH_-F?7?0&1U0;+!$5hf6qeQQ4;~0s zM1s-Aip`05INDe>yG}rFCQMk)0!GX_6pJQ8(FD!rc&s7R(vscXbwTWO@W?T<+t%(U za5siBCu_qkiRxIqDab=Jvlq1{!jX!)P(vaXuQGdc3jMhjxpEcoJQ2*w)^LOYS5aw! zjl5y0I%LkXd!2LO7g%ow?JLY?d!E^6FLt%#n1Ict8|Xl%`HQ`J%5eiHaFPNTIEB*& z&fqL#F~7FWTx{SRI+>~W@yEb^Qa@5oa@p{(_eOs z4BQBe_V@9dZa+SJ=k~*)QzJL~Mt?XneCOoI&FiDLzZt&U|8S^HU{dLWi@hVA=SI3y zW8Jp{8m=0+hR+mZkAct8D==g9+rISau5{L2SkJ8q42oFD7!33vzoaQr3~2;~2# z>IYjAp(cUJ4XyDw3%n)V6j~RKM8Yis_OjVE0!3vtW~H+zX^*wCNQIdqg<};PRgbV~ zLcyjgfdY&2|H}fJ)ku*jO4y!0J|Dmd0Tz#AIjsuLf^&{<5aJer4RfNSKw#k}{CU()vM==Wc!lz&(obg+!?+#tg9tvqTMiVlT=? z8|H~_hNNQMgJ_v`qgo@0`sFK3-69v#M&q{b0p-OB@=Hz%fm}cdmYR4|jUa*`#ieHkSoKLVV zOIj&R(8X5s>{4R8XD@d*($`kkzM!@0sI8ty?diP8Y%6KY;eD|!Z z;ZC8zU6wVTPNC4vymRWm`X}XQ2TyeG0!9e-oMe4Vu$d2Q3!lkW#$3ntsb>#tqafS4 zvjeeu?BulD(#A*4N|=gjRi)mZag~TNBJp1wiQiyK%ekL;CvQ-kz@VKJ6RDlbMmg;Hgqh18mlgAwY3UNXr2;n6EoIn5MNJZQij`wo z1I>4F&CC{~4=TuM7W7k4bW#OPTcQ8a$|Ng!MH{bar^zaQv6|nkF_sQfVy&rB%m&t3 zrrJ?9vqhx#|3-VN(&N_=ZDpIrd)h8)fob6my-+SQcgYONnO=5_@{~-GJ)(%-Y_X*# eRV`-dlha19$Y4Z&b`Q)m#a`I~`&2NP(f+^E_((_q diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/JDBCUtil.class b/Supermarket/bin/com/lingnan/supermarket/utils/JDBCUtil.class index cd65a7624a428e17c19a7929671a9615457abe30..c16b29d08a9faf984711809dad3f9c6ed18f6445 100644 GIT binary patch literal 3937 zcma)8>su7p9e&3JW_DQ6u7E}6*7cd$jT4litXpA+s!!qFFvP1Twu}#uw z6Gg0wMq)2flSZp)G;)axCO-9BKlDH7=XTM2%IEg!)AT)O_J)BzfoIP-^Shnj`TgGW z&iw7aU;YKa8cgUMOed<*EruR39M%y+uZkl&iV!YFA0oxD#L$n36R#txA*Lgago>j& zN?~d^CgwMU_i+us&{2n93dx%q-qNsE!`m9xYxtFh4I19ja6+f$Ne#ai^Sc_}Q*lbe zX&uWjpy7;$K^13p{08SVoY!#yLn3AOz6_<7R5f)~{Dn8Kh9KtHDDA4<( zR=*jIhs>CQia@V%)bJMhtV0P#2v7LMtGkQ4Tf{!ERCBnSxUQZvVjM(yGh$z*;M?NKveNN1@psJPc9FU zb%HH)3#q7LPDPkB2H8}Jj`SfymVf)sTv!Fm?8C|Jn!-d?n-$+`B_dteqM@T^)P+y+ zXBR%h9$u;JPJ8zRXwG!AlE;^CPYq0@hR#X3J1bA!JN5XZ6H-{w+tnHL1hcsEgd*M6 z1`pxrF=8HZtvxPmLDP4SG&L}k8od6^!xN$a+rO(%-57oH#ZBsojoeYQ{Zmjqb^q*> zd&AkR>`F~tNv1Abe0=$O>fy=M`bQ ztX}#Rd7KFQUfy)m;#P))bw+44V=;C^AWpn^WuYZH6qJhg2>J_HhNOmPrjd4@ieYV< z%DHEJ<}(OuEy?etScWcZXU}#zdKkGN%Zb&^rNTl#4ldkzK?$Upq{Jx2hbIAyVkaf`;W@) zt5}!J_Fh&5*v}xZa`hThID|5EVj+U4;s@tabo1-)Fjk^hrsbvOGX6wb4zV%QZQ(3d z0kq2a)o8;`mTW7fItq2Ca|`npJ=m44@O_y!aApj}ZdVc|oWDZps}q>(o|nWA#^83( zPoj*=B+94jE7JM}v*;J5_0Pe(P4*C%2-Fy!b3{SB&u52 z$Z}DWB|LLMqoQ~x;aPk~NS0FK$Vviv1^W^AsY_zHy`3=IXggNkX|orr9-)xwmchsF zRkE967SDURvv?M>kNp#~4a^;cB5;aU11!iH9(|CKv-BCpBF>dKhvhg=-(l2q_F;(k z<|5H>iE)N`!b^-cjDz?x>Q|duddPMz|1ZyXK=Yemz(_kG~=TDouNb@hTPRj)VOPt@V0z~ zIwG=u9B$%~7kCxBvyrp!7G4Oj;;V1LCuho6*z&5hyrPw|xwcGRzSZ@QGN7Ksv#*G? z0PwgV3AbBdbzG2z+bv)@jso6U5$eaIP~l;vt69BrR^8A4b6?+*|&1u>PklQuoKJSWz=edyp|pG(r*b?^Tw~CW*zm7lx?DZ zGxg0}Z=*aw`7W;8Des_sKRplNS+c|$UYFpEw@!v{9FviHvV?n^ZsvX>ktY79-%Dw S7ZgiH=f4?DA(;sd@A@CYCjrF( delta 1182 zcmX|=%WoT16vlsJJ05#HNr>aTn#Oh0v?)#+rw^KzzS2CJrg4(CPU!qT@-+cF+@7#0GnLm=>bk=|Q z@4Fv?Q*1gUnT-lGVX`q6S&Ff2mg_9p+;F%_F2ah#E#9!X?a=hkM5DO@{>82yYqkZ4+}p!odiKA`HcB-f`GZ*5=*q-@7eq!TZa4?kxt((|JYO zye9_>Cs*017K&F&t3`{}Yco^Rw`!%;u}AsMyvt#ZxEy5A<&as17_=$4JfP_P8{F6N zkRvwlyPPog1DlffQ_D#Bk;{jydVjVg!jE0bRJ>TY@6-WOE^DmY%%rDP= zR4A_1N|mxj_(8R_S**HLdE!!I!#LdR zO1WGt7zwWs`N8XsOn9m2$$Cte4j~+rTF5bl_*S*}R^`ZsuuPp=hxL__wPah;&#<-y z0vy#E_DPplh25qDX-4!FWt3xLOz?ez{$AoK0q@sn@{$RSD+8RNm9w<*y1vit$+Ss$ zOgUj(uaYd<9GBz?P8vxs<4o3#Mp~zbt5TX5T98gwjbEZyBai+S+ipLtb@zw@y z3*Xaz_ZhG3(D9Uxbc1;MXD-NgZgDz0(x7XLG2et}swY90raU8ihVxt^;f=TT)D!wa zKI3!k1pNknqA7q*{drw_dc^lDen1K-X(Z)yK#fdEr&l-9r~B%c-hdQS(o8a`{Tbmo z@mcZLg>&Lp#NW|f-;>Hi-Tk_H^)VxLB_C7zQNGZ0d?{HoITzL9qkdb?sRiSEXmSs& z?4qFJO#9BuFUF@_P;7HZCWyXNF3Z-jv`o(FU2fXTFXbCF8}@!K`@5mPu_`uG|47YZ JS{ean{s(x&uCM?A diff --git a/Supermarket/bin/com/lingnan/supermarket/utils/TimeAndOrder.class b/Supermarket/bin/com/lingnan/supermarket/utils/TimeAndOrder.class index 61597cc8f7069b773aa33e1ead7f35c6137f8297..b65128c2f89f59b8cfe427d48e2775c291cc22f8 100644 GIT binary patch delta 1100 zcmYjQ+fvg|6kVqQlg6}Qa228gzJY`rwS?tMm)xSzpC>;|9t%p;2d%~4q{Nnkcwdq zBRUjZ*D$JM3^$~?DI?=5CUoc+l*UpqsUspc5ll%lEzPYkW-zN`4!1Sj(J-&01$Q+p z$n~Cv`x+i-c&Oo#ibX}mvDR@Con+L=b6xZl zqO6kgDO9j_5vTK9D%oTXXXx!=t8tv=US-2UoW})dY}i_N}j>0fFzjO8&DH02vL*{ z+AvH1EB&4@Qt7*&5&MS7!WN>j+9Im9QAbbKD_zN?^-skm}xr(jp=0E78> zMLAc#y*i2l4510b9CieKlw%&FJGa@!N&2WUNWUKg|0J;}h$Ps$t4WjW&ws3WheElH Zj-w&gPX>2eep6a;g~NkbS7}4I_7`%ov&;Yh delta 672 zcmXAlO-~bH6osFe=`ig$rAR3DwHp=ieIG3XaW&fP)S&rE=&yj zE{yR{NJzkFbmPvIf5g9FJa3uBx%a+v-gC}-|0aLME5HAJ`w0xP=F`NG$90bzQEvJ; z3`ZI98D-4CxH*~dxaH$BWMIe_^tnjGX>SVG-9tRY860pjE$J2mkJok7J@Y0C;Mm$$2 z{1I_V-J^)vXCbEpkS_| rB^0YcaWaf{)?Sd6lq*@28~rwf4jDCQD<-Wis?AkJG|RtM6CL~yyoyt4 diff --git a/Supermarket/bin/com/lingnan/supermarket/view/Demo4$1.class b/Supermarket/bin/com/lingnan/supermarket/view/Demo4$1.class index 191fa02df3daec48f1b264c93a4943a90405f2a4..352b8373395c8b133f34c04d036142b8489f4ec1 100644 GIT binary patch delta 35 rcmcb@c7<)jY$ish$#ala7tjqOIAky$*)-RWz`rs7&I988MGLr8FUzw81xu484Q5Xh{2q}cybwAke~&F z0D~2S6oU;=ogGk({p6c$cAOy$%nV@+Yz*O(71%8pV<$(lpW_r|5MhvDsAF)NY``G} E0R2l6ng9R* delta 103 zcmX>la7tjqOIAjK$*)-RWtA8>7?c_K8B`dg8B`gR7}OXv8PpjJ7&I8n88j!Cu>}e0 zF$gf|Gf08O3>kD7j3(b?v*UDSU}kV*U}JEftiW!;=r=i%{T!z-g9w8tLmh+3WCIQ< E0NY;?)Bpeg diff --git a/Supermarket/bin/com/lingnan/supermarket/view/HomeView$1.class b/Supermarket/bin/com/lingnan/supermarket/view/HomeView$1.class index b8f568202e2609496396594759058e483df54ad5..ec5ed9e016dfba7e1253384fbd196b1a2b781553 100644 GIT binary patch delta 35 rcmX@Xae`w*Ei>cV$#u*Hf}0t{7`8GfFl=YgWZ1!=$FOtqe`Zer&o~PY delta 35 qcmX@Xae`w*Ei+^7&pe#crgg{N)GoKnRX&Uyk z%&jcbGIIlan9t0#OfAzavfWBEv(1*7rp9qP=V46!)0;Qvd+xdSY~OqCZ&~WT)X=dj zd-nsK`7NH_%vbS{M_-ShXdpEp>Rrqb_ACmN_hUc+{glWiI84 zD^xt@;w!H7sK?`a@(G7k9u0U>#cD4kk=A&uWt|3I@9>mIvzp{jJ8bZ1QL}hP&ClwY zjcR*NwN3GC=6RPFG{Y8;7uo9alFK%i?Jhes+fF^VE1n7}b-CN+WtXrTt6cWDywX$k zy$%tVeIDI-RoDAfdrieMmjf=ZtM5UNL%iYerZ#_A#aj+X9FA6YGreNWF@H|%!Q}o7 zu-wi_OFku*;fye}_UF}U;9rSN$Vg3B``ebWjI+GMaZ46MEX9-3 z&M|`+;Fmc!#|#!c>2&Oq&uPmY+-dodpZ*(sNHn-mQkyVq>XaIzW;i1I63Y$5vyEh_sS*8XE>&GC zbri~Oie!RRinvcuH5m(u641%eXq7z@TAJ%CNUxw{m`RdlGNONIVx{JKQ_%KzgR>>8n7Zt%uhhs+A(U*nJ&b@;v3 zAx(0JX`C(CK9(pg|ev)GJhshP!cQ_c#r znw4fNYfUBVOoa935F4`0X*QZOY&MtJV*ZrxgOYs>F|;C`2}~4fF@Ig9z0@p{l=q8m zvYd)1aG6%J*+EnpD!m22VPb~q;b$c_GPn3eiS0r?g@jtx!vrg69VRW(Ht?+94Yd}hO;8iksvR#p^(>vi?!WLq}owyD)dg5 zJaO_ho*|h6(e7Q$Wtuq5N_2UE*;ngmFDQ%=Cs_kKAx%zePdfI<b%(5XXNno6XD)50Y$|6e@=zkup%6i2({U94bKwf(Qgf2r-605|D7I;36U@ z$T=v2C|+EG3JGqIMNsfS1Qk*6#sd*gw8}49XxTl9DZl7WRsVbY_3Pu`J+r6nlD4r! zf9>82YoLkh=r=%r`r7vi#(bzPsL(~2OO4oq%zNC zsp2vf%UxC|uJmYzub!(M9`tC=Ln>B#F^TlB#~RjZ;71(Rd9axw{SO-J5_xlLY%r@ z>b1+^MVH+kJxS=%9@Sn_u~?7ydhFw6hgY=i{VEPPyz1~;ZNBLjGOzpdllNx~puloH z!!0FDvJ7RIp`E`Xl;zJ2C+C##hNYPCmV>-$8BC#NB9jc!iN!ODXLYKcSzcAvY2cvZ z@ud}(L%e0k@b@KW_(#GWhaTpLk~>bEQf7IFcQwsX%X=I%r2jj{@bb#ise1ap z+i1^zfECv>gg zYNuD)APO8#S-#=466OX>5pms>2iF{yTr zdomR3E6ZuPnlzFS(q(r&O%F+gcBuuCBUjt=}i zr7JiWjsg^NGDSg0DKbS0k>W&_`oG%Tf?LJb3P)rwlDUisv&o=07jOlwxsprhLz$dr zN@>uR36u+}riB`@%1&ss+R07Zm{@`)MF~=i>PU-rjT5b*U7YM_M^WQsBxqI??N&!- zxQ@=X0f;kPC=l4v_k7@UdXd`lfyfg*U^*O&^6-p$bc;7D7h6G!-kJD#xhwPp7-bge-tZ$L%kvjT~+(m!Q5ejl- z%C{LIF3cvH%J=Vlw$OrYjh#!R#wBYhS*J^$uzYuC$N-Xp&RxtoS~$!~b0zy74Rv%9 z6t)OU)}-x_E#BIbE<7?=U1D4BAw0_x%kA0B5lg9mHa#=%e|;s^U2;E(7}p4Ta!b3A F-{0BFPbB~V diff --git a/Supermarket/bin/com/lingnan/supermarket/view/InView.class b/Supermarket/bin/com/lingnan/supermarket/view/InView.class index 0cd829743ea0390a798b3e1672f4538e8894ded7..c6d8d2280514e980bbebd96d6b71129a6b188284 100644 GIT binary patch delta 68 zcmV-K0K5OfZ_015lovM*b7gL1WpY4qaV}$TZ2%)H{9{EVXXf|Sg}WJU%-LrX&= QGh+)wQ{&C2#sA9#0HY@q%K!iX diff --git a/Supermarket/bin/com/lingnan/supermarket/view/LoginView.class b/Supermarket/bin/com/lingnan/supermarket/view/LoginView.class index 0265a993edaac2e40cfa132b2b45ae475e46a62a..58b6d6f1f178370833982b7beebd7fa042523034 100644 GIT binary patch delta 219 zcmWN~y(`3V0D$q&G3lK1V=&mWyhI5%8oI zQ?jNF$jg~EXWps>dlp?-c4x(lHE-5^*zjr7mo4A6{n+tmxBOevmgqc?bQsb{njC9( zqRVNRoSAWM$z=#!1>xGhn?Q=5+$y>E?jfWf<9uzg>RDyjC6(fIluf+GgHh{0^5-;i delta 219 zcmWN~J1>KA0EO{inS`pB!C>=l29cDQL|Yx)28u9fFen!HYvS5O;x@H|RbrKB($!$_ z0ek=-z+y3&{m1j1ljoGFE1m+P7JUML+r+T-oQ9-Vv0TZ z#aje#a~|(7op)(thO9VhvLQGN^s?L+jAU=~M_z%Oue3|@|-fnU+Y2^gG2C%<8kQ+UcK zqWq5E{6QdlMS&7gq9l}S zJ{q(DO-e?q7UF_Z(4|EPDHRc=VOWbXswJ3KI{s=YleLUlveK^QEK>%nlu4gfFrby8 zT<0Oy$%QL&++x(a+{RUp)#!6|tlDn&sxVvCNYoD4wbPtcg9_E6 tPIczAUDzuh8nxTl@7}{k^C9U*)NSLzmGDb+Y-Bzd`qHvtwZ`T)l(Lo@qc$eZe`TR8 z8)g}8Z(AdpOUu+)v)ODmv&xD@FH#xfubnTyot<-@ou{p+t*E6dvEq;dIIIwkXfcIa zN|6#cDlf&_M2WU>OnH>*AZ04%xXLM4H5F>)gqk@eAE(t$rFy8+Th3^Rvl```Ca6Z7 zCyWb3;SftLE2txdi)^5tY%Z~#E99@CfxR?RN)uIFqlWA5$PI3~)y6G4Y32pDdCeXA zxXU0djNrphtFOY-L*_jNa$ljeD}{&3q(cQf(taMx;i)dusV8))n`iR#T$6MY?H*iD zFI#!#R3&8@Z=CnuMb1!Cobm2|^es!iNDRTrariC+VJ(>UMtmmfqjMjSu!FisW|@#pSdemTrt&OUMK()iHd~bzqIwHelg&}Hg{i~B)nyUtwYloIc^bAz zjoEyHY#|Z0#QB|?M~t&GEuDDxwJ4`GttNh@OH5R-c@%D|BfG3ETI%%q_ucb;-tY7Iz75gF=)v5SpzGjJ z%OfeDrDRSei2~A?Mn4M4p@;!Q$z^)W-HbIstb|^a5}}O8n8P^cF^l<>vw%fZu#)H5 z$_pfTkya}C(oe6mn16Ul$-JyAUeN%S>QRrG~EdjPP)g* z^gto5GKn9U$u*wgdVF^1!pNU|>St29;R$~61iyNMn-ue#vpbyqyR&aO`wwUT>FmF# z9hlq<9A~8zFSOtt%5)-}HsJbv)U74$H zEKqkU)Wb_o_2SaJtDfFdy7$zZI`v_P`qHEa*{2Me)sI&H6zzJ5Ys#iWIdm!%6M9%l z8mMFqQkrtrSA&(KA$m$fHD1FsRe35_zDo7Dp3@Vm)RS7GQCj8`RT{0e8l!rRRinmf zx8K;W0v*%@wP~VGYmzQ$iaMQgThlCAg%(kfjZoAkXu2&{evvIzu~lh?RcodtRAPHn fW*=yd9nxGota3Z9d3ILw?VO&quT>G>6}fvK`PIWy delta 837 zcmWNP2~5^y9LGQ3-yiQ+iB<_B=qoWvQ}Ljcw_sj`N0wybl^SZ4DGoP9Upy<7se5B~ z=oCShTPaD+O*HMGoVPg-%zJaQ(zXtV=|q2fwr9`wJo`M~<5!-uDW@teWKEy1?i|_| zO2{OJ{=||+8wQii%cL-bG=^3;#Fqq-Y@Q^CR7TQ+Q4C-VV|kSczR%<}7Vp_6 zlaK5GtF4wbcAT|VN2%Rpoz=5Gh+#tz$Hze;WkD(%gKm5p^x`w>fDnQpgNyt|v^Xg@ zVGB*!$`h0m&oHI(eKQf=6D5jPb{2blf?vwBlXCHO;G2%E*0w?_U zlU~m$@8C4!_%%AN{fUgT{^}g9IPVHBxPm%YaFNk2KaWe!zU=HP&c5pGYtFvTT5d$g zhkL4Vb!qsPMLIFUeg94i{&1VO-R2$t=r6DRZ@TagFL|N;`HxKQ`h3*;K-}}<|M#-* zGld6CF>Nwy7~+_(1GbGxn-Eb!x#Ch4@n~saI@7C{8hY zTCsY@S8F9JUcHr|OtsN)C2F+VDp&0^Sz+a?g9?Zqkk)8~3l=tR`;~2n^oku;jvdoTJEt+x%G8IC0fC0Y^Z)<= diff --git a/Supermarket/bin/com/lingnan/supermarket/view/StorageView.class b/Supermarket/bin/com/lingnan/supermarket/view/StorageView.class index fdfbfccfad374f25f736cd0204bb072ca6ab0dd8..a1002d1b6e26b4236231f86926f137c5d3f42dd6 100644 GIT binary patch delta 516 zcmW-eSxD4T6vlt&T9{8=rV6l|stIN4fZ^kYntT0F~0jUTI~Ybl{f|2ck&LJ6NJ<1_pD hq7+}L=bM%7tg`>qieIW@ltg~3jxp6SZuL4BO#>;0drKA-O!a)n%h?KZoc^wlviZ)jbr>KhyUbC7+wkI zxHvc=vE)et`LcroadT2U6iN<0@lhld6iXc?;^&lfa9VmOm43=3K)H}|^;Sxzo zy_F7>)bDc9A_qM94j(9KnPxXCU0xJ^J!C%D7B-hXnJKip%H0sb+l zz7Mn$owHJRt!`IqV>Qn;=@)Ef zjCjU1@t4+&qtP}&m?pcE*UI~b{k*kGqK1;*>D2eE;RBI;B$`k9M^l>rGpF diff --git a/Supermarket/bin/com/lingnan/supermarket/view/SuperView.class b/Supermarket/bin/com/lingnan/supermarket/view/SuperView.class index 97a7513fc3eb22e61c74fc1534d4e6f8333747b4..b12ebe481084b053128ca3ade352a27c849f3303 100644 GIT binary patch delta 59 zcmX@YafD+-6SE*c0}F!y13!ZxgD`^-g9L-{MTm>2;YY*2v;QA?dOCBuV>@5V$@yrY8R74VAUb!|$(M<34G|5|(Pwb$j}=VaMH zS?8H#h&2p2lyfS`dk$5+Z!8~#DBwe*o-pF0ARjx7=M%Gc+K5kseC9Bb9-Gh2dd7q} zYtR=qUz+utar?^VYe(02ZN9Pj*1+!^zUO?93l6inxYkHDt>FiA(T_GiIV|93qx=%& zSBGXU+5Bendyva!>yKRieu z``(cQ0gFv+?t92SFMZ3Mk%34h78T^{jW<%w&BPeVxKvkobZCG80=|O2x5Mp{jAkiM zWT;3pHu?r*Ju1~wl`uF%b()x>*fGX=++|R>+~aQb7;ijc878EuQPoLg8Itg47@8qB zOTZNa{vhzZo85nxhKx+pAo z56W5A$weNP%dGcVZ14?bqi-0GutU?!8*DW@c}6v1Hz}3d6+Wi}3P6$*B_0j+T5oab zK}KYmZ8{s0409UFwBp97$J|5gQDamcoI!P)s->!K&^6{UucpY?t$XhLe(voxwj#er z)0;GVv{YF-jloGIwDl1UTC4qcTmAhkOjhMYa`sW8XRL^IoJBsYZiYqOHn-L4XYt^5 zc~N)C75~MD$UnwXcbUh1y0zSl!+&KQZ46iZC^R-EA5_O3|pvVs}5@$ zwLGPR+0Gn2)yU3bmT7B}bgJtvZO(4GRKCcw9A%HrZ7&)2k)cE9Gg`Z`^1$JYGzt9*el-9$LRt$I;0FX=;hSs%&4)bYr) z@U>TPHBc(QaQF>}$)!h`_6kKD;Wmz@stZe+;vNtDZ=!2b*LZ$CD_2r*M8gSYY(?UyuPPr5+^a2R99h6a93Pr$(ffz41 zMlcm`pc5lX6_iL*qY_%@Om%!P@!gn63SLn`Q4#PC-d(#x!h?wqv-Y~|`S)7?`p;0= zp|YLFk}l;8*&KG6%8?Ko_#ng>J~ZK5#(ZS+vC9lTF||*PIcoEnOD%m4pPTaw198lF z#~r>j=U3+135Ty;J>Pfu#^GDzo^<(+Q#PkvnmJ?4$=gi+d-Ko_4nMlA;3pIOZ1amt z3%@#?bvS49n<@QXz#shS@RtexcK9bGh&U2(B`B66NuEow7$ zJn){pm_Kl*b4o0>vTdNly(&LaiNzEOsp1l*aT(Q2V0x-2d`;*O`2--~47?lelw_9j zc!r9`5}zs2EK}np87k9MMPH|?pJ_hT#tWDGOxN;^xQQ~%OjDzw8_zN_9?Wo2hJrLP zO@%d8tBA9_**_KbjcppNk8l5 zh%Vqbx65fZ$~o=`1lSa?+00|wUQv!-9%lzA%5Jk2B-Jze;$%~k4mqiGKjX4A8!khV zVNr9Lj=4DMv!s_@nvCiNHy3W#uvEj%dRF;dA1e;*)ta|-kYxu=t~ltk{B2r%S}QH( zKgWHW@*PpoIwjqU2M4*KGB1+%Y?2cFj}@`r;Kl&fUPec~m0sK$B$0b=MAW-!_q#=2&GJ-gXiRrvRb!S;Rnh9EQkBpeooiU7 zX}Yxku2P@1W_IKI+^YSpyP%OPakRgu)$St9Geq>ED|n7c?4g1e^o!V+%0}jghmnlv z&jY1K6^$MB5(Vs6dG%6EALDsBRb5ol67yOAA8F?v|9^E~=*rXY5gpa$Rj%bVW^y3) IX3@BR0i&HEcmMzZ diff --git a/Supermarket/bin/com/lingnan/supermarket/view/UserView.class b/Supermarket/bin/com/lingnan/supermarket/view/UserView.class index 7aac3e5b903d271f72f7a1692c05fccd75efbea6..f1bd6db9678b68e1677d23de05863cd106fc8edc 100644 GIT binary patch delta 361 zcmWNNNhri|9K}E1L6rE9VU#sXqEIr*MY$+RmJ$s~s7Vq=4YGt1NfQ1kTR5R6OD3|# zLCS%Wlq4bBLBd>QIrv>(y?VVq?>Up4NozNnIU7&1(8wW_Tq4OMmVB36D>if&VWNaM ztfW$=Lgh*;sG$-E)eK-`TDetfIi!wD8n~sA7wo*##1{_npjk9pB#btRr(G;`NG6?< zOSf3*5gWZ?r%zfLkbVYbgdv$^Se6)--B5ISWL!R&kRPTDp3E5hnKJ}3uiu&6r3-km zh#yWuSXSh##IQy(>!jf#gAIkesdjBqz&3^KQN=!89MG$P$2ek^W7Tk?8ctc^Or_7+ z;X+RgI*z!)hii=7U{-JEIg6Uvu-rk2fX6To4V+o2tJ9%tq+?WeqVU=O$xt? K;7`|r!~X$NRbL1I delta 361 zcmWO2$t%Qh7{~GVGlFM=(Tq&-Ut2fP@jW=0nmOn-e-Z%^aj2eO&(?5bd)^U88 zz{n(FOey&^amYw6V%KPL*6!qqD<0$86wIMciz0&o+d7H5QG58YkBI}!91_D3Nh)jMluXWalesVO9Dgp对象 private Vector v; - // 声明User对象 private User user; - // 声明JFrame对象 private JFrame JFramparent; - // 声明JComboBox对象 private JComboBox combo; - // 声明字符串数组 private String allProdId[] = null; - // 声明Vector对象 private Vector vAll; - // 声明静态字符串变量 private static String catalog; - // 构造方法,接收JFrame、Vector和User对象作为参数 public InDialog(JFrame parent,Vector v,User user) { super(parent,"添加商品"); - // 设置对话框大小 setSize(250,200); - // 设置对话框相对于父窗口居中 setLocationRelativeTo(null); - // 设置对话框为模态 setModal(true); - // 设置对话框不可调整大小 setResizable(false); - // 设置对话框布局为FlowLayout this.setLayout(new FlowLayout()); - // 初始化父窗口引用 JFramparent=parent; - // 初始化Vector引用 this.v=v; - // 初始化User引用 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(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); } - // 提供一个方法来获取Vector对象 + /*将数组传到inview的刷新方法里面再刷新*/ public Vector getVector(){ - // 返回v对象 return v; } - // 实现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; } @@ -204,207 +145,80 @@ public class InDialog extends JDialog implements ActionListener{ - @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 + //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); return; } - // 将文本框中的字符串转换为整数 int sum = Integer.parseInt(sumTF.getText()) ; - // 判断输入的数量是否大于0 - if(sum<0) { - // 显示错误提示信息 + if(sum<0) {/*判断输入大于0*/ JOptionPane.showMessageDialog(this,"请输入大于0的数量","提示",JOptionPane.ERROR_MESSAGE); return; } - // TODO 参数校验 - // 判断商品是已添加、未添加还是不存在 + //TODO 参数校验 + /*/判断是已添加,未添加还是不存在*/ productionImpl productionImpl = new productionImpl(); production = new 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; + if(p.getId().equals(prodId)){/*如果数组中存在相同商品就更新数量和价格*/ + sum=p.getSum()+sum;/*数量*/ p.setSum(sum); - // 更新价格 - p.setPrice(sum*p.getInPrice()); - // 设置标记为找到 + p.setPrice(sum*p.getInPrice());/*进货价格*/ mark = 1; break; } } - // 如果购物缓冲区中没有找到相同商品 - if(mark==0) { - // 打印信息 + if(mark==0) {/*插入新的*/ System.out.println("缓存区不存在,插入新的数据"); - // 更新商品的数量和价格 - production.setSum(sum); + production.setSum(sum);/*更新价格和数量后插入心的*/ production.setPrice(sum*production.getInPrice()); - // 将商品添加到购物缓冲区 v.add(production); } - // 打印购物缓冲区的大小 System.out.println("插入后v的大小"+v.size()); - // 关闭对话框 this.dispose(); - // 显示添加成功的提示信息 JOptionPane.showMessageDialog(this,"添加成功","提示",JOptionPane.ERROR_MESSAGE); } - // 如果商品库中没有这个商品 else {/*商品库没有这个商品*/ - // 显示商品不存在的错误提示信息 JOptionPane.showMessageDialog(this,"商品不存在","提示",JOptionPane.ERROR_MESSAGE); } + } + else if(source == cancelBtn) { - // 如果事件源是取消按钮 - else if(source == cancelBtn) { - // 关闭当前对话框 - this.dispose(); - - - } - - + this.dispose(); + } } } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java b/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java index a2dbac8..152c9ae 100644 --- a/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java +++ b/Supermarket/src/com/lingnan/supermarket/dialog/ProductionDialog.java @@ -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,7 +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; @@ -34,31 +31,24 @@ import com.lingnan.supermarket.view.StorageView; import com.lingnan.supermarket.view.SupplierView; import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; -// 定义ProductionDialog类,继承JDialog并实现ActionListener接口 public class ProductionDialog extends JDialog implements ActionListener { - // 声明多个JPanel对象,用于布局 private JPanel namePanel, addressPanel, contactPanel, opePanel,idPanel,inpricePanel,outpricePanel,lifePanel, sumPanel,supplyidPanel,id2Panel,name2Panel; - // 声明多个JLabel对象,用于显示文本 private JLabel nameLabel, addressLabel, contactLabel, idLabel,inpriceLabel,outpriceLabel,lifeLabel,sumLabel, supplyidLabel,id2Label,name2Label; - - // 声明多个JTextField对象,用于文本输入 private JTextField nameTF, addressTF, contactTF, idTF,inpriceTF,outpriceTF,lifeTF,sumTF, supplyidTF,id2TF,name2TF; - // 声明按钮对象,用于保存和取消操作 private JButton saveBtn, cancelBtn; - // 实例化productionService对象,用于操作产品数据 private productionService productionService = new productionImpl(); - // 下拉类别相关变量 + //下拉类别 private String log[]=null; private ArrayListalog=null; private ProdCatalogTM prodCatalogTM; @@ -68,7 +58,7 @@ public class ProductionDialog extends JDialog implements ActionListener { private String id2; private String name2; - // 下拉供应商类别相关变量 + //下拉供应商类别 private String superlier[]=null; private ArrayListasuperlier=null; private SupplierInf si; @@ -76,199 +66,135 @@ public class ProductionDialog extends JDialog implements ActionListener { private JComboBox combo1; private int supplyid; - // StorageView对象,用于界面更新 private StorageView storageView; - - // 声明Production对象,用于存储产品信息 private Production production; - // 构造方法,接收一个JFrame对象作为父窗口,并设置对话框标题为"添加" public ProductionDialog(JFrame parent) { super(parent, "添加"); - // 设置对话框的大小为350x500像素 + setSize(350, 500); - // 设置对话框相对于屏幕居中 setLocationRelativeTo(null); - // 设置对话框为模态,即不关闭此对话框无法操作其他窗口 setModal(true); - // 设置对话框不可调整大小 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); - // 创建供应商选择面板 + //供应商名下拉框 传递supplyid supplyidPanel = new JPanel(); - // 创建供应商标签 supplyidLabel = new JLabel("供应商"); - // 注释掉的代码,原本可能用于创建供应商文本框,但现在使用下拉框 -// supplyidTF = new JTextField(15); - +// 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(superlier); -// 为combo1添加一个ItemListener,用于监听下拉列表选项的变化 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);*/ -// 创建类名输入面板 + + + /* 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(log); -// 为combo添加一个ItemListener,用于监听下拉列表选项的变化 combo.addItemListener(new MyItemListener()); -// 将类名标签和下拉列表添加到name2Panel面板中 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); -// 将保存和取消按钮添加到操作按钮面板 opePanel.add(saveBtn); opePanel.add(cancelBtn); -// 获取内容面板 Container container = getContentPane(); -// 将所有面板添加到内容面板中 container.add(idPanel); container.add(namePanel); container.add(inpricePanel); @@ -276,97 +202,72 @@ public class ProductionDialog extends JDialog implements ActionListener { container.add(lifePanel); container.add(sumPanel); container.add(supplyidPanel); -// 注释掉的代码,可能原本用于添加另一个面板 -//container.add(id2Panel); +// 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); - - } + @Override + public void actionPerformed(ActionEvent e) { + Object source = e.getSource(); + if (source == saveBtn) { + // 思路获取数据 + // 保存到数据库 + // 关闭对话框 + // 刷新table + + String name = nameTF.getText(); + String id = idTF.getText(); + float inprice = Float.parseFloat((inpriceTF.getText())); + float outprice = Float.parseFloat(outpriceTF.getText()); + int life = Integer.parseInt(lifeTF.getText()); + int sum = Integer.parseInt(sumTF.getText()); + + + + // TODO 参数校验 + if (this.production == null) { + if(supplyid==-1){ + JOptionPane.showMessageDialog(this, "商品检索出错", "提示", + JOptionPane.ERROR_MESSAGE); + return; + } + if(supplyid==0){ + JOptionPane.showMessageDialog(this, "请选择商品名", "提示", + JOptionPane.ERROR_MESSAGE); + return; + } + if(id2.equals("0")){ + JOptionPane.showMessageDialog(this, "请选择商品类", "提示", + JOptionPane.ERROR_MESSAGE); + return; + } + + Production production = new Production(); + production.setId(id); + production.setName(name); + production.setInPrice(inprice); + production.setOutPrice(outprice); + production.setLife(life); + production.setSum(sum); + production.setSupplyId(supplyid); + production.setId2(id2); + production.setName2(name2); + int result = productionService.addProduction(production); + // int result = 1; + if (result == 1) { + + 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{ //更新 SupplierInf supplierInf= new SupplierInf(); @@ -374,7 +275,7 @@ public class ProductionDialog extends JDialog implements ActionListener { supplierInf.setAddress(address); supplierInf.setContact(contact); supplierInf.setId(this.supplierInf.getId()); - + int result = supplierInfService.updateSupplierInf(supplierInf); if(result==1){ JOptionPane.showMessageDialog(this, "更新成功", "提示", @@ -382,99 +283,39 @@ public class ProductionDialog extends JDialog implements ActionListener { } }*/ -// 如果事件源是取消按钮 - else if (source == cancelBtn) { - // 关闭当前对话框 - this.dispose(); - } - -// 定义一个内部类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 InOrders; - // 创建inOrderService接口的实现类对象,用于操作InOrder数据 private inOrderServiceImpl inOrderImpl= new inOrderServiceImpl(); - // 定义InOrder对象,用于存储当前操作的订单 private InOrder inOrder ; - // 定义一个String变量,用于存储订单号 String iNumber ;/*订单号*/ - // 定义方法allInOrderRecord,用于获取所有订单记录 public void allInOrderRecord() { - // 将添加的商品加入到静态变量Vector数组中 + //将添加的商品加入到静态变量Vector数组中 /*prod = InDialog.getProduction();*/ - // 调用inOrderImpl的findAllInOrder方法,获取所有订单记录,并赋值给InOrders InOrders = inOrderImpl.findAllInOrder(); } - // 定义方法resultOfFind,根据分类结果获取订单记录 + //查找分类结果 public void resultOfFind(int catalog) { - // 如果分类编号为0,获取所有订单记录 if(catalog==0) InOrders = inOrderImpl.findAllInOrder(); else - // 否则,根据状态获取订单记录 InOrders = inOrderImpl.FindStatus(catalog); } - // 定义方法resultOfNumber,根据订单号查找订单 + //根据订单查找 public void resultOfNumber(String Number) { - // 初始化InOrders集合 InOrders=new Vector(); - // 调用inOrderImpl的findByIdinOrder方法,根据订单号查找订单,并添加到InOrders集合中 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方法,返回表格模型中的列数 + return BufferImpl.InBufferAllPrice(); + } + */ @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) // 根据订单状态设置状态字符串 + inOrder = InOrders.get(rowIndex); +/* System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + iNumber=inOrder.getiNumber(); + if(columnIndex==0) { + 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; // 返回null - - + return status; + }else { + return null; } - - } - // 定义方法getINumber,返回当前对象的订单号,用于修改或删除记录 - public String getINumber() { - return iNumber; // 返回当前对象的订单号 - + public String getINumber() { /*返回要修改或删除的记录*/ + return iNumber; } - // 重写getColumnName方法,根据列索引返回对应的列名 @Override public String getColumnName(int column) { - return columnName[column]; // 返回列名数组中对应索引的列名 - + return columnName[column]; } } - diff --git a/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java b/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java index 89b2d8c..e09bc0b 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/InRecordTM.java @@ -1,96 +1,91 @@ -// 定义InRecordTM类,该类继承自AbstractTableModel,用于创建表格模型 +package com.lingnan.supermarket.table; + +import java.util.List; +import java.util.Vector; + +import javax.swing.JFrame; +import javax.swing.table.AbstractTableModel; + +import com.lingnan.supermarket.dto.Buffer; +import com.lingnan.supermarket.dto.InOrder; +import com.lingnan.supermarket.dto.InRecord; +import com.lingnan.supermarket.dto.Buffer; +import com.lingnan.supermarket.dto.Production; +import com.lingnan.supermarket.dto.User; +import com.lingnan.supermarket.dao.UserService; +import com.lingnan.supermarket.dao.impl.*; +import com.lingnan.supermarket.dialog.InDialog; + + public class InRecordTM extends AbstractTableModel{ - // 定义列名数组,存储表格的列标题 private String [] columnName = {"订单号","id","数量","金额"}; - // 创建Production接口的实现类对象,用于操作Production数据 private productionImpl prodDao = new productionImpl(); - // 定义一个Vector集合,用于存储InRecord对象 private Vector InRecords; - // 创建InRecord接口的实现类对象,用于操作InRecord数据 private inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); - // 创建InRecord对象,用于存储特定的InRecord记录 private InRecord inRecord= new InRecord(); - // 定义一个String类型的变量,用于存储订单号 + private String iNumber ;/*订单号*/ - // 构造方法,接收订单号参数并初始化iNumber变量 public InRecordTM(String iNumber) { - this.iNumber=iNumber; - } - // 定义方法findInRecordByINumber,用于根据订单号查询InRecord记录 public void findInRecordByINumber() { - - // 将添加的商品加入到静态变量Vector数组中 + //将添加的商品加入到静态变量Vector数组中 /*prod = InDialog.getProduction();*/ - // 调用inRecordImpl的findByIdinRecord方法,根据订单号查询记录,并将结果赋值给InRecords InRecords = inRecordImpl.findByIdinRecord(iNumber); - } - // 重写getRowCount方法,返回表格模型中的行数 @Override public int getRowCount() { - - return InRecords.size(); // 返回InRecords集合的大小,即行数 - + return InRecords.size(); } /* public Float getAllPrice() { - return BufferImpl.InBufferAllPrice(); - } -*/ - // 重写getColumnCount方法,返回表格模型中的列数 + return BufferImpl.InBufferAllPrice(); + } + */ @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); +/* System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ + iNumber=inRecord.getiNumber(); + if(columnIndex==0) { + return inRecord.getiNumber(); + }else if(columnIndex==1) { + return inRecord.getId(); + }else if(columnIndex==2) { + return inRecord.getSum(); + }else if(columnIndex==3) { + return inRecord.getInPrice(); + }else { + return null; } - } - // 定义方法getINumber,返回当前对象的订单号,用于修改或删除记录 - public String getINumber() { - - return iNumber; // 返回当前对象的订单号 - + public String getINumber() { /*返回要修改或删除的记录*/ + return iNumber; } - // 重写getColumnName方法,根据列索引返回对应的列名 @Override public String getColumnName(int column) { + return columnName[column]; + } - return columnName[column]; // 返回列名数组中对应索引的列名 - } +} diff --git a/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java b/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java index 38ba6ef..ccd5983 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java +++ b/Supermarket/src/com/lingnan/supermarket/table/StorageRecordTM.java @@ -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类,用于创建表格模型 diff --git a/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java b/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java index f6860f5..479fa7a 100644 --- a/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java +++ b/Supermarket/src/com/lingnan/supermarket/table/SupplierTableModel.java @@ -14,54 +14,45 @@ import com.lingnan.supermarket.dao.impl.*; public class SupplierTableModel extends AbstractTableModel{ - // 定义表格列名数组 - private String [] columnName = {"id","名称","地址","联系方式","邮箱"}; + private String [] columnName = {"id","名称","地址","电话","邮箱"}; - // 使用供应商信息服务接口,实例化为具体实现类 + //private SupplierInfImpl supplierDao = new SupplierInfImpl(); private SupplierInfService supplierInfService = new SupplierInfImpl(); - // 创建供应商信息对象 private SupplierInf supplierInf = new SupplierInf(); - // 创建供应商信息向量,用于存储表格数据 private Vector suppliers; - // 定义一个ID变量 private int id=0; - // 查找全部供应商信息的方法 public void all() { - // 查找全部数据并存储到suppliers向量中 + //查找全部数据 suppliers = supplierInfService.findAllSupplierInf(); } - // 根据名称查找供应商信息的方法 public void Byname(SupplierInf supplierInf) { - // 根据名称查找数据并存储到suppliers向量中 suppliers = supplierInfService.findByNameSupplierInf(supplierInf); } - // 重写获取行数的方法 + @Override public int getRowCount() { - // 返回供应商信息的数量 return suppliers.size(); } - // 重写获取列数的方法 @Override public int getColumnCount() { - // 返回列名数组的长度 return columnName.length; } - // 重写获取单元格值的方法 @Override public Object getValueAt(int rowIndex, int columnIndex) { - // 获取指定行的供应商信息对象 SupplierInf prod = suppliers.get(rowIndex); - // 根据列索引返回相应的数据 + //id = supplierInf.getId(); +/* System.out.println( "id="+users.get(rowIndex).getId()); + System.out.println("rowIndex"+rowIndex); + System.out.println("columnIndex"+columnIndex);*/ if(columnIndex==0) { return prod.getId(); }else if(columnIndex==1) { @@ -75,33 +66,14 @@ public class SupplierTableModel extends AbstractTableModel{ } else { return null; - - - } - - - } - - -} - } - - } - - -// 重写获取列名的方法 -@Override -public String getColumnName(int column) { - // 返回指定列的列名 + @Override + public String getColumnName(int column) { return columnName[column]; + } - - } - - /* public int getId() { return id; @@ -116,6 +88,6 @@ public String getColumnName(int column) { */ - - + + } diff --git a/Supermarket/src/com/lingnan/supermarket/view/InView.java b/Supermarket/src/com/lingnan/supermarket/view/InView.java index 5fadc90..4845449 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/InView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/InView.java @@ -43,260 +43,165 @@ import com.lingnan.supermarket.utils.SendQQMailUtil; import com.lingnan.supermarket.utils.TimeAndOrder; import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; -// 定义一个名为InView的类,继承自JPanel,并实现ActionListener接口 public class InView extends JPanel implements ActionListener{ - // 定义顶部工具栏面板 + //上面 private JPanel toolBarPanel; - // 定义搜索面板 private JPanel searchPanel; - // 定义标签 private JLabel nameLabel,locationLabel; - // 定义文本框,用于商品名称搜索 private JTextField nameSearchTF; - // 定义按钮,包括搜索、库存、退出等 private JButton searchBtn,StockBtn,exitBtn; - // 定义操作面板 private JPanel opePanel; - // 定义操作按钮,包括添加、更新、删除、历史、返回、详情等 private JButton addBtn,updateBtn,deleteBtn,historyBtn,backBtn,detailBtn; - // 定义中间部分的滚动面板和表格 + //中间 private JScrollPane tableScrollPane; private JTable inTable; - // 定义底部面板及其左右部分 + //下面 private JPanel bottomPanel,bottomPanelLeft,bottomPanelRight; - // 定义显示记录数的标签 private JLabel countInfoLabel,countInfoLabel2; - // 定义缓冲区对象和其实现类 private Buffer Buffer; private BufferImpl BufferImpl; - - - // 定义一个静态的向量,用于存储Production对象 private static Vector v = new Vector(); - // 定义一个下拉框,用于选择状态 private JComboBox combo; - // 定义状态数组,包含不同的货物状态 private String[] status ={"全部","已入库","待入库","已取消"}; - // 定义商品目录ID private int catalog; - // 定义一个JFrame对象,用于引用主窗口 private JFrame jFrame; - // 定义一个User对象,用于存储当前用户信息 private User user; - // 定义一个表格模型,用于进货表格 private InTableModel inTableModel ; - // 实例化缓冲区实现类 private BufferImpl bufferImpl = new BufferImpl(); - // 定义一个标记,用于区分是从进货表还是提醒过来的表 private int mark;/*标记从提醒那里来1是进货表,0是提醒过来的表*/ - // 定义一个进货订单服务实现类 private inOrderServiceImpl inOrderImpl; - // 定义一个浮点数,用于存储总价 private Float allPrice; - // 定义一个整数,用于存储行号 private int row; - // 定义一个字符串,用于存储用户名 private String uname; - // InView类的构造方法,接收主窗口、用户、货物向量、标记作为参数 public InView(JFrame jFrame,User user,Vector v,int mark) { - // 设置布局管理器为边界布局 this.setLayout(new BorderLayout()); - // 保存传入的JFrame引用 this.jFrame = jFrame; - // 保存传入的用户对象 this.user = user; - // 获取进货缓冲区保存的货物并删除缓冲区中的数据 + //获得进货缓冲区的保存的货物并删除缓冲区 this.v =bufferImpl.allInBuffer(); bufferImpl.DelAllInBuffer(); - // 保存传入的标记 this.mark=mark; - // 打印标记值 System.out.println("mark="+mark); - // 获取用户名 uname = user.getUsername(); - // 初始化视图 initView(); } - // 初始化视图的方法 private void initView() { - // 创建工具栏面板,并设置布局管理器为边界布局 toolBarPanel = new JPanel(new BorderLayout()); - // 创建搜索面板,并设置布局管理器为流布局,对齐方式为右对齐 searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - // 创建并初始化订单号标签 nameLabel = new JLabel("订单号"); - // 创建文本框,用于输入订单号,宽度为20 nameSearchTF = new JTextField(20); - // 创建搜索按钮,并设置图标 searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); - // 为搜索按钮添加动作监听器 searchBtn.addActionListener(this); - // 创建并初始化位置标签 locationLabel=new JLabel("当前位置>进货系统"); - // 设置位置标签的字体 locationLabel.setFont(new FontUtil().userFont); - // 设置位置标签的前景色 locationLabel.setForeground(new Color(18, 150, 219)); - - - // 创建下拉框,并使用状态数组初始化 combo = new JComboBox(status); -// 为下拉框添加项目监听器 combo.addItemListener(new MyItemListener()); -// 创建操作面板,并设置布局管理器为流布局,对齐方式为左对齐 opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); -// 创建添加按钮,并设置图标 addBtn =new JButton(new ImageIcon("static\\icon\\add.png")); -// 创建更新按钮,并设置图标 updateBtn =new JButton(new ImageIcon("static\\icon\\change.png")); -// 创建删除按钮,并设置图标 deleteBtn =new JButton(new ImageIcon("static\\icon\\delete.png")); -// 创建历史按钮,并设置图标 historyBtn =new JButton(new ImageIcon("static\\icon\\history.png")); -// 创建返回按钮,并设置图标 backBtn =new JButton(new ImageIcon("static\\icon\\back.png")); -// 创建详情按钮,并设置图标 detailBtn = new JButton(new ImageIcon("static\\icon\\detail.png")); -// 为添加按钮添加动作监听器 addBtn.addActionListener(this); -// 为更新按钮添加动作监听器 updateBtn.addActionListener(this); -// 为删除按钮添加动作监听器 deleteBtn.addActionListener(this); -// 为历史按钮添加动作监听器 historyBtn.addActionListener(this); -// 为返回按钮添加动作监听器 backBtn.addActionListener(this); -// 为详情按钮添加动作监听器 detailBtn.addActionListener(this); -// 设置返回按钮为不可见,它在记录页面会显示出来 - backBtn.setVisible(false); -// 设置详情按钮为不可见,它在订单详情页会显示出来 - detailBtn.setVisible(false); + backBtn.setVisible(false);/*在记录页面显示出来*/ + detailBtn.setVisible(false);/*在订单详情页显示出来*/ -// 将添加按钮添加到操作面板 opePanel.add(addBtn); -// 将返回按钮添加到操作面板 opePanel.add(backBtn); -// 将详情按钮添加到操作面板 opePanel.add(detailBtn); -// 将更新按钮添加到操作面板 opePanel.add(updateBtn); -// 将删除按钮添加到操作面板 opePanel.add(deleteBtn); -// 将历史按钮添加到操作面板 opePanel.add(historyBtn); -// 将位置标签添加到搜索面板 + searchPanel.add(locationLabel); -// 将订单号标签添加到搜索面板 searchPanel.add(nameLabel); -// 将订单号文本框添加到搜索面板 searchPanel.add(nameSearchTF); -// 将搜索按钮添加到搜索面板 searchPanel.add(searchBtn); -// 将下拉框添加到搜索面板 searchPanel.add(combo); -// 将搜索面板添加到工具栏面板的西边 toolBarPanel.add(searchPanel,"West"); -// 将操作面板添加到工具栏面板的东边 toolBarPanel.add(opePanel,"East"); -// 初始化中间表格模型,使用货物向量v + //中间表 inTableModel = new InTableModel(v); - - // 创建表格,使用中间表格模型 inTable = new JTable(inTableModel); -// 设置表格字体 inTable.setFont(FontUtil.tableFont); -// 设置表格行高 inTable.setRowHeight(50); -// 创建滚动面板,并将表格添加到其中 tableScrollPane = new JScrollPane(inTable); -// 获取表格模型中的总价格 allPrice = inTableModel.getAllPrice(); -// 获取表格模型中的行数 row = inTableModel.getRowCount(); -// 创建底部左侧面板,并设置布局管理器为流布局,对齐方式为右对齐 + + //下面 bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.RIGHT)); -// 创建并初始化显示商品种类和总价的标签 countInfoLabel = new JLabel("商品种类:"+row+",总价:"+allPrice); -// 将标签添加到左侧面板,指定对齐方式为左对齐 bottomPanelLeft.add(countInfoLabel,"Left"); -// 创建底部右侧面板,并设置布局管理器为流布局,对齐方式为左对齐 bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.LEFT)); -// 创建结账按钮,并设置图标 StockBtn =new JButton(new ImageIcon("static\\icon\\stock.png"));/*结账按钮*/ -// 创建退出按钮,并设置图标 exitBtn =new JButton(new ImageIcon("static\\icon\\exit.png"));/*退出按钮*/ -// 为结账按钮添加动作监听器 StockBtn.addActionListener(this); -// 为退出按钮添加动作监听器 exitBtn.addActionListener(this); -// 将结账按钮添加到右侧面板 bottomPanelRight.add(StockBtn); -// 将退出按钮添加到右侧面板 bottomPanelRight.add(exitBtn); -// 创建底部面板,并设置布局管理器为边界布局 bottomPanel = new JPanel(new BorderLayout()); -// 将右侧面板添加到底部面板的东边 bottomPanel.add(bottomPanelRight,"East"); -// 将左侧面板添加到底部面板的西边 bottomPanel.add(bottomPanelLeft,"West"); -// 将工具栏面板添加到窗口的北边 this.add(toolBarPanel,"North"); -// 将滚动面板(含表格)添加到窗口的中间 this.add(tableScrollPane,"Center");/*将表格放到中间*/ -// 将底部面板添加到窗口的南边 this.add(bottomPanel,"South"); -// 如果标记为1,表示从提醒页面过来,刷新缓冲区 if(mark==1) /*判断是不是从提醒那里过来的*/{ refreshBuffer(v); } -// 如果标记为0,执行进货订单记录操作 + else if(mark==0) { InOrderRecord(); } @@ -305,10 +210,6 @@ public class InView extends JPanel implements ActionListener{ - - - -// 设置窗口为可见 setVisible(true); @@ -316,25 +217,19 @@ public class InView extends JPanel implements ActionListener{ - } - // 提供一个静态方法,用于获取存储Production对象的向量 public static Vector getVector(){ return v; } - // 定义一个内部类,实现ItemListener接口,用于监听下拉框的项目状态改变事件 + public class MyItemListener implements ItemListener { - // 重写itemStateChanged方法,当下拉框中的项目状态改变时被调用 @Override public void itemStateChanged(ItemEvent e) { - // 将事件源强制转换为JComboBox JComboBox cb = (JComboBox) e.getSource(); - // 获取下拉框中选中的项目,并转换为字符串 String catalog1 = (String) cb.getSelectedItem(); - // 根据选中的项目设置商品目录ID if(catalog1.equals("全部")) catalog=0; else if(catalog1.equals("已入库")) @@ -344,152 +239,91 @@ public class InView extends JPanel implements ActionListener{ else if(catalog1.equals("已取消")) catalog=3; - // 根据商品目录ID执行查找状态的结果处理 resultOfFindStatus(catalog); - - - - } - } - } - - // 设置按钮组件的可见性,用于订单视图 + //按钮组件隐藏 public void OrderView() { - // 显示返回按钮 backBtn.setVisible(true); - // 显示详情按钮 detailBtn.setVisible(true); - // 显示更新按钮 updateBtn.setVisible(true); - // 显示删除按钮 deleteBtn.setVisible(true); - // 隐藏添加按钮 addBtn.setVisible(false); - // 隐藏历史按钮 historyBtn.setVisible(false); } - // 根据订单编号处理结果 + public void resultOfNumber(String iNumber) { - // 重置标记 this.mark=0; - // 创建订单表格模型 InOrderTM inOrderTM = new InOrderTM(); - // 根据订单编号查询结果 inOrderTM.resultOfNumber(iNumber); - // 更新表格模型 inTable.setModel(inOrderTM); - // 清空底部左侧面板 bottomPanelLeft.removeAll(); - // 创建并初始化显示记录数的标签 countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); - // 调用OrderView设置按钮可见性 OrderView(); } - // 根据状态处理查询结果 public void resultOfFindStatus(int catalog) { - // 重置标记 this.mark=0; - // 创建订单表格模型 InOrderTM inOrderTM = new InOrderTM(); - // 根据状态查询结果 inOrderTM.resultOfFind(catalog); - // 更新表格模型 inTable.setModel(inOrderTM); - // 清空底部左侧面板 bottomPanelLeft.removeAll(); - // 创建并初始化显示记录数的标签 countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); - // 调用OrderView设置按钮可见性 OrderView(); } - // 刷新缓冲区,更新表格数据 + + /*刷新*/ public void refreshBuffer(Vector v) { - // 设置标记 this.mark=1; - // 创建商品表格模型 + InTableModel inTableModel = new InTableModel(v); - // 更新表格模型 inTable.setModel(inTableModel); - // 清空底部左侧面板 bottomPanelLeft.removeAll(); - // 创建并初始化显示商品种类和总价的标签 countInfoLabel = new JLabel("商品种类:"+inTableModel.getRowCount()+",总价:"+inTableModel.getAllPrice()); - // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); - // 隐藏返回按钮 backBtn.setVisible(false); - // 隐藏详情按钮 detailBtn.setVisible(false); - // 显示历史按钮 historyBtn.setVisible(true); - // 显示更新按钮 updateBtn.setVisible(true); - // 显示添加按钮 addBtn.setVisible(true); - // 显示删除按钮 deleteBtn.setVisible(true); - // 更新总价和行数 allPrice = inTableModel.getAllPrice(); row = inTableModel.getRowCount(); } - - - - - /* 调出进货订单表 */ + /*调出进货订单表*/ public void InOrderRecord() { - // 设置标记为0 this.mark=0; - // 创建进货订单表格模型 InOrderTM inOrderTM = new InOrderTM(); - // 获取所有进货订单记录 inOrderTM.allInOrderRecord(); - // 更新表格模型 inTable.setModel(inOrderTM); - // 清空底部左侧面板 bottomPanelLeft.removeAll(); - // 创建并初始化显示记录数的标签 countInfoLabel = new JLabel("共"+inOrderTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); - // 调用OrderView设置按钮可见性 OrderView(); + } - /* 根据订单号调出进货订单记录 */ + /*调出进货订单表*/ public void InRecord(String iNumber) { - // 设置标记为2 this.mark=2; - // 创建进货记录表格模型,并传入订单号 InRecordTM inRecordTM = new InRecordTM(iNumber); - // 根据订单号查询进货记录 inRecordTM.findInRecordByINumber(); - // 更新表格模型 inTable.setModel(inRecordTM); - // 清空底部左侧面板 bottomPanelLeft.removeAll(); - // 创建并初始化显示订单号和记录数的标签 countInfoLabel = new JLabel("订单号@"+iNumber+"共有"+inRecordTM.getRowCount()+"条记录"); - // 将标签添加到底部左侧面板 bottomPanelLeft.add(countInfoLabel); - // 设置按钮可见性 backBtn.setVisible(true); detailBtn.setVisible(false); updateBtn.setVisible(false); @@ -497,270 +331,183 @@ public class InView extends JPanel implements ActionListener{ historyBtn.setVisible(false); deleteBtn.setVisible(false); - - } -} - - -/* 按钮监听事件 */ -@Override -public void actionPerformed(ActionEvent e) { - // 实例化购物车 - BufferImpl = new BufferImpl();/* 获得购物车 */ - // 获取事件源 + /*按钮监听时间*/ + @Override + public void actionPerformed(ActionEvent e) { + BufferImpl = new BufferImpl();/*获得购物车*/ Object source = e.getSource(); - // 如果事件源是搜索按钮 if(searchBtn==source) { - // 获取搜索框中的文本 - String number = nameSearchTF.getText(); - // 打印搜索后的订单号 - System.out.println("搜索后的订单:"+number); - // 处理搜索结果 - resultOfNumber(number); + String number = nameSearchTF.getText(); + System.out.println("搜索后的订单:"+number); + resultOfNumber(number); } - // 如果事件源是添加按钮 - else if(addBtn==source) {/* 添加 */ - // 创建并显示添加对话框 - InDialog outDialog = new InDialog(jFrame,v,user); - outDialog.setVisible(true); - // 获取对话框中的向量并更新 - v=outDialog.getVector(); - // 刷新购物车 - refreshBuffer(v); + else if(addBtn==source) {/*添加*/ + InDialog outDialog = new InDialog(jFrame,v,user); + outDialog.setVisible(true); + v=outDialog.getVector(); + refreshBuffer(v); } - // 如果事件源是更新按钮 - else if(updateBtn==source) {/* 更新 */ - // 打印当前标记 - System.out.println("mark="+mark); - // 获取选中行的索引 - int rowIndex = inTable.getSelectedRow(); - // 如果没有选中行,弹出提示 - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); - return; - } - // 如果标记为1,表示进货表修改 - if(mark==1) { - // 获取选中行的ID - String id =(String) inTable.getValueAt(rowIndex,0); - // 创建并显示更改数量对话框 - ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"In",v); - changesumDialog.setVisible(true); - // 获取对话框中的向量并更新 - v = changesumDialog.getVector(); - // 打印更改状态后的向量大小 - System.out.println("更改状态后v.size="+v.size()); - // 刷新购物车 - refreshBuffer(v); - } + else if(updateBtn==source) {/*更新*/ + System.out.println("mark="+mark); + int rowIndex = inTable.getSelectedRow(); + if(rowIndex==-1) { + JOptionPane.showMessageDialog(this,"请选中一条进行更改数量"); + return; + } + //进货表修改 + if(mark==1) { + String id =(String) inTable.getValueAt(rowIndex,0); + ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame,id,"In",v); + changesumDialog.setVisible(true); + v = changesumDialog.getVector(); + System.out.println("更改状态后v.size="+v.size()); + refreshBuffer(v); + } + + //inOrder修改,修改状态 + else if(mark==0) { + String iNumber =(String) inTable.getValueAt(rowIndex,0); + String status =(String) inTable.getValueAt(rowIndex,4); + if(status.equals("已入库")) { + JOptionPane.showMessageDialog(this,"订单上的货物已入库无法修改状态","提示",JOptionPane.INFORMATION_MESSAGE); + return; + } + + ChangeStatusDialog changeStatusDialog = new ChangeStatusDialog(jFrame,iNumber,status); + changeStatusDialog.setVisible(true); + MainView.refreshRemind(); + HomeView.refreshHome(); + InOrderRecord(); + } - // 如果标记为0,表示inOrder修改,修改状态 - else if(mark==0) { - // 获取选中行的订单号和状态 - String iNumber =(String) inTable.getValueAt(rowIndex,0); - String status =(String) inTable.getValueAt(rowIndex,4); - // 如果状态为已入库,弹出提示 - if(status.equals("已入库")) { - JOptionPane.showMessageDialog(this,"订单上的货物已入库无法修改状态","提示",JOptionPane.INFORMATION_MESSAGE); - return; } - // 创建并显示更改状态对话框 - ChangeStatusDialog changeStatusDialog = new ChangeStatusDialog(jFrame,iNumber,status); - changeStatusDialog.setVisible(true); - // 刷新提醒和首页视图 - MainView.refreshRemind(); - HomeView.refreshHome(); - // 重新加载进货订单记录 - InOrderRecord(); - } - } - - // 如果事件源是删除按钮 else if(deleteBtn==source) { - // 获取选中行的索引 - int rowIndex = inTable.getSelectedRow(); - // 如果没有选中行,弹出提示 - if(rowIndex==-1) { - JOptionPane.showMessageDialog(this,"请选中一条"); - return; - - } - - - - /* 删除进货表的记录 */ - if(mark==1) { - // 打印提示信息 - System.out.println("删除进货表"); - // 获取选中行的ID - String id =(String) inTable.getValueAt(rowIndex,0); - // 显示确认删除对话框 - int select = JOptionPane.showConfirmDialog(this,"是否删除id为"+id+"的记录","提示",JOptionPane.YES_NO_OPTION); - // 如果用户选择是 - if(select==JOptionPane.YES_OPTION) {/*选择是*/ - // 遍历向量v,查找并删除对应ID的记录 - for(int i =0;i(); - // 刷新购物车显示 - refreshBuffer(v); - // 刷新主视图提醒 - MainView.refreshRemind(); - // 显示发送邮件成功提示 - JOptionPane.showConfirmDialog(null,"发送邮件成功\r\n订单号:"+s[0]+"\r\n负责人:"+uname, "提示", JOptionPane.YES_OPTION); + /*获得时间和订单号,s[0]为订单号,s[1]为时间*/ + String[] s =TimeAndOrder.TimeAndOrder(uname); + /*往订单表插入一条记录*/ + inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); + inOrderImpl.InsertInOrder(s[0], allPrice, s[1],uname ,2); - } + /*往inRecord表添加数据*/ + inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); + for(Production p:v) {/*往inRecord表添加数据*/ + inRecordImpl.insertInRecord(s[0], p); + } -// 如果事件源是退出按钮 - }else if(exitBtn==source) { - // 显示确认对话框,询问是否退出并清空购物车 - int res = JOptionPane.showConfirmDialog(null,"确定退出并清空购物车吗", "结账", JOptionPane.YES_NO_OPTION); - // 如果用户选择是,即退出 - if(res==JOptionPane.YES_OPTION)/*如果退出*/{ - // 将购物车数组置空 - v=new Vector();/*将数组置空*/ - // 刷新购物车显示 - refreshBuffer(v); - // 显示退出成功提示 - JOptionPane.showConfirmDialog(null,"退出成功", "提示", JOptionPane.PLAIN_MESSAGE); + /*生成订单文本*/ + CreateOrder createOrder = new CreateOrder(); + String OrderText = createOrder.CreateOrder(v, s[0], s[1], allPrice,uname); + try {/*发送邮件*/ + SendQQMailUtil QQEmail = new SendQQMailUtil("sender@qq.com","自行获取 SMTP 授权码","receiver@qq.com","@新民超市进货需求申请",OrderText); + } catch (MessagingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + v=new Vector(); + refreshBuffer(v); + MainView.refreshRemind(); + JOptionPane.showConfirmDialog(null,"发送邮件成功\r\n订单号:"+s[0]+"\r\n负责人:"+uname, "提示", JOptionPane.YES_OPTION); - } + } - } + } + }else if(exitBtn==source) { + int res = JOptionPane.showConfirmDialog(null,"确定退出并清空购物车吗", "结账", JOptionPane.YES_NO_OPTION); + if(res==JOptionPane.YES_OPTION)/*如果退出*/{ + v=new Vector();/*将数组置空*/ + refreshBuffer(v); + JOptionPane.showConfirmDialog(null,"退出成功", "提示", JOptionPane.PLAIN_MESSAGE); + } } - - } +} diff --git a/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java b/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java index 42871db..d41bef9 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/ProdCatalogView.java @@ -1,121 +1,104 @@ -package com.lingnan.supermarket.view; // 定义包名,包含视图相关的类 - -import java.awt.BorderLayout; // 导入用于窗口布局的BorderLayout类 -import java.awt.Color; // 导入用于颜色处理的Color类 -import java.awt.FlowLayout; // 导入用于面板布局的FlowLayout类 -import java.awt.event.ActionEvent; // 导入用于处理动作事件的ActionEvent类 -import java.awt.event.ActionListener; // 导入用于监听动作事件的ActionListener接口 -import java.awt.event.ItemEvent; // 导入用于处理项目事件的ItemEvent类 -import java.awt.event.ItemListener; // 导入用于监听项目事件的ItemListener接口 -import java.util.ArrayList; // 导入用于数组列表的ArrayList类 - -import javax.swing.ImageIcon; // 导入用于处理图像图标的ImageIcon类 -import javax.swing.JButton; // 导入用于创建按钮的JButton类 -import javax.swing.JComboBox; // 导入用于创建组合框的JComboBox类 -import javax.swing.JFrame; // 导入用于创建窗口的JFrame类 -import javax.swing.JLabel; // 导入用于创建标签的JLabel类 -import javax.swing.JPanel; // 导入用于创建面板的JPanel类 -import javax.swing.JScrollPane; // 导入用于创建滚动窗格的JScrollPane类 -import javax.swing.JTable; // 导入用于创建表格的JTable类 -import javax.swing.JTextField; // 导入用于创建文本字段的JTextField类 - -import com.lingnan.supermarket.dao.impl.prodCatalogImpl; // 导入产品目录数据访问层的实现类 -import com.lingnan.supermarket.dialog.UserDialog; // 导入用户对话框类 -import com.lingnan.supermarket.dto.ProdCatalog; // 导入产品目录数据传输对象 -import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 -import com.lingnan.supermarket.dto.User; // 导入用户数据传输对象 -import com.lingnan.supermarket.table.ProdCatalogTM; // 导入产品目录表格模型 -import com.lingnan.supermarket.table.StorageTableModel; // 导入存储表格模型 -import com.lingnan.supermarket.table.UserTableModel; // 导入用户表格模型 -import com.lingnan.supermarket.utils.FontUtil; // 导入字体工具类 - -public class ProdCatalogView extends JPanel { // 创建一个公共类ProdCatalogView,继承自JPanel +package com.lingnan.supermarket.view; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.ArrayList; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; + +import com.lingnan.supermarket.dao.impl.prodCatalogImpl; +import com.lingnan.supermarket.dialog.UserDialog; +import com.lingnan.supermarket.dto.ProdCatalog; +import com.lingnan.supermarket.dto.Production; +import com.lingnan.supermarket.dto.User; +import com.lingnan.supermarket.table.ProdCatalogTM; +import com.lingnan.supermarket.table.StorageTableModel; +import com.lingnan.supermarket.table.UserTableModel; +import com.lingnan.supermarket.utils.FontUtil; + +public class ProdCatalogView extends JPanel { // 上面 - private JPanel toolBarPanel; // 工具栏面板 + private JPanel toolBarPanel; - private JPanel searchPanel; // 搜索面板 - private JLabel logLabel, locationLabel; // 日志标签和位置标签 - private JTextField nameSearchTF; // 名称搜索文本字段 - private JButton searchBtn; // 搜索按钮 + private JPanel searchPanel; + private JLabel logLabel, locationLabel; + private JTextField nameSearchTF; + private JButton searchBtn; - private JPanel opePanel; // 操作面板 - private JButton addBtn, updateBtn, deleteBtn; // 添加、更新、删除按钮 + private JPanel opePanel; + private JButton addBtn, updateBtn, deleteBtn; - private String catalog = "0"; // 目录字符串,默认为"0" - private JComboBox combo; // 字符串组合框 - private String log[]=null; // 日志数组 - private ArrayListalog=null; // 日志数组列表 - private ProdCatalogTM prodCatalogTM; // 产品目录表格模型 - private ProdCatalog pc; // 产品目录对象 - private prodCatalogImpl pci; // 产品目录数据访问层实现对象 + private String catalog = "0"; + private JComboBox combo; + private String log[]=null; + private ArrayListalog=null; + private ProdCatalogTM prodCatalogTM; + private ProdCatalog pc; + private prodCatalogImpl pci; // 中间 - private JScrollPane tableScrollPane; // 表格滚动窗格 - private JTable prodCatalogTable; // 产品目录表格 + private JScrollPane tableScrollPane; + private JTable prodCatalogTable; // 下面 - private JPanel bottomPanel; // 底部面板 - private JLabel countInfoLabel; // 记录数信息标签 + private JPanel bottomPanel; + private JLabel countInfoLabel; - private JFrame jFrame; // 窗口对象 + private JFrame jFrame; - public ProdCatalogView(JFrame jFrame) { // ProdCatalogView构造方法,接收一个JFrame参数 - this.setLayout(new BorderLayout()); // 设置面板布局为BorderLayout - initView(); // 初始化视图 - this.jFrame = jFrame; // 将传入的JFrame对象赋值给成员变量jFrame + public ProdCatalogView(JFrame jFrame) { + this.setLayout(new BorderLayout()); + initView(); + this.jFrame = jFrame; } private void initView() { - // 创建一个面板,使用边界布局管理器 toolBarPanel = new JPanel(new BorderLayout()); - // 创建搜索面板,使用流布局管理器,对齐方式为左对齐 searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - // 创建并初始化商品目录标签 locationLabel = new JLabel("商品目录"); - // 设置标签字体 locationLabel.setFont(new FontUtil().userFont); - // 设置标签前景色 locationLabel.setForeground(new Color(18, 150, 219)); - // 创建分类标签 logLabel = new JLabel("分类"); - // 创建文本框,用于输入搜索内容,指定宽度为10 nameSearchTF = new JTextField(10); - // 创建搜索按钮,并指定图标 searchBtn = new JButton("搜索", new ImageIcon("static\\icon\\search.png")); - // 创建操作面板,使用流布局管理器,对齐方式为右对齐 // opePanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); -// // 创建并初始化按钮,指定图标 // addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); // updateBtn = new JButton(new ImageIcon("static\\icon\\update.png")); // deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); -// -// // 为按钮添加事件监听器 + // addBtn.addActionListener(this); // updateBtn.addActionListener(this); // deleteBtn.addActionListener(this); -// -// // 将按钮添加到操作面板 + // opePanel.add(addBtn); // opePanel.add(updateBtn); // opePanel.add(deleteBtn); - // 实例化商品目录实现类 pci=new prodCatalogImpl(); - // 查找所有商品目录名称 this.alog=pci.findNameProdCatalog(); - // 创建字符串数组,用于存储商品目录名称 this.log=new String[alog.size()]; - // 将商品目录名称填充到数组 for(int i=0;i(log); - // 为下拉列表添加项目监听器 combo.addItemListener(new MyItemListener()); - // 将标签、下拉列表添加到搜索面板 searchPanel.add(locationLabel); searchPanel.add(logLabel); searchPanel.add(combo); /* - * 将文本框和搜索按钮添加到搜索面板,当前被注释 - * searchPanel.add(nameSearchTF); - * searchPanel.add(searchBtn); + * searchPanel.add(nameSearchTF); searchPanel.add(searchBtn); */ - // 将搜索面板添加到工具栏面板的西边 toolBarPanel.add(searchPanel, "West"); - // 将操作面板添加到工具栏面板的东边,当前被注释 // toolBarPanel.add(opePanel, "East"); - // 创建表格模型,并获取所有数据 + // 中间表格 prodCatalogTM = new ProdCatalogTM(); prodCatalogTM.all(); - // 创建表格,使用表格模型 prodCatalogTable = new JTable(prodCatalogTM); - // 设置表格字体 prodCatalogTable.setFont(FontUtil.tableFont); - // 设置表格行高 prodCatalogTable.setRowHeight(50); - // 创建滚动面板,并将表格添加到其中 tableScrollPane = new JScrollPane(prodCatalogTable); - } + // 下面 + bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + countInfoLabel = new JLabel("总共" + prodCatalogTable.getRowCount() + "条"); + bottomPanel.add(countInfoLabel); + this.add(toolBarPanel, "North"); + this.add(tableScrollPane, "Center");/* 将表格放到中间 */ + this.add(bottomPanel, "South"); + + setVisible(true); + } - // 下面 - // 创建底部面板,使用流布局管理器,对齐方式为左对齐 - bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); -// 创建并初始化显示总记录数的标签 - countInfoLabel = new JLabel("总共" + prodCatalogTable.getRowCount() + "条"); -// 将记录数标签添加到底部面板 -bottomPanel.add(countInfoLabel); - -// 将工具栏面板添加到当前窗口的北部 -this.add(toolBarPanel, "North"); -// 将表格滚动面板添加到当前窗口的中间 -this.add(tableScrollPane, "Center");/* 将表格放到中间 */ -// 将底部面板添加到当前窗口的南部 -this.add(bottomPanel, "South"); - - // 设置当前窗口为可见 - setVisible(true); -} - -// 以下是注释掉的代码,实现按钮的事件监听 // @Override // public void actionPerformed(ActionEvent e) { // Object source = e.getSource(); @@ -187,73 +148,47 @@ this.add(bottomPanel, "South"); // UserDialog userDialog = new UserDialog(jFrame); // userDialog.setVisible(true); // } else if (updateBtn == source) { -// // 更新按钮的逻辑 +// // } else if (deleteBtn == source) { -// // 删除按钮的逻辑 +// // } // } -// 内部类,实现下拉列表的项目监听器 -public class MyItemListener implements ItemListener { - - @Override - // 当下拉列表中的项目状态改变时触发此方法 - public void itemStateChanged(ItemEvent e) { - // 获取事件源,即下拉列表 - JComboBox cb = (JComboBox) e.getSource(); - // 获取当前选中的商品目录名称 - String catalog1 = (String) cb.getSelectedItem(); - // 实例化商品目录实现类 - pci =new prodCatalogImpl(); - // 遍历商品目录名称数组,找到匹配的名称 - for(int i=0;i