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": "Гуляева Сабина Мироновна"} + ] +}