# Campus Course & Records Manager (CCRM)
A console-based Java SE application to manage students, courses, enrollments, grades, and file operations such as import/export and backup.
This project follows clean OOP design principles and package conventions for academic submission.
- Student Management
- Add / list students
- Import / export students from CSV
- Course Management
- Add / list courses
- Import / export courses from CSV
- Enrollment
- Enroll / unenroll students in courses
- Prevent duplicate enrollments
- Enforce maximum credit limit (30 credits)
- Grades
- Record / update grades (S, A, B, C, D, E, F)
- Transcripts
- Auto-calculate GPA
- Export transcript to a text file
- File Handling
- CSV import/export for students and courses
- Backup service to copy all data
CCRM-Java-Project/
├── README.md
├── .gitignore
├── test-data/
│ ├── students.csv
│ └── courses.csv
└── src/
└── edu/
└── ccrm/
├── cli/
│ └── Main.java
├── config/
│ └── AppConfig.java
├── domain/
│ ├── Course.java
│ ├── Enrollment.java
│ ├── Grade.java
│ ├── Instructor.java
│ ├── Person.java
│ ├── Semester.java
│ └── Student.java
├── exceptions/
│ ├── DuplicateEnrollmentException.java
│ ├── MaxCreditLimitExceededException.java
│ └── NotFoundException.java
├── io/
│ ├── BackupService.java
│ └── ImportExportService.java
├── service/
│ ├── CourseService.java
│ ├── InMemoryCourseService.java
│ ├── InMemoryStudentService.java
│ ├── StudentService.java
│ └── DataStore.java
└── util/
└── Validators.java
- Java JDK 17+
- Works with command-line (
javac
/java
) or any IDE (Eclipse, IntelliJ, VS Code)
# Compile all Java files into /out
javac -d out $(find src -name "*.java")
# Run the main class
java -cp out edu.ccrm.cli.Main
- Import the project as a Java Project
- Mark src as the source folder
- Run edu.ccrm.cli.Main
=== CCRM Menu ===
1. Add Student
2. List Students
3. Add Course
4. List Courses
5. Enroll Student in Course
6. Unenroll Student from Course
7. Record/Update Grade
8. Export Student Transcript (text)
9. Import Students from CSV
10. Export Students to CSV
11. Import Courses from CSV
12. Export Courses to CSV
0. Exit
Choose:
1. Add Student
RegNo: reg001
Full name: John Doe
Email: john@example.com
3. Add Course
Course code: CS101
Title: Intro to Programming
Credits: 4
Department: CSE
Semester: FALL
5. Enroll Student in Course
Student RegNo: reg001
Course Code: CS101
7. Record/Update Grade
Student RegNo: reg001
Course Code: CS101
Grade: A
8. Export Student Transcript (text)
Output filename: transcript_john.txt
test-data/students.csv
reg001,John Doe,john@example.com
reg002,Jane Roe,jane@example.com
test-data/courses.csv
CS101,Introduction to Programming,4,CSE,FALL
MA101,Calculus I,3,MATH,FALL
- Encapsulation → private fields with getters/setters in Student, Course, etc.
- Inheritance → Student and Instructor extend Person.
- Polymorphism → profile() implemented differently in Student and Instructor.
- Abstraction → Person is abstract; StudentService and CourseService are interfaces.
- Design Patterns:
- Singleton → AppConfig, DataStore.
- Builder → Course.Builder for flexible course creation.
This project is implemented using modern Java (JDK 17) features such as enhanced switch, Streams API, java.nio.file for I/O, and enums for type safety. It reflects how Java evolved from simple procedural coding (JDK 1.0) to robust OOP with generics, streams, and functional style (Java 8–17).
- Unit tests (JUnit) for service layer
- Export transcripts as PDF instead of plain text
- Database persistence (MySQL/SQLite) instead of in-memory storage
- Web-based UI using Spring Boot or JavaFX