Advertisement
SIKER_98

lab3 PO

Dec 10th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <list>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. //KLASY
  9. class User;
  10.  
  11. class Teacher;
  12.  
  13. class Student;
  14.  
  15. class Subject;
  16.  
  17. class Lesson;
  18.  
  19. class TimeTable;
  20.  
  21. class Group;
  22.  
  23. //
  24. ///--USER
  25. //
  26. class User {
  27.  
  28. protected:
  29. string firstName;
  30. string lastName;
  31.  
  32. public:
  33. virtual void introduce() = 0;
  34. };
  35.  
  36. //
  37. ///-- TEACHER--------------------------------------------------
  38. //
  39. class Teacher : public User {
  40. Subject *subject;
  41. public:
  42. virtual void introduce();
  43.  
  44. Subject *getSubject();
  45.  
  46. void setSubject(Subject *);
  47.  
  48. Teacher(string firstName, string lastName);
  49.  
  50. friend Lesson;
  51. friend TimeTable;
  52. };
  53.  
  54. void Teacher::introduce() {
  55. cout << this->firstName << ' ' << this->lastName;
  56. };
  57.  
  58. Subject *Teacher::getSubject() {
  59. return this->subject;
  60. }
  61.  
  62. Teacher::Teacher(string firstName, string lastName) {
  63. this->firstName = firstName;
  64. this->lastName = lastName;
  65. }
  66.  
  67. void Teacher::setSubject(Subject *subject) {
  68. this->subject = subject;
  69. }
  70.  
  71. //
  72. ///-- GROUP-------------------------------------------
  73. //
  74.  
  75. class Group {
  76. private:
  77. string groupName;
  78.  
  79. public:
  80. vector<Student *> students;
  81.  
  82. Student *getStudent(int);
  83.  
  84. string getName();
  85.  
  86. Group(string);
  87.  
  88. friend Student;
  89. friend Lesson;
  90. friend TimeTable;
  91. };
  92.  
  93. // GROUP - metody
  94. Student *Group::getStudent(int index) {
  95. if (!this->students.empty())return this->students[index];
  96. else return NULL;
  97. }
  98.  
  99. string Group::getName() {
  100. return this->groupName;
  101. }
  102.  
  103. Group::Group(string groupName) {
  104. this->groupName = groupName;
  105. }
  106.  
  107.  
  108.  
  109. //
  110. ///-- SUBJECT-----------------------
  111. //
  112. class Subject {
  113. string name;
  114. public:
  115. Subject(string);
  116.  
  117. string getName();
  118.  
  119. void setName(string);
  120.  
  121. friend Teacher;
  122. friend Lesson;
  123. friend TimeTable;
  124. };
  125.  
  126. // SUBJECT - metody
  127. Subject::Subject(string name) {
  128. this->name = name;
  129. }
  130.  
  131. string Subject::getName() {
  132. return this->name;
  133. }
  134.  
  135. void Subject::setName(string name) {
  136. this->name = name;
  137. }
  138.  
  139.  
  140. //
  141. //-- STUDENT---------------------------------
  142. //
  143. class Student : public User {
  144. private:
  145. string albumNumber;
  146. Group *group;
  147. public:
  148. virtual void introduce();
  149.  
  150. Group *getGroup();
  151.  
  152. Student(string, string, string);
  153.  
  154. string getAlbumNumber();
  155.  
  156. Student(string, string, string, Group *);
  157.  
  158. void setGroup(Group *);
  159.  
  160. friend Lesson;
  161. friend TimeTable;
  162. };
  163.  
  164. // STUDENT-metody
  165.  
  166. void Student::introduce() {
  167. cout << this->firstName << ' ' << this->lastName << ' ' << this->albumNumber;
  168. }
  169.  
  170. Group *Student::getGroup() {
  171. return this->group;
  172. }
  173.  
  174. Student::Student(string firstName, string lastName, string albumNumber) {
  175. this->firstName = firstName;
  176. this->lastName = lastName;
  177. this->albumNumber = albumNumber;
  178. }
  179.  
  180. string Student::getAlbumNumber() {
  181. return this->albumNumber;
  182. }
  183.  
  184. Student::Student(string firstName, string lastName, string albumNumber, Group *group) {
  185. this->firstName = firstName;
  186. this->lastName = lastName;
  187. this->albumNumber = albumNumber;
  188. this->group = group;
  189. this->group->students.push_back(this);
  190. }
  191.  
  192. void Student::setGroup(Group *group) {
  193. int i = 0;
  194. if (this->group != NULL) {
  195. while (this != this->group->students[i]) {
  196. i++;
  197. }
  198.  
  199. for (i; i < this->group->students.size(); i++) {
  200. this->group->students[i] = this->group->students[i + 1];
  201. }
  202. this->group->students.pop_back();
  203. }
  204. this->group = group;
  205. this->group->students.push_back(this);
  206.  
  207. }
  208.  
  209. //
  210. //-- LESSON---------------------------------
  211. //
  212.  
  213. class Lesson {
  214. private:
  215. Teacher *teacher;
  216. Group *group;
  217. Subject *subject;
  218. int number;
  219.  
  220. public:
  221. vector<User *> users;
  222.  
  223. Teacher *getTeacher();
  224.  
  225. vector<User *> getUsers();
  226.  
  227. Group *getGroup();
  228.  
  229. int getNumber();
  230.  
  231. Subject *getSubject();
  232.  
  233. Lesson(Teacher *, Group *, Subject *, int);
  234.  
  235. friend TimeTable;
  236. };
  237.  
  238. Teacher *Lesson::getTeacher() {
  239. return this->teacher;
  240. }
  241.  
  242. vector<User *> Lesson::getUsers() {
  243. for (int i = 0; i < this->group->students.size(); i++) {
  244. users.push_back(this->group->students[i]);
  245. }
  246. users.push_back(this->teacher);
  247. return users;
  248. }
  249.  
  250. Group *Lesson::getGroup() {
  251. return this->group;
  252. }
  253.  
  254. int Lesson::getNumber() {
  255. return this->number;
  256. }
  257.  
  258. Subject *Lesson::getSubject() {
  259. return this->subject;
  260. }
  261.  
  262. Lesson::Lesson(Teacher *teacher, Group *group, Subject *subject, int number) {
  263. this->teacher = teacher;
  264. this->group = group;
  265. this->subject = subject;
  266. this->number = number;
  267. this->users = getUsers();
  268. }
  269.  
  270. //
  271. ///-- TIMETABLE -------------------------------------------
  272. //
  273.  
  274. class TimeTable {
  275. private:
  276. list<Lesson *> timetable;
  277. public:
  278. bool addLesson(Lesson *);
  279.  
  280. list<Lesson *> getStudentLessons(Student *);
  281.  
  282. bool isStudentFree(Student *, int);
  283.  
  284. Subject *getStudentLessonSubject(Student *, int);
  285. };
  286.  
  287. bool TimeTable::addLesson(Lesson *lesson) {
  288. list<Lesson *>::iterator i;
  289. Lesson *it;
  290. list<Lesson *> timetable;
  291. for (i = this->timetable.begin(); i != this->timetable.end(); ++i) {
  292. it = *i;
  293. if (it->number == lesson->number && it->group == lesson->group) return false;
  294. if (it->number == lesson->number && it->users.back() == lesson->teacher) return false;
  295. }
  296. this->timetable.push_back(lesson);
  297. return true;
  298. }
  299.  
  300.  
  301. list<Lesson *> TimeTable::getStudentLessons(Student *student) {
  302. list<Lesson *>::iterator i;
  303. Lesson *it;
  304. list<Lesson *> timetable;
  305. for (i = this->timetable.begin(); i != this->timetable.end(); ++i) {
  306. it = *i;
  307. if (it->group == student->getGroup())timetable.push_back(it);
  308. }
  309. return timetable;
  310. }
  311.  
  312. bool TimeTable::isStudentFree(Student *student, int number) {
  313. list<Lesson *>::iterator i;
  314. Lesson *it;
  315. for (i = this->timetable.begin(); i != this->timetable.end(); ++i) {
  316. it = *i;
  317. if (it->group == student->getGroup() && it->number == number) return false;
  318. }
  319. return true;
  320. }
  321.  
  322. Subject *TimeTable::getStudentLessonSubject(Student *student, int number) {
  323. list<Lesson *>::iterator i;
  324. Lesson *it;
  325. for (i = this->timetable.begin(); i != this->timetable.end(); ++i) {
  326. it = *i;
  327. if (it->group == student->getGroup() && it->number == number) return it->subject;
  328. }
  329. return NULL;
  330. }
  331.  
  332.  
  333. //
  334. ///-- MAIN-------------------------------------------
  335. //
  336. int main() {
  337.  
  338. Teacher *teacher = new Teacher("Jan", "Kowalski");
  339. Student *student1 = new Student("Adam", "Abacki", "1");
  340. Student *student2 = new Student("Bartosz", "Babacki", "2");
  341. Subject *subject1 = new Subject("Programowanie obiektowe");
  342. Subject *subject2 = new Subject("Podstawy symulacji");
  343. Group *group = new Group("I912");
  344. student1->setGroup(group);
  345. student2->setGroup(group);
  346. Lesson *l1 = new Lesson(teacher, group, subject1, 1);
  347. Lesson *l2 = new Lesson(teacher, group, subject2, 3);
  348. TimeTable *timeTable = new TimeTable();
  349. timeTable->addLesson(l1);
  350. timeTable->addLesson(l2);
  351. cout << timeTable->isStudentFree(student1, 2); // wypisuje 1
  352. cout << timeTable->isStudentFree(student1, 3); // wypisuje 0
  353. Subject *s = timeTable->getStudentLessonSubject(student1, 1);
  354. if (s != NULL) {
  355. cout << s->getName(); // wypisuje Programowanie obiektowe
  356. }
  357. list<Lesson *> lessonList = timeTable->getStudentLessons(student2);
  358. for (Lesson *v : lessonList)
  359. std::cout << v->getNumber() << " " << v->getSubject()->getName() << "\n";
  360.  
  361. return 0;
  362. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement