Sunteți pe pagina 1din 28

UNIVERSIDAD NACIONAL DEL CALLAO

FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

CURSO: LENGUAJE DE PROGRAMACION II PROFESORA: SALLY KARINA TORRES ALVARADO TEMA: PROYECTO DE PROGRAMACION PROYECTO:

ALUMNO: OSCAR ARMANDO MENDOZA COLMENARES CODIGO: 090829K

Julio - 2011
2

SOBRE ESTOS APUNTES Estos apuntes han sido realizados con la finalidad de ayudar a futuros Ingenieros de Sistemas que se encuentren cursando Lenguaje de Programacin II, quienes quieren comenzar a conocer y usar La Programacin Java. Tambin se busca dar una gua ordenada para complementar el estudio de este lenguaje, muy poderoso y de gran coherencia, aunque todava adolece de algunas limitaciones que seguramente se irn superando con el tiempo.

EL AUTOR

INDICE GENERAL

1. PRESENTACION 5 1.1 Que es Java ............................... 5

2. CREANDO UN PROGRAMA EN NETBEANS 2.1 Creando Proyecto en NetBeans . 2.2 Creando Paquete en NetBeans .. 2.3 Creando archivos de NetBeans ..

6 6 6 6

3. CREANDO NUESTRO PROGRAMA 3.1 Archivos de tipo Java Class .... 3.1.1 Corte . 3.1.2 Empleados ... 3.1.3 Inventario . 3.1.4 Vent .. 3.2 Archivos de tipo JFrame Form .... 3.2.1 JFrame Form: Inicio 3.2.2 JFrame Form de acceso . y JFrame Form: IngresoRegistro, IngresoInventario, IngresoCorte .... y JFrame Form: IniciarSesion . 3.2.3 JFrame Form: RegistroEmpleado . 3.2.4 JFrame Form: Inventariado ... 3.2.5 JFrame Form: Norden . 3.2.6 JFrame Form: Venta . 3.2.7 JFrame Form: CorteCaja ...

8 8 8 8 9 9 10 10 11 11 14 15 18 21 24 27

CAPITULO 1

PRESENTACIN
El presente trabajo rene todos los conocimientos desarrollados en el curso de Lenguaje de Programacin II correspondiente al cuarto ciclo de la carrera de Ingeniera de Sistemas, donde se ensea la tcnica de programacin en Lenguaje JAVA, siendo en la actualidad un lenguaje muy usado, debido a las ventajas que trae como la uniformidad existente entre las fases para desarrollo del programa, la comprensin por su similitud con el mundo real y la flexibilidad que permite que cualquier cambio que se realice sobre un dato se vea reflejado en cualquier lugar donde este dato aparece. Todos estos conocimientos son reunidos con la finalidad de aplicarlos en la elaboracin de un programa que permita que nuestras actividades sean realizadas de una manera ms sencilla y agradable. En esta oportunidad el programa ser elaborado bajo el IDE de NetBeans y orientado a empresas dedicadas a ventas y que tienen un contacto directo con sus clientes. Pero ello no quiere decir que no se pueda elaborar otro tipo de programa. Lo que se busca es dar una idea y fomentar la creacin de nuevos programas.

1.1 Qu es Java
Java es un lenguaje originalmente desarrollado por un grupo de ingenieros de Sun, utilizado por Netscape posteriormente como base para Javascript. Si bien su uso se destaca en el Web, sirve para crear todo tipo de aplicaciones (locales, intranet o internet). Java es un lenguaje: y De objetos. y Independiente de la plataforma. Algunas caractersticas notables: y Robusto. y Gestiona la memoria automticamente. y No permite el uso de tcnicas de programacin inadecuadas. y Multithreading. y Cliente-servidor. y Mecanismos de seguridad incorporados. y Herramientas de documentacin incorporadas.

CAPITULO 2

CREANDO UN PROGRAMA EN NETBEANS


2.1 Creando Proyecto en NetBeans Abrimos el programa NetBeans (en esta oportunidad utilizaremos NetBeans IDE 6.9.1). Luego seleccionamos en el men principal Archivo/Proyecto Nuevo. En la ventana que aparecer a continuacin, seleccione en la columna Categora: Java y en la columna Proyectos: aplicacin Java y luego presione el botn siguiente. En la siguiente ventana digite el nombre del proyecto, en nuestro caso se llamara Venta. Presione el botn examinar para asignar la ubicacin que tendr el proyecto. Para nuestro proyecto nos ubicamos en el escritorio de Windows, luego presiones el botn abrir y en la ventana anterior presione el botn terminar, y de esta manera se habr creado el proyecto. 2.2 Creando Paquete en NetBeans Ahora se crear un paquete al cual se llamar Proyecto, para esto dentro de Venta hay una opcin Paquete de Fuentes, haga click derecho luego elija Nuevo/Paquete Java, en la siguiente ventana escriba el nombre del paquete: Proyecto, y presione el botn terminar. Finalmente se mostrar el paquete creado. Una vez creado el proyecto y el paquete podr crear sus programas. 2.3 Creando archivos de NetBeans Seleccione el paquete Proyecto, haga click derecho, seleccione nuevo y se mostrar un listado de los diferentes tipos de archivos que se pueden crear, los cuales ayudan a la elaboracin de nuestro programa. Los tipos de archivos que usaremos en esta ocasin sern: y Java Class: refiere a creacin de clases que nos ayudad a manejar nuestros datos. y JFrame Form: refiere a creacin de interfaces grficas constituidas en base a elementos grficos como son los componentes (botones, listas, etc.) que permiten al usuario interactuar con el programa diseado. En la Figura 2.1 se aprecia 2 paquetes: Imgenes y Proyecto. El paquete Imgenes ha sido creado para almacenar en l, las imgenes a usar. Para ello dirjase al escritorio de Windows, abra la carpeta de nuestro proyecto, seleccione la carpeta SRC y ver 2 carpetas que son nuestros paquetes. En la carpeta Imgenes guarde las imgenes a usar, ya sea para conos, fondos, botones, etc.

