diff --git a/.gitignore b/.gitignore index 2b76d7c..2333fde 100644 --- a/.gitignore +++ b/.gitignore @@ -156,3 +156,13 @@ dist vite.config.js.timestamp-* vite.config.ts.timestamp-* +# Java build files +*.class +*.jar +*.war +*.ear + +# IntelliJ / Java build directories +/out/ +target/ +bin/ diff --git a/task-1/com.hyfacademy/Main.java b/task-1/com.hyfacademy/Main.java deleted file mode 100644 index 49a03b1..0000000 --- a/task-1/com.hyfacademy/Main.java +++ /dev/null @@ -1,6 +0,0 @@ -public class Main { - public static void main(String[] args) { - System.out.println("Hello World!"); - } -} - diff --git a/task-1/com.hyfacademy/model/Student.java b/task-1/com.hyfacademy/model/Student.java deleted file mode 100644 index e69de29..0000000 diff --git a/task-1/com.hyfacademy/service/GradeService.java b/task-1/com.hyfacademy/service/GradeService.java deleted file mode 100644 index e69de29..0000000 diff --git a/task-1/com.hyfacademy/util/GradeUtils.java b/task-1/com.hyfacademy/util/GradeUtils.java deleted file mode 100644 index e69de29..0000000 diff --git a/task-1/com/hyfacademy/Main.java b/task-1/com/hyfacademy/Main.java new file mode 100644 index 0000000..11f5046 --- /dev/null +++ b/task-1/com/hyfacademy/Main.java @@ -0,0 +1,10 @@ +package com.hyfacademy; + +import com.hyfacademy.service.GradeService; + +public class Main { + public static void main(String[] args) { + GradeService service = new GradeService(); + service.run(); + } +} diff --git a/task-1/com/hyfacademy/model/Student.java b/task-1/com/hyfacademy/model/Student.java new file mode 100644 index 0000000..1df3276 --- /dev/null +++ b/task-1/com/hyfacademy/model/Student.java @@ -0,0 +1,55 @@ +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; + } + public static int getTotalStudents() { + + return totalStudents; + } + + public void setGrade(int moduleIndex, int grade) { + if (moduleIndex < 0 || moduleIndex >= GradeUtils.MODULE_COUNT) { + System.out.println("Invalid module index: " + moduleIndex); + return; + } + if (grade < 0 || grade > 100) { + System.out.println("Invalid grade: " + grade); + return; + } + grades[moduleIndex] = grade; + } + public String toString() { + double avg = GradeUtils.calculateAverage(grades); + String letter = GradeUtils.getLetterGrade(avg); + String status = GradeUtils.isPassing(avg) ? "PASS" : "FAIL"; + + return String.format("[%s] %s - Avg: %.2f - %s", + studentId, name, avg, status); + } +} \ No newline at end of file diff --git a/task-1/com/hyfacademy/service/GradeService.java b/task-1/com/hyfacademy/service/GradeService.java new file mode 100644 index 0000000..4a7e08d --- /dev/null +++ b/task-1/com/hyfacademy/service/GradeService.java @@ -0,0 +1,226 @@ +package com.hyfacademy.service; + +import com.hyfacademy.model.Student; +import com.hyfacademy.util.GradeUtils; +import java.util.Scanner; + +public class GradeService { + + private static final int MAX_STUDENTS = 20; + + private Student[] students = new Student[MAX_STUDENTS]; + private int studentCount = 0; + + private Scanner scanner = new Scanner(System.in); + + + private String generateStudentId() { + int next = studentCount + 1; + return String.format("HYF-%03d", next); + } + + + public void addStudent() { + if (studentCount >= MAX_STUDENTS) { + System.out.println(" Cannot add more students (max 20)."); + return; + } + + System.out.print("Enter student name: "); + String name = scanner.nextLine(); + + String id = generateStudentId(); + + Student s = new Student(name, id); + students[studentCount] = s; + studentCount++; + + System.out.println("Student added: " + s.getStudentId() + " — " + s.getName()); + } + public void enterGrades() { + System.out.print("Enter student ID: "); + String id = scanner.nextLine(); + + Student student = findStudentById(id); + + if (student == null) { + System.out.println("Student not found."); + return; + } + + System.out.println("Entering grades for: " + student.getName()); + + for (int i = 0; i < GradeUtils.MODULE_COUNT; i++) { + String moduleName = GradeUtils.MODULE_NAMES[i]; + + while (true) { + System.out.print("Enter grade for " + moduleName + ": "); + + if (!scanner.hasNextInt()) { + System.out.println("Invalid input. Please enter a number."); + scanner.nextLine(); + continue; + } + + int grade = scanner.nextInt(); + scanner.nextLine(); + + if (grade < 0 || grade > 100) { + System.out.println("Grade must be between 0 and 100."); + continue; + } + + student.setGrade(i, grade); + break; + } + } + + System.out.println("Grades saved successfully!"); + } + + public void viewAllStudents() { + + if (studentCount == 0) { + System.out.println("No students have been added yet."); + return; + } + + System.out.println("══════════════════════════════════════════════════════════════"); + System.out.printf(" %-10s %-20s %-9s %-9s %-8s%n", + "ID", "NAME", "AVERAGE", "GRADE", "STATUS"); + System.out.println("══════════════════════════════════════════════════════════════"); + + int passing = 0; + int failing = 0; + + for (int i = 0; i < studentCount; i++) { + Student s = students[i]; + + double avg = GradeUtils.calculateAverage(s.getGrades()); + String letter = GradeUtils.getLetterGrade(avg); + boolean pass = GradeUtils.isPassing(avg); + + if (pass) passing++; + else failing++; + + System.out.printf(" %-10s %-20s %-10.2f %-9s %-8s%n", + s.getStudentId(), + s.getName(), + avg, + letter, + pass ? "PASS" : "FAIL" + ); + } + + System.out.println("══════════════════════════════════════════════════════════════"); + System.out.printf(" Total students: %d Passing: %d Failing: %d%n", + studentCount, passing, failing); + System.out.println("══════════════════════════════════════════════════════════════"); + } + + public void viewStudentReport() { + + System.out.print("Enter student ID: "); + String id = scanner.nextLine(); + + Student student = findStudentById(id); + + if (student == null) { + System.out.println("Student not found."); + return; + } + + System.out.println("══════════════════════════════════════"); + System.out.println(" STUDENT REPORT"); + System.out.println("══════════════════════════════════════"); + System.out.println(" ID : " + student.getStudentId()); + System.out.println(" Name : " + student.getName()); + System.out.println("──────────────────────────────────────"); + System.out.println(" MODULE GRADES"); + System.out.println("──────────────────────────────────────"); + + int[] grades = student.getGrades(); + + for (int i = 0; i < GradeUtils.MODULE_COUNT; i++) { + String moduleName = GradeUtils.MODULE_NAMES[i]; + int grade = grades[i]; + boolean pass = GradeUtils.isModulePassing(grade); + + System.out.printf(" %-22s : %3d %s%n", + moduleName, + grade, + pass ? "PASS" : "FAIL" + ); + } + + System.out.println("──────────────────────────────────────"); + + double avg = GradeUtils.calculateAverage(grades); + String letter = GradeUtils.getLetterGrade(avg); + boolean trackPass = GradeUtils.isPassing(avg); + + System.out.printf(" Average : %.2f%n", avg); + System.out.println(" Grade : " + letter); + System.out.println(" Status : " + (trackPass ? "✓ 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() { + + while (true) { + 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: "); + + String input = scanner.nextLine(); + + switch (input) { + case "1": + addStudent(); + break; + + case "2": + enterGrades(); + break; + + case "3": + viewAllStudents(); + break; + + case "4": + viewStudentReport(); + break; + + case "5": + System.out.println("Exiting program... Goodbye!"); + return; + + default: + System.out.println("Invalid option. Please choose 1–5."); + } + + System.out.println(); + } + } + + + +} + + diff --git a/task-1/com/hyfacademy/util/GradeUtils.java b/task-1/com/hyfacademy/util/GradeUtils.java new file mode 100644 index 0000000..a72111e --- /dev/null +++ b/task-1/com/hyfacademy/util/GradeUtils.java @@ -0,0 +1,45 @@ +package com.hyfacademy.util; + + + +public class GradeUtils { + + private 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 & Collection", + "Input & Output" + }; + + public static double calculateAverage (int[] grades) { + int sum = 0; + for (int g : grades) { + sum+= g; + } + return sum / (double) MODULE_COUNT; + } + 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) return "A"; + if (average >= 80) return "B"; + if (average >= 70) return "C"; + if (average >= 60) return "D"; + return "F"; + } + public static String formatGrade(int grade) { + + return String.format("%3d", grade); + } +} \ No newline at end of file