diff --git a/src/main/java/com/campus/controller/AttendanceController.java b/src/main/java/com/campus/controller/AttendanceController.java new file mode 100644 index 0000000..706ea28 --- /dev/null +++ b/src/main/java/com/campus/controller/AttendanceController.java @@ -0,0 +1,234 @@ +// com/campus/controller/AttendanceController.java +package com.campus.controller; + +import com.campus.entity.AttendanceRecord; +import com.campus.entity.User; +import com.campus.service.AttendanceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpSession; +import java.util.*; + +@RestController +@RequestMapping("/api/attendance") +public class AttendanceController { + + @Autowired + private AttendanceService attendanceService; + + /** + * 记录考勤(教师使用) + */ + @PostMapping("/record") + public Map recordAttendance(@RequestBody Map params, + HttpSession session) { + Map result = new HashMap<>(); + + // 检查用户是否登录且为教师 + User user = (User) session.getAttribute("currentUser"); + if (user == null) { + result.put("success", false); + result.put("message", "请先登录"); + return result; + } + + if (!"TEACHER".equals(user.getRole()) && !"ADMIN".equals(user.getRole())) { + result.put("success", false); + result.put("message", "只有教师和管理员可以记录考勤"); + return result; + } + + try { + String studentId = params.get("studentId"); + String courseName = params.get("courseName"); + String status = params.get("status"); + + if (studentId == null || courseName == null || status == null) { + result.put("success", false); + result.put("message", "参数不完整"); + return result; + } + + AttendanceRecord record = new AttendanceRecord(); + record.setStudentId(studentId); + record.setCourseName(courseName); + record.setAttendanceDate(new Date()); + record.setStatus(status); + record.setRemarks(params.get("remarks")); + record.setCreatedBy(user.getUsername()); + + boolean success = attendanceService.recordAttendance(record); + + if (success) { + result.put("success", true); + result.put("message", "考勤记录成功"); + } else { + result.put("success", false); + result.put("message", "考勤记录失败"); + } + } catch (Exception e) { + result.put("success", false); + result.put("message", e.getMessage()); + } + + return result; + } + + /** + * 补签考勤(教师使用) + */ + @PostMapping("/makeup") + public Map makeupAttendance(@RequestBody Map params, + HttpSession session) { + Map result = new HashMap<>(); + + User user = (User) session.getAttribute("currentUser"); + if (user == null || !"TEACHER".equals(user.getRole())) { + result.put("success", false); + result.put("message", "只有教师可以进行补签"); + return result; + } + + try { + AttendanceRecord record = new AttendanceRecord(); + record.setStudentId(params.get("studentId")); + record.setCourseName(params.get("courseName")); + record.setStatus(params.get("status")); + record.setRemarks(params.get("remarks")); + record.setCreatedBy(user.getUsername()); + + // 解析日期 + String dateStr = params.get("attendanceDate"); + if (dateStr != null) { + record.setAttendanceDate(new Date(Long.parseLong(dateStr))); + } else { + record.setAttendanceDate(new Date()); + } + + boolean success = attendanceService.makeUpAttendance(record); + + if (success) { + result.put("success", true); + result.put("message", "补签成功"); + } else { + result.put("success", false); + result.put("message", "补签失败"); + } + } catch (Exception e) { + result.put("success", false); + result.put("message", e.getMessage()); + } + + return result; + } + + /** + * 获取我的考勤记录(学生使用) + */ + @GetMapping("/my") + public Map getMyAttendance(HttpSession session) { + Map result = new HashMap<>(); + + User user = (User) session.getAttribute("currentUser"); + if (user == null) { + result.put("success", false); + result.put("message", "请先登录"); + return result; + } + + // 学生只能查看自己的考勤记录 + // 注意:这里需要关联学生ID和用户ID,暂时简化处理 + // 实际应用中,应该在User表中存储student_id字段 + if ("STUDENT".equals(user.getRole())) { + // 假设学生用户名为学号(简化处理) + List records = attendanceService.getAttendanceByStudentId(user.getUsername()); + result.put("success", true); + result.put("records", records); + } else { + result.put("success", false); + result.put("message", "只有学生可以查看个人考勤"); + } + + return result; + } + + /** + * 查询考勤记录(教师/管理员使用) + */ + @GetMapping("/query") + public Map queryAttendance( + @RequestParam(required = false) String studentId, + @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date date, + HttpSession session) { + + Map result = new HashMap<>(); + + User user = (User) session.getAttribute("currentUser"); + if (user == null || (!"TEACHER".equals(user.getRole()) && !"ADMIN".equals(user.getRole()))) { + result.put("success", false); + result.put("message", "权限不足"); + return result; + } + + List records; + + if (studentId != null && !studentId.trim().isEmpty()) { + records = attendanceService.getAttendanceByStudentId(studentId); + } else if (date != null) { + records = attendanceService.getAttendanceByDate(date); + } else { + // 默认查询今天的考勤 + records = attendanceService.getAttendanceByDate(new Date()); + } + + result.put("success", true); + result.put("records", records); + return result; + } + + /** + * 获取考勤统计 + */ + @GetMapping("/statistics") + public Map getStatistics( + @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate, + @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate, + @RequestParam(required = false) String studentId, + HttpSession session) { + + Map result = new HashMap<>(); + + User user = (User) session.getAttribute("currentUser"); + if (user == null || (!"TEACHER".equals(user.getRole()) && !"ADMIN".equals(user.getRole()))) { + result.put("success", false); + result.put("message", "权限不足"); + return result; + } + + if (studentId != null && !studentId.trim().isEmpty()) { + // 学生考勤统计 + Map summary = attendanceService.getStudentAttendanceSummary(studentId); + result.put("success", true); + result.put("summary", summary); + } else { + // 时间段统计 + if (startDate == null) { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH, -30); + startDate = calendar.getTime(); + } + + if (endDate == null) { + endDate = new Date(); + } + + List> statistics = attendanceService.getAttendanceStatistics(startDate, endDate); + result.put("success", true); + result.put("statistics", statistics); + } + + return result; + } +} \ No newline at end of file diff --git a/src/main/java/com/campus/controller/UserController.java b/src/main/java/com/campus/controller/UserController.java new file mode 100644 index 0000000..54465eb --- /dev/null +++ b/src/main/java/com/campus/controller/UserController.java @@ -0,0 +1,141 @@ +// com/campus/controller/UserController.java +package com.campus.controller; + +import com.campus.entity.User; +import com.campus.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.DigestUtils; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api/user") +public class UserController { + + @Autowired + private UserService userService; + + /** + * 登录 - 使用POST方法 + */ + @PostMapping("/login") + public Map login(@RequestBody Map params, HttpSession session) { + Map result = new HashMap<>(); + + String username = params.get("username"); + String password = params.get("password"); + + if (username == null || username.trim().isEmpty() || + password == null || password.trim().isEmpty()) { + result.put("success", false); + result.put("message", "用户名和密码不能为空"); + return result; + } + + User loginUser = userService.login(username, password); + + if (loginUser != null) { + // 存储用户信息到session(移除密码) + User sessionUser = new User(); + sessionUser.setId(loginUser.getId()); + sessionUser.setUsername(loginUser.getUsername()); + sessionUser.setRole(loginUser.getRole()); + session.setAttribute("currentUser", sessionUser); + + result.put("success", true); + result.put("message", "登录成功"); + result.put("role", loginUser.getRole()); + result.put("userId", loginUser.getId()); + } else { + result.put("success", false); + result.put("message", "用户名或密码错误"); + } + return result; + } + + /** + * 注册 - 使用POST方法 + */ + @PostMapping("/register") + public Map register(@RequestBody Map params) { + Map result = new HashMap<>(); + + String username = params.get("username"); + String password = params.get("password"); + String role = params.get("role"); + + // 验证参数 + if (username == null || username.trim().isEmpty()) { + result.put("success", false); + result.put("message", "用户名不能为空"); + return result; + } + + if (password == null || password.trim().isEmpty()) { + result.put("success", false); + result.put("message", "密码不能为空"); + return result; + } + + if (role == null) { + role = "STUDENT"; // 默认角色为学生 + } + + // 验证角色是否合法 + if (!"ADMIN".equals(role) && !"TEACHER".equals(role) && !"STUDENT".equals(role)) { + result.put("success", false); + result.put("message", "角色必须是ADMIN、TEACHER或STUDENT"); + return result; + } + + // 创建用户对象 + User user = new User(); + user.setUsername(username); + user.setPassword(password); // Service层会加密 + user.setRole(role); + + boolean success = userService.register(user); + + if (success) { + result.put("success", true); + result.put("message", "注册成功"); + } else { + result.put("success", false); + result.put("message", "用户名已存在"); + } + return result; + } + + /** + * 退出登录 + */ + @PostMapping("/logout") + public Map logout(HttpSession session) { + Map result = new HashMap<>(); + session.invalidate(); + result.put("success", true); + result.put("message", "退出成功"); + return result; + } + + /** + * 获取当前登录用户信息 + */ + @GetMapping("/current") + public Map getCurrentUser(HttpSession session) { + Map result = new HashMap<>(); + User user = (User) session.getAttribute("currentUser"); + + if (user != null) { + result.put("success", true); + result.put("user", user); + } else { + result.put("success", false); + result.put("message", "未登录"); + } + return result; + } +} \ No newline at end of file diff --git a/src/main/java/com/campus/entity/AttendanceRecord.java b/src/main/java/com/campus/entity/AttendanceRecord.java new file mode 100644 index 0000000..0006932 --- /dev/null +++ b/src/main/java/com/campus/entity/AttendanceRecord.java @@ -0,0 +1,44 @@ +// com/campus/entity/AttendanceRecord.java +package com.campus.entity; + +import java.util.Date; + +public class AttendanceRecord { + private Integer id; + private String studentId; + private String courseName; + private Date attendanceDate; + private Date attendanceTime; + private String status; // PRESENT/ABSENT/LATE + private String remarks; + private String createdBy; + private Date createTime; + + // getters and setters + public Integer getId() { return id; } + public void setId(Integer id) { this.id = id; } + + public String getStudentId() { return studentId; } + public void setStudentId(String studentId) { this.studentId = studentId; } + + public String getCourseName() { return courseName; } + public void setCourseName(String courseName) { this.courseName = courseName; } + + public Date getAttendanceDate() { return attendanceDate; } + public void setAttendanceDate(Date attendanceDate) { this.attendanceDate = attendanceDate; } + + public Date getAttendanceTime() { return attendanceTime; } + public void setAttendanceTime(Date attendanceTime) { this.attendanceTime = attendanceTime; } + + public String getStatus() { return status; } + public void setStatus(String status) { this.status = status; } + + public String getRemarks() { return remarks; } + public void setRemarks(String remarks) { this.remarks = remarks; } + + public String getCreatedBy() { return createdBy; } + public void setCreatedBy(String createdBy) { this.createdBy = createdBy; } + + public Date getCreateTime() { return createTime; } + public void setCreateTime(Date createTime) { this.createTime = createTime; } +} \ No newline at end of file diff --git a/src/main/java/com/campus/interceptor/AuthInterceptor.java b/src/main/java/com/campus/interceptor/AuthInterceptor.java new file mode 100644 index 0000000..b4cbb52 --- /dev/null +++ b/src/main/java/com/campus/interceptor/AuthInterceptor.java @@ -0,0 +1,61 @@ +// com/campus/interceptor/AuthInterceptor.java +package com.campus.interceptor; + +import com.campus.entity.User; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.PrintWriter; + +public class AuthInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, + Object handler) throws Exception { + + String requestURI = request.getRequestURI(); + + // 公共接口,不需要登录 + if (requestURI.contains("/api/user/login") || + requestURI.contains("/api/user/register") || + requestURI.contains("/static/") || + requestURI.startsWith("/error")) { + return true; + } + + // API接口需要登录 + if (requestURI.startsWith("/api/")) { + HttpSession session = request.getSession(false); + if (session == null || session.getAttribute("currentUser") == null) { + // 未登录,返回JSON格式错误信息 + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + out.write("{\"success\":false,\"message\":\"请先登录\",\"code\":401}"); + out.flush(); + return false; + } + + // 权限验证(简单版) + User user = (User) session.getAttribute("currentUser"); + String role = user.getRole(); + + // 学生只能访问特定接口 + if ("STUDENT".equals(role)) { + if (!requestURI.contains("/api/attendance/my") && + !requestURI.contains("/api/user/current") && + !requestURI.contains("/api/user/logout")) { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + out.write("{\"success\":false,\"message\":\"权限不足\",\"code\":403}"); + out.flush(); + return false; + } + } + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/campus/mapper/AttendanceMapper.java b/src/main/java/com/campus/mapper/AttendanceMapper.java new file mode 100644 index 0000000..0c3e6be --- /dev/null +++ b/src/main/java/com/campus/mapper/AttendanceMapper.java @@ -0,0 +1,40 @@ +// com/campus/mapper/AttendanceMapper.java +package com.campus.mapper; + +import com.campus.entity.AttendanceRecord; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Mapper +public interface AttendanceMapper { + + // 添加考勤记录 + int insert(AttendanceRecord record); + + // 根据学生ID查询考勤记录 + List selectByStudentId(@Param("studentId") String studentId); + + // 根据日期查询考勤记录 + List selectByDate(@Param("date") Date date); + + // 根据学生ID和日期查询 + AttendanceRecord selectByStudentAndDate(@Param("studentId") String studentId, + @Param("date") Date date); + + // 更新考勤记录(补签) + int update(AttendanceRecord record); + + // 删除考勤记录 + int delete(Integer id); + + // 统计考勤情况 + List> getAttendanceStatistics(@Param("startDate") Date startDate, + @Param("endDate") Date endDate); + + // 查询某个学生的考勤统计 + Map getStudentAttendanceSummary(@Param("studentId") String studentId); +} \ No newline at end of file diff --git a/src/main/java/com/campus/mapper/UserMapper.java b/src/main/java/com/campus/mapper/UserMapper.java new file mode 100644 index 0000000..df7bb9f --- /dev/null +++ b/src/main/java/com/campus/mapper/UserMapper.java @@ -0,0 +1,14 @@ +// com/campus/mapper/UserMapper.java +package com.campus.mapper; + +import com.campus.entity.User; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserMapper { + // 根据用户名查询用户 + User selectByUsername(String username); + + // 新增用户(注册) + void insert(User user); +} \ No newline at end of file diff --git a/src/main/java/com/campus/service/AttendanceService.java b/src/main/java/com/campus/service/AttendanceService.java new file mode 100644 index 0000000..36de845 --- /dev/null +++ b/src/main/java/com/campus/service/AttendanceService.java @@ -0,0 +1,32 @@ +// com/campus/service/AttendanceService.java +package com.campus.service; + +import com.campus.entity.AttendanceRecord; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +public interface AttendanceService { + + // 记录考勤 + boolean recordAttendance(AttendanceRecord record); + + // 补签考勤 + boolean makeUpAttendance(AttendanceRecord record); + + // 查询学生考勤记录 + List getAttendanceByStudentId(String studentId); + + // 查询日期考勤记录 + List getAttendanceByDate(Date date); + + // 查询统计信息 + List> getAttendanceStatistics(Date startDate, Date endDate); + + // 查询学生考勤统计 + Map getStudentAttendanceSummary(String studentId); + + // 检查是否已考勤 + boolean checkAttendanceExists(String studentId, Date date); +} \ No newline at end of file diff --git a/src/main/java/com/campus/service/UserService.java b/src/main/java/com/campus/service/UserService.java new file mode 100644 index 0000000..35e7e05 --- /dev/null +++ b/src/main/java/com/campus/service/UserService.java @@ -0,0 +1,15 @@ +// com/campus/service/UserService.java +package com.campus.service; + +import com.campus.entity.User; + +public interface UserService { + // 登录 + User login(String username, String password); + + // 注册 + boolean register(User user); + + // 检查用户名是否已存在 + boolean checkUsernameExists(String username); +} \ No newline at end of file diff --git a/src/main/java/com/campus/service/impl/AttendanceServiceImpl.java b/src/main/java/com/campus/service/impl/AttendanceServiceImpl.java new file mode 100644 index 0000000..363079b --- /dev/null +++ b/src/main/java/com/campus/service/impl/AttendanceServiceImpl.java @@ -0,0 +1,100 @@ +// com/campus/service/impl/AttendanceServiceImpl.java +package com.campus.service.impl; + +import com.campus.entity.AttendanceRecord; +import com.campus.entity.Student; +import com.campus.mapper.AttendanceMapper; +import com.campus.mapper.StudentMapper; +import com.campus.service.AttendanceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Service +public class AttendanceServiceImpl implements AttendanceService { + + @Autowired + private AttendanceMapper attendanceMapper; + + @Autowired + private StudentMapper studentMapper; // 使用你定义的StudentMapper + + @Override + @Transactional + public boolean recordAttendance(AttendanceRecord record) { + // 验证学生是否存在 - 使用 selectByStudentId 方法 + Student student = studentMapper.selectByStudentId(record.getStudentId()); + + if (student == null) { + throw new RuntimeException("学生不存在,学号:" + record.getStudentId()); + } + + // 检查是否已考勤 + if (checkAttendanceExists(record.getStudentId(), record.getAttendanceDate())) { + throw new RuntimeException("该学生今天已考勤,学号:" + record.getStudentId()); + } + + // 设置创建时间 + if (record.getAttendanceTime() == null) { + record.setAttendanceTime(new Date()); + } + + return attendanceMapper.insert(record) > 0; + } + + @Override + @Transactional + public boolean makeUpAttendance(AttendanceRecord record) { + // 验证学生是否存在 + Student student = studentMapper.selectByStudentId(record.getStudentId()); + if (student == null) { + throw new RuntimeException("学生不存在,学号:" + record.getStudentId()); + } + + // 检查是否已有记录 + AttendanceRecord existing = attendanceMapper.selectByStudentAndDate( + record.getStudentId(), record.getAttendanceDate()); + + if (existing != null) { + // 更新现有记录 + existing.setStatus(record.getStatus()); + existing.setRemarks(record.getRemarks()); + existing.setAttendanceTime(new Date()); + existing.setCreatedBy(record.getCreatedBy()); + return attendanceMapper.update(existing) > 0; + } else { + // 创建新记录 + return recordAttendance(record); + } + } + + @Override + public List getAttendanceByStudentId(String studentId) { + return attendanceMapper.selectByStudentId(studentId); + } + + @Override + public List getAttendanceByDate(Date date) { + return attendanceMapper.selectByDate(date); + } + + @Override + public List> getAttendanceStatistics(Date startDate, Date endDate) { + return attendanceMapper.getAttendanceStatistics(startDate, endDate); + } + + @Override + public Map getStudentAttendanceSummary(String studentId) { + return attendanceMapper.getStudentAttendanceSummary(studentId); + } + + @Override + public boolean checkAttendanceExists(String studentId, Date date) { + AttendanceRecord record = attendanceMapper.selectByStudentAndDate(studentId, date); + return record != null; + } +} \ No newline at end of file diff --git a/src/main/java/com/campus/service/impl/UserServiceImpl.java b/src/main/java/com/campus/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..88f5bf4 --- /dev/null +++ b/src/main/java/com/campus/service/impl/UserServiceImpl.java @@ -0,0 +1,45 @@ +// com/campus/service/impl/UserServiceImpl.java +package com.campus.service.impl; + +import com.campus.entity.User; +import com.campus.mapper.UserMapper; +import com.campus.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl implements UserService { + + @Autowired + private UserMapper userMapper; + + @Override + public User login(String username, String password) { + // 1. 根据用户名查询用户 + User user = userMapper.selectByUsername(username); + // 2. 直接比对明文密码(作业简化版) + if (user != null && password.equals(user.getPassword())) { + return user; + } + return null; + } + + @Override + public boolean register(User user) { + // 检查用户名是否已存在 + if (checkUsernameExists(user.getUsername())) { + return false; + } + // 密码直接存明文(作业简化版) + // 注意:实际生产环境绝不允许这样做! + userMapper.insert(user); + return true; + } + + @Override + public boolean checkUsernameExists(String username) { + return userMapper.selectByUsername(username) != null; + } + + // 完全删除原来的 encryptPassword 方法 +} \ No newline at end of file diff --git a/src/main/resources/mapper/AttendanceMapper.xml b/src/main/resources/mapper/AttendanceMapper.xml new file mode 100644 index 0000000..3cf4a62 --- /dev/null +++ b/src/main/resources/mapper/AttendanceMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + INSERT INTO attendance_record(student_id, course_name, attendance_date, attendance_time, status, remarks, created_by) + VALUES(#{studentId}, #{courseName}, #{attendanceDate}, #{attendanceTime}, #{status}, #{remarks}, #{createdBy}) + + + + + + + + + + UPDATE attendance_record + SET status = #{status}, + remarks = #{remarks}, + attendance_time = #{attendanceTime}, + created_by = #{createdBy} + WHERE id = #{id} + + + + DELETE FROM attendance_record WHERE id = #{id} + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..8bd368e --- /dev/null +++ b/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + INSERT INTO user(username, password, role) + VALUES(#{username}, #{password}, #{role}) + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/admin.jsp b/src/main/webapp/WEB-INF/jsp/admin.jsp new file mode 100644 index 0000000..974f72f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/admin.jsp @@ -0,0 +1,112 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 管理员主页 + + + + +
+

