Write a program that administers and grades quizzes


Write a program that administers and grades quizzes. A quiz consists of questions. There are four types of questions: text questions, number questions, choice questions with a single answer, and choice questions with multiple answers. When grading a text question, ignore leading or trailing spaces and letter case. When grading a numeric question, accept a response that is approximately the same as the answer.
A quiz is specified in a text file. Each question starts with a letter indicating the question type (T, N, S, M), followed by a line containing the question text. The next line of a non-choice question contains the answer. Choice questions have a list of choices that is terminated by a blank line. Each choice starts with + (correct) or - (incorrect).
Here is a sample file:
T Which Java keyword is used to define a subclass?
extends
S What is the original name of the Java language?
- *7
- C--
+ Oak
- Gosling
M Which of the following types are supertypes of Rectangle?
- PrintStream
+ Shape
+ RectangularShape
+ Object
- String
N What is the square root of 2?
1.41421356
Your program should read in a quiz file, prompt the user for responses to all questions, and grade the responses. Follow the design process that was described in this chapter.
Here is a sample program run:
T Which Java keyword is used to define a subclass?
input: sub
S What is the original name of the Java language?
A) *7
B) C--
C) Oak
D) Gosling
input: C
M Which of the following types are supertypes of Rectangle?
A) PrintStream
B) Shape
C) RectangularShape
D) Object
E) String
Select all that apply:
input: BCD
N What is the square root of 2?
input: 4
Which Java keyword is used to define a subclass?
Correct answer: extends
Your answer: sub
Your answer was not correct.
What is the original name of the Java language?
A) *7
B) C--
C) Oak
D) Gosling
Correct answer: C
Your answer: C
Your answer was correct.
Which of the following types are supertypes of Rectangle?
A) PrintStream
B) Shape
C) RectangularShape
D) Object
E) String
Correct answer: BCD
Your answer: BCD
Your answer was correct.
What is the square root of 2?
Correct answer: 1.41421356
Your answer: 4
Your answer was not correct.
Use the following class as your main class:
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class QuizRunner { public static void main(String[] args)
throws IOException { Quiz q = new Quiz();
Scanner in = new Scanner(new FileReader("quiz.txt"));
q.read(in);
in.close();
in = new Scanner(System.in);
ArrayList questions = q.getQuestions();
ArrayList answers = new ArrayList();
for (Question qu : questions)
{ System.out.println(qu.getText());
String answer = in.nextLine(); answers.add(answer); }
boolean[] results = q.checkAnswers(answers);
for (int i = 0; i < results.length; i++) { System.out.println() ; System.out. println(questions.get(i).getText());
System.out.println("Correct answer: " + questions.get(i).getAnswer()); System.out.println("Your answer: " + answers.get(i));
System.out.print("Your answer was ");
if (!results) { System.out.print("not "); }
System.out.println("correct.");
} } }
You need to take an OO approach to the code.
text to be read from file
T
Which Java keyword is used to define a subclass?
extends
S
What is the original name of the Java language?
- *7
- C--
+ Oak
- Gosling
M
Which of the following types are supertypes of Rectangle?
- PrintStream
+ Shape
+ RectangularShape
+ Object
- String
N
What is the square root of 2?
1.41421356