diff --git a/coolName/pom.xml b/coolName/pom.xml
new file mode 100644
index 0000000..507d66a
--- /dev/null
+++ b/coolName/pom.xml
@@ -0,0 +1,19 @@
+
+
+
+ programming-lab-example
+ ru.spbstu.insys
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ coolName
+
+
+ 16
+ 16
+
+
+
\ No newline at end of file
diff --git a/coolName/src/main/java/GroupOfStudents.java b/coolName/src/main/java/GroupOfStudents.java
new file mode 100644
index 0000000..a880dcc
--- /dev/null
+++ b/coolName/src/main/java/GroupOfStudents.java
@@ -0,0 +1,87 @@
+import java.util.*;
+
+
+public class GroupOfStudents {
+ private final Map rating = new HashMap<>();
+
+ public int size() {
+ return rating.size();
+ }
+
+ void addStudent (String student, String subjects) {
+ if (student.isBlank() || rating.containsKey(student))
+ throw new IllegalArgumentException();
+ else {
+ Map allSubjects = new HashMap<>();
+ String[] items = subjects.split(", ");
+ for(String item: items) {
+ if (item.split(" ").length < 2)
+ allSubjects.put(item.split(" ")[0], " ");
+ else
+ allSubjects.put(item.split(" ")[0], item.split(" ")[1]);
+ }
+ rating.put(student, (HashMap) allSubjects);
+ }
+ }
+
+ void deleteStudent (String student) {
+ if (student.isBlank() || !rating.containsKey(student))
+ throw new IllegalArgumentException();
+ rating.remove(student);
+ }
+
+ void changeMark (String student, String subject, int mark) {
+ if (student.isBlank() || subject.isBlank() || mark <= 0 || !rating.containsKey(student))
+ throw new IllegalArgumentException();
+ Map items = rating.get(student);
+ items.put(subject, Integer.toString(mark));
+ rating.put(student, (HashMap) items);
+ }
+
+
+ void addMark (String student, String subject, int mark) {
+ if (student.isBlank() || subject.isBlank() || mark <= 0 || !rating.containsKey(student))
+ throw new IllegalArgumentException();
+ Map items = rating.get(student);
+ items.put(subject, Integer.toString(mark));
+ rating.put(student, (HashMap) items);
+ }
+
+ void deleteMark (String student, String subject) {
+ if (student.isBlank() || subject.isBlank() || !rating.containsKey(student))
+ throw new IllegalArgumentException();
+ Map items = rating.get(student);
+ if (!items.containsKey(subject)) throw new IllegalArgumentException();
+ if (!items.get(subject).equals(" ")) items.put(subject, " ");
+ rating.put(student, (HashMap) items);
+ }
+
+ public String search(String student) {
+ if (student.isBlank() || !rating.containsKey(student))
+ throw new IllegalArgumentException();
+ return rating.get(student).toString();
+ }
+
+ void deleteSubject (String subject) {
+ if (subject.isBlank())
+ throw new IllegalArgumentException();
+ for (Map.Entry entry : rating.entrySet()) {
+ String student = entry.getKey();
+ Map items = rating.get(student);
+ items.remove(subject);
+ rating.put(student, (HashMap) items);
+ }
+ }
+
+ void addSubject (String subject) {
+ if (subject.isBlank())
+ throw new IllegalArgumentException();
+ for (Map.Entry entry: rating.entrySet()) {
+ String student = entry.getKey();
+ Map items = rating.get(student);
+ items.put(subject, " ");
+ items.remove("");
+ rating.put(student, (HashMap) items);
+ }
+ }
+}
diff --git a/coolName/src/test/java/GroupOfStudentsTest.java b/coolName/src/test/java/GroupOfStudentsTest.java
new file mode 100644
index 0000000..be799b3
--- /dev/null
+++ b/coolName/src/test/java/GroupOfStudentsTest.java
@@ -0,0 +1,101 @@
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class GroupOfStudentsTest {
+
+
+ private GroupOfStudents testGroup() {
+ GroupOfStudents exampleGroup = new GroupOfStudents();
+ exampleGroup.addStudent("Макаров Иван Дмитриевич", "Биология 5, Фармацевтика 3, Политология 1");
+ exampleGroup.addStudent("Мартынов Аскольд Никитевич", "Биология 5, Фармацевтика 3");
+ exampleGroup.addStudent("Алексеев Юлий Станиславович", "Фармацевтика 3, Политология 1");
+ exampleGroup.addStudent("Соловьёв Велор Владленович", "Фармацевтика 3, Философия");
+ return exampleGroup;
+ }
+
+ @Test
+ void addStudent() {
+ GroupOfStudents exampleGroup = testGroup();
+ exampleGroup.addStudent("Веселов Венедикт Донатович", "Биология 5, Философия 4, Геометрия 2");
+ assertEquals("{Геометрия=2, Биология=5, Философия=4}",
+ exampleGroup.search("Веселов Венедикт Донатович"));
+ assertThrows(IllegalArgumentException.class,
+ () -> exampleGroup.addStudent("Веселов Венедикт Донатович", "Биология 5, Философия 4, Геометрия 2"));
+ assertThrows(IllegalArgumentException.class,
+ () -> exampleGroup.addStudent("", "Биология 5, Фармацевтика 3, Политология 1"));
+ }
+
+ @Test
+ void deleteStudent() {
+ GroupOfStudents exampleGroup = testGroup();
+ exampleGroup.deleteStudent("Макаров Иван Дмитриевич");
+ assertEquals(3, exampleGroup.size());
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.deleteStudent(""));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.deleteStudent("Павлов Сергей Кимович"));
+ }
+
+ @Test
+ void addMark() {
+ GroupOfStudents exampleGroup = testGroup();
+ exampleGroup.addStudent("Павлов Сергей Кимович", "Биология 5, Геометрия, Философия 4");
+ exampleGroup.addMark("Соловьёв Велор Владленович", "Философия", 4);
+ exampleGroup.addMark("Павлов Сергей Кимович", "Геометрия", 5);
+ assertEquals("{Геометрия=5, Биология=5, Философия=4}", exampleGroup.search("Павлов Сергей Кимович"));
+ assertEquals("{Фармацевтика=3, Философия=4}", exampleGroup.search("Соловьёв Велор Владленович"));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.addMark("", "Геометрия", 5));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.addMark("Павлов Сергей Кимович", "", 5));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.addMark("Павлов Сергей Кимович", "Геометрия", -1));
+ }
+
+ @Test
+ void deleteMark() {
+ GroupOfStudents exampleGroup = testGroup();
+ exampleGroup.addStudent("Павлов Сергей Кимович", "Биология 5, Геометрия 3, Философия 4");
+ exampleGroup.deleteMark("Павлов Сергей Кимович", "Философия");
+ exampleGroup.deleteMark("Соловьёв Велор Владленович", "Фармацевтика");
+ assertEquals("{Геометрия=3, Биология=5, Философия= }", exampleGroup.search("Павлов Сергей Кимович"));
+ assertEquals("{Фармацевтика= , Философия= }", exampleGroup.search("Соловьёв Велор Владленович"));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.deleteMark("", "Биология"));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.deleteMark("Соловьёв Велор Владленович", ""));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.deleteMark("Соловьёв Велор Владленович", "Политология"));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.deleteMark("Красильников Антон Геннадиевич", "Политология"));
+ }
+
+ @Test
+ void changeMark() {
+ GroupOfStudents exampleGroup = testGroup();
+ exampleGroup.changeMark("Макаров Иван Дмитриевич", "Биология", 2);
+ exampleGroup.changeMark("Мартынов Аскольд Никитевич", "Биология", 3);
+ exampleGroup.changeMark("Алексеев Юлий Станиславович", "Политология", 5);
+ assertEquals("{Фармацевтика=3, Биология=2, Политология=1}", exampleGroup.search("Макаров Иван Дмитриевич"));
+ assertEquals("{Фармацевтика=3, Биология=3}", exampleGroup.search("Мартынов Аскольд Никитевич"));
+ assertEquals("{Фармацевтика=3, Политология=5}", exampleGroup.search("Алексеев Юлий Станиславович"));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.changeMark("", "Политология", 4));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.changeMark("Алексеев Юлий Станиславович", "", 4));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.changeMark("Красильников Антон Геннадиевич", "Фармацевтика", 4));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.changeMark("Алексеев Юлий Станиславович", "Фармацевтика", -4));
+ }
+
+ @Test
+ void deleteSubject() {
+ GroupOfStudents exampleGroup = testGroup();
+ exampleGroup.deleteSubject("Биология");
+ assertEquals("{Фармацевтика=3, Политология=1}", exampleGroup.search("Макаров Иван Дмитриевич"));
+ assertEquals("{Фармацевтика=3}", exampleGroup.search("Мартынов Аскольд Никитевич"));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.deleteSubject(""));
+ }
+
+ @Test
+ void addSubject() {
+ GroupOfStudents exampleGroup = testGroup();
+ exampleGroup.addStudent("Крюков Климент Игоревич", "");
+ exampleGroup.addSubject("Астрономия");
+ assertEquals("{Астрономия= }", exampleGroup.search("Крюков Климент Игоревич"));
+ assertEquals("{Фармацевтика=3, Астрономия= , Биология=5, Политология=1}", exampleGroup.search("Макаров Иван Дмитриевич"));
+ assertEquals("{Фармацевтика=3, Астрономия= , Биология=5}", exampleGroup.search("Мартынов Аскольд Никитевич"));
+ assertEquals("{Фармацевтика=3, Астрономия= , Политология=1}", exampleGroup.search("Алексеев Юлий Станиславович"));
+ assertEquals("{Фармацевтика=3, Астрономия= , Философия= }", exampleGroup.search("Соловьёв Велор Владленович"));
+ assertThrows(IllegalArgumentException.class, () -> exampleGroup.addSubject(""));
+ }
+}
\ No newline at end of file
diff --git a/coolName/target/classes/GroupOfStudents.class b/coolName/target/classes/GroupOfStudents.class
new file mode 100644
index 0000000..f81b01b
Binary files /dev/null and b/coolName/target/classes/GroupOfStudents.class differ
diff --git a/coolName/target/test-classes/GroupOfStudentsTest.class b/coolName/target/test-classes/GroupOfStudentsTest.class
new file mode 100644
index 0000000..daa1ecf
Binary files /dev/null and b/coolName/target/test-classes/GroupOfStudentsTest.class differ
diff --git a/pom.xml b/pom.xml
index 29ae17c..9ad97b7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,9 +5,13 @@
ru.spbstu.insys
programming-lab-example
- 1.0-SNAPSHOT
+ pom
+ 1.0-SNAPSHOT
+
+ coolName
+
-
+
11
5.8.2
${jvm.version}