viernes, 1 de marzo de 2013

MODULO III




Java Para Aplicaciones de Escritorio

Hilos

En el proyecto se utiliza el concepto de hilos en los JFrames de Java, al mostrar el frame:

SwingUtilities.invokeLater(new Runnable() {
public void run() {
Inicio inst = new Inicio();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});

Aparte de utilizar hilos dentro de cada JFrame, en el sistema se implemento un hilo que cambia la imagen del logo para simular un tipo de Banner en la pantalla de Inicio.


public void run() {
try {
while (activarhilo) {

{
banner = new JLabel();
jPanel1.add(banner);
banner.setIcon(new ImageIcon(getClass().getClassLoader().getResource("InterfazInicio/Imagenes/Imagen1.png")));
banner.setBounds(82, 14, 214, 57);
}

Thread.sleep( delay );
jPanel1.remove(banner);
{
banner = new JLabel();
jPanel1.add(banner);
banner.setIcon(new ImageIcon(getClass().getClassLoader().getResource("InterfazInicio/Imagenes/Imagen2.png")));
banner.setBounds(81, 18, 211, 48);
}


Thread.sleep( delay );
jPanel1.remove(banner);
}
} catch (InterruptedException ex) {
ex.printStackTrace();

}//fin catch

}





Colecciones y Genéricos

Las colecciones que se utilizaron en el avance del proyecto son:


  1. HashMap
  2. TreeMap
  3. HashTable


Se simulo una una base de datos de usuarios que entran al sistema, para ellos se uso un HashTable donde la clave es el nombre de usuario y el valor es la contraseña. Por lo tanto no pueden haber usuarios repetidos.


 Hashtable<String,String> tabla = new Hashtable<String,String>();
    
        tabla.put("empleado1", "aspirina1");


Cada registro de accesos se guarda en un archivo que simula la tabla de accesos de usuarios:


FileWriter f=new FileWriter(archlogin,true);
Fecha.getDate();
f.write("Usuario: "+usuario+"     "+"Fecha: "+Fecha.toString());
f.write("\n\n");


Desde el menú se pueden seleccionar diversas opciones para manejar la base de datos de medicamentos:


Desde este menu se llena el TreeMap de medicamentos utilizando la siguiente función:
private TreeMap<Integer,Medicamentos> medIn = new TreeMap<Integer,Medicamentos>();
private void PoblarMedicamentos(){
try
{
int id=1;
FileInputStream fstream = new FileInputStream("src/InterfazInicio/Catalogo.txt");
DataInputStream entrada = new DataInputStream(fstream);
BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
String strLinea;
StringTokenizer token;
        // Leer el archivo linea por linea
        while ((strLinea = buffer.readLine()) != null){
       
        token= new StringTokenizer(strLinea, ":");
         
        String substancia=token.nextToken();
        String nombre=token.nextToken();
        String fecha=token.nextToken();
        String lab=token.nextToken();
        String contenido=token.nextToken();
        float precio=Float.parseFloat(token.nextToken());
        String proveedor=token.nextToken();
        String presentacion=token.nextToken();
       
      medIn.put(id, new Medicamentos(substancia,nombre,fecha,
    "", lab,contenido,precio, proveedor, presentacion));
      id++;
        }
        // Cerramos el archivo
        entrada.close();
}catch(IOException ex)
{
//System.out.println(ex.getMessage());
}
catch(Exception ex)
{
//System.out.println(ex.getMessage());
}
}//fin de poblarMedicamentos


La llave es un entero consecutivo y el valor es un objeto de la clase Medicamentos, la cual define los atributos y propiedades de un tipo de medicamento.

Este TreeMap se manda a las opciones Agregar Productos al Catálogo y Ver Catálogo.

Para agregar productos al TreeMap se utiliza el siguiente código:


medIn.put(new Integer(codigo.getText()),new Medicamentos(sustanciaActiva.getText(), nomComercial.getText(),
ingresoText.getText(),"", laboratorio.getText(),
contenidoTotal.getText(), Float.parseFloat(precio.getText()),
jComboBox1.getSelectedItem().toString(), jComboBox2.getSelectedItem().toString()));



Para mostrar el Catálogo se utiliza un JTable que se llena utilizando el TreeMap de Medicamentos, se define el modelo y se agrega a la tabla junto con la información de cada renglón y columna:
Model.addColumn("id");
Model.addColumn("SustanciaActiva");
Model.addColumn("nombreMed"); 
Model.addColumn("fechaEntrada"); 
Model.addColumn("fechaSalida"); 
Model.addColumn("Laboratorio"); 
Model.addColumn("contenidoTotal"); 
Model.addColumn("precio");
Model.addColumn("proveedor");
Model.addColumn("presentacion");
Model.setNumRows(medIn.size());
   while(itr.hasNext())
   {
    Object sustancia=itr.next();
    Medicamentos med=(Medicamentos) sustancia;
    Model.setValueAt(i, i, 0);
    Model.setValueAt(med.getSustanciaActiva(), i, 1);
    Model.setValueAt(med.getNombreMed(), i, 2);
    Model.setValueAt(med.getFechaEntrada(), i, 3);
    Model.setValueAt("", i, 4);
    Model.setValueAt(med.getLaboratorio(), i, 5);
    Model.setValueAt(med.getContenidoTotal(), i, 6);
    Model.setValueAt(med.getPrecio(), i, 7);
    Model.setValueAt(med.getProveedor(), i, 8);
    Model.setValueAt(med.getPresentacion(), i, 9);
    i++;
   }
jPanel1.add(tabla);
tabla.setModel(Model);
tabla.setBounds(49, 135, 665, 268);
tabla.setRequestFocusEnabled(false);



En la venta de medicamento se utilizan HashMap<String,Double>, se guardan los datos de la venta(código y precio), el precio es la multiplicación de la cantidad por el precio unitario; los precios se van a actualizar automáticamente cuando el usuario capture el código, el vendedor solo se encargará de capturar la cantidad de productos y al final se realizará la suma de todos los precios para cobrar el total por la venta.

Cuando se cree la base de datos todas las ventas serán registradas.

//Productos en la venta codigo precio
HashMap<String,Double> venta=new HashMap<String,Double>();

//Agregar Producto a la Venta
private void jButton1AgregarActionPerformed(ActionEvent evt) {
//Si la llave esta en el HasMap(codigo)
if(venta.containsKey(codigo.getText()))
{
Double val=(Double)venta.get(codigo.getText());
Double suma=(Double.parseDouble(cantidad.getText())*Double.parseDouble(precioUnitario.getText()))+val;
venta.put(codigo.getText(), suma);
}
else
venta.put(codigo.getText(),
Double.parseDouble(cantidad.getText())*Double.parseDouble(precioUnitario.getText()));
}
//Boton Sumar todos los productos
private void jButton1ActionPerformed(ActionEvent evt) {
Double suma=0.0d;
java.util.Iterator<Entry<String, Double>> it = venta.entrySet().iterator();
while (it.hasNext()) 
{
Map.Entry e = (Map.Entry)it.next();
suma=(Double)e.getValue()+suma;
}
Sumatotal.setText(String.valueOf(suma));
}





miércoles, 27 de febrero de 2013

MODULO II



Metodologías de Análisis y Desarrollo de Sistemas Orientadas a Objetos


  • Diagrama Relacional 
Diagrama que representa la composición que tendrá la base de datos, que permitirá almacenar el medicamento.

  • Diagrama de Clases



  • Diagramas de  Caso de Uso





  • Diagrama de Estados

  • Diagrama de Actividades


  • Diagramas de Secuencia

  • Diagrama de Colaboraciones
  • Diagrama de Distribución

  • Diagrama de Objetos
Estos dos ejemplos muestran los dos tipos de proveedores con los que cuenta la empresa
  • Diagrama de Componentes







viernes, 25 de enero de 2013

MODULO I

Nombre del Proyecto: FARMAMEDIC
Objetivos: Realizar un Sistema de Información basado en la compra y venta de medicamentos, que permita llevar el control del medicamento que se ingresa a la farmacia y se vende.

Objetivos Especificos:
  • Se tendra una interfaz que permita decidir si es ingreso o venta del medicamento.
  • Cuando se haga una venta de algún medicamento, al proporcionar el código del producto, se podrá visualizar el idproducto que será el id de la base de datos, la fecha en que ingreso para posteriormente, solo llenar la fecha de salida, que será el día en el que el medicamento se vendió.
  • Con la interfaz de ingreso del medicamento al ingresar el codigo del producto mostrara el id del producto con el cual se encuentra registrado en la base de datos, y si lo muestra es porque existe ya en la base por lo cual internamente en la base se incrementará la cantidad de ese idproducto en la base, lo cual me permitirá saber la cantidad exacta de medicamentos en stock.
  • Debido a que existirá un ingreso del medicamento, se llevará al día la cantidad exacta de existencia del medicamento por ello al consultar el inventario sólo serán seleccionados aquellos medicamentos que tengan menor a 2 productos.


Diseñar la interfaz gráfica





Diseñar la base de datos

Diseñar y la interfaz gráfica web



Diseño UML: