viernes, 15 de julio de 2011

Demo Final

Aqui esta el codigo fuente de la presentacion final y la documentacion de usuario para descargar.

Documentacion de Usuario y Codigo

Proyecto. Documentacion Tecnica

Esta entrada es correspondiente a la documentacion tecnica de nuestras clases en mi caso utilice como herramienta Javadoc.


 
La liga para descargar el paquete con la documentacion es la siguiente.
Saludos (:

Proyecto. Implementacion de Pruebas Unitarias

La implementacion de Pruebas Unitarias fue algo facil ya que solo tuvimos que instalar la herramienta necesaria para poder realizar este tipo de pruebas en este caso JUnit.

El resultado arrojado mediante esta herramienta son los siguientes, aqui muestro probe todas las clases que maneja mi sistema y al parecer no arrojo error alguno.

Autogeneracion de Codigo.

Esta entrada corresponde a la comparacion de codigos entre el generado mediante el diagrama con una herramienta case y el realizado actualmente.En el mio se generaron varios codigos asi que solo mostrare 3 que me parecen los principales.
 Clase Base de Datos
CODIGO AUTOGENERADO.
import java.util.*;
/**
 * Class BaseDeDatos
 */
public class BaseDeDatos {
  //
  // Fields
  //  
  //
  // Constructors
  //
  public BaseDeDatos () { };
  //
  // Methods
  //
  //
  // Accessor methods
  //
  //
  // Other methods
  //
  /**
   */
  public void Conexion(  )
  {
  }
  /**
   */
  public void getst(  )
  {
  }
  /**
   */
  public void getCt(  )
  {
  }
} 

Bueno aqui nos manda mas metodos que no aparecen en mi codigo original, algo de similitud serian el metodo "get" que nos regresaria un valor que nos dira si la conexion es correcta. Mi codigo original es el siguiente aqui mismo cree el objeto VEliminar para mandar llamar a la clase del mismo nombre y poder eliminar el registro seleccionado de la base de datos tambien.
import java.sql.*;
import java.util.*;

public class DBManagement {

    private final static String drv ="com.mysql.jdbc.Driver";
    private final static String db = "jdbc:mysql://localhost:3306/bdlogin";
    private final static String user = "root";
    private final static String pass = "131090";

    private String contra;//
    private String usuario;//
    
    Connection ct;
    private Statement st;
    private ResultSet rs;

    public DBManagement()
    {
    try
        {
        Class.forName(drv);
        ct = DriverManager.getConnection(db, user, pass);
        st = ct.createStatement();

        System.out.println("Conexion Exitosa");
        }catch(Exception e)
        {
        System.out.println("No se Puedo conectar");
        }
    }
//constructor para extraer los datos de una tabla sql//
    public void showAll()
    {    
    try{
        ResultSet rs = st.executeQuery("SELECT * FROM Directorio");
        while(rs.next()){
  System.out.println(rs.getString(1)+"|"+ rs.getString(2)+"|"+rs.getString(3));
        }
        }catch(SQLException e){

        System.out.println(e.getMessage());
        System.out.println("Error al realizar la consulta");
    }
    }
    public void eliminarID(int IDtxt)
    {
    try
    {
        st.executeUpdate("DELETE FROM Directorio WHERE ID = "+IDtxt);
    }catch(Exception e)
    {
        System.out.println("No se pudo X_X");
    }
    }
    public Statement getst(){
     return st;
   }
} 

Otra seria la de Inicio de Sesion, aqui el usuario y la contraseña los puse establecidos ya que se me dificulto un poco poder integrar muchas partes de codigo y batalle para poder ingresar mas usuarios, asi que solo es uno por el momento.

AutoGenerado.
import java.util.*;
/**
 * Class InicioSesion
 */
public class InicioSesion {
  //
  // Fields
  //
  private String usuario;
  private String password;
  
  //
  // Constructors
  //
  public InicioSesion () { };
    //
  // Methods
  //
  //
  // Accessor methods
  //
  /**
   * Set the value of usuario
   * @param newVar the new value of usuario
   */
  private void setUsuario ( String newVar ) {
    usuario = newVar;
  }
  /**
   * Get the value of usuario
   * @return the value of usuario
   */
  private String getUsuario ( ) {
    return usuario;
  }

  /**
   * Set the value of password
   * @param newVar the new value of password
   */
  private void setPassword ( String newVar ) {
    password = newVar;
  }
  /**
   * Get the value of password
   * @return the value of password
   */
  private String getPassword ( ) {
    return password;
  }
  //
  // Other methods
  //
  /**
   */
  public void getVerificar(  )
  {
  }
  /**
   */
  public void getData_BD(  )
  {
  }
Mi codigo:
Aqui tengo mas implementacion de Interfaz Grafica y pues los atributos no cambiaron mucho seria usuario y password y  nos muestra si el usuario existe o no ya que este esta registrado en la base de datos.
import javax.swing.*;
import java.io.*;
import java.sql.*;
import java.awt.Panel.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionListener.*;

public class VentanaLogin extends JFrame implements ActionListener
{
    private JTextField txtUser, txtPass;
    private JLabel lblUser,lblPass;
    private JButton btnAceptar, btnCancelar;
    private DBManagement BaseDatos = new DBManagement(); 
    String usuario, elPassword;

    public VentanaLogin()
    {
    Container contenedor = getContentPane();
    contenedor.setLayout(new FlowLayout());
    //crear etiqueta y cuadro de texto del usuario
    txtUser = new JTextField(10);
    lblUser = new JLabel("Usuario: ");
    txtUser.setToolTipText("Escriba su nombre de usuario");
    contenedor.add(Box.createVerticalStrut(50) );
    contenedor.add(lblUser);
    contenedor.add(txtUser);
    //crear etiqueta y cuadro de texto del pw
    txtPass = new JPasswordField(10);
    lblPass = new JLabel("Contraseña: ");
    txtPass.setToolTipText("Escriba su contraseña");
    contenedor.add(lblPass);
    contenedor.add(txtPass);
    //Crear y agregar los botones
    btnAceptar = new JButton("Iniciar Sesion");
    //establecer Boton aceptar por defecto 
    getRootPane().setDefaultButton(btnAceptar);

    btnCancelar = new JButton("Cancelar");
    contenedor.add(btnAceptar);
    contenedor.add(btnCancelar);

    btnAceptar.addActionListener(this);
    btnCancelar.addActionListener(this);
    //crear un escuchador 
    
    setTitle("Iniciando");
    setSize(500,300);
    setResizable(false);
    Dimension tamFrame = this.getSize();
    Dimension tamPanalla = Toolkit.getDefaultToolkit().getScreenSize();

    setVisible(true); //Hacer visible al frame
    }
    public boolean validarUsuario(String elUser, String elPass) throws IOException
    {
try
    {
    ResultSet resultadosConsulta = BaseDatos.getst().executeQuery("SELECT*FROM usuarios WHERE usuario ='"+elUser+"' AND password='"+elPass+"'");

    if(resultadosConsulta.first())
        return true;
    else 
        return false;
    }catch (Exception e)
    {
    e.printStackTrace();
    return false;
    }
  }

public void actionPerformed(ActionEvent evt)
    {
        if(evt.getSource() == btnAceptar)
        {
            try {
                if(txtUser.getText().length() > 0 && txtPass.getText().length() > 0)
            {

            if( validarUsuario(txtUser.getText(), txtPass.getText()))
            {
                  setVisible(false);
                  JOptionPane.showMessageDialog(null, "El nombre de Usuario y/0 contrasenia son validos");
                  JOptionPane.showMessageDialog(null, txtUser.getText()+" " +txtPass.getText() );
            GUI g = new GUI();
            }
            else
             {
                  JOptionPane.showMessageDialog(null, "El nombre de Usuario y/0 contrasenia no son validos");
                  JOptionPane.showMessageDialog(null, txtUser.getText()+" " +txtPass.getText() );
                  txtUser.setText("");
                  txtPass.setText("");
                  txtUser.requestFocusInWindow();
             }
            } 
            else 
                {
                JOptionPane.showMessageDialog(null, "Debe escribir usuario y contrasena\n" + " no dejar campos vacios");
                }
            }catch(Exception e)
            {
                e.printStackTrace();
            }
        }else if(evt.getSource() == btnCancelar)
        {
            System.exit(0);
    }
    }
    public static void main(String[] args)
    {
    VentanaLogin prueba = new VentanaLogin();
    prueba.setDefaultCloseOperation(prueba.EXIT_ON_CLOSE);
    }
}

jueves, 14 de julio de 2011

Proyector. Implementacion de Sistemas Distribuidos

Para la implementacion de sistemas Distribuidos por el momento no aplica ya que solo es para un negocio personal.
Pero podria implementarse futuramente ya que podria trabajar en linea para generar las facturas electronicamente para que los clientes puedan acceder en linea. 
Como podria implementarse un sistema de seguridad, mediante un rfc unico para que toda su informacion no pueda ser alterada.
Manejar este tipo de sistema tienen la posibilidad que sus sistemas de facturación interactúen directamente con sistemas informáticos del SIN.
Tambien podria tomarse en cuenta que pueda accederse a  el con diferentes sistemas operativos.

Proyecto. Interfaz Gráfica

Aqui mostrare algunas de la interfaz grafica de mi software no fue algo muy grande ya que tuvimos poco tiempo para implementar todo, solo son las principales inicio de sesion al sistema, y mostraria el registro de clientes.

Proyecto.Implementacion de Eventos, Excepciones y Errores

Bueno esta entrada correspone a la implementacion de Eventos, Excepciones y Errores.
Implementacion de Eventos.
Bueno dentro de mi codigo identifique estos eventos creo que es importante ya que forma parte de una de mis ventanas principales en esta parte de codigo seria el manejador de eventos.Se utiliza un metodo "getSource" del evento ActionEvent para saber de que boton se produjo el evento, despues compara con cada un de los botones para ver si el evento se produjo y si esto sucede se produce una instruccion determinada.El addMenuItem lo que hace es instanciar un objeto de otra clase.
public void actionPerformed(ActionEvent ae){
    if(ae.getSource() == addMenuItem){
 VAgregar a = new VAgregar();
 this.fillTable();
    }else if(ae.getSource() == readMenuItem){
 this.fillTable();
    }else if(ae.getSource() == eliminar){
 VEliminar v2 = new  VEliminar();  
Bueno otro seria el actionPerformed es algo similar pero hay cosas en la que se diferencia, lo que se hace es checar de donde se produjo el evento, aqui en este evento tambien manejo algunas excepciones, esto seria con el try/catch, esto se hace asi para que se lanze una excepcion en caso que se presente un error al tratar de trabajar con la base de datos. Tambien se verfifico el contenido del JTextField, para checar que no este vacio, y despues me tira un mensaje de que se pudo hacer, y en el catch tambien me tira un mensaje si no se pudo completar el try.
public void actionPerformed(ActionEvent e) 
{
if(e.getSource()==Botonaceptar)
{
IDString = (campoID.getText());
if(IDString.equals("") || IDString.isEmpty()) 
{
JOptionPane.showMessageDialog(this, "ID no registrado");
}else
{
IDtxt = Integer.parseInt(IDString);
System.out.println(query);
try {
dbm.eliminarID(IDtxt);
JOptionPane.showMessageDialog(this, "Registro Eliminado");
this.setVisible(false);
}catch(Exception e1){
JOptionPane.showMessageDialog(this,"No se pudo eliminar el registro");
}
}
}else if(e.getSource() == Botoncancelar){
this.setVisible(false);
}
}  

Excepciones y Errores.
El manejo de excepciones siempre va dentro del escuchador de eventos, ya que alli es donde se ejecutan las sentencias de SQL, esta es una parte del codigo.
public void actionPerformed(ActionEvent e){
     JButton b = (JButton)e.getSource();
  
 if(b==boton_aceptar){
     c = (campocliente.getText());
t = (campotel.getText());
            d = (campodir.getText());
            l = (campoloc.getText());
          IDc = (campoIDc.getText());
  //Sentencias para pasar los valores al registro//
try{ 
 rows_updated = 0;
PreparedStatement aux = objeto_base.ct.prepareStatement("INSERT INTO Directorio(nombre,direccion,telefono,localida,ID) VALUES(?,?,?,?,?)");
   aux.setString(1,c);
   aux.setString(2,d);
   aux.setString(3,t);
   aux.setString(4,l);
   aux.setString(5,IDc);
  
   rows_updated = aux.executeUpdate();
   
     JOptionPane.showMessageDialog(this, "Registro Agregado"); 
   this.setVisible(false);  
   
     }catch(Exception ev){
   JOptionPane.showMessageDialog(this, "Error al agregar cliente");
      }
  }else if(b==botoncancelar){
      this.setVisible(false);
  }
     }
 }
try{
 ResultSet aux = dbm.getst().executeQuery("SELECT * FROM Directorio");
 while(aux.next()){
     Object[] fila = {aux.getObject(1),aux.getObject(2),aux.getObject(3),aux.getObject(4),aux.getObject(5)};
     //Ide.add((Integer)aux.getObject(5));
     dtm.addRow(fila);
     System.out.println("Cargando Tabla");    
 }
    }catch(SQLException e){
 e.printStackTrace();
 System.out.println("No Cargo");
 }