From d88bf24abd71e33fe4e35adead241077115a4b70 Mon Sep 17 00:00:00 2001
From: Random2142Max <104144843+Random2142Max@users.noreply.github.com>
Date: Thu, 1 Dec 2022 16:17:07 +0500
Subject: [PATCH 1/3] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?=
=?UTF-8?q?=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20=D0=B4=D0=B0=D0=BD?=
=?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=BD=D0=B0=20=D0=BE=D1=81=D0=BD=D0=BE?=
=?UTF-8?q?=D0=B2=D0=B5=20=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC=D0=BE=D1=81=D1=82?=
=?UTF-8?q?=D0=B8=20+=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B8=D0=BB?=
=?UTF-8?q?=20=D0=B4=D0=B8=D0=B0=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=83=20?=
=?UTF-8?q?=D0=B2=20=D0=B2=D0=B8=D0=B4=D0=B5=20=D0=BA=D0=B0=D1=80=D1=82?=
=?UTF-8?q?=D0=B8=D0=BD=D0=BA=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/gradle.xml | 1 +
.idea/workspace.xml | 53 +-
ImageDiagrams/Sc_1.png | Bin 0 -> 56517 bytes
basicprogramming_2.csv | 977 ++++++++++++++++++
src/main/java/org/example/Main.java | 4 +-
src/main/java/org/example/Models/Chapter.java | 15 +
src/main/java/org/example/Models/Course.java | 19 +
src/main/java/org/example/Models/Student.java | 16 +
src/main/java/org/example/Models/Task.java | 16 +
.../java/org/example/Models/TypeTask.java | 11 +
10 files changed, 1103 insertions(+), 9 deletions(-)
create mode 100644 ImageDiagrams/Sc_1.png
create mode 100644 basicprogramming_2.csv
create mode 100644 src/main/java/org/example/Models/Chapter.java
create mode 100644 src/main/java/org/example/Models/Course.java
create mode 100644 src/main/java/org/example/Models/Student.java
create mode 100644 src/main/java/org/example/Models/Task.java
create mode 100644 src/main/java/org/example/Models/TypeTask.java
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index ba1ec5c..611e7c8 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,5 +1,6 @@
+
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 7ee7221..e4f90ae 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,7 +4,13 @@
-
+
+
+
+
+
+
+
@@ -15,19 +21,45 @@
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
- {
+ "keyToString": {
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "WebServerToolWindowFactoryState": "false",
+ "last_opened_file_path": "D:/Bandik/Java Study/AnalyticsProject",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)"
}
-}]]>
+}
+
+
+
+
+
+
+
+
@@ -36,9 +68,14 @@
1669892899673
+
+
+
+
+
diff --git a/ImageDiagrams/Sc_1.png b/ImageDiagrams/Sc_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..bdcd7388287c7d60b19740cfd630efa4bb0f25ff
GIT binary patch
literal 56517
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 CollectionId;
+
+ public Chapter(String chapter, String collectionIdTasks) {
+ this.Chapter = chapter;
+ this.Fk_CollectionIdTasks = collectionIdTasks;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/Course.java b/src/main/java/org/example/Models/Course.java
new file mode 100644
index 0000000..9a75ec3
--- /dev/null
+++ b/src/main/java/org/example/Models/Course.java
@@ -0,0 +1,19 @@
+package org.example.Models;
+
+import java.util.Dictionary;
+
+public class Course {
+ public int Pk_Id;
+ public String Name;
+ public int Score;
+ public int Semester;
+ public String Fk_CollectionsCourseId;
+ protected Dictionary CollectionsCourse;
+
+ public Course(String name, int score, int semester, String fk_CollectionsCourseId) {
+ this.Name = name;
+ this.Score = score;
+ this.Semester = semester;
+ this.Fk_CollectionsCourseId = fk_CollectionsCourseId;
+ }
+}
diff --git a/src/main/java/org/example/Models/Student.java b/src/main/java/org/example/Models/Student.java
new file mode 100644
index 0000000..4929ae6
--- /dev/null
+++ b/src/main/java/org/example/Models/Student.java
@@ -0,0 +1,16 @@
+package org.example.Models;
+
+public class Student {
+ public int Pk_Id;
+ public String FirstName;
+ public String LastName;
+ public String Group;
+ public int Fk_id_course;
+
+ public Student(String firstName, String lastname, String group, String id_course) {
+ this.FirstName = firstName;
+ this.LastName = lastname;
+ this.Group = group;
+ this.Fk_id_course = Integer.parseUnsignedInt(id_course);
+ }
+}
diff --git a/src/main/java/org/example/Models/Task.java b/src/main/java/org/example/Models/Task.java
new file mode 100644
index 0000000..a9805ef
--- /dev/null
+++ b/src/main/java/org/example/Models/Task.java
@@ -0,0 +1,16 @@
+package org.example.Models;
+
+public class Task {
+ public int Pk_Id;
+ public String Name;
+ public int Value;
+ public int MaxValue;
+ public int Fk_id_TypeTask;
+
+ public Task(String name, int maxValue, String Fk_id_typeTask) {
+ this.Name = name;
+ this.Value = 0;
+ this.MaxValue = maxValue;
+ this.Fk_id_TypeTask = Integer.parseUnsignedInt(Fk_id_typeTask);
+ }
+}
diff --git a/src/main/java/org/example/Models/TypeTask.java b/src/main/java/org/example/Models/TypeTask.java
new file mode 100644
index 0000000..7ea845d
--- /dev/null
+++ b/src/main/java/org/example/Models/TypeTask.java
@@ -0,0 +1,11 @@
+package org.example.Models;
+
+public class TypeTask {
+ public int Pk_Id;
+ public String Name;
+
+ public TypeTask(String name) {
+
+ this.Name = name;
+ }
+}
From ef12c0a0b04772dcca735bb6170e256d188cf0eb Mon Sep 17 00:00:00 2001
From: Random2142Max <104144843+Random2142Max@users.noreply.github.com>
Date: Thu, 1 Dec 2022 21:58:37 +0500
Subject: [PATCH 2/3] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?=
=?UTF-8?q?=D0=B8=D1=8F:=201)=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?=
=?UTF-8?q?=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20=D0=B4=D0=B0=D0=BD?=
=?UTF-8?q?=D0=BD=D1=8B=D1=85;=202)=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?=
=?UTF-8?q?=D0=BB=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D1=8B=20=D0=B8=20=D0=BA?=
=?UTF-8?q?=D0=BB=D0=B0=D1=81=D1=81=D1=8B=20=D0=BD=D0=B0=D1=81=D0=BB=D0=B5?=
=?UTF-8?q?=D0=B4=D0=BD=D0=B8=D0=BA=D0=B8;?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/workspace.xml | 83 ++++++++++++----
.../Models => ExampleDBModels}/Chapter.java | 6 +-
.../Models => ExampleDBModels}/Course.java | 5 +-
.../Models => ExampleDBModels}/Student.java | 5 +-
.../Models => ExampleDBModels}/Task.java | 5 +-
.../Models => ExampleDBModels}/TypeTask.java | 5 +-
.../org/example/Models/Courses/Chapter.java | 54 +++++++++++
.../org/example/Models/Courses/Course.java | 58 +++++++++++
.../java/org/example/Models/Courses/Task.java | 42 ++++++++
.../org/example/Models/Courses/TypeTask.java | 39 ++++++++
.../org/example/Models/Persons/Person.java | 96 +++++++++++++++++++
.../org/example/Models/Persons/Student.java | 28 ++++++
.../java/org/example/Models/ReportCard.java | 16 ++++
.../example/Models/Scores/ChapterScores.java | 29 ++++++
.../example/Models/Scores/CourseScores.java | 20 ++++
.../org/example/Models/Scores/TaskScores.java | 22 +++++
.../org/example/Models/StudentScores.java | 32 +++++++
17 files changed, 517 insertions(+), 28 deletions(-)
rename src/main/java/{org/example/Models => ExampleDBModels}/Chapter.java (91%)
rename src/main/java/{org/example/Models => ExampleDBModels}/Course.java (94%)
rename src/main/java/{org/example/Models => ExampleDBModels}/Student.java (93%)
rename src/main/java/{org/example/Models => ExampleDBModels}/Task.java (92%)
rename src/main/java/{org/example/Models => ExampleDBModels}/TypeTask.java (82%)
create mode 100644 src/main/java/org/example/Models/Courses/Chapter.java
create mode 100644 src/main/java/org/example/Models/Courses/Course.java
create mode 100644 src/main/java/org/example/Models/Courses/Task.java
create mode 100644 src/main/java/org/example/Models/Courses/TypeTask.java
create mode 100644 src/main/java/org/example/Models/Persons/Person.java
create mode 100644 src/main/java/org/example/Models/Persons/Student.java
create mode 100644 src/main/java/org/example/Models/ReportCard.java
create mode 100644 src/main/java/org/example/Models/Scores/ChapterScores.java
create mode 100644 src/main/java/org/example/Models/Scores/CourseScores.java
create mode 100644 src/main/java/org/example/Models/Scores/TaskScores.java
create mode 100644 src/main/java/org/example/Models/StudentScores.java
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e4f90ae..977c74e 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,12 +4,24 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
@@ -21,6 +33,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -40,20 +76,21 @@
- {
- "keyToString": {
- "RunOnceActivity.OpenProjectViewOnStart": "true",
- "RunOnceActivity.ShowReadmeOnStart": "true",
- "WebServerToolWindowFactoryState": "false",
- "last_opened_file_path": "D:/Bandik/Java Study/AnalyticsProject",
- "node.js.detected.package.eslint": "true",
- "node.js.detected.package.tslint": "true",
- "node.js.selected.package.eslint": "(autodetect)",
- "node.js.selected.package.tslint": "(autodetect)"
+
+}]]>
+
@@ -69,8 +106,16 @@
1669892899673
-
+
+
+
+ 1669893427964
+
+
+
+ 1669893427964
+
@@ -87,4 +132,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/Chapter.java b/src/main/java/ExampleDBModels/Chapter.java
similarity index 91%
rename from src/main/java/org/example/Models/Chapter.java
rename to src/main/java/ExampleDBModels/Chapter.java
index 2ab9132..5b19bb4 100644
--- a/src/main/java/org/example/Models/Chapter.java
+++ b/src/main/java/ExampleDBModels/Chapter.java
@@ -1,7 +1,7 @@
-package org.example.Models;
+package ExampleDBModels;
import java.util.ArrayList;
-
+/*
public class Chapter {
public int Pk_Id;
public String Chapter;
@@ -12,4 +12,4 @@ public Chapter(String chapter, String collectionIdTasks) {
this.Chapter = chapter;
this.Fk_CollectionIdTasks = collectionIdTasks;
}
-}
\ No newline at end of file
+}*/
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/Course.java b/src/main/java/ExampleDBModels/Course.java
similarity index 94%
rename from src/main/java/org/example/Models/Course.java
rename to src/main/java/ExampleDBModels/Course.java
index 9a75ec3..f5a5ecc 100644
--- a/src/main/java/org/example/Models/Course.java
+++ b/src/main/java/ExampleDBModels/Course.java
@@ -1,5 +1,5 @@
-package org.example.Models;
-
+package ExampleDBModels;
+/*
import java.util.Dictionary;
public class Course {
@@ -17,3 +17,4 @@ public Course(String name, int score, int semester, String fk_CollectionsCourseI
this.Fk_CollectionsCourseId = fk_CollectionsCourseId;
}
}
+*/
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/Student.java b/src/main/java/ExampleDBModels/Student.java
similarity index 93%
rename from src/main/java/org/example/Models/Student.java
rename to src/main/java/ExampleDBModels/Student.java
index 4929ae6..a861924 100644
--- a/src/main/java/org/example/Models/Student.java
+++ b/src/main/java/ExampleDBModels/Student.java
@@ -1,5 +1,5 @@
-package org.example.Models;
-
+package ExampleDBModels;
+/*
public class Student {
public int Pk_Id;
public String FirstName;
@@ -14,3 +14,4 @@ public Student(String firstName, String lastname, String group, String id_course
this.Fk_id_course = Integer.parseUnsignedInt(id_course);
}
}
+*/
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/Task.java b/src/main/java/ExampleDBModels/Task.java
similarity index 92%
rename from src/main/java/org/example/Models/Task.java
rename to src/main/java/ExampleDBModels/Task.java
index a9805ef..381fce7 100644
--- a/src/main/java/org/example/Models/Task.java
+++ b/src/main/java/ExampleDBModels/Task.java
@@ -1,5 +1,5 @@
-package org.example.Models;
-
+package ExampleDBModels;
+/*
public class Task {
public int Pk_Id;
public String Name;
@@ -14,3 +14,4 @@ public Task(String name, int maxValue, String Fk_id_typeTask) {
this.Fk_id_TypeTask = Integer.parseUnsignedInt(Fk_id_typeTask);
}
}
+*/
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/TypeTask.java b/src/main/java/ExampleDBModels/TypeTask.java
similarity index 82%
rename from src/main/java/org/example/Models/TypeTask.java
rename to src/main/java/ExampleDBModels/TypeTask.java
index 7ea845d..9448c87 100644
--- a/src/main/java/org/example/Models/TypeTask.java
+++ b/src/main/java/ExampleDBModels/TypeTask.java
@@ -1,5 +1,5 @@
-package org.example.Models;
-
+package ExampleDBModels;
+/*
public class TypeTask {
public int Pk_Id;
public String Name;
@@ -9,3 +9,4 @@ public TypeTask(String name) {
this.Name = name;
}
}
+*/
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/Courses/Chapter.java b/src/main/java/org/example/Models/Courses/Chapter.java
new file mode 100644
index 0000000..0e46d11
--- /dev/null
+++ b/src/main/java/org/example/Models/Courses/Chapter.java
@@ -0,0 +1,54 @@
+package org.example.Models.Courses;
+
+import java.util.Collection;
+import java.util.List;
+
+public class Chapter {
+ private Integer uid;
+ private String name;
+ private Collection taskCollection;
+ // Подумать, как реализовать MaxScores
+ private Integer activeMaxScore;
+ private Integer exerciseMaxScore;
+ private Integer homeworkMaxScore;
+ private Integer seminarMaxScore;
+
+ public Chapter(Integer uid, String name, List taskCollection) {
+ this.uid = uid;
+ this.name = name;
+ this.taskCollection = taskCollection;
+ }
+ public Chapter(Chapter chapter) {
+ this.uid = chapter.uid;
+ this.name = chapter.name;
+ this.taskCollection = chapter.taskCollection;
+ }
+
+ public Integer getUid() {
+ return this.uid;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public Collection getTaskCollection() {
+ return this.taskCollection;
+ }
+
+// public Integer getActiveMaxScore() {
+// return this.activeMaxScore;
+// }
+//
+// public Integer getExerciseMaxScore() {
+// return this.exerciseMaxScore;
+// }
+//
+// public Integer getHomeworkMaxScore() {
+// return this.homeworkMaxScore;
+// }
+//
+// public Integer getSeminarMaxScore() {
+// return this.seminarMaxScore;
+// }
+}
diff --git a/src/main/java/org/example/Models/Courses/Course.java b/src/main/java/org/example/Models/Courses/Course.java
new file mode 100644
index 0000000..89b0d14
--- /dev/null
+++ b/src/main/java/org/example/Models/Courses/Course.java
@@ -0,0 +1,58 @@
+package org.example.Models.Courses;
+
+import java.util.Collection;
+import java.util.List;
+
+public class Course {
+ private Integer uid;
+ private String name;
+ private Collection chapters;
+ // Подумать с MaxScores
+ private Integer activeMaxScore;
+ private Integer exerciseMaxScore;
+ private Integer homeworkMaxScore;
+ private Integer seminarMaxScore;
+ private Integer totalMaxScore;
+
+ public Course(Integer uid, String name, List chapters) {
+ this.uid = uid;
+ this.name = name;
+ this.chapters = chapters;
+ // Тут должен быть расчёт totalMaxScore
+ }
+ public Course(Course course) {
+ this.uid = course.uid;
+ this.name = course.name;
+ this.chapters = course.chapters;
+ // Тут должен быть расчёт totalMaxScore
+ }
+
+ public Integer getUid() {
+ return this.uid;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public Collection getChapters() {
+ return this.chapters;
+ }
+ public Integer getTotalMaxScore() {return this.totalMaxScore;}
+
+// public Integer getActiveMaxScore() {
+// return this.activeMaxScore;
+// }
+//
+// public Integer getExerciseMaxScore() {
+// return this.exerciseMaxScore;
+// }
+//
+// public Integer getHomeworkMaxScore() {
+// return this.homeworkMaxScore;
+// }
+//
+// public Integer getSeminarMaxScore() {
+// return this.seminarMaxScore;
+// }
+}
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/Courses/Task.java b/src/main/java/org/example/Models/Courses/Task.java
new file mode 100644
index 0000000..6427faf
--- /dev/null
+++ b/src/main/java/org/example/Models/Courses/Task.java
@@ -0,0 +1,42 @@
+package org.example.Models.Courses;
+
+public class Task {
+ private Integer uid;
+ private String name;
+ private TypeTaskEnum typeTask;
+ private Integer maxScore;
+
+ public Task(Integer uid, String name, TypeTaskEnum typeTask, Integer maxScore) {
+ this.uid = uid;
+ this.name = name;
+ this.typeTask = typeTask;
+ this.maxScore = maxScore;
+ }
+ public Task(Task task) {
+ this.uid = task.uid;
+ this.name = task.name;
+ this.typeTask = task.typeTask;
+ this.maxScore = task.maxScore;
+ }
+
+ public String toString() {
+ return String.format("%s — %s — %s", this.name, this.typeTask, this.maxScore);
+ }
+
+ public Integer getUid() {
+ return this.uid;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public TypeTaskEnum getTypeTask() {
+ return this.typeTask;
+ }
+
+ public Integer getMaxScore() {
+ return this.maxScore;
+ }
+}
+
diff --git a/src/main/java/org/example/Models/Courses/TypeTask.java b/src/main/java/org/example/Models/Courses/TypeTask.java
new file mode 100644
index 0000000..96e5a6c
--- /dev/null
+++ b/src/main/java/org/example/Models/Courses/TypeTask.java
@@ -0,0 +1,39 @@
+package org.example.Models.Courses;
+
+enum TypeTaskEnum {
+ ACTIVE,
+ EXERCISE,
+ HOMEWORK,
+ SEMINAR,
+ ADDITIONALLY
+}
+
+public class TypeTask {
+ private TypeTaskEnum typeTask;
+
+ public TypeTask(String typeTask) {
+ switch (typeTask.toUpperCase()) {
+ case "АКТ":
+ this.typeTask = TypeTaskEnum.ACTIVE;
+ break;
+ case "УПР":
+ this.typeTask = TypeTaskEnum.EXERCISE;
+ break;
+ case "ДЗ":
+ this.typeTask = TypeTaskEnum.HOMEWORK;
+ break;
+ case "СЕМ":
+ this.typeTask = TypeTaskEnum.SEMINAR;
+ break;
+ case "ДОП":
+ this.typeTask = TypeTaskEnum.ADDITIONALLY;
+ break;
+ default:
+ throw new IllegalArgumentException(String.format("В ведомости указан %s. Данный тип заданий отсутствует!", typeTask));
+ }
+ }
+
+ public TypeTaskEnum getTypeTask() {
+ return this.typeTask;
+ }
+}
diff --git a/src/main/java/org/example/Models/Persons/Person.java b/src/main/java/org/example/Models/Persons/Person.java
new file mode 100644
index 0000000..d379e0f
--- /dev/null
+++ b/src/main/java/org/example/Models/Persons/Person.java
@@ -0,0 +1,96 @@
+package org.example.Models.Persons;
+
+import java.time.LocalDate;
+import java.util.Arrays;
+
+enum Gender {
+ MALE,
+ FEMALE
+}
+
+public class Person {
+ private Integer uid;
+ private String fullName;
+ private String lastName;
+ private String firstName;
+ private Gender gender;
+ private String homeAddress;
+ private LocalDate birthDate;
+
+ public Person(String fullName) {
+ this.fullName = fullName;
+ String[] splitFullName = this.getLastFirstName(fullName).split("~");
+ this.lastName = splitFullName[0];
+ this.firstName = splitFullName[1];
+ }
+
+ public Person(Integer uid, String fullName, String gender, String homeAddress, String birthDate) {
+ this.uid = uid;
+ this.fullName = fullName;
+ String[] splitFullName = this.getLastFirstName(fullName).split("~");
+ this.lastName = splitFullName[0];
+ this.firstName = splitFullName[1];
+ this.gender = this.getGender(gender);
+ this.homeAddress = homeAddress;
+ this.birthDate = LocalDate.parse(birthDate);
+ }
+
+ protected String getLastFirstName(String fullName) {
+ String[] massStrFullName = fullName.split(" ");
+ switch ((int)Arrays.stream(massStrFullName).count()) {
+ case 3:
+ return String.format("%s %s~%s", massStrFullName[0], massStrFullName[1], massStrFullName[2]);
+ case 4:
+ return String.format("%s %s~%s %s", massStrFullName[0], massStrFullName[1], massStrFullName[2], massStrFullName[3]);
+ case 5:
+ return String.format("%s %s %s~%s %s", massStrFullName[0], massStrFullName[1], massStrFullName[2], massStrFullName[3], massStrFullName[4]);
+ default:
+ return String.format("%s~%s", massStrFullName[0], massStrFullName[1]);
+ }
+ }
+
+ public String toString() {
+ return this.homeAddress == null | this.birthDate == null | this.gender == null ? String.format(" %s — %s \n", this.uid, this.fullName) : String.format(" %s — %s — %s — %s — %s \n", this.uid, this.fullName, this.gender, this.homeAddress, this.birthDate);
+ }
+
+ public Integer getUid() {
+ return this.uid;
+ }
+
+ public String getFullName() {
+ return this.fullName;
+ }
+
+ public String getLastName() {
+ return this.lastName;
+ }
+
+ public String getFirstName() {
+ return this.firstName;
+ }
+
+ public Gender getGender() {
+ return this.gender;
+ }
+
+ public String getHomeAddress() {
+ return this.homeAddress;
+ }
+
+ public LocalDate getBirthDate() {
+ return this.birthDate;
+ }
+
+ public Gender getGender(String gender) {
+ gender = gender.toLowerCase();
+ return gender == "male" ? Gender.MALE : Gender.FEMALE;
+ }
+
+ public Gender getGender(Gender gender) {
+ return gender;
+ }
+
+ public String addGender(Gender gender) {
+ return gender.toString().toLowerCase();
+ }
+}
diff --git a/src/main/java/org/example/Models/Persons/Student.java b/src/main/java/org/example/Models/Persons/Student.java
new file mode 100644
index 0000000..3b8448a
--- /dev/null
+++ b/src/main/java/org/example/Models/Persons/Student.java
@@ -0,0 +1,28 @@
+package org.example.Models.Persons;
+
+import org.example.Models.StudentScores;
+
+public class Student extends Person {
+ private Integer uid;
+ private String groupName;
+
+ public Student(Integer uid, String fullname, String groupName) {
+ super(fullname);
+ this.uid = uid;
+ this.groupName = groupName;
+ }
+ public Student(Student student) {
+ super(student.getFullName());
+ this.uid = student.getUid();
+ this.groupName = student.getGroupName();
+ }
+
+ public String toString() {
+ return String.format(" %s — %s — %s \n", this.uid, this.getFullName(), this.groupName);
+ }
+
+ public String getGroupName() {
+ return this.groupName;
+ }
+}
+
diff --git a/src/main/java/org/example/Models/ReportCard.java b/src/main/java/org/example/Models/ReportCard.java
new file mode 100644
index 0000000..d548f7c
--- /dev/null
+++ b/src/main/java/org/example/Models/ReportCard.java
@@ -0,0 +1,16 @@
+package org.example.Models;
+
+public class ReportCard extends StudentScores{
+ private Integer uid;
+
+ public ReportCard(StudentScores studentScores) {
+ super(
+ studentScores.getStudent(),
+ studentScores.getTotalScores());
+ this.uid = studentScores.getUid();
+ }
+
+ public Integer getUid() {
+ return this.uid;
+ }
+}
diff --git a/src/main/java/org/example/Models/Scores/ChapterScores.java b/src/main/java/org/example/Models/Scores/ChapterScores.java
new file mode 100644
index 0000000..d327215
--- /dev/null
+++ b/src/main/java/org/example/Models/Scores/ChapterScores.java
@@ -0,0 +1,29 @@
+package org.example.Models.Scores;
+
+import org.example.Models.Courses.Chapter;
+import org.example.Models.Courses.Task;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+public class ChapterScores extends Chapter{
+ private Integer uid;
+// private Integer chapterScore;
+
+ public ChapterScores(Integer uid, Chapter chapter) {// ,Integer sumScore) {
+ super(chapter);
+ this.uid = chapter.getUid();
+ // Тут надо реализовать сумму chapterScores
+ //this.chapterScore = sumScore;
+ }
+
+ public Integer getUid() {
+ return this.uid;
+ }
+
+// public Integer getChapterScore() {
+// return this.chapterScore;
+// }
+}
diff --git a/src/main/java/org/example/Models/Scores/CourseScores.java b/src/main/java/org/example/Models/Scores/CourseScores.java
new file mode 100644
index 0000000..42080a8
--- /dev/null
+++ b/src/main/java/org/example/Models/Scores/CourseScores.java
@@ -0,0 +1,20 @@
+package org.example.Models.Scores;
+
+import org.example.Models.Courses.Course;
+
+public class CourseScores extends Course {
+ // Честно говоря, я не понимаю,
+ // что должен получать этот класс и хранить
+ private Integer uid;
+ private Integer totalScores;
+
+ public CourseScores(Course course) {
+ super(course);
+ this.uid = course.getUid();
+ this.totalScores = course.getTotalMaxScore();
+ }
+ public Integer getUid() {
+ return this.uid;
+ }
+ public Integer getTotalScores() {return this.totalScores;}
+}
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/Scores/TaskScores.java b/src/main/java/org/example/Models/Scores/TaskScores.java
new file mode 100644
index 0000000..3814f8b
--- /dev/null
+++ b/src/main/java/org/example/Models/Scores/TaskScores.java
@@ -0,0 +1,22 @@
+package org.example.Models.Scores;
+
+import org.example.Models.Courses.Task;
+
+public class TaskScores extends Task{
+ private Integer uid;
+ private Integer score;
+
+ public TaskScores(Task task, Integer score) {
+ super(task);
+ this.uid = task.getUid();
+ this.score = score;
+ }
+
+ public Integer getUid() {
+ return this.uid;
+ }
+
+ public Integer getScore() {
+ return this.score;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/StudentScores.java b/src/main/java/org/example/Models/StudentScores.java
new file mode 100644
index 0000000..81e7159
--- /dev/null
+++ b/src/main/java/org/example/Models/StudentScores.java
@@ -0,0 +1,32 @@
+package org.example.Models;
+
+import org.example.Models.Persons.Student;
+import org.example.Models.Scores.CourseScores;
+
+public class StudentScores extends Student {
+ private Integer uid;
+ private Student student;
+ private Integer totalScores;
+
+ public StudentScores(Student student, CourseScores courseScores) {
+ super(student);
+ this.uid = student.getUid();
+ this.student = student;
+ this.totalScores = courseScores.getTotalScores();
+ }
+ public StudentScores(Student student, Integer totalScores) {
+ super(student);
+ this.uid = student.getUid();
+ this.student = student;
+ this.totalScores = totalScores;
+ }
+
+ public Integer getUid() {
+ return this.uid;
+ }
+
+ public Student getStudent() {return student;}
+
+ public Integer getTotalScores() {return this.totalScores;}
+}
+
From 13c3a1d8861aea663b39bfe321ab3d6f64abddcb Mon Sep 17 00:00:00 2001
From: Random2142Max <104144843+Random2142Max@users.noreply.github.com>
Date: Wed, 7 Dec 2022 14:51:01 +0500
Subject: [PATCH 3/3] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?=
=?UTF-8?q?=D0=B8=D1=8F:=201)=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?=
=?UTF-8?q?=D0=BD=20=D0=9A=D0=BB=D0=B0=D1=81=D1=81=20Report=20=D0=B4=D0=BB?=
=?UTF-8?q?=D1=8F=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=D0=B0=202)?=
=?UTF-8?q?=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF?=
=?UTF-8?q?=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=20=D0=BC=D0=BE=D0=B4=D0=B5?=
=?UTF-8?q?=D0=BB=D0=B5=D0=B9=20=D0=B8=D0=B7=20basicprogramming=5F2.csv=20?=
=?UTF-8?q?=D0=B2=20Report;=203)=20=D0=92=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8?=
=?UTF-8?q?=D0=BD=D0=B3=D0=B5=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?=
=?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=BE=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?=
=?UTF-8?q?=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?=
=?UTF-8?q?=20Student,TypeTask,Task.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/encodings.xml | 6 +
.idea/gradle.xml | 2 +
.idea/misc.xml | 2 +-
.idea/workspace.xml | 154 +++++++++--
basicprogramming_2.csv | 2 +-
build.gradle | 13 +-
src/main/java/org/example/Main.java | 4 +-
.../org/example/Models/Courses/TypeTask.java | 18 +-
src/main/java/org/example/Report.java | 240 ++++++++++++++++++
9 files changed, 411 insertions(+), 30 deletions(-)
create mode 100644 .idea/encodings.xml
create mode 100644 src/main/java/org/example/Report.java
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..c2bae49
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 611e7c8..592fdc7 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -4,6 +4,8 @@
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 10ad947..9879958 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,7 +4,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 977c74e..bd9f2e4 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,24 +4,15 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
@@ -36,6 +27,9 @@
+
+
+
@@ -60,7 +54,7 @@
-
+
@@ -81,11 +75,15 @@
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
- "last_opened_file_path": "D:/Bandik/Java Study/AnalyticsProject/src/main/java/org/example",
+ "last_opened_file_path": "D:/Bandik/Java Study/AnalyticsProject",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
- "node.js.selected.package.tslint": "(autodetect)"
+ "node.js.selected.package.tslint": "(autodetect)",
+ "project.structure.last.edited": "Project",
+ "project.structure.proportion": "0.15",
+ "project.structure.side.proportion": "0.2",
+ "settings.editor.selected.configurable": "reference.settingsdialog.project.gradle"
}
}]]>
@@ -97,6 +95,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+
+
+
+
+
+
+
+
+
@@ -106,7 +167,24 @@
1669892899673
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
1669893427964
@@ -115,9 +193,22 @@
1669893427964
-
+
+ 1669913918273
+
+
+
+ 1669913918274
+
+
+
+
+
+
+
+
@@ -134,6 +225,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.example.*
+
\ No newline at end of file
diff --git a/basicprogramming_2.csv b/basicprogramming_2.csv
index 4a06ba8..eeca22d 100644
--- a/basicprogramming_2.csv
+++ b/basicprogramming_2.csv
@@ -1,4 +1,4 @@
-;;За весь курс;;;;Преподавателю о курсе;;Первое знакомство с C#;;;;;;;;;;;;;;Ошибки;;;;;;;;;;;;;;;Ветвления;;;;;;;;;;;;Циклы;;;;;;;;;;;;Массивы;;;;;;;;;;;;;;;;;Коллекции, строки, файлы;;;;;;;;;;;;;;;Тестирование;;;;;;;;;;Сложность алгоритмов;;;;;;;;;;;;;Рекурсивные алгоритмы;;;;;;;;;;Поиск и сортировка;;;;;;;;;;;Практикум;;;;;;;Основы ООП;;;;;;;;;;;;;;;;Наследование;;;;;;;;;;;;;;;;Целостность данных;;;;;;;;;;;;Структуры;;;;;;;;;
+;;За весь курс;;;;Преподавателю о курсе;;Первое знакомство с C#;;;;;;;;;;;;;;Ошибки;;;;;;;;;;;;;;;Ветвления;;;;;;;;;;;;Циклы;;;;;;;;;;;;Массивы;;;;;;;;;;;;;;;;;Коллекции, строки, файлы;;;;;;;;;;;;;;;Тестирование;;;;;;;;;;Сложность алгоритмов;;;;;;;;;;;;;Рекурсивные алгоритмы;;;;;;;;;;Поиск и сортировка;;;;;;;;;;;Практикум;;;;;;;Основы ООП;;;;;;;;;;;;;;;;Наследование;;;;;;;;;;;;;;;;Целостность данных;;;;;;;;;;;;Структуры;;;;;;;;;
Фамилия Имя;Группа;Акт;Упр;ДЗ;Сем;Акт;Сем;Акт;Упр;Упр: Терминология;Упр: Первый шаг;Упр: Неверный тип данных;Упр: Ошибки преобразования типов;Упр: Биткоины в массы!;Упр: Преобразование строки в число;Упр: Использование var;Упр: Добрый работодатель;Упр: Главный вопрос Вселенной;Упр: Разыскиваются методы!;Упр: Области видимости;Сем;Акт;Упр;Упр: Ошибки компиляции;Упр: Очепятки;Упр: Минимум функции;Упр: Горячие клавиши отладки;Упр: Дизайн кода;Упр: Рефакторинг и улучшение кода;Упр: Сделай то, не знаю что;ДЗ;ДЗ: Практика «Angry Birds»;ДЗ: Практика «Бильярд»;ДЗ: Практика «Проценты»;ДЗ: Практика «Рефакторинг»;Сем;Акт;Упр;Упр: Високосный год;Упр: Ход ферзя;Упр: Среднее трех;Упр: Логические выражения и условия;Упр: Управление роботом;ДЗ;ДЗ: Практика «Рубль -лей -ля»;ДЗ: Практика «Два прямоугольника»;ДЗ: Практика «Расстояние до отрезка»;Сем;Акт;Упр;Упр: В поисках степени двойки;Упр: Убрать пробелы;Упр: Рамочка;Упр: * Шахматная доска;ДЗ;ДЗ: Практика «Пустой лабиринт»;ДЗ: Практика «Лабиринт змейка»;ДЗ: Практика «Лабиринт диагональ»;ДЗ: Практика «Dragon curve»;Сем;Акт;Упр;Упр: Четный массив;Упр: Индекс максимума;Упр: Подсчет;Упр: Поиск массива в массиве;Упр: Карты Таро;Упр: Карты памяти;Упр: Null или не Null?;Упр: Возвести массив в степень;Упр: Массивы;Упр: * Крестики-нолики;ДЗ;ДЗ: Практика «Гистограмма»;ДЗ: Практика «Тепловая карта»;Доп;Сем;Акт;Упр;Упр: Шифр незнакомки;Упр: Полезные знакомства;Упр: Карты памяти;Упр: Закон Бенфорда;Упр: Split и Join;Упр: Снова незнакомка;Упр: Работа со строками;Упр: Работа с файлами;ДЗ;ДЗ: Практика «Парсер предложений»;ДЗ: Практика «Частотность N-грамм»;ДЗ: Практика «Продолжение текста»;Сем;Акт;Упр;Упр: Тестирование;Упр: Модульные тесты;Упр: Модульные тесты 2;ДЗ;ДЗ: Практика «Поля в кавычках»;ДЗ: Практика «Тестирование»;ДЗ: Практика «Парсер полей»;Сем;Акт;Упр;Упр: Базовые понятия;Упр: Сложность и скорость;Упр: O-символика;Упр: Оценка сложности алгоритма;Упр: O-символика 2;ДЗ;ДЗ: Практика «Оттенки серого»;ДЗ: Практика «Медианный фильтр»;ДЗ: Практика «Пороговый фильтр»;ДЗ: Практика «Фильтр Собеля»;Сем;Акт;Упр;Упр: Исправить рекурсию;Упр: Понимание рекурсии;Упр: Перебор паролей;Упр: Брошенный код :(;ДЗ;ДЗ: Практика «Перебор паролей 2»;ДЗ: Практика «Хождение по чекпоинтам»;Сем;Акт;Упр;Упр: Анализ алгоритма;Упр: Рекурсивный бинарный поиск;Упр: Сортировка диапазона;Упр: Сложность поиска и сортировки;ДЗ;ДЗ: Практика «Левая граница»;ДЗ: Практика «Правая граница»;ДЗ: Практика «Автодополнение»;Сем;Акт;ДЗ;ДЗ: Практика «Манипулятор»;ДЗ: Практика «Визуализация»;ДЗ: Практика «Поиск угла»;ДЗ: Практика «Решение манипулятора»;Сем;Акт;Упр;Упр: Создание классов;Упр: Сокращенный синтаксис;Упр: Поля классов;Упр: Методы классов;Упр: Карты памяти;Упр: Создание методов расширения;Упр: Список директорий;Упр: Рефакторинг статического класса;ДЗ;ДЗ: Практика «Вектор»;ДЗ: Практика «Отрезок»;ДЗ: Практика «Нестатические методы»;ДЗ: Практика «256 оттенков серого»;Сем;Акт;Упр;Упр: Наследование;Упр: Касты;Упр: Всем печать!;Упр: Склейка массивов;Упр: Снова среднее трех;Упр: Поиск минимума;Упр: Сравнение книг;Упр: Против часовой стрелки;Упр: Метод ToString;ДЗ;ДЗ: Практика «Земля и Диггер»;ДЗ: Практика «Мешки и Золото»;ДЗ: Практика «Монстры»;Сем;Акт;Упр;Упр: Использование private;Упр: Не откладывать ошибки;Упр: Свойство вместо поля;Упр: Вектор;Упр: Дробь;ДЗ;ДЗ: Практика «Readonly Vector»;ДЗ: Практика «Счет из отеля»;ДЗ: Практика «Карманный гугл»;Сем;Акт;Упр;Упр: Структура или класс?;Упр: Карты памяти;Упр: Применение ref;Упр: Последствия boxing;ДЗ;ДЗ: Практика «Benchmark»;ДЗ: Практика «Эксперименты»;Сем
Максимум:;;32;411;2800;32;2;2;2;55;5;5;5;5;5;5;5;5;5;5;5;2;2;27;2;5;5;1;5;4;5;200;50;50;50;50;2;2;23;5;5;5;3;5;200;50;100;50;2;2;20;5;5;5;5;200;50;50;50;50;2;2;50;5;5;5;5;5;6;5;5;4;5;200;50;50;100;2;2;39;5;5;3;5;5;5;5;6;200;50;100;50;2;2;12;2;4;6;200;50;50;100;2;2;22;4;2;9;3;4;200;50;50;50;50;2;2;22;5;7;5;5;200;100;100;2;2;18;2;5;5;6;200;50;50;100;2;2;200;50;50;50;50;2;2;38;5;5;2;5;6;5;5;5;200;50;50;50;50;2;2;46;4;7;5;5;5;5;5;5;5;200;50;100;50;2;2;21;1;5;5;5;5;200;50;100;50;2;2;18;4;7;5;2;200;100;100;2
Vergara Dylan;РТФ.2021 Пересдачи Часть 1.;0;357;430;0;0;0;0;52;2;5;5;5;5;5;5;5;5;5;5;0;0;26;2;5;5;1;5;3;5;30;10;10;10;0;0;0;18;0;5;5;3;5;20;10;0;10;0;0;15;5;5;5;0;40;10;10;10;10;0;0;45;5;5;5;5;5;6;5;5;4;0;20;10;10;0;0;0;22;5;0;2;0;5;0;5;5;40;10;20;10;0;0;8;2;3;3;0;0;0;0;0;0;20;2;2;9;3;4;40;10;10;10;10;0;0;19;5;4;5;5;20;0;20;0;0;18;2;5;5;6;40;10;10;20;0;0;20;0;10;0;10;0;0;35;5;5;2;5;3;5;5;5;40;10;10;10;10;0;0;46;4;7;5;5;5;5;5;5;5;40;10;20;10;0;0;21;1;5;5;5;5;40;10;20;10;0;0;12;4;1;5;2;40;20;20;0
diff --git a/build.gradle b/build.gradle
index 3cae2d7..47b3daf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -10,8 +10,17 @@ repositories {
}
dependencies {
- testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
- testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
+ testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
+ testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
+ implementation 'com.vk.api:sdk:1.0.14'
+ implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.0'
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.11.2'
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.2'
+ implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.12.4'
+ implementation 'org.apache.httpcomponents:httpclient:4.5.13'
+ implementation 'commons-io:commons-io:2.11.0'
+ implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.3'
+ implementation 'com.google.code.gson:gson:2.10'
}
test {
diff --git a/src/main/java/org/example/Main.java b/src/main/java/org/example/Main.java
index 407f157..dc0f106 100644
--- a/src/main/java/org/example/Main.java
+++ b/src/main/java/org/example/Main.java
@@ -1,7 +1,7 @@
package org.example;
-
public class Main {
public static void main(String[] args) {
- System.out.println("Hello world!");
+ Report report = new Report("basicprogramming_2.csv");
+ report.report();
}
}
\ No newline at end of file
diff --git a/src/main/java/org/example/Models/Courses/TypeTask.java b/src/main/java/org/example/Models/Courses/TypeTask.java
index 96e5a6c..fb6f1d9 100644
--- a/src/main/java/org/example/Models/Courses/TypeTask.java
+++ b/src/main/java/org/example/Models/Courses/TypeTask.java
@@ -1,5 +1,12 @@
package org.example.Models.Courses;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.List;
+
enum TypeTaskEnum {
ACTIVE,
EXERCISE,
@@ -12,6 +19,8 @@ public class TypeTask {
private TypeTaskEnum typeTask;
public TypeTask(String typeTask) {
+ // Проверка на кодировку, так как ранее она ломалась
+ //System.out.println(Charset.defaultCharset());
switch (typeTask.toUpperCase()) {
case "АКТ":
this.typeTask = TypeTaskEnum.ACTIVE;
@@ -29,7 +38,14 @@ public TypeTask(String typeTask) {
this.typeTask = TypeTaskEnum.ADDITIONALLY;
break;
default:
- throw new IllegalArgumentException(String.format("В ведомости указан %s. Данный тип заданий отсутствует!", typeTask));
+ throw new IllegalArgumentException((String.format("В ведомости указан %s. Данный тип заданий отсутствует!", typeTask)));
+// try {
+// throw new IllegalArgumentException((String.format("В ведомости указан %s. Данный тип заданий отсутствует!", typeTask)));
+// }
+// catch (RuntimeException e) {
+// System.out.println(typeTask);
+// e.printStackTrace();
+// }
}
}
diff --git a/src/main/java/org/example/Report.java b/src/main/java/org/example/Report.java
new file mode 100644
index 0000000..3d6d696
--- /dev/null
+++ b/src/main/java/org/example/Report.java
@@ -0,0 +1,240 @@
+package org.example;
+
+import org.example.Models.Courses.Task;
+import org.example.Models.Courses.TypeTask;
+import org.example.Models.Persons.Student;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class Report {
+ private final String url;
+ private final Path path;
+ private static List fileList = new ArrayList<>();
+ private static HashMap studentMap = new HashMap<>();
+ private static HashMap readInfoChapterMap = new HashMap<>();
+ private static HashMap readTaskMap = new HashMap<>();
+ public Report(String url) {
+ this.url = url;
+ this.path = Paths.get(url).toAbsolutePath();
+ }
+ public void report() {
+ // Считываем данные из файла и записываем в List
+ try {
+ fileList = Files.readAllLines(path, StandardCharsets.UTF_8);
+ }
+ catch (IOException e) {
+ System.out.println("Ошибка, файл не считался!");
+ e.printStackTrace();
+ }
+
+ // Методы для работы с файлом
+ readWriteAllInfo();
+ // Выводим студентов записанных в коллекцию
+ outAllInfoConsole();
+ }
+ // Метод, для считывания и записывания всех данных с файла
+ private void readWriteAllInfo() {
+ // Запись глав курса
+ setFilteredHeader();
+ // Запись заданий из глав курса
+ setTasks();
+ // Запись студентов
+ setStudentInformation();
+ }
+ // Метод для вывода всей информации в консоль
+ private void outAllInfoConsole() {
+ // Вывод глав курса
+ //outFilteredHeader();
+ // Вывод заданий
+ //outTasks();
+ // Вывод студентов
+ //outStudentMap();
+ }
+ private void setFilteredHeader() {
+
+ // Берём заголовок таблицы
+ var arrHeading = fileList.get(0).toCharArray();
+ System.out.println(" Главы\tКол-во заданий");
+
+ // Объявляем временные переменные для HashMap
+ String strHead = "Students";// В первых 2 абзацах информация о студентах
+ Integer countSemicolon = 0;
+
+ for (int i = 0; i < arrHeading.length; i++) {
+ if (arrHeading[i] == ';') {
+ // Тут считаем кол-во абзацев
+ countSemicolon++;
+ }
+ else {
+ // Записываем по символьно наименование абзаца
+ if (countSemicolon != 0) {
+ // Закидываем во временный HashMap
+ readInfoChapterMap.put(
+ getUid("readInfoChapterMap"),
+ String.format("%s - %s",strHead,countSemicolon));
+ // Обнуляем временные переменные
+ countSemicolon = 0;
+ // Так как у нас уже начинается новое название главы,
+ // чтобы не потерять первую букву названия главы,
+ // мы обнуляем значение и записываем первый символ
+ strHead = "" + arrHeading[i];
+ }
+ else {
+ // Записываем заголовок по символам
+ strHead += arrHeading[i];
+ }
+ }
+ }
+ }
+ private void setTasks() {
+ // Берём следующие 2 строки Tasks и MaxScoreTasks и немного корректируем внутренние данные для читабельности.
+ var massStrTasks = fileList.get(1)
+ .replaceAll("[,\\[\\]]","")
+ .replace(" ","")
+ .replaceFirst(" ","")
+ .split(";");
+
+ var massStrMaxScores = fileList.get(2)
+ .replaceAll("[, \\[]","")
+ .split(";");
+
+ // Для фильтрации по главам, я прохожусь по мапе глав.
+ // Создаём общий счётчик, для установления границ, перебора глав
+ int countStartChapter = 0;
+
+ for (var chapter : readInfoChapterMap.values()) {
+ // Берём название и кол-во заданий в главе
+ var arrChapter = chapter.split(" - ");
+ var nameChapter = arrChapter[0];
+ var countTasks = Integer.parseInt(arrChapter[1]);
+
+ // Проверка на колонку студентов, если бы раздел студентов не находился в начале ведомости.
+ // Пытался сделать через == или equals, но эти варианты не работали с текстом "Student",
+ // поэтому я решил использовать contains
+ if (nameChapter.contains("Students")) {
+ // Если это раздел студентов, то мы его пропускаем
+ countStartChapter += countTasks;
+ }
+ else {
+ // Теперь, через цикл, можно одновременно работать с 2 массивами строк
+ for (int i = countStartChapter; i < countStartChapter + countTasks; i++) {
+ // Тут должно записываться новое задание + его макс. кол-во баллов
+
+ // С помощью countStartChapter мы берём нужные нам данные,
+ // а также заранее устанавливаем предел, через сумму начальной и конечной границы главы
+
+ // Создание типов заданий и самих заданий
+ var typeTask = new TypeTask(getTypeTask(massStrTasks[i]));
+ var task = new Task(
+ getUid("readTaskMap"),
+ massStrTasks[i],
+ typeTask.getTypeTask(),
+ Integer.parseInt(massStrMaxScores[i])
+ );
+ readTaskMap.put(
+ getUid("readTaskMap"),
+ task);
+ }
+ // Сохраняем текущую границу, чтобы избежать повторения и не выходить за конец строки
+ countStartChapter += countTasks;
+ }
+ }
+ }
+ private void setStudentInformation() {
+ // Счётчик для ограничения вывода информации
+ Integer count = 0;
+
+ fileList.remove(0); // Удаляем заголовки
+ fileList.remove(0); // Удаляем подзаголовки
+ fileList.remove(0); // Удаляем максимальные числа
+
+ // Перебираем строки из List
+ // Также тут надо поставить ограничение,
+ // чтобы метод не сломался, при достижении конца
+ for (var item : fileList) {
+ // Остановка после получения 1-ых 7-ых студентов
+ if (count == 6) break;// Ограничение
+
+ // Работа со списком студентов
+ setStudents(item);
+ count++;
+ }
+ }
+ private void setStudents(String str) {
+ // Проходим по первым 2 столбцам
+ Integer countSemicolon = 0;
+ // Чтобы не было проблем с памятью, используем StrBuilder
+ StringBuilder strBuild = new StringBuilder();
+ // Превращаем строку в массив символов и перебираем символы
+ for (var _char : str.toCharArray()) {
+ if (countSemicolon == 2) {
+ break;
+ }
+ // Если встретилась ';', то check++
+ if (_char == ';') {
+ countSemicolon++;
+ }
+ strBuild.append(_char);
+ }
+ // Разделяем полученную строку на части (массив)
+ var arrParagraph = strBuild.toString().split(";");
+ // Нужно теперь добавить студента
+ studentMap.put(
+ getUid("studentMap"),
+ new Student(
+ getUid("studentMap"),
+ arrParagraph[0],
+ arrParagraph[1]
+ ));
+ // Не забываем почистить strBuilder,
+ // если собираемся его в дальнейшем использовать
+ strBuild.setLength(0);
+ }
+ private String getTypeTask(String task) {
+ if (task.length() > 3) {
+ var massTask = task.split(": ");
+ return massTask[0];
+ }
+ else return task;
+ }
+ private Integer getUid(String map) {
+ // Тут откорректировало IDE
+ return switch (map) {
+ case "studentMap" -> studentMap.isEmpty() ? 0 : studentMap.size();
+ case "readInfoChapterMap" -> readInfoChapterMap.isEmpty() ? 0 : readInfoChapterMap.size();
+ case "readTaskMap" -> readTaskMap.isEmpty() ? 0 : readTaskMap.size();
+ default -> throw new IllegalArgumentException(
+ String.format("Данной %s не существует!", map));
+ };
+ }
+ private static void outFilteredHeader() {
+ System.out.println();
+ for (var item : readInfoChapterMap.values()) {
+ System.out.println(item);
+ }
+ }
+ private static void outTasks() {
+ System.out.println("\n Задания ");
+ System.out.println(" Name\tType exercise\tMax score\n");
+ for (var item : readTaskMap.values()) {
+ System.out.println(item.toString());
+ }
+ }
+ private static void outStudentMap() {
+ System.out.println("\n Студенты ");
+ System.out.println(" Uid\tFull name\tName group\n");
+ for (var item : studentMap.values()) {
+ System.out.println(item.toString());
+ }
+ }
+ public String getUrl() {return url;}
+
+ public Path getPath() {return path;}
+}