Online Quiz System using Java With Source Code Graphical User Interface [GUI]

Online Quiz System

Introduction:

The online Quiz Program is a Java-based desktop application designed to test users knowledge through a multiple-choice quiz. Developed using Java AWT and Swing, this program provides a simple yet engaging experience for learners, making it ideal for students, educators, and self-learners looking to assess their knowledge. The program presents 10 multiple-choice questions (MCQs), each with four answer options. After completing the quiz, users receive a detailed performance report, showing their selected answers, correct answers, and total score.

The system provides a range of features, including:

  • Simple GUI Interface – Developed using Java AWT and Swing for an interactive experience.
  • Multiple-Choice Format – Includes 10 Java-related questions with four answer choices each.
  • Detailed Report – Displays user-selected answers, correct answers, and the final score.
  • Standalone Application – Runs independently without requiring an internet connection.
  • Efficient Data Handling – Uses arrays and HashMap for storing questions and answers.

Required Modules:

The required modules in the QuizProgram.java file are:

  • java.awt.*; – Provides classes for building graphical user interfaces (GUI) using AWT.
  • java.awt.event.*; – Handles user interactions such as button clicks and other events.
  • javax.swing.*; – Used for creating GUI components like buttons, labels, and frames.
  • java.util.*; – Provides utility classes such as HashMap for storing user responses.

How to Run the Code:

Step 1: Compile the Java Program

Run the following command to compile the Java file:

javac QuizProgram.java

If there are no errors, this will generate a QuizProgram.class file.

Step 2: Run the Program

Run the compiled Java program using:

java QuizProgram

Step 3: Interact with the Quiz

  • The quiz window will open.
  • Select answers using radio buttons.
  • Click “Next” to proceed.
  • After the last question, click “Show Results” to see your score.

Code Explanation :


1. Importing Necessary Libraries
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
  • java.awt.* and javax.swing.*: Used for creating the graphical user interface (GUI).
  • java.awt.event.*: Handles user interactions (like button clicks).
  • java.util.*: Manages data structures like HashMap.

2. Declaring the Quiz Class
class Quiz extends JFrame implements ActionListener {
  • This class extends JFrame, meaning it creates a GUI window.
  • It implements ActionListener, allowing it to handle button clicks.

3. Declaring UI Components
    JPanel panel;
    JRadioButton choice1, choice2, choice3, choice4;
    ButtonGroup bg;
    JLabel lblmess;
    JButton btnext;
  • JRadioButton: Represents multiple-choice options.
  • ButtonGroup: Ensures only one option is selected at a time.
  • JLabel: Displays the question.
  • JButton: The “Next” button to proceed to the next question.

4. Storing Questions and Answers
    String[][] qpa;  // Question-Option Array
    String[][] qca;  // Correct Answer Array
    int qaid;  // Question ID
    HashMap<Integer, String> map;  // Stores user-selected answers
  • qpa: Stores questions with multiple-choice options.
  • qca: Stores correct answers.
  • qaid: Tracks the current question.
  • map: Stores user-selected answers.

5. Initializing the Quiz
    Quiz() {
        initializedata();
        setTitle("Quiz Program");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLayout(new BorderLayout());
  • initializedata(): Loads questions and answers.
  • Sets up the window title, size, and layout.

6. Handling Button Clicks
    public void actionPerformed(ActionEvent e) {
        if (btnext.getText().equals("Next")) {
            if (qaid < qpa.length - 1) {
                qaid++;
                displayQuestion();
            } else {
                btnext.setText("Show Results");
            }
        } else if (btnext.getText().equals("Show Results")) {
            showResults();
        }
    }
  • When “Next” is clicked, it moves to the next question.
  • When all questions are answered, it shows results.

7. Displaying Results
    void showResults() {
        int correct = 0;
        for (int i = 0; i < qpa.length; i++) {
            if (map.get(i).equals(qca[i][1])) {
                correct++;
            }
        }
        JOptionPane.showMessageDialog(this, "Your Score: " + correct + "/" + qpa.length);
    }

Source Code:

				
					import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;


class Quiz extends JFrame implements ActionListener {
    JPanel panel;
    JRadioButton choice1;
    JRadioButton choice2;
    JRadioButton choice3;
    JRadioButton choice4;
    ButtonGroup bg;
    JLabel lblmess;
    JButton btnext;
    String[][] qpa;
    String[][] qca;
    int qaid;
    HashMap map;

    Quiz() {
        initializedata();
        setTitle("Quiz Program");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(430, 350);
        setLocation(300, 100);
        setResizable(false);
        Container cont = getContentPane();
        cont.setLayout(null);
        cont.setBackground(Color.GRAY);
        bg = new ButtonGroup();
        choice1 = new JRadioButton("Choice1", true);
        choice2 = new JRadioButton("Choice2", false);
        choice3 = new JRadioButton("Choice3", false);
        choice4 = new JRadioButton("Choice4", false);
        bg.add(choice1);
        bg.add(choice2);
        bg.add(choice3);
        bg.add(choice4);
        lblmess = new JLabel("Choose a correct answer");
        lblmess.setForeground(Color.BLUE);
        lblmess.setFont(new Font("Arial", Font.BOLD, 11));
        btnext = new JButton("Next");
        btnext.setForeground(Color.BLUE);
        btnext.addActionListener(this);
        panel = new JPanel();
        panel.setBackground(Color.LIGHT_GRAY);
        panel.setLocation(10, 10);
        panel.setSize(400, 300);
        panel.setLayout(new GridLayout(6, 2));
        panel.add(lblmess);
        panel.add(choice1);
        panel.add(choice2);
        panel.add(choice3);
        panel.add(choice4);
        panel.add(btnext);
        cont.add(panel);
        setVisible(true);
        qaid = 0;
        readqa(qaid);
    }

    public void actionPerformed(ActionEvent e) {
        if (btnext.getText().equals("Next")) {
            if (qaid &gt;2";
        qpa[6][1] = "1";
        qpa[6][2] = "0";
        qpa[6][3] = "3";
        qpa[6][4] = "-3";

        qpa[7][0] = "How to do exit a loop?";
        qpa[7][1] = "Using exit";
        qpa[7][2] = "Using break";
        qpa[7][3] = "Using continue";
        qpa[7][4] = "Using terminate";

        qpa[8][0] = "What is the correct way to allocate one-dimensional array?";
        qpa[8][1] = "int[size] arr=new int[]";
        qpa[8][2] = "int arr[size]=new int[]";
        qpa[8][3] = "int[size] arr=new int[size]";
        qpa[8][4] = "int[] arr=new int[size]";

        qpa[9][0] = "What is the correct way to allocate two-dimensional array?";
        qpa[9][1] = "int[size][] arr=new int[][]";
        qpa[9][2] = "int arr=new int[rows][cols]";
        qpa[9][3] = "int arr[rows][]=new int[rows][cols]";
        qpa[9][4] = "int[][] arr=new int[rows][cols]";


        //qca stores pairs of question and its correct answer
        qca = new String[10][2];

        qca[0][0] = "How to run Java program on the command prompt?";
        qca[0][1] = "java JavaProgram";

        qca[1][0] = "What is the use of the println method?";
        qca[1][1] = "It is used to print text on the screen with the line break.";

        qca[2][0] = "How to read a character from the keyboard?";
        qca[2][1] = "char c=(char)System.in.read()";

        qca[3][0] = "Which one would be an int";
        qca[3][1] = "2";

        qca[4][0] = "How do you declare an integer variable x?";
        qca[4][1] = "int x";

        qca[5][0] = "How do you convert a string of number to a number?";
        qca[5][1] = "int num=Integer.parseInt(str_num)";

        qca[6][0] = "What is the value of x? int x=3&gt;&gt;2";
        qca[6][1] = "0";

        qca[7][0] = "How to do exit a loop?";
        qca[7][1] = "Using break";

        qca[8][0] = "What is the correct way to allocate one-dimensional array?";
        qca[8][1] = "int[] arr=new int[size]";

        qca[9][0] = "What is the correct way to allocate two-dimensional array?";
        qca[9][1] = "int[][] arr=new int[rows][cols]";


        //create a map object to store pairs of question and selected answer
        map = new HashMap();
    }

    public String getSelection() {
        String selectedChoice = null;
        Enumeration buttons = bg.getElements();
        while (buttons.hasMoreElements()) {
            JRadioButton temp = (JRadioButton) buttons.nextElement();
            if (temp.isSelected()) {
                selectedChoice = temp.getText();
            }
        }
        return (selectedChoice);
    }

    public void readqa(int qid) {
        lblmess.setText("  " + qpa[qid][0]);
        choice1.setText(qpa[qid][1]);
        choice2.setText(qpa[qid][2]);
        choice3.setText(qpa[qid][3]);
        choice4.setText(qpa[qid][4]);
        choice1.setSelected(true);
    }

    public void reset() {
        qaid = 0;
        map.clear();
        readqa(qaid);
        btnext.setText("Next");
    }

    public int calCorrectAnswer() {
        int qnum = 10;
        int count = 0;
        for (int qid = 0; qid &lt; qnum; qid++) {
            if (qca[qid][1].equals(map.get(qid))) {
                count++;
            }
        }
        return count;
    }

    public class Report extends JFrame {
        Report() {
            setTitle(&quot;Answers&quot;);
            setSize(850, 550);
            setBackground(Color.WHITE);
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    dispose();
                    reset();
                }
            });
            Draw d = new Draw();
            add(d);
            setVisible(true);
        }

	    class Draw extends Canvas {
	        public void paint(Graphics g) {
	            int qnum = 10;
	            int x = 10;
	            int y = 20;
	            for (int i = 0; i  400) {
	                    y = 20;
	                    x = 450;
	                }
	            }
                //show number of correct answers
                int numc = calCorrectAnswer();
                g.setColor(Color.BLUE);
                g.setFont(new Font("Arial", Font.BOLD, 14));
                g.drawString("Number of correct answers:" + numc, 300, 500);
	        }
        }
    }
}


public class QuizProgram {
    public static void main(String args[]) {
		new Quiz();
	}
}

				
			

Output:

output