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

2023-10-31


声明:未经允许,请勿转载

运行结果

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

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

在这里插入图片描述

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

在这里插入图片描述

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);

    }

}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【java 程序设计实训】学生请假管理系统 的相关文章

  • Python Anaconda:如何测试更新的库是否与我现有的代码兼容?

    我在 Windows 7 机器上使用 Python 2 7 Anaconda 安装进行数据分析和科学计算 当新的库发布时 例如新版本的 pandas patsy 等 您建议我如何测试新版本与现有代码的兼容性 是否可以在同一台机器上安装两个
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • Karaf / Maven - 无法解决:缺少需求 osgi.wiring.package

    我无法在 Karaf 版本 3 0 1 中启动捆绑包 该包是使用 Maven 构建的并导入gson http mvnrepository com artifact com google code gson gson 2 3 1 我按照要求将
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 可以使用哪些技术来衡量 pandas/numpy 解决方案的性能

    Question 如何简洁全面地衡量下面各个功能的性能 Example 考虑数据框df df pd DataFrame Group list QLCKPXNLNTIXAWYMWACA Value 29 52 71 51 45 76 68 6
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 使用 PIL 在 Tkinter 中显示动画 GIF

    我正在尝试制作一个程序来使用 Tkinter 显示动画 GIF 这是我最初使用的代码 from future import division Just because division doesn t work right in 2 7 4
  • 如何将带有参数的Python装饰器实现为类?

    我正在尝试实现一个接受一些参数的装饰器 通常带有参数的装饰器被实现为双重嵌套闭包 如下所示 def mydecorator param1 param2 do something with params def wrapper fn def
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 如何获取pandas中groupby对象中的组数?

    我想知道有多少个独特的组需要执行计算 给定一个名为 groupby 的对象dfgroup 我们如何找到组的数量 简单 快速 Pandaic ngroups 较新版本的 groupby API pandas gt 0 23 提供了此 未记录的
  • 将 Keras 集成到 SKLearn 管道?

    我有一个 sklearn 管道 对异构数据类型 布尔 分类 数字 文本 执行特征工程 并想尝试使用神经网络作为我的学习算法来拟合模型 我遇到了输入数据形状的一些问题 我想知道我想做的事情是否可能 或者我是否应该尝试不同的方法 我尝试了几种不
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • java实现FIFO和LRU页面置换算法

    FIFO是内存管理的一种页面置换算法 FIFO First Input First Output 即先进先出队列 例 在超市购物之后会提着我们满满的购物车来到收银台排在结账队伍的最后 眼睁睁地看着前面的客户一个个离开 这就是一种先进先出机制
  • qt QObject::connect: Parentheses expected,

    出现QObject connect Parentheses expected 这个错是我自己粗心 但也不得不吐槽下qt的不合理设计 connect时槽函数忘记加括号也可以编译通过 而且connect忘记加括号的槽函数是可以接收到信号的 因为
  • C语言 习题3-1 比较大小

    题目要求 本题要求将输入的任意3个整数从小到大输出 输入 输出格式 输入在一行中给出3个整数 其间以空格分隔 输出在一行中将3个整数从小到大输出 其间以 gt 相连 思路 写一个通用的排序函数 排序后再输出 代码 include
  • 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)的问题。

    问题描述 在运行SpringBoot项目时 出现以下错误 大多原因是一下两个原因 1 在resources文件加下创建的mapper文件夹类型没有正确选择 eclipse选择Folder idea选择Directory 2 映射文件的map
  • CentOs自带mysql卸载时出现无法卸载情况的解决办法

    CentOs自带mysql卸载时出现无法卸载情况的解决办法 首先通过如下命令来查看我们的操作系统上是否已经安装了mysql数据库 rpm qa grep mysql 这个命令就会查看该操作系统上是否已经安装了mysql数据库 发现出现如下情
  • 数据仓库灵魂30问之数据仓库、数据中台、数据湖有什么区别

    先说结论 数据仓库实行分而治之 面向BI 商业智能 数据中台实行一统天下 面向DateAPI 数据服务API 数据湖实行无为而治 面向AI 人工智能 他们三个实行的策略不同 用途不同 但是数据中台可以包容数据仓库与数据湖 数据湖与数据仓库是
  • 2023电子信息工程毕业设计题目选题推荐

    文章目录 1前言 2 如何选题 2 1 嵌入式开发方向 2 2 物联网方向 2 3 移动通信方向 2 4 人工智能方向 2 5 算法研究方向 2 6 移动应用开发方向 2 7 网络通信方向 2 8 学长作品展示 4 最后 1前言 近期不少学
  • sql截去最后一位_SQL截取最后一个由字符分隔的字符串

    SQL如果一个字符串由某个字符分隔 例如 火锅 gt 中餐 gt 极品美食 10 20 300 怎么得到字符最后一个字符串 极品美食 300 使用reverse配合charindex来实现 reverse是把字符串倒置 然后通过charin
  • 终于知道程序员为什么总是带个耳机了!

    能别带耳机吗 你能别来打扰我工作吗 不能 前阵子有篇热文 当一个程序员一天被打扰 10 次 后果很惊人 看后网友都表示深有同感 来看看这些网友都是怎么讲的 热心市民 开发小哥哥旁边放着一个计数器 我好奇的问他这个是记录每天的bug数吗 他说
  • 一分钟带你解决“command not found“报错

    长话短说 command not found 找不到命令 这类错误出现的原因有很多 根据具体情况分析 常见的有以下3种 1 不是可执行命令 也就是你输入的代码不合法 没有被定义 root localhost test jsjsjjdjd b
  • Python读写Excel文件第三方库汇总,你想要的都在这儿!

    恢复内容开始 常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库 支持 xls以及 xlsx文件 http xlrd readthedocs io en latest 1 xlrd支持 xls xlsx文件的读2
  • 安全帽识别 安全帽佩戴效果 安全帽检测 yolov4安全帽识别 yolov3

    施工场景下的行为识别领域 该应用领域在技术上可拆分为两部分 视频跟踪和行为识别 这一周密集调研了文献 发现着实是一个大坑 其中的视频跟踪最近的各頂会论文出现最多的是单目标跟踪 而我们要解决的确是多目标跟踪 最近出的较好的能实用性的是deep
  • react+umi+antdesign+typescript从零构建后台系统

    确保电脑有node 查看方式 node v 2 确保电脑有umi 查看方式 umi v 没有umi的安装方式 npm install g umi 3 执行以下代码 npm create umi 文件名 或者 yarn create umi
  • 不要在问了!工作六年总结的Java面试题与经验

    前言 最近看到很多小伙伴都在因为面试烦恼 所以小编总结了一些面试经验 希望能帮助到大家 一 面试到底在问些什么东西 首先你要知道 面试官的提问和你简历上写的内容是紧密联系的 所以你简历上写的技能一定要会 一般面试包括下面几方面知识类型 Ja
  • 解决[Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘validate‘ of undefined“

    在做前后端登录时出现下列错误 解决如下 this refs loginForm validate 中的与ref loginForm 名字要相同 或者要定义这个ref 没有定义或者名称不一致都会出现上述错误
  • 你的数字藏品可能真的只是一张图片

    国外 NFT 市场的火爆也同样引燃了国内的市场 像腾讯 阿里等诸多大厂纷纷入局 同时 大量中小企业也在这些头部企业的带领下聚集而来 出于政策风险隐患的防范要求 国内的区块链并不是国外的公链 而是由一个或多个机构独立部署的联盟链 同时也将 N
  • CMD查看当前文件路径下的所有文件名

    介绍 我们知道Linux系统下查看当前文件路径下的所有文件名 可以用ls或ll来查看 那么CMD中怎么查看当前路径下的所有文件呢 方案 使用 dir 命令即可 效果如下
  • Go语言编程思想3——错误处理和资源管理

    Go语言编程思想3 错误处理和资源管理 资源管理 及时关闭文件 及时释放资源 如果打开的文件还未关闭就因为出错而在中间跳出 就无法保证有效的资源管理 因此在这里两者一起进行考虑 一 defer调用 调用在函数结束时发生 在return pa
  • echarts 调整x类目轴axisLabel间距

    场景 产品认为x轴的刻度太密集 需要稀一点 调研 关于这个需求 想到的有 xAxis interval 指定的是所有横坐标的间隔 需要自行计算间隔多少 xAxis splitNumber 对类目轴不生效 xAxis axisLabel fo
  • 【java 程序设计实训】学生请假管理系统

    学生请假管理系统 运行结果 学生请假管理系统需求分析 GUI 编程 事件处理 数据库编程 部分代码 项目结构 实体类 Admin java LeaveData java UserLogin java MainWindow java leav