Está en la página 1de 67

UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR

FACULTAD DE INGENIERÍA DE GESTIÓN

ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS

“LENGUAJE DE PROGRAMACIÓN I”

“Trabajo Aplicativo Grupal”

Dirigido por la docente:

Blas Rebaza Maruja Emelita

Presentado por los alumnos:

-Luis Enrrique Montes Palacios 20b3110189

-Guillen Ayala Bryam 20a3110266

-Diego Armando Otazu Quispe 20b3110110

Villa el Salvador

2022

1
Índice

Introducción: 4
Planteamiento del problema: 4
Antecedentes 5
Formulación del problema 5
Requerimientos: 5
Análisis: 5
Modelo Entidad Relación: 6
Objetivos: 7
2.1. Objetivo General: 7
2.2. Objetivo específico: 7
3. Marco Teórico: 7
Clases 7
Objeto 8
Campo o atributo 8
Métodos 8
Instancia 8
Constructor 8
Interfaz 8
Arreglos Unidimensionales 10
Enumeraciones 10
Clase JscrollPane 10
Clase JComboBox 10
Clase JList 10
Clase JTable 10
Arreglo de Objetos 11
Clase JLayeredPane 11
Clase JDesktopPane 11
Clase JTextArea 11

2
Clase JTextPane 11
List y ArrayList 12
Map Y HashMap 12
JMenuBar 13
JMenu 13
JMenuItem 13
JCheckMenuItem 14
JRadioButtonMenuItem 14
Persistencia 14
Serialización 14
Java Netbeans: 15
SQL Server: 15
JDBC: 15
Modelo Entidad-Relación: 16
Entidades: 16
Relaciones: 16
Cardinalidad: 16
Atributos: 17
Identificador: 17
Grado de Relación: 17
Roles: 18
Procedimiento del Programa: 18
Conclusiones: 26
Referencias Bibliográficas: 26

3
1. Introducción:

En el presente trabajo nosotros desarrollaremos un Sistema de Venta aplicando

los conocimientos adquiridos durante el curso de Lenguaje de Programación, dando uso

al software de Netbeans 8.2 y SQLServer.

En este documento se presenta información un poco extensa pero lo necesario

para comprender lo trabajado durante estas 15 semanas, aplicando ejemplos ayudándonos

a crear nuestro sistema de ventas, dado qué Netbeans en sí es un entorno de desarrollo

integrado, enfocado principalmente al lenguaje de programación Java qué hemos estado

usando durante todo el curso.

Primero podremos apreciar cómo fue qué analizamos nuestro problema, la manera

en qué sobrellevamos esto y empezamos a planificar con nuestra entidad relación para

poder empezar a codificar o graficar en sql server, dado qué qué se puede operar de esas

dos maneras, ya como parte final se mostrará el jframe y las clases usadas.

2. Planteamiento del problema:

2.1.1. Antecedentes

La importancia de crear un programa de ventas que nos sirva para

encerrar los datos de nuestras ventas, recordar a nuestros clientes, hacer

inventario de productos, obtener nuevos productos gracias a proveedores etc.

Este programa nos ayudará con todos estos problemas que podrían suceder a

la hora de hacer nuestras ventas ya que contendrá todos los ingredientes

necesarios para guardar nuestra información.

4
1. Formulación del problema

¿Cómo podemos crear una base de datos de proveedor a clientes que sea funcional?

1. Requerimientos:

Se necesita una Base de Datos que permita apoyar la gestión de un sistema de ventas, el

proveedor necesita llevar el control de los clientes, productos, y venta.

Un proveedor necesita tener el RUC, razón social, teléfono, dirección; este realiza el

abastecimiento de diversos productos los cuales tienen como atributos: código, descripción,

precio, stock, RUC del proveedor; se necesita el reporte de las ventas que guardara el número de

venta, el DNI de cliente y el codigo de producto, precio total, y la cantidad de productos; por

último, el cliente presenta DNI, nombre, apellido, teléfono y la domicilio.

2. Análisis:

ENTIDADES

Proveedor, Productos, Vendidos y Cliente

ATRIBUTOS

Proveedor:
ruc primary key, razón social, teléfono, dirección .

Producto:
Código primary key, descripción, ruc foreign key, precio, stock.

Vendidos:
N_Venta primary key, dni foreign key, codigo foreign key, precio,
calidad

5
Cliente:
Dni Primary key, nombre, apellidos, teléfono, Domicilio.

Grado de Relación: Cuaternario

Roles:

Proveedor Abastecedor

Producto Producto

Vendidos Vende

Cliente Compra

3. Modelo Entidad Relación:

RUC RAZON SOCIAL

1, 1

PROVEEDOR ABASTECE

1, n RUC
CODIGO
TELEFONO DIRECCIÓN
PRODUCTO DESCRIPCIÓN

STOCK 1, n
PRECIO

TIENE

1, 1

N VENTA6 PRECIO

VENTA
CANTIDAD

1, n

COMPRA

2. Objetivos:

2.1. Objetivo General:

Crear una Base de datos funcional que se encargue de guardar la información del
proveedor.

2.2. Objetivo específico:

● Permitir el ingreso de datos y que estos se guarden en el SQL


● Crear las interfaces necesarias que se necesitan en requerimientos
● Clasificar los datos insertados en la BD

3. Marco Teórico:

Clases

Para la definición de clases Martinez (2020) “Es una plantilla. Define de manera
genérica cómo van a ser los objetos de un determinado tipo.”

7
Objeto

Componente o código de software que contiene en sí mismo tanto sus


características (campos) como sus comportamientos (métodos); se accede a través de su
interfaz o signatura

Campo o atributo

Es una característica de un objeto, que ayuda a definir su estructura y permite


diferenciarlo de otros objetos. Se define con un identificador y un tipo, el cual indica los
valores que puede almacenar. El conjunto de valores de los campos definen el estado del
objeto.

Métodos

Es la implementación de un algoritmo que representa una operación o función que


un objeto realiza. El conjunto de los métodos de un objeto determinan el comportamiento
del objeto. Canchala (2008).

Instancia

