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
16 changes: 16 additions & 0 deletions java-gym-master.iml
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,21 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library" scope="TEST">
<library name="JUnit5.8.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.8.1/junit-jupiter-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.8.1/junit-jupiter-api-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.8.1/junit-platform-commons-1.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.8.1/junit-jupiter-params-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.8.1/junit-jupiter-engine-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.8.1/junit-platform-engine-1.8.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>
5 changes: 0 additions & 5 deletions src/ru/yandex/practicum/gym/Age.java

This file was deleted.

6 changes: 6 additions & 0 deletions src/ru/yandex/practicum/gym/AgeGroup.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package ru.yandex.practicum.gym;

public enum AgeGroup {
CHILD,
ADULT
}
24 changes: 11 additions & 13 deletions src/ru/yandex/practicum/gym/Coach.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,29 @@
import java.util.Objects;

public class Coach {
private final String surname;
private final String name;
private final String patronymic;

//фамилия
private String surname;
//имя
private String name;
//отчество
private String middleName;

public Coach(String surname, String name, String middleName) {
public Coach(String surname, String name, String patronymic) {
this.surname = surname;
this.name = name;
this.middleName = middleName;
this.patronymic = patronymic;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Coach coach = (Coach) o;
return Objects.equals(surname, coach.surname) && Objects.equals(name, coach.name) && Objects.equals(middleName, coach.middleName);
return Objects.equals(surname, coach.surname)
&& Objects.equals(name, coach.name)
&& Objects.equals(patronymic, coach.patronymic);
}

@Override
public int hashCode() {
return Objects.hash(surname, name, middleName);
return Objects.hash(surname, name, patronymic);
}

public String getSurname() {
Expand All @@ -38,7 +36,7 @@ public String getName() {
return name;
}

public String getMiddleName() {
return middleName;
public String getPatronymic() {
return patronymic;
}
}
24 changes: 24 additions & 0 deletions src/ru/yandex/practicum/gym/CounterOfTrainings.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package ru.yandex.practicum.gym;

public class CounterOfTrainings implements Comparable<CounterOfTrainings> {
private final Coach coach;
private final int trainingsCount;

public CounterOfTrainings(Coach coach, int trainingsCount) {
this.coach = coach;
this.trainingsCount = trainingsCount;
}

@Override
public int compareTo(CounterOfTrainings o) {
return trainingsCount - o.trainingsCount;
}

public Coach getCoach() {
return coach;
}

public int getTrainingsCount() {
return trainingsCount;
}
}
8 changes: 7 additions & 1 deletion src/ru/yandex/practicum/gym/DayOfWeek.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
package ru.yandex.practicum.gym;

public enum DayOfWeek {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
23 changes: 10 additions & 13 deletions src/ru/yandex/practicum/gym/Group.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,25 @@
package ru.yandex.practicum.gym;

public class Group {
//название группы
private String title;
//тип (взрослая или детская)
private Age age;
//длительность (в минутах)
private int duration;
private final String title;
private final AgeGroup ageGroup;
private final int durationMins;

public Group(String title, Age age, int duration) {
public Group(String title, AgeGroup ageGroup, int durationMins) {
this.title = title;
this.age = age;
this.duration = duration;
this.ageGroup = ageGroup;
this.durationMins = durationMins;
}

public String getTitle() {
return title;
}

public Age getAge() {
return age;
public AgeGroup getAgeGroup() {
return ageGroup;
}

public int getDuration() {
return duration;
public int getDurationMins() {
return durationMins;
}
}
24 changes: 13 additions & 11 deletions src/ru/yandex/practicum/gym/TimeOfDay.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,14 @@
import java.util.Objects;

public class TimeOfDay implements Comparable<TimeOfDay> {

//часы (от 0 до 23)
private int hours;
//минуты (от 0 до 59)
private int minutes;
private final int hours;
private final int minutes;

public TimeOfDay(int hours, int minutes) {
this.hours = hours;
this.minutes = minutes;
}

@Override
public int compareTo(TimeOfDay o) {
if (hours != o.hours) return hours - o.hours;
return minutes - o.minutes;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand All @@ -33,6 +24,17 @@ public int hashCode() {
return Objects.hash(hours, minutes);
}

@Override
public String toString() {
return String.format("%02d:%02d", hours, minutes);
}

@Override
public int compareTo(TimeOfDay o) {
if (hours != o.hours) return hours - o.hours;
return minutes - o.minutes;
}

public int getHours() {
return hours;
}
Expand Down
44 changes: 38 additions & 6 deletions src/ru/yandex/practicum/gym/Timetable.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,50 @@
import java.util.*;

public class Timetable {
private final Map<DayOfWeek, Map<TimeOfDay, List<TrainingSession>>> timetable;
private final Map<Coach, Integer> coachStatistics;

private /* как это хранить??? */ timetable;
public Timetable() {
timetable = new HashMap<>();
coachStatistics = new HashMap<>();
}

public void addNewTrainingSession(TrainingSession trainingSession) {
//сохраняем занятие в расписании
saveSession(trainingSession);
updateCoachStatistics(trainingSession.getCoach());
}

private void saveSession(TrainingSession trainingSession) {
Map<TimeOfDay, List<TrainingSession>> daySessions =
timetable.computeIfAbsent(trainingSession.getDayOfWeek(), sessions -> new TreeMap<>());
List<TrainingSession> timeSessions =
daySessions.computeIfAbsent(trainingSession.getTimeOfDay(), sessions -> new ArrayList<>());
timeSessions.add(trainingSession);
}

private void updateCoachStatistics(Coach coach) {
coachStatistics.put(coach, coachStatistics.getOrDefault(coach, 0) + 1);
}

public Map<TimeOfDay, List<TrainingSession>> getTrainingSessionsForDay(DayOfWeek dayOfWeek) {
return timetable.getOrDefault(dayOfWeek, new TreeMap<>());
}

public List<TrainingSession> getTrainingSessionsForDayAndTime(DayOfWeek dayOfWeek, TimeOfDay timeOfDay) {
return timetable.getOrDefault(dayOfWeek, new HashMap<>()).getOrDefault(timeOfDay, new ArrayList<>());
}

public /* непонятно, что возвращать */ getTrainingSessionsForDay(DayOfWeek dayOfWeek) {
//как реализовать, тоже непонятно, но сложность должна быть О(1)
public List<CounterOfTrainings> getCountByCoaches() {
List<CounterOfTrainings> counters = assembleStats();
Collections.sort(counters);
return counters.reversed();
}

public /* непонятно, что возвращать */ getTrainingSessionsForDayAndTime(DayOfWeek dayOfWeek, TimeOfDay timeOfDay) {
//как реализовать, тоже непонятно, но сложность должна быть О(1)
private List<CounterOfTrainings> assembleStats() {
List<CounterOfTrainings> counters = new ArrayList<>();
for (Map.Entry<Coach, Integer> stat : coachStatistics.entrySet()) {
counters.add(new CounterOfTrainings(stat.getKey(), stat.getValue()));
}
return counters;
}
}
13 changes: 4 additions & 9 deletions src/ru/yandex/practicum/gym/TrainingSession.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
package ru.yandex.practicum.gym;

public class TrainingSession {

//группа
private Group group;
//тренер
private Coach coach;
//день недели
private DayOfWeek dayOfWeek;
//время начала занятия
private TimeOfDay timeOfDay;
private final Group group;
private final Coach coach;
private final DayOfWeek dayOfWeek;
private final TimeOfDay timeOfDay;

public TrainingSession(Group group, Coach coach, DayOfWeek dayOfWeek, TimeOfDay timeOfDay) {
this.group = group;
Expand Down
77 changes: 77 additions & 0 deletions test/ru/yandex/practicum/gym/CoachTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package ru.yandex.practicum.gym;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;

public class CoachTest {
private static final String SURNAME = "Surname";
private static final String OTHER_SURNAME = "OtherSurname";
private static final String NAME = "Name";
private static final String OTHER_NAME = "OtherName";
private static final String PATRONYMIC = "Patronymic";
private static final String OTHER_PATRONYMIC = "OtherPatronymic";

@Test
public void constructor() {
Coach coach = new Coach(SURNAME, NAME, PATRONYMIC);
assertEquals(SURNAME, coach.getSurname());
assertEquals(NAME, coach.getName());
assertEquals(PATRONYMIC, coach.getPatronymic());
}

@Test
public void equals_Equal() {
Coach first = new Coach(SURNAME, NAME, PATRONYMIC);
Coach second = new Coach(SURNAME, NAME, PATRONYMIC);
assertEquals(first, second);
}

@Test
public void equals_NotEqualSurname() {
Coach first = new Coach(SURNAME, NAME, PATRONYMIC);
Coach second = new Coach(OTHER_SURNAME, NAME, PATRONYMIC);
assertNotEquals(first, second);
}

@Test
public void equals_NotEqualName() {
Coach first = new Coach(SURNAME, NAME, PATRONYMIC);
Coach second = new Coach(SURNAME, OTHER_NAME, PATRONYMIC);
assertNotEquals(first, second);
}

@Test
public void equals_NotEqualPatronymic() {
Coach first = new Coach(SURNAME, NAME, PATRONYMIC);
Coach second = new Coach(SURNAME, NAME, OTHER_PATRONYMIC);
assertNotEquals(first, second);
}

@Test
public void equals_OtherType() {
Coach first = new Coach(SURNAME, NAME, PATRONYMIC);
assertNotEquals(first, 1);
}

@Test
public void equals_Null() {
Coach first = new Coach(SURNAME, NAME, PATRONYMIC);
assertNotEquals(first, null);
}

@Test
public void hashCode_Equal() {
Coach first = new Coach(SURNAME, NAME, PATRONYMIC);
Coach second = new Coach(SURNAME, NAME, PATRONYMIC);
assertEquals(first.hashCode(), second.hashCode());
}

@Test
public void hashCode_NotEqual() {
Coach first = new Coach(SURNAME, NAME, PATRONYMIC);
Coach second = new Coach(OTHER_SURNAME, OTHER_NAME, OTHER_PATRONYMIC);
assertNotEquals(first.hashCode(), second.hashCode());
}
}
27 changes: 27 additions & 0 deletions test/ru/yandex/practicum/gym/CounterOfTrainingsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package ru.yandex.practicum.gym;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class CounterOfTrainingsTest {
private static final Coach COACH = new Coach("Васильев", "Николай", "Сергеевич");
private static final Coach OTHER_COACH = new Coach("Игнатьева", "Юлия", "Александровна");
private static final int TRAININGS_COUNT = 15;
private static final int GREATER_TRAININGS_COUNT = 20;

@Test
public void constructor() {
CounterOfTrainings counter = new CounterOfTrainings(COACH, TRAININGS_COUNT);
assertEquals(COACH, counter.getCoach());
assertEquals(TRAININGS_COUNT, counter.getTrainingsCount());
}

@Test
public void compareTo() {
CounterOfTrainings first = new CounterOfTrainings(COACH, TRAININGS_COUNT);
CounterOfTrainings second = new CounterOfTrainings(OTHER_COACH, GREATER_TRAININGS_COUNT);
assertTrue(first.compareTo(second) < 0);
}
}
Loading