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.


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 ?


No hay comentarios:

Publicar un comentario