【讀取具有特定格式的文件】

Create a table named Quiz within a database called ExamDB. You should use the embedded Java DB mode to implement this database.

Data is stored in a text file in the following csv format (questionNumber, description, choice1, choice2, choice3, choice4, Answer). Create your own csv text file containing quiz questions. Read from this file and store the records in the Quiz table within the ExamDB database.

Give the user a simple MCQ test from your Quiz table with 3 questions each time (one at a time and different each time), and print how many they got right and wrong.

 

Quiz.java

package com.zx.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.zx.bean.Quiz;
import com.zx.dao.QuizMapper;

/**
 * @author 作者
 * @version 創建時間:2019年10月28日 下午6:52:29
 * @email [email protected] 類說明
 */
public class MyUtil {
	// @Test
	public List<String> readFile() {
		List<String> list = new ArrayList<String>();
		File f = new File("csv/file.txt");
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(f));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		String line = null;
		try {
			while ((line = br.readLine()) != null) {
				list.add(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}

	public List<Quiz> analysisString(List<String> list) {
		int i = 0;
		List<Quiz> listQuiz = new ArrayList<>();
		Quiz q = new Quiz();
		while (i != list.size()) {// 遍歷所有行
			String str = list.get(i);
			if (str != null && str.charAt(0) >= 49 && str.charAt(0) <= 57) {// 判斷是否爲題幹
				q.setQuestionNumber(Integer.parseInt(str.substring(0, str.indexOf("."))));
				q.setDescription(str.substring(str.indexOf(".") + 1));
			} else {// 如果爲選項
				switch (str.charAt(0)) {
				case 'A':
					q.setChoice1(str.substring(str.indexOf(".") + 1));
					break;
				case 'B':
					q.setChoice2(str.substring(str.indexOf(".") + 1));
					break;
				case 'C':
					q.setChoice3(str.substring(str.indexOf(".") + 1));
					break;
				case 'D':
					q.setChoice4(str.substring(str.indexOf(".") + 1, str.length() - 2));
					q.setAnswer(str.charAt(str.length() - 1) + "");// 將答案賦值
					listQuiz.add(q);
					q = new Quiz();
					break;
				default:
					System.out.println("遇到空白行");
					break;
				}
			}
			i++;
		}
		return listQuiz;
	}

	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		return new SqlSessionFactoryBuilder().build(inputStream);
	}

	public void insertIntoDb() throws IOException {
		MyUtil mu = new MyUtil();
		List<String> readFile = mu.readFile();
		List<Quiz> listQuiz = mu.analysisString(readFile);
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			QuizMapper mapper = openSession.getMapper(QuizMapper.class);
			for (Quiz quiz : listQuiz) {
				mapper.addQuiz(quiz);
			}
			openSession.commit();
		} finally {
			openSession.close();
		}
	}

	public List<Quiz> getExam() throws IOException {
		int arr[] = new int[3];
		List<Quiz> quiz = new ArrayList<>();
		arr = getRandomNotSame(3, 10);
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			QuizMapper mapper = openSession.getMapper(QuizMapper.class);
			for (int i = 0; i < 3; i++) {
				quiz.add(mapper.getQuizById(arr[i]));
			}

		} finally {
			openSession.close();
		}
		return quiz;
	}

	public void showView() throws IOException {
		List<Quiz> quiz = getExam();
		int right = 0;
		int wrong = 0;
		List<String> list = new ArrayList<>();
		for (int i = 0; i < 3; i++) {
			int myArr[] = new int[4];
			myArr = getRandomNotSame(4, 4);
			list.add(quiz.get(i).getChoice1());
			list.add(quiz.get(i).getChoice2());
			list.add(quiz.get(i).getChoice3());
			list.add(quiz.get(i).getChoice4());
			System.out.println(i + 1 + "." + quiz.get(i).getDescription());
			System.out.println("A." + list.get(myArr[0]));
			System.out.println("B." + list.get(myArr[1]));
			System.out.println("C." + list.get(myArr[2]));
			System.out.println("D." + list.get(myArr[3]));
			System.out.println("plz input your answer:");
			Scanner sc = new Scanner(System.in);
			String str = sc.nextLine();
			if (str.equals(quiz.get(i).getAnswer())) {
				right++;
			} else {
				wrong++;
			}
		}
		System.out.println("right:" + right);
		System.out.println("wrong:" + wrong);
	}

	public int[] getRandomNotSame(int num, int range) {
		int arr[] = new int[num];
		Random random = new Random();
		for (int i = 0; i < num; i++) {
			int j = 0;
			int rs = random.nextInt(range);
			while (j < i) {
				if (arr[j] == rs) {
					rs = random.nextInt(range);
					j = 0;
				} else {
					j++;
				}
			}
			arr[i] = rs;
		}
		return arr;
	}
}

QuizMapper.java

package com.zx.dao;

import com.zx.bean.Quiz;

/**
* @author 作者
* @version 創建時間:2019年10月28日 下午4:08:51
* @email [email protected]
* 類說明
*/
public interface QuizMapper {

	public void addQuiz(Quiz q);
	
	public Quiz getQuizById(Integer id);
	
	
}

Exam.java

package com.zx.main;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.zx.bean.Quiz;
import com.zx.dao.QuizMapper;
import com.zx.util.MyUtil;

