Vector 5: Altas, bajas, consultas y modificaciones

Este es un ejercicio muy interesante, hasta el momento solo se han guardado valores enteros en nuestros vectores, en este programa crearemos un menú el cual nos permita guardar el nombre de un usuario, después de haberlo guardado poder ver si el nombre del usuario existe en nuestro vector (Consulta), también poder eliminar el nombre de un  usuario ó poder hacer una modificación al nombre, como un extra podemos agregar una opción que ordene los nombres alfabéticamente e imprimirlos.

 

Comenzando con el programa crearé una nueva clase llama VectorCadenas con su método main.

 

Comenzaré declarando mi vector de tipo String, el tamaño es criterio de cada persona, el mío será de un tamaño de 20.

 

String usuario[]=new String[20];

 

Hay que recordar que como éste vector se utilizará para todas las operaciones (Altas, bajas, consultas, modificaciones, ordenamiento) se tiene que declarar fuera de cualquier bloque de código de las opciones del menú.

 

Continúo con mi menú:

 

        int op=0;
        String menu="***** Control de usuarios  *****\n";
        menu+="1.- Registrar usuario\n";
        menu+="2.- Consultar usuario\n";
        menu+="3.- Eliminar usuario\n";
        menu+="4.- Modificar usuario\n";
        menu+="5.- Ordenamiento de datos\n";
        menu+="6.- Salir\n";
        menu+="Digita una opción";
        do{
            
        }while(op!=6);

 

1.- Registrar usuario

La opción 1 corresponde a las altas o registro de nombres, lo haré pidiendo el nombre con JOptionPane y guardarlo en el vector, pero por el momento nos falta algo muy importante para poder guardar en el vector que es una variable para llevar el índice a guardar en el vector, para ello declararé una variable entera en donde declaré mi vector para no perder el valor cuando salga de la opción 1.

 

int indice=0;

 

Muestro mi menú, capturo la opción digitada y la compara con un switch case, en caso de ser la opción 1 verifico primero que el vector no este lleno, si no lo está guardo el nombre.

 

