From 68650e802556c1b4824532739a107799d3a1470b Mon Sep 17 00:00:00 2001 From: Dagim02 Date: Tue, 12 May 2026 21:28:06 +0200 Subject: [PATCH 01/11] Implement all four custom exceptions --- task-1/com.hyfacademy/Main.java | 9 +++++++-- .../exception/AlreadyEnrolledException.java | 18 ++++++++++++++++-- .../exception/CourseFullException.java | 18 +++++++++++++++++- .../exception/EnrolmentException.java | 5 ++++- .../exception/InvalidProgressException.java | 11 ++++++++++- 5 files changed, 54 insertions(+), 7 deletions(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index d97363c..be9d08a 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -1,7 +1,12 @@ package com.hyfacademy; +import com.hyfacademy.exception.AlreadyEnrolledException; +import com.hyfacademy.exception.EnrolmentException; + + + public class Main { - static void main(String[] args) { - System.out.println("Hello World!"); + public static void main(String[] args) { + } } diff --git a/task-1/com.hyfacademy/exception/AlreadyEnrolledException.java b/task-1/com.hyfacademy/exception/AlreadyEnrolledException.java index a82837e..791a938 100644 --- a/task-1/com.hyfacademy/exception/AlreadyEnrolledException.java +++ b/task-1/com.hyfacademy/exception/AlreadyEnrolledException.java @@ -1,4 +1,18 @@ package com.hyfacademy.exception; -public class AlreadyEnrolledException { -} +public class AlreadyEnrolledException extends EnrolmentException { + private String studentName; + private String courseName; + public AlreadyEnrolledException(String studentName, String courseName){ + super(studentName + " is already enrolled in " + courseName); + this.studentName = studentName; + this.courseName = courseName; + } + public String getStudentName(){ + return studentName; + } + public String getCourseName(){ + return courseName; + } + } + diff --git a/task-1/com.hyfacademy/exception/CourseFullException.java b/task-1/com.hyfacademy/exception/CourseFullException.java index 11a76f1..c353b2a 100644 --- a/task-1/com.hyfacademy/exception/CourseFullException.java +++ b/task-1/com.hyfacademy/exception/CourseFullException.java @@ -1,4 +1,20 @@ package com.hyfacademy.exception; -public class CourseFullException { +public class CourseFullException extends EnrolmentException{ + private String courseName; + private int maxCapacity; + public CourseFullException(String courseName, int maxCapacity){ + super(String.format("Course '%s' is full (max: %d students)", courseName, maxCapacity)); + this.courseName = courseName; + this.maxCapacity = maxCapacity; + } + + public String getCourseName(){ + return courseName; + } + + public int getMaxCapacity(){ + return maxCapacity; + } + } diff --git a/task-1/com.hyfacademy/exception/EnrolmentException.java b/task-1/com.hyfacademy/exception/EnrolmentException.java index 8454c32..e26f912 100644 --- a/task-1/com.hyfacademy/exception/EnrolmentException.java +++ b/task-1/com.hyfacademy/exception/EnrolmentException.java @@ -1,4 +1,7 @@ package com.hyfacademy.exception; -public class EnrolmentException { +public class EnrolmentException extends RuntimeException { + public EnrolmentException(String message){ + super(message); + } } diff --git a/task-1/com.hyfacademy/exception/InvalidProgressException.java b/task-1/com.hyfacademy/exception/InvalidProgressException.java index c0c0037..de22040 100644 --- a/task-1/com.hyfacademy/exception/InvalidProgressException.java +++ b/task-1/com.hyfacademy/exception/InvalidProgressException.java @@ -1,4 +1,13 @@ package com.hyfacademy.exception; -public class InvalidProgressException { +public class InvalidProgressException extends EnrolmentException { + private int attemptedValue; + public InvalidProgressException(int value) { + super("Progress must be between 0 and 100, but received: " + value); + this.attemptedValue = value; + } + + public int getAttemptedValue() { + return attemptedValue; + } } From 2206c5d53f8c5daf69acb68459e79c01b271e2b9 Mon Sep 17 00:00:00 2001 From: Dagim02 Date: Thu, 14 May 2026 10:23:19 +0200 Subject: [PATCH 02/11] Add core model classes: User, Student, Course --- task-1/com.hyfacademy/model/Course.java | 107 +++++++++++++++++- task-1/com.hyfacademy/model/Student.java | 54 ++++++++- task-1/com.hyfacademy/model/User.java | 35 +++++- task-1/com.hyfacademy/service/Enrollable.java | 5 +- 4 files changed, 195 insertions(+), 6 deletions(-) diff --git a/task-1/com.hyfacademy/model/Course.java b/task-1/com.hyfacademy/model/Course.java index e80513e..c14aae2 100644 --- a/task-1/com.hyfacademy/model/Course.java +++ b/task-1/com.hyfacademy/model/Course.java @@ -1,4 +1,107 @@ package com.hyfacademy.model; -public class Course { -} +import com.hyfacademy.exception.*; +import com.hyfacademy.service.Enrollable; +import com.hyfacademy.model.Student; + +public abstract class Course implements Enrollable { + + private static int counter = 1; + + + private String courseName; + private String courseId; + private int maxStudents; + private int enrolledCount = 0; + + + private Student[] students; + private int[] studentProgress; + + + public Course(String courseName, int maxStudents) { + this.courseName = courseName; + this.maxStudents = maxStudents; + this.courseId = String.format("CRS-%03d", counter++); + + + this.students = new Student[maxStudents]; + this.studentProgress = new int[maxStudents]; + } + + + public String getCourseName() { return + courseName; + } + public String getCourseId() { + return courseId; + } + public int getMaxStudents() { + return maxStudents; + } + public int getEnrolledCount() { + return enrolledCount; + } + + @Override + public void enrol(Student student) { + if (isFull()) { + throw new CourseFullException(courseName, maxStudents); + } + + + for (int i = 0; i < enrolledCount; i++) { + if (students[i].getUserId().equals(student.getUserId())) { + throw new AlreadyEnrolledException(student.getName(), courseName); + } + } + + + students[enrolledCount] = student; + studentProgress[enrolledCount] = 0; + enrolledCount++; + + + student.enrol(this); + } + + public void updateProgress(Student student, int progress) { + if (progress < 0 || progress > 100) { + throw new InvalidProgressException(progress); + } + + for (int i = 0; i < enrolledCount; i++) { + if (students[i].getUserId().equals(student.getUserId())) { + studentProgress[i] = progress; + return; + } + } + throw new EnrolmentException("Student " + student.getName() + " is not enrolled in this course."); + } + + public int getStudentProgress(Student student) { + for (int i = 0; i < enrolledCount; i++) { + if (students[i].getUserId().equals(student.getUserId())) { + return studentProgress[i]; + } + } + throw new EnrolmentException("Progress not found. Student not enrolled."); + } + + @Override + public boolean isFull() { + return enrolledCount >= maxStudents; + } + + + public abstract String getCourseType(); + public abstract String getScheduleInfo(); + + + @Override + public String toString() { + + return String.format("[%s] %s (%s) | Enrolled: %d/%d", + courseId, courseName, getCourseType(), enrolledCount, maxStudents); + } +} \ No newline at end of file diff --git a/task-1/com.hyfacademy/model/Student.java b/task-1/com.hyfacademy/model/Student.java index 9f34d88..9f60ea5 100644 --- a/task-1/com.hyfacademy/model/Student.java +++ b/task-1/com.hyfacademy/model/Student.java @@ -1,4 +1,54 @@ package com.hyfacademy.model; +import com.hyfacademy.exception.*; -public class Student { -} +import com.hyfacademy.model.User; +import com.hyfacademy.model.Course; +import com.hyfacademy.exception.EnrolmentException; + +public class Student extends User { + private static int counter = 1; + + private Course[] enrolledCourses = new Course[5]; + private int courseCount = 0; + + public Student(String name, String email) { + super(name, email, String.format("STU-%03d", counter++)); + } + + @Override + public String getRole() { + return "STUDENT"; + } + public void enrol(Course course) { + + if (courseCount >= 5) { + throw new EnrolmentException("Student course list full (max 5 courses allowed)."); + } + + for (int i = 0; i < courseCount; i++) { + if (enrolledCourses[i] != null && + enrolledCourses[i].getCourseId().equals(course.getCourseId())) { + throw new EnrolmentException("Already enrolled in: " + course.getCourseName()); + } + } + + enrolledCourses[courseCount++] = course; + } + + public Course[] getEnrolledCourses() { + return enrolledCourses; + } + + public int getCourseCount() { + return courseCount; + } + + public int getProgress(String courseName) { + for (int i = 0; i < courseCount; i++) { + if (enrolledCourses[i].getCourseName().equalsIgnoreCase(courseName)) { + return enrolledCourses[i].getStudentProgress(this.getUserId()userId()); + } + } + throw new EnrolmentException("Student is not enrolled in course: " + courseName); + } +} \ No newline at end of file diff --git a/task-1/com.hyfacademy/model/User.java b/task-1/com.hyfacademy/model/User.java index 43cba56..1ece06c 100644 --- a/task-1/com.hyfacademy/model/User.java +++ b/task-1/com.hyfacademy/model/User.java @@ -1,4 +1,37 @@ package com.hyfacademy.model; -public class User { +public abstract class User { + private String name; + private String email; + private String userId; + + public User(String name, String email, String userId){ + this.name = name; + this.email = email; + this.userId = userId; + + } + + public abstract String getRole(); + + public String getSummary(){ + return String.format("[%s] %s | %s", getRole(), name, email); + } + + public String getName() { + return name; + } + public String getEmail(){ + return email; + } + public String getUserId() { + + return userId; + } + + @Override + public String toString() { + + return getSummary(); + } } diff --git a/task-1/com.hyfacademy/service/Enrollable.java b/task-1/com.hyfacademy/service/Enrollable.java index a8151b7..8bcab7a 100644 --- a/task-1/com.hyfacademy/service/Enrollable.java +++ b/task-1/com.hyfacademy/service/Enrollable.java @@ -1,4 +1,7 @@ package com.hyfacademy.service; -public class Enrollable { +import com.hyfacademy.model.Student; + +public abstract class Enrollable { + public abstract void enrol(Student student); } From acd578177d0597fde7a9c73c262d0ba1b4069d22 Mon Sep 17 00:00:00 2001 From: Dagim02 Date: Thu, 14 May 2026 11:06:26 +0200 Subject: [PATCH 03/11] Implement Mentor class extending User --- task-1/com.hyfacademy/model/Mentor.java | 43 +++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/task-1/com.hyfacademy/model/Mentor.java b/task-1/com.hyfacademy/model/Mentor.java index b8738d5..20471fd 100644 --- a/task-1/com.hyfacademy/model/Mentor.java +++ b/task-1/com.hyfacademy/model/Mentor.java @@ -1,4 +1,43 @@ package com.hyfacademy.model; -public class Mentor { -} +import com.hyfacademy.exception.EnrolmentException; + + +public class Mentor extends User { + + private static int counter = 1; + private String expertise; + private Course[] assignedCourses = new Course[3]; + private int courseCount = 0; + + public Mentor(String name, String email, String expertise) { + super(name, email, String.format("COA-%03d", counter++)); + this.expertise = expertise; + } + + @Override + public String getRole() { + return "MENTOR"; + } + + public void assignToCourse(Course course) { + if (courseCount >= 3) { + throw new EnrolmentException( + "Mentor already assigned to maximum of 3 courses"); + } + for (int i = 0; i < courseCount; i++) { + if (assignedCourses[i].getCourseId().equals(course.getCourseId())) { + throw new EnrolmentException( + "Mentor already assigned to course: " + course.getCourseName()); + } + } + assignedCourses[courseCount++] = course; + } + public Course[] getAssignedCourses() { + return assignedCourses; + } + public String getExpertise() { + return expertise; + } + } + From 027b171e9075778458062fdeee0ac376edab33be Mon Sep 17 00:00:00 2001 From: Dagim02 Date: Thu, 14 May 2026 11:32:29 +0200 Subject: [PATCH 04/11] Implement SelfPacedCourse extending Course with estimated hours --- .../com.hyfacademy/model/SelfPacedCourse.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/task-1/com.hyfacademy/model/SelfPacedCourse.java b/task-1/com.hyfacademy/model/SelfPacedCourse.java index 055d64a..14a4de2 100644 --- a/task-1/com.hyfacademy/model/SelfPacedCourse.java +++ b/task-1/com.hyfacademy/model/SelfPacedCourse.java @@ -1,4 +1,24 @@ package com.hyfacademy.model; -public class SelfPacedCourse { -} +public class SelfPacedCourse extends Course { + private int estimatedHours; + + public SelfPacedCourse (String courseName, int maxStudents, int estimatedHours) { + super(courseName, maxStudents); + this.estimatedHours = estimatedHours; + } + + @Override + public String getCourseType() { + return "Self-Paced"; + } + + @Override + public String getScheduleInfo() { + return "Estimated: " + estimatedHours + " hours — complete at your own pace"; + } + + public int getEstimatedHours(){ + return estimatedHours; + } +} \ No newline at end of file From c954f1bb7b364a7ce27de7e12a8c5fb86bee430f Mon Sep 17 00:00:00 2001 From: Dagim02 Date: Thu, 14 May 2026 11:52:33 +0200 Subject: [PATCH 05/11] Implement Live Cohort course type extending Course --- .../model/LiveCohortCourse.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/task-1/com.hyfacademy/model/LiveCohortCourse.java b/task-1/com.hyfacademy/model/LiveCohortCourse.java index a69fb63..94e6997 100644 --- a/task-1/com.hyfacademy/model/LiveCohortCourse.java +++ b/task-1/com.hyfacademy/model/LiveCohortCourse.java @@ -1,4 +1,44 @@ package com.hyfacademy.model; -public class LiveCohortCourse { + +public class LiveCohortCourse extends Course { + + private String startDate; + private String endDate; + private Mentor mentor; + + public LiveCohortCourse (String courseName, int maxStudents, String startDate, String endDate){ + super(courseName, maxStudents); + this.startDate = startDate; + this.endDate = endDate; + } + + @Override + public String getCourseType() { + return "Live Cohort"; + } + + @Override + public String getScheduleInfo(){ + String mentorName = (mentor != null) ? mentor.getName() : "No mentor assigned"; + return startDate + " to " + endDate + " | Mentor: " + mentorName; + } + + public void assignMentor(Mentor mentor) { + this.mentor = mentor; + mentor.assignToCourse(this); + } + + public Mentor getMentor() { + return mentor; + } + + public String getStartDate() { + return startDate; + + } + public String getEndDate() { + return endDate; + } + } From cd68417a821e113c001250307999f341da33efdc Mon Sep 17 00:00:00 2001 From: Dagim02 Date: Thu, 14 May 2026 13:23:33 +0200 Subject: [PATCH 06/11] Implement Reportable in SelfPacedCourse & LiveCohortCourse and add generateReport methods --- .../com.hyfacademy/model/LiveCohortCourse.java | 18 +++++++++++++++++- .../com.hyfacademy/model/SelfPacedCourse.java | 14 ++++++++++++-- task-1/com.hyfacademy/service/Enrollable.java | 13 +++++++++++-- task-1/com.hyfacademy/service/Reportable.java | 3 +++ 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/task-1/com.hyfacademy/model/LiveCohortCourse.java b/task-1/com.hyfacademy/model/LiveCohortCourse.java index 94e6997..0afafa9 100644 --- a/task-1/com.hyfacademy/model/LiveCohortCourse.java +++ b/task-1/com.hyfacademy/model/LiveCohortCourse.java @@ -1,7 +1,11 @@ package com.hyfacademy.model; -public class LiveCohortCourse extends Course { +import com.hyfacademy.service.Reportable; + +import java.security.PublicKey; + +public class LiveCohortCourse extends Course implements Reportable { private String startDate; private String endDate; @@ -24,6 +28,18 @@ public String getScheduleInfo(){ return startDate + " to " + endDate + " | Mentor: " + mentorName; } + @Override + public String generateReport() { + String mentorName = (mentor != null) ? mentor.getName() : "No mentor assigned"; + + return "Course: " + getCourseName() + "\n" + + "Type: " + getCourseType() + "\n" + + "Schedule: " + startDate + " to " + endDate + "\n" + + "Mentor: " + mentorName + "\n" + + "Status: " + capacityStatus(); + } + + public void assignMentor(Mentor mentor) { this.mentor = mentor; mentor.assignToCourse(this); diff --git a/task-1/com.hyfacademy/model/SelfPacedCourse.java b/task-1/com.hyfacademy/model/SelfPacedCourse.java index 14a4de2..1467eff 100644 --- a/task-1/com.hyfacademy/model/SelfPacedCourse.java +++ b/task-1/com.hyfacademy/model/SelfPacedCourse.java @@ -1,6 +1,8 @@ package com.hyfacademy.model; -public class SelfPacedCourse extends Course { +import com.hyfacademy.service.Reportable; + +public class SelfPacedCourse extends Course implements Reportable { private int estimatedHours; public SelfPacedCourse (String courseName, int maxStudents, int estimatedHours) { @@ -17,8 +19,16 @@ public String getCourseType() { public String getScheduleInfo() { return "Estimated: " + estimatedHours + " hours — complete at your own pace"; } + @Override + public String generateReport() { + return "Course: " + getCourseName() + "\n" + + "Type: " + getCourseType() + "\n" + + "Estimated Hours: " + estimatedHours + "\n" + + "Status: " + capacityStatus(); + } public int getEstimatedHours(){ return estimatedHours; } -} \ No newline at end of file + + } diff --git a/task-1/com.hyfacademy/service/Enrollable.java b/task-1/com.hyfacademy/service/Enrollable.java index 8bcab7a..20f27ab 100644 --- a/task-1/com.hyfacademy/service/Enrollable.java +++ b/task-1/com.hyfacademy/service/Enrollable.java @@ -2,6 +2,15 @@ import com.hyfacademy.model.Student; -public abstract class Enrollable { - public abstract void enrol(Student student); +public interface Enrollable { + + void enrol(Student student); + boolean isFull(); + int getEnrolledCount(); + int getMaxStudents(); + + default String capacityStatus() { + return getEnrolledCount() + "/" + getMaxStudents() + + (isFull() ? " — FULL" : " — Open"); + } } diff --git a/task-1/com.hyfacademy/service/Reportable.java b/task-1/com.hyfacademy/service/Reportable.java index 0c8ae05..9b17f07 100644 --- a/task-1/com.hyfacademy/service/Reportable.java +++ b/task-1/com.hyfacademy/service/Reportable.java @@ -1,4 +1,7 @@ package com.hyfacademy.service; public class Reportable { + + String generateReport(); + } From ffa80217a53a7100ecad84aefd5cd82c86dab402 Mon Sep 17 00:00:00 2001 From: Dagim02 Date: Thu, 14 May 2026 22:22:48 +0200 Subject: [PATCH 07/11] refactor: fix course data model and update reporting across all classes --- task-1/com.hyfacademy/Main.java | 12 - .../exception/CourseFullException.java | 20 -- task-1/com.hyfacademy/model/Course.java | 107 ------ .../model/LiveCohortCourse.java | 60 ---- task-1/com.hyfacademy/model/Mentor.java | 43 --- .../com.hyfacademy/model/SelfPacedCourse.java | 34 -- .../service/PlatformService.java | 4 - task-1/com/hyfacademy/Main.class | Bin 0 -> 353 bytes task-1/com/hyfacademy/Main.java | 10 + .../exception/AlreadyEnrolledException.class | Bin 0 -> 1080 bytes .../exception/AlreadyEnrolledException.java | 5 +- .../exception/CourseFullException.class | Bin 0 -> 1055 bytes .../exception/CourseFullException.java | 22 ++ .../exception/EnrolmentException.class | Bin 0 -> 268 bytes .../exception/EnrolmentException.java | 0 .../exception/InvalidProgressException.class | Bin 0 -> 906 bytes .../exception/InvalidProgressException.java | 11 +- task-1/com/hyfacademy/model/Course.class | Bin 0 -> 3804 bytes task-1/com/hyfacademy/model/Course.java | 148 ++++++++ .../hyfacademy/model/LiveCohortCourse.class | Bin 0 -> 3370 bytes .../hyfacademy/model/LiveCohortCourse.java | 72 ++++ task-1/com/hyfacademy/model/Mentor.class | Bin 0 -> 1910 bytes task-1/com/hyfacademy/model/Mentor.java | 46 +++ .../hyfacademy/model/SelfPacedCourse.class | Bin 0 -> 2522 bytes .../com/hyfacademy/model/SelfPacedCourse.java | 53 +++ task-1/com/hyfacademy/model/Student.class | Bin 0 -> 2470 bytes .../hyfacademy}/model/Student.java | 36 +- task-1/com/hyfacademy/model/User.class | Bin 0 -> 1320 bytes .../hyfacademy}/model/User.java | 29 +- .../com/hyfacademy/service/Enrollable.class | Bin 0 -> 987 bytes .../hyfacademy}/service/Enrollable.java | 0 .../hyfacademy/service/PlatformService.class | Bin 0 -> 8251 bytes .../hyfacademy/service/PlatformService.java | 335 ++++++++++++++++++ .../com/hyfacademy/service/Reportable.class | Bin 0 -> 172 bytes .../hyfacademy}/service/Reportable.java | 2 +- 35 files changed, 733 insertions(+), 316 deletions(-) delete mode 100644 task-1/com.hyfacademy/Main.java delete mode 100644 task-1/com.hyfacademy/exception/CourseFullException.java delete mode 100644 task-1/com.hyfacademy/model/Course.java delete mode 100644 task-1/com.hyfacademy/model/LiveCohortCourse.java delete mode 100644 task-1/com.hyfacademy/model/Mentor.java delete mode 100644 task-1/com.hyfacademy/model/SelfPacedCourse.java delete mode 100644 task-1/com.hyfacademy/service/PlatformService.java create mode 100644 task-1/com/hyfacademy/Main.class create mode 100644 task-1/com/hyfacademy/Main.java create mode 100644 task-1/com/hyfacademy/exception/AlreadyEnrolledException.class rename task-1/{com.hyfacademy => com/hyfacademy}/exception/AlreadyEnrolledException.java (97%) create mode 100644 task-1/com/hyfacademy/exception/CourseFullException.class create mode 100644 task-1/com/hyfacademy/exception/CourseFullException.java create mode 100644 task-1/com/hyfacademy/exception/EnrolmentException.class rename task-1/{com.hyfacademy => com/hyfacademy}/exception/EnrolmentException.java (100%) create mode 100644 task-1/com/hyfacademy/exception/InvalidProgressException.class rename task-1/{com.hyfacademy => com/hyfacademy}/exception/InvalidProgressException.java (59%) create mode 100644 task-1/com/hyfacademy/model/Course.class create mode 100644 task-1/com/hyfacademy/model/Course.java create mode 100644 task-1/com/hyfacademy/model/LiveCohortCourse.class create mode 100644 task-1/com/hyfacademy/model/LiveCohortCourse.java create mode 100644 task-1/com/hyfacademy/model/Mentor.class create mode 100644 task-1/com/hyfacademy/model/Mentor.java create mode 100644 task-1/com/hyfacademy/model/SelfPacedCourse.class create mode 100644 task-1/com/hyfacademy/model/SelfPacedCourse.java create mode 100644 task-1/com/hyfacademy/model/Student.class rename task-1/{com.hyfacademy => com/hyfacademy}/model/Student.java (54%) create mode 100644 task-1/com/hyfacademy/model/User.class rename task-1/{com.hyfacademy => com/hyfacademy}/model/User.java (54%) create mode 100644 task-1/com/hyfacademy/service/Enrollable.class rename task-1/{com.hyfacademy => com/hyfacademy}/service/Enrollable.java (100%) create mode 100644 task-1/com/hyfacademy/service/PlatformService.class create mode 100644 task-1/com/hyfacademy/service/PlatformService.java create mode 100644 task-1/com/hyfacademy/service/Reportable.class rename task-1/{com.hyfacademy => com/hyfacademy}/service/Reportable.java (68%) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java deleted file mode 100644 index be9d08a..0000000 --- a/task-1/com.hyfacademy/Main.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.hyfacademy; - -import com.hyfacademy.exception.AlreadyEnrolledException; -import com.hyfacademy.exception.EnrolmentException; - - - -public class Main { - public static void main(String[] args) { - - } -} diff --git a/task-1/com.hyfacademy/exception/CourseFullException.java b/task-1/com.hyfacademy/exception/CourseFullException.java deleted file mode 100644 index c353b2a..0000000 --- a/task-1/com.hyfacademy/exception/CourseFullException.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hyfacademy.exception; - -public class CourseFullException extends EnrolmentException{ - private String courseName; - private int maxCapacity; - public CourseFullException(String courseName, int maxCapacity){ - super(String.format("Course '%s' is full (max: %d students)", courseName, maxCapacity)); - this.courseName = courseName; - this.maxCapacity = maxCapacity; - } - - public String getCourseName(){ - return courseName; - } - - public int getMaxCapacity(){ - return maxCapacity; - } - -} diff --git a/task-1/com.hyfacademy/model/Course.java b/task-1/com.hyfacademy/model/Course.java deleted file mode 100644 index c14aae2..0000000 --- a/task-1/com.hyfacademy/model/Course.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.hyfacademy.model; - -import com.hyfacademy.exception.*; -import com.hyfacademy.service.Enrollable; -import com.hyfacademy.model.Student; - -public abstract class Course implements Enrollable { - - private static int counter = 1; - - - private String courseName; - private String courseId; - private int maxStudents; - private int enrolledCount = 0; - - - private Student[] students; - private int[] studentProgress; - - - public Course(String courseName, int maxStudents) { - this.courseName = courseName; - this.maxStudents = maxStudents; - this.courseId = String.format("CRS-%03d", counter++); - - - this.students = new Student[maxStudents]; - this.studentProgress = new int[maxStudents]; - } - - - public String getCourseName() { return - courseName; - } - public String getCourseId() { - return courseId; - } - public int getMaxStudents() { - return maxStudents; - } - public int getEnrolledCount() { - return enrolledCount; - } - - @Override - public void enrol(Student student) { - if (isFull()) { - throw new CourseFullException(courseName, maxStudents); - } - - - for (int i = 0; i < enrolledCount; i++) { - if (students[i].getUserId().equals(student.getUserId())) { - throw new AlreadyEnrolledException(student.getName(), courseName); - } - } - - - students[enrolledCount] = student; - studentProgress[enrolledCount] = 0; - enrolledCount++; - - - student.enrol(this); - } - - public void updateProgress(Student student, int progress) { - if (progress < 0 || progress > 100) { - throw new InvalidProgressException(progress); - } - - for (int i = 0; i < enrolledCount; i++) { - if (students[i].getUserId().equals(student.getUserId())) { - studentProgress[i] = progress; - return; - } - } - throw new EnrolmentException("Student " + student.getName() + " is not enrolled in this course."); - } - - public int getStudentProgress(Student student) { - for (int i = 0; i < enrolledCount; i++) { - if (students[i].getUserId().equals(student.getUserId())) { - return studentProgress[i]; - } - } - throw new EnrolmentException("Progress not found. Student not enrolled."); - } - - @Override - public boolean isFull() { - return enrolledCount >= maxStudents; - } - - - public abstract String getCourseType(); - public abstract String getScheduleInfo(); - - - @Override - public String toString() { - - return String.format("[%s] %s (%s) | Enrolled: %d/%d", - courseId, courseName, getCourseType(), enrolledCount, maxStudents); - } -} \ No newline at end of file diff --git a/task-1/com.hyfacademy/model/LiveCohortCourse.java b/task-1/com.hyfacademy/model/LiveCohortCourse.java deleted file mode 100644 index 0afafa9..0000000 --- a/task-1/com.hyfacademy/model/LiveCohortCourse.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.hyfacademy.model; - - -import com.hyfacademy.service.Reportable; - -import java.security.PublicKey; - -public class LiveCohortCourse extends Course implements Reportable { - - private String startDate; - private String endDate; - private Mentor mentor; - - public LiveCohortCourse (String courseName, int maxStudents, String startDate, String endDate){ - super(courseName, maxStudents); - this.startDate = startDate; - this.endDate = endDate; - } - - @Override - public String getCourseType() { - return "Live Cohort"; - } - - @Override - public String getScheduleInfo(){ - String mentorName = (mentor != null) ? mentor.getName() : "No mentor assigned"; - return startDate + " to " + endDate + " | Mentor: " + mentorName; - } - - @Override - public String generateReport() { - String mentorName = (mentor != null) ? mentor.getName() : "No mentor assigned"; - - return "Course: " + getCourseName() + "\n" + - "Type: " + getCourseType() + "\n" + - "Schedule: " + startDate + " to " + endDate + "\n" + - "Mentor: " + mentorName + "\n" + - "Status: " + capacityStatus(); - } - - - public void assignMentor(Mentor mentor) { - this.mentor = mentor; - mentor.assignToCourse(this); - } - - public Mentor getMentor() { - return mentor; - } - - public String getStartDate() { - return startDate; - - } - public String getEndDate() { - return endDate; - } - -} diff --git a/task-1/com.hyfacademy/model/Mentor.java b/task-1/com.hyfacademy/model/Mentor.java deleted file mode 100644 index 20471fd..0000000 --- a/task-1/com.hyfacademy/model/Mentor.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.hyfacademy.model; - -import com.hyfacademy.exception.EnrolmentException; - - -public class Mentor extends User { - - private static int counter = 1; - private String expertise; - private Course[] assignedCourses = new Course[3]; - private int courseCount = 0; - - public Mentor(String name, String email, String expertise) { - super(name, email, String.format("COA-%03d", counter++)); - this.expertise = expertise; - } - - @Override - public String getRole() { - return "MENTOR"; - } - - public void assignToCourse(Course course) { - if (courseCount >= 3) { - throw new EnrolmentException( - "Mentor already assigned to maximum of 3 courses"); - } - for (int i = 0; i < courseCount; i++) { - if (assignedCourses[i].getCourseId().equals(course.getCourseId())) { - throw new EnrolmentException( - "Mentor already assigned to course: " + course.getCourseName()); - } - } - assignedCourses[courseCount++] = course; - } - public Course[] getAssignedCourses() { - return assignedCourses; - } - public String getExpertise() { - return expertise; - } - } - diff --git a/task-1/com.hyfacademy/model/SelfPacedCourse.java b/task-1/com.hyfacademy/model/SelfPacedCourse.java deleted file mode 100644 index 1467eff..0000000 --- a/task-1/com.hyfacademy/model/SelfPacedCourse.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.hyfacademy.model; - -import com.hyfacademy.service.Reportable; - -public class SelfPacedCourse extends Course implements Reportable { - private int estimatedHours; - - public SelfPacedCourse (String courseName, int maxStudents, int estimatedHours) { - super(courseName, maxStudents); - this.estimatedHours = estimatedHours; - } - - @Override - public String getCourseType() { - return "Self-Paced"; - } - - @Override - public String getScheduleInfo() { - return "Estimated: " + estimatedHours + " hours — complete at your own pace"; - } - @Override - public String generateReport() { - return "Course: " + getCourseName() + "\n" + - "Type: " + getCourseType() + "\n" + - "Estimated Hours: " + estimatedHours + "\n" + - "Status: " + capacityStatus(); - } - - public int getEstimatedHours(){ - return estimatedHours; - } - - } diff --git a/task-1/com.hyfacademy/service/PlatformService.java b/task-1/com.hyfacademy/service/PlatformService.java deleted file mode 100644 index 4248597..0000000 --- a/task-1/com.hyfacademy/service/PlatformService.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.hyfacademy.service; - -public class PlatformService { -} diff --git a/task-1/com/hyfacademy/Main.class b/task-1/com/hyfacademy/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..20071461a17ba1880b042b14fa65b4d63f8f1cf3 GIT binary patch literal 353 zcmZ8d%SyvQ6g@Xd8xzxq&z%c5(khw{u(}ak#Ro(R;%bsk>y%^yV^Zj6xv`+&2l!Fq z9bFWhf%`h=9_Gx~_xmS+3+#n(;QH_)w9qE>=VBq^Lg-n1m(68f6WSxCReect2g9+C z4Z=}gmGSd(DsnNA_R%Hm{1dnlN)x=R zY9a}}L}_{3l$kUSA}e^}mB0A@;3-)@FRhKzv-9DY5T;dQa(S&RIj~}9mWM-h*quEN z$ok{hH{CZMZ07G14X=ZnP&YYc{+3!EDz5#fKdWqbEi4@Wd8$KV1mXbEtZ(ZG| zRj9etA;aTJ`E(b0h`d(HVsbv~3w28MyGi5&6_bzAw3{`ft&xg-2>LwvBs zP`gSt4rQP`Ur2rUE5wj_>PlBXXIM*+ub$;#V$r~oi6WL69$lOJg%=3!j3*MFaAFFD zP>&oEJ?6e(D9xWg(kPj@842WVH3~v8#qK8@X`Ws^V@S7@L&=M6SBm42-xa|r?|Kwj z>IvP6>#tT4ZjfP-aIKhhzC#;Z9Jx`F?dytr7&VMx`K3}i)Bzv95xTFOu$aM49(Q3G z*p2#rkD>ghx30WU12JpybQF%btyM5)_!uvF2An2+#iiqku-sN^Fd8OIM(k$(BA$+i zA_4v`hCk_^3tKniH#1Ao;-1%WwP$Up9 z6~*usH){1u6lw>TSoutU7}m*_kS1%OfGlOn5jRhNHgIc}XPZ2+iTnkHPrqrINzf#_ jnFw9^7h0s#+$Q=0ws41hmZ(wg``Dvhr1=09)Uf#z4g4HU literal 0 HcmV?d00001 diff --git a/task-1/com.hyfacademy/exception/AlreadyEnrolledException.java b/task-1/com/hyfacademy/exception/AlreadyEnrolledException.java similarity index 97% rename from task-1/com.hyfacademy/exception/AlreadyEnrolledException.java rename to task-1/com/hyfacademy/exception/AlreadyEnrolledException.java index 791a938..d3382fb 100644 --- a/task-1/com.hyfacademy/exception/AlreadyEnrolledException.java +++ b/task-1/com/hyfacademy/exception/AlreadyEnrolledException.java @@ -4,7 +4,7 @@ public class AlreadyEnrolledException extends EnrolmentException { private String studentName; private String courseName; public AlreadyEnrolledException(String studentName, String courseName){ - super(studentName + " is already enrolled in " + courseName); + super(studentName + " is already enrolled in " + courseName + " "); this.studentName = studentName; this.courseName = courseName; } @@ -14,5 +14,4 @@ public String getStudentName(){ public String getCourseName(){ return courseName; } - } - +} diff --git a/task-1/com/hyfacademy/exception/CourseFullException.class b/task-1/com/hyfacademy/exception/CourseFullException.class new file mode 100644 index 0000000000000000000000000000000000000000..8f1e18229a367f7bb84b2cb6baf686db1eed6c12 GIT binary patch literal 1055 zcmaJ=%Tg0T6g^F19+QDUfCw64)L>p{_C#HnB4w%o7ol+BsxxVlAv4{nnGQw%#E)>H zRZ>>5@B{oP%R40MXrha`xBJY!=RW(}_nWT(Uf^kt)RKu9;tY2^J`_zQZLZ%sdO)W@ zbEyM{Qu*kDU-G)kWxw9hz9ajMc4ZzjkU%ntl!-J9hMKLs`e1U-ZQc{!q%N*(G188b z^+V|^*Ar47{)8A3&mHOLmkgT=qE*h)FtMD(iis>%8TS9l-Be>g5UsK6M#v5O7Cqsf zV93p99A3p?TxFHN*aHm?kMy6W0#@Z+PLvM~`4snucWMB|mhWt(XvxV&$&jZrr zP0pW@`S{B%aSLWi-ot&8VaTZI+K0bP*D0FbE24;2!79Ivx1~x_psjS4ZME#t^ymbAb(!7$)+*H?!Xs7w8Z4Zl+@fx{ZyEC zeb>CA{G8m>yb>f6S)B7zQW+WeeKPY>{YrC_Qj0>_F#(03#3rJpd#*fjlLkC`g=5OM5#5<3_MN7mx&bmI0^^qLLfPW@6w00BqGj A4gdfE literal 0 HcmV?d00001 diff --git a/task-1/com.hyfacademy/exception/EnrolmentException.java b/task-1/com/hyfacademy/exception/EnrolmentException.java similarity index 100% rename from task-1/com.hyfacademy/exception/EnrolmentException.java rename to task-1/com/hyfacademy/exception/EnrolmentException.java diff --git a/task-1/com/hyfacademy/exception/InvalidProgressException.class b/task-1/com/hyfacademy/exception/InvalidProgressException.class new file mode 100644 index 0000000000000000000000000000000000000000..3629594812640a7588113e4e4eec8bd5f4832042 GIT binary patch literal 906 zcmaJ@IeD%Dbr(D){5qNI%^_>s`ygHOZm6}Ifoklg|0pZFtu zG0~Xx!5`p{GG0EaD6Pq4?#!8c&di*9fBZc84&X8FtaFH^v4mxT%|Q03rj;Yj8_#rk z6&a~aB(SktFEx(kP?mkEI_0JbJ=LkE5Qk+Ukwy|JfxC_l%H7dB=}4D?QJFqC)Hj}1 z&Po(UM&Cj#$3HD5*%MHX%e>@1jZ z)*mhG2yFj9m0N3S2ySo>#ks!)*2i5m?sQ%!u{J?~3h!f#=JxU@4B;Ct?B%~=<@1Dd zk>?Co3P>QutSrw0m#{Ho7dSGBIbX2y={F@l0auxLnXwo)ab+SQu*E0W`B9h%-9!<$ GvGogX6!J{~ literal 0 HcmV?d00001 diff --git a/task-1/com.hyfacademy/exception/InvalidProgressException.java b/task-1/com/hyfacademy/exception/InvalidProgressException.java similarity index 59% rename from task-1/com.hyfacademy/exception/InvalidProgressException.java rename to task-1/com/hyfacademy/exception/InvalidProgressException.java index de22040..0df1908 100644 --- a/task-1/com.hyfacademy/exception/InvalidProgressException.java +++ b/task-1/com/hyfacademy/exception/InvalidProgressException.java @@ -1,13 +1,16 @@ package com.hyfacademy.exception; public class InvalidProgressException extends EnrolmentException { - private int attemptedValue; - public InvalidProgressException(int value) { - super("Progress must be between 0 and 100, but received: " + value); - this.attemptedValue = value; + + private final int attemptedValue; + + public InvalidProgressException(int attemptedValue) { + super("Progress must be between 0 and 100, but received: " + attemptedValue); + this.attemptedValue = attemptedValue; } public int getAttemptedValue() { return attemptedValue; } } + diff --git a/task-1/com/hyfacademy/model/Course.class b/task-1/com/hyfacademy/model/Course.class new file mode 100644 index 0000000000000000000000000000000000000000..fd1c8f4bb9462eac97b6c4900981a22dde5e4c89 GIT binary patch literal 3804 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 maxStudents; + } + + @Override + public void enrol(Student student) throws EnrolmentException { + + if (isFull()) { + throw new CourseFullException(courseName, maxStudents); + } + + + for (int i = 0; i < enrolledCount; i++) { + if (students[i].getUserId().equals(student.getUserId())) { + throw new AlreadyEnrolledException( + student.getName(), + courseName + ); + } + } + + + students[enrolledCount] = student; + studentProgress[enrolledCount] = 0; + enrolledCount++; + + student.enrol(this); + } + + + public void updateProgress(Student student, int progress) + throws EnrolmentException, InvalidProgressException { + + if (progress < 0 || progress > 100) { + throw new InvalidProgressException(progress); + } + + int index = findStudentIndex(student); + if (index == -1) { + throw new EnrolmentException( + student.getName() + " is not enrolled in '" + courseName + "'" + ); + } + + studentProgress[index] = progress; + } + + public int getStudentProgress(Student student) throws EnrolmentException { + int index = findStudentIndex(student); + if (index == -1) { + throw new EnrolmentException( + student.getName() + " is not enrolled in '" + courseName + "'" + ); + } + return studentProgress[index]; + } + + private int findStudentIndex(Student student) { + for (int i = 0; i < enrolledCount; i++) { + if (students[i].getUserId().equals(student.getUserId())) { + return i; + } + } + return -1; + } + + protected String progressBar(int progress) { + long filled = Math.round(progress / 10.0); + int empty = (int)(10 - filled); + + StringBuilder bar = new StringBuilder(); + for (int i = 0; i < filled; i++) bar.append("█"); + for (int i = 0; i < empty; i++) bar.append("░"); + return bar.toString(); + } + + public abstract String getCourseType(); + public abstract String getScheduleInfo(); + + @Override + public String toString() { + return String.format("[%s] %s (%s) | Enrolled: %d/%d", + courseId, + courseName, + getCourseType(), + enrolledCount, + maxStudents + ); + } +} + diff --git a/task-1/com/hyfacademy/model/LiveCohortCourse.class b/task-1/com/hyfacademy/model/LiveCohortCourse.class new file mode 100644 index 0000000000000000000000000000000000000000..ec75319b0ceca6a2b5d06330b9ecac3d79d3777e GIT binary patch literal 3370 zcmc&$+jCPz82@dP_N3`)p^*x;RSrV2O({`C#HOeaibi|0DPTp^L$aiy$vH7Osn#pr z?}~~yyz2wwi=&QIr!zX^i!=J@gAYDAJoz6uONu{o@m1?mvdQ5W+JrmdL0Hf2&^rb)4aKrHl2ex zXNv!LZ_6nQ+)~4w)iSDgYAB*EwNb|=bP2S0T1?mrhBmru8^k-0D+gYIZVf#;qUaS^ zz0Aq8Wk(hS0(Qj_X!CT**|9PD-eCktvk(uVPvDWWZ=CoazhT61rG~3?Y{S(87r8fB zsVALTR9fdPUZjTQdk%zfjlg=tNQ~|uPYoL5gJYxP6UN!&Cyiwh7iPp=t7E5%ohC+y zXT&63F3_)B9v9eL3%=Tq3Tl^*>lIYSvd^ed4!>9|>mY)P9%Go5p0Q;z9W$`O`={t#|ezC3ySfBc3p%%n1m)WrV1gCi5h z*!bv8gmF#RumdRarC>g>bfp){_>f2f7uX<@KpmixFla?d1 zl4VYtG4mBUdQ{crh6s&Y1OzX&l3EWil@3Y4wYuic&zm%&avUL=3FN>+0E5shC z5qXD}g`RiUxG#TY%EcpSKv{)wA%uzmG~6e!;XFg|(lfcVjE&18yMuWo&uZIWLuzuF zRA1xjot^^>_XOJ)Jvo%Kl9@_gCat43(~!B4o*p)f zE{BFkSNPSFDxiB6cA-gJsJ{9QN2wGZygx0APL9Q2!;=EN=h;9m9LL<_vMtW+RksSTUD@7@jbTfl%0}U9G1?Mohh$s!1H0efEP8qq@41y zz^0|R%2_k^wDjA$*RS@OX*SeZfwz~t!zc7WZ#Jz=UY0iv+4gj$7_WB7vYi!-$^$jX zFC1F#qr-u4;h}t`wbDoYfKu$NbY5d`X6`uq`R$Z?27F- znMABOek`aXQoE=jyzR1h&>oYEbjsaM_%+mL3E@3v2EF zS*~`FvYvA!+S~aJM6~Y=v}k+q44S{>uD}E8jJ*SBW;VAFa}`>#nkNsU!^coF(;I=v z>Ms_V8r-cl93NUF9CFnHHb%cj8MC(`B9N995t!m!x&;FXYJLYj6;B9j`FpnD+m;MdrapSVB^Ddg0$Kc}W z9QMs4xv-4f;!7LyXSEIt1a@^&(8wo9(mdmx+eSDY=-j#^*wGfeXFzFrhxQ%roDB5M z;jYwVkW)G}S>G1?7Mav!L$ob8hhwQZSO=f16Q|FeQ5*_cfu4dEIE}^*^*_IhC!O;s zE$X9g9dVXiQ9>t8*To>)%n-N&>(I@yhd~tOEqal~7KUCQeX|u$vz@$*t8fBW;}o{z zV_bvJNclM*Ps)TppdUXWj$bf3*l-{=gpmg@kC})1?LbT$gV|!=E^;A$E=) z6PgNgE*JxUW1A3vVK_3#7XU@7n0W@za^6C3K1b?T-0@X+eBB-2aL2dY@f~-37w?lJ MOzIEt5k5itzvg(v8~^|S literal 0 HcmV?d00001 diff --git a/task-1/com/hyfacademy/model/LiveCohortCourse.java b/task-1/com/hyfacademy/model/LiveCohortCourse.java new file mode 100644 index 0000000..5f31856 --- /dev/null +++ b/task-1/com/hyfacademy/model/LiveCohortCourse.java @@ -0,0 +1,72 @@ +package com.hyfacademy.model; + +import com.hyfacademy.exception.EnrolmentException; +import com.hyfacademy.service.Reportable; + +public class LiveCohortCourse extends Course implements Reportable { + + private String startDate; + private String endDate; + private Mentor mentor; + + public LiveCohortCourse(String courseName, int maxStudents, String startDate, String endDate) { + super(courseName, maxStudents); + this.startDate = startDate; + this.endDate = endDate; + } + + @Override + public String getCourseType() { + return "Live Cohort"; + } + + @Override + public String getScheduleInfo() { + String mentorName = (mentor != null ? mentor.getName() : "No mentor assigned"); + return startDate + " to " + endDate + " | Mentor: " + mentorName; + } + + public void assignMentor(Mentor mentor) throws EnrolmentException { + this.mentor = mentor; + mentor.assignToCourse(this); + } + + @Override + public String generateReport() { + + System.out.println("══════════════════════════════════════════"); + System.out.println(" COURSE REPORT — Live Cohort"); + System.out.println("══════════════════════════════════════════"); + System.out.println(" ID : " + getCourseId()); + System.out.println(" Name : " + getCourseName()); + System.out.println(" Schedule : " + startDate + " to " + endDate); + System.out.println(" Mentor : " + (mentor != null ? mentor.getName() : "None")); + System.out.println(" Capacity : " + capacityStatus()); + System.out.println("──────────────────────────────────────────"); + System.out.println(" STUDENT PROGRESS"); + System.out.println("──────────────────────────────────────────"); + + int total = 0; + + for (int i = 0; i < getEnrolledCount(); i++) { + Student s = students[i]; + int progress = studentProgress[i]; + total += progress; + + System.out.printf(" %-8s %-20s %4d%% %s%n", + s.getUserId(), + s.getName(), + progress, + progressBar(progress) + ); + } + + System.out.println("──────────────────────────────────────────"); + + int avg = (getEnrolledCount() == 0) ? 0 : total / getEnrolledCount(); + System.out.println(" Avg Progress : " + avg + "%"); + System.out.println("══════════════════════════════════════════"); + + return ""; + } +} diff --git a/task-1/com/hyfacademy/model/Mentor.class b/task-1/com/hyfacademy/model/Mentor.class new file mode 100644 index 0000000000000000000000000000000000000000..55b6b40249c2ef2c8c8f85cac4140331ffc9025a GIT binary patch literal 1910 zcmah~TUQ!a6#fpk!EwBV8WUoI)2I{%4O)9ku}KZZh8Cn1l9Z+oISxmh2s13^;EMmG zuYK=BZ#G%!O8ed))zv)=QKHm7aL$>1`S!Q>KKt!dfQQ2ddO%>Cna~3%jF}$TEqP~j zw4q=Fl>xizjT)_}KPce!NC0Z_Q*D5;-Rv0p80*Ys*=t#@4vjw~B zwA$4B!fTOA@v|CMu}0l(3c1bO6lEqgqUH<;DMnJdY{{kmT(tKj&soK!ByVBK!j5)fc$*99N9UE8IB7yb(Ocg0XUp^9@G-5k z2-7-=1VJS+jto7=tC%Kj4r_xjbF?$E3dW3|P8=hB(G0B{^j{I^^ZAaz0%Vafe#1iK z2h99|<+|}ZZoS02z;k@?7b)hAI%&TRJs~ogs>dWS#N;ZXh+_iRXidPtJnndr!Q!|} zhY-bErr)R7q}8jz4ca|&VGsH&y_=-Ehx`cBg&)bsFM*#)lD= 3) { + throw new EnrolmentException( + getName() + " cannot be assigned to more than 3 courses" + ); + } + + assignedCourses[courseCount++] = course; + } + + public Course[] getAssignedCourses() { + return assignedCourses; + } + + public int getCourseCount() { + return courseCount; + } + + public String getExpertise() { + return expertise; + } +} + + diff --git a/task-1/com/hyfacademy/model/SelfPacedCourse.class b/task-1/com/hyfacademy/model/SelfPacedCourse.class new file mode 100644 index 0000000000000000000000000000000000000000..2ff06cbe34b34153e838d0e9b47270bd8b8e3994 GIT binary patch literal 2522 zcmc&#TXz#x6#hcccM;Q(oMs9qvXy%P#eqy{>GM+3xG}h7_qx$vhNa8rd){2m=3Khx>yHag38wW#5 zRb_zTcsrw;{ZJN8=s2k?Y+JQ3#%m%@jhIrOGdfPI&pj5ebE_(wrsT5W#}Pp)j!yJO zaYmKo;o@_AqBzSCHw?2hc{x8;GA4@SSBrVmQ~{jR@hZ+!r%`-)$8&8v=yivBERq^1 zD3A>6ggwGh)R&F22%7is^hkTSv^cU#>7Tr0$E*tr`4L%@EQ0UF+CIPz4~6yZYE5}Bf?yPo7T zHjTc$ZEO{2^Myie&Yt&|hS89o@^>?XRR~(cl)0z|IhAj%ttV=Ck5svU^ z^0h1xB&gS|`B7dERm4o1h?clgRW9s$YH|*$1XE2fxvuo3$Lpg)&beiOdl%+ouu;?C zD0Gsc{iZ0`HQ z*YGJra#NPuB~Qa$8pO|Lr6zA>8b=5a9W-a(qko6GR_P|}r1vfOfL2bYlQbARY1h*y z4*mj`?)w?qk9203p|yv;0x@)vtdeH1a6FVu&`uaYB);v3Re`R6)Jto5mGNlE7)w8b zwv6q-)BL-ML#*(#^Motq(jPxzXMFz>5^6sZ?%_GTgk#Hi0cerwm|n)Ib;rSFytsM{ z><+CQ<1dA}UJiG4jtnPA$tz#uB6*oj42{zEdSdW`vYpc&BR>^6xrD3cR3~jC=G2zH zUomb@b*1~3FljE~og4QV`}W_*D?Z0>sUSOoEZ)Q(dOtw5NT8QS(LVH%>xXcbZsa@+ zl&DU(aFkMZjDVNK0;S?J;<%3iJU|*>-~_&+N_|5Sen+(LiRTf8_Zx;VOPagU@i!dy q7b%ON5}2Jsm3D&)eVcMy4^}T&Ww0&;>qq#QxMIZd2^qYH{r>?NGv2KL literal 0 HcmV?d00001 diff --git a/task-1/com/hyfacademy/model/SelfPacedCourse.java b/task-1/com/hyfacademy/model/SelfPacedCourse.java new file mode 100644 index 0000000..0270297 --- /dev/null +++ b/task-1/com/hyfacademy/model/SelfPacedCourse.java @@ -0,0 +1,53 @@ +package com.hyfacademy.model; + +import com.hyfacademy.service.Reportable; + +public class SelfPacedCourse extends Course implements Reportable { + + private int estimatedHours; + + public SelfPacedCourse(String courseName, int maxStudents, int estimatedHours) { + super(courseName, maxStudents); + this.estimatedHours = estimatedHours; + } + + @Override + public String getCourseType() { + return "Self-Paced"; + } + + @Override + public String getScheduleInfo() { + return "Estimated: " + estimatedHours + " hours — complete at your own pace"; + } + + @Override + public String generateReport() { + System.out.println("══════════════════════════════════════════"); + System.out.println(" COURSE REPORT — Self-Paced"); + System.out.println("══════════════════════════════════════════"); + System.out.println(" ID : " + getCourseId()); + System.out.println(" Name : " + getCourseName()); + System.out.println(" Capacity : " + capacityStatus()); + System.out.println(" Est. Hours : " + estimatedHours); + System.out.println("──────────────────────────────────────────"); + System.out.println(" STUDENT PROGRESS"); + System.out.println("──────────────────────────────────────────"); + + for (int i = 0; i < getEnrolledCount(); i++) { + Student s = students[i]; + int progress = studentProgress[i]; + + System.out.printf(" %-8s %-20s %4d%% %s%n", + s.getUserId(), + s.getName(), + progress, + progressBar(progress) + ); + } + + System.out.println("══════════════════════════════════════════"); + return ""; + } +} + diff --git a/task-1/com/hyfacademy/model/Student.class b/task-1/com/hyfacademy/model/Student.class new file mode 100644 index 0000000000000000000000000000000000000000..8b8127b26a5a93aa847a612fc11af01c7986f27a GIT binary patch literal 2470 zcma)8Nq5s$7`-ocBBO`^VQL@&K>~OH%+N5@2^2yoZbP6rgeJ5UMSeIYvJ@EX1!PjVcG2-=19q)*>)zxxgH?|;Ae4ZtYwrO+XeDotHK zwC~9AvWBF<#=F*iEALotC4Xh^uC#-7=z^vpWndk2fqvVo<>!~~ShiJ`wWWN`D@!L| z3L0hU1_GMxHQYef1w>JYf%O`C3~azgflVu(i&Uv7CGEcDG~|^#0^8EX%)}avf{tEn z*09CER%}~^t`yX(ZbhK$j#sZ)41GG?W*@yR+-ws?=@iw;afnVTGMKb#QeaCuhRj~JR^Gr792MAJvlbZMwXNVrHJIm}A6Ra{EcV9~E5@0Q zG>)sXd?>Ir&SYB008SVqN zuDujZ#mMO;%Pl+7ADZyIg~noGZ86#;s|=@>7G;e3f2_!+i!sY_O4UFXQkWOmCrsON zT`w@hnwnMDtg%(iVBT`gVbc!Rj-SF^f!)Ha`esX&1EjPg4fBBDQZkCJE9+y9<@?gt zP^0@b9L1%s!Q(c3zba=x;)&a|i(4K@Kvy3!-gQv6H$1s4d1{;ljx4WN_;i)B1kZ!n z+`(Rve1*hJ;umzzByazU&gbYZJ;$bJ*q%+j!oU;k&L*B<@Mr1^T7t8je*&;By>mdf&-YP$SX1|EHEwS18)d>ot@JPr-PE&Jf0}>|+e3zQ>lANY7-SBKrb| zfoC}OIx*U>-u*zNkFmS|*i#JW_|53u;8mqDz*FVhsY1V Bai9PI literal 0 HcmV?d00001 diff --git a/task-1/com.hyfacademy/model/Student.java b/task-1/com/hyfacademy/model/Student.java similarity index 54% rename from task-1/com.hyfacademy/model/Student.java rename to task-1/com/hyfacademy/model/Student.java index 9f60ea5..bd7f9bd 100644 --- a/task-1/com.hyfacademy/model/Student.java +++ b/task-1/com/hyfacademy/model/Student.java @@ -1,11 +1,10 @@ package com.hyfacademy.model; -import com.hyfacademy.exception.*; -import com.hyfacademy.model.User; -import com.hyfacademy.model.Course; +import com.hyfacademy.exception.AlreadyEnrolledException; import com.hyfacademy.exception.EnrolmentException; public class Student extends User { + private static int counter = 1; private Course[] enrolledCourses = new Course[5]; @@ -19,23 +18,30 @@ public Student(String name, String email) { public String getRole() { return "STUDENT"; } - public void enrol(Course course) { + public void enrol(Course course) throws EnrolmentException { + + // Student limit if (courseCount >= 5) { - throw new EnrolmentException("Student course list full (max 5 courses allowed)."); + throw new EnrolmentException( + getName() + " cannot enrol in more than 5 courses" + ); } + // Already enrolled? for (int i = 0; i < courseCount; i++) { - if (enrolledCourses[i] != null && - enrolledCourses[i].getCourseId().equals(course.getCourseId())) { - throw new EnrolmentException("Already enrolled in: " + course.getCourseName()); + if (enrolledCourses[i].getCourseId().equals(course.getCourseId())) { + throw new AlreadyEnrolledException( + getName(), + course.getCourseName() + ); } } enrolledCourses[courseCount++] = course; } - public Course[] getEnrolledCourses() { + public Course[] getCourses() { return enrolledCourses; } @@ -43,12 +49,16 @@ public int getCourseCount() { return courseCount; } - public int getProgress(String courseName) { + public int getProgress(String courseName) throws EnrolmentException { for (int i = 0; i < courseCount; i++) { if (enrolledCourses[i].getCourseName().equalsIgnoreCase(courseName)) { - return enrolledCourses[i].getStudentProgress(this.getUserId()userId()); + return enrolledCourses[i].getStudentProgress(this); } } - throw new EnrolmentException("Student is not enrolled in course: " + courseName); + + throw new EnrolmentException( + getName() + " is not enrolled in course '" + courseName + "'" + ); } -} \ No newline at end of file +} + diff --git a/task-1/com/hyfacademy/model/User.class b/task-1/com/hyfacademy/model/User.class new file mode 100644 index 0000000000000000000000000000000000000000..fada0cf31e0f23de47c5e90aef4b9e76ba0baef4 GIT binary patch literal 1320 zcmbVL+fEZv6kP|VopzXVDHTKo3!;|cGTs%7KF~<4K};;-1M%U|9${cEWagBli67!; zXcSC%@B{oP<32NlVrhtRk~w?Np0#glpZ)9i@lOEHP&UwmULBf=6w(ZXyZnILF88M%_7!DJY#2cEst`pE0NA-tCD1r6ca?;;U0Xg>D@ zLw>a#vL-{v-!7{l{U!!fgp}~O<0{LLiM+C;o8(??7-TA#xP%b~eOt)4flJW}rJ3{b z^3=*@6Jxl-FzWF=Q3?Dym+u|9Ls}%cFC&ImrSqQuV(F4l)ppIqxT?*d+GTi%QV+rQ(8B85aLH{|0ecAz~Q@RvllgHN7nnuJbL$hhkewirI2?e_$j1bxZa%;OvlAQ)Z=LmU#B5SmmS&Gt+9ERznUg%#EX`Cb@RLc4e{mZFqIyMf` zd8;cl*9k2U^mbS1U?+4`V`_!tT(mCas9Lhn8|TbhM;KPc(3?BPDA4JzN-mxHwHr9X z)lTRX@iqh1j7p)P>PczeFwv$d=~bir7X9qOEapfm!sqF|kB9VSkoE{q@DyWz02weH AUjP6A literal 0 HcmV?d00001 diff --git a/task-1/com.hyfacademy/model/User.java b/task-1/com/hyfacademy/model/User.java similarity index 54% rename from task-1/com.hyfacademy/model/User.java rename to task-1/com/hyfacademy/model/User.java index 1ece06c..c667081 100644 --- a/task-1/com.hyfacademy/model/User.java +++ b/task-1/com/hyfacademy/model/User.java @@ -1,37 +1,36 @@ package com.hyfacademy.model; -public abstract class User { - private String name; - private String email; - private String userId; +public abstract class User { + private static int userCounter = 1; - public User(String name, String email, String userId){ + protected String name; + protected String email; + protected String userId; + + public User(String name, String email, String userId) { this.name = name; this.email = email; this.userId = userId; - - } - - public abstract String getRole(); - - public String getSummary(){ - return String.format("[%s] %s | %s", getRole(), name, email); } public String getName() { return name; } - public String getEmail(){ + public String getEmail() { return email; } public String getUserId() { - return userId; } + public abstract String getRole(); + + public String getSummary() { + return "[" + getRole() + "] " + name + " | " + email; + } + @Override public String toString() { - return getSummary(); } } diff --git a/task-1/com/hyfacademy/service/Enrollable.class b/task-1/com/hyfacademy/service/Enrollable.class new file mode 100644 index 0000000000000000000000000000000000000000..f535c31b05c8d6fe4b3272b2e3e444b4f2d2bcea GIT binary patch literal 987 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 literal 0 HcmV?d00001 diff --git a/task-1/com/hyfacademy/service/PlatformService.java b/task-1/com/hyfacademy/service/PlatformService.java new file mode 100644 index 0000000..159950f --- /dev/null +++ b/task-1/com/hyfacademy/service/PlatformService.java @@ -0,0 +1,335 @@ +package com.hyfacademy.service; + +import com.hyfacademy.exception.*; +import com.hyfacademy.model.*; + +import java.util.InputMismatchException; +import java.util.Scanner; + +public class PlatformService { + + private Course[] courses = new Course[10]; + private int courseCount = 0; + + private Student[] students = new Student[20]; + private int studentCount = 0; + + private Mentor[] mentors = new Mentor[5]; + private int mentorCount = 0; + + private Scanner scanner = new Scanner(System.in); + + // --------------------------------------------------------- + // Main Menu Loop + // --------------------------------------------------------- + public void run() { + boolean running = true; + + while (running) { + printMenu(); + + System.out.print("Choose an option: "); + int choice = -1; + + try { + choice = scanner.nextInt(); + } catch (InputMismatchException e) { + System.out.println("❌ Please enter a valid number."); + } finally { + scanner.nextLine(); // clear buffer + } + + switch (choice) { + case 1 -> addCourse(); + case 2 -> addStudent(); + case 3 -> addMentor(); + case 4 -> enrolStudent(); + case 5 -> updateProgress(); + case 6 -> viewAllCourses(); + case 7 -> viewCourseReport(); + case 8 -> viewAllStudents(); + case 9 -> { + System.out.println("Exiting... Goodbye!"); + running = false; + } + default -> System.out.println("❌ Invalid option. Try again."); + } + + System.out.println(); + } + } + + private void printMenu() { + System.out.println("╔══════════════════════════════════════════╗"); + System.out.println("║ HYF ACADEMY COURSE PLATFORM ║"); + System.out.println("╚══════════════════════════════════════════╝"); + System.out.println(" 1. Add course"); + System.out.println(" 2. Add student"); + System.out.println(" 3. Add mentor"); + System.out.println(" 4. Enrol student in course"); + System.out.println(" 5. Update student progress"); + System.out.println(" 6. View all courses"); + System.out.println(" 7. View course report"); + System.out.println(" 8. View all students"); + System.out.println(" 9. Exit"); + System.out.println("══════════════════════════════════════════"); + } + + // --------------------------------------------------------- + // Add Course + // --------------------------------------------------------- + private void addCourse() { + if (courseCount >= courses.length) { + System.out.println("❌ Cannot add more courses (limit reached)."); + return; + } + + System.out.print("Course type (1 = Self-Paced, 2 = Live Cohort): "); + int type; + + try { + type = scanner.nextInt(); + } catch (InputMismatchException e) { + System.out.println("❌ Invalid type."); + scanner.nextLine(); + return; + } + scanner.nextLine(); + + System.out.print("Course name: "); + String name = scanner.nextLine(); + + System.out.print("Max students: "); + int max; + try { + max = scanner.nextInt(); + } catch (InputMismatchException e) { + System.out.println("❌ Max students must be a number."); + scanner.nextLine(); + return; + } + scanner.nextLine(); + + if (type == 1) { + System.out.print("Estimated hours: "); + int hours; + try { + hours = scanner.nextInt(); + } catch (InputMismatchException e) { + System.out.println("❌ Estimated hours must be a number."); + scanner.nextLine(); + return; + } + scanner.nextLine(); + + courses[courseCount++] = new SelfPacedCourse(name, max, hours); + + } else if (type == 2) { + System.out.print("Start date (YYYY-MM-DD): "); + String start = scanner.nextLine(); + System.out.print("End date (YYYY-MM-DD): "); + String end = scanner.nextLine(); + + courses[courseCount++] = new LiveCohortCourse(name, max, start, end); + + } else { + System.out.println("❌ Unknown course type."); + return; + } + + System.out.println("✅ Course added."); + } + + // --------------------------------------------------------- + // Add Student + // --------------------------------------------------------- + private void addStudent() { + if (studentCount >= students.length) { + System.out.println("❌ Cannot add more students (limit reached)."); + return; + } + + System.out.print("Student name: "); + String name = scanner.nextLine(); + System.out.print("Student email: "); + String email = scanner.nextLine(); + + Student s = new Student(name, email); + students[studentCount++] = s; + + System.out.println("✅ Student created with ID: " + s.getUserId()); + } + + // --------------------------------------------------------- + // Add Mentor + // --------------------------------------------------------- + private void addMentor() { + if (mentorCount >= mentors.length) { + System.out.println("❌ Cannot add more mentors (limit reached)."); + return; + } + + System.out.print("Mentor name: "); + String name = scanner.nextLine(); + System.out.print("Mentor email: "); + String email = scanner.nextLine(); + System.out.print("Expertise: "); + String expertise = scanner.nextLine(); + + Mentor m = new Mentor(name, email, expertise); + mentors[mentorCount++] = m; + + System.out.println("✅ Mentor created with ID: " + m.getUserId()); + } + + // --------------------------------------------------------- + // Helper Finders + // --------------------------------------------------------- + private Student findStudentById(String id) { + for (int i = 0; i < studentCount; i++) { + if (students[i].getUserId().equalsIgnoreCase(id)) { + return students[i]; + } + } + return null; + } + + private Course findCourseById(String id) { + for (int i = 0; i < courseCount; i++) { + if (courses[i].getCourseId().equalsIgnoreCase(id)) { + return courses[i]; + } + } + return null; + } + + // --------------------------------------------------------- + // Enrol Student + // --------------------------------------------------------- + private void enrolStudent() { + System.out.print("Student ID: "); + String studentId = scanner.nextLine(); + System.out.print("Course ID: "); + String courseId = scanner.nextLine(); + + Student s = findStudentById(studentId); + Course c = findCourseById(courseId); + + if (s == null) { + System.out.println("❌ Student not found."); + return; + } + if (c == null) { + System.out.println("❌ Course not found."); + return; + } + + try { + c.enrol(s); + System.out.println("✅ Student enrolled successfully."); + } catch (CourseFullException | AlreadyEnrolledException e) { + System.out.println("❌ " + e.getMessage()); + } catch (EnrolmentException e) { + System.out.println("❌ " + e.getMessage()); + } + } + + // --------------------------------------------------------- + // Update Progress + // --------------------------------------------------------- + private void updateProgress() { + System.out.print("Student ID: "); + String studentId = scanner.nextLine(); + System.out.print("Course ID: "); + String courseId = scanner.nextLine(); + + Student s = findStudentById(studentId); + Course c = findCourseById(courseId); + + if (s == null) { + System.out.println("❌ Student not found."); + return; + } + if (c == null) { + System.out.println("❌ Course not found."); + return; + } + + System.out.print("Progress (0–100): "); + int progress; + + try { + progress = scanner.nextInt(); + } catch (InputMismatchException e) { + System.out.println("❌ Progress must be a number."); + scanner.nextLine(); + return; + } finally { + scanner.nextLine(); + } + + try { + c.updateProgress(s, progress); + System.out.println("✅ Progress updated."); + } catch (InvalidProgressException e) { + System.out.println("❌ " + e.getMessage()); + } catch (EnrolmentException e) { + System.out.println("❌ " + e.getMessage()); + } + } + + // --------------------------------------------------------- + // View All Courses + // --------------------------------------------------------- + private void viewAllCourses() { + System.out.println("══════════════════════════════════════════════════════════════════"); + System.out.println(" ID NAME TYPE CAPACITY"); + System.out.println("══════════════════════════════════════════════════════════════════"); + + for (int i = 0; i < courseCount; i++) { + System.out.println(courses[i]); // polymorphic toString() + } + + System.out.println("══════════════════════════════════════════════════════════════════"); + } + + // --------------------------------------------------------- + // View Course Report + // --------------------------------------------------------- + private void viewCourseReport() { + System.out.print("Course ID: "); + String courseId = scanner.nextLine(); + + Course c = findCourseById(courseId); + if (c == null) { + System.out.println("❌ Course not found."); + return; + } + + if (c instanceof Reportable r) { + r.generateReport(); + } else { + System.out.println("❌ This course does not support reporting."); + } + } + + // --------------------------------------------------------- + // View All Students + // --------------------------------------------------------- + private void viewAllStudents() { + System.out.println("══════════════════════════════════════════"); + System.out.println(" STUDENTS"); + System.out.println("══════════════════════════════════════════"); + + for (int i = 0; i < studentCount; i++) { + Student s = students[i]; + System.out.printf(" %-8s %-20s Courses: %d%n", + s.getUserId(), + s.getName(), + s.getCourseCount()); + } + + System.out.println("══════════════════════════════════════════"); + } +} + diff --git a/task-1/com/hyfacademy/service/Reportable.class b/task-1/com/hyfacademy/service/Reportable.class new file mode 100644 index 0000000000000000000000000000000000000000..c22ea57d114ba2025b86b68c1343537dfdb8f80b GIT binary patch literal 172 zcmYL@F%E)26h!BvvTC6gUcgQp_W;J$%EUxY@L9hI0oJT530Jf503OP?#DZor#mk%d zd|z(>drTA}!phi6-`Xo1zDU*Thqxv;qR(=-&U0Fd!jP~ixM5v#o#|6ri1CD3Cbc;B v@<$2F_2$@PiFbLO?FiGvKAn+6UJ7B}d$%1M69|Lw2cR%BLfkc|kP*f|-&QT9 literal 0 HcmV?d00001 diff --git a/task-1/com.hyfacademy/service/Reportable.java b/task-1/com/hyfacademy/service/Reportable.java similarity index 68% rename from task-1/com.hyfacademy/service/Reportable.java rename to task-1/com/hyfacademy/service/Reportable.java index 9b17f07..36f5b22 100644 --- a/task-1/com.hyfacademy/service/Reportable.java +++ b/task-1/com/hyfacademy/service/Reportable.java @@ -1,6 +1,6 @@ package com.hyfacademy.service; -public class Reportable { +public interface Reportable { String generateReport(); From 72f861c4871f59bc2a636dc31b677766ede7e6f0 Mon Sep 17 00:00:00 2001 From: Dagim02 Date: Thu, 14 May 2026 22:31:27 +0200 Subject: [PATCH 08/11] fix: replace all error messages and clean up PlatformService exception handling --- .../hyfacademy/service/PlatformService.java | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/task-1/com/hyfacademy/service/PlatformService.java b/task-1/com/hyfacademy/service/PlatformService.java index 159950f..b973a44 100644 --- a/task-1/com/hyfacademy/service/PlatformService.java +++ b/task-1/com/hyfacademy/service/PlatformService.java @@ -34,7 +34,7 @@ public void run() { try { choice = scanner.nextInt(); } catch (InputMismatchException e) { - System.out.println("❌ Please enter a valid number."); + System.out.println("Error: Please enter a valid number."); } finally { scanner.nextLine(); // clear buffer } @@ -52,7 +52,7 @@ public void run() { System.out.println("Exiting... Goodbye!"); running = false; } - default -> System.out.println("❌ Invalid option. Try again."); + default -> System.out.println("Error: Invalid option. Try again."); } System.out.println(); @@ -80,7 +80,7 @@ private void printMenu() { // --------------------------------------------------------- private void addCourse() { if (courseCount >= courses.length) { - System.out.println("❌ Cannot add more courses (limit reached)."); + System.out.println("Error: Cannot add more courses (limit reached)."); return; } @@ -90,7 +90,7 @@ private void addCourse() { try { type = scanner.nextInt(); } catch (InputMismatchException e) { - System.out.println("❌ Invalid type."); + System.out.println("Error: Invalid type."); scanner.nextLine(); return; } @@ -104,7 +104,7 @@ private void addCourse() { try { max = scanner.nextInt(); } catch (InputMismatchException e) { - System.out.println("❌ Max students must be a number."); + System.out.println("Error: Max students must be a number."); scanner.nextLine(); return; } @@ -116,7 +116,7 @@ private void addCourse() { try { hours = scanner.nextInt(); } catch (InputMismatchException e) { - System.out.println("❌ Estimated hours must be a number."); + System.out.println("Error: Estimated hours must be a number."); scanner.nextLine(); return; } @@ -133,11 +133,11 @@ private void addCourse() { courses[courseCount++] = new LiveCohortCourse(name, max, start, end); } else { - System.out.println("❌ Unknown course type."); + System.out.println("Error: Unknown course type."); return; } - System.out.println("✅ Course added."); + System.out.println("Course added."); } // --------------------------------------------------------- @@ -145,7 +145,7 @@ private void addCourse() { // --------------------------------------------------------- private void addStudent() { if (studentCount >= students.length) { - System.out.println("❌ Cannot add more students (limit reached)."); + System.out.println("Error: Cannot add more students (limit reached)."); return; } @@ -157,7 +157,7 @@ private void addStudent() { Student s = new Student(name, email); students[studentCount++] = s; - System.out.println("✅ Student created with ID: " + s.getUserId()); + System.out.println("Student created with ID: " + s.getUserId()); } // --------------------------------------------------------- @@ -165,7 +165,7 @@ private void addStudent() { // --------------------------------------------------------- private void addMentor() { if (mentorCount >= mentors.length) { - System.out.println("❌ Cannot add more mentors (limit reached)."); + System.out.println("Error: Cannot add more mentors (limit reached)."); return; } @@ -179,7 +179,7 @@ private void addMentor() { Mentor m = new Mentor(name, email, expertise); mentors[mentorCount++] = m; - System.out.println("✅ Mentor created with ID: " + m.getUserId()); + System.out.println("Mentor created with ID: " + m.getUserId()); } // --------------------------------------------------------- @@ -216,21 +216,21 @@ private void enrolStudent() { Course c = findCourseById(courseId); if (s == null) { - System.out.println("❌ Student not found."); + System.out.println("Error: Student not found."); return; } if (c == null) { - System.out.println("❌ Course not found."); + System.out.println("Error: Course not found."); return; } try { c.enrol(s); - System.out.println("✅ Student enrolled successfully."); + System.out.println("Student enrolled successfully."); } catch (CourseFullException | AlreadyEnrolledException e) { - System.out.println("❌ " + e.getMessage()); + System.out.println("Error " + e.getMessage()); } catch (EnrolmentException e) { - System.out.println("❌ " + e.getMessage()); + System.out.println("Error " + e.getMessage()); } } @@ -247,11 +247,11 @@ private void updateProgress() { Course c = findCourseById(courseId); if (s == null) { - System.out.println("❌ Student not found."); + System.out.println("Error: Student not found."); return; } if (c == null) { - System.out.println("❌ Course not found."); + System.out.println("Error: Course not found."); return; } @@ -261,7 +261,7 @@ private void updateProgress() { try { progress = scanner.nextInt(); } catch (InputMismatchException e) { - System.out.println("❌ Progress must be a number."); + System.out.println("Progress must be a number."); scanner.nextLine(); return; } finally { @@ -270,11 +270,11 @@ private void updateProgress() { try { c.updateProgress(s, progress); - System.out.println("✅ Progress updated."); + System.out.println("Progress updated."); } catch (InvalidProgressException e) { - System.out.println("❌ " + e.getMessage()); + System.out.println("Error: " + e.getMessage()); } catch (EnrolmentException e) { - System.out.println("❌ " + e.getMessage()); + System.out.println("Error: " + e.getMessage()); } } @@ -302,14 +302,14 @@ private void viewCourseReport() { Course c = findCourseById(courseId); if (c == null) { - System.out.println("❌ Course not found."); + System.out.println(" Course not found."); return; } if (c instanceof Reportable r) { r.generateReport(); } else { - System.out.println("❌ This course does not support reporting."); + System.out.println("This course does not support reporting."); } } @@ -323,7 +323,7 @@ private void viewAllStudents() { for (int i = 0; i < studentCount; i++) { Student s = students[i]; - System.out.printf(" %-8s %-20s Courses: %d%n", + System.out.printf(" %-8s %-20s Courses: %d%n", s.getUserId(), s.getName(), s.getCourseCount()); From 56caf05e50deee409b8d19341b53eac6aed44c94 Mon Sep 17 00:00:00 2001 From: Dagim02 Date: Thu, 14 May 2026 23:02:23 +0200 Subject: [PATCH 09/11] feat: add average progress calculation to course reports --- .../hyfacademy/model/SelfPacedCourse.class | Bin 2522 -> 2663 bytes .../com/hyfacademy/model/SelfPacedCourse.java | 13 ++++++++++++- .../hyfacademy/service/PlatformService.class | Bin 8251 -> 8307 bytes 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/task-1/com/hyfacademy/model/SelfPacedCourse.class b/task-1/com/hyfacademy/model/SelfPacedCourse.class index 2ff06cbe34b34153e838d0e9b47270bd8b8e3994..5f1b8eb153be95ff313f3d3a068340bc8458c2d2 100644 GIT binary patch delta 551 zcmYL`%}*0i6vfZ&(0OGj2vbC1O7dKk1u<+2@r#BSEP)*h6B5El3)X^^7G_En6;bpr z;O$tl=~j_6qzhIoz@3SS3I6~gA?#R4M7Z<(n#DOc=lkGw!3j3z9o)8HPt>a*E%vq)%?a_Eu#_uZEiLTO#J zjK0vl{`5k6dbYUi1G@K8$4Rf)B?k*juJOiy)Omo%%gVln`j874spu;CP zb=ZmBu>Gz|O{oh`93*Z*lI+@1A>d-+OL3ne!COL8CEQ zO#Hjm@5V)Mydp{#!_ew5pf1Xmd83IJYGzD!r%`9zg$W|~o%T#!;<++19H6G39bNS@PWA+fS1}k{U@q>*eN&#PFv#i?kzhp^v$nsrM zinUmPwA4tca4CqM)F0P#PwUay+)92~iyF@?X`K?*2$iFyOm=Qgn-i%Egf5Hh?ed$q z2X4G6Undr{3ePD47O?!+l{D4ypOjk^;x{VC$-{eH=?WEgT#^Wc9sa6oi~r^*w@YN> zlT~9!9113>jNofIekS`=HgPtqFC-=&J)_MUsn$~xF@hSkROvY*I-gt7=QYKSYI5o+OS&qJ;bnK~)Ks7t{nb@MgPXB9n!P{vr9({zKsrTQGbrkXd@aC^TH zQoLf6BsxNnN+*pHLAhTSyN#aBE-!1#j0X8vYMW!2P{-YB4gb}{c*J{(8oA+3Q;c8s zwz5NTf~axhcdvs)>W}Jk{Y~PRYJqzXHab8Ib_Q8c6T^cUM$Jl()A|&)3kf##l_>ZH z-?M_D#eYoDE%~QRy3cFgr6#@-7!)%v2A&j|Sg=Pm2iPG_YQv0$T@1b`iZ_F){}#W& zx285e7)tiW1jdgtVYeV-8zFp*2H`j3GMRib?55zlUD0F1b$nk$uHAv$5nWdV@~S}Y z2;>+4gM7pi6bip%>JL9G^f%Ndgo?@95B&Q;0TZk6C7l=1A9NP*^CtFrT_h!%XCg0) z<{Ob%vUv{*onZKLis2WJ&@)?N6*`|6o7==YEb!`qAQP{bsN|>ze55Ymx4%HNdhp}z zj&;#)6a0Ez^Eq?Xa@h6|rdg|AiRCH3sH0e~(4$qUrh|Rq=)ThCYvT3$|%{yny#J(~fw7yqW1T z@%TTaV5UIzr;GbvHTQVsUom{UK6T$6`zK+i)}qojY8P(^4xyCjaM9jfw0%W8KuJ-T MMJ+``bPs}m0|fjhPXGV_ delta 1258 zcmZuvT})eL7=GUN^qfOIK!0f07AOZwVL-bwa14qw%a~iH!gPf!%ox)^M|9i4(XwUU z5RHo_?!xSg7c*PTE)=uH7{paYnZIGnyzyceYVZ%eG12Hkq6y;W`<>RGCHCU|-t)fC z^L)?y_FLWl?soUJn+ul#Y@_};_W`G3uADnHf5;gjB`UL1$~O)r!I_xS#uTqimbJ9f zB$Il*Ux`c5BYKSbLY$c+)*);1xMhw_PEX}?X5qx+xlKAQ61*#CPnrXzYIb})H_qkP z2uZ24Sn-Q}#r(W`narTn$rPr?b5_B$CJW}l$!SZ%zas=B{E{)~YLaroS-I+xE=}=! z<&Z02*LGD6syc2Fmc;q0kJXhIp4W-QMDg96w^sNz~_bdFZRO&chrQP`je)$(Q@%O1<74ri^2)E=vlo5)R(_{`Iy z)*BS12C?orL2+@+`#@E@n>r|=QPRKyZ4%eLpXi;0s6F*rU!C4XsJB1f^VLT0B)H@_ zL@@SPR&HwGa5kUMexSM(BgTs>d+lJSf_e$t47XLnUlq)0QZeNUF znG?Jc2M(0EFNRNY(~R{0xA{4~kS4^DNP0^nbAoVjT!b5!5yAUt)|JsMx|Gv5uyLhVZt>6uyh`qB2 zq}4aDHLMo#(*kaYz4iSJey;u*2K%GU>E?A9v`@ny!y10}vY)Y%D*JqrCwK69H}icr zS&UCVNmaWbjz&X4$J0c!w|@K^F~@KR>%SCjospwfz_E^6T0@wX4*sKjn!glo4@lni zBDS@^iOwQ+-{0O*#FvAKD==i|TfS;8@gcd+z?b-dTtmrsNF(f@wcCDj%YNxbj_tfM zPy#w7;h|I?g4Br!ZAKGyAx2w}q8{{7FLqGc-ex77eerrkAtX(dMS Date: Thu, 14 May 2026 23:07:47 +0200 Subject: [PATCH 10/11] chore: remove .class files and update .gitignore --- .gitignore | 2 ++ task-1/com/hyfacademy/Main.class | Bin 353 -> 0 bytes .../exception/AlreadyEnrolledException.class | Bin 1080 -> 0 bytes .../exception/CourseFullException.class | Bin 1055 -> 0 bytes .../exception/EnrolmentException.class | Bin 268 -> 0 bytes .../exception/InvalidProgressException.class | Bin 906 -> 0 bytes task-1/com/hyfacademy/model/Course.class | Bin 3804 -> 0 bytes .../com/hyfacademy/model/LiveCohortCourse.class | Bin 3370 -> 0 bytes task-1/com/hyfacademy/model/Mentor.class | Bin 1910 -> 0 bytes .../com/hyfacademy/model/SelfPacedCourse.class | Bin 2663 -> 0 bytes task-1/com/hyfacademy/model/Student.class | Bin 2470 -> 0 bytes task-1/com/hyfacademy/model/User.class | Bin 1320 -> 0 bytes task-1/com/hyfacademy/service/Enrollable.class | Bin 987 -> 0 bytes .../com/hyfacademy/service/PlatformService.class | Bin 8307 -> 0 bytes task-1/com/hyfacademy/service/Reportable.class | Bin 172 -> 0 bytes 15 files changed, 2 insertions(+) delete mode 100644 task-1/com/hyfacademy/Main.class delete mode 100644 task-1/com/hyfacademy/exception/AlreadyEnrolledException.class delete mode 100644 task-1/com/hyfacademy/exception/CourseFullException.class delete mode 100644 task-1/com/hyfacademy/exception/EnrolmentException.class delete mode 100644 task-1/com/hyfacademy/exception/InvalidProgressException.class delete mode 100644 task-1/com/hyfacademy/model/Course.class delete mode 100644 task-1/com/hyfacademy/model/LiveCohortCourse.class delete mode 100644 task-1/com/hyfacademy/model/Mentor.class delete mode 100644 task-1/com/hyfacademy/model/SelfPacedCourse.class delete mode 100644 task-1/com/hyfacademy/model/Student.class delete mode 100644 task-1/com/hyfacademy/model/User.class delete mode 100644 task-1/com/hyfacademy/service/Enrollable.class delete mode 100644 task-1/com/hyfacademy/service/PlatformService.class delete mode 100644 task-1/com/hyfacademy/service/Reportable.class diff --git a/.gitignore b/.gitignore index 2b76d7c..fbd93fe 100644 --- a/.gitignore +++ b/.gitignore @@ -155,4 +155,6 @@ dist # Vite logs files vite.config.js.timestamp-* vite.config.ts.timestamp-* +# Java class files +*.class diff --git a/task-1/com/hyfacademy/Main.class b/task-1/com/hyfacademy/Main.class deleted file mode 100644 index 20071461a17ba1880b042b14fa65b4d63f8f1cf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmZ8d%SyvQ6g@Xd8xzxq&z%c5(khw{u(}ak#Ro(R;%bsk>y%^yV^Zj6xv`+&2l!Fq z9bFWhf%`h=9_Gx~_xmS+3+#n(;QH_)w9qE>=VBq^Lg-n1m(68f6WSxCReect2g9+C z4Z=}gmGSd(DsnNA_R%Hm{1dnlN)x=R zY9a}}L}_{3l$kUSA}e^}mB0A@;3-)@FRhKzv-9DY5T;dQa(S&RIj~}9mWM-h*quEN z$ok{hH{CZMZ07G14X=ZnP&YYc{+3!EDz5#fKdWqbEi4@Wd8$KV1mXbEtZ(ZG| zRj9etA;aTJ`E(b0h`d(HVsbv~3w28MyGi5&6_bzAw3{`ft&xg-2>LwvBs zP`gSt4rQP`Ur2rUE5wj_>PlBXXIM*+ub$;#V$r~oi6WL69$lOJg%=3!j3*MFaAFFD zP>&oEJ?6e(D9xWg(kPj@842WVH3~v8#qK8@X`Ws^V@S7@L&=M6SBm42-xa|r?|Kwj z>IvP6>#tT4ZjfP-aIKhhzC#;Z9Jx`F?dytr7&VMx`K3}i)Bzv95xTFOu$aM49(Q3G z*p2#rkD>ghx30WU12JpybQF%btyM5)_!uvF2An2+#iiqku-sN^Fd8OIM(k$(BA$+i zA_4v`hCk_^3tKniH#1Ao;-1%WwP$Up9 z6~*usH){1u6lw>TSoutU7}m*_kS1%OfGlOn5jRhNHgIc}XPZ2+iTnkHPrqrINzf#_ jnFw9^7h0s#+$Q=0ws41hmZ(wg``Dvhr1=09)Uf#z4g4HU diff --git a/task-1/com/hyfacademy/exception/CourseFullException.class b/task-1/com/hyfacademy/exception/CourseFullException.class deleted file mode 100644 index 8f1e18229a367f7bb84b2cb6baf686db1eed6c12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1055 zcmaJ=%Tg0T6g^F19+QDUfCw64)L>p{_C#HnB4w%o7ol+BsxxVlAv4{nnGQw%#E)>H zRZ>>5@B{oP%R40MXrha`xBJY!=RW(}_nWT(Uf^kt)RKu9;tY2^J`_zQZLZ%sdO)W@ zbEyM{Qu*kDU-G)kWxw9hz9ajMc4ZzjkU%ntl!-J9hMKLs`e1U-ZQc{!q%N*(G188b z^+V|^*Ar47{)8A3&mHOLmkgT=qE*h)FtMD(iis>%8TS9l-Be>g5UsK6M#v5O7Cqsf zV93p99A3p?TxFHN*aHm?kMy6W0#@Z+PLvM~`4snucWMB|mhWt(XvxV&$&jZrr zP0pW@`S{B%aSLWi-ot&8VaTZI+K0bP*D0FbE24;2!79Ivx1~x_psjS4ZME#t^ymbAb(!7$)+*H?!Xs7w8Z4Zl+@fx{ZyEC zeb>CA{G8m>yb>f6S)B7zQW+WeeKPY>{YrC_Qj0>_F#(03#3rJpd#*fjlLkC`g=5OM5#5<3_MN7mx&bmI0^^qLLfPW@6w00BqGj A4gdfE diff --git a/task-1/com/hyfacademy/exception/InvalidProgressException.class b/task-1/com/hyfacademy/exception/InvalidProgressException.class deleted file mode 100644 index 3629594812640a7588113e4e4eec8bd5f4832042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 906 zcmaJ@IeD%Dbr(D){5qNI%^_>s`ygHOZm6}Ifoklg|0pZFtu zG0~Xx!5`p{GG0EaD6Pq4?#!8c&di*9fBZc84&X8FtaFH^v4mxT%|Q03rj;Yj8_#rk z6&a~aB(SktFEx(kP?mkEI_0JbJ=LkE5Qk+Ukwy|JfxC_l%H7dB=}4D?QJFqC)Hj}1 z&Po(UM&Cj#$3HD5*%MHX%e>@1jZ z)*mhG2yFj9m0N3S2ySo>#ks!)*2i5m?sQ%!u{J?~3h!f#=JxU@4B;Ct?B%~=<@1Dd zk>?Co3P>QutSrw0m#{Ho7dSGBIbX2y={F@l0auxLnXwo)ab+SQu*E0W`B9h%-9!<$ GvGogX6!J{~ diff --git a/task-1/com/hyfacademy/model/Course.class b/task-1/com/hyfacademy/model/Course.class deleted file mode 100644 index fd1c8f4bb9462eac97b6c4900981a22dde5e4c89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3804 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 MOzIEt5k5itzvg(v8~^|S diff --git a/task-1/com/hyfacademy/model/Mentor.class b/task-1/com/hyfacademy/model/Mentor.class deleted file mode 100644 index 55b6b40249c2ef2c8c8f85cac4140331ffc9025a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1910 zcmah~TUQ!a6#fpk!EwBV8WUoI)2I{%4O)9ku}KZZh8Cn1l9Z+oISxmh2s13^;EMmG zuYK=BZ#G%!O8ed))zv)=QKHm7aL$>1`S!Q>KKt!dfQQ2ddO%>Cna~3%jF}$TEqP~j zw4q=Fl>xizjT)_}KPce!NC0Z_Q*D5;-Rv0p80*Ys*=t#@4vjw~B zwA$4B!fTOA@v|CMu}0l(3c1bO6lEqgqUH<;DMnJdY{{kmT(tKj&soK!ByVBK!j5)fc$*99N9UE8IB7yb(Ocg0XUp^9@G-5k z2-7-=1VJS+jto7=tC%Kj4r_xjbF?$E3dW3|P8=hB(G0B{^j{I^^ZAaz0%Vafe#1iK z2h99|<+|}ZZoS02z;k@?7b)hAI%&TRJs~ogs>dWS#N;ZXh+_iRXidPtJnndr!Q!|} zhY-bErr)R7q}8jz4ca|&VGsH&y_=-Ehx`cBg&)bsFM*#)lDWcB$xNJ?1mm+R ze*g^TN`t9o%tCW!>e4OF|C=%Y@Lu z5Eh(=JywN`?Ub<@3d8oYKF3p*nb+MbC3lvd99K78lG_@~^sl$84PDqOVVjKY*ul`b z%J915@-jofs=6fI5G`4Waq`C{uee@LhOmp_{fD32dWzpLy3r$Hw~Red8Mb&HthJLt zstBtMQ-ooC5c)5Nu$N)Cs;0&!vRYcrrpL#!IrZWEZFMEgVanfr8Bz2xv=_PC$WW%h z&=qSESp^I+k(GXizGh0-+aWX@lyOLC*to1=R4;Rd3Na>LCuAHEuRHR3MbDSqy5{O` z)lm>YOhGF;LpUx{a(n(MenU9Pps1>rn;1%u=G5`**u`vG(}V-3WITt{RB7a2+O#dh z@M_(p8VkhwGoncbW$HcZqmbiP3*0N-JyXNY+oi#g6k;#PIEV8Ln|!fx+bY`Jq0(=e zqMjLI*r}?~!>1ftjvk@)cp(~9iR4602^ZEB|Jd|(o_E8zgp7n2WxOO}-u)yK7~06A z35VO6f{+`LF)D;4qKXWLF^-odWMyc`F>GFGw2bNUBDaaPrW;j0HX{&ZO|SYKNfE!x zGOmb5Z?E|7o!4#A0+TXc#T22CSLt-eV3V4gT2*rm7n6SFu5Fm4LV!o5^g6+fD&ZPK z?_<7`pS4n+C$hX^*{(iq5CCp(qA^3j$IzN0q@>IYmrOodEl+bh*AQ8$@?5DF`EsGAQwu=+O${@k&NYX3d)8K6E$0^n#vuExXR}*=i?!#>SqJ$p8>UJC!b70O+pMaYA?gJGL!u$nJhG_VHRQKEa>@rE@yg?V+ar_m z0o5B*KKWh3V^uv@E2>M)DA=P6a>k^rrVQP2xFg{MhUmKRH;bx-4+*EA%t}4bNCA4O zUs?!;-=JTMn7TA5Tj_ZNbXuqBbck@Xm3BFPu=@wFc+dBczNIrmp4JX}3xp9QSs~3( zK%Xxep`Fp&fU@zMWr3ha>ZFw~Gw$^n!|{8N7O@F4kM+VLc-6`ol(vyKh3%ICFw$e7NO>XG<5o6k9Fy6C(32gzdT)D~E-GA>3{>FWQ zGu@3Fm58{jd*IsO%@$($Lr_156u65vPp5H)gt`}Tb=g4Sr1F}GQj3>{8hYq?7bP=- zPJ+4}bUuLHI7t&f4HY>`^i}Moaq#vQ3(Y`I5rb&fa&$<$> k)80n~GDit}(_0;Ht$OPXZ>@XlJ7kk6CYsKe$4A)tA2(J2mH+?% diff --git a/task-1/com/hyfacademy/model/Student.class b/task-1/com/hyfacademy/model/Student.class deleted file mode 100644 index 8b8127b26a5a93aa847a612fc11af01c7986f27a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2470 zcma)8Nq5s$7`-ocBBO`^VQL@&K>~OH%+N5@2^2yoZbP6rgeJ5UMSeIYvJ@EX1!PjVcG2-=19q)*>)zxxgH?|;Ae4ZtYwrO+XeDotHK zwC~9AvWBF<#=F*iEALotC4Xh^uC#-7=z^vpWndk2fqvVo<>!~~ShiJ`wWWN`D@!L| z3L0hU1_GMxHQYef1w>JYf%O`C3~azgflVu(i&Uv7CGEcDG~|^#0^8EX%)}avf{tEn z*09CER%}~^t`yX(ZbhK$j#sZ)41GG?W*@yR+-ws?=@iw;afnVTGMKb#QeaCuhRj~JR^Gr792MAJvlbZMwXNVrHJIm}A6Ra{EcV9~E5@0Q zG>)sXd?>Ir&SYB008SVqN zuDujZ#mMO;%Pl+7ADZyIg~noGZ86#;s|=@>7G;e3f2_!+i!sY_O4UFXQkWOmCrsON zT`w@hnwnMDtg%(iVBT`gVbc!Rj-SF^f!)Ha`esX&1EjPg4fBBDQZkCJE9+y9<@?gt zP^0@b9L1%s!Q(c3zba=x;)&a|i(4K@Kvy3!-gQv6H$1s4d1{;ljx4WN_;i)B1kZ!n z+`(Rve1*hJ;umzzByazU&gbYZJ;$bJ*q%+j!oU;k&L*B<@Mr1^T7t8je*&;By>mdf&-YP$SX1|EHEwS18)d>ot@JPr-PE&Jf0}>|+e3zQ>lANY7-SBKrb| zfoC}OIx*U>-u*zNkFmS|*i#JW_|53u;8mqDz*FVhsY1V Bai9PI diff --git a/task-1/com/hyfacademy/model/User.class b/task-1/com/hyfacademy/model/User.class deleted file mode 100644 index fada0cf31e0f23de47c5e90aef4b9e76ba0baef4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1320 zcmbVL+fEZv6kP|VopzXVDHTKo3!;|cGTs%7KF~<4K};;-1M%U|9${cEWagBli67!; zXcSC%@B{oP<32NlVrhtRk~w?Np0#glpZ)9i@lOEHP&UwmULBf=6w(ZXyZnILF88M%_7!DJY#2cEst`pE0NA-tCD1r6ca?;;U0Xg>D@ zLw>a#vL-{v-!7{l{U!!fgp}~O<0{LLiM+C;o8(??7-TA#xP%b~eOt)4flJW}rJ3{b z^3=*@6Jxl-FzWF=Q3?Dym+u|9Ls}%cFC&ImrSqQuV(F4l)ppIqxT?*d+GTi%QV+rQ(8B85aLH{|0ecAz~Q@RvllgHN7nnuJbL$hhkewirI2?e_$j1bxZa%;OvlAQ)Z=LmU#B5SmmS&Gt+9ERznUg%#EX`Cb@RLc4e{mZFqIyMf` zd8;cl*9k2U^mbS1U?+4`V`_!tT(mCas9Lhn8|TbhM;KPc(3?BPDA4JzN-mxHwHr9X z)lTRX@iqh1j7p)P>PczeFwv$d=~bir7X9qOEapfm!sqF|kB9VSkoE{q@DyWz02weH AUjP6A diff --git a/task-1/com/hyfacademy/service/Enrollable.class b/task-1/com/hyfacademy/service/Enrollable.class deleted file mode 100644 index f535c31b05c8d6fe4b3272b2e3e444b4f2d2bcea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 987 zcmaJ=%~I1)6#hbB#?jvYHwWKq-^U0u>^8=B^JlADg*`4BGj z3EaAsg%99k_#om*Qimdpi=3aE?|k>1FDE~LpZoyu6i*hALDoRdL>_a5Ek_OQ{^Y%I zL{|qz^#A1KcgN1h}s_oPm9*=?xE*MzK9YsE|j6Z0|65<~XIhmMZA($``9 zYQcnwMZ%mLHY3kVYTg!5BFtBQef(5uzG}A%xbinW7)ig(EnYRTf@_4;p%}=9@*Sby zxVq0#s0C9KEUVROAB(ZDJ>mE4jt*SESFc?>GO)_cpCJ#9j-|uR=Vd$`&u+EkrG!%3_2tWGcqD_vRJ=tlbO!rkl;j2~ z=UPgeClos>3LM#VW4%jf;_t=XbHy{Ibf^O{+LyYox?yP!J4M{ZJp)!OSdCCU8`Sm3 zY9Ob|q#8Dbqg5~=e70tUngUbO7sBs)GOV_h8bqV|3~Va#%*naJ!^ucq0)IDyPo+Qi zk){+4;dvcb%X$I#Sw^yn2xiOoWzg_M7|PJV9%1LgbeA=4;1OZt|4`n@bV6R+46gIa z0r?!^2G+p$$4i@d{yh@U`^^Z#P26I8n`4PAN5J;(cW|?8jl>oSUr;D7eMP>!d;;F) zZ;Z-do$V6WfSFB>w%BiQwvNmx(~`lM4ACi*CUKV7ZF0d@QofBl>L<|Aqv;ik+>o$+Nby7Q}dD&^wHc68ju<7sKnUU6F zar;NU&-yfb=046n?{m++^R2gzp8~L6TQvGx7jc> zno3(k0y)vRKuM>y)bPQi=v0jaWe`QZ`kA zVtaNbD_qWpRXSEnXDS#@M&oJ9G$J`%tK(`k(Tx%#G}a_DJ#v!6jD~drMXiI0M9MPE zxRDr6M-%ZT!-oyH#*1rpv|u9%yMkok3gjtrT-uRBc`+A`#s`|Kwo5tNbhM*`BE+rz z>7eu(`gBl^Y}OIPd*~B#q%#_~1ZG!O+45zs<3*={F=+v%$*yQ>$V`U^+xLep#ju8M zfyM2~WFpyQ^u#Qa($Mr)(lCv^W-J;p;v+-5tz@l~t4GIsrBGhQek?9E7}C+JG-yU5 zv^?WV_HNg4z3la|*YQl*-KS%RJK1(1+53JSACSGe6;CE&8Pjjnu}coj7#WV3X{#rh z7)V;Fl*HMsBdmt@My-7{_EYIck^#W;CwUlaT7k*Ko7IUFQzo zckbXP-_`$5Yhe7=pF4PuVgGIJ>o8hcTiV*Y`i#~s+qQ<yPO#YCu$MoT1Ogq3$`7^P_qqtWhkGMt7Fs;MjNUON$K_%L&S0FT4Oui$uMIv2bV5$r@&Q)vBnv) z`7@Hr*ED=YV2)v|&A@ZW6Y-CkaSY>X@`G6ssy!}_Td3MEcd6+ z&@ZxN_F%ATyM{*v{Gqg&OdB$%8I^tftLf^hX=_v3`7CkUrMI!R z3r31qRz9cWI8IRIL*^bTFdjD3*GJQXd`qRxc$)chX%-q;c3TZ6uN**jI!a{``ZTp? zZ-f&vKQBFARbPf9vWCB60olHP*h;3ODTaj)W%!2F!5M+8v+#Gh4leJJWkwmsiy-iv z58uMKz4#j)e~Z6+dsU`t5_VZPkC?Gka3Icv(8?m=3bo4)AH4W`9seLzJ&mfi-7y%^ z@Lg{3t}TOYG77)XDNeY{4!J$Qq~o9P&$N1fH0~A-8%Ki?fyOLyR%I{09V)88`+<%h z;$Nszxu8wVUa#T*zn+cOtl?FLuH)FQBr;LfmMaZQ9JjLP6ySr=up{Q#jM_|2S1l!y?u)C$J-F<&M?CtBx z9BFOoX=x4i_VIWicrt&l$eWTG?6WyfHJb49z{Em8o)I!4!z&6H3R9fPJ$&1RySY1N zO%s}!rVCxV-i!f@XG!j!_OK>qa4+Z`jHaAY#fT)Vlp>KD8J3m5Qz2W7ueQL{G1pT_!>!y)U0ibw^IIK^VNE=nX>FMYV1b&2e|N*8nG`HZYM zIgWzG(>^gzlzK&(F6N5`?g3bx%6Nve2CO7k;SplQ+S1SRuriprlQ=V&wl)Yu7mGwW zZ#2|Ni*wgyNmn~Fvbw8gyNd_sjPqu*fTxugA55$Ayx6S{biGokJXIz~;@pE+kc9Vi znZv5rD=OWCt75%(FqznAPxpmrzOdC1mAJE~T#eMq!zTBNjfq4$l}?(&T~>N95lPL= z7d1XnE9$(Wp8Kt6U_GVIrE2wPd~afpRcD`m?Jc;&4D&vMb^iUCQacmvMK_!ANX$wt z=}aW{j0`ttXu>&0XY{-cv6rQ0mg!g4WhRrYEdN8%wAHMM6--iYVh%H5%KCC2O9uu~ zlR;lyMXz$U@od9u=m=`BkaMr*Y2Mj51b4}xyeVmonW>bO@(NxvR9vR5Y)bG7-h3^1 z=c)84TVq(n-8P36ke9!_|KeMYys1)@Be^?@U(A4jVLH(fu5CEaqgYaCnbG1*txeev?3AT-4Bf%TNyqo3UQO9Hq2duz-E@sERTw zWwOHXVq3V|Ls;-i^NcDVM%eQ92cEZgF;6uEWyA##;IMsU(YH>g6@Cavq z4h?vkH)=<)5?{qCoZ_9?^H_s#QXMaHh41hxY$+*MqVOVe#3hp8J*|(fEWEfbG z75UDe?mbV_=Ez$&$8nCbB~=`ik`LRG7bP8-cHmwI?swoV4*ZYs)N4x>_kn8^vy?f;u>|iOSiG9^SgW5AR{!aUBNHNv3)2 zWs8urk}KrXQI^wzX7VXG^%!(1&c`J=`EoZM(e|!Z8o8uP_WdabU5`8LzQ}=3PE6jU zCjR+EyLH1D<}`War2DdAmwFyWj~xBfB+6=!#L1Jr_h-YA{092S_zur52I~nt&{sXb z#B&S}g~kvn&3hE>68Djb6*t)oJeJXsciAG3a}mGCpLYy@$z_x>KJO~yN%_JWYCiq2 zlIq-n-LMEhfluKOq3z92(j$Sb4E_*3xECe7QJjyR#Mwox_oIq|*MJ*%Q+p%*(4^_Y zG*5&W{ai81HRD|MCJbN?5{O|Rh8WHX+=iR+5hO`%g!FD9#l3itqmOg+3mC;y_#i#~ z!}RO}c!{%L#qIbx?qJb-C*I(#&K%y}`0-J(h}SmdxLX8x3nIP04!)AD^!JOH#SjSC zA>if7N(RA2-jDBc;CWPBK!*$hUXeOM@C37$hl}i@BK>?yTn~E6RoWLP)!ixW@yukq z>jaAXmRBFcv)vL^8q=?g>8}ZKYRx!~9>-SzrFQ0dl`LwRS%G`0-utNDgH-SRRPQ0G z_W_3ggADVBaSc90zkiepeoTp&3l>5-@(R~s`x|6irrk8@mh)NQvi((;?NgI%Dz?8i z*;c;&^~rYk36xQcnq&BDm5LWgLCTdN<$jNp#P1o$+2eR&iYTkOMF8|Ne4e5_K~bKf zC{I(AFH)2*QIuzxCl52Azsw8TBlMGTq;M=#Bpx~)kxUAh%jK$a*OyTu|7T%HrIs~P zi_6FH%|r0n?Pu=F5o4EL5zlb4t%pR$L>J&I9_h@)SR^=_!VhYzsG6)$ZpZS&dJq&%H|jXD%1G$#_{jR@n6bN%y*Y} z%J|>R?X!=uWy9AMjPsCbYjZp82<|PsIbd@B9+UI;nVet3Qr-~M;AO`C4;cGDWbD5} zM}3uP`bS*h$LPjSxbEv*`KQblKV$U2&P?!g7AUVVnt!3xQ;xh#M9kwZ#RygZ#a@;| znBL>XFMIjSqN4ci!BN|3aw`jxvwtYH$#s4`q3+hzGJk#)%OrhGa2TdLFTbm8G9 zulwrvp7wicN~q`G$=Po>%9p7A{BgW_9B)l1-|eJD?9Rg!tcMDUFxg6YfTBg11|>Ye zbSL56c!-<-1qF{x808L{0JN)yU(+bRp;3Ozp5M_Zzo${&pi$1#C>N;PH))i&Xp~FX zEOO8z^3lh`n<=Iv!i3l_G{i*#_OkC*;llyKk8$j7QHcA*EIhjJ^^}+++B;sbU8l3RDfv#qMA(ApitCdj;O~x(Llx;u|%vwy;#jJoNLi4niO-> zk^3f=s7UaZ$i0bQ$s7j9`6e^sjgmoGKq+!F9ev3TTVG6-tEsG#(nguti^Z(`lgR1I zWePbO>hn~Oi{emU9>JWi2!Ci?EWBPR^aXd-N#0dH7uS;a7AkZj71~C=+Yt~QSR*#^ zc)S_yBFOKX9dxWVY!{ulL3AlOCY0QSTxL6IqkvdWI1e7GLx@K8yHfqGR=;b7tm=In LYZmLpHSqs0uB$^i diff --git a/task-1/com/hyfacademy/service/Reportable.class b/task-1/com/hyfacademy/service/Reportable.class deleted file mode 100644 index c22ea57d114ba2025b86b68c1343537dfdb8f80b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmYL@F%E)26h!BvvTC6gUcgQp_W;J$%EUxY@L9hI0oJT530Jf503OP?#DZor#mk%d zd|z(>drTA}!phi6-`Xo1zDU*Thqxv;qR(=-&U0Fd!jP~ixM5v#o#|6ri1CD3Cbc;B v@<$2F_2$@PiFbLO?FiGvKAn+6UJ7B}d$%1M69|Lw2cR%BLfkc|kP*f|-&QT9 From 0fa175c5895ae3870c28cb5a819e40dff2fee376 Mon Sep 17 00:00:00 2001 From: Dagim02 Date: Thu, 14 May 2026 23:16:52 +0200 Subject: [PATCH 11/11] chore: remove unnecessary whitespace and clean formatting --- .../hyfacademy/service/PlatformService.java | 34 +++---------------- 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/task-1/com/hyfacademy/service/PlatformService.java b/task-1/com/hyfacademy/service/PlatformService.java index b973a44..abb5f2d 100644 --- a/task-1/com/hyfacademy/service/PlatformService.java +++ b/task-1/com/hyfacademy/service/PlatformService.java @@ -19,9 +19,7 @@ public class PlatformService { private Scanner scanner = new Scanner(System.in); - // --------------------------------------------------------- - // Main Menu Loop - // --------------------------------------------------------- + public void run() { boolean running = true; @@ -75,9 +73,6 @@ private void printMenu() { System.out.println("══════════════════════════════════════════"); } - // --------------------------------------------------------- - // Add Course - // --------------------------------------------------------- private void addCourse() { if (courseCount >= courses.length) { System.out.println("Error: Cannot add more courses (limit reached)."); @@ -140,9 +135,7 @@ private void addCourse() { System.out.println("Course added."); } - // --------------------------------------------------------- - // Add Student - // --------------------------------------------------------- + private void addStudent() { if (studentCount >= students.length) { System.out.println("Error: Cannot add more students (limit reached)."); @@ -160,9 +153,7 @@ private void addStudent() { System.out.println("Student created with ID: " + s.getUserId()); } - // --------------------------------------------------------- - // Add Mentor - // --------------------------------------------------------- + private void addMentor() { if (mentorCount >= mentors.length) { System.out.println("Error: Cannot add more mentors (limit reached)."); @@ -182,9 +173,7 @@ private void addMentor() { System.out.println("Mentor created with ID: " + m.getUserId()); } - // --------------------------------------------------------- - // Helper Finders - // --------------------------------------------------------- + private Student findStudentById(String id) { for (int i = 0; i < studentCount; i++) { if (students[i].getUserId().equalsIgnoreCase(id)) { @@ -203,9 +192,6 @@ private Course findCourseById(String id) { return null; } - // --------------------------------------------------------- - // Enrol Student - // --------------------------------------------------------- private void enrolStudent() { System.out.print("Student ID: "); String studentId = scanner.nextLine(); @@ -234,9 +220,6 @@ private void enrolStudent() { } } - // --------------------------------------------------------- - // Update Progress - // --------------------------------------------------------- private void updateProgress() { System.out.print("Student ID: "); String studentId = scanner.nextLine(); @@ -278,9 +261,6 @@ private void updateProgress() { } } - // --------------------------------------------------------- - // View All Courses - // --------------------------------------------------------- private void viewAllCourses() { System.out.println("══════════════════════════════════════════════════════════════════"); System.out.println(" ID NAME TYPE CAPACITY"); @@ -293,9 +273,6 @@ private void viewAllCourses() { System.out.println("══════════════════════════════════════════════════════════════════"); } - // --------------------------------------------------------- - // View Course Report - // --------------------------------------------------------- private void viewCourseReport() { System.out.print("Course ID: "); String courseId = scanner.nextLine(); @@ -313,9 +290,6 @@ private void viewCourseReport() { } } - // --------------------------------------------------------- - // View All Students - // --------------------------------------------------------- private void viewAllStudents() { System.out.println("══════════════════════════════════════════"); System.out.println(" STUDENTS");