EXAMEN COMPLEXIVO GERONIMO SALAZAR SALAZAR

Anuncio
UNIDAD ACADÉMICA DE INGENIERÍA CIVIL
CARRERA DE INGENIERÍA DE SISTEMAS
TEMA:
IMPLEMENTACIÓN DE UN TDA, PARA ÁRBOLES BINARIOS AVL Y APLICACIÓN
EN UN CASO PRÁCTICO DE GESTIÓN DE EMPLEADOS
TRABAJO PRÁCTICO DEL EXAMEN COMPLEXIVO PREVIO A LA OBTENCIÓN DEL
TÍTULO DE INGENIERO DE SISTEMAS
AUTOR:
SALAZAR AGUILAR GERONIMO ISRAEL
MACHALA - EL ORO
CESIÓN DE DERECHOS DE AUTOR
Yo, SALAZAR AGUILAR GERONIMO ISRAEL, con C.I. 0705402428,
estudiante de la carrera de INGENIERÍA DE SISTEMAS de la UNIDAD
ACADÉMICA DE INGENIERÍA CIVIL de la UNIVERSIDAD TÉCNICA DE
MACHALA, en calidad de Autor del siguiente trabajo de titulación
IMPLEMENTACIÓN DE UN TDA, PARA ÁRBOLES BINARIOS AVL Y
APLICACIÓN EN UN CASO PRÁCTICO DE GESTIÓN DE EMPLEADOS
•
Declaro bajo juramento que el trabajo aquí descrito es de mi autoría;
que no ha sido previamente presentado para ningún grado o
calificación profesional. En consecuencia, asumo la responsabilidad de
la originalidad del mismo y el cuidado al remitirme a las fuentes
bibliográficas respectivas para fundamentar el contenido expuesto,
asumiendo la responsabilidad frente a cualquier reclamo o demanda
por parte de terceros de manera EXCLUSIVA.
• Cedo a la UNIVERSIDAD TÉCNICA DE MACHALA de forma NO
EXCLUSIVA con referencia a la obra en formato digital los derechos de:
a. Incorporar la mencionada obra al repositorio digital institucional
para su democratización a nivel mundial, respetando lo
establecido por la Licencia Creative Commons AtribuciónNoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0),
la Ley de Propiedad Intelectual del Estado Ecuatoriano y el
Reglamento Institucional.
b. Adecuarla a cualquier formato o tecnología de uso en internet,
así como incorporar cualquier sistema de seguridad para
documentos electrónicos, correspondiéndome como Autor(a) la
responsabilidad de velar por dichas adaptaciones con la finalidad
de que no se desnaturalice el contenido o sentido de la misma.
Machala, 23 de noviembre de 2015
SALAZAR AGUILAR GERONIMO ISRAEL
C.I. 0705402428
ii
IMPLEMENTACIÓN DE UN TDA PARA ÁRBOLES BINARIOS AVL Y
APLICACIÓN EN UN CASO PRÁCTICO DE GESTIÓN EMPLEADOS
Geronimo Israel Salazar Aguilar
RESUMEN
La implementación de un TDA (tipo de dato abstracto) permite agrupar diferentes
tipos de datos y métodos en un solo objeto, en este caso se utiliza para crear
estructura de datos de árboles binarios AVL, empleando el lenguaje de
programación a objetos Java. La forma de crear los arboles binarios AVL en este
lenguaje es mediante una clase que contendrá las variables de tipo primitivo y
las que se utilizan para enlazarse con los nodos del subárbol izquierdo y derecho,
un constructor que inicializara el factor de equilibrio en cero y los métodos
recursivos para insertar, eliminar, modificar, buscar y las rotaciones simples y
dobles necesarias para mantener un árbol binario AVL balanceado. La utilización
de árboles binarios AVL tiene como finalidad reducir el tiempo de búsqueda de
la información de los empleados y conservarla actualizada. La información
concerniente a los empleados se guardara en 3 archivos de texto, clasificándolos
de acuerdo al departamento que pertenezcan y los intercambios que se realicen
entre departamentos se registrara temporalmente en otro archivo de texto
denominado laboral.txt. Cuando se inserta o elimina un nodo del subárbol
derecho o izquierdo debe comprobarse el factor de equilibrio del árbol para
constatar que se encuentre balanceado, en caso de no ser así se aplicaran las
rotaciones simples o dobles según sea el caso para mantenerlo balanceado.
Palabras clave
TDA, NODO, BALANCEADO, JAVA, ARCHIVO
iii
TDA TO IMPLEMENTING A binary trees AVL AND APPLICATION IN CASE
MANAGEMENT EMPLOYEES
Geronimo Israel Salazar Aguilar
ABSTRACT
The implementation of an TDA (abstract data type) allows you to group different
types of data and methods in an object, in this case it is used to create data
structure of binary trees AVL using the Java programming language objects. The
way to create the binary tree in this language is AVL by a class containing
primitive variables and used to bind to nodes in the left and right subtree, a
constructor that will initialize the balance factor to zero and recursive methods to
insert, delete, modify, search and single and double rotations needed to maintain
a balanced binary tree AVL. The use of binary trees AVL aims to reduce the time
spent searching for information and keep employees updated. Information
concerning employees be saved in 3 text files, classifying them according to the
department they belong and exchanges that take place between departments is
temporarily recorded in another text file named laboral.txt. When you insert or
remove a node from the left or right subtree must be checked balancing factor to
ascertain tree that is balanced, if not so simple or double rotations are applied as
appropriate to keep it balanced.
Keywords
TDA, NODE, balanced, JAVA, FILE
iv
ÍNDICE DE CONTENIDOS
pág.
PORTADA …………………….……………………………………………..………..i
CESIÓN DE DERECHOS DE AUTOR……………………………………………...ii
RESUMEN ........................................................................................................ iii
ABSTRACT ....................................................................................................... iv
ÍNDICE DE CONTENIDOS ............................................................................... iv
ÍNDICE DE TABLAS ........................................................................................ vii
ÍNDICE DE FIGURAS ...................................................................................... vii
1.
INTRODUCCIÓN .....................................................................................1
1.1.
MARCO CONTEXTUAL ...........................................................................2
1.2.
PROBLEMA .............................................................................................2
1.3.
OBJETIVO GENERAL .............................................................................2
2.
DESARROLLO.........................................................................................3
2.1
MARCO TEÓRICO...................................................................................3
2.1.1. Clase. .......................................................................................................3
2.1.2. TDA (tipo de dato abstracto). ...................................................................3
2.1.3 Arboles binarios equilibrado. ....................................................................3
2.1.4 Lectura de archivos en java......................................................................4
2.1.5 Recursividad ............................................................................................4
2.1.6. Java .........................................................................................................4
2.2
MARCO METODOLÓGICO .....................................................................5
2.2.1 Clase Archivo ...........................................................................................5
2.2.2 Clase NodoAVL ........................................................................................5
2.2.3 Clase ListaNodoAVL ................................................................................6
2.2.4. Diagrama de clases................................................................................15
2.3
RESULTADOS .......................................................................................16
v
3.
CONCLUSIONES ...................................................................................19
4.
REFERENCIAS BIBLIOGRÁFICAS ........................................................20
5.
ANEXOS.................................................................................................21
Anexo 1. Rotaciones ..............................................................................21
Anexo 2. Codigo de Fuente………………………………………………….23
Anexo 3. Caso de Investigación .............................................................49
vi
ÍNDICE DE TABLAS
pág.
Tabla 1: Descripción de la Figura 4: Gestión de Empleados ............................16
Tabla 2. Descripción de la Figura 5. Gestión de Empleados ............................17
Tabla 3. Descripción de la Figura 6. Gestión de Reestructuración ...................17
ÍNDICE DE FIGURAS
pág.
Figura 1. Árbol equilibrado .................................................................................3
Figura 2. Árbol binario con factor de equilibrio ...................................................4
Figura 3. Diagrama de clases ..........................................................................15
Figura 4. Gestión de Empleados ......................................................................16
Figura 5. Gestión de Empleados ......................................................................17
Figura 6. Gestión de Reestructuración .............................................................18
Figura 7. Rotación simple a la izquierda ...........................................................21
Figura 8. Rotación simple a la derecha ...........................................................21
Figura 9. Rotación doble a la izquierda ............................................................22
Figura 10. Rotación doble a la derecha ............................................................22
vii
1. INTRODUCCIÓN
El presente trabajo tiene como objetivo implementar un software que utilice un
TDA y archivos para guardar la información, el lenguaje de programación
seleccionado es Java, para emplear un TDA se necesita una clase que
encapsula las variables y los métodos necesarios para crear una estructura de
datos de aboles binarios AVL, estas estructura de datos se diferencia de los
arboles binarios de búsqueda comunes porque cada vez que inserta o elimina
un nodo en el árbol este comprueba su factor de equilibrio para determinar si el
árbol esta balanceado, un árbol binario AVL se encuentra balanceado si las
alturas de los subárboles izquierdos y derechos de cualquier nodo no difieren
como máximo en 1.
En caso de no estar balanceado el árbol se deben aplicar rotaciones simples o
dobles entre los nodos del árbol (ver Figura 1 y 2) para volverlo a balancearlo. El
software utiliza 3 archivos de texto para la registrar la información de los
empleados uno por cada departamento de la empresa y un archivo adicional
denominado laboral para realizar cambios de departamento de un empleado. El
proceso de cambio de departamento está compuesto de tres etapas primero
registrar la solicitud de cambio de departamento en el archivo laboral y segundo
efectúa los cambios con árboles binarios AVL y tercero eliminar las solicitudes
de cambio del archivo laboral, este proceso permite realizar varios cambios a la
vez.
1
1.1.
MARCO CONTEXTUAL
La empresa ALCOCI SA necesita registrar información de sus empleados y
mantenerla actualizada, por tal motivo se implementara un software desarrollado
en Java que trabaja con árboles binarios AVL y archivos de texto para almacenar
la información. El software antes de guardar un nuevo registro comprueba si los
archivos de texto existen, si este es el caso sigue agregando información en los
archivos, en caso no estar creados los archivos el software los crea y agrega la
información, para modificar el departamento en el que se encuentra un
empleado, primero se registra el cambio en un archivo de texto denominado
laboral luego con la ayuda de los arboles binarios AVL se efectúa el cambio del
departamento y por último se elimina los registros del archivo laboral.
1.2.
PROBLEMA
La aplicación de TDA para estructuras de datos de árboles binarios AVL en Java
de manera eficiente implica crear una clase que contenga las variables para
enlazar los nodos del subárbol derecho e izquierdo, la raíz, un constructor, y
métodos recursivos para insertar, eliminar, rotaciones simples y dobles, buscar
y recorrer los nodos del árbol sin perder los enlaces. Los métodos de insertar y
eliminar tienen que verificar si el árbol esta balanceado, en caso no estarlo deben
aplicar las rotaciones simples o dobles a la derecha o izquierda para volver a
balancearlo, de esta manera el árbol binario AVL conserva su principal
particularidad las alturas de los subárboles izquierdos y derechos de cualquier
nodo no difieren como máximo en 1.
1.3.
OBJETIVO GENERAL
Implementar un tipo de dato abstracto, utilizando el lenguaje de programación
orientado a objetos Java para crear estructuras de datos de árboles binarios
AVL
2
2. DESARROLLO
2.1 MARCO TEÓRICO
2.1.1. Clase. son plantillas que están compuestas por un nombre atributos y
métodos.
2.1.2. TDA (tipo de dato abstracto). es un tipo de dato que a su vez contiene
una colección de datos y métodos que son representados en Java por una clase.
2.1.3 Arboles binarios equilibrado. Un árbol equilibrado o árbol AVL es un
árbol binario de búsqueda en el que las alturas de los subárboles izquierdo y
derecho de cualquier nodo no difieren como máximo en 1.
La altura o profundidad de un árbol binario es el nivel máximo de sus hojas más
uno. La altura de un árbol nulo se considera cero. (Joyanes Aguilar & Zahonero
Matinéz, Estructuras de datos en Java, 2007)
8
5
8
11
Fe = 0
4
7
Figura 1. Árbol equilibrado
Elaboración: Propia del autor
Para determinar su un árbol binario está equilibrado o no, se debe mantener
información relativa en cada nodo del árbol, esta información recibe el nombre
de factor de equilibrio está definido por al siguiente formula:
𝐅𝐞 = 𝐀 𝐒𝐃 − 𝐀 𝐒𝐈
Donde:



Fe: factor de equilibrio
ASD: altura del subárbol derecho
ASI: altura del subárbol izquierdo
3
8
Fe = -1
5
8
11
Fe
Fe==00
Fe = 0
4
7
Fe = 0
Fe = 0
Figura 2. Árbol binario con factor de equilibrio
Elaboración: Propia del autor
2.1.4 Lectura de archivos en java. Java no realiza operaciones directamente
con el contenido de los archivos de texto, primero debe almacenarse en un buffer
intermedio para trabajar con el contenido, con esto aumenta la eficiencia de las
operaciones.
La clase BufferedReader permite almacenar el contenido del archivo en el buffer,
además esta clase hereda métodos de la clase Reader necesarios para trabajar
con el buffer, como son readLine() y close().
2.1.5 Recursividad. la recursividad o recursión es la propiedad de un método
por la cual puede llamarse a sí mismo, en muchas circunstancias el uso de la
recursión permite a los programadores especificar
soluciones
naturales y
sencillas que en caso contrario serían difíciles de resolver; por esta causa la
recursión es una
herramienta poderosa e importante en
resolución de
problemas y en
programación. (Joyanes Aguilar & Zahonero Martínez,
Programación en JAVA 6, 2011)
2.1.6. Java es un lenguaje de programación sencillo, orientado a objetos,
distribuido, interpretado, robusto, seguro, neutro ante la arquitectura, portable,
altas prestaciones, multihilo y dinámico. (Joyanes Aguilar & Zahonero Matinéz,
Estructuras de datos en Java, 2007)
4
2.2 MARCO METODOLÓGICO
2.2.1 Clase Archivo. Esta clase es un ejemplo de un tda en java, un dato que
contiene una colección de datos.
package arbolavl;
/** @author ISRAEL*/
public class Archivo {
private int identificador;
private String cedula;
private String fechaNacimiento;
private int departamento;
private int sexo;
private String lugar;
private String nombre;
private String apellido;
private String direccion;
private String correo;
private String contacto;
}
2.2.2 Clase NodoAVL. Esta clase implementa una variable tipo Archivo.
package arbolavl;
/**@author ISRAEL
*/
public class NodoAVL {
private Archivo archivo;
private int fe;
NodoAVL izdo, dcho;
public NodoAVL(Archivo archivo) {
this.archivo=archivo;
this.fe = 0;
this.izdo = dcho = null;
}
public NodoAVL(Archivo archivo, int vfe) {
this.archivo=archivo;
this.fe = vfe;
this.izdo = dcho = null;
}
public NodoAVL(NodoAVL ramaIzdo, Archivo archivo, NodoAVL ramaDcho) {
this.archivo=archivo;
5
this.izdo = ramaIzdo;
this.dcho = ramaDcho;
this.fe = 0;
}
public NodoAVL(NodoAVL ramaIzdo, int vfe, Archivo archivo, NodoAVL ramaDcho) {
this.archivo=archivo;
this.izdo = ramaIzdo;
this.dcho = ramaDcho;
this.fe = vfe;
}
}
2.2.3 Clase ListaNodoAVL. Esta clase implementa los métodos para gestionar
los arboles binarios AVL
package arbolavl;
public class ListaNodoAVL {
private NodoAVL raiz;
public ListaNodoAVL() {
}
public ListaNodoAVL(NodoAVL r) {
raiz = r;
}
public NodoAVL getRaiz() {
return raiz;
}
public void setRaiz(NodoAVL raiz) {
this.raiz = raiz;
}
//ROTACIONES SIMPLES
//rotación simple a la izquierda
public NodoAVL rotacionII(NodoAVL n, NodoAVL n1) {
n.setIzdo(n1.getDcho());
n1.setDcho(n);
//actualizar factor de equilibrio
if (n1.getFe() == -1) {
n.setFe(0);
n1.setFe(0);
} else {
n.setFe(-1);
n1.setFe(1);
}
return n1;
}
6
//rotación simple a la derecha
public NodoAVL rotacionDD(NodoAVL n, NodoAVL n1) {
n.setDcho(n1.getIzdo());
n1.setIzdo(n);
//actualizar factor de equilibrio
if (n1.getFe() == +1) {
n.setFe(0);
n1.setFe(0);
} else {
n.setFe(+1);
n1.setFe(-1);
}
return n1;
}
//ROTACIONES DOBLES
//rotación doble a la izquierda
public NodoAVL rotacionDI(NodoAVL n, NodoAVL n1) {
NodoAVL n2;
n2 = n1.getIzdo();
n.setDcho(n2.getIzdo());
n2.setIzdo(n);
n1.setIzdo(n2.getDcho());
n2.setDcho(n1);
//actualización factor de equilibrio
if (n2.getFe() == +1) {
n.setFe(-1);
} else {
n.setFe(0);
}
if (n2.getFe() == -1) {
n1.setFe(+1);
} else {
n1.setFe(0);
}
n2.setFe(0);
return n2;
}
//rotación doble a la derecha
public NodoAVL rotacionID(NodoAVL n, NodoAVL n1) {
NodoAVL n2;
n2 = n1.getDcho();
n.setIzdo(n2.getDcho());
n2.setDcho(n);
n1.setDcho(n2.getIzdo());
n2.setIzdo(n1);
//actualización factor de equilibrio
if (n2.getFe() == +1) {
n1.setFe(-1);
} else {
n1.setFe(0);
}
7
if (n2.getFe() == -1) {
n.setFe(1);
} else {
n.setFe(0);
}
n2.setFe(0);
return n2;
}
public void insertar(NodoAVL nuevo) {
raiz = insertarAVL(raiz, nuevo, false);
}
public NodoAVL insertarAVL(NodoAVL raiz, NodoAVL nuevo, boolean hc) {
NodoAVL n1;
if (raiz == null) {
raiz = nuevo;
hc = true;
}
else
if
(nuevo.getArchivo().getIdentificador()
raiz.getArchivo().getIdentificador()) {
NodoAVL auxIz;
auxIz = insertarAVL(raiz.getIzdo(), nuevo, hc);
raiz.setIzdo(auxIz);
//regresando por los nodos se comprueba la altura
if (hc) {
// decrementa el fe por aumentar la altura de rama izquierda
switch (raiz.getFe()) {
case 1: {
raiz.setFe(0);
hc = false;
break;
}
case 0: {
raiz.setFe(-1);
break;
}
case -1: {
n1 = raiz.getIzdo();
if (n1.getFe() == -1) {
raiz = rotacionII(raiz, n1);
} else {
raiz = rotacionID(raiz, n1);
}
hc = false;
}
}
}
}
else
if
(nuevo.getArchivo().getIdentificador()
raiz.getArchivo().getIdentificador()) {
NodoAVL auxDr;
auxDr = insertarAVL(raiz.getDcho(), nuevo, hc);
raiz.setDcho(auxDr);
if (hc) {
switch (raiz.getFe()) {
8
<
>
case 1: {
n1 = raiz.getDcho();
if (n1.getFe() == +1) {
raiz = rotacionDD(raiz, n1);
} else {
raiz = rotacionDI(raiz, n1);
}
hc = false;
break;
}
case 0: {
raiz.setFe(+1);
break;
}
case -1: {
raiz.setFe(0);
hc = false;
}
}
}
} else {
System.out.print("no puede haber 2 registros con el mismo identificador");
}
return raiz;
}
//REESTRUCTURA DESPUES DE ELIMINAR
//Reestructura Izquierda
public NodoAVL reestructuraIzquierda(NodoAVL nodo, int altura) {
NodoAVL auxNodo;
if (altura > 0) {
switch (nodo.getFe()) {
case -1: {
nodo.setFe(0);
break;
}
case 0: {
nodo.setFe(1);
altura = 0;
break;
}
case 1: {
auxNodo = nodo.getDcho();
if (auxNodo.getFe() >= 0) {//Rotacion simple a la derecha
nodo.setDcho(auxNodo.getIzdo());
auxNodo.setIzdo(nodo);
switch (auxNodo.getFe()) {
case 0: {
nodo.setFe(1);
auxNodo.setFe(-1);
altura = 0;
break;
}
9
case 1: {
nodo.setFe(0);
auxNodo.setFe(0);
break;
}
}
nodo = auxNodo;
} else {
nodo = rotacionDI(nodo, auxNodo);
nodo.setFe(0);
}
break;
}
}
}
return nodo;
}
//Reestructura derecha
public NodoAVL reestructuraDerecha(NodoAVL nodo, int altura) {
NodoAVL auxNodo;
if (altura > 0) {
switch (nodo.getFe()) {
case 1: {
nodo.setFe(0);
break;
}
case 0: {
nodo.setFe(-1);
altura = 0;
break;
}
case -1: {
auxNodo = nodo.getDcho();
if (auxNodo.getFe() <= 0) {//Rotacion simple a la izquierda
nodo.setIzdo(auxNodo.getDcho());
auxNodo.setDcho(nodo);
switch (auxNodo.getFe()) {
case 0: {
nodo.setFe(-1);
auxNodo.setFe(1);
altura = 0;
break;
}
case -1: {
nodo.setFe(0);
auxNodo.setFe(0);
break;
}
}
nodo = auxNodo;
} else {
nodo = rotacionID(nodo, auxNodo);
nodo.setFe(0);
}
10
break;
}
}
}
return nodo;
}
//BUSCAR REEMPLAZO
/*Metodo de busqueda, del nodo de reemplazo
busca el nodo mayor del subárbol de la izquierda*/
public void nodoSustituye(NodoAVL nodo, NodoAVL auxNodo, int altura) {
if (nodo.getDcho() != null) {
nodoSustituye(nodo.getDcho(), auxNodo, altura);
if (auxNodo.getIzdo() == null) {
nodo.setDcho(null);
} else {
nodo.setDcho(auxNodo.getIzdo());
nodo = reestructuraDerecha(nodo, altura);
}
} else {
//Pasar valores
auxNodo.setArchivo(nodo.getArchivo());
nodo = nodo.getIzdo();
altura = 1;
}
auxNodo.setIzdo(nodo);
}
//Parametros Raiz,null,0,identificador
//ELIMINAR NODO
public void eliminarAVL(NodoAVL nodo1, NodoAVL nodo2, int altura, int
identificador) {
NodoAVL auxNodo;
int flag = 0;
if (nodo1 != null) {
if (identificador < nodo1.getArchivo().getIdentificador()) {
if (altura > 0) {
flag = 1;
} else {
if (altura != 0) {
flag = -1;
}
altura = -1;
eliminarAVL(nodo1.getIzdo(), nodo2, altura, identificador);
nodo1 = reestructuraIzquierda(nodo2, altura);
if (nodo2 != null) {
switch (flag) {
case -1: {
nodo2.setIzdo(nodo1);
break;
}
case 1: {
nodo2.setDcho(nodo1);
break;
}
11
default: {
break;
}
}
} else {
raiz = nodo1;
}
}
} else {
if (identificador > nodo1.getArchivo().getIdentificador()) {
if (altura < 0) {
flag = -1;
} else {
if (altura != 0) {
flag = 1;
}
altura = 1;
eliminarAVL(nodo1.getDcho(), nodo2, altura, identificador);
nodo1 = reestructuraDerecha(nodo1, altura);
if (nodo2 != null) {
switch (flag) {
case -1: {
nodo2.setIzdo(nodo1);
break;
}
case 1: {
nodo2.setDcho(nodo1);
break;
}
default: {
break;
}
}
} else {
raiz = nodo1;
}
}
} else {
nodo2 = nodo1;
if (nodo2.getDcho() == null) {
nodo1 = nodo2.getIzdo();
if (altura != 0) {
if (altura < 0) {
nodo2.setIzdo(nodo1);
} else {
nodo2.setDcho(nodo1);
}
} else {
if (nodo1 == null) {
raiz = null;
} else {
raiz = nodo1;
}
altura = 1;
}
12
} else {
if (nodo2.getIzdo() == null) {
nodo1 = nodo2.getDcho();
if (altura != 0) {
if (altura <= 0) {
nodo2.setIzdo(nodo1);
} else {
nodo2.setDcho(nodo1);
}
} else {
if (nodo1 == null) {
raiz = null;
} else {
raiz = nodo1;
}
}
altura = 1;
} else {
nodoSustituye(nodo2.getIzdo(), nodo2, altura);
nodo1 = reestructuraIzquierda(nodo1, altura);
if (nodo2 != null) {
if (altura <= 0) {
nodo2.setIzdo(nodo1);
} else {
nodo2.setDcho(nodo1);
}
} else {
raiz = nodo1;
}
}
}
}
}
} else {
System.out.print("NO SE HA ENCONTRADO EL NODO");
}
}
//BUSCAR
public NodoAVL buscar(int identificador, NodoAVL r) {
if (raiz == null) {
return null;
} else if (r.getArchivo().getIdentificador() == identificador) {
return r;
} else if (r.getArchivo().getIdentificador() < identificador) {
return buscar(identificador, r.getDcho());
} else {
return buscar(identificador, r.getIzdo());
}
}
//METODOS PARA VISUALIZAR
//Metodo para recorrer en arbol InOrden
public String inOrden(NodoAVL r, String cadena) {
if (r != null) {
13
cadena = inOrden(r.getIzdo(), cadena);
cadena = cadena + r.getArchivo().getIdentificador() + ";" +
r.getArchivo().getDepartamento() + ";"
+ r.getArchivo().getCedula() + ";" + r.getArchivo().getNombre() + " " +
r.getArchivo().getApellido()+"\n";
cadena = inOrden(r.getDcho(), cadena);
}
return cadena;
}
//Metodo para recorrer el arbol PreOrden
public String preOrden(NodoAVL r, String cadena) {
if (r != null) {
cadena = cadena + r.getArchivo().getIdentificador() + ";" +
r.getArchivo().getDepartamento() + ";"
+ r.getArchivo().getCedula() + ";" + r.getArchivo().getNombre() + " " +
r.getArchivo().getApellido()+"\n";
cadena = preOrden(r.getIzdo(), cadena);
cadena = preOrden(r.getDcho(), cadena);
}
return cadena;
}
//Metodo para recorrer el arbol PostOrden
public String postOrden(NodoAVL r, String cadena) {
if (r != null) {
cadena = postOrden(r.getIzdo(), cadena);
cadena = postOrden(r.getDcho(), cadena);
cadena = cadena + r.getArchivo().getIdentificador() + ";" +
r.getArchivo().getDepartamento() + ";"
+ r.getArchivo().getCedula() + ";" + r.getArchivo().getNombre() + " " +
r.getArchivo().getApellido()+"\n";
}
return cadena;
}
}
14
2.2.4. Diagrama de clases
«interface»
MenuArchivo
Archivo
-identificador : int
-cedula : string
-fechaNacimiento : string
-departamento : int
-sexo : int
-lugar : string
-nombre : string
-apellido : string
-direccion : string
-correo : string
-contacto : string
+setIdentificador()
+getIdentificador()
+setCedula()
+getCedula()
+setFechaNacimiento()
+getfechaNacimiento()
+setDepartamento()
+getDepartamento()
+setSexo()
+getSexo()
+setLugar()
+getLugar()
+setNombre()
+getNombre()
+setApellido()
+getApellido()
+setDireccion()
+getDireccion()
+setCorreo()
+getCorreo()
+Nuevo()
+Guardar()
+Cancelar()
+Eliminar()
+Cargar Archivo()
+Reestrcuturar Empleados()
+dibujar()
ListaArchivo
+leerArchivo()
+escribirArchivo()
+borrarArchivo()
+modificarRegistro()
+eliminarRegistro()
1
1
NodoAVL
-archivo : Archivo
-fe : int
-izdo : NodoAVL
-dcho : NodoAVL
+NodoAVL()
+setFe()
+getFe()
+setArchivo()
+getArchivo()
+setIzdo()
+getIzdo()
+setDcho()
+getDcho()
ListaNodoAVL
-raiz : NodoAVL
+ListaNodoAVL()
+getRaiz()
+rotacionII()
+rotacionDD()
+rotacionDI()
+rotacionID()
+insertarAVL()
+reestructuraIzquierda()
+reestructuraDerecha()
+nodosustituye()
+eliminarAVL()
+buscar()
+inOrden()
+preOrden()
+postOrden()
Figura 3. Diagrama de clases
Elaboración: Propia del autor
15
2.3 RESULTADOS
Icono
Acción
Descripción
Habilita los cuadros de texto para insertar los varoles para un
nuevo empleado.
Habilita los cuadros de texto para cambiar los valores de los
cuadros de texto previamente debe seleccionarse el empleado.
Eliminar un empleado previamente debe seleccionarse el
empleado.
Limpiar los cuadros de texto y los deshabilita
Nuevo
Edita
Eliminar
Cancelar
Guarda los valores de los cuadros de texto en el archivo según
el departamento seleccionado
Carga los datos en la tabla del departamento seleccionado
Guardar
Cargar
Registros
Departamento
AVL
Abre una ventana para modificar el departamento de un
empleado
Abre una ventana para visualizar los arboles binarios AVL y
realiza el cambio de departamento de los empleados
Tabla 1: Descripción de la Figura 4: Gestión de Empleados
Elaboración: Propia del autor
Figura 4. Gestión de Empleados
Elaboración: Propia del autor
16
Icono
Acción
Eliminar
Listar
Descripción
Elimina un registro del archivo laboral previamente debe
seleccionarse un registro
Carga los registros del archivo laboral en la tabla
Tabla 2. Descripción de la Figura 5. Gestión de Empleados
Elaboración: Propia del autor
Figura 5. Gestión de Empleados
Elaboración: Propia del autor
Botón
Combo Box
Arbol
Combo Box
Modo de
Visualizar
Visualizar
Reestructurar
Descripción
Seleccionar el árbol
Seleccionar el modo de visualización del árbol seleccionado en
el combo box Arbol
Carga los datos en la tabla del árbol seleccionado según el
modo de visualización
Realiza los cambios de los empleados que han solicitado
cambio de departamento
Tabla 3. Descripción de la Figura 6. Gestión de Reestructuración
Elaboración: Propia del autor
17
Figura 6. Gestión de Reestructuración
Elaboración: Propia del autor
18
3. CONCLUSIONES
El programa permitió realizar las operaciones de insertar, modificar y eliminar
empleados de los archivos de texto según el departamento al que pertenecen.
Cuando se realizan las operaciones de insertar y eliminar un nodo del árbol
binario AVL se debe comprobar el factor de equilibrio de los nodos raíz, para
determinar si el árbol esta balanceado, si el árbol está desbalanceado se deben
realizar las rotaciones simples o dobles, cuando se realizan rotaciones simples
a la izquierda o derecha el factor de equilibrio de los nodos afectados será 0, en
cambio con las rotaciones dobles se debe calcular el factor de equilibrio
aplicando la formula altura del subárbol derecho menos la altura del subárbol
izquierdo. Cuando se elimina un nodo que tiene 2 descendientes se puede
reemplazar por el nodo mayor del subárbol izquierdo o por el nodo menor del
subárbol derecho.
19
4. REFERENCIAS BIBLIOGRÁFICAS
Badenas Carpio, J., Loopis Borrás, J., & Coltell Simón, Ó. (2001). CURSO
PRÁCTICO DE PROGRAMACIÓN EN C Y C++. Publidisa.
Durán, F., Gutierrez, F., & Pimentel, E. (2007). PROGRAMACIÓN ORIENTADA
A OBJETOS CON JAVA. Madrid: Thomson.
Guardati, S. (2007). ESTRUCTURA DE DATOS ORIENTADO A OBJETOS
Algoritmos con C++. Mexico: PEARSON.
JAVA.
(24
de
Octubre
de
2015).
Obtenido
de
https://www.java.com/es/download/faq/whatis_java.xml
Joyanes Aguilar, L., & Zahonero Martínez, I. (2011). Programación en JAVA 6.
En L. Joyanes Aguilar, & I. Zahonero Martínez, Algoritmos y programación
a objetos (pág. 453). McGRAW-HILL.
Joyanes Aguilar, L., & Zahonero Matinéz, I. (2007). Estructuras de datos en Java.
McGraw-Hill.
20
5. ANEXOS
Anexo 1. Rotaciones

