informe factura

Upload: christian-verdezoto-verdezoto-salazar

Post on 13-Jan-2016

236 views

Category:

Documents


0 download

DESCRIPTION

Crear una factura electrónica en java

TRANSCRIPT

Proyecto de Programacin II

Profesor: Jos Luis Villagomez MenndezIntegrantes:Jennifer Gonzales.Christian Verdezoto.Curso: 2G-1 Ing. En Sistemas Proyecto de Programacin II Sistema de facturacin para una tienda de tipo virtual implementando una interfaz grfica dinmica y amigable con el usuario.

TABLA DE CONTENIDOSTABLA DE CONTENIDOS1TABLA DE ILUSTRACIONES2INTRODUCCIN31.TEMA32.OBJETIVOS:33.JUSTIFICACIN44.ALCANCE45.MARCO TERICO4PROGRAMACIN GRAFICA4JFRAME5

GESTORES DE DISTRIBUCION5JBUTTON:7

JLABEL8JTEXTFIELD:9JRADIOBUTTON:10ButtonGroup11JPANEL:12JCHECKBOX12JMENUBAR13

Paquetes Utilizados16Import javax.swing.*;16Import java.awt.event;16Import java.awt.*;16CONSTRUCTOR16VOID CONTENIDOS:18USO DE OYENTES:18MANEJO DE EXEPCIONES PARA EL INGRESO DE DATOS:20CONSTRUCTOR:24PALABRAS RESERVADAS246.Programa.25PANTALLA PRINCIPAL27Pantalla secundaria (Catlogo)40Capturas de pantalla56Conclusiones597.BIBLIOGRAFIA60

TABLA DE ILUSTRACIONESIlustracin 1: Ejemplo de Flow Layout5Ilustracin 2: Ejemplo de GridLayout6Ilustracin 3: Ejemplo de BorderLayout7Ilustracin 4: Ejemplo de JButton8Ilustracin 5: Ejemplo de JLabel9Ilustracin 6: Ejemplo de JTextFile10Ilustracin 7: Ejemplo de JRadioButton12Ilustracin 8: Ejemplo de JPanel12Ilustracin 9: Ejemplo de JCheckBox13Ilustracin 10: Ejemplo de JMenuBar14Ilustracin 11: Ejemplo de JMenu15Ilustracin 12: Ejemplo de Oyentes19Ilustracin 13: Ejemplo de EventListener20Ilustracin 14: Ejemplo Registro de Oyentes20Ilustracin 16: Ejemplo de Herencia26

INTRODUCCINPor medio de la utilizacin del software a desarrollarse, se expondr varios conocimientos relacionados con estructuras de datos y la metodologa de programacin grfica.Mediante la Programacin Grfica se facilita la creacin de software de calidad, basada en el modo de pensar del hombre y no de la mquina, tambin ayudar a los estudiantes a brindar una mejor experiencia sobre el manejo con mayor precisin de un programa al usuario. De esta manera se obtendr conocimientos para poder iniciar un aprendizaje adecuado para la programacin trabajando con los temas fundamentales, estructuras de control y los pasos que se debe seguir para poder crear programas con un nivel muy alto en el control de ingreso de datos.1. TEMADesarrollo de un Sistema de facturacin con Interfaz Grfica al usuario. 2. OBJETIVOS: Desarrollar una aplicacin que permita una facturacin ordenada, rpida y amigable con el usuario. Utilizar los distintos elementos de la paquetera de java para el armado de la interfaz grafica. Interactuar con el usuario por medio de los oyentes que desencadenaran en eventos que nosotros programaremos en base a la teora aprendida en clase. Validar los datos ingresados por el usuario utilizando Excepciones, para que no interrumpa el flujo normal de las sentencias durante la ejecucin del programa, comprobando si es que existe algn error.

3. JUSTIFICACINEl software que se va a desarrollar, se realiza con la finalidad de que el estudiante pueda acoplarse fcilmente al ambiente de la programacin, en la cual esta sustentado los conceptos de la programacin grfica.

Al utilizar mtodo grfico se llega a tener muchas ventajas las cuales como ya se han dicho crea una interaccin ms dinmica entre el usuario y el ordenador, tambin con esto se avanza un escaln mas en la programacin dejando un poco de lado la consola y los cuadros de mensaje en los cuales nos hemos venido desarrollando. .4. ALCANCEMediante la creacin del software podemos desarrollar las aplicaciones de Java utilizando Herencia, Constructores para saber cul es la relacin que se obtiene en cada una de las clases y de esta manera desarrollar con ms claridad la solucin de problemas que se presentan en la vida cotidiana, y as el programador pueda trabajar con datos extremadamente grandes, como tambin podr buscar datos sin complicacin.5. MARCO TERICOPROGRAMACIN GRAFICAEs el proceso de construccin de una aplicacin que involucra elementos humanos y tecnolgicos, que deben ser integrados aplicando tcnicas, modelos y estndares, que permitan garantizar la construccin de aplicaciones que cumplan los requerimientos de los usuarios.

JFRAMEEl Frame es un contenedor que tiene como tarea guardar nuestros componentes y darles un sentido grfico, digamos que el Frame es una ventana que tiene propiedades como tamao, posicin, titulo, etc.GESTORES DE DISTRIBUCIONPor lo que para determinar la forma en la que se distribuyen los componentes dentro del contenedor podemos emplear los FlowLayout, GridLayout o los BorderLayout.Por lo que vamos a empezar con la explicacin de cada uno de los tres.FlowLayout Los componentes se van colocando deizquierda a derecha. Cuando una lnea se completa se pasa ala siguiente. Mantiene el tamao de los componentes. Constructor:FlowLayout();

Ilustracin 1: Ejemplo de Flow Layout

GriLayout Parrilla de celdas iguales que se rellena de izquierda a derecha, lnea a lnea. Cambia el tamao de los componentes. El nmero de filas o columnas se indica en el constructor. El otro parmetro se deja a 0. Es calculado automticamente por el gestor de distribucin. Constructor: GridLayout(int filas, int columnas). Ilustracin 2: Ejemplo de GridLayout

BorderLayout Coloca los componentes en los 4 puntos cardinales y en el centro. El del centro se expande para ocupar el mayor rea posible. El resto ocupan el menor espacio posible. Constructor: BorderLayout(). El mtodo add tiene un parmetro adicional para indicar la zona: Component add(Component comp, int index).

Ilustracin 3: Ejemplo de BorderLayout

Index puede tomar los siguientes valores:BorderLayout.NORTH ; BorderLayout.SOUT ; BorderLayout.WEST, BorderLayout.EAST, BorderLayout.CENTERY hasta aqu la entrega de este lunes. Os adelanto que para la siguiente entrega tenemos preparado un ejemplo donde podris observar como se utilizan estos gestores y cual es la apariencia final de una GUIJBUTTON:La clase JButton proporciona un botn visible que los desarrolladores pueden aadir a cualquier interfaz de usuario en Java, ajustando su apariencia y comportamiento para adaptarla a las necesidades de un proyecto. Los desarrolladores pueden crear mltiples elementos JButton dentro de un nico programa de Java, dando a cada uno un rol especfico segn sea necesario.La funcin de un JButton es crear un botn visible dentro de una aplicacin de interfaz grfica de usuario en Java. El JButton permite a los programadores dictar el texto que aparece en el botn y el momento en el que aparece dentro de la interfaz general. Usando mtodos adicionales dentro del lenguaje Java los programas tambin pueden proporcionar respuestas detalladas a la interaccin del usuario con un JButton. Los JButtons se encuentran entre los muchos elementos de interfaz de usuario posibles en Java.

Ilustracin 4: Ejemplo de JButton

JLABEL

Con la clase JLabel, se puede mostrar texto no seleccionable e imgenes. Si necesitamos crear un componente que muestre un sencillo texto o una imagen, reaccionando opcionalmente a la entrada del usuario, podemos hacerlo utilizando un ejemplar de JLabel o de una subclase personalizada de JLabel. Si el componente interactivo tiene estado, pobablemente deberamos utilizar un button en vez de una etiqueta. Aqu podemos ver una imagen de una aplicacin que muestra tres etiquetas. La ventana est dividida entres filas de la misma altura, la etieueta de cada fila es lo ms ancha posible. De todos los componentes de interfaz de usuario que proporciona Java, lasetiquetas son, sin lugar a duda, los ms sencillos. Las etiquetas se utilizan parasituar fragmentos de text o o imgenes en la pantalla, de manera que su uso mscomn es dar ttulo a otras reas o a otros componentes Swing.

Las etiquetas presentan 3 formas de alineamiento:

LEFT o izquierda (JLabel.LEFT). CENTER o centrada(JLabel.CENTER). RIGHT o derecho (JLabel.RIGTH).

Un ejemplo de la utilizacin de este componente podra ser el siguiente en el que semuestran las distintas construcciones del componente JLabel:

