/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package es.bancodehierro.banco.menu; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Date; import java.util.InputMismatchException; import java.util.Scanner; /** * * @author Guillem Arrom */ public class GestionaMenu { /** * Et mostra un missatge i es torna la cadena que li fiqui l'usuari. * * @param prompt Es el missatge que mostrara abans de demanar la cadena * @return Torna una String amb la cadena que fiqui l'usuari. */ public static String llegirCadena(String prompt) { boolean correcte = false; String cadena = ""; Scanner teclat = new Scanner(System.in); do { System.out.print(prompt); try { cadena = teclat.next(); correcte = true; } catch (InputMismatchException e) { System.err.println("Cadena incorrecte."); teclat.next(); } } while (correcte == false); return cadena; } /** * Et mostra un missatge i es torna el sencer que li fiqui l'usuari. * * @param prompt Es el missatge que mostrara abans de demanar el sencer * @return Torna el valor int amb el sencer que fiqui l'usuari. */ public static int llegirSencer(String prompt) { boolean correcte = false; int sencer = 0; Scanner teclat = new Scanner(System.in); do { System.out.print(prompt); try { sencer = teclat.nextInt(); correcte = true; } catch (InputMismatchException e) { System.err.println("Sencer incorrecte."); teclat.next(); } } while (correcte == false); return sencer; } /** * Et mostra un missatge i es torna el double que li fiqui l'usuari. * * @param prompt Es el missatge que mostrara abans de demanar el double * @return Torna el valor double amb el decimal que fiqui l'usuari. */ public static double llegirDouble(String prompt) { boolean correcte = false; Double sencer = 0.0; Scanner teclat = new Scanner(System.in); // Llegeix un sencer del teclat. Si el que introdueix l'usuari no es pot // convertir a sencer l'avisa de l'errada i torna a demanar el sencer. do { System.out.print(prompt); try { sencer = teclat.nextDouble(); correcte = true; } catch (InputMismatchException e) { System.err.println("Double erroni."); teclat.next(); } } while (correcte == false); return sencer; } /** * Metode que s'encarrega de gestionar el menu. * * Li pases un string de Titol que es mostrara enmitj de la pantalla. * * L'array d'string's han de incloure totes les opcions amb l'unic format de * majuscula/minuscula, la resta de format s'encarrega el metode de * generar-lo * * @param titol Titol que es mostrara * @param opcions Opcions que pot mostrar el menu * @param pregunta La pregunta que es mostrara a l'usuari abans de que * introduesqui la opcio * @param prefix Es lo que li ficara al principi del return * @return torna la opcio que el usuari tria començat per prefix (es a dir * el valor 0 sera 0+prefix) * */ public static int gestionarMenu(String titol, String[] opcions, String pregunta, int prefix) { System.out.println(titol); int resultat; for (int index = 0; index < opcions.length; index++) { System.out.println("[" + (index + 1) + "]--> " + opcions[index]); } boolean ok; do { resultat = llegirSencer(pregunta + " "); resultat = resultat - 1; if ((resultat < opcions.length) && (resultat >= 0)) { ok = false; } else { System.out.println("Ha triat una opcio no contemplada en el menú"); ok = true; } } while (ok); //S'añadeix un prefix resultat = resultat + prefix; return resultat; } /** * Mostra un titol i una pregunta per demanar si o no * * @param titol el titol que mostrara * @param pregunta la pregunta que mostrara * @return true si pitja que si, false si pitja que no */ public static boolean menuSiNo(String titol, String pregunta) { String[] opcioSiNo = { "Si", "No" }; int opcio = gestionarMenu(titol, opcioSiNo, pregunta, 0); do { switch (opcio) { case 0: return true; case 1: return false; } } while (opcio == 0 || opcio == 1); return false; } /** * Metodo para generar una fecha mediante el formato "dd-mm-yyyy", la pasa a objeto "Date" y lo devuelve. * * @param fecha String en formato "dd-mm-yyyy" que se usara para transformarlo en fecha. * @return Objeto "Date" con la fecha correspondiente. */ public static Date setFechaNacimiento(String fecha){ SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); Date data = formatter.parse(fecha, new ParsePosition(1)); return data; } }