A console-based College Student Management System built in Java demonstrating core Object-Oriented Programming concepts: Abstraction, Encapsulation, Inheritance, and Polymorphism.
| Concept | Where |
|---|---|
| Abstraction | Person abstract class + Repository<T,ID> interface |
| Encapsulation | Private fields with getters/setters across all model classes |
| Inheritance | Student and Faculty extend Person |
| Polymorphism | getRole() overridden in Student and Faculty; Grade.fromScore() logic |
| Generics | Repository<T, ID> — one interface, three implementations |
| Custom Exceptions | StudentNotFoundException, DuplicateEntryException, InvalidDataException |
| Enums | Grade with associated grade points |
src/
├── main/java/sms/
│ ├── Main.java ← entry point
│ ├── model/
│ │ ├── Person.java ← abstract base class
│ │ ├── Student.java ← extends Person
│ │ ├── Faculty.java ← extends Person
│ │ ├── Subject.java
│ │ ├── Result.java
│ │ └── Grade.java ← enum with grade points
│ ├── repository/
│ │ ├── Repository.java ← generic CRUD interface
│ │ ├── StudentRepository.java
│ │ ├── FacultyRepository.java
│ │ └── SubjectRepository.java
│ ├── service/
│ │ ├── StudentService.java
│ │ ├── FacultyService.java
│ │ ├── SubjectService.java
│ │ └── ReportService.java
│ ├── exception/
│ │ ├── StudentNotFoundException.java
│ │ ├── FacultyNotFoundException.java
│ │ ├── DuplicateEntryException.java
│ │ └── InvalidDataException.java
│ ├── util/
│ │ ├── Validator.java
│ │ ├── IDGenerator.java
│ │ └── TablePrinter.java
│ └── ui/
│ └── ConsoleMenu.java
└── test/java/sms/
├── StudentServiceTest.java
└── GradeTest.java
- Enroll, update, and delete students
- Add faculty and assign subjects to them
- Record marks and auto-compute grades + CGPA (credit-weighted)
- Track attendance percentage
- Generate academic reports, merit lists, and attendance defaulter lists
- Input validation with descriptive error messages
- Java 17+
- Maven 3.8+
# Compile and run tests
mvn clean test
# Package
mvn clean package
# Run the application
java -jar target/sms.jarfind src/main/java -name "*.java" > sources.txt
javac -d out @sources.txt
java -cp out sms.Main- Add subjects (Subject Management → Add Subject)
- Enroll students (Student Management → Enroll)
- Add marks for enrolled students using subject codes
- Generate reports (Reports → Student academic report / Merit list)
- Java 17
- Maven (build + dependency management)
- JUnit 5 (unit tests)
- No external frameworks — pure Java OOP