From 633e916c3541131abe39814972d3b20998b6a340 Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 14:44:16 +0300 Subject: [PATCH 01/11] Create pom.xml --- pom.xml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 pom.xml diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..df0d7fd --- /dev/null +++ b/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + org.example + Deanaery + 1.0-SNAPSHOT + + + junit + junit + 4.12 + test + + + org.junit.jupiter + junit-jupiter + RELEASE + test + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + From 7c82afbe89b27b409caa27b45723411fbbf234c8 Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 14:45:00 +0300 Subject: [PATCH 02/11] Create groups.json --- groups.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 groups.json diff --git a/groups.json b/groups.json new file mode 100644 index 0000000..cfe4052 --- /dev/null +++ b/groups.json @@ -0,0 +1,7 @@ +{ + "groups": [ + {"title": "Programmers"}, + {"title": "Managers"}, + {"title": "Testers"} + ] +} From afdf80c414eb057ed36d6408d6480459379c714c Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 14:45:34 +0300 Subject: [PATCH 03/11] Create students.json --- students.json | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 students.json diff --git a/students.json b/students.json new file mode 100644 index 0000000..ed76ce5 --- /dev/null +++ b/students.json @@ -0,0 +1,44 @@ +{ + "students": [ + {"fio": "Саитов Олег Еремеевич"}, + {"fio": "Иволгин Гаврила Казимирович"}, + {"fio": "Парфёнов Парфен Панкратиевич"}, + {"fio": "Лекомцев Ефрем Саввевич"}, + {"fio": "Копылов Мечислав Евсеевич"}, + {"fio": "Бичурин Порфирий Иванович"}, + {"fio": "Челомцев Кир Егорович"}, + {"fio": "Лукашенко Максимильян Ильевич"}, + {"fio": "Мукосеев Ираклий Елисеевич"}, + {"fio": "Кожевников Венедикт Юриевич"}, + {"fio": "Морякова Стела Рубеновна"}, + {"fio": "Шеркова Берта Арсентиевна"}, + {"fio": "Поджио Инга Эдуардовна"}, + {"fio": "Шайна Вера Ивановна"}, + {"fio": "Задорожная Диана Серафимовна"}, + {"fio": "Еромеева Евдокия Агафоновна"}, + {"fio": "Тарновецкая Наталия Ростиславовна"}, + {"fio": "Шигаева Кристина Михеевна"}, + {"fio": "Голубова Марта Сидоровна"}, + {"fio": "Кондр Яна Карловна"}, + {"fio": "Калугер Любава Данилаивна"}, + {"fio": "Шеншина Изольда Платоновна"}, + {"fio": "Гущина Рената Захаровна"}, + {"fio": "Лавлинская Лариса Германовна"}, + {"fio": "Яковенцева Евдокия Тимофеевна"}, + {"fio": "Касьяненко Валентина Ивановна"}, + {"fio": "Андреевская Ярослава Пахомовна"}, + {"fio": "Богданова Анастасия Виталиевна"}, + {"fio": "Лазарева Алина Эдуардовна"}, + {"fio": "Карасевич Доминика Ипполитовна"}, + {"fio": "Чендев Семен Эрнестович"}, + {"fio": "Немов Серафим Семенович"}, + {"fio": "Ялчевский Натан Давидович"}, + {"fio": "Хохлов Фома Владимирович"}, + {"fio": "Шувалов Семён Фомевич"}, + {"fio": "Ольховский Андрон Глебович"}, + {"fio": "Юферев Радион Владиславович"}, + {"fio": "Капнист Авдей Никонович"}, + {"fio": "Пахомов Захар Еремеевич"}, + {"fio": "Гуляева Сабина Мироновна"} + ] +} From aeed844b60622e24569b127496ed222019f610b3 Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 14:46:41 +0300 Subject: [PATCH 04/11] Create Deanery.java --- src/main/java/Deanery.java | 149 +++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 src/main/java/Deanery.java diff --git a/src/main/java/Deanery.java b/src/main/java/Deanery.java new file mode 100644 index 0000000..9489417 --- /dev/null +++ b/src/main/java/Deanery.java @@ -0,0 +1,149 @@ +import org.json.simple.parser.JSONParser; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.ParseException; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Iterator; +import java.util.ArrayList; +import java.util.Random; + +public class Deanery { + ArrayList students; + ArrayList groups; + + Deanery() { + this.students = new ArrayList(); + this.groups = new ArrayList(); + } + + public void importStudents(String fileName){ + try{ + Object obj = new JSONParser().parse(new FileReader(fileName)); + JSONObject jo = (JSONObject) obj; + JSONArray stud = (JSONArray) jo.get("students"); + Iterator studItr = stud.iterator(); + int id = 1; + while(studItr.hasNext()){ + JSONObject buf = (JSONObject)studItr.next(); + Student temp = new Student(buf.get("fio").toString(),id); + students.add(temp); + id++; + } + } + catch(FileNotFoundException e){ + System.out.println(e.getMessage()); + } + catch(IOException e){ + System.out.println(e.getMessage()); + } + catch(ParseException e){ + System.out.println(e.getMessage()); + } + } + + public void importGroup(String fileName){ + try{ + Object obj = new JSONParser().parse(new FileReader(fileName)); + JSONObject jo = (JSONObject) obj; + JSONArray grp = (JSONArray) jo.get("groups"); + Iterator grpItr = grp.iterator(); + int len = 0; + int i = 0; + int j = 0; + int d = students.size() / grp.size(); + while(grpItr.hasNext()){ + len += d; + JSONObject buf = (JSONObject)grpItr.next(); + Group temp = new Group(buf.get("title").toString()); + groups.add(temp); + for (; i < len; i++){ + groups.get(j).addStudent(students.get(i)); + } + j++; + } + } + catch(FileNotFoundException e){ + System.out.println(e.getMessage()); + } + catch(IOException e){ + System.out.println(e.getMessage()); + } + catch(ParseException e){ + System.out.println(e.getMessage()); + } + } + + public void addMarksForAll(){ + float markCount = 100; + for (Student student: students){ + Random random = new Random(); + for (int i = 0; i < markCount; i++){ + student.addMark(random.nextInt(5) + 1); + } + } + } + + public void headInitialize(){ + for (Group group: groups){ + group.chooseHead(); + } + } + + public void transferStudent(int id, String newTitle){ + Student tempStud = null; + for (Group group: groups){ + if (group.searchStudentId(id) != null){ + tempStud = group.searchStudentId(id); + group.removeStudent(tempStud); + } + } + for (Group group: groups) { + if (group.title == newTitle){ + group.addStudent(tempStud); + } + } + } + + public void deductStudent(){ + double minAvgMark = 2.5; + for (int i =0; i < students.size(); i++){ + if (students.get(i).averageMark() < minAvgMark){ + students.get(i).group.removeStudent(students.get(i)); + students.remove(students.get(i)); + i--; + } + } + } + + public void writeToFile(String fileName){ + try{ + FileWriter fwriter = new FileWriter(fileName); + JSONArray groupsJA = new JSONArray(); + for(Group group: groups){ + JSONObject groupJsn = new JSONObject(); + groupJsn.put("groupTitle", group.getTitle()); + groupJsn.put("groupAverageMark", group.averageMarkGroup()); + groupJsn.put("headStudent", group.getHead().getFio()); + JSONArray studentJA = new JSONArray(); + for (Student student: group.getStudents()){ + JSONObject studentJsn = new JSONObject(); + studentJsn.put("studentId", student.getId()); + studentJsn.put("studentFIO", student.getFio()); + studentJsn.put("studentAverageMark", student.averageMark()); + studentJA.add(studentJsn); + } + groupJsn.put("students", studentJA); + groupsJA.add(groupJsn); + } + fwriter.write(groupsJA.toJSONString()); + fwriter.flush(); + fwriter.close(); + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } +} From 3b0fe5a06026c28eb26744780bf96959b0ade9d2 Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 14:47:24 +0300 Subject: [PATCH 05/11] Create Group.java --- src/main/java/Group.java | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/main/java/Group.java diff --git a/src/main/java/Group.java b/src/main/java/Group.java new file mode 100644 index 0000000..f5a5110 --- /dev/null +++ b/src/main/java/Group.java @@ -0,0 +1,71 @@ +import java.util.ArrayList; +import java.util.Random; + +public class Group { + String title; + public ArrayList students; + private Student head; + + Group(String groupMame){ + this.title = groupMame; + this.students = new ArrayList(); + head = null; + } + + public void addStudent(Student student){ + this.students.add(student); + student.addGroup(this); + } + + public Student chooseHead(){ + if (students.size() > 0 && this.head==null) { + Random rndm = new Random(); + this.head = students.get(rndm.nextInt(students.size())); + } else { + return head; + } + return null; + } + + public Student searchStudentName(String name) { + for (Student student: this.students){ + if (name == student.getFio()){ + return student; + } + } + return null; + } + + public Student searchStudentId(int id) { + for (Student student: this.students){ + if (id == student.getId()){ + return student; + } + } + return null; + } + + public double averageMarkGroup(){ + float general = 0; + for (Student student: students){ + general += student.averageMark(); + } + return general / students.size(); + } + + public void removeStudent(Student student){ + students.remove(student); + } + + public String getTitle(){ + return this.title; + } + + public Student getHead(){ + return this.head; + } + + public ArrayList getStudents(){ + return this.students; + } +} From 16e0911bf492bb22a0501ed1771309a659d4defb Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 14:47:56 +0300 Subject: [PATCH 06/11] Create Student.java --- src/main/java/Student.java | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main/java/Student.java diff --git a/src/main/java/Student.java b/src/main/java/Student.java new file mode 100644 index 0000000..a850c88 --- /dev/null +++ b/src/main/java/Student.java @@ -0,0 +1,40 @@ +import java.util.ArrayList; + +import java.util.ArrayList; + +public class Student { + private int id; + private String fio; + protected Group group; + protected ArrayList marks = new ArrayList(); + + Student(String fio, int id){ + this.fio = fio; + this.id = id; + } + + public String getFio(){ + return this.fio; + } + + public int getId(){ + return this.id; + } + + public void addMark(int mark){ + this.marks.add(mark); + } + + public double averageMark(){ + float general = 0; + for (Integer integer: marks){ + general += integer; + } + return general / marks.size(); + } + + public Group addGroup(Group group){ + this.group = group; + return group; + } +} From 9a65b5b4e6da50605ef1c1ef199de89bfdbbbe62 Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 14:48:31 +0300 Subject: [PATCH 07/11] Create main.java --- src/main/java/main.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/main.java diff --git a/src/main/java/main.java b/src/main/java/main.java new file mode 100644 index 0000000..efea35e --- /dev/null +++ b/src/main/java/main.java @@ -0,0 +1,14 @@ +import java.io.File; + +public class main { + public static void main(String[] args) throws Exception { + Deanery deanery = new Deanery(); + deanery.importStudents("students.json"); + deanery.importGroup("groups.json"); + deanery.headInitialize(); + deanery.addMarksForAll(); + deanery.transferStudent(15, "Managers"); + deanery.deductStudent(); + deanery.writeToFile("result.json"); +} +} From 4d5aeb4a08ed25252ecdf6a73b349cd3b75869fd Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 14:49:37 +0300 Subject: [PATCH 08/11] Create DeaneryTest.java --- src/test/java/DeaneryTest.java | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/test/java/DeaneryTest.java diff --git a/src/test/java/DeaneryTest.java b/src/test/java/DeaneryTest.java new file mode 100644 index 0000000..70c6ad0 --- /dev/null +++ b/src/test/java/DeaneryTest.java @@ -0,0 +1,57 @@ +import org.junit.Test; + +import static org.junit.Assert.*; + +public class DeaneryTest { + Deanery deanery = new Deanery(); + Group group1 = new Group("Programmers"); + Group group2 = new Group("Manager"); + Group group3 = new Group("Testers"); + Student student1 = new Student("Иволгин Гаврила Казимирович", 1); + Student student2 = new Student("Челомцев Кир Егорович", 2); + Student student3 = new Student("Морякова Стела Рубеновна", 3); + + @Test + public void headInitialize(){ + Student s1 = student1; + Student s2= student2; + Student s3 = student3; + group1.addStudent(student1); + group2.addStudent(student2); + group3.addStudent(student3); + deanery.groups.add(group1); + deanery.groups.add(group2); + deanery.groups.add(group3); + deanery.headInitialize(); + assertEquals(s1, group1.getHead()); + assertEquals(s2, group2.getHead()); + assertEquals(s3, group3.getHead()); + } + + @Test + public void addMarksForAll(){ + + deanery.students.add(student1); + deanery.students.add(student2); + deanery.students.add(student3); + deanery.addMarksForAll(); + assertNotNull(student1.marks); + assertNotNull(student2.marks); + assertNotNull(student3.marks); + } + + @Test + public void transferStudent(){ + + group1.addStudent(student1); + group2.addStudent(student2); + group3.addStudent(student3); + deanery.groups.add(group1); + deanery.groups.add(group2); + deanery.groups.add(group3); + deanery.transferStudent(3, "Manager"); + assertEquals(1, deanery.groups.get(0).students.size()); + assertEquals(2, deanery.groups.get(1).students.size()); + assertEquals(0, deanery.groups.get(2).students.size()); + } +} From 991451fb5854f48e300f3c1d5219fa476b4e3bf9 Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 14:51:06 +0300 Subject: [PATCH 09/11] Create StudentTest.java --- src/test/java/StudentTest.java | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/test/java/StudentTest.java diff --git a/src/test/java/StudentTest.java b/src/test/java/StudentTest.java new file mode 100644 index 0000000..5b5af96 --- /dev/null +++ b/src/test/java/StudentTest.java @@ -0,0 +1,42 @@ +import org.junit.Test; + +import java.util.ArrayList; + +import static org.junit.Assert.*; + +public class StudentTest { + Student student1 = new Student("Морякова Стела Рубеновна", 1); + Student student2 = new Student("Челомцев Кир Егорович", 2); + Student student3 = new Student("Рыжанова Нелли Петровна", 3); + + @Test + public void checkGetIdFio(){ + assertEquals(1, student1.getId()); + assertEquals("Морякова Стела Рубеновна", student1.getFio()); + } + + @Test + public void checkAddMark(){ + student2.addMark(3); + student2.addMark(4); + student2.addMark(5); + student2.addMark(2); + ArrayList expectedMarks = new ArrayList(); + expectedMarks.add(3); + expectedMarks.add(4); + expectedMarks.add(5); + expectedMarks.add(2); + assertEquals(expectedMarks, student2.marks); + } + + @Test + public void checkAverageMark(){ + student3.addMark(2); + student3.addMark(4); + student3.addMark(5); + student3.addMark(2); + assertEquals(3.25, student3.averageMark(), 0.001); + } + + +} From 37f4d62771ffdf49a62830cfc38d5f7761c22087 Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 14:51:59 +0300 Subject: [PATCH 10/11] Create GroupTest.java --- src/test/java/GroupTest.java | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/test/java/GroupTest.java diff --git a/src/test/java/GroupTest.java b/src/test/java/GroupTest.java new file mode 100644 index 0000000..8e04ffa --- /dev/null +++ b/src/test/java/GroupTest.java @@ -0,0 +1,43 @@ +import org.junit.Test; + +import java.util.ArrayList; + +import static org.junit.Assert.*; + +public class GroupTest { + Group group = new Group("Manager"); + Student student1 = new Student("Иволгин Гаврила Казимирович", 1); + Student student2 = new Student("Челомцев Кир Егорович", 2); + Student student3 = new Student("Морякова Стела Рубеновна", 3); + + @Test + public void checkGetHead(){ + group.addStudent(student3); + group.chooseHead(); + assertEquals(student3, group.getHead()); + } + + @Test + public void checkAverageMarkGroup(){ + group.addStudent(student1); + group.addStudent(student2); + student1.addMark(3); + student1.addMark(3); + student1.addMark(3); + student2.addMark(5); + student2.addMark(5); + student2.addMark(5); + assertEquals(4.0, group.averageMarkGroup(), 0.001); + } + + @Test + public void checkRemoveStudent(){ + group.addStudent(student1); + group.addStudent(student2); + group.removeStudent(student2); + ArrayList expectedStudents = new ArrayList(); + expectedStudents.add(student1); + assertEquals(1, group.students.size()); + assertEquals(expectedStudents, group.students); + } +} From 9c8dcd24c10689545cdd99d250af80ada98ec8ad Mon Sep 17 00:00:00 2001 From: Bear346 <57682132+Bear346@users.noreply.github.com> Date: Mon, 9 Nov 2020 15:18:01 +0300 Subject: [PATCH 11/11] Update pom.xml --- pom.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pom.xml b/pom.xml index df0d7fd..f719a92 100644 --- a/pom.xml +++ b/pom.xml @@ -6,6 +6,18 @@ org.example Deanaery 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + junit @@ -25,4 +37,6 @@ 1.1.1 + +