op=Integer.parseInt(JOptionPane.showInputDialog(menu));
    switch (op) {
    case 1:
        if(indice>usuario.length-1){
            JOptionPane.showMessageDialog(null, "Vector lleno, ya no puede registrar mas nombres");
        }else{
            String nom=JOptionPane.showInputDialog("Escribe el nombre de la persona");
            usuario[indice]=nom;
            indice++;
        }
        break;

 

2.- Consultar usuario

Las consultas se realizarán buscando cada elemento dentro del vector y comparando si es igual a un dato digitado por el usuario, en nuestro programa solamente retornará un mensaje que diga si está registrado o no, primeramente se verificará que existan usuarios registrados, de ser así se pide el nombre del usuario a consultar y se procede con las comparaciónes en el vector.

 

case 2: //Consultas
       if(indice>0){
       boolean existe=false;
       String consulta=JOptionPane.showInputDialog("Escribe el nombre a consultar");
       for(int i=0;i<usuario.length;i++){
            if(consulta.equalsIgnoreCase(usuario[i]))
                existe=true;
            }
            if(existe)
                JOptionPane.showMessageDialog(null, "El usuario "+consulta+" ya se encuentra registrado");
            else
                JOptionPane.showMessageDialog(null, "El usuario "+consulta+" no existe");        
        }else{
            JOptionPane.showMessageDialog(null, "No hay usuarios registrados");
        }
        break;

 

Se observa que usamos una variable booleana para saber si existe o no que la usamos en la última condición, de ser el caso que exista el nombre digitado con algún dato en el vector se cambia la variable a true y en la condición nos mostrará un mensaje afirmativo de que existe el usuario.

3.- Eliminar usuario

La eliminación de usuarios corresponde al case 3 del menú, en esta ocación tenemos que hacer 2 cosas, buscar al usuario y eliminarlo, entonces para buscar al usuario podemos utilizar el código anterior de consultas.

 

Cada vez que se quiera eliminar un usuario es importante verificar que existan usuarios registrados, para ello llevamos el control con la variable indice, lo verificamos haciendo un simple if.

 

case 3:
    if(indice>0){
        
    }else{
        JOptionPane.showMessageDialog(null, "No hay usuarios registrados");
    }
    break;

 

En caso de que si hay usuarios registrados pedimos el nombre del usuario a eliminar, y lo buscamos dentro del vector.

boolean existe=false;

String eliminar=JOptionPane.showInputDialog("Escribe el nombre de usuario a eliminar");
     for(int i=0;i<usuario.length;i++){
         if(eliminar.equalsIgnoreCase(usuario[i])){                

              existe=true;

            //Código para eliminar usuario            

         }
      }

 

Como se observa en el código anterior se hace la misma consulta que en el case 2, busca en todo el vector un nombre igual a el nombre del usuario a eliminar, en caso de encontrarlo se hace la eliminación.

 

 

Cuando se cumpla la condición se debe eliminar un registro hacemos lo siguiente:

 

for(int j=i;j<indice-1;j++){
     usuario[j]=usuario[j+1];
}
indice--;

JOptionPane.showMessageDialog(null, "El usuario de ha eliminado","Éxito al eliminar",JOptionPane.OK_OPTION);

 

Cuando encuentra un nombre a eliminar hacemos un corrimiento en el vector, es decir, el nombre que se va a eliminar simplemente lo sustituimos con el valor siguiente del vector así eliminamos el nombre actual en el vector, como hacemos una eliminación de un registro debemos decrementar nuestra variable indice, en esta ocación se ponen más parámetros en el JOptionPane que es "Éxito al eliminar" que vendrá siendo un título en la ventana donde se muestra el mensaje y JOptionPane.INFORMATION_MESSAGE que mostrará un icono de información.

 

Si al terminar el ciclo no se encontró ningún nombre igual significa que no se existe el usuario, mandamos un mensaje de error si no se encontró el usuario:

 

if(!existe)
     JOptionPane.showMessageDialog(null, "No se encontró el usuario","Error al eliminar",JOptionPane.ERROR_MESSAGE);

 

4.- Modificar usuario

El case 4 corresponde a la modificación de un usuario, en este caso solo se cambiará el nombre, se sigue utilizando el código de las consultas para el proceso y solo se sobreescribe el valor del nombre del vector por uno nuevo, sin aumentar ni decrementar la variable indice.

 

case 4:

if(indice>0){
   boolean existe=false;
   String cons=JOptionPane.showInputDialog("Escribe el nombre de usuario a modificar");
   for(int i=0;i<usuario.length;i++){
         if(cons.equalsIgnoreCase(usuario[i])){
               existe=true;
                String modificar=JOptionPane.showInputDialog("Escribe el nuevo nombre de usuario");
                usuario[i]=modificar;
           }
     }
      if(!existe)
          JOptionPane.showMessageDialog(null, "No se encontró el usuario","Error en la consulta",JOptionPane.ERROR_MESSAGE);
}else{
    JOptionPane.showMessageDialog(null, "No hay usuarios registrados");
}

break;

 

5.- Ordenar Datos

En esta opción ordenaremos los nombres en forma alfabéticamente y utilizaremos el método de burbuja previamente visto, no se notará ningún cambio en las opciones anteriores para ver que realmente se ordenan primero mostraré los datos sin ordenar y luego ordenados.

 

case 5: //Ordenamiento

    //Imprimo los datos desordenados
    String datos="";
    for(int i=0;i<indice;i++){
        datos+=usuario[i]+"\n";
     }
     JOptionPane.showMessageDialog(null, datos);
                
     //Ordenación por orden alfabetico
     for(int i=0;i<(indice-1);i++){
         for(int j=i+1;j<indice;j++){
             String c1=usuario[i];
             String c2=usuario[j];
              if(c1.compareTo(c2)>0){ 

/*compareTO regresa un valor positivo si se cumple la condicion que c1 es mayor que c2, 0 si son iguales y menor que 0 si no se cumple*/
                   String aux=usuario[i];
                   usuario[i]=usuario[j];
                   usuario[j]=aux;
                }
            }
        }
                
    //Imprimo los datos ordenados
    datos="";
    for(int i=0;i<indice;i++){
        datos+=usuario[i]+"\n";
     }
     JOptionPane.showMessageDialog(null, datos);
     break;

 

default:
     JOptionPane.showMessageDialog(null, "Opción no válida");
     break;