Skip to content
Snippets Groups Projects
Commit 4d2da1b9 authored by Nico's avatar Nico
Browse files

Tentando fazer as obras funcionares

parent 00408d02
Branches
No related tags found
No related merge requests found
*.o
#include <iostream> #include <iostream>
#include <algorithm>
#include "./ControladorObras.hpp" #include "./ControladorObras.hpp"
...@@ -10,34 +11,42 @@ ControladorObras::ControladorObras() {} ...@@ -10,34 +11,42 @@ ControladorObras::ControladorObras() {}
// Method to display all Obras details // Method to display all Obras details
void ControladorObras::mostrarDetalhes() const { void ControladorObras::mostrarDetalhes() const {
for (const auto& obra : obras) { for (const auto& obra : this->obras) {
obra.mostrarDetalhes(); obra.mostrarDetalhes();
} }
} }
// Methods // Methods
pair<int, int> ControladorObras::pesquisarObra(string tipo, DescricaoObra descricao){ pair<int, int> ControladorObras::pesquisarObra(DescricaoObra descricao){
pair <int, int> p; pair <int, int> p = make_pair(0, 0);
auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) {
d.mostrarDetalhes();
return descricao == d.getDescricaoObra();
});
if (it_obra != this->obras.end()) {
cout << "> Erro: Obra não encontrada" << endl;
} else {
p = make_pair(it_obra->getTotal(), it_obra->getDisponiveis());
}
return p; return p;
} }
void ControladorObras::adicionarObra(DescricaoObra descricao){
auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) {
return descricao == d.getDescricaoObra();
});
bool ControladorObras::adicionarObra(string tipo, DescricaoObra descricao){ if (it_obra == this->obras.end()) {
// Check if exists Obra obra(descricao);
this->obras.push_back(obra);
if (tipo == "livro") { } else {
it_obra->adicionarObra();
} else if (tipo == "periodico") {
} }
return true;
} }
bool ControladorObras::solicitarEmprestimo(DescricaoObra descricao){ bool ControladorObras::solicitarEmprestimo(DescricaoObra descricao){
return true; return true;
......
...@@ -19,8 +19,8 @@ class ControladorObras { ...@@ -19,8 +19,8 @@ class ControladorObras {
void mostrarDetalhes() const; void mostrarDetalhes() const;
// Methods // Methods
pair<int, int> pesquisarObra(string tipo, DescricaoObra descricao); pair<int, int> pesquisarObra(DescricaoObra descricao);
bool adicionarObra(string tipo, DescricaoObra descricao); void adicionarObra(DescricaoObra descricao);
bool solicitarEmprestimo(DescricaoObra descricao); bool solicitarEmprestimo(DescricaoObra descricao);
bool devolverEmprestimo(DescricaoObra descricao); bool devolverEmprestimo(DescricaoObra descricao);
......
No preview for this file type
...@@ -5,16 +5,24 @@ ...@@ -5,16 +5,24 @@
using namespace std; using namespace std;
// Constructor // Constructor
DescricaoObra::DescricaoObra(const std::string& t, int ano) DescricaoObra::DescricaoObra(const string& tipo, const string& titulo, int ano)
: titulo(t), anoPublicacao(ano) { : tipo(tipo), titulo(titulo), anoPublicacao(ano) {}
}
void DescricaoObra::mostrarDetalhes() const { void DescricaoObra::mostrarDetalhes() const {
cout << "Título: " << titulo << "\n"; cout << "Título: " << titulo << "\n";
cout << "Ano de Publicação: " << anoPublicacao << "\n"; cout << "Ano de Publicação: " << anoPublicacao << "\n";
} }
// Operators
bool DescricaoObra::operator==(const DescricaoObra& other) const {
return this->titulo == other.titulo;
}
// Methods // Methods
string DescricaoObra::getTipo() {
return this->tipo;
}
string DescricaoObra::getTitulo(){ string DescricaoObra::getTitulo(){
return this->titulo; return this->titulo;
} }
......
...@@ -9,19 +9,23 @@ class DescricaoObra { ...@@ -9,19 +9,23 @@ class DescricaoObra {
private: private:
protected: protected:
string tipo;
string titulo; string titulo;
int anoPublicacao; int anoPublicacao;
public: public:
// Contructor // Contructor
DescricaoObra(); DescricaoObra();
DescricaoObra(const string& t, int ano); DescricaoObra(const string& tipo, const string& titulo, int ano);
virtual void mostrarDetalhes() const; virtual void mostrarDetalhes() const;
// Operators
bool operator==(const DescricaoObra& other) const;
// Methods // Methods
string getTitulo(); string getTitulo();
string getTipo();
int getAnoPublicacao(); int getAnoPublicacao();
}; };
......
No preview for this file type
...@@ -5,20 +5,8 @@ ...@@ -5,20 +5,8 @@
using namespace std; using namespace std;
// Contructor
//Livro::Livro() {
// // Dados da Descricao da obra
// cout << "Entre com o titulo da obra: "; cin >> titulo;
// cout << "Entre com o ano da obra: "; cin >> anoPublicacao;
//
// // Dados do Livro
// cout << "Entre com o autor: "; cin >> autor;
// cout << "Entre com a editora: "; cin >> editora;
//}
Livro::Livro(const string& t, int ano, const string& a, const string& e) Livro::Livro(const string& t, int ano, const string& a, const string& e)
: DescricaoObra(t, ano), autor(a), editora(e) {} : DescricaoObra("livro", t, ano), autor(a), editora(e) {}
// Description // Description
void Livro::mostrarDetalhes() const { void Livro::mostrarDetalhes() const {
...@@ -27,7 +15,6 @@ void Livro::mostrarDetalhes() const { ...@@ -27,7 +15,6 @@ void Livro::mostrarDetalhes() const {
cout << "Editora: " << editora << "\n"; cout << "Editora: " << editora << "\n";
} }
// Methods // Methods
string Livro::getAutor(){ string Livro::getAutor(){
return this->autor; return this->autor;
...@@ -36,5 +23,3 @@ string Livro::getAutor(){ ...@@ -36,5 +23,3 @@ string Livro::getAutor(){
string Livro::getEditora(){ string Livro::getEditora(){
return this->editora; return this->editora;
} }
No preview for this file type
#include <iostream> #include <iostream>
#include "./Obra.hpp" #include "./Obra.hpp"
#include "DescricaoObra.hpp" #include "./DescricaoObra.hpp"
#include "./Livro.hpp"
#include "./Periodico.hpp"
// Constructor // Constructor
Obra::Obra(DescricaoObra desc, int disp, int total) Obra::Obra(DescricaoObra descricao)
: descricao(desc), disponiveis(disp), total(total){ : descricao(descricao), disponiveis(1), total(1) {}
}
void Obra::mostrarDetalhes() const { void Obra::mostrarDetalhes() const {
this->descricao.mostrarDetalhes(); this->descricao.mostrarDetalhes();
...@@ -15,7 +15,6 @@ void Obra::mostrarDetalhes() const { ...@@ -15,7 +15,6 @@ void Obra::mostrarDetalhes() const {
std::cout << "Quantidade total: " << total << "\n"; std::cout << "Quantidade total: " << total << "\n";
} }
// Methods // Methods
bool Obra::emprestar(){ bool Obra::emprestar(){
return 0; return 0;
...@@ -26,11 +25,18 @@ void Obra::devolver(){ ...@@ -26,11 +25,18 @@ void Obra::devolver(){
} }
void Obra::adicionarObra(){ void Obra::adicionarObra(){
this->total++;
this->disponiveis++;
} }
DescricaoObra Obra::getDescricaoObra() { DescricaoObra Obra::getDescricaoObra() {
return this->descricao; if (this->descricao.getTipo() == "livro") {
Livro l = static_cast<Livro&>(this->descricao);
return Livro(l.getTitulo(), l.getAnoPublicacao(), l.getAutor(), l.getEditora());
} else {
Periodico p = static_cast<Periodico&>(this->descricao);
return Periodico(p.getTitulo(), p.getAnoPublicacao(), p.getVolume(), p.getMes());
}
} }
int Obra::getDisponiveis(){ int Obra::getDisponiveis(){
......
...@@ -12,7 +12,7 @@ class Obra { ...@@ -12,7 +12,7 @@ class Obra {
public: public:
// Contructor // Contructor
Obra(); Obra();
Obra(DescricaoObra descricao, int disponiveis, int total); Obra(DescricaoObra descricao);
virtual void mostrarDetalhes() const; virtual void mostrarDetalhes() const;
// Methods // Methods
......
No preview for this file type
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
// Contructor // Contructor
Periodico::Periodico(const std::string& t, int ano, int vol, int m) Periodico::Periodico(const std::string& t, int ano, int vol, int m)
: DescricaoObra(t, ano), volume(vol), mes(m) {} : DescricaoObra("periodico", t, ano), volume(vol), mes(m) {}
void Periodico::mostrarDetalhes() const { void Periodico::mostrarDetalhes() const {
DescricaoObra::mostrarDetalhes(); DescricaoObra::mostrarDetalhes();
...@@ -19,5 +19,3 @@ int Periodico::getVolume(){ ...@@ -19,5 +19,3 @@ int Periodico::getVolume(){
int Periodico::getMes(){ int Periodico::getMes(){
return this->mes; return this->mes;
} }
No preview for this file type
# Variáveis
CXX = g++
CXXFLAGS = -I../sources
LDFLAGS = -lm
SRCS = main.cpp obras-test.cpp \
../sources/ControladorObras.cpp \
../sources/Periodico.cpp \
../sources/Livro.cpp \
../sources/DescricaoObra.cpp \
../sources/Obra.cpp
OBJ = $(SRCS:.cpp=.o)
TARGET = main
# Regras
all: $(TARGET)
$(TARGET): $(OBJ)
$(CXX) $(OBJ) $(LDFLAGS) -o $(TARGET)
# Regra para compilar arquivos .cpp para .o
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
# Limpar arquivos gerados
clean:
rm -f $(OBJ) $(TARGET)
# Rebuild completo
rebuild: clean all
.PHONY: all clean rebuild
This diff is collapsed.
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h"
#include <iostream>
#include "doctest.h"
#include "../sources/ControladorObras.hpp"
#include "../sources/Livro.hpp"
#include "../sources/Periodico.hpp"
TEST_CASE("Adicionar Periodico") {
cout << "==================> Adicionar Periodico <==================" << endl;
cout << "> Instanciando o Controlador de Obras" << endl;
ControladorObras contObras;
cout << "=> Instanciando um Periodico: " << endl;
Periodico p("Revista de Ciência", 2023, 5, 3);
p.mostrarDetalhes();
cout << endl;
CHECK ("Revista de Ciência" == p.getTitulo());
CHECK (2023 == p.getAnoPublicacao());
CHECK (5 == p.getVolume());
CHECK (3 == p.getMes());
cout << "==> Adicionando a obra" << endl;
contObras.adicionarObra(p);
contObras.mostrarDetalhes();
cout << endl;
auto [total, disponiveis] = contObras.pesquisarObra(p);
CHECK (1 == total);
CHECK (1 == disponiveis);
cout << "======================================================" << endl;
//adicionar um que ja existe, incrementar
}
//cadastrar periodico
// cout << "==> Instanciando um Livro: " << endl;
// Livro l("C++ Programming", 2022, "John Doe", "Tech Books");
// l.mostrarDetalhes();
// contObras.adicionarObra("livro", l);
// cout << endl;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment