Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: GhostMati en 16 Octubre 2018, 15:34 PM

Título: Una ayudita
Publicado por: GhostMati en 16 Octubre 2018, 15:34 PM
Tengo que hacer un programa para mi escuela que permita entrar a un profesor y administrador

ya tengo gran parte echa pero tengo que hacer si el nombre y contraseña están bien,pase a otro menú con otras opciones y si es incorrecto te de 3 oportunidades para poder probar la contraseña o el nombre depende de en que se equivoque
(creo que es con un while o do while pero probé hacer de todo y no puedo)

dejo algo del código por favor alguna ayuda viene muy bien,Gracias.


import java.util.Scanner;

public class proyecto {
   public static void main(String[] args) {
      Scanner leer = new Scanner(System.in);
      String nom = new String("Docente2018");
      String contra = new String("Docente2018");
      String nom2 = new String("Administrador2018");
      String contra2 = new String("Administrador2018");
      System.out.println("1)Profesor");
      System.out.println("2)Administrador");
      int Opcion = leer.nextInt();
      switch (Opcion) {

      case 1:

         System.out.println("Ingrese su nombre de usuario: ");
         String nombre = leer.next();

         System.out.println("Ingrese su coantraseña: ");
         String contraseña = leer.next();

         if(nom.equals(nombre)){
            System.out.println();
         }else{
            System.out.println("Nombre incorrecto");
         }
            if(contra.equals(contraseña)){
               System.out.println();
            }else{
               System.out.println("Contraseña incorrecta");
            }
         
         break;
         
      case 2:
         System.out.println("Ingrese su nombre de usuario: ");
         String nombre2 = leer.next();
         System.out.println("Ingrese su contraseña: ");
         String contraseña2 = leer.next();
         if (contra2.equals(contraseña2)) {
            System.out.println();
         } else {
            System.out.println(" incorrecta");
         }
         if (nom2.equals(nombre2)) {
            System.out.println();

         } else {
            System.out.println("Nombre incorrecto");
            break;
         }
      }
   }
}
Título: Re: Una ayudita
Publicado por: srWhiteSkull en 16 Octubre 2018, 16:25 PM
Cita de: GhostMati en 16 Octubre 2018, 15:34 PM
creo que es con un while o do while pero probé hacer de todo y no puedo

y por qué no puedes? Inténtalo y comenta el error que te da y muestra el código, la porción.
Título: Re: Una ayudita
Publicado por: rub'n en 18 Octubre 2018, 16:54 PM

Hola,
La descripción de tu post no es adecuada "Una ayudita"  :-\ , y usa Código GeSHI


