An adaptive quiz and learning system built entirely in Java that personalizes learning experiences through intelligent question selection and comprehensive progress tracking. The system dynamically adjusts difficulty levels based on user performance, demonstrating professional object-oriented programming principles.🌟 FeaturesCore Functionality
Adaptive Learning Engine: Questions dynamically adjust from easy → moderate → hard based on real-time performance Multiple Question Types: Support for Multiple Choice Questions (MCQ) and Short Answer formats User Management: Complete registration system with personalized profiles and statistics Topic-Based Learning: Organized content across multiple subjects (Math, Science, History, Programming) Performance Analytics: Detailed insights into learning progress, weak areas, and improvement trends Persistent Storage: File-based data persistence to save user progress and session history Advanced Features (Optional)
Spaced Repetition: Review questions at optimal intervals using the SM-2 algorithm Leaderboard System: Track rankings and compare performance across users GUI Interface: Swing-based graphical interface for enhanced user experience Multiple Difficulty Strategies: Choose between Basic, Aggressive, or Conservative progression models.
com.adaptivetutor/ ├── models/ # Core domain entities │ ├── Question.java # Abstract base class │ ├── MCQQuestion.java │ ├── ShortAnswerQuestion.java │ ├── User.java │ └── QuizSession.java ├── services/ # Business logic │ ├── AnalyticsService.java │ └── QuestionSelector.java ├── strategies/ # Strategy pattern implementations │ ├── DifficultyStrategy.java │ ├── BasicAdaptiveStrategy.java │ ├── AggressiveStrategy.java │ └── ConservativeStrategy.java ├── storage/ # Data persistence │ ├── StorageManager.java │ └── QuestionBank.java ├── ui/ # User interfaces │ └── AdaptiveTutorCLI.java └── main/ └── Main.java 🚀 Getting Started
Java Development Kit (JDK) 17 or higher Any Java IDE (IntelliJ IDEA, Eclipse, VS Code) or command line
Installation
- Clone the repository
bashgit clone https://github.com/yourusername/adaptive-tutor.git cd adaptive-tutor
- Compile the project
bash# Using javac directly javac -d bin -sourcepath src/main/java src/main/java/com/adaptivetutor/main/Main.java Or using your IDE's build system
java -cp bin com.adaptivetutor.main.Main
## 📖 Usage Guide
### Command Line Interface
**Main Menu:**
- Register New User
- Login
- Start Quiz
- View Performance Analytics
- Exit =================================
### Example Workflow
1. **Register a new user**
Enter username: john_doe Enter email: john@example.com Select topics of interest: PROGRAMMING, MATH
2. **Start a quiz session**
Select topic: PROGRAMMING Select difficulty strategy:
- Basic Adaptive
- Aggressive
- Conservative
3. **Answer questions**
Question 1 [EASY]: What is the output of System.out.println(5 + 3)?
A) 53 B) 8 C) 35 D) Error
Your answer: B ✓ Correct! (+10 points)
4. **View results**
=== Session Complete === Questions Attempted: 10 Correct Answers: 8 Accuracy: 80% Total Score: 85/100 Difficulty Progression: EASY → MODERATE → HARD
User { userId: "USR001" username: "john_doe" email: "john@example.com" registeredTopics: [PROGRAMMING, MATH] totalScore: 450 profile: { questionsAttempted: 50 correctAnswers: 38 topicWiseScores: { PROGRAMMING: 85% MATH: 72% } } }
### Question Bank Format
QID001|MCQ|PROGRAMMING|EASY|What is a class in Java?|A template for objects|A function|A variable|A loop|A|10 QID002|SHORT|MATH|MODERATE|What is 15% of 200?|30|15
## 🔧 Configuration
### Adding Custom Questions
Edit `data/questions.txt`:
QuestionID|Type|Topic|Difficulty|Text|Answer/Options|Points
public class BasicAdaptiveStrategy implements DifficultyStrategy { @Override public DifficultyLevel selectNextDifficulty(double accuracy, int questionsAnswered) { if (accuracy > 0.75) return DifficultyLevel.HARD; if (accuracy > 0.60) return DifficultyLevel.MODERATE; return DifficultyLevel.EASY; } }
## 🎨 Class Diagram
┌─────────────────┐ │ Question │ (Abstract) ├─────────────────┤ │ - questionId │ │ - questionText │ │ - difficulty │ │ + checkAnswer() │ (Abstract) └────────┬────────┘ │ ┌────┴────┐ │ │ ┌───▼──────┐ ┌▼──────────────┐ │MCQQuestion│ │ShortAnswer │ │ │ │Question │ │- options │ │- correctAnswer│ └──────────┘ └───────────────┘
┌──────────────┐ ┌──────────────┐ │ User │◆────▶│ UserProfile │ ├──────────────┤ ├──────────────┤ │- userId │ │- statistics │ │- username │ │- topicScores │ └──────────────┘ └──────────────┘ │ │ creates ▼ ┌──────────────┐ ┌──────────────┐ │ QuizSession │◆────▶│ Question │ ├──────────────┤ └──────────────┘ │- questions │ * │- score │ └──────────────┘
Manual Testing Checklist
User registration with validation Login with existing credentials Quiz session with all question types Difficulty progression based on accuracy Data persistence across sessions Analytics calculation accuracy Error handling for invalid inputs
Running Tests bash# Compile test classes javac -cp .:junit-5.jar test/com/adaptivetutor/**/*.java
java -cp .:junit-5.jar org.junit.platform.console.ConsoleLauncher --scan-classpath
Core adaptive quiz engine File-based persistence Basic analytics Spaced repetition algorithm Database integration (SQLite/PostgreSQL) RESTful API backend Web-based frontend (React/Angular) Mobile application (Android/iOS) AI-powered question generation Multi-language support
Contributions are welcome! Please follow these steps:
Fork the repository Create a feature branch (git checkout -b feature/AmazingFeature) Commit your changes (git commit -m 'Add some AmazingFeature') Push to the branch (git push origin feature/AmazingFeature) Open a Pull Request
Coding Standards
Follow Java naming conventions Add JavaDoc comments for all public methods Maintain test coverage above 70% Use meaningful variable and method names
This project is licensed under the MIT License - see the LICENSE file for details.