Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

Code Army Bolivia
Mostrando entradas con la etiqueta Codigo Fuente. Mostrar todas las entradas
Mostrando entradas con la etiqueta Codigo Fuente. Mostrar todas las entradas

20/11/11

Envio de datos de Applets a PHP

JAN29

En este tutorial aprenderemos a enviar datos desde Applets Java hacia un servidor con PHP mediante POST y esperar una respuesta para mostrar desde el Applet.

¿Que necesitamos?

  • IDE Netbeans 6.9 o Sup
  • Conocimientos de PHP
  • Para las pruebas un servidor web instalado en el equipo

Proyecto.
1.- Crea un nuevo proyecto en Netbeans (nombre= jpFormulario) sin el main, es un applet asi que no necesita de eso, añade un Formulario JApplet (nombre=interfaz.java) y un archivo de clase (nombre=formulario.java), debes tener algo como esto:

2. A nuestra clase interfaz, debemos añadirle objetos y formar un simple formulario, este formulario tendra 4 campos para el nombre, apellido paterno, materno y el correo electronico, ademas de un boton y un JTextArea donde colocaremos la respuesta del servidor. En la imagen de abajo puedes ver lo que queremos lograr, los campos marcados con punto rojo, son donde debes tener cuidado, debes colocar el mismo nombre que se ve, es importante
3. Ahora debemos crear el codigo de envio de formulario, para esto debemos agregar a la clase formulario.java el siguiente codigo:

CLASE: formulario.java

01 package jpFormulario;
02 import java.io.BufferedReader;
03 import java.io.IOException;
04 import java.io.InputStreamReader;
05 import java.io.OutputStreamWriter;
06 import java.net.URL;
07 import java.net.URLConnection;
08 import java.net.URLEncoder;
09 /**
10  * @web http://jc-mouse.blogspot.com/
11  * @author Mouse
12  */
13 public class formulario {
14 
15         /* FUNCION PARA ENVIAR LOS DATOS AL SERVIDOR */
16     public String enviardatos(String name, String app, String apm, String mail)
17     {
18         try {
19             //se forma la cadena con los datos a enviar
20             String dataString ="name="+name+"&app="+app+"&apm="+apm+"&mail="+mail;
21             URLEncoder.encode(dataString, "UTF-8");
22             // Send data
23             URL url = new URL("http://localhost/japplet/jpFormulario/index.php");
24             URLConnection conn = url.openConnection();
25             conn.setDoOutput(true);
26             OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
27             wr.write(dataString);
28             wr.flush();
29             //se obtiene la respuesta del servidor
30             BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
31             String linea, tmp = "";
32              while (( linea = rd.readLine()) != null)
33                  tmp+=linea;
34             //se da un formato de salida al texto
35             tmp = formato(tmp);
36             wr.close();
37             rd.close();
38 
39             return tmp;
40         } catch (IOException ex) {
41             return "";
42         }
43     }
44 
45     /* funcion que dada una cadena de forma:
46      * texto-texto-texto....
47      * separa con un guion, la separa y devuelve
48      * en lineas
49      */
50     private String formato(String tmp)
51     {
52        int j = 0;
53        String [] r = tmp.split("-");
54        tmp="";
55        while(j<r.length){
56            tmp+=r[j]+"\n";
57            j++;
58        }
59        return tmp;
60     }
61 
62 }

Explicación:

La clase se reduce a una función enviardatos(), que necesita como parametros los datos a enviar (nombre, apellidos y email) y que devuelve como resultado un String, este estring puede ser cualquier cosa que especifiquemos en el codigo PHP, este lo veremos mas adelante.

En la linea 20: formamos lo que sera nuestra cadena de datos muy similar a lo que hacemos en javascript y ajax.

En la linea 23: debemos colocar la ruta absluta del archivo PHP al que queremos conectarnos, recuerda que un applet se ejecuta desde en la PC del cliente y el PHP desde el servidor, esta linea debe tener la forma de:


http://www.mipaginaweb.net/carpeta/micodigo.php

El resto de codigo que le continua es para abrir la conexion, mandar los datos y esperar respuesta.

desde la linea 30 podemos ver como se obtiene la respuesta, esta sera un string al cual ya podemos dar el uso que queramos.

Para este ejemplo recibimos una cadena de tipo "texto-texto-texto...." los datos como se observa estan separados por guiones, entonces utilizando el split() formamos un array, damos formato y mostramos al usuario mediante el JTextArea, esto no tiene nada que ver con el envio de datos y solo se lo hace para tener algo más presentable al usuario, bien podriamos esperar un 1 o 0 como respuesta del servidor y mostrar una venta de aviso.

4. Para terminar el applet debemos implementar esta clase en la clase interfaz.java. Si seguiste las instrucciones de arriba, solamente deberas añadir al JButton el siguiente codigo:


01  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
02         formulario f = new formulario();
03         RESPUESTA.setText(
04                 f.enviardatos(name.getText(), app.getText(), apm.getText(), mail.getText())
05         );
06     }    

Explicación: Creamos una instancia de la clase formulario.java y al objeto jTextArea, asignaremos la funcion enviardatos() con los datos que obtendremos de los campos del formulario, como la respuesta que obtendremos es un String, esta la mostraremos directamente en el JTextArea.

5. Nos falta el codigo de nuestro archivo PHP, este es:

PHP: index.php

01 <?php
02  //comprobamos que los datos POST existen y fueron recibidos correctamente
03  if( isset($_POST['name']) and isset($_POST['app'])  
04        and isset($_POST['apm'])  and isset($_POST['mail'])  )
05  {
06    //se colocan los datos en  variables
07    $name = $_POST['name'];
08    $app = $_POST['app'];
09    $apm = $_POST['apm'];
10    $mail = $_POST['mail'];
11    //con los datos que nos pasa el applet ya pdemos proseguir con el registro en la BD
12    // [ interaccion con la base de datos ]
13    // ....
14    //despues podemos devolver un mensaje al usuario
15    $guion="-";
16    echo 'GRACIAS POR REGISTRARTE'.$guion;
17    echo 'Nombre: '.$name.$guion;
18    echo 'Ap. Paterno:'.$app.$guion;
19    echo 'Ap. Materno:'.$apm.$guion;
20    echo 'Mail:'.$mail.$guion;
21    echo $guion;
22    echo 'FIN';
23  }
24  else
25  {
26   echo "Error: No existen datos";
27  }
28 ?> 

Para los que conocen PHP se daran cuenta de que el archivo no hace mas que esperar unos parametros POST, estos paramatros los asiga a unas variables y ya desde aqui podemos tratar los datos como más nos convenga, si no existen datos POST, el archivo devuelve una cadena de error "Error: No existen datos", para el ejemplo de este tutorial, no manejamos base de datos para facilitar las cosas, asi que el archivo se reduce a obtener los datos POST, formar una cadena de respuesta y escribir esta con la sentencia ECHO, a que es igual a ajax :/

IMPORTANTE: este archivo PHP debe estar en un servidor web junto al applet o no, ya es cuestion de gustos. Si ejecutamos la aplicación desde el netbeans, no necesitamos de un archivo html, el appletviewer nos muestra el resultado.
Si lo implementamos desde un servidor web necesitamos crear un archivo HTML que nos implemente el applet.

Puedes ver como queda todo desde este video

El proyecto esta aqui:
Click para descargar

enjoy

continue reading

17/4/11

Convertir números a letras en java (Tipo Factura, cheque, recibo)

JAN29

Cuando se realizan trabajos donde se necesita mostrar al cliente un determinado monto de dinero, tipo factura, recibo, cheque, etc, el cliente desea ver el monto en numeral asi como en literal.

Por ejemplo:

877866,50 = ochocientos setenta y siete mil ochocientos sesenta y seis 50/100 Bolivianos

Pues bien, la siguiente clase a la que llame Numero_a_Letra.java realiza justamente esa operacion, esta extracomentada y trate de hacerla lo mas entendible posible.

La logica que se utliza es la siguiente:

La clase recibe un numero ej. 123456789,50
valida este numero, si el numero no es valido devuelve NULL
Si el numero es valido segun sea este unidad, decena, centena, mil o millon,  va clasificando el numero y llama a sus procedimientos correspondientes, estas funciones, son utilizadas en cascada, osea:
nuestro numero de ejemplo es 123456789,50, entonces separa en 123456789 y 50, siendo 50 nuestra parte decimal.

El  numero entero, 123456789 es clasificado = es millon, entonces llama a la funcion getMillones, esta funcion a la vez divide el numero en miles y millones
123456789 = 123 456789 donde 123 corresponde a millones y 456789 a miles
entonces la misma funcion llama a las funciones getMiles, getCentenas, getUnidades, segun corresponda, al igual que la funcion getMiles, hace uso de getCentenas, getDecenas getUnidades, lo mismo getCentenas, hace uso de getDececas, getUnidades.

Espero se entienda :)


import java.util.regex.Pattern;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class Numero_a_Letra {

    private final String[] UNIDADES = {"", "un ", "dos ", "tres ", "cuatro ", "cinco ", "seis ", "siete ", "ocho ", "nueve "};
    private final String[] DECENAS = {"diez ", "once ", "doce ", "trece ", "catorce ", "quince ", "dieciseis ",
        "diecisiete ", "dieciocho ", "diecinueve", "veinte ", "treinta ", "cuarenta ",
        "cincuenta ", "sesenta ", "setenta ", "ochenta ", "noventa "};
    private final String[] CENTENAS = {"", "ciento ", "doscientos ", "trecientos ", "cuatrocientos ", "quinientos ", "seiscientos ",
        "setecientos ", "ochocientos ", "novecientos "};

   public Numero_a_Letra() {
   }

    public String Convertir(String numero, boolean mayusculas) {
        String literal = "";
        String parte_decimal;    
        //si el numero utiliza (.) en lugar de (,) -> se reemplaza
        numero = numero.replace(".", ",");
        //si el numero no tiene parte decimal, se le agrega ,00
        if(numero.indexOf(",")==-1){
            numero = numero + ",00";
        }
        //se valida formato de entrada -> 0,00 y 999 999 999,00
        if (Pattern.matches("\\d{1,9},\\d{1,2}", numero)) {
            //se divide el numero 0000000,00 -> entero y decimal
            String Num[] = numero.split(",");            
            //de da formato al numero decimal
            parte_decimal = Num[1] + "/100 Bolivianos.";
            //se convierte el numero a literal
            if (Integer.parseInt(Num[0]) == 0) {//si el valor es cero
                literal = "cero ";
            } else if (Integer.parseInt(Num[0]) > 999999) {//si es millon
                literal = getMillones(Num[0]);
            } else if (Integer.parseInt(Num[0]) > 999) {//si es miles
                literal = getMiles(Num[0]);
            } else if (Integer.parseInt(Num[0]) > 99) {//si es centena
                literal = getCentenas(Num[0]);
            } else if (Integer.parseInt(Num[0]) > 9) {//si es decena
                literal = getDecenas(Num[0]);
            } else {//sino unidades -> 9
                literal = getUnidades(Num[0]);
            }
            //devuelve el resultado en mayusculas o minusculas
            if (mayusculas) {
                return (literal + parte_decimal).toUpperCase();
            } else {
                return (literal + parte_decimal);
            }
        } else {//error, no se puede convertir
            return literal = null;
        }
    }

    /* funciones para convertir los numeros a literales */

    private String getUnidades(String numero) {// 1 - 9
        //si tuviera algun 0 antes se lo quita -> 09 = 9 o 009=9
        String num = numero.substring(numero.length() - 1);
        return UNIDADES[Integer.parseInt(num)];
    }

    private String getDecenas(String num) {// 99                        
        int n = Integer.parseInt(num);
        if (n < 10) {//para casos como -> 01 - 09
            return getUnidades(num);
        } else if (n > 19) {//para 20...99
            String u = getUnidades(num);
            if (u.equals("")) { //para 20,30,40,50,60,70,80,90
                return DECENAS[Integer.parseInt(num.substring(0, 1)) + 8];
            } else {
                return DECENAS[Integer.parseInt(num.substring(0, 1)) + 8] + "y " + u;
            }
        } else {//numeros entre 11 y 19
            return DECENAS[n - 10];
        }
    }

    private String getCentenas(String num) {// 999 o 099
        if( Integer.parseInt(num)>99 ){//es centena
            if (Integer.parseInt(num) == 100) {//caso especial
                return " cien ";
            } else {
                 return CENTENAS[Integer.parseInt(num.substring(0, 1))] + getDecenas(num.substring(1));
            } 
        }else{//por Ej. 099 
            //se quita el 0 antes de convertir a decenas
            return getDecenas(Integer.parseInt(num)+"");            
        }        
    }

    private String getMiles(String numero) {// 999 999
        //obtiene las centenas
        String c = numero.substring(numero.length() - 3);
        //obtiene los miles
        String m = numero.substring(0, numero.length() - 3);
        String n="";
        //se comprueba que miles tenga valor entero
        if (Integer.parseInt(m) > 0) {
            n = getCentenas(m);           
            return n + "mil " + getCentenas(c);
        } else {
            return "" + getCentenas(c);
        }

    }

    private String getMillones(String numero) { //000 000 000        
        //se obtiene los miles
        String miles = numero.substring(numero.length() - 6);
        //se obtiene los millones
        String millon = numero.substring(0, numero.length() - 6);
        String n = "";
        if(millon.length()>1){
            n = getCentenas(millon) + "millones ";
        }else{
            n = getUnidades(millon) + "millon ";
        }
        return n + getMiles(miles);        
    }
}

Esta clase, recibe  un numero de 0,00 a 999999999.00 en formato String, el separador decimal puede ser un punto (.) o una coma (,), ademas tiene un parametro booleano "mayusculas" el cual sea verdadero (true) o falso (false), retorna el resultado en mayusculas o minusculas, esta clase no acepta numeros negativos ni tampoco numero mayores o iguales a mil millones, aunque claro trate de escribir esta clase para que sea facilmente comprensible y asi pueda ser ampliado o modificado segun sus necesidades.

La forma de llamara a esta clase es:

Numero_a_Letra NumLetra = new Numero_a_Letra();
String numero = "20004.70";
System.out.println( numero  + " literal = "  + NumLetra.Convertir(numero,true));
y probando para un rango mayor de numeros tenemos como resultado:


352822,50 literal = TRECIENTOS CINCUENTA Y DOS MIL OCHOCIENTOS VEINTE Y DOS 50/100 BOLIVIANOS.
370,50 literal = trecientos setenta 50/100 Bolivianos.
74883,50 literal = SETENTA Y CUATRO MIL OCHOCIENTOS OCHENTA Y TRES 50/100 BOLIVIANOS.
354801,50 literal = trecientos cincuenta y cuatro mil ochocientos un 50/100 Bolivianos.
12,50 literal = DOCE 50/100 BOLIVIANOS.
511812060,50 literal = QUINIENTOS ONCE MILLONES OCHOCIENTOS DOCE MIL SESENTA 50/100 BOLIVIANOS.
285364,50 literal = doscientos ochenta y cinco mil trecientos sesenta y cuatro 50/100 Bolivianos.
97,50 literal = NOVENTA Y SIETE 50/100 BOLIVIANOS.
882,50 literal = OCHOCIENTOS OCHENTA Y DOS 50/100 BOLIVIANOS.
28,50 literal = VEINTE Y OCHO 50/100 BOLIVIANOS.
395362869,50 literal = TRECIENTOS NOVENTA Y CINCO MILLONES TRECIENTOS SESENTA Y DOS MIL OCHOCIENTOS SESENTA Y NUEVE 50/100 BOLIVIANOS.
687611,50 literal = SEISCIENTOS OCHENTA Y SIETE MIL SEISCIENTOS ONCE 50/100 BOLIVIANOS.
46,50 literal = CUARENTA Y SEIS 50/100 BOLIVIANOS.
394625,50 literal = trecientos noventa y cuatro mil seiscientos veinte y cinco 50/100 Bolivianos.
686671871,50 literal = seiscientos ochenta y seis millones seiscientos setenta y un mil ochocientos setenta y un 50/100 Bolivianos.
860233047,50 literal = OCHOCIENTOS SESENTA MILLONES DOSCIENTOS TREINTA Y TRES MIL CUARENTA Y SIETE 50/100 BOLIVIANOS.
656477159,50 literal = SEISCIENTOS CINCUENTA Y SEIS MILLONES CUATROCIENTOS SETENTA Y SIETE MIL CIENTO CINCUENTA Y NUEVE 50/100 BOLIVIANOS.
99037,50 literal = NOVENTA Y NUEVE MIL TREINTA Y SIETE 50/100 BOLIVIANOS.
159180,50 literal = ciento cincuenta y nueve mil ciento ochenta 50/100 Bolivianos.
69993,50 literal = SESENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y TRES 50/100 BOLIVIANOS.
76,50 literal = setenta y seis 50/100 Bolivianos.
74,50 literal = setenta y cuatro 50/100 Bolivianos.
4,50 literal = cuatro 50/100 Bolivianos.
572356,50 literal = QUINIENTOS SETENTA Y DOS MIL TRECIENTOS CINCUENTA Y SEIS 50/100 BOLIVIANOS.
85,50 literal = OCHENTA Y CINCO 50/100 BOLIVIANOS.
678977004,50 literal = seiscientos setenta y ocho millones novecientos setenta y siete mil cuatro 50/100 Bolivianos.
311275,50 literal = TRECIENTOS ONCE MIL DOSCIENTOS SETENTA Y CINCO 50/100 BOLIVIANOS.
888,50 literal = OCHOCIENTOS OCHENTA Y OCHO 50/100 BOLIVIANOS.
861740125,50 literal = OCHOCIENTOS SESENTA Y UN MILLONES SETECIENTOS CUARENTA MIL CIENTO VEINTE Y CINCO 50/100 BOLIVIANOS.
370246,50 literal = trecientos setenta mil doscientos cuarenta y seis 50/100 Bolivianos.
986444,50 literal = novecientos ochenta y seis mil cuatrocientos cuarenta y cuatro 50/100 Bolivianos.
202,50 literal = DOSCIENTOS DOS 50/100 BOLIVIANOS.
407295,50 literal = CUATROCIENTOS SIETE MIL DOSCIENTOS NOVENTA Y CINCO 50/100 BOLIVIANOS.
522,50 literal = QUINIENTOS VEINTE Y DOS 50/100 BOLIVIANOS.
378878653,50 literal = TRECIENTOS SETENTA Y OCHO MILLONES OCHOCIENTOS SETENTA Y OCHO MIL SEISCIENTOS CINCUENTA Y TRES 50/100 BOLIVIANOS.
712142,50 literal = SETECIENTOS DOCE MIL CIENTO CUARENTA Y DOS 50/100 BOLIVIANOS.
588737075,50 literal = QUINIENTOS OCHENTA Y OCHO MILLONES SETECIENTOS TREINTA Y SIETE MIL SETENTA Y CINCO 50/100 BOLIVIANOS.
946540,50 literal = novecientos cuarenta y seis mil quinientos cuarenta 50/100 Bolivianos.
34667457,50 literal = treinta y cuatro millones seiscientos sesenta y siete mil cuatrocientos cincuenta y siete 50/100 Bolivianos.
391874,50 literal = trecientos noventa y un mil ochocientos setenta y cuatro 50/100 Bolivianos.
745,50 literal = SETECIENTOS CUARENTA Y CINCO 50/100 BOLIVIANOS.
670024,50 literal = seiscientos setenta mil veinte y cuatro 50/100 Bolivianos.
703029,50 literal = setecientos tres mil veinte y nueve 50/100 Bolivianos.
745,50 literal = setecientos cuarenta y cinco 50/100 Bolivianos.
975415558,50 literal = NOVECIENTOS SETENTA Y CINCO MILLONES CUATROCIENTOS QUINCE MIL QUINIENTOS CINCUENTA Y OCHO 50/100 BOLIVIANOS.
294,50 literal = DOSCIENTOS NOVENTA Y CUATRO 50/100 BOLIVIANOS.
559794,50 literal = quinientos cincuenta y nueve mil setecientos noventa y cuatro 50/100 Bolivianos.
23,50 literal = veinte y tres 50/100 Bolivianos.
586335,50 literal = QUINIENTOS OCHENTA Y SEIS MIL TRECIENTOS TREINTA Y CINCO 50/100 BOLIVIANOS.
14174901,50 literal = catorce millones ciento setenta y cuatro mil novecientos un 50/100 Bolivianos.
529551002,50 literal = quinientos veinte y nueve millones quinientos cincuenta y un mil dos 50/100 Bolivianos.
930,50 literal = NOVECIENTOS TREINTA 50/100 BOLIVIANOS.
581617,50 literal = quinientos ochenta y un mil seiscientos diecisiete 50/100 Bolivianos.
44,50 literal = CUARENTA Y CUATRO 50/100 BOLIVIANOS.
727302804,50 literal = SETECIENTOS VEINTE Y SIETE MILLONES TRECIENTOS DOS MIL OCHOCIENTOS CUATRO 50/100 BOLIVIANOS.
66,50 literal = SESENTA Y SEIS 50/100 BOLIVIANOS.
34618398,50 literal = TREINTA Y CUATRO MILLONES SEISCIENTOS DIECIOCHO MIL TRECIENTOS NOVENTA Y OCHO 50/100 BOLIVIANOS.
477354079,50 literal = CUATROCIENTOS SETENTA Y SIETE MILLONES TRECIENTOS CINCUENTA Y CUATRO MIL SETENTA Y NUEVE 50/100 BOLIVIANOS.
813,50 literal = OCHOCIENTOS TRECE 50/100 BOLIVIANOS.
634888270,50 literal = SEISCIENTOS TREINTA Y CUATRO MILLONES OCHOCIENTOS OCHENTA Y OCHO MIL DOSCIENTOS SETENTA 50/100 BOLIVIANOS.
219544,50 literal = DOSCIENTOS DIECINUEVEMIL QUINIENTOS CUARENTA Y CUATRO 50/100 BOLIVIANOS.
51,50 literal = cincuenta y un 50/100 Bolivianos.
435640,50 literal = CUATROCIENTOS TREINTA Y CINCO MIL SEISCIENTOS CUARENTA 50/100 BOLIVIANOS.
557896,50 literal = quinientos cincuenta y siete mil ochocientos noventa y seis 50/100 Bolivianos.
36,50 literal = TREINTA Y SEIS 50/100 BOLIVIANOS.
710,50 literal = SETECIENTOS DIEZ 50/100 BOLIVIANOS.
850,50 literal = OCHOCIENTOS CINCUENTA 50/100 BOLIVIANOS.
230498844,50 literal = doscientos treinta millones cuatrocientos noventa y ocho mil ochocientos cuarenta y cuatro 50/100 Bolivianos.
104296,50 literal = ciento cuatro mil doscientos noventa y seis 50/100 Bolivianos.
1,50 literal = UN 50/100 BOLIVIANOS.
-0100100,70 literal = null
003,70 literal = tres 70/100 Bolivianos.
28,745 literal = null
0,5 literal = CERO 5/100 BOLIVIANOS.
999999999 literal = NOVECIENTOS NOVENTA Y NUEVE MILLONES NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE 00/100 BOLIVIANOS.
9999999999 literal = null
48803770 literal = cuarenta y ocho millones ochocientos tres mil setecientos setenta 00/100 Bolivianos.
20004.70 literal = VEINTE MIL CUATRO 70/100 BOLIVIANOS.

el Codigo del proyecto en Netbeans 6.9
Click para descargar

Si se encuentra algun error porfavor avisar

continue reading

10/4/11

Ejercicio Resuelto: Clase Fecha

JAN29

El problema dice asi: 

"Crear la clase Fecha que tenga como atributos día, mes y año, en el constructor se debe validar que la fecha ingresada sea la correcta. Si la fecha ingresada es incorrecta colocar datos de tal manera que sea correcta. Además crear los métodos diaSiguiente, de tal manera que nos devuelva la fecha del día siguiente y diaAnterior que nos devuelva la fecha del día anterior."

¿Que tenemos que hacer?
  • Validar que la fecha sea la correcta
  • Crear el método diaSiguiente
  • Crear el método diaAnterior
Coloquemos algunas reglas:
  • El formato de entrada de la fecha sera "dd/mm/yyyy"
  • Solo se permiten fechas entre 1900 y 2100 ¿porque? porque no :)
  • Si la fecha que se introduce es incorrecta o no se encuentra entre el rango establecido, devolvera "25/10/2010" el dia que nacio mi perro, coloco esta fecha porque el problema no indica que tratamiento darle a una fecha erronea.
La clase se llamara jcFecha


import java.util.regex.Pattern;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class jcFecha {
    private int dia=25;
    private int mes=10;
    private int anio=2005;

    //formato fecha dd/mm/yyyy
    public jcFecha(String f){
        validarfecha(f);
    }

    //hace lo que su nombre dice que hace :?
    private void validarfecha(String f){
        boolean ok=false;
        //valida formato        
        if(Pattern.matches("\\d{1,2}/\\d{1,2}/\\d{1,4}", f)){
            //divide la fecha en dia, mes,año
            String[] ff = f.split("/");
            //valida año -> solo años entre 1900 y 2100
            anio = Integer.parseInt(ff[2]);
            if(anio>=1900 && anio<=2100){
                //valida mes -> 1 a 12
                mes = Integer.parseInt(ff[1]);
                if(mes>=1 && mes<=12){
                    //valida dia entre 1 y la cantidad de dias que tenga ese mes (incluido año bisiesto )
                    dia = Integer.parseInt(ff[0]);
                    if(dia>=1 && dia<=cantidad_dias(mes,anio)){
                        ok=true;
                    }
                }
            }
        }
        //si fecha no es valida o no cumple con las reglas anteriores
        //la fecha devolvera 25/10/2005 EL CUMPLE DE MI PERRO :)
        if(!ok){
            dia=25;
            mes=10;
            anio=2005;
        }       
    }

    public int getDia(){
        return this.dia;
    }

    public int getMes(){
        return this.mes;
    }

    public int getAnio(){
        return this.anio;
    }

    public String getFecha(){
        return  dia + "/" + mes + "/" + anio;
    }

    //metodo publico que devuelve la fecha + un dia
    public String diaSiguiente(){
        //si dias se encuentra entre el rango (1  - dia - (ultimo_dia-1)) se añade un dia
        //mes y anio se dejan como esta
        if(dia < cantidad_dias(mes,anio)){
            dia++;
        }else{//sino se debe añadir +1 al mes
            //si no es diciembre se añade +1 al mes, anio se deja como esta
            if(mes < 12){
                mes++;
                dia=1;
            }else{//si es diciembre, se pasa al año siguiente
                anio++;
                mes=1;
                dia=1;
            }
        }
        return dia + "/" + mes + "/" + anio;
    }

    /* devuelve la cantidad de dias de un mes  dado mes y año */
    private int cantidad_dias(int m, int y){
        int d =0;
        switch(m) {
            case 1: case 3: case 5: case 7: case 10: case 12: case 8:
              d=31; break;
        case 2:
            if ((y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0)))
                d=29;
            else
                d=28;
            break;
        case 4: case 6: case 9: case 11:
               d=30; break;
        }
        return d;
    }

}

Y ahora debemos probar nuestra clase jcFecha:


public class Main {       
    public static void main(String[] args) {
        //se crea el objeto jcFecha
        jcFecha jc = new jcFecha("12/12/2001");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //fecha correcta
        jc = new jcFecha("30/11/2011");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //Fecha correcta -> año bisiesto
        jc = new jcFecha("28/2/2000");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //Fecha correcta -> Año no bisiesto
        jc = new jcFecha("28/2/2002");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //fecha incorrecta
        jc = new jcFecha("01/aa/2011");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //fecha incorrecta
        jc = new jcFecha("01/10/11");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
        System.out.println();

        //Fecha correcta -> fecha fuera de rango
        jc = new jcFecha("10/5/1789");
        System.out.println("Fecha: " + jc.getFecha());
        System.out.println("next day: " + jc.diaSiguiente());
    }
}


Resultado en consola
Y ahora se preguntaran y donde #@Mmrrr esta el metodo DiaAnterior?????, pues no voy a hacer toda su tarea :) , solo tienen que modificar un poco el metodo diaSiguiente y listo

continue reading

Post recomendado