package com.mingrisoft.dao;

import java.sql.*;
import java.util.*;

import com.mingrisoft.actionForm.LessonForm;
import com.mingrisoft.actionForm.QuestionsForm;
import com.mingrisoft.core.ConnDB;

public class StartExamDAO {
	private ConnDB conn=new ConnDB();
	private LessonDAO lessonDAO=new LessonDAO();
    //随机抽取试题
	public int randomGetQuestion(int lessonID){
		int questionsID=0;
		String sql="SELECT taoTiID FROM (SELECT distinct lessonID,taoTiID from (SELECT lessonId," +
	    			"taoTiID FROM tb_questions GROUP BY taoTiID,lessonID,type) as lessonTaoTi GROUP BY" +
	    			" lessonId,taoTiID having count(taoTiID) >1)as temp WHERE lessonID="+lessonID+"";
		ResultSet rs = conn.executeQuery(sql);						//执行查询语句
		int i=0;
	    try {												//捕捉异常
			/***************************获取记录总数*************************************************/
	    	rs.last();											//将记录指针移动到最后一条记录
	    	int recordNum=rs.getRow();							//获取记录总数
	    	rs.first();											//将记录指针移动到第一条记录
			/****************************************************************************************/
	    	int[] id=new int[recordNum];						//声明并初始化int型的数组，长度为获取的套题数
	        do {
	            id[i]=rs.getInt(1);								//将获取的套题ID保存到数组id中
	            i++;
	        }while (rs.next());									//将记录指针移动到下一条记录上
	        int rand=Math.abs(new Random().nextInt(id.length));	//随机获取一个下标值
	        questionsID=id[rand];								//获取数组中指定元素，即随机抽取的套题编号
	    } catch (Exception ex) {
	    	ex.printStackTrace();								//输出异常信息
	    }    	
		return questionsID;									//返回随机抽取的套题编号
	}

    //刚开始考试时保存考试结果
	public int startSaveResult(String studentID,int lessonID){
		String lesson=((LessonForm)lessonDAO.query(lessonID).get(0)).getName();	//根据课程ID获取课程名称
		String sql="INSERT INTO tb_stuResult (stuId,whichLesson,resSingle,resMore) values('"+studentID+"','"+lesson+"',0,0)";
		int ret=conn.executeUpdate(sql);										//执行数据添加操作
		return ret;
	}

    //考试结束后保存考试结果
	public int saveResult(String studentID,int lessonID,int resSingle,int resMore){
		String lesson=((LessonForm)lessonDAO.query(lessonID).get(0)).getName();	//获取课程名称
		String sql="UPDATE tb_stuResult set resSingle="+resSingle+",resMore="+resMore+
			" WHERE stuId='"+studentID+"' AND whichLesson='"+lesson+"'";
		int ret=conn.executeUpdate(sql);										//执行数据更新语句
		return ret;
	}

    //获取试题
    public List queryExam(int questionsID,int flag){
    	List questionsList = new ArrayList();					//初始化List集合的实例
        QuestionsForm questionsForm1 = null;					//声明QuestionsForm类的对象
        String sql="";
        if(flag==0){
            sql = "SELECT * FROM tb_questions WHERE taoTiID="+questionsID+" AND type='单选题'";
        }else{
        	sql = "SELECT * FROM tb_questions WHERE taoTiID="+questionsID+" AND type='多选题'";
        }
        ResultSet rs = conn.executeQuery(sql);					//执行查询语句
        String type="";										//定义记录试题类型的变量
        int id=0;												//定义保存试题ID的变量
        try {
			/***************************获取记录总数*********************************************/
    		rs.last();											//将记录指针移动到最后一条记录
    		int recordNum=rs.getRow();							//获取记录总数
    		rs.first();											//将记录指针移动到第一条记录
			/***********************************************************************************/
            int[] idArr=new int[recordNum];	//定义并初始化数组idArr，数组长度为单选题或多选题的个数
            for(int i=0;i<recordNum;i++) {
                questionsForm1 = new QuestionsForm();
                id=rs.getInt(1); 								//获取ID属性
                questionsForm1.setID(id); 					//设置试题ID属性
                questionsForm1.setSubject(rs.getString(2)); 		//获取并设置考试题目属性
                type=rs.getString(3); 							//获取试题类型属性
                questionsForm1.setType(type); 				//设置试题类型属性
                questionsForm1.setLessonId(rs.getInt(5)); 			//获取并设置课程ID属性
                questionsForm1.setTaoTiId(rs.getInt(6)); 			//获取并设置套题ID属性
                questionsForm1.setOptionA(rs.getString(7)); 		//获取并设置选项A属性
                questionsForm1.setOptionB(rs.getString(8)); 		//获取并设置选项B属性
                questionsForm1.setOptionC(rs.getString(9)); 		//获取并设置选项C属性
                questionsForm1.setOptionD(rs.getString(10));		//获取并设置选项D属性
                if(type.equals("多选题")){
                	String[] ans=rs.getString(11).split(",");			//将获取的正确答案分割为数组
                	questionsForm1.setAnswerArr(ans);			//设置正确答案属性
                	idArr[i]=id; 								//将ID属性保存到数组idArr中
                	questionsForm1.setIdArrM(idArr);			//设置提交试卷时应用的idArrM属性
                }else{
                	questionsForm1.setAnswer(rs.getString(11));	//设置正确答案属性
                	idArr[i]=id;								//将ID属性保存到数组idArr中
                	questionsForm1.setIdArrS(idArr);			//设置idArrS属性，该属性在提交试卷时应用
                }
                questionsForm1.setNote(rs.getString(12));			//获取并设置备注属性
                questionsList.add(questionsForm1);				//将查询结果保存到List集合中
                rs.next();										//将记录指针移动到下一条记录
            }
        } catch (Exception e) {
        	e.printStackTrace();								//输出异常信息
        }
        return questionsList;
    }

    public String getRightAnswer(int id){
    	String answer="";
    	String sql = "SELECT * FROM tb_questions WHERE id="+id+"";
    	System.out.println("获取下正确答案时的SQL语句："+sql);
    	ResultSet rs = conn.executeQuery(sql);
        try {
            if (rs.next()) {
                answer=rs.getString(11);
            }
        } catch (Exception ex) {
        	System.out.println("获取正确答案时产生的错误信息："+ex.getMessage());
        } 
    	return answer;
    }
}
