YangeIT大约 18 分钟JDKIdeaSwingGui

1. 库存管理

1.1. 库存管理数据库设计

前言

库存数据库表设计如下:

-- 如果存在就删除
DROP TABLE IF EXISTS t_inventory;
DROP TABLE IF EXISTS t_inventory_flow;


-- 库存表
CREATE TABLE `t_inventory` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '库存ID',
  `medicine_code` varchar(50) NOT NULL COMMENT '药品编码',
  `medicine_name` varchar(200) NOT NULL COMMENT '药品名字(冗余字段,方便查看)',
  `batch_number` varchar(100) NOT NULL COMMENT '批次号',
  `expiry_date` date NOT NULL COMMENT '有效期至',
  `quantity` int(11) NOT NULL DEFAULT '0' COMMENT '当前库存数量',
  `cost_price` decimal(10,2) DEFAULT NULL COMMENT '成本价(元)',
  `status` tinyint(1) DEFAULT '1' COMMENT '状态(1:正常 0:冻结 -1:已销毁)',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_medicine_batch` (`medicine_code`, `batch_number`),
  KEY `idx_medicine_name` (`medicine_name`),  -- 新增药品名字索引
  KEY `idx_expiry_date` (`expiry_date`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='库存表(含药品名字冗余)';

-- 库存流水表(含药品名字冗余)
CREATE TABLE `t_inventory_flow` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '流水ID',
  `medicine_code` varchar(50) NOT NULL COMMENT '药品编码',
  `medicine_name` varchar(200) NOT NULL COMMENT '药品名字(冗余字段,方便查看)',
  `batch_number` varchar(100) NOT NULL COMMENT '批次号',
  `operation_type` varchar(20) NOT NULL COMMENT '操作类型:入库、出库、调整',
  `quantity_change` int(11) NOT NULL COMMENT '变动数量(正数为增加,负数为减少)',
  `operator_name` varchar(20) NOT NULL COMMENT '操作人',
  `operation_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
  `remark` varchar(200) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `idx_medicine_batch` (`medicine_code`, `batch_number`),
  KEY `idx_medicine_name` (`medicine_name`),  -- 药品名字索引
  KEY `idx_time` (`operation_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='库存流水表(含药品名字冗余)';


INSERT INTO `t_inventory` (
  `medicine_code`, 
  `medicine_name`, 
  `batch_number`, 
  `expiry_date`, 
  `quantity`, 
  `cost_price`, 
  `status`, 
  `create_time`
) VALUES
-- 阿莫西林胶囊 2 个批次
('YP2023001', '阿莫西林胶囊', 'BATCH202401001', '2027-01-15', 120, 9.50, 1, '2025-01-10 08:30:00'),
('YP2023001', '阿莫西林胶囊', 'BATCH202402001', '2027-02-20', 80, 9.80, 1, '2025-02-05 09:00:00'),

-- 头孢拉定胶囊 1 个批次
('YP2023002', '头孢拉定胶囊', 'BATCH202403001', '2027-03-10', 150, 6.50, 1, '2025-03-12 10:15:00'),

-- 左氧氟沙星片 1 个批次
('YP2023003', '左氧氟沙星片', 'BATCH202404001', '2025-04-18', 60, 12.00, 1, '2025-04-20 14:00:00'),

-- 阿奇霉素分散片 1 个批次
('YP2023004', '阿奇霉素分散片', 'BATCH202405001', '2026-01-19', 40, 22.00, 1, '2025-05-15 11:45:00'),

-- 硝苯地平控释片 1 个批次
('YP2023006', '硝苯地平控释片', 'BATCH202406001', '2027-06-30', 90, 28.00, 1, '2025-06-18 16:20:00'),

-- 阿司匹林肠溶片 1 个批次
('YP2023007', '阿司匹林肠溶片', 'BATCH202407001', '2027-07-22', 200, 11.00, 1, '2025-07-10 13:10:00'),

-- 奥美拉唑肠溶胶囊 1 个批次
('YP2023011', '奥美拉唑肠溶胶囊', 'BATCH202408001', '2027-08-14', 75, 18.00, 1, '2025-08-05 09:30:00'),

-- 感冒清热颗粒 1 个批次
('YP2023016', '感冒清热颗粒', 'BATCH202409001', '2027-09-01', 110, 13.00, 1, '2025-09-02 15:00:00'),

-- 板蓝根颗粒 2 个批次
('YP2023017', '板蓝根颗粒', 'BATCH202410001', '2027-10-10', 130, 9.00, 1, '2025-10-08 08:40:00'),
('YP2023017', '板蓝根颗粒', 'BATCH202411001', '2027-11-12', 95, 9.20, 1, '2025-11-01 10:00:00'),

-- 牛黄解毒片 1 个批次
('YP2023021', '牛黄解毒片', 'BATCH202412001', '2027-12-20', 180, 4.50, 1, '2025-12-05 17:00:00'),

-- 六味地黄丸 1 个批次
('YP2023026', '六味地黄丸', 'BATCH202501001', '2028-01-18', 65, 14.00, 1, '2026-01-06 09:55:00');

INSERT INTO `t_inventory_flow` (
  `medicine_code`,
  `medicine_name`,
  `batch_number`,
  `operation_type`,
  `quantity_change`,
  `operator_name`,
  `operation_time`,
  `remark`
) VALUES
-- 阿莫西林胶囊 BATCH202401001 入库
('YP2023001', '阿莫西林胶囊', 'BATCH202401001', '入库', 120, '管理员', '2025-01-10 08:35:00', '采购入库'),
-- 阿莫西林胶囊 BATCH202401001 出库
('YP2023001', '阿莫西林胶囊', 'BATCH202401001', '出库', -30, '张三', '2025-01-15 10:00:00', '门诊销售'),

-- 头孢拉定胶囊 入库
('YP2023002', '头孢拉定胶囊', 'BATCH202403001', '入库', 150, '管理员', '2025-03-12 10:20:00', '采购入库'),
-- 头孢拉定胶囊 出库
('YP2023002', '头孢拉定胶囊', 'BATCH202403001', '出库', -50, '李四', '2025-03-20 14:30:00', '住院部领用'),

-- 左氧氟沙星片 入库
('YP2023003', '左氧氟沙星片', 'BATCH202404001', '入库', 60, '管理员', '2025-04-20 14:10:00', '采购入库'),

-- 阿奇霉素分散片 入库
('YP2023004', '阿奇霉素分散片', 'BATCH202405001', '入库', 40, '管理员', '2025-05-15 11:50:00', '采购入库'),
-- 阿奇霉素分散片 出库
('YP2023004', '阿奇霉素分散片', 'BATCH202405001', '出库', -10, '王五', '2025-05-18 09:00:00', '门诊销售'),

-- 硝苯地平控释片 入库
('YP2023006', '硝苯地平控释片', 'BATCH202406001', '入库', 90, '管理员', '2025-06-18 16:25:00', '采购入库'),

-- 阿司匹林肠溶片 入库
('YP2023007', '阿司匹林肠溶片', 'BATCH202407001', '入库', 200, '管理员', '2025-07-10 13:15:00', '采购入库'),
-- 阿司匹林肠溶片 出库
('YP2023007', '阿司匹林肠溶片', 'BATCH202407001', '出库', -70, '赵六', '2025-07-12 15:00:00', '门诊销售'),

-- 奥美拉唑肠溶胶囊 入库
('YP2023011', '奥美拉唑肠溶胶囊', 'BATCH202408001', '入库', 75, '管理员', '2025-08-05 09:35:00', '采购入库'),

-- 感冒清热颗粒 入库
('YP2023016', '感冒清热颗粒', 'BATCH202409001', '入库', 110, '管理员', '2025-09-02 15:10:00', '采购入库'),

-- 板蓝根颗粒 BATCH202410001 入库
('YP2023017', '板蓝根颗粒', 'BATCH202410001', '入库', 130, '管理员', '2025-10-08 08:45:00', '采购入库'),
-- 板蓝根颗粒 BATCH202410001 出库
('YP2023017', '板蓝根颗粒', 'BATCH202410001', '出库', -20, '张三', '2025-10-12 11:00:00', '门诊销售'),

-- 板蓝根颗粒 BATCH202411001 入库
('YP2023017', '板蓝根颗粒', 'BATCH202411001', '入库', 95, '管理员', '2025-11-01 10:05:00', '采购入库'),

-- 牛黄解毒片 入库
('YP2023021', '牛黄解毒片', 'BATCH202412001', '入库', 180, '管理员', '2025-12-05 17:10:00', '采购入库'),
-- 牛黄解毒片 调整(盘盈)
('YP2023021', '牛黄解毒片', 'BATCH202412001', '调整', 5, '管理员', '2025-12-10 09:00:00', '盘点盘盈'),

-- 六味地黄丸 入库
('YP2023026', '六味地黄丸', 'BATCH202501001', '入库', 65, '管理员', '2026-01-06 10:00:00', '采购入库'),
-- 六味地黄丸 出库
('YP2023026', '六味地黄丸', 'BATCH202501001', '出库', -15, '李四', '2026-01-08 14:20:00', '门诊销售');

库存表和库存流水表以及药品表的关系如下:👇

image
image

接下来,使用MyBatisX或者AI,或者群里的文件,完成Mapper,Mapper.xml,实体类的创建:

image
image

然后参考之前的XXXDao,完成InventoryDao和InventoryFlowDao的开发:👇

public class TInventoryDao {
    private SqlSessionFactory sqlSessionFactory;

    public TInventoryDao() {
        sqlSessionFactory = MybatisConfig.getSqlSessionFactory();
    }


   
}

public class TInventoryFlowDao {
    private SqlSessionFactory sqlSessionFactory;

    public TInventoryDao() {
        sqlSessionFactory = MybatisConfig.getSqlSessionFactory();
    }


   
}

不用一次次写好,诸多方法,后期根据需求进行补充

1.2. 库存管理模块UI开发

前言

之前做过库存管理的空白模块,现在需要根据需求文档进行UI开发,提示词如下👇

TInventoryUI.java 开发需求文档(修订版)

库存数据库表设计如下:


-- 库存表
CREATE TABLE `t_inventory` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '库存ID',
  `medicine_code` varchar(50) NOT NULL COMMENT '药品编码',
  `medicine_name` varchar(200) NOT NULL COMMENT '药品名字',
  `batch_number` varchar(100) NOT NULL COMMENT '批次号',
  `expiry_date` date NOT NULL COMMENT '有效期至',
  `quantity` int(11) NOT NULL DEFAULT '0' COMMENT '当前库存数量',
  `cost_price` decimal(10,2) DEFAULT NULL COMMENT '成本价(元)',
  `status` tinyint(1) DEFAULT '1' COMMENT '状态(1:正常 0:冻结 -1:已销毁)',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_medicine_batch` (`medicine_code`, `batch_number`),
  KEY `idx_medicine_name` (`medicine_name`),  -- 新增药品名字索引
  KEY `idx_expiry_date` (`expiry_date`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='库存表(含药品名字冗余)';

-- 库存流水表
CREATE TABLE `t_inventory_flow` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '流水ID',
  `medicine_code` varchar(50) NOT NULL COMMENT '药品编码',
  `medicine_name` varchar(200) NOT NULL COMMENT '药品名字',
  `batch_number` varchar(100) NOT NULL COMMENT '批次号',
  `operation_type` varchar(20) NOT NULL COMMENT '操作类型:入库、出库、调整',
  `quantity_change` int(11) NOT NULL COMMENT '变动数量(正数为增加,负数为减少)',
  `operator_name` varchar(20) NOT NULL COMMENT '操作人',
  `operation_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
  PRIMARY KEY (`id`),
  KEY `idx_medicine_batch` (`medicine_code`, `batch_number`),
  KEY `idx_medicine_name` (`medicine_name`),  -- 药品名字索引
  KEY `idx_time` (`operation_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='库存流水表(含药品名字冗余)';

-- 药品表
CREATE TABLE `t_medicine` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '药品ID',
  `medicine_code` varchar(50) NOT NULL COMMENT '药品编码(如"YP2023001")',
  `medicine_name` varchar(200) NOT NULL COMMENT '药品通用名称',
  `specification` varchar(100) DEFAULT NULL COMMENT '规格(如"0.25g*24片")',
  `manufacturer` varchar(200) DEFAULT NULL COMMENT '生产企业名称',
  `approval_number` varchar(100) DEFAULT NULL COMMENT '国家药监局批准文号',
  `reference_price` decimal(10,2) DEFAULT NULL COMMENT '参考售价(元)',
  `category_code` varchar(50) DEFAULT NULL COMMENT '所属分类编码(逻辑外键,关联 t_category.category_code)',
  `status` tinyint(1) DEFAULT '1' COMMENT '状态(0-停用/1-在用)',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_medicine_code` (`medicine_code`),
  UNIQUE KEY `uk_approval_number` (`approval_number`),
  KEY `idx_category_code` (`category_code`)  -- 普通索引提升按分类编码查询的性能
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COMMENT='药品表';




一、项目环境

• 所属模块:HomeUI.java 内容区嵌入的子界面(通过侧边栏"库存管理"菜单切换显示);  
• 技术:Java Swing,风格与现有界面(UserUIWelcomeUIHomeUITMedicineUI)一致;  
• 数据依赖:需加载数据(模拟从数据库查询,包含药品表t_medicine和分类表t_category的各个字段)。  

二、界面设计(苹果风格:简洁、留白、色调统一、控件圆润)

1. 整体布局

采用 BorderLayout + FlowLayout + 边距控制,分区明确:  
• 顶部:检索区(左:检索框+检索按钮;右:入库按钮+出库按钮);  
• 中部:表格区(占满剩余空间,带滚动条);  
• 整体背景白色,四周留白舒适(如 EmptyBorder(10, 10, 10, 10))。  

2. 检索与操作区(顶部唯一行)

• 左侧:检索组件  
  • 检索输入框:宽度约 180px,提示文字"请输入药品名称/编码/批次号batch_number",无边框(或浅灰细边框),圆角(6px);
  • 预警状态下拉框:宽度约 120px,下拉选项"全部""已过期""即将过期""低库存",默认"全部",无边框(或浅灰细边框),圆角(6px)
  • 存储位置输入框:宽度约 120px,提示文字"存储位置",无边框(或浅灰细边框),圆角(6px)
  • 检索按钮:文字"检索",浅灰背景(默认)、悬停加深、点击激活变色,圆角矩形,与输入框间距 8px。
  • 重置按钮:文字"重置",浅灰背景(默认)、悬停加深、点击激活变色,圆角矩形,与输入框间距 8px。 
• 右侧:出入库按钮组  
  • 入库按钮:文字"入库",样式同检索按钮(统一按钮风格),与左侧检索组件间距 16px。  
  • 出库按钮:文字"出库",样式同检索按钮(统一按钮风格),与入库按钮间距 8px。  
• 布局:用 FlowLayout 横向排列,居中对齐,整体区域背景白色,高度约 50px(含内边距)。  

3. 表格区(第二行)

• 表格组件:JTable + JScrollPane(带垂直滚动条,无水平滚动条,列宽自适应内容);  
• 表头字段(按顺序):  
  预警状态 药品编码 药品名称 规格 批次号 有效期至 库存数量 单位 成本价 存储位置 操作
• 操作列:每行包含"查看流水""调整库存""编辑信息"3个按钮(文字按钮,样式同检索按钮,间距 2,列宽固定约 120px,按钮高度和列一致);  
• 表格样式:  
  • 表头:浅灰背景,深灰文字,加粗,居中对齐;
  • 内容行:白色背景,深灰文字,居中对齐;
  • 预警状态列:彩色标签显示(已过期-红色、即将过期-橙色、低库存-黄色、正常-绿色)
  • 行高:紧凑适中,隔行浅灰背景(斑马纹,提升可读性);
  • 边框:表格外框浅灰细边框,单元格间无分隔线(或极浅灰分隔线,符合苹果简洁风格);
  • 列宽:预警状态 80px,序号 20px,其他 100px,剩余的宽度自适应内容
• 按钮:所有的按钮通过一个方法 createButton() 统一初始化样式(如圆角、背景色、字体、边距等),避免重复代码。

三、交互与逻辑

1. 数据加载

• 定义独立方法 loadData():模拟从数据源(如 TInventoryDao)加载数据,返回 List<TInventory>TInventory实体类在cn.yangeit.entity包下,需关联药品表和分类表数据;  
• 页面初始化时自动调用 loadData() 加载数据并刷新表格;  
• 检索按钮点击时,根据输入框关键词、分类、预警状态、存储位置过滤数据,调用 loadData(keyword,warningStatus,location) 重新加载并刷新表格;
• 重置按钮点击时,清空所有筛选条件,重新加载全部数据。

2. 表格初始化

• 定义独立方法 initTable():创建 DefaultTableModel(指定表头字段,操作列设为非 editable),关联 JTable,并设置表格样式(行高、对齐方式、斑马纹、预警状态列渲染器等);
• 数据加载后,将 List<TInventory> 转换为表格行数据,通过 tableModel.setDataVector() 更新表格内容。

3. 按钮交互

• 检索按钮:绑定 ActionListener,获取输入框文本、预警状态、存储位置,调用 loadData(keyword,warningStatus,location) 刷新表格;  
• 重置按钮:绑定 ActionListener,清空所有筛选条件,调用 loadData() 重新加载全部数据;  
• 入库按钮:绑定 ActionListener,点击后打开入库对话框,设计如下:
  • 对话框标题:"药品入库"
  • 表单字段:
    ◦ 药品选择:下拉框(加载所有药品数据,显示"药品名称(药品编码)"格式)
    ◦ 批次号:文本框(可手动输入,或自动生成规则:药品编码+年月日+3位序号)
    ◦ 有效期至:日期选择框
    ◦ 入库数量:数字输入框
    ◦ 单位:下拉框(盒、瓶、支、袋等常用单位)
    ◦ 成本价:数字输入框(支持小数)
    ◦ 存储位置:文本框
    ◦ 业务类型:下拉框(采购、调拨、捐赠、退货等)
    ◦ 业务单号:文本框(可自动生成或手动输入)
    ◦ 备注:多行文本框

  • 按钮:底部"确认入库""取消"按钮
  • 逻辑:选择药品后,自动填充规格、生产企业等信息(只读显示),确认后生成入库记录和库存记录

• 出库按钮:绑定 ActionListener,点击后打出入库对话框,设计如下:
  • 对话框标题:"药品出库"
  • 表单字段:
    ◦ 库存选择:下拉框(加载所有可用库存,显示"药品名称-批次号-存储位置-当前库存"格式)
    ◦ 药品信息区:只读显示药品编码、药品名称、规格、生产企业、成本价
    ◦ 出库数量:数字输入框(不能超过当前库存)
    ◦ 业务类型:下拉框(销售、报损、领用、调拨出库等)
    ◦ 业务单号:文本框
    ◦ 操作员:下拉框(加载用户数据,默认当前登录用户)
    ◦ 备注:多行文本框
  • 按钮:底部"确认出库""取消"按钮
  • 逻辑:选择库存后,自动显示药品基本信息和当前库存数量,确认后生成出库流水记录和更新库存数量

• 查看流水按钮:操作列的每行按钮绑定 ActionListener,点击时获取当前行数据,弹出流水记录对话框显示该药品该批次的出入库记录(表格展示,),记录通过loadinventoryflow(药品编码,批次号)方法获取,显示字段:流水号、业务类型、业务单号、操作员、操作时间、数量、成本价、金额、备注;
• 调整库存按钮:操作列的每行按钮绑定 ActionListener,点击时获取当前行数据,弹出调整对话框(当前数量、调整后数量、调整原因),确认后执行逻辑adjustInventory(当前先留空,仅打印日志);  
• 编辑信息按钮:操作列的每行按钮绑定 ActionListener,点击时获取当前行数据(显示药品信息、批次号、有效期至、库存数量、单位、成本价、存储位置、状态),弹出对应的编辑对话框(确认和取消按钮在最下方),确认后执行逻辑save(当前先留空,仅打印日志)。
• 预警状态渲染:通过自定义 TableCellRenderer 实现预警状态的彩色标签显示;
• 要让 JTable正确显示操作列的按钮(水平布局,查看流水在左,调整库存在中,编辑信息在右),必须通过自定义 TableCellRendererTableCellEditor 实现,操作列背景颜色和其他列一致;
• 出入库/删除/销毁数据完成时,会刷新数据,但容易导致角标越界异常,因此需要结合SwingUtilities.invokeLater安全操作

4. 组件命名规范

• 检索输入框:searchField;  
• 分类下拉框:categoryCombo;  
• 预警状态下拉框:warningStatusCombo;  
• 存储位置输入框:locationField;  
• 检索按钮:searchBtn;  
• 重置按钮:resetBtn;  
• 入库按钮:stockInBtn;  
• 出库按钮:stockOutBtn;  
• 表格:dataTable;  
• 表格模型:tableModel;  
• 滚动面板:scrollPane。  
• 日期组件:使用JDatePicker组件(已经导入了Maven坐标)

四、风格一致性

• 色调:浅灰+白色为主(背景、按钮默认色),深灰文字(表头、内容),按钮悬停/激活色为深一点的浅灰(如 #E0E0E0 → #D0D0D0);  
• 字体:系统无衬线字体(苹方/微软雅黑/SansSerif),表头字号 13px(加粗),内容字号 12px;  
• 预警状态配色:已过期(#FF6B6B)、即将过期(#FFA726)、低库存(#FFEB3B)、正常(#4CAF50);
• 与现有界面统一:按钮样式、对话框风格、背景色与 HomeUI 侧边栏按钮、TMedicineUI 输入框保持一致。  

五、输出要求

1. 提供 TInventoryUI.java 完整可运行代码(含 import、成员变量、构造方法、界面初始化、事件绑定);

2. 代码注释清晰:说明各区域作用(如"检索区""表格区")、主要方法逻辑(如 loadData() 数据加载流程、入库/出库对话框逻辑);

3. 独立方法定义:

   • initTable():初始化表格模型和样式(含预警状态渲染器);  
   • loadData():无参,加载全部库存数据;  
   • loadData(String keyword,String warningStatus,String location):带参,根据条件过滤加载库存数据;  
   • loadMedicineData():获取所有TMedicine药品数据(仅打印日志,造几条药品测试数据);  
   • stockIn():执行入库操作(生成库存记录和流水记录,仅打印日志);  
   • stockOut():执行出库操作(生成流水记录和更新库存,仅打印日志);  
   • save():保存库存数据(仅打印日志);  
   • adjustInventory():调整库存数量(仅打印日志);  
   • createButton():统一创建按钮样式;  
   • showStockInDialog():显示入库对话框;  
   • showStockOutDialog():显示出库对话框。  
   • loadInventoryFlow():获取库存流水记录TInventoryFlow(仅打印日志);

4. 暂不实现业务逻辑(如实际数据查询、保存/删除后端交互),仅模拟数据:
   • 库存测试数据 8-10 条(包含不同预警状态:已过期、即将过期、低库存、正常);  
   • 药品测试数据 5-8 条;  
   • 分类测试数据沿用TMedicineUI的分类数据;  
   • 用户测试数据 3-5 条;  
   • 前端交互(按钮点击日志打印、对话框显示、表单验证提示)。  

5. 表格功能要求:

   • 操作列按钮可点击,点击时打印当前行数据(如"点击查看流水:药品编码XXX,批次号XXX");  
   • 预警状态列显示彩色标签,不同状态不同颜色;  
   • 支持表格排序(点击表头按该列排序);  
   • 支持行选择高亮。  

6. 对话框功能要求:

   • 入库对话框:药品选择后自动填充相关信息,支持批次号自动生成;  
   • 出库对话框:库存选择后显示药品信息和当前库存,出库数量不能大于当前库存;  
   • 表单验证:必填字段检查,数字字段格式检查,日期有效性检查;  
   • 按钮状态:表单验证不通过时,确认按钮置灰不可用。  

7. 核心步骤都要输出 System.out.println() 日志,方便检查,如果有异常,直接输出ex.printStackTrace() 方便在控制台查看,且代码中需要添加中文注释说明

目标:符合 JavaSE Swing 开发规范,界面美观(苹果风格)、交互流畅,数据与界面分离,便于后续扩展业务逻辑,打造专业级的库存管理界面。

将提示词和文件拖拽到tongyi中,点击“一键生成”按钮,即可生成对应的代码。

image
image

1.3 库存管理列表和检索

前言

效果图:👇 image

编码技巧:👇

image
image

1.4 库存入库和出库

前言

入库

效果图:👇

入库1
入库1

编码技巧:👇

入库持久化代码位置
入库持久化代码位置

出库

效果图和代码位置:👇 image

1.5 库存流水

前言

效果图:👇

image
image

编码技巧:👇

image
image

1.6 库存调整

前言

效果图:👇 image

编码技巧:👇

image
image

1.7 库存编辑

前言

效果图:👇

image
image

编码技巧:👇

image
image