Con la clase se pueden crear instancias de un objeto, cada uno de ellos con sus
atributos definidos de forma independiente.

Constructor

Por defecto toda clase tiene un constructor sin parámetros cuyo identificador
coincide con el de la clase y que, al ejecutarse, inicializa el valor de cada atributo de la
nueva instancia: los atributos de tipo primitivo se inicializan a 0 o false, mientras que los
atributos de tipo objeto (referencia) se inicializan a null. Garro (2022)

Interfaz

El concepto de Interface lleva un paso más adelante la idea de las clases


abstractas. En Java una interfaz es una clase abstracta pura, es decir una clase donde
todos los métodos son abstractos (no se implementa ninguno). Permite al diseñador de

8
clases establecer la forma de una clase (nombres de métodos, listas de argumentos y tipos
de retorno, pero no bloques de código). Una interfaz puede también contener datos
miembros, pero estos son siempre static y final. Una interfaz sirve para establecer un
'protocolo' entre clases.

Según Baquero y Hernández (2016)

“La declaración de una interfaz es similar a una clase, aunque emplea la


palabra reservada interface en lugar de class y no incluye ni la declaración de
variables de instancia ni la implementación del cuerpo de los métodos (solo las
cabeceras).” 

Una interface es como una clase abstracta pura. Sólo provee 2 tipos de miembros:
Constantes de clase: aunque no es necesario poner los modificadores public static final.
Permite acceder a ellas directamente desde las clases que implementen dicha interface. 
Declaraciones de método: aunque no es necesario poner public abstract. Los métodos
deben ser sobrescritos por todas las clases que implementen dicha interface. El uso de las
interfaces se puede aplicar en: 

● La revelación de la interface de la programación de un objeto (funcionalidad


del objeto) sin presentar su implementación (encapsulado). 

●  La implementación puede cambiar sin afectar el llamado de la interface, que


no necesita la implementación en Java.

●  La implementación de métodos de similares comportamientos en clases sin


relacionar. 

●  El modelado de herencia múltiple, imponiendo conjuntos múltiples de


comportamientos a la clase.

9
Arreglos Unidimensionales

Un arreglo, también conocido como vector o array, es una estructura que


almacena un conjunto de datos de un mismo tipo, y estos se almacenan en forma
continua. Una diferencia puntual entre un arreglo y una variable estática simple es que
esta última solo almacena un valor a la vez, mientras que el arreglo puede almacenar un
conjunto n datos del mismo tipo; sin embargo, las dos son variables.

Enumeraciones

Es una clase diferente a la clase normal, ya que limitan la creación de objetos a


los especificados en la implementación de la clase. Esta clase Enum si tiene un
constructor, esta tiene que ser privado para que no se puedan crear nuevos objetos.

Clase JscrollPane

Si un componente ocupa contiene mucha información, esta clase le permite


integrarles una ventana deslizable vertical u horizontalmente que permite que solo se vea
una parte de dicho componente.

Clase JComboBox

Es una lista desplegable que nos permite definir una serie de opciones de las
cuales el usuario tendrá la posibilidad de seleccionar una de ellas.

Clase JList

Es un componente que muestra una lista de objetos y nos permite seleccionar uno
o más elementos.

Clase JTable

Es una clase que se usa para crear tablas interactivas y editable por los usuarios
gracias a los componentes API SWING. Estos representan los datos en forma de tabla

10
teniendo la posibilidad de editar el contenido de las tablas, por ejemplo, modificar las
dimensiones de esta.

Arreglo de Objetos

El concepto de arreglo de objetos es el mismo que el de una variable, pero la


diferencia es que ahora se almacenarán objetos de una misma clase o de diferentes clases.
Los objetos son variables ya que tienen las mismas capacidades y atributos que cualquier
tipo de variables, por lo tanto, es posible crear un array de objetos.

Clase JLayeredPane

Esta clase ortorga una tercera dimensión para poder posicionar componentes, que
es la profundidad, es conocida como el eje Z. Cuando se añade un componente a un panel
por capas, se especifica su profundidad.

Los frames con mayor profundidad solapan de los que tienen menor profundidad,
y estos siempre están por debajo de los que tienen mayor profundidad.

Clase JDesktopPane

Funciona como un escritorio virtual, también se utiliza para crear interfaces multi-
documentos. Esta clase se extiende al JLayeredPane, lo que hace que también los
componentes puedan solaparse cuando se requieran. El JDesktopPane funcionará como
una clase padre de los JInternalFrame que se creen después.

Clase JTextArea

Esta clase a diferencia del JTextField, que son similares, permite ingresar
múltiples líneas de texto.

Clase JTextPane

Es un editor que permite cambiar los colores, fuentes, tamaño de la letra, y más.
También nos permite poner íconos directamente desde una clase ICON de java o añadir
componentes como un JButton, JLabel, etc.

11
List y ArrayList

List

La interfaz de lista crea una colección de elementos que se almacena en


una secuencia y se identifica o se accede por su número de índice. 

Según Cristian Ballesteros(2020) La lista es un interfaz que extiende la


Colección marco de referencia. La interfaz de lista describe la colección de
elementos que se ordenan secuencialmente. La interfaz de lista se implementa
mediante las siguientes clases de recopilación estándar, como ArrayList,
LinkedList, CopyOnWriteArrayList, Vector, Stack. La interfaz de lista tiene
elementos asociados con sus números de índice. Puede acceder a un elemento en
la lista por su posición (índice) en la lista. Una lista creada usando la interfaz Lista
comienza con un índice basado en cero.

ArrayList

ArrayList supera el problema de una matriz estática en Java estándar, es


decir, la matriz no puede crecer en tamaño una vez que se crea. Cuando se crea
una matriz con ArrayList, se crea una matriz dinámica que puede aumentar y
reducir su tamaño cuando sea necesario.

Según Cristian Ballesteros(2020) Una de las clases de colección estándar


es ArrayList, que se extiende AbstractList clase y también implementa el Lista
interfaz. La clase ArrayList se usa para crear matrices dinámicas que crecen y se
reducen cuando es necesario. La lista creada con la clase ArrayList no es más que
la matriz de objetos. En Java, la matriz estándar tiene una longitud fija, por lo
tanto, debe conocer el tamaño de la matriz de antemano. Pero es posible que no
sepa qué longitud de la matriz necesita hasta el tiempo de ejecución. Por lo tanto,
el marco de la Colección introdujo la clase ArrayList para superar este problema.

