From 117290d4271012df8a128fc7d7636e93f18d35b8 Mon Sep 17 00:00:00 2001
From: Muriki <mgy20@inf.ufpr.br>
Date: Fri, 6 Dec 2024 17:23:25 -0300
Subject: [PATCH] =?UTF-8?q?Adicionado=20implementa=C3=A7=C3=A3o=20da=20cla?=
 =?UTF-8?q?sse=20Biblioteca?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 main.cpp                        | 36 +++++++++++++++------------------
 sources/Biblioteca.cpp          | 13 ++++++++++++
 sources/Biblioteca.hpp          | 11 ++++++++++
 sources/ControladorUsuarios.cpp | 34 ++++++++++++++++++++++++++++++-
 sources/ControladorUsuarios.hpp |  2 +-
 sources/Usuario.cpp             |  8 ++++----
 6 files changed, 78 insertions(+), 26 deletions(-)

diff --git a/main.cpp b/main.cpp
index 0eefe5f..7d830a6 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,8 +1,7 @@
+#include <cstdlib>
 #include <iostream>
 
-#include "./sources/ControladorUsuarios.hpp"
-#include "./sources/ControladorObras.hpp"
-#include "./sources/DescricaoObra.hpp"
+#include "./sources/Biblioteca.hpp"
 
 using namespace std;
 
@@ -25,32 +24,23 @@ int show_options () {
   cout << "3 - Pagar Multa" << endl;
   cout << "4 - Finalizar" << endl;
   cout << "> ";
-
   cin >> option;
+
   return option;
 }
 
 
 int main(){
+  system("clear");
+
+  // Cria Biblioteca
+  cout << "> Instanciando Biblioteca" << endl;
+  Biblioteca bib;
+
   // Cria Usuarios
-  cout << "> Instanciando Controlador de Usuarios" << endl;
-  ControladorUsuarios contUsuarios;
+  ControladorUsuarios contUsuarios = bib.getContUsuarios();
 
   cout << "> Criando Usuarios" << endl;
-  //string nome, CPF, endereco, telefone, email;
-  //for (int i=0; i<3 ;i++){
-  //  cout << "Entre com o nome: ";     cin >> nome;
-  //  cout << "Entre com o CPF: ";      cin >> CPF;
-  //  cout << "Entre com o endereco: "; cin >> endereco;
-  //  cout << "Entre com o telefone: "; cin >> telefone;
-  //  cout << "Entre com o email: ";    cin >> email;
-
-  //  if (contUsuarios.adicionarUsuario(nome, CPF, endereco, telefone, email))
-  //    cout << "> Usuario " << nome << " adicionado com sucesso" << endl;
-  //  else
-  //    cout << "> Falha ao adicionar o usuario " << nome << endl;
-  //}
-  
   contUsuarios.adicionarUsuario("Muriki", "12345", "Casa", "9999", "murikigy@gmail.com");
   contUsuarios.adicionarUsuario("Nico", "54321", "Apartamento", "8888", "nico@gmail.com");
   contUsuarios.adicionarUsuario("Marcus", "12345", "Casa", "9988", "marcus@gmail.com");
@@ -72,6 +62,8 @@ int main(){
         if (valor > 0) {
           cout << "\nUsuario: " << userCPF << endl;
           cout << "Valor a pagar: " << valor << endl;
+        } else {
+          cout << "Aviso: Usuario não possui multas" << endl;
         }
         break;
 
@@ -84,6 +76,10 @@ int main(){
       case FINISH:
         cout << "> Finalizando programa!" << endl;
         return 0;
+
+      default:
+        cout << "Comando não reconhecido!" << endl;
+        break;
     }
   }
 
diff --git a/sources/Biblioteca.cpp b/sources/Biblioteca.cpp
index 2e5e0dc..6b63227 100644
--- a/sources/Biblioteca.cpp
+++ b/sources/Biblioteca.cpp
@@ -1 +1,14 @@
 #include "./Biblioteca.hpp"
+
+// Constructor
+Biblioteca::Biblioteca() {}
+
+
+// Methods
+ControladorObras Biblioteca::getContObras(){
+  return this->contObras;
+}
+
+ControladorUsuarios Biblioteca::getContUsuarios(){
+  return this->contUsuarios;
+}
diff --git a/sources/Biblioteca.hpp b/sources/Biblioteca.hpp
index 091ed8a..ebe965f 100644
--- a/sources/Biblioteca.hpp
+++ b/sources/Biblioteca.hpp
@@ -1,12 +1,23 @@
 #ifndef __BIBLIOTECA__
 #define __BIBLIOTECA__
 
+#include "./ControladorUsuarios.hpp"
+#include "./ControladorObras.hpp"
+
+using namespace std;
+
 class Biblioteca {
   private:
+    ControladorUsuarios contUsuarios;
+    ControladorObras contObras;
 
   public:
     // Construtor
+    Biblioteca();
 
+    // Methods
+    ControladorObras getContObras();
+    ControladorUsuarios getContUsuarios();
 
 };
 
diff --git a/sources/ControladorUsuarios.cpp b/sources/ControladorUsuarios.cpp
index 36b48ec..82da897 100644
--- a/sources/ControladorUsuarios.cpp
+++ b/sources/ControladorUsuarios.cpp
@@ -38,13 +38,45 @@ bool ControladorUsuarios::adicionarUsuario(string nome, string CPF, string ender
 }
 
 
-void ControladorUsuarios::registrarEmprestimo(string CPF, DescricaoObra descricao){
+int ControladorUsuarios::registrarEmprestimo(string CPF, DescricaoObra descricao){
 
+  // Search for user
+  auto it = find_if(usuarios.begin(), usuarios.end(), [CPF](Usuario& u) {
+      return u.getCPF() == CPF;
+    });
+
+  if (it == usuarios.end()) {
+    cout << "> Erro: Usuario não encontrado" << endl;
+    return -1;
+  }
+
+  if (!it->emprestar(descricao)){
+    cout << "> Erro: Falha ao realizar um emprestimo" << endl;
+    return -1;
+  }
+
+  // Calcula data e retorna
+  return 0;
 }
 
 
 int ControladorUsuarios::retornarEmprestimo(string CPF, DescricaoObra descricao){
 
+  // Search for user
+  auto it = find_if(usuarios.begin(), usuarios.end(), [CPF](Usuario& u) {
+      return u.getCPF() == CPF;
+    });
+
+  if (it == usuarios.end()) {
+    cout << "> Erro: Usuario não encontrado" << endl;
+    return -1;
+  }
+
+  if (!it->devolver(descricao)){
+    cout << "> Erro: Falha ao realizar a devolução" << endl;
+    return -1;
+  }
+
   return 0;
 }
 
diff --git a/sources/ControladorUsuarios.hpp b/sources/ControladorUsuarios.hpp
index 9d7b728..72f064b 100644
--- a/sources/ControladorUsuarios.hpp
+++ b/sources/ControladorUsuarios.hpp
@@ -20,7 +20,7 @@ class ControladorUsuarios {
 
     // Methods
     bool adicionarUsuario(string nome, string CPF, string endereco, string telefone, string email);
-    void registrarEmprestimo(string CPF, DescricaoObra descricao);
+    int registrarEmprestimo(string CPF, DescricaoObra descricao);
     int retornarEmprestimo(string CPF, DescricaoObra descricao);
     int recuperarMultas(string CPF);
     bool registrarMultaPaga(string CPF, int valor);
diff --git a/sources/Usuario.cpp b/sources/Usuario.cpp
index 1b32371..f536127 100644
--- a/sources/Usuario.cpp
+++ b/sources/Usuario.cpp
@@ -34,8 +34,8 @@ bool Usuario::devolver(DescricaoObra descricao){
 
 // Increase fees
 int Usuario::atualizarMulta(int valor){
-
-  return 0;
+  this->multas += valor;
+  return this->multas;
 }
 
 string Usuario::getCPF(){
@@ -49,13 +49,13 @@ int Usuario::getMulta(){
 bool Usuario::pagarMulta(int valor){
   // Check if the user has fees
   if (this->multas <= 0) {
-    cout << "> Aviso: Usuario não possui multas!" << endl;
+    cout << "> Aviso: Usuario não possui multas! Ignorando operação" << endl;
     return false;
   }
 
   // Check if the value is suficient
   if (this->multas > valor) {
-    cout << "> Error: Valor insuficiente para pagar as multas!" << endl;
+    cout << "> Erro: Valor insuficiente para pagar as multas!" << endl;
     return false;
   }
 
-- 
GitLab