package org.matrix.service.impl;
import java.util.List;
import org.matrix.dao.AdminDao;
import org.matrix.dao.ExamTypeDao;
import org.matrix.dao.QuestionDao;
import org.matrix.dao.StudentDao;
import org.matrix.exception.ExamException;
import org.matrix.pojo.ExamType;
import org.matrix.pojo.Question;
import org.matrix.pojo.Student;
import org.matrix.service.ExamService;
public class ExamServiceImpl implements ExamService {
private AdminDao adminDao;
private ExamTypeDao examTypeDao;
private QuestionDao questionDao;
private StudentDao studentDao;
public void setAdminDao(AdminDao adminDao) {
this.adminDao = adminDao;
}
public void setExamTypeDao(ExamTypeDao examTypeDao) {
this.examTypeDao = examTypeDao;
}
public void setQuestionDao(QuestionDao questionDao) {
this.questionDao = questionDao;
}
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}
/**
* 新增考试类型
* @param testTitle 考试名称
* @param testTime 考试时间
* @return 新增的考试类型的id
* @throws ExamException
*/
public int addExamType(String testTitle, String testTime)
throws ExamException {
try {
ExamType et = new ExamType(testTitle,testTime);
examTypeDao.save(et);
return et.getId();
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("添加考试类型时出现异常,请重试!");
}
}
/**
* 增加一个试题,增加一条试题记录
* @param quTitle 题目
* @param quHard 难度
* @param quScore 分数
* @param quAnswer 答案
* @param quType 类型
* @param selectOption 试题选项
* @param examTypeId 试题对应的考试类型
* @return 新增试题的主键
* @throws ExamException
*/
public int addQuestion(String quTitle, String quHard, Integer quScore,
String quAnswer, String quType, String selectOption, int examTypeId)
throws ExamException {
try {
ExamType examType = examTypeDao.get(examTypeId);
if(examType==null){
throw new ExamException("不存在该考试类型,请重新选择!");
}
Question question = new Question(quTitle, quHard,quScore,
quAnswer, quType, selectOption,examType);
questionDao.save(question);
return question.getId();
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("添加试题出现异常,请重试!");
}
}
/**
* 增加一个学生实例,对应为增加一条学生的记录
* @param stuNumber 学号
* @param name 姓名
* @param classname 班级
* @param humanId 编号
* @param email 邮箱
* @param address 地址
* @param phone 电话
* @return 新增学生的主键
* @throws ExamException
*/
public int addStudent(String stuNumber, String name, String classname,
String humanId, String email, String address, String phone)
throws ExamException {
try {
Student student = new Student(stuNumber,name,classname,humanId,email,address,phone);
studentDao.save(student);
return student.getId();
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("添加学生时出现异常,请重试!");
}
}
/**
* 根据用户名和密码判断用户是否可以成功登录
* @param user 登录用的用户名
* @param pass 登录用的密码
* @return
* @throws ExamException
*/
public boolean adminLogin(String user, String pass) throws ExamException {
try {
List result = adminDao.findAdminByNameAndPass(user, pass);
if(result!=null&&result.size()>0){
return true;
}
return false;
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("系统管理员登录出现异常,请重试!");
}
}
/**
* 根据考试类型id删除考试类型
* @param id 需要删除的考试类型的主键
* @throws ExamException
*/
public void deleteExamType(int id) throws ExamException {
try {
examTypeDao.delete(id);
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("删除考试类型时出现异常,请重试!");
}
}
/**
* 根据试题id删除试题
* @param id 需要删除的试题的主键
* @throws ExamException
*/
public void deleteQuestion(int id) throws ExamException {
try {
questionDao.delete(id);
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("删除试题时出现异常,请重试!");
}
}
/**
* 根据学生id删除学生
* @param id 需要删除的学生的主键
* @throws ExamException
*/
public void deleteStudent(int id) throws ExamException {
try {
studentDao.delete(id);
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("删除学生时出现异常,请重试!");
}
}
/**
* 获取所有考试类型
* @return 所有考试类型
* @throws ExamException
*/
public List<ExamType> getAllExamType() throws ExamException {
return examTypeDao.findAll();
}
/**
* 根据考试类型id获取考试类型
* @param typeId 考试类型id
* @return 该id对应的考试类型名
* @throws ExamException
*/
public String getExamTypeName(int typeId) throws ExamException {
try {
return examTypeDao.get(typeId).getExamName();
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("获取考试类型出现异常,请重试!");
}
}
/**
* 根据考试类型id获取下一个试题
* @param alreadys 已经回答的试题id
* @param examTypeId 考试类型id
* @return 该考试类型的下一个试题
* @throws ExamException
*/
public Question getNextQuestion(List<Integer> alreadys, int examTypeId)
throws ExamException {
try {
//获取指定类型
ExamType examType = examTypeDao.get(examTypeId);
if(examType==null){
throw new ExamException("不存在该考试类型,请重新选择!");
}
//获取question表中最大id号
int maxId = questionDao.getMaxId();
//直到获取1道正确的题目时才退出循环
REPEAT_TRY:
while(true){
//产生一个随机数,该随机数不大于最大id
int randomId = (int)Math.round(Math.random()*maxId)+1;
//如果已答题的数组不为空,判断获取的题是否已在已答题数组中
if(alreadys!=null){
for(int alreadyId:alreadys){
if(alreadyId==randomId){
//舍弃该随机数,继续标号为(REPEAT_TRY)的while循环的下一次循环,重新获取随机数
continue REPEAT_TRY;
}
}
}
Question question = null;
//如果获取题目出现异常,重新开始循环来获取下一题
try {
//每次用随机数取出一个题目,检查该题目是否属于指定ExamType,同时还要检查是否已经做过
question = questionDao.findQuestionByExamType(randomId, examType);
if(question==null){//没有找到id为随机数的题目,继续循环直至找到
continue;
}
} catch (Exception e) {
continue;
}
//到这里说明已正常获取一道题目,可以退出循环,将题目返回
return question;
}
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("获取下一道试题时出现异常,请重试!");
}
}
/**
* 根据每页记录数,总记录数获取总页数
* @param count 总记录数
* @param pageSize 每页显示的记录数
* @return 计算得到的总页数
*/
public int getPageCount(int count, int pageSize) {
return (count+pageSize-1)/pageSize;
}
/**
* 根据试题id获取试题
* @param id 试题id
* @return 该id对应的试题
* @throws ExamException
*/
public Question getQuestionById(int id) throws ExamException {
try {
return questionDao.get(id);
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("根据id获取试题出现异常,请重试!");
}
}
/**
* 获取试题数量
* @return 试题的个数
* @throws ExamException
*/
public int getQuestionCount() throws ExamException {
try {
return (int)questionDao.getQuestionCount();
} catch (Exception e) {
e.printStackTrace();
throw new ExamException("获取试题数量时出现异常,请重试!");
}
}
/**
* 获取学生的数量
* @return 学生的个数
* @throws ExamException
*/
public int getStudentCount() throws ExamException {
try {
return (int)studentDao.getStudentCount();
} catch (Exception e) {
e.printStackTrace();
throw
没有合适的资源?快使用搜索试试~ 我知道了~
ssh-exam在线考试系统
共226个文件
gif:58个
class:38个
java:35个
4星 · 超过85%的资源 需积分: 10 27 下载量 91 浏览量
2013-03-05
23:07:55
上传
评论 2
收藏 7.41MB RAR 举报
温馨提示
一个很好的在线考试系统,这是一个在学校的做的项目,对初学者的学习很有帮助,希望大家下载,
资源推荐
资源详情
资源评论
收起资源包目录
ssh-exam在线考试系统 (226个子文件)
ExamServiceImpl.class 8KB
ReplyAction.class 4KB
QuestionDaoImpl.class 3KB
BeginAction.class 3KB
StudentDaoImpl.class 2KB
Question.class 2KB
FinishAction.class 2KB
Student.class 2KB
ListQuestionAction.class 2KB
ListStudentAction.class 2KB
AddQuestionAction.class 2KB
StudentLoginAction.class 2KB
AdminLoginAction.class 2KB
AddStudentAction.class 2KB
AdminDaoImpl.class 2KB
DelQuestionAction.class 2KB
DelStudentAction.class 2KB
MyHibernateDaoSupport.class 2KB
ExamInterceptor.class 2KB
AuthorityInterceptor.class 2KB
MyHibernateDaoSupport$3.class 2KB
ExamService.class 2KB
ExamType.class 2KB
MyHibernateDaoSupport$2.class 2KB
ExamTypeDaoImpl.class 2KB
AddTestAction.class 2KB
PrepareAction.class 2KB
MyHibernateDaoSupport$1.class 1KB
BeforeAddQuestionAction.class 1KB
Admin.class 1KB
MyActionServlet.class 843B
Test.class 612B
StudentDao.class 594B
QuestionDao.class 527B
BaseAction.class 514B
ExamException.class 448B
AdminDao.class 440B
ExamTypeDao.class 368B
.classpath 2KB
org.eclipse.wst.common.component 462B
org.eclipse.wst.jsdt.ui.superType.container 49B
Style.css 2KB
Style.css 2KB
Thumbs.db 36KB
Thumbs.db 36KB
background_left.gif 1KB
background_left.gif 1KB
left_arrow_down.gif 1KB
left_arrow_down.gif 1KB
forword_1.gif 1KB
forword_1.gif 1KB
useronline.gif 919B
useronline.gif 919B
dot_1.gif 907B
dot_1.gif 907B
sauser_1.gif 862B
sauser_2.gif 862B
sauser_2.gif 862B
sauser_1.gif 862B
left_background_01.gif 659B
left_background_01.gif 659B
HOME_BG3.GIF 505B
HOME_BG3.GIF 505B
HOME_BG2.GIF 490B
HOME_BG2.GIF 490B
announce.gif 481B
announce.gif 481B
HOME_BG1.GIF 475B
HOME_BG1.GIF 475B
stu_1.gif 415B
stu_1.gif 415B
help_1.gif 405B
help_1.gif 405B
ip_1.gif 376B
ip_1.gif 376B
post_1.gif 359B
post_1.gif 359B
fav_1.gif 338B
fav_1.gif 338B
backt.gif 329B
backt.gif 329B
query_1.gif 237B
query_1.gif 237B
HOME_BG4.GIF 233B
HOME_BG4.GIF 233B
HOME_BG6.GIF 173B
HOME_BG6.GIF 173B
HOME_BG8.GIF 167B
HOME_BG8.GIF 167B
forget_1.gif 152B
forget_1.gif 152B
left_background_02.gif 149B
left_background_02.gif 149B
sauser_3.gif 95B
sauser_3.gif 95B
HOME_BG7.GIF 93B
HOME_BG7.GIF 93B
HOME_BG5.gif 69B
HOME_BG5.gif 69B
HOME_BG9.GIF 46B
共 226 条
- 1
- 2
- 3
资源评论
- 小菜鸟yjm2014-05-17很好,功能很全,但是还有些地方得改下。
- 123nihao1232014-06-26内容很全 各种文档 但是用的struts1 版本也太老了
- dongxiaoqiao92013-12-10运行不出来!
yuanbinghao
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功