diff --git a/readme.md b/README.md similarity index 93% rename from readme.md rename to README.md index 94e78ab..5684efd 100644 --- a/readme.md +++ b/README.md @@ -111,7 +111,7 @@ INSERT INTO questions (question, option1, option2, option3, option4, correct_ans - Download the Platform Independent (ZIP) version - Extract the ZIP file - Add the `mysql-connector-j-*.jar` file to your project's classpath -3. Update database credentials in `DatabaseConnector.java`: +3. Update database credentials in `src.main.java.com.quiz.app.db.DatabaseConnector.java`: ```java private static final String URL = "jdbc:mysql://localhost:3306/quiz_app"; private static final String USER = "your_username"; @@ -126,7 +126,7 @@ private static final String PASSWORD = "your_password"; javac -cp ".;mysql-connector-j-*.jar" *.java # Run -java -cp ".;mysql-connector-j-*.jar" QuizApp +java -cp ".;mysql-connector-j-*.jar" src.main.java.com.quiz.app.QuizApp ``` #### Linux/Mac @@ -135,7 +135,7 @@ java -cp ".;mysql-connector-j-*.jar" QuizApp javac -cp ".:mysql-connector-j-*.jar" *.java # Run -java -cp ".:mysql-connector-j-*.jar" QuizApp +java -cp ".:mysql-connector-j-*.jar" src.main.java.com.quiz.app.QuizApp ``` #### Using an IDE (Recommended) @@ -189,7 +189,7 @@ dependencies { 4. **Database Connection** - Verify MySQL server is running - - Check database credentials in `DatabaseConnector.java` + - Check database credentials in `src.main.java.com.quiz.app.db.DatabaseConnector.java` - Ensure database and tables are created #### Quick Start (Windows) @@ -200,7 +200,7 @@ dependencies { javac -cp ".;mysql-connector-j-*.jar" *.java # 4. Run -java -cp ".;mysql-connector-j-*.jar" QuizApp +java -cp ".;mysql-connector-j-*.jar" src.main.java.com.quiz.app.QuizApp ``` #### Quick Start (Linux/Mac) @@ -211,7 +211,7 @@ java -cp ".;mysql-connector-j-*.jar" QuizApp javac -cp ".:mysql-connector-j-*.jar" *.java # 4. Run -java -cp ".:mysql-connector-j-*.jar" QuizApp +java -cp ".:mysql-connector-j-*.jar" src.main.java.com.quiz.app.QuizApp ``` Note: Replace `mysql-connector-j-*.jar` with the actual filename of your downloaded connector (e.g., `mysql-connector-j-8.0.33.jar`). @@ -229,9 +229,9 @@ Note: Replace `mysql-connector-j-*.jar` with the actual filename of your downloa ## 🔧 Configuration The application can be configured through: -- `DatabaseConnector.java`: Database settings -- `QuizGUI.java`: UI customization -- `Question.java`: Question structure +- `src.main.java.com.quiz.app.db.DatabaseConnector.java`: Database settings +- `src.main.java.com.quiz.app.QuizGUI.java`: UI customization +- `src.main.java.com.quiz.app.entity.Question.java`: src.main.java.com.quiz.app.entity.Question structure ## 🎯 Game Modes diff --git a/QuizApp.java b/src/main/java/com/quiz/app/QuizApp.java similarity index 58% rename from QuizApp.java rename to src/main/java/com/quiz/app/QuizApp.java index 43cc7e3..c26cbde 100644 --- a/QuizApp.java +++ b/src/main/java/com/quiz/app/QuizApp.java @@ -1,18 +1,17 @@ +package src.main.java.com.quiz.app; + +import src.main.java.com.quiz.app.db.DatabaseConnector; + import javax.swing.*; -import java.awt.*; -import java.awt.event.*; -import java.sql.*; -import java.util.List; -import java.util.ArrayList; import javax.swing.UIManager; public class QuizApp extends JFrame { - // This class is now just a launcher for QuizGUI - // All GUI logic is handled in QuizGUI + // This class is now just a launcher for src.main.java.com.quiz.app.QuizGUI + // All GUI logic is handled in src.main.java.com.quiz.app.QuizGUI public QuizApp() { - // This class is now just a launcher for QuizGUI - // All GUI logic is handled in QuizGUI + // This class is now just a launcher for src.main.java.com.quiz.app.QuizGUI + // All GUI logic is handled in src.main.java.com.quiz.app.QuizGUI } private void cleanup() { diff --git a/QuizGUI.java b/src/main/java/com/quiz/app/QuizGUI.java similarity index 98% rename from QuizGUI.java rename to src/main/java/com/quiz/app/QuizGUI.java index e9b6e9d..60b45a7 100644 --- a/QuizGUI.java +++ b/src/main/java/com/quiz/app/QuizGUI.java @@ -1,12 +1,15 @@ +package src.main.java.com.quiz.app; + +import src.main.java.com.quiz.app.db.DatabaseConnector; +import src.main.java.com.quiz.app.entity.Question; + import javax.swing.*; -import javax.swing.border.*; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.Timer; import java.util.List; import java.awt.Toolkit; -import java.util.stream.Collectors; import java.util.HashMap; import java.util.Map; import java.util.ArrayList; @@ -691,7 +694,7 @@ private void displayQuestion() { } progressBar.setValue((currentQuestionIndex * 100) / questions.size()); - progressBar.setString(String.format("Question %d of %d", currentQuestionIndex + 1, questions.size())); + progressBar.setString(String.format("src.main.java.com.quiz.app.entity.Question %d of %d", currentQuestionIndex + 1, questions.size())); animationProgress = 0f; animationTimer.start(); @@ -889,8 +892,8 @@ private void showReview() { BorderFactory.createEmptyBorder(20, 20, 20, 20) )); - // Question number and text - JLabel questionNumber = new JLabel("Question " + (answeredQuestions.indexOf(question) + 1)); + // src.main.java.com.quiz.app.entity.Question number and text + JLabel questionNumber = new JLabel("src.main.java.com.quiz.app.entity.Question " + (answeredQuestions.indexOf(question) + 1)); questionNumber.setFont(new Font("SF Pro Display", Font.BOLD, 16)); questionNumber.setForeground(accentColor); questionNumber.setAlignmentX(Component.LEFT_ALIGNMENT); diff --git a/DatabaseConnector.java b/src/main/java/com/quiz/app/db/DatabaseConnector.java similarity index 96% rename from DatabaseConnector.java rename to src/main/java/com/quiz/app/db/DatabaseConnector.java index fdb7968..b3eab4e 100644 --- a/DatabaseConnector.java +++ b/src/main/java/com/quiz/app/db/DatabaseConnector.java @@ -1,8 +1,11 @@ +package src.main.java.com.quiz.app.db; + +import src.main.java.com.quiz.app.entity.Question; + import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; -import java.util.logging.Level; public class DatabaseConnector { private static final Logger LOGGER = Logger.getLogger(DatabaseConnector.class.getName()); @@ -80,7 +83,7 @@ public static List getQuestions(int limit) throws SQLException { // Validate input if (limit <= 0) { - throw new IllegalArgumentException("Question limit must be positive, got: " + limit); + throw new IllegalArgumentException("src.main.java.com.quiz.app.entity.Question limit must be positive, got: " + limit); } String query = "SELECT id, question, option1, option2, option3, option4, correct_answer " + @@ -134,7 +137,7 @@ public static List getQuestions(int limit) throws SQLException { } /** - * Creates Question object from ResultSet with validation + * Creates src.main.java.com.quiz.app.entity.Question object from ResultSet with validation */ private static Question createQuestionFromResultSet(ResultSet rs) throws SQLException { int id = rs.getInt("id"); @@ -143,7 +146,7 @@ private static Question createQuestionFromResultSet(ResultSet rs) throws SQLExce // Validate required fields if (questionText == null || questionText.trim().isEmpty()) { - throw new SQLException("Question text is null or empty for ID: " + id); + throw new SQLException("src.main.java.com.quiz.app.entity.Question text is null or empty for ID: " + id); } if (correctAnswer == null || correctAnswer.trim().isEmpty()) { diff --git a/Question.java b/src/main/java/com/quiz/app/entity/Question.java similarity index 96% rename from Question.java rename to src/main/java/com/quiz/app/entity/Question.java index 5375f42..1c6384b 100644 --- a/Question.java +++ b/src/main/java/com/quiz/app/entity/Question.java @@ -1,3 +1,5 @@ +package src.main.java.com.quiz.app.entity; + public class Question { private String questionText; private String[] options;