JAVA_FX人员信息查询模块实现学习

JAVA_FX 资产设备管理

项目所需知识:
1、使用 JavaFX 实现图形用户界面设计
2、使用 MySQL 8.0 数据库系统管理系统数据
3、使用 JDBC API 实现数据库访问
4、使用 IDEA IDE 完成项目开发
项目结构图:
所需建立的包
controller包:包含存放和每个FXML文件对应的事件处理类
dao包:存放和每个实体类相对应的实现数据库访问的DAO接口和实现类
model包:包含存放和数据库对应的实体类
util包:存放读属性文件的工具类、数据库操作工具以及用来表示FXML文件路径和窗口标题的枚举类
view包:包含布局界面的FXML文件

需求分析:
1 资产信息管理
管理所有资产设备的基本信息,包括添加、修改、删除等,可以根据各种条件查询出需要的信息。
2 人员信息管理
管理设备的使用人员信息,包括添加、修改、删除等,可以根据各种条件查询出需要的信息。
3 资产设备的领用、归还、报废
管理设备的领用、归还与报废,查询相关信息。
4 系统管理
系统管理模块能中提供了类别管理和退出系统的操作,维护设备分类信息的数据,方便用户对资产的类别进行管理,系统会提示出资产的编号、大类、小类的属性,还会提供对其进行增加、更新、删除、复位和退出的操作。

实现代码:
这里主类用于实现人员信息管理功能模块:
controller包中装有对人员的添加,删除,改变,列表显示的控制类
AddEditPersonInfo.java:

/**
 * 添加和编辑资产类别信息窗口的控制器类,
 * 把要操作的组件对象声明成该类的属性,
 * 属性的名称要和对应的窗口布局文件中组件标记的fx:id属性的值保持一致,
 * 并且在属性声明前添加 @FXML注解
 */
public class AddEditPersonInfo extends BaseController implements Initializable {
//FXMl可视图按钮链接到该控制类实现按钮功能
    @FXML
    public TextField personNameText;
    @FXML
    public ComboBox<String> personSexText;
    @FXML
    public TextField personDeptText;
    @FXML
    public TextField personJobText;
    @FXML
    public TextField personOtherText;
    @FXML
    private Button submitButton;

    /**
     * 提交按钮的事件处理方法,
     * 方法的名称要和对应的布局文件中提交按钮的onAction属性的值保持一致,
     * 即onAction属性应该这样赋值:onAction="#submit"
     *
     * @param event Action事件对象
     */
    @FXML
    private void submit(ActionEvent event) {
        // 如果任意字段为空,显示警告对话框
        // getText().trim()的作用是:在获得的文本中除去空格. trim()的作用是:去掉字符串左右的空格
        if (personNameText.getText().trim().equals("") || personDeptText.getText().trim().equals("") || personJobText.getText().trim().equals("")) {
            // 显示对话框
            showWarningDialog("要添加或更新的数据是错误的!", "字段的内容不能为空!");
            return;
        }

        PersonInfo personInfo = new PersonInfo(personNameText.getText(), personSexText.getValue(), personDeptText.getText(), personJobText.getText(), personOtherText.getText());
        try {
            String oldId;
             // 如果editPersonInfo不为null,提交的数据是要更新的数据,在更新之前,先删除旧数据
            // nonNull是java.util.Objects类中的静态方法,已静态导入,可以直接调用
            if (nonNull(editPersonInfo)) {
                personInfoData.remove(editPersonInfo);
                //并获取要更新数据的id,用该id作为用户输入的要更新数据的id
                oldId = editPersonInfo.getPersonID();
                personInfo.setPersonID(oldId);
                personInfoDao.update(personInfo);
            } else {
                //把新的资产类别信息添加到数据源,添加成功后返回自动生成的id
                oldId = personInfoDao.add(personInfo);
                //把新记录的id赋给表格中新添加的对象
                personInfo.setPersonID(oldId);
            }

            //把新的资产类别信息添加到列表
            personInfoData.add(personInfo);
             clearForm();
            //通过ADD_PERSON_INFO枚举对象得到列表窗口的标题和代表布局文件路径的URL对象,
            //通过(Node)event.getSource()得到发生事件的组件对象
            //切换界面,标题是添加人员信息,执行顺序有没有关系
            navigate(ADD_PERSON_INFO.getTitle(), (Node) event.getSource(), ADD_PERSON_INFO.getPage()); 
            //把3个对象传递给navigate方法,从而实现窗口的切换
        } catch (Exception e) {
            //发生异常后通过警告对话框显示异常信息
            showWarningDialog(e.toString());
            e.printStackTrace();
        }
    }

    //清空文本框中的内容
    private void clearForm() {
        personNameText.clear();
        personDeptText.clear();
        personJobText.clear();
        personOtherText.clear();
    }

    //复位按钮的事件处理,清空文本框中的内容
    @FXML
    private void reset(ActionEvent event) {
        clearForm();
    }

    //控制器的初始化方法,控制器对象创建后会自动执行此方法
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        personSexText.getSelectionModel().select(0);//默认选第一个
    }
}

其次,我们通过FXML文件实现布局界面(展示其中一个界面模块:人员信息列表):

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>


