Vistas de página en total

Un programa con menu en consola

/* Haz un programa que que muestre por consola un menu para
 * calcular las areas de un cuadrado, rectangulo, triangulo
 * y un circulo y segun la opcion elegida pida los datos necesarios
 * para su calculo, muestre el calculo y retorne al menu */

import java.util.Scanner;

public class Main {
  private static Scanner sc = new Scanner(System.in);
  private static int opcion;

        // Las opciones del menu
  private static String[] menu =
      {"Cuadrado", "Rectangulo", "Triangulo", "circulo"};

  public static void main(String[] args) {
      // Hacer mientras
     do {
      // Llamada al menu
         opcion = menu();
      // Si opcion = 0 termina, si es diferente vuelve a mostrar el menu
      }while(opcion != 0);
   }

  /* Funcion que presenta un menu y ejecuta la opcion escogida */
  private static int menu(){

      System.out.println("   ** Opciones del Menu **");
     System.out.println("   =======================");

      // Se muestran las opciones del menu
     for (opcion = 0; opcion < menu.length; opcion++) {

       // Cada iteracion muestra una opcion del menu
        System.out.println(
            (opcion+1) + ") Calcula el area del: " + menu[opcion]);
     }

      System.out.println("===> Otro Salir\n");

      System.out.print("Elija su opcion: ");
      try {
         opcion = sc.nextInt();
         // Si se introduce una opcion no disponible terminara el programa
         if (opcion < 1 || opcion > 4){
            opcion = 0;
         }
      // Si no se introduce un int saltará un error, una excepcion
      // que se recoge aqui, y podemos controlarla.
     } catch (Exception e) {
         opcion = 0;
      }

     // Limpia un poco la consola
     System.out.println();
     System.out.println();
      System.out.println();
     System.out.println();
      System.out.println();
      System.out.println();
     System.out.println();
      System.out.println();
     System.out.println();
     System.out.println();
     System.out.println();

      // Bloque switch case, segun la opcion selecionada
      // se ejecuta el metodo que le corresponde
      switch (opcion){
      case 1:
        calculaCuadrado();
     break;
     case 2:
         calculaRectangulo();
      break;
      case 3:
        calculaTriangulo();
      break;
      case 4:
         calculaCirculo();
      break;

     default:
         System.out.println("*** Fin de programa ***");
     }
      // retorna la opcion al main
      // Si se produjo un calculo (opcion != 0) vuelve a mostrar el menu
      return opcion;
  }

  /* Metodo que calcula el area de un cuadrado*/
  private static void calculaCuadrado(){
      System.out.println("Cuadrado");

      /* Se pide el lado en la funcion datoNumerico()
      * y se guarda en la variable lado, si es cero se aborta la operacion.*/
     int lado = datoNumerico("lado");
     if (lado != 0){
         System.out.println
         ("El area del cuadrado es: " + lado * lado);
         System.out.println
            ("* + * + * + * + * + * + * + * + * + * + *");
     }
  }

// Todos los metodos de calculo son parecidos
  private static void calculaRectangulo(){
     System.out.println("Rectangulo");
     int lado1 = datoNumerico("un lado");
     if (lado1 != 0){
         int lado2 = datoNumerico("otro lado");
        if (lado2 != 0){
            System.out.println
               ("El area del cuadrado es: " + lado1 * lado2);
            System.out.println
               ("* + * + * + * + * + * + * + * + * + * + *");
         }
     }
  }

// Todos los metodos de calculo son parecidos
   private static void calculaTriangulo(){
     System.out.println("Triangulo");

     int base = datoNumerico("base");
     if (base != 0){
        int altura = datoNumerico("altura");
         if (altura != 0){
            System.out.println
               ("El area del cuadrado es: " + base * altura / 2);
            System.out.println
              ("* + * + * + * + * + * + * + * + * + * + *");
         }
     }
  }

// Todos los metodos de calculo son parecidos
  private static void calculaCirculo(){
      System.out.println("Circulo");

       int radio = datoNumerico("radio");
     if (radio != 0){
         System.out.println
            ("El area del circulo es: " +
               (double) Math.PI * radio * radio);
         System.out.println
            ("* + * + * + * + * + * + * + * + * + * + *");
      }
   }

  /* Metodo que pide un entero por consola entre 1 y 1000
   * si se introduce un 0 u otro valor no valido se entiende
  * que se quiere abortar la operacion.
  * Tiene un parametro String que trae informacion
  * del dato que se pide */
  private static int datoNumerico(String elemento){
     int num = 0;
     System.out.println("Introduzca un entero no mayor de 1000");

      System.out.println("Introduzca " + elemento + ": ");
      try {
         num = sc.nextInt();
         // Si el valor introducido no esta dentro de lo que
         // hemos pedido, mandamos un cero al metodo
         // que lo llamo 
         if(num < 1 || num > 1000) {
           num = 0;
         }
      /* Si se introduce un numero con decimales o letras
         * salta una excepcion que controlamos con el catch,
         * haciendo que aborte la operacion */
     } catch (Exception e) {
         num = 0;
        }
     return num;
   }

}

2 comentarios: