在线考试_____计算分值(单选,多选,判断)

// 计算分数
	@ResponseBody
	@RequestMapping(value = "/addPrice", method = RequestMethod.POST)
	public String addPrice(TestQuestion ques, HttpServletRequest request) {
		// 获取前台传 的 与value 值
		String[] optionType = request.getParameterValues("optionId");
		// 获取前台获取的 id
		String[] testId = request.getParameterValues("testId");
		for (String arr : testId) {

			System.err.println("test——id" + arr);
		}
		for (String optionTypes : optionType) {

			System.err.println("optionId" + optionTypes);
		}
		int sum = 0;
		// 用 页面的题目id 找出正确答案 与 option表中的内容,查看是否是一致的
		for (int i = 0; i < testId.length; i++) {
			// 获取 question 表中的内容
			TestQuestion question = disposeService.getqustion(testId[i]);
			// 通过题目id来获取option表的内容。
			List<Map<String, Object>> optionList = disposeService.queryOptions(testId[i]);
			// 定义空集合,来存储option表的id;
			List<String> list = new ArrayList<String>();
			// 定义空集合,来存储页面输入的答案。做比较
			List<String> answerList = new ArrayList<String>();

			// 遍历optionList获取所有的 选项,选项id
			for (Map<String, Object> map : optionList) {
				// 将页面题目所对应的选项 存到list集合当中
				String answer = map.get("option_id").toString();
				// 将 option_id 所对应的选项 存到list集合中去
				// String optionTypeXan=
				// disposeService.getOptionType(answer).getOptionType();

				list.add(answer);
			}
			// 循环遍历 循环页面选项,判断,选项是否存在于通过id 查找出来的选项中
			for (int j = 0; j < optionType.length; j++) {
				// 进行比较 如果存在就 存进页面输入的答案的集合
				if (!StringUtils.hasText(optionType[j])) {
					continue;
				}
				if (list.contains(optionType[j])) {
					answerList.add(optionType[j]);
				}

			}
			// 判断 通过 题目id 获取的optionList里面有木有值,如果有值就判断做了这个题,没有值,就判断没做这个题

			if (answerList.size() < 1) {
				continue;
			}
			// 进行 页面选项与正确答案是否是相同的
			// 接收正确答案, question 前面定义的option 表中所有的正确答案
			String quAnswer = question.getTestRightOptions();
			// 1. 单选,2.多选,3.判断
			if ("1".equals(question.getTestFlag()) || "3".equals(question.getTestFlag())) {
				System.out.println("题目Id:" + question.getTestId());
				System.out.println("用户选择Id:" + answerList.get(0));
				// 接收 用户输入的选项的id optionId
				String optionId = answerList.get(0);
				// 通过optionid 获得所有的信息
				TestOption option = disposeService.getOption(optionId);
				System.out.println(quAnswer + "===" + option.getOptionType());
				if (quAnswer.equals(option.getOptionType())) {
					System.out.println("对了一个");
					sum = sum + 1;
					System.out.println("对了一个" + sum);
				}
			}
			// 多选
			if ("2".equals(question.getTestFlag())) {
				// 对正确答案进行切割
					String[] quAnswers = quAnswer.split(",");

					// 第一个是用错误来判断,计算分数。
					int errorNum = 0;
					for (String answer : answerList) {
						TestOption option = disposeService.getOption(answer);
						if (quAnswer.lastIndexOf(option.getOptionType()) == -1) {
							errorNum++;
						}
					}
					System.out.println("错了:" + errorNum + "个");
					if (errorNum > 0) {
						continue;
					} else {
						System.err.println("sum====;" + sum);
						if (quAnswers.length == answerList.size()) {
							System.err.println("sum;" + sum);
							sum = sum + 2;
						}
					}
				}	
			}
		System.err.println("得分" + sum);
		request.setAttribute("sum", sum);
		DecimalFormat df = new DecimalFormat("#.0");
		return df.format(sum);
	}

 

posted @ 2019-11-01 08:04  腊月出去玩  阅读(465)  评论(0编辑  收藏  举报