package quiz.application; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Quiz extends JFrame implements ActionListener { String questions[][] = new String[10][5]; String answers[][] = new String[10][2]; String useranswers[][] = new String[10][1]; JLabel qno, question; JRadioButton opt1, opt2, opt3, opt4; ButtonGroup groupoptions; JButton next, submit, lifeline; public static int timer = 15; public static int ans_given = 0; public static int count = 0; public static int score = 0; //database variables Connection connection; ResultSet resultSetQuestions; ResultSet resultSetOptions; ResultSet resultSetSolutions; String name; Quiz(String name) { try { connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/quiz_application", "root", "root"); retrieveDataFromDatabase(); // Call a method to fetch questions from the database } catch (SQLException e) { e.printStackTrace(); } this.name = name; setBounds(50, 0, 1440, 850); getContentPane().setBackground(Color.WHITE); setLayout(null); ImageIcon i1 = new ImageIcon(ClassLoader.getSystemResource("icons/quiz.jpg")); JLabel image = new JLabel(i1); image.setBounds(0, 0, 1440, 392); add(image); qno = new JLabel(); qno.setBounds(100, 450, 50, 30); qno.setFont(new Font("Tahoma", Font.PLAIN, 24)); add(qno); question = new JLabel(); question.setBounds(150, 450, 900, 30); question.setFont(new Font("Tahoma", Font.PLAIN, 24)); add(question); opt1 = new JRadioButton(); opt1.setBounds(170, 520, 700, 30); opt1.setBackground(Color.WHITE); opt1.setFont(new Font("Dialog", Font.PLAIN, 20)); add(opt1); opt2 = new JRadioButton(); opt2.setBounds(170, 560, 700, 30); opt2.setBackground(Color.WHITE); opt2.setFont(new Font("Dialog", Font.PLAIN, 20)); add(opt2); opt3 = new JRadioButton(); opt3.setBounds(170, 600, 700, 30); opt3.setBackground(Color.WHITE); opt3.setFont(new Font("Dialog", Font.PLAIN, 20)); add(opt3); opt4 = new JRadioButton(); opt4.setBounds(170, 640, 700, 30); opt4.setBackground(Color.WHITE); opt4.setFont(new Font("Dialog", Font.PLAIN, 20)); add(opt4); groupoptions = new ButtonGroup(); groupoptions.add(opt1); groupoptions.add(opt2); groupoptions.add(opt3); groupoptions.add(opt4); next = new JButton("Next"); next.setBounds(1100, 550, 200, 40); next.setFont(new Font("Tahoma", Font.PLAIN, 22)); next.setBackground(new Color(30, 144, 255)); next.setForeground(Color.WHITE); next.addActionListener(this); add(next); lifeline = new JButton("50-50 Lifeline"); lifeline.setBounds(1100, 630, 200, 40); lifeline.setFont(new Font("Tahoma", Font.PLAIN, 22)); lifeline.setBackground(new Color(30, 144, 255)); lifeline.setForeground(Color.WHITE); lifeline.addActionListener(this); add(lifeline); submit = new JButton("Submit"); submit.setBounds(1100, 710, 200, 40); submit.setFont(new Font("Tahoma", Font.PLAIN, 22)); submit.setBackground(new Color(30, 144, 255)); submit.setForeground(Color.WHITE); submit.addActionListener(this); submit.setEnabled(false); add(submit); start(count); setVisible(true); } private void retrieveDataFromDatabase() { try { String questionsSql = "SELECT * FROM quiz_questions"; PreparedStatement questionsStatement = connection.prepareStatement(questionsSql); resultSetQuestions = questionsStatement.executeQuery(); System.out.println(resultSetOptions); int i = 0; while (resultSetQuestions.next() && i < 10) { questions[i][0] = resultSetQuestions.getString("question_text"); // Populate other columns as needed // Retrieve choices and solutions based on question IDs int questionId = resultSetQuestions.getInt("question_id"); retrieveOptionsForQuestion(questionId, i); retrieveSolutionForQuestion(questionId, i); i++; } } catch (SQLException e) { e.printStackTrace(); } } private void retrieveOptionsForQuestion(int questionId, int i) { try{ String choicesSql = "SELECT * FROM quiz_choices where question_id = " + questionId; PreparedStatement choicesStatement = connection.prepareStatement(choicesSql); resultSetOptions = choicesStatement.executeQuery(); // System.out.println(resultSetOptions); // Implement code to retrieve choices from the database based on question ID and populate choices array int j=1; while ( resultSetOptions.next() && j < 5) { questions[i][j] = resultSetOptions.getString("choice_text"); // System.out.println(questionId[i][j]); j++; } }catch(SQLException e) { e.printStackTrace(); } } private void retrieveSolutionForQuestion(int questionId, int i) { // Implement code to retrieve solutions from the database based on question ID and populate answers array try{ String solutionsSql = "SELECT * FROM quiz_answers where question_id = " + questionId; PreparedStatement solutionsStatement = connection.prepareStatement(solutionsSql); resultSetSolutions = solutionsStatement.executeQuery(); // System.out.println(resultSetOptions); // Implement code to retrieve choices from the database based on question ID and populate choices array int j=1; while ( resultSetSolutions.next() && j < 2) { answers[i][j] = resultSetSolutions.getString("answer_text"); // System.out.println(questionId[i][j]); j++; } }catch(SQLException e) { e.printStackTrace(); } } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == next) { repaint(); opt1.setEnabled(true); opt2.setEnabled(true); opt3.setEnabled(true); opt4.setEnabled(true); ans_given = 1; if (groupoptions.getSelection() == null) { useranswers[count][0] = ""; } else { useranswers[count][0] = groupoptions.getSelection().getActionCommand(); } if (count == 8) { next.setEnabled(false); submit.setEnabled(true); } count++; start(count); } else if (ae.getSource() == lifeline) { if (count == 2 || count == 4 || count == 6 || count == 8 || count == 9) { opt2.setEnabled(false); opt3.setEnabled(false); } else { opt1.setEnabled(false); opt4.setEnabled(false); } lifeline.setEnabled(false); } else if (ae.getSource() == submit) { ans_given = 1; if (groupoptions.getSelection() == null) { useranswers[count][0] = ""; } else { useranswers[count][0] = groupoptions.getSelection().getActionCommand(); } for (int i = 0; i < useranswers.length; i++) { if (useranswers[i][0].equals(answers[i][1])) { score += 10; } else { score += 0; } } setVisible(false); new Score(name, score); } } public void paint(Graphics g) { super.paint(g); String time = "Time left - " + timer + " seconds"; // 15 g.setColor(Color.RED); g.setFont(new Font("Tahoma", Font.BOLD, 25)); if (timer > 0) { g.drawString(time, 1100, 500); } else { g.drawString("Times up!!", 1100, 500); } timer--; // 14 try { Thread.sleep(1000); repaint(); } catch (Exception e) { e.printStackTrace(); } if (ans_given == 1) { ans_given = 0; timer = 15; } else if (timer < 0) { timer = 15; opt1.setEnabled(true); opt2.setEnabled(true); opt3.setEnabled(true); opt4.setEnabled(true); if (count == 8) { next.setEnabled(false); submit.setEnabled(true); } if (count == 9) { // submit button if (groupoptions.getSelection() == null) { useranswers[count][0] = ""; } else { useranswers[count][0] = groupoptions.getSelection().getActionCommand(); } for (int i = 0; i < useranswers.length; i++) { if (useranswers[i][0].equals(answers[i][1])) { score += 10; } else { score += 0; } } setVisible(false); new Score(name, score); } else { // next button if (groupoptions.getSelection() == null) { useranswers[count][0] = ""; } else { useranswers[count][0] = groupoptions.getSelection().getActionCommand(); } count++; // 0 // 1 start(count); } } } public void start(int count) { qno.setText("" + (count + 1) + ". "); question.setText(questions[count][0]); opt1.setText(questions[count][1]); opt1.setActionCommand(questions[count][1]); opt2.setText(questions[count][2]); opt2.setActionCommand(questions[count][2]); opt3.setText(questions[count][3]); opt3.setActionCommand(questions[count][3]); opt4.setText(questions[count][4]); opt4.setActionCommand(questions[count][4]); groupoptions.clearSelection(); } public static void main(String[] args) { new Quiz("User"); } }