Map Y HashMap

Map

12
Según DelftStack(2021) La interfaz Map por sí sola no se puede utilizar
para almacenar datos, pero podemos crear un objeto de sus clases de
implementación y luego usar la referencia Map para contener el objeto. Aquí,
usamos la clase HashMap para almacenar datos y la interfaz Map para contener la
referencia de esta clase.

HashMap

Según DelftStack(2021) HashMap es una clase de implementación de la


interfaz Map. Entonces, podemos usarlo para crear una colección de pares clave-
valor.

Set y Hash Set

Según Equipo Geek (2020) HashSet contiene un conjunto de objetos, pero


de una manera que le permite determinar fácil y rápidamente si un objeto ya está
en el conjunto o no. Lo hace administrando internamente una matriz y
almacenando el objeto utilizando un índice que se calcula a partir del código hash
del objeto.

JMenuBar

Según Anónimo(2010) Un menu es un objeto que se le añade al JMenuBar, y


sirve para almacenar items comunes.

JMenu

Según Anónimo(2010) Un menu es un objeto que se le añade al JMenuBar, y


sirve para almacenar items comunes. Ahora veremos cómo crear un menu.

JMenuItem

Según Anónimo(2010) Un JMenuItem es un elemento del menu y al ser pulsado


genera un evento, o sea, abre una ventana, pide datos o cualquier evento.

13
JCheckMenuItem

Según Maruthi Krishna(2020) Un CheckMenuItem es un MenuItem especial que


tiene una marca de verificación (tick) similar a la casilla de verificación. Esto tiene dos
estados seleccionado (con una marca de verificación) y no seleccionado (sin marca de
verificación). Está representado por la clase javafx.scene.control.CheckMenuItem .

JRadioButtonMenuItem

Según Raja(2019) Un JRadioButtonMenuItem es una subclase de la clase


JMenuItem en Java. Un JRadioButtonMenuItem es un elemento de menú que forma
parte de un grupo de elementos de menú en el que solo se puede seleccionar un elemento
del grupo y el elemento seleccionado muestra su estado seleccionado. Podemos agregar
varios elementos de menú de botones de opción a un objeto ButtonGroup para formar un
grupo de botones. Si se selecciona un elemento de menú de botón de radio en un grupo de
botones , todos los demás elementos de menú de botones de radio no estarán
seleccionados .

Persistencia

Un objeto es persistente cuando es almacenado en un archivo u otro medio


permanente. Un programa puede grabar objetos persistentes y luego recuperarlos en un
tiempo posterior. Una diferencia con el C + +, que solo soporta persistencia a través de
bibliotecas propietarias lo que limita su portabilidad y generalidad, es que Java se provee
un mecanismo de serialización para almacenar objetos en disco.

Serialización

Se obtiene llamando al método writeObject de la clase ObjectInputStream. Los


objetos que implementen la interfaz Serializable pueden ser escritos a stream y para hacer
que un objeto sea serializable solo debemos declarar que implementa la interfaz
serializable. Por razones de seguridad, las clases no son serializables por defecto.

14
Java Netbeans:

El Netbeans “es un software de desarrollo de código libre, especialmente dirigido


para la creación de aplicaciones por medio del lenguaje de programación Java. No
obstante, es al mismo tiempo, multiplataforma, ya que Netbeans posee herramientas y
framework de aplicaciones que incluye soporte para trabajar con otros lenguajes de
programación, como el caso de PHP o Phyton”. (Fantino, 2021)

SQL Server:

Darias (2021) nos dice que el “Microsoft SQL Server es uno de los principales
sistemas de gestión de bases de datos relacional del mercado”.

El mismo autor nos menciona que el “Microsoft SQL Server es ideal para
almacenar toda la información deseada en bases de datos relacionales, como también para
administrar dichos datos sin complicaciones, gracias a su interfaz visual y a las opciones
y herramientas que tiene. Es algo vital, especialmente en webs que tienen la opción de
registrar usuarios para que inicien sesión”.

o sysadmin:

El rol de servidor fijo "sysadmin" está diseñado para proporcionar a las


cuentas asignadas al rol un control total sobre todos los aspectos de la
instancia de SQL Server de la que forma parte. De forma predeterminada,
la cuenta sa se asigna a la función de administrador del sistema, lo que la
convierte en un objetivo principal para los atacantes. (Kraus et al., 2010)

JDBC:

JDBC significa Java™ EE Database Connectivity (conectividad de bases de datos


Java). En desarrollo de Java EE se trata de una tecnología muy conocida que se
utiliza de forma habitual para implementar la interacción de bases de datos. JDBC
es una API de nivel de llamada, lo que significa que las sentencias SQL se pasan

15
como series a la API que, posteriormente, se encarga de ejecutarlas en RDMS.
Por ello, el valor de estas series se puede modificar durante el tiempo de
ejecución, haciendo que JBDC sea dinámica. (Anónimo, 2021)

Modelo Entidad-Relación:

El modelo entidad-relación es el modelo conceptual más utilizado para el diseño


conceptual de bases de datos. Fue introducido por Peter Chan en 1976. El modelo entidad
relación está formado por un conjunto de conceptos que permiten describir la realidad
mediante un conjunto de representaciones gráficas y lingüísticas. (Gutiérrez, s.f.)

Entidades:

Se trata de cualquier objeto u elemento (real o abstracto) acerca del cual se


pueda almacenar información en la base de datos. Es decir, cualquier
elemento informativo que tenga importancia para una base de datos.
(Sánchez, s.f.)

Relaciones:

Representan asociaciones entre entidades, es decir entidades de un


conjunto que tienen contacto con entidades de otro conjunto. Es el
elemento del modelo que permite relacionar en sí los datos del mismo; de
otro modo tendríamos información aislada. (Sánchez, s.f.)

Cardinalidad:

Indica el número de relaciones en las que una entidad puede aparecer.


(Sánchez, s.f.)

Según Rozo, esta puede ser de 3 tipos:

● Uno a Uno (1:1): Esta se da cuando un registro es el conjunto de


datos que se obtendrían en una fila, dentro de una tabla en una base
de datos. o elemento de una entidad A se relaciona únicamente con
un solo registro de una entidad B y viceversa.

16
● Uno a Muchos (1:M): Esta se da cuando un registro es el conjunto
de datos que se obtendrían en una fila, dentro de una tabla en una
base de datos de una entidad A se relaciona con cero o varios
registros de una entidad B, y cada registro de la entidad B se
relaciona únicamente con un registro de la entidad A.

● Muchos a Muchos (N:M): Esta se da cuando un registro es el


conjunto de datos que se obtendrían en una fila, dentro de una tabla
en una base de datos de una entidad A se relaciona con cero o
varios registros de una entidad B, y un registro de una entidad B se
relaciona con cero o varios registros de la entidad A.

Atributos:

Describen propiedades de las entidades y las relaciones. Son


fundamentales y establecen la información que deseamos almacenar de
cada objeto de la base de datos. (Sánchez, s.f.)

Identificador:

Un identificador de una entidad es un atributo o conjunto de atributos que


determina de modo único cada ocurrencia de esa entidad. (Gutiérrez, s.f.)

Grado de Relación:

Según Rea, 2016. El grado de relación “se refiere al número de entidades


que participan en una relación”.

El mismo autor nos menciona que los grados de relación se clasifican en:

● GRADO 1 (RELACIÓN UNARIA): Las relaciones en las que sólo


participan una entidad se les denomina anillo o de grado uno;
relaciona una entidad consigo misma por lo que también se les
llaman relaciones reflexivas.

17
● GRADO 2 (RELACIÓN BINARIA): Las relaciones en las que
participan dos entidades son binarias o de grado dos. Este tipo de
relación une a dos entidades. Este grado de relación es la más
popular en cualquier Diagrama ER.

● GRADO 3 (RELACIÓN TERNARIA): Cuando en la relación


participan tres entidades serán ternarias o de grado tres. Este tipo
de relación es poco común. Pero se presenta de igual manera.

Roles:

Representan el papel que juega una entidad en una determinada relación.


Son imprescindibles cuando las relaciones son complejas, ya que ayudan a
entender el sentido de la relación. (Sánchez, s.f.)

Procedimiento del Programa:

● Primero ingresamos como administrador para poder crear nuestro usuario.

18
● Una vez dentro nos dirigimos al panel izquierdo

● Presionamos en Security

19
● Ahora presionamos click derecho encima de login y colocamos la opción nueva login.

● Nos arrojará la siguiente pantalla 

20
● Ahora colocamos en Login Name : EC3 , posterior a ello seleccionamos Sql server
authentication donde pondremos de password 123.

21
● Nos dirigimos a server roles y dentro de este seleccionamos SYSADMIN y presionamos
ok para poder finalizar.

22
● Ahora nos desconectamos para ingresar con nuestro nuevo login.

23
● Seleccionamos lo siguiente para poder ingresar de nuevo.

● Ingresaremos con nuestro usuario creado.

24
● Nos volvemos a dirigir donde Security, después logins para verificar si aparece nuestro
nuevo login.

Creación de base de datos

1. create database SISTEMAVENTAS

1. use SISTEMAVENTAS

creación de tablas y relaciones

2. create table clientes(

3. dni int primary key not null,

4. nombre varchar(180) not null,

25
5. telefono varchar(9) not null,

6. direccion varchar(255) not null,

7. );

8.

9. create table productos(

10. codigo int primary key not null,

11. descripcion varchar (50) not null,

12. ruc int not null,

13. precio varchar(50) not null,

14. cantidad int not null

15. );

16.

17. create table proveedor (

18. ruc int primary key not null,

19. nombre varchar(50) not null,

20. telefono varchar(50) not null,

21. direccion varchar(100) not null,

22. );

23.

24. insert into proveedor values (1,'maycol','987456123','mz x lt 12324');

26
25.

26. create table vendido (

27. n_venta int primary key not null,

28. dni int not null,

29. codigo int not null,

30. );

31. drop table proveedor;

32.

33. alter table vendido add constraint FK_d1 foreign key (dni) references clientes(dni);

34. alter table vendido add constraint FK_d2 foreign key (codigo) references
productos(codigo);

35. alter table productos add constraint FK_d3 foreign key (ruc) references proveedor(ruc);

36.

o tmb podemos hacerlo con insertar tablas de esta manera


para tabla cliente

27
para producto

para proveedor

Para Nuestra tabla Vendidos

Ahora creamos el procedure

28
29
30
Diagrama de Base de Datos

Ahora pasamos al Netbeans


estructura del programa

CONEXIÓN JAR/SQL SERVER


Una vez hecha la descarga del jdbc, ingresamos al NetBeans y nos dirigimos sa
proyecto creado, damos clic derecho y seleccionamos propiedades

31
Esta opción nos dará acceso a la siguiente ventana

32
Damos clic en “Libraries” y seleccionamos el botón de agregar JAR/Folder:

33
Una vez presionado el botón, nos dirigirá a la siguiente ventana, en la cual tendremos
que ingresar a la dirección de la carpeta que será Escritorio\JavaSQL y
seleccionamos la versión del conector mssql-jdbc-8.2.2.jre8. Una vez hecho esto
damos clic en el botón “Abrir”.

Nos volverá a dirigir a la ventana de propiedades, con la diferencia de que ahora


aparecerá el archivo del JAR. Seleccionamos en “Ok” para que se agregue a las
librerías:

Codificación:

34
Clase Conexión

package clases;

import java.sql.Connection;
import java.sql.DriverManager;

