ADD file via upload

score
nxist2202005055 2 years ago
parent 590a97c287
commit abb5bb29bb

@ -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; // 如果没有找到记录
}
}
Loading…
Cancel
Save