Mtodos Constructores

MtodosDescripcin

JLabel()

Crea una etiqueta.

JLabel(Icon)

Crea una etiqueta con la imagen indicada.

JLabel(Icon,int)

Crea una etiqueta con la imagen y el alineamiento indicados. Puede ser LEFT, CENTER y RIGHT.

JLabel(String)

Crea una etiqueta con el texto indicado.

JLabel(String,int)

Crea una etiqueta con el texto y alineamiento indicados.

JLabel(String,Icon,int)

Crea una etiqueta con el texto, imagen y alineamiento indicados.

Ilustracin 5: Ejemplo de JLabel

JTEXTFIELD:Los campos de texto o textfield se utilizan cuando se necesita un rea donde el usuario pueda introducir un fragmento relativamente pequeo de informacin, como el nombre, un identificador etc.

Ilustracin 6: Ejemplo de JTextFile

JRADIOBUTTON:Los Botones de Radio son grupos de botones en los que, por convencin, slo uno de ellos puede estar seleccionado. Swing soporta botones de radio con las clases JRadioButton y ButtonGroup.

Mtodos constructores

MtodosDescripcin

JRadioButton()

Crea un JRadioButton sin texto y no seleccionado.

JRadioButton(Action)

Crea un RadioButton especificando el escuchador de eventos que tendr asociado.

JRadioButton(String)

Crea un RadioButton con un texto determinado.

JRadioButton(String,boolean)

Crea un RadioButton especificando el texto y elestado, seleccionado o no seleccionado (true o false)

JRadioButton(Icon)

Crea un RadioButton con una imagen, sin texto ysin seleccionar.

JRadioButton(Icon,boolean)

Crea un RadioButton con la imagen seleccionada y el estado (true seleccionado, false noseleccionado)

JRadioButton(String, Icon)

Crea un RadioButton no seleccionado con untexto y con la imagen espeficificada

JRadioButton(String, Icon,boolean)

Crea un RadioButton especificando un texto, unaimagen y el estado

ButtonGroup

Esta clase se usa para crear un conjunto de botones con exclusin entre ellos, esdecir, cuando se seleccione un botn, todos los dems se deseleccionarn automticamente.

Este componente pude usarse con cualquierconjunto de objetos herede de la claseAbstractButton. Normalmente se utiliza parainstancias de JRadioButton.JRadioButtonMenuItem o JToggleButton. Nose podr utilizar con instancias decomponentes como JButton o JMenuItem yaque stos no implementan ningn mtodo para obtener su estado de seleccin (si est ono seleccionado).

Inicialmente todos los botones en un grupo no estn seleccionados. Una vez que se seleccione uno, a partir de ah, siempre habr uno de ellos seleccionado.Hay que resaltar que cuando se define un ButtonGroup no se est definiendo un componente nuevo, simplemente se est indicando que el conjunto de componentes que lo componen tienen las caractersticas que se han indicado anteriormente. A la hora de insertarlo en la ventana habr que insertar cada uno delos botones, no se podr insertar el grupo de botones creado ya que como tal no existe.

Ilustracin 7: Ejemplo de JRadioButton

JPANEL:Los JPanel en Java son objetos contenedores, la finalidad de estos objetos es la agrupacin de otros objetos tales como botones, campos de texto, etiquetas, selectores, etc; una gran ventaja de Usar JPanel en Java es que podemos manejar la agrupacin de una mejor forma, supongamos que tenemos una serie de botones en un panel, y deseamos desactivarlos todos a las vez, en lugar de hacerlo individualmente con los botones, podemos desactivar el panel y con esto los botones.

Ilustracin 8: Ejemplo de JPanel

JCHECKBOXLos CheckBox son similares a los RadioButton con la excepcin de que en stos s puede haber ms de uno de ellos seleccionado, o ninguno.

Swing tambin permite insertar este tipo de componentes en mens. Esto se consigue a travs de la clase JCheckBoxMenuItem

Tanto la clase JCheckBox, como la clase JChekBoxMenuItem, son subclases de AbstractButton, por lo que heredan su funcionalidad.

Ilustracin 9: Ejemplo de JCheckBoxJMENUBAR

Para empezar debemos conocer los JComponents que estn involucrados para poder crear la barra de men

Ilustracin 10: Ejemplo de JMenuBar

Como muestra la imagen, una barra de menu se compone de: JMenuBar: Es la barra de men principal. Una barra horizontal alargada en la que se colocarn las distintas opciones. JMenu:Es una de las cosas que se pueden aadir a un JMenuBar o a otro JMenu. Cuando aadimos uno de estos, tendremos un algo que al pinchar despliega un nuevo men. JMenuItem: Es una opcin del JMenu que cuando lo pinchas hace algoJMENU BAREste componente es muytilya que representa la barra demenque vemos siempre en todo programa y es muytilpara acceder a lainformacinde forma msfcily organizada..

Ilustracin 11: Ejemplo de JMenu

JMENUUn men es un objeto que se le aade al JMenuBar, y sirve para almacenar items comunes. Ahora veremos como crear un men.

JMENUITEM

Un JMenuItem es un elemento del men y al ser pulsado genera un evento, o sea, abre una ventana, pide datos o cualquier evento.

JListEl JList es un componente que permite seleccionar un o varios tems de un panel desplegable. Es muy til cuando queremos mostrar el contendido de una lista para que el usuario pueda seleccionar dichos items.Todo JList esta compuesto por unDefaultListModel, es el que define el modelo de la JList, es decir, el que agregar y borrar los tems de la JList.Crear un JList

Agregar elementos a un JList.Hay varias formas de hacerlo, pero la mas eficiente desde nuestro punto de vista es usar el DefaultListModel, ya que tiene el mtodo addElement que inserta un elemento a la vez:

Eliminando elementosSe pueden eliminar elementos de cualquier posicin, utilizando una variable del tipo int para guardar las posiciones en la lista y para eliminar tem a tem, lo va a eliminar previo haber seleccionado el tem incluso, se puede eliminar varios tems que estn en la misma fila siempre y cuando se llame en el mtodo eliminar a sus modelList correspondientes:Paquetes Utilizados Los paquetes son una forma de organizar grupos de clases. Un paquete contiene un conjunto de clases relacionadas bien por finalidad, por mbito o por herencia. Los paquetes resuelven el problema del conflicto entre los nombres de las clases. Al crecer el nmero de clases crece la probabilidad de designar con el mismo nombre a dos clases diferentes. Las clases tienen ciertos privilegios de acceso a los miembros dato y a las funciones miembro de otras clases dentro de un mismo paquete. Import javax.swing.*;Provee de facilidades al usuario para construir GUIs abarca componentes tales como botones (JButton) , etiquetas (JLabel) , cajas de texto (JTextField), elementos que nos permiten una interaccin dinmica entre usuario y ordenador.Import java.awt.event;Este paquete, proporciona a las interfaces y clases los distintos eventos que pueden ocurrir en una ejecucin de un programa y que son desencadenados por los componentes de AWT. Import java.awt.*;La funcin que va a tener este paquete es para el gestor de distribucin el cual nos va a permitir ubicar los elementos en el JFrame de manera ordenada.

CONSTRUCTOR

Un constructor es un mtodo especial de una clase que se llama automticamente siempre que se declara un objeto de esa clase. Su funcin es inicializar el objeto y sirve para asegurarnos que los objetos siempre contengan valores vlidos.

Cuando se crea un objeto en Java se realizan las siguientes operaciones de forma automtica:1.Se asigna memoria para el objeto.2. Se inicializan los atributos de ese objeto con los valores predeterminados por el sistema.3. Se llama al constructor de la clase que puede ser uno entre varios.El constructor de una clase tiene las siguientes caractersticas:Tiene el mismo nombre que la clase a la que pertenece.importjavax.swing.JFrame;

publicclassMainextendsJFrame{publicstaticvoidmain(String[]args){newMain();}

publicMain(){this.setSize(200,100);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setTitle("HelloWorld!");this.setVisible(true);}} SETRESIZABLE.-Al activar esto la pantalla no podr maximizarse SETLAYOUT.- Al declararle null, nosotros podremos declarar la posicin de los objetos que irn dentro de nuestra ventana JFRAME( ).- Es el constructor de nuestro frame, aparece sin titulo y no puede verse en pantalla hasta que se llame el metodo para hacerlo visible. SETVISIBLE(BOOLEANO).- Define si nuestro JFrame puede verse o no, y nicamente acepta valores booleanos como TRUE o FALSE. SETTITLE(STRING B).- Define el nombre del frame (el titulo), y lo que acepta es una cadena para nombrarla. SETSIZE (INT ANCHO, INT LARGO).- Es la definicin del ancho y largo del frame que vamos a crear. PACK( ) Redefine la ventana para que entre en un espacio determinado. SETLOCATION (INT HORIZONTAL, INT VERTICAL).- Definicin de la posicin en pantalla donde va a estar nuestro frame una vez que lo creemos. SETDEFAULTCLOSEOPERATION(INT OPERATION) .- Define la operacin que va a tener la ventana con el boton de cerrar.

VOID CONTENIDOS:

- Es un mtodo especial en el crearemos las funciones que posee la ventana. Creamos botones y les podemos aadir acciones, esto nos permite tener una mejor interaccin con el usuario.

USO DE OYENTES:

Un evento es resultado de la ejecucin de una accin dentro de un entorno grfico. Los eventos son objetos. Los componentes (botones, mens, campo de texto) son generadores de eventos (origen) Un origen de eventos debe registrar objetos oyentes que manipulen a los eventos

Ilustracin 12: Ejemplo de Oyentes

El paquete java.awt.event proporciona clases base para generar eventos. Contiene una serie de interfaces para implementar objetos oyentes. Adicionalmente proporciona un grupo de clases adaptadoras para facilitar la codificacin.

Ilustracin 13: Ejemplo de EventListener

REGISTRO DE OYENTES

Ilustracin 14: Ejemplo Registro de Oyentes

MANEJO DE EXEPCIONES PARA EL INGRESO DE DATOS:

La estructura de control en cuestin se usa para capturar el flujo de datos cuando, por la intervencin del usuario o de algn dispositivo externo, sucede un error. Por ejemplo, supongamos una aplicacin de frmulas matemticas en la que el usuario debe ingresar valores numricos, lo que normalmente sucede es que el sistema recibir cadenas que debern ser convertidas a un tipo til para las operaciones; pero si el usuario ingresa algo distinto a un dgito o a un operador, el programa fallar.

importjavax.swing.JOptionPane;public class DemoErrorNumero { String mensaje;publicDemoErrorNumero() {String valorCadena=JOptionPane.showInputDialog(null,"Escribe un entero");/*El mtodo parseInt() de la clase Integer de la librera lang *convierte un String en un int */intvalorNumero=Integer.parseInt(valorCadena);JOptionPane.showMessageDialog(null,"El valor es "+valorCadena); } publicstaticvoidmain(String[] args) {newDemoErrorNumero(); }}

Al ejecutar este programa, si en el primer cuadro de dilogo escribimos un entero, aparecer un segundo cuadro de dilogo indicando el valor; si, por el contrario, escribimos otra cosa, el programa se detiene y en la ventana de General Output de JCreator se mostrar el siguiente mensaje:

--------------------Configuration: --------------------

Exception in thread "main" java.lang.NumberFormatException: For input string: "Juanito"

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

atjava.lang.Integer.parseInt(Integer.java:447)

atjava.lang.Integer.parseInt(Integer.java:497)

atDemoErrorNumero.(DemoErrorNumero.java:6)

atDemoErrorNumero.main(DemoErrorNumero.java:10)

La lnea que esta subrayada indica cul fue el error: la cadena Juanito (que fue lo que recibi la variable valorCadena) tiene un formato numrico incorrecto; java.lang es la librera en la que est la clase NumberFormatException que es capaz capturar esos errores y se usa con el trycatch como se muestra en el siguiente ejemplo:

DemoTryCatch.javaimportjavax.swing.JOptionPane;public class DemoTryCatch {

String mensaje;publicDemoTryCatch() {String valorCadena=JOptionPane.showInputDialog(null,"Escribe un entero");try {intvalorNumero=Integer.parseInt(valorCadena);

/*Si lo escrito no es un entero la lnea que sigue no se ejecuta,*el programa busca el bloque catch y ejecuta su contenido */mensaje="Gracias";}catch (NumberFormatException ex) {//El bloque catch indica el error que captura.mensaje="No escribiste un Entero";

}JOptionPane.showMessageDialog(null,mensaje);//El mensaje enviado segn el caso} public static void main(String[] args) {newDemoTryCatch(); }}

Se debe saber que existe la clase Exception que captura todos los errores, y que derivadas de ella hay muchas otras para atender faltas especficas, como el caso que acabamos de probar.

PARA QUE SOLO INGRESE LETRASnom=new JLabel("Nombre del cliente");nom.setForeground(Color.white);nom.setBounds(new Rectangle (10,50,300,20));add(nom);nombre= new JTextField(30);nombre.setBackground(Color.lightGray);nombre.setBounds(new Rectangle (120,48,420,30));nombre.addKeyListener(new KeyAdapter (){public void keyTyped(KeyEvent e){charcaracter;caracter=e.getKeyChar();if(Character.isDigit(caracter)){e.consume();JOptionPane.showMessageDialog(null," INGRESE LETRAS POR FAVOR","Error",JOptionPane.WARNING_MESSAGE);}}});add(nombre);

PARA QUE SOLO INGRESE NUMEROS

cedu= new JLabel("CI/RUC");cedu.setForeground(Color.white);cedu.setBounds(new Rectangle (330,90,300,20));add(cedu);cedula= new JTextField(15);cedula.setBounds(new Rectangle (380,90,160,30));cedula.addKeyListener(new KeyAdapter(){public void keyTyped(KeyEvent e){charcaracter;caracter= e.getKeyChar();if(Character.isLetter(caracter)){e.consume();//isnumberJOptionPane.showMessageDialog(null," INGRESE NUMEROS POR FAVOR","Error",JOptionPane.WARNING_MESSAGE);}}});add(cedula);

CONSTRUCTOR:El constructor de una clase es un mtodo estndar para inicializar los objetos de esa clase. Es una funcin que se ejecuta siempre al crear un objeto. Los constructores de una clase tienen siempre el nombre de la clase y no tiene ningn valor devuelto, para poder inicializar las variables de instancia utilizan la palabra reservada this[footnoteRef:1]. [1: this: es una palabra reservada que permite manipular las variables de instancia ya declaradas en el programa.]

Ilustracin 15: Ejemplo de uso de ConstructoresPALABRAS RESERVADASTHIS: Es una palabra reservada que nos sirve para poder manipular las variables de instancia que estn declaradas en el programa.SUPER: Es una palabra reservada que se utiliza para llamar a los atributos que estoy heredando o a los constructores que ya estn inicializados en la clase padre.EXTENDS: Es una palabra reservada que nos sirve para utilizar los mtodos ya creados en la clase padre.HERENCIA Es especfica de la programacin orientada a objetos, donde una clase nueva se crea a partir de una clase existente, haciendo una relacin entre las clases bases y clases derivadas que comparten la estructura y comportamiento definido.La principal ventaja de la herencia es la capacidad para definir atributos y mtodos nuevos para la subclase, es comn que se le aada su propio comportamiento o que modifique lo heredado, al heredar de una clase base, heredaremos tanto los atributos como los mtodos y de la misma manera podemos modificar con atributos propios de la clase derivada de esta manera utilizamos los constructores que no son heredados. Ejemplo:

Ilustracin 16: Ejemplo de Herencia

6. Programa. Crear un programa con interfaz grafica al usuario de un sistema de facturacin de una tienda virtual utilizando los paquetes y elementos de los mismos aadiendo la utilizacin de un JList y JRadioButton para este programa se debe estimar lo siguiente:

Validar los campos de texto estn validados para captura de errores, es decir en los campos donde solo deba ingresar letras no permita el ingreso de nmeros y en los campos donde solo admita caracteres numricos que no permita el ingreso de letras y smbolos.

Programar los JRadioButton para que solo se seleccione 1 y no ambos.

Validar los JTextField de las cantidades Sub-total, iva , recargo, descuento y total para que no se puedan modificar desde el teclado es decir que no podamos editar nada.

Programar la cantidad y los precios de los productos, en caso de que el cliente sea frecuente obtiene un descuento del 20% y si no es frecuente no obtiene descuento (Esto debe estar validado dentro de los JRadioButton).

Para los campos de cliente moroso y no moroso si es moroso el cliente tiene un recargo del 10% caso contrario no tiene recargo.

Validar las listas para que se ubiquen cantidad de productos, descripcin del producto, precio unitario y total.

Programar la lista para que se la pueda manejar borrando tems en caso del ser necesario.

El sistema de facturacin debe tener un botn para crear una nueva factura y que estas a su vez se vayan guardando.

Para finalizar el sistema debe tener consultas de factura en el cual llamaremos a las facturas segn el numero que correspondan y estas debern desplegar la informacin sobre la compra, para esto la informacin deber ser guardada en vectores de tipo String[] o en un archivo txt(fichero) segn como mejor convenga.

PANTALLA PRINCIPAL

package Factura;import javax.swing.*;

import java.util.Calendar;

import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.CharConversionException;import javax.swing.border.*;import javax.swing.plaf.basic.BasicBorders.RadioButtonBorder;public class Futbol extends JFrame{JLabel fondo,nombre,direccion,ruc,telf,fecha,hora,f,h,can,prod,tcli,moroso,sub,iv,tip,tot,re;JRadioButton tc,tcn,mor,nmor;JTextField nom,dir,r,te,subtotal,iva,tipocliente,total,reca,ver;JButton compra,viz,catalogo,borra,borrarItem,nuevo,guardar,traer;JList cantidad,productos,precio,totpre;DefaultListModel modelc=new DefaultListModel();DefaultListModel modelpro=new DefaultListModel();DefaultListModel modelpre=new DefaultListModel();DefaultListModel modeltot=new DefaultListModel();int conta=1;double g;double c1,c2,c3,c4;double rec;double descu;double impuesto;double tota;int c;String acum="",acum2="";//Catalogo k;

String facturas[]=new String[100000];String despelgar;public Futbol(){setTitle("Ftbol Ecuador--------------------FACTURA No: "+(c=c+1));setSize(1000,600);setLocation(100,100);setResizable(false);setLayout(null);setDefaultCloseOperation(EXIT_ON_CLOSE);setIconImage(Toolkit.getDefaultToolkit().getImage("fut.png"));contenidos();setVisible(true);}void contenidos(){setTitle("Ftbol Ecuador--------------------FACTURA No: "+(c++));final ButtonGroup TCLIENTE;final ButtonGroup MOROSIDAD;fecha=new JLabel("Fecha");fecha.setBounds(760,10,110,30);fecha.setFont(new Font("Showcard Gothic",Font.ITALIC,13));fecha.setForeground(Color.yellow);add(fecha);f=new JLabel();f.setBounds(850,10,160,30);f.setForeground(Color.yellow);f.setFont(new Font("Showcard Gothic",Font.BOLD,13));Calendar cal=Calendar.getInstance();String fec=cal.get(cal.DATE)+"/"+cal.get(cal.MONTH)+"/"+cal.get(cal.YEAR);f.setText(fec);add(f);hora=new JLabel("Hora");hora.setBounds(760,30,110,30);hora.setFont(new Font("Showcard Gothic",Font.ITALIC,13));hora.setForeground(Color.blue);add(hora);h=new JLabel("");h.setBounds(850,30,160,30);h.setFont(new Font("Showcard Gothic",Font.BOLD,13));h.setForeground(Color.red);String hor=cal.get(cal.HOUR_OF_DAY)+":"+cal.get(cal.MINUTE)+":"+cal.get(cal.SECOND);h.setText(hor);add(h);//DATOS PERSONALES DEL CLIENTEnombre=new JLabel("Nombre");nombre.setForeground(Color.white);nombre.setFont(new Font("Broadway",Font.BOLD,13));//setFont(new Font("Broadway",Font.BOLD,20));nombre.setBounds(30,50,120,40);add(nombre);nom=new JTextField("");nom.setFont(new Font("Comic Sans MS",Font.BOLD,15));nom.setBounds(100,60,260,30);nom.addKeyListener(new KeyAdapter() {@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stubchar carac;carac=e.getKeyChar();if(!Character.isLetter(carac)){e.consume();JOptionPane.showMessageDialog(null,"Solo debe ingresar letras en el campo NOMBRE","ERROR",JOptionPane.ERROR_MESSAGE );}}});add(nom);direccion=new JLabel("Direccin");direccion.setBounds(30,100,120,30);direccion.setForeground(Color.white);direccion.setFont(new Font("Broadway",Font.BOLD,13));add(direccion);dir=new JTextField("");dir.setBounds(110,100,310,30);dir.setFont(new Font("Comic Sans MS",Font.BOLD,15));dir.addKeyListener(new KeyAdapter() {@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stubchar c;c=e.getKeyChar();if(Character.isDigit(c)){e.consume();JOptionPane.showMessageDialog(null,"Solo debe ingresar letras en el campo DIRECCIN","ERROR",JOptionPane.ERROR_MESSAGE );}}});add(dir);ruc=new JLabel("Ruc");ruc.setBounds(400,50,60,40);ruc.setForeground(Color.white);ruc.setFont(new Font("Broadway",Font.BOLD,13));add(ruc);r=new JTextField("");r.setBounds(450,60,150,30);r.setFont(new Font("Comic Sans MS",Font.BOLD,15));r.addKeyListener(new KeyAdapter() {@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stubchar c;c=e.getKeyChar();if(!Character.isDigit(c)){e.consume();JOptionPane.showMessageDialog(null, "Solo ingrese nmeros en el campo RUC","ERROR",JOptionPane.ERROR_MESSAGE);}}});add(r);telf=new JLabel("Telfono");telf.setBounds(430,100,120,30);telf.setForeground(Color.white);telf.setFont(new Font("Broadway",Font.BOLD,13));add(telf);te=new JTextField(7);te.setBounds(510,100,100,30);te.setFont(new Font("Comic Sans MS",Font.BOLD,15));te.addKeyListener(new KeyAdapter() {@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stubchar c;c=e.getKeyChar();if(!Character.isDigit(c)){e.consume();JOptionPane.showMessageDialog(null, "Solo ingrese nmeros en el campo TELFONO","ERROR",JOptionPane.ERROR_MESSAGE);te.setText("");}}});add(te);//boton borrar campos,nuevo,borrarItemborra=new JButton("Borrar campos");borra.setBounds(620,80,120,30);borra.setToolTipText("Borra totalmente los datos personales");borra.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif(e.getSource()==borra){nom.setText("");dir.setText("");r.setText("");te.setText("");}}});add(borra);nuevo=new JButton();nuevo.setBounds(750,80,70,70);nuevo.setToolTipText("Nueva Factura");nuevo.setIcon(new ImageIcon(getClass().getResource("nuevo2.png")));nuevo.setContentAreaFilled(false);nuevo.setBorderPainted(false);nuevo.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {setTitle("Ftbol Ecuador--------------------FACTURA No: "+(c++));g=0;descu=0;rec=0;nom.setText("");dir.setText("");r.setText("");te.setText("");subtotal.setText("");iva.setText("");total.setText("");reca.setText("");tipocliente.setText("");tipocliente.setText("");conta++;modelc.removeAllElements();modelpre.removeAllElements();modelpro.removeAllElements();modeltot.removeAllElements();}});add(nuevo);traer=new JButton("Traer");traer.setBorderPainted(false);traer.setContentAreaFilled(false);traer.setIcon(new ImageIcon(getClass().getResource("ver3.png")));traer.setBounds(840,280,93,30);traer.setToolTipText("Consultar facturas");traer.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String numbe="";boolean b=false;int num;if(e.getSource()==traer){if(ver.getText().equals("")){JOptionPane.showMessageDialog(null, "Debe ingresar en nmero de factura","Atencion",JOptionPane.WARNING_MESSAGE);}else{numbe=ver.getText();num=Integer.parseInt(numbe);if(facturas[num-1]==null){JOptionPane.showMessageDialog(null,"La factura no ha sido guardada");}else{JOptionPane.showMessageDialog(null, facturas[num-1]);//despelgar=facturas[i]+"\n";}}}}});add(traer);ver=new JTextField();ver.setBounds(940,280,30,30);ver.addKeyListener(new KeyAdapter() {@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stubchar c;c=e.getKeyChar();if(!Character.isDigit(c)){e.consume();JOptionPane.showMessageDialog(null, "Ingrese el nmero de factura que desea consultar","ATENCION",JOptionPane.WARNING_MESSAGE);}}});add(ver);guardar=new JButton("Guardar");guardar.setBounds(840,320,80,110);guardar.setToolTipText("Guardar");guardar.setBorderPainted(false);guardar.setContentAreaFilled(false);guardar.setIcon(new ImageIcon(getClass().getResource("save2.png")));guardar.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif(e.getSource()==guardar){String valor1="", valor2="", valor3="", valor4;//Valores que estan en subtotal, iva, recargo, descuentodouble v1, v2, v3, v4, total_pagar;//para transformar los valores y sacar el totalif(nom.getText().equals("")||dir.getText().equals("")||te.getText().equals("")||r.getText().equals("")){JOptionPane.showMessageDialog(null, "No hay nada que guardar");}else{valor1=subtotal.getText();valor2=iva.getText();valor3=reca.getText();valor4=tipocliente.getText();v1=Double.parseDouble(valor1);v2=Double.parseDouble(valor2);v3=Double.parseDouble(valor3);v4=Double.parseDouble(valor4);acum=acum+("Factura #"+conta+"\n\n");acum=acum+("DATOS CLIENTE\n");acum=acum+("NOMBRE: "+nom.getText()+"\n");acum=acum+("RUC: "+r.getText()+"\n");acum=acum+("DIREC: "+dir.getText()+"\n");acum=acum+("--------------------PRODUCTOS---------------------------------------s");acum=acum+("Cant Desc precioUnit SUbt total"+"\n");for(int i=0;i