diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java index 49a03b1..c6b4e22 100644 --- a/task-1/com.hyfacademy/Main.java +++ b/task-1/com.hyfacademy/Main.java @@ -1,6 +1,9 @@ +package com.hyfacademy; +import com.hyfacademy.service.GradeService; public class Main { public static void main(String[] args) { - System.out.println("Hello World!"); + 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 e69de29..40cd2b5 100644 --- a/task-1/com.hyfacademy/model/Student.java +++ b/task-1/com.hyfacademy/model/Student.java @@ -0,0 +1,43 @@ +package com.hyfacademy.model; + +import com.hyfacademy.util.GradeUtils; +public class Student { + + private String name; + private String studentId; + private int[] grades; + + private static int totalStudents = 0; + + public Student(String name, String studentId) { + this.name = name; + this.studentId = studentId; + this.grades = new int[GradeUtils.MODULE_COUNT]; + totalStudents++; + } + public String getName() { return name; } + public String getStudentId() { return studentId; } + public int[] getGrades() { return grades.clone(); } + public void setGrade(int moduleIndex, int grade) { + if (moduleIndex < 0 || moduleIndex >= GradeUtils.MODULE_COUNT || grade < 0 || grade > 100) { + System.out.println("Invalid grade or module index. Module index must be 0-4 and grade must be 0-100."); + return; + } + + this.grades[moduleIndex] = grade; + } + public static int getTotalStudents() { + return totalStudents; + } + @Override + public String toString() { + double average = GradeUtils.calculateAverage(grades); + String status = GradeUtils.isPassing(average) ? "PASS" : "FAIL"; + + return String.format("[%s] %s — Avg: %.2f — %s", + studentId, + name, + average, + status); + } +} diff --git a/task-1/com.hyfacademy/service/GradeService.java b/task-1/com.hyfacademy/service/GradeService.java index e69de29..9a4ae70 100644 --- a/task-1/com.hyfacademy/service/GradeService.java +++ b/task-1/com.hyfacademy/service/GradeService.java @@ -0,0 +1,189 @@ +package com.hyfacademy.service; +import com.hyfacademy.model.Student; +import java.util.Scanner; +import com.hyfacademy.util.GradeUtils; + +public class GradeService{ + private static final int MAX_STUDENTS = 20; + private Student[] students; + private int studentCount; + private final Scanner scanner; + public GradeService() { + this.students = new Student[MAX_STUDENTS]; + this.studentCount = 0; + this.scanner = new Scanner(System.in); + } + public void addStudent() { + if (studentCount >= students.length) { + System.out.println("Student list is full!"); + return; + } + System.out.print("Enter student name: "); + String name = scanner.nextLine(); + if (name.isEmpty()) { + System.out.println("Invalid name"); + return; + } + Student student = new Student(name, generateStudentId()); + students[studentCount++] = student; + System.out.println("Added: " + student.getStudentId()); + } + private String generateStudentId() { + return String.format("HYF-%03d", studentCount + 1); + } + public void enterGrades() { + if (studentCount == 0) { + System.out.println("No students have been added yet."); + return; + } + System.out.print("Enter student ID: "); + String studentId = scanner.nextLine(); + Student student = findStudentById(studentId); + if (student == null) { + System.out.println("Student not found."); + return; + } + + for (int i = 0; i < GradeUtils.MODULE_COUNT; i++) { + int grade = readIntInRange( + "Enter grade for " + GradeUtils.getModuleName(i) + ": ", + 0, + 100 + ); + student.setGrade(i, grade); + } + System.out.println("Grades added for " + student.getName()); + } + public void viewAllStudents() { + if (studentCount == 0) { + System.out.println("No students have been added yet."); + return; + } + int passingCount = 0; + int failingCount = 0; + System.out.println("══════════════════════════════════════════════════════════════"); + System.out.printf(" %-10s %-24s %7s %5s %6s%n", "ID", "NAME", "AVERAGE", "GRADE", "STATUS"); + System.out.println("══════════════════════════════════════════════════════════════"); + for (int i = 0; i < studentCount; i++) { + Student s = students[i]; + + double avg = GradeUtils.calculateAverage(s.getGrades()); + String letter = GradeUtils.getLetterGrade(avg); + boolean isPass = GradeUtils.isPassing(avg); + if (isPass) passingCount++; + else failingCount++; + + System.out.printf( " %-10s %-24s %7.2f %5s %6s%n", + s.getStudentId(), + s.getName(), + avg, + letter, + isPass ? "PASS" : "FAIL" + ); + } + System.out.println("══════════════════════════════════════════════════════════════"); + System.out.printf(" Total students: %d Passing: %d Failing: %d%n", studentCount, passingCount, failingCount); + System.out.println("══════════════════════════════════════════════════════════════"); + } + public void viewStudentReport(){ + if (studentCount == 0){ + System.out.println("No students have been added yet."); + return; + } + System.out.print("Enter student ID: "); + String studentId = scanner.nextLine(); + + Student s =findStudentById(studentId); + if(s == null) { + System.out.println("Student not found"); + return; + } + int[] grades = s.getGrades(); + System.out.println("══════════════════════════════════════"); + System.out.println(" STUDENT REPORT"); + System.out.println("══════════════════════════════════════"); + System.out.printf(" ID : %s%n", s.getStudentId()); + System.out.printf(" Name : %s%n", s.getName()); + System.out.println("──────────────────────────────────────"); + System.out.println(" MODULE GRADES"); + System.out.println("──────────────────────────────────────"); + + for (int i = 0; i < GradeUtils.MODULE_COUNT; i++) { + int grade = grades[i]; + String moduleName = GradeUtils.getModuleName(i); + boolean pass = GradeUtils.isModulePassing(grade); + + System.out.printf( + " %-22s : %s %s%n", + moduleName, + GradeUtils.formatGrade(grade), + pass ? "PASS" : "FAIL" + ); + } + System.out.println("──────────────────────────────────────"); + double avg = GradeUtils.calculateAverage(grades); + String letter = GradeUtils.getLetterGrade(avg); + boolean isPass = GradeUtils.isPassing(avg); + + System.out.printf(" Average : %6.2f%n", avg); + System.out.printf(" Grade : %s%n", letter); + System.out.printf(" Status : %s%n", isPass ? "✓ PASS" : "✗ FAIL"); + System.out.println("══════════════════════════════════════"); + } + private Student findStudentById(String id) { + + for (int i = 0; i < studentCount; i++) { + if (students[i].getStudentId().equalsIgnoreCase(id)) { + return students[i]; + } + } + return null; + } + public void run() { + String input; + do { + printMenu(); + input = scanner.nextLine().trim(); + switch (input) { + case "1" -> addStudent(); + case "2" -> enterGrades(); + case "3" -> viewAllStudents(); + case "4" -> viewStudentReport(); + case "5" -> System.out.println("Goodbye!"); + default -> System.out.println("Invalid option."); + } + System.out.println(); + } + while (!input.equals("5")); + } + private void printMenu() { + 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: "); + + } + + private int readIntInRange(String prompt, int minInclusive, int maxInclusive) { + while (true) { + System.out.print(prompt); + String raw = scanner.nextLine().trim(); + try { + int value = Integer.parseInt(raw); + if (value < minInclusive || value > maxInclusive) { + System.out.printf("Invalid grade. Enter a number between %d and %d.%n", minInclusive, maxInclusive); + continue; + } + return value; + } catch (NumberFormatException e) { + System.out.println("Invalid input. Please enter a number."); + } + } + } +} diff --git a/task-1/com.hyfacademy/util/GradeUtils.java b/task-1/com.hyfacademy/util/GradeUtils.java index e69de29..3476291 100644 --- a/task-1/com.hyfacademy/util/GradeUtils.java +++ b/task-1/com.hyfacademy/util/GradeUtils.java @@ -0,0 +1,66 @@ +package com.hyfacademy.util; + +public class GradeUtils { + 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" + }; + + private GradeUtils() {} + + public static double calculateAverage(int[] grades) { + if (grades == null || grades.length == 0) { + return 0.0; + } + + int sum = 0; + int gradedCount = 0; + + for (int grade : grades) { + if (grade > 0) { + sum += grade; + gradedCount++; + } + } + + if (gradedCount == 0) { + return 0.0; + } + + return (double) sum / gradedCount; + } + + public static boolean isPassing(double average) { + return average >= TRACK_PASS_AVERAGE; + } + + public static boolean isModulePassing(int grade) { + return grade >= MODULE_PASS_MARK; + } + + public static String getLetterGrade(double average) { + if (average >= 90.0) return "A"; + if (average >= 80.0) return "B"; + if (average >= 70.0) return "C"; + if (average >= 60.0) return "D"; + return "F"; + } + + public static String formatGrade(int grade) { + return String.format("%3d", grade); + } + + public static String getModuleName(int index) { + if (index < 0 || index >= MODULE_NAMES.length) { + return "Unknown Module"; + } + return MODULE_NAMES[index]; + } +}