Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Buscar registro

Buenas a ver si me podriais ayudar. Me piden que al introduccir el Nº.S.S(nº de seguridad social) me diga si existe o no el empleado y me muestre la linea(empleado).
Pues si lo introduzco bien por ejemplo "5555a" el Nº.S.S me muestra el empleado al completo, dni,nombre,apellido,nº.s.s y si lo introduzco mal "fdasfa" me dice que no. Vale hasta ahi todo bien, el problema es que por ejemplo si yo introduzco "5" me saca tambien ese empleado porque contiene un "5" y ahi esta el error, no sabria como solucionarlo... a ver si podeis ayudarme, gracias de antemano.

CODIGO:
public void buscarEmpleado () {

File archivo = null;
FileReader fr = null;
BufferedReader br = null;
System.out.println("Introduce nº seguridad social del empleado a buscar: ");
String lineaBuscar=teclado.nextLine();
try {
// Apertura del fichero y creacion de BufferedReader para poder
// hacer una lectura comoda (disponer del metodo readLine()).
archivo = new File ("C:\\Users\\Tesi\\Documents\\NetBeansProjects\\GestionEmpleados\\src\\usa_empleado\\empleados.dat");
fr = new FileReader (archivo);
br = new BufferedReader(fr);
// Lectura del fichero linea a linea
String linea;
boolean encontrado = false;
String lineaEncontrada = null;
while((linea=br.readLine())!=null && !encontrado) {
// buscar la cadena palabra en la linea leida
if (linea.indexOf(lineaBuscar) != -1) {
encontrado = true;
lineaEncontrada = linea;
}
}
if (encontrado) {
//System.out.println ("Encontrada la palabra " + lineaBuscar + " en la linea nº " + num);
System.out.println ("El empleado con nº de seguridad social "+lineaBuscar+" si esta registrado: \n" + lineaEncontrada );
}
else
System.out.println ("El empleado con nº de seguridad social "+lineaBuscar+" No está registrado." );
} catch(Exception e) {
e.printStackTrace();
}finally{
// En el finally cerrar el fichero, para asegurarse
// que se cierra tanto si todo va bien como si salta una excepcion.
try {
if (null != fr)
fr.close();
if (br != null)
br.close();
} catch (Exception e2) {
e2.printStackTrace();
}
} // fin finally
}

marzo 25, 2015 | Registered Commentertesi

Por lo que entendido, necesitas validar el número de SS introducido.
Supongo que esos números tienen un formato definido, por ejemplo: 4 números seguidos de una letra.
En la clase Character tienes métodos para determinar si un carácter es un dígito o es alfabético.

http://docs.oracle.com/javase/8/docs/api/java/lang/Character.html

Puedes descomponer la entrada en un array de caracteres con:

http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#toCharArray--

y aplicar los métodos de Character a cada uno de los caracteres de ese array, para validar que la entrada cumple los requisitos de un número de SS.

marzo 25, 2015 | Registered Commenterchoces

Un ejemplo, para que lo veas más claro:

public class NewMain {

public static void main(String[] args) {
String ss1 = "2222a";
String ss2 = "a2222";
String ss3 = "22a25";
String ss4 = "2";

System.out.println("válido 2222a: " + validarSS(ss1.toCharArray()));
System.out.println("válido a2222: " + validarSS(ss2.toCharArray()));
System.out.println("válido 22a25: " + validarSS(ss3.toCharArray()));
System.out.println("válido 2: " + validarSS(ss4.toCharArray()));

}

private static boolean validarSS(char[] entrada) {
return entrada.length == 5
&& Character.isDigit(entrada[0])
&& Character.isDigit(entrada[1])
&& Character.isDigit(entrada[2])
&& Character.isDigit(entrada[3])
&& Character.isAlphabetic(entrada[4]);
}
}

Salida por consola:

válido 2222a: true
válido a2222: false
válido 22a25: false
válido 2: false

marzo 25, 2015 | Registered Commenterchoces

