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
6 changes: 0 additions & 6 deletions task-1/com.hyfacademy/Main.java

This file was deleted.

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

import com.hyfacademy.service.GradeService;



public class Main {
public static void main(String[] args) {
GradeService gradeService = new GradeService();
gradeService.run();

}
}

63 changes: 63 additions & 0 deletions task-1/com/hyfacademy/model/Student.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
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[]{0, 0, 0, 0, 0};
totalStudents ++;
}

public String getName(){return name;}

public String getStudentId(){
return studentId;
}

public int[] getGrades(){
return grades;
}

public double getAverage(){
return GradeUtils.calculateAverage(grades);
}

public String getStatus(){
return GradeUtils.isPassing(getAverage()) ? "PASS" : "FAIL";
}

public void setGrade(int moduleIndex, int grade){
if(moduleIndex<0 || moduleIndex > 4){
System.out.println("Module index must be between 0 and 4");
return;
}
if(grade < 0 || grade > 100){
System.out.println("Grade must be between 0 and 100");
return;
}
grades[moduleIndex] = grade;
}

public static int getTotalStudents(){
return totalStudents;
}


@Override
public String toString(){

return String.format("[%s] %s — Avg: %.2f — %s", studentId, name, getAverage(), getStatus());
}


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


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

import java.util.Scanner;

public class GradeService {
public static final int MAX_STUDENTS = 20;
private Scanner scanner = new Scanner(System.in);
private int studentCount = 0;
private Student[] students = new Student[MAX_STUDENTS];

public void addStudent() {
if (studentCount == MAX_STUDENTS) {
System.out.println("Sorry, but a group is full(max 20 students)");
return;
}

String name;

while (true) {
System.out.print("Enter new student name: ");
name = scanner.nextLine().trim();

if (name.isEmpty()) {
System.out.println("Name cannot be empty. Please enter a valid name");
continue;
}

if (name.matches(".*\\d.*")) {
System.out.println("Name cannot contain numbers.");
continue;
}

break;
}

String studentId = String.format("HYF-%03d", studentCount + 1);

Student newStudent = new Student(name, studentId);
students[studentCount] = newStudent;
studentCount++;

System.out.println("Student added: " + newStudent);
}

public void enterGrades() {
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++) {
while (true) {
System.out.print("Enter grade for " + GradeUtils.MODULE_NAMES[i] + ": ");

if (!scanner.hasNextInt()) {
System.out.println("Grade must be a number");
scanner.nextLine();
continue;
}
int grade = scanner.nextInt();
scanner.nextLine();

if (grade < 0 || grade > 100) {
System.out.println("Please enter a number from 0 to 100");
continue;
}

student.setGrade(i, grade);
break;
}
}
System.out.println("Grades updated for " + student.getName());
}

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 viewAllStudents() {

if (studentCount == 0) {
System.out.println("You don't have any students");
return;
}

int passing = 0;
int failing = 0;

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

for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - i - 1; j++) {
if (students[j].getAverage() < students[j + 1].getAverage()) {
Student lessAverage = students[j];
students[j] = students[j + 1];
students[j + 1] = lessAverage;
}
}
}

for (int i = 0; i < studentCount; i++) {

Student student = students[i];
double average = student.getAverage();
String grade = GradeUtils.getLetterGrade(average);
String status = student.getStatus();

if (status.equals("PASS")) {
passing++;
} else {
failing++;
}

System.out.printf("%-10s %-20s %-10.2f %-8s %-8s%n", student.getStudentId(), student.getName(), average, grade, status);
}
System.out.println("══════════════════════════════════════════════════════════════");
System.out.printf("Total students: %d Passing: %d Failing: %d%n", studentCount, passing, failing);
System.out.println("══════════════════════════════════════════════════════════════");

}

public void viewStudentsReport() {

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

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

double average = student.getAverage();
String letter = GradeUtils.getLetterGrade(average);
String status = student.getStatus().equals("PASS") ? "✓ PASS" : "✗ FAIL";


System.out.println("══════════════════════════════════════");
System.out.println("STUDENT REPORT");
System.out.println("══════════════════════════════════════");
System.out.printf("%-10s : %s%n", "ID", studentId);
System.out.printf("%-10s : %s%n", "Name", student.getName());
System.out.println("──────────────────────────────────────");
System.out.println("MODULE GRADES");
System.out.println("──────────────────────────────────────");

for (int i = 0; i < GradeUtils.MODULE_COUNT; i++) {
String module = GradeUtils.MODULE_NAMES[i];
int moduleGrate = student.getGrades()[i];
String moduleStatus = GradeUtils.isModulePassing(moduleGrate) ? "PASS" : "FAIL";

System.out.printf("%-20s : %-5d %-5s%n", module, moduleGrate, moduleStatus);
}

System.out.println("──────────────────────────────────────");
System.out.printf("%-10s : %.2f%n", "Average", average);
System.out.printf("%-10s : %s%n", "Grade", letter);
System.out.printf("%-10s : %s%n", "Status", status);
System.out.println("══════════════════════════════════════");

}

public void viewClassStatistic() {
if(studentCount == 0){
System.out.println("For run statistic you need at least one student");
return;
}

System.out.println("══════════════════════════════════════════════════════");
System.out.println(" CLASS GRADES STATISTICS ");
System.out.println("══════════════════════════════════════════════════════");
System.out.printf("%-24s %-10s %-10s %-10s%n", "CLASS", "HIGHEST ", "LOWEST", "AVERAGE");
System.out.println("══════════════════════════════════════════════════════");

for (int i = 0; i < GradeUtils.MODULE_COUNT; i++) {
String module = GradeUtils.MODULE_NAMES[i];
int highest = 0;
int lowest = 100;
int sum = 0;

for (int j = 0; j < studentCount; j++) {
int grade = students[j].getGrades()[i];

if (grade > highest) {
highest = grade;
}
if (grade < lowest) {
lowest = grade;
}

sum += grade;
}

double average = (double) sum / studentCount;

System.out.printf("%-24s %-10d %-10d %-10.2f%n", module, highest, lowest, average);


}
System.out.println("══════════════════════════════════════════════════════");
}

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. Class statistic");
System.out.println("6. 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 choice = scanner.nextInt();
scanner.nextLine();

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

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


}

}


}
Loading