Se pide realizar un objeto llamado Laptop con los siguientes atributos: referencia, marca, modelo, precio, memoria ram, velocidad del procesador (ghz)
La aplicación debe contar con el siguiente menú de opciones:
- Crear el vector de objetos.
- Buscar por referencia.
- Ordenar por modelo (dada una marca).
- Mostrar equipos por rango de precios.
- Mostrar información del equipo mas económico (se podra elegir por una marca o todas las marcas).
- Mostrar información del equipo mas costoso (se podra elegir por una marca o todas las marcas).
- Salir.

#include <iostream>
// se incluye la clase Laptop para despues llamar a sus metodos
#include "Laptop.h"
// se incluye la clase Logica para despues llamar a sus metodos
#include "Logica.h"
using namespace std;
// método para llenar el vector
void llenar(Laptop *obj, Logica *log, int pos)
{
// declaramos una variable de tipo string llamada ref
string ref;
// inicializamos una variable de tipo bool llamada existe en false
bool existe = true;
// con el ciclo do-while validaremos si la referencia esta o no repetida
do
{
// pedimos la referencia
cout << "Ingrese la referencia" << endl;
cout << ">> ";
cin >> ref;
// inicializamos una variable de tipo bool llamada repetida en false
bool repetida = false;
// recorremos hasta el valor de la variable pasada como parametro pos
for (int i = 0; i < pos; i++)
{
// si la referencia de la posicion i del vector es igual al valor de la variable ref
if(log->getVector(i)->getReferencia().compare(ref) == 0)
{
// entonces la referencia estara repetida, le asignamos a la variable repetida el valor de true
repetida = true;
}
}
// si esta repetida
if (repetida)
{
// entonces le mostramos al usuario un mensaje
cout << "Error, esta referencia ya existe en el vector." << endl;
}
else
{
// sino entonces le asignamos a la variable existe el valor de false
existe = false;
}
}
while(existe); // estas instrucciones anteriores se ejecutaran cada vez que el usuario ingrese una referencia que ya exista
// encapsulamos la variable ref
obj->setReferencia(ref);
// pedimos la marca
string mar;
cout << "Ingrese la marca" << endl;
cout << ">> ";
cin >> mar;
// encapsulamos la variable mar
obj->setMarca(mar);
// pedimos el modelo
string mod;
cout << "Ingrese el modelo" << endl;
cout << ">> ";
cin >> mod;
// encapsulamos la variable mod
obj->setModelo(mod);
// pedimos el precio
double pre;
cout << "Ingrese el precio" << endl;
cout << ">> ";
cin >> pre;
// encapsulamos la variable pre
obj->setPrecio(pre);
// pedimos la capacidad de memoria ram
float mem;
cout << "Ingrese capacidad de memoria ram" << endl;
cout << ">> ";
cin >> mem;
// encapsulamos la variable mem
obj->setMemoriaRam(mem);
// pedimos la velocidad del procesador
float ghz;
cout << "Ingrese velocidad del procesador" << endl;
cout << ">> ";
cin >> ghz;
// encapsulamos la variable ghz
obj->setGhz(ghz);
}
// método para mostrar la información de una posicion especifica del vector
void mostrar(Logica *obj, int pos)
{
cout << "Referencia: " << obj->getVector(pos)->getReferencia() << endl;
cout << "Marca: " << obj->getVector(pos)->getMarca() << endl;
cout << "Modelo: " << obj->getVector(pos)->getModelo() << endl;
cout << "Precio: " << obj->getVector(pos)->getPrecio() << endl;
cout << "Memoria Ram: " << obj->getVector(pos)->getMemoriaRam() << "gb" << endl;
cout << "Velocidad de procesador: " << obj->getVector(pos)->getGhz() << "ghz" << endl << endl;
}
// método para listar toda la información del vector
void listar(Logica *obj)
{
for (int i = 0; i < obj->getTamano(); i++)
{
mostrar(obj, i);
}
}
// método para mostrar equipos por rango
void mostrarPorRango(Logica *obj, float p_inicial, float p_final)
{
// inicializamos una variable de tipo bool llamada datos en false
bool datos = false;
// recorremos el vector con el ciclo for
for (int i = 0; i < obj->getTamano(); i++)
{
// si el precio de la posicion i esta entre el rango del precio inicial y el precio final
if (obj->getVector(i)->getPrecio() >= p_inicial && obj->getVector(i)->getPrecio() <= p_final)
{
// entonces se muestra la información de ese equipo
cout << "Referencia: " << obj->getVector(i)->getReferencia() << endl;
cout << "Marca: " << obj->getVector(i)->getMarca() << endl;
cout << "Modelo: " << obj->getVector(i)->getModelo() << endl;
cout << "Precio: " << obj->getVector(i)->getPrecio() << endl;
cout << "Memoria Ram: " << obj->getVector(i)->getMemoriaRam() << "gb" << endl;
cout << "Velocidad de procesador: " << obj->getVector(i)->getGhz() << "ghz" << endl << endl;
// le asignamos a la variable datos el valor true
datos = true;
}
}
// si no hay datos
if (!datos)
{
// entonces se mostrara un mensaje
cout << "No hay equipos con esos precios" << endl;
}
}
// método para mostrar equipos por marca
void mostrarPorMarca(Logica *obj, string marca)
{
// inicializamos una variable de tipo bool llamada datos en false
bool datos = false;
// recorremos el vector con el ciclo for
for (int i = 0; i < obj->getTamano(); i++)
{
// si la marca de la posicion i es igual al valor de la variable marca pasada como parametro
if (obj->getVector(i)->getMarca().compare(marca) == 0)
{
// entonces se mostrara la información de ese producto
cout << "Refencia: " << obj->getVector(i)->getReferencia() << endl;
cout << "Marca: " << obj->getVector(i)->getMarca() << endl;
cout << "Modelo: " << obj->getVector(i)->getModelo() << endl;
cout << "Precio: " << obj->getVector(i)->getPrecio() << endl << endl;
// le asignamos a la variable datos el valor true
datos = true;
}
}
// si no hay datos
if (!datos)
{
// entonces se mostrara un mensaje
cout << "No hay equipos con esas marcas" << endl;
}
}
// método para mostrar el menú de opciones
int menu()
{
int opcion;
do
{
cout << "=========================MENU=========================" << endl;
cout << "1. Crear vector." << endl;
cout << "2. Buscar referencias." << endl;
cout << "3. Mostrar modelos ordenados." << endl;
cout << "4. Mostrar equipos por rango de precios." << endl;
cout << "5. Mostrar informacion del equipo mas economico." << endl;
cout << "6. Mostrar informacion del equipo mas costoso." << endl;
cout << "7. Mostrar datos" << endl;
cout << "8. Salir" << endl;
cout << ">> ";
cin >> opcion;
system("cls");
}
while (opcion < 1 || opcion > 8);
return opcion;
}
// método para mostrar el menú de opciones especifico al buscar un equipo
int menuEquipo()
{
int opc_m;
do
{
cout << "Buscar equipo mas economico por:" << endl;
cout << "1. Marca especifica" << endl;
cout << "2. Todas las marcas" << endl;
cout << ">> ";
cin >> opc_m;
}
while (opc_m < 1 || opc_m > 2);
return opc_m;
}
// método para mostrar un mensaje de error
void errorMensaje(int opc)
{
// dependiendo del valor de la variable opc pasada como parametro, se seleccionara un caso
switch (opc)
{
case 1:
cout << "======================================================" << endl;
cout << "|| No se ha creado el vector ||" << endl;
break;
default:
cout << "======================================================" << endl;
cout << "|| No se encuentra el dato ||" << endl;
break;
}
}
int main(void)
{
// se crea un objeto de la clase Logica (Instanciación)
Logica *obj = new Logica();
// se declara un objeto de tipo Laptop
Laptop *lap;
// se declaran las siguientes variables:
int opcion, tam, pos, opc_equipo;
string dato;
do
{
// le asignamos a la variable opcion el valor que retorne el metodo menu
opcion = menu();
// dependiendo del valor de la variable opcion se seleccionara un caso
switch(opcion)
{
case 1:
do{
cout << "Digite tamano del Vector" << endl;
cout << ">> ";
cin >> tam;
if (tam < 0)
{
cout << "Error, numero negativo." << endl;
}
}
while (tam < 0);
obj->setTamano(tam);
obj->crearVector();
for (int i = 0; i < obj->getTamano(); i++)
{
lap = new Laptop();
cout << "Llene la informacion del laptop " << i << endl;
llenar(lap, obj, i);
obj->setVector(i, lap);
}
break;
case 2:
if(obj->getTamano() != 0)
{
cout << "Digite referencia laptop que quiere buscar" << endl;
cout << ">> ";
cin >> dato;
pos = obj->buscar(dato);
if (pos != -1)
{
mostrar(obj, pos);
}
else
{
errorMensaje(2);
}
}
else
{
errorMensaje(1);
}
break;
case 3:
if(obj->getTamano()!= 0)
{
cout << "Digite la marca" << endl;
cout << ">> ";
cin >> dato;
pos = obj->buscarMarca(dato);
if (pos != -1)
{
obj->ordenarPorReferencia();
mostrarPorMarca(obj, dato);
}
else
{
errorMensaje(2);
}
}
else
{
errorMensaje(1);
}
break;
case 4:
if (obj->getTamano() != 0)
{
float p_inicial, p_final;
cout << "Digite el precio inicial" << endl;
cout << ">> ";
cin >> p_inicial;
cout << "Digite el precio final" << endl;
cout << ">> ";
cin >> p_final;
mostrarPorRango(obj, p_inicial, p_final);
}
else
{
errorMensaje(1);
}
break;
case 5:
if (obj->getTamano() != 0)
{
opc_equipo = menuEquipo();
if (opc_equipo == 1)
{
string m;
cout << "Digite la marca" << endl;
cout << ">> ";
cin >> m;
pos = obj->buscarEquipoEconomicoMarca(m);
if (pos != -1)
{
cout << "EQUIPO MAS ECONOMICO (" << m << ")" << endl;
mostrar(obj, pos);
}
else
{
errorMensaje(2);
}
}
else
{
pos = obj->buscarEquipoEconomicoTodos();
if (pos != -1)
{
cout << "EQUIPO MAS ECONOMICO (TODOS)" << endl;
mostrar(obj, pos);
}
else
{
errorMensaje(2);
}
}
}
else
{
errorMensaje(1);
}
break;
case 6:
if (obj->getTamano()!= 0)
{
opc_equipo = menuEquipo();
if (opc_equipo == 1)
{
string m;
cout << "Digite la marca" << endl;
cout << ">> ";
pos = obj->buscarEquipoCostosoMarca(m);
if (pos != -1)
{
cout << "EQUIPO MAS COSTOSO (" << m << ")" << endl;
mostrar(obj, pos);
}
else
{
errorMensaje(2);
}
}
else
{
pos = obj->buscarEquipoCostosoTodos();
if (pos != -1)
{
cout << "EQUIPO MAS COSTOSO (TODOS)" << endl;
mostrar(obj, pos);
}
else
{
errorMensaje(2);
}
}
}
else
{
errorMensaje(1);
}
break;
case 7:
if (obj->getTamano()!= 0)
{
listar(obj);
}
else
{
errorMensaje(1);
}
break;
default:
cout << "Adios!! <AiudaCode>" << endl;
break;
}
}
while (opcion != 8);
}
#ifndef LAPTOP_H
#define LAPTOP_H
#include <iostream>
using namespace std;
class Laptop
{
public:
Laptop();
virtual ~Laptop();
// se declaran los métodos publicos
void setReferencia(string val);
string getReferencia();
void setMarca(string val);
string getMarca();
void setModelo(string val);
string getModelo();
void setPrecio(double val);
double getPrecio();
void setMemoriaRam(float val);
float getMemoriaRam();
void setGhz(float val);
float getGhz();
protected:
private:
// se declaran los atributos privados
string referencia;
string marca;
string modelo;
double precio;
float m_ram;
float ghz;
};
#endif // LAPTOP_H
#include "Laptop.h"
Laptop::Laptop()
{
// se le asignan valores por defecto a los atributos en el constructor de la clase
referencia = "";
marca = "";
modelo = "";
precio = 0;
m_ram = 0;
ghz = 0;
}
Laptop::~Laptop()
{
//dtor
}
// métodos Setters y Getters de los atributos de la clase
void Laptop::setReferencia(string val)
{
referencia = val;
}
string Laptop::getReferencia()
{
return referencia;
}
void Laptop::setMarca(string val)
{
marca = val;
}
string Laptop::getMarca()
{
return marca;
}
void Laptop::setModelo(string val)
{
modelo = val;
}
string Laptop::getModelo()
{
return modelo;
}
void Laptop::setPrecio(double val)
{
precio = val;
}
double Laptop::getPrecio()
{
return precio;
}
void Laptop::setMemoriaRam(float val)
{
m_ram = val;
}
float Laptop::getMemoriaRam()
{
return m_ram;
}
void Laptop::setGhz(float val)
{
ghz = val;
}
float Laptop::getGhz()
{
return ghz;
}
#ifndef LOGICA_H
#define LOGICA_H
#include "Laptop.h"
#include <iostream>
using namespace std;
class Logica
{
public:
Logica();
virtual ~Logica();
// se declaran los métodos publicos
void crearVector();
void setVector(int pos, Laptop *val);
Laptop *getVector(int pos);
void setTamano(int val);
int getTamano();
int buscar(string nom);
int buscarMarca(string nom);
int buscarEquipoEconomicoMarca(string nom);
int buscarEquipoEconomicoTodos();
int buscarEquipoCostosoMarca(string nom);
int buscarEquipoCostosoTodos();
void ordenarPorReferencia();
void cambiar(int p1, int p2);
protected:
private:
// se declaran los atributos privados
Laptop *vector;
int tamano;
};
#endif // LOGICA_H
#include "Logica.h"
Logica::Logica()
{
// se le asignan valores por defecto a los atributos en el constructor de la clase
tamano = 0;
vector = NULL;
}
Logica::~Logica()
{
//dtor
}
// método para crear el vector
void Logica::crearVector()
{
// le asigno al vector de tipo Laptop el tamaño del valor de la variable tamano
vector = new Laptop[tamano];
}
// métodos Setters y Getters de la clase
void Logica::setVector(int pos, Laptop *val)
{
vector[pos] = *val;
}
// para poder entender estos dos métodos es necesario leer acerca de como accedemos al valor de un puntero en c++
// en la sección de temas en programacion I podras encontrar la información necesaria :)
Laptop *Logica::getVector(int pos)
{
return &vector[pos];
}
void Logica::setTamano(int val)
{
tamano = val;
}
int Logica::getTamano()
{
return tamano;
}
// método para buscar una referencia
int Logica::buscar(string nom)
{
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamano(); i++)
{
// si la referencia de la posicion i del vector es igual al valor de la vatiable nom pasada como parametro
if (getVector(i)->getReferencia().compare(nom) == 0)
{
// entonces, se retorna la posicion i
return i;
}
}
// si no se encontro nada, se retorna -1
return -1;
}
// método para buscar una marca
int Logica::buscarMarca(string mar)
{
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamano(); i++)
{
// si la marca de la posicion i del vector es igual al valor de la vatiable mar pasada como parametro
if (getVector(i)->getMarca().compare(mar) == 0)
{
// entonces, se retorna la posicion i
return i;
}
}
// si no se encontro nada, se retorna -1
return -1;
}
// método para buscar el equipo mas economico de una marca
int Logica::buscarEquipoEconomicoMarca(string mar)
{
// inicializo una variable de tipo double llamada men, en el precio del equipo mas costoso por la marca especifica mar
double men = getVector(buscarEquipoCostosoMarca(mar))->getPrecio();
// declaro una variable de tipo double llamada def
double def;
// inicializo una variable de tipo int llamada pos_menor, en -1
int pos_menor = -1;
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamano(); i++)
{
// le asignamos a la variable def, el precio de la posicion i del vector
def = getVector(i)->getPrecio();
// si la marca de la posicion i del vector es igual al valor de la variable mar pasada
// como parametro y si def es menor a la variable men
if (getVector(i)->getMarca().compare(mar) == 0 && def < men)
{
// entonces le asigno a la variable men el valor de la variable def
men = def;
// y a la variable pos_menor le asigno el valor de i
pos_menor = i;
}
}
// retorno el valor de la variable pos_menor
return pos_menor;
}
// método para buscar el equipo mas economico de todas las marcas
int Logica::buscarEquipoEconomicoTodos()
{
// inicializo una variable de tipo double llamada men, en el precio del equipo mas costoso de todas las marcas
double men = getVector(buscarEquipoCostosoTodos())->getPrecio();
// declaro una variable de tipo double llamada def
double def;
// inicializo una variable de tipo int llamada pos_menor, en -1
int pos_menor = -1;
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamano(); i++)
{
// le asignamos a la variable def, el precio de la posicion i del vector
def = getVector(i)->getPrecio();
// si el valor de la variable def es menor al valor de la variable men
if(def < men)
{
// entonces le asigno a la variable men el valor de la variable def
men = def;
// y a la variable pos_menor le asigno el valor de i
pos_menor = i;
}
}
// retorno el valor de la variable pos_menor
return pos_menor;
}
// método para buscar el equipo mas costoso de una marca
int Logica::buscarEquipoCostosoMarca(string nom)
{
// inicializamos una variable de tipo double llamada max, en 0
double max = 0;
// método para buscar el equipo mas economico de una marca
double def;
// inicializo una variable de tipo int llamada pos_mayor, en -1
int pos_mayor = -1;
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamano(); i++)
{
// le asignamos a la variable def, el precio de la posicion i del vector
def = getVector(i)->getPrecio();
// si la marca de la posicion i del vector es igual al valor de la variable nom pasada como parametro
// y si el valor de la varianle def es mayor al valor de la variable max
if (getVector(i)->getMarca().compare(nom) == 0 && def > max)
{
// entonces le asigno a la variable max el valor de la variable def
max = def;
// y a la variable pos_mayor le asigno el valor de i
pos_mayor = i;
}
}
// retorno el valor de la variable pos_mayor
return pos_mayor;
}
// método para buscar el equipo mas costoso de todas las marca
int Logica::buscarEquipoCostosoTodos()
{
// inicializamos una variable de tipo double llamada max, en 0
double max = 0;
// método para buscar el equipo mas economico de una marca
double def;
// inicializo una variable de tipo int llamada pos_mayor, en -1
int pos_mayor = -1;
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamano(); i++)
{
// le asignamos a la variable def, el precio de la posicion i del vector
def = getVector(i)->getPrecio();
// si el valor de la variable def es mayor al valor de la variable max
if(def > max)
{
// entonces le asigno a la variable max el valor de la variable def
max = def;
// y a la variable pos_mayor le asigno el valor de i
pos_mayor = i;
}
}
// retorno el valor de la variable pos_mayor
return pos_mayor;
}
// método para cambiar la posicion de un objeto del vector con otra
void Logica::cambiar(int p1, int p2)
{
// declaro un objeto de tipo Laptop llamado temp
Laptop *temp;
// le asigno a la variable temp el objeto que esta en la posicion p1 del vector
temp = getVector(p1);
// a la posicion p1 del vector se le asignara el objeto que esta en la posicion p2
setVector(p1, getVector(p2));
// a la posicion p2 del vector se le asignara el objeto temp
setVector(p2, temp);
}
// método para ordenar por referencia
void Logica::ordenarPorReferencia()
{
for (int i = 0; i < getTamano(); i++)
{
for (int j = i+1; j < getTamano(); j++)
{
// si la referencia de la posicion es menor a la referencia de la posicion j del vector
if (getVector(i)->getReferencia().compare(getVector(j)->getReferencia()) < 0)
{
// cambiamos la posicion i con j
cambiar(i, j);
}
}
}
}
// 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 el vector
public static void llenar(Laptop obj,Logica log,int pos)
{
// declaramos una variable de tipo string llamada ref
String ref;
// inicializamos una variable de tipo bool llamada existe en true
boolean existe = true;
// con el ciclo do-while validaremos si la referencia esta o no repetida
do
{
// pedimos la referencia
ref = JOptionPane.showInputDialog("Ingrese la referencia:");
// inicializamos una variable de tipo bool llamada repetida en false
boolean repetida = false;
// recorremos hasta el valor de la variable pasada como parametro pos
for (int i = 0; i < pos; i++)
{
// si la referencia de la posicion i del vector es igual al valor de la variable ref
if(log.getVector(i).getReferencia().equals(ref))
{
// entonces la referencia estara repetida, le asignamos a la variable repetida el valor de true
repetida = true;
}
}
// si esta repetida
if (repetida)
{
// entonces le mostramos al usuario un mensaje
JOptionPane.showMessageDialog(null, "Error, esta referencia ya existe en el vector.");
}
else
{
// sino entonces le asignamos a la variable existe el valor de false
existe = false;
}
}
while(existe); // estas instrucciones anteriores se ejecutaran cada vez que el usuario ingrese una referencia que ya exista
// encapsulamos la variable ref
obj.setReferencia(ref);
// pedimos la marca
String mar = JOptionPane.showInputDialog("Ingrese la marca:");
// encapsulamos la variable mar
obj.setMarca(mar);
// pedimos el modelo
String mod = JOptionPane.showInputDialog("Ingrese el modelo:");
// encapsulamos la variable mod
obj.setModelo(mod);
// pedimos el precio
float pre = Float.parseFloat(JOptionPane.showInputDialog("Ingrese el precio:"));
// encapsulamos la variable pre
obj.setPrecio(pre);
// pedimos la capacidad de memoria ram
float mem = Float.parseFloat(JOptionPane.showInputDialog("Ingrese capacidad de memoria ram:"));
// encapsulamos la variable mem
obj.setMemoriaRam(mem);
// pedimos la velocidad del procesador
float ghz = Float.parseFloat(JOptionPane.showInputDialog("Ingrese velocidad del procesador:"));
// encapsulamos la variable ghz
obj.setGhz(ghz);
}
// método para mostrar la información de una posicion especifica del vector
public static void mostrar(Logica obj, int pos)
{
String datos = "";
datos += "Referencia: " + obj.getVector(pos).getReferencia() + "\n" +
"Marca: " + obj.getVector(pos).getMarca() + "\n" +
"Modelo: " + obj.getVector(pos).getModelo() + "\n" +
"Precio: " + obj.getVector(pos).getPrecio() + "\n" +
"Memoria Ram: " + obj.getVector(pos).getMemoriaRam()+ "gb\n" +
"Velocidad de procesador: " + obj.getVector(pos).getGhz()+ "ghz\n\n";
JOptionPane.showMessageDialog(null, datos);
}
// método para listar toda la información del vector
public static void listar(Logica obj)
{
for (int i = 0; i < obj.getTamaño(); i++)
{
mostrar(obj, i);
}
}
// método para mostrar equipos por rango
public static void mostrarPorRango(Logica obj, float p_inicial, float p_final)
{
// inicializamos una variable de tipo string llamada datos en ""
String datos = "";
// recorremos el vector con el ciclo for
for (int i = 0; i < obj.getTamaño(); i++)
{
// si el precio de la posicion i esta entre el rango del precio inicial y el precio final
if (obj.getVector(i).getPrecio() >= p_inicial && obj.getVector(i).getPrecio() <= p_final)
{
// entonces acumulo en la variable datos la informacion de la posicion i
datos += "Referencia: " + obj.getVector(i).getReferencia() + "\n" +
"Marca: " + obj.getVector(i).getMarca() + "\n" +
"Modelo: " + obj.getVector(i).getModelo() + "\n" +
"Precio: " + obj.getVector(i).getPrecio() + "\n" +
"Memoria Ram: " + obj.getVector(i).getMemoriaRam()+ "gb\n" +
"Velocidad de procesador: " + obj.getVector(i).getGhz()+ "ghz\n\n";
}
}
// si el valor de la variable datos es igual a ""
if (datos.equals(""))
{
// entonces se mostrara un mensaje
JOptionPane.showMessageDialog(null, "No hay equipos con esos precios");
}
else
{
// muestro el valor de la variable datos
JOptionPane.showMessageDialog(null, datos);
}
}
// método para mostrar equipos por marca
public static void mostrarPorMarca(Logica obj, String marca)
{
// inicializamos una variable de tipo string llamada datos en ""
String datos = "";
// recorremos el vector con el ciclo for
for (int i = 0; i < obj.getTamaño(); i++)
{
// si la marca de la posicion i es igual al valor de la variable marca pasada como parametro
if (obj.getVector(i).getMarca().equals(marca))
{
// entonces acumulo en la variable datos la informacion de la posicion i
datos += "Refencia: " + obj.getVector(i).getReferencia()+ "\n" +
"Marca: " + obj.getVector(i).getMarca() + "\n" +
"Modelo: " + obj.getVector(i).getModelo() + "\n" +
"Precio: " + obj.getVector(i).getPrecio() + "\n\n";
}
}
// si el valor de la variable datos es igual a ""
if (datos.equals(""))
{
// entonces se mostrara un mensaje
JOptionPane.showMessageDialog(null, "No hay equipos con esa marca");
}
else
{
// muestro el valor de la variable datos
JOptionPane.showMessageDialog(null, datos);
}
}
// método para mostrar el menú de opciones
public static int menu()
{
int opcion;
do
{
opcion = Integer.parseInt(JOptionPane.showInputDialog(
"=========== SELECCIONE UNA OPCIÓN DEL MENÚ =========== \n" +
"1. Crear vector.\n" +
"2. Buscar referencias.\n" +
"3. Mostrar modelos ordenados.\n" +
"4. Mostrar equipos por rango de precios.\n" +
"5. Mostrar información del equipo mas economico.\n" +
"6. Mostrar información del equipo mas costoso.\n" +
"7. Mostrar datos\n" +
"8. Salir\n\n" +
" Seleccione una opción del 1 al 8:"));
}
while(opcion < 1 || opcion > 8);
return opcion;
}
// método para mostrar el menú de opciones especifico al buscar un equipo
public static int menuEquipo()
{
int opc_m;
do
{
opc_m = Integer.parseInt(JOptionPane.showInputDialog(
"Buscar equipo mas economico por:\n" +
"1. Marca especifica\n" +
"2. Todas las marcas"));
}
while (opc_m < 1 || opc_m > 2);
return opc_m;
}
// método para mostrar un mensaje de error
public static void errorMensaje(int opc)
{
// dependiendo del valor de la variable opc pasada como parametro, se seleccionara un caso
switch (opc)
{
case 1:
JOptionPane.showMessageDialog(null, "No se ha creado el vector");
break;
default:
JOptionPane.showMessageDialog(null, "No se encuentra el dato");
break;
}
}
public static void main(String[] args)
{
// se crea un objeto de la clase Logica (Instanciación)
Logica obj = new Logica();
// se declara un objeto de tipo Laptop
Laptop lap;
// se declaran las siguientes variables:
int opcion, tam, pos, opc_equipo;
String dato;
do
{
// le asignamos a la variable opcion el valor que retorne el metodo menu
opcion = menu();
// dependiendo del valor de la variable opcion se seleccionara un caso
switch(opcion)
{
case 1:
do
{
tam = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite tamaño del Vector:"));
if (tam < 0)
{
JOptionPane.showMessageDialog(null, "Error, numero negativo.");
}
}
while (tam < 0);
obj.setTamaño(tam);
obj.crearVector();
for (int i = 0; i < obj.getTamaño(); i++)
{
lap = new Laptop();
JOptionPane.showMessageDialog(null, "Llene la información del laptop " + i);
llenar(lap,obj,i);
obj.setVector(i, lap);
}
break;
case 2:
if (obj.getTamaño() != 0)
{
dato = JOptionPane.showInputDialog("Digite referencia laptop que quiere buscar:");
pos = obj.buscar(dato);
if (pos != -1)
{
mostrar(obj, pos);
}
else
{
errorMensaje(2);
}
}
else
{
errorMensaje(1);
}
break;
case 3:
if (obj.getTamaño() != 0)
{
dato = JOptionPane.showInputDialog("Digite la marca:");
pos = obj.buscarMarca(dato);
if (pos != -1)
{
obj.ordenarPorReferencia();
mostrarPorMarca(obj, dato);
}
else
{
errorMensaje(2);
}
}
else
{
errorMensaje(1);
}
break;
case 4:
if (obj.getTamaño() != 0)
{
float p_inicial = Float.parseFloat(JOptionPane.showInputDialog("Digite el precio inicial:"));
float p_final = Float.parseFloat(JOptionPane.showInputDialog("Digite el precio final:"));
mostrarPorRango(obj, p_inicial, p_final);
}
else
{
errorMensaje(1);
}
break;
case 5:
if (obj.getTamaño() != 0)
{
opc_equipo = menuEquipo();
if (opc_equipo == 1)
{
String m = JOptionPane.showInputDialog("Digite la marca:");
pos = obj.buscarEquipoEconomicoMarca(m);
if (pos != -1)
{
JOptionPane.showMessageDialog(null,"EQUIPO MAS ECONOMICO");
mostrar(obj, pos);
}
else
{
errorMensaje(2);
}
}
else
{
pos = obj.buscarEquipoEconomicoTodos();
if (pos != -1)
{
JOptionPane.showMessageDialog(null,"EQUIPO MAS ECONOMICO");
mostrar(obj, pos);
}
else
{
errorMensaje(2);
}
}
}
else
{
errorMensaje(1);
}
break;
case 6:
if (obj.getTamaño() != 0)
{
opc_equipo = menuEquipo();
if (opc_equipo == 1)
{
String m = JOptionPane.showInputDialog("Digite la marca:");
pos = obj.buscarEquipoCostosoMarca(m);
if (pos != -1)
{
JOptionPane.showMessageDialog(null,"EQUIPO MAS COSTOSO");
mostrar(obj, pos);
}
else
{
errorMensaje(2);
}
}
else
{
pos = obj.buscarEquipoCostosoTodos();
if (pos != -1)
{
JOptionPane.showMessageDialog(null,"EQUIPO MAS COSTOSO");
mostrar(obj, pos);
}
else
{
errorMensaje(2);
}
}
}
else
{
errorMensaje(1);
}
break;
case 7:
if (obj.getTamaño() != 0)
{
listar(obj);
}
else
{
errorMensaje(1);
}
break;
default:
JOptionPane.showMessageDialog(null, "Adios!! ");
break;
}
}
while (opcion != 8);
}
}
public class Laptop
{
// se declaran los atributos privados
private String referencia;
private String marca;
private String modelo;
private float precio;
private float m_ram;
private float ghz;
public Laptop()
{
// se le asignan valores por defecto a los atributos en el constructor de la clase
referencia = "";
marca = "";
modelo = "";
precio = 0;
m_ram = 0;
ghz = 0;
}
// métodos Setters y Getters de los atributos de la clase
public void setReferencia(String val)
{
referencia = val;
}
public String getReferencia()
{
return referencia;
}
public void setMarca(String val)
{
marca = val;
}
public String getMarca()
{
return marca;
}
public void setModelo(String val)
{
modelo = val;
}
public String getModelo()
{
return modelo;
}
public void setPrecio(float val)
{
precio = val;
}
public float getPrecio()
{
return precio;
}
public void setMemoriaRam(float val)
{
m_ram = val;
}
public float getMemoriaRam()
{
return m_ram;
}
public void setGhz(float val)
{
ghz = val;
}
public float getGhz()
{
return ghz;
}
}
public class Logica
{
private Laptop [] vector;
private int tamaño;
public Logica()
{
// se le asignan valores por defecto a los atributos en el constructor de la clase
vector = null;
tamaño = 0;
}
// método para crear el vector
public void crearVector()
{
// le asigno al vector de tipo Laptop el tamaño del valor de la variable tamano
vector = new Laptop[tamaño];
}
// métodos Setters y Getters de los atributos de la clase
public void setVector(int pos, Laptop val)
{
vector[pos] = val;
}
public Laptop getVector(int pos)
{
return vector[pos];
}
public void setTamaño(int val)
{
tamaño = val;
}
public int getTamaño()
{
return tamaño;
}
// método para buscar una referencia
public int buscar(String nom)
{
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamaño(); i++)
{
// si la referencia de la posicion i del vector es igual al valor de la vatiable nom pasada como parametro
if (getVector(i).getReferencia().equals(nom))
{
// entonces, se retorna la posicion i
return i;
}
}
// si no se encontro nada, se retorna -1
return -1;
}
// método para buscar una marca
public int buscarMarca(String nom)
{
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamaño(); i++)
{
// si la marca de la posicion i del vector es igual al valor de la vatiable mar pasada como parametro
if (getVector(i).getMarca().equals(nom))
{
// entonces, se retorna la posicion i
return i;
}
}
// si no se encontro nada, se retorna -1
return -1;
}
// método para buscar el equipo mas economico de una marca
public int buscarEquipoEconomicoMarca(String mar)
{
// inicializo una variable de tipo double llamada men, en el precio del equipo mas costoso por la marca especifica mar
float men = getVector(buscarEquipoCostosoMarca(mar)).getPrecio();
// declaro una variable de tipo double llamada def
float def;
// inicializo una variable de tipo int llamada pos_menor, en -1
int pos_menor = -1;
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamaño(); i++)
{
// le asignamos a la variable def, el precio de la posicion i del vector
def = getVector(i).getPrecio();
// si la marca de la posicion i del vector es igual al valor de la variable mar pasada
// como parametro y si def es menor a la variable men
if (getVector(i).getMarca().equals(mar) && def < men)
{
// entonces le asigno a la variable men el valor de la variable def
men = def;
// y a la variable pos_menor le asigno el valor de i
pos_menor = i;
}
}
// retorno el valor de la variable pos_menor
return pos_menor;
}
// método para buscar el equipo mas economico de todas las marcas
public int buscarEquipoEconomicoTodos()
{
// inicializo una variable de tipo double llamada men, en el precio del equipo mas costoso de todas las marcas
float men = getVector(buscarEquipoCostosoTodos()).getPrecio();
// declaro una variable de tipo double llamada def
float def;
// inicializo una variable de tipo int llamada pos_menor, en -1
int pos_menor = -1;
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamaño(); i++)
{
// le asignamos a la variable def, el precio de la posicion i del vector
def = getVector(i).getPrecio();
// si el valor de la variable def es menor al valor de la variable men
if(def < men)
{
// entonces le asigno a la variable men el valor de la variable def
men = def;
// y a la variable pos_menor le asigno el valor de i
pos_menor = i;
}
}
// retorno el valor de la variable pos_menor
return pos_menor;
}
// método para buscar el equipo mas costoso de una marca
public int buscarEquipoCostosoMarca(String mar)
{
// inicializamos una variable de tipo double llamada max, en 0
float max = 0;
// método para buscar el equipo mas economico de una marca
float def;
// inicializo una variable de tipo int llamada pos_mayor, en -1
int pos_mayor = -1;
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamaño(); i++)
{
// le asignamos a la variable def, el precio de la posicion i del vector
def = getVector(i).getPrecio();
// si la marca de la posicion i del vector es igual al valor de la variable nom pasada como parametro
// y si el valor de la varianle def es mayor al valor de la variable max
if (getVector(i).getMarca().equals(mar) && def > max)
{
// entonces le asigno a la variable max el valor de la variable def
max = def;
// y a la variable pos_mayor le asigno el valor de i
pos_mayor = i;
}
}
// retorno el valor de la variable pos_mayor
return pos_mayor;
}
// método para buscar el equipo mas costoso de todas las marca
public int buscarEquipoCostosoTodos()
{
// inicializamos una variable de tipo double llamada max, en 0
float max = 0;
// método para buscar el equipo mas economico de una marca
float def;
// inicializo una variable de tipo int llamada pos_mayor, en -1
int pos_mayor = -1;
// recorremos el vector con el ciclo for
for (int i = 0; i < getTamaño(); i++)
{
// le asignamos a la variable def, el precio de la posicion i del vector
def = getVector(i).getPrecio();
// si el valor de la variable def es mayor al valor de la variable max
if(def > max)
{
// entonces le asigno a la variable max el valor de la variable def
max = def;
// y a la variable pos_mayor le asigno el valor de i
pos_mayor = i;
}
}
// retorno el valor de la variable pos_mayor
return pos_mayor;
}
// método para ordenar por referencia
public void ordenarPorReferencia()
{
for (int i = 0; i < getTamaño(); i++)
{
for (int j = i+1; j < getTamaño(); j++)
{
// si la referencia de la posicion es menor a la referencia de la posicion j del vector
if (getVector(i).getReferencia().compareTo(getVector(j).getReferencia()) < 0)
{
// cambiamos la posicion i con j
cambiar(i, j);
}
}
}
}
// método para cambiar la posicion de un objeto del vector con otra
public void cambiar(int p1, int p2)
{
// declaro un objeto de tipo Laptop llamado temp
Laptop temp;
// le asigno a la variable temp el objeto que esta en la posicion p1 del vector
temp = getVector(p1);
// a la posicion p1 del vector se le asignara el objeto que esta en la posicion p2
setVector(p1, getVector(p2));
// a la posicion p2 del vector se le asignara el objeto temp
setVector(p2, temp);
}
}