fix part2

Signed-off-by: Chenx221 <chenx221@yandex.com>
This commit is contained in:
Chenx221 2023-06-19 19:45:08 +08:00
parent 4d6a5ab635
commit 52ebf32766
13 changed files with 286 additions and 50 deletions

View File

@ -45,29 +45,29 @@
- admin,teacher,student
- /score
- ~/all
- 学生成绩页
- admin
- ~/all_t
- 学生成绩页(教师版)
- teacher
- 学生成绩页 [Get]
- admin,teacher,student
- scoreList|scoreList_t|scoreList_s
- ~/infomodv2
- 学生成绩修改页
- admin
- ~/infomodv2_t
- 学生成绩修改页(教师版)
- teacher
- 学生成绩修改页 [Get]
- admin,teacher
- scoreopv2|scoreopv2_t
- ~/query
- 学生成绩查询
- 学生成绩查询 [Post]
- admin,teacher
- scoreQueryResult|scoreQueryResult_t
- ~/modinfo
- 学生成绩修改
- 学生成绩修改 [Post]
- admin
- *Redirect*.infomodv2
- ~/delinfo
- 学生成绩删除
- 学生成绩删除 [Post]
- admin
- *Redirect*.infomodv2
- ~/addinfo
- 学生成绩添加
- 学生成绩添加 [Post]
- admin,teacher
- *Redirect*.infomodv2|*Redirect*.infomodv2_t
- /student
- ~/all
- 学生信息查询页

View File

@ -33,21 +33,20 @@ public class ScoreController {
if (username != null) {
model.addAttribute("username", username);
}
model.addAttribute("scores", scoreService.getAllScores());
return "scoreList";
}
@GetMapping("/all_t")
public String getAllScoreT(Model model) {
String username = new UsernameHelper().getCurrentUsername();
if (username != null) {
model.addAttribute("username", username);
String role = new UsernameHelper().getCurrentRole();
if (role.equals("[ROLE_admin]")) {
model.addAttribute("scores", scoreService.getAllScores());
return "score/scoreList";
} else if (role.equals("[ROLE_teacher]")) {
model.addAttribute("scores", scoreService.getAllScores());
return "score/scoreList_t";
} else {
model.addAttribute("scores", scoreService.getQueryScore(scoreService.getStudentIdByUsername(username)));
return "score/scoreList_s";
}
model.addAttribute("scores", scoreService.getAllScores());
return "scoreList_t";
}
@GetMapping("/infomodv2")//处理学生信息修改页
@GetMapping("/infomodv2")
public String getInfoModv2(@RequestParam(value = "successMessage", required = false, defaultValue = "null") String successMessage,
@RequestParam(value = "errorMessage", required = false, defaultValue = "null") String errorMessage,
Model model) {
@ -58,26 +57,15 @@ public class ScoreController {
model.addAttribute("scores", scoreService.getAllScores());
model.addAttribute("successMessage", successMessage);
model.addAttribute("errorMessage", errorMessage);
return "scoreopv2";
}
@GetMapping("/infomodv2_t")//处理学生信息修改页
public String getInfoModv2T(@RequestParam(value = "successMessage", required = false, defaultValue = "null") String successMessage,
@RequestParam(value = "errorMessage", required = false, defaultValue = "null") String errorMessage,
Model model) {
String username = new UsernameHelper().getCurrentUsername();
if (username != null) {
model.addAttribute("username", username);
String role = new UsernameHelper().getCurrentRole();
if (role.equals("[ROLE_admin]"))
return "score/scoreopv2";
else {
return "score/scoreopv2_t";
}
model.addAttribute("scores", scoreService.getAllScores());
model.addAttribute("successMessage", successMessage);
model.addAttribute("errorMessage", errorMessage);
return "scoreopv2_t";
}
@PostMapping(value = "/query", produces = "application/x-www-form-urlencoded;charset=UTF-8")//学生信息查询带条件
@PostMapping(value = "/query", produces = "application/x-www-form-urlencoded;charset=UTF-8")
public String getQueryScores(@RequestParam(value = "name", defaultValue = "null", required = false) String name,//学生姓名
@RequestParam(value = "coursename", defaultValue = "null", required = false) String course_name,//课程名
@RequestParam(value = "scoreid", defaultValue = "-1", required = false) int score_id,//成绩ID
@ -116,7 +104,12 @@ public class ScoreController {
String download = new CsvHelper().generateScoreCSVFile(scores);
model.addAttribute("download", download);
model.addAttribute("scores", scores);
return "scoreQueryResult";
String role = new UsernameHelper().getCurrentRole();
if (role.equals("[ROLE_admin]"))
return "score/scoreQueryResult";
else {
return "score/scoreQueryResult_t";
}
}
@PostMapping(value = "/modinfo", produces = "application/x-www-form-urlencoded;charset=UTF-8")
@ -160,7 +153,6 @@ public class ScoreController {
public String InsertCourseInfo(@RequestParam(value = "studentid", defaultValue = "-1", required = false) int studentid,
@RequestParam(value = "courseid", defaultValue = "-1", required = false) int courseid,
@RequestParam(value = "score", defaultValue = "-1", required = false) int score,
@RequestParam(value = "sp1", defaultValue = "null", required = false) String sp1,
Model model) {
if (studentid <= 0) {
model.addAttribute("errorMessage", "添加失败,学号非法");
@ -177,9 +169,11 @@ public class ScoreController {
model.addAttribute("errorMessage", "学生信息添加失败");
}
}
if(sp1.equals("t")){
String role = new UsernameHelper().getCurrentRole();
if (role.equals("[ROLE_admin]"))
return "redirect:/score/infomodv2";
else {
return "redirect:/score/infomodv2_t";
}
return "redirect:/score/infomodv2";
}
}

View File

@ -18,4 +18,8 @@ public interface ScoreDao {
int deleteScore(int id);
int insertScore(Score score);
int getStudentIdByUsername(String username);
List<Score> getQueryScore(int id);
}

View File

@ -46,4 +46,14 @@ public class ScoreDaoImpl implements ScoreDao {
public int insertScore(Score score) {
return sqlSession.insert("insertScore", score);
}
@Override
public int getStudentIdByUsername(String username) {
return sqlSession.selectOne("getStudentIdByUsername", username);
}
@Override
public List<Score> getQueryScore(int id) {
return sqlSession.selectList("getQueryScore", id);
}
}

View File

@ -37,4 +37,13 @@ public class ScoreService {
public int insertScore(Score score) {
return scoreDao.insertScore(score);
}
//写这里可能位置不太合适...
public int getStudentIdByUsername(String username) {
return scoreDao.getStudentIdByUsername(username);
}
public List<Score> getQueryScore(int id) {
return scoreDao.getQueryScore(id);
}
}

View File

@ -67,9 +67,10 @@
<select id="getScoreById" parameterType="int" resultMap="ScoreResultMap">
SELECT ScoreID, Score, st.id as student_id, st.name as name, c.CourseID, c.CourseName
FROM score s
JOIN student st ON s.StudentID = st.id
JOIN course c ON s.CourseID = c.CourseID
WHERE invalid = 0 AND ScoreID = #{id};
JOIN student st ON s.StudentID = st.id
JOIN course c ON s.CourseID = c.CourseID
WHERE invalid = 0
AND ScoreID = #{id};
</select>
<update id="deleteScore" parameterType="int">
UPDATE score
@ -80,4 +81,19 @@
INSERT INTO score (Score, StudentID, CourseID)
VALUES (#{score}, #{student.id}, #{course.courseID});
</insert>
<!-- 乱入-->
<select id="getStudentIdByUsername" parameterType="String" resultType="int">
select id
from user
where username = #{username};
</select>
<select id="getQueryScore" parameterType="int" resultType="cyou.chenx221.pojo.Score">
SELECT ScoreID, Score, StudentID, CourseID
FROM score
WHERE invalid = 0
AND StudentID = #{id};
</select>
</mapper>

View File

@ -0,0 +1,203 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<meta http-equiv="x-ua-compatible" content="ie=edge"/>
<title>成绩信息查看</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"/>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700;900&display=swap"
rel="stylesheet">
<link rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/mdb.min.css"/>
<style>
.table-container {
min-width: 80vw; /* 设置最小宽度为视窗宽度的80% */
min-height: 80vh; /* 设置最小高度为视窗高度的80% */
/*display: flex;*/
align-items: center;
justify-content: center;
}
.table-container table {
width: 100%;
/*height: 100%;*/
}
</style>
</head>
<body style="font-family: 'Noto Sans SC Regular',serif">
<!--Main Navigation-->
<header>
<nav class="navbar navbar-expand-lg navbar-light bg-light" style="z-index: 1;min-height: 58.59px">
<div class="container">
<button class="navbar-toggler" type="button" data-mdb-toggle="collapse"
data-mdb-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<i class="fas fa-bars"></i>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<a class="navbar-brand mt-2 mt-lg-0" href="#">
<i class="fas fa-chalkboard-user me-2"></i>
教务管理系统
</a>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">首页</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown1" role="button"
data-mdb-toggle="dropdown" aria-expanded="false">
学生管理
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown1">
<li><a class="dropdown-item" href="#">学生信息查询</a></li>
<li><a class="dropdown-item" href="#">学生信息管理</a></li>
<li><a class="dropdown-item" href="#">学生信息管理</a></li>
<li>
<hr class="dropdown-divider"/>
</li>
<li><a class="dropdown-item" href="#">学生成绩管理</a></li>
<li><a class="dropdown-item" href="#">学生成绩管理</a></li>
<li><a class="dropdown-item" href="#">学生成绩管理</a></li>
<li>
<hr class="dropdown-divider"/>
</li>
<li><a class="dropdown-item" href="#">学生选课管理</a></li>
<li><a class="dropdown-item" href="#">学生选课管理</a></li>
<li><a class="dropdown-item" href="#">学生选课管理</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown2" role="button"
data-mdb-toggle="dropdown" aria-expanded="false">
教师管理
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown2">
<li><a class="dropdown-item" href="#">教师信息管理</a></li>
<li><a class="dropdown-item" href="#">教师课程管理</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown3" role="button"
data-mdb-toggle="dropdown" aria-expanded="false">
课程管理
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown3">
<li><a class="dropdown-item" href="#">课程信息管理</a></li>
<li><a class="dropdown-item" href="#">课程安排管理</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown4" role="button"
data-mdb-toggle="dropdown" aria-expanded="false">
系统管理
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown4">
<li><a class="dropdown-item" href="#">个人设定</a></li>
<li><a class="dropdown-item" href="#">用户管理</a></li>
<li><a class="dropdown-item" href="#">日志管理</a></li>
<li><a class="dropdown-item" href="#">版本信息</a></li>
</ul>
</li>
</ul>
</div>
<div class="dropdown">
<a class="dropdown-toggle d-flex align-items-center hidden-arrow" href="#"
id="navbarDropdownMenuAvatar" role="button" data-mdb-toggle="dropdown" aria-expanded="false">
<i class="fas fa-circle-user fa-lg me-1"></i>
${username}
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownMenuAvatar">
<li>
<a class="dropdown-item" href="${pageContext.request.contextPath}/logout">登出</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<!--Main Navigation-->
<!--Main layout-->
<main>
<div class="bg-image shadow-2-strong vh-100"
style="background-image: url('${pageContext.request.contextPath}/resources/img/jason-blackeye-nyL-rzwP-Mk-unsplash.jpg'); margin-top: -58.59px;">
<div class="mask d-flex align-items-center h-100" style="background-color: hsla(0, 0%, 100%, 0.5);">
<div class="container d-flex justify-content-center">
<div>
<div class="row">
<div class="col-12">
<button type="button" class="btn btn-primary" onclick="location.href='../dashboard-t'">返回
</button>
</div>
</div>
<div class="row">
<div class="col-12">
<button type="button" class="btn btn-primary" onclick="exportCSV()">导出</button>
</div>
</div>
</div>
<div class="table-container rounded-4 shadow-3-strong"
style="background-color: rgba(255,255,255,0.9); overflow-y: auto; max-height: 400px;">
<table class="table table-striped table-hover border-primary">
<thead>
<tr>
<th scope="col">成绩ID</th>
<th scope="col">学号</th>
<th scope="col">学生姓名</th>
<th scope="col">课程ID</th>
<th scope="col">课程名</th>
<th scope="col">成绩</th>
</tr>
</thead>
<tbody>
<c:forEach var="score" items="${scores}">
<tr>
<td>${score.scoreID}</td>
<td>${score.student.id}</td>
<td>${score.student.name}</td>
<td>${score.course.courseID}</td>
<td>${score.course.courseName}</td>
<td>${score.score}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</div>
</main>
<!--Main layout-->
<!-- Footer -->
<footer class="bg-link text-center text-lg-start ">
</footer>
<!-- Footer -->
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/mdb.min.js"></script>
<script>
function exportCSV() {
// 构造请求 URL根据需要导出的类型传递参数
var exportUrl = '/output/export-csv?type=score'; // 示例:导出学生数据
var link = document.createElement('a');
link.href = exportUrl;
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
</script>
</body>
</html>