Skip to content

Commit

Permalink
Added Request class and started implementation of Inscrição de Aluno
Browse files Browse the repository at this point in the history
  • Loading branch information
lfsjesus committed Nov 1, 2022
1 parent 2dc8387 commit ae1c265
Show file tree
Hide file tree
Showing 9 changed files with 171 additions and 40 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,4 @@ add_executable(AED
Classes/Student.h
main.cpp
menu.cpp
menu.h Classes/Managing.cpp Classes/Managing.h Classes/Request.cpp Classes/Request.h Classes/Slot.cpp Classes/Slot.h Classes/CourseUnit.cpp Classes/CourseUnit.h)
menu.h Classes/Managing.cpp Classes/Managing.h Classes/Request.cpp Classes/Request.h Classes/Slot.cpp Classes/Slot.h Classes/CourseUnit.cpp Classes/CourseUnit.h Classes/Comparators.cpp)
22 changes: 22 additions & 0 deletions Classes/Comparators.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include "Student.h"
#include "Schedule.h"

struct studComp
{
bool operator()(const Student* s1, const Student* s2) const { return s1->getCode() < s2->getCode();}
};
struct schedComp
{
bool operator()(const Schedule* s1, const Schedule* s2) const {
return s1->getClass() < s2->getClass();
}
};

struct studentByName
{
bool operator()(const Student* s1, const Student* s2) const {
if (s1->getName() == s2->getName())
return s1->getCode() < s2->getCode();
return s1->getName() < s2->getName();
}
};
4 changes: 4 additions & 0 deletions Classes/Managing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -236,3 +236,7 @@ set<Student*, studentByName> Managing::sortStudentsByName(const set<Student *> s
}
return sortedByName;
}

bool Managing::addRequest(Request* request) {
requests.push(request);
}
24 changes: 3 additions & 21 deletions Classes/Managing.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,7 @@
#include "Schedule.h"
#include "CourseUnit.h"
#include "Turma.h"

struct studComp
{
bool operator()(const Student* s1, const Student* s2) const { return s1->getCode() < s2->getCode();}
};
struct schedComp
{
bool operator()(const Schedule* s1, const Schedule* s2) const {
return s1->getClass() < s2->getClass();
}
};

struct studentByName
{
bool operator()(const Student* s1, const Student* s2) const {
if (s1->getName() == s2->getName())
return s1->getCode() < s2->getCode();
return s1->getName() < s2->getName();
}
};

#include "Comparators.cpp"