学生考勤系统 - 管理员

+
+ 欢迎,${user.username}(管理员) | + 退出 +
+
+ + + +
+

欢迎使用学生考勤管理系统

+

请选择左侧菜单进行操作

+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/login.jsp b/src/main/webapp/WEB-INF/jsp/login.jsp new file mode 100644 index 0000000..b4570c7 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/login.jsp @@ -0,0 +1,83 @@ + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 登录 - 学生考勤系统 + + + + +
+

学生考勤系统登录

+
+ + +
+
+ + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/register.jsp b/src/main/webapp/WEB-INF/jsp/register.jsp new file mode 100644 index 0000000..2718c6c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/register.jsp @@ -0,0 +1,102 @@ + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 注册 - 学生考勤系统 + + + + +
+

用户注册

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/student.jsp b/src/main/webapp/WEB-INF/jsp/student.jsp new file mode 100644 index 0000000..3b8d195 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/student.jsp @@ -0,0 +1,140 @@ + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 学生主页 + + + + + +
+

学生考勤系统 - 学生

+
+ 欢迎,${user.username}(学生) | + 退出 +
+
+ +
+
+

我的考勤统计

+
+

加载中...

+
+
+ +

我的考勤记录

+
+

加载中...

+
+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/teacher.jsp b/src/main/webapp/WEB-INF/jsp/teacher.jsp new file mode 100644 index 0000000..dcd7ee2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/teacher.jsp @@ -0,0 +1,609 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 教师主页 - 学生考勤系统 + + + + +
+

学生考勤系统 - 教师

+
+ 欢迎,${user.username}(教师) | + 退出 +
+
+ + + +
+

欢迎使用学生考勤系统

+

请选择上方菜单进行操作

+
+
+ + + + \ No newline at end of file