Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

JAVA Quiz Taker and Creator Modes (Source Code Included in Comment Section) Questions and answers should be stored after exiting the program and loaded back

JAVA Quiz Taker and Creator Modes (Source Code Included in Comment Section)

Questions and answers should be stored after exiting the program and loaded back to the program the next time it runs. Review the test run result and see the validations that should be in place. All these validations should be in your code as well. Please implement EDIT functionality of the questions and XML or JSON files when you store the data, if possible.

Task questions are in bold.

  1. If user choses to enter quiz creation module:
    1. The applications will look for an existing file with quizzes. If it does not exist, program should create one. If it exists, open it but do not replace the content.
    2. Application then asks user 1) to add new question, 2) to delete existing question, 3) to list all available questions 4) to go to the main module selection menu.
  1. If user wants to add a new question:
  1. Prompt the following information.
  2. Question Code. This should be a non-empty unique value across all existing questions.
  3. Question text.
  4. Number of possible answers.
  5. Loop as many times as there should be answers and prompt to enter answer text.
  6. Correct answer.
  7. Save this information in the file.
  8. Once a new question entered show the manage questions menu.
  1. If user choses to enter quiz taking module:
  1. Load all the questions from the file.
  2. Show total number of questions available.

image text in transcribed

image text in transcribed

image text in transcribed

image text in transcribedimage text in transcribedimage text in transcribedimage text in transcribedimage text in transcribedimage text in transcribedimage text in transcribedimage text in transcribedimage text in transcribedimage text in transcribedimage text in transcribed