public class Conexion {


Connection con;

public Connection getConexion(){


try{
String conexionURL = "jdbc:sqlserver://localhost:1433;"
+" database = NUEVO2; "
+" user=DD ;"
+" password=123; ";

con= DriverManager.getConnection(conexionURL);
return con;

}catch(Exception e1){
System.out.println("Error:"+e1.toString());
return null;
}

Clase cliente

35
package clases;

public class Cliente {

private int DNI;


private String Nombre;
private int Telefono;
private String Direccion_Cliente;

public Cliente() {
}

public Cliente(int DNI, String Nombre, int Telefono, String Direccion_Cliente) {


this.DNI = DNI;
this.Nombre = Nombre;
this.Telefono = Telefono;
this.Direccion_Cliente = Direccion_Cliente;

public int getDNI() {


return DNI;
}

public void setDNI(int DNI) {


this.DNI = DNI;
}

public String getNombre() {


return Nombre;
}

public void setNombre(String Nombre) {


this.Nombre = Nombre;
}

public int getTelefono() {


return Telefono;
}

public void setTelefono(int Telefono) {


this.Telefono = Telefono;
}

36
public String getDireccion_Cliente() {
return Direccion_Cliente;
}

public void setDireccion_Cliente(String Direccion_Cliente) {


this.Direccion_Cliente = Direccion_Cliente;
}

clase clienteDao

package clases;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;

public class ClienteDAO {

public static Connection getConexion() {

String conexionURL = "jdbc:sqlserver://localhost:1433;"


+" database = NUEVO2; "
+" user=DD ;"
+" password=123; ";
try{

Connection con= DriverManager.getConnection(conexionURL);


return con;

}catch(Exception e1){
System.out.println("Error:"+e1.toString());
return null;
}
}

public void registro(int DNI, String Nombre, int Telefono, String Direccion_Cliente){

37
try{
Connection con = ClienteDAO.getConexion();
CallableStatement proc=con.prepareCall("EXECUTE SPcliente ?,?,?,?");
proc.setInt("DNI", DNI);
proc.setString("Nombre", Nombre);
proc.setInt("Telefono", Telefono);
proc.setString("Direccion_Cliente", Direccion_Cliente);

proc.execute();
}catch(Exception e2){

}
}

clase Producto

package clases;

public class Producto {

private int Codigo;


private String Nombre;
private String Descripcion;
private String RUC;
private String Precio;
private int Cantidad;
private int stock;

38
public Producto() {
}

public Producto(int Codigo,String Nombre, String Descripcion, String RUC, String Precio,
int Cantidad, int Stock) {
this.Codigo = Codigo;
this.Nombre = Nombre;
this.Descripcion = Descripcion;
this.RUC = RUC;
this.Precio = Precio;
this.Cantidad = Cantidad;
this.stock = Stock;
}

public int getCodigo() {


return Codigo;
}

public String getNombre() {


return Nombre;
}

public void setNombre(String Nombre) {


this.Nombre = Nombre;
}

39
public void setCodigo(int Codigo) {
this.Codigo = Codigo;
}

public String getDescripcion() {


return Descripcion;
}

public void setDescripcion(String Descripcion) {


this.Descripcion = Descripcion;
}

public String getRUC() {


return RUC;
}

public void setRUC(String RUC) {


this.RUC = RUC;
}

public String getPrecio() {


return Precio;
}

public void setPrecio(String Precio) {


this.Precio = Precio;

40
}

public int getCantidad() {


return Cantidad;
}

public void setCantidad(int Cantidad) {


this.Cantidad = Cantidad;
}

public int getStock() {


return stock;
}

public void setStock(int stock) {


this.stock = stock;
}

41
clase ProductoDao

package clases;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JComboBox;

public class ProductoDAO {


Connection con;
Conexion cn = new Conexion();
PreparedStatement ps;
ResultSet rs;
public static Connection getConexion() {

String conexionURL = "jdbc:sqlserver://localhost:1433;"


+" database = NUEVO2; "
+" user=DD ;"
+" password=123; ";

42
try{

Connection con= DriverManager.getConnection(conexionURL);


return con;

}catch(Exception e1){
System.out.println("Error:"+e1.toString());
return null;
}
}

public void registro(int Codigo, String Descripcion, String RUC, String Precio, int Stock){

try{
Connection con = ProductoDAO.getConexion();
CallableStatement proc=con.prepareCall("EXECUTE SPproducto ?,?,?,?,?");
proc.setInt("Codigo", Codigo);
proc.setString("Descripcion", Descripcion);
proc.setString("RUC", RUC);
proc.setString("Precio", Precio);
proc.setInt("Stock", Stock);

proc.execute();
}catch(Exception e2){

43
}

public void ConsultarProvedor(String RUC){


Proveedor pr = new Proveedor();
String sql = "SELECT * FROM Provedor ";
try {
con = cn.getConexion();
ps = con.prepareStatement(sql);
ps.setString(1, RUC);
rs = ps.executeQuery();

} catch (SQLException e) {
System.out.println(e.toString());
}
//Me quede aqui nose como agregarle el combo
}
}

clase Proveedor

44
package clases;

public class Proveedor {


private String RUC;
private String Nombre;
private int Telefono;
private String Direccion;

public Proveedor() {
}

public Proveedor(String RUC, String Nombre, int Telefono, String Direccion) {


this.RUC = RUC;
this.Nombre = Nombre;
this.Telefono = Telefono;
this.Direccion = Direccion;
}

public String getRUC() {


return RUC;
}

public void setRUC(String RUC) {


this.RUC = RUC;
}

public String getNombre() {


return Nombre;
}

public void setNombre(String Nombre) {


this.Nombre = Nombre;
}

public int getTelefono() {


return Telefono;
}

public void setTelefono(int Telefono) {


this.Telefono = Telefono;
}

public String getDireccion() {


return Direccion;
}

45
public void setDireccion(String Direccion) {
this.Direccion = Direccion;
}

clase ProveedorDao

package clases;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;

public class ProveedorDAO {

public static Connection getConexion() {

String conexionURL = "jdbc:sqlserver://localhost:1433;"


+" database = NUEVO2; "
+" user=DD ;"
+" password=123; ";
try{
Connection con= DriverManager.getConnection(conexionURL);
return con;

}catch(Exception e1){
System.out.println("Error:"+e1.toString());
return null;
}
}

public void registro(String RUC, String Nombre, int Telefono, String Direccion){

try{
Connection con = ProveedorDAO.getConexion();

46
CallableStatement proc=con.prepareCall("EXECUTE SPprovedor ?,?,?,?");
proc.setString("RUC", RUC);
proc.setString("Nombre", Nombre);
proc.setInt("Telefono", Telefono);
proc.setString("Direccion", Direccion);

proc.execute();
}catch(Exception e2){

}
}

clase Vendidos

package clases;

public class Vendidos {

private String N_VENTA;


private int Codigo;
private String Producto;
private String RUC;
private String Precio;
private String Cantidad;
private String Subtotal;
private int DNI;

public Vendidos() {
}

public Vendidos(String N_VENTA, int Codigo, String Producto, String RUC, String Precio,
String Cantidad, String Subtotal, int DNI) {
this.N_VENTA = N_VENTA;
this.Codigo = Codigo;
this.Producto = Producto;
this.RUC = RUC;
this.Precio = Precio;

47
this.Cantidad = Cantidad;
this.Subtotal = Subtotal;
this.DNI = DNI;
}

public String getN_VENTA() {


return N_VENTA;
}

public void setN_VENTA(String N_VENTA) {


this.N_VENTA = N_VENTA;
}

public int getCodigo() {


return Codigo;
}

public void setCodigo(int Codigo) {


this.Codigo = Codigo;
}

public String getProducto() {


return Producto;
}

public void setProducto(String Producto) {


this.Producto = Producto;
}

public String getRUC() {


return RUC;
}

public void setRUC(String RUC) {


this.RUC = RUC;
}

public String getPrecio() {


return Precio;
}

public void setPrecio(String Precio) {


this.Precio = Precio;
}

public String getCantidad() {

48
return Cantidad;
}

public void setCantidad(String Cantidad) {


this.Cantidad = Cantidad;
}

public String getSubtotal() {


return Subtotal;
}

public void setSubtotal(String Subtotal) {


this.Subtotal = Subtotal;
}

public int getDNI() {


return DNI;
}

public void setDNI(int DNI) {


this.DNI = DNI;
}

clase Vendidos Dao

package clases;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;

public class VendidosDAO {

public static Connection getConexion() {

String conexionURL = "jdbc:sqlserver://localhost:1433;"

49
+" database = NUEVO2; "
+" user=DD ;"
+" password=123; ";
try{

Connection con= DriverManager.getConnection(conexionURL);


return con;

}catch(Exception e1){
System.out.println("Error:"+e1.toString());
return null;
}
}

public void registro(String N_VENTA,int Codigo, String Producto, String RUC, String
Precio, String Cantidad,String Subtotal, int DNI){

try{
Connection con = VendidosDAO.getConexion();
CallableStatement proc=con.prepareCall("EXECUTE SPvendidos ?,?,?,?,?,?,?,?");
proc.setString("N_VENTA", N_VENTA);
proc.setInt("Codigo", Codigo);
proc.setString("Producto", Producto);
proc.setString("RUC", RUC);
proc.setString("Precio", Precio);
proc.setString("Cantidad", Cantidad);
proc.setString("Subtotal", Subtotal);
proc.setInt("DNI", DNI);

proc.execute();
}catch(Exception e2){

}
}

Jframe
vistas

50
Control Nombre Asignado Título de Control

JLabel1 jLabel1 RUC

JLabel2 jLabel2 NOMBRE

JLabel3 jLabel3 TELEFONO

JLabel4 jLabel4 DIRECCION

Control Nombre Asignado Título de Control

JTextField1 txt_rcu RUC

JTextField2 txt_nom Nombre

JTextField3 txt_tel telefono

51
JTextField4 txt_dir Direccion

Control Nombre Asignado Título de Control

JButton1 btn_agregar Agregar

JButton2 btn_eliminar Eliminar

JButton3 btn_consultar Consultar

Control Nombre Asignado Título de Control

JTable1 Tabla_proveedor ---

52
Control Nombre Asignado Título de Control

JLabel1 jLabel1 CODIGO

JLabel2 jLabel2 DESCRIPCION

JLabel3 jLabel3 PROVEEDOR

JLabel4 jLabel4 PRECIO

JLabel5 jLabel5 STOCK

Control Nombre Asignado Título de Control

JTextField1 txt_cod Código

JTextField2 txt_pro Descripcion

53
JTextField3 txt_cant Proveedor

JTextField4 txt_pre Precio

JTextField5 txt_stk Stock

Control Nombre Título de

Asignado Control

JButton1 btn_agregar Agregar

JButton2 btn_elimina Eliminar

JButton3 btn_consult Consultar

ar

Control Nombre Asignado Título de Control

JTable1 TablaProducto ---

54
Control Nombre Asignado Título de Control

JLabel1 jLabel1 CODIGO

55
JLabel2 jLabel2 PRODUCTO

JLabel3 jLabel3 CANTIDAD

JLabel4 jLabel4 PRECIO

JLabel5 jLabel5 STOCK

JLabel6 JLabel6 RUC PROVEEDOR

JLabel7 JLabel7 CODIGO PARA

CLIENTE

Control Nombre Asignado Título de Control

JTextField1 txt_cod Código

JTextField2 txt_pro Producto

JTextField3 txt_cant Cantidad

JTextField4 txt_pre Precio

JTextField5 txt_stk Stock

JTextField6 txt_RUC Ruc

JTextField7 txt_cod Codigo

Control Nombre Asignado Título de Control

56
JButton1 btn_comprar Comprar

JButton2 btn_gen Generar Reporte

Control Nombre Asignado Título de Control

JTable1 TablaVenta ---

Control Nombre Asignado Título de Control

JButton1 btn_mostrar Mostrar Reporte

57
Control Nombre Asignado Título de Control

JTable1 TablaReporte ---

codigo

package tapaquete;

import clases.Cliente;
import clases.ClienteDAO;
import clases.Producto;
import clases.ProductoDAO;
import clases.Proveedor;
import clases.ProveedorDAO;
import clases.Vendidos;
import clases.VendidosDAO;
import java.awt.event.KeyEvent;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class Ventas extends javax.swing.JFrame {

Proveedor pr = new Proveedor();


ProveedorDAO PrDAO = new ProveedorDAO();
Producto pd= new Producto();
ProductoDAO PdDAO = new ProductoDAO();
Cliente cl= new Cliente();
ClienteDAO ClDAO= new ClienteDAO();
Vendidos vn=new Vendidos();
VendidosDAO VnDAO= new VendidosDAO();
/**
* Creates new form Ventas
*/

58
public Ventas() {
initComponents();
}

-----------------------------------------------------------------------------------------------------------------

private void txtprecioprodActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
}

private void txttelefonoprovActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
}

private void btnguardarprovActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
String pre = txtrucprov.getText();
String nom = txtnombreprov.getText();
int tel = Integer.parseInt(txttelefonoprov.getText());
String dir = txtdireccionprov.getText();
PrDAO.registro(pre,nom,tel,dir);
JOptionPane.showMessageDialog(null,"Producto registrado correctamente");

private void btnagregarclienteActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
int dni = Integer.parseInt(txtdnicliente.getText());
String nom = txtnombrecliente.getText();
int tel = Integer.parseInt(txttelefonocliente.getText());
String dir = txtdireccioncliente.getText();
ClDAO.registro(dni,nom,tel,dir);
JOptionPane.showMessageDialog(null,"Producto registrado correctamente");

private void btnmostrarclienteActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
DefaultTableModel modelotabla= (DefaultTableModel) tblcliente.getModel();
modelotabla.setRowCount(0);

PreparedStatement ps;
ResultSet rs;
ResultSetMetaData rsmd;
int columnas;

59
try {
Connection con = ClienteDAO.getConexion();
ps = con.prepareStatement("SELECT DNI,Nombre,Telefono,Direccion_Cliente
FROM Cliente");
rs= ps.executeQuery();
rsmd=rs.getMetaData();
columnas=rsmd.getColumnCount();

while(rs.next()){
Object[] fila= new Object[columnas];
for(int i=0;i<columnas;i++){
fila[i]=rs.getObject(i+1);
}
modelotabla.addRow(fila);
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "ERROR:" + e.toString());
}
}

private void mostrarprovActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
DefaultTableModel modelotabla= (DefaultTableModel) tblprov.getModel();
modelotabla.setRowCount(0);

PreparedStatement ps;
ResultSet rs;
ResultSetMetaData rsmd;
int columnas;

try {
Connection con = ProveedorDAO.getConexion();
ps = con.prepareStatement("SELECT RUC,Nombre,Telefono, Direccion FROM
Provedor");
rs= ps.executeQuery();
rsmd=rs.getMetaData();
columnas=rsmd.getColumnCount();

while(rs.next()){
Object[] fila= new Object[columnas];
for(int i=0;i<columnas;i++){
fila[i]=rs.getObject(i+1);
}
modelotabla.addRow(fila);
}
} catch (SQLException e) {

60
JOptionPane.showMessageDialog(null, "ERROR:" + e.toString());
}
}

private void btnmostrarprodActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
DefaultTableModel modelotabla= (DefaultTableModel) tblprod.getModel();
modelotabla.setRowCount(0);

PreparedStatement ps;
ResultSet rs;
ResultSetMetaData rsmd;
int columnas;

try {
Connection con = ProductoDAO.getConexion();
ps = con.prepareStatement("SELECT Codigo, Descripcion, RUC, Precio, Stock
FROM Producto");
rs= ps.executeQuery();
rsmd=rs.getMetaData();
columnas=rsmd.getColumnCount();

while(rs.next()){
Object[] fila= new Object[columnas];
for(int i=0;i<columnas;i++){
fila[i]=rs.getObject(i+1);
}
modelotabla.addRow(fila);
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "ERROR:" + e.toString());
}

private void btnagregarprodActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
int cod = Integer.parseInt(txtcodigoprod.getText());
String des = txtdescripcionprod.getText();
String ruc = txtrucprod.getText();
String pre = txtprecioprod.getText();
int sto = Integer.parseInt(txtstockprod.getText());
PdDAO.registro(cod,des,ruc,pre,sto);
JOptionPane.showMessageDialog(null,"Producto registrado correctamente");
}

61
private void txtcodigonvKeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
/*** if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
if (!"".equals(txtcodigonv.getText())) {
String cod = txtcodigonv.getText();
pd = PdDAO.BuscarPro(cod);
if (pd.getDescripcion() != null) {

txtdescripcionnv.setText("" + pd.getDescripcion());
txtprecionv.setText("" + pd.getPrecio());
txtstocknv.setText("" + pd.getStock());

} else {

txtcodigonv.requestFocus();
}
} else {
JOptionPane.showMessageDialog(null, "Ingrese el codigo del productos");
txtcodigonv.requestFocus();
}
}***/
}

private void txtcodigonvActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
}

private void btnnvproductoActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
DefaultTableModel modelotabla= (DefaultTableModel) tblnv.getModel();
modelotabla.setRowCount(0);

PreparedStatement ps;
ResultSet rs;
ResultSetMetaData rsmd;
int columnas;

try {
Connection con = ProductoDAO.getConexion();
ps = con.prepareStatement("SELECT Codigo, Descripcion, RUC, Precio, Stock
FROM Producto");
rs= ps.executeQuery();
rsmd=rs.getMetaData();
columnas=rsmd.getColumnCount();

while(rs.next()){

62
Object[] fila= new Object[columnas];
for(int i=0;i<columnas;i++){
fila[i]=rs.getObject(i+1);
}
modelotabla.addRow(fila);
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "ERROR:" + e.toString());
}
}

private void btncomprarnvActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
double subtotal, precio,cantidad;
precio=Double.parseDouble(txtprecionv.getText());
cantidad=Double.parseDouble(txtcantidadnv.getText());

subtotal= precio*cantidad;

txtsubtotal.setText(String.valueOf(subtotal));
}

private void btngenerarreporteActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
String nv = txtcodigoreport.getText();
int cod = Integer.parseInt(txtcodigonv.getText());
String des = txtdescripcionnv.getText();
String ruc = txtproveedornv.getText();
String pre = txtprecionv.getText();
String can = txtcantidadnv.getText();
String sub = txtsubtotal.getText();
int dni = Integer.parseInt(txtdniclientenv.getText());
VnDAO.registro(nv,cod,des,ruc,pre,can,sub,dni);
JOptionPane.showMessageDialog(null,"Producto registrado correctamente");
}

private void btnmostrarrepActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:

DefaultTableModel modelotabla= (DefaultTableModel) tblreporte.getModel();


modelotabla.setRowCount(0);

PreparedStatement ps;
ResultSet rs;
ResultSetMetaData rsmd;
int columnas;

63
try {
Connection con = VendidosDAO.getConexion();
ps = con.prepareStatement("SELECT N_VENTA, Codigo, Producto, RUC,Precio,
Cantidad, Subtotal,DNI FROM Vendidos");
rs= ps.executeQuery();
rsmd=rs.getMetaData();
columnas=rsmd.getColumnCount();

while(rs.next()){
Object[] fila= new Object[columnas];
for(int i=0;i<columnas;i++){
fila[i]=rs.getObject(i+1);
}
modelotabla.addRow(fila);
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "ERROR:" + e.toString());
}

private void tblnvMouseClicked(java.awt.event.MouseEvent evt) {


// TODO add your handling code here:
// TODO add your handling code here:
int seleccionar = tblnv.rowAtPoint(evt.getPoint());
txtcodigonv.setText(String.valueOf(tblnv.getValueAt(seleccionar,0)));
txtdescripcionnv.setText(String.valueOf(tblnv.getValueAt(seleccionar,1)));
txtproveedornv.setText(String.valueOf(tblnv.getValueAt(seleccionar,2)));
txtprecionv.setText(String.valueOf(tblnv.getValueAt(seleccionar,3)));
txtstocknv.setText(String.valueOf(tblnv.getValueAt(seleccionar,4)));
}

Conclusiones:

Referencias Bibliográficas:

Baquero, L y Hernández, M (2018) “BUENAS PRÁCTICAS DE PROGRAMACIÓN


ORIENTADA A OBJETOS EN JAVA” Bogotá: CRAI. libro-java-web-
pdf_compress.pdf

64
García, E. (2020). Diferencia Entre Clases Abstractas E Interfaces En Java.
códigofacilito. https://codigofacilito.com/articulos/clases-abstractas-interfaces-java

Gómez, E. y Moreno, J. (2019). “Fundamentos de programación Java con NetBeans 8.2”


México: Alfaomega. https://pcmaxo.com/wp-content/uploads/2022/02/fundamentos-de-
programacion-java-con-netbeans-82-2019-jimenez-enrique-gomez_compress.pdf

Ladrón, J. (s.f.). “Fundamentos de programación en Java” España: EME. Fundamentos


de programacion en Java (tesuva.edu.co)

Nieva G. (5 de febrero 2017). Arreglos unidimensionales en Java. dCodinGames.


https://dcodingames.com/arreglos-unidimensionales-en-java/

Moya R. (7 de setiembre 2014). Enum (Enumerados) en Java, con ejemplos. Jarroba.


https://jarroba.com/enum-enumerados-en-java-con-ejemplos/
Java Swing | JList con ejemplos. (s. f.). Acervo Lima. Recuperado 25 de mayo de

2022, https://es.acervolima.com/java-swing-jlist-con-ejemplos/

Fuente, J. (20 de abril 2022). JSCROLLPANE JAVA. Aprendeprogramando.es.

https://aprendeprogramando.es/cursos-online/java/jscrollpane/

B. (15 de mayo 2021). Como usar JComboBox en Java (Lista desplegable). Byspel.

https://byspel.com/como-usar-jcombobox-en-java-lista-desplegable/

Castellano, E. S. P. L. (s. f.). Swing y JFC (Java Foundation Classes). Programación en


Castellano.
https://programacion.net/articulo/swing_y_jfc_java_foundation_classes_94/26

65
Nieva, G. (23 de Marzo 2020). Cómo crear aplicaciones multi-documento usando
JInternalFrame. DCodinGames. https://dcodingames.com/como-crear-aplicaciones-
multi-documento-usando-jinternalframe/

García, J. (s. f.-a). Componentes JTextField y JTextArea. Jairogarciarincon.


https://www.jairogarciarincon.com/clase/interfaces-de-usuario-con-java-swing/
componentes-jtextfield-y-jtextarea

García, J. (s. f.-b). Componentes JTextField y JTextArea. Jairogarciarincon.


https://www.jairogarciarincon.com/clase/interfaces-de-usuario-con-java-swing/
componentes-jtextfield-y-jtextarea

Sierra,M. y Cuenca, L.(s.f) “Interface Collection (API java). add, remove, size.
Ejemplo ArrayList. Diferencia con List. Streams (CU00917C)”. Obtenido de :
https://www.aprenderaprogramar.com/index.php?
option=com_content&view=article&id=596:interface-collection-api-java-add-remove-
size-ejemplo-arraylist-diferencia-con-list-streams-cu00917c&catid=58&Itemid=180

Ballesteros, C.(2020). Diferencia entre List y ArrayList en Java. Obtenido de :


https://es.fondoperlaterra.org/comdifference-between-list-and-arraylist-in-java-
39#:%7E:text=Diferencia%20entre%20List%20y%20ArrayList%20en%20Java
%201,crecer%20en%20tama%C3%B1o%20una%20vez%20que%20se%20crea

DelftStack(2021) Diferencia entre hashmap y map en Java. Obtenido de :


https://www.delftstack.com/es/howto/java/difference-between-hashmap-and-map-in-
java/#:~:text=En%20Java%2C%20Map%20es%20una,en%20un%20par%20clave
%2Dvalor.

Equipo Geek(2020) Qué es HashSet Java y cómo comenzar con él. Obtenido de:
https://ifgeekthen.nttdata.com/es/que-es-hashset-java-y-como-comenzar-con-

66
el#:~:text=En%20resumidas%20l%C3%ADneas%20la%20clase,una%20llave%20a
%20un%20valor.

Anonimo(1999) Iterador de Java. Obtenido de :


https://www.w3schools.com/java/java_iterator.asp

67

También podría gustarte