首页 > 基础资料 博客日记
学生考勤管理系统设计(Java)
2024-09-22 08:00:07基础资料围观127次
一、项目简介
(一)项目背景
本项目旨在开发一个学生考勤管理系统,帮助学校或教育机构有效管理学生的出勤情况和缺课记录。学校每天都要面对大量学生的考勤记录,包括正常出勤、迟到、早退、请假以及旷课等情况。准确记录和管理学生的缺课情况对于评估学生学习态度、帮助学生规范学习行为、提高教育质量非常关键。此系统可以帮助学校管理者和教职工及时跟踪学生的考勤情况,采取必要的教育干预措施,以确保学生的学习效果和维持学校课堂秩序。
(二)系统设计目标
考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。提供简单易用的界面,让教师或管理员能够快速录入和修改学生的考勤记录。支持按学生和时间段查询缺课情况,并能统计旷课次数和旷课课程,帮助管理者了解学生的学习状况和课堂管理的效果。考勤管理系统能提供以下具体功能:
(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 | 编写项目博客 | 包含整个课程设计的完整描述(项目简介、项目采用技术、功能需求分析等)。 |
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: