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"}
+ ]
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..f719a92
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,42 @@
+
+
+ 4.0.0
+ org.example
+ Deanaery
+ 1.0-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ RELEASE
+ test
+
+
+ com.googlecode.json-simple
+ json-simple
+ 1.1.1
+
+
+
+
+
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());
+ }
+ }
+}
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;
+ }
+}
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;
+ }
+}
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");
+}
+}
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());
+ }
+}
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);
+ }
+}
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);
+ }
+
+
+}
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": "Гуляева Сабина Мироновна"}
+ ]
+}