Documente Academic
Documente Profesional
Documente Cultură
CURSO: LENGUAJE DE PROGRAMACION II PROFESORA: SALLY KARINA TORRES ALVARADO TEMA: PROYECTO DE PROGRAMACION PROYECTO:
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
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
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
JButton: btnSesion
JPanel: pnlAzul
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(); }
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.
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
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
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
JTable: tblProductos
JButton: btnAnular
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 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(); }
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
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
El mtodo mostrarTotal(): Una vez que se haya ledo el archivo Total.txt (mtodo leerTotal()), este mtodo har que aparezca automticamente el 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.
26
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
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(); }
29