Los archivos de tipo Java Class que crearemos son: y Corte. y Empleados. y Inventario. y Vent. Y los archivos de tipo JFrame Form que crearemos son: y CorteCaja. y IngresoCorte. y IngresoIventario. y IngresoRegistro. y IniciarSesion. y Inicio. y Inventariado. y Norden. y RegistroEmpleado. y Venta.

CAPITULO 3 CREANDO NUESTRO PROGRAMA 3.1 Archivos de tipo Java Class 3.1.1 Corte
Esta clase nos ayudar en el almacenamiento de los tipos de pago de los clientes. Para ello escriba el siguiente cdigo en la clase Corte: package Proyecto; public class Corte { private double efectivo; private double dolares; private double visa; private double master; private double cmr; private double ripley; public double getEfectivo() { return efectivo; } public void setEfectivo(double efectivo) { this.efectivo = efectivo; } } Mtodos Get/Set

Variables

3.1.2 Empleados
Esta clase nos ayudar en el almacenamiento de los datos de los empleados de la empresa. Para ello escriba el siguiente cdigo en la clase Empleados: package Proyecto; public class Empleados { private String nom; private String ape; private int cod; private String cargo; public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } } 8 Mtodos Get/Set

Variables

3.1.3 Inventario
Esta clase nos ayudar en el almacenamiento de los datos de los productos de la empresa. Para ello escriba el siguiente cdigo en la clase Inventario: package Inventario; public class Empleados { private String producto; private int cantidad; private double precioU; public String getProducto() { return producto; } public void setProducto(String producto) { this.producto = producto; } } Mtodos Get/Set

Variables

3.1.4 Vent
Esta clase nos ayudar en el almacenamiento de los productos vendidos. Para ello escriba el siguiente cdigo en la clase Vent: package Proyecto; public class Vent { private String producto; private int cantidad; private double precio; private double total; public String getProducto() { return producto; } public void setProducto(String producto) { this.producto = producto; } } Mtodos Get/Set

Variables

3.2 Archivos de tipo JFrame Form 3.2.1 JFrame Form: Inicio


Esta interfaz ser nuestra ventana inicio. y Diseo. JLabel: lblLogo JPanel: pnlNgegro

JButton: btnSesion

JPanel: pnlAzul

JButton: btnRegistro, btnInventario, btnSalir

Imagen en los componentes: dirjase a la ventana propiedades, seleccione el botn de la opcin Icon. En la ventana seleccione la opcin Image Within Proyect, en la opcin Package (paquete) seleccione el paquete Imgenes que ya fue creado anteriormente, y en la opcin File (archivo) seleccione la imagen que desea que contenga su componente. Accin en los botones (ActionListeners): haga cli,ck derecho en cada uno de los botones, seleccione la opcin events/action y actionPerformed. De esta manera podr usar los Gran parte del cdigo se autogenerar solo una vez que haya diseado su interfaz grfica. Lo que haremos a continuacin ser digitar el cdigo para nuestro programa. btnSalir: con este boton saldremos del programa. private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); }

10

btnSesion, btnRegistro, btnInventario: nos permite activar los JFrame Form: IniciarSesion, IngresoRegistro e IngresoInventario respectivamente. A continuacin se muestra el cdigo para btnRegistro que activa el JFrame Form IngresoRegistro. Para los otro 2 botones ser un cdigo similar, cada uno con el correspondiente JFrame Form que activa. private void btnRegistroActionPerformed(java.awt.event.ActionEvent evt) { IngresoRegistro x=new IngresoRegistro(); x.setVisible(true); dispose(); }

3.2.2 JFrame Form de acceso


Sern las ventanas que nos permitan acceder a distintos puntos de nuestro programa, pero antes se debe digitar un cdigo. Todos poseen los mismos componentes en su diseo. y JFrane Form: IngresoRegistro, IngresoInventario, IngresoCorte. JLabel: lblLogo JPasswordField: passCodigo

JButton: btnAceptar, btnCancelar. Se le debe dar accin (ActionListeners). btnCancelar. Regresar a la ventana inicio. Cdigo: private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) { dispose(); Inicio x=new Inicio(); x.setVisible(true); } JLabel: lblError Al iniciar esta ventana no se ver. Para ello se digitara el siguiente cdigo en el constructor del JFrame Form: public class IngresoRegistro extends javax.swing.JFrame { public IngresoInventario() { initComponents(); lblError.setVisible(false); } Constructor Cdigo

11

JLabel: lblError Aparecer cada vez que el cdigo sea el incorrecto. Las nicas personas que tienen acceso son los Administradores. Para ello se digitar el siguiente cdigo: private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) { buscar(); } public void buscar(){ int ind=-1,cod; String cargo=""; RegistroEmpleado r=new RegistroEmpleado(); cod=Integer.parseInt(passCodigo.getText()); for(int i=0;i<n;i++) if(cod==a[i].getCod()) {ind = i; cargo=a[i].getCargo();} if(ind==-1 ){ lblError.setVisible(true); passCodigo.setText(""); passCodigo.requestFocus();} else if(cargo.equals("ADMINISTRADOR")) {r.setVisible(true); dispose();} else {lblError.setVisible(true); passCodigo.setText(""); passCodigo.requestFocus();} }
package Proyecto; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.StringTokenizer; public class IngresoRegistro extends javax.swing.JFrame { Empleados a[]=new Empleados[1000]; int n; public IngresoRegistro() { initComponents();

El mtodo buscar() nos permite buscar los datos del personal, en este caso buscar el cdigo de cada personal. Pero para que pueda buscar cada cdigo, antes debe leer todo el archivo en el que se ha guardado los datos de todo el personal. Para lograr ello se digitar el siguiente cdigo, quedando de la siguiente manera.

Arreglo que llama a nuestra Java Class Empleado

12

leerArchivo(); lblError.setVisible(false); } public void leerArchivo(){ try{ String linea; FileReader f=new FileReader("Usuario.txt"); BufferedReader b=new BufferedReader(f); while((linea=b.readLine())!=null){ StringTokenizer t=new StringTokenizer(linea,","); a[n]=new Empleados(); a[n].setCod(Integer.parseInt(t.nextToken())); a[n].setNom(t.nextToken()); a[n].setApe(t.nextToken()); a[n].setCargo(t.nextToken()); n++;} b.close(); } catch(IOException e){ System.out.print(e); } } @SuppressWarnings("unchecked") private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) { buscar();} private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) { dispose(); Inicio x=new Inicio(); x.setVisible(true);} public void buscar(){ int ind=-1,cod; String cargo=""; RegistroEmpleado r=new RegistroEmpleado(); cod=Integer.parseInt(passCodigo.getText()); for(int i=0;i<n;i++) if(cod==a[i].getCod()) {ind = i; cargo=a[i].getCargo();} if(ind==-1 ){ lblError.setVisible(true); passCodigo.setText(""); passCodigo.requestFocus();} else if(cargo.equals("ADMINISTRADOR")) {r.setVisible(true); dispose();} else { lblError.setVisible(true); passCodigo.setText(""); passCodigo.requestFocus(); } }

El mtodo leerArchivo() nos permite leer el archivo en el que se encuentra registrado los datos de todo el personal. En esta caso el archivo se llama Usuario.txt.

Se crea un objeto r de la clase del JFrame Form RegistroEmpleado para poder acceder a l. Para el JFrame Form IngresoInventario se utilizar un cdigo muy similiar, el mtodo leerArchivo() tambin leer el archivo en el que se encuentre registrado todos los datos de todo el personal para ver que el cdigo sea el de un administrador. Pero en su mtodo buscar() crear un objeto r de la clase del JFrame Form Inventariado para acceder a l, y similira el JFrame Form IngresoCorte.

13

public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new IngresoRegistro().setVisible(true);} }); } // Variables declaration - do not modify private javax.swing.JButton btnAceptar; private javax.swing.JButton btnCancelar; private javax.swing.JLabel lblError; private javax.swing.JLabel lblIngrese; private javax.swing.JPasswordField passCodigo; // End of variables declaration }

JFrame Form: IniciarSesion. lblError: posee otro texto: USUARIO NO REGISTRADO y no ser visible al abrirse esta ventana.

En este caso, tiene acceso todo personal que se encuentre registrado. Manteniendo un cdigo muy similar al de los JFrame Form: IngresoRegistro e IngresoInventario, solo cambiaramos su manera de acceso. Entonces el mtodo buscar() del botn btnAceptar quedara de la siguiente manera:
private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) { buscar(); } public void buscar(){ int ind=-1,cod; Norden o=new Norden(); cod=Integer.parseInt(passCodigo.getText()); for(int i=0;i<n;i++) if(cod==a[i].getCod()) ind = i; if(ind==-1 ){ lblError.setVisible(true); passCodigo.setText(""); passCodigo.requestFocus();} else {codi=ind; o.setVisible(true); dispose();} }

Se crea un objeto o de la clase del JFrame Form Norden para poder acceder a l.

14

3.2.3 JFrame Form: RegistroEmpleado


SOLO ADMINISTRADORES

JLabel: lblTitulo JButton: btnBuscar JLabel: lblNombre, lblCargo, lblCodigo

JTextField: txtBuscar JLabel: lblBuscar, lblApellido JTextField: txtApellido

JButton: btnCodigo JTextField: txtNombre, txtCargo, txtCodigo

JTable: tblEmpleados

JButton: btnNuevo, btnModificar, btnGuardar, btnActualizar, btnCancelar, btnEliminar, btnSalir Al abrirse esta ventana todos los JTextField aparecen en blanco y solo txtBuscar se encuentra habilitado. Los datos de todos los empleados cargan automticamente en la tabla. Solo aparecen habilitados btnNuevo y btnSalir. .btnBuscar: una vez ingresado un cdigo en txtBuscar este botn busca el cdigo y muestra los datos nombre, apellido, cargo y cdigo, cada uno en su JTextField correspondiente. Habilita btnModificar, btnCancelar y btnEliminar. Deshabilita btnNuevo y btnBuscar. La misma funcin sucede cuando se hace click en uno de los empleados mostrados en la tabla. .btnNuevo: deshabilita asimismo btnEliminar y btnBuscar. Habilita txtNombre, txtApellido y txtCargo para el correspondiente llenado de datos, y btnGuardar y btnCancelar. .btnCodigo: se activar una vez se haya presionado la tecla ENTER en txtCargo. Este botn generar automticamente el cdigo del empleado y al mismo tiempo se deshabilitar. .btnCancelar: devuelve el estado inicial de la ventana.

15

.btnGuardar: almacena los datos ingresados del nuevo empleado, mostrndolos automticamente en la tabla. Devuelve el estado inicial de la ventana. .btnModificar: habilita txtNombre, txtApellido y txtCargo, para proceder a la modificacin de datos. Se deshabilita automticamente y habilita btnActualizar. .btnActualizar: actualiza la modificacin de uno de los datos. Devuelve el estado inicial de la vetana. .btnEliminar: elimina al empleado seleccionado. Devuelve el estado inicial de la ventana.
private void btnCodigoActionPerformed(java.awt.event.ActionEvent evt) { int mayor=999999, menor=100000, n; n=GenerarCodigo(mayor,menor); txtCodigo.setText(""+n); btnGuardar.setEnabled(true); } Cdigo btnCodigo public int GenerarCodigo(int sup, int inf){ return (int)(Math.random()*(sup-inf+1)+inf);} private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { txtNombre.requestFocus(); txtBuscar.setText(""); txtNombre.setText(""); txtApellido.setText(""); txtCargo.setText(""); txtCodigo.setText(""); txtBuscar.setEnabled(false); txtNombre.setEnabled(true); txtApellido.setEnabled(true); txtCargo.setEnabled(true); Cdigo btnNuevo btnBuscar.setEnabled(false); btnNuevo.setEnabled(false); btnEliminar.setEnabled(false); } private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) { int ind=-1,cod; cod=Integer.parseInt(txtCodigo.getText()); for(int i=0;i<n;i++) if(cod==a[i].getCod()) ind=i; if(ind==-1) ingresarDatos(); Mtodo else {txtCodigo.setText("GENERE OTRO CODIGO"); btnCodigo.requestFocus();} txtBuscar.setText(""); txtNombre.setText(""); txtApellido.setText(""); txtCargo.setText(""); txtCodigo.setText(""); Cdigo btnGuardar txtBuscar.setEnabled(true); txtNombre.setEnabled(false); txtApellido.setEnabled(false); txtCargo.setEnabled(false); btnBuscar.setEnabled(true); btnNuevo.setEnabled(true); btnEliminar.setEnabled(true); Mtodo datosTabla(); txtBuscar.requestFocus(); btnGuardar.setEnabled(false); btnCodigo.setEnabled(false); }

16

Mtodo datosTabla(): Lee nuestra Java Class Empleados, public void datosTabla(){ almacena las variables try{ String linea; int fila=0; Crea el archivo Usuario.txt FileReader f=new FileReader("Usuario.txt"); en el que se van a almacenar BufferedReader b=new BufferedReader(f); los datos de los empleados while((linea=b.readLine())!=null){ StringTokenizer t=new StringTokenizer(linea,","); tblEmpleados.setValueAt(t.nextToken(), fila, 0); Lee el archivo tblEmpleados.setValueAt(t.nextToken(), fila, 1); creado Usuario.txt tblEmpleados.setValueAt(t.nextToken(), fila, 2); y muestra los datos tblEmpleados.setValueAt(t.nextToken(), fila, 3); fila++;} en la tabla b.close(); tblEmpleados } catch(IOException e){ Mtodo ingresarDatos(): System.out.print(e);} public void ingresarDatos(){ } Empleados c=new Empleados(); c.setNom(txtNombre.getText().toUpperCase()); c.setApe(txtApellido.getText().toUpperCase()); c.setCargo(txtCargo.getText().toUpperCase()); c.setCod(Integer.parseInt(txtCodigo.getText())); try{ Este cdigo se usa al FileWriter f=new FileWriter("Usuario.txt",true); inicializar la ventana PrintWriter p=new PrintWriter(f); p.println(c.getCod()+","+c.getNom()+","+c.getApe()+","+c.getCargo()); p.close(); } catch(IOException e){ System.out.println(e); } } package Proyecto; import java.io.FileWriter; import java.io.PrintWriter; import java.io.IOException; import java.io.BufferedReader; import java.io.FileReader; import java.util.StringTokenizer; import javax.swing.JOptionPane; public class RegistroEmpleado extends javax.swing.JFrame { int n,id; Empleados a[]=new Empleados[1000]; public RegistroEmpleado() { initComponents(); leerArchivo(); datosTabla(); txtBuscar.requestFocus(); } public void leerArchivo(){ } public void datosTabla(){ }

Al inicializar la ventana lee ambos mtodos y el puntero aparece en txtBuscar Mtodo leerArchivo() usado anteriormente Mtodo datosTable()

17

3.2.4 JFrame Form: Inventariado


SOLO ADMINISTRADORES

JLabel: lblTitulo JButton: btnBuscar

JLabel: lblProducto, lblCantidad, lblPrecio

JTextField: txtBuscar JTextField: txtProducto JTextField: txtCantidad JTextField: txtPrecio

private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) { id=tblProductos.getSelectedRow(); txtBuscar.requestFocus(); btnBuscar.setEnabled(true); btnNuevo.setEnabled(true); btnEliminar.setEnabled(true); txtProducto.setText(""); txtPrecioU.setText(""); txtCantidad.setText(""); txtProducto.setEnabled(false); txtCantidad.setEnabled(false); actualizar(id); }

JTable: tblProductos

Cdigo btnEliminar JButton: btnNuevo, btnModificar, btnGuardar, btnActualizar, btnCancelar, btnEliminar, btnSalir Como se aprecia se utilizan los mismos botones que en RegistroEmpleado (a excepcin de btnCodigo) para un manejo ms fcil del programa. Al inicializar la ventana se muestra un cdigo similar JFrame Form mencionado.
package Proyecto; public class Inventariado extends javax.swing.JFrame { int n,indice,id; Inventario v[]=new Inventario[1000]; public Inventariado() { initComponents(); leerArchivo(); datosTabla(); txtBuscar.requestFocus(); }

Se invoca a nuestra Java Class Inventario Al inicializar la ventana lee ambos mtodos y el puntero aparece en txtBuscar. Sin embargo los mtodos varan pero solo en datos 18

public void leerArchivo(){ try{ String linea; FileReader f=new FileReader("Inventariado.txt"); BufferedReader b=new BufferedReader(f); while((linea=b.readLine())!=null){ StringTokenizer t=new StringTokenizer(linea,","); v[n]=new Inventario(); v[n].setProducto(t.nextToken()); v[n].setCantidad(Integer.parseInt(t.nextToken())); v[n].setprecioU(Double.parseDouble(t.nextToken())); n++;} b.close(); } catch(IOException e){ System.out.print(e);} }

public void datosTabla(){ try{ String linea; int fila=0; FileReader f=new FileReader("Inventariado.txt"); BufferedReader b=new BufferedReader(f); while((linea=b.readLine())!=null){ StringTokenizer t=new StringTokenizer(linea,","); tblProductos.setValueAt(t.nextToken(), fila, 0); tblProductos.setValueAt(t.nextToken(), fila, 1); tblProductos.setValueAt(t.nextToken(), fila, 2); fila++;} Mtodo ingresarDatos(): b.close(); public void ingresarDatos(){ } Inventario c=new Inventario(); catch(IOException e){ c.setProducto(txtProducto.getText().toUpperCase()); System.out.print(e);} c.setCantidad(Integer.parseInt(txtCantidad.getText())); } c.setprecioU(Double.parseDouble(txtPrecioU.getText())); try{ FileWriter f=new FileWriter("Inventariado.txt",true); PrintWriter p=new PrintWriter(f); p.println(c.getProducto()+","+c.getCantidad()+","+c.getprecioU()); p.close(); } catch(IOException e){ System.out.println(e);} Cdigo } btnActualizar public void actualizar(int indice){ v[id].setProducto(txtProducto.getText().toUpperCase()); v[id].setCantidad(Integer.parseInt(txtCantidad.getText())); v[id].setprecioU(Double.parseDouble(txtPrecioU.getText())); try{ FileWriter f=new FileWriter("Inventariado.txt"); PrintWriter p=new PrintWriter(f); for(int i=0;i<n;i++) p.println(v[i].getProducto()+","+v[i].getCantidad()+","+v[i].getprecioU()); p.close(); } catch(IOException e){ System.out.print(e); } }

En este caso se va a interactuar con los productos y no con los empleados, por ello es que se procede a la creacin de un nuevo archivo Inventariado.txt en el que se almacenar los datos de los productos. Se crea en el mtodo ingresarDatos(), mtodo del botn btnGuardar

Este cdigo es usado para los botones btnActualizar en los diferentes JFrame Form que los contengan, solo varia las caractersticas de las variables y la especificacin del archivo

19

Cdigo btnBuscar
private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) { id=buscar(); } public int buscar(){ int ind=-1; String produc; produc=txtBuscar.getText().toUpperCase(); for(int i=0;i<n;i++) if(produc.equals(v[i].getProducto())) ind=i; if(ind==-1){ JOptionPane.showMessageDialog(this, "NO SE ENCUENTRA REGISTRADO", "ATENCION", JOptionPane.ERROR_MESSAGE); txtBuscar.setText(""); txtBuscar.requestFocus();} else {txtProducto.setText(v[ind].getProducto()); txtCantidad.setText(""+v[ind].getCantidad()); txtPrecioU.setText(""+v[ind].getprecioU()); } return ind; }

private void tblProductosMouseClicked(java.awt.event.MouseEvent evt) { id=tblProductos.getSelectedRow(); txtProducto.setText((tblProductos.getValueAt(id, 0)).toString()); txtCantidad.setText((tblProductos.getValueAt(id, 1)).toString()); txtPrecioU.setText((tblProductos.getValueAt(id, 2)).toString()); btnModificar.setEnabled(true); }

Cdigo para que cada vez que se seleccione un empleado en la tabla, se muestre en sus JTextField correspondientes

private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) { txtBuscar.setEnabled(true); txtBuscar.requestFocus(); Cdigo txtBuscar.setText(""); txtProducto.setText(""); btnModificar txtCantidad.setText(""); txtPrecioU.setText(""); txtProducto.setEnabled(false); private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) { txtCantidad.setEnabled(false); Inicio x=new Inicio(); btnBuscar.setEnabled(true); x.setVisible(true); Cdigo btnNuevo.setEnabled(true); dispose(); btnGuardar.setEnabled(false); btnSalir } btnEliminar.setEnabled(true); }

20

3.2.5 JFrame Form: Norden


TODO EL PERSONAL REGISTRADO

JList: lstOrden JButton: btnBuscar

JLabel: lblProducto, lblPrecioU, lblPrecio JTextField: txtStock txtTotal

JTextField: txtBuscar , txtProducto, txtPrecioU, JButton: btnAgregar

JTable: tblProductos

JButton: btnAnular

JButton: btnAplicar, btnCuadre, btnSalir

JLabel lblCantidad, JComboBox: cbxCantidad Esta ventana es parecida de cierta manera al JFrame Form Inventariado. btnNuevo, tblProductos mantiene la misma codificacin. Al inicializar la ventana se muestra un cdigo similar JFrame Form mencionado, pero se le agrega una nueva lectura de archivo.
package Proyecto; import javax.swing.DefaultListModel; public class Norden extends javax.swing.JFrame { DefaultListModel l=new DefaultListModel(); int n,indice,k,cantidad,q; String producto; Inventario v[]=new Inventario[10000]; Vent a[]=new Vent[10000]; Vent c[]=new Vent[100]; double total=0, precio; public Norden() { initComponents(); leerArchivo(); datosTabla(); leerTotal(); mostrarCantidad(); }

Importamos un nuevo paquete para la utilizacin de JList: lstOrden, y se le crea un objeto l Se invoca a nuestras Java Class Inventario y Vent Arreglo para el manejo del precio: disminucin o aumento del total Al inicializar la ventana lee ambos mtodos y el puntero aparece en txtBuscar. Y ahora lee 2 mtodos ms 21

public void mostrarCantidad(){ for(int i=0;i<=100;i++) cbxCantidad.addItem(i); }

public void leerTotal(){ try{ String linea; En este caso se va a interactuar con los FileReader f=new FileReader("Total.txt"); productos almacenados y productos BufferedReader b=new BufferedReader(f); vendidos, por ello es que se procede a la while((linea=b.readLine())!=null){ creacin de un nuevo archivo Total.txt en StringTokenizer t=new StringTokenizer(linea,","); el que se almacenar el total, y as poder a[q]=new Vent(); llevar ese dato a otra ventana. Se crea en el a[q].setTotal(Double.parseDouble(t.nextToken())); mtodo agregar(), mtodo del botn q++;} b.close(); btnAplicar } catch(IOException e){ private void btnAplicarActionPerformed(java.awt.event.ActionEvent evt) { System.out.print(e);} agregar(); } Venta ven=new Venta(); ven.setVisible(true); Cdigo dispose();} btnAplicar public void agregar(){ for(int i=0;i<k;i++) c[i].setTotal(total); try{ FileWriter f=new FileWriter("Total.txt",true); PrintWriter p=new PrintWriter(f); for(int i=0;i<k;i++) p.println(c[i].getTotal()); p.close(); } catch(IOException e){ System.out.println(e);} }

Mtodo mostrarCantidad(): al inicializarse la ventana, automticamente cbxCantidad tendr nmeros del 1 hasta i=100.

Cdigo cbxCantidad

private void cbxCantidadItemStateChanged(java.awt.event.ItemEvent evt) { int ind; Cdigo ind=cbxCantidad.getSelectedIndex(); btnAgregar for (int i=0;i<40;i++) private void btnAgregarPActionPerformed(java.awt.event.ActionEvent evt) { if(i==ind) producto=txtProducto.getText(); cantidad=i; precio=Double.parseDouble(txtPrecioU.getText())*cantidad; } total=total+precio; lstOrden.setModel(l); l.addElement(cantidad+" "+producto+" "+precio); txtBuscar.setText(""); txtBuscar.requestFocus(); txtProducto.setText(""); txtPrecioU.setText(""); txtCantidad.setText(""); txtTotal.setText("S/. "+total); c[k]=new Vent(); c[k].setProducto(producto); c[k].setCantidad(cantidad); c[k].setPrecio(precio); k++; btnAplicar.setEnabled(true); }

22

Cdigo btnAnular
private void btnAnularActionPerformed(java.awt.event.ActionEvent evt) { int ind; ind=lstOrden.getSelectedIndex(); total=total-c[ind].getPrecio(); txtTotal.setText("S/. "+total); l.remove(ind); for(int i=ind;i<k;i++) c[i].setPrecio(c[i+1].getPrecio()); }

Con este botn se ingresa al JFrame Form CorteCaja, en el cual se cuadrar la caja del empleado que se encontr laborando. Acceso solo para administradores. A continuacin se muestra su cdigo.
private void btnCuadreActionPerformed(java.awt.event.ActionEvent evt) { IngresoCorte x=new IngresoCorte(); x.setVisible(true); dispose(); }

Con este botn se regrese a la ventana de Inicio.


private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) { Inicio x=new Inicio(); x.setVisible(true); dispose(); }

Este botn nos llevar al JFrame Form Venta, para ingresar el tipo y la cantidad con la que paga el cliente. Su cdigo ya fue formulado en la pgina anterior.

