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: 7 additions & 3 deletions task-1/com.hyfacademy/Main.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
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();
}
}

}
54 changes: 54 additions & 0 deletions task-1/com.hyfacademy/model/Student.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
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("Error: Invalid module index. Must be between 0 and " + (GradeUtils.MODULE_COUNT - 1));
return;
}
if (grade < 0 || grade > 100) {
System.out.println("Error: Invalid grade. Grade must be between 0 and 100.");
return;
}
grades[moduleIndex] = grade;
}

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); //"[HYF-001] Alice — Avg: 72.40 — PASS"
}


}
195 changes: 195 additions & 0 deletions task-1/com.hyfacademy/service/GradeService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
package com.hyfacademy.service;

import com.hyfacademy.util.GradeUtils;
import com.hyfacademy.model.Student;
import java.util.Scanner;

public class GradeService {
private static final int MAX_STUDENTS = 20;

private Student[] students;
private int studentCount;
private Scanner scanner;

public GradeService(){
students = new Student[MAX_STUDENTS];
studentCount = 0;
scanner = new Scanner(System.in);
}

public void addStudent() {
if (studentCount >= MAX_STUDENTS) {
System.out.println("Error: Maximum number of students reached.");
return;
}

System.out.println("Enter student name:");
String name = scanner.nextLine();
String studentId = String.format("HYF-%03d", studentCount + 1);

Student student = new Student(name, studentId);
students[studentCount] = student; //studentCount is the index where the next student should go.
studentCount++;

System.out.println("Student added successfully with ID: " + studentId);
}

private Student findStudentById(String id) {
for (int i = 0; i < studentCount; i++) {
//take the student ID from the student at position i, and compare it with the id
if (students[i].getStudentId().equals(id)) {
return students[i];
}
}
return null;
}

private int readGrade(String moduleName) {
while (true) {
System.out.print(moduleName + " (0-100): ");
if (scanner.hasNextInt()) {
int grade = scanner.nextInt();
scanner.nextLine();
if (grade >= 0 && grade <= 100) {
return grade;
}
System.out.println("Error: Grade must be between 0 and 100.");
} else {
scanner.nextLine();
System.out.println("Error: Please enter a number.");
}
}
}

public void enterGrades() {
System.out.print("Enter student ID: ");
String studentId = scanner.nextLine();

Student student = findStudentById(studentId);
if (student == null) {
System.out.println("Error: Student with ID " + studentId + " not found.");
return;
}

System.out.println("Entering grades for " + student.getName());

for (int i = 0; i < GradeUtils.MODULE_COUNT; i++) {
student.setGrade(i, readGrade(GradeUtils.MODULE_NAMES[i]));
}

System.out.println("Grades saved successfully!");
}


public void viewAllStudents() {
if (studentCount == 0) {
System.out.println("\nNo students have been added yet.");
return;
}

System.out.println("\n══════════════════════════════════════════════════════════════ ");
System.out.printf(" %-10s %-20s %-10s %-10s %-10s%n", "ID", "NAME", "AVERAGE", "GRADE", "STATUS");
System.out.println("══════════════════════════════════════════════════════════════ ");

int passCount = 0;
for (int i = 0; i < studentCount; i++) {
Student student = students[i];
double average = GradeUtils.calculateAverage(student.getGrades());
String grade = GradeUtils.getLetterGrade(average);
String status = GradeUtils.isPassing(average) ? "PASS" : "FAIL";

System.out.printf(" %-10s %-20s %-8.2f %4s %12s%n", student.getStudentId(), student.getName(), average, grade, status);

if (GradeUtils.isPassing(average)) {
passCount++;
}
}

System.out.println("══════════════════════════════════════════════════════════════ ");
System.out.printf(" Total students: %d Passing: %d Failing: %d%n", studentCount, passCount, studentCount - passCount);
System.out.println("══════════════════════════════════════════════════════════════ ");
}

public void viewStudentReport() {
System.out.print("Enter student ID: ");
String studentId = scanner.nextLine();

Student student = findStudentById(studentId);
if (student == null) {
System.out.println("Error: Student with ID " + studentId + " not found.");
return;
}

double average = GradeUtils.calculateAverage(student.getGrades());
String status = GradeUtils.isPassing(average) ? "✓ PASS" : "FAIL";

System.out.println("\n══════════════════════════════════════");
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("──────────────────────────────────────");

int[] grades = student.getGrades();
for (int i = 0; i < GradeUtils.MODULE_COUNT; i++) {
String moduleStatus = GradeUtils.isModulePassing(grades[i]) ? "PASS" : "FAIL";
System.out.printf(" %-20s : %s %s%n", GradeUtils.MODULE_NAMES[i], GradeUtils.formatGrade(grades[i]), moduleStatus);
}

System.out.println("──────────────────────────────────────");
System.out.printf(" Average : %.2f%n", average);
System.out.printf(" Grade : %s%n", GradeUtils.getLetterGrade(average));
System.out.printf(" Status : %s%n", status);
System.out.println("══════════════════════════════════════");
}

public void run() {
boolean running = true;

while (running) {
System.out.println("\n╔══════════════════════════════════════╗");
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()) {
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:
running = false;
System.out.println("Thank you for using HYF Academy Grade Manager. Goodbye!");
break;
default:
System.out.println("Error: Invalid option. Please choose 1-5.");
}
} else {
scanner.nextLine();
System.out.println("Error: Invalid input. Please enter a number.");
}
}

scanner.close();
}
}
52 changes: 52 additions & 0 deletions task-1/com.hyfacademy/util/GradeUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
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(){} //nobody can create an object like new GradeUtils().

public static double calculateAverage(int[] grades){
int sum = 0;
for (int grade: grades){
sum += grade;
}
return (double) sum/grades.length; // means: convert sum to double, divide by grades.length, return the result as a double
}

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";
} 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){
return String.format("%3d",grade);
}

}