Skip to content
Open

B10 #90

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions groups.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"groups": [
{"title": "Programmers"},
{"title": "Managers"},
{"title": "Testers"}
]
}
42 changes: 42 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Deanaery</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>


</project>
149 changes: 149 additions & 0 deletions src/main/java/Deanery.java
Original file line number Diff line number Diff line change
@@ -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<Student> students;
ArrayList<Group> groups;

Deanery() {
this.students = new ArrayList<Student>();
this.groups = new ArrayList<Group>();
}

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());
}
}
}
71 changes: 71 additions & 0 deletions src/main/java/Group.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import java.util.ArrayList;
import java.util.Random;

public class Group {
String title;
public ArrayList<Student> students;
private Student head;

Group(String groupMame){
this.title = groupMame;
this.students = new ArrayList<Student>();
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<Student> getStudents(){
return this.students;
}
}
40 changes: 40 additions & 0 deletions src/main/java/Student.java
Original file line number Diff line number Diff line change
@@ -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<Integer> marks = new ArrayList<Integer>();

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;
}
}
14 changes: 14 additions & 0 deletions src/main/java/main.java
Original file line number Diff line number Diff line change
@@ -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");
}
}
57 changes: 57 additions & 0 deletions src/test/java/DeaneryTest.java
Original file line number Diff line number Diff line change
@@ -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());
}
}
Loading