From 980ba0df5c702e06962928bf17a764c84d8d39f4 Mon Sep 17 00:00:00 2001 From: FallenRonin Date: Thu, 23 Oct 2025 12:21:11 +0300 Subject: [PATCH] MP-21.1: added new classes --- build.gradle | 5 ++ settings.gradle | 1 + src/ru/mentee/power/datatype/Mentee.java | 69 +++++++++++++++++++ src/ru/mentee/power/datatype/MenteeDemo.java | 22 ++++++ src/test/java/MenteeTest.java | 72 ++++++++++++++++++++ 5 files changed, 169 insertions(+) create mode 100644 src/ru/mentee/power/datatype/Mentee.java create mode 100644 src/ru/mentee/power/datatype/MenteeDemo.java create mode 100644 src/test/java/MenteeTest.java diff --git a/build.gradle b/build.gradle index a00488c..ed0d18c 100644 --- a/build.gradle +++ b/build.gradle @@ -15,11 +15,16 @@ sourceSets { srcDirs = ['src'] } } + test{ + java{ + } + } } dependencies { testImplementation platform('org.junit:junit-bom:5.10.0') testImplementation 'org.junit.jupiter:junit-jupiter' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' } test { diff --git a/settings.gradle b/settings.gradle index 62ed13a..6b67ef1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ rootProject.name = 'java-core' +include 'test' diff --git a/src/ru/mentee/power/datatype/Mentee.java b/src/ru/mentee/power/datatype/Mentee.java new file mode 100644 index 0000000..0447224 --- /dev/null +++ b/src/ru/mentee/power/datatype/Mentee.java @@ -0,0 +1,69 @@ +package ru.mentee.power.datatype; + +public class Mentee { + private String name; + private String surname; + private int age; + private double avgGrade; + private int level; + + public Mentee(String name, String surname, int age, double avgGrade, int level) { + this.name = name; + this.surname = surname; + this.age = age; + this.avgGrade = avgGrade; + this.level = level > 5 || level < 1 ? 1 : level; + } + + public void displayInfo() { + System.out.printf("Менти: %s %s\n Возраст: %d\n Средний балл: %f\n Уровень: %d\n" + , this.name, this.surname, this.age, this.avgGrade, this.level); + + } + + public boolean isExcellent() { + return avgGrade >= 4.5; + } + + public boolean advanceToNextLevel() { + if (level < 5) { + level++; + return true; + } + return false; + } + + public int calculateScholarship() { + if (avgGrade >= 4.5) + return 2000; + else if (avgGrade >= 4.0) + return 1500; + else return 1000; + } + + // Геттеры и сеттеры для доступа к приватным полям + public String getFirstName() { + return name; + } + + public String getLastName() { + return surname; + } + + public int getAge() { + return age; + } + + public double getAverageGrade() { + return avgGrade; + } + + public void setAverageGrade(double averageGrade) { + this.avgGrade = averageGrade; + } + + public int getLevel() { + return level; + } + +} diff --git a/src/ru/mentee/power/datatype/MenteeDemo.java b/src/ru/mentee/power/datatype/MenteeDemo.java new file mode 100644 index 0000000..ac294ff --- /dev/null +++ b/src/ru/mentee/power/datatype/MenteeDemo.java @@ -0,0 +1,22 @@ +package ru.mentee.power.datatype; + +import java.util.ArrayList; +import java.util.List; + +public class MenteeDemo { + public static void main(String[] args) { + List menteeList = new ArrayList<>(); + + menteeList.add( new Mentee("Alexandr", "Poltavets", 25, 4.7, 1)); + menteeList.add(new Mentee("Ivan", "Ivanov", 23, 3.5, 2)); + menteeList.add( new Mentee("Sveta", "Igoreva", 27, 4.1, 3)); + + for (Mentee mentee : menteeList){ + mentee.displayInfo(); + System.out.printf("%s является отличником? %b\n", mentee.getFirstName(), mentee.isExcellent()); + mentee.advanceToNextLevel(); + } + + + } +} diff --git a/src/test/java/MenteeTest.java b/src/test/java/MenteeTest.java new file mode 100644 index 0000000..c8fced1 --- /dev/null +++ b/src/test/java/MenteeTest.java @@ -0,0 +1,72 @@ + +import org.junit.jupiter.api.Test; +import ru.mentee.power.datatype.Mentee; + +import static org.junit.jupiter.api.Assertions.*; + +public class MenteeTest { + + @Test + public void testMenteeCreation() { + Mentee mentee = new Mentee("Иван", "Иванов", 20, 4.2, 2); + + assertEquals("Иван", mentee.getFirstName()); + assertEquals("Иванов", mentee.getLastName()); + assertEquals(20, mentee.getAge()); + assertEquals(4.2, mentee.getAverageGrade(), 0.001); + assertEquals(2, mentee.getLevel()); + } + + @Test + public void testIsExcellent() { + Mentee excellentMentee = new Mentee("Мария", "Петрова", 19, 4.8, 1); + Mentee averageMentee = new Mentee("Петр", "Сидоров", 21, 3.9, 3); + + assertTrue(excellentMentee.isExcellent()); + assertFalse(averageMentee.isExcellent()); + } + + @Test + public void testAdvanceToNextLevel() { + Mentee junior = new Mentee("Алексей", "Смирнов", 18, 4.0, 1); + Mentee senior = new Mentee("Ольга", "Козлова", 22, 4.7, 5); + + assertTrue(junior.advanceToNextLevel()); + assertEquals(2, junior.getLevel()); + + assertFalse(senior.advanceToNextLevel()); + assertEquals(5, senior.getLevel()); + } + + @Test + public void testInvalidLevelValue() { + Mentee mentee1 = new Mentee("Дмитрий", "Попов", 19, 4.3, 0); + Mentee mentee2 = new Mentee("Анна", "Соколова", 20, 4.5, 6); + + // Значения уровня должны быть скорректированы до 1 + assertEquals(1, mentee1.getLevel()); + assertEquals(1, mentee2.getLevel()); + } + + @Test + public void testCalculateScholarship() { + // Отличник - высшая стипендия + Mentee excellentMentee = new Mentee("Мария", "Ивановна", 19, 4.8, 1); + assertEquals(2000, excellentMentee.calculateScholarship()); + + // Хорошист - средняя стипендия + Mentee goodMentee = new Mentee("Алексей", "Смирнов", 18, 4.2, 1); + assertEquals(1500, goodMentee.calculateScholarship()); + + // Средний балл ниже 4.0 - базовая стипендия + Mentee averageMentee = new Mentee("Петр", "Сидоров", 21, 3.9, 3); + assertEquals(1000, averageMentee.calculateScholarship()); + + // Граничные значения + Mentee borderlineMentee1 = new Mentee("Ольга", "Козлова", 22, 4.5, 5); // Ровно 4.5 + assertEquals(2000, borderlineMentee1.calculateScholarship()); + + Mentee borderlineMentee2 = new Mentee("Иван", "Иванов", 20, 4.0, 2); // Ровно 4.0 + assertEquals(1500, borderlineMentee2.calculateScholarship()); + } +} \ No newline at end of file