Campus Course & Records Manager (CCRM) is a Java SE console application that helps institutes manage:
- Students (create, update, deactivate, enrollments, transcripts)
- Courses (create, update, assign instructors, search/filter with streams)
- Enrollment & Grades (record marks, compute GPA, generate transcript)
- File I/O (import/export CSV, backups with timestamped folders, recursive utilities)
This project demonstrates Java OOP principles, advanced Java features, and design patterns in a real-world application.
-
Requirements
- JDK 11+ (tested with JDK 17)
- IDE: Eclipse / IntelliJ IDEA
- Git (for cloning repo)
-
Steps
git clone https://github.com/ArnavDev-code/ccrm-project.git cd ccrm-project
-
Import into Eclipse as an existing Java project.
-
Run the main class:
edu.ccrm.cli.CCRMApp
-
Follow the menu-driven workflow.
-
- 1995: Java 1.0 released (Oak → Java).
- 1998: Java 2 (J2SE, J2EE, J2ME split).
- 2004 (Java 5): Generics, annotations, enums, enhanced for loop.
- 2011 (Java 7): NIO.2, try-with-resources, diamond operator.
- 2014 (Java 8): Lambdas, Streams API, Date/Time API.
- 2017 (Java 9): Modules system.
- 2018+: Local variable inference (
var
), records, switch expressions.
Feature | Java ME | Java SE | Java EE (Jakarta EE) |
---|---|---|---|
Scope | Mobile/embedded | Desktop & general apps | Enterprise web apps |
APIs | Limited | Full core Java APIs | Adds Servlets, JSP, EJB, JPA |
Usage | IoT, phones | CLI, desktop apps | Web servers, distributed systems |
Example | Mobile games | Our CCRM project | Banking systems |
- JDK (Java Development Kit) → tools to compile & run Java programs.
- JRE (Java Runtime Environment) → runtime environment containing JVM + core libraries.
- JVM (Java Virtual Machine) → executes Java bytecode → machine code.
📌 Flow: Source .java
→ Compiler → .class
(bytecode) → JVM → Machine instructions.
-
Download JDK from Oracle.
-
Run installer & set environment variable:
JAVA_HOME=C:\Program Files\Java\jdk-17 PATH=%JAVA_HOME%\bin
-
Verify installation:
java -version
📸 [Insert screenshot: JDK installation verification]
- Open Eclipse → File → New → Java Project.
- Import existing source (
src/edu/ccrm
). - Set run configuration: Main class =
edu.ccrm.cli.CCRMApp
. - Run project → see menu-driven interface.
📸 [Insert screenshots: Eclipse project setup, running the program]
edu.ccrm
├─ cli/ # Menu-driven console UI
├─ domain/ # Person, Student, Instructor, Course, Enrollment, Enums
├─ service/ # StudentService, CourseService, EnrollmentService
├─ io/ # Import/Export (CSV), Backup utilities
├─ util/ # Validators, RecursionUtil, ConsoleUtil
└─ config/ # AppConfig (Singleton)
- Encapsulation → Student (private fields + getters/setters).
- Inheritance & Abstraction → Person → Student/Instructor.
- Polymorphism →
toString()
overrides, service interfaces. - Immutability →
CourseCode
. - Static Nested Class →
Course.Builder
. - Inner/Anonymous Classes →
ConsoleUtil.bannerPrinter()
. - Interfaces →
StudentService
,CourseService
. - Enums → Semester, Grade (with points).
- Design Patterns → Singleton (
AppConfig
), Builder (Course
). - Exceptions → Custom (
DuplicateEnrollmentException
,MaxCreditLimitExceededException
). - Streams & Lambdas → Course search/filter, GPA reports.
- Recursion →
RecursionUtil.totalSize()
. - NIO.2 → Import/Export CSV, backup folders.
- Date/Time API → Enrollment dates, backup timestamps.
Concept | File/Class |
---|---|
Encapsulation | Student.java |
Inheritance | Person.java , Student.java |
Abstraction | Person.java (abstract methods) |
Polymorphism | EnrollmentService , toString() overrides |
Singleton | AppConfig.java |
Builder | Course.Builder |
Custom Exceptions | DuplicateEnrollmentException.java , MaxCreditLimitExceededException.java |
Streams API | CourseServiceImpl.java |
Recursion | RecursionUtil.java |
Date/Time API | Student.java , Enrollment.java , BackupService.java |
File I/O (NIO.2) | ImportExportService.java , BackupService.java |
==== CCRM - Campus Course & Records Manager ====
1. Manage Students
2. Manage Courses
3. Enrollment & Grades
4. Import/Export
5. Backup & Size
6. Exit
Example session:
Choose option: 1
Students: 1-Add 2-List 3-PrintProfile 4-Back
Choose: 1
RegNo: 23BCY10253
Full name: Arnav Nigam
Email: arnavnigamknp@gmail.com
DOB (yyyy-mm-dd): 2004-05-18
Added: Student{id=..., regNo=23BCY10253, ...}
## 📂 Exports & Backups
* Exported data → `~/ccrm-data/export/students.csv`, `courses.csv`.
* Backup created → `~/ccrm-data/backup_20250924_153000/`
📸 *\[Insert screenshot: folder structure]*
---
## 🛠️ Assertions
* Example: `assert id != null : "id must not be null";` in `Person.java`.
* Enable assertions with:
```bash
java -ea edu.ccrm.cli.CCRMApp