#include<conio.h>
#include<dos.h>
#include<iostream.h>
#include<math.h>
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
FILE *ar;
FILE *ar1;
FILE *ar2;
//--------------estructruras---------------------
struct cliente
{
int idcli;
char nom[20];
char ape[30];
char ced[9];
struct cliente *izq, *der;
};
struct autos
{
int idauto;
int idcli;
char marca[10];
char modelo[10];
char matricula[6];
struct autos *izq, *der;
};
struct calcular
{
int idcli;
int idauto;
int idcal;
float valor;
float iva;
float desc;
float total;
struct calcular *izq, *der;
};
//-----------funciones amigas-------------
int limpiar(cliente *a)
{
return a==NULL;
}
int hijo(cliente *a)
{
return !a->der && !a->izq;
}
int limpiar(autos *a)
{
return a==NULL;
}
int hijo(autos *a)
{
return !a->der && !a->izq;
}
int limpiar(calcular *a)
{
return a==NULL;
}
int hijo(calcular *a)
{
return !a->der && !a->izq;
}
//---------------funcion de ingresos-----------------------
void ingre_cli(cliente **a, cliente aux)
{
if(*a==NULL)
{
(*a)=new(cliente);
(*a)->idcli=aux.idcli;
strcpy((*a)->nom, aux.nom);
strcpy((*a)->ape, aux.ape);
strcpy((*a)->ced, aux.ced);
(*a)->izq=(*a)->der=NULL;
}
else if((aux.idcli) > ((*a)->idcli))
{
ingre_cli(&(*a)->der,aux);
}
else if((aux.idcli) < ((*a)->idcli))
{
ingre_cli(&(*a)->izq,aux);
}
}
void ingre_auto(autos **b, int aux)
{
if(*b == NULL)
{
(*b)=new(autos);
(*b)->idauto=aux;
printf("\nID_Cliente:\t");
scanf("%d", & (*b)->idcli);
printf("\n MODELO: ");
scanf("%s",(*b)->modelo);
printf("\n MARCA: ");
scanf("%s",(*b)->marca);
printf("\n NUMERO DE MATRICULA: ");
scanf("%s",(*b)->matricula);
(*b)->izq=(*b)->der=NULL;
}
if(aux > (*b)->idauto)
ingre_auto(&(*b)->der, aux);
if(aux < (*b)->idauto)
ingre_auto(&(*b)->izq, aux);
}
void ingre_cal(calcular **c, int aux)
{
float desc;
if(*c == NULL)
{
(*c)=new(calcular);
(*c)->idcal=aux;
printf("\nCod_cliente:\t");
scanf("%d",&(*c)->idcli);
printf("\nCod_auto:\t");
scanf("%d",&(*c)->idauto);
printf("\n VALOR DEL AUTO: %2.f");
scanf("%2.f",&(*c)->valor);
float valor=(*c)->valor;
printf("\nDESCUENTO: %2.f %");
scanf("%2.f",&desc);
float de=(*c)->desc = (((valor)*desc))/100;
float iva=(*c)->iva=((valor)-(de))*0.12;
(*c)->total=(valor-de+iva);
(*c)->izq=(*c)->der=NULL;
}
if(aux > (*c)->idcal)
ingre_cal(&(*c)->der, aux);
if(aux < (*c)->idcal)
ingre_cal(&(*c)->izq, aux);
}
//----------------funciones de insercion-------------------------
void inser_cli(cliente **p, cliente aux)
{
if(*p==NULL)
{
(*p)=new(cliente);
(*p)->idcli=aux.idcli;
strcpy((*p)->nom, aux.nom);
strcpy((*p)->ape, aux.ape);
strcpy((*p)->ced, aux.ced);
(*p)->izq=(*p)->der=NULL;
}
if(aux.idcli > (*p)->idcli)
inser_cli(&(*p)->der, aux);
if(aux.idcli < (*p)->idcli)
inser_cli(&(*p)->izq, aux);
}
void inser_auto(autos **q, autos aux)
{
if((*q)==NULL)
{
*q=new(autos);
(*q)->idauto=aux.idauto;
(*q)->idcli=aux.idcli;
strcpy((*q)->modelo, aux.modelo);
strcpy((*q)->marca, aux.marca);
strcpy((*q)->matricula, aux.matricula);
(*q)->izq=(*q)->der=NULL;
}
if(aux.idauto<(*q)->idauto)
inser_auto(&(*q)->izq, aux);
if(aux.idauto>(*q)->idauto)
inser_auto(&(*q)->der,aux);
}
void inser_cal(calcular **r, calcular aux)
{
if((*r)==NULL)
{
*r=new(calcular);
(*r)->idcal=aux.idcal;
(*r)->idauto=aux.idauto;
(*r)->idcli=aux.idcli;
(*r)->valor= aux.valor;
(*r)->iva= aux.iva;
(*r)->desc=aux.desc;
(*r)->total=aux.total;
(*r)->izq=(*r)->der=NULL;
}
else if(aux.idcal<(*r)->idcal)
inser_cal(&(*r)->izq,aux);
else if(aux.idcal>(*r)->idcal)
inser_cal(&(*r)->der,aux);
}
//--------------------funciones guardar--------------------------------------
void guar_cli(cliente *a)
{
if(a==NULL)
return;
guar_cli(a->izq);
guar_cli(a->der);
if((ar=fopen("cliente.txt", "a+b")) != NULL)
fwrite(a, sizeof(cliente), 1, ar);
fclose(ar);
}
void guar_auto(autos *b)
{
if(b==NULL)
return;
guar_auto(b->izq);
guar_auto(b->der);
if((ar1=fopen("autos.txt", "a+b")) != NULL)
fwrite(b, sizeof(autos), 1, ar1);
fclose(ar1);
}
void guar_cal(calcular *c)
{
if(c==NULL)
return;
guar_cal(c->izq);
guar_cal(c->der);
if((ar2=fopen("calcular.txt", "a+b")) != NULL)
fwrite(c, sizeof(calcular), 1, ar2);
fclose(ar2);
}
//-------------------------funciones extraer-----------------------
void extr_cli(cliente **arbol_cli)
{
cliente c;
*arbol_cli=NULL;
if((ar=fopen("cliente.txt", "rb"))==NULL)
{
return ;
}
rewind(ar);
while(!feof(ar))
{
fread(&c, sizeof(cliente), 1, ar);
inser_cli(&(*arbol_cli), c);
}
fclose(ar);
}
void extr_auto(autos **arbol_auto)
{
autos d;
*arbol_auto=NULL;
if((ar1=fopen("autos.txt","rb"))==NULL)
{
return ;
}
rewind(ar1);
while(!feof(ar1))
{
fread(&d, sizeof(autos), 1, ar1);
inser_auto(&(*arbol_auto),d);
}
fclose(ar1);
}
void extr_cal(calcular **arbol_cal)
{
calcular d;
*arbol_cal=NULL;
if((ar2=fopen("calcular.txt","rb"))==NULL)
{
return ;
}
rewind(ar2);
while(!feof(ar2))
{
fread(&d, sizeof(calcular), 1, ar2);
inser_cal(&(*arbol_cal), d);
}
fclose(ar2);
}
//--------------funciones mostrar----------------------
void mostrarcli(cliente *a,int auxa)
{
if(a==NULL)
{
printf("no existen datos de cliante para mostrar");
getch();
return;
}
mostrarcli(a->izq,auxa);
if(auxa==a->idcli)
{
printf("\n\n\n< CLIENTE >");
printf("\n\n\n NOMBRE :\t %s", a->nom);
printf("\n\n\n APELLIDO:\t %s", a->ape);
printf("\n\n\n CEDULA:\t %s", a->ced);
mostrarcli(a->der,auxa);
}
else
{
printf("\n\n\nDatos no existen...");
}
mostrarcli(a->der, auxa);
}
void mostrarauto(autos *b,int auxb)
{
if(b==NULL)
{
printf("no existen datos de cliante para mostrar");
getch();
return;
}
mostrarauto(b->izq, auxb);
mostrarauto(b->der, auxb);
if(b->idauto==auxb)
{
printf("\n\n\n< AUTOS >");
printf("\n\nID :\t %d", b->idauto);
printf("\nMODELO:\t %s", b->modelo);
printf("\nMARCA:\t %s",b->marca);
printf("\nMATRICULA:\t %s",b->matricula);
}
}
void mostrarcal(calcular *c,int auxc)
{
if(c==NULL)
{
printf("no existen datos de cliante para mostrar");
getch();
return;
}
mostrarcal(c->izq, auxc);
mostrarcal(c->der, auxc);
if(c->idcal==auxc)
{
printf("\n\n\n< VALORES >");
printf("\n\ID :\t %d", c->idcal);
printf("\nCOSTO DEL AUTO:\t %2.f", c->valor);
printf("\nDESCUENTO:\t %2.f", c->desc);
printf("\nIVA:\t %2.f", c->iva);
printf("\nTOTAL:\t %2.f",c->total);
}
}
void mostrartodo(cliente*a,autos*b,calcular*c)
{
clrscr();
if(a==NULL)
return;
printf("\n\n\n< CLIENTE >");
printf("\n\nID :\t %d", a->idcli);
printf("\n\n\n Nombre :\t %s", a->nom);
printf("\n\n\n Apellido:\t %s", a->ape);
printf("\n\n\n Cedula:\t %s", a->ced);
printf("\n\n\n< AUTO >");
printf("\n\n\nCod :\t %d", b->idauto);
printf("\n\n\nModelo:\t %s", b->modelo);
printf("\n\n\nMarca :\t %s", b->marca);
printf("\n\n\nmatricula:\t %s", b->matricula);
mostrarauto(b,a->idcli);
mostrarcal(c,b->idauto);
}
//------------------funciones modificar-------------------------------------
void modificarcli(cliente *a, int aux)
{
clrscr();
int opcli=0;
char nuevo[20];
if(a!=NULL)
{
modificarcli(a->izq, aux);
if(aux==a->idcli)
{
printf("\n\n\n\n\n < ESCOJA EL DATO DEL CLIENTE A MODIFICAR:>");
printf("\n\n\n<1> NOMBRE");
printf("\n\n\n<2> APELLIDO");
printf("\n\n\n<3> CEDULA");
printf("\n\n\n opcion:\t");
do
{
opcli=getch();
}while(opcli<49 || opcli >51);
switch(opcli)
{
case 49:
printf("\n\n INGRESE NUEVO NOMBRE:\t");
scanf("%s", nuevo);
strcpy(a->nom, nuevo);
getch();
break;
case 50:
printf("\n\n INGRESE NUEVO APELLIDO:\t");
scanf("%s", nuevo);
strcpy(a->ape, nuevo);
getch();
break;
case 51:
printf("\n\n INGRESE NUEVA CEDULA:\t");
scanf("%s", nuevo);
strcpy(a->ced, nuevo);
getch();
break;
}
}
modificarcli(a->der, aux);
}
if((ar=fopen("cliente.txt","wb")) != NULL)
guar_cli(a);
}
void modificarauto(autos *b, int aux)
{
clrscr();
int opauto=0;
char nuevo[20];
if(b!=NULL)
{
modificarauto(b->izq, aux);
if(aux==b->idauto)
{
printf("\n\n\n < QUE DATO DEA MODIFICAR >");
printf("\n\nID :\t %d", b->idauto);
printf("\n<1> MODELO");
printf("\n<2> MARCA");
printf("\n<3> MATRICULA");
printf("\n\n OPCION:\t");
do{
opauto=getch();
}while(opauto<49 || opauto >51);
switch(opauto)
{
case 49:
printf("\n\n INGRESE NUEVO MODELO:\t");
scanf("%s", nuevo);
strcpy(b->modelo, nuevo);
getch();
break;
case 50:
printf("\n\n INGRESE NUEVA MARCA:\t");
scanf("%s", nuevo);
strcpy(b->marca, nuevo);
break;
case 51:
printf("\n\n INGRESE NUEVA MATRICULA DEL AUTO:\t");
scanf("%s", nuevo);
strcpy(b->matricula, nuevo);
break;
}
}
modificarauto(b->der, aux);
}
if((ar1=fopen("autos.txt","wb")) != NULL)
guar_auto(b);
}
void modificarcal(calcular *c, int aux)
{
clrscr();
int opcal=0;
float nuevo;
if(c!=NULL)
{
modificarcal(c->izq, aux);
if(aux==c->idcal)
{
printf("\n\n\n < ESCOJA EL DATO A MODIFICAR >");
printf("\n<1> VALOR DEL AUTO");
printf("\n<2> DESCUENTO");
printf("\n\n OPCION:\t");
do{
opcal=getch();
}while(opcal<49 || opcal >50);
switch(opcal)
{
case 49:
printf("\n\n INGRESE EL NUEVO VALOR:\t");
scanf("%2.f", nuevo);
c->valor=nuevo;
break;
case 50:
printf("\n\n INGRESE EL NUEVO DESCUENTO:\t");
scanf("%2.f", nuevo);
c->desc=nuevo ;
break;
}
}
modificarcal(c->der, aux);
}
if((ar2=fopen("calcular.txt","wb")) != NULL)
guar_cal(c);
}
//-----------------funciones eliminar---------------------------
void eliminarcli(cliente **a, int dato)
{
if(!(*a))
{
printf("\n\n\nCliente no existe");
getch();
}
if(dato < (*a)->idcli)
eliminarcli(&(*a)->izq, dato);
if(dato > (*a)->idcli)
eliminarcli(&(*a)->der, dato);
else
{
cliente *actual=NULL;
actual=*a;
if(actual->izq==NULL)
*a=actual->der;
if(actual->der==NULL)
*a=actual->izq;
else
{
cliente *padre=NULL;
cliente *nodo=NULL;
padre=actual;
nodo=actual->izq;
while(nodo->der)
{
padre=nodo;
nodo=nodo->der;
}
actual->idcli=nodo->idcli;
if(padre==actual)
padre->izq=nodo->izq;
else
padre->der=nodo->der;
actual=nodo;
}
delete(actual);
printf("\n\n\n\n\n\n\nDato eliminado......");
getch();
}
if((ar=fopen("clientes.txt","wb")) != NULL)
guar_cli(*a);
}
void eliminarauto(autos **b, int dato)
{
if(!(*b))
{
printf("\n\n\nAuto no existe....");
getch();
}
if(dato < (*b)->idauto)
eliminarauto(&(*b)->izq, dato);
if(dato > (*b)->idauto)
eliminarauto(&(*b)->der, dato);
else
{
autos *actual=NULL;
actual=*b;
if(actual->izq==NULL)
*b=actual->der;
if(actual->der==NULL)
*b=actual->izq;
else
{
autos *padre=NULL;
autos *nodo=NULL;
padre=actual;
nodo=actual->izq;
while(nodo->der)
{
padre=nodo;
nodo=nodo->der;
}
actual->idauto=nodo->idauto;
if(padre==actual)
padre->izq=nodo->izq;
else
padre->der=nodo->der;
actual=nodo;
}
delete(actual);
printf("\n\n\n\n\n\n\nDato eliminado......");
getch();
}
if((ar1=fopen("autos.txt", "wb")) != NULL)
guar_auto(*b);
}
void eliminarcal(calcular **b, int dato)
{
if(!(*b))
{
printf("\n\n\nValores no existe....");
getch();
}
else if(dato < (*b)->idcal)
eliminarcal(&(*b)->izq, dato);
else if(dato > (*b)->idcal)
eliminarcal(&(*b)->der, dato);
else
{
calcular *actual=NULL;
actual=*b;
if(actual->izq==NULL)
*b=actual->der;
else if(actual->der==NULL)
*b=actual->izq;
else
{
calcular *padre=NULL;
calcular *nodo=NULL;
padre=actual;
nodo=actual->izq;
while(nodo->der)
{
padre=nodo;
nodo=nodo->der;
}
actual->idcal=nodo->idcal;
if(padre==actual)
padre->izq=nodo->izq;
else
padre->der=nodo->der;
actual=nodo;
}
delete(actual);
printf("\n\n\n\n\n\n\nDato eliminado......");
getch();
}
if((ar2=fopen("calcular.txt", "wb")) != NULL)
guar_cal(*b);
}
//-------------------carga-----------------------------------
void carga()
{
int x;
textcolor(GREEN);
gotoxy(33,8);
cprintf("*******PROYECTO*******");
gotoxy(33,12);
delay(100);
cprintf(" Alexander Chalen");
gotoxy(33,16);
delay(100);
cprintf(" Leonardo Toala");
delay(100);
for(x=20; x<=60; x++)
{
gotoxy(33, 20); cprintf("........CARGANDO........");
textcolor(GREEN);
gotoxy(x, 24); cprintf("ÛÛÛÛÛ");
delay(50);
}
clrscr();
}
//----------------------------PROGRAMA PRINCIPAL---------------------
void main(void)
{
clrscr();
carga();
cliente *raiz=NULL, dat;
autos *raiz1=NULL, dat1;
calcular *raiz2=NULL, dat2;
extr_cli(&raiz);
extr_auto(&raiz1);
extr_cal(&raiz2);
int op,op2, ID, ID1;
do{
clrscr();
printf("\n\t\t\t***** VENTA DE AUTOS L.A *****");
printf("\n\n\n\n\t\t\t\t[1] Ingresar");
printf("\n\n\t\t\t\t[2] Mostrar");
printf("\n\n\t\t\t\t[3] Modificar");
printf("\n\n\t\t\t\t[4] Eliminar");
printf("\n\n\t\t\t\t[0] Salir");
printf("\n\n OPCION:\t");
do
{
op=getch();
}while(op<48 || op>53);
switch(op)
{
case 48:
exit (0);
break;
case 49:
clrscr();
printf("\n\t\t\t+++++QUE DESEA INGRESAR+++++");
printf("\n\n\n\n\t\t\t\t[1] CLIENTE");
printf("\n\n\t\t\t\t[2] AUTOS");
printf("\n\n\t\t\t\t[3] VALOR DE AUTOS");
printf("\n\n \t\t\t\t[0]ATRAS\t");
printf("\n\nOPCION:\t");
do{
op2=getch();
}while(op2<49 || op2>51);
switch(op)
{
case 49:
printf("\n\n\n\tDatos del Cliente:\t");
printf("\n\n\n ID_clientes:\t");
scanf("%d", &dat.idcli);
printf("\n\n Nombre :\t");
scanf("%s", dat.nom);
printf("\n\n Apellidos:\t");
scanf("%s", dat.ape);
printf("\n\n Cedula :\t");
scanf("%s", dat.ced);
ingre_cli(&raiz, dat);
guar_cli(raiz);
break;
case 50:
clrscr();
printf("\n\n\n\n\t Datos del Auto\t");
printf("\n\nID AUTO:\t");
scanf("%d", &ID);
ingre_auto(&raiz1, ID);
guar_auto(raiz1);
break;
case 51:
clrscr();
printf("\n\n\n\n\t Valores \t");
printf("\n\nId_Valor\t");
scanf("%d", &ID1);
ingre_cal(&raiz2,ID1);
guar_cal(raiz2);
break;
}
getch();
break;
case 50:
clrscr();
int c=0;
printf("\n\n\n+++++CLIENTE A MOSTRAR++++++\t");
scanf("%d", &c);
mostrartodo(raiz,raiz1,raiz2);
getch();
break;
case 51:
int id=0, op3=0, id2=0, id3=0;
printf("\n\nIngrese el ID del Cliente a buscar:\t");
scanf("%d", &id);
printf("\n<Que datos desea modificar>");
printf("\n[1] Datos cliente");
printf("\n<2> Datos del auto");
printf("\n<3> Valores");
printf("\n\nOPCION:\t");
do{
op3=getch();
}while(op3<49 || op3>51);
switch(op3)
{
case 49:
modificarcli(raiz, id);
printf("\n \n ID del cliente a modificar:\t");
scanf("%d",&id);
modificarcli(raiz, id);
break;
case 50:
mostrarauto(raiz1, id);
printf("\n\nID del auto a modificar:\t");
scanf("%d", &id2);
modificarauto(raiz1,id2);
break;
case 51:
mostrarcal(raiz2, id3);
printf("\n\nID del Valor modificar:\t");
scanf("%d", &id3);
modificarcal(raiz2, id3);
}
getch();
break;
case 52:
int dato=0;
int dato1=0;
int dato2=0;
int op4;
printf("\n\n\nQue desea eliminar ");
printf("\n\n<1> Cliente");
printf("\n\n<2> Auto");
printf("\n\n<3> Valor");
printf("\n\nOPCION:\t");
do{
op4=getch();
}while(op4<49 || op4 >51);
switch(op4)
{
case 49:
printf("\n\n\nId de cliente a eliminar:\t");
scanf("%d", &dato);
eliminarcli(&raiz, dato);
break;
case 50:
printf("\n\n\nId del auto a eliminar:\t");
scanf("%d", &dato1);
eliminarauto(&raiz1, dato1);
break;
case 51:
printf("\n\n\nId del valor a eliminar:\t");
scanf("%d", &dato2);
eliminarcal(&raiz2, dato2);
getch();
}
break;
}
}while(op !=1);
}
perdon por el doble post amigos