【java 程序设计实训】学生请假管理系统

news2024/11/17 23:25:50

学生请假管理系统

  • 运行结果
  • 学生请假管理系统需求分析
  • GUI 编程
  • 事件处理
  • 数据库编程
  • 部分代码
    • 项目结构
    • 实体类 Admin.java
    • LeaveData.java
    • UserLogin.java
    • MainWindow.java
    • TeacherReviewFrame.java
    • leaveList.java
  • 注:完整内容可下载查看完整报告

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

学生请假管理系统需求分析

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

GUI 编程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

事件处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据库编程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

部分代码

项目结构

在这里插入图片描述

实体类 Admin.java

package info;

public class Admin {
    //管理员信息类
    private String UserIdentity; //用户身份,用于判断登录用户是学生Student还是教师Teacher还是管理员Admin
    private String id; // 工号,即用户账号
    private String password; //用户密码
    private String name; // 姓名
    private String sex; // 性别
    private String age; //年龄
    private String jobTitle; //职称
    private String Phone;//联系电话
    private String address; // 家庭住址

    // 2120220087 010718 小庄 男 21 电气与计算机工程学院 教师  15018722839 广东省广州市
//("Admin"," 2120220087 ","1 ","小庄"," 男 ","21 "," 教务处主任"," 15018722839"," 广东省广州市");
    public Admin() {
    }

    public Admin(String userIdentity, String id, String password, String name, String sex, String age, String jobTitle, String phone, String address) {
        this.UserIdentity = userIdentity;
        this.id = id;
        this.password = password;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.jobTitle = jobTitle;
        this.Phone = phone;
        this.address = address;
    }

    public String getUserIdentity() {
        return UserIdentity;
    }