class Managing {
public:
Expand Down Expand Up @@ -64,6 +44,8 @@ class Managing {

set<Turma> getClassesByYear(char year);

bool addRequest(Request* request);

set<Student*, studentByName> sortStudentsByName(const set<Student *> s);


Expand Down
48 changes: 44 additions & 4 deletions Classes/Request.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,45 @@
//
// Created by luis on 18-10-2022.
//

#include "Request.h"

Request::Request(unsigned int studentCode1, const vector<Turma> &newClasses) {
this->studentCode1 = studentCode1;
this->new_classes = newClasses;

}

Request::Request(unsigned int studentCode1, string studentName, const vector<Turma> &newClasses) {
this->studentCode1 = studentCode1;
this->studentName = studentName;
this->new_classes = newClasses;
}

Request::Request(unsigned int studentCode1, unsigned int studentCode2, const vector<Turma> &newClasses) {
this->studentCode1 = studentCode1;
this->studentCode2 = studentCode2;
this->new_classes = newClasses;
}

unsigned int Request::getStudentCode1() const {
return studentCode1;
}

void Request::setStudentCode1(unsigned int studentCode1) {
Request::studentCode1 = studentCode1;
}

unsigned int Request::getStudentCode2() const {
return studentCode2;
}

void Request::setStudentCode2(unsigned int studentCode2) {
Request::studentCode2 = studentCode2;
}

const vector<Turma> &Request::getNewClasses() const {
return new_classes;
}

void Request::setNewClasses(const vector<Turma> &newClasses) {
new_classes = newClasses;
}


27 changes: 26 additions & 1 deletion Classes/Request.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,32 @@
#pragma once

#include "Turma.h"
#include "Student.h"

class Request {
public:
Request(unsigned int studentCode1, const vector<Turma> &newClasses);

Request(unsigned int studentCode1, string studentName, const vector<Turma> &newClasses);

Request(unsigned int studentCode1, unsigned int studentCode2, const vector<Turma> &newClasses);

unsigned int getStudentCode1() const;

void setStudentCode1(unsigned int studentCode1);

unsigned int getStudentCode2() const;

void setStudentCode2(unsigned int studentCode2);

const vector<Turma> &getNewClasses() const;

void setNewClasses(const vector<Turma> &newClasses);

private:
unsigned int studentCode1;
string studentName; // in case the student is being registered for the first time
unsigned int studentCode2 = 0;
vector<Turma> new_classes;

};

3 changes: 1 addition & 2 deletions Classes/Turma.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#pragma once
#include <iostream>
#include <vector>
//#include "Student.h"

using namespace std;

Expand Down Expand Up @@ -30,7 +29,7 @@ class Turma {

bool operator==(const Turma& turma) const;

//const vector<Student *> getStudents();

private:
string classCode;
string ucCode;
Expand Down
80 changes: 69 additions & 11 deletions menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -593,7 +593,10 @@ void Menu::turmaMenu() {
void Menu::inscreverAluno(){
unsigned upCode;
string name;
list<Turma> _classes;
string courseUnit;
string turma;
char year;
vector<Turma> turmas;

cout << "\t[0] Voltar atrás" << endl << endl;

Expand All @@ -602,18 +605,39 @@ void Menu::inscreverAluno(){
cin.clear();
cin.ignore(1000, '\n');

cout << "\tNome do aluno: ";
getline(cin, name);
cin.clear();
cin.ignore(1000, '\n');
if (m.getStudents().find(new Student(upCode)) == m.getStudents().end()) {

cout << "\t ! Está a inscrever um aluno novo no sistema !" << endl << endl;
cout << "\tNome do aluno: ";
getline(cin, name);
cin.clear();
cin.ignore(1000, '\n');
while (true) {
inscricao(year, courseUnit, turma, turmas);
char answer;
cout << "\t Pedido efetuado. Deseja inscrever em mais turmas? (S/N) ";
cin >> answer;

if (answer != 'S')
break;

Student * newStudent = new Student(upCode, name, _classes);
}
m.addRequest(new Request(upCode, name, turmas));
}

//TODO: add classes to student
else {
while(true) {
inscricao(year, courseUnit, turma, turmas);
char answer;
cout << "\t Pedido efetuado. Deseja inscrever em mais turmas? (S/N) ";
cin >> answer;

bool inserted = m.addStudent(newStudent);
if(inserted) cout << "Aluno Instrito com sucesso!" << endl;
else cout << "Perdemos a conexão ao Sigarra :/" << endl;
if (answer != 'S')
break;
}
m.addRequest(new Request(upCode, turmas));
}
// Falta impedir que ele se inscreva numa turma que já esteja inscrito ou que já tenha no vector de novas turmas

menuState.pop();
getMenu();
Expand Down Expand Up @@ -792,4 +816,38 @@ void Menu::trocaDupla() {

// Colocar os outros menus
// Colocar aqui as funções de listagem (que estão relacionadas
// com as escolhas dos menus
// com as escolhas dos menus



void Menu::inscricao(char& year, string& courseUnit, string& turma, vector<Turma>& turmas) {
cout << "\tEm que ano quer inscrever: ";
cin >> year;

set<CourseUnit> ucSet = m.getUcs(year);
auto it = ucSet.begin();

for (CourseUnit uc: ucSet)
cout << "\t" << uc.getUcCode() << endl;

do {
cout << "\tEscolha uma UC: ";
cin >> courseUnit;
CourseUnit tempUc(courseUnit);
it = ucSet.find(courseUnit);

} while (it == ucSet.end());



for (string s: (*it).getClasses())
cout << "\t" << s << endl;

do {
cout << "\tEscolha uma Turma: ";
cin >> turma;
} while ((*it).getClasses().find(turma) == (*it).getClasses().end());

turmas.push_back(Turma(turma, courseUnit));

}
1 change: 1 addition & 0 deletions menu.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,5 +53,6 @@ class Menu {
void permutacaoMenu();
void trocaSingular();
void trocaDupla();
void inscricao(char& year, string& courseUnit, string& turma, vector<Turma>& turmas);
std::stack<short int> menuState;
};

0 comments on commit ae1c265

Please sign in to comment.