Merge branch 'feature/student' into feature/ui

This commit is contained in:
2026-08-27 15:31:43 +04:00
2 changed files with 40 additions and 17 deletions
@@ -5,17 +5,18 @@ import java.util.Objects;
public class Student { public class Student {
private final String groupNumber; private final String groupNumber;
private final double averageGrade; private final double averageGrade;
private final String recordBookNumber; private final int recordBookNumber;
Student(String groupNumber, double averageGrade, String recordBookNumber) { public Student(String groupNumber, double averageGrade, int recordBookNumber) {
if (groupNumber == null || groupNumber.isBlank()) { if (groupNumber == null || !groupNumber.matches("^[A-Z][0-9]{2}$")) {
throw new IllegalArgumentException("Group number cannot be empty"); throw new IllegalArgumentException(
"Group number must match format: one uppercase letter + two digits (e.g. A12)");
} }
if (averageGrade < 0.0 || averageGrade > 5.0) { if (averageGrade < 0.0 || averageGrade > 5.0) {
throw new IllegalArgumentException("Average grade must be between 0.0 and 5.0"); throw new IllegalArgumentException("Average grade must be between 0.0 and 5.0");
} }
if (recordBookNumber == null || recordBookNumber.isBlank()) { if (recordBookNumber <= 0) {
throw new IllegalArgumentException("Record book number cannot be empty"); throw new IllegalArgumentException("Record book number must be positive");
} }
this.groupNumber = groupNumber; this.groupNumber = groupNumber;
this.averageGrade = averageGrade; this.averageGrade = averageGrade;
@@ -26,12 +27,20 @@ public class Student {
return groupNumber; return groupNumber;
} }
public double getAverageGrade() { public int getRecordBookNumber() {
return averageGrade; return recordBookNumber;
} }
public String getRecordBookNumber() { public Student withGroupNumber(String groupNumber) {
return recordBookNumber; return new Student(groupNumber, this.averageGrade, this.recordBookNumber);
}
public Student withAverageGrade(double averageGrade) {
return new Student(this.groupNumber, averageGrade, this.recordBookNumber);
}
public Student withRecordBookNumber(int recordBookNumber) {
return new Student(this.groupNumber, this.averageGrade, recordBookNumber);
} }
@Override @Override
@@ -42,9 +51,8 @@ public class Student {
+ '\'' + '\''
+ ", averageGrade=" + ", averageGrade="
+ averageGrade + averageGrade
+ ", recordBookNumber='" + ", recordBookNumber="
+ recordBookNumber + recordBookNumber
+ '\''
+ '}'; + '}';
} }
@@ -63,14 +71,29 @@ public class Student {
} }
Student student = (Student) obj; Student student = (Student) obj;
return Double.compare(averageGrade, student.averageGrade) == 0 return Double.compare(averageGrade, student.averageGrade) == 0
&& Objects.equals(groupNumber, student.groupNumber) && recordBookNumber == student.recordBookNumber
&& Objects.equals(recordBookNumber, student.recordBookNumber); && Objects.equals(groupNumber, student.groupNumber);
} }
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(groupNumber, averageGrade, recordBookNumber); return Objects.hash(groupNumber, averageGrade, recordBookNumber);
} }
public static double getMinAverageGrade() {
return 0.0;
}
public static double getMaxAverageGrade() {
return 5.0;
}
public static int getMinRecordBookNumber() {
return 1;
}
public static String getGroupNumberPattern() {
return "^[A-Z][0-9]{2}$";
}
} }
@@ -3,7 +3,7 @@ package ru.project.student;
public class StudentBuilder { public class StudentBuilder {
private String groupNumber; private String groupNumber;
private double averageGrade; private double averageGrade;
private String recordBookNumber; private int recordBookNumber;
public StudentBuilder setGroupNumber(String groupNumber) { public StudentBuilder setGroupNumber(String groupNumber) {
this.groupNumber = groupNumber; this.groupNumber = groupNumber;
@@ -15,7 +15,7 @@ public class StudentBuilder {
return this; return this;
} }
public StudentBuilder setRecordBookNumber(String recordBookNumber) { public StudentBuilder setRecordBookNumber(int recordBookNumber) {
this.recordBookNumber = recordBookNumber; this.recordBookNumber = recordBookNumber;
return this; return this;
} }