首页 > 基础资料 博客日记

学生考勤管理系统设计(Java)

2024-09-22 08:00:07基础资料围观127

Java资料网推荐学生考勤管理系统设计(Java)这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣

一、项目简介

(一)项目背景

       本项目旨在开发一个学生考勤管理系统,帮助学校或教育机构有效管理学生的出勤情况和缺课记录。学校每天都要面对大量学生的考勤记录,包括正常出勤、迟到、早退、请假以及旷课等情况。准确记录和管理学生的缺课情况对于评估学生学习态度、帮助学生规范学习行为、提高教育质量非常关键。此系统可以帮助学校管理者和教职工及时跟踪学生的考勤情况,采取必要的教育干预措施,以确保学生的学习效果和维持学校课堂秩序。

(二)系统设计目标

       考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。提供简单易用的界面,让教师或管理员能够快速录入修改学生的考勤记录。支持按学生和时间段查询缺课情况,并能统计旷课次数和旷课课程,帮助管理者了解学生的学习状况和课堂管理的效果。考勤管理系统能提供以下具体功能:

(1)录入学生的缺课记录;

(2)修改某个学生的缺课记录;

(3)查询某个学生的缺课情况;

(4)统计某段时间内,旷课学生姓名及旷课次数;

(5)统计某段时间内,有学生旷课的课程及旷课人次;

(三)用户页面设计

       通过用户界面来直观的实现操作,操作尽量简单方便。主要以对话框等GUI组件来实现用户的交互。可以输入和查询相应的信息以及提示信息,并可以实现简单统计。设计界面布局合理,功能模块清晰。

(四)方案设计

       系统将通过图形用户界面(GUI)与用户进行交互,并通过MySQL数据库存储和检索数据。

   (1)数据库交互

       使用JDBC连接MySQL数据库,执行SQL语句实现数据的插入、查询和更新操作。数据库表设计包括:attendance_records表,存储学生的姓名、学号、缺勤日期、缺勤课时、缺勤科目和缺勤类型等信息。

   (2)图形用户界面 (GUI)

       使用Java Swing实现用户界面,包括输入面板(InputPanel)、查询面板(QueryPanel)和修改面板(UpdatePanel)。每个面板布局使用GridLayout或其他适当的布局管理器,确保界面组件的合理排列和美观性。

   (3)事件处理

       为按钮添加事件监听器(ActionListener),处理用户点击事件。在事件处理程序中,从文本框和下拉列表中获取用户输入的数据,并调用相应的数据库操作方法。

   (4)异常处理

       使用try-catch-finally结构处理数据库操作中可能发生的异常,保证程序的稳定性和可靠性。在异常处理中,适时关闭数据库连接和释放资源。

(五)项目的实际应用

       该系统可以应用于各级各类学校,包括中小学、高中、大学等教育机构,也可以用于企业培训等场景。帮助管理者有效管理学生和课堂,从而采取有效措施提升教育质量和学生的学习效果。

二、项目采用技术

(1)编程语言:

       本项目使用Java编程语言,因其跨平台性、丰富的标准库以及对GUI和数据库操作的良好支持。

(2)集成开发环境 (IDE):

       使用IntelliJ IDEA作为集成开发环境,以提高开发效率和代码质量。

(3)图形用户界面 (GUI):

       Java Swing:用于创建桌面应用程序的图形用户界面,提供丰富的GUI组件,如 JFrame, JPanel, JButton, JTextField, JLabel, JComboBox, JTextArea 等。

(4)数据库:

       MySQL:用于存储学生考勤记录,因其性能优越、易于使用和广泛的社区支持。JDBC (Java Database Connectivity):用于连接和操作MySQL数据库,实现数据的插入、查询和更新等操作。

(5)布局管理器:

       GridLayout:用于面板布局管理,确保组件按照网格排列,界面整齐美观。

(6)事件处理:

       ActionListener:用于处理按钮点击事件,实现用户与系统的交互。

(7)异常处理:

       try-catch-finally结构:用于捕获和处理数据库操作中的异常,保证程序的稳定性。

(8)项目文件结构:

下面我们就项目中的主要部分文件及其功能展开描述:

       DatabaseHelper.class:数据库辅助类,提供了与数据库交互的方法,包括插入、查询和更新学生考勤记录。使用JDBC连接MySQL数据库,使用SQL语句进行数据库操作,采用try-catch-finally结构处理异常,确保数据库连接及时关闭。

       InputPanel.class:输入面板类,提供用户界面,用户可以通过该面板录入学生缺课记录。使用JPanel、JTextField、JLabel、JComboBox和JButton等Swing组件,使用GridLayout布局管理器管理组件排列,使用ActionListener处理按钮点击,调用DatabaseHelper.saveToDatabase方法将输入的数据保存到数据库。

       QueryPanel.class:查询面板类,提供用户界面,用户可以通过该面板查询学生缺课记录。使用JPanel、JTextField、JButton和JTextArea等Swing组件,使用GridLayout布局管理器管理组件排列,使用ActionListener 处理按钮点击事件,调用 DatabaseHelper.queryDatabase 方法从数据库中查询数据,并在JTextArea中显示结果。

       UpdatePanel.class:更新面板类,提供用户界面,用户可以通过该面板更新学生缺课记录。 

       在我们的项目设计中每个面板类都利用了Java Swing组件、布局管理器和事件处理机制来实现相应的功能。同时,通过 DatabaseHelper 类处理数据库操作,实现了数据的插入、查询和更新操作。

三、功能需求分析

       本考勤管理系统旨在管理学生的缺课情况,提供录入、修改、查询和统计等功能。系统通过图形用户界面(GUI)与用户交互,使用MySQL数据库进行数据存储和检索。下面我们详细分析每个功能需求的具体内容和实现方式:

(1)录入学生的缺课记录

       用户能够通过系统界面录入学生的缺课信息。每条缺课记录包括以下信息:学生姓名、学生学号、缺课日期、第几节课、课程名称、缺课类型(迟到、早退、请假、旷课)。

输入:

       文本输入框:学生姓名、学生学号、缺课日期、第几节课、课程名称

       下拉菜单:缺课类型(迟到、早退、请假、旷课)

输出:

      提交后,信息将被保存到数据库中,并弹出确认对话框,提示用户“缺课记录录入成功”。

部分代码实现如下(完整代码将在功能演示部分给出):使用InputPanel类创建一个输入界面,包含上述字段的文本输入框和一个提交按钮。在用户点击提交按钮后,通过DatabaseHelper类将录入的信息保存到数据库中。

public class InputPanel extends JPanel {
    // 省略构造函数和字段定义
    
    private void saveToDatabase(String studentName, String studentID, String date, String lesson, String course, String absenceType) {
        DatabaseHelper databaseHelper = new DatabaseHelper();
        DatabaseHelper.saveToDatabase(studentName, studentID, date, lesson, course, absenceType);
    }
}

(2)修改某个学生的缺课记录

       用户需要能够修改已存在的缺课记录,更新缺课记录中的字段。 

代码实现:使用updatePanel类创建一个修改界面,在用户点击修改按钮后,通过DatabaseHelper类更新数据库中的记录。

public class updatePanel extends JPanel {
    // 省略构造函数和字段定义
    
    private void saveToDatabase(String studentName, String studentID, String date, String lesson, String course, String absenceType) {
        DatabaseHelper databaseHelper = new DatabaseHelper();
        DatabaseHelper.updateDatabase(studentName, studentID, date, lesson, course, absenceType);
    }
}

(3)查询某个学生的缺课情况

       用户能够通过系统界面查询某个学生的所有缺课记录。查询结果将在界面上显示。

输入:

      文本输入框:学生姓名、学生学号

输出:

       查询结果显示在文本区域,包括缺课日期、第几节课、课程名称和缺课类型。

代码实现:使用QueryPanel类创建一个查询界面,包含学生学号的输入框和一个查询按钮。在用户点击查询按钮后,通过DatabaseHelper类从数据库中检索记录,并在文本区域显示查询结果。

public class QueryPanel extends JPanel {
    // 省略构造函数和字段定义
    
    private void saveToDatabase(String studentName, String studentID) {
        DatabaseHelper databaseHelper = new DatabaseHelper();
        String result = databaseHelper.queryDatabase(studentID);
        this.textArea.setText(result);
    }
}

(4)统计某段时间内,旷课学生姓名及旷课次数

       用户能够查询某段时间内旷课的学生姓名及其旷课次数,系统通过统计旷课记录来生成结果。

代码实现:在DatabaseHelper类中添加统计功能的方法,从数据库中检索指定时间段内的旷课记录,并进行统计。

