viernes, 14 de noviembre de 2014

Taxímetro

Al fin, he acabado el proyecto del tema dos, que era hacer un taxímetro con su mapa, tarifa, ubicación y todo lo que con el conlleva. Espero que os guste!

package taximetro;

import es.javiergarbedo.coordinateslib.CoordinatesConverter;
import java.text.DateFormat;
import java.util.Calendar;
import javax.swing.JOptionPane;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.apache.commons.validator.routines.CreditCardValidator;

/**
 *
 * @author Alejandro Ruiz
 *
 */
public class Main extends javax.swing.JFrame {

    //Contador

    int contador = 00001;
    //Crear fecha/hora
    Calendar fechaInicio;
    Calendar fechaFin;
    DateFormat formatofechaCorta;
    //HoraInicio/Fin
    DateFormat formatoHoraInicio;
    DateFormat formatoHoraFin;
    //Convertir fecha a miliseg
    long fechaToMilisInicio;
    long fechaToMilisFin;
    //Latitud Longitud
    String latitud = "36.679619";
    String longitud = "-5.444740";
    String coorLatitud = "36º40'46''";
    String coorLongitud = "-5º26'41''";

    /**
     * Creates new form Main
     */
    public Main() {
        initComponents();
        //Activar/Desactivar
        jButton1Iniciar.setEnabled(true);
        jButton2Stop.setEnabled(false);
        jTextField1Latitud.setText(latitud);
        jTextField2Longitud.setText(longitud);
        jLabel4LatitudGrados.setText(coorLatitud);
        jLabel5LongitudGrados.setText(coorLongitud);

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                        
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jButton2Stop = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jLabel6MapaRuta = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jTextField1NTarjeta = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jLabel4ImagenTaxi = new javax.swing.JLabel();
        jButton1Iniciar = new javax.swing.JButton();
        jLabel4LatitudGrados = new javax.swing.JLabel();
        jTextField1Latitud = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jLabel5LongitudGrados = new javax.swing.JLabel();
        jTextField2Longitud = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jTextField1Ruta = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Posición GPS");

        jLabel4.setText("Datos del Trayecto");

        jButton2Stop.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagen/sm_profile.png"))); // NOI18N
        jButton2Stop.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2StopActionPerformed(evt);
            }
        });

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jLabel6.setText("Tarjeta de Crédito:");

        jButton1.setText("Comprobar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton1Iniciar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagen/bandera-verde-icono-4467-48.png"))); // NOI18N
        jButton1Iniciar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1IniciarActionPerformed(evt);
            }
        });

        jLabel4LatitudGrados.setText("d");

        jTextField1Latitud.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField1LatitudActionPerformed(evt);
            }
        });

        jLabel2.setText("Latitud:");

        jLabel5LongitudGrados.setText("ds");

        jLabel3.setText("Longitud:");

        jTextField1Ruta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField1RutaActionPerformed(evt);
            }
        });

        jLabel5.setText("Destino:");

        jLabel7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagen/taximetro.PNG"))); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jButton1Iniciar, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(18, 18, 18)
                                        .addComponent(jButton2Stop)
                                        .addGap(47, 47, 47))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel6MapaRuta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
                                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 254, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel4)
                                .addGap(137, 137, 137)
                                .addComponent(jLabel4ImagenTaxi, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(8, 8, 8)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel2)
                                        .addGap(27, 27, 27)
                                        .addComponent(jTextField1Latitud, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel3)
                                        .addGap(18, 18, 18)
                                        .addComponent(jTextField2Longitud, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addComponent(jLabel1))
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(18, 18, 18)
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(jLabel5LongitudGrados, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addComponent(jLabel4LatitudGrados, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(jLabel7)
                                        .addGap(90, 90, 90))))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(27, 27, 27)
                        .addComponent(jLabel6)
                        .addGap(18, 18, 18)
                        .addComponent(jTextField1NTarjeta, javax.swing.GroupLayout.PREFERRED_SIZE, 217, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addComponent(jTextField1Ruta, javax.swing.GroupLayout.Alignment.TRAILING))
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel5)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addGap(20, 20, 20))
        );
        layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(125, 125, 125)
                        .addComponent(jLabel4ImagenTaxi, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(54, 54, 54)
                                .addComponent(jLabel1)
                                .addGap(28, 28, 28))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addContainerGap()
                                .addComponent(jLabel7)
                                .addGap(18, 18, 18)))
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel2)
                            .addComponent(jTextField1Latitud, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel4LatitudGrados, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel5LongitudGrados, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel3)
                            .addComponent(jTextField2Longitud, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jLabel4)))
                .addGap(13, 13, 13)
                .addComponent(jLabel5)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jTextField1Ruta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 289, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jButton1Iniciar)
                            .addComponent(jButton2Stop))
                        .addGap(18, 18, 18)
                        .addComponent(jLabel6MapaRuta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel6)
                    .addComponent(jTextField1NTarjeta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                      

    private void jButton1IniciarActionPerformed(java.awt.event.ActionEvent evt) {                                              
        //Activar/Desactivar boton
        jButton1Iniciar.setEnabled(false);
        jButton2Stop.setEnabled(true);
        //Crear fecha/hora
        fechaInicio = Calendar.getInstance();
        formatofechaCorta = DateFormat.getDateInstance(DateFormat.SHORT);
        formatoHoraInicio = DateFormat.getTimeInstance(DateFormat.MEDIUM);
        //Convertir fecha en milis
        fechaToMilisInicio = fechaInicio.getTimeInMillis();
        //Imprimir ticket
        String tiquetIniciar = "TIKET \n===== \nNº de ticket: " + "0000" + contador++ + "\nFecha: "
                + formatofechaCorta.format(fechaInicio.getTime()) + ""
                + "\n\n\nHora bajada de Bandera : "
                + formatoHoraInicio.format(fechaInicio.getTime());
        jTextArea1.setText(tiquetIniciar);
    }                                              

    private void jButton2StopActionPerformed(java.awt.event.ActionEvent evt) {                                            
        //Activar desactivar
        jButton1Iniciar.setEnabled(true);
        jButton2Stop.setEnabled(false);
        //crear hora
        fechaFin = Calendar.getInstance();
        formatoHoraFin = DateFormat.getTimeInstance(DateFormat.MEDIUM);
        //Convertir fecha en milis
        fechaToMilisFin = fechaFin.getTimeInMillis();
        //Duración trayecto
        long duracion = fechaToMilisFin - fechaToMilisInicio;
        String convertirDuracion = DurationFormatUtils.formatDurationHMS(duracion);
        //Importe
        double importe = ((duracion / 1000) / 60) * 0.50;
        //IVA
        double importeIVA = (importe * 0.18);
        //Importetotal
        double importeTotal = importeIVA + +importe + 0.50;
        //Imprimir ticket2
        String tiquestop = "\nHora fin trayecto: " + formatoHoraFin.format(fechaFin.getTime())
                + "\nDuración del trayecto: " + convertirDuracion
                + "\nTarifa por minuto = 0.50€"
                + "\n\n\nImporte : " + importe + "€"
                + "\nIVA: " + importeIVA + "€"
                + "\nImporte Total: " + importeTotal + "€";

        jTextArea1.append(tiquestop);
    }                                          

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        //Comprobar Tarjeta
        CreditCardValidator tarjeta = new CreditCardValidator();
        boolean comprobarTarjeta = tarjeta.isValid(jTextField1NTarjeta.getText());
        String verificartarjeta = comprobarTarjeta ? "El número de la tarjeta es correcto"
                : "El número de la tarjeta es incorrecto";
        JOptionPane.showMessageDialog(this, verificartarjeta, "Comprobar Tarjeta", JOptionPane.INFORMATION_MESSAGE);
    }                                      

    private void jTextField1RutaActionPerformed(java.awt.event.ActionEvent evt) {                                              

        //Cambia los siguientes valores por las direciones de origen y destino deseadas
        String origen = jTextField1Latitud.getText() + "," + jTextField2Longitud.getText();
        String destino = jTextField1Ruta.getText();
        //Hay que sustituir los espacios por el carácter %20 para que se
        //  interprete bien la URL que se generará
        destino = destino.replaceAll(" ", "%20");
        //Cambia el nombre [etiqueta] por el nombre de un objeto JLabel (etiqueta) que
        //  has debido colocar antes en el formulario y que será donde se muestre el mapa.
        //  Deja la etiqueta del formulario sin ningún texto en el diseño.
        javax.swing.JLabel jLabelMapa = jLabel6MapaRuta;
        //Indica aquí el tamaño que desees para el mapa
        int tamHorizontal = 200;
        int tamVertical = 200;
        //Puedes encontrar más información sobre el uso de mapas estáticos de Google Maps aquí:
        //  http://code.google.com/intl/es-ES/apis/maps/documentation/staticmaps/

        //A partir de aquí no hace falta cambiar nada
        try {
            String txtDireccionImagenMapa = "http://maps.google.com/maps/api/staticmap?path="
                    + origen + "|" + destino + "&size=" + tamHorizontal + "x" + tamVertical
                    + "&language=ES&sensor=false";
            System.out.println(txtDireccionImagenMapa);
            java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
            java.awt.Image imagenMapa = toolkit.getImage(new java.net.URL(txtDireccionImagenMapa));
            jLabelMapa.setIcon(new javax.swing.ImageIcon(imagenMapa));
        } catch (java.net.MalformedURLException e) {
            javax.swing.JOptionPane.showMessageDialog(this, "La dirección de imagen indicada no es correcta");
        }
    }                                              

    private void jTextField1LatitudActionPerformed(java.awt.event.ActionEvent evt) {                                                  
        // TODO add your handling code here:
    }                                                

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Main().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                    
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton1Iniciar;
    private javax.swing.JButton jButton2Stop;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel4ImagenTaxi;
    private javax.swing.JLabel jLabel4LatitudGrados;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel5LongitudGrados;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel6MapaRuta;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1Latitud;
    private javax.swing.JTextField jTextField1NTarjeta;
    private javax.swing.JTextField jTextField1Ruta;
    private javax.swing.JTextField jTextField2Longitud;
    // End of variables declaration                  
}





viernes, 3 de octubre de 2014

Os presento como representar algunos tipos de numeros

Esta es una de las primeras actividades y que consiste en mostrar por pantalla algunos tipos de números

public class numeros {
 
  public static void main(String arg[]) {
   System.out.println("numero entero en formato decimal");
   System.out.println(27634);
   System.out.println("Numero entero en formato octal(034)");
   System.out.println(034);
   System.out.println("Numero entero en formato hexadecimal(0x3F6A)");
   System.out.println(0x3F6A);
   System.out.println("Numero real en notacion decimal");
   System.out.println(21843.12);
   System.out.println("Numero real en notacion cientifica/7.433e6)");
   System.out.println(7.433e6);
   System.out.println("Caracter");
   System.out.println('A');
   System.out.println("Cadena de caracteres");
   System.out.println("Hola");
   System.out.println("Logico");
   System.out.println(true);
  }
}

Espero que os guste.
Atte. Alejandro.

Aqui os dejo una calculadora de porcentaje.

Aquí tenemos una calculadora para conocer una cantidad que tiene un porcentaje, solo teneneis que modificar los datos 85 y 15 y tendréis la cantidad final!!


public class CosteZapatillas {
 public static void main(String args[]) {
 //A partir de ahora haremos las operaciones necesarias para sacar el precio final
  System.out.println("El precio de las zapatillas es de 85 euros y tienen un 15% de descuento");
  System.out.println("85 - 15%85");
  System.out.println("El precio final es de: ");
  System.out.print(85 - 85 * 15 / (float) 100);
  System.out.print(" euros");
 }
}

Espero que os guste.
Atte. Alejandro

Como saber si un año es bisiesto

Os presento mi blog donde iré introduciendo toda las novedades que vallamos haciendo durante este ciclo de grado superior.
Lo primero que os traigo es un programa en Java donde yo he puesto 1912, ustedes ponéis otro año y os dirá si es bisiesto o no.


public class Bisiesto {
 
 public static void main(String args[]) {
  int year = 1912;
 
  //Se colocan paréntesis por claridad del código
  boolean div4no100 = (year % 4 == 0) && (year % 100 != 0);
  boolean div400 = (year % 400 == 0);
 
  //Bisiesto si es divisible entre 4, no entre 100 o divisible entre 400
  boolean bisiesto = div4no100 || div400;
 
  //Mostrar mensaje en pantalla
  String msgBisiesto = bisiesto ? " es bisiesto" : " no es bisiesto";
  System.out.println("El año " + year + msgBisiesto);
 }
 
}

Espero que os guste. 

Atte. ALejandro