学生管理系统之积分管理模块的设计与实施
•发布于   •作者 成哥哥  •406 次浏览  •来自 博客

上周,我们做着学习以来严格来说的第一个项目。首先,心情肯定是特别激动的。所以,我们的的态度也非常认真积极,小组讨论、交流更是频繁。下面来介绍一下本次我们做的第一个项目:

积分管理系统是以jqgrid框架为底层来进行的。从登录、注册,到学生管理,积分管理,班级管理等等。以及一系列教师、学生及管理员权限的设置。对我们第一次做项目而言,还是具有一定难度的。不过在此,我不得不说,我们小组的整体实力是相当强的。所以到答辩之前,马马虎虎算是完成了项目。(天启团队666^_^);好了,话不多说,下面我来简单介绍一个我所设计和试试的积分管理模块:

设计阶段:

我分配到积分管理这个模块时就这样想:

1、首先根据班级将所有成员分开。然后打开时的页面要简洁,只有学生姓名、当前总分和修改积分,查看积分明细这四列。

2、点击修改积分按钮时,会弹出一个模态框,输入原因和加/减分值。然后点击提交,就完成修改积分的功能。

3、点击查看积分明细这个按钮,会跳转到另一个页面,显示该按钮所在行学生的积分明细。

实施阶段:

一、首先要写一个加载jqgrid表格的js,这个比较简单,在此就简单说一下步骤:

1、写一个实体类,实体类中的一个属性对应数据库中的一列;

2、写一个jqgrid实体类,对应浏览器传过来的总页数,当前页等等;

3、写一个servlet来从数据库中获取数据库中的数据,通过实例化一个实体类的对象,使用该对象调用BaseDao中封装的方法,返回值类型为一个jqgrid对象;

4、将这个jqgrid对象通过response.getWriter().print(JSON.toJSON())返回给浏览器,然后通过jqery动态加载表格,显示在页面上。

二、对表格中的数据进行操作:

1、写一个操作数据的servlet,获取浏览器传递给servlet的操作符oper,并获取所以操作的数据。

2、写一个服务方法,即进行底层逻辑的类,通过每次操作的操作符不同对第一步传递过来的数据进行增加,删除,修改,查找等操作。

三、点击查看积分明细时的操作:

1、同样写一个js用来显示积分明细;

2、要想显示对应按钮所在行的学生的积分明细,首先需要获取该行的学生id。这里是第一个难点,具体代码如下:


function addButton(cellValue, options, rowObject){
	return "<button class=\"btn btn-primary btn-lg\" onclick='initValue("+rowObject.stu_id+")' data-toggle=\"modal\" data-target=\"#myModal\"\">修改积分</button> ";
					
				}
function addButton1(cellvalue, options, rowObject){
    return "<a href=\"getstuidservlet?name=showdetail&stu_id="+rowObject.stu_id+"&stu_name="+rowObject.stu_name+"\"><input type='button' class=\"btn btn-info\" value='查看积分明细'></a>";
				}

上述为在表格中添加按钮的代码。

注:(cellValue参数表示所在列的所有值,而rowObject则表示所在行的所有值。因此rowObject.stu_id便表示该列的学生id)

搞定了上述学生id的问题,那么问题就迎刃而解了,接下来只需要写一个servlet从数据库中获取该学生所以的积分明细就可以了。

四、修改数据时的操作:

1、点击修改积分按钮时,弹出模态框,具体代码如下:

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
	<div class="modal-dialog">
	<div class="modal-content">
	<div class="modal-header">
	<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
	<h4 class="modal-title" id="myModalLabel">
	修改学生积分
	</h4>
	</div>
	<div class="modal-footer">
	<form action="editscoreservlet" method="post">
	<center>请选择加/减分原因:
							
	<select name="reason">
	<c:forEach items="${rulesList }" var="rules">
	<option value="${rules.rules }"><c:out value="${rules.rules }"></c:out></option>
	</c:forEach>
	</select>
	</center><br>
							
	<center>请选择加/减分值:
	<select name="score">
	<c:forEach items="${rulesList }" var="rules">
	<option value="${rules.score }"><c:out value="${rules.score }"></c:out></option>
	</c:forEach>
							</select>
							</center><br>
							
							<center>请选择小组加/减分值:
							<select name="teamscore">
								<c:forEach items="${rulesList }" var="rules">
								<option value="${rules.teamscore }"><c:out value="${rules.teamscore }"></c:out></option>
								</c:forEach>
							</select>
							</center><br>
							<center>请输入备注:
							<input type="text" name="comment">
							</center>
							<input type="hidden" id="stu_id" name="stu_id" value=${ stu_id}>
						<button type="submit" class="btn btn-default">提交
						</button>
						<button type="button" class="btn btn-default" data-dismiss="modal">关闭
						</button>
						</form>
						</div>
						</div>
						</div>
						</div>

