import java.io.*;
import java.util.Scanner;
class Nodo_esfera{
import java.util.Scanner;
class Nodo_esfera{
Nodo_esfera atraz,adelante,abajo,arriba ;
String dato;
public Nodo_esfera(){
dato="";
}
public Nodo_esfera(String dato){
this.dato=dato;
}
public void verdato(){
System.out.print("\t"+dato+"\t ");
}
public void crearnreg(Nodo_esfera p, String dat){
Nodo_esfera a =new Nodo_esfera();
a.adelante=p.adelante;
a.atraz=p;
p.adelante.atraz=a;
p.adelante=a;
a.dato=dat;
}
public void crearnreg2(Nodo_esfera p, String dat){
Nodo_esfera a =new Nodo_esfera();
a.abajo=p.abajo;
a.arriba=p;
p.abajo.arriba=a;
p.abajo=a;
a.dato=dat;
}
public void unenodosesfera(Nodo_esfera aux){
aux.arriba=aux.atraz.arriba.a delante;
aux.abajo=aux.atraz.abajo.ade lante;
aux.arriba.abajo=aux;
aux.abajo.arriba=aux;
}
public void unenodosesfera2(Nodo_esfera aux){
aux.atraz=aux.arriba.atraz.ab ajo;
aux.adelante=aux.arriba.adela nte.abajo;
aux.atraz.adelante=aux;
aux.adelante.atraz=aux;
}
} //-----Clase nodo esfera
class Mi_esfera{
Mi_esfera adelante, atraz;
Nodo_esfera headF,tailF,keyF,headC,tailC,k eyC,keyfaux,keycaux;
String nombre;
//-----------Constructor --Inicializa todos los elementos de la tabla esferal (se inicializa la esfera)-->>
public Mi_esfera(){
headF=tailF=headC=tailC=keyF= keyfaux=keycaux=null;
}
public void crearnesf(Mi_esfera p, String dat){
Mi_esfera a =new Mi_esfera();
a.adelante=p.adelante;
a.atraz=p;
p.adelante.atraz=a;
p.adelante=a;
a.nombre=dat;
}
//-----------Metodo qu emuestra el contenido de un registro completo o los campos (Muestra un anillo)--->>
public void verfilas(Nodo_esfera q){
Nodo_esfera p = new Nodo_esfera();
q.verdato();
p=q;
q=q.adelante;
while(q!=p)
{q.verdato();
q=q.adelante;
}
System.out.println("");
}
//-----------Metodos para crear los nombres y estructura de os campos ----->>
public Nodo_esfera busquedaxfilas(String dato){
Nodo_esfera p=headF;
if(headF==null)
return null;
else if(headF==tailF)
{if(headF.dato.compareToIgnore Case(dato)==0)
return headF;
}
else
{
while(p!=tailF){
if(p.dato.compareToIgnoreCase (dato)==0)
return p;
else if(p.adelante.dato.compareToIg noreCase(dato)==0)
return p.adelante;
p=p.adelante;
}
}
return null;
} //---Metodo que ealiza la busqueda de forma horizontal-->
public void crearcolumna()throws IOException{
String nom="";
Nodo_esfera aux = new Nodo_esfera();
Nodo_esfera aux2 = new Nodo_esfera();
aux = keyfaux;
aux2 = keyF.abajo;
aux = aux.abajo;
while (aux2!=keyF){
System.out.println("Ingresa "+keyfaux.dato+" para: "+aux2.dato);
BufferedReader leem = new BufferedReader(new InputStreamReader(System.in));
nom=leem.readLine();
aux.crearnreg2(aux,nom);
aux=aux.abajo;
aux2=aux2.abajo;
}
unecolumna();
}
public void unecolumna(){
Nodo_esfera aux= new Nodo_esfera();
aux=keyfaux.abajo;
while(aux!=keyfaux)
{
aux.unenodosesfera2(aux);
aux=aux.abajo;
}
}
public int ubicaxfilas(String dato){
Nodo_esfera aux = new Nodo_esfera();
aux=busquedaxfilas(dato);
if(aux!=null)
return 1;
else if(headF==null)
crearnodoprimero(dato);
else if(headF==tailF)
crearnodosegundo(dato);
else if(headF.dato.compareToIgnoreC ase(dato)>0)
crearnodoinicio(dato);
else if (tailF.dato.compareToIgnoreCas e(dato)<0)
crearnodofinal(dato);
else
{ aux=headF;
while(aux.adelante.dato.compa reToIgnoreCase(dato)<0)
aux=aux.adelante;
crearnodomedio(dato,aux);
}
return 0;
}
public void crearnodoprimero(String Dato){
Nodo_esfera p = new Nodo_esfera(Dato);
headF=tailF=headC=tailC=keyF= keyC=p;
p.abajo=p.adelante=p.atraz=p. arriba=p;
keyfaux=keycaux=keyF;
}
public void crearnodosegundo(String Dato){
Nodo_esfera p = new Nodo_esfera(Dato);
if(headF.dato.compareToIgnoreC ase(Dato)<0)
{tailF=p;
p.adelante=p.atraz=headF;
headF.adelante=headF.atraz=p;
}
else{
headF=p;
p.adelante=p.atraz=tailF;
tailF.adelante=tailF.atraz=p;
}
p.abajo=p.arriba=p;
keyfaux = p;
}
public void crearnodoinicio(String Dato){
Nodo_esfera p = new Nodo_esfera(Dato);
p.adelante=headF;
p.atraz=tailF;
headF.atraz=p;
tailF.adelante=p;
headF=p;
p.abajo=p.arriba=p;
keyfaux=p;
}
public void crearnodofinal(String Dato){
Nodo_esfera p = new Nodo_esfera(Dato);
p.adelante=headF;
p.atraz=tailF;
headF.atraz=p;
tailF.adelante=p;
tailF=p;
p.abajo=p.arriba=p;
keyfaux=p;
}
public void crearnodomedio(String Dato,Nodo_esfera aux){
Nodo_esfera p = new Nodo_esfera(Dato);
p.adelante=aux.adelante;
p.atraz=aux;
aux.adelante.atraz=p;
aux.adelante=p;
p.arriba=p.abajo=p;
keyfaux=p;
}
//---------Metodos para genrar los registros / segeneran los anillos que posteriormente se unen a la esfera--->>
public void crearfila(String Dato)throws IOException{
String nom="";
Nodo_esfera a = new Nodo_esfera();
Nodo_esfera b = new Nodo_esfera();
crearnodoprimero2(Dato);
b=keyC;
a=keyF.adelante;
while (a!=keyF){
System.out.println("Ingresa "+a.dato);
BufferedReader leem = new BufferedReader(new InputStreamReader(System.in));
nom=leem.readLine();
b.crearnreg(b,nom);
b=b.adelante;
a=a.adelante;
}
} //---------|
// |-Se crea el anillo (Para despues ubicarlo y unirlo
public void crearnodoprimero2(String Dato){
Nodo_esfera p = new Nodo_esfera(Dato);
p.abajo=p.adelante=p.atraz=p. arriba=p;
keyC=p;
} //---------|
public Nodo_esfera busquedaxcolumnas(String dato){
Nodo_esfera p=headC;
if(headC==null)
return null;
else if(headC==tailC)
{if(headC.dato.compareToIgnore Case(dato)==0)
return headC;
}
else
{
while(p!=keyF){
if(p.dato.compareToIgnoreCase (dato)==0)
return p;
p=p.abajo;
}
}
return null;
}
public void ubicaxcolumnas()throws IOException{
Nodo_esfera p = new Nodo_esfera();
if(headC==keyF)
crearfilaprimera();
else if((keyC.dato.compareToIgnoreC ase(headC.dato)<=0)||(keyC.dat o.compareToIgnoreCase(tailC.da to)>0))
crearfilasegunda();
else
{ p=headC;
while(p!=tailC){
if((p.dato.compareToIgnoreCas e(keyC.dato)<0)&&(p.abajo.dato .compareToIgnoreCase(keyC.dato )>=0))
crearfilamedia(p.abajo);
p=p.abajo;
}
}
}
public void crearfilaprimera()throws IOException{
Nodo_esfera aux= new Nodo_esfera();
Nodo_esfera aux2= new Nodo_esfera();
aux=keyC;
aux2=keyF;
headC=tailC=keyC;
aux.arriba=aux.abajo=keyF;
keyF.abajo=keyF.arriba=aux;
aux=aux.adelante;
aux2=aux2.adelante;
while(aux2!=keyF)
{
aux.unenodosesfera(aux);
aux=aux.adelante;
aux2=aux2.adelante;
}
}
public void crearfilasegunda()throws IOException{
Nodo_esfera aux= new Nodo_esfera();
Nodo_esfera aux2= new Nodo_esfera();
Nodo_esfera aux3= new Nodo_esfera();
aux=keyC;
aux2=headC;
aux3=aux2;
if(keyC.dato.compareToIgnoreCa se(headC.dato)
keyC.arriba=headC.arriba;
keyC.abajo=headC;
headC.arriba.abajo=headC.arri ba=keyC;
headC=keyC;
}
if(keyC.dato.compareToIgnoreCa se(tailC.dato)>0){
keyC.arriba=tailC;
keyC.abajo=tailC.abajo;
tailC.abajo.arriba=tailC.abaj o=keyC;
tailC=keyC;
}
aux=aux.adelante;
aux2=aux2.adelante;
while(aux2!=aux3)
{
aux.unenodosesfera(aux);
aux=aux.adelante;
aux2=aux2.adelante;
}
}
public void crearfilamedia(Nodo_esfera aux)throws IOException{
Nodo_esfera aux2= new Nodo_esfera();
aux2=keyF.adelante;
keyC.abajo=aux;
keyC.arriba=aux.arriba;
aux.arriba.abajo=aux.arriba=k eyC;
aux=keyC;
aux=aux.adelante;
while(aux2!=keyF)
{
aux.unenodosesfera(aux);
aux=aux.adelante;
aux2=aux2.adelante;
}
}
//---Metodos para orden y limpieza-------------------->>
public void eliminarcampo(Nodo_esfera aux){
Nodo_esfera recorre = new Nodo_esfera();
recorre=aux;
if(aux==headF)
headF=aux.adelante;
else if(aux==tailF)
tailF=aux.atraz;
recorre.atraz.adelante=recorr e.adelante;
recorre.adelante.atraz=recorr e.atraz;
recorre.adelante=recorre.atra z=recorre;
recorre=recorre.abajo;
while(aux!=recorre){
recorre.atraz.adelante=recorre .adelante;
recorre.adelante.atraz=recorr e.atraz;
recorre.adelante=recorre.atra z=recorre;
recorre=recorre.abajo;
}
}
public void eliminarregistro(Nodo_esfera aux){
Nodo_esfera recorre = new Nodo_esfera();
recorre=aux;
if(aux==keyC)
keyC=aux.arriba;
else if(aux==headC)
headC=aux.abajo;
else if(aux==tailC)
tailC=aux.arriba;
recorre.arriba.abajo=recorre. abajo;
recorre.abajo.arriba=recorre. arriba;
recorre.arriba=recorre.abajo= recorre;
recorre=recorre.abajo;
while(aux!=recorre){
recorre.arriba.abajo=recorre.a bajo;
recorre.abajo.arriba=recorre. arriba;
recorre.arriba=recorre.abajo= recorre;
recorre=recorre.abajo;
}
}
public void ordenax(Nodo_esfera aux)throws IOException{
keyfaux = keyF;
keyC=headC=tailC=keyF=aux;
aux=aux.abajo;
ubicaxcolumnas();
while(aux!=keyF){
keyC=aux;
aux=aux.abajo;
ubicaxcolumnas();
}
keyF = keyfaux;
}
//----Muestra la tabla (esfera)-------------->>
public void mostrartabla(){
Nodo_esfera q = new Nodo_esfera();
q = keyF;
verfilas(q);
q=q.abajo;
while(q!=keyF){
verfilas(q);
q=q.abajo;
}
}
//----Metodo que arroja el dato degun la interseccion de 2 nodos-------------->>
public Nodo_esfera busquedaxtodo(Nodo_esfera p, Nodo_esfera q){
Nodo_esfera aux=keyF;
if(aux==q)
return q;
p=p.adelante;
aux=aux.adelante;
while(p!=q){
if(aux==q)
return p;
p=p.adelante;
aux=aux.adelante;
}
return q;
}
}
class Anillodeesferas{
Mi_esfera head;
Mi_esfera tail;
Mi_esfera key;
Mi_esfera aux;
String nom;
public Anillodeesferas(){
head=tail=key=null;
nom = " ";
}
public Mi_esfera busquedaxesferas(String nom){
Mi_esfera p = new Mi_esfera();
p=head;
if(head==null)
return null;
else if(head==tail)
{if(head.nombre.compareToIgnor eCase(nom)==0)
return head;
}
else
{
while(p!=tail){
if(p.nombre.compareToIgnoreCa se(nom)==0)
return p;
else if(p.adelante.nombre.compareTo IgnoreCase(nom)==0)
return p.adelante;
p=p.adelante;
}
}
return null;
} //---Metodo que ealiza la busqueda de forma horizontal-->
public int ubicaxesferas(String nom){
Mi_esfera aux = new Mi_esfera();
aux=busquedaxesferas(nom);
if(aux!=null)
return 1;
else if(head==null)
crearesfprimera(nom);
else if(head==tail)
crearesfsegunda(nom);
else if(head.nombre.compareToIgnore Case(nom)>0)
crearesfinicio(nom);
else if (tail.nombre.compareToIgnoreCa se(nom)<0)
crearesffinal(nom);
else
{ aux=head;
while(aux.adelante.nombre.com pareToIgnoreCase(nom)<0)
aux=aux.adelante;
crearesfmedia(nom,aux);
}
return 0;
}
public void crearesfprimera(String Dato){
Mi_esfera p = new Mi_esfera();
head=tail=key=p;
p.adelante=p.atraz=p;
p.nombre=Dato;
}
public void crearesfsegunda(String Dato){
Mi_esfera p = new Mi_esfera();
if(head.nombre.compareToIgnore Case(Dato)<0)
{tail=p;
p.adelante=p.atraz=head;
head.adelante=head.atraz=p;
p.nombre=Dato;
}
else{
head=p;
p.adelante=p.atraz=tail;
tail.adelante=tail.atraz=p;
p.nombre=Dato;
}
}
public void crearesfinicio(String Dato){
Mi_esfera p = new Mi_esfera();
p.adelante=head;
p.atraz=tail;
head.atraz=p;
tail.adelante=p;
head=p;
p.nombre=Dato;
}
public void crearesffinal(String Dato){
Mi_esfera p = new Mi_esfera();
p.adelante=head;
p.atraz=tail;
head.atraz=p;
tail.adelante=p;
tail=p;
p.nombre=Dato;
}
public void crearesfmedia(String Dato,Mi_esfera aux){
Mi_esfera p = new Mi_esfera();
p.adelante=aux.adelante;
p.atraz=aux;
aux.adelante.atraz=p;
aux.adelante=p;
p.nombre=Dato;
}
public void vernombresanillo(){
Mi_esfera p = new Mi_esfera();
p=key;
System.out.println("+ "+p.nombre);
p=p.adelante;
while(p!=key)
{
System.out.println("+ "+p.nombre);
p=p.adelante;
}
System.out.println("");
}
public void veresferaanillo(Mi_esfera p){
System.out.println("+ "+p.nombre);
p.mostrartabla();
}
public void eliminaresfera(Mi_esfera aux){
Mi_esfera recorre = new Mi_esfera();
recorre=aux;
if((head==tail)&&(head==aux))
head=tail=key=null;
if(aux==head)
head=aux.adelante;
else if(aux==tail)
tail=aux.atraz;
recorre.atraz.adelante=recorr e.adelante;
recorre.adelante.atraz=recorr e.atraz;
recorre.adelante=recorre.atra z=recorre;
aux.adelante=aux.atraz=aux;
}
public static void main (String[]args)throws IOException {
Anillodeesferas db = new Anillodeesferas();
Mi_esfera p=new Mi_esfera();
Nodo_esfera q=new Nodo_esfera();
Nodo_esfera r=new Nodo_esfera();
Nodo_esfera s=new Nodo_esfera();
String nom,nom1;
String opc="S";
int opc1;
do{
System.out.println("\t\t --------MENU--------");
System.out.println("\t 1* Crear una tabla");
System.out.println("\t 2* Insertar campos en una tabla");
System.out.println("\t 3* Llenar tabla");
System.out.println("\t 4* Modificar tabla");
System.out.println("\t 5* Borrar una tabla");
System.out.println("\t 6* Salir");
Scanner leer= new Scanner(System.in);
opc1= leer.nextInt();
BufferedReader lee = new BufferedReader(new InputStreamReader(System.in));
switch(opc1){
case 1: System.out.println("\tIngresa el nombre de la tabla: ");
nom=lee.readLine();
if(db.busquedaxesferas(nom)!= null)
System.out.println("Tabla ya existente, no se creo");
else{
db.ubicaxesferas(nom);
p=db.busquedaxesferas(nom);
do{
System.out.println("Ingresa el nombre del campo: ");
nom=lee.readLine();
if(p.ubicaxfilas(nom)==1)
System.out.println("Campo ya existente, no se creo");
System.out.println("Ingresar otro campo? s/n");
opc = lee.readLine();
}while(opc.compareToIgnoreCase ("S")==0);}
break;
case 2: do{
System.out.println("\tIngresa el nombre de la tabla a la que le deseas meter campos: ");
db.vernombresanillo();
nom=lee.readLine();
}while(db.busquedaxesferas(nom )==null);
p=db.busquedaxesferas(nom);
do{
System.out.println("Ingresa el nombre del campo: ");
nom=lee.readLine();
if(p.ubicaxfilas(nom)==1)
System.out.println("Campo ya existente, no se creo");
else
p.crearcolumna();
System.out.println("Ingresar otro campo? s/n");
opc = lee.readLine();
}while(opc.compareToIgnoreCase ("S")==0);
break;
case 3:
do{
System.out.println("\tIngresa el nombre de la tabla que deseas llenar: ");
db.vernombresanillo();
nom=lee.readLine();
}while(db.busquedaxesferas(nom )==null);
p=db.busquedaxesferas(nom);
do{
do{
System.out.println("Ingresa "+p.keyF.dato+" ");
nom=lee.readLine();
if(p.busquedaxcolumnas(nom)!= null)
System.out.println("Registro ya existente");
}while(p.busquedaxcolumnas(no m)!=null);
p.crearfila(nom);
p.ubicaxcolumnas();
System.out.println("Ingresar otro registro? s/n");
opc = lee.readLine();
}while(opc.compareToIgnoreCase ("S")==0);
break;
case 4:do{
System.out.println("\tIngresa el nombre de la tabla que deseas modificar: ");
db.vernombresanillo();
nom=lee.readLine();
}while(db.busquedaxesferas(nom )==null);
p=db.busquedaxesferas(nom);
int opc2=0;
do{
System.out.println("\t\t --------MENU MODIFICAR TABLA--------");
System.out.println("\t 1* Eliminar campo");
System.out.println("\t 2* Eliminar registro");
System.out.println("\t 3* Cambiar nombre de la tabla");
System.out.println("\t 4* Modificar dato");
System.out.println("\t 5* Ordenar por campo");
System.out.println("\t 6* Mostrar tabla");
System.out.println("\t 7* Salir");
opc2= leer.nextInt();
switch(opc2){
case 1:do{
System.out.println("\tIngresa el nombre del campo que deseas eliminar: ");
p.verfilas(p.keyF);
nom=lee.readLine();
}while(p.busquedaxfilas(nom)== null);
if(p.busquedaxfilas(nom)!=p.ke yF){
q=p.busquedaxfilas(nom);
p.eliminarcampo(q);}
else
System.out.println("\tNo puedes eliminar el campo llave: ");
break;
case 2:if(p.headC!=p.keyF){
do{
System.out.println("\tIngresa el nombre del registro que deseas eliminar: ");
nom=lee.readLine();
}while(p.busquedaxcolumnas(nom )==null);
q=p.busquedaxcolumnas(nom);
p.eliminarregistro(q);}
else
System.out.println("\tNo hay mas registros para eliminar! ");
break;
case 3:
System.out.println("\tIngresa el nuevo nombre: ");
nom=lee.readLine();
p.nombre=nom;
break;
case 4:
System.out.println("\tIngresa el campo: ");
nom=lee.readLine();
q=p.busquedaxfilas(nom);
if(q==p.keyF)
{System.out.println("\tNo se puede modificar los campos llave");
break;
}
System.out.println("\tIngresa el nombre: ");
nom=lee.readLine();
r=p.busquedaxcolumnas(nom);
s=p.busquedaxtodo(r,q);
System.out.println("\tIngresa "+q.dato+":");
nom=lee.readLine();
s.dato=nom;
break;
case 5:
System.out.println("\tIngresa el campo: ");
nom=lee.readLine();
if(p.busquedaxfilas(nom)==null )
System.out.println("\tNo existe ese campo");
else
p.ordenax(p.busquedaxfilas(nom ));
case 6:
if(p.keyF==null){
System.out.println("\tLa tabla no contiene datos: ");
break;
}
System.out.println("\tTABLA: "+p.nombre);
p.mostrartabla();
p.ordenax(p.keyF);
break;
case 7: break;
default:
System.out.println("\tOpcion no valida");
break;
}
}while(opc2!=7);
break;
case 5:do{
System.out.println("\tIngresa el nombre de la tabla que deseas llenar: ");
db.vernombresanillo();
nom=lee.readLine();
}while(db.busquedaxesferas(nom )==null);
db.eliminaresfera(db.busquedax esferas(nom));
break;
default: System.out.println("opcion no valida");
break;
}
}while(opc1!=6);
}
}
String dato;
public Nodo_esfera(){
dato="";
}
public Nodo_esfera(String dato){
this.dato=dato;
}
public void verdato(){
System.out.print("\t"+dato+"\t
}
public void crearnreg(Nodo_esfera p, String dat){
Nodo_esfera a =new Nodo_esfera();
a.adelante=p.adelante;
a.atraz=p;
p.adelante.atraz=a;
p.adelante=a;
a.dato=dat;
}
public void crearnreg2(Nodo_esfera p, String dat){
Nodo_esfera a =new Nodo_esfera();
a.abajo=p.abajo;
a.arriba=p;
p.abajo.arriba=a;
p.abajo=a;
a.dato=dat;
}
public void unenodosesfera(Nodo_esfera aux){
aux.arriba=aux.atraz.arriba.a
aux.abajo=aux.atraz.abajo.ade
aux.arriba.abajo=aux;
aux.abajo.arriba=aux;
}
public void unenodosesfera2(Nodo_esfera aux){
aux.atraz=aux.arriba.atraz.ab
aux.adelante=aux.arriba.adela
aux.atraz.adelante=aux;
aux.adelante.atraz=aux;
}
} //-----Clase nodo esfera
class Mi_esfera{
Mi_esfera adelante, atraz;
Nodo_esfera headF,tailF,keyF,headC,tailC,k
String nombre;
//-----------Constructor --Inicializa todos los elementos de la tabla esferal (se inicializa la esfera)-->>
public Mi_esfera(){
headF=tailF=headC=tailC=keyF=
}
public void crearnesf(Mi_esfera p, String dat){
Mi_esfera a =new Mi_esfera();
a.adelante=p.adelante;
a.atraz=p;
p.adelante.atraz=a;
p.adelante=a;
a.nombre=dat;
}
//-----------Metodo qu emuestra el contenido de un registro completo o los campos (Muestra un anillo)--->>
public void verfilas(Nodo_esfera q){
Nodo_esfera p = new Nodo_esfera();
q.verdato();
p=q;
q=q.adelante;
while(q!=p)
{q.verdato();
q=q.adelante;
}
System.out.println("");
}
//-----------Metodos para crear los nombres y estructura de os campos ----->>
public Nodo_esfera busquedaxfilas(String dato){
Nodo_esfera p=headF;
if(headF==null)
return null;
else if(headF==tailF)
{if(headF.dato.compareToIgnore
return headF;
}
else
{
while(p!=tailF){
if(p.dato.compareToIgnoreCase
return p;
else if(p.adelante.dato.compareToIg
return p.adelante;
p=p.adelante;
}
}
return null;
} //---Metodo que ealiza la busqueda de forma horizontal-->
public void crearcolumna()throws IOException{
String nom="";
Nodo_esfera aux = new Nodo_esfera();
Nodo_esfera aux2 = new Nodo_esfera();
aux = keyfaux;
aux2 = keyF.abajo;
aux = aux.abajo;
while (aux2!=keyF){
System.out.println("Ingresa "+keyfaux.dato+" para: "+aux2.dato);
BufferedReader leem = new BufferedReader(new InputStreamReader(System.in));
nom=leem.readLine();
aux.crearnreg2(aux,nom);
aux=aux.abajo;
aux2=aux2.abajo;
}
unecolumna();
}
public void unecolumna(){
Nodo_esfera aux= new Nodo_esfera();
aux=keyfaux.abajo;
while(aux!=keyfaux)
{
aux.unenodosesfera2(aux);
aux=aux.abajo;
}
}
public int ubicaxfilas(String dato){
Nodo_esfera aux = new Nodo_esfera();
aux=busquedaxfilas(dato);
if(aux!=null)
return 1;
else if(headF==null)
crearnodoprimero(dato);
else if(headF==tailF)
crearnodosegundo(dato);
else if(headF.dato.compareToIgnoreC
crearnodoinicio(dato);
else if (tailF.dato.compareToIgnoreCas
crearnodofinal(dato);
else
{ aux=headF;
while(aux.adelante.dato.compa
aux=aux.adelante;
crearnodomedio(dato,aux);
}
return 0;
}
public void crearnodoprimero(String Dato){
Nodo_esfera p = new Nodo_esfera(Dato);
headF=tailF=headC=tailC=keyF=
p.abajo=p.adelante=p.atraz=p.
keyfaux=keycaux=keyF;
}
public void crearnodosegundo(String Dato){
Nodo_esfera p = new Nodo_esfera(Dato);
if(headF.dato.compareToIgnoreC
{tailF=p;
p.adelante=p.atraz=headF;
headF.adelante=headF.atraz=p;
}
else{
headF=p;
p.adelante=p.atraz=tailF;
tailF.adelante=tailF.atraz=p;
}
p.abajo=p.arriba=p;
keyfaux = p;
}
public void crearnodoinicio(String Dato){
Nodo_esfera p = new Nodo_esfera(Dato);
p.adelante=headF;
p.atraz=tailF;
headF.atraz=p;
tailF.adelante=p;
headF=p;
p.abajo=p.arriba=p;
keyfaux=p;
}
public void crearnodofinal(String Dato){
Nodo_esfera p = new Nodo_esfera(Dato);
p.adelante=headF;
p.atraz=tailF;
headF.atraz=p;
tailF.adelante=p;
tailF=p;
p.abajo=p.arriba=p;
keyfaux=p;
}
public void crearnodomedio(String Dato,Nodo_esfera aux){
Nodo_esfera p = new Nodo_esfera(Dato);
p.adelante=aux.adelante;
p.atraz=aux;
aux.adelante.atraz=p;
aux.adelante=p;
p.arriba=p.abajo=p;
keyfaux=p;
}
//---------Metodos para genrar los registros / segeneran los anillos que posteriormente se unen a la esfera--->>
public void crearfila(String Dato)throws IOException{
String nom="";
Nodo_esfera a = new Nodo_esfera();
Nodo_esfera b = new Nodo_esfera();
crearnodoprimero2(Dato);
b=keyC;
a=keyF.adelante;
while (a!=keyF){
System.out.println("Ingresa "+a.dato);
BufferedReader leem = new BufferedReader(new InputStreamReader(System.in));
nom=leem.readLine();
b.crearnreg(b,nom);
b=b.adelante;
a=a.adelante;
}
} //---------|
// |-Se crea el anillo (Para despues ubicarlo y unirlo
public void crearnodoprimero2(String Dato){
Nodo_esfera p = new Nodo_esfera(Dato);
p.abajo=p.adelante=p.atraz=p.
keyC=p;
} //---------|
public Nodo_esfera busquedaxcolumnas(String dato){
Nodo_esfera p=headC;
if(headC==null)
return null;
else if(headC==tailC)
{if(headC.dato.compareToIgnore
return headC;
}
else
{
while(p!=keyF){
if(p.dato.compareToIgnoreCase
return p;
p=p.abajo;
}
}
return null;
}
public void ubicaxcolumnas()throws IOException{
Nodo_esfera p = new Nodo_esfera();
if(headC==keyF)
crearfilaprimera();
else if((keyC.dato.compareToIgnoreC
crearfilasegunda();
else
{ p=headC;
while(p!=tailC){
if((p.dato.compareToIgnoreCas
crearfilamedia(p.abajo);
p=p.abajo;
}
}
}
public void crearfilaprimera()throws IOException{
Nodo_esfera aux= new Nodo_esfera();
Nodo_esfera aux2= new Nodo_esfera();
aux=keyC;
aux2=keyF;
headC=tailC=keyC;
aux.arriba=aux.abajo=keyF;
keyF.abajo=keyF.arriba=aux;
aux=aux.adelante;
aux2=aux2.adelante;
while(aux2!=keyF)
{
aux.unenodosesfera(aux);
aux=aux.adelante;
aux2=aux2.adelante;
}
}
public void crearfilasegunda()throws IOException{
Nodo_esfera aux= new Nodo_esfera();
Nodo_esfera aux2= new Nodo_esfera();
Nodo_esfera aux3= new Nodo_esfera();
aux=keyC;
aux2=headC;
aux3=aux2;
if(keyC.dato.compareToIgnoreCa
keyC.arriba=headC.arriba;
keyC.abajo=headC;
headC.arriba.abajo=headC.arri
headC=keyC;
}
if(keyC.dato.compareToIgnoreCa
keyC.arriba=tailC;
keyC.abajo=tailC.abajo;
tailC.abajo.arriba=tailC.abaj
tailC=keyC;
}
aux=aux.adelante;
aux2=aux2.adelante;
while(aux2!=aux3)
{
aux.unenodosesfera(aux);
aux=aux.adelante;
aux2=aux2.adelante;
}
}
public void crearfilamedia(Nodo_esfera aux)throws IOException{
Nodo_esfera aux2= new Nodo_esfera();
aux2=keyF.adelante;
keyC.abajo=aux;
keyC.arriba=aux.arriba;
aux.arriba.abajo=aux.arriba=k
aux=keyC;
aux=aux.adelante;
while(aux2!=keyF)
{
aux.unenodosesfera(aux);
aux=aux.adelante;
aux2=aux2.adelante;
}
}
//---Metodos para orden y limpieza-------------------->>
public void eliminarcampo(Nodo_esfera aux){
Nodo_esfera recorre = new Nodo_esfera();
recorre=aux;
if(aux==headF)
headF=aux.adelante;
else if(aux==tailF)
tailF=aux.atraz;
recorre.atraz.adelante=recorr
recorre.adelante.atraz=recorr
recorre.adelante=recorre.atra
recorre=recorre.abajo;
while(aux!=recorre){
recorre.atraz.adelante=recorre
recorre.adelante.atraz=recorr
recorre.adelante=recorre.atra
recorre=recorre.abajo;
}
}
public void eliminarregistro(Nodo_esfera aux){
Nodo_esfera recorre = new Nodo_esfera();
recorre=aux;
if(aux==keyC)
keyC=aux.arriba;
else if(aux==headC)
headC=aux.abajo;
else if(aux==tailC)
tailC=aux.arriba;
recorre.arriba.abajo=recorre.
recorre.abajo.arriba=recorre.
recorre.arriba=recorre.abajo=
recorre=recorre.abajo;
while(aux!=recorre){
recorre.arriba.abajo=recorre.a
recorre.abajo.arriba=recorre.
recorre.arriba=recorre.abajo=
recorre=recorre.abajo;
}
}
public void ordenax(Nodo_esfera aux)throws IOException{
keyfaux = keyF;
keyC=headC=tailC=keyF=aux;
aux=aux.abajo;
ubicaxcolumnas();
while(aux!=keyF){
keyC=aux;
aux=aux.abajo;
ubicaxcolumnas();
}
keyF = keyfaux;
}
//----Muestra la tabla (esfera)-------------->>
public void mostrartabla(){
Nodo_esfera q = new Nodo_esfera();
q = keyF;
verfilas(q);
q=q.abajo;
while(q!=keyF){
verfilas(q);
q=q.abajo;
}
}
//----Metodo que arroja el dato degun la interseccion de 2 nodos-------------->>
public Nodo_esfera busquedaxtodo(Nodo_esfera p, Nodo_esfera q){
Nodo_esfera aux=keyF;
if(aux==q)
return q;
p=p.adelante;
aux=aux.adelante;
while(p!=q){
if(aux==q)
return p;
p=p.adelante;
aux=aux.adelante;
}
return q;
}
}
class Anillodeesferas{
Mi_esfera head;
Mi_esfera tail;
Mi_esfera key;
Mi_esfera aux;
String nom;
public Anillodeesferas(){
head=tail=key=null;
nom = " ";
}
public Mi_esfera busquedaxesferas(String nom){
Mi_esfera p = new Mi_esfera();
p=head;
if(head==null)
return null;
else if(head==tail)
{if(head.nombre.compareToIgnor
return head;
}
else
{
while(p!=tail){
if(p.nombre.compareToIgnoreCa
return p;
else if(p.adelante.nombre.compareTo
return p.adelante;
p=p.adelante;
}
}
return null;
} //---Metodo que ealiza la busqueda de forma horizontal-->
public int ubicaxesferas(String nom){
Mi_esfera aux = new Mi_esfera();
aux=busquedaxesferas(nom);
if(aux!=null)
return 1;
else if(head==null)
crearesfprimera(nom);
else if(head==tail)
crearesfsegunda(nom);
else if(head.nombre.compareToIgnore
crearesfinicio(nom);
else if (tail.nombre.compareToIgnoreCa
crearesffinal(nom);
else
{ aux=head;
while(aux.adelante.nombre.com
aux=aux.adelante;
crearesfmedia(nom,aux);
}
return 0;
}
public void crearesfprimera(String Dato){
Mi_esfera p = new Mi_esfera();
head=tail=key=p;
p.adelante=p.atraz=p;
p.nombre=Dato;
}
public void crearesfsegunda(String Dato){
Mi_esfera p = new Mi_esfera();
if(head.nombre.compareToIgnore
{tail=p;
p.adelante=p.atraz=head;
head.adelante=head.atraz=p;
p.nombre=Dato;
}
else{
head=p;
p.adelante=p.atraz=tail;
tail.adelante=tail.atraz=p;
p.nombre=Dato;
}
}
public void crearesfinicio(String Dato){
Mi_esfera p = new Mi_esfera();
p.adelante=head;
p.atraz=tail;
head.atraz=p;
tail.adelante=p;
head=p;
p.nombre=Dato;
}
public void crearesffinal(String Dato){
Mi_esfera p = new Mi_esfera();
p.adelante=head;
p.atraz=tail;
head.atraz=p;
tail.adelante=p;
tail=p;
p.nombre=Dato;
}
public void crearesfmedia(String Dato,Mi_esfera aux){
Mi_esfera p = new Mi_esfera();
p.adelante=aux.adelante;
p.atraz=aux;
aux.adelante.atraz=p;
aux.adelante=p;
p.nombre=Dato;
}
public void vernombresanillo(){
Mi_esfera p = new Mi_esfera();
p=key;
System.out.println("+ "+p.nombre);
p=p.adelante;
while(p!=key)
{
System.out.println("+ "+p.nombre);
p=p.adelante;
}
System.out.println("");
}
public void veresferaanillo(Mi_esfera p){
System.out.println("+ "+p.nombre);
p.mostrartabla();
}
public void eliminaresfera(Mi_esfera aux){
Mi_esfera recorre = new Mi_esfera();
recorre=aux;
if((head==tail)&&(head==aux))
head=tail=key=null;
if(aux==head)
head=aux.adelante;
else if(aux==tail)
tail=aux.atraz;
recorre.atraz.adelante=recorr
recorre.adelante.atraz=recorr
recorre.adelante=recorre.atra
aux.adelante=aux.atraz=aux;
}
public static void main (String[]args)throws IOException {
Anillodeesferas db = new Anillodeesferas();
Mi_esfera p=new Mi_esfera();
Nodo_esfera q=new Nodo_esfera();
Nodo_esfera r=new Nodo_esfera();
Nodo_esfera s=new Nodo_esfera();
String nom,nom1;
String opc="S";
int opc1;
do{
System.out.println("\t\t --------MENU--------");
System.out.println("\t 1* Crear una tabla");
System.out.println("\t 2* Insertar campos en una tabla");
System.out.println("\t 3* Llenar tabla");
System.out.println("\t 4* Modificar tabla");
System.out.println("\t 5* Borrar una tabla");
System.out.println("\t 6* Salir");
Scanner leer= new Scanner(System.in);
opc1= leer.nextInt();
BufferedReader lee = new BufferedReader(new InputStreamReader(System.in));
switch(opc1){
case 1: System.out.println("\tIngresa el nombre de la tabla: ");
nom=lee.readLine();
if(db.busquedaxesferas(nom)!=
System.out.println("Tabla ya existente, no se creo");
else{
db.ubicaxesferas(nom);
p=db.busquedaxesferas(nom);
do{
System.out.println("Ingresa el nombre del campo: ");
nom=lee.readLine();
if(p.ubicaxfilas(nom)==1)
System.out.println("Campo ya existente, no se creo");
System.out.println("Ingresar otro campo? s/n");
opc = lee.readLine();
}while(opc.compareToIgnoreCase
break;
case 2: do{
System.out.println("\tIngresa el nombre de la tabla a la que le deseas meter campos: ");
db.vernombresanillo();
nom=lee.readLine();
}while(db.busquedaxesferas(nom
p=db.busquedaxesferas(nom);
do{
System.out.println("Ingresa el nombre del campo: ");
nom=lee.readLine();
if(p.ubicaxfilas(nom)==1)
System.out.println("Campo ya existente, no se creo");
else
p.crearcolumna();
System.out.println("Ingresar otro campo? s/n");
opc = lee.readLine();
}while(opc.compareToIgnoreCase
break;
case 3:
do{
System.out.println("\tIngresa el nombre de la tabla que deseas llenar: ");
db.vernombresanillo();
nom=lee.readLine();
}while(db.busquedaxesferas(nom
p=db.busquedaxesferas(nom);
do{
do{
System.out.println("Ingresa "+p.keyF.dato+" ");
nom=lee.readLine();
if(p.busquedaxcolumnas(nom)!=
System.out.println("Registro ya existente");
}while(p.busquedaxcolumnas(no
p.crearfila(nom);
p.ubicaxcolumnas();
System.out.println("Ingresar otro registro? s/n");
opc = lee.readLine();
}while(opc.compareToIgnoreCase
break;
case 4:do{
System.out.println("\tIngresa el nombre de la tabla que deseas modificar: ");
db.vernombresanillo();
nom=lee.readLine();
}while(db.busquedaxesferas(nom
p=db.busquedaxesferas(nom);
int opc2=0;
do{
System.out.println("\t\t --------MENU MODIFICAR TABLA--------");
System.out.println("\t 1* Eliminar campo");
System.out.println("\t 2* Eliminar registro");
System.out.println("\t 3* Cambiar nombre de la tabla");
System.out.println("\t 4* Modificar dato");
System.out.println("\t 5* Ordenar por campo");
System.out.println("\t 6* Mostrar tabla");
System.out.println("\t 7* Salir");
opc2= leer.nextInt();
switch(opc2){
case 1:do{
System.out.println("\tIngresa el nombre del campo que deseas eliminar: ");
p.verfilas(p.keyF);
nom=lee.readLine();
}while(p.busquedaxfilas(nom)==
if(p.busquedaxfilas(nom)!=p.ke
q=p.busquedaxfilas(nom);
p.eliminarcampo(q);}
else
System.out.println("\tNo puedes eliminar el campo llave: ");
break;
case 2:if(p.headC!=p.keyF){
do{
System.out.println("\tIngresa el nombre del registro que deseas eliminar: ");
nom=lee.readLine();
}while(p.busquedaxcolumnas(nom
q=p.busquedaxcolumnas(nom);
p.eliminarregistro(q);}
else
System.out.println("\tNo hay mas registros para eliminar! ");
break;
case 3:
System.out.println("\tIngresa el nuevo nombre: ");
nom=lee.readLine();
p.nombre=nom;
break;
case 4:
System.out.println("\tIngresa el campo: ");
nom=lee.readLine();
q=p.busquedaxfilas(nom);
if(q==p.keyF)
{System.out.println("\tNo se puede modificar los campos llave");
break;
}
System.out.println("\tIngresa el nombre: ");
nom=lee.readLine();
r=p.busquedaxcolumnas(nom);
s=p.busquedaxtodo(r,q);
System.out.println("\tIngresa "+q.dato+":");
nom=lee.readLine();
s.dato=nom;
break;
case 5:
System.out.println("\tIngresa el campo: ");
nom=lee.readLine();
if(p.busquedaxfilas(nom)==null
System.out.println("\tNo existe ese campo");
else
p.ordenax(p.busquedaxfilas(nom
case 6:
if(p.keyF==null){
System.out.println("\tLa tabla no contiene datos: ");
break;
}
System.out.println("\tTABLA: "+p.nombre);
p.mostrartabla();
p.ordenax(p.keyF);
break;
case 7: break;
default:
System.out.println("\tOpcion no valida");
break;
}
}while(opc2!=7);
break;
case 5:do{
System.out.println("\tIngresa el nombre de la tabla que deseas llenar: ");
db.vernombresanillo();
nom=lee.readLine();
}while(db.busquedaxesferas(nom
db.eliminaresfera(db.busquedax
break;
default: System.out.println("opcion no valida");
break;
}
}while(opc1!=6);
}
}
No hay comentarios:
Publicar un comentario