Rotación simple a la izquierda
10
8
9
8
9
Fe = -2
Fe = -1
Fe = 0
Fe = 0
10
Fe = 0
Fe = 0
Figura 7. Rotación simple a la izquierda

Rotación simple a la derecha
Fe = 2
10
Fe = 1
10
11
Fe = 0
11
Fe = 0
Fe = 0
12
12
Figura 8. Rotación simple a la derecha
21
Fe = 0

Rotación doble a la izquierda
10
Fe = 2
11
Fe = 0
1. RSD
12
Fe = -1
10
12
Fe = 0
Fe = 0
2. RSI
11
Fe = 0
Figura 9. Rotación doble a la izquierda

Rotación doble a la derecha
10
11
Fe = -2
Fe = 0
1. RSI
12
Fe = 1
10
12
Fe = 0
Fe = 0
2. RSD
11
Fe = 0
Figura 10. Rotación doble a la derecha
22
Anexo 2. Código Fuente
Clases
package arbolavl;
import interfaz.*;
/** @author user */
public class Despliegue {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
MenuArchivo menuArchivo = new MenuArchivo();
menuArchivo.setLocationRelativeTo(null);
menuArchivo.setDefaultCloseOperation(menuArchivo.EXIT_ON_CLOSE);
menuArchivo.setVisible(true);
}
}
package arbolavl;
/** @author ISRAEL */
public class Departamento {
private String identificador;
private String departOrigen;
private String departDestino;
public Departamento() {
}
public String getIdentificador() {
return identificador;
}
public void setIdentificador(String identificador) {
this.identificador = identificador;
}
public String getDepartOrigen() {
return departOrigen;
}
public void setDepartOrigen(String departOrigen) {
this.departOrigen = departOrigen;
}
public String getDepartDestino() {
return departDestino;
}
public void setDepartDestino(String departDestino) {
this.departDestino = departDestino;
}
}
ackage arbolavl;
import
import
import
import
import
import
import
java.io.BufferedReader;
java.io.BufferedWriter;
java.io.File;
java.io.FileOutputStream;
java.io.FileReader;
java.io.OutputStreamWriter;
java.util.ArrayList;
/**
* @author user
*/
public class ListaArchivo {
23
public int contarRegistro(File archivo) {
int contador = 0;
String tmp;
try {
if (archivo.exists()) {
/*Abre un flujo de lectura a el fichero*/
BufferedReader auxArchivo = new BufferedReader(new FileReader(archivo));
while ((tmp = auxArchivo.readLine()) != null) {
String[] linea = tmp.split(";");
//Agregar cada lina a la clase arbol
contador = Integer.parseInt(linea[0]);
}
auxArchivo.close();
} else {
System.out.println("Fichero No Existe");
}
} catch (Exception e) {
/*Captura un posible error y le imprime en pantalla*/
System.out.println(e.getMessage());
contador = -1;
}
if (contador == 0) {
if (archivo.getName().equals("comercial")) {
contador=10000;
} else if (archivo.getName().equals("explotacion")) {
contador=20000;
} else {
contador=30000;
}
}
return contador;
}
public Archivo buscarRegistro(File archivo, String identificador) {
Archivo arch = new Archivo();
String tmp;
try {
if (archivo.exists()) {
/*Abre un flujo de lectura a el fichero*/
BufferedReader auxArchivo = new BufferedReader(new FileReader(archivo));
while ((tmp = auxArchivo.readLine()) != null) {
String[] linea = tmp.split(";");
//Agregar cada lina a la clase arbol
if (linea[0].equals(identificador)) {
arch.setIdentificador(Integer.parseInt(linea[0]));
arch.setCedula(linea[1]);
arch.setFechaNacimiento(linea[2]);
arch.setDepartamento(Integer.parseInt(linea[3]));
arch.setSexo(Integer.parseInt(linea[4]));
arch.setLugar(linea[5]);
arch.setNombre(linea[6]);
arch.setApellido(linea[7]);
arch.setDireccion(linea[8]);
arch.setCorreo(linea[9]);
arch.setContacto(linea[10]);
return arch;
} else {
}
}
auxArchivo.close();
} else {
System.out.println("Fichero No Existe");
}
} catch (Exception e) {
/*Captura un posible error y le imprime en pantalla*/
System.out.println(e.getMessage());
return null;
}
return arch;
}
public ArrayList<Archivo> leerArchivo(File archivo) {
ArrayList<Archivo> archivos = new ArrayList<>();
String tmp;
try {
24
if (archivo.exists()) {
/*Abre un flujo de lectura a el fichero*/
BufferedReader auxArchivo = new BufferedReader(new FileReader(archivo));
while ((tmp = auxArchivo.readLine()) != null) {
String[] linea = tmp.split(";");
Archivo arch = new Archivo();
//Agregar cada lina a la clase arbol
arch.setIdentificador(Integer.parseInt(linea[0]));
arch.setCedula(linea[1]);
arch.setFechaNacimiento(linea[2]);
arch.setDepartamento(Integer.parseInt(linea[3]));
arch.setSexo(Integer.parseInt(linea[4]));
arch.setLugar(linea[5]);
arch.setNombre(linea[6]);
arch.setApellido(linea[7]);
arch.setDireccion(linea[8]);
arch.setCorreo(linea[9]);
arch.setContacto(linea[10]);
//agregar la clase arbol al ArrayList tipo arbol
archivos.add(arch);
}
auxArchivo.close();
} else {
System.out.println("Fichero No Existe");
}
} catch (Exception e) {
/*Captura un posible error y le imprime en pantalla*/
System.out.println(e.getMessage());
archivos = null;
}
return archivos;
}
public void escribirArchivo(File archivo, String cadena) {
try {
//Si no Existe el archivo lo crea
if (!archivo.exists()) {
archivo.createNewFile();
}
/*Abre un Flujo de escritura,sobre el archivo con codificacion utf-8.
*En la sentencia "FileOutputStream(archivo,true)",
*true es por si existe el archivo seguir añadiendo texto y no borrar lo que
tenia*/
BufferedWriter auxArchivo = new BufferedWriter(new OutputStreamWriter(new
FileOutputStream(archivo, true), "utf-8"));
/*Escribe en el archivo la cadena que recibe la función.
*el string "\r\n" significa salto de linea*/
auxArchivo.write(cadena + "\r\n");
//Cierra el flujo de escritura
auxArchivo.close();
System.out.println("CORRECTO");
} catch (Exception ex) {
//Captura un posible error le imprime en pantalla
System.out.println(ex.getMessage());
}
}
public void modificarRegistro(File archivo, String lineaAntigua, String lineaNueva) {
String auxNomArchivo = archivo.getParent() + "/archivoAuxiliar.txt";
//Crea un objeto File para el archivo nuevo
File arcAuxNuevo = new File(auxNomArchivo);
try {
//Si existe el archivo inical
if (archivo.exists()) {
//Abro un flujo de lectura
BufferedReader auxLectura = new BufferedReader(new FileReader(archivo));
String linea;
//Recorro el archivo de texto linea a linea
while ((linea = auxLectura.readLine()) != null) {
//Si la linea obtenida es igual a la buscada para modificar
if (linea.toString().equals(lineaAntigua.toString())) {
//Escribo la nueva linea en vez de la que tenia
escribirArchivo(arcAuxNuevo, lineaNueva);
} else {
//Escribo la linea antigua
escribirArchivo(arcAuxNuevo, linea);
25
}
}
//Cierro el flujo de lectura
auxLectura.close();
borrarArchivo(archivo);
//renombro el nuevo archivo con el nombre del archivo inicial
arcAuxNuevo.renameTo(archivo);
//Cierro el flujo de lectura
//auxLectura.close();
} else {
System.out.println("Fichero No Existe");
}
} catch (Exception ex) {
//Captura un posible error y le imprime en pantalla
System.out.println(ex.getMessage());
}
}
public void borrarArchivo(File archivo) {
try {
/*Si existe el archivo*/
if (archivo.exists()) {
//Borra el archivo
archivo.delete();
System.out.println("Archivo Borrado con Exito: " + archivo.getName());
}
} catch (Exception ex) {
/*Captura un posible error y le imprime en pantalla*/
System.out.println(ex.getMessage());
}
}
public void eliminarRegistro(File archivo, String lineaAntigua) {
String auxNomArchivo = archivo.getParent() + "/archivoAuxiliar.txt";
//Crea un objeto File para el archivo nuevo
File arcAuxNuevo = new File(auxNomArchivo);
try {
//Si existe el archivo inical
if (archivo.exists()) {
//Abro un flujo de lectura
BufferedReader auxLectura = new BufferedReader(new FileReader(archivo));
String linea;
//Recorro el archivo de texto linea a linea
System.out.print(lineaAntigua);
while ((linea = auxLectura.readLine()) != null) {
//Si la linea obtenida es igual a la buscada para modificar
if (linea.toString().equals(lineaAntigua.toString())) {
}else{
//Escribo la nueva linea en vez de la que tenia
escribirArchivo(arcAuxNuevo, linea);
}
}
//Cierro el flujo de lectura
auxLectura.close();
borrarArchivo(archivo);
//renombro el nuevo archivo con el nombre del archivo inicial
arcAuxNuevo.renameTo(archivo);
} else {
System.out.println("Fichero No Existe");
}
} catch (Exception ex) {
//Captura un posible error y le imprime en pantalla
System.out.println(ex.getMessage());
}
}
}
package arbolavl;
import
import
import
import
java.io.BufferedReader;
java.io.BufferedWriter;
java.io.File;
java.io.FileOutputStream;
26
import java.io.FileReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
/**
* @author user
*/
public class ListaDepartamento {
public ArrayList<Departamento> leerArchivo(File archivo) {
ArrayList<Departamento> archivos = new ArrayList<>();
String tmp;
try {
if (archivo.exists()) {
/*Abre un flujo de lectura a el fichero*/
BufferedReader auxArchivo = new BufferedReader(new FileReader(archivo));
while ((tmp = auxArchivo.readLine()) != null) {
String[] linea = tmp.split(";");
Departamento arch = new Departamento();
//Agregar cada lina a la clase arbol
arch.setIdentificador(linea[0]);
arch.setDepartOrigen(linea[1]);
arch.setDepartDestino(linea[2]);
//agregar la clase arbol al ArrayList tipo arbol
archivos.add(arch);
}
auxArchivo.close();
} else {
System.out.println("Fichero No Existe");
}
} catch (Exception e) {
/*Captura un posible error y le imprime en pantalla*/
System.out.println(e.getMessage());
archivos = null;
}
return archivos;
}
public void escribirArchivo(File archivo, String cadena) {
try {
//Si no Existe el archivo lo crea
if (!archivo.exists()) {
archivo.createNewFile();
}
/*Abre un Flujo de escritura,sobre el archivo con codificacion utf-8.
*En la sentencia "FileOutputStream(archivo,true)",
*true es por si existe el archivo seguir añadiendo texto y no borrar lo que
tenia*/
BufferedWriter auxArchivo = new BufferedWriter(new OutputStreamWriter(new
FileOutputStream(archivo, true), "utf-8"));
/*Escribe en el archivo la cadena que recibe la función.
*el string "\r\n" significa salto de linea*/
auxArchivo.write(cadena + "\r\n");
//Cierra el flujo de escritura
auxArchivo.close();
System.out.println("CORRECTO");
} catch (Exception ex) {
//Captura un posible error le imprime en pantalla
System.out.println(ex.getMessage());
}
}
public void borrarArchivo(File archivo) {
try {
/*Si existe el archivo*/
if (archivo.exists()) {
//Borra el archivo
archivo.delete();
System.out.println("Archivo Borrado con Exito" + archivo.getName());
}
} catch (Exception ex) {
/*Captura un posible error y le imprime en pantalla*/
System.out.println(ex.getMessage());
}
}
public void eliminarRegistro(File archivo, String lineaAntigua) {
27
String auxNomArchivo = archivo.getParent() + "/laboralAuxiliar.txt";
//Crea un objeto File para el archivo nuevo
File arcAuxNuevo = new File(auxNomArchivo);
try {
//Si existe el archivo inical
if (archivo.exists()) {
//Abro un flujo de lectura
BufferedReader auxLectura = new BufferedReader(new FileReader(archivo));
String linea;
//Recorro el archivo de texto linea a linea
while ((linea = auxLectura.readLine()) != null) {
//Si la linea obtenida es igual a la buscada para modificar
if (!linea.toString().equals(lineaAntigua.toString())) {
//Escribo la nueva linea en vez de la que tenia
escribirArchivo(arcAuxNuevo, linea);
}
}
//Cierro el flujo de lectura
auxLectura.close();
borrarArchivo(archivo);
//renombro el nuevo archivo con el nombre del archivo inicial
arcAuxNuevo.renameTo(archivo);
//Cierro el flujo de lectura
//auxLectura.close();
} else {
System.out.println("Fichero No Existe");
}
} catch (Exception ex) {
//Captura un posible error y le imprime en pantalla
System.out.println(ex.getMessage());
}
}
}
Interfaces
package interfaz;
import
import
import
import
arbolavl.*;
java.io.File;
java.util.ArrayList;
javax.swing.table.DefaultTableModel;
/** @author ISRAEL */
public class MenuArbol extends javax.swing.JDialog {
File archivoLaboral = new File("D:\\laboral.txt");
File archivoComercial = new File("D:\\comercial.txt");
File archivoExplotacion = new File("D:\\explotacion.txt");
File archivoMarketing = new File("D:\\marketing.txt");
ListaNodoAVL listaNodoComercial = new ListaNodoAVL();
ListaNodoAVL listaNodoExplotacion = new ListaNodoAVL();
ListaNodoAVL listaNodoMarketing = new ListaNodoAVL();
public void dibujarTabla(String[] arreglo) {
DefaultTableModel modelo = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
};
Object[] fila = new Object[4];
String[] columnas = {"Identificador", "Departamento",
Apellidos"};
modelo.setColumnIdentifiers(columnas);
try{
for (int j = 0; j < arreglo.length; j++) {
String[] auxArreglo = new String[4];
auxArreglo = arreglo[j].split(";");
fila[0] = auxArreglo[0];
fila[1] = auxArreglo[1];
28
"Cedula",
"Nombres
y
fila[2] = auxArreglo[2];
fila[3] = auxArreglo[3];
modelo.addRow(fila);
}
tb_arbol.setModel(modelo);
}catch(Exception e){
tb_arbol.setModel(modelo);
}
}
public MenuArbol(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
//arbolAVL.inOrden(arbol1);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
tb_arbol = new javax.swing.JTable();
btn_visualizar = new javax.swing.JButton();
cmb_arbol = new javax.swing.JComboBox();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
cmb_modo = new javax.swing.JComboBox();
btn_reestructurar = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Gestión de Reestructuración");
tb_arbol.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Identificador", "Departamento", "Cedula", "Nombres y Apellidos"
}
));
jScrollPane1.setViewportView(tb_arbol);
if (tb_arbol.getColumnModel().getColumnCount() > 0) {
tb_arbol.getColumnModel().getColumn(0).setPreferredWidth(5);
tb_arbol.getColumnModel().getColumn(1).setPreferredWidth(5);
tb_arbol.getColumnModel().getColumn(2).setPreferredWidth(10);
tb_arbol.getColumnModel().getColumn(3).setPreferredWidth(200);
}
btn_visualizar.setText("Visualizar");
btn_visualizar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_visualizarActionPerformed(evt);
}
});
cmb_arbol.setModel(new
javax.swing.DefaultComboBoxModel(new
"Comercial", "Explotación", "Marketing" }));
String[]
{
jLabel1.setText("Árbol");
jLabel2.setText("Modo de Visualizar");
cmb_modo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "InOrden",
"PreOrden", "PostOrden" }));
btn_reestructurar.setText("Reestructurar");
btn_reestructurar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_reestructurarActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
29
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addComponent(cmb_arbol,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(54, 54, 54)
.addComponent(jLabel2)
.addGap(29, 29, 29)
.addComponent(cmb_modo,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(239, 239, 239)
.addComponent(btn_reestructurar,
javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
Short.MAX_VALUE)
.addComponent(btn_visualizar)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addContainerGap()
173,
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btn_visualizar)
.addComponent(cmb_arbol,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1)
.addComponent(jLabel2)
.addComponent(cmb_modo,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(btn_reestructurar,
javax.swing.GroupLayout.DEFAULT_SIZE,
50, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 148,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
pack();
}// </editor-fold>
private void btn_visualizarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
switch (cmb_arbol.getSelectedIndex()) {
case 0: {
ListaArchivo listaArchivo = new ListaArchivo();
ArrayList<Archivo> archivoC = new ArrayList<>();
archivoC = listaArchivo.leerArchivo(archivoComercial);
for (int i = 0; i < archivoC.size(); i++) {
NodoAVL nodoComercial = new NodoAVL(archivoC.get(i));
listaNodoComercial.insertar(nodoComercial);
}
if (cmb_modo.getSelectedIndex() == 0) {
String[]
arreglo
listaNodoComercial.inOrden(listaNodoComercial.getRaiz(), "").split("\\r?\\n");
dibujarTabla(arreglo);
30
=
} else if (cmb_modo.getSelectedIndex() == 1) {
String[]
arreglo
listaNodoComercial.preOrden(listaNodoComercial.getRaiz(), "").split("\\r?\\n");
dibujarTabla(arreglo);
} else {
String[]
arreglo
listaNodoComercial.postOrden(listaNodoComercial.getRaiz(), "").split("\\r?\\n");
dibujarTabla(arreglo);
}
listaNodoComercial.setRaiz(null);
break;
}
case 1: {
=
=
ListaArchivo listaArchivo = new ListaArchivo();
ArrayList<Archivo> archivoC = new ArrayList<>();
archivoC = listaArchivo.leerArchivo(archivoExplotacion);
for (int i = 0; i < archivoC.size(); i++) {
NodoAVL nodoComercial = new NodoAVL(archivoC.get(i));
listaNodoExplotacion.insertar(nodoComercial);
}
if (cmb_modo.getSelectedIndex() == 0) {
String[]
arreglo
listaNodoComercial.inOrden(listaNodoExplotacion.getRaiz(), "").split("\\r?\\n");
dibujarTabla(arreglo);
} else if (cmb_modo.getSelectedIndex() == 1) {
String[]
arreglo
listaNodoComercial.preOrden(listaNodoExplotacion.getRaiz(), "").split("\\r?\\n");
dibujarTabla(arreglo);
} else {
String[]
arreglo
listaNodoComercial.postOrden(listaNodoExplotacion.getRaiz(), "").split("\\r?\\n");
dibujarTabla(arreglo);
}
listaNodoExplotacion.setRaiz(null);
break;
}
case 2: {
ListaArchivo listaArchivo = new ListaArchivo();
ArrayList<Archivo> archivoC = new ArrayList<>();
archivoC = listaArchivo.leerArchivo(archivoMarketing);
for (int i = 0; i < archivoC.size(); i++) {
NodoAVL nodoComercial = new NodoAVL(archivoC.get(i));
listaNodoMarketing.insertar(nodoComercial);
}
if (cmb_modo.getSelectedIndex() == 0) {
String[]
arreglo
listaNodoComercial.inOrden(listaNodoMarketing.getRaiz(), "").split("\\r?\\n");
dibujarTabla(arreglo);
} else if (cmb_modo.getSelectedIndex() == 1) {
String[]
arreglo
listaNodoComercial.preOrden(listaNodoMarketing.getRaiz(), "").split("\\r?\\n");
dibujarTabla(arreglo);
} else {
String[]
arreglo
listaNodoComercial.postOrden(listaNodoMarketing.getRaiz(), "").split("\\r?\\n");
dibujarTabla(arreglo);
}
listaNodoMarketing.setRaiz(null);
break;
}
}
}
private void btn_reestructurarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
ListaDepartamento listaDepartamento = new ListaDepartamento();
int auxcontador = 0;
Archivo archivo = new Archivo();
String cadenaNueva, cadenaAntigua;
31
=
=
=
=
=
=
ArrayList<Departamento> auxDepartamento = new ArrayList<>();
auxDepartamento = listaDepartamento.leerArchivo(archivoLaboral);
for (int i = 0; i < auxDepartamento.size(); i++) {
if (Integer.parseInt(auxDepartamento.get(i).getDepartOrigen()) == 1) {
ListaArchivo listaArchivo = new ListaArchivo();
archivo
=
listaArchivo.buscarRegistro(archivoComercial,auxDepartamento.get(i).getIdentificador());
switch (Integer.parseInt(auxDepartamento.get(i).getDepartDestino())) {
case 2: {
auxcontador = listaArchivo.contarRegistro(archivoExplotacion);
cadenaNueva = (auxcontador + 1) + ";" + archivo.getCedula() + ";"
+ archivo.getFechaNacimiento() + ";" + 2 + ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
cadenaAntigua
=
archivo.getIdentificador()
+
";"
+
archivo.getCedula()
+
";"
+
archivo.getFechaNacimiento()
+
";"
+
archivo.getDepartamento()+ ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
ListaArchivo lista= new ListaArchivo();
lista.eliminarRegistro(archivoComercial, cadenaAntigua);
listaArchivo.escribirArchivo(archivoExplotacion, cadenaNueva);
break;
}
case 3: {
auxcontador = listaArchivo.contarRegistro(archivoMarketing);
cadenaNueva = (auxcontador + 1) + ";" + archivo.getCedula() + ";"
+ archivo.getFechaNacimiento() + ";" + 3 + ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
cadenaAntigua
=
archivo.getIdentificador()
+
";"
+
archivo.getCedula() + ";" + archivo.getFechaNacimiento() + ";" + archivo.getDepartamento()
+ ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
ListaArchivo lista= new ListaArchivo();
lista.eliminarRegistro(archivoComercial, cadenaAntigua);
listaArchivo.escribirArchivo(archivoMarketing, cadenaNueva);
break;
}
}
} else if (Integer.parseInt(auxDepartamento.get(i).getDepartOrigen()) == 2) {
ListaArchivo listaArchivo = new ListaArchivo();
archivo
=
listaArchivo.buscarRegistro(archivoExplotacion,
auxDepartamento.get(i).getIdentificador());
switch (Integer.parseInt(auxDepartamento.get(i).getDepartDestino())) {
case 1: {
auxcontador = listaArchivo.contarRegistro(archivoComercial);
cadenaNueva = (auxcontador + 1) + ";" + archivo.getCedula() + ";"
+ archivo.getFechaNacimiento() + ";" + 1 + ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
32
cadenaAntigua
=
archivo.getIdentificador()
+
";"
+
archivo.getCedula() + ";" + archivo.getFechaNacimiento() + ";" + archivo.getDepartamento()
+ ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
ListaArchivo lista= new ListaArchivo();
lista.eliminarRegistro(archivoExplotacion, cadenaAntigua);
listaArchivo.escribirArchivo(archivoComercial, cadenaNueva);
break;
}
case 3: {
auxcontador = listaArchivo.contarRegistro(archivoMarketing);
cadenaNueva = (auxcontador + 1) + ";" + archivo.getCedula() + ";"
+ archivo.getFechaNacimiento() + ";" + 3 + ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
cadenaAntigua
=
archivo.getIdentificador()
+
";"
+
archivo.getCedula() + ";" + archivo.getFechaNacimiento() + ";" + archivo.getDepartamento()
+ ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
ListaArchivo lista= new ListaArchivo();
lista.eliminarRegistro(archivoExplotacion, cadenaAntigua);
listaArchivo.escribirArchivo(archivoMarketing, cadenaNueva);
break;
}
}
} else {
ListaArchivo listaArchivo = new ListaArchivo();
archivo
=
listaArchivo.buscarRegistro(archivoMarketing,
auxDepartamento.get(i).getIdentificador());
switch (Integer.parseInt(auxDepartamento.get(i).getDepartDestino())) {
case 1: {
auxcontador = listaArchivo.contarRegistro(archivoComercial);
cadenaNueva = (auxcontador + 1) + ";" + archivo.getCedula() + ";"
+ archivo.getFechaNacimiento() + ";" + 1 + ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
cadenaAntigua
=
archivo.getIdentificador()
+
";"
+
archivo.getCedula() + ";" + archivo.getFechaNacimiento() + ";" + archivo.getDepartamento()
+ ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
ListaArchivo lista= new ListaArchivo();
lista.eliminarRegistro(archivoMarketing, cadenaAntigua);
listaArchivo.escribirArchivo(archivoComercial, cadenaNueva);
break;
}
case 2: {
auxcontador = listaArchivo.contarRegistro(archivoExplotacion);
cadenaNueva = (auxcontador + 1) + ";" + archivo.getCedula() + ";"
+ archivo.getFechaNacimiento() + ";" + 2 + ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
33
cadenaAntigua
=
archivo.getIdentificador()
+
";"
+
archivo.getCedula() + ";" + archivo.getFechaNacimiento() + ";" + archivo.getDepartamento()
+ ";"
+ archivo.getSexo() + ";" + archivo.getLugar() + ";" +
archivo.getNombre() + ";" + archivo.getApellido() + ";"
+ archivo.getDireccion() + ";" + archivo.getCorreo() + ";"
+ archivo.getContacto();
ListaArchivo lista= new ListaArchivo();
lista.eliminarRegistro(archivoMarketing, cadenaAntigua);
listaArchivo.escribirArchivo(archivoExplotacion, cadenaNueva);
break;
}
}
}
}
listaDepartamento.borrarArchivo(archivoLaboral);
}
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code
(optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default
look and feel.
*
For
details
see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for
(javax.swing.UIManager.LookAndFeelInfo
info
:
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(MenuArbol.class.getName()).log(java.util.logging.Leve
l.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(MenuArbol.class.getName()).log(java.util.logging.Leve
l.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(MenuArbol.class.getName()).log(java.util.logging.Leve
l.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(MenuArbol.class.getName()).log(java.util.logging.Leve
l.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the dialog */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
MenuArbol dialog = new MenuArbol(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton btn_reestructurar;
private javax.swing.JButton btn_visualizar;
private javax.swing.JComboBox cmb_arbol;
private javax.swing.JComboBox cmb_modo;
34
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable tb_arbol;
// End of variables declaration
}
package interfaz;
import
import
import
import
import
import
arbolavl.*;
java.awt.Point;
java.io.File;
java.util.ArrayList;
javax.swing.JOptionPane;
javax.swing.table.*;
/**
* @author user
*/
public class MenuArchivo extends javax.swing.JFrame {
/**
* Creates new form MenuArchivo
*/
/*Creo un objeto File. Recibe como parámetro la ruta con el nombre del archivo */
File archivoLaboral = new File("D:\\laboral.txt");
File archivoComercial = new File("D:\\comercial.txt");
File archivoExplotacion = new File("D:\\explotacion.txt");
File archivoMarketing = new File("D:\\marketing.txt");
int editar = 0;
static String cadenaAntigua = null;
int auxDepart = -1;
public void dibujarTabla(ArrayList<Archivo> arreglo) {
DefaultTableModel modelo = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
};
Object[] fila = new Object[5];
String[] columnas = {"Identificador",
Apellidos", "Contacto"};
modelo.setColumnIdentifiers(columnas);
"Cedula",
"Departamento",
"Nombres
for (int i = 0; i < arreglo.size(); i++) {
fila[0] = arreglo.get(i).getIdentificador();
fila[1] = arreglo.get(i).getCedula();
//COMPROBAR DEPARTAMENTO
if (arreglo.get(i).getDepartamento() == 1) {
fila[2] = "Comercial";
} else {
if (arreglo.get(i).getDepartamento() == 2) {
fila[2] = "Explotación";
} else {
fila[2] = "Marketing";
}
}
fila[3] = arreglo.get(i).getNombre() + " " + arreglo.get(i).getApellido();
fila[4] = arreglo.get(i).getContacto();
modelo.addRow(fila);
}
tb_tablaArchivo.setModel(modelo);
}
public void limpiar() {
editar = 0;
cadenaAntigua = null;
txt_identificador.setText(null);
txt_cedula.setText(null);
txt_fecha.setText(null);
35
y
cmb_departamento.setSelectedIndex(0);
cmb_sexo.setSelectedIndex(0);
txt_lugar.setText(null);
txt_nombre.setText(null);
txt_apellido.setText(null);
txt_direccion.setText(null);
txt_correo.setText(null);
txt_contacto.setText(null);
cmb_departamento.setEnabled(true);
}
public MenuArchivo() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
txt_direccion = new javax.swing.JTextArea();
btn_departamento = new javax.swing.JButton();
bt_editar = new javax.swing.JButton();
txt_lugar = new javax.swing.JTextField();
jLabel8 = new javax.swing.JLabel();
cmb_departamento = new javax.swing.JComboBox();
txt_correo = new javax.swing.JTextField();
jLabel11 = new javax.swing.JLabel();
txt_fecha = new javax.swing.JTextField();
jLabel10 = new javax.swing.JLabel();
txt_contacto = new javax.swing.JTextField();
jLabel9 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
cmb_sexo = new javax.swing.JComboBox();
jLabel6 = new javax.swing.JLabel();
txt_cedula = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
txt_apellido = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
btn_crearArbol = new javax.swing.JButton();
btn_eliminar = new javax.swing.JButton();
btn_cancelar = new javax.swing.JButton();
btn_guardar = new javax.swing.JButton();
txt_nombre = new javax.swing.JTextField();
txt_identificador = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
btn_nuevo = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
tb_tablaArchivo = new javax.swing.JTable();
btn_leerArchivo = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Gestión de Empleados");
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jPanel1.setLayout(null);
txt_direccion.setColumns(20);
txt_direccion.setRows(5);
txt_direccion.setEnabled(false);
jScrollPane2.setViewportView(txt_direccion);
jPanel1.add(jScrollPane2);
jScrollPane2.setBounds(170, 230, 514, 56);
btn_departamento.setText("Departamento");
btn_departamento.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_departamentoActionPerformed(evt);
}
});
jPanel1.add(btn_departamento);
btn_departamento.setBounds(491, 11, 120, 30);
36
bt_editar.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/iconos/iconos/document_edit.png")));
NOI18N
bt_editar.setEnabled(false);
bt_editar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bt_editarActionPerformed(evt);
}
});
jPanel1.add(bt_editar);
bt_editar.setBounds(189, 11, 59, 33);
//
txt_lugar.setEnabled(false);
jPanel1.add(txt_lugar);
txt_lugar.setBounds(520, 150, 100, 20);
jLabel8.setText("Lugar de Residencia:");
jPanel1.add(jLabel8);
jLabel8.setBounds(390, 150, 120, 14);
cmb_departamento.setModel(new javax.swing.DefaultComboBoxModel(new
"Comercial", "Explotación", "Marketing" }));
jPanel1.add(cmb_departamento);
cmb_departamento.setBounds(520, 110, 100, 22);
String[]
{
txt_correo.setEnabled(false);
jPanel1.add(txt_correo);
txt_correo.setBounds(170, 310, 193, 20);
jLabel11.setText("Correo Electronico:");
jPanel1.add(jLabel11);
jLabel11.setBounds(50, 310, 110, 14);
txt_fecha.setEnabled(false);
jPanel1.add(txt_fecha);
txt_fecha.setBounds(170, 110, 100, 20);
jLabel10.setText("Fecha de Nacimiento:");
jPanel1.add(jLabel10);
jLabel10.setBounds(30, 110, 130, 14);
txt_contacto.setEnabled(false);
jPanel1.add(txt_contacto);
txt_contacto.setBounds(520, 310, 210, 20);
jLabel9.setText("Contacto:");
jPanel1.add(jLabel9);
jLabel9.setBounds(460, 310, 60, 14);
jLabel7.setText("Dirección:");
jPanel1.add(jLabel7);
jLabel7.setBounds(100, 250, 70, 14);
cmb_sexo.setModel(new
javax.swing.DefaultComboBoxModel(new
"Masculino", "Femenino" }));
cmb_sexo.setEnabled(false);
jPanel1.add(cmb_sexo);
cmb_sexo.setBounds(170, 150, 100, 22);
jLabel6.setText("Sexo:");
jPanel1.add(jLabel6);
jLabel6.setBounds(120, 150, 50, 14);
txt_cedula.setEnabled(false);
jPanel1.add(txt_cedula);
txt_cedula.setBounds(520, 65, 100, 20);
jLabel3.setText("Cedula:");
jPanel1.add(jLabel3);
jLabel3.setBounds(460, 70, 60, 14);
txt_apellido.setEnabled(false);
jPanel1.add(txt_apellido);
txt_apellido.setBounds(520, 180, 210, 20);
jLabel2.setText("Apellidos:");
jPanel1.add(jLabel2);
37
String[]
{
jLabel2.setBounds(450, 180, 60, 14);
jLabel5.setText("Departamento:");
jPanel1.add(jLabel5);
jLabel5.setBounds(420, 110, 90, 14);
btn_crearArbol.setText("AVL");
btn_crearArbol.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_crearArbolActionPerformed(evt);
}
});
jPanel1.add(btn_crearArbol);
btn_crearArbol.setBounds(640, 10, 60, 30);
btn_eliminar.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/iconos/iconos/delete.png"))); // NOI18N
btn_eliminar.setEnabled(false);
btn_eliminar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_eliminarActionPerformed(evt);
}
});
jPanel1.add(btn_eliminar);
btn_eliminar.setBounds(414, 11, 59, 33);
btn_cancelar.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/iconos/iconos/cancel.png"))); // NOI18N
btn_cancelar.setEnabled(false);
btn_cancelar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_cancelarActionPerformed(evt);
}
});
jPanel1.add(btn_cancelar);
btn_cancelar.setBounds(339, 11, 59, 33);
btn_guardar.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/iconos/iconos/save.png"))); // NOI18N
btn_guardar.setEnabled(false);
btn_guardar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_guardarActionPerformed(evt);
}
});
jPanel1.add(btn_guardar);
btn_guardar.setBounds(264, 11, 59, 33);
txt_nombre.setEnabled(false);
jPanel1.add(txt_nombre);
txt_nombre.setBounds(170, 190, 210, 20);
txt_identificador.setEnabled(false);
jPanel1.add(txt_identificador);
txt_identificador.setBounds(170, 70, 100, 20);
txt_identificador.getAccessibleContext().setAccessibleName("");
jLabel4.setText("Nombres:");
jPanel1.add(jLabel4);
jLabel4.setBounds(100, 190, 60, 14);
jLabel1.setText("Identificador:");
jPanel1.add(jLabel1);
jLabel1.setBounds(80, 70, 80, 14);
btn_nuevo.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/iconos/iconos/add.png"))); // NOI18N
btn_nuevo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_nuevoActionPerformed(evt);
}
});
jPanel1.add(btn_nuevo);
btn_nuevo.setBounds(114, 11, 59, 33);
tb_tablaArchivo.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
38
{"", null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null}
},
new String [] {
"Identificador",
"Cedula",
"Departamento",
"Nombres
y
Apellidos",
"Contacto"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.Object.class,
java.lang.String.class, java.lang.String.class
};
java.lang.String.class,
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
tb_tablaArchivo.setToolTipText("");
tb_tablaArchivo.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
tb_tablaArchivoMousePressed(evt);
}
});
jScrollPane1.setViewportView(tb_tablaArchivo);
tb_tablaArchivo.getAccessibleContext().setAccessibleName("tb_tablaArchivo");
jPanel1.add(jScrollPane1);
jScrollPane1.setBounds(0, 350, 874, 180);
btn_leerArchivo.setText("Cargar Registros");
btn_leerArchivo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_leerArchivoActionPerformed(evt);
}
});
jPanel1.add(btn_leerArchivo);
btn_leerArchivo.setBounds(640, 110, 140, 23);
btn_leerArchivo.getAccessibleContext().setAccessibleName("btn_leerArchivo");
getContentPane().add(jPanel1,
org.netbeans.lib.awtextra.AbsoluteConstraints(10, 11, 880, 536));
new
pack();
}// </editor-fold>
//
private void btn_leerArchivoActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
ListaArchivo listaArchivo = new ListaArchivo();
System.out.println(listaArchivo.leerArchivo().get().getNombre());
try {
switch (cmb_departamento.getSelectedIndex()) {
case 0: {
dibujarTabla(listaArchivo.leerArchivo(archivoComercial));
break;
}
case 1: {
dibujarTabla(listaArchivo.leerArchivo(archivoExplotacion));
break;
}
case 2: {
dibujarTabla(listaArchivo.leerArchivo(archivoMarketing));
break;
}
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Se Produjo al cargar el archivo...");
}
}
private void btn_nuevoActionPerformed(java.awt.event.ActionEvent evt) {
limpiar();
activarCajas(true);
txt_identificador.setEnabled(true);
activarBotones(true);
39
bt_editar.setEnabled(false);
btn_guardar.setEnabled(true);
btn_eliminar.setEnabled(false);
btn_cancelar.setEnabled(true);
}
private void btn_guardarActionPerformed(java.awt.event.ActionEvent evt) {
String cadenaNueva = null;
ListaArchivo listaArchivo = new ListaArchivo();
if (txt_identificador.getText().length() != 0) {
if (editar == 0) {
cadenaNueva = txt_identificador.getText() + ";" + txt_cedula.getText() +
";" + txt_fecha.getText() + ";"
+
(cmb_departamento.getSelectedIndex()
+
1)
+
";"
+
(cmb_sexo.getSelectedIndex() + 1) + ";" + txt_lugar.getText() + ";"
+ txt_nombre.getText() + ";" + txt_apellido.getText() + ";" +
txt_direccion.getText() + ";" + txt_correo.getText() + ";"
+ txt_contacto.getText();
switch (cmb_departamento.getSelectedIndex()) {
case 0: {
listaArchivo.escribirArchivo(archivoComercial, cadenaNueva);
break;
}
case 1: {
listaArchivo.escribirArchivo(archivoExplotacion, cadenaNueva);
break;
}
case 2: {
listaArchivo.escribirArchivo(archivoMarketing, cadenaNueva);
break;
}
}
} else {
if (auxDepart == (cmb_departamento.getSelectedIndex() + 1)) {
cadenaNueva = txt_identificador.getText() + ";" + txt_cedula.getText()
+ ";" + txt_fecha.getText() + ";"
+
(cmb_departamento.getSelectedIndex()
+
1)
+
";"
+
(cmb_sexo.getSelectedIndex() + 1) + ";" + txt_lugar.getText() + ";"
+ txt_nombre.getText() + ";" + txt_apellido.getText() + ";" +
txt_direccion.getText() + ";" + txt_correo.getText() + ";"
+ txt_contacto.getText();
} else {
cadenaNueva = txt_identificador.getText() + ";" + txt_cedula.getText()
+ ";" + txt_fecha.getText() + ";"
+ auxDepart + ";" + (cmb_sexo.getSelectedIndex() + 1) + ";" +
txt_lugar.getText() + ";"
+ txt_nombre.getText() + ";" + txt_apellido.getText() + ";" +
txt_direccion.getText() + ";" + txt_correo.getText() + ";"
+ txt_contacto.getText();
String cadena = txt_identificador.getText() + ";" + auxDepart + ";" +
((cmb_departamento.getSelectedIndex() + 1));
listaArchivo.escribirArchivo(archivoLaboral, cadena);
}
switch (auxDepart - 1) {
case 0: {
listaArchivo.modificarRegistro(archivoComercial,
cadenaAntigua,
cadenaNueva);
break;
}
case 1: {
listaArchivo.modificarRegistro(archivoExplotacion,
cadenaAntigua, cadenaNueva);
break;
}
case 2: {
listaArchivo.modificarRegistro(archivoMarketing,
cadenaAntigua,
cadenaNueva);
break;
}
}
}
limpiar();
activarCajas(false);
40
txt_identificador.setEnabled(false);
activarBotones(false);
btn_guardar.setEnabled(false);
cadenaAntigua=null;
} else {
JOptionPane.showMessageDialog(null, "Verificar los datos");
}
editar = 0;
auxDepart = -1;
limpiar();
}
private void btn_cancelarActionPerformed(java.awt.event.ActionEvent evt) {
limpiar();
activarBotones(false);
txt_identificador.setEnabled(false);
btn_guardar.setEnabled(false);
activarCajas(false);
cadenaAntigua=null;
}
private void tb_tablaArchivoMousePressed(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
editar = 1;
auxDepart = cmb_departamento.getSelectedIndex() + 1;
Point puntoFC;
int indiceFila = 0;
try {
if (evt.getClickCount() == 2) {
puntoFC = evt.getPoint();
indiceFila = tb_tablaArchivo.rowAtPoint(puntoFC);
ListaArchivo listaArchivo = new ListaArchivo();
ArrayList<Archivo> arreglo;
if (tb_tablaArchivo.getValueAt(indiceFila, 2).equals("Comercial")) {
arreglo = listaArchivo.leerArchivo(archivoComercial);
}
else
if
(tb_tablaArchivo.getValueAt(indiceFila,
2).equals("Explotación")) {
arreglo = listaArchivo.leerArchivo(archivoExplotacion);
} else {
arreglo = listaArchivo.leerArchivo(archivoMarketing);
}
for (int i = 0; i < arreglo.size(); i++) {
if
(arreglo.get(i).getIdentificador()
Integer.parseInt(tb_tablaArchivo.getValueAt(indiceFila, 0).toString())) {
txt_identificador.setText(arreglo.get(i).getIdentificador()
"");
txt_cedula.setText(arreglo.get(i).getCedula());
txt_fecha.setText(arreglo.get(i).getFechaNacimiento());
==
+
cmb_departamento.setSelectedIndex(arreglo.get(i).getDepartamento() - 1);
cmb_sexo.setSelectedIndex(arreglo.get(i).getSexo() - 1);
txt_lugar.setText(arreglo.get(i).getLugar());
txt_nombre.setText(arreglo.get(i).getNombre());
txt_apellido.setText(arreglo.get(i).getApellido());
txt_direccion.setText(arreglo.get(i).getDireccion());
txt_correo.setText(arreglo.get(i).getCorreo());
txt_contacto.setText(arreglo.get(i).getContacto());
auxDepart = cmb_departamento.getSelectedIndex() + 1;
cadenaAntigua
=
txt_identificador.getText()
+
";"
+
txt_cedula.getText() + ";" + txt_fecha.getText() + ";"
+ (cmb_departamento.getSelectedIndex() + 1) + ";" +
(cmb_sexo.getSelectedIndex() + 1) + ";" + txt_lugar.getText() + ";"
+ txt_nombre.getText() + ";" + txt_apellido.getText() +
";" + txt_direccion.getText() + ";" + txt_correo.getText() + ";"
+ txt_contacto.getText();
break;
}
}
41
activarBotones(true);
} else {
}
} catch (Exception e) {
System.out.print("NO SE HA CARGADO EL ARCHIVO");
}
}
private void activarCajas(boolean x) {
txt_cedula.setEnabled(x);
txt_apellido.setEnabled(x);
txt_contacto.setEnabled(x);
txt_correo.setEnabled(x);
txt_direccion.setEnabled(x);
txt_fecha.setEnabled(x);
txt_lugar.setEnabled(x);
txt_nombre.setEnabled(x);
cmb_sexo.setEnabled(x);
}
private void activarBotones(boolean x) {
btn_nuevo.setEnabled(!x);
bt_editar.setEnabled(x);
btn_cancelar.setEnabled(x);
btn_guardar.setEnabled(!x);
btn_eliminar.setEnabled(x);
btn_departamento.setEnabled(!x);
btn_leerArchivo.setEnabled(!x);
btn_crearArbol.setEnabled(!x);
}
private void btn_eliminarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if (editar == 1) {
ListaArchivo listaArchivo = new ListaArchivo();
String cadena = txt_identificador.getText() + ";" + txt_cedula.getText() + ";"
+ txt_fecha.getText() + ";"
+
(cmb_departamento.getSelectedIndex()
+
1)
+
";"
+
(cmb_sexo.getSelectedIndex() + 1) + ";" + txt_lugar.getText() + ";"
+ txt_nombre.getText() + ";" + txt_apellido.getText() + ";" +
txt_direccion.getText() + ";" + txt_correo.getText() + ";"
+ txt_contacto.getText();
switch (cmb_departamento.getSelectedIndex()) {
case 0: {
listaArchivo.eliminarRegistro(archivoComercial, cadena);
break;
}
case 1: {
listaArchivo.eliminarRegistro(archivoExplotacion, cadena);
break;
}
case 2: {
listaArchivo.eliminarRegistro(archivoMarketing, cadena);
break;
}
}
}
limpiar();
activarBotones(false);
btn_guardar.setEnabled(false);
}
private void btn_crearArbolActionPerformed(java.awt.event.ActionEvent evt) {
MenuArbol menuArbol = new MenuArbol(new MenuArchivo(), true);
menuArbol.setLocationRelativeTo(null);
menuArbol.setVisible(true);
}
private void bt_editarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
editar = 1;
auxDepart = cmb_departamento.getSelectedIndex() + 1;
42
activarCajas(true);
btn_guardar.setEnabled(true);
btn_eliminar.setEnabled(false);
bt_editar.setEnabled(false);
}
private void btn_departamentoActionPerformed(java.awt.event.ActionEvent evt) {
MenuDepartamento menuDepartamento = new MenuDepartamento(new MenuArchivo(), true);
menuDepartamento.setLocationRelativeTo(null);
menuDepartamento.setVisible(true);
// TODO add your handling code here:
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code
(optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default
look and feel.
*
For
details
see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for
(javax.swing.UIManager.LookAndFeelInfo
info
:
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(MenuArchivo.class.getName()).log(java.util.logging.Le
vel.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(MenuArchivo.class.getName()).log(java.util.logging.Le
vel.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(MenuArchivo.class.getName()).log(java.util.logging.Le
vel.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(MenuArchivo.class.getName()).log(java.util.logging.Le
vel.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MenuArchivo().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton bt_editar;
private javax.swing.JButton btn_cancelar;
private javax.swing.JButton btn_crearArbol;
private javax.swing.JButton btn_departamento;
private javax.swing.JButton btn_eliminar;
private javax.swing.JButton btn_guardar;
private javax.swing.JButton btn_leerArchivo;
private javax.swing.JButton btn_nuevo;
private javax.swing.JComboBox cmb_departamento;
private javax.swing.JComboBox cmb_sexo;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
43
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable tb_tablaArchivo;
private javax.swing.JTextField txt_apellido;
private javax.swing.JTextField txt_cedula;
private javax.swing.JTextField txt_contacto;
private javax.swing.JTextField txt_correo;
private javax.swing.JTextArea txt_direccion;
private javax.swing.JTextField txt_fecha;
private javax.swing.JTextField txt_identificador;
private javax.swing.JTextField txt_lugar;
private javax.swing.JTextField txt_nombre;
// End of variables declaration
}
package interfaz;
import
import
import
import
import
arbolavl.*;
java.awt.Point;
java.io.File;
java.util.ArrayList;
javax.swing.table.DefaultTableModel;
/** @author ISRAEL */
public class MenuDepartamento extends javax.swing.JDialog {
public MenuDepartamento(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
//arbolAVL.inOrden(arbol1);
}
File archivoLaboral = new File("D:\\laboral.txt");
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
tb_departamento = new javax.swing.JTable();
btn_visualizar = new javax.swing.JButton();
jButton1 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
txt_identificador = new javax.swing.JTextField();
txt_origen = new javax.swing.JTextField();
txt_destino = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Gestión de Departamentos");
tb_departamento.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null}
},
new String [] {
"Identificador", "Depart. Origen", "Depart. Destino"
}
));
44
tb_departamento.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tb_departamentoMouseClicked(evt);
}
});
jScrollPane1.setViewportView(tb_departamento);
btn_visualizar.setText("Listar");
btn_visualizar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_visualizarActionPerformed(evt);
}
});
jButton1.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/iconos/iconos/delete.png"))); // NOI18N
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jLabel1.setText("Identificador");
jLabel2.setText("Departamento de Origen");
jLabel3.setText("Departamento de Destino");
txt_identificador.setEditable(false);
txt_origen.setEditable(false);
txt_destino.setEditable(false);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(86, 86, 86)
.addComponent(jButton1)
.addGap(45, 45, 45)
.addComponent(btn_visualizar))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 323, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(32, 32, 32)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel3)
.addComponent(jLabel2)
.addComponent(jLabel1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(txt_identificador)
.addComponent(txt_origen)
.addComponent(txt_destino,
javax.swing.GroupLayout.DEFAULT_SIZE, 101, Short.MAX_VALUE))))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addGap(12, 12, 12)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jButton1,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
45
.addComponent(btn_visualizar,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(23, 23, 23)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(txt_identificador,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(txt_origen,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(txt_destino,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 136,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
pack();
}// </editor-fold>
public void dibujarTabla(ArrayList<Departamento> arreglo) {
DefaultTableModel modelo = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
};
Object[] fila = new Object[3];
String[] columnas = {"Identificador", "Depart. Origen", "Depart. Destino"};
modelo.setColumnIdentifiers(columnas);
for (int i = 0; i < arreglo.size(); i++) {
fila[0] = arreglo.get(i).getIdentificador();
fila[1] = arreglo.get(i).getDepartOrigen();
fila[2] = arreglo.get(i).getDepartDestino();
modelo.addRow(fila);
}
tb_departamento.setModel(modelo);
}
private void btn_visualizarActionPerformed(java.awt.event.ActionEvent evt) {
ListaDepartamento listaDepartamento = new ListaDepartamento();
dibujarTabla(listaDepartamento.leerArchivo(archivoLaboral));
}
private void tb_departamentoMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
Point puntoFC;
int indiceFila = 0;
try {
if (evt.getClickCount() == 2) {
puntoFC = evt.getPoint();
indiceFila = tb_departamento.rowAtPoint(puntoFC);
ListaDepartamento listaDepartamento = new ListaDepartamento();
ArrayList<Departamento>
arreglo
listaDepartamento.leerArchivo(archivoLaboral);
for (int i = 0; i < arreglo.size(); i++) {
if
(arreglo.get(i).getIdentificador().equals(tb_departamento.getValueAt(indiceFila,
0).toString())) {
txt_identificador.setText(arreglo.get(i).getIdentificador()
"");
46
=
+
txt_origen.setText(arreglo.get(i).getDepartOrigen());
txt_destino.setText(arreglo.get(i).getDepartDestino());
break;
}
}
}else{}
} catch (Exception e) {
System.out.print("NO SE HA CARGADO EL ARCHIVO");
}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
ListaDepartamento lista = new ListaDepartamento();
String cadena = txt_identificador.getText() + ";" + txt_origen.getText() + ";" +
txt_destino.getText();
lista.eliminarRegistro(archivoLaboral, cadena);
txt_identificador.setText(null);
txt_origen.setText(null);
txt_destino.setText(null);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code
(optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default
look and feel.
*
For
details
see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for
(javax.swing.UIManager.LookAndFeelInfo
info
:
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(MenuDepartamento.class.getName()).log(java.util.loggi
ng.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(MenuDepartamento.class.getName()).log(java.util.loggi
ng.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(MenuDepartamento.class.getName()).log(java.util.loggi
ng.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(MenuDepartamento.class.getName()).log(java.util.loggi
ng.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the dialog */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
MenuDepartamento dialog = new MenuDepartamento(new javax.swing.JFrame(),
true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
47
}
// Variables declaration - do not modify
private javax.swing.JButton btn_visualizar;
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable tb_departamento;
private javax.swing.JTextField txt_destino;
private javax.swing.JTextField txt_identificador;
private javax.swing.JTextField txt_origen;
// End of variables declaration
}
48
Anexo 3. Caso de Investigación
Una empresa de servicios tiene tres departamentos: comercial(1), explotación(2)
y marketing(3). Cada empleado está adscrito a uno de ellos. Se ha realizado una
redistribución del personal entre ambos departamentos, los cambios están
guardados en el archivo laboral. txt. El archivo contiene en cada registro los
campos identificador, origen, destino. El campo origen puede tomar los valores
1, 2, 3 dependiendo del departamento origen del empleado, cuya identificación
es una secuencia de 5 dígitos que es el primer campo del registro. El campo
destino también puede tomar los valores 1, 2, 3 según el departamento al que
sea destinado. Escribir un programa que guarde los registros del archivo en tres
árboles AVL, uno por cada departamento origen, y realice los intercambios de
registros en los árboles según el campo destino.
49
Descargar