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

1. 本章任务

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

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

  1. 作业是属于课程的,所以当老师查看自己所管理的作业列表时,需要查询自己管理课程下面发布的作业。
  2. 发布作业题目(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" } });
	}
}

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;
	}

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>
				</tr>
			</c:forEach>
		</table>
	</div>
	<div id="content_bottom">
		<a href="/HomeworkSystem/RouteServlet?childPage=titleAdd.jsp">新增</a>
	</div>
</body>
</html>

2.4 作业题目新增功能实现

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

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

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

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

3. 总结

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


如有问题请扫码联系我
在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页