Buenas, me dado cuenta buscando por internet que el numero de la seguridad social esta compuesto por 12 digitos de tipo numerico solamente asi que no lleva letra, entonces supongo que habra que hacer el mismo ejemplo que me has puesto pero con longitud 12 y todos de tipo isDigit

marzo 25, 2015 | Registered Commentertesi

En ese caso, tal vez te interesa más resolverlo así, porque 12 isDigit queda "feo" :)
Después de editarlo, me he dado cuenta de que el número de dígitos es 12 y no 15 como en el ejemplo. Por no cambiarlo, lo dejo así; pero creo que se ve bien el procedimiento a seguir.

public class NewMain {

public static void main(String[] args) {
String ss0 = "123456789101112";
String ss1 = "22222587421478a";
String ss2 = "22222587945487555";
String ss3 = "2";

System.out.println("válido 123456789101112: " + validarSS(ss0));
System.out.println("válido 22222587421478a: " + validarSS(ss1));
System.out.println("válido 22222587945487555: " + validarSS(ss2));
System.out.println("válido 2: " + validarSS(ss3));
}

private static boolean validarSS(String entrada) {
boolean validar = true;
if (entrada.length() != 15) {
validar = false;
} else {
try {
Long.parseLong(entrada);
} catch (NumberFormatException ex) {
validar = false;
}
}
return validar;
}
}

Salida por Consola:

válido 123456789101112: true
válido 22222587421478a: false
válido 22222587945487555: false
válido 2: false

marzo 25, 2015 | Registered Commenterchoces

Buenas, si ya me di cuenta que pusiste 15 en vez de 12 bueno eso es lo de menos.
El caso que no me funciona la clase sigue haciendo lo mismo...
CODIGO:
private static boolean validarSS(String entrada) {
boolean validar = true;
if (entrada.length() != 12) {
validar = false;
}else{
try {
Long.parseLong(entrada);
}catch (NumberFormatException ex) {
validar = false;
}
}
return validar;
}

public void buscarEmpleado () {
File archivo = null;
FileReader fr = null;
BufferedReader br = null;
//--------------------------------------------------------------------------------------------
System.out.println("Introduce nº seguridad social del empleado a buscar 'xxxxxxxxxxxx': ");
String lineaBuscar=teclado.nextLine();
validarSS(lineaBuscar);
//---------------------------------------------------------------------------------------------
try {
// Apertura del fichero y creacion de BufferedReader para poder
// hacer una lectura comoda (disponer del metodo readLine()).
archivo = new File ("C:\\Users\\Tesi\\Documents\\NetBeansProjects\\GestionEmpleados\\src\\usa_empleado\\empleados.dat");
fr = new FileReader (archivo);
br = new BufferedReader(fr);
// Lectura del fichero linea a linea
String linea;
boolean encontrado = false;
String lineaEncontrada = null;
while((linea=br.readLine())!=null && !encontrado) {
// buscar la cadena palabra en la linea leida
if (linea.indexOf(lineaBuscar) != -1) {
encontrado = true;
lineaEncontrada = linea;
}
}
if (encontrado) {
System.out.println ("El empleado con nº de seguridad social "+lineaBuscar+" si esta registrado: \n" + lineaEncontrada );
}
else
System.out.println ("El empleado con nº de seguridad social "+lineaBuscar+" No está registrado." );
}catch(Exception e) {
e.printStackTrace();
}finally{
// En el finally cerrar el fichero, para asegurarse
// que se cierra tanto si todo va bien como si salta una excepcion.
try {
if (null != fr)
fr.close();
if (br != null)
br.close();
} catch (Exception e2) {
e2.printStackTrace();
}
} // fin finally
}

marzo 26, 2015 | Registered Commentertesi

El método validarSS devuelve true o false, dependiendo de que el código introducido tenga un formato de número correcto o no.
Debes usarlo para evitar la búsqueda por números no válidos:

if(validarSS(lineaBuscar) // ejecutas el código de búsqueda
else // informas que el número no es válido y no ejecutas nada más

marzo 26, 2015 | Registered Commenterchoces

Muchas gracias ahora si me sale perfecto validado y muy elegante muchas gracias de verdad :)

marzo 26, 2015 | Registered Commentertesi