Programming

T03-001-03 Modificación de requisitos de una aplicación.

Enunciado

El siguiente cambio que nos proponen afecta a los métodos que envían el mensaje de validado o no al usuario.

En el primero de los ejercicios hemos permitido que el DNI-NIE completo se mostrara en la función letraControl(). En este ejercicio debemos eliminar de ese método el System.out.println() correspondiente, ya que no es el lugar adecuado para ello.

En su lugar, se debe realizar la escritura del DNI-NIE junto con el mensaje de si es válido o no, quedando la salida como puedes observar en el OUTPUT.

Para poder visualizar el DNI-NIE junto con el resto del mensaje, debemos sustituir el parámetro tipo, que anteriormente se enviaba a los métodos escribeMensajeValido() y escribeMensajeNoValido() por el parámetro dni-nie.

Solución


											
package validadni; import java.util.Scanner; public class ValidaDNI { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { String dni_nie, tipo, dni; long numero; char letra; while (!(dni_nie = leeDniNie()).equals("0")) { tipo = getTipo(dni_nie); if (tipo.equals("NIE")) { dni = convierteNIE(dni_nie); } else { dni = dni_nie; } dni = dni + letraControl(dni); if (esValido(dni)) { escribeMensajeValido(dni_nie); } else { escribeMensajeNoValido(dni_nie); } } } static String leeDniNie() { return (sc.nextLine()).toUpperCase(); } static boolean esNIE(String dni_nie) { char primera; boolean esNieBoolean = false; primera = dni_nie.charAt(0); if (primera == 'X' || primera == 'Y' || primera == 'Z') { esNieBoolean = true; } return esNieBoolean; } static String convierteNIE(String dni_nie) { String numeroLetra; char letraNIE = dni_nie.charAt(0); switch (letraNIE) { case 'X': numeroLetra = "0"; break; case 'Y': numeroLetra = "1"; break; case 'Z': numeroLetra = "2"; break; default: numeroLetra = "9999"; } return numeroLetra + dni_nie.substring(1); } static long getNumero(String dni) { return Integer.parseInt(dni.substring(0, dni.length() - 1)); } static char getLetra(String dni) { return dni.charAt(dni.length() - 1); } static char letraControl(String dni) { char letraControl = '*'; long numero = Integer.parseInt(dni); if (numero <= 99999999) { int resto = (int) numero % 23; String letras = "TRWAGMYFPDXBNJZSQVHLCKE"; letraControl = letras.charAt(resto); } return letraControl; } static boolean esValido(String dni) { char letraControl; long numero = getNumero(dni); char letra = getLetra(dni); boolean valido = false; if (numero <= 99999999) { int resto = (int) numero % 23; String letras = "TRWAGMYFPDXBNJZSQVHLCKE"; letraControl = letras.charAt(resto); valido = (letra == letraControl); } return valido; } static void escribeMensajeValido(String dni_nie) { System.out.println(getTipo(dni_nie) + " " + dni_nie + " Validado"); } static void escribeMensajeNoValido(String dni_nie) { System.out.println(getTipo(dni_nie) + " " + dni_nie + " No validado"); } static String getTipo(String dni_nie) { String tipo; if (esNIE(dni_nie)) { tipo = "NIE"; } else { tipo = "DNI"; } return tipo; } }

Input

Y2345678 12345678 X2345678 23456789 0
Y2345678 X2345678 23456789 12345678 0

Output

NIE Y2345678 Validado DNI 12345678 Validado NIE X2345678 Validado DNI 23456789 Validado
NIE Y2345678 Validado NIE X2345678 Validado DNI 23456789 Validado DNI 12345678 Validado