Source Code MainMenuCode public enum MainMenuCode QUESTION, QUIZ, EXIT MenuHandler import java.util.Scanner; public class MenuHandler private Scanner keyboard; private QuestionBank bank; private Quiz quiz private String userlnput; private int menuOption; public MenuHandler 0 canner(new Scanner(System.in)) setBank0: setQuizO: setS public static MenuHandler newMenuHandler 0 return new MenuHandlerO: private Scanner getScannerO return keyboard; private void setScanner(Scanner kb) ( keyboard-kb; private QuestionBank getBankO return bank; private void setBank(QuestionBank qb)[ bank qb; private void setBankO setBank( QuestionBank.newQuestionBank0): private String getUserlnput0 return userlnput; private void setMenuOption0 userInput getScannerO.nextLine): private int getMenuOption0 ( return menuOption private void setMenuOption(int option) [ menuOption- option; private Quiz getQuiz0 return quiz; private void setQuiz(Quiz q) quiz q private void setQuiz0 ( setQuiz (Quiz.newQuiz(getBankO)): public void runMainMenu 0 showMainMenu) setMenuOption0 while (validMenuValue(MainMenuCode.values0.length)) System.out.printf("You have selected option %s-96s ". getMenuOption0+1, MainMenuCode.valuesOlgetMenuOptionO]) if (getMenuOption0MainMenuCode.QUESTION.ordinal 0) runQuestionMenu O ) else if (getMenuOption0MainMenuCode.QUIZ.ordinal0) runQuizMenu 0: if (getMenuoption() != MainMenuCode.EXIT.ordinal()) { runMainMenu0 private void runQuestionMenu0 0 showQuestionMenu0; setMenuOption0 while (validMenuValue(QuestionMenuCode.valuesOlength)): System.out.printi("You have selected option %d-%s ". getMenuoption1, QuestionMenuCode.valuesO[getMenuOptionOD if (getMenuOptionQuestionMenuCodeADD.ordinal0) getBank0addQuestion0: ) else if (getMenuOptionOQuestionMenuCode.DELETE.ordinal0) getBank0.deleteQuestion0 ) else if (getMenuOptionO-QuestionMenuCode.PRINT.ordinal0) getBank0-printQuestions0 if (getMenuoption0 !QuestionMenuCode.EXIT.ordinal0) runQuestionMenuO: private void runQuizMenu0 System.outprintln System.outprintin Quiz menu") getQuiz0.runQuiz) private void showMainMenuO System.out println") System.outprintln("Main menu. Please enter; System.outprintln("1 Manage questions"); System.outprintln("2 Take a quiz"); private String getUserInputO return getScanner0.nextLineO public boolean secretWordEnteredO System.out.println("Welcome to the quiz master. System.outprintln("Please enter the secret code or enter-1 to exit: boolean result false boolean exit- false String userInput getUserInput0 exit- userinput.equals("-1 result-userinput.equals(getPassword0) while (!(exit II result)) System.out.println("Secret word is incorrect) System.out.println Please enter the secret code or enter -1 to exit: userInput exit -userInput.equals("-1) result- userInput.equals(getPassword0); if (result) ( getUserinput0 System.out.println("Secret word is correct" return result; QuestionMenuCode public enum QuestionMenuCode ADD, DELETE, PRINT, EXIT QuizManager public class QuizManager public static void main (Stringll args) ( if (PasswordHandler.newPasswordHandler0.secretWordEntered0) MenuHandler.newMenuHandlerO.runMainMenuO: System.outprintl System.exit (0); Question import java.utilArrayList; import java.util.TreeMap: public class Question private String code; private String text private int correctAnswerNumber; private ArrayList answerList, int can) f setCode(c); setText(t): setAnswers(answerList) setCorrectAnswerNumber(can); public static Question newQuestion(String c, String t, ArrayList getAnswers0 return answers; private void setAnswers(ArrayListcAnswer> answerList) answers answerList public String showQuestion0 String result- "Question "+getCode""+getTextO"n" result +"Possible answers:n for (Answer answer: getAnswersO) result answer; return result; public String toString 0 String resshoQuestion0 result "Correct answer is: "+getCorrectAnswerNumber0"n return result; public static boolean validCode (String value, TreeMap questionMap) boolean result true if (value.equals() System.out.printin Question code cannot be empty") result false if (result && questionMap.containsKey(value))( System.out.printf("Question with code %s already exists ", value); result false return result; public static boolean validCode ForDelete (String value, TreeMap String, Question> questionMap) boolean result true if (value.equals System.outprintlnC"Question code cannot be empty" result false; if (result&& IquestionMap.containsKey(value))( System.out.printi("Question with code %s does not exist ", value); result false return result; public static boolean validText (String value) ( boolean result true if (value.equals()) System.out.printin"Question text cannot be empty") result false return result; public static boolean validNumberOfQuestions (String value) boolean result isinteger(value) if (result)( int intValue Integer.parselnt (value); if (intValue 2) ( System.out.printin("Minimum number of allowed answers is 2"); result = false; else if (intValue> 5) System.out.println"Maximum number of allowed anwers is 5") result false return result; public static boolean validCorrectAnswer (String value, int numberOfQuestion) boolean result-isinteger(value) if (result) int intValue = Integer.parselnt(value); if (intValue numberofQuestion) ( System.out.printf("You have selected %d, which is invalid number "+ corresponding to a correct answer In",value); result false return result private static boolean isInteger(String s) boolean result false try result true catch (NumberFormatException ex) ( System.out.printi( "You have entered non-integer value %s ", s); return result; QuestionBank import java.util.Scanner import java.util.TreeMap: import java.utilArrayList; import java.util.Random; public class QuestionBank private Scanner keyboard; private TreeMap questionMap public QuestionBank O setScanner(new Scanner(System.in)): setQuestionMap0 public static QuestionBank newQuestionBank0 return new QuestionBank 0 public TreeMap getRandomQuestions (int numberOfQuestins) TreeMap result new TreeMap 0 int rand; Random random -new RandomO Question randomQuestion; int questionsAdded 0 while (questionsAdded getQuestionMap0 return questionMap private void setQuestionMap(TreeMap String, Question> qm) questionMap qm; loadQuestionMap0 private void setQuestionMap0 setQuestionMap(new TreeMap String, Question>0 private void loadQuestionMapo /o loading yet private String getUserlnputO return getScanner0.nextLineO: public void addQuestion0 ( //We are pretending to store the data here. This will change in phase 2 ArrayList answers-new ArrayList randomQuestions ArrayList quizRe sults- new ArrayList getQuestionBank0-getQuestionMap0.size) System.out.printf("Maximum number of allowed anwers is %d ", getQuestionBank0.getQuestionMap0.size0): result false return result; private boolean validAnswer (String value, int maxAvailableAnswers) boolean result-isInteger(value); if (result) ( int intValue Integer parselnt (value): if (intValue maxAvailableAnswers) System.out.printf"Maximum number of allowed anwers is %d ", maxAvailableAnswers) result false return result; Answer import java.util.Scanner; public class Answer private String code; private String text public Answer (String c, String t) setCode(c); setText(t) public static Answer newAnswer(String c, String t) public String getCode0 private void setCode(String c) return new Answer (c, t); return code code c private String getTextO return text public void setText(String at) text at; public static boolean validText (String value)( boolean result true if (value.equals( System.outprintln"Answer text cannot be empty) result false return result; public String toSingtmm return getCode0"." getTextO+"n QuizResultCalculator import java.util.ArrayList public class QuizResultCalculator private ArrayList quizResults; private int totalQuestions private int correctAnswers public QuizResultCalculator (ArrayList qr) setQuizResults(qr): calculateResults) public static QuizResultCalculator newQuiz ResultCalculator(ArrayList qr) return new QuizResultCalculator(qr); public void showResults0 System.out.printf("Total Questions: %d ".getTotalQuestions()); System.out.printf("correct answers: %d ", getCorrectAnswers()); System-out.printf("Incorrect answers: %d ", get IncorrectAnswers()) System.out.printi("96% of correct answers: %1%% ".get PercentCorrect()); System.out.printf("Your grade is %s ", getGrade()); private void calculateResults0 setTotalQuestions(getQuizResults0.size0) int correct 0 for (boolean answer: getQuizResults0) if (answer) correct ++ setCorrectAnswers(correct) public String getGrade0 String result if (getPercentCorrectO> 90) result "A" ) else if (getPercentCorrectO 80) result "B" ) else if (getPercentCorrect O 70) result-"C" result "F return result ) else public double getPercentCorrect0 return (double)getCorrectAnswers0"100.0/getTotalQuestionsO: public intgetIncorrectAnswersO return getTotalQuestionsO-getCorrectAnswersO: public int getCorrectAnswers0 return correctAnswers private void setCorrectAnswers(int ca) correctAnswers ca public int getTotalQuestions0 return totalQuestions; ivate void setTotalQuestions(int tq) totalQuestions tq pr private ArrayList getQuizResultsO return quiz Results; private void setQuiz Results(ArrayList qr) quizRe sults qr Source Code MainMenuCode public enum MainMenuCode QUESTION, QUIZ, EXIT MenuHandler import java.util.Scanner; public class MenuHandler private Scanner keyboard; private QuestionBank bank; private Quiz quiz private String userlnput; private int menuOption; public MenuHandler 0 canner(new Scanner(System.in)) setBank0: setQuizO: setS public static MenuHandler newMenuHandler 0 return new MenuHandlerO: private Scanner getScannerO return keyboard; private void setScanner(Scanner kb) ( keyboard-kb; private QuestionBank getBankO return bank; private void setBank(QuestionBank qb)[ bank qb; private void setBankO setBank( QuestionBank.newQuestionBank0): private String getUserlnput0 return userlnput; private void setMenuOption0 userInput getScannerO.nextLine): private int getMenuOption0 ( return menuOption private void setMenuOption(int option) [ menuOption- option; private Quiz getQuiz0 return quiz; private void setQuiz(Quiz q) quiz q private void setQuiz0 ( setQuiz (Quiz.newQuiz(getBankO)): public void runMainMenu 0 showMainMenu) setMenuOption0 while (validMenuValue(MainMenuCode.values0.length)) System.out.printf("You have selected option %s-96s ". getMenuOption0+1, MainMenuCode.valuesOlgetMenuOptionO]) if (getMenuOption0MainMenuCode.QUESTION.ordinal 0) runQuestionMenu O ) else if (getMenuOption0MainMenuCode.QUIZ.ordinal0) runQuizMenu 0: if (getMenuoption() != MainMenuCode.EXIT.ordinal()) { runMainMenu0 private void runQuestionMenu0 0 showQuestionMenu0; setMenuOption0 while (validMenuValue(QuestionMenuCode.valuesOlength)): System.out.printi("You have selected option %d-%s ". getMenuoption1, QuestionMenuCode.valuesO[getMenuOptionOD if (getMenuOptionQuestionMenuCodeADD.ordinal0) getBank0addQuestion0: ) else if (getMenuOptionOQuestionMenuCode.DELETE.ordinal0) getBank0.deleteQuestion0 ) else if (getMenuOptionO-QuestionMenuCode.PRINT.ordinal0) getBank0-printQuestions0 if (getMenuoption0 !QuestionMenuCode.EXIT.ordinal0) runQuestionMenuO: private void runQuizMenu0 System.outprintln System.outprintin Quiz menu") getQuiz0.runQuiz) private void showMainMenuO System.out println") System.outprintln("Main menu. Please enter; System.outprintln("1 Manage questions"); System.outprintln("2 Take a quiz"); private String getUserInputO return getScanner0.nextLineO public boolean secretWordEnteredO System.out.println("Welcome to the quiz master. System.outprintln("Please enter the secret code or enter-1 to exit: boolean result false boolean exit- false String userInput getUserInput0 exit- userinput.equals("-1 result-userinput.equals(getPassword0) while (!(exit II result)) System.out.println("Secret word is incorrect) System.out.println Please enter the secret code or enter -1 to exit: userInput exit -userInput.equals("-1) result- userInput.equals(getPassword0); if (result) ( getUserinput0 System.out.println("Secret word is correct" return result; QuestionMenuCode public enum QuestionMenuCode ADD, DELETE, PRINT, EXIT QuizManager public class QuizManager public static void main (Stringll args) ( if (PasswordHandler.newPasswordHandler0.secretWordEntered0) MenuHandler.newMenuHandlerO.runMainMenuO: System.outprintl System.exit (0); Question import java.utilArrayList; import java.util.TreeMap: public class Question private String code; private String text private int correctAnswerNumber; private ArrayList answerList, int can) f setCode(c); setText(t): setAnswers(answerList) setCorrectAnswerNumber(can); public static Question newQuestion(String c, String t, ArrayList getAnswers0 return answers; private void setAnswers(ArrayListcAnswer> answerList) answers answerList public String showQuestion0 String result- "Question "+getCode""+getTextO"n" result +"Possible answers:n for (Answer answer: getAnswersO) result answer; return result; public String toString 0 String resshoQuestion0 result "Correct answer is: "+getCorrectAnswerNumber0"n return result; public static boolean validCode (String value, TreeMap questionMap) boolean result true if (value.equals() System.out.printin Question code cannot be empty") result false if (result && questionMap.containsKey(value))( System.out.printf("Question with code %s already exists ", value); result false return result; public static boolean validCode ForDelete (String value, TreeMap String, Question> questionMap) boolean result true if (value.equals System.outprintlnC"Question code cannot be empty" result false; if (result&& IquestionMap.containsKey(value))( System.out.printi("Question with code %s does not exist ", value); result false return result; public static boolean validText (String value) ( boolean result true if (value.equals()) System.out.printin"Question text cannot be empty") result false return result; public static boolean validNumberOfQuestions (String value) boolean result isinteger(value) if (result)( int intValue Integer.parselnt (value); if (intValue 2) ( System.out.printin("Minimum number of allowed answers is 2"); result = false; else if (intValue> 5) System.out.println"Maximum number of allowed anwers is 5") result false return result; public static boolean validCorrectAnswer (String value, int numberOfQuestion) boolean result-isinteger(value) if (result) int intValue = Integer.parselnt(value); if (intValue numberofQuestion) ( System.out.printf("You have selected %d, which is invalid number "+ corresponding to a correct answer In",value); result false return result private static boolean isInteger(String s) boolean result false try result true catch (NumberFormatException ex) ( System.out.printi( "You have entered non-integer value %s ", s); return result; QuestionBank import java.util.Scanner import java.util.TreeMap: import java.utilArrayList; import java.util.Random; public class QuestionBank private Scanner keyboard; private TreeMap questionMap public QuestionBank O setScanner(new Scanner(System.in)): setQuestionMap0 public static QuestionBank newQuestionBank0 return new QuestionBank 0 public TreeMap getRandomQuestions (int numberOfQuestins) TreeMap result new TreeMap 0 int rand; Random random -new RandomO Question randomQuestion; int questionsAdded 0 while (questionsAdded getQuestionMap0 return questionMap private void setQuestionMap(TreeMap String, Question> qm) questionMap qm; loadQuestionMap0 private void setQuestionMap0 setQuestionMap(new TreeMap String, Question>0 private void loadQuestionMapo /o loading yet private String getUserlnputO return getScanner0.nextLineO: public void addQuestion0 ( //We are pretending to store the data here. This will change in phase 2 ArrayList answers-new ArrayList randomQuestions ArrayList quizRe sults- new ArrayList getQuestionBank0-getQuestionMap0.size) System.out.printf("Maximum number of allowed anwers is %d ", getQuestionBank0.getQuestionMap0.size0): result false return result; private boolean validAnswer (String value, int maxAvailableAnswers) boolean result-isInteger(value); if (result) ( int intValue Integer parselnt (value): if (intValue maxAvailableAnswers) System.out.printf"Maximum number of allowed anwers is %d ", maxAvailableAnswers) result false return result; Answer import java.util.Scanner; public class Answer private String code; private String text public Answer (String c, String t) setCode(c); setText(t) public static Answer newAnswer(String c, String t) public String getCode0 private void setCode(String c) return new Answer (c, t); return code code c private String getTextO return text public void setText(String at) text at; public static boolean validText (String value)( boolean result true if (value.equals( System.outprintln"Answer text cannot be empty) result false return result; public String toSingtmm return getCode0"." getTextO+"n QuizResultCalculator import java.util.ArrayList public class QuizResultCalculator private ArrayList quizResults; private int totalQuestions private int correctAnswers public QuizResultCalculator (ArrayList qr) setQuizResults(qr): calculateResults) public static QuizResultCalculator newQuiz ResultCalculator(ArrayList qr) return new QuizResultCalculator(qr); public void showResults0 System.out.printf("Total Questions: %d ".getTotalQuestions()); System.out.printf("correct answers: %d ", getCorrectAnswers()); System-out.printf("Incorrect answers: %d ", get IncorrectAnswers()) System.out.printi("96% of correct answers: %1%% ".get PercentCorrect()); System.out.printf("Your grade is %s ", getGrade()); private void calculateResults0 setTotalQuestions(getQuizResults0.size0) int correct 0 for (boolean answer: getQuizResults0) if (answer) correct ++ setCorrectAnswers(correct) public String getGrade0 String result if (getPercentCorrectO> 90) result "A" ) else if (getPercentCorrectO 80) result "B" ) else if (getPercentCorrect O 70) result-"C" result "F return result ) else public double getPercentCorrect0 return (double)getCorrectAnswers0"100.0/getTotalQuestionsO: public intgetIncorrectAnswersO return getTotalQuestionsO-getCorrectAnswersO: public int getCorrectAnswers0 return correctAnswers private void setCorrectAnswers(int ca) correctAnswers ca public int getTotalQuestions0 return totalQuestions; ivate void setTotalQuestions(int tq) totalQuestions tq pr private ArrayList getQuizResultsO return quiz Results; private void setQuiz Results(ArrayList qr) quizRe sults qr

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access with AI-Powered Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Students also viewed these Databases questions