import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//import java.util.ArrayList;
import java.util.HashMap;
//import java.util.List;
import java.util.Map;
public class ProgramaPrincipal {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// List<Character> numeros = new ArrayList();
char [] numeros = {'1','2','3','4','5','6','7','8','9','0'};
Map<String, Televisor> televisores = new HashMap();
Map<String, Radio> radios = new HashMap();
public ProgramaPrincipal() {// numeros.add('1');
// numeros.add('2');
// numeros.add('3');
// numeros.add('4');
// numeros.add('5');
// numeros.add('6');
// numeros.add('7');
// numeros.add('8');
// numeros.add('9');
// numeros.add('0');
}
/**
* Metodo utilizado para leer un String
*
* @param message
* @return
*/
private static String leerString(String message) { String r = null;
try { System.out.print(message);
r = br.readLine();
} catch (IOException ex) { System.out.println("Hubo un error de lectura"); }
return r;
}
/**
* Metodo utilizado para leer un entero
*
* @param message
* @return
*/
private static Integer leerInt(String message) { Integer i = null;
try { i = Integer.parseInt(leerString(message));
} catch (NumberFormatException ex) { System.out.println("Hubo un error de lectura. Vuelva a intentarlo"); }
return i == null ? leerInt(message) : i;
}
/**
* Metodo utilizado para leer un flotante
*
* @param message
* @return
*/
private static Float leerFloat(String message) { Float i = null;
try { i = Float.parseFloat(leerString(message));
} catch (NumberFormatException ex) { System.out.println("Hubo un error de lectura. Vuelva a intentarlo"); }
return i == null ? leerFloat(message) : i;
}
/**
* Metodo utilizado para leer un entero con un rango dado
*
* @param message
* @param min
* @param max
* @return
*/
private static Integer leerIntConRango(String message, int min, int max) { Integer i;
i = leerInt(message);
if (i < min || i > max) { System.out.println("Número fuera del rango permitido que es desde " + min + " a " + max + ". Vuelva a intentarlo"); i = leerIntConRango(message, min, max);
}
return i;
}
private Artefacto ingresarArtefacto() { Artefacto a = new Artefacto();
String aux;
//Marca
aux = leerString("Introduzca la marca: "); if (aux.contains(" ")) { System.out.println("No se permite espacios en blanco en la marca"); } else if (hasNumeros(aux)) { System.out.println("No se permiten números en la marca"); } else { a.setMarca(aux.toUpperCase());
}
if (a.getMarca().isEmpty()) { return null;
}
//Modelo
aux = leerString("Introduzca el modelo: "); if (aux.length() > 5) { System.out.println("El modelo no puede tener mas de 5 caracteres"); } else if (!hasMenos3Numeros(aux)) { System.out.println("El modelo no puede tener mas de 3 números"); } else { a.setModelo(aux);
}
if (a.getModelo().isEmpty()) { return null;
}
//Año
Integer año = leerInt("introduzca el año: "); if (año.toString().length() != 4) { System.out.println("El año debe tener 4 dígitos"); } else if (año > 2015) { System.out.println("El año debe ser menor a 2015"); } else if (año < 0) { System.out.println("El año debe ser positivo"); } else { a.setAño(año.toString());
}
if (a.getAño().isEmpty()) { return null;
}
return a;
}
/**
* Evalúa si el String contiene numeros
*
* @param s
* @return
*/
private boolean hasNumeros(String s) { boolean b = false;
for (char c : s.toCharArray()) {// if (numeros.contains(c)) {
// b = true;
// break;
// }
for(char n : numeros){ if(c == n){ b = true;
break;
}
}
}
return b;
}
private boolean hasMenos3Numeros(String s) { int contador = 0;
for (char c : s.toCharArray()) {// if (numeros.contains(c)) {
// contador++;
// }
for(char n : numeros){ if(c == n){ contador++;
}
}
}
return contador <= 3;
}
/**
* Metodo utilizado para ingresar televisore
*/
public void ingresarTelevisor() { Artefacto artefacto = ingresarArtefacto();
if (artefacto == null) { return;
}
Televisor t = new Televisor();
t.setMarca(artefacto.getMarca());
t.setModelo(artefacto.getModelo());
t.setAño(artefacto.getAño());
System.out.println();
//Tamaño
Integer tamaño = leerInt("Introduzca el tamaño: "); if (tamaño.toString().length() > 3) { System.out.println("El tamaño no puede mayor de 999"); } else if (tamaño < 1) { System.out.println("El tamaño debe ser un número positivo"); } else { t.setTamaño(tamaño);
}
if (t.getTamaño().toString().isEmpty()) { return;
}
String empCable = leerString("Introduzca emp_cable: "); if (hasNumeros(empCable)) { System.out.println("No se aceptan números"); } else if (empCable.contains(" ")) { System.out.println("No se aceptan espacios en blanco"); } else { t.setEmpCable(empCable.toLowerCase());
}
if (t.getEmpCable().isEmpty()) { return;
}
televisores.put(t.getModelo(), t);
}
/**
* Metodo utilizado para ingresar radios
*/
public void ingresarRadio() { Artefacto artefacto = ingresarArtefacto();
if (artefacto == null) { return;
}
Radio r = new Radio();
r.setMarca(artefacto.getMarca());
r.setModelo(artefacto.getModelo());
r.setAño(artefacto.getAño());
System.out.println();
//Numero de parlantes
Integer numParlantes = leerInt("Introduzca el numero de parlantes: "); if (numParlantes < 1) { System.out.println("El numero de parlantes debe ser un número positivo"); } else { r.setNumParlantes(numParlantes);
}
if (r.getNumParlantes().toString().isEmpty()) { return;
}
//freqRadio1
Float freq = leerFloat("Introduzca la frecuencia de radio 1: "); if (freq < 0 || freq > 108.3) { System.out.println("La frecuencia debe ser un número flotante positivo y menor e igual que 108.3"); } else { r.setFreqRadio1(freq);
}
if (r.getFreqRadio1() == 0) { return;
}
freq = leerFloat("Introduzca la frecuencia de radio 2: "); if (freq < 0 || freq > 108.3) { System.out.println("La frecuencia debe ser un número flotante positivo y menor e igual que 108.3"); } else if (freq == r.getFreqRadio1()) { System.out.println("La frecuencia 2 no debe ser igual a la frecuencia 1"); } else { r.setFreqRadio1(freq);
}
if (r.getFreqRadio2() == 0) { return;
}
radios.put(r.getModelo(), r);
}
public void listarArtefactos(){ listarTelevisores();
listarRadios();
}
public void listarTelevisores(){ System.out.println("A continuación los televisores:"); televisores.forEach((k,v)->{ System.out.println("Marca: " + v.getMarca()); System.out.println("Modelo: " + k); System.out.println("Año: " + v.getAño()); System.out.println("Tamaño: " + v.getTamaño()); System.out.println("Emp_cable: " + v.getEmpCable()); System.out.println("-----------------------------------------------"); });
}
public void listarRadios(){ System.out.println("A continuación las Radios:"); radios.forEach((k,v)->{ System.out.println("Marca: " + v.getMarca()); System.out.println("Modelo: " + k); System.out.println("Año: " + v.getAño()); System.out.println("Numero parlantes: " + v.getNumParlantes()); System.out.println("Frecuencia 1: " + v.getFreqRadio1()); System.out.println("Frecuencia 2: " + v.getFreqRadio2()); System.out.println("-----------------------------------------------"); });
}
public static final int OPCION_SALIR = 0;
public static final int OPCION_INGRESAR_TELEVISOR = 1;
public static final int OPCION_INGRESAR_RADIO = 2;
public static final int OPCION_LISTAR_ARTEFACTOS = 3;
public static final int OPCION_LISTAR_TELEVISORES = 4;
public static final int OPCION_LISTAR_RADIO = 5;
public static void main(String[] args) { ProgramaPrincipal p = new ProgramaPrincipal();
int opcion = -1;
while (opcion != OPCION_SALIR) { opcion = leerIntConRango("Introduzca " + OPCION_SALIR + " para salir" + "\nIntroduzca " + OPCION_INGRESAR_TELEVISOR + " para ingresar un televisor "
+ "\nIntroduzca " + OPCION_INGRESAR_RADIO + " para ingresar un radio "
+ "\nIntroduzca " + OPCION_LISTAR_ARTEFACTOS + " para listar todos los artefactos"
+ "\nIntroduzca " + OPCION_LISTAR_TELEVISORES + " para listar los televisores"
+ "\nIntroduzca " + OPCION_LISTAR_RADIO + " para listar los radio: ",
OPCION_SALIR, OPCION_LISTAR_RADIO);
switch (opcion) { case OPCION_SALIR:
System.out.println("Adios..."); break;
case OPCION_INGRESAR_TELEVISOR:
p.ingresarTelevisor();
break;
case OPCION_INGRESAR_RADIO:
p.ingresarRadio();
break;
case OPCION_LISTAR_ARTEFACTOS:
p.listarArtefactos();
break;
case OPCION_LISTAR_TELEVISORES:
p.listarTelevisores();
break;
case OPCION_LISTAR_RADIO:
p.listarRadios();
break;
}
}
}
}