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)
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:
- RichFaces
- PrimeFaces
- OpenFaces
- IceFaces
- MyFaces
Enlaces
OpenFaceshttp://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>
#{"Este es un ejemplo"}</h3>
Este es un ejemplo
Otro ejemplo23+64= #{23+65}
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);
}
}
* 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);
}
}
<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>
<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>
<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>
<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>
<?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>
<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 de la operación,
- 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("\tConexió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("\tConexión cerrada"); }catch(Exception ex){ ex.printStackTrace(); } } }
Enlaces:
https://dev.mysql.com/doc/refman/8.4/en/create-procedure.htmlviernes, 25 de noviembre de 2011
TDD… ejemplos básicos
Es una técnica de programación que emplea pruebas unitarias y refactorización de código.
El ciclo de vida de TDD comprende tres etapas
- Escribir una prueba que falle (rojo)
- Escribir una prueba que pase (verde)
- Refactorización, mejorar el código sin afectar su funcionamiento interno
Problema. Obtener el número de pulsaciones de una persona con 15 segundos de ejercitación.
Entrada: edad de la persona
Salida: número de pulsaciones
Restricciones o casos posibles:
- la edad no debe ser cero o un valor negativo,
- un valor flotante (ej. 4.5)
- o un carácter.
Fórmula. Num_pulsaciones = (220 – edad)/15
El primer paso es crear una prueba que falle, existen libros sobre TDD y Refactorización que indican la forma realizar los test, pero bien lo trataré de hacer según mi entendimiento.
PulsacionTest. Java
@Test
public void testObtenerPulsaciones() {
Pulsacion pulsacion = new Pulsacion();
System.out.println("obtenerPulsaciones: entero positivo");
int edad = 26;
double expResult = 12.0;
assertEquals(expResult, pulsacion.obtenerPulsaciones(edad), 0.0);
}
Obvio es que falle (no tengo que probar). Ahora el segundo paso es crear el código necesario (Pulsacion.java) para pasar la prueba.
//Código inicial
Pulsacion.java
public double obtenerPulsaciones(int edad){
return (220-edad)/15;
}
Listo pasa la primer prueba (valor entero no negativo). Ahora otro problema, es necesario realizar pruebas para los tres casos posibles (valor cero o negativo, valor flotante, o carácter).
Para ahorrar líneas de código defino “pulsación” como un atributo de la clase PulsacionTest.java para que sea accesible para los demás métodos.
He aquí el código aplicando TDD y un poco de Refactorización.
PulsacionTest. Java
Pulsacion pulsacion = new Pulsacion();
//para un valor entero no negativo
@Test
public void testObtenerPulsaciones() {
System.out.println("obtenerPulsaciones: entero positivo");
int edad = 26;
double expResult = 12.0;
assertEquals(expResult, pulsacion.obtenerPulsaciones(edad), 0.0);
}
// para un valor cero o negativo
@Test
public void testObtenerPulsacionesNegativoCero(){
System.out.println("obtenenerPulsaciones: cero o negativo");
int edad_neg=-26;
double expResult1=14.0;
assertEquals(expResult1, pulsacion.obtenerPulsaciones(edad_neg), 0.0);
}
// para un valor flotante
@Test
public void testObtenerPulsacionesReal(){
System.out.println("obtenenerPulsaciones: real");
double edad_real=26.0;
double expResult2=12.0;
assertEquals(expResult2, pulsacion.obtenerPulsaciones((int)edad_real), 0.0);
}
//para un carácter
@Test
public void testObtenerPulsacionesCaracter(){
System.out.println("obtenenerPulsaciones: caracter");
String edad_cad="26";
double expResult3=12.0;
assertEquals(expResult3, pulsacion.obtenerPulsaciones(Integer.parseInt(edad_cad)), 0.0);
}
En este método se podría agregar otro método que compruebe si la cadena introducida es numérica o no.
public bolean esNumerico (String cad){
try{
Integer.parseInt (cad);
return true;
}catch(NumberFormatException ex){
return false;}
}
//Código final
Pulsacion.java
public double obtenerPulsaciones(int edad){
if((int)edad<=0){
return (220-0)/15;
}
else if((int)edad>0){
return (220-(int)edad)/15;
}
else{
return (220-edad)/15;
}
}
Suscribirse a:
Comentarios (Atom)
Criptomonedas explicadas de manera sencilla (o casi)
En una entrega anterior dimos un vistazo a lo que son las criptomonedas . Las cual es: Una entidad NO FÍSICA basada en blockchain q...
-
Ionic es un framework que permite crear aplicaciones móviles híbridas. Éstas aplicaciones son las que emplean tecnologías como HTML, CSS ...
-
En una anterior entrega dimos un vistazo a esProc SPL , un lenguaje orientado al tratamiento y almancenamiento de datos. Peculiarida...
-
Progress ABL es un lenguaje de programación vinculado al entorno Progress OpenEdge , su base de datos y las utilidades que lo rodean. Es s...
Etiquetas
- .NET
- 100
- abl
- abstract
- abstractas
- activemq
- ada
- agile
- akka
- algoritmos
- almacenados
- alternativa
- android
- angular
- angularjs
- apache
- apache-camel
- apache-mesos
- apache-poi
- apex
- api
- appserv
- aprender
- aprender java
- aprender jsf
- aprender python
- aprendizaje
- area
- args
- aserciones
- asm
- asp
- assembly
- assert
- automatización
- awk
- aws
- ayuda
- azure
- backend
- ballerina
- base de datos
- bases de datos
- bash
- bat
- bd
- beam
- bigquery
- biotipo
- bitacora
- bitcoin
- bleam
- blockchain
- blog
- bq
- bucket
- bundle
- c
- c#
- c++
- calculadora
- calculo
- camel
- case
- cassandra
- celsius
- ceylon
- cgi
- charp
- charts
- chatgpt
- cherrypy
- chino
- cibersecurity
- clases
- cli
- cliente
- clojure
- closures
- cloud
- cmd
- cmd.bat
- coalesce
- cobol
- codeblocks
- codeigniter
- codes
- código
- códigos
- comando
- comandos
- commit
- comparativa
- compartir
- compilador
- compile
- composer
- comprobación
- computación
- computing
- conceptos
- concurnas
- concurrente
- condicionales
- conectividad
- configuration
- consejos
- const
- constantes
- consultas
- contenedores
- contenedores web
- control de versiones
- conversion
- conversor
- convertidor
- copilot
- core
- couchdb
- cpan
- cplus
- cpp
- cpp-httplib
- crear
- cripto
- criptomoneda
- crow
- CrowdStrike
- crystal
- csharp
- cshtml
- css
- css3
- csv
- curso
- d
- dancer2
- dapper
- datastage
- datos
- deepseek
- delphi
- deploy
- desarrollo
- determinar
- dev c++
- developer
- devops
- días
- directivas
- disparejo
- distribuido
- django
- dlang
- doc
- docker
- docker-swarm
- dockerfile
- document
- documentación
- dotnet
- driver
- dsl
- dylan
- easyphp
- eclipse
- eclipse y scala
- economica
- editor
- eip
- ejb
- ejecutar
- ejemplos
- ejemplos cpp
- ejemplos de csharp
- ejemplos de scala
- ejemplos java
- ejemplos python
- ejmeplo
- elixir
- elixir.
- en línea
- encapsulación
- ensamblador
- entityframework
- enum
- erlang
- error
- errores
- es6
- escribir
- esproc
- esprocsqpl
- estructuras
- ethereum
- euler
- excel
- excepciones
- expando
- export
- externa
- f#
- faces
- fahrenheit
- feliz año
- fetch
- filosofía
- firebase
- flask
- foreach
- framework
- fsharp
- funcional
- funciones
- functions
- futuro
- gcc
- gcp
- geany
- gem
- gemfile
- generador de proyectos
- genie
- gestor de proyectos
- github
- glassfish
- gleam
- gnu
- go
- golang
- google web toolkit
- gosu
- gradle
- grapes
- graven
- grok
- grooscript
- groovy
- groovyeConsole
- grpc
- gson
- gui
- gwt
- gwtext
- hashicorp
- hashmap
- haskell
- haxe
- headers
- helm
- herencia
- hibernate
- hola
- hola en ceylon
- horoscopo
- HTA
- html
- html5
- http
- http-server
- ia
- iaas
- iac
- ibm
- IDE
- ide scala
- if
- ifnull
- imagen
- imc
- import
- importar
- ingeniería
- iniciar glassfish
- iniciar tomcat
- inicio
- inicio en ceylon
- IntelliJ IDEA pycharm
- interface
- interfaces
- interfaz
- interna
- interoperabilidad
- interprete
- interview
- inversión de control
- inyección de dependencias
- ionic
- ios
- jabaco
- java
- java swing
- java y ceylon
- JAVA_HOME
- javadoc
- javascript
- javaserver
- jaxb
- jdbc
- jdbi
- jdk
- jdk8
- jpa
- jpql
- jquery
- jre
- jruby
- jscript
- jsf
- jsni
- json
- juego
- julia
- jvm
- jvm y ceylon
- jython
- k8s
- kafka
- kanban
- katas
- kate
- koltin
- kotlin
- ktor
- kubectl
- kubernetes
- la path
- langchain
- laravel
- learn
- lectura
- lenguaje
- lenguaje scala
- lenguajes
- let
- leyes
- librería
- libro
- linq
- linux
- list
- lista
- listas
- livescript
- llm
- lua
- macro
- major
- mapas
- mariadb
- maven
- maven y eclipse
- mensajería
- mensajes
- menú
- mercurial
- messagebox
- metaClass
- microsoft
- mix
- mobile
- modularidad
- módulo
- mojo
- mojolicious
- mongo
- mongodb
- mono
- monodevelop
- moonbit
- ms-dos
- mu
- mvc
- mybatis
- mysql
- n8n
- neo4j
- netbeans
- nexus
- ng
- nicon notify
- nimrod
- node
- nodejs
- nomad
- nosql
- notificaciones
- npm
- nube
- nuevo
- nuget
- nullable
- nullif
- numericas
- ocaml
- okhttp3
- ollama
- online
- opendylan
- openedge
- operaciones
- oracel
- oracle
- orientación a objetos
- orm
- otp
- owasp
- paas
- paas iaas
- package
- packages
- padrino
- paradigma
- pascal
- path groovy
- path java
- patrones de diseño
- pdf-parser
- perl
- phoenix
- php
- pl/1
- plot
- plsql
- pom.xml.build.gradle
- poo
- powershell
- pregunta
- problema
- problemas al ejecutar programa en ceylon
- procedimientos
- procedures
- programa
- programacion
- programación
- programador
- programadores
- programar
- programas
- programas java
- programming
- progress
- proyectos maven
- prueba
- pseint
- pubsub
- pulsaciones
- pyramid
- python
- pyzenity
- questions
- r
- rabbitmq
- reactiva
- rebar3
- record
- recursos
- regex
- regiones
- remix
- repl
- replace
- repositorios
- REST
- reverse
- romanos
- ruby
- run
- rust
- ruta
- saas
- sanic
- sap
- sas
- sbt
- scala
- scottplot
- scripting
- scripts
- scrum
- sdkman
- security
- semántica
- sentencias
- servidor
- shell
- show
- simplej
- sinatra
- sintaxis
- sitios
- slim
- sms
- smslib
- solidity
- solución
- spark
- spl
- spring
- spring framework
- spring-boot
- spyder
- sql
- standard
- storage
- stored
- strawberry
- struts
- style
- svn
- swagger
- swift
- symfony
- system
- tapestry
- tarot
- tdd
- técnicas
- terminal
- terraform
- the maven integration requires that eclipse be running in a jdk
- tiempo
- tips
- tomcat
- top-down
- tornadoweb
- tratamiento xml
- triggers
- turbogears
- tutoriales
- type
- typescript
- udf
- unitarias
- unsupported
- usar jdk
- uso
- uwamp
- variables
- vba
- vbscript
- ventanas
- verificar
- version
- version_52.0
- versiones
- vertx
- vibecoding
- videojuegos
- vistazo
- visual code
- visual csharp
- visual studio
- vscode
- wampserver
- web
- web2pybottle
- webapi
- websocket
- window
- windows
- windows-services
- wisp
- work-services
- xampp
- xml
- xunit
- yaml
- youtube
- zenity
Archivo del blog
-
►
2025
(76)
- ► septiembre (7)
-
►
2024
(58)
- ► septiembre (1)
-
►
2023
(12)
- ► septiembre (1)
-
►
2022
(10)
- ► septiembre (1)
-
►
2021
(26)
- ► septiembre (1)
-
►
2020
(9)
- ► septiembre (2)
-
►
2019
(26)
- ► septiembre (3)
-
►
2015
(24)
- ► septiembre (4)
-
►
2014
(36)
- ► septiembre (1)
-
►
2013
(40)
- ► septiembre (5)
-
►
2012
(46)
- ► septiembre (3)




