Java GUI,mybatis实现资产管理系统

Java GUI——资产管理系统

前言:为了做java课设,学了一手Java GUI。感觉蛮有意思的,写写文章,做个视频记录一下。欢迎大家友善指出我的不足

资产管理系统录制视频,从头敲到尾

模块划分

  • 资产信息管理
    • 资产信息查询 【各种条件查询】
    • 资产信息修改(不能对资产进行领用、归还、报废
    • 资产信息增加
    • 资产信息删除
  • 人员信息管理
    • 人员信息查询 【各种条件查询】
    • 人员信息修改
    • 人员信息增加
    • 人员信息删除
  • 资产设备领用、归还、报废
    • 资产设备操作(仅限于领用、归还、报废
    • 资产设备查询 【各种条件】

数据库创建

资产表

DROP TABLE IF EXISTS `asset_information`;
CREATE TABLE `asset_information`  (`asset_number` int NOT NULL AUTO_INCREMENT COMMENT '资产编号',`asset_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '资产名称',`price` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '价格',`purchase_date` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '购买日期',`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '状态 0-默认 1-领用 2-归还 3-报废',`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`asset_number`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1007 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_croatian_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of asset_information
-- ----------------------------
INSERT INTO `asset_information` VALUES (1000, '潇洒哥', '1000', '', '1', '');
INSERT INTO `asset_information` VALUES (1004, '潇洒哥', '10000', '2020-09-07 14:52:54', '0', '是个蛋');

资产操作流水表

DROP TABLE IF EXISTS `asset_operation_log`;
CREATE TABLE `asset_operation_log`  (`operation_number` int NOT NULL AUTO_INCREMENT COMMENT '操作编号',`operation_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '操作类型 0-默认 1-领用 2-归还 3-报废',`asset_number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '资产编号',`operation_time` datetime NULL DEFAULT NULL COMMENT '操作时间',`recipient` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '操作人',`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`operation_number`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_croatian_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of asset_operation_log
-- ----------------------------
INSERT INTO `asset_operation_log` VALUES (5, '1', '1000', NULL, '1', '无');

人员信息表

DROP TABLE IF EXISTS `personnel_information`;
CREATE TABLE `personnel_information`  (`personnel_number` int NOT NULL AUTO_INCREMENT COMMENT '人员编号',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '姓名',`gender` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '性别',`department` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '部门',`position` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '职位',`other` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '其他信息',PRIMARY KEY (`personnel_number`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_croatian_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of personnel_information
-- ----------------------------
INSERT INTO `personnel_information` VALUES (1, '潇洒哥', '男', '羊村', '大哥', '是个蛋,白色的蛋蛋');
INSERT INTO `personnel_information` VALUES (2, '飞鸽', '男', '鸽子部门', '二弟', '飞哥不鸽');
INSERT INTO `personnel_information` VALUES (3, '老王', '女', '军乐团', '团长', '牛逼啊');

业务流程

在这里插入图片描述

资产被人员操作后,操作记录写入资产记录表。同时根据人员的操作修改资产本身的信息。

代码编写

maven坐标

    <dependencies><!--Servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!-- Lombok 依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>provided</scope></dependency><!--MyBatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.5.2</version></dependency><!--MySQL--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><!--fastjson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.2.RELEASE</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.0</version></plugin></plugins></build>

本项目采用模块划编写。不同模块划分为不同的包,每个包下维护若干类,每个类表示一个UI界面。

模块一:主界面

1.1)创建主界面UI

用代码构建如下界面, 但不具备界面跳转等操作
在这里插入图片描述

在这里插入图片描述

package com.xhf.keshe;import com.xhf.keshe.asset.AssetQuery;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class Main extends JFrame {/*** 窗体宽*/public static final int width = 800;/*** 窗体高*/public static final int height = 600;/*** 基本字体*/public static final Font font = new Font("仿宋", Font.BOLD, 20);/*** 创建基本界面*/private JPanel workspace;public Main() {// 创建窗体setTitle("资产管理系统");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(width, height);// 创建基本界面initBasePanel();// 居中setLocationRelativeTo(null);// 初始化界面initUI();}/*** 创建基本界面*/private void initBasePanel() {this.workspace = new JPanel();workspace.setLayout(null);JLabel jLabel = new JLabel("欢迎使用资产管理系统", JLabel.CENTER);    //创建一个标签jLabel.setBounds(140, 100, 400, 60);jLabel.setFont(Main.font);workspace.add(jLabel, BorderLayout.NORTH);add(workspace);}/*** 初始化界面*/private void initUI() {// 添加菜单栏组件JMenuBar jMenuBar = new JMenuBar();// 在菜单栏(bar)中添加若干菜单(menu)String[] jMenuNameList = {"资产信息管理", "人员信息管理", "资产设备管理"};for (int i = 0; i < 3; ++i) {// jMenu的名称String jMenuName = jMenuNameList[i];JMenu jMenu = new JMenu(jMenuName);// 为menu添加itemaddItemForJMenu(jMenu, jMenuName);// 设置字体jMenu.setFont(font);// 将jMenu添加到bar中jMenuBar.add(jMenu);}// 添加jMenuBarsetJMenuBar(jMenuBar);}/*** 为不同名称的jMenu添加item* @param jMenu* @param jMenuName*/private void addItemForJMenu(JMenu jMenu, String jMenuName) {String[] item1NameList = {"资产信息查询", "资产信息修改", "资产信息增加", "资产信息删除"};String[] item2NameList = {"人员信息查询", "人员信息修改", "人员信息增加", "人员信息删除"};String[] item3NameList = {"资产设备查询", "资产设备操作"};// 判断jMenu名称, 然后添加itemswitch (jMenuName) {case "资产信息管理":for (String s : item1NameList) {addItem(s, jMenu);}break;case "人员信息管理":for (String s : item2NameList) {addItem(s, jMenu);}break;case "资产设备管理":for (String s : item3NameList) {addItem(s, jMenu);}break;}}/*** 创建jMenuItem, 同时取名name, 将item添加到menu中* @param name* @param jMenu*/private void addItem(String name, JMenu jMenu) {JMenuItem item = new JMenuItem(name);item.setFont(font);jMenu.add(item);}public static void main(String[] args) {Main main = new Main();main.setVisible(true);}
}

1.2)增加主界面的界面跳转逻辑

所有的界面跳转,都可以理解为以下几个操作

  1. 触发相应操作
  2. 清除当前界面
  3. 添加需要界面
  4. 界面重新渲染

分析可知,通过点击item,才触发界面跳转的操作。因此我们需要给不同的item上添加相应的监听器,用于执行界面跳转的逻辑

    /*** 创建jMenuItem, 同时取名name, 将item添加到menu中* @param name* @param jMenu*/private void addItem(String name, JMenu jMenu) {JMenuItem item = new JMenuItem(name);// 为不同的item添加监听操作item.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 为不同的item添加不同的界面switch (name) {case "资产信息查询":// 清空当前界面remove(workspace);// 添加想要的界面workspace = new AssetQuery();add(workspace);// 重新绘制界面validate();break;}}});item.setFont(font);jMenu.add(item);}

模块二: 资产界面

2.1)mybatis整合

学习资料

(44条消息) Mybatis基本使用教程(小白向)_敲代码它不香嘛的博客-CSDN博客

入门_MyBatis中文网

2.2.1) 编写mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/keshe1"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><!--后续编写的mapper.xml都需要添加到这里--><mapper resource="mapper/assetInformationMapper.xml"/><mapper resource="mapper/personnelInformationMapper.xml"/><mapper resource="mapper/operateMapper.xml"/></mappers>
</configuration>

如下图,编写mybatis-config.xml【核心配置文件】文件,放置在resources根目录

image-20230710155452363
2.2.2) 获取SqlSession

sqlsession是mybatis中的核心工具,有了它才有后续操作。sqlsession封装jdbc的数据库连接操作

package com.xhf.keshe.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class GetSqlsession {private static InputStream inputStream;//这个方法生成一个生产Sqlsession的工厂,即SqlSessionFactorypublic static SqlSessionFactory createfactory() {{try {inputStream = Resources.getResourceAsStream("mybatis-config.xml");} catch (IOException e) {e.printStackTrace();}}SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//通过把这个工厂return出来,以便后续通过这个工厂获得SqlSession对象return sqlSessionFactory;}//这个方法获得SqlSession对象public static SqlSession getsqlsession(){return createfactory().openSession();}
}
2.2.3)编写实体类
package com.xhf.keshe.asset.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;@Data
@NoArgsConstructor
@AllArgsConstructor
public class AssetInformation implements Serializable {private static final long serialVersionUID = 1L;/*** 资产编号*/private Integer assetNumber;/*** 资产名称*/private String assetName;/*** 价格*/private String price;/*** 购买日期*/private String purchaseDate;/*** 状态 0-默认 1-领用 2-归还 3-报废*/private String status;/*** 备注*/private String remarks;
}
2.2.5) 编写mapper接口
package com.xhf.keshe.asset.mapper;import com.xhf.keshe.asset.entity.AssetInformation;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface AssetInformationMapper {/*** 查询全部信息* @return*/List<AssetInformation> list();/*** 根据id查询数据*/AssetInformation listById(@Param("id") String id);/*** 修改*/void update(@Param("entity") AssetInformation entity);/*** 新增数据*/void insert(@Param("entity") AssetInformation entity);/*** 根据id删除数据*/void deleteById(@Param("id") Integer id);
}
2.2.6)编写mapper的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xhf.keshe.asset.mapper.AssetInformationMapper"><resultMap id="BaseResultMap" type="com.xhf.keshe.asset.entity.AssetInformation" ><result column="asset_number" property="assetNumber" /><result column="asset_name" property="assetName" /><result column="price" property="price" /><result column="purchase_date" property="purchaseDate" /><result column="status" property="status" /><result column="remarks" property="remarks" /></resultMap><insert id="insert" useGeneratedKeys="true" keyProperty="assetNumber">INSERT INTOasset_informationVALUES (null,#{entity.assetName},#{entity.price},#{entity.purchaseDate},#{entity.status},#{entity.remarks});</insert><update id="update">UPDATE asset_information<set><if test="entity.assetName != null"> asset_name = #{entity.assetName}, </if><if test="entity.price != null"> price = #{entity.price}, </if><if test="entity.purchaseDate != null"> purchase_date = #{entity.purchaseDate}, </if><if test="entity.status"> status = #{entity.status}, </if><if test="entity.remarks"> remarks = #{entity.remarks} </if></set>WHEREasset_information.asset_number = #{entity.assetNumber}</update><delete id="deleteById">DELETE FROM asset_information WHERE asset_information.asset_number = #{id};</delete><select id="list" resultMap="BaseResultMap">SELECT * FROM asset_information;</select><select id="listById" resultMap="BaseResultMap">SELECT * FROM asset_information WHERE asset_number = #{id};</select></mapper>

2.2)查询界面UI

package com.xhf.keshe.asset.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.entity.AssetInformation;
import com.xhf.keshe.asset.mapper.AssetInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.*;
import java.util.List;/*** 维护资产信息查询界面*/
public class AssetQuery extends JPanel {// 表格列名public static final String[] columnNames = {"资产编号", "资产名称", "价格", "购买日期", "状态", "备注"};/*** sqlsession*/private SqlSession sqlSession;/*** mapper*/private AssetInformationMapper mapper;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(AssetInformationMapper.class);}public AssetQuery() {// 设置界面大小setSize(Main.width, Main.height);// 设置布局setLayout(new BorderLayout());// 设置标题JLabel title = new JLabel("资产查询");title.setFont(Main.TitleFont);// 设置标题为居中对其title.setHorizontalAlignment(SwingConstants.CENTER);this.add(title, BorderLayout.NORTH);// 创建表格数据Object[][] data = getData();// 创建 JTableJTable table = new JTable(data, columnNames);// 设置头的字体table.getTableHeader().setFont(Main.font);// 设置每行的高度table.setRowHeight(25);// 设置表内容字体table.setFont(Main.font);// 将表格添加到滚动面板,并将滚动面板添加到窗口JScrollPane scrollPane = new JScrollPane(table);this.add(scrollPane);}/*** 返回资产表格数据* @return*/private Object[][] getData() {// 返回list数据List<AssetInformation> list = mapper.list();Object[][] data = new Object[list.size()][columnNames.length];// 将list处理为二维数组, 赋值给datafor (int i = 0; i < list.size(); i++) {// 将list[i] -> assetInformation 变为数组Object[] res = new Object[columnNames.length];AssetInformation assetInformation = list.get(i);res[0] = assetInformation.getAssetNumber();res[1] = assetInformation.getAssetName();res[2] = assetInformation.getPrice();res[3] = assetInformation.getPurchaseDate();res[4] = assetInformation.getStatus();res[5] = assetInformation.getRemarks();data[i] = res;}return data;}
}

2.3)添加界面UI

package com.xhf.keshe.asset.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.entity.AssetInformation;
import com.xhf.keshe.asset.mapper.AssetInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;public class AssetAdd extends JPanel {/*** title宽度*/public static final int widthTitle = 200, heightTitle = 40;/*** 标题x坐标*/public static final int xTitle = Main.width / 2 - widthTitle / 2;/*** 标题y坐标*/public static final int yTitle = Main.height / 10;/*** y轴间距*/public static final int yGap = 40;/*** 存储所有的JTextField*/private final List<JTextField> jTextFieldList = new ArrayList<JTextField>();/*** 获取mapper*/private static AssetInformationMapper mapper;/*** 获取sqlSession*/private static SqlSession sqlSession;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(AssetInformationMapper.class);}/*** 提交button*/private final JButton jButton = new JButton("添加");public AssetAdd() {setLayout(null);// 设置title坐标JLabel title = new JLabel("添加资产信息");title.setFont(Main.TitleFont);title.setBounds(xTitle, yTitle, widthTitle, heightTitle);// 通过title坐标, 计算剩余组件坐标, 并添加int widthLabel = 100, heightLabel = 30, xLabel = xTitle / 2, yLabel = yTitle + yGap + heightLabel, xGap = 80;int xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;for (int i = 0; i < AssetQuery.columnNames.length - 1; ++i) {// 创建JLabelJLabel jLabel = new JLabel(AssetQuery.columnNames[i + 1]);jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 创建JTextFieldJTextField jTextField = new JTextField();jTextField.setFont(Main.font);jTextField.setBounds(xText, yText, widthText, heightText);// 添加add(jLabel);add(jTextField);// 将所有jTextField存储jTextFieldList.add(jTextField);// 更新位置yLabel += yGap;yText += yGap;}// 添加修改buttonjButton.setFont(Main.font);jButton.setBounds(xTitle, yText + yGap, widthTitle, heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 提交数据save();}});add(title);add(jButton);}/*** 提交数据*/private void save() {System.out.println("保存数据");AssetInformation entity = new AssetInformation();entity.setAssetName(jTextFieldList.get(0).getText());entity.setPrice(jTextFieldList.get(1).getText());entity.setPurchaseDate(jTextFieldList.get(2).getText());entity.setStatus(jTextFieldList.get(3).getText());entity.setRemarks(jTextFieldList.get(4).getText());// 保存数据mapper.insert(entity);// 事务提交sqlSession.commit();JOptionPane.showMessageDialog(null, "添加成功");}
}

2.4)修改界面UI

package com.xhf.keshe.asset.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.entity.AssetInformation;
import com.xhf.keshe.asset.mapper.AssetInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;public class AssetUpdate extends JPanel {/*** title宽度*/private static final int widthTitle = 200, heightTitle = 40;/*** 标题x坐标*/private static final int xTitle = Main.width / 2 - widthTitle / 2;/*** 标题y坐标*/private static final int yTitle = Main.height / 10;/*** y轴间距*/private static final int yGap = 40;/*** 存储所有的JTextField*/private final List<JTextField> jTextFieldList = new ArrayList<JTextField>();/*** sqlsession*/private SqlSession sqlSession;/*** 获取mapper*/private AssetInformationMapper mapper;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(AssetInformationMapper.class);}/*** 提交button*/private final JButton jButton = new JButton("修改");public AssetUpdate() {setLayout(null);// 设置title坐标JLabel title = new JLabel("修改资产信息");title.setFont(Main.TitleFont);title.setBounds(xTitle, yTitle, widthTitle, heightTitle);// 通过title坐标, 计算剩余组件坐标, 并添加int widthLabel = 100, heightLabel = 30, xLabel = xTitle / 2, yLabel = yTitle + yGap + heightLabel, xGap = 80;int xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;for (int i = 0; i < AssetQuery.columnNames.length; ++i) {// 创建JLabelJLabel jLabel = new JLabel(AssetQuery.columnNames[i]);jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 创建JTextFieldJTextField jTextField = new JTextField();jTextField.setFont(Main.font);jTextField.setBounds(xText, yText, widthText, heightText);// 添加add(jLabel);add(jTextField);// 将所有jTextField存储jTextFieldList.add(jTextField);if (i == 0) {System.out.println("添加button");// 添加查询按钮JButton jButton = new JButton("查询");jButton.setFont(Main.font);jButton.setBounds(xText + widthText + 10, yText, 80, heightText);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 查询数据getData();// 重置文本框读写状态setField();}});add(jButton);} else {// 设置所有的都无法修改jTextField.setEnabled(false);}// 更新位置yLabel += yGap;yText += yGap;}// 添加修改buttonjButton.setEnabled(false);jButton.setFont(Main.font);jButton.setBounds(xTitle, yText + yGap, widthTitle, heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 提交数据upload();}});add(title);add(jButton);}/*** 重置textField的写状态*/private void setField() {// 除了状态, 其它都可修改for (int i1 = 0; i1 < jTextFieldList.size(); i1++) {if (i1 != 4) {jTextFieldList.get(i1).setEnabled(true);}}}/*** 根据id查询数据信息, 并进行回显*/private void getData() {// 根据jTextField中的id查询数据, 并进行数据回显String id = jTextFieldList.get(0).getText();AssetInformation assetInformation = mapper.listById(id);// 查不到if (assetInformation == null) {JOptionPane.showMessageDialog(null, "查询失败");return;}// 修改按钮功能重新开启jButton.setEnabled(true);// 数据回显jTextFieldList.get(0).setText(String.valueOf(assetInformation.getAssetNumber()));jTextFieldList.get(1).setText(assetInformation.getAssetName());jTextFieldList.get(2).setText(assetInformation.getPrice());jTextFieldList.get(3).setText(assetInformation.getPurchaseDate());jTextFieldList.get(4).setText(assetInformation.getStatus());jTextFieldList.get(5).setText(assetInformation.getRemarks());}/*** 提交数据*/private void upload() {AssetInformation entity = new AssetInformation();entity.setAssetNumber(Integer.valueOf(jTextFieldList.get(0).getText()));entity.setAssetName(jTextFieldList.get(1).getText());entity.setPrice(jTextFieldList.get(2).getText());entity.setPurchaseDate(jTextFieldList.get(3).getText());entity.setStatus(jTextFieldList.get(4).getText());entity.setRemarks(jTextFieldList.get(5).getText());// 保存数据mapper.update(entity);sqlSession.commit();JOptionPane.showMessageDialog(null, "修改成功");}
}

2.5)删除界面UI

package com.xhf.keshe.asset.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.mapper.AssetInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class AssetDelete extends JPanel {/*** sqlsession*/private static SqlSession sqlSession;/*** mapper*/private static AssetInformationMapper assetInformationMapper;{sqlSession = GetSqlsession.getsqlsession();assetInformationMapper = sqlSession.getMapper(AssetInformationMapper.class);}public AssetDelete() {setLayout(null);// 设置标题JLabel title = new JLabel("资产信息删除");title.setFont(Main.TitleFont);title.setBounds(AssetAdd.xTitle, AssetAdd.yTitle, AssetAdd.widthTitle, AssetAdd.heightTitle);add(title);// jLabel设置坐标int widthLabel = 100, heightLabel = 30, xLabel = AssetAdd.xTitle / 2, yLabel = AssetAdd.yTitle + AssetAdd.yGap + heightLabel, xGap = 80;JLabel jLabel = new JLabel("资产编号");jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 设置JComboxint xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;JComboBox jComboBox = new JComboBox();jComboBox.setFont(Main.font);jComboBox.setBounds(xText, yText, widthText, heightText);jComboBox.addItem("请选择");// 查询所有的id, 并添加到JComboBox中assetInformationMapper.list().forEach(e -> {jComboBox.addItem(e.getAssetNumber());});add(jLabel);add(jComboBox);// 删除按钮JButton jButton = new JButton("删除");jButton.setFont(Main.font);jButton.setBounds(AssetAdd.xTitle, AssetAdd.yTitle + 120, AssetAdd.widthTitle, AssetAdd.heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Object id = jComboBox.getSelectedItem();assetInformationMapper.deleteById((Integer) id);sqlSession.commit();JOptionPane.showMessageDialog(null, "删除成功");}});add(jButton);}
}

模块三:人员界面

3.1)mybatis整合

3.1.1)编写实体类
package com.xhf.keshe.person.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;@Data
@NoArgsConstructor
@AllArgsConstructor
public class PersonnelInformation implements Serializable {private static final long serialVersionUID = 1L;/*** 人员编号*/private Integer personnelNumber;/*** 姓名*/private String name;/*** 性别*/private String gender;/*** 部门*/private String department;/*** 职位*/private String position;/*** 其他信息*/private String other;
}
3.1.2)编写mapper接口
package com.xhf.keshe.person.mapper;import com.xhf.keshe.person.entity.PersonnelInformation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface PersonnelInformationMapper {/*** 查询全部信息* @return*/List<PersonnelInformation> list();/*** 根据id查询数据*/PersonnelInformation listById(@Param("id") String id);/*** 修改*/void update(@Param("entity") PersonnelInformation entity);/*** 新增数据*/void insert(@Param("entity") PersonnelInformation entity);/*** 根据id删除数据*/void deleteById(@Param("id") Integer id);
}
3.1.3)编写mapper的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xhf.keshe.person.mapper.PersonnelInformationMapper"><resultMap id="BaseResultMap" type="com.xhf.keshe.person.entity.PersonnelInformation" ><result column="personnel_number" property="personnelNumber" /><result column="name" property="name" /><result column="gender" property="gender" /><result column="department" property="department" /><result column="position" property="position" /><result column="other" property="other" /></resultMap><insert id="insert">INSERT INTOpersonnel_informationVALUES (null,#{entity.name},#{entity.gender},#{entity.department},#{entity.position},#{entity.other})</insert><update id="update">UPDATE personnel_informationSET`name` = #{entity.name},gender = #{entity.gender},department = #{entity.department},`position` = #{entity.position},other = #{entity.other}WHEREpersonnel_number = #{entity.personnelNumber};</update><delete id="deleteById">DELETE FROM personnel_information WHERE personnel_number = #{id};</delete><select id="list" resultMap="BaseResultMap">SELECT * FROM personnel_information;</select><select id="listById" resultMap="BaseResultMap">SELECT * FROM personnel_information WHERE personnel_number = #{id};</select></mapper>

3.2)查询界面UI

package com.xhf.keshe.person.page;import com.xhf.keshe.Main;
import com.xhf.keshe.person.entity.PersonnelInformation;
import com.xhf.keshe.person.mapper.PersonnelInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.*;
import java.util.List;/*** 维护资产信息查询界面*/
public class PersonQuery extends JPanel {/*** 获取mapper*/private static PersonnelInformationMapper mapper;/*** 获取sqlSession*/private static SqlSession sqlSession;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(PersonnelInformationMapper.class);}// 表格列名public static final String[] columnNames = {"人员编号", "姓名", "性别", "部门", "职位", "其它信息"};public PersonQuery() {// 设置界面大小setSize(Main.width, Main.height);// 设置布局setLayout(new BorderLayout());// 设置标题JLabel title = new JLabel("人员查询");title.setFont(Main.TitleFont);// 设置标题为居中对其title.setHorizontalAlignment(SwingConstants.CENTER);this.add(title, BorderLayout.NORTH);// 创建表格数据Object[][] data = getData();// 创建 JTableJTable table = new JTable(data, columnNames);// 设置头的字体table.getTableHeader().setFont(Main.font);// 设置每行的高度table.setRowHeight(25);// 设置表内容字体table.setFont(Main.font);// 将表格添加到滚动面板,并将滚动面板添加到窗口JScrollPane scrollPane = new JScrollPane(table);this.add(scrollPane);}/*** 返回资产表格数据* @return*/private Object[][] getData() {// 返回list数据List<PersonnelInformation> list = mapper.list();System.out.println(list.toString());Object[][] data = new Object[list.size()][columnNames.length];// 将list处理为二维数组, 赋值给datafor (int i = 0; i < list.size(); i++) {// 将list[i] -> assetInformation 变为数组Object[] res = new Object[columnNames.length];PersonnelInformation personnelInformation = list.get(i);res[0] = personnelInformation.getPersonnelNumber();res[1] = personnelInformation.getName();res[2] = personnelInformation.getGender();res[3] = personnelInformation.getDepartment();res[4] = personnelInformation.getPosition();res[5] = personnelInformation.getOther();data[i] = res;}return data;}
}

3.3)添加界面UI

package com.xhf.keshe.person.page;import com.xhf.keshe.Main;
import com.xhf.keshe.person.entity.PersonnelInformation;
import com.xhf.keshe.person.mapper.PersonnelInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;public class PersonAdd extends JPanel {/*** title宽度*/public static final int widthTitle = 200, heightTitle = 40;/*** 标题x坐标*/public static final int xTitle = Main.width / 2 - widthTitle / 2;/*** 标题y坐标*/public static final int yTitle = Main.height / 10;/*** y轴间距*/public static final int yGap = 40;/*** 存储所有的JTextField*/private final List<JTextField> jTextFieldList = new ArrayList<JTextField>();/*** 获取mapper*/private static PersonnelInformationMapper mapper;/*** 获取sqlSession*/private static SqlSession sqlSession;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(PersonnelInformationMapper.class);}/*** 提交button*/private final JButton jButton = new JButton("添加");public PersonAdd() {setLayout(null);// 设置title坐标JLabel title = new JLabel("添加人员信息");title.setFont(Main.TitleFont);title.setBounds(xTitle, yTitle, widthTitle, heightTitle);// 通过title坐标, 计算剩余组件坐标, 并添加int widthLabel = 100, heightLabel = 30, xLabel = xTitle / 2, yLabel = yTitle + yGap + heightLabel, xGap = 80;int xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;for (int i = 0; i < PersonQuery.columnNames.length - 1; ++i) {// 创建JLabelJLabel jLabel = new JLabel(PersonQuery.columnNames[i + 1]);jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 创建JTextFieldJTextField jTextField = new JTextField();jTextField.setFont(Main.font);jTextField.setBounds(xText, yText, widthText, heightText);// 添加add(jLabel);add(jTextField);// 将所有jTextField存储jTextFieldList.add(jTextField);// 更新位置yLabel += yGap;yText += yGap;}// 添加修改buttonjButton.setFont(Main.font);jButton.setBounds(xTitle, yText + yGap, widthTitle, heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 提交数据save();}});add(title);add(jButton);}/*** 提交数据*/private void save() {System.out.println("保存数据");PersonnelInformation entity = new PersonnelInformation();entity.setName(jTextFieldList.get(0).getText());entity.setGender(jTextFieldList.get(1).getText());entity.setDepartment(jTextFieldList.get(2).getText());entity.setPosition(jTextFieldList.get(3).getText());entity.setOther(jTextFieldList.get(4).getText());// 保存数据mapper.insert(entity);// 事务提交sqlSession.commit();JOptionPane.showMessageDialog(null, "添加成功");}
}

3.4)修改界面UI

package com.xhf.keshe.person.page;import com.xhf.keshe.Main;
import com.xhf.keshe.person.entity.PersonnelInformation;
import com.xhf.keshe.person.mapper.PersonnelInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;public class PersonUpdate extends JPanel {/*** title宽度*/private static final int widthTitle = 200, heightTitle = 40;/*** 标题x坐标*/private static final int xTitle = Main.width / 2 - widthTitle / 2;/*** 标题y坐标*/private static final int yTitle = Main.height / 10;/*** y轴间距*/private static final int yGap = 40;/*** 存储所有的JTextField*/private final List<JTextField> jTextFieldList = new ArrayList<JTextField>();/*** sqlsession*/private SqlSession sqlSession;/*** 获取mapper*/private PersonnelInformationMapper mapper;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(PersonnelInformationMapper.class);}/*** 提交button*/private final JButton jButton = new JButton("修改");public PersonUpdate() {setLayout(null);// 设置title坐标JLabel title = new JLabel("修改人员信息");title.setFont(Main.TitleFont);title.setBounds(xTitle, yTitle, widthTitle, heightTitle);// 通过title坐标, 计算剩余组件坐标, 并添加int widthLabel = 100, heightLabel = 30, xLabel = xTitle / 2, yLabel = yTitle + yGap + heightLabel, xGap = 80;int xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;for (int i = 0; i < PersonQuery.columnNames.length; ++i) {// 创建JLabelJLabel jLabel = new JLabel(PersonQuery.columnNames[i]);jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 创建JTextFieldJTextField jTextField = new JTextField();jTextField.setFont(Main.font);jTextField.setBounds(xText, yText, widthText, heightText);// 添加add(jLabel);add(jTextField);// 将所有jTextField存储jTextFieldList.add(jTextField);if (i == 0) {System.out.println("添加button");// 添加查询按钮JButton jButton = new JButton("查询");jButton.setFont(Main.font);jButton.setBounds(xText + widthText + 10, yText, 80, heightText);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 查询数据getData();// 重置文本框读写状态setField();}});add(jButton);} else {// 设置所有的都无法修改jTextField.setEnabled(false);}// 更新位置yLabel += yGap;yText += yGap;}// 添加修改buttonjButton.setEnabled(false);jButton.setFont(Main.font);jButton.setBounds(xTitle, yText + yGap, widthTitle, heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 提交数据upload();}});add(title);add(jButton);}/*** 重置textField的写状态*/private void setField() {// 除了状态, 其它都可修改for (int i1 = 0; i1 < jTextFieldList.size(); i1++) {jTextFieldList.get(i1).setEnabled(true);}}/*** 根据id查询数据信息, 并进行回显*/private void getData() {// 根据jTextField中的id查询数据, 并进行数据回显String id = jTextFieldList.get(0).getText();PersonnelInformation personnelInformation = mapper.listById(id);// 查不到if (personnelInformation == null) {JOptionPane.showMessageDialog(null, "查询失败");return;}// 修改按钮功能重新开启jButton.setEnabled(true);// 数据回显jTextFieldList.get(0).setText(String.valueOf(personnelInformation.getPersonnelNumber()));jTextFieldList.get(1).setText(personnelInformation.getName());jTextFieldList.get(2).setText(personnelInformation.getGender());jTextFieldList.get(3).setText(personnelInformation.getDepartment());jTextFieldList.get(4).setText(personnelInformation.getPosition());jTextFieldList.get(5).setText(personnelInformation.getOther());}/*** 提交数据*/private void upload() {PersonnelInformation entity = new PersonnelInformation();entity.setPersonnelNumber(Integer.valueOf(jTextFieldList.get(0).getText()));entity.setName(jTextFieldList.get(1).getText());entity.setGender(jTextFieldList.get(2).getText());entity.setDepartment(jTextFieldList.get(3).getText());entity.setPosition(jTextFieldList.get(4).getText());entity.setOther(jTextFieldList.get(5).getText());// 保存数据mapper.update(entity);sqlSession.commit();JOptionPane.showMessageDialog(null, "修改成功");}
}

3.5)删除界面UI

package com.xhf.keshe.person.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.page.AssetAdd;
import com.xhf.keshe.person.mapper.PersonnelInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class PersonDelete extends JPanel {/*** sqlsession*/private static SqlSession sqlSession;/*** mapper*/private static PersonnelInformationMapper mapper;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(PersonnelInformationMapper.class);}public PersonDelete() {setLayout(null);// 设置标题JLabel title = new JLabel("人员信息删除");title.setFont(Main.TitleFont);title.setBounds(AssetAdd.xTitle, AssetAdd.yTitle, AssetAdd.widthTitle, AssetAdd.heightTitle);add(title);// jLabel设置坐标int widthLabel = 100, heightLabel = 30, xLabel = AssetAdd.xTitle / 2, yLabel = AssetAdd.yTitle + AssetAdd.yGap + heightLabel, xGap = 80;JLabel jLabel = new JLabel("人员id");jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 设置JComboxint xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;JComboBox jComboBox = new JComboBox();jComboBox.setFont(Main.font);jComboBox.setBounds(xText, yText, widthText, heightText);jComboBox.addItem("请选择");// 查询所有的id, 并添加到JComboBox中mapper.list().forEach(e -> {jComboBox.addItem(e.getPersonnelNumber());});add(jLabel);add(jComboBox);// 删除按钮JButton jButton = new JButton("删除");jButton.setFont(Main.font);jButton.setBounds(AssetAdd.xTitle, AssetAdd.yTitle + 120, AssetAdd.widthTitle, AssetAdd.heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Object id = jComboBox.getSelectedItem();mapper.deleteById((Integer) id);sqlSession.commit();JOptionPane.showMessageDialog(null, "删除成功");}});add(jButton);}
}

模块四:资产操作

4.1)mybatis整合

4.1.1)编写实体类
package com.xhf.keshe.operate.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;@Data
@NoArgsConstructor
@AllArgsConstructor
public class AssetOperationLog implements Serializable {private static final long serialVersionUID = 1L;/*** 操作编号*/private Integer operationNumber;/*** 操作类型*/private String operationType;/*** 资产编号*/private String assetNumber;/*** 操作时间*/private Date operationTime;/*** 领用人*/private String recipient;/*** 备注*/private String remarks;
}
4.1.2)编写mapper接口
package com.xhf.keshe.operate.mapper;import com.xhf.keshe.operate.entity.AssetOperationLog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface OperateMapper {/*** 查询所有数据* @return*/List<AssetOperationLog> list();/*** 保存*/void insert(@Param("entity") AssetOperationLog entity);
}
4.1.3)编写mapper的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xhf.keshe.operate.mapper.OperateMapper"><resultMap id="BaseResultMap" type="com.xhf.keshe.operate.entity.AssetOperationLog" ><result column="operation_number" property="operationNumber" /><result column="operation_type" property="operationType" /><result column="asset_number" property="assetNumber" /><result column="operation_time" property="operationTime" /><result column="recipient" property="recipient" /><result column="remarks" property="remarks" /></resultMap><insert id="insert">INSERT INTOasset_operation_logVALUES (null,#{entity.operationType},#{entity.assetNumber},#{entity.operationTime},#{entity.recipient},#{entity.remarks});</insert><select id="list" resultMap="BaseResultMap">SELECT * FROM asset_operation_log;</select></mapper>

4.2)资产查询界面

package com.xhf.keshe.operate.page;import com.xhf.keshe.Main;
import com.xhf.keshe.operate.entity.AssetOperationLog;
import com.xhf.keshe.operate.mapper.OperateMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.*;
import java.util.List;public class OperateQuery extends JPanel {/*** 列名*/public static final String[] columnNames = {"操作编号", "操作类型", "资产编号", "操作时间", "操作人", "备注"};/*** sqlsession*/private SqlSession sqlSession;/*** mapper*/private OperateMapper mapper;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(OperateMapper.class);}public OperateQuery() {// 设置界面大小setSize(Main.width, Main.height);// 设置布局setLayout(new BorderLayout());// 设置标题JLabel title = new JLabel("操作查询");title.setFont(Main.TitleFont);// 设置标题为居中对其title.setHorizontalAlignment(SwingConstants.CENTER);this.add(title, BorderLayout.NORTH);// 创建表格数据Object[][] data = getData();// 创建 JTableJTable table = new JTable(data, columnNames);// 设置头的字体table.getTableHeader().setFont(Main.font);// 设置每行的高度table.setRowHeight(25);// 设置表内容字体table.setFont(Main.font);// 将表格添加到滚动面板,并将滚动面板添加到窗口JScrollPane scrollPane = new JScrollPane(table);this.add(scrollPane);}/*** 返回资产表格数据* @return*/private Object[][] getData() {// 返回list数据List<AssetOperationLog> list = mapper.list();Object[][] data = new Object[list.size()][columnNames.length];// 将list处理为二维数组, 赋值给datafor (int i = 0; i < list.size(); i++) {// 将list[i] -> assetInformation 变为数组Object[] res = new Object[columnNames.length];AssetOperationLog operationLog = list.get(i);res[0] = operationLog.getOperationNumber();res[1] = operationLog.getOperationType();res[2] = operationLog.getAssetNumber();res[3] = operationLog.getOperationTime();res[4] = operationLog.getRecipient();res[5] = operationLog.getRemarks();data[i] = res;}return data;}
}

4.3)资产操作界面

package com.xhf.keshe.operate.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.entity.AssetInformation;
import com.xhf.keshe.asset.mapper.AssetInformationMapper;
import com.xhf.keshe.asset.page.AssetQuery;
import com.xhf.keshe.operate.entity.AssetOperationLog;
import com.xhf.keshe.operate.mapper.OperateMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;public class Operate extends JPanel {/*** sqlsession*/private SqlSession sqlsession;/*** mapper*/private OperateMapper mapper;/*** mapper*/private AssetInformationMapper mapper2;/*** 资产编号*/private JTextField jTextField1;/*** 操作人员编号*/private JTextField jTextField2;/*** 备注*/private JTextField jTextField3;/*** 操作类型*/private JComboBox comboBox;{sqlsession = GetSqlsession.getsqlsession();mapper = sqlsession.getMapper(OperateMapper.class);mapper2 = sqlsession.getMapper(AssetInformationMapper.class);}public Operate() {// 设置布局setLayout(new BorderLayout());JLabel title = new JLabel("资产设备操作");title.setFont(Main.TitleFont);title.setHorizontalAlignment(SwingConstants.CENTER);add(title, BorderLayout.NORTH);// 设置tableObject[][] data = getData();JTable table = new JTable(data, AssetQuery.columnNames);table.setFont(Main.font);table.setRowHeight(30);table.getTableHeader().setFont(Main.font);// 添加到滚轴JScrollPane jScrollPane = new JScrollPane(table);add(jScrollPane, BorderLayout.CENTER);// 添加底栏int hgap = 30, vgap = 5;JPanel bottomBar = new JPanel();bottomBar.setLayout(new GridLayout(3, 1, hgap, vgap));// 上栏JPanel upper = new JPanel();upper.setLayout(new GridLayout(1, 4, hgap, vgap));initUpper(upper);// 中栏JPanel middle = new JPanel();middle.setLayout(new GridLayout(1, 4, hgap, vgap));initMiddle(middle);// 下栏JPanel down = new JPanel();down.setLayout(new GridLayout(1, 1));JButton jButton = new JButton("确定");jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 保存日志saveLog();// 修改资产updateAsset();JOptionPane.showMessageDialog(null, "操作成功");}});jButton.setFont(Main.font);down.add(jButton);bottomBar.add(upper);bottomBar.add(middle);bottomBar.add(down);add(bottomBar, BorderLayout.SOUTH);}/*** 修改资产*/private void updateAsset() {AssetInformation assetInformation = new AssetInformation();assetInformation.setAssetNumber(Integer.valueOf(jTextField1.getText()));assetInformation.setStatus(getNumber((String) comboBox.getSelectedItem()));mapper2.update(assetInformation);sqlsession.commit();}/*** 修改日志*/private void saveLog() {AssetOperationLog operationLog = new AssetOperationLog();// 设置资产idoperationLog.setAssetNumber(String.valueOf(jTextField1.getText()));// 设置操作人operationLog.setRecipient(jTextField2.getText());// 设置操作operationLog.setOperationType(getNumber((String) comboBox.getSelectedItem()));// 设置备注operationLog.setRemarks(jTextField3.getText());// 保存操作日志mapper.insert(operationLog);sqlsession.commit();}/*** 根据操作目的, 返回对应数值* @param selectedItem* @return*/private String getNumber(String selectedItem) {if (selectedItem.equals("领用")) {return "1";}else if (selectedItem.equals("归还")) {return "2";}else {return "3";}}/*** 初始化middle栏界面* @param middle*/private void initMiddle(JPanel middle) {JLabel jLabel = new JLabel("操作");jLabel.setFont(Main.font);middle.add(jLabel);comboBox = new JComboBox();comboBox.setFont(Main.font);comboBox.addItem("领用");comboBox.addItem("归还");comboBox.addItem("报废");middle.add(comboBox);JLabel jLabel1 = new JLabel("备注");jLabel1.setFont(Main.font);middle.add(jLabel1);jTextField3 = new JTextField();middle.add(jTextField3);}/*** 初始化upper栏界面* @param upper*/private void initUpper(JPanel upper) {JLabel jLabel = new JLabel("资产编号");jLabel.setFont(Main.font);upper.add(jLabel);jTextField1 = new JTextField();upper.add(jTextField1);JLabel jLabel1 = new JLabel("操作人员编号");jLabel1.setFont(Main.font);upper.add(jLabel1);jTextField2 = new JTextField();upper.add(jTextField2);}/*** 获取数据* @return*/private Object[][] getData() {// 返回list数据List<AssetInformation> list = mapper2.list();Object[][] data = new Object[list.size()][AssetQuery.columnNames.length];// 将list处理为二维数组, 赋值给datafor (int i = 0; i < list.size(); i++) {// 将list[i] -> assetInformation 变为数组Object[] res = new Object[AssetQuery.columnNames.length];AssetInformation assetInformation = list.get(i);res[0] = assetInformation.getAssetNumber();res[1] = assetInformation.getAssetName();res[2] = assetInformation.getPrice();res[3] = assetInformation.getPurchaseDate();res[4] = assetInformation.getStatus();res[5] = assetInformation.getRemarks();data[i] = res;}return data;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/33986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue实现详细界面里面有一个列表

目录 Vue实现详细界面里面有一个列表 理一下思路&#xff1a; 效果如下&#xff1a; 1、 主页面正常写 2、详细界面(重点) 3、详细界面里面的列表(重点) 要点&#xff1a; Vue实现详细界面里面有一个列表 理一下思路&#xff1a; 1、首先需要这条数据的主键id&#xff…

CAD练习——绘制电风扇

注意要在三维空间内完成绘制 先绘制扇叶 两条射线确定角度 绘制圆弧&#xff08;圆修剪&#xff09; 绘制扇叶形状&#xff08;3点圆弧&#xff09; 圆角&#xff1a; 将这几段圆弧合成同一条多段线 换个立体视图 拉伸出厚度 绘制一个球 取二者交集&#xff08;带弧面的扇叶&a…

201、仿真-基于51单片机PT100测温设计铂电阻温度计设计Proteus仿真(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、设计功能 二、Proteus仿真图 三、原理图 四、程序源码 资料包括&#xff1a; 方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源足够用于本次设…

excel将主信息和明细信息整理为多对多(每隔几行空白如何填充)

excel导出的数据是主信息和明细信息形式。 方法如下:1、首先&#xff0c;从第一个单元格开始选中要填充的数据区域。2、按CtrlG或者F5调出定位对话框&#xff0c;点击左下角的【定位条件】。3、在【定位条件】中选择【空值】&#xff0c;然后点击【确定】按钮。4、按照上述操作…

Nodejs+vue+elementui汽车租赁管理系统_1ma2x

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端nodejsvueelementui, 课题主要分为三大模块&#xff1a;即管理员模块、用户模块和普通管理员模块&#xff0c;主要功能包括&#…

2000-2022年全国各地级市绿色金融指数数据

2000-2022年全国各地级市绿色金融指数数据 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;来源&#xff1a;统计局、科技部、中国人民银行等权威机构网站及各种权威统计年鉴&#xff0c;包括全国及各省市统计年鉴、环境状况公报及一些专业统计年鉴&#xff0c;如 《中国…

DIP: NAS(Neural Architecture Search)论文阅读与总结(双份快乐)

文章地址: NAS-DIP: Learning Deep Image Prior with Neural Architecture SearchNeural Architecture Search for Deep Image Prior 参考博客:https://zhuanlan.zhihu.com/p/599390720 文章目录 NAS-DIP: Learning Deep Image Prior with Neural Architecture Search1. 方法…

PhotoShop学习笔记

PhotoShop学习笔记 对图像进行缩放拉伸自动选中像素相近的同一个区域分离图层的选中区域分离图层的非选中区域处理不自然的缝合痕迹 记录一些PhotoShop中用到的操作&#xff0c;主要是在处理AI图像时遇到的需求。 对图像进行缩放拉伸 CTRLT 自动选中像素相近的同一个区域 魔…

Easys Excel的表格导入(读)导出(写)-----java

一,EasyExcel官网: 可以学习一些新知识: EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 二,为什么要使用easyexcle excel的一些优点和缺点 java解析excel的框架有很多 &#xff1a; poi jxl,存在问题&#xff1a;非常的消耗内存&#xff0c; easyexcel 我们…

基于扩频的数字视频水印嵌入和检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ................................................................. for j 1:length(attens…

OpenCV实例(八)车牌字符识别技术(三)汉字识别

车牌字符识别技术&#xff08;三&#xff09;汉字识别 1.代码实例2.遇到问题3.汉字识别代码实例 相较于数字和英文字符的识别&#xff0c;汽车牌照中的汉字字符识别的难度更大&#xff0c;主要原因有以下4个方面&#xff1a; (1)字符笔画因切分误差导致非笔画或笔画流失。 (2…

安装使用IDEA,修改样式,配置服务,构建Maven项目(超级详细版)

目录 前言&#xff1a; 一&#xff0c;安装 1.1打开官网JetBrains: Essential tools for software developers and teams点击 Developer Tools&#xff0c;再点击 Intellij IDEA 2.点击下载​编辑 3.选择对应的版本&#xff0c;左边的 Ultimate 版本为旗舰版&#xff0c;需要…

阿里云服务器搭建Magento电子商务网站图文教程

本文阿里云百科分享使用阿里云服务器手动搭建Magento电子商务网站全流程&#xff0c;Magento是一款开源电商网站框架&#xff0c;其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案。Magento使用PHP开发&#xff0c;支持版本范围从PHP 5.6到PHP 7.1&#xff0c;并使…

MySQL数据库表的增删查改 - 进阶

一&#xff0c;数据库约束 1.1 约束对象 not null - 该列不能为空unique - 保证该列的每一行都不一样default - 规定没有给列赋值时的默认值&#xff08;自定义&#xff09;primary key - not null 和 unique 的结合&#xff0c;会给该列添加一个索引&#xff0…

中科亿海微浮点数转换定点数

引言 浮点数转换定点数是一种常见的数值转换技术&#xff0c;用于将浮点数表示转换为定点数表示。浮点数表示采用指数和尾数的形式&#xff0c;可以表示较大范围的数值&#xff0c;但存在精度有限的问题。而定点数表示则采用固定小数点位置的形式&#xff0c;具有固定的精度和范…

走进知识图谱(二)【世界知识图谱篇】知识表示的经典模型与平移模型及基于复杂关系建模的知识表示学习

上篇文章提到&#xff0c;该系列文章将主要围绕世界知识图谱和语言知识图谱这两大类知识图谱进行展开&#xff0c;并且提到知识图谱的主要研究包括了知识表示学习、知识自动获取和知识的推理与应用三大部分。今天主要介绍世界知识图谱的知识表示学习&#xff0c;其中包括经典的…

C语言 字符指针

1、介绍 概念&#xff1a; 字符指针&#xff0c;就是字符类型的指针&#xff0c;同整型指针&#xff0c;指针指向的元素表示整型一样&#xff0c;字符指针指向的元素表示的是字符。 假设&#xff1a; char ch a;char * pc &ch; pc 就是字符指针变量&#xff0c;字符指…

python num循环怎么从1开始

如何实现python for循环从1开始&#xff1f; range()函数的作用和用法&#xff1a; 编写一个从数值1开始的循环&#xff1a; 执行后得到的结果 其他注意事项

HCIA---动态路由---RIP协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 前言 一.动态路由 二.动态路由协议分类 IGP&#xff1a;内部网关协议 EGP:外部网关协议 三.RIP协议概述 RIP版本分类&#xff1a; RIP三要素&#xff1a; RIP…