Algoritmo de arbol bianrio de busqueda?

Hola amigos, necesito el argorito de un arbol binario de busqueda
lo que este arbol tiene que hacer es lo siguiente:
1) Insertar
2) Eliminar
3) Buscar
por favor me pueden ayudar me urge
de ante mano gracias...!!!

1 Respuesta

Respuesta
1
Jeje que lastima que no se puedan insertar archivos.
Lo que pides no es facil
Pero tampoco es cosa del otro mundo.
Te paso algo que hice yo espero que te sirva y veas como funciona suerte.
import java.util.Scanner;
////********ESTE ARCHIVO GUARDALO COMO 'Arbol.java'***********\\\\\\\\\\\\\\
class NodoArbol
{
public NodoArbol SubIzq;
public NodoArbol SubDer;
public Object Info;
public NodoArbol(Object d)
{
Info=d;
}
}
public class Arbol 
{
private NodoArbol Raiz;
public NodoArbol Dr;
public Arbol() 
{
Raiz=Dr=null;
}
static Scanner lee=new Scanner(System.in);
public boolean Actualiza(NodoArbol r)
{
if(r==null)
return false;
Raiz=null;
return true;
}
public NodoArbol Dame_Raiz()
{
return Raiz;
}
public void Asigna_Raiz(NodoArbol R)
{
Raiz=R;
}
public boolean Todos(NodoArbol R)
{
if(R==null)
return false;
R=null;
return true;
}
public boolean Inserta(NodoArbol R, Dato D)
{
if(D.Clave<((Dato)R.Info).Clave)
{
if(R.SubIzq==null)
{
NodoArbol Nuevo=new NodoArbol(D);
R.SubIzq=Nuevo;
return true;
}
else
return Inserta(R.SubIzq,D);
}
else if(D.Clave>((Dato)R.Info).Clave)
{
if(R.SubDer==null)
{
NodoArbol Nuevo=new NodoArbol(D);
R.SubDer=Nuevo;
return true;
}
else
return Inserta(R.SubDer,D);
}
else
return false;
}
//*******************************************************************************************/*
public boolean RetiraArbol(NodoArbol R, Dato D)
{
boolean b=true;
NodoArbol Ant=null;
while(R!=null)
{
if(D.Clave<((Dato)R.Info).Clave)
{
Ant=R;
R=R.SubIzq;
b=false;
}
else if(D.Clave>((Dato)R.Info).Clave)
{
Ant=R;
R=R.SubDer;
b=true;
}
else
break;
}
if(R==null)
{
System.out.println("NO SE ENCUENTRA EL NUMERO");
return false;
}
Dr=R;
if(R.SubDer!=null && R.SubIzq!=null)//dos hijos
{
//Buscar el nodo mas pequeño del SubDerecho
NodoArbol Temp=R.SubDer;
NodoArbol Aux=R;
boolean RamaIzq=false;
while(Temp.SubIzq!=null)
{
Aux=Temp;
Temp=Temp.SubIzq;
RamaIzq=true;
}
R.Info=Temp.Info;
if(RamaIzq)
{
Aux.SubIzq=Temp.SubDer;
}
else
{
Aux.SubDer=Temp.SubDer;
}
}
else
{
if(R==Raiz)//Borrar la raiz
{
if(R.SubIzq==null)
Raiz=R.SubDer;
else if(R.SubDer==null)
Raiz=R.SubIzq;
}
else if(R.SubIzq==null)//No hay por la izquierda
{
if(b)
Ant.SubDer=R.SubDer;
else
Ant.SubIzq=R.SubDer;
}
else if(R.SubDer==null)//No hay por la derecha
{
if(b)
Ant.SubDer=R.SubIzq;
else
Ant.SubIzq=R.SubDer;
}
}
return true;
}
}
////********ESTE ARCHIVO GUARDALO COMO 'Dato.java'***********\\\\\\\\\\\\\\
import java.util.*;
class Dato
{
public int Clave;
public Vector [] Vec=new Vector[12];
public String [] Mes={"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto",
"Septiembre","Octubre","Noviembre","Diciembre"};
public Dato(int Clave)
{
this.Clave=Clave;
for(int i=0;i<12;i++)
{
Vec=new Vector();
}
}
}
class Vector
{
static Random r=new Random();
public int NumVentas;
public float Importe;
//private int num;
//private float c;
public Vector()
{
NumVentas=0;//r.nextInt(25)+1;
//num=r.nextInt(15000)+500;
//c=(float)num;
Importe=0;//r.nextFloat()+c;
}
}
////********ESTE ARCHIVO GUARDALO COMO 'Informe.java'***********\\\\\\\\\\\\\\
import java.util.*;
public class Informe 
{
static Scanner lee=new Scanner(System.in);
static Random r=new Random();
public static void EnOrden(NodoArbol aux)//Imprimir en orden
{
if(aux==null)
return;
EnOrden(aux.SubIzq);
System.out.println("\t\t"+((Dato)aux.Info).Clave);
EnOrden(aux.SubDer);
}
public static NodoArbol Busqueda(NodoArbol aux, int n)//Devuelve el nodo encontrado en la busqueda
{
while(aux!=null)
{
if(n==((Dato)aux.Info).Clave)
{
return aux;
}
else if(n>((Dato)aux.Info).Clave)
aux=aux.SubDer;
else 
aux=aux.SubIzq;
}
return null;
}
public static float MetodoFlotante(NodoArbol aux)//Importe anual.
{
float a=0.f;
for(int i=0;i<12;i++)
{
a=a+((Dato)aux.Info).Vec.Importe;
}
return a;
}
public static void Metodo1(Arbol obj)//Insertar claves
{
boolean b;
System.out.println("\nInserte una clave entre el 1 y el 100");
System.out.print("\n\t\tclave :  ");
while(true)
{
b=true;
int c=lee.nextInt();
if(c<=0 || c>100)
{
System.err.println("Solo numeros del 1 al 100");
b=false;
}
else if(obj.Dame_Raiz()==null)
obj.Asigna_Raiz(new NodoArbol(new Dato(c)));
else if(!(obj.Inserta(obj.Dame_Raiz(), new Dato(c))))
{
System.err.println("\n\t!!Error . . . > Intente con otra clave ");
b=false;
}
if(b)
return;
}
}
public static void Metodo2(Arbol obj)//Registrar ventas
{
NodoArbol aux;
System.out.println("Inserte el cliente para registrar las ventas");
System.out.println("\tClaves posibles a buscar : ");
EnOrden(obj. Dame_Raiz());//Impresion de prueba para no cometer un error humano al buscar clave
System.out.print("\n\t\tInserte la clave : ");
int n=lee.nextInt();
if(Busqueda(obj.Dame_Raiz(),n)==null)
System.err.println("la clave "+ n +" aun no se a insertado");
else

System.out.print("\t\tinserta el mes del cliente  "+n+"  :  ");
int m=lee.nextInt();
m=m-1;
if(m<0 || m>=12)
{
System.err.println("!!ERROR..El mes solicitado no existe");
return;
}
aux=Busqueda(obj.Dame_Raiz(),n);
System.out.println("\t\tMes Solicitado : "+((Dato)aux.Info).Mes[m]);
System.out.print("\t\tNumero de ventas  ");
((Dato)aux.Info).Vec[m].NumVentas=lee.nextInt();
System.out.print("\t\tImporte de este mes ");
((Dato)aux.Info).Vec[m].Importe=lee.nextFloat();
}
}
public static void Metodo3(Arbol obj)//Cancelar 
{
int n,m;float x,y;int op;
System.out.println("Posibles claves a buscar ");
EnOrden(obj.Dame_Raiz());
System.out.println("Ingrese la clave : ");
n=lee.nextInt();
NodoArbol aux;
if((Busqueda(obj.Dame_Raiz(),n)==null))
{System.out.println("No se encontro la clave");
return;
}
System.out.println("Cancelar ventas anual........  _  1");
System.out.println("Cancelar venta de un mes....   _  2");
System.out.println("Cancelar una venta...........  _  3");
System.out.print("opcion : ");
op=lee.nextInt();
if(op==1)
{
aux=Busqueda(obj.Dame_Raiz(),n);
for(int i=0;i<12;i++)
{
((Dato)aux.Info).Vec.Importe=0.f;
((Dato)aux.Info).Vec.NumVentas=0;
}
}
else if(op==2)
{
aux=Busqueda(obj.Dame_Raiz(),n);
System.out.print("Cancelar venta del mes: ");
m=lee.nextInt();
m=m-1;
if(m<0 || m>=12)
{
System.err.println("!!ERROR..El mes solicitado no existe");
return;
}
System.out.println("\t\tMes Solicitado : "+((Dato)aux.Info).Mes[m]);
if(((Dato)aux.Info).Vec[m].Importe == 0)
return;
((Dato)aux.Info).Vec[m].Importe   = 0;
((Dato)aux.Info).Vec[m].NumVentas = 0;
}
else if(op==3)
{
aux=Busqueda(obj.Dame_Raiz(),n);
System.out.println("Ingrese el mes : ");
m=lee.nextInt();
m=m-1;
if(m<0 || m>=12)//si no existe el mes volver al menu
{
System.err.println("!!ERROR..El mes solicitado no existe");
return;
}
if(((Dato)aux.Info).Vec[m].Importe == 0) //si el importe se encuentra en 0 no se cambiara nada
return;
((Dato)aux.Info).Vec[m].NumVentas=((Dato)aux.Info).Vec[m].NumVentas-1;
System.out.println("Importe a cancelar : ");
x=lee.nextInt();
y=((Dato)aux.Info).Vec[m].Importe-x;
if(y<0)//Si da menor que 0 no se puede restar ese importe
return;
((Dato)aux.Info).Vec[m].Importe=y;
}
}
public static void Metodo4(Arbol obj)//Dar de baja un vendedor
{
System.out.println("Posibles Claves : ");
EnOrden(obj.Dame_Raiz());
System.out.println("\nInserte el numero de clave del cliente a retirar");
int n=lee.nextInt();
NodoArbol r=obj.Dame_Raiz();
if(!(obj.RetiraArbol(r,new Dato(n))))
System.out.println("El cliente no existe");
else
System.out.println("Cliente eliminado exitosamente....");
}
public static void Metodo5(NodoArbol aux,Arbol obj)//Eliminar vendedores < 90,000
{
if(aux==null)
return;
Metodo5(aux.SubIzq,obj);
float valor=MetodoFlotante(aux);
if(valor<90000.0)
{
int n=((Dato)aux.Info).Clave;
obj.RetiraArbol(obj.Dame_Raiz(),new Dato(n));
}
Metodo5(aux.SubDer,obj);
}
public static void main(String[] args)
{
int opcion;
Arbol obj=new Arbol();
while(true)
{
System.out.println("\n\n\n\t\tSELECCIONE UNA OPCION\n");
System.out.println("  1 . - Eliminar todas las claves ");
System.out.println("  2 . - Registrar vendedor");
System.out.println("  3 . - Registrar ventas");
System.out.println("  4 . - Cancelar venta");
System.out.println("  5 . - Dar de baja");
System.out.println("  6 . - Eliminar vendedores con importe menor que 90,000.000");
System.out.println("  7 . - Reportes");
System.out.println("  0 . - Salir de la aplicacion ");
System.out.print("\n\t\tOpcion : ");
opcion=lee.nextInt();
switch(opcion)
{
case 0:
System.out.println("..\n..\n..  Saliendo de la aplicacion");
return;
case 1:
System.out.println("Esta seguro que desea eliminar todas las claves ? \n1 . Si\t\t2 . No ");
int v=lee.nextInt();
if(v>=2)
continue;
obj.Actualiza(obj.Dame_Raiz());
break;
case 2:
Metodo1(obj);//Insertar clave del vendedor
break;
case 3:
Metodo2(obj);//Registras ventas
break;
case 4:
Metodo3(obj);//Cancelar 
break;
case 5:
Metodo4(obj);
break;
case 6:
Metodo5(obj.Dame_Raiz(),obj);//Eliminar ventas menor que 90,000.00
System.out.println("\nSe han eliminado las claves menor que 90,000.00");
break;
case 7:
Reporte(obj);
break;
}
}//Finaliza el ciclo
}//Fin del menu
public static void Reporte(Arbol obj)
{
while(true)
{
System.out.println("\n\n\n\t\tSELECCIONE UNA OPCION DE REPORTE\n");
System.out.println("  1 . - Imprimir reporte de un vendedor en todo el año");
System.out.println("  2 . - Vendedores que mas vendieron por mes");
System.out.println("  3 . - Claves disponibles a registrar");
System.out.println("  4 . - Claves ocupadas");
System.out.println("  0 . - Volver al menu principal");
System.out.print("\n\t\tOpcion : ");
int op=lee.nextInt();
switch (op)
{
case 0:
return;
case 1:
if(obj.Dame_Raiz()==null)
{
System.out.println("Aun no hay claves insertadas");
continue;
}
MetodoRep1(obj);//Reporte de un vendedor
break;
case 2:
if(obj.Dame_Raiz()==null)
{
System.out.println("Aun no hay claves insertadas");
continue;
}
MetodoRep2(obj);//Vendedores que mas vendieron por mes
break;
case 3:
MetodoRep3(obj);//Claves disponibles
break;
case 4:
if(obj.Dame_Raiz()==null)
{
System.out.println("Aun no hay claves insertadas");
continue;
}
EnOrden(obj.Dame_Raiz());//Imprimir claves
break;
}
}
}
public static void MetodoRep1(Arbol obj)
{
NodoArbol aux=obj.Dame_Raiz();
System.out.println("****Claves posibles a buscar : ");
EnOrden(aux);
System.out.println("Clave del vendedor: ");
int n=lee.nextInt();
if((Busqueda(obj.Dame_Raiz(),n)==null))
{
System.out.println("No se encuentra la clave solicitada");
return;
}
aux=Busqueda(obj.Dame_Raiz(),n);
System.out.println("\t\tClave : "+n+" \n");
System.out.println("__________________________________________________");
System.out.println("|   mes      |   numero de ventas   |    importe  |");
String m="";int numv;float imp; int VenTotal=0;float ImpTotal=0.f;
for(int i=0;i<12;i++)
{
m=((Dato)aux.Info).Mes;
m=(Diez(m));//Hace de diez caracteres solo para mejorar la impresion
numv = ((Dato)aux.Info).Vec.NumVentas;
imp  = ((Dato)aux.Info).Vec.Importe  ;
System.out.println("  "+m+"\t\t"+numv+"\t\t   "+imp);
VenTotal=VenTotal+numv;
ImpTotal=ImpTotal+imp;
}
System.out.println("___________________________________");
System.out.println("|  Venta anual   |   Importe anual  |");
System.out.println("  "+VenTotal+" \t\t\t "+ImpTotal);
}
public static void MetodoRep2(Arbol obj)
{
int a,b;String c;boolean fv=false;
VentaMayor(obj);//El de la izq es el mayor al comienzo
int M=0;int n=0;
for(int i=0;i<12;i++)
{
M=((Dato)Mayor.Info).Vec.NumVentas;
n=((Dato)Mayor.Info).Clave;
if(M==0)
{
fv=true;
}
else
{
fv=false;
break;
}
}
if(fv)
{
System.out.println("Nadie a generado ventas ni ganancias. ");
return;
}
System.out.println("___________________________________________________________");
System.out.println("  Mes     ||       Clave       ||     Numero de Ventas     ");
Arbol objAux=new Arbol();
boolean boleano=false;
for(int i=0;i<12;i++)
{
a=((Dato)Mayor.Info).Clave;
b=((Dato)Mayor.Info).Vec.NumVentas;
c=((Dato)Mayor.Info).Mes;
if(b>=M)
{
M=b;
boleano=true;
if(objAux.Dame_Raiz()==null)
objAux.Asigna_Raiz(Mayor);
else
objAux.Inserta(objAux.Dame_Raiz(), new Dato(a));
}
if(b==0)
System.out.println(Diez(c)+"\tNinguno\t\t\t"+b);
else
System.out.println(Diez(c)+"  \t"+a+" \t\t\t "+b);
}
if(!boleano)
objAux.Asigna_Raiz(new NodoArbol(new Dato(n)));
System.out.println("la venta mas alta fue de ................  "+M);
System.out.println("del o los vendedores con las claves ..... ");
EnOrden(objAux.Dame_Raiz());
objAux.Actualiza(objAux.Dame_Raiz());
}
public static void MetodoRep3(Arbol obj)//Ciclos    Falso_Verdadero
{//hacer falso todos los numeros 1-100
for(int i=0;i<arreglo.length;i++)
{
arreglo=false;
}
Encontrando(obj.Dame_Raiz());
System.out.println("\n\t\t...Claves disponibles");
//en la busqueda los que existen seran verdaderos
for(int j=0;j<arreglo.length;j++)
{
if(!(arreglo[j]))
System.out.println("Disponible :  " + (j+1));
}
}
public static NodoArbol Mayor []=new NodoArbol [12];
public static void VentaMayor(Arbol obj)//El de la izquierda es el mayor en todos los meses
{
NodoArbol aux=obj.Dame_Raiz();
while(aux.SubIzq!=null)
{
aux=aux.SubIzq;
}
for(int i=0;i<12;i++)
{
if(((Dato)aux.Info).Clave==0)
{
((Dato)Mayor.Info).Vec.NumVentas=-1;
Mayor=aux;
}
else
Mayor=aux;
}
VentaAlta(obj.Dame_Raiz());
}
public static void VentaAlta(NodoArbol aux)//Una sola busqueda seleccionando el mayor
{
if(aux==null)
return;
VentaAlta(aux.SubIzq);
for(int i=0;i<12;i++)
{
if( ((Dato)aux.Info).Vec.NumVentas  >  ((Dato)Mayor.Info).Vec.NumVentas)
{
Mayor=aux;
}
}
VentaAlta(aux.SubDer);
}
static boolean [] arreglo=new boolean[100];
public static void Encontrando(NodoArbol aux)//Encontrar Falso _ Verdadero
{
if(aux==null)
return;
Encontrando(aux.SubIzq);
int valor=((Dato)aux.Info).Clave-1;
arreglo[valor]=true;
Encontrando(aux.SubDer);
}
public static String Diez(String n)//Solo para vista de la impresion de los meses
{
String m="";int valor=n.length();
while(valor<10)
{
m=m+" ";
valor++;
}
m=n+m;
return m;
}
}
import java.util.Scanner;
////********ESTE ARCHIVO GUARDALO COMO 'Arbol.java'***********\\\\\\\\\\\\\\
class NodoArbol{public NodoArbol SubIzq;public NodoArbol SubDer;public Object Info;public NodoArbol(Object d){Info=d;}}public class Arbol {private NodoArbol Raiz;public NodoArbol Dr;public Arbol() {Raiz=Dr=null;}static Scanner lee=new Scanner(System.in);public boolean Actualiza(NodoArbol r){if(r==null)return false;Raiz=null;return true;}public NodoArbol Dame_Raiz(){return Raiz;}public void Asigna_Raiz(NodoArbol R){Raiz=R;}public boolean Todos(NodoArbol R){if(R==null)return false;R=null;return true;}public boolean Inserta(NodoArbol R, Dato D){if(D.Clave<((Dato)R.Info).Clave){if(R.SubIzq==null){NodoArbol Nuevo=new NodoArbol(D);R.SubIzq=Nuevo;return true;}elsereturn Inserta(R.SubIzq,D);}else if(D.Clave>((Dato)R.Info).Clave){if(R.SubDer==null){NodoArbol Nuevo=new NodoArbol(D);R.SubDer=Nuevo;return true;}elsereturn Inserta(R.SubDer,D);}elsereturn false;}//*******************************************************************************************/*public boolean RetiraArbol(NodoArbol R, Dato D){boolean b=true;NodoArbol Ant=null;while(R!=null){if(D.Clave<((Dato)R.Info).Clave){Ant=R;R=R.SubIzq;b=false;}else if(D.Clave>((Dato)R.Info).Clave){Ant=R;R=R.SubDer;b=true;}elsebreak;}if(R==null){System.out.println("NO SE ENCUENTRA EL NUMERO");return false;}Dr=R;if(R.SubDer!=null && R.SubIzq!=null)//dos hijos{//Buscar el nodo mas pequeño del SubDerechoNodoArbol Temp=R.SubDer;NodoArbol Aux=R;boolean RamaIzq=false;while(Temp.SubIzq!=null){Aux=Temp;Temp=Temp.SubIzq;RamaIzq=true;}R.Info=Temp.Info;if(RamaIzq){Aux.SubIzq=Temp.SubDer;}else{Aux.SubDer=Temp.SubDer;}}else{if(R==Raiz)//Borrar la raiz{if(R.SubIzq==null)Raiz=R.SubDer;else if(R.SubDer==null)Raiz=R.SubIzq;}else if(R.SubIzq==null)//No hay por la izquierda{if(b)Ant.SubDer=R.SubDer;elseAnt.SubIzq=R.SubDer;}else if(R.SubDer==null)//No hay por la derecha{if(b)Ant.SubDer=R.SubIzq;elseAnt.SubIzq=R.SubDer;}}return true;}}
////********ESTE ARCHIVO GUARDALO COMO 'Dato.java'***********\\\\\\\\\\\\\\
import java.util.*;
class Dato{public int Clave;public Vector [] Vec=new Vector[12];public String [] Mes={"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};public Dato(int Clave){this.Clave=Clave;for(int i=0;i<12;i++){Vec=new Vector();
}}}class Vector{static Random r=new Random();public int NumVentas;public float Importe;//private int num;//private float c;public Vector(){NumVentas=0;//r.nextInt(25)+1;//num=r.nextInt(15000)+500;//c=(float)num;Importe=0;//r.nextFloat()+c;}}
////********ESTE ARCHIVO GUARDALO COMO 'Informe.java'***********\\\\\\\\\\\\\\
import java.util.*;public class Informe {static Scanner lee=new Scanner(System.in);static Random r=new Random();public static void EnOrden(NodoArbol aux)//Imprimir en orden{if(aux==null)return;EnOrden(aux.SubIzq);System.out.println("\t\t"+((Dato)aux.Info).Clave);EnOrden(aux.SubDer);}public static NodoArbol Busqueda(NodoArbol aux, int n)//Devuelve el nodo encontrado en la busqueda{while(aux!=null){if(n==((Dato)aux.Info).Clave){return aux;}else if(n>((Dato)aux.Info).Clave)aux=aux.SubDer;else aux=aux.SubIzq;}return null;}public static float MetodoFlotante(NodoArbol aux)//Importe anual.{float a=0.f;for(int i=0;i<12;i++){a=a+((Dato)aux.Info).Vec.Importe;}return a;}public static void Metodo1(Arbol obj)//Insertar claves{boolean b;System.out.println("\nInserte una clave entre el 1 y el 100");System.out.print("\n\t\tclave :  ");while(true){b=true;int c=lee.nextInt();if(c<=0 || c>100){System.err.println("Solo numeros del 1 al 100");b=false;}else if(obj.Dame_Raiz()==null)obj.Asigna_Raiz(new NodoArbol(new Dato(c)));else if(!(obj.Inserta(obj.Dame_Raiz(), new Dato(c)))){System.err.println("\n\t!!Error . . . > Intente con otra clave ");b=false;}if(b)return;}}public static void Metodo2(Arbol obj)//Registrar ventas{NodoArbol aux;System.out.println("Inserte el cliente para registrar las ventas");System.out.println("\tClaves posibles a buscar : ");EnOrden(obj.Dame_Raiz());//Impresion de prueba para no cometer un error humano al buscar claveSystem.out.print("\n\t\tInserte la clave : ");int n=lee.nextInt();if(Busqueda(obj.Dame_Raiz(),n)==null)System.err.println("la clave "+ n +" aun no se a insertado");else{ System.out.print("\t\tinserta el mes del cliente  "+n+"  :  ");int m=lee.nextInt();m=m-1;if(m<0 || m>=12){System.err.println("!!ERROR..El mes solicitado no existe");return;}aux=Busqueda(obj.Dame_Raiz(),n);System.out.println("\t\tMes Solicitado : "+((Dato)aux.Info).Mes[m]);System.out.print("\t\tNumero de ventas  ");((Dato)aux.Info).Vec[m].NumVentas=lee.nextInt();System.out.print("\t\tImporte de este mes ");((Dato)aux.Info).Vec[m].Importe=lee.nextFloat();}}public static void Metodo3(Arbol obj)//Cancelar {int n,m;float x,y;int op;System.out.println("Posibles claves a buscar ");EnOrden(obj.Dame_Raiz());System.out.println("Ingrese la clave : ");n=lee.nextInt();NodoArbol aux;if((Busqueda(obj.Dame_Raiz(),n)==null)){System.out.println("No se encontro la clave");return;}System.out.println("Cancelar ventas anual........  _  1");System.out.println("Cancelar venta de un mes....   _  2");System.out.println("Cancelar una venta...........  _  3");System.out.print("opcion : ");op=lee.nextInt();if(op==1){aux=Busqueda(obj.Dame_Raiz(),n);for(int i=0;i<12;i++){((Dato)aux.Info).Vec.Importe=0.f;((Dato)aux.Info).Vec.NumVentas=0;}}else if(op==2){aux=Busqueda(obj.Dame_Raiz(),n);System.out.print("Cancelar venta del mes: ");m=lee.nextInt();m=m-1;if(m<0 || m>=12){System.err.println("!!ERROR..El mes solicitado no existe");return;}System.out.println("\t\tMes Solicitado : "+((Dato)aux.Info).Mes[m]);if(((Dato)aux.Info).Vec[m].Importe == 0)return;((Dato)aux.Info).Vec[m].Importe   = 0;((Dato)aux.Info).Vec[m].NumVentas = 0;}else if(op==3){aux=Busqueda(obj.Dame_Raiz(),n);System.out.println("Ingrese el mes : ");m=lee.nextInt();m=m-1;if(m<0 || m>=12)//si no existe el mes volver al menu{System.err.println("!!ERROR..El mes solicitado no existe");return;}if(((Dato)aux.Info).Vec[m].Importe == 0) //si el importe se encuentra en 0 no se cambiara nadareturn;((Dato)aux.Info).Vec[m].NumVentas=((Dato)aux.Info).Vec[m].NumVentas-1;System.out.println("Importe a cancelar : ");x=lee.nextInt();y=((Dato)aux.Info).Vec[m].Importe-x;if(y<0)//Si da menor que 0 no se puede restar ese importereturn;((Dato)aux.Info).Vec[m].Importe=y;}}public static void Metodo4(Arbol obj)//Dar de baja un vendedor{System.out.println("Posibles Claves : ");EnOrden(obj.Dame_Raiz());System.out.println("\nInserte el numero de clave del cliente a retirar");int n=lee.nextInt();NodoArbol r=obj.Dame_Raiz();if(!(obj.RetiraArbol(r,new Dato(n))))System.out.println("El cliente no existe");elseSystem.out.println("Cliente eliminado exitosamente....");}public static void Metodo5(NodoArbol aux,Arbol obj)//Eliminar vendedores < 90,000{if(aux==null)return;Metodo5(aux.SubIzq,obj);float valor=MetodoFlotante(aux);if(valor<90000.0){int n=((Dato)aux.Info).Clave;obj.RetiraArbol(obj.Dame_Raiz(),new Dato(n));}Metodo5(aux.SubDer,obj);}public static void main(String[] args){int opcion;Arbol obj=new Arbol();while(true){System.out.println("\n\n\n\t\tSELECCIONE UNA OPCION\n");System.out.println("  1 . - Eliminar todas las claves ");System.out.println("  2 . - Registrar vendedor");System.out.println("  3 . - Registrar ventas");System.out.println("  4 . - Cancelar venta");System.out.println("  5 . - Dar de baja");System.out.println("  6 . - Eliminar vendedores con importe menor que 90,000.000");System.out.println("  7 . - Reportes");System.out.println("  0 . - Salir de la aplicacion ");System.out.print("\n\t\tOpcion : ");opcion=lee.nextInt();switch(opcion){case 0:System.out.println("..\n..\n..  Saliendo de la aplicacion");return;case 1:System.out.println("Esta seguro que desea eliminar todas las claves ? \n1 . Si\t\t2 . No ");int v=lee.nextInt();if(v>=2)continue;obj.Actualiza(obj.Dame_Raiz());break;case 2:Metodo1(obj);//Insertar clave del vendedorbreak;case 3:Metodo2(obj);//Registras ventasbreak;case 4:Metodo3(obj);//Cancelar break;case 5:Metodo4(obj);break;case 6:Metodo5(obj.Dame_Raiz(),obj);//Eliminar ventas menor que 90,000.00System.out.println("\nSe han eliminado las claves menor que 90,000.00");break;case 7:Reporte(obj);break;}}//Finaliza el ciclo}//Fin del menupublic static void Reporte(Arbol obj){while(true){System.out.println("\n\n\n\t\tSELECCIONE UNA OPCION DE REPORTE\n");System.out.println("  1 . - Imprimir reporte de un vendedor en todo el año");System.out.println("  2 . - Vendedores que mas vendieron por mes");System.out.println("  3 . - Claves disponibles a registrar");System.out.println("  4 . - Claves ocupadas");System.out.println("  0 . - Volver al menu principal");System.out.print("\n\t\tOpcion : ");int op=lee.nextInt();switch (op){case 0:return;case 1:if(obj.Dame_Raiz()==null){System.out.println("Aun no hay claves insertadas");continue;}MetodoRep1(obj);//Reporte de un vendedorbreak;case 2:if(obj.Dame_Raiz()==null){System.out.println("Aun no hay claves insertadas");continue;}MetodoRep2(obj);//Vendedores que mas vendieron por mesbreak;case 3:MetodoRep3(obj);//Claves disponiblesbreak;case 4:if(obj.Dame_Raiz()==null){System.out.println("Aun no hay claves insertadas");continue;}EnOrden(obj.Dame_Raiz());//Imprimir clavesbreak;}}}public static void MetodoRep1(Arbol obj){NodoArbol aux=obj.Dame_Raiz();System.out.println("****Claves posibles a buscar : ");EnOrden(aux);System.out.println("Clave del vendedor: ");int n=lee.nextInt();if((Busqueda(obj.Dame_Raiz(),n)==null)){System.out.println("No se encuentra la clave solicitada");return;}aux=Busqueda(obj.Dame_Raiz(),n);System.out.println("\t\tClave : "+n+" \n");System.out.println("__________________________________________________");System.out.println("|   mes      |   numero de ventas   |    importe  |");String m="";int numv;float imp; int VenTotal=0;float ImpTotal=0.f;for(int i=0;i<12;i++){m=((Dato)aux.Info).Mes;m=(Diez(m));//Hace de diez caracteres solo para mejorar la impresionnumv = ((Dato)aux.Info).Vec.NumVentas;imp  = ((Dato)aux.Info).Vec.Importe  ;System.out.println("  "+m+"\t\t"+numv+"\t\t   "+imp);VenTotal=VenTotal+numv;ImpTotal=ImpTotal+imp;}System.out.println("___________________________________");System.out.println("|  Venta anual   |   Importe anual  |");System.out.println("  "+VenTotal+" \t\t\t "+ImpTotal);}public static void MetodoRep2(Arbol obj){int a,b;String c;boolean fv=false;VentaMayor(obj);//El de la izq es el mayor al comienzoint M=0;int n=0;for(int i=0;i<12;i++){M=((Dato)Mayor.Info).Vec.NumVentas;n=((Dato)Mayor.Info).Clave;if(M==0){fv=true;}else{fv=false;break;}}if(fv){System.out.println("Nadie a generado ventas ni ganancias. ");return;}System.out.println("___________________________________________________________");System.out.println("  Mes     ||       Clave       ||     Numero de Ventas     ");Arbol objAux=new Arbol();boolean boleano=false;for(int i=0;i<12;i++){a=((Dato)Mayor.Info).Clave;b=((Dato)Mayor.Info).Vec.NumVentas;c=((Dato)Mayor.Info).Mes;if(b>=M){M=b;boleano=true;if(objAux.Dame_Raiz()==null)objAux.Asigna_Raiz(Mayor);elseobjAux.Inserta(objAux.Dame_Raiz(), new Dato(a));}if(b==0)System.out.println(Diez(c)+"\tNinguno\t\t\t"+b);elseSystem.out.println(Diez(c)+"  \t"+a+" \t\t\t "+b);}if(!boleano)objAux.Asigna_Raiz(new NodoArbol(new Dato(n)));
System.out.println("la venta mas alta fue de ................  "+M);System.out.println("del o los vendedores con las claves ..... ");EnOrden(objAux.Dame_Raiz());objAux.Actualiza(objAux.Dame_Raiz());}public static void MetodoRep3(Arbol obj)//Ciclos    Falso_Verdadero{//hacer falso todos los numeros 1-100for(int i=0;i<arreglo.length;i++){arreglo=false;}Encontrando(obj.Dame_Raiz());System.out.println("\n\t\t...Claves disponibles");//en la busqueda los que existen seran verdaderosfor(int j=0;j<arreglo.length;j++){if(!(arreglo[j]))System.out.println("Disponible :  " + (j+1));}}public static NodoArbol Mayor []=new NodoArbol [12];public static void VentaMayor(Arbol obj)//El de la izquierda es el mayor en todos los meses{NodoArbol aux=obj.Dame_Raiz();while(aux.SubIzq!=null){aux=aux.SubIzq;}for(int i=0;i<12;i++){if(((Dato)aux.Info).Clave==0){((Dato)Mayor.Info).Vec.NumVentas=-1;Mayor=aux;}elseMayor=aux;}VentaAlta(obj.Dame_Raiz());}public static void VentaAlta(NodoArbol aux)//Una sola busqueda seleccionando el mayor{if(aux==null)return;VentaAlta(aux.SubIzq);for(int i=0;i<12;i++){if( ((Dato)aux.Info).Vec.NumVentas  >  ((Dato)Mayor.Info).Vec.NumVentas){Mayor=aux;}}VentaAlta(aux.SubDer);}static boolean [] arreglo=new boolean[100];public static void Encontrando(NodoArbol aux)//Encontrar Falso _ Verdadero{if(aux==null)return;Encontrando(aux.SubIzq);int valor=((Dato)aux.Info).Clave-1;arreglo[valor]=true;Encontrando(aux.SubDer);}public static String Diez(String n)//Solo para vista de la impresion de los meses{String m="";int valor=n.length();while(valor<10){m=m+" ";valor++;}m=n+m;return m;}}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas