miércoles, 28 de diciembre de 2011

Python, ejemplos prácticos no. 2


1. Programa que acepte un año escrito en cifras arábigas y visualice el año en números romanos, dentro del rango 1000-1999
'''
autor: yo
fecha: 24 de diciembre de 2011
'''

anyo,anyo_desglosado,aux=0,0,0
romano=""

while anyo<=0 and anyo<=1999:
    anyo=int(raw_input('Introduce año:'))
    print "Año en arábigo [",anyo,"]"
    print "\nAño desglosado: "

if (anyo>=1000):
    anyo_desglosado=anyo%1000
    romano=romano+"M"
    aux=1000
    print "arábigo:",aux
   
if (anyo_desglosado>=900):
    anyo_desglosado=anyo_desglosado%900
    romano=romano+"CM"
    aux=900
    print "arábigo:",aux

if (anyo_desglosado>=800):
    anyo_desglosado=anyo_desglosado%800
    romano=romano+"DCCC"     
    aux=800
    print "arábigo:",aux

if (anyo_desglosado>=700):
    anyo_desglosado=anyo_desglosado%700
    romano=romano+"DCC"         
    aux=700
    print "arábigo:",aux

if (anyo_desglosado>=600):
    anyo_desglosado=anyo_desglosado%600
    romano=romano+"DC"            
    aux=600
    print "arábigo:",aux

if (anyo_desglosado>=500):
    anyo_desglosado=anyo_desglosado%500
    romano=romano+"D"               
    aux=500
    print "arábigo:",aux


if (anyo_desglosado>=400):
    anyo_desglosado=anyo_desglosado%400
    romano=romano+"CD"                 
    aux=400
    print "arábigo:",aux

if (anyo_desglosado>=300):
    anyo_desglosado=anyo_desglosado%300
    romano=romano+"CCC"                          
    aux=300
    print "arábigo:",aux

if (anyo_desglosado>=200):
    anyo_desglosado=anyo_desglosado%200
    romano=romano+"CC"                               
    aux=200
    print "arábigo:",aux

if (anyo_desglosado>=100):
    anyo_desglosado=anyo_desglosado%100
    romano=romano+"C"                                 
    aux=100
    print "arábigo:",aux


if (anyo_desglosado>=90):
    anyo_desglosado=anyo_desglosado%90
    romano=romano+"XC"                                 
    aux=90
    print "arábigo:",aux

if (anyo_desglosado>=80):
    anyo_desglosado=anyo_desglosado%80
    romano=romano+"LXXX"                                          
    aux=80
    print "arábigo:",aux

if (anyo_desglosado>=70):
    anyo_desglosado=anyo_desglosado%70
    romano=romano+"LXX"                                              
    aux=70
    print "arábigo:",aux

if (anyo_desglosado>=60):
    anyo_desglosado=anyo_desglosado%60
    romano=romano+"LX"                                                    
    aux=60
    print "arábigo:",aux


if (anyo_desglosado>=50):
    anyo_desglosado=anyo_desglosado%50
    romano=romano+"L"                                                       
    aux=50
    print "arábigo:",aux

if (anyo_desglosado>=40):
    anyo_desglosado=anyo_desglosado%40
    romano=romano+"XL"                                                            
    aux=40
    print "arábigo:",aux

if (anyo_desglosado>=30):
    anyo_desglosado=anyo_desglosado%30
    romano=romano+"XXX"                                                                
    aux=30
    print "arábigo:",aux

if (anyo_desglosado>=20):
    anyo_desglosado=anyo_desglosado%20
    romano=romano+"XX"                                                                
    aux=20
    print "arábigo:",aux

if (anyo_desglosado>=10):
    anyo_desglosado=anyo_desglosado%10
    romano=romano+"X"                                                                       
    aux=10
    print "arábigo:",aux

if (anyo_desglosado==9):
    anyo_desglosado=anyo_desglosado%9
    romano=romano+"IX"                                                                           
    aux=9
    print "arábigo:",aux

if (anyo_desglosado==8):
    anyo_desglosado=anyo_desglosado%8
    romano=romano+"VIII"                                                                                
    aux=8
    print "arábigo:",aux

if (anyo_desglosado==7):
    anyo_desglosado=anyo_desglosado%7
    romano=romano+"VII"                                                                                    
    aux=7
    print "arábigo:",aux

if (anyo_desglosado==6):
    anyo_desglosado=anyo_desglosado%6
    romano=romano+"VI"                                                                                        
    aux=6
    print "arábigo:",aux

if (anyo_desglosado==5):
    anyo_desglosado=anyo_desglosado%5
    romano=romano+"V"                                                                                            
    aux=5
    print "arábigo:",aux

if (anyo_desglosado==4):
    anyo_desglosado=anyo_desglosado%4
    romano=romano+"IV"                                                                                                
    aux=4
    print "arábigo:",aux

if (anyo_desglosado==3):
    anyo_desglosado=anyo_desglosado%3
    romano=romano+"III"                                                                                                   
    aux=3
    print "arábigo:",aux

if (anyo_desglosado==2):
    anyo_desglosado=anyo_desglosado%2
    romano=romano+"II"                                                                                                        
    aux=2
    print "arábigo:",aux

if (anyo_desglosado==1):
    anyo_desglosado=anyo_desglosado%1
    romano=romano+"I"                                                                                                            
    aux=1
    print "arábigo:",aux


print "\nAño en romano: ",romano


2. Obtener salario nuevo
#código Python
'''

autor: yo
fecha : viernes 9 de diciembre del 2011

'''
#función que calcula el nuevo salario --> ganancia
def obtenerGanancia(m,p):
    return m+(m*(p/100))

#función que calcula el nuevo salario --> perdida
def obtenerPerdida(m,p):
    return m-(p*(p/100))

#variables
salir="s"
monto,porcentaje=0,0
opc=0

while salir == "s":
   
    print "***************************************"
    print "[Programa que calcula el salario nuevo]"
    print "***************************************"
    print ""

    #menú
    print "1. Obtener ganancia"
    print "2. Obtener pérdida"
   
    opc=int(raw_input('Introduce opción: '))

    #obtener ganancia
    if opc==1:
        print "[Obtener ganancia]"
        monto=float(raw_input('Monto: '))
        print "$",monto,"\n"
        porcentaje=float(raw_input('Porcentaje:'))
        print porcentaje,"% \n"
        print "Ganancia: $",obtenerGanancia(monto,porcentaje)
        print ""

    #obtener pérdida
    if opc==2:
        print "[Obtener pérdida]"
        monto=float(raw_input('Monto: '))
        print "$",monto,"\n"
        porcentaje=float(raw_input('Porcentaje:'))
        print porcentaje,"% \n"
        print "Ganancia: $",obtenerPerdida(monto,porcentaje)
        print ""

    else:
        print "opción inválida"

   
    salir=raw_input('Desea hacer otra operación? (s/n):')
    print ""

    if salir=="n":
        print "adios"

lunes, 26 de diciembre de 2011

Tarot básico en Python

 Aqui el código escrito en Python para calcular tu carta del tarot.

def obtenerArcano(arc):
    if arc==1:
        return "El Mago"
    if arc==2:
        return "La Papisa"
    if arc==3:
        return "La Emperatriz"
    if arc==4:
        return "El Emperador"
    if arc==5:
        return "El Papa"
    if arc==6:
        return "El Enamorado"
    if arc==7:
        return "El Carro"
    if arc==8:
        return "La Justicia"
    if arc==9:
        return "El Ermitaño"
    if arc==10:
        return "La Rueda"
    if arc==11:
        return "La Fuerza"
    if arc==12:
        return "El Colgado"
    if arc==13:
        return "La Muerte"
    if arc==14:
        return "La Templanza"
    if arc==15:
        return "El Diablo"
    if arc==16:
        return "La Torre"
    if arc==17:
        return "La Estrella"
    if arc==18:
        return "La Luna"
    if arc==19:
        return "El Sol"
    if arc==20:
        return "El Juicio"
    if arc==21:
        return "El Mundo"
    if arc==22:
        return "El Loco"



dia_nac=0
mes_nac=""
anyo_nuevo=0
aux=0
suma,i=0,0
cadena=""
sumaTotal=0


dia_nac=int(raw_input('Dia de nacimiento:'))
mes_nac=raw_input('Mes de nacimiento:')
anyo_nuevo=int(raw_input('Año nuevo:'))

print "Datos leidos:\n"
print "\tDía de nacimiento ||  Mes de nacimiento  || Año nuevo que empieza"
print "\t",dia_nac,"             || ",mes_nac,"            || ",anyo_nuevo
print ""

if mes_nac=="diciembre":
    aux=12
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
  
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)
  
  
  

if mes_nac=="noviembre":
    aux=11
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="octubre":
    aux=10
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="septiembre":
    aux=9
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])

  
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="agosto":
    aux=8
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])

    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="julio":
    aux=7
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])

  
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="junio":
    aux=6
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="mayo":
    aux=5
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])

    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="abril":
    aux=4
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="marzo":
    aux=3
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])

    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if
mes_nac=="febrero":
    aux=2
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

if mes_nac=="enero":
    aux=1
    suma=dia_nac+aux+anyo_nuevo
    print "Suma [",suma,"]"
    cadena=str(suma)
    print "Cadena: [",cadena,"]"
    print list(cadena)
    for i in range(len(cadena)):
        sumaTotal=sumaTotal+int(cadena[i])
      
    print "Número: ",sumaTotal
    print "Te corresponde el signo del ",obtenerArcano(sumaTotal)

domingo, 18 de diciembre de 2011

JavaServer Faces: ejemplos básicos



JavaServer Faces

Es una framework (ya tiene varios años que apareció) que nos permite crear aplicaciones web muy parecidas a las de escritorio. JSF trabaja en base a eventos (algo parecido a Swing), mientras que JSP en base a petición(es)/respuesta(s).
Existen otras variantes como:
  1. RichFaces
  2. PrimeFaces
  3. OpenFaces
  4. IceFaces
  5. MyFaces

Enlaces

OpenFaces
http://openfaces.org/documentation/developersGuide/index.html
http://openfaces.org/demo/overview/homepage.jsf
RichFaces
http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html_single/
http://livedemo.exadel.com/richfaces-demo/index.jsp
PrimeFaces
http://www.primefaces.org/documentation.html
http://www.primefaces.org/showcase/ui/home.jsf
IceFaces
http://www.icefaces.org/main/resources/
http://www.icefaces.org/main/demos/
MyFaces
http://myfaces.apache.org/docindex.html
Cada una de ellas con diversos componentes muy útiles. Hace algunos meses decidi dejar de usar JSP y probar JSF. No me arrepiento. Creo que ahora escribo código más limpio y legible.

EL: Expression Language

Es un lenguaje especial que nos permite acceder directamente a las propiedades o métodos de los beans desde el código de las páginas (jsp y/o xhtml).
Ejemplo
<h3>
#{"Este es un ejemplo"}</h3>
La salida seria:

Este es un ejemplo

Otro ejemplo
23+64= #{23+65}
La salida seria: 23+64=87
En fin, se pueden realizar todas las operaciones aritméticas y lógicas al igual que en JSP.

ManagedBean

Algo parecido a los Servlets, es una clase java que recibe peticiones y procesa resultados de las páginas web.

Faces config

Es un documento xml en el cual defines los beans de tu aplicación. También defines las "reglas de navegación"entre tus páginas . Es importante tenerlo para saber que página debe mostrarse de acuerdo al suceso/evento que la invoca.
Bueno, ahora un ejemplo sencillo.
1. Crear una aplicación que genere un número aleatorio, y que el usuario trate de adivinarlo.
Primero creo el Bean
 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.primefaces.ejemplos; import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import java.util.Random;
/**
 *
 *  */

@ManagedBean
@RequestScoped
public class RandomBean {
    private int numero;
 
 
     /** Creates a new instance of RandomBean */
    public RandomBean() {
    }
    /**
     * @return the numero
     */

    public int getNumero() {
        return numero;
    }
    /**
     * @param numero the numero to set
     */

    public void setNumero(int numero) {
        this.numero = numero;
    }
 
     public String ir_calculo(){
      return "calculo02";
    }
 
     public int obtenerNumero(){
      return (int)(Math.random()*100);
     }
 
 
 
}
Ahora el formulario entrada.xhtml
 <h2>Generar número aleatorio</h2>
<h:form>
    <h:panelGrid>
 
        <h:outputLabel value="#{msgs.titulo4}"></h:outputLabel>
        <h:inputText value="#{randomBean.numero}"></h:inputText>
       <h:commandButton action="#{randomBean.ir_calculo()}" value="adivinar" />
    </h:panelGrid>
 
 
</h:form>    
Aqui se muestran los valores datos.xhtml
 <h2>Datos obtenidos</h2>
<h:form>
    <h:panelGrid>
        <h:outputLabel value="#{msgs.titulo5}"></h:outputLabel>
        <h:outputLabel value="#{randomBean.numero}"></h:outputLabel>
        <h:outputLabel value="#{msgs.titulo6}"></h:outputLabel>
        <h:outputText value="#{randomBean.obtenerNumero()}"></h:outputText>
     
        <!-- aqui hago la comparación-->
   
      <h:outputLabel value="#{msgs.titulo7}"></h:outputLabel>
         <h:outputLabel value="#{randomBean.numero==randomBean.obtenerNumero() ?'Correcto':'Incorrecto'}">
              </h:outputLabel>
     
   
   
    </h:panelGrid>
</h:form>
     
     
    <h:outputLink value="http://localhost:8080/pruebaPrimeFaces/faces/index.xhtml"><h:outputText value="Regreso"/></h:outputLink>
El faces-config.xml
<?xml version='1.0' encoding='UTF-8'?> <!-- =========== FULL CONFIGURATION FILE ================================== -->
<faces-config version="2.0"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee <a href="http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<navigation-rule>
" title="http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<navigation-rule>
">http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<navigatio...</a>        <from-view-id>*</from-view-id>
        <navigation-case>
            <from-outcome>calculo02</from-outcome>
            <to-view-id>/datos.xhtml</to-view-id>
        </navigation-case>
        </navigation-rule>
<managed-bean>
        <managed-bean-name>RandomBean</managed-bean-name>
        <managed-bean-class>org.primefaces.ejemplos.RandomBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
</faces-config>

martes, 13 de diciembre de 2011

Ejemplo de uso de MySQL: una pequeña bitácora




Tener una bitácora nos ayuda a tener un mejor control de nuestra información:

  • ver quien hace cambios por “error”
  • ver la fecha
  • tipo de operación (inserción, actualización y/o borrado)


Bueno he aquí los pasos para crear una pequeña bitácora


1. Crear la base de datos

create database prueba1;
show databases;
use prueba1;

2. Crear una tabla llamadas personas

create table personas (id_persona int auto_increment primary key, nombre varchar (50), apellido_p varchar (50), apellido_m varchar(50), edad int, peso double, talla double);

3. Crear un procedimiento almacenado para insertar registros


DELIMITER $$
DROP PROCEDURE IF EXISTS `prueba1`.`Insertar` $$
CREATE PROCEDURE `prueba1`.`Insertar`(in nombre varchar (50), apellido_p varchar (50), apellido_m varchar(50), edad int, peso double, talla double)

BEGIN
INSERT INTO personas (nombre,apellido_p, apellido_m , edad , peso , talla) VALUES (nombre,apellido_p, apellido_m , edad , peso , talla );

END $$

DELIMITER ;



4. Crear un procedimiento almacenado para actualizar registros

DELIMITER $$
DROP PROCEDURE IF EXISTS `prueba1`.`Actualizar` $$
CREATE PROCEDURE `prueba1`.`Actualizar` (in id_personax int,edadx int,pesox double)
BEGIN
update personas set edad=edadx,peso=pesox where id_persona=id_personax;
END $$

DELIMITER ;



5. Crear un procedimiento almacenado para eliminar registros


DELIMITER $$

DROP PROCEDURE IF EXISTS `prueba1`.`Borrar` $$
CREATE PROCEDURE `prueba1`.`Borrar` (in id int)
BEGIN
delete from personas where id_persona=id;
END $$

DELIMITER ;


6. Invocar los procedimientos almacenados

Call Insertar (‘Horacio’,’Gomez’,’Carmona’,25,65,1.68);
Call Insertar (‘Hugo’,’Torres’,’Mendez’,32,67,1.70);
Call Actualizar (1, 26, 66);
Call Borrar (2)

Ver registros

Select * from personas;

7. Crear un procedimiento almacenado que muestre todos los registros

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_verPersonas` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_verPersonas`()
select *from personas $$

DELIMITER ;


Para invocarlo

Call sp_verPersonas();




8. Crear tabla que lleve un control de quien hace cambios en la base de datos prueba1

CREATE TABLE infobase (usuario varchar (50), descripcion varchar (50),
fecha TIMESTAMP default now());


9. Crear trigger para la inserción

delimiter $$

create trigger tr_insercion
befote insert on personas
for each row
begin
insert into infobase values(user(),’persona creada’,now());

end $$


10. Crear trigger para la actualización

delimiter $$

create trigger tr_actualizacion
befote update on personas
for each row
begin
insert into infobase(usuario,descripcion,fecha) values(user(),’persona modificada’,now());

end $$


11. Crear trigger para la eliminación

delimiter $$

create trigger tr_borrado
befote delete on personas
for each row
begin
insert into infobase values(user(),’persona eliminada’,now());

end $$


Ver cambios

Select *from infobase;


12. Crear procedimiento almacenado para ver un registro en particular

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_verPersona` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_verPersona`(in id_buscar int)
select *from personas where id_persona=id_buscar $$

DELIMITER ;

13. Ahora hacer una operación: calcular el I.M.C. (Índice de Masa Corporal) de las personas registradas

Fórmula: peso/(talla*talla)

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_verImc` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_verImc`()
select id_persona,nombre,edad,peso,talla,peso/(talla*talla) from personas $$

DELIMITER ;


14. Programa en Java para ver los registros
package control.pruebas;

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;

public class Codemonkey {


public static void main(String[] args) {
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conecta=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/prueba1","root","root");
System.out.println("Conexión exitosa\n");
Statement sentencia= conecta.createStatement();
ResultSet registro=sentencia.executeQuery("select id_persona,nombre,edad,peso,talla,peso/(talla*talla) from personas");
while(registro.next()){
System.out.println("\t\nId: "+registro.getInt("id_persona"));
System.out.println("Nombre: "+registro.getString("nombre"));
System.out.println("Edad:"+registro.getInt("edad"));
System.out.println("Peso:"+registro.getDouble("peso"));
System.out.println("Talla: "+registro.getDouble("talla"));
System.out.println("IMC: "+registro.getDouble("peso/(talla*talla)"));
}
conecta.close();
System.out.println("\nConexión cerrada");
}catch(Exception ex){
ex.printStackTrace();
}

}


}