    public void setUserIdentity(String userIdentity) {
        UserIdentity = userIdentity;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getJobTitle() {
        return jobTitle;
    }

    public void setJobTitle(String jobTitle) {
        this.jobTitle = jobTitle;
    }

    public String getPhone() {
        return Phone;
    }

    public void setPhone(String phone) {
        Phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

LeaveData.java

package info;

public class LeaveData {
    //请假信息表单
    private String num; // 编号
    private String name; // 姓名
    private String ID; // 学号
    private String sex;//性别
    private String age;//年龄
    private String faculties; // 所在院系
    private String profession;//专业名称
    private String className; // 班级名称
    private String Phone;//联系电话
    private String requestData; //申请日期
    private String StartTime; // 开始时间
    private String EndEime; // 结束时间
    private String reason;//申请理由
    private String Approver;//审核人
    private String ApprovalReason; //审核意见
    private String state;//状态

    /**
     * 状态:
     * 编辑保存  ----未提交
     * 请假----请假申请中
     * 请假审批通过 ---请假成功
     * 请假审批不通过--请假失败
     * 销假 ---销假申请中
     * 销假审批通过--销假成功
     * 销假审批不通过---销假失败
     */

    public LeaveData() {
    }

    public LeaveData(String num, String name, String ID, String sex, String age, String faculties, String profession,
                     String className, String phone, String requestData, String startTime, String endEime, String approver,
                     String approvalReason, String reason, String state) {
        this.num = num;
        this.name = name;
        this.ID = ID;
        this.sex = sex;
        this.age = age;
        this.faculties = faculties;
        this.profession = profession;
        this.className = className;
        this.Phone = phone;
        this.requestData = requestData;
        this.StartTime = startTime;
        this.EndEime = endEime;
        this.Approver = approver;
        this.ApprovalReason = approvalReason;
        this.reason = reason;
        this.state = state;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getFaculties() {
        return faculties;
    }

    public void setFaculties(String faculties) {
        this.faculties = faculties;
    }

    public String getProfession() {
        return profession;
    }

    public void setProfession(String profession) {
        this.profession = profession;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public String getPhone() {
        return Phone;
    }

    public void setPhone(String phone) {
        Phone = phone;
    }

    public String getRequestData() {
        return requestData;
    }

    public void setRequestData(String requestData) {
        this.requestData = requestData;
    }

    public String getStartTime() {
        return StartTime;
    }

    public void setStartTime(String startTime) {
        StartTime = startTime;
    }

    public String getEndEime() {
        return EndEime;
    }

    public void setEndEime(String endEime) {
        EndEime = endEime;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public String getApprover() {
        return Approver;
    }

    public void setApprover(String approver) {
        Approver = approver;
    }

    public String getApprovalReason() {
        return ApprovalReason;
    }

    public void setApprovalReason(String approvalReason) {
        ApprovalReason = approvalReason;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}

UserLogin.java

package GUI;

import info.Admin;
import info.Student;
import info.Teacher;
import info.User;

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.plaf.FontUIResource;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Enumeration;
import java.util.Objects;

import static toolbox.LeaveDataBase.getConnection;

public class UserLogin extends JFrame implements ActionListener {
    private JTextField fieldAccount = new JTextField(); //账号输入框文本
    private JPasswordField fieldPassword = new JPasswordField();//密码输入框文本
    private JButton buttonLogin = new JButton("登  录");
    static User user = new User();//用于存储登录者的账户密码及身份

    Admin admin;
    Teacher teacher;
    Student student;

    public static void main(String[] args) {
        initGobalFont(new Font("宋体", Font.PLAIN, 12));
        try {
            //org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
            new UserLogin();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public UserLogin() {
        this.setTitle("登录系统");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口
        this.setBounds(500, 150, 630, 450);//设置页面大小
        this.setResizable(false);//设置页面不可拖拽改变大小
        this.setLocationRelativeTo(null); // 设置登录界面居中
        this.getContentPane().setLayout(null);
        this.setVisible(true);

        JLabel titleLabel = new JLabel("学生请假管理系统");
        titleLabel.setFont(new Font("华文行楷", Font.PLAIN, 30));
        titleLabel.setIcon(new ImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/logo.png"))));
        titleLabel.setBounds(150, 70, 350, 65);
        this.getContentPane().add(titleLabel);

        //用户账号
        JLabel labelAccount = new JLabel("账号:");
        labelAccount.setFont(new Font("宋体", Font.PLAIN, 20));
        labelAccount.setAlignmentY(CENTER_ALIGNMENT);
        labelAccount.setIcon(new ImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/userName.png"))));
        labelAccount.setBounds(150, 172, 81, 30);
        fieldAccount.setBounds(243, 172, 200, 30);
        //fieldAccount.setText("1");///==========
        this.getContentPane().add(labelAccount);
        this.getContentPane().add(fieldAccount, BorderLayout.CENTER);
        fieldAccount.getDocument().addDocumentListener(new javax.swing.event.DocumentListener() {
                                                           public void changedUpdate(DocumentEvent e) {//这是更改操作的处理
                                                               user.setAccount(fieldAccount.getText().trim());//trim()方法用于去掉你可能误输入的空格号
                                                           }

                                                           public void insertUpdate(DocumentEvent e) {//这是插入操作的处理
                                                               user.setAccount(fieldAccount.getText().trim());
                                                           }

                                                           public void removeUpdate(DocumentEvent e) {//这是删除操作的处理
                                                               user.setAccount(fieldAccount.getText().trim());
                                                           }
                                                       }
        );


        // 用户密码
        JLabel labelPwd = new JLabel("密码:");
        labelPwd.setFont(new Font("宋体", Font.PLAIN, 20));
        labelPwd.setAlignmentY(CENTER_ALIGNMENT);
        labelPwd.setIcon(new ImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/password.png"))));
        labelPwd.setBounds(150, 222, 81, 30);
        fieldPassword.setBounds(243, 222, 200, 30);
        //fieldPassword.setText("1");///
        this.getContentPane().add(labelPwd);
        this.getContentPane().add(fieldPassword, BorderLayout.CENTER);
        fieldPassword.getDocument().addDocumentListener(new javax.swing.event.DocumentListener() {
                                                            public void changedUpdate(DocumentEvent e) {//这是更改操作的处理
                                                                user.setPassword(fieldPassword.getText().trim());//trim()方法用于去掉你可能误输入的空格号
                                                            }

                                                            public void insertUpdate(DocumentEvent e) {//这是插入操作的处理
                                                                user.setPassword(fieldPassword.getText().trim());
                                                            }

                                                            public void removeUpdate(DocumentEvent e) {//这是删除操作的处理
                                                                user.setPassword(fieldPassword.getText().trim());
                                                            }
                                                        }
        );

        // 登陆按钮
        buttonLogin.setBounds(275, 282, 95, 30);
        buttonLogin.setFont(new Font("宋体", Font.PLAIN, 13));
        buttonLogin.setIcon(new ImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/login.png"))));
        this.getContentPane().add(buttonLogin);
        //去掉按钮文字周围的焦点框
        buttonLogin.setFocusPainted(false);
        buttonLogin.addActionListener(this);
        this.setVisible(true);
        this.revalidate();
        this.repaint();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == buttonLogin) {

            boolean LoginUser = false;
            try {
                LoginUser = verifyAccount(user.getAccount(), user.getPassword());
            } catch (SQLException ex) {
                throw new RuntimeException(ex);
            }
            if (LoginUser) {
                //判断权限,加载相应面板
                if (user.getUserIdentity().equals("Student")) {
                    JOptionPane.showMessageDialog(this, "账号密码正确,即将进入系统学生端!", "提示", JOptionPane.INFORMATION_MESSAGE);// 提示
                    new MainWindow(student);
                } else if (user.getUserIdentity().equals("Teacher")) {
                    JOptionPane.showMessageDialog(this, "账号密码正确,即将进入系统教师端!", "提示", JOptionPane.INFORMATION_MESSAGE);//
                    new MainWindow(teacher);
                } else if (user.getUserIdentity().equals("Admin")) {
                    JOptionPane.showMessageDialog(this, "账号密码正确,即将进入系统管理端!", "提示", JOptionPane.INFORMATION_MESSAGE);//
                    new MainWindow(admin);
                }
                this.dispose(); // 关闭当前窗口
            }
        }
    }


    private boolean verifyAccount(String account, String password) throws SQLException {
        // 判断输入账号或密码为空与空格的情况
        if (account == null || "".equals(account.trim()) || password == null || "".equals(password.trim())) {
            // 警示框,"Title",JOptionPane.WARNING_MESSAGE
            JOptionPane.showMessageDialog(null, "账号与密码均不能为空!", "警告", JOptionPane.WARNING_MESSAGE);
        } else {
            Connection conn = getConnection();
            Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            //查询学生表
            ResultSet rs = stmt.executeQuery("SELECT *FROM StudentList WHERE id = '" + account + "' AND password = '" + password + "';");
            if (!rs.isBeforeFirst()) {
                //若学生表中不存在,则查询教师表
                rs = stmt.executeQuery("SELECT *FROM TeacherList WHERE id = '" + account + "' AND password = '" + password + "';");
            }
            if (!rs.isBeforeFirst()) {
                //若学生表与教师表中不存在,则查询管理员表
                rs = stmt.executeQuery("SELECT *FROM AdminList WHERE id = '" + account + "' AND password = '" + password + "';");
            }
            if (!rs.isBeforeFirst()) {
                //若学生表与教师表与管理员表中不存在,则提示账户密码错误
                //错误提示框,"Title",JOptionPane.ERROR_MESSAGE
                JOptionPane.showMessageDialog(this, "账号密码错误,请重新登录!", "警告", JOptionPane.ERROR_MESSAGE);
                fieldPassword.setText(null);
                return false;
            }
            while (rs.next()) {
                user.setUserIdentity(rs.getString(1));
                //创建对应身份信息的实体类并赋值
                if (user.getUserIdentity().equals("Student")) {

                    student = new Student(rs.getString(1),
                            rs.getString(2),
                            rs.getString(3),
                            rs.getString(4),
                            rs.getString(5),
                            rs.getString(6),
                            rs.getString(7),
                            rs.getString(8),
                            rs.getString(9),
                            rs.getString(10),
                            rs.getString(11));
                } else if (user.getUserIdentity().equals("Teacher")) {

                    teacher = new Teacher(rs.getString(1),
                            rs.getString(2),
                            rs.getString(3),
                            rs.getString(4),
                            rs.getString(5),
                            rs.getString(6),
                            rs.getString(7),
                            rs.getString(8),
                            rs.getString(9),
                            rs.getString(10));
                } else if (user.getUserIdentity().equals("Admin")) {

                    admin = new Admin(rs.getString(1),
                            rs.getString(2),
                            rs.getString(3),
                            rs.getString(4),
                            rs.getString(5),
                            rs.getString(6),
                            rs.getString(7),
                            rs.getString(8),
                            rs.getString(9));
                }
            }
            rs.close();
            stmt.close();
            return true;
        }
        return false;
    }

    //全局字体 https://blog.csdn.net/lifaxing/article/details/79365078
    public static void initGobalFont(Font font) {
        FontUIResource fontResource = new FontUIResource(font);
        for (Enumeration<Object> keys = UIManager.getDefaults().keys(); keys.hasMoreElements(); ) {
            Object key = keys.nextElement();
            Object value = UIManager.get(key);
            if (value instanceof FontUIResource) {
                UIManager.put(key, fontResource);
            }
        }
    }
}




MainWindow.java

package GUI;

import info.Admin;
import info.Student;
import info.Teacher;
import panel.PanelAdmin;
import panel.PanelStudent;
import panel.PanelTeacher;

import javax.swing.*;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Objects;

public class MainWindow {
    public static JFrame frame;
    public static JTabbedPane tabbedPane;
    public static JLabel label_status;
    private JMenuBar menuBar;
    private JMenuItem mntmNewMenuItem_exit, menuItem_setting, mntmNewMenuItem_help;
    private JPanel panel_status; //登录状态

    //参数 学生
    public MainWindow(Student student) {
        windowLoads();
        new PanelStudent(student);
    }

    //参数 教师
    public MainWindow(Teacher teacher) {
        windowLoads();
        new PanelTeacher(teacher);
    }

    //参数 管理员
    public MainWindow(Admin admin) {
        windowLoads();
        new PanelAdmin();
    }


    private void windowLoads() {
        frame = new JFrame();
        // 设置窗口标题图标
        frame.setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\ZHUANG\\Desktop\\LeaveSystem1\\LeaveSystem\\src\\images\\icon.png"));
        frame.setTitle("学生请假管理系统");
        frame.setBounds(0, 0, 820, 626);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口
        frame.getContentPane().setLayout(null);
        frame.setVisible(true);
        tabbedPane = new JTabbedPane(JTabbedPane.TOP);
        tabbedPane.setBounds(0, 30, 820, 522);
        frame.getContentPane().add(tabbedPane);
        frame.setResizable(false);//设置页面不可拖拽改变大小
        frame.setLocationRelativeTo(null); // 设置登录界面居中

        // 系统菜单
        menuBar = new JMenuBar();
        menuBar.setBounds(0, 0, 820, 21);
        frame.getContentPane().add(menuBar);

        JMenu mnNewMenu = new JMenu("系统");
        menuBar.add(mnNewMenu);
        mnNewMenu.setIcon(new ImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/base.png"))));

        menuItem_setting = new JMenuItem("设置");
        mnNewMenu.add(menuItem_setting);

        mntmNewMenuItem_exit = new JMenuItem("直接退出");
        mnNewMenu.add(mntmNewMenuItem_exit);
        mntmNewMenuItem_exit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Object[] options = {"确认", "取消"};        //定义按钮上的文字
                int n = JOptionPane.showOptionDialog(null, "是否退出本账户?", "提示", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]);
                if (n == 0) {
                    frame.dispose();
                    new UserLogin();
                }
            }
        });

        JMenu mnNewMenu_1 = new JMenu("关于");
        menuBar.add(mnNewMenu_1);

        mntmNewMenuItem_help = new JMenuItem("帮助");
        mnNewMenu_1.add(mntmNewMenuItem_help);

        //状态栏
        panel_status = new JPanel();
        panel_status.setLocation(0, 570);
        panel_status.setSize(820, 22);
        panel_status.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));//边框
        frame.getContentPane().add(panel_status);
        label_status = new JLabel("登录成功");
        label_status.setBounds(207, 1, 820, 25);
        JProgressBar progressBar = new JProgressBar();
        progressBar.setBounds(0, 1, 200, 25);
        panel_status.setLayout(null);
        panel_status.add(label_status);
        panel_status.add(progressBar);
        frame.setVisible(true);

    }

}

TeacherReviewFrame.java

package Functional.Teacher;

import GUI.UserLogin;
import info.LeaveData;

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.table.DefaultTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Objects;

import static toolbox.LeaveDataBase.getConnection;

//{"编号", "姓名","学号","班级","开始时间" ,"结束时间", "申请状态", "申请理由"}
public class TeacherReviewFrame extends JFrame {
    public TeacherReviewFrame(LeaveData d, JPanel panel_leave, JTable jtable) {
        String[] data = new String[]{d.getNum(), d.getName(), d.getID(), d.getClassName(), d.getStartTime(), d.getEndEime(), d.getState(), d.getReason()};

        this.setLayout(null); // 绝对布局

        JLabel name = new JLabel("编号:"); // 定义用户名文本标签
        name.setBounds(30, 42, 74, 15); // 设置标签文职
        this.add(name);// 添加到本界面

        // 定义输入密码框
        JTextField nameText = new JTextField(); // 定义一个文本输入框
        nameText.setBounds(104, 40, 148, 25); // 设置位置
        nameText.setText(data[0]);
        nameText.setEditable(false);
        this.add(nameText);// 添加到本界面

        JLabel requestDate = new JLabel("姓名:");
        requestDate.setBounds(30, 70, 65, 21);
        this.add(requestDate);

        JTextField requestDateText = new JTextField();
        requestDateText.setBounds(104, 68, 148, 25);
        requestDateText.setText(data[1]);
        requestDateText.setEditable(false);
        this.add(requestDateText);
        requestDateText.setColumns(10);


        JLabel ClassName = new JLabel("学号:");
        ClassName.setBounds(30, 100, 65, 25);
        this.add(ClassName);

        JTextField ClassNameText = new JTextField();
        ClassNameText.setColumns(10);
        ClassNameText.setText(data[2]);
        ClassNameText.setEditable(false);
        ClassNameText.setBounds(104, 100, 148, 25);
        this.add(ClassNameText);

        JLabel Phone = new JLabel("班级:");
        Phone.setBounds(30, 134, 87, 21);
        this.add(Phone);

        JTextField PhoneText = new JTextField();
        PhoneText.setColumns(10);
        PhoneText.setText(data[3]);
        PhoneText.setEditable(false);
        PhoneText.setBounds(104, 134, 148, 25);
        this.add(PhoneText);
//{"编号", "姓名","学号","班级","开始时间" ,"结束时间", "申请状态", "申请理由"}
        JLabel type = new JLabel("开始时间:");
        type.setBounds(30, 164, 67, 21);
        this.add(type);

        JTextField typeText = new JTextField();
        typeText.setColumns(10);
        typeText.setText(data[4]);
        typeText.setEditable(false);
        typeText.setBounds(104, 164, 148, 21);
        this.add(typeText);

        JTextField StartDateText = new JTextField();
        StartDateText.setColumns(10);
        StartDateText.setText(data[5]);
        StartDateText.setEditable(false);
        StartDateText.setBounds(104, 200, 148, 21);
        this.add(StartDateText);

        JLabel StartDate = new JLabel("结束时间:");
        StartDate.setBounds(30, 200, 65, 21);
        this.add(StartDate);

        JLabel EndDate = new JLabel("申请状态:");
        EndDate.setBounds(30, 230, 65, 21);
        this.add(EndDate);

        JTextField EndDateText = new JTextField();
        EndDateText.setColumns(10);
        EndDateText.setText(data[6]);
        EndDateText.setEditable(false);
        EndDateText.setBounds(104, 230, 148, 21);
        this.add(EndDateText);


        JLabel cause = new JLabel("申请原因:");
        cause.setBounds(30, 260, 65, 21);
        this.add(cause);

        JTextArea causeText = new JTextArea();
        causeText.setText(data[7]);
        causeText.setEditable(false);
        causeText.setBounds(104, 260, 148, 44);
        this.add(causeText);

        JLabel cause1 = new JLabel("审批意见:");
        cause1.setBounds(30, 320, 65, 21);
        this.add(cause1);
        JTextArea causeText1 = new JTextArea();
        causeText1.setBounds(104, 320, 148, 44);
        this.add(causeText1);
        causeText1.getDocument().addDocumentListener(new javax.swing.event.DocumentListener() {
                                                         public void changedUpdate(DocumentEvent e) {//这是更改操作的处理
                                                             String s = causeText1.getText().trim();//trim()方法用于去掉你可能误输入的空格号
                                                             d.setApprovalReason(s);
                                                         }

                                                         public void insertUpdate(DocumentEvent e) {//这是插入操作的处理
                                                             String s = causeText1.getText().trim();
                                                             d.setApprovalReason(s);
                                                         }

                                                         public void removeUpdate(DocumentEvent e) {//这是删除操作的处理
                                                             String s = causeText1.getText().trim();
                                                             d.setApprovalReason(s);
                                                         }

                                                     }
        );


        JButton btAdd = new JButton("批准"); // 添加按钮
        btAdd.setBounds(63, 400, 80, 30);// 设置位置
        btAdd.setIcon(new ImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/R-C.jpg"))));
        this.add(btAdd);// 将注册按钮添加到界面
        btAdd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d.setState(d.getState().substring(0, 2) + "成功");
                EndDateText.setText(d.getState());
                try {
                    Connection conn = getConnection();
                    Statement stmt = null;
                    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                    String l = "ApprovalReason='" + d.getApprovalReason() + "'," + " state='" + d.getState() + "'";
                    //System.out.println("UPDATE LeaveData SET " + l + " WHERE num='" + d.getNum() +"';");
                    stmt.executeUpdate("UPDATE LeaveData SET " + l + " WHERE num='" + d.getNum() + "';");
                    int[] rows = jtable.getSelectedRows(); // 获取选中行号
                    DefaultTableModel model = (DefaultTableModel) jtable.getModel(); // 获取表格数据模型
                    for (int i = rows.length - 1; i >= 0; i--) {
                        model.removeRow(rows[i]); // 删除选中行
                    }
                    jtable.updateUI(); // 刷新表格
                    //showTable(panel_leave);
                    stmt.close();
                } catch (Exception ex) {
                    throw new RuntimeException(ex);
                }
                dispose(); // 关闭界面
            }
        });

        // 定义返回按钮
        JButton btBack = new JButton("不批"); // 定义一个返回按钮
        btBack.setBounds(160, 400, 80, 30);
        btBack.setIcon(new ImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/delete.png"))));
        this.add(btBack); // 将返回按钮添加到界面
        btBack.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d.setState(d.getState().substring(0, 2) + "失败");
                EndDateText.setText(d.getState());  //状态
                try {
                    Connection conn = getConnection();
                    Statement stmt = null;
                    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                    String l = "ApprovalReason='" + d.getApprovalReason() + "'," + " state='" + d.getState() + "'";
                    System.out.println("UPDATE LeaveData SET " + l + " WHERE num='" + d.getNum() + "';");
                    stmt.executeUpdate("UPDATE LeaveData SET " + l + " WHERE num='" + d.getNum() + "';");
                    int[] rows = jtable.getSelectedRows(); // 获取选中行号
                    DefaultTableModel model = (DefaultTableModel) jtable.getModel(); // 获取表格数据模型
                    for (int i = rows.length - 1; i >= 0; i--) {
                        model.removeRow(rows[i]); // 删除选中行
                    }
                    jtable.updateUI(); // 刷新表格
                    //showTable(panel_leave);
                    stmt.close();
                } catch (Exception ex) {
                    throw new RuntimeException(ex);
                }
                dispose(); // 关闭界面
            }
        });


        setTitle("审核界面");
        setSize(330, 524); // 设置界面大小
        this.setVisible(true);
        setResizable(false); // 设置界面大小不可改变
        setLocationRelativeTo(null); // 设置登录界面居中
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // 设置默认关闭操作

    }
}

leaveList.java

package Functional.Student;

import info.LeaveData;
import info.Student;

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import static toolbox.LeaveDataBase.getConnection;

public class leaveList extends JFrame {

    public leaveList(Student student) {
        List<LeaveData> dataList = new ArrayList<LeaveData>();
        try {
            //查询数据库对应该学生学号的数据
            Connection conn = getConnection();
            Statement stmt = null;
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            ResultSet rs = stmt.executeQuery("SELECT *FROM LeaveData WHERE id='" + student.getId() + "';");
            if (rs.isBeforeFirst()) {
                while (rs.next()) {
                    LeaveData leaveData = new LeaveData();
                    leaveData.setNum(rs.getString(1));
                    leaveData.setName(rs.getString(2));
                    leaveData.setID(rs.getString(3));
                    leaveData.setSex(rs.getString(4));
                    leaveData.setAge(rs.getString(5));
                    leaveData.setFaculties(rs.getString(6));
                    leaveData.setProfession(rs.getString(7));
                    leaveData.setClassName(rs.getString(8));
                    leaveData.setPhone(rs.getString(9));
                    leaveData.setRequestData(rs.getString(10));
                    leaveData.setStartTime(rs.getString(11));
                    leaveData.setEndEime(rs.getString(12));
                    leaveData.setReason(rs.getString(13));
                    leaveData.setApprover(rs.getString(14));
                    leaveData.setApprovalReason(rs.getString(15));
                    leaveData.setState(rs.getString(16));
                    dataList.add(leaveData);
                }
            } else {
                JOptionPane.showMessageDialog(this, "无请假历史数据!", "提示", JOptionPane.ERROR_MESSAGE);
            }
            rs.close();
            stmt.close();
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }


        String[] columnName = new String[]{"编号", "申请日期", "开始时间", "结束时间", "申请理由", "审核人", "审核意见", "状态"};
        String[][] columnDate = new String[dataList.size()][];
        for (int i = 0; i < dataList.size(); i++) {
            LeaveData d = dataList.get(i);
            columnDate[i] = new String[]{d.getNum(), d.getRequestData(), d.getStartTime(), d.getEndEime(), d.getReason(), d.getApprover(), d.getApprovalReason(), d.getState()};
        }

        this.setLayout(null); // 绝对布局
        setSize(680, 522); // 设置界面大小
        this.setVisible(true);
        this.setTitle("查询");
        setResizable(false); // 设置界面大小不可改变
        setLocationRelativeTo(null); // 设置登录界面居中
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // 设置默认关闭操作

        JLabel title = new JLabel("请假信息列表");
        title.setFont(new Font("宋体", Font.PLAIN, 22));
        title.setBounds(260, 10, 180, 50);
        this.add(title);

        DefaultTableModel dtm = new DefaultTableModel(columnDate, columnName);
        JTable jtable = new JTable(dtm) {
            //可选择表格行,但不可编辑
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };
        jtable.setShowVerticalLines(false); //去掉竖线
        DefaultTableCellRenderer r = new DefaultTableCellRenderer(); //此三行 内容居中
        r.setHorizontalAlignment(JLabel.CENTER);
        jtable.getTableHeader().setReorderingAllowed(false);//  表头不可拖动
        jtable.setDefaultRenderer(Object.class, r);
        JScrollPane scrollPane = new JScrollPane(); //直接添加容器,表头不显示
        scrollPane.setBounds(30, 70, 600, 370);
        this.add(scrollPane);
        scrollPane.setViewportView(jtable);

        //给table加上一个鼠标事件监听器对象
        jtable.addMouseListener(new MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent e) {
                //是否左建双击
                if (e.getClickCount() == 2 && SwingUtilities.isLeftMouseButton(e)) {
                    //添加双击后的
                    int count = jtable.getSelectedRow();//获取你选中的行号
                    String[] datarow = new String[]{"", "", "", "", "", "", "", ""};
                    for (int i = 0; i < datarow.length; i++) {
                        String getname = jtable.getValueAt(count, i).toString();//读取获取行号的某一列的值
                        datarow[i] = getname;
                    }
                    new JtablePopUps(datarow);
                }
            }
        });

        JLabel tip = new JLabel("tip:双击表行可以查看其详细信息!");
        tip.setFont(new Font("宋体", Font.PLAIN, 12));
        tip.setBounds(30, 435, 300, 50);
        this.add(tip);
    }
}


注:完整内容可下载查看完整报告

下载链接
https://download.csdn.net/download/weixin_66397563/87976888

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

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

相关文章

mac配置VScode主题加makefile etc

profile配置&#xff1a; 参考链接&#xff1a;https://www.bilibili.com/video/BV1YW4y1M7uX/?spm_id_from333.999.0.0&vd_sourced75fca5b05d8be06d13cfffd2f4f7ab5 https://code.visualstudio.com/docs/cpp/config-clang-mac vscode profiles如下&#xff1a; {//…

蓝桥杯专题-试题版-【九宫重排】【格子刷油漆】【回文数字】【国王的烦恼】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

空间曲线的切线和法平面与曲面的切平面和法线

&#xff08;一&#xff09;空间曲线的切线和法平面 1. 参数方程的形式 理解和记住如下逻辑&#xff1a; 该两个公式&#xff0c;笔者可以理解但是无法证明。 2. 参数方程外的第二种形式&#xff1a; 此种变换的本质&#xff0c;就是将多元函数转换为参数方程的形式。如此看…

English Learning - L3 作业打卡 Lesson7 Day54 2023.6.29 周四

English Learning - L3 作业打卡 Lesson7 Day54 2023.6.29 周四 引言&#x1f349;句1: I daydreamed like I did as a little girl and I imagined myself walking gracefully, helping other people through my journey and snowboarding again.成分划分连读爆破语调 &#x…

Learn Mongodb 可是工具及基本命令的使用 ③

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; PHP MYSQL &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

Spark 3.4.0新特性--UI支持存储在RocksDB中

背景 对于Spark来说&#xff0c;目前存储所有的事件信息以及UI所需要的信息都是默认存储在内存中&#xff0c;这在CS中&#xff0c;对于以Spark作为 Server的模式下&#xff0c;会导致OOM&#xff0c;也会导致造成之前作者提交PR&#xff1a;Multi sparkSession should share …

Java泛型详解:为什么使用泛型?如何使用泛型?

Java泛型详解&#xff1a;为什么使用泛型&#xff1f;如何使用泛型&#xff1f; &#x1f498;一、为什么使用泛型&#xff1f;&#x1f498;二、如何使用泛型&#xff1f;&#x1f496;1. 泛型类的使用&#xff1a;&#x1f496;2. 泛型方法的使用&#xff1a;&#x1f496;3.…

什么是ABP?

1、ABP背后的思想——DDD&#xff08;领域驱动设计&#xff09; ABP架构&#xff1a; ABP实现了多层架构&#xff08;领域层&#xff0c;应用层&#xff0c;基础设施层和表示层&#xff09;&#xff0c;以及领域驱动设计&#xff08;实体&#xff0c;存储库&#xff0c;领域服…

(R)-tert-Bu4-DOTAGA,817562-90-6,(R)-DOTAGA-四叔丁酯,的反应特点及性质研究

​ 规格单位&#xff1a;g |货期&#xff1a;按​照具体的库存进行提供 | 纯度&#xff1a;95% 试剂描述&#xff1a; (R)-tert-Bu4-DOTAGA大环化合物是一种多齿配体&#xff0c;其配位原子位于环的骨架上&#xff0c;大环的配位原子可以是O、N、S、Se、P、As等。有二维的…

C++primer(第五版)第七章(类)

类的基本思想是数据抽象和封装. 数据抽象是一种依赖于接口和实现的分离的编程技术. 封装实现了类的接口和实现的分离. 7.1定义抽象数据类型 定义一个抽象数据类型使用关键字struct或是clas(差别仅在于默认访问权限修饰符). //这是一个简单的类定义 class Student{ …

C++ 结合 opencv读取图片与视频

C 结合 opencv读取图片与视频 文章目录 C 结合 opencv读取图片与视频一、安装opencv二 、配置文件准备2.1 新建立文件夹2.2 .vscode文件下配置文件&#xff08;1&#xff09;配置tasks.json文件&#xff08;1&#xff09;配置launch.json 三 、src文件下代码编写3.1 图片的读取…

matplotlib设置坐标轴为象限模式

import numpy as np import matplotlib.pyplot as pltx np.linspace(-np.pi, np.pi, 1000) cosy np.cos(x) siny np.sin(x)plt.xlim(min(x), max(x)) plt.ylim(min(cosy), max(cosy)0.5) plt.plot(x, cosy) plt.plot(x, siny) # 设置坐标刻度 plt.xticks([-np.pi, -np.pi/2,…

ubuntu安装python

ubuntu安装python 安装包下载 切换到想要的文件夹&#xff1a;如 cd /usr/local/python3 下载安装包 wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz 网速慢的话也可以现在本电脑下载tgz文件&#xff0c;然后上传到服务器 第一次上传失败&#xff01; Py…

SFP3012A-ASEMI代理海矽美快恢复二极管SFP3012A

编辑&#xff1a;ll SFP3012A-ASEMI代理海矽美快恢复二极管SFP3012A 型号&#xff1a;SFP3012A 品牌&#xff1a;MHCHXM&#xff08;海矽美&#xff09; 芯片个数&#xff1a;单芯片 封装&#xff1a;TO-247 恢复时间&#xff1a;≤75ns 工作温度&#xff1a;-40C~175C …

JS中的异步与Promise使用

同步与异步 我们知道JS是一个单线程的语言&#xff0c;即在同一时间只能做一件事情。为什么设计为当线程呢。&#xff1f;在早期JS是为了在浏览器中运行&#xff0c;我们可以利用JS来制作一些页面的效果也可以和用户做一些交互。所以设计为单线程也是为了避免复杂度。比如在网…

常见面试题之线程中并发锁(一)

1. 讲一下synchronized关键字的底层原理&#xff1f; 1.1. 基本使用 如下抢票的代码&#xff0c;如果不加锁&#xff0c;就会出现超卖或者一张票卖给多个人 Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】&#xff0c;其它线程再想获取这…

常州工学院计算机组成原理(样卷)

微程序控制器&#xff1a;仿照程序设计的基本方法&#xff0c;将实现指令系统中所有指令所需要的所有控制信号按照一定的规则编码成微指令&#xff0c;若干条实现同一条指令功能的微指令构成一段微程序&#xff0c;将实现所有指令的微程序存放在一个只读存储器ROM中&#xff0c…

一套A股量化系统

shares A 股量化交易系统后台开发语言 Go/Python gmsec算法使用&#xff1a;pytorch全链路量化&#xff0c;行业板块分析&#xff0c;直接贴图。欢迎体验

【计算机视觉】最新综述:南洋理工和上海AI Lab提出基于Transformer的视觉分割综述

文章目录 一、导读二、摘要三、内容解读3.1 研究动机3.2 这篇综述的特色&#xff0c;以及与以往的Transformer综述有什么区别&#xff1f;3.3 Transformer-Based 分割和检测方法总结与对比3.4 相关研究领域的方法总结与对比3.5 不同方法的实验结果对比3.6 未来可以进行的方向 一…

vue三种方式导出报表至excel

1、序言 1.1、源码 源码在下方&#xff0c;复制运行&#xff0c;安装相应的插件即可 1.2、坑 方式一、方式二安装相同插件&#xff1a; npm install xlsx xlsx-style file-saver 导入 xlsx-style 会报如下的错误 解决办法&#xff1a; &#xff08;1&#xff09;去node_modules…