4/17/2017

Ejercicio 56

Se desea gestionar un sistema de registro, para las aplicaciones que se dan de alta en el sistema, los datos son: nombre del proceso, tiempo de uso del procesador, nombre de la tarea ejecutada. Ordene los registros de menor a mayor teniendo como criterio, el tiempo de uso del procesador.

Vector de objetos

#include <iostream>
#include "Proceso.h"
#include "Registro.h"
#include "stdlib.h"

using namespace std;

// método para llenar el vector
void llenar(Proceso *pro)
{
    // pedimos el nombre del proceso
    string n_proceso, n_tarea;
    int t;
    cout << "Digite nombre del proceso" << endl;
    cout << ">> ";
    cin >> n_proceso;
    // encapsulamos la variable n_proceso
    pro->setNombreProceso(n_proceso);

    // pedimos el tiempo de uso del procesador
    cout << "Digite tiempo de uso del procesador" << endl;
    cout << ">> ";
    cin >> t;
    // encapsulamos la variable t
    pro->setTiempo(t);
    // pedimos el nombre de la tarea
    cout << "Digite nombre de la tarea ejecutada" << endl;
    cout << ">> ";
    cin >> n_tarea;
    // encapsulamos la variable n_tarea
    pro->setNombreTarea(n_tarea);
}

// método para mostrar la informacion del vector
void mostrar(Registro *obj)
{
    // recorremos el vector con el ciclo for
    for (int i = 0; i < obj->getTamano(); i++)
    {
        // acumulamos en la variable datos la informacion que haya en la posicion i del vector
        cout << "Nombre del proceso: " << obj->getVector(i)->getNombreProceso() << endl;
        cout << "Tiempo de uso del procesador: " << obj->getVector(i)->getTiempo() << endl;
        cout << "Nombre de la tarea: " << obj->getVector(i)->getNombreTarea() << endl << endl;
    }
}

// método para mostrar el menu de opciones
int menu()
{
    int opcion;
    do
    {
        cout << "======== MENÚ =======" << endl;
        cout << "1. Mostrar registros" << endl;
        cout << "2. Ordenar registros" << endl;
        cout << "3. Salir" << endl;
        cin >> opcion;
        system("cls");
    }
    while (opcion < 1 || opcion > 3);
    return opcion;
}

int main(void)
{
    // creamos un objeto de la clase Registro (Instanciación)
    Registro *obj = new Registro();
    // declaramos un objeto de la clase Proceso
    Proceso *pro;
    int opcion, tam;
    // pedimos el tamaño del vector
    cout << "Digite tamano del Vector" << endl;
    cout << ">> ";
    cin >> tam;
    // encapsulamos la variable tam
    obj->setTamano(tam);
    // creamos el vector
    obj->crearVector();
    // recorremos el vector con el ciclo for
    for (int i = 0; i < obj->getTamano(); i++)
    {
        // creamos un nuevo objeto de la clase Proceso
        pro = new Proceso();
        cout << "Llene la información del registro " << i << endl;
        // llenamos la informacion de ese objetos
        llenar(pro);
        // guardamos en la posicion i el objeto pro
        obj->setVector(i, pro);
    }
    do
    {
        // le asignamos a la variable opcion el valor que retorne el metodo menu
        opcion = menu();
        // dependiendo del valor que tenga la variabl opcion se seleccionara un caso
        switch(opcion)
        {
            case 1:
                mostrar(obj);
                break;
            case 2:
                obj->ordenar();
                cout << "REGISTROS ORDENADOS!" << endl;
                break;
            default:
                break;
        }
    }
    while (opcion != 3);
}

#ifndef PROCESO_H
#define PROCESO_H
#include <iostream>

using namespace std;

class Proceso
{
    public:
        Proceso();
        virtual ~Proceso();
        void setNombreProceso(string val);
        string getNombreProceso();
        void setTiempo(int val);
        int getTiempo();
        void setNombreTarea(string val);
        string getNombreTarea();
    protected:

    private:
        // de declaran los atributos privados de la clase
        string nombre_proceso;
        int tiempo;
        string nombre_tarea;
};

#endif // PROCESO_H

#include "Proceso.h"

Proceso::Proceso()
{
    // se le asignan valores por defecto a los atributos en el constructor
    nombre_proceso = "";
    tiempo = 0;
    nombre_tarea = "";
}

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

void Proceso::setNombreProceso(string val)
{
    nombre_proceso = val;
}

string Proceso::getNombreProceso()
{
    return nombre_proceso;
}

void Proceso::setTiempo(int val)
{
    tiempo = val;
}

int Proceso::getTiempo()
{
    return tiempo;
}

void Proceso::setNombreTarea(string val)
{
    nombre_tarea = val;
}

string Proceso::getNombreTarea()
{
    return nombre_tarea;
}

#ifndef REGISTRO_H
#define REGISTRO_H
#include "Proceso.h"
#include <iostream>

using namespace std;

class Registro
{
    public:
        Registro();
        virtual ~Registro();
        void setTamano(int val);
        int getTamano();
        void setVector(int pos, Proceso *val);
        Proceso *getVector(int pos);
        void crearVector();
        void cambiar(int p1, int p2);
        void ordenar();
    protected:

    private:
        // de declaran los atributos privados de la clase
        int tamano;
        Proceso *vector;
};

#endif // REGISTRO_H


#include "Registro.h"

Registro::Registro()
{
    tamano = 0;
    vector = NULL;
}

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

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

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

void Registro::setVector(int pos, Proceso *val)
{
    vector[pos] = *val;
}

Proceso *Registro::getVector(int pos)
{
    return &vector[pos];
}

// método para crear el vector
void Registro::crearVector()
{
    // le asignamos al vector de tipo Proceso un tamaño del valor de la variable tamano
    vector = new Proceso[tamano];
}

void Registro::cambiar(int p1, int p2)
{
    // inicializamos una variable de tipo proceso en el valor que haya en la posicion p1 del vector
   Proceso *temp = getVector(p1);
   // en la poscion p1 le asignamos el valor que haya en la posicion p2 del vector
   setVector(p1, getVector(p2));
   // en la poscion p2 le asignamos el valor que haya en la variable temp
   setVector(p2, temp);
}

// método para ordenar por el tiempo de uso
void Registro::ordenar()
{
    // recorremos con el ciclo for el vector
   for (int i = 0; i < getTamano(); i++)
   {
        // con el otro ciclo for recorremos la siguiente posicion de i
        for (int j = i+1; j < getTamano(); j++)
        {
            // si la el tiempo de la posicion i del vector es mayor a su siguiente posicion
            if (getVector(i)->getTiempo() > getVector(j)->getTiempo())
            {
                // entonces cambiamos esas posiciones
                cambiar(i, j);
            }
        }
   }
}

import javax.swing.JOptionPane;

public class Main
{
    // método para llenar el vector
    public static void llenar(Proceso pro)
    {
        // pedimos el nombre del proceso
        String n_proceso = JOptionPane.showInputDialog("Digite nombre del proceso:");
        // encapsulamos la variable n_proceso
        pro.setNombreProceso(n_proceso);
        // pedimos el tiempo de uso del procesador
        int t = Integer.parseInt(JOptionPane.showInputDialog("Digite tiempo de uso del procesador:"));
        // encapsulamos la variable t
        pro.setTiempo(t);
        // pedimos el nombre de la tarea
        String n_tarea = JOptionPane.showInputDialog("Digite nombre de la tarea ejecutada:");
        // encapsulamos la variable n_tarea
        pro.setNombreTarea(n_tarea);
    }
    
    // método para mostrar la informacion del vector
    public static void mostrar(Registro obj)
    {
        String datos = "";
        // recorremos el vector con el ciclo for
        for (int i = 0; i < obj.getTamaño(); i++)
        {
            // acumulamos en la variable datos la informacion que haya en la posicion i del vector
            datos += "Nombre del proceso: " + obj.getVector(i).getNombreProceso() + "\n" +
                     "Tiempo de uso del procesador: " + obj.getVector(i).getTiempo() + "\n" +
                     "Nombre de la tarea: " + obj.getVector(i).getNombreTarea() + "\n\n";
        }
        // mostramos la variable datos
        JOptionPane.showMessageDialog(null, datos);
    }
    
    // método para mostrar el menu de opciones
    public static int menu()
    {
        int opcion;
        do
        {
            opcion = Integer.parseInt(JOptionPane.showInputDialog(
            "======== MENÚ =======\n" +
            "1. Mostrar registros\n" +
            "2. Ordenar registros\n" +
            "3. Salir"));
        }
        while (opcion < 1 || opcion > 3);
        return opcion;
    }
    
    public static void main(String[] args)
    {
        // creamos un objeto de la clase Registro (Instanciación)
        Registro obj = new Registro();
        // declaramos un objeto de la clase Proceso
        Proceso pro;
        int opcion;
        // pedimos el tamaño del vector
        int tam = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite tamaño del Vector:"));
        // encapsulamos la variable tam
        obj.setTamaño(tam);
        // creamos el vector
        obj.crearVector();
        // recorremos el vector con el ciclo for
        for (int i = 0; i < obj.getTamaño(); i++)
        {
            // creamos un nuevo objeto de la clase Proceso
            pro = new Proceso();
            JOptionPane.showMessageDialog(null, "Llene la información del registro " + i);
            // llenamos la informacion de ese objetos
            llenar(pro);
            // guardamos en la posicion i el objeto pro
            obj.setVector(i, pro);
        }
        do
        {
            // le asignamos a la variable opcion el valor que retorne el metodo menu
            opcion = menu();
            // dependiendo del valor que tenga la variabl opcion se seleccionara un caso
            switch(opcion) 
            {
                case 1:
                    mostrar(obj);
                    break;
                case 2:
                    obj.ordenar();
                    JOptionPane.showMessageDialog(null, "¡REGISTROS ORDENADOS!");
                    break;
                default:
                    break;
            }
        }
        while (opcion != 3);
    }
}

public class Proceso
{
    // de declaran los atributos privados de la clase
    private String nombre_proceso;
    private int tiempo;
    private String nombre_tarea;
    
    public Proceso()
    {
        // se le asignan valores por defecto a los atributos en el constructor
        nombre_proceso = "";
        tiempo = 0;
        nombre_tarea = "";
    }
    
    // métodos Setters y Getters de los atributos de la clase
    public void setNombreProceso(String val)
    {
        nombre_proceso = val;
    }
    
    public String getNombreProceso()
    {
        return nombre_proceso;
    }
    
    public void setTiempo(int val)
    {
        tiempo = val;
    }
    
    public int getTiempo()
    {
        return tiempo;
    }
    
    public void setNombreTarea(String val)
    {
        nombre_tarea = val;
    }
    
    public String getNombreTarea()
    {
        return nombre_tarea;
    }
}

public class Registro
{
    // de declaran los atributos privados de la clase
    private int tamaño;
    private Proceso [] vector;
    
   public Registro()
   {
       // se le asignan valores por defecto a los atributos en el constructor
       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, Proceso val)
   {
       vector[pos] = val;
   }
   
   public Proceso getVector(int pos)
   {
       return vector[pos];
   }
   
   // método para crear el vector
   public void crearVector()
   {
       // le asignamos al vector de tipo Proceso un tamaño del valor de la variable tamaño
       vector = new Proceso[tamaño];
   }
   
   // método para cambiar dos posicion del vector
   public void cambiar(int p1, int p2)
   {
       // inicializamos una variable de tipo proceso en el valor que haya en la posicion p1 del vector
       Proceso temp = getVector(p1);
       // en la poscion p1 le asignamos el valor que haya en la posicion p2 del vector
       setVector(p1, getVector(p2));
       // en la poscion p2 le asignamos el valor que haya en la variable temp
       setVector(p2, temp);
   }
   
   // método para ordenar por el tiempo de uso
   public void ordenar()
   {
       // recorremos con el ciclo for el vector
       for (int i = 0; i < getTamaño(); i++)
       {
            // con el otro ciclo for recorremos la siguiente posicion de i
            for (int j = i+1; j < getTamaño(); j++)
            {
                // si la el tiempo de la posicion i del vector es mayor a su siguiente posicion
                if (getVector(i).getTiempo() > getVector(j).getTiempo())
                {
                    // entonces cambiamos esas posiciones
                    cambiar(i, j);
                }
            }
       }
   }
}