2、提交表单时,链接到一个servlet,此时也需要获取学生id,并且需要获取此时登录的教师id,并把教师id存到context域里去,以便用来获取教师名字。获取教师名称代码如下:

String email=null;
		String teacherid=null;
		//用来获取登录的教师邮箱,根据邮箱获取教师id ,用在修改积分时
		List<Map<String,Object>> res_email=DBUtil.getInstance().query("select email from sys_user where username=? or email=? or phone=?",loginname,loginname,loginname);
		for(Map<String,Object> map:res_email){
			email=map.get("email")+"";
		}
		if(res_email.isEmpty()&&res_email.size()==0){
			request.setAttribute("errInfo", "用户名错误");
			request.setAttribute("showModalId", "login-box");
			request.getRequestDispatcher("login.jsp").forward(request, response);
			return;
		}
		List<Map<String,Object>> res_teacherid=DBUtil.getInstance().query("SELECT id FROM t_teacher WHERE email='"+email+"';");
		for(Map<String,Object> tea_map:res_teacherid){
			teacherid=tea_map.get("id")+"";
		}
		getServletContext().setAttribute("teacherid", teacherid);

此时,表单传送过去的那个servlet里就能获取到学生id,以及教师id,这样就可以向积分明细表中插入数据了。具体代码如下:

package club.itstu.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import club.itstu.entity.Score;
import club.itstu.util.DBUtil;
@WebServlet(name="EditScoreServlet",urlPatterns="/editscoreservlet")
public class EditScoreServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the GET method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String reason=request.getParameter("reason");
		String score=request.getParameter("score");
		String comment=request.getParameter("comment");
		String stu_id=request.getParameter("stu_id");
		String teamscore=request.getParameter("teamscore"); 
		Integer teamscoreInt=Integer.valueOf(teamscore);
		String teacherid=getServletContext().getAttribute("teacherid")+"";
		Integer stu_idInt=Integer.valueOf(stu_id);
		if(teamscoreInt==0){
			System.out.println(teacherid);
			DBUtil.getInstance().insert("insert into score_detail (stu_id,reason,score,comment,teacherid) values(?,?,?,?,?);",stu_id,reason,score,comment,teacherid );
			request.getRequestDispatcher("/controller?name=score").forward(request, response);
		}else{
			String stu_name=null;
			long res_teamid=DBUtil.getInstance().queryInt("SELECT teamid FROM t_student WHERE id="+stu_id+";");
			List<Map<String,Object>> res_name=DBUtil.getInstance().query("SELECT name FROM t_student WHERE id="+stu_id+";");
			for(Map<String,Object> m:res_name){
				stu_name="小组成员"+m.get("name");
			}
			String reason_otherStu=stu_name+reason;
			List<Map<String,Object>> res_teamStuInfo=DBUtil.getInstance().query("SELECT id,NAME FROM t_student WHERE teamid="+res_teamid+";");
			for(Map<String,Object> m:res_teamStuInfo){
				if(m.get("id")==stu_idInt){
					DBUtil.getInstance().insert("insert into score_detail (stu_id,reason,score,comment,teacherid) values(?,?,?,?,?);",stu_id,reason,score,comment,teacherid );
				}else{
					DBUtil.getInstance().insert("insert into score_detail (stu_id,reason,score,comment,teacherid) values(?,?,?,?,?);",m.get("id"),reason_otherStu,teamscore,comment,teacherid );
				}
			}
			request.getRequestDispatcher("/controller?name=score").forward(request, response);
		}
	}

}

总结:

通过这次的项目实战,使我受益颇多。在一定意义上,这次的项目实战会使我终生受益。非常感谢我们团队成员的精诚合作。也非常感激高老师的指导。最后,希望这篇博客能对大家有所帮助。上述文章有什么错误之处,请大家指正!谢谢!


1 回复
静儿baobao

666!!!

回到顶部

©2017 Powered by 三十三行伪代码
皖ICP备17005175号-3