diff --git a/Attendanceimpl.java b/Attendanceimpl.java new file mode 100644 index 0000000..767179d --- /dev/null +++ b/Attendanceimpl.java @@ -0,0 +1,190 @@ +package com.system.impl; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +import com.system.dao.AttendanceDao; +import com.system.javaBean.Attendance; +import com.system.utils.DB; + +public class Attendanceimpl implements AttendanceDao { + private Connection conn; + private DB dataBase = new DB(); + + + + + + + @Override + public List statisticsAttendance(String sno) throws SQLException { + List statistics = new ArrayList<>(); + conn = dataBase.getConnection(); + try (PreparedStatement pstmt = conn.prepareStatement("SELECT cno, COUNT(*) as total_attendance, " + + "SUM(CASE WHEN status = 'Present' THEN 1 ELSE 0 END) as present_count, " + + "SUM(CASE WHEN status <> 'Present' THEN 1 ELSE 0 END) as absent_count " + + "FROM attendance WHERE sno = ? GROUP BY cno")) { + pstmt.setString(1, sno); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + Attendance attendance = new Attendance(); + attendance.setCourseCno(rs.getString("cno")); + attendance.setId(rs.getString("id")); // 注意:这里假设id字段用来存储总考勤次数 + attendance.setStatus(rs.getString("present_count") + "/" + rs.getString("absent_count")); + statistics.add(attendance); + } + } catch (SQLException e) { + throw new SQLException("Error calculating attendance statistics", e); + } finally { + if (conn != null) { + conn.close(); + } + } + return statistics; + } + + @Override + public boolean deleteAttendance(String id) throws SQLException { + try { + conn = dataBase.getConnection(); + Statement stat = null; + stat = conn.createStatement(); + String sql = "DELETE FROM attendance WHERE id = '"+id+"' "; + if ( stat.executeUpdate(sql)==1 ){ + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + conn.close(); + return false; + } + + public List queryByStudentId(String studentId) { + List attendanceList = new ArrayList<>(); + // 假设您有一个可以执行数据库操作的数据库访问对象,例如使用JDBC + String sql = "SELECT id, sno, name,cno, date, status " + + "FROM attendance " + + "WHERE sno = ?"; + try (Connection conn = dataBase.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setString(1, studentId); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + Attendance attendance = new Attendance(); + attendance.setId(rs.getString("id")); + attendance.setStudentId(rs.getString("sno")); + attendance.setName(rs.getString("name")); + attendance.setCourseCno(rs.getString("cno")); + attendance.setDate(rs.getString("date")); + attendance.setStatus(rs.getString("status")); + attendanceList.add(attendance); + } + } catch (SQLException e) { + // 处理异常 + e.printStackTrace(); + } + return attendanceList; + } + + public Attendance select(String sno) { + Attendance attendance = null; + String sql = "SELECT id, sno, cno, date, status, name " + + "FROM attendance " + + "WHERE sno = ?"; + + try (Connection conn = dataBase.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setString(1, sno); + ResultSet rs = pstmt.executeQuery(); + + if (rs.next()) { + attendance = new Attendance(); + String id = rs.getString("id"); + + String name = rs.getString("name"); + String cno = rs.getString("cno"); + String date = rs.getString("date"); // 这里假设数据库中的日期是以字符串形式存储的 + String status = rs.getString("status"); + + attendance.setId(id); + // 如果您的数据库中的日期是以LocalDate形式存储的,您需要进行相应的转换 + // 例如:LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + attendance.setDate(date); + attendance.setStudentId(sno); // 已经作为查询条件,可以直接赋值 + attendance.setName(name); + attendance.setCourseCno(cno); + attendance.setStatus(status); + + } + } catch (SQLException e) { + // 处理异常 + e.printStackTrace(); + } + return attendance; + } + + // 更新课程 + @Override + public boolean updateById(String id, String sno, String name, String cno, String date, String status) throws SQLException { + try { + conn = dataBase.getConnection(); + // 使用PreparedStatement来防止SQL注入 + String sql = "UPDATE attendance SET sno = ?, name = ?, cno = ?, date = ?, status = ? WHERE id = ?"; + try (PreparedStatement pstmt = conn.prepareStatement(sql)) { + // 按顺序设置参数值 + pstmt.setString(1, sno); + pstmt.setString(2, name); + pstmt.setString(3, cno); + pstmt.setString(4, date); + pstmt.setString(5, status); + pstmt.setString(6, id); // WHERE条件 + + // 执行更新操作 + int affectedRows = pstmt.executeUpdate(); + // 检查是否至少有一行被更新 + return affectedRows > 0; + } + } catch (SQLException e) { + e.printStackTrace(); + throw e; // 重新抛出异常,以便调用者可以处理它 + } + } + // 更新课程中的查找 + + + @Override + public Attendance selectById(String id) throws SQLException { + // 编写SQL查询语句 + String sql = "SELECT * FROM attendance WHERE id = ?"; + try (Connection conn = dataBase.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setString(1, id); + ResultSet rs = pstmt.executeQuery(); + if (rs.next()) { + Attendance attendance = new Attendance(); + // 填充Attendance对象的数据 + attendance.setId(rs.getString("id")); + attendance.setStudentId(rs.getString("sno")); + attendance.setName(rs.getString("name")); + attendance.setCourseCno(rs.getString("cno")); + attendance.setDate(rs.getString("date")); + attendance.setStatus(rs.getString("status")); + return attendance; + } + } catch (SQLException e) { + throw new SQLException("Error selecting attendance record", e); + } + return null; // 如果没有找到记录 + } + } + + + + + \ No newline at end of file