输入:

       文本输入框:开始日期、结束日期

输出:

       查询结果显示在文本区域,包括学生姓名及其旷课次数。

public class DatabaseHelper {
    public static String queryAbsentStudents(String startDate, String endDate) {
        // 实现数据库查询和统计逻辑
        // 返回结果字符串
    }
}

(5)统计某段时间内有学生旷课的课程及旷课人次

       用户能够查询某段时间内有学生旷课的课程及其旷课人次,系统通过统计旷课记录来生成结果。

输入:

       文本输入框:开始日期、结束日期

输出:

       查询结果显示在文本区域,包括课程名称及其旷课人次

代码实现:

       在DatabaseHelper类中实现统计方法,根据输入的日期范围统计旷课课程及人次。

public class DatabaseHelper {
    public static String queryAbsentCourses(String startDate, String endDate) {
        // 实现数据库查询和统计逻辑
        // 返回结果字符串
    }
}

四、项目亮点

(1)用户友好的图形用户界面(GUI)

       项目采用Java Swing构建了用户友好的图形用户界面,使得录入、修改、查询和统计学生缺课记录的操作直观且便捷。界面设计简单易用,符合大多数用户的操作习惯。我们的项目以JFrame作为主窗口,使用了多个Swing 组件以及GridLayout布局管理器,界面美观。

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("考勤管理系统");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);

        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.addTab("录入缺课记录", new InputPanel());
        tabbedPane.addTab("修改缺课记录", new UpdatePanel());
        tabbedPane.addTab("查询缺课记录", new QueryPanel());

        frame.add(tabbedPane);
        frame.setVisible(true);
    }
}

(2)保证数据安全性

       我们的项目采用MySQL数据库来存储学生的缺课记录,保证了数据的持久化和安全性。

CREATE TABLE attendance_records (
    id INT AUTO_INCREMENT PRIMARY KEY,
    student_name VARCHAR(100),
    student_id VARCHAR(20),
    date DATE,
    lesson VARCHAR(50),
    course VARCHAR(50),
    absence_type VARCHAR(50)
);

(3)灵活的缺课类型管理

       系统提供四种缺课类型(迟到、早退、请假、旷课),用户可以根据实际情况选择,满足不同的考勤需求,并用JComboBox组件实现灵活选择。

private JComboBox<String> absenceTypeComboBox;
String[] absenceTypes = new String[]{"迟到", "早退", "请假", "旷课"};
this.absenceTypeComboBox = new JComboBox<>(absenceTypes);
this.add(this.absenceTypeComboBox);

(4)异常处理机制

       系统在进行数据库操作时,采用try-catch-finally结构进行异常处理,保证程序的稳定性和数据的一致性。当出现数据库连接或操作异常时,系统能够捕获并处理,避免程序崩溃。

五、功能演示

(1)录入:

InputPanel.class:

import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class InputPanel extends JPanel {
    private JTextField studentNameField;
    private JTextField studentIDField;
    private JTextField dateField;
    private JTextField lessonField;
    private JTextField courseField;
    private JComboBox<String> absenceTypeComboBox;
    private JButton submitButton;
    private JButton clearButton;

    public InputPanel(GridLayout gridLayout) {
        this.setLayout(new GridLayout(0, 2));
        JLabel studentName = new JLabel("学生姓名:");
        this.add(studentName);
        studentName.setHorizontalAlignment(0);
        this.studentNameField = new JTextField();
        this.add(this.studentNameField);
        JLabel studentId = new JLabel("学生学号:");
        this.add(studentId);
        studentId.setHorizontalAlignment(0);
        this.studentIDField = new JTextField();
        this.add(this.studentIDField);
        JLabel date = new JLabel("缺勤日期:");
        this.add(date);
        date.setHorizontalAlignment(0);
        this.dateField = new JTextField();
        this.add(this.dateField);
        JLabel lesson = new JLabel("缺勤课时:");
        this.add(lesson);
        lesson.setHorizontalAlignment(0);
        this.lessonField = new JTextField();
        this.add(this.lessonField);
        JLabel subject = new JLabel("缺勤科目:");
        this.add(subject);
        subject.setHorizontalAlignment(0);
        this.courseField = new JTextField();
        this.add(this.courseField);
        JLabel type = new JLabel("缺勤类型:");
        this.add(type);
        type.setHorizontalAlignment(0);
        String[] absenceTypes = new String[]{"迟到", "早退", "离开", "缺席"};
        this.absenceTypeComboBox = new JComboBox(absenceTypes);
        this.add(this.absenceTypeComboBox);
        this.submitButton = new JButton("录入");
        this.add(this.submitButton);
        this.clearButton = new JButton("清空");
        this.add(this.clearButton);
        this.submitButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String studentName = InputPanel.this.studentNameField.getText();
                String studentID = InputPanel.this.studentIDField.getText();
                String date = InputPanel.this.dateField.getText();
                String lesson = InputPanel.this.lessonField.getText();
                String course = InputPanel.this.courseField.getText();
                String absenceType = (String)InputPanel.this.absenceTypeComboBox.getSelectedItem();
                if (studentName.isEmpty() || studentID.isEmpty() || date.isEmpty() || lesson.isEmpty() || course.isEmpty()) {
                    JOptionPane.showMessageDialog(null, "所有字段都是必填的,请填写完整");
                    return;
                 }

                if (!date.matches("\\d{4}-\\d{2}-\\d{2}")) {
                    JOptionPane.showMessageDialog(null, "日期格式应为 YYYY-MM-DD");
                    return;
        }
                InputPanel.this.saveToDatabase(studentName, studentID, date, lesson, course, absenceType);
                JOptionPane.showMessageDialog((Component)null, "Attendance record submitted successfully");
            }
        });
        this.clearButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                InputPanel.this.studentNameField.setText("");
                InputPanel.this.studentIDField.setText("");
                InputPanel.this.dateField.setText("");
                InputPanel.this.lessonField.setText("");
                InputPanel.this.courseField.setText("");
            }
        });
    }

    private void saveToDatabase(String studentName, String studentID, String date, String lesson, String course, String absenceType) {
        DatabaseHelper databaseHelper = new DatabaseHelper();
        DatabaseHelper.saveToDatabase(studentName, studentID, date, lesson, course, absenceType);
    }
}

运行结果:

录入成功提示:

录入失败:

(2)修改:

UpdatePanel.class:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class updatePanel extends JPanel {
    private JTextField studentNameField;
    private JTextField studentIDField;
    private JTextField dateField;
    private JTextField lessonField;
    private JTextField courseField;
    private JComboBox<String> absenceTypeComboBox;
    private JButton submitButton;
    private JButton clearButton;

    public updatePanel(GridLayout gridLayout) {
        setLayout(new GridLayout(0, 2));

        JLabel studentName=new JLabel("学生姓名:");
        add(studentName);
        studentName.setHorizontalAlignment(SwingConstants.CENTER);
        studentNameField = new JTextField();
        add(studentNameField);

        JLabel studentId=new JLabel("学生学号:");
        add(studentId);
        studentId.setHorizontalAlignment(SwingConstants.CENTER);
        studentIDField = new JTextField();
        add(studentIDField);

        JLabel date=new JLabel("缺勤日期:");
        add(date);
        date.setHorizontalAlignment(SwingConstants.CENTER);
        dateField = new JTextField();
        add(dateField);

        JLabel lesson=new JLabel("缺勤课时:");
        add(lesson);
        lesson.setHorizontalAlignment(SwingConstants.CENTER);
        lessonField = new JTextField();
        add(lessonField);

        JLabel subject=new JLabel("缺勤科目:");
        add(subject);
        subject.setHorizontalAlignment(SwingConstants.CENTER);
        courseField = new JTextField();
        add(courseField);

        JLabel type=new JLabel("缺勤类型:");
        add(type);
        type.setHorizontalAlignment(SwingConstants.CENTER);
        String[] absenceTypes = {"迟到", "早退", "离开", "缺席"};
        absenceTypeComboBox = new JComboBox<>(absenceTypes);
        add(absenceTypeComboBox);

        submitButton = new JButton("修改");
        add(submitButton);

        clearButton = new JButton("清空");
        add(clearButton);

        submitButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取输入信息
                String studentName = studentNameField.getText();
                String studentID = studentIDField.getText();
                String date = dateField.getText();
                String lesson = lessonField.getText();
                String course = courseField.getText();
                String absenceType = (String) absenceTypeComboBox.getSelectedItem();

                // 将数据录入数据库的逻辑
                // 这里可以调用保存数据的方法,比如将数据存入数据库
                if (studentName.isEmpty() || studentID.isEmpty() || date.isEmpty() || lesson.isEmpty() || course.isEmpty() || absenceType.isEmpty()) {
                    JOptionPane.showMessageDialog(null, "所有字段都是必填的");
                    return;
                }
                saveToDatabase(studentName, studentID, date, lesson, course, absenceType);
                JOptionPane.showMessageDialog(null, "Attendance record submitted successfully");
            }
        });

        clearButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 清空输入框
                studentNameField.setText("");
                studentIDField.setText("");
                dateField.setText("");
                lessonField.setText("");
                courseField.setText("");
            }
        });
    }

    // 将数据录入数据库的方法
    private void saveToDatabase(String studentName, String studentID, String date, String lesson, String course, String absenceType) {
        // 在这里添加将数据保存到数据库的代码
        // 例如使用 JDBC 连接数据库并执行相应的 SQL 语句
        DatabaseHelper databaseHelper = new DatabaseHelper();
        databaseHelper.updateDatabase(studentName, studentID, date, lesson, course, absenceType);
    }

运行结果:

将王五的缺课记录由数学早退改为语文迟到,并把课时由第二节改为第一节:

修改成功提示:

(3)查询:

QueryPanel.class:

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class QueryPanel extends JPanel {
    private JTextField studentNameField;
    private JTextField studentIDField;
    private JTextField dateField;
    private JTextField lessonField;
    private JTextField courseField;
    private JTextField absenceType;
    private JButton submitButton;
    private JButton clearButton;
    public JTextArea textArea;

    public QueryPanel(GridLayout gridLayout) {
        this.setLayout(new GridLayout(0, 2));
        JLabel studentName = new JLabel("学生姓名:");
        this.add(studentName);
        studentName.setHorizontalAlignment(0);
        this.studentNameField = new JTextField();
        this.add(this.studentNameField);
        JLabel studentId = new JLabel("学生学号:");
        this.add(studentId);
        studentId.setHorizontalAlignment(0);
        this.studentIDField = new JTextField();
        this.add(this.studentIDField);
        this.submitButton = new JButton("查询");
        this.add(this.submitButton);
        this.clearButton = new JButton("清空");
        this.add(this.clearButton);
        JLabel date = new JLabel("查询结果:");
        this.add(date);
        this.textArea = new JTextArea(10, 30);
        JScrollPane scrollPane = new JScrollPane(this.textArea);
        this.add(scrollPane);
        this.submitButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String studentName = QueryPanel.this.studentNameField.getText();
                String studentID = QueryPanel.this.studentIDField.getText();
                if (studentID.isEmpty()) {
                    JOptionPane.showMessageDialog(null, "学生学号不能为空");
                    return;
               }

                QueryPanel.this.saveToDatabase(studentName, studentID);
            }
        });
        this.clearButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                QueryPanel.this.studentNameField.setText("");
                QueryPanel.this.studentIDField.setText("");
                QueryPanel.this.dateField.setText("");
                QueryPanel.this.lessonField.setText("");
                QueryPanel.this.courseField.setText("");
            }
        });
    }

    private void saveToDatabase(String studentName, String studentID) {
        DatabaseHelper databaseHelper = new DatabaseHelper();
        String result = databaseHelper.queryDatabase(studentID);
        this.textArea.setText(result);
    }
}

运行结果:

按学号查询:

结果不存在时显示为空:

(4)统计:

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class statisticsPanel extends JPanel {
    private JComboBox<String> absenceTypeComboBox;
    private JComboBox<String> subjectComboBox;
    private JComboBox<String> dateStartComboBox;
    private JComboBox<String> dateEndComboBox;
    private String[] subjects;
    private String[] times;
    private static JTable content;
    private static final String[] columns = {"学生姓名", "缺勤类型", "日期"};

    public statisticsPanel() {
        setLayout(new BorderLayout());

        subjects = DatabaseHelper.getSubjects(); // Assuming getSubjects() returns String[]
        times = DatabaseHelper.getTimes(); // Assuming getTimes() returns String[]

        JPanel inputPanel = new JPanel(new GridLayout(2, 4));

        JLabel subjectLabel = new JLabel("缺勤科目:");
        inputPanel.add(subjectLabel);
        subjectComboBox = new JComboBox<>(subjects);
        inputPanel.add(subjectComboBox);

        JLabel absenceTypeLabel = new JLabel("缺勤类别:");
        inputPanel.add(absenceTypeLabel);
        String[] absenceTypes = {"迟到", "早退", "离开", "缺席"};
        absenceTypeComboBox = new JComboBox<>(absenceTypes);
        inputPanel.add(absenceTypeComboBox);

        JLabel startTimeLabel = new JLabel("起始时间:");
        inputPanel.add(startTimeLabel);
        dateStartComboBox = new JComboBox<>(times);
        inputPanel.add(dateStartComboBox);

        JLabel endTimeLabel = new JLabel("终止时间:");
        inputPanel.add(endTimeLabel);
        dateEndComboBox = new JComboBox<>(times);
        inputPanel.add(dateEndComboBox);

        JButton searchButton = new JButton("统计");
        inputPanel.add(searchButton);

        add(inputPanel, BorderLayout.NORTH);

        content = new JTable(new DefaultTableModel(columns, 0)); // Initialize empty table model
        JScrollPane scrollPane = new JScrollPane(content);
        scrollPane.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        add(scrollPane, BorderLayout.CENTER);

        searchButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String selectedSubject = (String) subjectComboBox.getSelectedItem();
                String selectedAbsenceType = (String) absenceTypeComboBox.getSelectedItem();
                String startDate = (String) dateStartComboBox.getSelectedItem();
                String endDate = (String) dateEndComboBox.getSelectedItem();

                // Perform database query and update table data
                Object[][] data = DatabaseHelper.performDatabaseQuery(selectedSubject, selectedAbsenceType, startDate, endDate);
                updateTableData(data);
            }
        });
    }

    public static void updateTableData(Object[][] data) {
        DefaultTableModel model = (DefaultTableModel) content.getModel();
        model.setRowCount(0); // Clear existing rows

        for (Object[] row : data) {
            model.addRow(row); // Add each row from data
        }
        model.fireTableDataChanged();
    }
}

运行结果:

查询2024-01-01语文课迟到的学生信息:

查询2024-01-01语文课早退的学生信息:

DatabaseHelper类:

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class DatabaseHelper {
    // JDBC连接URL,用户名和密码
    private static final String JDBC_URL = " ";//换为个人信息
    private static final String USERNAME = " ";
    private static final String PASSWORD = " ";

    public static Object[][] performDatabaseQuery(String selectedSubject, String selectedAbsenceType, String startDate, String endDate) {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        List<Object[]> dataList = new ArrayList<>();

        try {
            connection = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);

            String sql = "SELECT student_name, absence_type, date FROM attendance_records " +
                    "WHERE course = ? AND absence_type = ? AND date BETWEEN ? AND ?";
            statement = connection.prepareStatement(sql);
            statement.setString(1, selectedSubject);
            statement.setString(2, selectedAbsenceType);
            statement.setString(3, startDate);
            statement.setString(4, endDate);

            resultSet = statement.executeQuery();

            while (resultSet.next()) {
                String studentName = resultSet.getString("student_name");
                String absenceType = resultSet.getString("absence_type");
                String absenceDate = resultSet.getString("date");

                Object[] row = { studentName, absenceType, absenceDate };
                dataList.add(row);
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
            // 可以根据需要处理异常
        } finally {
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }

        // 转换为 Object[][] 返回
        Object[][] data = new Object[dataList.size()][3];
        for (int i = 0; i < dataList.size(); i++) {
            data[i] = dataList.get(i);
        }
        return data;
    }

    public static String[] getSubjects() {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;

        String[] result = new String[20];

        try {
            // 建立数据库连接
            connection = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);
            // 创建SQL语句
            String sql = "SELECT DISTINCT course FROM attendance_records";
            statement = connection.prepareStatement(sql);

            // 执行查询
            resultSet = statement.executeQuery();

            // 处理查询结果
            int i = 0;
            while (resultSet.next() && i < result.length) {
                result[i++] = resultSet.getString(1);
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            // 关闭ResultSet、Statement和Connection
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }

    public static String[] getTimes() {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;

        String[] result = new String[200];

        try {
            // 建立数据库连接
            connection = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);

            // 创建SQL语句
            String sql = "SELECT DISTINCT date FROM attendance_records";
            statement = connection.prepareStatement(sql);

            // 执行查询
            resultSet = statement.executeQuery();

            // 处理查询结果
            int i = 0;
            while (resultSet.next() && i < result.length) {
                result[i++] = resultSet.getString(1);
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            // 关闭ResultSet、Statement和Connection
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }


    public static void saveToDatabase(String studentName, String studentID, String date, String lesson, String course, String absenceType) {
        Connection connection = null;
        PreparedStatement statement = null;

        try {
            // 建立数据库连接
            connection = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);

            // 创建SQL语句
            String sql = "INSERT INTO attendance_records (student_name, student_id, date, lesson, course, absence_type) VALUES (?, ?, ?, ?, ?, ?)";
            statement = connection.prepareStatement(sql);

            // 设置SQL语句参数
            statement.setString(1, studentName);
            statement.setString(2, studentID);
            statement.setString(3, date);
            statement.setString(4, lesson);
            statement.setString(5, course);
            statement.setString(6, absenceType);

            // 执行SQL语句
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭Statement和Connection
            try {
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public String queryDatabase(String studentID) {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;

        StringBuilder result = new StringBuilder();

        try {
            // 建立数据库连接
            connection = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);

            // 创建SQL语句
            String sql = "SELECT * FROM attendance_records WHERE student_id = ?";
            statement = connection.prepareStatement(sql);

            // 设置SQL语句参数
            statement.setString(1, studentID);

            // 执行查询
            resultSet = statement.executeQuery();

            // 处理查询结果
            while (resultSet.next()) {
                String date = resultSet.getString("date");
                String lesson = resultSet.getString("lesson");
                String course = resultSet.getString("course");
                String absenceType = resultSet.getString("absence_type");

                result.append("Student ID: ").append(studentID).append("\n");
                result.append("缺勤日期: ").append(date).append("\n");
                result.append("缺勤课时: ").append(lesson).append("\n");
                result.append("缺勤学科: ").append(course).append("\n");
                result.append("缺勤类型: ").append(absenceType).append("\n\n");
            }
            return result.toString();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            // 关闭ResultSet、Statement和Connection
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }

        return result.toString();
    }
    public static void updateDatabase(String studentName, String studentID, String date, String lesson, String course, String absenceType) {
        Connection connection = null;
        PreparedStatement statement = null;

        try {
            // 建立数据库连接
            connection = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);

            // 创建SQL语句
            String sql = "UPDATE attendance_records SET  date = ?, lesson = ?, course=?, absence_type=? WHERE student_id = ?";
            statement = connection.prepareStatement(sql);

            // 设置SQL语句参数
            statement.setString(1, date);
            statement.setString(2,lesson);
            statement.setString(3, course);
            statement.setString(4, absenceType);
            statement.setString(5, studentID);

            // 执行SQL语句
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭Statement和Connection
            try {
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

六、项目分工(表格)

学生

完成功能与任务

描述

A

实现面向对象设计,进行需求分析

确定项目需要解决的问题是什么,给出类图。

A

实现缺课记录的录入功能

使用面向对象技术设计系统,实现学生考勤管理系统对缺课学生的信息录入,包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。

A

实现缺课记录的查询功能

使用面向对象技术设计系统,实现学生考勤管理系统对缺课学生的信息查询,实现按照学号查询对应学生的考勤记录,显示缺课情况。

A

实现缺课记录的修改功能

使用面向对象技术设计系统,实现学生考勤管理系统对缺课学生的信息修改,包括学生的姓名、学号等基本信息及缺课情况。

B

实现缺课记录的统计功能

统计某段时间内,旷课学生姓名及旷课次数; 统计某段时间内,有学生旷课的课程及旷课人次。

B

创建学生缺课信息的数据库

数据库表设计包括:attendance_records表,存储学生的姓名、学号、缺勤日期、缺勤课时、缺勤科目和缺勤类型等信息。

B

实现数据库连接

使用JDBC连接MySQL数据库,创建DatabaseHelper数据库辅助类,提供与数据库交互的方法,包括插入、查询和更新学生考勤记录。采用try-catch-finally结构处理异常,确保数据库连接及时关闭。

B

编写项目博客

包含整个课程设计的完整描述(项目简介、项目采用技术、功能需求分析等)。


文章来源:https://blog.csdn.net/2302_76270066/article/details/139727590
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云