Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitb9df311eb4e479c150eeb112df91a3ce4dd111ba (patch)
Author
 angeld55 <angel_dimitriev@abv.bg>
2021-04-16 22:38:37 +0300
Committer
 angeld55 <angel_dimitriev@abv.bg>
2021-04-16 22:38:37 +0300
Files50ab89d7dffcda47e5c150d0525f5561a175e52f
Object-oriented_programming_FMI-b9df311eb4e479c150eeb112df91a3ce4dd111ba.tar
Object-oriented_programming_FMI-b9df311eb4e479c150eeb112df91a3ce4dd111ba.tar.gz
Object-oriented_programming_FMI-b9df311eb4e479c150eeb112df91a3ce4dd111ba.zip
Parentce24f073c5e946b5bad600fca1ca8808657ee9ce (diff)
9
diff --git a/Sem. 09/task (not finished)/Grade.cpp b/Sem. 09/task (not finished)/Grade.cpp
new file mode 100644
index 0000000..4302166
--- /dev/null
+++ b/Sem. 09/task (not finished)/Grade.cpp
@@ -0,0 +1,69 @@
+#include "Grade.h"
+
+
+Grade::Grade() : taskName(nullptr)
+{
+ setTaskName("Unknown");
+ setGrade(2);
+}
+
+Grade::Grade(const char* taskName, size_t gradeValue) : taskName(nullptr)
+{
+ setTaskName(taskName);
+ setGrade(gradeValue);
+}
+
+void Grade::free()
+{
+ delete[] taskName;
+}
+void Grade::copyFrom(const Grade& other)
+{
+ gradeValue = other.gradeValue;
+
+ taskName = new char[strlen(other.taskName) + 1];
+ strcpy(taskName, other.taskName);
+}
+
+Grade::Grade(const Grade& other)
+{
+ copyFrom(other);
+}
+
+Grade& Grade::operator=(const Grade& other)
+{
+ if (this != &other)
+ {
+ free();
+ copyFrom(other);
+ }
+ return *this;
+}
+Grade::~Grade()
+{
+ free();
+}
+
+const char* Grade::getTaskName() const
+{
+ return taskName;
+}
+size_t Grade::getGrade() const
+{
+ return gradeValue;
+}
+
+void Grade::setGrade(size_t grade)
+{
+ if (grade < 2 || grade > 6)
+ throw std::exception("error!");
+
+ gradeValue = grade;
+}
+
+void Grade::setTaskName(const char* name)
+{
+ delete[] taskName;
+ taskName = new char[strlen(name) + 1];
+ strcpy(taskName, name);
+} \ No newline at end of file
diff --git a/Sem. 09/task (not finished)/Grade.h b/Sem. 09/task (not finished)/Grade.h
new file mode 100644
index 0000000..d0cb2e7
--- /dev/null
+++ b/Sem. 09/task (not finished)/Grade.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#include <iostream>
+
+class Grade
+{
+ size_t gradeValue;
+ char* taskName;
+
+ void free();
+ void copyFrom(const Grade& other);
+public:
+ Grade();
+
+ Grade(const char* taskName, size_t gradeValue);
+
+ Grade(const Grade& other);
+ Grade& operator=(const Grade& other);
+ ~Grade();
+
+ const char* getTaskName() const;
+ size_t getGrade() const;
+
+ void setTaskName(const char* name);
+ void setGrade(size_t grade);
+}; \ No newline at end of file
diff --git a/Sem. 09/task (not finished)/Student.cpp b/Sem. 09/task (not finished)/Student.cpp
new file mode 100644
index 0000000..99d26dc
--- /dev/null
+++ b/Sem. 09/task (not finished)/Student.cpp
@@ -0,0 +1,45 @@
+#include "Student.h"
+
+Student::Student(const char* name, size_t fn)
+{
+ setName(name);
+ setFn(fn);
+}
+
+void Student::setFn(size_t fn)
+{
+ if (fn < 80000 || fn > 83000)
+ throw std::exception("Invalid fn");
+
+ this->fn = fn;
+}
+void Student::setName(const char* name)
+{
+ if (strlen(name) > MAX_NAME_LENGTH)
+ throw std::exception("Name is too long!");
+
+ strcpy(this->name, name);
+}
+
+size_t Student::getFN() const
+{
+ return fn;
+}
+const char* Student::getName() const
+{
+ return name;
+}
+
+void Student::addGrade(const char* taskName, size_t grade)
+{
+ if (gradesCount == MAX_GRADES_COUNT)
+ throw std::exception("Error! Too many grades!");
+
+ Grade currentGrade(taskName, grade);
+ grades[gradesCount++] = currentGrade;
+}
+
+void Student::print() const
+{
+ std::cout << name << " " << fn << std::endl;
+} \ No newline at end of file
diff --git a/Sem. 09/task (not finished)/Student.h b/Sem. 09/task (not finished)/Student.h
new file mode 100644
index 0000000..5c09792
--- /dev/null
+++ b/Sem. 09/task (not finished)/Student.h
@@ -0,0 +1,29 @@
+#include "Grade.h"
+
+const size_t MAX_NAME_LENGTH = 30;
+const size_t MAX_GRADES_COUNT = 20;
+class Student
+{
+public:
+
+ Student(const char* name, size_t fn);
+
+ void setFn(size_t fn);
+ void setName(const char* name);
+
+ size_t getFN() const;
+ const char* getName() const;
+
+ void addGrade(const char* taskName, size_t grade);
+
+
+ void print() const;
+private:
+ char name[MAX_NAME_LENGTH + 1];
+ size_t fn;
+
+ Grade grades[MAX_GRADES_COUNT];
+ size_t gradesCount;
+
+
+}; \ No newline at end of file
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
diff --git a/Sem. 09/task (not finished)/UniCourse.h b/Sem. 09/task (not finished)/UniCourse.h
new file mode 100644
index 0000000..fde1518
--- /dev/null
+++ b/Sem. 09/task (not finished)/UniCourse.h
@@ -0,0 +1,35 @@
+#include "Student.h"
+
+class UniCourse
+{
+ char* lecturerName;
+ char* assistantsNames[3];
+
+ Student** students;
+ size_t capacity;
+ size_t size;
+
+ void copyFrom(const UniCourse& other);
+ void free();
+
+ size_t findStudentByFn(size_t fn);
+
+ void resize();
+
+public:
+ UniCourse(const char* lecturerName);
+ UniCourse(const char* lecturerName, const char* assistant1Name);
+ UniCourse(const char* lecturerName, const char* assistant1Name, const char* assistant2Name);
+ UniCourse(const char* lecturerName, const char* assistant1Name, const char* assistant2Name, const char* assistant3Name);
+
+
+ UniCourse(const UniCourse& other);
+ UniCourse& operator=(const UniCourse& other);
+ ~UniCourse();
+
+ void addStudent(const char* name, size_t fn);
+ void removeStudent(size_t fn);
+
+ void print();
+
+}; \ No newline at end of file
diff --git a/Sem. 09/task (not finished)/main.cpp b/Sem. 09/task (not finished)/main.cpp
new file mode 100644
index 0000000..6b727fa
--- /dev/null
+++ b/Sem. 09/task (not finished)/main.cpp
@@ -0,0 +1,15 @@
+#include "UniCourse.h"
+
+int main()
+{
+ UniCourse u("ddz");
+
+ u.addStudent("ivan", 80123);
+ u.addStudent("angel", 80125);
+ u.addStudent("petur", 80126);
+ u.addStudent("ivan2", 81000);
+ //u.print();
+
+ u.removeStudent(80125);
+ u.print();
+} \ No newline at end of file