23

3.2.6 JFrame Form: Venta

JLabel: lblTotal lblEfectivo lblCambio lblTpago

JTextField: txtTotal txtEfectivo txtCambio

JButton: btnSoles btnDolares btnVisa btnMaster btnCmr btnRipley

JButton: btnAplicar btnAtras

JPanel: pnlVerde En esta ventana el total de la venta realizada en el JFrame Form Norden debe cargar automticamente. Veamos la primera parte de su cdigo.
package Proyecto; public class Venta extends javax.swing.JFrame { Vent a[]=new Vent[100000]; Corte c[]=new Corte[100000]; Inventario v[]=new Inventario[1000]; int q,k=0,n,j=0,m; char tCambio; double total,soles=0,dolares=0,visa=0,master=0,cmr=0,ripley=0; public Venta() { initComponents(); leerTotal(); leerArchivo(); mostrarTotal(); leerCorte(); }

Se invoca a nuestras Java Class Vent, Corte e Inventario Para cargar el total del JFrame Form Norden Para almacenar los tipos de pago de los clientes Para actualizar el inventario

Al inicializar la ventana lee los mtodos leerTotal, leerArchivo, mostrarTotal, y leerCorte

El mtodo mostrarTotal(): Una vez que se haya ledo el archivo Total.txt (mtodo leerTotal()), este mtodo har que aparezca automticamente el total.

public void mostrarTotal(){ for(int i=0;i<q;i++) k=i; total=a[k].getTotal(); txtTotal.setText(""+total); }

24

Cada uno de estos botones nos ayudara en la seleccin del tipo de pago. Solamente btnSoles y btnDolares activaran txtEfectivo. Mostramos los cdigos de algunos de ellos.
private void btnSolesActionPerformed(java.awt.event.ActionEvent evt) { tCambio='S'; txtEfectivo.setEnabled(true); txtEfectivo.requestFocus(); } private void btnDolaresActionPerformed(java.awt.event.ActionEvent evt) { tCambio='D'; txtEfectivo.setEnabled(true); txtEfectivo.requestFocus(); } private void btnVisaActionPerformed(java.awt.event.ActionEvent evt) { tCambio='V'; txtEfectivo.setEnabled(false); } private void btnMasterActionPerformed(java.awt.event.ActionEvent evt) { tCambio='M'; txtEfectivo.setEnabled(false); }

El cdigo es similar para todos. La variable tCambio tomar como valor la primera letra de cada tipo de pago.

Mtodos

private void btnAplicarActionPerformed(java.awt.event.ActionEvent evt) { double cambio, efectivo, dolar,d=2.7; for(int i=0;i<n;i++) j=i; if(tCambio=='S') {efectivo=Double.parseDouble(txtEfectivo.getText()); cambio=efectivo-total; txtCambio.setText(""+cambio); Cdigo soles=c[j].getEfectivo()+total;} btnAplicar if(tCambio=='D') {efectivo=Double.parseDouble(txtEfectivo.getText()); dolar=efectivo*d; cambio=dolar-total; txtCambio.setText(""+cambio); dolares=c[j].getDolares()+total;} if(tCambio=='V') {txtCambio.setText("CANCELO CON VISA"); visa=c[j].getVisa()+total;} if(tCambio=='M') {txtCambio.setText("CANCELO CON MASTERCARD"); master=c[j].getMaster()+total;} guardarCorte(); actualizaInv(); }

25

Mtodo guardarCorte(): public void guardarCorte(){ Almacenamos los distintos tipos de Corte w=new Corte(); pago en el archivo Cort.txt para w.setEfectivo(soles); realizar un cuadre de caja ms w.setDolares(dolares); sencillo y rpido en el JFrameForm w.setVisa(visa); CorteCaja w.setMaster(master); w.setCmr(cmr); w.setRipley(ripley); try{ FileWriter f=new FileWriter("Cort.txt",true); PrintWriter p=new PrintWriter(f); p.println(w.getEfectivo()+","+w.getDolares()+","+w.getVisa()+","+w.getMaster()+","+w.getCmr()+","+w.getRipley()); p.close(); } catch(IOException e){ System.out.println(e);} } Mtodo actualizaInv(): public void actualizaInv(){ Se actualiza el inventariado String producto; for(int t=0;t<q;t++) {producto = a[t].getProducto(); for(int i=0;i<n;i++) if(producto.equals(v[i].getProducto())) v[i].setCantidad(v[i].getCantidad()-a[t].getCantidad());} try{ FileWriter f=new FileWriter("Inventariado.txt"); PrintWriter p=new PrintWriter(f); for(int i=0;i<n;i++) p.println(v[i].getProducto()+","+v[i].getCantidad()+","+v[i].getprecioU()); p.close(); } catch(IOException e){ System.out.print(e);} }

btnAtras nos regresa a JFrame Form Norden para cancelar la orden o tomar una nueva.

private void btnAtrasActionPerformed(java.awt.event.ActionEvent evt) { Norden o=new Norden(); o.setVisible(true); dispose(); }

26

3.2.7 JFrame Form: CorteCaja

SOLO ADMINISTRADORES

JLabel: lblTitulo lblDiferencia lblDepositado lblCaja JTextField: txtSolesCaja, txtSolesDepositado, txtSolesDiferencia JTextField: txtDolaresCaja, txtDolaresDepositado, txtDolaresDiferencia JLabel: lblSoles lblDolares lblVisa lblMaster lblCmr lblRipley JTextField: txtVisaCaja, txtVisaDepositado, txtVisaDiferencia JTextField: txtMasterCaja, txtMasterDepositado, txtMasterDiferencia JTextField: txtCmrCaja, txtCmrDepositado, txtCmrDiferencia JTextField: txtRipleyCaja, txtRipleyDepositado, txtRipleyDiferencia

JButton: btnChekar, btnCancelar Llego la hora de cuadrar la caja. Recuerde que solo tienen acceso los administradores. Para que cargue automticamente los tipos de pago, al inicializar la ventana debe leer nuestro archivo Cort.txt ya creado. Veamos el cdigo:
package Proyecto; public class CorteCaja extends javax.swing.JFrame { Corte c[]=new Corte[100000]; int n,k=0; double soles=0,dolares=0,visa=0,master=0,cmr=0,ripley=0; public CorteCaja() { initComponents(); leerCorte(); mostrarCorte(); }

Se invoca a nuestra Java Class Corte, para ver los tipos de pago

Mtodos

27

public void leerCorte(){ try{ String linea; FileReader f=new FileReader("Cort.txt"); BufferedReader b=new BufferedReader(f); while((linea=b.readLine())!=null){ StringTokenizer t=new StringTokenizer(linea,","); c[n]=new Corte(); c[n].setEfectivo(Double.parseDouble(t.nextToken())); c[n].setDolares(Double.parseDouble(t.nextToken())); c[n].setVisa(Double.parseDouble(t.nextToken())); c[n].setMaster(Double.parseDouble(t.nextToken())); c[n].setCmr(Double.parseDouble(t.nextToken())); c[n].setRipley(Double.parseDouble(t.nextToken())); n++;} b.close(); } catch(IOException e){ System.out.print(e);} } public void mostrarCorte(){ for(int i=0;i<n;i++) k=i; txtSolesCaja.setText(""+c[k].getEfectivo()); txtDolaresCaja.setText(""+c[k].getDolares()); txtVisaCaja.setText(""+c[k].getVisa()); txtMasterCaja.setText(""+c[k].getMaster()); txtCmrCaja.setText(""+c[k].getCmr()); txtRipleyCaja.setText(""+c[k].getRipley()); }

Mtodo leerCorte(): nos permite leer el archivo en el que se encuentra guardado los tipos de pago

Mtodo mostrarCorte(): muestra los tipos de pago en sus JTextField correspondientes.

A los JTextField que se encuentran en la columna DEPOSITADO se le da la accin KeyPressed

Primero se ingresa la cantidad contada en caja y se ingresa en la columna DEPOSITADO, al presionar enter aparecer en la columna DIFERENCIA si el cajero debe o no. 28

private void txtSolesDepositadoKeyPressed(java.awt.event.KeyEvent evt) { double soles,s,diferencia; soles=Double.parseDouble(txtSolesCaja.getText()); s=Double.parseDouble(txtSolesDepositado.getText()); if(evt.getKeyCode()==evt.VK_ENTER) {diferencia=s-soles; txtSolesDiferencia.setText(""+diferencia);} } private void txtDolaresDepositadoKeyPressed(java.awt.event.KeyEvent evt) { double dolares,d,diferencia; Cdigo para la accin KeyPressed de cada dolares=Double.parseDouble(txtDolaresCaja.getText()); JTextField de la columna DEPOSITADO. d=Double.parseDouble(txtDolaresDepositado.getText()); if(evt.getKeyCode()==evt.VK_ENTER) El cdigo es el mismo, solo varia el tipo de {diferencia=d-dolares; pago y por ello la variable. txtDolaresDiferencia.setText(""+diferencia);} } private void txtVisaDepositadoKeyPressed(java.awt.event.KeyEvent evt) { double caja,d,diferencia; caja=Double.parseDouble(txtVisaCaja.getText()); d=Double.parseDouble(txtVisaDepositado.getText()); if(evt.getKeyCode()==evt.VK_ENTER) {diferencia=d-caja; Cdigo btnChekar: este botn elimina los txtVisaDiferencia.setText(""+diferencia);} tipos de pago guardados para poder ingresar } nuevos. Cierra la caja del empleado de turno y

devuelve la pgina de Inicio para darle paso a otro empleado o a los administradores.

private void btnChekarActionPerformed(java.awt.event.ActionEvent evt) { Inicio x=new Inicio(); limpiar(); Mtodo x.setVisible(true); dispose();} public void limpiar(){ Mtodo limpiar(): elimina o Corte v=new Corte(); limpia los datos almacenados v.setEfectivo(soles); v.setDolares(dolares); como tipo de pago para v.setVisa(visa); almacenar nuevos. v.setMaster(master); v.setCmr(cmr); v.setRipley(ripley); try{ FileWriter f=new FileWriter("Cort.txt",true); PrintWriter p=new PrintWriter(f); p.println(v.getEfectivo()+","+v.getDolares()+","+v.getVisa()+","+v.getMaster()+","+v.getCmr()+","+v.getRipley()); p.close(); } catch(IOException e){ System.out.println(e);} } private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) { Norden x=new Norden(); x.setVisible(true); dispose(); }

btnCancelar: nos devuelve al JFrame Form Norden.

29