miércoles, 23 de febrero de 2011

Semana 5 Taller: Especificaciones Tecnicas del Sistema.

Que tal gente!, en esta entrada les dejare lo que seria la especificacion tecnica del sistema que estoy desarrollando, esta especificacion tecnica estaria elaboradas de una forma muy generalizada, espero que conforme se valla desarrollando el proyecto, esta se valla puliendo, y que se convierta en un documento productivo.



ESPECIFICACIONES TECNICAS.
PROYECTO DE ADMINISTRACION Y FACTURACION ELECTRONICA IMPLEMENTADO EN UN NEGOCIO DE SERVICIOS GENERALES
PROYECTO SEGA-ADMIN.


El negocio de Servicios Generales Alvaro Garza S.A. de C.V. necesita de un sistema de software, el cual permita:
  • Generar facturas electronicas, ordenes de compra y facturas en un formato imprimible, de una forma automatizada.
  • Identificar clientes frecuentes del negocio, ademas de poder acceder a su historial de compras.
  • Acceder de una manera sencilla y practica, a una agenda de clientes.
  • Administrar las facturas ya capturadas, de la forma mas sencilla posible

ESPECIFICACIONES TECNICAS.

ASPECTOS FUNCIONALES.
  • El software manipulara informacion de clientes, facturas y compras de una manera eficiente, rapida y sencilla.
  • El software debera presentar una interfaz sencilla, pero a su vez atractiva a la vista del administrador del mismo.
  • El software debe estar protegido, ya que manejara informacion valiosa de la empresa, por lo que se le debera implementar un sistema de logueo.
  • El software debera tener la capacidad de manejar bases de datos locales y web.
  • El software debera tener la capacidad de generar archivos en formato PDF con una estructura predeterminada, con los datos capturados por el administrador.
  • El software debera ser capaz de determinar cuando la informacion que se esta capturando no concuerde con la estructura predeterminada de la informacion, y debera orientar al administrador, para que reestructura la forma de captura.
  • El software debe identificar a el cliente al cual se le esta haciendo la factura.
  • El software debera estar respaldado con un manual de usuario orientado al administrador.

VISION LOGICA.

En este apartado, profundizaremos en el sistema, describiendo algunas de las clases principales con las cuales trabajara el sistema.


  • Clase Usuario.
Esta clase principalmente manejara los atributos principales que distinguirán a los usuarios de este sistema, en este caso al administrador y a los clientes, esta clase heredara a las clases Cliente y Administrador.


  • Clase BaseDeDatos
Una de las clases vitales para el sistema, ya que esta se encargara de manejar la conexion con la base de datos,  el objeto que se cree a partir de esta clase, sera con el cual se podran ejecutar sentencias de SQL el resto de las clases. manejando un constructor con variables estaticas finales y metodos para la conexion y para regresar el objeto de la conexion, esta clase por ahora no hereda.


  • Clase Factura
Esta clase manejara las propiedades de la factura, ya que el sistema manejara varios tipos de factura, esta clase heredara a cada una de ellas: OrdenDeCompra, Fact_imp, Fact_elec.

El resto de las clases podrian ser modificidas o descartadas durante el desarrollo del sistema, asi que este apartado se ira desarrollando a la par del sistema.



ASPECTOS OPERACIONALES. 

  • El sistema debe ser adaptativo, en dado caso de que el sistema nesesite una implementacion extra, o algo por el estilo, debera bastar con agregar la operacion, sin modificar la estructura actual del sistema
  • El sistema debera estar en idioma español, pero con la facilidad de convertirse en multilenguaje.
  • El sistema debera estara elaborado bajo los metodos generales de sistemas de facturacion.


ASPECTOS TECNICOS.
  • El sistema debera ser multiplataforma, pero principalmente se busca que trabaje sobre microsoft windows XP servipack 3.
  • El sistema debera ser capaz de trabajar con cualquier tipo de bases de SQL.



Para elaborar esta pequeña especificacion, me base en la informacion obtenida en las siguientes paginas:

Esquema de la estructura de una especificacion tecnica.
Foro donde se debate respecto a este tema
Pagina donde se habla de la importancia de esto, y de aspectos a tomar en cuenta a la hora se la elaboracion.

Bien, por mi parte es todo.
Dudas, comentarios y sugerencias aqui abajo.

Saludos!


Jose Gonzalez!

jueves, 17 de febrero de 2011

Semana 4 Taller, Documentacion del software

Que tal gente, a continuacion les dejo la documentacion de una de las clases que tengo mas o menos desarrolladas, esta clase se encarga de la conexion a la base de datos principalmente.

package basedatos;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/** Clase que se encarga del proceso de conexion del 
  * programa en java con la base de datos de MySQL,
  * uno de los procesos mas importantes
  * que realiza este programa
  */
public class BaseDeDatos {
 /** varible estatica del driver */
 private final static String driver = "com.mysql.jdbc.Driver";
 /** variable estatica que ubica la direccion y la base de datos */ 
 private final static String db = "jdbc:mysql://localhost:9999/GUI";
 /** varible estatica que almacena el usuario de la base de datos */
 private final static String usuario = "root";
 /** variable estatica que almacena la contraseña de la base de datos */
 private final static String password = "*******";
 /** varibles que se utilizan para el proceso de conexion */
 private Connection ct;
 private Statement st;
 /** Constructor, compuesto por un try-catch
          * en el cual se crean unos objetos ya
          * definidos para la conexion con la 
          * base de datos */
 public BaseDeDatos(){
  try{
   Class.forName("com.mysql.jdbc.Driver");
   ct = DriverManager.getConnection(db,usuario,password);
   st = ct.createStatement();
   System.out.println("conexion Exitosa");
  }catch(Exception e){
   System.out.println("No se pudo conectar a la base de datos");
  }
 }
        /** metodo con el cual extraemos la informacion 
          * de la base de datos, y la mostramos en la
          * pantalla, con la ayuda de las librerias
          * importadas de Sql */
 public void MostrarContenido(){
 try{
   ResultSet rs = st.executeQuery("SELECT * FROM DIRECTORIO");
   while(rs.next()){
    System.out.println(rs.getString(1)+"|"+rs.getString(2)+"|"+rs.getString(3));
   }
 }catch(Exception e){
   System.out.println("error al realizar la consulta");
 }
}
 
        /** metodo predefinido para extraer la variable st, 
          * que nos ayudara con las  queris cuando estemos 
          * trabajando con GUI'S @return regresa el valor 
          * de la variable st
          */
 public Statement ObtenerSt() {
  return st;
 }
 
}

Al  compilar esto con javadoc, obtendriamos un codigo html igual al que se muestra a continuacion:




Como pueden ver, se define la clase, ademas de decir de donde se origina, tambien se describe el constructor, y sus metodos, ademas de que cada metodo se describe mas a detalle en su anexo especifico.

Bien por mi parte es todo, dudas o sugerencias aqui abajo.

Saludos y comenten!


Jose Gonzalez!

miércoles, 16 de febrero de 2011

Semana 4 Clase: Documentacion del Sistema.

Saludos gente, en esta entrada les ablare un poco sobre la documentacion que tenemos que elaborar al momento de realizar un sistema.

Problamente cuando elaboremos un sistema en el futuro, no sera con fines didacticos o por ocio, lo mas seguro es que hagamos ese software para una persona, empresa, o comercio, en pocas palabras, para un cliente.

Esto implica que una responsabilidad al momento de vender un sistema, es documentar la estructura de este, ademas de explicar como trabaja internamente, y para esto existen herramientas que nos facilitan este trabajo, a continuacion hablaremos de Javadoc, herramienta para realizar la documentacion de codigo elaborado en java.

JAVADOC


Javadoc es una herramienta que nos ayuda a elaborar la documentacion de clases de un codigo en java, esta utilidad genera archivos en formato HTML a partir del codigo en java, a continuacion veremos con  hace esto.

para documentarizar una clase, se escribe la descripcion de la misma antes de la misma clase, abriendo el comentario con dos asteriscos y una barra y cerrando el comentario con asterisco y una barra, tal vez suene complejo, para eso el ejemplo de abajo para que entiendan.

/** Clase que se encarga del proceso de conexion del
  * programa en java con la base de datos de MySQL,
  * uno de los procesos mas importantes
  * que realiza este programa
  */
public class BaseDeDatos {
    //aqui iria el desarrollo de la clase
    }

Como pueden ver, el comentario comienza con dos ** y una barra, y termina con un * y una barra, una vez que ya lo hemos comentarizado, el siguiente paso seria generar el codigo de HTML con la documentacion de la clase, para esto, basta con teclear el siguiente comando en la terminal:


Bien, lo que hice arriba fue posicionarme en la carpeta donde esta el codigo del cual queremos elaborar la documentacion, y despues metemos la instraccion "javadoc basedatos.java" y esa instruccion nos generara en la carpeta donde esta nuestra clase, los archivos html con la documentacion de la clase.

Finalmente se generan la documentacion con una estructura similar a la que se muestra en la imagen de abajo.


ETIQUETAS

Javadoc cuenta con diversas "etiquetas" con las cuales podemos identificar parametros de nuestro codigo, como lo son el autor, los metodos, los parametros, etc. Con estas etiquetas, podemos describrir mas a detalle en la misma documentacion. A continuacion les muestro una tabla con algunas etiquetas que podemos usar en javadoc


Bien, eso seria todo por ahora, en la entrada dedica al taller, les mostrare el codigo de una clase documentada, con todo y metodos, valores de retorno y demas.

Dudas comentarios o sugerencias aqui abajo.

Saludos y Comenten!


Jose Gonzalez!

lunes, 14 de febrero de 2011

Semana 4: Presentacion del proyecto!

Que tal gente, a continuación les dejo la presentación del proyecto en SlideShare, dudas comentarios o sugerencias aqui abajo!

Saludos!


Jose Gonzalez!

miércoles, 9 de febrero de 2011

Semana 3 Taller: Herencia aplicada al proyecto.

Ola gente!, a continuacion les dejo unas de las clases que tengo en las cuales aplico la herencia, una de las caracteristicas mas importantes de la programacion orientada a objetos.

Primeramente la clase Cliente, que tiene como atributos los datos mas relevantes sobre el cliente, ademas de tener un contructor el cual se cargara con los datos que registre el usuario durante el registo, asi como un metodo para la verificacion del usuario y el password al momento de iniciar sesion.

public class Cliente{
 private String username;
 private String pass;
 private String locacion;
 private String empresa;
 private String email;
 private boolean nuevo;

 public cliente(){
  //contructor donde se llenara en base a lo 
  //capturado
 }
 
 public verificacion(){
  //metodo para verficar el usuario y el pass
  //en el login
 }

Esta seria clase padre de la clase BaseDatos, ya que requeriremos el usuario para encontrar toda la informacion relacionada con el cliente en la base de datos, esta clase incluye un metodo para la conexion con la base de datos, asi como tambien un metodo para agregar y eliminar registros.

public class BaseDatos extends Cliente{
 //atributos
 private String Cliente;
 //aqui irian mas atributos pero el mas importante a mi gusto seria 
 //el usuario del cliente

 public Conexion(){
  //aqui seria un metodo para conectarme a la base de 
  //datos, aun no conosco la sintaxis para eso, pero
  //la tendra.
 }
 public ObtenerDatosBD(){
 //este seria el metodo para sacar la informacion de la base de datos
 //y manipularla en una clase hija llamada Administracion.
}
        public int GenerarFolio(){
        //metodo para checar base de datos y generar folio
        }
}

Otra clase hija de la clase Cliente seria la clase Factura, ya que en la factura irian los datos del cliente, practicamente es lo mas importante, tambien en esta clase llamaria a un metodo para imprir la factura en dado caso de que sea nesesario.

public class Factura extends Cliente{
    private double folio;
    
