From b9df311eb4e479c150eeb112df91a3ce4dd111ba Mon Sep 17 00:00:00 2001 From: angeld55 Date: Fri, 16 Apr 2021 22:38:37 +0300 Subject: 9 --- Sem. 09/task (not finished)/UniCourse.cpp | 135 ++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 Sem. 09/task (not finished)/UniCourse.cpp (limited to 'Sem. 09/task (not finished)/UniCourse.cpp') diff --git a/Sem. 09/task (not finished)/UniCourse.cpp b/Sem. 09/task (not finished)/UniCourse.cpp new file mode 100644 index 0000000..c854b82 --- /dev/null +++ b/Sem. 09/task (not finished)/UniCourse.cpp @@ -0,0 +1,135 @@ +#include "UniCourse.h" + +UniCourse::UniCourse(const char* lecturerName) : UniCourse(lecturerName, "", "", "") +{} +UniCourse::UniCourse(const char* lecturerName, const char* assistant1Name) : UniCourse(lecturerName, assistant1Name, "", "") +{} +UniCourse::UniCourse(const char* lecturerName, const char* assistant1Name, const char* assistant2Name) : UniCourse(lecturerName, assistant1Name, assistant2Name, "") +{} + +UniCourse::UniCourse(const char* lecturerName, const char* assistant1Name, const char* assistant2Name, const char* assistant3Name) +{ + this->lecturerName = new char[strlen(lecturerName) + 1]; + strcpy(this->lecturerName, lecturerName); + + assistantsNames[0] = new char[strlen(assistant1Name) + 1]; + strcpy(assistantsNames[0], assistant1Name); + + assistantsNames[1] = new char[strlen(assistant2Name) + 1]; + strcpy(assistantsNames[1], assistant2Name); + + assistantsNames[2] = new char[strlen(assistant3Name) + 1]; + strcpy(assistantsNames[2], assistant3Name); + + capacity = 8; + size = 0; + + students = new Student*[capacity]; +} + + +void UniCourse::copyFrom(const UniCourse& other) +{ + lecturerName = new char[strlen(other.lecturerName) + 1]; + strcpy(lecturerName, other.lecturerName); + + for (int i = 0; i < 3; i++) + { + if (other.assistantsNames[i] != nullptr) + { + assistantsNames[i] = new char[strlen(other.assistantsNames[i]) + 1]; + strcpy(assistantsNames[i], other.assistantsNames[i]); + } + } + + + students = new Student*[other.capacity]; + + for (int i = 0; i < other.size; i++) + students[i] = new Student(*other.students[i]); + + capacity = other.capacity; + size = other.size; + +} +void UniCourse::free() +{ + delete[] lecturerName; + + for (int i = 0; i < 3; i++) + delete[] assistantsNames[i]; + + for (int i = 0; i < size; i++) + delete students[i]; + + delete[] students; +} + +UniCourse::UniCourse(const UniCourse& other) +{ + copyFrom(other); +} + +UniCourse& UniCourse::operator=(const UniCourse& other) +{ + if (this != &other) + { + free(); + copyFrom(other); + } + return *this; +} +UniCourse::~UniCourse() +{ + free(); +} +void UniCourse::addStudent(const char* name, size_t fn) +{ + if (size == capacity) + resize(); + + Student* current = new Student(name, fn); + students[size++] = current; +} + +void UniCourse::resize() +{ + Student** temp = new Student*[capacity *= 2]; + + for (int i = 0; i < size; i++) + temp[i] = students[i]; + + delete[] students; + + students = temp; +} + +size_t UniCourse::findStudentByFn(size_t fn) +{ + for (int i = 0; i < size; i++) + { + if (students[i]->getFN() == fn) + return i; + } + return -1; +} +void UniCourse::removeStudent(size_t fn) +{ + size_t indexOfStudent = findStudentByFn(fn); + if (fn == -1) + return; + + delete students[indexOfStudent]; + + for (int i = indexOfStudent; i < size - 1; i++) + students[i] = students[i + 1]; + + size--; + +} + +void UniCourse::print() +{ + for (int i = 0; i < size; i++) + students[i]->print(); +} \ No newline at end of file -- cgit v1.3.1-23-gd82d