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;
}
}
}
}