    public void llenarfactura(a,b,c,d,e){ //darles los parametros del cliente
    }

Ya para terminar mencionaria la clase Administrar, la cual seria clase hijo de la clase BaseDatos, pero buscaria la forma de imprementar el metodo de la clase Factura, claro que antes hay que crear una interfaz para la clase Factura.

public class Administracion extends BaseDatos implements iFactura{
 /*esta clase seria hija de la clase BaseDatos e implementaria metodos de clase factura
 ya que esta nos data los datos de la BD.*/

 private int folio;
   
 public Alta(){
  /*metodo para agregar una factura*/
 }
 
 public Baja(){
  //metodo para eliminar una factura
 }

 public ModificarFactura(){
  //metodo para modificar una factura, 
  // la cargaria en el programa para manejarla
  // desde alli
 }

Bien, eso es todo por ahora, espero que le sirva de algo, dudas comentarios o sugerencias aqui abajo.

Saludos!

Jose Gonzalez!

Semana 3 Clase: Herencia y polimorfismo.

En esta entrada, les hablare un poco sobre herencia y polimorfismo, dos aspectos a tomar  muy en cuenta a la hora de realizar un sistema mas profesionalmente.

Primero, ¿Que es la herencia en la programacion?

Se dice que se esta aplicando la herencia en el momento en el que una nueva clase, se crea a partir de una clase ya programada, se llama Herencia porque la nueva clase (clase "hijo" o "sublcase") contiene ademas de los metodos y atributos que le demos, todos los metodos y atributos de la clase "papa" o primaria.

Esto sirve para tener un programa con una estructura mas especializada en nuestro codigo, ademas de que con esta propiedad, ya no es nesesario comenzar una clase desde cero, podemos adquirir bibliotecas de clases y existentes.

La estructura de aqui al lado, podria representar una clase padre y sus clases hijo, donde la clase padre seria "vehiculo", y donde podemos suponer que tiene atributos como el combustible que usa, o la velocidad que alcanza, despues si se generan dos clases hijo, en este caso "terrestre" y "aereo", estas heredarian los atibutos de la clase vehiculo, priorizando en las clases hijo otros metodos mas especificos que podrian heredar a clases hijo en caso de que tengan, como en esta caso, donde la clase "terreste" tiene  dos clase hijo "coche" y "camion", siendo ambos terrestres y vehiculos.


Herencia Multiple.

La herencia multiple en resumidas palabras es cuando una clase hijo hereda metodos y atributos de dos clases padre o superclases, esta caracteristica de la programacion orientada a objetos es soportada en lenguajes como C++, Perl y python.

Pero ¿y Java?

Java no soporta esta caracteristica de la herencia ¿Porque? Porque si las dos clases padre tuvieran un metodo o un atributo nombrado de la misma manera, y una clase hijo de ambos manda a llamar a ese metodo, se producira un conflicto, provocando problemas con el correcto funcionamiento del programa y poniendo en riesgo al sistema.

Interfaces, la solucion de Java.

Con una interfaz, lo que estamos haciendo es implementar los metodos de una clase, para despues utilizarlos en otra clase, es decir, podemos crear una clase que herede una metodos y atributos de clase e "implemente" los metodos de otra clase en la misma.

Algo similar a lo siguiente

public class Clase1 {
}
public class Clase2{
}
interface iClase2{
//La interface pertenece a la clase Clase2
}
public class Clase3 extends Clase1 implements iClase2{
}

Polimorfismo


Este es un concepto de la porgramacion orientada a objetos que nos permite programar en forma general, en lugar de hacerlo en forma especifica. Generalmente nos sirve para programar objetos con caracteristicas comunes y que todos compartan la misma clase padre en una jerarquia de clases hijo, como si todas fueran objetos de la clase padre. Esto nos ayuda para simplificar la programacion.


Aplicandolo al Proyecto. 

Para mi proyecto,utilizare herencia tanto de clases predefinidas como la "JFrame" por ejemplo, (para GUI'S) asi como tambien unas clases heredaran de otras que yo mismo estoy desarrollando.

Pienso elaborar una clase padre llamada "factura" donde tendre los atributos mas importantes de la misma, y de esta clase, elaborare la clase hijo "Administrar" donde programare los metodos de administracion de las facturas, tales como "agregarfactura", "modificarfactura" y "eliminarfactura".

Tambien tendre una clase llamada "BaseDeDatos" donde iran metodos como la conexion con la base de datos, la extracion de datos de la base, asi como la escritura de mas informacion en la misma, siendo esta clase hija de una clase "Cliente" donde se almacenaran los atributos mas importante del cliente, ya que al momento de estar facturando es nesesario estar consiente de quien es el cliente.

Tambien voi a utlizar bibliotecas de clases ya definidas para elaborar diversos metodos, como la elaboracion de la interfaz grafica, asi como la conexion y consulta a una base de datos, asi como otra que me permita generar archivo en formato pdf con la informacion que estoy manipulando.

el desarrollo del codigo se los mostrare en la entrada referente al taller de la clase de programacion  orientada a objetos.

Bien, por mi parte es todo, dudas comentarios o sugerencias, aqui abajo.

Saludos!

Jose Gonzalez!

miércoles, 2 de febrero de 2011

Semana 2: Descripcion de las clases del proyecto!

Ola! ¿Que tal compañeros? en esta entrada les abare un poco sobre las clases, en cuanto a la programacion orienta a objetos se refiere.

¿Que es una clase en Programacion orientada a objetos?

Bueno como su nombre lo dice, en la programacion orientada a objetos, como su nombre de lo dice, es un paradigma de programacion donde se trabaja en base a objetos, una CLASE seria el lugar del programa donde se almacenan las propiedades y el comportamiento que puede presentar un objeto en un momento predeterminado.

Las atributos, son ese conjunto de propiedades que se definen en cada clase, con las caracteristicas de las cuales se puede conformar un objeto al momento de instanciarlo en base a esa clase.

Finalmente, los metodos son aquellos algoritmos asociados a los objetos, donde se realizan procesos en base a objetos de una determinada clase.




APLICACION AL PROYECTO

Para mi proyecto, Seria indispensable aplicar todo esto, una idea que tengo sobre el como los podria aplicar, seria la siguiente:

Definiendo las clases:

PRINCIPAL:  donde iniciaria los objetos con el resto de las clases.

VENTANA: donde tendria atributos importados de una libreria de GUI'S y seria donde estructuraria la ventana de mi sistema, esta clase enfocada mas a la interfaz grafica del sistema.

BASEDATOS: en esta clase se manejaria todo lo referente a la base de datos que manejara el sistema, desde la conexion con la base de datos, la extraccion de los datos que el usuario captura en el sistema, asi como consulta de la base de datos para exportar informacion en un formato "imprimible" para el cliente.

ADMINISTRACION: esta clase se encargaria, como su nombre lo dice de la administracion del sistema, se me ocurre con una clases hijo como ALTA, BAJA o CONSULTA, todo esto para manejar las bases de datos y la facturacion.

Bien, eso es lo que tengo hasta ahora, comentario, sugerencias dudas o criticas aqui abajo :D

Saludos y COMENTEN!

Jose Gonzalez!

Semana 2: Primeras Clases del Proyecto.

Ola! que tal compañeros? durante la semana pasada comenzamos con el tema de clases múltiples, entonces aplicando este tema al proyecto, elabore algo asi como unas estructuras de las clases que utilizaria en mi proyecto, mismas que se muestran y se describen a continuación:

import java.swing.*;

public class VentanaPrincipal extends JFrame{

 private JButton = boton1;
 private JTextField = campo1;
 private JLabel = label1;
 //etc..

 public DefinirVentana(){
 // metodo con caracteristicas principales de la ventana
 }

 public class acomodo(){
 // metodo para estructurar la ventana
 } 
}
Esta clase seria para elaborar la ventana principal con la que trabajara nuestro sistemita, claro, en conjunto con el resto de las clases. Aqui le daria forma a la ventana con los botones, campos de texto y demas, ademas de que aqui se le asignaran a varibles los valores que se esten capturando en la ventana, para despues manipularlos desde otras clases.

la Siguiente clase seria la que sigue:
public class facturacion{
 //atributos
 private int folio;
 private String descripcion;
 private double cantidad;
 private DATE fecha;
 private boolean depositado = false;
 //etc..

 public ManDatos(){
  /*aqui iria un metodo para sacar los datos
  de la ventana y poder trabajarlos*/
 }

 public LlenarFactura(){
  /* un constructor para aser un objetos con los 
  de la ventana y la factura*/

 }
} 
En este caso lo que haria esta clase seria, en primer lugar, extrer los datos que se capturaron en la ventana, para despues llenar una factura con los datos obtenidos, con el numero de folio que me regresaria la clase que se describe a continuacion:

public class BaseDatos{
 //atributos
 private int folio;
 //aqui irian mas atributos pero el mas importante a mi gusto seria 
 //numero de folio de la factura

 public Conexion(){
  //aqui seria un metodo para conectarme a la base de 
  //datos, aun no conosco la sintaxis para eso, pero
  //la tendra.
 }
 public ObtenerDatosBD(){
 //este seria el metodo para sacar la informacion de la base de datos
 //y manipularla en una clase hija llamada Administracion.
}
        public int GenerarFolio(){
        //metodo para checar base de datos y generar folio
        }
}
Esta clase haria varias cosas, una de ellas, conectar el programa con la base de datos, otra de ellas seria leer la base de datos, asi como un proceso de verificación de la misma para en base a eso, generar un numero de folio unico, el cual sera el ID con el que se trabajara durante el resto del proceso de facturación.

public class Administracion extends BaseDatos{
 /*esta clase seria hija de la clase BaseDatos
 ya que esta nos data los datos de la BD.*/

 private folio;
   
 public Alta(){
  /*metodo para agregar una factura*/
 }
 
 public Baja(){
  //metodo para eliminar una factura
 }

 public ModificarFactura(){
  //metodo para modificar una factura, 
  // la cargaria en el programa para manejarla
  // desde alli
 }
esta clase se encargaria basicamente del proceso de administracion de las facturas, realizando procesos como alta de una factura, asi como la eliminacion y modificacion de la factura.


Bien estas seria las clases que tengo por ahora, si tienen alguna duda, sugerencia o critica, por favor aquí abajo.


Saludos y Comenten!!


Jose Gonzalez!

tarea 1: Definiendo un proyecto.

ola que tal compañeros, en esta entrada les ablare un poco sobre la idea que tengo para el proyecto, las herramientas que usare y el porque de esta idea.



Sistema de administracion para un negocio de servicios generales.

La idea de este proyecto surgio debido a que un conocido, dueño de un taller de este tipo, le gustaria tener un sistema de administracion y facturacion para las ventas que realize.

La idea mas basica seria elaborar un programa en el cual el administrador de los campos llene una serie de campos, y el programa se encarge de varias cosas, como lo son:

*guardar la informacion en una base de datos
*verificar datos del cliente (que el cliente exista)
*generar un numero de folio para facil acceso a la factura.
*Poder imprimir la factura en un formato de texto unico.

 Ademas de esto, se nos hizo buena idea, elaborar una pagina web donde el usuario (en este caso los clientes del taller) tendrian que registrarse, para que de alli, los clientes le envien una "orden de compra" con datos imortantes como lo son:

*la descripcion del trabajo que se nesesita.
*el costo del trabajo.
*la forma de pago por parte del cliente.

Ademas a mi cliente le gustaria tener una galeria virtual alli mismo en la pagina, donde se puedan observar los trabajos mas destacados que han echo como una tecnica de mercadotecnia.

El formato de la factura de venta seria similar a la que se muestra a continuacion.

pienso programarlo en java, y usar mysql para la base de datos, ademas de una plantilla probablemente en pdf.
En cuanto a la pagina web, me gustaria hacerla en php, con la ayuda de un cgi o un jsp para el proceso de registro de los clientes.

Bien, eso seria todo por ahora, si tienen dudas o criticas o sugerencias, todo es bien recibido.

Saludos y COMENTEN!

Jose Gonzalez!