[School]Ejercicios POO en Java

Iniciado por PabloPbl, 26 Abril 2015, 17:26 PM

0 Miembros y 1 Visitante están viendo este tema.

PabloPbl

Hola gente como están?, pues he decidido abrir una especie de escuela en este foro (con los permisos adecuados por los mods claro), en el que dejare un par de ejercicios de POO para los que quieran practicar sus habilidades.

Pues daré 10 ejercicios mas o menos fáciles para principiantes en POO y otros un poco mas complicados. Y a los que se anoten, los ayudare con sus códigos si se llegan a atascar.

Pues eso, si se quieren anotar, publiquen un comment abajo diciéndolo y si hay interés, en un rato publicare el primer ejercicio.

Saludos!!

Thryks

Yo!, siempre dispuesto a aprender  ::)
Futuro Sysadmin

PabloPbl

Hola gente en este primer ejercicio simularemos un sistema de usuarios en consola, con la posibilidad de crear varios usuarios y poder iniciar sesión.

El programa funcionaria de la siguiente forma:
El programa le preguntara al usuario que quiere hacer, y bueno dependiendo lo que el elija haremos algo en consecuencia, como dijimos anteriormente, las opciones serán:

  • Crear nuevo usuario
  • Iniciar sesion
  • Salir
Si el usuario elige iniciar sesión, pues se abrirá el asistente para crear un nuevo usuario, el cual preguntara nombre y contraseña, y debemos guardarlo de alguna forma para luego poder iniciar sesión con los mismos. Luego una vez creado nos dirá un mensaje, "Usuario creado correctamente".

Si el usuario elige iniciar sesion, pues se abrira el otro asistente para el inicio de sesion, el cual le preguntara su nombre y contraseña y hara una verificaión de si el mismo existe o no, y largara un mensaje como consecuencia.

Para que esto parezca mas POO, debes tener una clase Usuario, otra SistemaDeUsuario y una que contenga el main.

No es necesario hacer esto con archivos de texto ni nada, los usuarios se guardaran en el mismo programa, es decir mientras el mismo este levantado.

NOTA: No borren el código que tienen, por que la seguiremos complicando aún mas, es decir iremos ampliando nuestro programa.

Bueno gente, en un rato les mostrare mi code para que vean como lo he hecho yo.

Si les gusta esto, haré mas ejercicios  ;).

Saludos!

Thryks

Ahora mismo voy a instalar archlinux pero en cuanto lo instale me instalo java y lo hago :)
Futuro Sysadmin

PabloPbl

Al menos a alguien le interesa xD  ;D.
Si tienes alguna duda, aunque lo dudo xD, hazla saber abajo en los comments.
Recuerda no borrar el código, por que iremos agregándole mas funcionalidades al mismo, por ende complicándola aún mas.

Un saludo Thryks.

Thryks

#5
Pues probablemente te rias de mi Pablo pero me quedo atascado y no lo saco, se que es sencillo pero me quedo pillado, esto es lo que llevo:
Clase Main:
import java.util.Scanner;
public class Main {
static Scanner teclado = new Scanner(System.in);
public static void main (String[] args){
int decision;

System.out.println("Escribe el número que se corresponda con la opcion que quieras elegir");
System.out.println("1. Crear un usuario");
System.out.println("2. Iniciar Sesion");
System.out.println("3. Salir");

decision = teclado.nextInt();
switch (decision) {

case 1:
System.out.println("Has elegido la opción 1");
break;
case 2:
System.out.println("Has elegido la opción 2");
break;
case 3:
System.out.println("Has elegido la opción 3");
break;
default:
System.out.println("Has introducido un numero incorrecto");
System.out.println("Introduce otro porfavor");
break;
}
}
}

Clase Usuario:
import java.util.Scanner;
public class Usuario extends Main {


public static String[] users = new String[20];
public static String[] passwds = new String[20];
String Nombre,Contraseña,Objeto_Usuario;
public void setNombre (String n){
this.Nombre = n;
}
public void setContraseña (String c){
this.Contraseña = c;
}
public static void main (String[] args){
Usuario user1 = new Usuario();
String dnm, dcs;
System.out.println("Introduce el nombre: ");
dnm = teclado.nextLine();
System.out.println("Introduce la contraseña: ");
dcs = teclado.nextLine();
users[] = dnm;

user1.setNombre(n);
user1.setContraseña(c);
}

}

No consigo pasar de ahi me quedo pillado porque no tengo pensado como guardar los nombres y contraseña si como vectores o en valores del objeto y luego guardar el objeto como un vector, nose la verdad, soy novatisimo en java. Quizás debí quedarme en el "Hola mundo", y eso que estoy apunto de cursar un grado superior de programacion en fin... que desesperacion... :-(
Futuro Sysadmin

PabloPbl

Ok, pues por lo que voy tienes 2 main???  :o
Déjale el main a la clase main, la cual sera la que se ejecute en primera instancia.

Ademas te recomendaría que la clase Usuario solo tenga 4 métodos ademas del constructor, los cuales serán para acceder al nombre del usuario y a la contraseña. Haz los típicos métodos get y set para acceder a cada uno.

Una vez que tengas la clase usuario de esa forma:
En cuanto a guardar los nombres y contraseñas, lo que puedes hacer es crear un ArrayList y de allí ir guardando los objetos que vas creando.

Y para interactuar con el usuario deja la clase main, y hay le preguntaras que desea hacer y harás algo en consecuencia, pues si desea crear un nuevo usuario, crearas un nuevo objeto de la clase Usuario y lo agregaras al ArrayList de usuarios.

Ok, cualquier duda acá estoy, o si alguien mas quiere participar, bienvenido.

PabloPbl

Pues acá les dejo mi code, para que lo comparen con el de ustedes y mas o menos se den un idea, de como pueden hacer la actividad que pongo arriba:

Clase Main:
Código (java) [Seleccionar]

public class Main {
   
    public static void main(String[] args) {
        new SistemaDeUsuarios();
    }
   
}



Clase Usuario:
Código (java) [Seleccionar]

public class Usuario {

    private String userName;
    private String password;
   
    public Usuario() {
    }
   
    public Usuario(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }
   
    public void setUserName(String newUserName) {
        this.userName = newUserName;
    }
   
    public String getUserName() {
        return this.userName;
    }
   
    public void setPassword(String newPassword) {
        this.password = newPassword;
    }
   
    public String getPassword() {
        return this.password;
    }
}




Y la clase SistemaDeUsuarios:
Código (java) [Seleccionar]
import java.util.ArrayList;
import java.util.Scanner;

public class SistemaDeUsuarios {
    boolean sesionIniciada = false;
    ArrayList<Usuario> usuarios;
   
    public SistemaDeUsuarios() {
        usuarios = new ArrayList<Usuario>();
       
        Scanner scanner = new Scanner(System.in);
       
        while(true) {
            System.out.println("**************************************************************");
            System.out.println("¿Que deseas hacer?\n1)Crear usuario\n2)Iniciar sesión\n3)Salir");
            String eleccion = scanner.nextLine();
           
            if(eleccion.equals("1")) {
                System.out.println("Nombre de usuario:");
                String userName = scanner.nextLine();
               
                System.out.println("Contraseña:");
                String contrasenia = scanner.nextLine();
               
                this.usuarios.add(new Usuario(userName, contrasenia));
                System.out.println("Usuario creado correctamente");
            }
            else if(eleccion.equals("2")) {
                System.out.println("Nombre de usuario:");
                String userName = scanner.nextLine();
                boolean existeUsuario = existeUsuario(userName);
               
                if(existeUsuario) {
                    System.out.println("Contraseña:");
                    String contrasenia = scanner.nextLine();
                    boolean contraseniaCorrecta = contraseniaCorrecta(userName, contrasenia);
                   
                    if(contraseniaCorrecta) {
                        System.out.println("Bienvenido usuario");
                    }
                    else{
                        System.out.println("Contraseña incorrecta");
                    }
                }
                else{
                    System.out.println("No existe ningún usuario con ese nombre");
                }
            }
            else if(eleccion.equals("3")) {
                System.out.println("Vuelve pronto!");
                break;
            }
            else{
                System.out.println("Has ingresado un valor incorrecto, intentalo de nuevo");
            }
        }
    }

    public boolean existeUsuario(String userName) {
        boolean existe = false;
       
        for(int i = 0; i < this.usuarios.size(); i++) {
            System.out.println(usuarios.get(i).getUserName());
            if(userName.equals(usuarios.get(i).getUserName())) {
                existe = true;
                break;
            }
        }
       
        return existe;
    }
   
    public boolean contraseniaCorrecta(String userName, String password) {
        boolean correcta = false;
       
        int index = 0;
       
        for(int i = 0; i < this.usuarios.size(); i++) {
            if(userName.equals(usuarios.get(i).getUserName())) {
                index = i;
            }
        }
       
        String contrasenia = usuarios.get(index).getPassword();
        if(password.equals(contrasenia)) {
            correcta = true;
        }
       
        return correcta;
    }
}


Bueno gente, si quieren que haga mas ejercicios de estos haganmelo saber abajo en los comments.

Un saludo a todos  ;)

nolasco281

Gran ejemplo para alquien que esta aprendiendo y no sabe como trabajar con clases  ;-) me recordastes varias cosas.

Gracias Saludos.
Lo que se puede imaginar... se puede programar.

Lind L. Tailor

Hola...

Pues yo hice esto, no estoy seguro si esta correcto pero eh realizado el intento con lo que se hasta el momento de este lenguaje maravilloso lenguaje de programación...

EscuelaMain.java
Código (java) [Seleccionar]

package com.escuela.main;

import com.escuela.persistence.SistemaUsuarios;

public class SistemaEscolarMain {
public static void main(String[] args) {
new SistemaUsuarios();
}
}


SistemaUsuario.java
Código (javascript) [Seleccionar]

package com.escuela.persistence;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import com.escuela.dto.Usuario;

public class SistemaUsuarios {
List<Usuario> listaUsuario = new ArrayList<Usuario>();

public SistemaUsuarios() {
Usuario usuario = null;

Scanner scan = new Scanner (System.in);
Scanner sesion = new Scanner (System.in);

// Menu
System.out.println("**********Menu del Sistema Escolar (El Hacker)************");
System.out.println("*                                                        *");
System.out.println("* 1.- Crear nuevo usuario.                               *");
System.out.println("* 2.- Iniciar sesion.                                    *");
System.out.println("* 3.- Salir                                              *");
System.out.println("*                                                        *");
System.out.println("**********************************************************");

// Captura del dato de entrada por parte del usuario
System.out.print("\n¡Bienvenido!... ¿Cual es tu actividad a realizar?: ");
String opcion = scan.next();
while (opcion != null){
if (opcion.equals("1")){
System.out.print("\nNombre de usuario: ");
String nombre = scan.next();
System.out.print("Password de usuario: ");
String password = scan.next();
usuario = new Usuario(nombre,password);
listaUsuario.add(usuario);
System.out.println("\nUsuario registrado correctamente.");
opcion = "2";
} else if (opcion.equals("2")) {
System.out.print("\nEscriba su nombre: ");
String user = sesion.next();
System.out.print("Escriba su password: ");
String pass = sesion.next();
if (user != null){
if (validarUsuario(user,pass)){
break;
}
}
} else if (opcion.equals("3")) {
System.out.println("\nAplicacion terminada correctamente.");
break;
} else {
System.out.print("\nOpcion no disponible en el menu, vuelva a intentar: ");
opcion = scan.next();
}
}
}

private boolean validarUsuario(String user, String pass) {
boolean existe = false;
for(Usuario i : listaUsuario){
if (i.getUsuario().equals(user) && i.getPassword().equals(pass)){
System.out.println("\nSesion iniciada correctamente.");
existe = true;
} else {
System.out.println("\nError de credenciales.");
}
}
return existe;
}
}


Usuario.java
Código (java) [Seleccionar]

package com.escuela.dto;

public class Usuario {
private String usuario;
private String password;

public Usuario(String usuario, String password) {
this.usuario = usuario;
this.password = password;
}

public String getUsuario() {
return usuario;
}

public void setUsuario(String usuario) {
this.usuario = usuario;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}


Por favor, siéntanse libres de corregirme o bien, darme algunos tips para la optimización de mi código.

P.D. Siento que deberías dar un poco mas de tiempo antes de colocar tu código personal, o por lo menos eso es mi punto de vista.