Bienvenida

Slide

sábado, 9 de enero de 2010

INFORME

CODIGO FUENTE PARTE 2 persona.java


import java.io.Serializable;
public class Persona implements Serializable {

private String name;
private String tel;
private String dir;

public Persona(String name,String tel,String dir){

this.name=name;
this.tel=tel;
this.dir=dir;
}

public String getName() {
return name;
}

public String getTel() {
return tel;
}

public String getDir() {
return dir;
}

public void setName(String name) {
this.name = name;
}

public void setTel(String tel) {
this.tel = tel;
}

public void setDir(String dir) {
this.dir = dir;
}
}

Como podemos ver el uso de archivos es muy importante para poder implementar y desarrollar un codigo mas robusto y eficiente para almacenar datos, e inclusive si se busca codigos ya mas estructurados, el uso de BSD es mas importante, ya que con ello se podra manejar de mejor manera el almacenamiento de datos,

Saludos...

Nomina.java Parte 2

En esta parte del codigo se encuentran las funciones que se hacen llamadas segun sea ingresado la opcion desde teclado, en el menu
principal.


En cada linea siguiente del codigo se hace una referencia corta del significado del codigo implementado.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JOptionPane;


public class nomina {

public ArrayListp;
public Scanner key1;
public nomina(){

p=new ArrayList();

}

public void addPersona(Persona o){
p.add(o);
}

// Metodo para la carga de datos desde un archivo en el dico duro
//throws IOException

public void load() throws IOException {

try {
//metodo que prepara el archivo para la lectura
FileReader file_in=new FileReader("lista.txt");
//Scanner es el encargado de leerlo y pasarlo a un tipo de dato Persona
Scanner key=new Scanner(file_in);

for(;;){
String cad=key1.nextLine();
String[] aux=cad.split("-");
Persona p=new Persona(aux[0],aux[1],aux[2]);
addPersona(p);
}

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void save() throws IOException{

try {
//creacion de un archivo
File a=new File("lista.txt");
a.delete();

a.createNewFile();

//FileWriter es una funcion que permite la escritura en el archivo lista.txt
//False=sobrescritura de los datos almacenados
FileWriter file_write=new FileWriter("lista.txt",false);
//manda los bytes a un buffer para ser puestos en el archivo
PrintWriter pw=new PrintWriter(file_write);
for(Persona m:p){
String cad=m.getName()+"-"+m.getTel()+"-"+m.getDir();
pw.println(cad);
JOptionPane.showMessageDialog(null,"Guardado con exito! ...");
}
file_write.flush();//garantiza que todo se escriba en el archivo
file_write.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void imprimir(){
for(Persona m:p){
JOptionPane.showMessageDialog(null, m.getName()+" "+m.getTel()+" "+m.getDir());
}
}

}

CODIGO FUENTE PARTE 1 aplicacion.java

Este codigo se compone de tres clases, la clase nomina y la clase empleado.
Pues bien como se ha mencionado en entradas anteriores, es necesario saber implementar un codigo que almacene datos, claro cuando sea necesario no todo sera necesario, como vimos el video anterior, podemos apreciar de mejor manera como se va almacenando datos segun la entrada que se escriba desde teclado. En este primer codigo solo realiza la validacion de entrada de teclado para el menu principal, con la ayuda de la libreria
java.util.regex.* que nos ayuda a poder validar los datos que se ingresan por teclado y mediante la ayuda de la sentencia if comparar dichos datos y si son erroneos mostrar un mensaje de advertencia (ver grafico 1). Este codigo tambien se compone de la sentencia swich que nos ayuda a poder seleccionar la opcion ingresada por teclado, pues bien en cada uno de los casos se hace llamada a funciones especificas para realizar operaciones mostradas en el menu, como ingreso de datos, guardar la lista, mostrar en pantalla, etc. (ver grafico 2)
import javax.swing.JOptionPane;
import java.io.IOException;
import java.util.Scanner;
import java.util.regex.*;
public class Aplicacion
{
public static void main(String[] args) throws IOException
{
nomina ag=new nomina();

String entrada;
for(;;)
{
entrada=JOptionPane.showInputDialog("1. Usuario nuevo\n2. Cargar la lista\n3. Mostrar listado\n4. Guardar la lista\n 5. Salir\n");
Pattern q=Pattern.compile("[0-9]");
Matcher m=q.matcher(entrada);
if ((entrada != null) && (entrada.length() > 0) && (m.find()))

grafico 1
{
int num = Integer.parseInt(entrada);

switch(num)

{ grafico 2
case 1:
{

El uso de String cad = .... nos ayuda a almacenar las variables ingresadas por teclado, y mediante []aux=cad.split("-"), permitir que se escriba la expresion - para poder separar dichos datos, Ya ingresado estos datos se realiza el cambio a un tipo de dato Persona p, con ello hacemos llamado a dicha funcion y enviamos los datos para la verificacion.

String cad = JOptionPane.showInputDialog("Ingrese: nombre de usuario - telefono - direccion ");
String []aux=cad.split("-");
Persona p=new Persona(aux[0],aux[1],aux[2]);
ag.addPersona(p);
ag.save();
}break;
case 2:
{
ag.load();
ag.imprimir();
}break;
case 3:
{
ag.imprimir();
}break;
case 4:
{
ag.save();
}break;
case 5:
{
JOptionPane.showMessageDialog(null,"Gracias por usar esta aplicacion");
}return;
default:
{
JOptionPane.showMessageDialog(null,"elija una opcion");
}
}
}
else
JOptionPane.showMessageDialog(null,"Las opciones no contienen letras ni puede dejar vacio la seleccion..\n\n Elija por favor una opcion...."," ERROR",JOptionPane.WARNING_MESSAGE); }
}
}

En cada caso solo se hace llamado a la funcion necesaria para ejecutar parte del codigo segun la necesidad del usuario ingresada desde el teclado...

Video que muestra el uso de archivos

Como se menciono antes, esta vez toca el uso de archivos, para manejar datos y almacenarlos en un archivo, a continuacion se muestra una captura del programa ejecutado, mas adelante se subira el codigo y se explicara detalle a detalle dicho codigo...


martes, 5 de enero de 2010

CODIGO DE IMPLEMENTACION (3da parte) empleado.java

En esta tercera y ultima entrada del codigo de implementacion para una nomina de empleado sencilla. simplemente comentaremos las lineas que se encuentran en el codigo, por razones de que en las entradas anteriores se colocaron ya imagenes que pueden ayudar a entender de buena manera la implementacion del codigo, esta parte del codigo, no se imprime nada en cuadro de dialogos, mas bien donde se hace llamada a las funciones empleados.

veamos el codigo
class Empleado
{
//atributos
private String nombre;
private double sueldo;
private int id;
private static int idSiguiente = 1;
//Constructor
public Empleado (String n, double s )
{
nombre = n;
sueldo = s;
id = idSiguiente; //toma el proximo ID disponible
idSiguiente++; //incremente id
}

public Empleado ( ) { this("S/N", 0); }
public Empleado ( String n) { this(n, 0); }
public Empleado ( double s) { this("S/N", s); }

public String getNombre()
{
return nombre;
}
public double getSueldo()
{
return sueldo;
}
public int getId()
{
return id;
}
public static int getIdSiguiente()
{
return idSiguiente;
}
} //fin clase empleado
Como vemos es un codigo mas corto que los dos anteriores, como primer paso es crear la clase empleado. Para la siguientes lineas hacemos uso de funciones privadas que retornan un valor para que pueda ejecutarse el codigo completamente y sin errores. Otras funciones son publicas ya que es necesario que se las llame mediante otro codigo implementado, segun sea la necesidad. En esta seccion no hacemos uso de librerias ya que no necesitamos, validar o simplemente imprimir un cuadro de dialogo.

COMENTARIO FINAL

Este codigo implementado, podria desrrollarse de mejor manera, con mas opciones como son las de datos como numeros de telefono direccion, estado civil, nacionalidad, etc. Dado que la elaboracion de este tipo de codigos ya mas avanzados requiere dedicarle mucho mas tiempo, no ha sido posible implementar un codigo de tal magnitud, por lo que se a optado por un codigo, no tan sencillo, pero si para entender como poder realizar ingreso de datos, validaciones, etc.
Este codigo fue desarrollado e implementado por DAVID NUNEZ. basado en codigos fuente similares pero mas elaborados y en su totalidad mejor estructurados, para poder implementar dicha aplicacion, Acontinuacion se coloca los enlaces de ayuda.

http://www.chuidiang.com/chuwiki/index.php?title=JOptionPane_y_di%C3%A1logos_modales
http://grupos.emagister.com/debate/validacion_de_letras_y_espacios/6709-289716
http://www.programacion.com/java/articulo/expresionesreg/
http://mygnet.net/codigos/java/

CODIGOS FUENTE

http://mygnet.net/it/descargas/codigos/codigos_fuentes_java_y_tutor_java_con_3000_codigos_fuentes_muy_buenos.2777.zip
http://mygnet.net/it/descargas/codigos/sistema_de_nominas_usando_polimorfismo.2641.zip

Cualquier duda o sugerencia por favor háganlo saber.
Saludos cordiales estimados compa
ñeros



lunes, 4 de enero de 2010

CODIGO DE IMPLEMENTACION (2da parte) nomina.java

Saludos nuevamente amigos, en esta ocacion continuaremos con la explicacion del codigo implementado para una nomina de trabajadores sencilla. La clase principal para esta parte es nomina.
Como vimos anteriormente en el uso de la sentencia switch se escogia 4, pues bien la primera opcion del caso 1 Ingreso de datos, podemos ver el codigo marcado de color azul, Al seleccionar la opcion 1 se ha el llamado a la funcion LeerDatos, con lo cual podemos ingresar los datos de nombre y sueldo.


El codigo implementado trabaja con la sentencia if y el uso de Pattern y Match, con esto logramos que los datos que se ingresen desde teclado, para el primer caso, sea solo nombre y no numeros, y para el segundo caso solo numeros y no letras, pues bien, en el caso de que no se ingrese lo pedido, se mostrara un mensaje de error, y realizando nuevamente la operacion para ingresar datos. Para ello se ha implementado la sentencia do while que permite realizar repetidas veces la misma operacion hasta que se satisfaga la condicion y pueda pasar a la siguiente linea que es el envio de datos n y s, donde n es la variable donde se almacena el nombre de usuario y es de tipo String, mientras que s ecd s la variable donde se almacena el valor del sueldo y es de tipo Double.

Para las opciones 2 y 3 de nuestro menu, en cada caso (2 y 3) se hace el llamado a la función muestra que permite imprimrir con ayuda del JOptionPane, los resultados del alamacenamiento de datos. (ver codigo de color naranja). En esta expresion se a hecho uso de la sentencia for que permite mostrar cada uno de los usuarios registrados y mostrar en un cuadro de dialogo uno por uno los usuarios y la cantidad de usuarios registrados. Esto es por el uso de JoptionPane.
Pero si trabajamos simplemente con System.println obtendriamos una mejor visualizacion de la nomina de empleados...


Es l oque se obtendria al elegir la opcion 3, cosa que con el JOptionPane no se pude mostrar completamente, para ello deberiamos usar Jframe. pero bueno, quizas mas adelante veamos una implementacion con dicha libreria.

Continuando con el codigo, la sentencia if nos ayuda a verificar si existen o no usuarios registrados, para cada caso realizara la accion correspondiente, siendo una de ellas en el caso de que no existan usuarios, mostrar un cuadro de dialogo que nos indica que no existen usuarios registrados.



En este codigo existen varias sentencias publicas, que son leidas desde otra expresion y llamadas a ejecutarse, mientras que cada funcion contiene expresiones privadas que solo dichas funciones pueden hacer uso de ellas. Como vemos hemos utilizado las mismas librerias y paquetes siendo muy importante tener el conocimiento de ellas.
import javax.swing.JOptionPane; //Libreria que sirve para utilizar JOptionPane import java.util.regex.*; // Libreria que permite usar Matcher y Pattern

//Una nomina esta compuesta de empleados(arreglo de)
public class nomina { //datos de la nomina private Empleado [] empleados; //la nomina "TIENE" empleados private int dim; // # de empleados
public nomina(int d) { empleados = new Empleado[d]; }
public nomina() { //constructor por default this(5); }
public void leerDatos(int limite) { String n,r ; double s; do { n=JOptionPane.showInputDialog("Ingresa nombre empleado["+(limite+1)+"]: "); Pattern p=Pattern.compile("[0-9]"); Matcher m=p.matcher(n); if((n != null) && (m.find())) { JOptionPane.showMessageDialog(null,"ERROR\n\n Elija por favor una opcion...."," ERROR",JOptionPane.WARNING_MESSAGE); } }while(n=="[a-zA-Z]"); do { s=Double.parseDouble(r=JOptionPane.showInputDialog("Ingrese el sueldo")); }while ((r == null)&&(r=="[a-zA-Z]") ); empleados[limite]= new Empleado(n, s); }
public void Muestra(int limite,boolean Nomina) { if(limite>0) { double DblNomina=0; for(int i=0;i { if (Nomina==true) DblNomina+=empleados[i].getSueldo(); JOptionPane.showMessageDialog(null,"Registro "+(i+1)+" de "+limite+"\n\n\tNombre: "+empleados[i].getNombre()+"\n\tSueldo: "+empleados[i].getSueldo()+"----\n"); } if (Nomina==true) JOptionPane.showMessageDialog(null,"\nNomina total a Pagar:"+DblNomina+"\n"); } else JOptionPane.showMessageDialog(null,"No Hay Registros Disponibles!...\n"); }
} //clase nomina

En nuestra tercera y ultima entrega del desarrollo del proyecto continuaremos con lo que es la clase empleado, que nos permitira realizar acciones correspondientes a almacenamiento de datos, llamado de funciones, entre otros.

Saludos.