From 85ba6529dc1998cf26efbb51bbe336f925006408 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Tue, 5 May 2026 23:49:32 +0200 Subject: [PATCH 01/12] project initialize --- task-1/com.hyfacademy/Main.java | 8 +++++--- task-1/com.hyfacademy/service/GradeService.java | 9 +++++++++ task-1/com.hyfacademy/util/GradeUtils.java | 12 ++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index 49a03b1..6d9fd54 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -1,6 +1,8 @@ +import service.GradeService; + public class Main { public static void main(String[] args) { - System.out.println("Hello World!"); + GradeService service = new GradeService(); + service.run(); } -} - +} \ No newline at end of file diff --git a/task-1/com.hyfacademy/service/GradeService.java b/task-1/com.hyfacademy/service/GradeService.java index e69de29..7d0359e 100644 --- a/task-1/com.hyfacademy/service/GradeService.java +++ b/task-1/com.hyfacademy/service/GradeService.java @@ -0,0 +1,9 @@ +package service; + +public class GradeService { + + + public void run(){ + System.out.println("run"); + } +} \ No newline at end of file diff --git a/task-1/com.hyfacademy/util/GradeUtils.java b/task-1/com.hyfacademy/util/GradeUtils.java index e69de29..e600aad 100644 --- a/task-1/com.hyfacademy/util/GradeUtils.java +++ b/task-1/com.hyfacademy/util/GradeUtils.java @@ -0,0 +1,12 @@ +package util; + +public class GradeUtils { + private String name; + private String studentId; + private int[] grades; + public static int totalStudents; + + public GradeUtils(String name, String studentId){ + + } +} \ No newline at end of file From d7bbbccc1bb51c4c254b1c328e6e237a7e22d341 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Wed, 6 May 2026 12:58:12 +0200 Subject: [PATCH 02/12] implement GradeUtils.calculateAverage function --- task-1/com.hyfacademy/Main.java | 7 ++-- task-1/com.hyfacademy/model/Student.java | 8 +++++ task-1/com.hyfacademy/util/GradeUtils.java | 41 +++++++++++++++++++--- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index 6d9fd54..11c1894 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -1,8 +1,11 @@ import service.GradeService; +import util.GradeUtils; public class Main { public static void main(String[] args) { - GradeService service = new GradeService(); - service.run(); + //GradeService service = new GradeService(); + // service.run(); + int[] average = {65,78,81,99,86}; + System.out.println(GradeUtils.calculateAverage(average)); } } \ 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 e69de29..1261627 100644 --- a/task-1/com.hyfacademy/model/Student.java +++ b/task-1/com.hyfacademy/model/Student.java @@ -0,0 +1,8 @@ +package model; + +public class Student { + private String name; + private String studentId; + private int[] grades; + public static int totalStudents; +} \ No newline at end of file diff --git a/task-1/com.hyfacademy/util/GradeUtils.java b/task-1/com.hyfacademy/util/GradeUtils.java index e600aad..e352cb6 100644 --- a/task-1/com.hyfacademy/util/GradeUtils.java +++ b/task-1/com.hyfacademy/util/GradeUtils.java @@ -1,12 +1,43 @@ package util; public class GradeUtils { - private String name; - private String studentId; - private int[] grades; - public static int totalStudents; + public static final int MODULE_PASS_MARK = 55; + public static final double TRACK_PASS_AVERAGE = 60.0; + public static final int MODULE_COUNT = 5; + public static final String[] MODULE_NAMES = {"Java Basics", "Control Flow", "OOP Fundamentals", "Arrays & Collections", "Input & Output"}; - public GradeUtils(String name, String studentId){ + // to prevent instantiation, + private GradeUtils(){} + public static double calculateAverage(int[] grades) { + int sum = 0; + for (int grade : grades) { + sum += grade; + } + + return (double) sum / grades.length; + } + + public static boolean isPassing(double average){ + // returns true if average is ≥ TRACK_PASS_AVERAGE + return true; } + + public static boolean isModulePassing(int grade) { + // returns `true` if grade ≥ `MODULE_PASS_MARK` + return true; + } + + public static char getLetterGrade(double average){ + // returns a letter grade: + // 90–100 → `"A"`, 80–89 → `"B"`, 70–79 → `"C"`, 60–69 → `"D"`, below 60 → `"F"` + return 'a'; + } + + public static String formatGrade(int grade) { + // returns the grade as a right-aligned 3-character string (e.g. `" 87"`, `"100"`) + return "100"; + } + + } \ No newline at end of file From 1d8b29b2a0537d8797df2e43ac67261e56d03f4d Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Wed, 6 May 2026 20:44:08 +0200 Subject: [PATCH 03/12] implement all GradeUtils --- task-1/com.hyfacademy/Main.java | 12 +++++++-- task-1/com.hyfacademy/util/GradeUtils.java | 29 +++++++++++++++------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index 11c1894..c0555ff 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -5,7 +5,15 @@ public class Main { public static void main(String[] args) { //GradeService service = new GradeService(); // service.run(); - int[] average = {65,78,81,99,86}; - System.out.println(GradeUtils.calculateAverage(average)); + int[] average = {5,55,26,25,10}; + double result = GradeUtils.calculateAverage(average); + System.out.println(result); + System.out.println(GradeUtils.isPassing(result)); + System.out.println(GradeUtils.isModulePassing(average[2])); + System.out.println(GradeUtils.getLetterGrade(average[0])); + System.out.println(GradeUtils.formatGrade(average[0])); + + + } } \ No newline at end of file diff --git a/task-1/com.hyfacademy/util/GradeUtils.java b/task-1/com.hyfacademy/util/GradeUtils.java index e352cb6..fe73513 100644 --- a/task-1/com.hyfacademy/util/GradeUtils.java +++ b/task-1/com.hyfacademy/util/GradeUtils.java @@ -19,24 +19,35 @@ public static double calculateAverage(int[] grades) { } public static boolean isPassing(double average){ - // returns true if average is ≥ TRACK_PASS_AVERAGE - return true; + return average >= TRACK_PASS_AVERAGE; } public static boolean isModulePassing(int grade) { - // returns `true` if grade ≥ `MODULE_PASS_MARK` - return true; + return grade >= MODULE_PASS_MARK; } public static char getLetterGrade(double average){ - // returns a letter grade: - // 90–100 → `"A"`, 80–89 → `"B"`, 70–79 → `"C"`, 60–69 → `"D"`, below 60 → `"F"` - return 'a'; + if (average >= 90) { + return 'A'; + } else if (average >= 80) { + return 'B'; + } else if (average >= 70) { + return 'C'; + } else if (average >= 60) { + return 'D'; + } else { + return 'F'; + } } public static String formatGrade(int grade) { - // returns the grade as a right-aligned 3-character string (e.g. `" 87"`, `"100"`) - return "100"; + if (grade == 100){ + return "100"; + } else if (grade >= 10) { + return " " + grade; + } else { + return " " + grade; + } } From da09939d7521caa63b62f9b0db27d339afa12573 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Wed, 6 May 2026 21:54:08 +0200 Subject: [PATCH 04/12] Implement initialize Student --- task-1/com.hyfacademy/Main.java | 7 ++++- task-1/com.hyfacademy/model/Student.java | 36 +++++++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index c0555ff..3d0032e 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -1,5 +1,6 @@ import service.GradeService; import util.GradeUtils; +import model.Student; public class Main { public static void main(String[] args) { @@ -13,7 +14,11 @@ public static void main(String[] args) { System.out.println(GradeUtils.getLetterGrade(average[0])); System.out.println(GradeUtils.formatGrade(average[0])); - + Student salem = new Student("Salem"); + System.out.println(salem.getStudentId()); + Student Ali = new Student("Ali"); + System.out.println(Ali.getStudentId()); + System.out.println(Student.getTotalStudents()); } } \ 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 1261627..44ac099 100644 --- a/task-1/com.hyfacademy/model/Student.java +++ b/task-1/com.hyfacademy/model/Student.java @@ -1,8 +1,42 @@ package model; +import util.GradeUtils; public class Student { private String name; private String studentId; - private int[] grades; + private int[] grades = new int[5]; public static int totalStudents; + + public Student(String name) { + this.name = name; + this.studentId = generateStudentId(); + this.grades = new int[]{0, 0, 0, 0, 0}; + totalStudents++; + } + + private String generateStudentId(){ + int id = totalStudents + 1; + if (id >= 100) { + return "HYF-" + id; + } else if (id >= 10) { + return "HYF-0" + id; + } else { + return "HYF-00" + id; + } + } + public String getStudentId(){ + return this.studentId; + } + + public static int getTotalStudents() { + return totalStudents; + } + + public int[] getGrades() { + return grades; + } + + public void setGrades(int moduleIndex, int grade) { + this.grades = grades; + } } \ No newline at end of file From fc23c9c04cab5d8847a864d552611acde5b51929 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Wed, 6 May 2026 22:34:02 +0200 Subject: [PATCH 05/12] implement all Student functions --- task-1/com.hyfacademy/Main.java | 5 ++++ task-1/com.hyfacademy/model/Student.java | 29 +++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index 3d0032e..93b8613 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -2,6 +2,8 @@ import util.GradeUtils; import model.Student; +import java.util.Arrays; + public class Main { public static void main(String[] args) { //GradeService service = new GradeService(); @@ -19,6 +21,9 @@ public static void main(String[] args) { Student Ali = new Student("Ali"); System.out.println(Ali.getStudentId()); System.out.println(Student.getTotalStudents()); + System.out.println(Arrays.toString(salem.getGrades())); + salem.setGrades(1,60); + System.out.println(salem.toString()); } } \ 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 44ac099..e19a37b 100644 --- a/task-1/com.hyfacademy/model/Student.java +++ b/task-1/com.hyfacademy/model/Student.java @@ -1,4 +1,5 @@ package model; + import util.GradeUtils; public class Student { @@ -24,10 +25,15 @@ private String generateStudentId(){ return "HYF-00" + id; } } + public String getStudentId(){ return this.studentId; } + public String getName(){ + return this.name; + } + public static int getTotalStudents() { return totalStudents; } @@ -37,6 +43,27 @@ public int[] getGrades() { } public void setGrades(int moduleIndex, int grade) { - this.grades = grades; + // validates that moduleIndex is between 0–4 and grade is between 0–100; prints an error message and does nothing if invalid + if (moduleIndex > 4) { + System.out.println("moduleIndex must be between 0–4"); + return; + } else if (grade > 100) { + System.out.println("Grade must be between 0–100"); + return; + } + this.grades[moduleIndex] = grade; + } + + + public String toString(){ + // returns a single-line summary: "[HYF-001] Alice — Avg: 72.40 — PASS" + double average = GradeUtils.calculateAverage(this.grades); + String pass = "PASS"; + if (!GradeUtils.isPassing(average)) { + pass = "FAIL"; + } + String name = getName(); + String studentId = getStudentId(); + return "[" + studentId + "] " + name + " — Avg: " + average + " — " + pass; } } \ No newline at end of file From 97cd796c1fdee9949bf789c57492585bf8a4a9c7 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Wed, 6 May 2026 23:25:05 +0200 Subject: [PATCH 06/12] add run while --- task-1/com.hyfacademy/Main.java | 31 ++++---- .../com.hyfacademy/service/GradeService.java | 70 ++++++++++++++++++- 2 files changed, 83 insertions(+), 18 deletions(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index 93b8613..9a59f57 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -6,24 +6,21 @@ public class Main { public static void main(String[] args) { - //GradeService service = new GradeService(); - // service.run(); - int[] average = {5,55,26,25,10}; - double result = GradeUtils.calculateAverage(average); - System.out.println(result); - System.out.println(GradeUtils.isPassing(result)); - System.out.println(GradeUtils.isModulePassing(average[2])); - System.out.println(GradeUtils.getLetterGrade(average[0])); - System.out.println(GradeUtils.formatGrade(average[0])); + GradeService service = new GradeService(); + service.run(); + //int[] average = {100,100,100,100,100}; + //double result = GradeUtils.calculateAverage(average); + //System.out.println(result); + //System.out.println(GradeUtils.formatGrade(average[0])); - Student salem = new Student("Salem"); - System.out.println(salem.getStudentId()); - Student Ali = new Student("Ali"); - System.out.println(Ali.getStudentId()); - System.out.println(Student.getTotalStudents()); - System.out.println(Arrays.toString(salem.getGrades())); - salem.setGrades(1,60); - System.out.println(salem.toString()); + //Student salem = new Student("Salem"); + //System.out.println(salem.getStudentId()); + //Student Ali = new Student("Ali"); + //System.out.println(Ali.getStudentId()); + //System.out.println(Student.getTotalStudents()); + //System.out.println(Arrays.toString(salem.getGrades())); + //salem.setGrades(1,60); + //System.out.println(salem.toString()); } } \ No newline at end of file diff --git a/task-1/com.hyfacademy/service/GradeService.java b/task-1/com.hyfacademy/service/GradeService.java index 7d0359e..8d18c18 100644 --- a/task-1/com.hyfacademy/service/GradeService.java +++ b/task-1/com.hyfacademy/service/GradeService.java @@ -1,9 +1,77 @@ package service; +import model.Student; +import util.GradeUtils; +import java.util.Scanner; + public class GradeService { + private Student[] students = new Student[20]; + private int studentCount = Student.getTotalStudents(); + private Scanner scanner = new Scanner(System.in); + + public static final int MAX_STUDENTS = 20; + + public void addStudent(){ + //prompts for name and auto-generates the student ID ("HYF-001", "HYF-002", etc.) + } + + public void enterGrades(){ + // prompts the user to select a student by ID, then enter a grade for each of the 5 modules one by one + } + + public void viewAllStudents(){ + // prints a formatted table of all students (see output format below) + } + + public void viewStudentReport(){ + // prompts for a student ID and prints a detailed report for that student (see output format below) + } + public String findStudentById(String id) { + // private helper, returns the matching Student or null + return null; + } + + public void run(){ - System.out.println("run"); + boolean run = true; + while (run) { + System.out.println("╔══════════════════════════════════════╗"); + System.out.println("║ HYF ACADEMY — GRADE MGR ║"); + System.out.println("╚══════════════════════════════════════╝"); + System.out.println(" 1. Add student"); + System.out.println(" 2. Enter grades"); + System.out.println(" 3. View all students"); + System.out.println(" 4. View student report"); + System.out.println(" 5. Exit"); + System.out.println("══════════════════════════════════════"); + System.out.print("Choose an option: "); + + int choice = scanner.nextInt(); + scanner.nextLine(); + + switch (choice) { + case 1: + // addStudent(); + break; + case 2: + // enterGrades(); + break; + case 3: + // viewAllStudents(); + break; + case 4: + // viewStudentReport(); + break; + case 5: + System.out.println("Exiting... Goodbye!"); + run = false; + break; + default: + System.out.println("Invalid option! Try again."); + } + } + } } \ No newline at end of file From 8d66a7284208e09cf83600c6e079fee47a133322 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Thu, 7 May 2026 00:03:52 +0200 Subject: [PATCH 07/12] implement addStudent prompt --- task-1/com.hyfacademy/Main.java | 14 -------------- task-1/com.hyfacademy/service/GradeService.java | 14 +++++++++++--- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index 9a59f57..a617b8c 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -8,19 +8,5 @@ public class Main { public static void main(String[] args) { GradeService service = new GradeService(); service.run(); - //int[] average = {100,100,100,100,100}; - //double result = GradeUtils.calculateAverage(average); - //System.out.println(result); - //System.out.println(GradeUtils.formatGrade(average[0])); - - //Student salem = new Student("Salem"); - //System.out.println(salem.getStudentId()); - //Student Ali = new Student("Ali"); - //System.out.println(Ali.getStudentId()); - //System.out.println(Student.getTotalStudents()); - //System.out.println(Arrays.toString(salem.getGrades())); - //salem.setGrades(1,60); - //System.out.println(salem.toString()); - } } \ No newline at end of file diff --git a/task-1/com.hyfacademy/service/GradeService.java b/task-1/com.hyfacademy/service/GradeService.java index 8d18c18..80ba717 100644 --- a/task-1/com.hyfacademy/service/GradeService.java +++ b/task-1/com.hyfacademy/service/GradeService.java @@ -6,13 +6,21 @@ public class GradeService { private Student[] students = new Student[20]; - private int studentCount = Student.getTotalStudents(); + private int studentCount = 0; private Scanner scanner = new Scanner(System.in); public static final int MAX_STUDENTS = 20; public void addStudent(){ - //prompts for name and auto-generates the student ID ("HYF-001", "HYF-002", etc.) + if (studentCount == MAX_STUDENTS) { + System.out.println("Capacity reached."); + } else { + System.out.print("Enter the student name: "); + String name = scanner.nextLine(); + students[studentCount] = new Student(name); + System.out.println("New Student has been added."); + studentCount++; + } } public void enterGrades(){ @@ -53,7 +61,7 @@ public void run(){ switch (choice) { case 1: - // addStudent(); + addStudent(); break; case 2: // enterGrades(); From 737bfdd4244bd8c93d2d149cecc628281b2ca61c Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Thu, 7 May 2026 13:37:35 +0200 Subject: [PATCH 08/12] Add findStudentById --- task-1/com.hyfacademy/Main.java | 4 ---- task-1/com.hyfacademy/service/GradeService.java | 15 +++++++++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index a617b8c..6d9fd54 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -1,8 +1,4 @@ import service.GradeService; -import util.GradeUtils; -import model.Student; - -import java.util.Arrays; public class Main { public static void main(String[] args) { diff --git a/task-1/com.hyfacademy/service/GradeService.java b/task-1/com.hyfacademy/service/GradeService.java index 80ba717..f3565af 100644 --- a/task-1/com.hyfacademy/service/GradeService.java +++ b/task-1/com.hyfacademy/service/GradeService.java @@ -19,14 +19,20 @@ public void addStudent(){ String name = scanner.nextLine(); students[studentCount] = new Student(name); System.out.println("New Student has been added."); + System.out.printf("Student %s with Id %s%n",students[studentCount].getName(), students[studentCount].getStudentId()); + System.out.println("══════════════════════════════════════"); studentCount++; } } public void enterGrades(){ // prompts the user to select a student by ID, then enter a grade for each of the 5 modules one by one + System.out.print("Enter the student Id HYF-XXX: "); + String id = "HYF-" + scanner.nextLine(); + System.out.println(findStudentById(id)); } + public void viewAllStudents(){ // prints a formatted table of all students (see output format below) } @@ -34,8 +40,13 @@ public void viewAllStudents(){ public void viewStudentReport(){ // prompts for a student ID and prints a detailed report for that student (see output format below) } - public String findStudentById(String id) { + private Student findStudentById(String id) { // private helper, returns the matching Student or null + for (int i = 0; i < students.length; i++) { + if (students[i].getStudentId().equals(id)) { + return students[i]; + } + } return null; } @@ -64,7 +75,7 @@ public void run(){ addStudent(); break; case 2: - // enterGrades(); + enterGrades(); break; case 3: // viewAllStudents(); From 07c7502a41f6f6bff9fe1095a70feb3525751c0a Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Thu, 7 May 2026 17:36:52 +0200 Subject: [PATCH 09/12] impelement enterGrades function --- task-1/com.hyfacademy/Main.java | 4 ++++ task-1/com.hyfacademy/model/Student.java | 7 +++--- .../com.hyfacademy/service/GradeService.java | 23 +++++++++++++++++-- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index 6d9fd54..6636a2f 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -1,7 +1,11 @@ +import model.Student; import service.GradeService; public class Main { public static void main(String[] args) { + //Student ali = new Student("Ali"); + //Student nasser = new Student("Nasser"); + //Student jamal = new Student("Jamal"); GradeService service = new GradeService(); service.run(); } diff --git a/task-1/com.hyfacademy/model/Student.java b/task-1/com.hyfacademy/model/Student.java index e19a37b..7c5881b 100644 --- a/task-1/com.hyfacademy/model/Student.java +++ b/task-1/com.hyfacademy/model/Student.java @@ -42,16 +42,17 @@ public int[] getGrades() { return grades; } - public void setGrades(int moduleIndex, int grade) { + public boolean setGrades(int moduleIndex, int grade) { // validates that moduleIndex is between 0–4 and grade is between 0–100; prints an error message and does nothing if invalid if (moduleIndex > 4) { System.out.println("moduleIndex must be between 0–4"); - return; + return false; } else if (grade > 100) { System.out.println("Grade must be between 0–100"); - return; + return false; } this.grades[moduleIndex] = grade; + return true; } diff --git a/task-1/com.hyfacademy/service/GradeService.java b/task-1/com.hyfacademy/service/GradeService.java index f3565af..4c909a0 100644 --- a/task-1/com.hyfacademy/service/GradeService.java +++ b/task-1/com.hyfacademy/service/GradeService.java @@ -29,7 +29,26 @@ public void enterGrades(){ // prompts the user to select a student by ID, then enter a grade for each of the 5 modules one by one System.out.print("Enter the student Id HYF-XXX: "); String id = "HYF-" + scanner.nextLine(); - System.out.println(findStudentById(id)); + Student student = findStudentById(id); + if (student == null) { + System.out.println("User not found!"); + return; + } + for (int i = 0; i < GradeUtils.MODULE_NAMES.length; i++) { + boolean isGradeSet = false; + while (!isGradeSet){ + System.out.printf("Enter grade for %s: ", GradeUtils.MODULE_NAMES[i]); + int inputGrade = scanner.nextInt(); + scanner.nextLine(); + if (student.setGrades(i, inputGrade)) { + isGradeSet= true; + }; + } + + } + System.out.printf("Grades for %s with Id %s have been added.%n",student.getName(), student.getStudentId()); + System.out.println(student); + System.out.println("══════════════════════════════════════"); } @@ -42,7 +61,7 @@ public void viewStudentReport(){ } private Student findStudentById(String id) { // private helper, returns the matching Student or null - for (int i = 0; i < students.length; i++) { + for (int i = 0; i < studentCount; i++) { // only loop deepens in studentCount not entire array if (students[i].getStudentId().equals(id)) { return students[i]; } From 5fb121de74fb53a414f01503999dbffde0a21fb1 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Thu, 7 May 2026 20:17:05 +0200 Subject: [PATCH 10/12] Add report functions --- task-1/com.hyfacademy/Main.java | 4 - task-1/com.hyfacademy/model/Student.java | 5 +- .../com.hyfacademy/service/GradeService.java | 111 +++++++++++++++++- task-1/com.hyfacademy/util/GradeUtils.java | 2 +- 4 files changed, 109 insertions(+), 13 deletions(-) diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index 6636a2f..6d9fd54 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -1,11 +1,7 @@ -import model.Student; import service.GradeService; public class Main { public static void main(String[] args) { - //Student ali = new Student("Ali"); - //Student nasser = new Student("Nasser"); - //Student jamal = new Student("Jamal"); GradeService service = new GradeService(); service.run(); } diff --git a/task-1/com.hyfacademy/model/Student.java b/task-1/com.hyfacademy/model/Student.java index 7c5881b..3d51003 100644 --- a/task-1/com.hyfacademy/model/Student.java +++ b/task-1/com.hyfacademy/model/Student.java @@ -43,7 +43,7 @@ public int[] getGrades() { } public boolean setGrades(int moduleIndex, int grade) { - // validates that moduleIndex is between 0–4 and grade is between 0–100; prints an error message and does nothing if invalid + if (moduleIndex > 4) { System.out.println("moduleIndex must be between 0–4"); return false; @@ -57,7 +57,7 @@ public boolean setGrades(int moduleIndex, int grade) { public String toString(){ - // returns a single-line summary: "[HYF-001] Alice — Avg: 72.40 — PASS" + double average = GradeUtils.calculateAverage(this.grades); String pass = "PASS"; if (!GradeUtils.isPassing(average)) { @@ -67,4 +67,5 @@ public String toString(){ String studentId = getStudentId(); return "[" + studentId + "] " + name + " — Avg: " + average + " — " + pass; } + } \ No newline at end of file diff --git a/task-1/com.hyfacademy/service/GradeService.java b/task-1/com.hyfacademy/service/GradeService.java index 4c909a0..6d6baac 100644 --- a/task-1/com.hyfacademy/service/GradeService.java +++ b/task-1/com.hyfacademy/service/GradeService.java @@ -11,6 +11,8 @@ public class GradeService { public static final int MAX_STUDENTS = 20; + public GradeService() {seedData();} + public void addStudent(){ if (studentCount == MAX_STUDENTS) { System.out.println("Capacity reached."); @@ -26,7 +28,7 @@ public void addStudent(){ } public void enterGrades(){ - // prompts the user to select a student by ID, then enter a grade for each of the 5 modules one by one + System.out.print("Enter the student Id HYF-XXX: "); String id = "HYF-" + scanner.nextLine(); Student student = findStudentById(id); @@ -53,14 +55,88 @@ public void enterGrades(){ public void viewAllStudents(){ - // prints a formatted table of all students (see output format below) + + if (studentCount == 0) { + System.out.println("No students found."); + return; + } + + System.out.println("══════════════════════════════════════════════════════════════"); + System.out.printf(" %-10s %-20s %-10s %-7s %-10s%n", "ID", "NAME", "AVERAGE", "GRADE", "STATUS"); + System.out.println("══════════════════════════════════════════════════════════════"); + + int passingCount = 0; + + for (int i = 0; i < studentCount; i++) { + Student student = students[i]; + + double average = GradeUtils.calculateAverage(student.getGrades()); + char letterGrade = GradeUtils.getLetterGrade(average); + boolean passing = GradeUtils.isPassing(average); + String status = passing ? "PASS" : "FAIL"; + + if (passing) passingCount++; + + System.out.printf(" %-10s %-20s %-10.2f %-7c %-10s%n", + student.getStudentId(), + student.getName(), + average, + letterGrade, + status); + } + + int failingCount = studentCount - passingCount; + System.out.println("══════════════════════════════════════════════════════════════"); + System.out.printf(" Total students: %d Passing: %d Failing: %d%n", + studentCount, passingCount, failingCount); + System.out.println("══════════════════════════════════════════════════════════════"); } public void viewStudentReport(){ - // prompts for a student ID and prints a detailed report for that student (see output format below) + + System.out.print("Enter the student Id HYF-XXX: "); + String id = "HYF-" + scanner.nextLine(); + + Student student = findStudentById(id); + + if (student == null) { + System.out.println("Error: Student with ID " + id + " not found."); + return; + } + + int[] grades = student.getGrades(); + double avg = GradeUtils.calculateAverage(grades); + char letterGrade = GradeUtils.getLetterGrade(avg); + boolean isTotalPassing = GradeUtils.isPassing(avg); + + System.out.println("══════════════════════════════════════"); + System.out.println(" STUDENT REPORT"); + System.out.println("══════════════════════════════════════"); + System.out.printf(" ID : %s%n", student.getStudentId()); + System.out.printf(" Name : %s%n", student.getName()); + System.out.println("──────────────────────────────────────"); + System.out.println(" MODULE GRADES"); + System.out.println("──────────────────────────────────────"); + + for (int i = 0; i < GradeUtils.MODULE_NAMES.length; i++) { + int grade = grades[i]; + String moduleStatus = GradeUtils.isModulePassing(grade) ? "PASS" : "FAIL"; + + System.out.printf(" %-22s: %s %s%n", + GradeUtils.MODULE_NAMES[i], + GradeUtils.formatGrade(grade), + moduleStatus); + } + + System.out.println("──────────────────────────────────────"); + System.out.printf(" Average : %.2f%n", avg); + System.out.printf(" Grade : %c%n", letterGrade); + System.out.printf(" Status : %s %n", + isTotalPassing ? "✓ PASS" : "✗ FAIL"); + System.out.println("══════════════════════════════════════"); } + private Student findStudentById(String id) { - // private helper, returns the matching Student or null for (int i = 0; i < studentCount; i++) { // only loop deepens in studentCount not entire array if (students[i].getStudentId().equals(id)) { return students[i]; @@ -97,10 +173,10 @@ public void run(){ enterGrades(); break; case 3: - // viewAllStudents(); + viewAllStudents(); break; case 4: - // viewStudentReport(); + viewStudentReport(); break; case 5: System.out.println("Exiting... Goodbye!"); @@ -112,4 +188,27 @@ public void run(){ } } + + // I use AI to generate this method to see viewStudentReport(),viewAllStudents() + private void seedData() { + String[] names = {"Alice van der Berg", "Bob Jansen", "Carol de Groot", "Dave Miller"}; + int[][] mockGrades = { + {88, 76, 91, 70, 87}, + {50, 45, 60, 55, 52}, + {95, 92, 100, 88, 90}, + {60, 65, 70, 58, 62} + }; + + for (int i = 0; i < names.length; i++) { + students[studentCount] = new Student(names[i]); + + for (int j = 0; j < mockGrades[i].length; j++) { + students[studentCount].setGrades(j, mockGrades[i][j]); + } + + studentCount++; + } + } + + } \ No newline at end of file diff --git a/task-1/com.hyfacademy/util/GradeUtils.java b/task-1/com.hyfacademy/util/GradeUtils.java index fe73513..bbaa5c1 100644 --- a/task-1/com.hyfacademy/util/GradeUtils.java +++ b/task-1/com.hyfacademy/util/GradeUtils.java @@ -6,7 +6,7 @@ public class GradeUtils { public static final int MODULE_COUNT = 5; public static final String[] MODULE_NAMES = {"Java Basics", "Control Flow", "OOP Fundamentals", "Arrays & Collections", "Input & Output"}; - // to prevent instantiation, + // to prevent instantiation. private GradeUtils(){} public static double calculateAverage(int[] grades) { From be239ea1d6848e090bfa4278ec748dbee5278dab Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Thu, 7 May 2026 21:00:27 +0200 Subject: [PATCH 11/12] refactor, add validation, and clean-up. --- task-1/com.hyfacademy/model/Student.java | 8 ++---- .../com.hyfacademy/service/GradeService.java | 28 +++++++++++++------ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/task-1/com.hyfacademy/model/Student.java b/task-1/com.hyfacademy/model/Student.java index 3d51003..31e6463 100644 --- a/task-1/com.hyfacademy/model/Student.java +++ b/task-1/com.hyfacademy/model/Student.java @@ -6,7 +6,7 @@ public class Student { private String name; private String studentId; private int[] grades = new int[5]; - public static int totalStudents; + private static int totalStudents; public Student(String name) { this.name = name; @@ -34,10 +34,6 @@ public String getName(){ return this.name; } - public static int getTotalStudents() { - return totalStudents; - } - public int[] getGrades() { return grades; } @@ -47,7 +43,7 @@ public boolean setGrades(int moduleIndex, int grade) { if (moduleIndex > 4) { System.out.println("moduleIndex must be between 0–4"); return false; - } else if (grade > 100) { + } else if (grade > 100 || grade < 0) { System.out.println("Grade must be between 0–100"); return false; } diff --git a/task-1/com.hyfacademy/service/GradeService.java b/task-1/com.hyfacademy/service/GradeService.java index 6d6baac..01b29d9 100644 --- a/task-1/com.hyfacademy/service/GradeService.java +++ b/task-1/com.hyfacademy/service/GradeService.java @@ -20,8 +20,7 @@ public void addStudent(){ System.out.print("Enter the student name: "); String name = scanner.nextLine(); students[studentCount] = new Student(name); - System.out.println("New Student has been added."); - System.out.printf("Student %s with Id %s%n",students[studentCount].getName(), students[studentCount].getStudentId()); + System.out.printf("Student %s with Id %s has been added.%n",students[studentCount].getName(), students[studentCount].getStudentId()); System.out.println("══════════════════════════════════════"); studentCount++; } @@ -40,6 +39,10 @@ public void enterGrades(){ boolean isGradeSet = false; while (!isGradeSet){ System.out.printf("Enter grade for %s: ", GradeUtils.MODULE_NAMES[i]); + while (!scanner.hasNextInt()) { + System.out.printf("Enter a valid grade for %s: ", GradeUtils.MODULE_NAMES[i]); + scanner.next(); + } int inputGrade = scanner.nextInt(); scanner.nextLine(); if (student.setGrades(i, inputGrade)) { @@ -49,7 +52,6 @@ public void enterGrades(){ } System.out.printf("Grades for %s with Id %s have been added.%n",student.getName(), student.getStudentId()); - System.out.println(student); System.out.println("══════════════════════════════════════"); } @@ -95,6 +97,10 @@ public void viewAllStudents(){ public void viewStudentReport(){ System.out.print("Enter the student Id HYF-XXX: "); + while (!scanner.hasNextInt()) { + System.out.print("Enter a valid student Id HYF-XXX: "); + scanner.next(); + } String id = "HYF-" + scanner.nextLine(); Student student = findStudentById(id); @@ -105,9 +111,9 @@ public void viewStudentReport(){ } int[] grades = student.getGrades(); - double avg = GradeUtils.calculateAverage(grades); - char letterGrade = GradeUtils.getLetterGrade(avg); - boolean isTotalPassing = GradeUtils.isPassing(avg); + double average = GradeUtils.calculateAverage(grades); + char letterGrade = GradeUtils.getLetterGrade(average); + boolean isTotalPassing = GradeUtils.isPassing(average); System.out.println("══════════════════════════════════════"); System.out.println(" STUDENT REPORT"); @@ -129,7 +135,7 @@ public void viewStudentReport(){ } System.out.println("──────────────────────────────────────"); - System.out.printf(" Average : %.2f%n", avg); + System.out.printf(" Average : %.2f%n", average); System.out.printf(" Grade : %c%n", letterGrade); System.out.printf(" Status : %s %n", isTotalPassing ? "✓ PASS" : "✗ FAIL"); @@ -162,6 +168,12 @@ public void run(){ System.out.println("══════════════════════════════════════"); System.out.print("Choose an option: "); + + while (!scanner.hasNextInt()) { + System.out.print("Type a valid number: "); + scanner.next(); + } + int choice = scanner.nextInt(); scanner.nextLine(); @@ -189,7 +201,7 @@ public void run(){ } - // I use AI to generate this method to see viewStudentReport(),viewAllStudents() + // I use AI to generate this method to test viewStudentReport(),viewAllStudents() private void seedData() { String[] names = {"Alice van der Berg", "Bob Jansen", "Carol de Groot", "Dave Miller"}; int[][] mockGrades = { From 7b3a016b4035c2ad7d430308da3f99646606cd23 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Thu, 7 May 2026 21:13:04 +0200 Subject: [PATCH 12/12] fix addStudent logic --- task-1/com.hyfacademy/service/GradeService.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/task-1/com.hyfacademy/service/GradeService.java b/task-1/com.hyfacademy/service/GradeService.java index 01b29d9..e7e488f 100644 --- a/task-1/com.hyfacademy/service/GradeService.java +++ b/task-1/com.hyfacademy/service/GradeService.java @@ -18,7 +18,13 @@ public void addStudent(){ System.out.println("Capacity reached."); } else { System.out.print("Enter the student name: "); - String name = scanner.nextLine(); + + while (scanner.hasNextInt()) { + System.out.print("Enter a valid student name: "); + scanner.next(); + } + + String name = scanner.nextLine().trim(); students[studentCount] = new Student(name); System.out.printf("Student %s with Id %s has been added.%n",students[studentCount].getName(), students[studentCount].getStudentId()); System.out.println("══════════════════════════════════════"); @@ -47,7 +53,7 @@ public void enterGrades(){ scanner.nextLine(); if (student.setGrades(i, inputGrade)) { isGradeSet= true; - }; + } } }