Bienvenida

Como todo en la vida, la innovación es la clave del éxito por lo que nos hemos visto en la necesidad de "evolucionar" este blog para abarcar muchos otros temas que estaban quedando de lado en nuestros cursos "oficiales".

Si deseas aprender o profundizar algunos temas en particular, no dudes en contactarnos.


jueves, 28 de marzo de 2013

Android : Scanner de medios

Al desarrollar aplicaciones que requieren mostrar la galería de imagenes es preciso "copiar" (o hacer push ) de archivos hacia el emulador para poder efectuar las pruebas. 

Sin embargo, me ha ocurrido que sale un mensaje de error en el Android Debug Monitor :



En primera cuenta, olvidé crear el emulador con una SDCard. Para ello, en el Editor del AVD, debe indicarse explícitamente el uso de una SDCard como en la figura:

Luego nos damos con la sorpresa que el scanner de medios está desactivado por defecto ( dado que consume recursos ). Entonces, se debe activar manualmente ( por lo menos en la version Jelly Bean ).

Para activarlo se ingresa a la aplicación que dice "Dev Tools".








Luego se presiona el botón de Scan SD Card:


Cuando termina el proceso aparece en la pantalla la ruta :

Esa es la ruta donde se debe copiar los archivos para hacer las pruebas:


En este caso, copiamos 4 archivos de ejemplo ( pueden ser otros archivos ):


Y finalmente, podemos acceder a la galería:


¡ Hasta la próxima !

sábado, 9 de marzo de 2013

Solución al "casito" de Programación

Bien, he aquí "una" de las  soluciones: obviamente no hay 2 personas que piensen igual por lo tanto los algoritmos pueden variar, pero el resultado debería ser el mismo.

La pregunta #1 es sencilla:
Codificaremos  la interface:


package com.ejemplo.jdbc;

import java.util.List;

public interface AlumnoIF {

public List<AlumnoDTO> calculaPromedio();

public void calculaPromedioCuartil_x_Sexo(float rango1, float rango2, String sexo);

public void calculaPromedioCuartil(float rango1, float rango2);

}


Luego necesitamos un DTO llamado "AlumnoDTO" :


package com.ejemplo.jdbc;

import java.io.Serializable;

public class AlumnoDTO implements Serializable {
private int id;
private String nombre;
private float ep;
private float ta;
private float pc;
private float promedio;

No olvidarse de generar lo getter/setter.

La pregunta #2 implica generar un DAO con la lógica de cada  método definido en la interface:


package com.ejemplo.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class AlumnoDAO implements AlumnoIF {
private final String url = "jdbc:mysql://localhost:3306/1416examenfinal?user=root&password=mysql";
public Connection getConnection() {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection(url);
} catch ( Exception e) {
System.out.println("* * * Ocurrio un ERROR " + e.getLocalizedMessage() );
e.printStackTrace();
}
return con;
}

Para calcular el promedio :

public List<AlumnoDTO> calculaPromedio() {
Connection con = getConnection();
String sql = "SELECT * FROM TBALUMNOS ORDER BY ID";
List<AlumnoDTO> lista = new ArrayList<AlumnoDTO>();
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// Borrar tabla
String sql0 = "DELETE FROM TBRPTA";
pstmt = con.prepareStatement(sql0);
pstmt.executeUpdate();
pstmt = con.prepareStatement(sql);
rs  = pstmt.executeQuery();
while ( rs.next() ) {
String sql2 = "INSERT INTO TBRPTA VALUES(?,?,?,?,?,?,?)";
pstmt = con.prepareStatement(sql2);
pstmt.setInt(1, rs.getInt(1) );
pstmt.setString(2, rs.getString(2) );
pstmt.setFloat(3, rs.getFloat(3) );
pstmt.setFloat(4, rs.getFloat(4) );

float pc1 = rs.getFloat(5);
float pc2 = rs.getFloat(6);
float pcMayor = 0;
if ( pc1 > pc2) {
pstmt.setFloat(5, pc1 );
pcMayor = pc1;
} else {
pstmt.setFloat(5, pc2 );
pcMayor = pc2;
}
float promedio = (float) (rs.getFloat(3) *0.3 + rs.getFloat(4) *0.4 + pcMayor *0.3);
pstmt.setFloat(6, promedio );
pstmt.setString(7, rs.getString(7).trim() );
pstmt.executeUpdate();

}

// Leer los resultados
String sql1 = "SELECT * FROM TBRPTA ORDER BY PROMEDIO ASC";
pstmt = con.prepareStatement(sql1);
rs  = pstmt.executeQuery();
while ( rs.next() ) {
AlumnoDTO a = new AlumnoDTO();
a.setId( rs.getInt(1) );
a.setNombre( rs.getString(2) );
a.setEp( rs.getFloat(3) );
a.setTa( rs.getFloat(4) ) ;
a.setPc( rs.getFloat(5) ) ;
a.setPromedio(rs.getFloat(6));
lista.add(a);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
pstmt.close();
rs.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return lista;
}

Para calcular el promedio por Cuartil :

public void calculaPromedioCuartil(float rango1, float rango2) {
Connection con = getConnection();
String sql = "SELECT promedio FROM TBRPTA WHERE promedio > ? AND promedio <= ?";
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = con.prepareStatement(sql);
pstmt.setFloat(1, rango1);
pstmt.setFloat(2, rango2);
rs  = pstmt.executeQuery();
int contador = 0;
float suma = 0;
while ( rs.next() ) {
contador = contador + 1;
suma = suma + rs.getFloat(1);
}

System.out.println("CUARTIL : de " + rango1 + " a " + rango2 +  " --> " + (suma/contador) ) ;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
pstmt.close();
rs.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Y para calcular el promedio por cuartil y sexo:

public void calculaPromedioCuartil_x_Sexo(float rango1, float rango2, String sexo) {
Connection con = getConnection();
String sql = "SELECT promedio FROM TBRPTA WHERE promedio > ? AND promedio <= ? AND sexo = ? ";
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = con.prepareStatement(sql);
pstmt.setFloat(1, rango1);
pstmt.setFloat(2, rango2);
pstmt.setString(3, sexo);
rs  = pstmt.executeQuery();
int contador = 0;
float suma = 0;
while ( rs.next() ) {
contador = contador + 1;
suma = suma + rs.getFloat(1);
}

System.out.println("CUARTIL : de " + rango1 + " a " + rango2 + " Sexo : " + sexo + " --> " + (suma/contador) ) ;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
pstmt.close();
rs.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

La pregunta #3 implica crear el programa principal :

package com.ejemplo.pregunta02;

import java.util.List;

import com.ejemplo.jdbc.AlumnoDAO;
import com.ejemplo.jdbc.AlumnoDTO;
import com.ejemplo.jdbc.AlumnoIF;

public class Respuesta02 {

public static void main(String[] args) {
Respuesta02 r02 = new Respuesta02();
r02.calcula();
}
public void calcula() {
AlumnoIF dao = new AlumnoDAO();
List<AlumnoDTO> l = dao.calculaPromedio();
for (int i=0; i < l.size(); i++) {
System.out.println( l.get(i).getId() + "\t " + l.get(i).getNombre() + "\t " + l.get(i).getPc() + "\t" + l.get(i).getPromedio() );
}
// Promedio x Cuartiles
System.out.println("===> Primer Cuadro <====");
dao.calculaPromedioCuartil(0F, 25.00F);
dao.calculaPromedioCuartil(25.01F, 50.00F);
dao.calculaPromedioCuartil(50.01F, 75.00F);
dao.calculaPromedioCuartil(75.01F, 100.00F);
System.out.println("");

// Promedio x Cuartiles x Sexo
System.out.println("===> Segundo Cuadro <====");
dao.calculaPromedioCuartil_x_Sexo(0F, 25.00F,"H");
dao.calculaPromedioCuartil_x_Sexo(0F, 25.00F,"F");
dao.calculaPromedioCuartil_x_Sexo(25.01F, 50.00F,"H");
dao.calculaPromedioCuartil_x_Sexo(25.01F, 50.00F,"F");
dao.calculaPromedioCuartil_x_Sexo(50.01F, 75.00F,"H");
dao.calculaPromedioCuartil_x_Sexo(50.01F, 75.00F,"F");
dao.calculaPromedioCuartil_x_Sexo(75.01F, 100.00F,"H");
dao.calculaPromedioCuartil_x_Sexo(75.01F, 100.00F,"F");

}

}

Al ejecutar este programa salen todos los datos necesarios para llenar los cuadros.

¿ Fácil ?


jueves, 7 de marzo de 2013

Un "casito" de Programación

Este es un caso de programación completo sobre Java básico y JDBC.

El caso consta de 3 preguntas:

PREGUNTA #1
Generar un proyecto Java usando Eclipse IDE o NetBeans y codificar la siguiente Interface:






public interface AlumnoIF {

       public List<AlumnoDTO> calculaPromedio();

public void calculaPromedioCuartil_x_Sexo(float rango1, float rango2, String sexo);

public void calculaPromedioCuartil(float rango1, float rango2);

}


Tener en cuenta que no se pueden crear más métodos en la Interface.

Restaurar la base de datos con el siguiente script de MySQL :  base.sql


PREGUNTA #2:


Generar  una Clase Java llamada “AlumnoDAO”  que implemente la interface definida en la pregunta anterior. Puede adicionar un único método para obtener la conexión a la base de datos.

Implemente el método “calculaPromedio” de la interface para que:
a)     Lea los datos de cada alumno y elimine la nota de Prácticas más baja ( entre PC1 y PC2 )
b)     Luego debe calcular el promedio de cada alumno teniendo en cuenta que los pesos son: EP ( 30% ) , EF ( 30% )  y PC (40%)
c)     DEBE insertar los resultados en la tabla auxiliar llamada TBRPTA con la estructura siguiente:


Implemente el método “calculaPromedioCuartil” de la interface con cuya información puede llenar el cuadro (a) de la pregunta 3. NO puede usar funciones agregadas de SQL.

Implemente el método “calculaPromedioCuartil_x_Sexo” de la interface con cuya información puede llenar el cuadro (b) de la pregunta 3. NO puede usar funciones agregadas de SQL.

Para asegurarnos que usted ha solucionado esta pregunta correctamente,  desarrolle un programa MAIN ( Respuesta02.java ) que  invoque a los métodos implementados y además muestre en consola el listado de alumnos con sus promedios  ordenados de menor  a mayor.

PREGUNTA #3
Completar la información de los siguientes cuadros:

a)     Indique la nota promedio de cada CUARTIL
CUARTIL
PROMEDIO
CUARTIL 1 : de 00.0 a 25.00

CUARTIL 2 : de 25.01 a 50.00

CUARTIL 3 : de 50.01 a 75.00

CUARTIL 4 : de 75.01 a 100.00


b)     Indique el promedio de nota para Hombres y Mujeres en cada Cuartil:
CUARTIL
PROMEDIO “H”
PROMEDIO “M”
CUARTIL 1 : de 00.0 a 25.00


CUARTIL 2 : de 25.01 a 50.00


CUARTIL 3 : de 50.01 a 75.00


CUARTIL 4 : de 75.01 a 100.00



c)     Indique el ID, nombre y promedio del peor alumno de la clase
ID
Nombre
PROMEDIO






¡ Publica tus respuestas !