天天看點

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. 總結

如果感覺不熟悉,還是需要手工去把代碼敲一敲加深了解的。