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 zxiao@stu.ouc.edu.cn 类说明
*/
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 zxiao@stu.ouc.edu.cn
* 类说明
*/
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 zxiao@stu.ouc.edu.cn 类说明
*/
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 zxiao@stu.ouc.edu.cn 类说明
*/
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>