4/11/2017

Ejercicio 48

Defina un vector de tamaño N de tipo Empleado. Para esto se declara la clase Empleado con sus atributos (código, nombre). Haga un menú que permita realizar las siguientes operaciones:

  • Registrar un empleado.

  • Mostrar datos del vector.

  • Mostrar los nombres de los empleados.

  • Mostrar los códigos de los empleados.

  • Buscar un empleado mediante su nombre.

  • Mostrar información de empleados con códigos mayores a un código pedido por pantalla.

Vector de objetos

#include <iostream>
// se incluye la clase Empleado para despues llamar a sus metodos 
#include "Empleado.h"
// se incluye la clase Logica para despues llamar a sus metodos 
#include "Logica.h"
// se incluye la clase stdlib para poder utilizar el metodo system que nos permitira utilizar los comandos basicos de la consola, en este caso lo utilizaremos para limpiar la pantalla de la consola system("cls")  
#include "stdlib.h"

using namespace std;

// método para llenar los datos en el vector 
void llenar(Empleado *obj)
{
    string nom;
    cout << "Ingrese su nombre" << endl;
    cout << ">> ";
    cin >> nom;
    obj->setNombre(nom);
    int cod;
    cout << "Ingrese su codigo" << endl;
    cout << ">> ";
    cin >> cod;
    obj->setCodigo(cod);
}

// método para mostrar los datos del vector 
void mostrar(Logica *obj, int opc)
{
    // dependiendo del valor de la variable opc pasada como parametro se seleccionara un caso 
    switch(opc){
        case 1:
            for (int i = 0; i < obj->getTamano(); i++)
            {
                cout << "Nombre: " << obj->getVector(i)->getNombre() << endl;
                cout << "Codigo: " << obj->getVector(i)->getCodigo() << endl << endl;
            }
            break;
        case 2:
            for (int i = 0; i < obj->getTamano(); i++)
            {
                cout << "Nombre: " << obj->getVector(i)->getNombre() << endl << endl;
            }
            break;
        case 3:
            for (int i = 0; i < obj->getTamano(); i++)
            {
                cout << "Codigo: " << obj->getVector(i)->getCodigo() << endl << endl;
            }
            break;
        default:
            if (obj->getVector(0) == NULL)
            {
                cout << "No hay ningún empleado registrado." << endl;
            }
            else
            {
                int cod;
                cout << "Ingrese codigo" << endl;
                cout << ">> ";
                cin >> cod;
                for (int i = 0; i < obj->getTamano(); i++)
                {
                    if (obj->getVector(i)->getCodigo() > cod)
                    {
                        cout << "Nombre: " << obj->getVector(i)->getNombre() << endl;
                        cout << "Codigo: " << obj->getVector(i)->getCodigo() << endl << endl;
                    }
                }
            }
            break;
    }
}

// método para mostrar el menu 
int menu()
{
    int opcion = 0;
    do
    {
        cout << "=========== SELECCIONE UNA OPCION DEL MENU ===========" << endl;
        cout << "1. Registrar empleado." << endl;
        cout << "2. Mostrar datos del vector." << endl;
        cout << "3. Mostar nombres de los empleados." << endl;
        cout << "4. Mostar códigos de los empleados." << endl;
        cout << "5. Buscar empleado." << endl;
        cout << "6. Mostrar informacion de los empleados, con códigos mayores a un codigo pedido por pantalla." << endl;
        cout << "7. Salir" << endl;
        cout << ">> ";
        cin >> opcion;
        system("cls");
    }
    while(opcion < 1 || opcion > 7);
    return opcion;
}

int main(void)
{
    // se crea un objeto de la clase Logica 
    Logica *obj = new Logica();
    // se declara una variable de tipo Empleado 
    Empleado *emp;
    // se crean 3 variables de tipo entero 
    int opcion, tam, cod;
    // se crea una variable de tipo string 
    string nombre;
    // se pide el tamaño del vector y se guarda en la variable tam 
    cout << "Digite tamano del Vector" << endl;
    cout << ">> ";
    cin >> tam;
    // se encapsula el valor de la variable tam 
    obj->setTamano(tam);
    // se crea el vector con el tamaño ya dado 
    obj->crearVector();
    do
    {
        // se le asigna a la variable opcion el valor que retorne el metodo menu 
        opcion = menu();
        // dependiendo del valor de la variable opcion seleccionara un caso 
        switch(opcion)
        {
            case 1:
                for (int i = 0; i < obj->getTamano(); i++)
                {
                    emp = new Empleado();
                    cout << "Llene la informacion del empleado " << i << endl;
                    llenar(emp);
                    obj->setVector(i, emp);
                }
                break;
            case 2:
                if (obj->getVector(0) == NULL)
                {
                    cout << "No se creado el vector." << endl;
                }
                else
                {
                    mostrar(obj, 1);
                }
                break;
            case 3:
                if (obj->getVector(0) == NULL)
                {
                    cout << "No se creado el vector." << endl;
                }
                else
                {
                    mostrar(obj, 2);
                }
                break;
            case 4:
                if (obj->getVector(0) == NULL)
                {
                    cout << "No se creado el vector." << endl;
                }
                else
                {
                    mostrar(obj, 3);
                }
                break;
            case 5:
                if (obj->getVector(0) == NULL)
                {
                    cout << "No se creado el vector." << endl;
                }
                else
                {
                    cout << "Digite nombre del empleado que quiere buscar" << endl;
                    cout << ">> ";
                    cin >> nombre;
                    int pos = obj->buscar(nombre);
                    if (pos != -1)
                    {
                        cout << "Nombre: " << obj->getVector(pos)->getNombre() << endl;
                        cout << "Codigo: " << obj->getVector(pos)->getCodigo() << endl;
                    }
                    else
                    {
                        cout << "El dato no se encuentra." << endl;
                    }
                }
                break;
            case 6:
                if (obj->getVector(0) == NULL)
                {
                    cout << "No se creado el vector." << endl;
                }
                else
                {
                    mostrar(obj, 4);
                }
                break;
            default:
                break;
        }
    }
    while (opcion != 7);
}

#ifndef EMPLEADO_H
#define EMPLEADO_H
#include <iostream>

using namespace std;

class Empleado
{
    public:
        Empleado();
        virtual ~Empleado();
        // se declaran los métodos publicos de la clase Empleado 
        void setNombre(string val);
        string getNombre();
        void setCodigo(int val);
        int getCodigo();
    protected:

    private:
        // se declaran los atributos privados de la clase Empleado 
        string nombre;
        int codigo;
};

#endif // EMPLEADO_H 

#include "Empleado.h"

Empleado::Empleado()
{
    // se le asignan valores por defecto a los atributos de la clase 
    nombre = "";
    codigo = 0;
}

Empleado::~Empleado()
{
    //dtor 
}

// métodos Setters y Getters de los atributos de la clase 
void Empleado::setNombre(string val)
{
    nombre = val;
}

string Empleado::getNombre()
{
    return nombre;
}

void Empleado::setCodigo(int val)
{
    codigo = val;
}

int Empleado::getCodigo()
{
    return codigo;
}

#ifndef LOGICA_H
#define LOGICA_H
#include <iostream>

using namespace std;

class Logica
{
    public:
        Logica();
        virtual ~Logica();
        // métodos publicos de la clase Logica 
        void setTamano(int val);
        int getTamano();
        void setVector(int pos, Empleado *val);
        Empleado *getVector(int pos);
        void crearVector();
        int buscar(string nom);
    protected:

    private:
        // atributos privados de la clase Logica 
        int tamano;
        Empleado *vector;
};

#endif // LOGICA_H 

#include "Logica.h"

Logica::Logica()
{
    // se le asignan valores por defecto a los atributos de la clase 
    tamano = 0;
    vector = NULL;
}

Logica::~Logica()
{
    //dtor 
}

// métodos Setters y Getters de la clase Logica 
void Logica::setTamano(int val)
{
    tamano = val;
}

int Logica::getTamano()
{
    return tamano;
}

// debo aclarar que el set del vector es algo complicado de entender, se debe tener un puntero hacia la variable val
// para poder modificarlo 
void Logica::setVector(int pos, Empleado *val)
{
    vector[pos] = *val;
}

// el simbolo & solo significa que tomaremos el valor que hay en la posicion pos del vector, recuerden que si no se escribe esto
// dara error porque entonces, estariamos retornando la direccion de la memoria asignada para ese vector... 
Empleado *Logica::getVector(int pos)
{
    return &vector[pos];
}

// método para crear el vector 
void Logica::crearVector()
{
    // se le asigna al vector el nuevo tamaño 
    vector = new Empleado[tamano];
}

int Logica::buscar(string nom)
{
    // recorremos todo el vector con el ciclo for 
    for (int i = 0; i < getTamano(); i++)
    {
        // si el nombre de la posicion i es igual al valor de la variable nom pasada como parametro 
        if (getVector(i)->getNombre().compare(nom) == 0)
        {
            // entonces se retorna la posicion actual de i 
            return i;
        }
    }
    // si no se encontro nada, se retorna -1 
    return -1;
}

// se importa paquete JOptionPane para dibujar un cuadro de dialogo en pantalla
// que muestre información o para llenar información 
import javax.swing.JOptionPane;

public class Main
{
    // método para llenar los datos en el vector 
    public static void llenar(Empleado obj)
    {
        String nom = JOptionPane.showInputDialog("Ingrese su nombre:");
        obj.setNombre(nom);
        int cod = Integer.parseInt(JOptionPane.showInputDialog("Ingrese su codigo:"));
        obj.setCodigo(cod);
    }
    
    // método para mostrar los datos del vector 
    public static void mostrar(Logica obj, int opc)
    {
        String datos = "";
        // dependiendo del valor de la variable opc pasada como parametro se seleccionara un caso 
        switch(opc){
            case 1:
                for (int i = 0; i < obj.getTamaño(); i++)
                {
                    datos += "Nombre: " + obj.getVector(i).getNombre() + "\n" +
                             "Codigo: " + obj.getVector(i).getCodigo() + "\n\n";
                }
                JOptionPane.showMessageDialog(null, datos);
                break;
            case 2:
                for (int i = 0; i < obj.getTamaño(); i++)
                {
                    datos += "Nombre: " + obj.getVector(i).getNombre() + "\n\n";
                }
                JOptionPane.showMessageDialog(null, datos);
                break;
            case 3:
                for (int i = 0; i < obj.getTamaño(); i++)
                {
                    datos += "Codigo: " + obj.getVector(i).getCodigo()+ "\n\n";
                }
                JOptionPane.showMessageDialog(null, datos);
                break;
            default:
                if (obj.getVector(0) == null)
                {
                    JOptionPane.showMessageDialog(null, "No hay ningún empleado registrado.");
                }
                else
                {
                    int cod = Integer.parseInt(JOptionPane.showInputDialog("Ingrese codigo:"));
                    for (int i = 0; i < obj.getTamaño(); i++)
                    {
                        if (obj.getVector(i).getCodigo() > cod)
                        {
                            datos += "Nombre: " + obj.getVector(i).getNombre() + "\n" +
                                     "Codigo: " + obj.getVector(i).getCodigo() + "\n\n";
                        }
                    }
                    JOptionPane.showMessageDialog(null, datos);
                }
                break;
        }
    }
    
    // método para mostrar el menu 
    public static int menu()
    {
        int opcion = 0;
        do
        {
            opcion = Integer.parseInt(JOptionPane.showInputDialog(
            "=========== SELECCIONE UNA OPCIÓN DEL MENÚ =========== \n" +
            "1. Registrar empleado.\n" +
            "2. Mostrar datos del vector.\n" +
            "3. Mostar nombres de los empleados.\n" +
            "4. Mostar códigos de los empleados.\n" +
            "5. Buscar empleado.\n" +
            "6. Mostrar información de los empleados, con códigos mayores a un codigo pedido por pantalla.\n" +
            "7. Salir\n\n" +
            " Seleccione una opción del 1 al 7:"));
        }
        while(opcion < 1 || opcion > 7);
        return opcion;
    }
    
    public static void main(String[] args)
    {
        // se crea un objeto de la clase Logica 
        Logica obj = new Logica();
        // se declara una variable de tipo Empleado 
        Empleado emp;
        // se crean 3 variables de tipo entero 
        int opcion, tam, cod;
        // se crea una variable de tipo string 
        String nombre;
        // se pide el tamaño del vector y se guarda en la variable tam 
        tam = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite tamaño del Vector:"));
        // se encapsula el valor de la variable tam 
        obj.setTamaño(tam);
        // se crea el vector con el tamaño ya dado 
        obj.crearVector();
        do
        {
            // se le asigna a la variable opcion el valor que retorne el metodo menu 
            opcion = menu();
            // dependiendo del valor de la variable opcion seleccionara un caso 
            switch(opcion) 
            {
                case 1:
                    for (int i = 0; i < obj.getTamaño(); i++)
                    {
                        emp = new Empleado();
                        JOptionPane.showMessageDialog(null, "Llene la información del empleado " + i);
                        llenar(emp);
                        obj.setVector(i, emp);
                    }
                    break;
                case 2:
                    if (obj.getVector(0) == null)
                    {
                        JOptionPane.showMessageDialog(null, "No se creado el vector.");
                    }
                    else
                    {
                        mostrar(obj, 1);
                    }
                    break;
                case 3:
                    if (obj.getVector(0) == null)
                    {
                        JOptionPane.showMessageDialog(null, "No se creado el vector.");
                    }
                    else
                    {
                        mostrar(obj, 2);
                    }
                    break;
                case 4:
                    if (obj.getVector(0) == null)
                    {
                        JOptionPane.showMessageDialog(null, "No se creado el vector.");
                    }
                    else
                    {
                        mostrar(obj, 3);
                    }
                    break;
                case 5:
                    if (obj.getVector(0) == null)
                    {
                        JOptionPane.showMessageDialog(null, "No se creado el vector.");
                    }
                    else
                    {
                        nombre = JOptionPane.showInputDialog("Digite nombre del empleado que quiere buscar");
                        int pos = obj.buscar(nombre);
                        if (pos != -1)
                        {
                            JOptionPane.showMessageDialog(null,
                                "Nombre: " + obj.getVector(pos).getNombre() + "\n" +
                                "Código: " + obj.getVector(pos).getCodigo());
                        }
                        else
                        {
                            JOptionPane.showMessageDialog(null, "El dato no se encuentra.");
                        }
                    }
                    break;
                case 6:
                    if (obj.getVector(0) == null)
                    {
                        JOptionPane.showMessageDialog(null, "No se creado el vector.");
                    }
                    else
                    {
                        mostrar(obj, 4);
                    }
                    break;
                default:
                    break;
            }
        }
        while (opcion != 7);
    }
}

public class Empleado
{
    // se declaran los atributos privados de la clase Empleado 
    private String nombre;
    private int codigo;
    
    public Empleado()
    {
        // se le asignan valores por defecto a los atributos de la clase 
        nombre = "";
        codigo = 0;
    }
    
    // métodos Setters y Getters de los atributos de la clase 
    public void setNombre(String val)
    {
        nombre = val;
    }
    
    public String getNombre()
    {
        return nombre;
    }
    
    public void setCodigo(int val)
    {
        codigo = val;
    }
    
    public int getCodigo()
    {
        return codigo;
    }
}

public class Logica
{
    // atributos privados de la clase Logica 
    private int tamaño;
    private Empleado [] vector;
    
    public Logica()
    {
        // se le asignan valores por defecto a los atributos de la clase 
        tamaño = 0;
        vector = null;
    }
    
    // métodos Setters y Getters de los atributos de la clase 
    public void setTamaño(int val)
    {
        tamaño = val;
    }
    
    public int getTamaño()
    {
        return tamaño;
    }
    
    public void setVector(int pos, Empleado val)
    {
        vector[pos] = val;
    }
    
    public Empleado getVector(int pos)
    {
        return vector[pos];
    }
    
    // método para crear el vector 
    public void crearVector()
    {
        // se le asigna al vector el nuevo tamaño 
        vector = new Empleado[tamaño];
    }
    
    // método para buscar un nombre 
    public int buscar(String nom)
    {
        // recorremos todo el vector con el ciclo for 
        for (int i = 0; i < getTamaño(); i++)
        {
            // si el nombre de la posicion i es igual al valor de la variable nom pasada como parametro 
            if (getVector(i).getNombre().equals(nom))
            {
                // entonces se retorna la posicion actual de i 
                return i;
            }
        }
        // si no se encontro nada, se retorna -1 
        return -1;
    }
}