jueves, 24 de marzo de 2011

[TALLER] Implementación de proyectos individuales

En esta entrada, explicare la función de mi programa a estas alturas, despues de un tiempo logre que funcionara, aunque para esta ocación, he modificado un poco el diseño para que funcione adecuadamente, ya que aún falta código.

Bueno, para empezar queria comentar que mi programa puede funcionar solo con la clase "Database", que es la que se encarga de conectar la base de datos, ya que la mayoria de las clases son solo para acomodar la información de una manera más organizada, por lo que necesita más código y tiempo, sin embargo utilizar la consola me ahorra ese codigo y mi programa sigue igual de funcional.



En esta imagen se muestra la ruta de mi programa, como pueden ver es un .jar, una ventaja de tener un .jar es que no necesita una orden específica, solo es correr el ejecutable y ya.



Como muestra la imagen antrior, la primer función de este programa es buscar un usuario y contraseña para acceder a los datos, el programa compara los strings dados por el usuario con la columna ya designada, puesto que el nombre de usuario es un número único, solo habra una coincidencia.

Lo siguiente sera comparar el string de contraseña, que para esto deberá esta en la misma fila que el nombre de usuario.


Seleccionamos un día de la semana que aparece en el programa y lo introducimos, lo siguiente sera seleccionar el horario de la materia. Se supone que esto es respetando minusculas y mayusculas, pero por alguna razón aveces no es necesario hacer esto, podemos introducir el dia y el horario sin respetar mayusculas.


Se puede observar que se ven todos los datos al dar enter, y despues pide si queremos repetir el proceso,
utilizando un while, una variable booleana y un switch logré hacer esto.

Aqui esta el código utilizado para este programa:

package Organidatabase;

import java.io.Console;
import java.io.IOException;

import javax.swing.UIManager;

public class Main {

 public static void main(String[] args) throws IOException{
  
  boolean selec=true;
  
  Console terminal = System.console();
        if (terminal==null ) {
            System.err.println("No puedo obtener la consola.");
            return;
        }
        
  Database db = new Database();
  String mat = new String (terminal.readLine("Ingresar Usuario: "));
  String pass= new String (terminal.readPassword("Ingresar contraseña: "));
  
  while(selec == true|| selec ==true){
   db.showAll(mat, pass);
   System.out.print("¿Desea ver otra materia?(S/N): ");
   char sel= (char) System.in.read();
   
    switch(sel) {
    case 's': 
     selec = true;
        break;
        
    case 'S':
     selec=true;
     break;
    
    default:
     selec = false;
        break;
   }
   
   
  }
 }
 
}
package Organidatabase;

import java.sql.*;
import java.util.Scanner;

public class Database {
 
 Alias a = new Alias();
 
 String aux;
 String aux2;
 
 PreparedStatement stmt = null;
 ResultSet rs=null;
 
 public final static String drv ="com.mysql.jdbc.Driver";
 public final static String db ="jdbc:mysql://localhost:3306/Organischema";
 public final static String user ="???";
 public final static String pword="???";
 
 Connection ct;
 public Statement st;

 public String dayselection;
 public String subselection;
 
 public Database(){
  try{
   Class.forName(drv);
   ct =DriverManager.getConnection(db, user, pword);
   st =ct.createStatement();
   System.out.println("Conección exitosa.");
  }catch(Exception e){
   System.out.println("No se pudo conectar a la base de datos.");
  }
 }
 
 public void showAll(String matt, String pass) {
  String dia = new String();
  Scanner a = new Scanner(System.in);
  System.out.println("Introduzca un dia (Lu, Ma, Mi, Ju, Vi, Sa): ");
  dia = a.next();
  dayselection = dia;
  try{
   do{
    stmt = ct.prepareStatement("SELECT * FROM Alumnos, "+dia+" WHERE  Alumnos.idAlumnos = ? AND Alumnos.idPass = ? AND Alumnos.idAlumnos = "+dia+".idAlumnos");
    /*String matt = a.next();
    String pass = a.next();*/
    stmt.setString(1,matt);
    stmt.setString(2, pass);
    rs = stmt.executeQuery();
    if(rs.next()){
     System.out.println("Seleccione Horario: ");
     String sub = a.next();
     System.out.println(rs.getString(sub));
     subselection=rs.getString(sub);
     fill_data();
     rs.close();
    }
    else{
     System.out.print("Error");
     rs.close();
    }
   }while(rs.isClosed()==false);
  }catch(Exception e){
   System.out.println("No se pudo realizar la consulta.");
  }
 }
 
 public void fill_data(){
  try{
   stmt = ct.prepareStatement("SELECT * FROM "+subselection+", "+dayselection+" WHERE "+dayselection+".idAlumnos = "+subselection+".idAlumnos");
   rs = stmt.executeQuery();
   while(rs.next()){
    for(int i=2; i<=9; i++){
     a.phrs(i);
     if(rs.getString(i) == null){
      System.out.println("Sin Datos");
     }
     else{
      System.out.println(rs.getString(i));
     }
    }

   }
  }catch(SQLException i){
   i.printStackTrace();
  }
 }
 
 public Statement getSt(){
  return st;
 }

}
Las palabras como "Profesor" o "Calificación" son distintos alias, esto quiere decir que los nombres de las columnas en la base de datos tienen nombres cortos, y con una clase temporal logre colocar estos alias a base de condiciones.
package Organidatabase;

import java.util.*;

public class Alias {
 Database d;
 int dia;
 public Alias(){
  
 }
 
 public void phrs(final int a){
  
  if(a==2)
   System.out.print("Profesor: ");
  if(a==3)
   System.out.print("Examen 1: ");
  if(a==4)
   System.out.print("Examen 2: ");
  if(a==5)
   System.out.print("Faltas: ");
  if(a==6)
   System.out.print("Tareas: ");
  if(a==7)
   System.out.print("Tareas no cumplidas: ");
  if(a==8)
   System.out.print("Total de tareas: ");
  if(a==9)
   System.out.print("Promedio: ");
 }

 public int day(){
  final Calendar calendario = Calendar.getInstance();
  dia =calendario.get(Calendar.DAY_OF_WEEK);
  return dia;
 }
 

}
Esta clase temporal vendria sustituyendo las clases que ya tenia planteadas, ya que lo unico que se supone que harían es mostrar información en una interfaz grafica y acomodarla.
Aqui hay un video demostrando el funcionamiento del programa:

4 comentarios:

Cecilia Urbina dijo...

Hola Victor, te recomiendo que subas el código que hace que muestres eso en pantalla, ya que así no se ve mucho si la implementación la hiciste en verdad OO siguiendo los diagramas, entonces aunque no los expliques en vídeo solo sube el código al blog ;D
SALUDOS

Cecilia Urbina dijo...

Ahora si :D

Víctor Briones dijo...

jeje, tuve un problema con el syntaxhighlighter, si no me avisas asi lo dejo XD

Elisa dijo...

Bien, Cecy +1, Vic 8+1. Yo esperaría ver algo más OO también, o sea, que al leer la base de datos se crean objetos Profesor, Clase, Examen etc. y que luego esos tengan métodos tipo toString() para imprimirse.

Publicar un comentario