(http://3.bp.blogspot.com/-O6qDroNEzts/W8sWHPnV3MI/AAAAAAAADJw/mypp_PTYxbA_uKr7E-O-x0epDjSUdk3mwCK4BGAYYCw/s1600/geshi.gif)


Este es tu código algo modificado para que funcione pero se hacia largo y aun faltaba comparar  :-(

Código (java) [Seleccionar]

import java.util.Scanner;

public class ProfeAdmin {

   public static void main(String[] args) {

       Scanner leer = new Scanner(System.in);
       String nom = new String("Docente2018");
       String contra = new String("Docente2018");
       String nom2 = new String("Administrador2018");
       String contra2 = new String("Administrador2018");
       System.out.println("1)Profesor");
       System.out.println("2)Administrador");
       int Opcion = leer.nextInt();


       int count = 1; // uso de contador para contrar la oportunidades que son 3

       switch (Opcion) {

           case 1:

               System.out.println("Ingrese su nombre de usuario: ");
               String nombre = leer.next();

               System.out.println("Ingrese su contraseña: ");
               String contraseña = leer.next();


               // establecer 3 oportunidades si se equivoca en el nombre o la contraseña

               if (nom.equals(nombre) && contra.equals(contraseña)) {
                   mostrar("Correcto access granted");

               } else {
                   if (!nom.equals(nombre)) { // se lee, "si nom no es igual a nombre" , dara true
                       System.out.println("Nombre incorrecto");
                       int countO = 3;
                       while (count <= 3) {
                           ShowData.showLn("Oportunidad " + (countO--));
                           ShowData.showLn("Ingrese Nombre");
                           final String newName = leer.next();

                           if (newName.equals(nom)) {
                               ShowData.showLn("Nombre Correcto");
                               break;
                           } else {
                               count++;
                               continue;
                           }

                       }
                       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
                                  // xq no entrara mas en el while

                   } else if (!contra.equals(contraseña)) { //si la contra no es igual a contraseña, dara true

                       System.out.println("Contraseña incorrecta");
                       int countO = 3;
                       while (count <= 3) {
                           mostrar("Oportunidad " + (countO--)); // decremento del count0 en 1
                           mostrar("Ingrese contraseña");
                           final String newPass = leer.next();

                           if (newPass.equals(contra)) {
                               mostrar("Contraseña correcta");

                               /*
                               Aqui introducir siguente menu
                                */

                               break;
                           } else {
                               count++;
                               continue;
                           }

                       }
                       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
                                   // xq no entrara mas en el while

                   }

               }

               break;

           case 2:
               System.out.println("Ingrese su nombre de usuario: ");
               String nombre2 = leer.next();
               System.out.println("Ingrese su contraseña: ");
               String contraseña2 = leer.next();


               if (nom2.equals(nombre2) && contra2.equals(contraseña2)) {
                   mostrar("Correcto access granted");
               } else {
                   if (!nom2.equals(nombre2)) { // se lee, "si nom no es igual a nombre" , dara true
                       System.out.println("Nombre incorrecto");
                       int countO = 3;
                       while (count <= 3) {
                           mostrar("Oportunidad " + (countO--));
                           mostrar("Ingrese Nombre");
                           final String newName = leer.next();

                           if (newName.equals(nom2)) {
                               mostrar("Nombre Correcto");
                               break;
                           } else {
                               count++;
                               continue;
                           }

                       }
                       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
                       // xq no entrara mas en el while

                   } else if (!contra2.equals(contraseña2)) { //se lee, la contra no es igual a contraseña, dara true

                       System.out.println("Contraseña incorrecta");
                       int countO = 3;
                       while (count <= 3) {
                           mostrar("Oportunidad " + (countO--)); // decremento del count0 en 1
                           mostrar("Ingrese contraseña");
                           final String newPass = leer.next();

                           if (newPass.equals(contra2)) {
                               mostrar("Contraseña correcta");

                               /*
                               Aqui introducir siguente menu
                                */

                               break;
                           } else {
                               count++;
                               continue;
                           }

                       }
                       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
                       // xq no entrara mas en el while

                   }

               }

               break;
       }
   }

   private static void mostrar(final String s) {
       System.out.println(s);
   }

   //establecer oportunidades, son 3, creamos un metodo
   private void filtrar() {

   }
}




tu código original carece de métodos, uso de contructor, de variables de instancia, variables de clase, es bueno que le des un vistazo y refactorises tu código con eso., y ahora con este codigo se nota algo de diferencia con respecto a la reducción de líneas, solo que usamos tipos enum aquí

para las sentencias switch puedes usar enum  >:D ver linea 50 el método
Código (java) [Seleccionar]
getUsersByID()



Código (java) [Seleccionar]
package foro;

import javax.swing.*;
import java.util.EnumSet;
import java.util.NoSuchElementException;
import java.util.Scanner;

enum Users {

   DOCENTE(1),
   ADMINISTRADOR(2);

   private Integer id;

   Users(final Integer id) {
       this.id = id;
   }
   public Integer getId() {
       return id;
   }

   //buscando los usarios
   public static Users getUsersByID(final Integer id) {
       return EnumSet.allOf(Users.class)
               .stream()
               .filter(object -> id.equals(object.id))
               .findFirst() //detienela busqueda de las lista con la primera conincidencia
               .get(); // retorna un NoSuchElementException en caso que no exista dicho id
   }

}


public class ProfeAdmin2 {

   private static final Scanner LEER = new Scanner(System.in);
   private static final String ACCESS_GRANTED = "Access Granted.";
   private static final String DATOS_INCORRECTOS = "Datos incorrectos.";

   private String nom = new String("Docente2018");
   private String contra = new String("Docente2018");
   private String nom2 = new String("Administrador2018");
   private String contra2 = new String("Administrador2018");

   public ProfeAdmin2() {
       System.out.println("1)Profesor");
       System.out.println("2)Administrador");
       final int opcion = LEER.nextInt();
       try {
           final Users users = Users.getUsersByID(opcion);
           switch (users) {
               case DOCENTE:
                   process(nom,contra); // pasando parametros correspondientes al metodo process para reutilizarlo
                   break;
               case ADMINISTRADOR:
                   process(nom2,contra2); // pasando parametros correspondientes al metodo process para reutilizarlo
                   break;
           }
       }catch (final NoSuchElementException ex) {
           JOptionPane.showMessageDialog(null,"No se encuentra el usuario " + opcion);
           mostrar("Saliendo de la aplicacion");
           System.exit(0);
       }

   }

   private void process(final String paramNom, final String paramPass) {
       System.out.println("Ingrese su nombre de usuario: ");
       final String nombre = LEER.next();

       System.out.println("Ingrese su contraseña: ");
       final String contraseña = LEER.next();

       // establecer 3 oportunidades si se equivoca en el nombre o la contraseña
       int count = 0;
       if (nombre.equals(paramNom) && contraseña.equals(paramPass)) {
           mostrar(ACCESS_GRANTED);
           /*
           Pasar a otro menu aqui
            */
       } else {

           if(!nombre.equals(paramNom) && !contraseña.equals(paramPass)) {
               mostrar(DATOS_INCORRECTOS);
               ingresarNombre("", paramNom);
               ingresarPass("", paramPass);
               mostrar(ACCESS_GRANTED);
           }

           else if (!nombre.equals(paramNom)) { // se lee, "si nom no es igual a paramNom" , dara true
               ingresarNombre("Nombre incorrecto",paramNom);
           } else if (!contraseña.equals(paramPass)) { //si la contra no es igual a paramPass, dara true
               ingresarPass("Contraseña incorrecta",paramPass);
           }
       }
   }

   private void ingresarNombre(final String msg,final String paramNom) {
       System.out.println(msg);
       int countO = 3;
       int count = 0;
       while (count <= 3) {
           mostrar("Oportunidad " + (countO--));
           mostrar("Ingrese Nombre");
           final String newName = LEER.next();
           if (newName.equals(paramNom)) {
               mostrar("Nombre Correcto");
               
               break;
           } else {
               count++;
               continue;
           }
       }
       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
       // xq no entrara mas en el while
   }
   private void ingresarPass(final String msg, final String paramPass) {
       System.out.println(msg);
       int countO = 3;
       int count = 0;
       while (count <= 3) {
           mostrar("Oportunidad " + (countO--)); // decremento del count0 en 1
           mostrar("Ingrese contraseña");
           final String newPass = LEER.next();
           if (newPass.equals(paramPass)) {
               mostrar("Contraseña correcta");
             
               break;
           } else {
               count++;
               continue;
           }
       }
       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
       // xq no entrara mas en el while
   }

   private <T> void mostrar(final T s) {
       System.out.println(s);
   }
   public static void main(String ..._0x52) {
       new ProfeAdmin2();
   }

}


(http://3.bp.blogspot.com/-FivPD3F9Pg0/W8ilT0IZ32I/AAAAAAAADI0/U_HCBQ3Q53kyibva_f9odmkQ76yxl7bvACK4BGAYYCw/s1600/profeAdmin.gif)
Título: Re: Una ayudita
Publicado por: TonyHL en 23 Octubre 2018, 23:01 PM
Yo hice un proyecto parecido solo que el mío en el login ace confección con una base de datos mediante  xampp y SQL te lo podría enviar por si te sirve
Título: Re: Una ayudita
Publicado por: GhostMati en 24 Octubre 2018, 16:15 PM
Gracias por toda la ayuda y el como utilizar de mejor manera la pagina, lo agradezco.