From 6454f5291fab284a01c05dc39e7df183ce5925cc Mon Sep 17 00:00:00 2001 From: root <2816025006@qq.com> Date: Thu, 4 Dec 2025 16:15:16 +0800 Subject: [PATCH] =?UTF-8?q?#1.0.1=20=E7=99=BB=E5=BD=95=E6=B3=A8=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 102 +++++++++++------- readme.md | 65 ++++++++++- .../com/campus/controller/PageController.java | 45 ++++++++ .../campus/controller/StudentController.java | 68 +++++++++++- src/main/java/com/campus/entity/User.java | 41 +++---- .../java/com/campus/mapper/StudentMapper.java | 5 + .../com/campus/service/StudentService.java | 17 ++- src/main/resources/mapper/StudentMapper.xml | 29 ++++- src/main/resources/spring-mvc.xml | 23 +++- 9 files changed, 317 insertions(+), 78 deletions(-) diff --git a/pom.xml b/pom.xml index 361eac3..3275414 100644 --- a/pom.xml +++ b/pom.xml @@ -6,22 +6,28 @@ 4.0.0 com.campus - campus-attendance + student-attendance 1.0-SNAPSHOT war UTF-8 - 17 - 17 + 1.8 + 1.8 5.3.23 3.5.11 - 2.0.7 + 2.1.1 + 8.0.33 + 1.2.15 + 4.0.1 + 1.2 + 2.14.2 + 2.0.7 + 1.4.7 - - + org.springframework spring-context @@ -37,6 +43,11 @@ spring-jdbc ${spring.version} + + org.springframework + spring-tx + ${spring.version} + @@ -50,73 +61,86 @@ ${mybatis.spring.version} - + mysql mysql-connector-java - 8.0.33 + ${mysql.version} com.alibaba druid - 1.2.15 + ${druid.version} - + javax.servlet javax.servlet-api - 4.0.1 + ${servlet.version} provided + + javax.servlet + jstl + ${jstl.version} + javax.servlet.jsp javax.servlet.jsp-api 2.3.3 provided - - jstl - jstl - 1.2 - - + com.fasterxml.jackson.core jackson-databind - 2.14.1 + ${jackson.version} + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + + junit + junit + 4.13.2 + test - campus-attendance + student-attendance + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + ${maven.compiler.source} + ${maven.compiler.target} + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins maven-war-plugin 3.3.2 - - - org.apache.maven.plugins - maven-compiler-plugin - 3.10.1 - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.10.1 - - 17 - 17 - - - --enable-preview - + false diff --git a/readme.md b/readme.md index f4c38af..2338ae8 100644 --- a/readme.md +++ b/readme.md @@ -32,4 +32,67 @@ INSERT INTO user (username, password, role) VALUES ('teacher1', 'teacher123', 'TEACHER'); -![img.png](img.png) \ No newline at end of file +![img.png](img.png) + + + +-- 在已有的数据库基础上,添加考勤相关表 + +-- 考勤记录表 +CREATE TABLE attendance_record ( +id INT PRIMARY KEY AUTO_INCREMENT, +student_id VARCHAR(20) NOT NULL, +course_name VARCHAR(100) NOT NULL, +attendance_date DATE NOT NULL, +attendance_time TIME, +status VARCHAR(20) NOT NULL DEFAULT 'PRESENT', -- PRESENT/ABSENT/LATE +remarks VARCHAR(500), +created_by VARCHAR(50), -- 记录创建人(教师用户名) +create_time DATETIME DEFAULT CURRENT_TIMESTAMP, +FOREIGN KEY (student_id) REFERENCES student(student_id) ON DELETE CASCADE +); + +-- 创建索引提高查询效率 +CREATE INDEX idx_student_date ON attendance_record(student_id, attendance_date); +CREATE INDEX idx_date_status ON attendance_record(attendance_date, status); + +-- 课程表(可选) +CREATE TABLE course ( +id INT PRIMARY KEY AUTO_INCREMENT, +course_name VARCHAR(100) NOT NULL, +teacher_id INT, -- 关联user表的id +class_name VARCHAR(50), +schedule_time VARCHAR(100), -- 上课时间描述 +status INT DEFAULT 1 -- 1启用,0停用 +); + + + + +-- 添加更多测试数据到数据库 + +-- 添加更多学生 +INSERT INTO student (name, student_id, class, major) VALUES +('王五', '2023003', '计算机1班', '计算机科学与技术'), +('赵六', '2023004', '软件1班', '软件工程'), +('钱七', '2023005', '网络1班', '网络工程'), +('孙八', '2023006', '计算机1班', '计算机科学与技术'); + +-- 添加更多用户(密码都是123456经过MD5加盐加密后的值) +-- 实际密码需要加密存储,这里先用明文,系统会自动加密 +INSERT INTO user (username, password, role) VALUES +('2023001', '123456', 'STUDENT'), +('2023002', '123456', 'STUDENT'), +('2023003', '123456', 'STUDENT'), +('teacher2', '123456', 'TEACHER'), +('admin','123456','ADMIN'), +('student1', '123456', 'STUDENT'); + +-- 添加考勤测试数据 +INSERT INTO attendance_record (student_id, course_name, attendance_date, attendance_time, status, remarks, created_by) VALUES +('2023001', '高等数学', DATE_SUB(CURDATE(), INTERVAL 3 DAY), '08:30:00', 'PRESENT', '', 'teacher1'), +('2023002', '高等数学', DATE_SUB(CURDATE(), INTERVAL 3 DAY), '08:35:00', 'LATE', '迟到5分钟', 'teacher1'), +('2023001', '大学英语', DATE_SUB(CURDATE(), INTERVAL 2 DAY), '10:00:00', 'PRESENT', '', 'teacher1'), +('2023003', '高等数学', DATE_SUB(CURDATE(), INTERVAL 3 DAY), '08:30:00', 'ABSENT', '请假', 'teacher1'), +('2023001', '数据结构', DATE_SUB(CURDATE(), INTERVAL 1 DAY), '14:00:00', 'PRESENT', '', 'teacher1'), +('2023002', '数据结构', DATE_SUB(CURDATE(), INTERVAL 1 DAY), '14:00:00', 'PRESENT', '', 'teacher1'); \ No newline at end of file diff --git a/src/main/java/com/campus/controller/PageController.java b/src/main/java/com/campus/controller/PageController.java index 0ac41cd..f38da69 100644 --- a/src/main/java/com/campus/controller/PageController.java +++ b/src/main/java/com/campus/controller/PageController.java @@ -1,8 +1,13 @@ +// com/campus/controller/PageController.java package com.campus.controller; +import com.campus.entity.User; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import javax.servlet.http.HttpSession; + @Controller public class PageController { @@ -15,4 +20,44 @@ public class PageController { public String studentList() { return "student_list"; } + + @GetMapping("/login") + public String login() { + return "login"; + } + + @GetMapping("/register") + public String register() { + return "register"; + } + + @GetMapping("/admin") + public String adminPage(HttpSession session, Model model) { + User user = (User) session.getAttribute("currentUser"); + if (user == null || !"ADMIN".equals(user.getRole())) { + return "redirect:/login"; + } + model.addAttribute("user", user); + return "admin"; + } + + @GetMapping("/teacher") + public String teacherPage(HttpSession session, Model model) { + User user = (User) session.getAttribute("currentUser"); + if (user == null || !"TEACHER".equals(user.getRole())) { + return "redirect:/login"; + } + model.addAttribute("user", user); + return "teacher"; + } + + @GetMapping("/student") + public String studentPage(HttpSession session, Model model) { + User user = (User) session.getAttribute("currentUser"); + if (user == null || !"STUDENT".equals(user.getRole())) { + return "redirect:/login"; + } + model.addAttribute("user", user); + return "student"; + } } \ No newline at end of file diff --git a/src/main/java/com/campus/controller/StudentController.java b/src/main/java/com/campus/controller/StudentController.java index 87373ce..72daf88 100644 --- a/src/main/java/com/campus/controller/StudentController.java +++ b/src/main/java/com/campus/controller/StudentController.java @@ -1,3 +1,4 @@ +// com/campus/controller/StudentController.java package com.campus.controller; import com.campus.entity.Student; @@ -5,9 +6,10 @@ import com.campus.service.StudentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; -// StudentController.java @RestController @RequestMapping("/student") public class StudentController { @@ -19,9 +21,67 @@ public class StudentController { return studentService.listAll(); } + @GetMapping("/{studentId}") + public Map getByStudentId(@PathVariable String studentId) { + Map result = new HashMap<>(); + Student student = studentService.getByStudentId(studentId); + + if (student != null) { + result.put("success", true); + result.put("student", student); + } else { + result.put("success", false); + result.put("message", "学生不存在"); + } + + return result; + } + @PostMapping("/add") - public String add(@RequestBody Student student) { - studentService.add(student); - return "success"; + public Map add(@RequestBody Student student) { + Map result = new HashMap<>(); + + try { + studentService.add(student); + result.put("success", true); + result.put("message", "添加成功"); + } catch (Exception e) { + result.put("success", false); + result.put("message", "添加失败:" + e.getMessage()); + } + + return result; + } + + @PutMapping("/update") + public Map update(@RequestBody Student student) { + Map result = new HashMap<>(); + + try { + studentService.update(student); + result.put("success", true); + result.put("message", "更新成功"); + } catch (Exception e) { + result.put("success", false); + result.put("message", "更新失败:" + e.getMessage()); + } + + return result; + } + + @DeleteMapping("/delete/{id}") + public Map delete(@PathVariable Integer id) { + Map result = new HashMap<>(); + + try { + studentService.delete(id); + result.put("success", true); + result.put("message", "删除成功"); + } catch (Exception e) { + result.put("success", false); + result.put("message", "删除失败:" + e.getMessage()); + } + + return result; } } \ No newline at end of file diff --git a/src/main/java/com/campus/entity/User.java b/src/main/java/com/campus/entity/User.java index 3c4f8ae..3d8d9e7 100644 --- a/src/main/java/com/campus/entity/User.java +++ b/src/main/java/com/campus/entity/User.java @@ -1,41 +1,28 @@ +// com/campus/entity/User.java package com.campus.entity; -// User.java public class User { private Integer id; private String username; private String password; private String role; // ADMIN/TEACHER/STUDENT - public Integer getId() { - return id; - } + // 新增构造方法 + public User() {} - public void setId(Integer id) { - this.id = id; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { + public User(String username, String password, String role) { this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { this.password = password; - } - - public String getRole() { - return role; - } - - public void setRole(String role) { this.role = role; } + + // 已有的getter和setter方法... + public Integer getId() { return id; } + public void setId(Integer id) { this.id = id; } + public String getUsername() { return username; } + public void setUsername(String username) { this.username = username; } + public String getPassword() { return password; } + public void setPassword(String password) { this.password = password; } + public String getRole() { return role; } + public void setRole(String role) { this.role = role; } } \ No newline at end of file diff --git a/src/main/java/com/campus/mapper/StudentMapper.java b/src/main/java/com/campus/mapper/StudentMapper.java index 538191b..afcd3be 100644 --- a/src/main/java/com/campus/mapper/StudentMapper.java +++ b/src/main/java/com/campus/mapper/StudentMapper.java @@ -1,7 +1,9 @@ +// com/campus/mapper/StudentMapper.java package com.campus.mapper; import com.campus.entity.Student; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -11,4 +13,7 @@ public interface StudentMapper { void insert(Student student); void update(Student student); void delete(Integer id); + + // 新增:根据学号查询学生 + Student selectByStudentId(@Param("studentId") String studentId); } \ No newline at end of file diff --git a/src/main/java/com/campus/service/StudentService.java b/src/main/java/com/campus/service/StudentService.java index 8452b00..ae8e9c8 100644 --- a/src/main/java/com/campus/service/StudentService.java +++ b/src/main/java/com/campus/service/StudentService.java @@ -1,3 +1,4 @@ +// com/campus/service/StudentService.java package com.campus.service; import com.campus.entity.Student; @@ -7,7 +8,6 @@ import org.springframework.stereotype.Service; import java.util.List; -// StudentService.java @Service public class StudentService { @Autowired @@ -20,4 +20,19 @@ public class StudentService { public void add(Student student) { studentMapper.insert(student); } + + // 添加新方法:根据学号查询学生 + public Student getByStudentId(String studentId) { + return studentMapper.selectByStudentId(studentId); + } + + // 添加更新方法 + public void update(Student student) { + studentMapper.update(student); + } + + // 添加删除方法 + public void delete(Integer id) { + studentMapper.delete(id); + } } \ No newline at end of file diff --git a/src/main/resources/mapper/StudentMapper.xml b/src/main/resources/mapper/StudentMapper.xml index 72759e6..74a8a15 100644 --- a/src/main/resources/mapper/StudentMapper.xml +++ b/src/main/resources/mapper/StudentMapper.xml @@ -3,20 +3,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - SELECT * FROM student - - - INSERT INTO student(name, student_id, `class`, major) + + + + + INSERT INTO student(name, student_id, `class`, major) VALUES(#{name}, #{studentId}, #{class_}, #{major}) + UPDATE student - SET name = #{name}, student_id = #{studentId}, `class` = #{class_}, major = #{major} + SET name = #{name}, + student_id = #{studentId}, + `class` = #{class_}, + major = #{major} WHERE id = #{id} + DELETE FROM student WHERE id = #{id} + \ No newline at end of file diff --git a/src/main/resources/spring-mvc.xml b/src/main/resources/spring-mvc.xml index 3a3a6e3..ff3516c 100644 --- a/src/main/resources/spring-mvc.xml +++ b/src/main/resources/spring-mvc.xml @@ -13,7 +13,6 @@ - @@ -27,4 +26,26 @@ + + + + + + + + + + + + + + + text/html;charset=UTF-8 + application/json;charset=UTF-8 + + + + + + \ No newline at end of file