diff --git a/.gitignore b/.gitignore
index f68d109..ea3a58a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
### IntelliJ IDEA ###
+.idea/
out/
!**/src/main/**/out/
!**/src/test/**/out/
@@ -26,4 +27,4 @@ bin/
.vscode/
### Mac OS ###
-.DS_Store
\ No newline at end of file
+.DS_Store
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 07115cd..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 65e8411..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/DeanOffice.java b/src/DeanOffice.java
new file mode 100644
index 0000000..f3ce1d2
--- /dev/null
+++ b/src/DeanOffice.java
@@ -0,0 +1,219 @@
+import java.util.*;
+import java.util.random.RandomGenerator;
+
+/**
+ * Этот класс Деканат нужен для управления студентами.
+ */
+public class DeanOffice {
+ private List studentDataBase = new ArrayList<>();
+
+ DeanOffice(){}
+
+ /**
+ * Случайное заполнение имен и групп студентов
+ * @param countRandomStudents Количество студентов, сгененрированых псевдослучайно.
+ * @param groupCount Количество групп студентов.
+ * @param subjects Предметы курса.
+ */
+ DeanOffice(int countRandomStudents, int groupCount, String[] subjects){
+ for (int i = 0; i < countRandomStudents; i++){
+ Map mapEvaluations = new HashMap<>();
+ for (String str : subjects){
+ mapEvaluations.put(str, RandomGenerator.getDefault().nextInt(2,6));
+ }
+
+ Students student = new Students("student #"+i,
+ "group #"+RandomGenerator.getDefault().nextInt(groupCount+1),
+ RandomGenerator.getDefault().nextInt(1,7),
+ mapEvaluations);
+ }
+ }
+
+ /**
+ * По умолчанию групп 3.
+ * @param countRandomStudents Количество студентов, сгененрированых псевдослучайно.
+ * @param subjects Предметы курса.
+ */
+ DeanOffice(int countRandomStudents, String[] subjects){
+ for (int i = 0; i < countRandomStudents; i++){
+ Map mapEvaluations = new HashMap<>();
+ // заполняем Map случайными оценками
+ for (String str : subjects){
+ mapEvaluations.put(str, RandomGenerator.getDefault().nextInt(2,6));
+ }
+
+ Students student = new Students("student #"+i,
+ "group #"+RandomGenerator.getDefault().nextInt(4),
+ RandomGenerator.getDefault().nextInt(1,7),
+ mapEvaluations );
+ addStudentInStudentDataBase(student);
+ }
+ }
+
+ /**
+ * @param countRandomStudents Количество студентов, сгененрированых псевдослучайно.
+ * @param names массив имен. Из него будет случайно браться имена для студентов.
+ * @param groups массив груп. Из него будет случайно браться названия групп для студентов.
+ * @param courses массив номеров курса. Из него будет случайно браться номера для определения курса студента.
+ * @param subjects массив предметов. Из него будет случайно браться названия предметов для студента.
+ */
+ DeanOffice(int countRandomStudents, String[] names, String[]groups, int[]courses, String[] subjects){
+ for (int i = 0; i < countRandomStudents; i++){
+ Map mapEvaluations = new HashMap<>();
+ // заполняем Map случайными оценками
+ for (String str : subjects){
+ mapEvaluations.put(str, RandomGenerator.getDefault().nextInt(2,6));
+ }
+ Students student = new Students(names[RandomGenerator.getDefault().nextInt(names.length)],
+ groups[RandomGenerator.getDefault().nextInt(groups.length)],
+ courses[RandomGenerator.getDefault().nextInt(groups.length)],
+ mapEvaluations);
+ addStudentInStudentDataBase(student);
+ }
+ }
+
+ /**
+ * Генерирует countRandomStudents студентов.
+ * @param countRandomStudents Количество студентов, сгененрированых псевдослучайно.
+ * @param names массив имен. Из него будет случайно браться имена для студентов.
+ * @param groups массив груп. Из него будет случайно браться названия групп для студентов.
+ * @param courses массив номеров курса. Из него будет случайно браться номера для определения курса студента.
+ * @param subjects массив предметов. Из него будет случайно браться названия предметов для студента.
+ * @param estimations массив оценок. Из него будет случайно браться оценки по предметам студента.
+ */
+ DeanOffice(int countRandomStudents, String[] names, String[]groups, int[]courses,
+ String[] subjects, int[] estimations)
+ {
+ for (int i = 0; i < countRandomStudents; i++){
+ Students student = new Students(names[RandomGenerator.getDefault().nextInt(names.length)],
+ groups[RandomGenerator.getDefault().nextInt(groups.length)],
+ courses[RandomGenerator.getDefault().nextInt(groups.length)],
+ subjects,estimations);
+ studentDataBase.add(student);
+ }
+ }
+
+ public void setStudentDataBase(List studentDataBase){
+ this.studentDataBase = studentDataBase;
+ }
+ /**
+ * Добавить объект студент в базу данных.
+ * @param student объект студент.
+ */
+ public void addStudentInStudentDataBase(Students student){
+ this.studentDataBase.add(student);
+ }
+
+ /**
+ * Добавить студента по имени, группе, курсу, предметам.
+ * @param name имя студента.
+ * @param group группа студента.
+ * @param course номер курса.
+ * @param subjects предметы студента.
+ */
+ public void addStudentInStudentDataBase(String name, String group, int course, String[] subjects){
+ Students student = new Students(name, group, course, subjects);
+ addStudentInStudentDataBase(student);
+ }
+ public void addStudentInStudentDataBase(String name, String group, int course, String[] subjects, int[] estimations){
+ Students student = new Students(name, group, course, subjects, estimations);
+ addStudentInStudentDataBase(student);
+ }
+
+ /**
+ * Получение массива студентов.
+ * @return список студентов.
+ */
+ public List getStudentDataBase(){
+ return studentDataBase;
+ }
+
+ /**
+ * Функция, которя удаляет студентов со средним баллом <3.
+ * @return количество удаленных студентов из списка. Или -1 если список студентов пуст
+ */
+ public int delBadStudents(){
+ return delBadStudents(studentDataBase);
+ }
+
+ /**
+ * Функция, которя удаляет студентов со средним баллом <3.
+ * @param studs Список студентов
+ * @return количество удаленных студентов из списка. Или -1 если список студентов пуст
+ */
+ public int delBadStudents(List studs){
+ if (studs.isEmpty()){
+ return -1;
+ }
+ int oldStudentSize = studs.size();
+ List temp = new ArrayList<>();
+ for (Students stud : studs){
+ int sum = 0;
+ if (stud.getEvaluations().isEmpty()) { //если у студента нет оценок, то его в temp не добавляем
+ continue; //Скипаем к следующему
+ }
+ for (Integer it : stud.getEvaluations().values()) { // берем оценки
+ sum += it;
+ }
+ int avgEvalutation = sum / stud.getEvaluations().size();
+ if (avgEvalutation >= 3) {
+ /*здесь catch на деление на ноль не нужен,
+ ибо в первом if мы исключаем пустой список*/
+ temp.add(stud);
+ }
+ }
+ this.setStudentDataBase(temp);
+ return oldStudentSize - temp.size();
+ }
+
+
+ /**
+ * Могут перевестись на курс старше
+ * @param studs Список студентов
+ * @return количество студентов которые перевелись. Или -1 если список студентов пуст
+ */
+ public int transferToOlderCourse(List studs){
+ if (studs.isEmpty()){
+ return -1;
+ }
+ int promotedStudents = 0;
+ for (Students stud : studs){
+ int sum = 0;
+ if (stud.getEvaluations().isEmpty()) { //если у студента нет оценок, то его в temp не добавляем
+ continue; //Скипаем к следующему
+ }
+ for (Integer it : stud.getEvaluations().values()) {
+ sum += it;
+ }
+ if (sum / stud.getEvaluations().size() >= 3) {
+ /*здесь catch на деление на ноль не нужен,
+ ибо в первом if мы исключаем пустой список*/
+ stud.setCourse(stud.getCourse()+1);
+ promotedStudents++;
+ }
+ }
+ this.setStudentDataBase(studs);
+ return promotedStudents;
+ }
+ /**
+ * Могут перевестись на курс старше
+ * @return количество студентов которые могут перевестись. Или -1 если список студентов пуст
+ */
+ public int transferToOlderCourse(){
+ return transferToOlderCourse(studentDataBase);
+ }
+ public void printStudents(Liststudents, int course){
+ for (Students stud: students){
+ if (stud.getCourse()==course){
+ System.out.println(stud.getName() + " | "+stud.getCourse() + " | "+stud.getGroup() + " | " + stud.getStringEvaluations());
+ }
+ }
+ }
+
+
+ public void printAllStudents(){
+ for (Students stud: this.getStudentDataBase()){
+ System.out.println(stud.getName() + " | "+stud.getCourse() + " | "+stud.getGroup() + " | " + stud.getStringEvaluations());
+ }
+ }
+}
diff --git a/src/Main.java b/src/Main.java
index 7aeb918..5869eb7 100644
--- a/src/Main.java
+++ b/src/Main.java
@@ -1,15 +1,31 @@
-//TIP To Run code, press or
-// click the icon in the gutter.
+
+import java.util.random.RandomGenerator;
+
public class Main {
+ /**
+ * Это основной метод, использующий методы классов.
+ * @param args Не используется.
+ */
public static void main(String[] args) {
- //TIP Press with your caret at the highlighted text
- // to see how IntelliJ IDEA suggests fixing it.
- System.out.printf("Hello and welcome!");
+ /**
+ * Я как обычно лишний раз замарочился
+ * пополнение List'a со студентами пополсянется несколькими способами.
+ * Либо мы передаем параметры в функцию и внутри этой функции создается объект класса Students и помещается
+ * в List или мы передаем сам объект класса Students и внутри
+ */
+ DeanOffice dean = new DeanOffice();
+ String[] subjects = {"Русский", "Математика", "Информатика"};
+ dean.addStudentInStudentDataBase("Аня", "ИТСС", 1, subjects, new int[] {2,2,3});
+ dean.addStudentInStudentDataBase("Глеб", "ЖТО", 2, subjects, new int[] {3,3,3});
+ dean.addStudentInStudentDataBase("Боря", "ЖТО", 3, subjects, new int[] {4,4,3});
+ dean.addStudentInStudentDataBase("Ира", "ИТСС", 3, subjects, new int[] {5,5,5});
- for (int i = 1; i <= 5; i++) {
- //TIP Press to start debugging your code. We have set one breakpoint
- // for you, but you can always add more by pressing .
- System.out.println("i test git= " + i);
- }
+ dean.printAllStudents();
+ System.out.println("Студенты 3-го курса");
+ dean.printStudents(dean.getStudentDataBase(),3);
+ System.out.println("Удаляем " + dean.delBadStudents() + " студентов, со средним баллом <3.");
+ dean.printAllStudents();
+ System.out.println("Переводим " + dean.transferToOlderCourse() + " студентов со средним балом >=3 на курс старше");
+ dean.printAllStudents();
}
-}
\ No newline at end of file
+}
diff --git a/src/Students.java b/src/Students.java
new file mode 100644
index 0000000..643e505
--- /dev/null
+++ b/src/Students.java
@@ -0,0 +1,214 @@
+import java.util.HashMap;
+import java.util.Map;
+import java.util.random.RandomGenerator;
+
+/**
+ * Класс Студент/
+ * Содержит имя, номер курса, название группы, и map оценок(по пятибальной системе(2,3,4,5)).
+ * */
+public class Students {
+ private String name;
+ private Map evaluations = new HashMap();
+ private String group;
+ private int course;
+
+ Students(){
+ this.name = "";
+ this.group = "";
+ this.course = 1;
+ }
+
+ Students(int course, Map evaluations){
+ this("","",1,evaluations);
+ }
+
+ Students(String name, String group, int course, String[] subjects) {
+ this.name = name;
+ this.group = group;
+ this.course = course;
+ setEvaluations(subjects);
+ }
+ Students(String name, String group, int course, String[] subjects, int[] estimations){
+ this.name = name;
+ this.group = group;
+ this.course = course;
+ setEvaluations(subjects,estimations);
+ }
+
+ Students(String name, String group, int course, Map evaluations){
+ this.name = name;
+ this.group = group;
+ this.course = course;
+ setEvaluations(evaluations);
+ }
+
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getGroup() {
+ return group;
+ }
+
+ public void setGroup(String group) {
+ this.group = group;
+ }
+
+ /**
+ * Геттер map оценок.
+ * @return Map (String, Integer).
+ */
+ public Map getEvaluations() {
+ return evaluations;
+ }
+
+ public String getStringEvaluations() {
+ String str = "";
+ for (String k : evaluations.keySet()){
+ str += k+" - " + evaluations.get(k) + ",";
+ }
+ return str;
+ }
+
+ /**
+ * Вставка оценок.
+ * @param evaluations мап с предметами и оценками.
+ * @return 0, если все оценки в рамках пятибальной системы и изменения вступят в силу. Иначе -1.
+ */
+ public Integer setEvaluations(Map evaluations) {
+ Map temp = new HashMap<>();
+ for(String it : evaluations.keySet()){
+ int val = evaluations.get(it);
+ if (val < 2 || val > 5){ // если несоблюдается условие пятибальной системы, то кидаем -1
+ return -1;
+ }
+ temp.put(it,evaluations.get(it)); // заполняем временный map
+ }
+ this.evaluations = temp;
+ return 0;
+ }
+
+ /**
+ * Вставка оценок.
+ * В случае, если в массив оценок меньше массива предметов, то недостающие оценки заполнятся случайно
+ * от 2 до 5 включительно.
+ * @param subjects предметы.
+ * @param estimations оценки.
+ * @return 0, если метод отработал стабильно. -1 если массив предметов пуст.
+ */
+ public Integer setEvaluations(String[] subjects, int[] estimations) {
+ if(subjects.length == 0){
+ return -1;
+ }
+
+ Map temp = new HashMap<>();
+ int it = 0;
+ try {
+ do{
+ temp.put(subjects[it], estimations[it]);
+ it++;
+ }while(it < subjects.length);
+ }
+ catch (IndexOutOfBoundsException e){
+ do{
+ temp.put(subjects[it], RandomGenerator.getDefault().nextInt(2,6));
+ it++;
+ }while(it < subjects.length);
+ }
+ this.evaluations = temp;
+ return 0;
+
+ }
+ /**
+ * Вставка оценок.
+ * В случае, если в массив оценок меньше массива предметов, то недостающие оценки заполнятся 2-ми
+ * @param subjects предметы.
+ * @param estimations оценки.
+ * @return 0, если метод отработал стабильно. -1 если массив предметов пуст.
+ */
+ public Integer setEvaluationsNoRand(String[] subjects, int[] estimations) {
+ if(subjects.length == 0){
+ return -1;
+ }
+
+ Map temp = new HashMap<>();
+ int it = 0;
+ try {
+ do{
+ temp.put(subjects[it], estimations[it]);
+ it++;
+ }while(it < subjects.length);
+ }
+ catch (IndexOutOfBoundsException e){
+ do{
+ temp.put(subjects[it], 2);
+ it++;
+ }while(it < subjects.length);
+ }
+ this.evaluations = temp;
+ return 0;
+
+ }
+
+ /**
+ * Вставка случайных оценок.
+ * @param subjects предметы.
+ * @return 0, если метод отработал стабильно. -1 если массив предметов пуст.
+ */
+ public Integer setEvaluations(String[] subjects) {
+ if(subjects.length == 0){
+ return -1;
+ }
+
+ Map temp = new HashMap<>();
+ int it = 0;
+ do{
+ temp.put(subjects[it], RandomGenerator.getDefault().nextInt(2,6));
+ it++;
+ }while(it < subjects.length);
+ this.evaluations = temp;
+ return 0;
+ }
+ /**
+ * Геттер оценки.
+ * @param K название предмета.
+ * @return оценка по предмету.
+ */
+ public Integer getEvaluation(String K) {
+ return evaluations.get(K);
+ }
+
+ /**
+ * Установка оценки.
+ * @param K предмет.
+ * @param V оценка.
+ * @return Вернет предыдущее значение при изменении значения объекта, если это новый объект, вернется null.
+ * Но если введеная оценка <2, то вернется -1.
+ */
+ public Integer setEvaluation(String K,Integer V) {
+ if(V > 2 && V < 5){
+ return evaluations.put(K,V);
+ }
+ else {
+ return -1;
+ }
+ }
+
+ /**
+ * Геттер курса.
+ * @return номер курса.
+ */
+ public int getCourse() {
+ return course;
+ }
+
+ public void setCourse(int course) {
+ this.course = course;
+ }
+
+}