|
|
|
|
@ -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<Attendance> statisticsAttendance(String sno) throws SQLException {
|
|
|
|
|
List<Attendance> 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<Attendance> queryByStudentId(String studentId) {
|
|
|
|
|
List<Attendance> 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; // 如果没有找到记录
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|