天天看点

JSP+Servlet培训班作业管理系统[18]–教师角色之作业题目管理功能实现

1. 本章任务

本章实现教师角色的作业管理功能。

教师需要发布作业题目,发布后可以修改,但是不允许删除。需要注意几点:

作业是属于课程的,所以当老师查看自己所管理的作业列表时,需要查询自己管理课程下面发布的作业。

发布作业题目(title)时,需要同时生成学生应该提交的作业内容(job)记录。加入有30个学生选择了对应课程,则每次发布作业,除了要生成一个title记录,还要生成30条job记录,这样学生登录之后才能看到自己需要提交的作业题目及对应内容、打分情况。

2. 代码实现

之前对项目中实现一个新功能讲的已经比较多了,此处简单的贴一下代码就OK,重点内容会有文字描述。

2.1 添加菜单

public class Constants {

// 用于保存角色及对应的菜单信息

public static HashMap<String, String[][]> roleMenuMap = new HashMap<String, String[][]>();

// 使用static代码块对roleMenuMap进行初始化

static {

 // 校长拥有的菜单

 roleMenuMap.put("master", new String[][] { { "人员管理", "userManage.jsp" }, { "课程查看", "courseView.jsp" } });

 // 教师拥有的菜单

 roleMenuMap.put("teacher", new String[][] { { "课程管理", "courseManage.jsp" }, { "作业题目管理", "titleManage.jsp" } });

}

}

1

2

3

4

5

6

7

8

9

10

11

2.2 加载教师所管理的作业

修改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;

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

2.3 显示作业题目列表

添加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>

  </c:forEach>

 </table>

</div>

<div id="content_bottom">

 <a href="/HomeworkSystem/RouteServlet?childPage=titleAdd.jsp">新增</a>

</body>

</html>

2.4 作业题目新增功能实现

由于作业新增页面需要选择作业所属课程,所以跳转到作业新增页面时,需要先加载教师管理的课程列表。

   else if (childPage.equals("titleAdd.jsp")) {// 课程新增页面,需要教师管理的课程列表

  CourseDao courseDao = new CourseDao();

  request.setAttribute("courses", courseDao.getCoursesByUserId(loginUser.getUserId()));

修改titleAdd.jsp

<title>titleAdd.jsp</title>

<form action="/HomeworkSystem/CourseServlet?method=titleAdd"

 method="post">

 <div id="content_top">作业题目新增</div>

 <div id="content_mid">

  <table class="table_theme1">

    <td>作业题目:</td>

    <td><input type="text" name="titleContent" /></td>

    <td>所属课程:</td>

    <td><select name="titleCourse">

      <c:forEach items="${courses}" var="item">

       <option value="${item.courseId}">${item.courseName}</option>

      </c:forEach>

    </select></td>

  </table>

 </div>

 <div id="content_bottom">

  <input type="submit" value="保存"></input>

</form>

点击新增后,需要生成作业题目记录,同时还需要生成选择该门课的学生的作业内容记录。所以修改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);

39

40

41

42

43

44

45

2.5 作业题目编辑功能的实现

作业编辑,仅仅允许修改作业的题目,比较简单,此处就不再一一列举了。

3. 总结

如果感觉不熟悉,还是需要手工去把代码敲一敲加深理解的。