/**
 * @author 作者
 * @version 創建時間:2019年10月28日 下午4:10:59
 * @email [email protected] 類說明
 */
public class Exam {

	public static void main(String[] args) throws IOException {
		MyUtil mu = new MyUtil();
		mu.insertIntoDb();
		mu.showView();
	}
}

MyUtil.java

package com.zx.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.zx.bean.Quiz;
import com.zx.dao.QuizMapper;

/**
 * @author 作者
 * @version 創建時間:2019年10月28日 下午6:52:29
 * @email [email protected] 類說明
 */
public class MyUtil {
	// @Test
	public List<String> readFile() {
		List<String> list = new ArrayList<String>();
		File f = new File("csv/file.txt");
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(f));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		String line = null;
		try {
			while ((line = br.readLine()) != null) {
				list.add(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}

	public List<Quiz> analysisString(List<String> list) {
		int i = 0;
		List<Quiz> listQuiz = new ArrayList<>();
		Quiz q = new Quiz();
		while (i != list.size()) {// 遍歷所有行
			String str = list.get(i);
			if (str != null && str.charAt(0) >= 49 && str.charAt(0) <= 57) {// 判斷是否爲題幹
				q.setQuestionNumber(Integer.parseInt(str.substring(0, str.indexOf("."))));
				q.setDescription(str.substring(str.indexOf(".") + 1));
			} else {// 如果爲選項
				switch (str.charAt(0)) {
				case 'A':
					q.setChoice1(str.substring(str.indexOf(".") + 1));
					break;
				case 'B':
					q.setChoice2(str.substring(str.indexOf(".") + 1));
					break;
				case 'C':
					q.setChoice3(str.substring(str.indexOf(".") + 1));
					break;
				case 'D':
					q.setChoice4(str.substring(str.indexOf(".") + 1, str.length() - 2));
					q.setAnswer(str.charAt(str.length() - 1) + "");// 將答案賦值
					listQuiz.add(q);
					q = new Quiz();
					break;
				default:
					System.out.println("遇到空白行");
					break;
				}
			}
			i++;
		}
		return listQuiz;
	}

	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		return new SqlSessionFactoryBuilder().build(inputStream);
	}

	public void insertIntoDb() throws IOException {
		MyUtil mu = new MyUtil();
		List<String> readFile = mu.readFile();
		List<Quiz> listQuiz = mu.analysisString(readFile);
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			QuizMapper mapper = openSession.getMapper(QuizMapper.class);
			for (Quiz quiz : listQuiz) {
				mapper.addQuiz(quiz);
			}
			openSession.commit();
		} finally {
			openSession.close();
		}
	}

	public List<Quiz> getExam() throws IOException {
		int arr[] = new int[3];
		List<Quiz> quiz = new ArrayList<>();
		arr = getRandomNotSame(3, 10);
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			QuizMapper mapper = openSession.getMapper(QuizMapper.class);
			for (int i = 0; i < 3; i++) {
				quiz.add(mapper.getQuizById(arr[i]));
			}

		} finally {
			openSession.close();
		}
		return quiz;
	}

	public void showView() throws IOException {
		List<Quiz> quiz = getExam();
		int right = 0;
		int wrong = 0;
		List<String> list = new ArrayList<>();
		for (int i = 0; i < 3; i++) {
			int myArr[] = new int[4];
			myArr = getRandomNotSame(4, 4);
			list.add(quiz.get(i).getChoice1());
			list.add(quiz.get(i).getChoice2());
			list.add(quiz.get(i).getChoice3());
			list.add(quiz.get(i).getChoice4());
			System.out.println(i + 1 + "." + quiz.get(i).getDescription());
			System.out.println("A." + list.get(myArr[0]));
			System.out.println("B." + list.get(myArr[1]));
			System.out.println("C." + list.get(myArr[2]));
			System.out.println("D." + list.get(myArr[3]));
			System.out.println("plz input your answer:");
			Scanner sc = new Scanner(System.in);
			String str = sc.nextLine();
			if (str.equals(quiz.get(i).getAnswer())) {
				right++;
			} else {
				wrong++;
			}
		}
		System.out.println("right:" + right);
		System.out.println("wrong:" + wrong);
	}

	public int[] getRandomNotSame(int num, int range) {
		int arr[] = new int[num];
		Random random = new Random();
		for (int i = 0; i < num; i++) {
			int j = 0;
			int rs = random.nextInt(range);
			while (j < i) {
				if (arr[j] == rs) {
					rs = random.nextInt(range);
					j = 0;
				} else {
					j++;
				}
			}
			arr[i] = rs;
		}
		return arr;
	}
}

QuizMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zx.dao.QuizMapper">
<!-- public void addQuiz(Quiz q);-->
	<insert id="addQuiz">
		insert into quiz(questionNumber,description,choice1,choice2,choice3,choice4,answer) 
		value (#{questionNumber},#{description},#{choice1},#{choice2},#{choice3},#{choice4},#{answer})
	</insert>
<!-- 	public Quiz getQuizById(Integer id);-->
	<select id="getQuizById" resultType="com.zx.bean.Quiz">
		select * from quiz where questionNumber = #{questionNumber}
	</select>
</mapper>

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章