Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
6 changes: 0 additions & 6 deletions task-1/com.hyfacademy/Main.java

This file was deleted.

Empty file.
Empty file.
Empty file.
11 changes: 11 additions & 0 deletions task-1/com/hyfacademy/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

package com.hyfacademy;

import com.hyfacademy.service.GradeService;

public class Main {
public static void main(String[] args) {
GradeService service = new GradeService();
service.run();
}
}
55 changes: 55 additions & 0 deletions task-1/com/hyfacademy/model/Student.java
Original file line number Diff line number Diff line change
@@ -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[5];
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);
}
}
221 changes: 221 additions & 0 deletions task-1/com/hyfacademy/service/GradeService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
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: ");
if(!scanner.hasNextInt()){
System.out.println("Please enter a valid number.");
scanner.nextLine();
continue;
}

int input = scanner.nextInt();
scanner.nextLine();

if(input < 1 || input > 5){
System.out.println("Please enter a number from 1 to 5.");
continue;
}

switch(input){
case 1 -> addStudent();
case 2 -> enterGrades();
case 3 -> viewAllStudents();
case 4 -> viewStudentReport();
case 5 -> {
System.out.println("Goodbye!");
return;
}
}

System.out.println();
}
}



}
45 changes: 45 additions & 0 deletions task-1/com/hyfacademy/util/GradeUtils.java
Original file line number Diff line number Diff line change
@@ -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);
}
}