diff --git a/biblioteca.cpp b/biblioteca.cpp
index 7c285768a8e23875e083442843586a77357c706c..a9bd62aad062db9f280f1f2313362066ae85e2fa 100644
--- a/biblioteca.cpp
+++ b/biblioteca.cpp
@@ -1,12 +1,12 @@
-#include <cstdio>
-#include <cstdlib>
 #include <iostream>
+#include <string>
 #include <limits>
 
 #include "./sources/Biblioteca.hpp"
 #include "./sources/Livro.hpp"
 #include "./sources/Periodico.hpp"
 
+
 using namespace std;
 
 
@@ -92,37 +92,32 @@ int main(){
 
   contObras.mostrarDetalhes();
 
-  //cout << ": Criando Obras" << endl;
-  //ControladorObras contObras = bib.getContObras();
-  //string titulo, autor, editora; int ano;
-  //for (int i=0; i<2 ;i++) {
-  //  cin >> titulo; cin >> ano; cin >> autor; cin >> editora;
-  //  Livro liv(titulo, ano, autor, editora);
-  //  contObras.adicionarObra(liv);
-  //}
-  //contObras.mostrarDetalhes();
-
   // Interation Loop
   int option = START;
   while (option != FINISH) {
     option = show_options();
+    
+    // Variaveis para usuario
     string nome, userCPF, endereco, telefone, email;
-    string tipoObra;
     int valor;
 
+    // Variaveis para obras
+    string tipoObra, tipoBusca;
+    string titulo, autor, editora;
+    int ano, volume, mes;
+
     switch (option) {
       case ADDUSER:
-        cout << "Entre com o nome: ";   cin >> nome;
-        cout << "Entre com o CPF: ";   cin >> userCPF;
+        cout << "Entre com o nome: ";       cin >> nome;
+        cout << "Entre com o CPF: ";        cin >> userCPF;
         cout << "Entre com o endereco: ";   cin >> endereco;
         cout << "Entre com o telefone: ";   cin >> telefone;
-        cout << "Entre com o email: ";   cin >> email;
+        cout << "Entre com o email: ";      cin >> email;
         if (contUsuarios.adicionarUsuario(nome, userCPF, endereco, telefone, email))
           cout << "> Usuario adicionado com sucesso!" << endl;
         break;
 
-      case LISTUSERS:
-        contUsuarios.mostrarDetalhes();
+      case LISTUSERS: contUsuarios.mostrarDetalhes();
         break;
 
       case QUERYFEES:
@@ -132,7 +127,7 @@ int main(){
           cout << "\nUsuario: " << userCPF << endl;
           cout << "Valor a pagar: " << valor << endl;
         } else {
-          cout << "Aviso: Usuario não possui multas" << endl;
+          cout << "> Aviso: Usuario não possui multas" << endl;
         }
         break;
 
@@ -143,29 +138,83 @@ int main(){
         break;
 
       case ADDWORK:
-        //contObras.adicionarObra(DescricaoObra &descricao);
+        cout << "Entre com o tipo da obra (periodico|livro): ";   cin >> tipoObra;  cin.ignore();
+        if (tipoObra == "periodico") {
+          cout << "Entre com o titulo: ";     getline(cin, titulo);
+          cout << "Entre com o ano: ";        cin >> ano;
+          cout << "Entre com o volume: ";     cin >> volume;
+          cout << "Entre com o mês: ";        cin >> mes;
+          Periodico per(titulo, ano, volume, mes);
+          contObras.adicionarObra(per);
+        } else if (tipoObra == "livro") {
+          cout << "Entre com o titulo: ";     getline(cin, titulo);
+          cout << "Entre com o ano: ";        cin >> ano; cin.ignore();
+          cout << "Entre com o autor: ";      getline(cin, autor);
+          cout << "Entre com o editora: ";    getline(cin, editora);
+          Livro liv(titulo, ano, autor, editora);
+          contObras.adicionarObra(liv);
+        } else {
+          cout << "Erro: Tipo não recinhecido! Ignorando operação" << endl;
+        }
         break;
 
-      case LISTWORKS:
-        contObras.mostrarDetalhes();
+      case LISTWORKS: contObras.mostrarDetalhes();
         break;
 
       case QUERYWORK:
-        cout << "Entre com o tipo da obra: ";   cin >> tipoObra;
+        cout << "Entre com o tipo da obra (periodico|livro): ";   cin >> tipoObra; cin.ignore();
         if (tipoObra == "periodico") {
-          cout << "Alguma coisa";
+          cout << "Método de busca (titulo|tituloano): ";
+          cin >> tipoBusca;
         } else if (tipoObra == "livro") {
-          cout << "Alguma coisa";
+          cout << "Método de busca (titulo|autor): ";
+          cin >> tipoBusca;
+        } else {
+          cout << "Erro: Tipo não reconhecido! Ignorando operação" << endl;
         }
         //contObras.pesquisarObra(DescricaoObra &descricao);
         break;
 
       case BORROWWORK:
-        //contObras.solicitarEmprestimo(DescricaoObra &descricao);
+        cout << "Entre com o tipo da obra (periodico|livro): ";   cin >> tipoObra; cin.ignore();
+        if (tipoObra == "periodico") {
+          cout << "Entre com o titulo: ";     getline(cin, titulo); 
+          cout << "Entre com o ano: ";        cin >> ano;           
+          cout << "Entre com o volume: ";     cin >> volume;        
+          cout << "Entre com o mês: ";        cin >> mes;           
+          Periodico per(titulo, ano, volume, mes);
+          contObras.solicitarEmprestimo(per);
+        } else if (tipoObra == "livro") {
+          cout << "Entre com o titulo: ";     getline(cin, titulo);     
+          cout << "Entre com o ano: ";        cin >> ano; cin.ignore();              
+          cout << "Entre com o autor: ";      getline(cin, autor);      
+          cout << "Entre com o editora: ";    getline(cin, editora);    
+          Livro liv(titulo, ano, autor, editora);
+          contObras.solicitarEmprestimo(liv);
+        } else {
+          cout << "Erro: Tipo não reconhecido! Ignorando operação" << endl;
+        }
         break;
 
       case RETURNWORK:
-        //contObras.devolverEmprestimo(DescricaoObra &descricao);
+        cout << "Entre com o tipo da obra (periodico|livro): ";   cin >> tipoObra; cin.ignore();
+        if (tipoObra == "periodico") {
+          cout << "Entre com o titulo: ";     getline(cin, titulo);  
+          cout << "Entre com o ano: ";        cin >> ano;            
+          cout << "Entre com o volume: ";     cin >> volume;         
+          cout << "Entre com o mês: ";        cin >> mes;            
+          Periodico per(titulo, ano, volume, mes);
+          contObras.devolverEmprestimo(per);
+        } else if (tipoObra == "livro") {
+          cout << "Entre com o titulo: ";     getline(cin, titulo);  
+          cout << "Entre com o ano: ";        cin >> ano; cin.ignore();            
+          cout << "Entre com o autor: ";      getline(cin, autor);   
+          cout << "Entre com o editora: ";    getline(cin, editora); 
+          Livro liv(titulo, ano, autor, editora);
+          contObras.devolverEmprestimo(liv);
+        } else {
+          cout << "Erro: Tipo não reconhecido! Ignorando operação" << endl;
+        }
         break;
 
       case FINISH:
diff --git a/sources/DescricaoObra.hpp b/sources/DescricaoObra.hpp
index a58d412a563dcc6121d04b4826006b0f9c837b62..7e839f07425c923198ce5e104bd3a9c0dd7d24b7 100644
--- a/sources/DescricaoObra.hpp
+++ b/sources/DescricaoObra.hpp
@@ -17,7 +17,7 @@ class DescricaoObra {
     // Contructor
     DescricaoObra() {};
     DescricaoObra(const string& tipo, const string& titulo, int ano);
-    virtual void mostrarDetalhes() const = 0;
+    virtual void mostrarDetalhes() const;
 
     // Methods
     string getTitulo() const ;