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}