ssm+mysql+jsp打造在线考试系统WeKnow-学生端

一.登陆模块

前台提交账号和密码传到后台处理控制层

1.1 首先是控制器

@RequestMapping(value="/studentLogin", method=RequestMethod.POST)
	public ModelAndView studentLogin(StudentInfo student, HttpServletRequest request) {
		ModelAndView model = new ModelAndView();
		StudentInfo loginStudent = studentInfoService.getStudentByAccountAndPwd(student.getStudentAccount());
		if(loginStudent == null || !student.getStudentPwd().equals(loginStudent.getStudentPwd())){
			model.setViewName("home/suc");
			return model;
		}
		request.getSession().setAttribute("loginStudent", loginStudent);
		System.out.println(request.getSession().getAttribute("loginStudent"));
		model.setViewName("home/suc");
		System.out.println("执行完毕");
		return model;
	}
}

1.2 在这里会调用服务层

StudentInfo loginStudent = studentInfoService.getStudentByAccountAndPwd(student.getStudentAccount());

 1.3 服务层接口

public StudentInfo getStudentByAccountAndPwd(String studentAccount);

 1.4 服务层实现

public StudentInfo getStudentByAccountAndPwd(String studentAccount) {
return studentInfoMapper.getStudentByAccountAndPwd(studentAccount);//调用dao接口
}

 1.5 数据层接口

public StudentInfo getStudentByAccountAndPwd(String studentAccount);

 1.6  数据层实现

<mapper namespace="com.caizhen.weknow.dao.StudentInfoMapper">
	<!-- 定义resultMap -->
	<resultMap type="com.caizhen.weknow.domain.StudentInfo" id="queryStudent">
		<!-- 学号 -->
		<id column="studentId" property="studentId"/>
		<!-- 学生姓名 -->
		<result column="studentName" property="studentName"/>
		<!-- 学生账号 -->
		<result column="studentAccount" property="studentAccount"/>
		<!-- 学生账号密码 -->
		<result column="studentPwd" property="studentPwd"/>
		<!-- 班级 -->
		<!-- 班级自身的属性与数据库字段的映射 --> 
		<association property="classInfo" javaType="com.caizhen.weknow.domain.ClassInfo">
			<id column="classId" property="classId"/>
			<result column="className" property="className"/>
		</association>
		<!-- 年级 -->
		<!-- 年级自身的属性与数据库字段的映射 --> 
		<association property="grade" javaType="com.caizhen.weknow.domain.GradeInfo">
			<id column="gradeId" property="gradeId"/>
			<result column="gradeName" property="gradeName"/>
		</association>
	</resultMap>
	<select id="getStudentByAccountAndPwd" parameterType="java.lang.String" resultMap="queryStudent">
		SELECT a.*,b.className,c.gradeId,c.gradeName FROM StudentInfo a
		INNER JOIN ClassInfo b ON a.classId=b.classId
		INNER JOIN GradeInfo c ON b.gradeId=c.gradeId
		WHERE studentAccount=#{studentAccount}
	</select>
</mapper>

 二:考试中心模块

<li><a id="examCenter-link" target="home" style="cursor: pointer;" 
href="willexams?
classId=${sessionScope.loginStudent.classInfo.classId }&
gradeId=${sessionScope.loginStudent.grade.gradeId }&
studentId=${sessionScope.loginStudent.studentId }"
>考试中心</a></li>

 向url:willexams传入三个参数:classId,gradeId,studentId

2.1进入控制器

@RequestMapping("/willexams")
	public ModelAndView getStudentWillExam(
			@RequestParam("classId") Integer classId,
			@RequestParam("gradeId") Integer gradeId,
			@RequestParam(value="studentId", required=false) Integer studentId) {
		ModelAndView model = new ModelAndView();
		model.setViewName("/home/examCenter");
//将classId和gradeId存入map集合中 Map<String, Object> map = new HashMap<String, Object>(); map.put("classId", classId); map.put("gradeId", gradeId); List<ExamPlanInfo> examPlans = examPlanInfoService.getStudentWillExam(map); model.addObject("examPlans", examPlans); model.addObject("gradeId", gradeId); return model; }

 2.2 进入服务层接口

public List<ExamPlanInfo> getStudentWillExam(Map<String, Object> map);

 2.3进入服务层实现层

public List<ExamPlanInfo> getStudentWillExam(Map<String, Object> map) {
		return examPlanInfoMapper.getStudentWillExam(map);
}

 2.4 进入数据协议层

public List<ExamPlanInfo> getStudentWillExam(Map<String, Object> map);

 2.5 进入数据实现层

<mapper namespace="com.caizhen.weknow.dao.ExamPlanInfoMapper">
	
	<resultMap type="com.caizhen.weknow.domain.ExamPlanInfo" id="queryWillExam">
		<id column="examPlanId" property="examPlanId"/>
		<result column="beginTime" property="beginTime"/>
		<!-- 科目 -->
		<association property="course" javaType="com.caizhen.weknow.domain.CourseInfo">
			<id column="courseId" property="courseId"/>
			<result column="courseName" property="courseName"/>
		</association>
		<!-- 班级 -->
		<association property="clazz" javaType="com.caizhen.weknow.domain.ClassInfo">
			<id column="classId" property="classId"/>
		</association>
		<!-- 试卷 -->
		<association property="examPaper" javaType="com.caizhen.weknow.domain.ExamPaperInfo">
			<id column="examPaperId" property="examPaperId"/>
			<result column="examPaperName" property="examPaperName"/>
			<result column="subjectNum" property="subjectNum"/>
			<result column="examPaperScore" property="examPaperScore"/>
			<result column="examPaperEasy" property="examPaperEasy"/>
			<result column="examPaperTime" property="examPaperTime"/>
		</association>
	</resultMap>

	<!-- 查询学生待考信息 -->
	<!-- 考试安排表  examplaninfo a-->
	<!-- 班级信息表 classinfo  b-->
	<!-- 年级表 gradeinfo c -->
	<!-- 试卷表 exampaperinfo d -->
	<!-- 课程表 courseinfo e -->
	<!-- 需要的参数
	 1.a.* 考试安排表所有字段
	 2.d.examPaperName 试卷名称
	 3.d.subjectNum 试题号
	 4.d.examPaperScore 试卷分数
	 5.d.examPaperEasy 试卷难易度
	 6.d.examPaperTime  考试时长
	 5.e.coure.name  课程名称
	 -->
	<select id="getStudentWillExam" parameterType="java.util.Map" resultMap="queryWillExam">
		SELECT a.*,d.examPaperName,d.subjectNum,d.examPaperScore,d.examPaperEasy,d.examPaperTime,e.courseName FROM ExamPlanInfo a
		INNER JOIN ClassInfo b ON a.classId=b.classId
		INNER JOIN GradeInfo c ON b.gradeId=c.gradeId
		INNER JOIN ExamPaperInfo d ON a.examPaperId=d.examPaperId
		INNER JOIN CourseInfo e ON a.courseId=e.courseId
		WHERE a.classId=#{classId} AND b.gradeId=#{gradeId}
	</select>
</mapper>

 2.6 定向到考试中心界面判断exPlans中的条数是否大于0

<c:when test="${fn:length(examPlans) > 0 }">

 如果不是则输出页面

<c:otherwise>
<div class="jumbotron">
<h1>暂无待考信息</h1>
<p>请等待教师分配</p>
</div>
</c:otherwise>

 三:历史考试模块

1.前台

<!-- 考试历史 -->
<li><a id="mineCenter-link" target="home" style="cursor: pointer;" href="history/${sessionScope.loginStudent.studentId }" studentId="${sessionScope.loginStudent.studentId }">考试历史</a></li>

 1.1 前台状态校验

<script type="text/javascript">
	$(function() {
	//考试中心状态判断
	$("#examCenter-link, #mineCenter-link").click(function() {
	//判断是否登录
	var studetnId = $(this).attr("studentId");
	//如果学生号为空
	if(studetnId.trim() == "" || studetnId == null) {
	zeroModal.show({
	title: "提示",
	content: "登录后才能查看",
	width : '200px',
	height : '130px',
	overlay : false,
	ok : true,
	onClosed : function() {
	location.reload();
			}
			});
		return false;
		}
			});

2.后台

2.1 如果学生成功登陆后点击历史考试(控制层)

@Controller
public class ExamHistoryInfoHandler {
	@Autowired
	private ExamHistoryPaperService examHistoryPaperService;
	@RequestMapping("/historys")
	public ModelAndView examHistorys() {
		List<ExamHistoryInfo> historys = examHistoryPaperService.getExamHistoryToTeacher();
		ModelAndView model = new ModelAndView("admin/examHistorys");
		model.addObject("historys", historys);
		return model;
	}
}

2.2 服务层

private ExamHistoryPaperService examHistoryPaperService;

 服务层

public interface ExamHistoryPaperService {
       //查询考试历史信息,针对前台学生查询
	public List<ExamHistoryPaper> getExamHistoryToStudent(int studentId);
	
	public int isAddExamHistory(Map<String, Object> map);
	
	public int getHistoryInfoWithIds(Map<String, Object> map);
	
	public List<ExamHistoryInfo> getExamHistoryToTeacher();
}

 2.3 服务实现层

@Service
public class ExamHistoryPaperServiceImpl implements ExamHistoryPaperService {

	@Autowired
	private ExamHistoryPaperMapper examHistoryPaperMapper;
	public List<ExamHistoryPaper> getExamHistoryToStudent(int studentId) {
		return examHistoryPaperMapper.getExamHistoryToStudent(studentId);
	}
	public int isAddExamHistory(Map<String, Object> map) {
		return examHistoryPaperMapper.isAddExamHistory(map);
	}
	public int getHistoryInfoWithIds(Map<String, Object> map) {
		return examHistoryPaperMapper.getHistoryInfoWithIds(map);
	}
	public List<ExamHistoryInfo> getExamHistoryToTeacher() {
		return examHistoryPaperMapper.getExamHistoryToTeacher();
	}
}

 2.4 数据接口层

public interface ExamHistoryPaperMapper {

	//查询考试历史信息,针对前台学生查询
	public List<ExamHistoryPaper> getExamHistoryToStudent(int studentId);
	
	public int isAddExamHistory(Map<String, Object> map);
	
	public int getHistoryInfoWithIds(Map<String, Object> map);
	
	//查询考试历史信息,针对后台教师查询
	public List<ExamHistoryInfo> getExamHistoryToTeacher();
}

 2.5 数据实现层

<mapper namespace="com.caizhen.weknow.dao.ExamHistoryPaperMapper">
	
	<resultMap type="com.caizhen.weknow.domain.ExamHistoryInfo" id="queryExamHistoryToStudentResultMap">
		<id column="historyId" property="historyId"/>
		<result column="examScore" property="examScore"/>
		<association property="examPaper" javaType="com.caizhen.weknow.domain.ExamPaperInfo">
			<id column="examPaperId" property="examPaperId"/>
			<result column="examPaperName" property="examPaperName"/>
			<result column="examPaperScore" property="examPaperScore"/>
			<result column="subjectNum" property="subjectNum"/>
		</association>
	</resultMap>
	
	<!-- 查询考试历史信息,针对前台学生查询 -->
	<select id="getExamHistoryToStudent" parameterType="int" resultType="ExamHistoryPaper">
		SELECT
		a.historyId,a.examScore,b.examPaperId,b.examPaperName,b.examPaperScore,b.subjectNum,c.beginTime
		FROM ExamHistoryInfo a
		LEFT JOIN examPaperInfo b ON a.examPaperId=b.exampaperId
		LEFT JOIN examPlanInfo c ON b.examPaperId=c.examPaperId
		WHERE studentId=#{studentId}
	</select>
	
	
	<!-- 新增历史记录 -->
	<insert id="isAddExamHistory" parameterType="java.util.Map">
		INSERT INTO ExamHistoryInfo VALUES(NULL, #{studentId}, #{examPaperId}, #{examScore});
	</insert>
	
	<select id="getHistoryInfoWithIds" parameterType="java.util.Map" resultType="int">
		SELECT COUNT(*) FROM ExamHistoryInfo WHERE studentId=#{studentId} AND examPaperId=#{examPaperId}
	</select>
	
	
	
	<resultMap type="com.caizhen.weknow.domain.ExamHistoryInfo" id="queryExamHistoryToTeacherResultMap">
		<id column="historyId" property="historyId"/>
		<result column="examScore" property="examScore"/>
		<association property="examPaper" javaType="com.caizhen.weknow.domain.ExamPaperInfo">
			<id column="examPaperId" property="examPaperId"/>
			<result column="examPaperName" property="examPaperName"/>
			<result column="examPaperScore" property="examPaperScore"/>
			<result column="subjectNum" property="subjectNum"/>
		</association>
		<association property="student" javaType="com.caizhen.weknow.domain.StudentInfo">
			<id column="studentId" property="studentId"/>
			<result column="studentName" property="studentName"/>
		</association>
	</resultMap>
	<!-- 查询考试历史信息,针对后台教师查询 -->
	<select id="getExamHistoryToTeacher" resultMap="queryExamHistoryToTeacherResultMap">
		SELECT
		a.historyId,a.examScore,b.examPaperId,b.examPaperName,b.examPaperScore,b.subjectNum,d.studentId,d.studentName
		FROM ExamHistoryInfo a
		INNER JOIN examPaperInfo b ON a.examPaperId=b.exampaperId
		LEFT JOIN StudentInfo d ON a.studentId=d.studentId;
	</select>
</mapper>

 

转载于:https://www.cnblogs.com/cainame/p/10346613.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值