本章实现教师角色的作业管理功能。
教师需要发布作业题目,发布后可以修改,但是不允许删除。需要注意几点:
作业是属于课程的,所以当老师查看自己所管理的作业列表时,需要查询自己管理课程下面发布的作业。发布作业题目(title)时,需要同时生成学生应该提交的作业内容(job)记录。加入有30个学生选择了对应课程,则每次发布作业,除了要生成一个title记录,还要生成30条job记录,这样学生登录之后才能看到自己需要提交的作业题目及对应内容、打分情况。之前对项目中实现一个新功能讲的已经比较多了,此处简单的贴一下代码就OK,重点内容会有文字描述。
修改Title
public class Title { private int titleId; private String titleContent; private int titleCourse; private String titleTime; /** * 冗余字段用于显示 */ private String titleCourseName; // 省略get set方法 }修改RouteServlet
else if (childPage.equals("titleManage.jsp")) { User loginUser = (User) request.getSession().getAttribute("loginUser"); if (loginUser != null) {// 已登录 TitleDao titleDao = new TitleDao(); // 返回值为登录用户所对应的课程 request.setAttribute("titles", titleDao.getTitlesByUserId(loginUser.getUserId())); } }修改 TitleDao
/** * 通过userId获取对应作业题目 */ public List<Title> getTitlesByUserId(int userId) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; List<Title> titles = new ArrayList<Title>(); try { conn = DbUtils.getConnection(); String sql = "select t.*,c.course_name from title t left join course c on t.title_course=c.course_id left join user u on c.course_user=u.user_id where u.user_id=?"; ps = conn.prepareStatement(sql); ps.setInt(1, userId); rs = ps.executeQuery(); while (rs.next()) { titles.add(makeOneTitle(rs)); } } catch (SQLException e) { System.out.println(e.toString()); } finally { DbUtils.releaseConnection(rs, ps, conn); } return titles; } /** * 获取一个 */ public Title makeOneTitle(ResultSet rs) throws SQLException { Title title = new Title(); title.setTitleId(rs.getInt("title_id")); title.setTitleContent(rs.getString("title_content")); title.setTitleCourse(rs.getInt("title_course")); title.setTitleTime(rs.getString("title_time")); if (rs.getString("course_name") != null) { title.setTitleCourseName(rs.getString("course_name")); } return title; }添加titleManage.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!-- 使用c:标签需要添加本行代码 --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>titleManage.jsp</title> <link href="css/content.css" type="text/css" rel="stylesheet" /> </head> <body> <div id="content_top">作业题目管理</div> <div id="content_mid"> <table class="table_theme1"> <thead> <tr <tr> <th>题目编号</th> <th>题目名称</th> <th>所属课程</th> <th>操作</th> </tr> </thead> <c:forEach items="${titles}" var="item"> <tr> <td>${item.titleId}</td> <td>${item.titleContent}</td> <td>${item.titleCourseName}</td> <td><a href="/HomeworkSystem/RouteServlet?childPage=titleEdit.jsp&titleId=${item.titleId}">编辑</a></td> </tr> </c:forEach> </table> </div> <div id="content_bottom"> <a href="/HomeworkSystem/RouteServlet?childPage=titleAdd.jsp">新增</a> </div> </body> </html>由于作业新增页面需要选择作业所属课程,所以跳转到作业新增页面时,需要先加载教师管理的课程列表。
修改RouteServlet
else if (childPage.equals("titleAdd.jsp")) {// 课程新增页面,需要教师管理的课程列表 User loginUser = (User) request.getSession().getAttribute("loginUser"); CourseDao courseDao = new CourseDao(); request.setAttribute("courses", courseDao.getCoursesByUserId(loginUser.getUserId())); }修改titleAdd.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!-- 使用c:标签需要添加本行代码 --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>titleAdd.jsp</title> <link href="css/content.css" type="text/css" rel="stylesheet" /> </head> <body> <form action="/HomeworkSystem/CourseServlet?method=titleAdd" method="post"> <div id="content_top">作业题目新增</div> <div id="content_mid"> <table class="table_theme1"> <tr> <td>作业题目:</td> <td><input type="text" name="titleContent" /></td> </tr> <tr> <td>所属课程:</td> <td><select name="titleCourse"> <c:forEach items="${courses}" var="item"> <option value="${item.courseId}">${item.courseName}</option> </c:forEach> </select></td> </tr> </table> </div> <div id="content_bottom"> <input type="submit" value="保存"></input> </div> </form> </body> </html>点击新增后,需要生成作业题目记录,同时还需要生成选择该门课的学生的作业内容记录。所以修改TitleServlet如下,注意需要修改的相关的Dao层方法可以去查阅我的Github源码,此处就不再一一粘贴了。
@WebServlet("/TitleServlet") public class TitleServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 处理post请求 // 设置输入输出格式、编码 response.setContentType("text/html"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); // 获取method参数 String method = request.getParameter("method"); // 获取登录用户信息 User loginUser = (User) request.getSession().getAttribute("loginUser"); // 操作数据库 TitleDao titleDao = new TitleDao(); SelectionDao selectionDao = new SelectionDao(); JobDao jobDao = new JobDao(); if (method.equals("titleAdd")) { // 新增作业题目 Title title = new Title(); title.setTitleContent(request.getParameter("titleContent")); title.setTitleCourse(Integer.parseInt(request.getParameter("titleCourse"))); title.setTitleTime(TimeUtils.getNowSqlTime()); int newId = titleDao.add(title); // 查询选择该门课的用户id List<Selection> selections = selectionDao.getSelectionsByCourseId(title.getTitleCourse()); // 为每个选择该课的学生新增作业内容记录 for (Selection selection : selections) { Job job = new Job(); job.setJobTitle(newId); job.setJobUser(selection.getSelectionUser()); job.setJobTime(TimeUtils.getNowSqlTime()); jobDao.add(job); } } // 携带最新用户数据到人员管理页面 request.setAttribute("titles", titleDao.getTitlesByUserId(loginUser.getUserId())); // 跳转到管理后台页 request.setAttribute("childPage", "titleManage.jsp"); request.getRequestDispatcher("/index.jsp").forward(request, response); } }作业编辑,仅仅允许修改作业的题目,比较简单,此处就不再一一列举了。
如果感觉不熟悉,还是需要手工去把代码敲一敲加深理解的。
如有问题请扫码联系我