<BorderPane prefHeight="800.0" prefWidth="1500.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.assetsms.controller.ListPersonInfo">
    <top>
        <fx:include source="Menu.fxml" />
    </top>
    <center>
        <BorderPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
            <top>
                <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER">
                    <children>
                        <Label text="请输入搜索内容:">
                     <font>
                        <Font size="16.0" />
                     </font></Label>
                        <TextField fx:id="searchInfoText" prefHeight="23.0" prefWidth="219.0">
                     <font>
                        <Font size="16.0" />
                     </font></TextField>
                    </children>
                </HBox>
            </top>
            <center>
                <TableView fx:id="personListTable" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">

                    <columns>
                        <TableColumn fx:id="personIDColumn" prefWidth="363.0" style="-fx-alignment: center" text="人员编号" />
                        <TableColumn fx:id="nameTextColumn" prefWidth="198.0" style="-fx-alignment: center" text="姓名" />
                        <TableColumn fx:id="sexTextColumn" prefWidth="162.0" style="-fx-alignment: center" text="性别" />
                        <TableColumn fx:id="deptTextColumn" prefWidth="206.0" style="-fx-alignment: center" text="部门" />
                        <TableColumn fx:id="jobTextColumn" minWidth="0.0" prefWidth="241.0" style="-fx-alignment: center" text="职位" />
                        <TableColumn fx:id="otherColumn" prefWidth="154.0" style="-fx-alignment: center" text="其他" />

                    </columns>
                </TableView>
            </center>
            <bottom>
                <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" style="-fx-spacing: 20;" BorderPane.alignment="CENTER">
                    <children>
                        <Button fx:id="deleteButton" mnemonicParsing="false" onAction="#doDelete" text="删除">
                     <font>
                        <Font size="16.0" />
                     </font></Button>
                      <!--声明一个更新Button元素,fx:id用于给该Button一个标示,用于和Controller类中的Button实例进行绑定-->
                      <!--onAction用于绑定Button的点击事件,#doUpdate前面的#用于和Controller中处理函数进行绑定-->
                        <Button fx:id="updateButton" mnemonicParsing="false" onAction="#doUpdate" text="更新" textAlignment="CENTER">
                    <!--<font>用于修改Button默认的字体及其大小-->
                     <font>
                        <Font size="16.0" />
                     </font></Button>
                    </children>
                </HBox>
            </bottom>

        </BorderPane>
    </center>

</BorderPane>

最后,需要在dao包里面建立人员信息与数据库的连接,添加PersonInfoDao.java文件

public class PersonInfoDaoMySQLImpl implements PersonInfoDao {
    private DBUtil dbUtil;
    public PersonInfoDaoMySQLImpl() {
    //新建一个数据库
        dbUtil=new DBUtil();
    }

    @Override
    public List<Person> findAll() throws Exception {
        dbUtil.getConnection();
        //查询Person表中的所有字段,可以通过最后连接进行select * from语句的学习
        ResultSet rs=dbUtil.executeQuery("select * from Person");
        List<Person> list=new ArrayList<>();
        Person Person=null;
        while (rs.next()){
            Person=new Person(
                    rs.getString("personID"),
                    rs.getString("Name"),
                    rs.getString("Sex"),
                    rs.getString("Dept"),
                    rs.getString("Job"),
                    rs.getString("other"));
            list.add(Person);
        }
        dbUtil.closeAll();
        return list;
    }

    @Override
    public Person findById(String PersonID) throws Exception {
        dbUtil.getConnection();
        ResultSet rs=dbUtil.executeQuery("select * from Person where PersonID=?",PersonID);
        Person person=null;
        if(rs.next()){
            person=new Person(
                    rs.getString("PersonID"),
                    rs.getString("Name"),
                    rs.getString("Sex"),
                    rs.getString("Dept"),
                    rs.getString("Job"),
                    rs.getString("Other"));
        }
        dbUtil.closeAll();
        return person;
    }

    @Override
    public void delete(String PersonID) throws Exception {
        dbUtil.getConnection();
        dbUtil.executeUpdate("delete from Person where PersonID=?",PersonID);
        dbUtil.closeAll();
    }

    @Override
    public void update(Person person) throws Exception {
        dbUtil.getConnection();
        dbUtil.executeUpdate(
                "update Person set Name=?,Sex=?,Dept=?,Job=?,Other=? where PersonID=?",
                person.getNameText(),
                person.getSexText(),
                person.getDeptText(),
                person.getJobText(),
                person.getOther());
        dbUtil.closeAll();
    }

    @Override
    public String add(Person person) throws Exception {
        String id=null;
        dbUtil.getConnection();
        dbUtil.executeUpdate("insert into Person(PersonID,Name,Sex,Dept,Job,Other) values(uuid(),?,?,?,?,?)",person.getNameText(),person.getSexText(),person.getDeptText(),person.getJobText(),person.getOther());
        ResultSet rs=dbUtil.executeQuery("select PersonID from Person where Name=? and Sex=? and Dept=? and Job=? and Other=?",person.getNameText(),person.getSexText(),person.getDeptText(),person.getJobText(),person.getOther());
        if (rs.next()){
            id=rs.getString(1);
        }
        dbUtil.closeAll();
        return id;
    }

}

JAVAFX中文学习文档
JAVA官方学习平台
mysql数据库SQL查询语句SELECT详细查询
学习使用JDBC连接数据库

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值