LearnTrack is a console-based Java application built to practice Core Java fundamentals including:
- Object-Oriented Programming (OOP)
- Inheritance & Polymorphism
- Encapsulation
- Collections (ArrayList)
- Exception Handling
- Menu-driven console design
The system allows administrators to manage Students, Courses, and Enrollments in memory.
This project was built as part of a Core Java assignment to demonstrate understanding of:
- Java syntax & compilation
- Package structure
- Static vs instance members
- Custom exceptions
- Clean separation of concerns (Entity → Service → UI)
All data is stored in-memory using ArrayList.
- Add student
- View all students
- Search student by ID
- Deactivate student (soft delete)
- Add course
- View all courses
- Activate / Deactivate course
- Enroll student in course
- View enrollments of a student
- Update enrollment status (COMPLETED / CANCELLED)
src/ │ ├── entity → Student, Course, Enrollment, Person ├── services → Business logic layer ├── enums → EnrollmentStatus ├── exception → Custom exceptions ├── util → IdGenerator, InputValidator ├── ui → Menu printing └── Main.java → Application entry point
docs/ │ ├── JVM_Basics.md ├── Setup_Instructions.md └── Design_Notes.md
Person (abstract)
↑
Student
StudentService → manages Student CourseService → manages Course EnrollmentService → manages Enrollment
Enrollment
studentId
courseId
enrollmentDate
status
- Java 17
- Core Java (OOP, Collections, Exception Handling)
From project root:
javac -d out $(find src -name "*.java")java -cp out MainEncapsulation using private fields with getters/setters
Inheritance: Student extends Person
Polymorphism via method overriding (getDisplayName)
Static utility class (IdGenerator) for unique ID generation
Dependency Injection in EnrollmentService
Graceful exception handling in menu loop
Centralized input validation via InputValidator
Additional documentation is available inside the docs/ folder:
JVM Basics
Setup Instructions
Design Notes