/*
Trabajo: Implementacion de un inventario
Curso: Estructura de Datos
IDE: Codeblocks
Web: http://codebotic.blogspot.com
*/
#include<iostream>
#include<cstdlib>
#include<windows.h>
#include<string.h>
#define max_char 30
#define max_doce 12
#define Color_Red 12
#define Color_Def 15
#define Color_Yellow 14
#define Color_Green 10
using namespace std;
/*------ estructura para productos por cada linea ------*/
struct nodoProducto{
int codProd;
char nomProd[max_char];
float precio;
struct nodoProducto *izq,*der;
};
/*------ estructura para linea ------*/
struct nodoLinea{
int codLinea;
char descripLinea[max_char];
struct nodoProducto *enlace;
struct nodoLinea *izq, *der;
};
/*------ estructura para clientes ------*/
struct nodoCliente{
int codCliente;
char nomCliente[max_char];
char apellCliente[max_char];
int dniCliente;
char rucCliente[max_doce];
char telefono[max_doce];
char direccion[max_char];
char email[max_char];
struct nodoCliente *izq,*der;
};
struct nodoDetalleVenta{
int codigo;
int codProd;
int cantidad;
int codVenta;
char marca[max_char];
float subtotal;
struct nodoProducto *ptrProducto;
struct nodoDetalleVenta *sgte;
};
struct nodoVenta{
int codigo;
int monto;
char fecha[max_doce];
int codCliente;
struct nodoCliente *ptrCliente;
struct nodoDetalleVenta *detalle;
struct nodoVenta *sgte;
};
struct nodoProveedor{
int codProveedor;
char razonSocial[max_char];
char rucProveedor[max_doce];
char telefono[max_doce];
char direccion[max_char];
char email[max_char];
char web[max_char];
struct nodoProveedor *izq,*der;
};
struct nodoDetallePedido{
int codigo;
int codProd;
int cantidad;
int codPedido;
char marca[max_char];
float subtotal;
struct nodoProducto *ptrProducto;
struct nodoDetallePedido *sgte;
};
struct nodoPedido{
int codigo;
int monto;
char fecha[max_doce];
int codAlmacen;
int codProveedor;
struct nodoProveedor *ptrProveedor;
struct nodoDetallePedido *detalle;
struct nodoPedido *sgte;
};
typedef struct nodoProducto *Producto;
typedef struct nodoLinea *Linea;
typedef struct nodoCliente *Cliente;
typedef struct nodoDetalleVenta *DetalleVenta;
typedef struct nodoVenta *Venta;
typedef struct nodoProveedor *Proveedor;
typedef struct nodoPedido *Pedido;
typedef struct nodoDetallePedido *DetallePedido;
/*--------------------Funcion gotoxy -------------------*/
void gotoxy(int x,int y){
HANDLE hCon;
hCon = GetStdHandle(STD_OUTPUT_HANDLE);
COORD dwPos;
dwPos.X=x;
dwPos.Y=y;
SetConsoleCursorPosition(hCon,dwPos); }
/*------------------------------- TITULO PRINCIPAL --------------------------*/
void titulo(void){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Green);
cout<<" _____________________________________________________________________"<<endl;
cout<<" | ____________________ |"<<endl;
cout<<" | | IBA\\xA5"<<"EZ |___________ |"<<endl;
cout<<" | XXXXXXXXXXXXXXXXXX | FERNANDEZ SEGURA | CORP ||"<<endl;
cout<<" | SISTEMA DE ALMACEN | CASTILLO ALVA | INDUSRY ||"<<endl;
cout<<" | XXXXXXXXXXXXXXXXXX | BENITES | COMPANY ||"<<endl;
cout<<" | ______________XXX________________| LUZURRIAGA | BUSINESS ||"<<endl;
cout<<" | | _ _ +18 _ _ _ | __ ____ _ | ______ ||"<<endl;
cout<<" | | | | | | _____ | | | | | | | ______ | | _ | ||"<<endl;
cout<<" | | |_| |_| | | | |_| |_| |_| | | | | | | | | ||"<<endl;
cout<<" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
}
/*---------------------- MENU PRINCIPAL ----------------------*/
void menu1(void){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" ---------------------------------------------------------------------\\n";
cout<<" <<<<<<<<<< SISTEMA DE ALMACEN >>>>>>>>>>";
cout<<"\\n ---------------------------------------------------------------------\\n\\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
cout<<" // // // // //////////"<<endl;
cout<<" (1)ALMACEN // // //// // //"<<endl;
cout<<" (2)CLIENTES // // // // // //"<<endl;
cout<<" (3)VENTAS // // // // // //"<<endl;
cout<<" (4)PROVEDORES // // // // // //"<<endl;
cout<<" (5)PEDIDOS // // // /// //"<<endl;
cout<<" (6)SALIR ///////// // // //"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
cout<<" INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" Ingrese Opcion : ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
}
/*---------------------- MENU ALMACEN ----------------------*/
void menu2(void){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" ---------------------------------------------------------------------\\n";
cout<<" <<<<<<<<<< ALMACEN >>>>>>>>>>";
cout<<"\\n ---------------------------------------------------------------------\\n\\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
cout<<" // // // // //////////"<<endl;
cout<<" (1)REGISTRAR LINEA // // //// // //"<<endl;
cout<<" (2)MOSTRAR LINEA // // // // // //"<<endl;
cout<<" (3)REGISTRAR PRODUCTO // // // // // //"<<endl;
cout<<" (4)MOSTRAR PRODUCTOS // // // // // //"<<endl;
cout<<" (5)REGRESAR // // // /// //"<<endl;
cout<<" ///////// // // //"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
cout<<" INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" Ingrese Opcion : ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
}
/*---------------------- MENU CLIENTES ----------------------*/
void menu3(void){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" ---------------------------------------------------------------------\\n";
cout<<" <<<<<<<<<< CLIENTES >>>>>>>>>>";
cout<<"\\n ---------------------------------------------------------------------\\n\\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
cout<<" (1)REGISTRAR CLIENTE // // // // //////////"<<endl;
cout<<" // // //// // //"<<endl;
cout<<" (2)ACTUALIZAR CLIENTE // // // // // //"<<endl;
cout<<" // // // // // //"<<endl;
cout<<" (3)LISTAR CLIENTES // // // // // //"<<endl;
cout<<" // // // /// //"<<endl;
cout<<" (5)REGRESAR ///////// // // //"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
cout<<" INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" Ingrese Opcion : ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
}
/*-------------------- MENU ACTUALIZAR CLIENTE ------------------*/
void menu_actualizar_cliente(void){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<"\\n\\n ---------------------------------------------------------------------\\n";
cout<<" <<<<<<<<<< CLIENTES -> MODIFICAR DATOS >>>>>>>>>>";
cout<<"\\n ---------------------------------------------------------------------\\n\\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
cout<<" // // // // //////////"<<endl;
cout<<" (1)MODIFICAR NOMBRE // // //// // //"<<endl;
cout<<" (2)MODIFICAR APELLIDOS // // // // // //"<<endl;
cout<<" (3)MODIFICAR TELEFONO // // // // // //"<<endl;
cout<<" (4)MODIFICAR E-MAIL // // // // // //"<<endl;
cout<<" (5)MODIFICAR DIRECCION // // // /// //"<<endl;
cout<<" (6)REGRESAR ///////// // // //"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
cout<<" INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" Ingrese Opcion : ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
}
/*---------------------- MENU VENTAS ----------------------*/
void menu4(void){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" ---------------------------------------------------------------------\\n";
cout<<" <<<<<<<<<< VENTAS >>>>>>>>>>";
cout<<"\\n ---------------------------------------------------------------------\\n\\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
cout<<" (1)VENDER PRODUCTOS // // // // //////////"<<endl;
cout<<" // // //// // //"<<endl;
cout<<" (2)MOSTRAR VENTAS REALIZADAS // // // // // //"<<endl;
cout<<" // // // // // //"<<endl;
cout<<" (3)DETALLAR VENTA // // // // // //"<<endl;
cout<<" // // // /// //"<<endl;
cout<<" (5)REGRESAR ///////// // // //"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
cout<<" INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" Ingrese Opcion : ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
}
/*---------------------- MENU PROVEEDORES ---------------------*/
void menu5(void){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" ---------------------------------------------------------------------\\n";
cout<<" <<<<<<<<<< PROVEEDORES >>>>>>>>>>";
cout<<"\\n ---------------------------------------------------------------------\\n\\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
cout<<" (1)REGISTRAR PROVEEDOR // // // // //////////"<<endl;
cout<<" // // //// // //"<<endl;
cout<<" (2)ACTUALIZAR PROVEEDOR // // // // // //"<<endl;
cout<<" // // // // // //"<<endl;
cout<<" (3)LISTAR PROVEEDORES // // // // // //"<<endl;
cout<<" // // // /// //"<<endl;
cout<<" (5)REGRESAR ///////// // // //"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
cout<<" INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" Ingrese Opcion : ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
}
/*-------------------- MENU ACTUALIZAR PROVEEDOR ------------------*/
void menu_actualizar_proveedor(void){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" ---------------------------------------------------------------------\\n";
cout<<" <<<<<<<<<< PROVEEDORES -> MODIFICAR DATOS >>>>>>>>>>";
cout<<"\\n ---------------------------------------------------------------------\\n\\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
cout<<" // // // // //////////"<<endl;
cout<<" (1)MODIFICAR RAZON SOCIAL // // //// // //"<<endl;
cout<<" (2)MODIFICAR TELEFONO // // // // // //"<<endl;
cout<<" (3)MODIFICAR E-MAIL // // // // // //"<<endl;
cout<<" (4)MODIFICAR DIRECCION // // // // // //"<<endl;
cout<<" (5)MODIFICAR WEB // // // /// //"<<endl;
cout<<" (6)REGRESAR ///////// // // //"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
cout<<" INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" Ingrese Opcion : ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
}
/*---------------------- MENU PEDIDOS ----------------------*/
void menu6(void){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" ---------------------------------------------------------------------\\n";
cout<<" <<<<<<<<<< PEDIDOS >>>>>>>>>>";
cout<<"\\n ---------------------------------------------------------------------\\n\\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
cout<<" (1)REALIZAR UN PEDIDO // // // // //////////"<<endl;
cout<<" // // //// // //"<<endl;
cout<<" (2)MOSTRAR PEDIDOS REALIZADOS // // // // // //"<<endl;
cout<<" // // // // // //"<<endl;
cout<<" (3)DETALLAR PEDIDO // // // // // //"<<endl;
cout<<" // // // /// //"<<endl;
cout<<" (5)REGRESAR ///////// // // //"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
cout<<" INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
cout<<" Ingrese Opcion : ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
}
/*-------------------- FUNCION PARA INSERTAR UNA LINEA --------------------*/
void insertar_linea(Linea &arbol, int x){
if(arbol==NULL){
arbol=new (struct nodoLinea);
arbol->codLinea=x;
cin.ignore();
cout<<"\\n\\tingrese descripcion:";
cin.getline(arbol->descripLinea,max_char);
arbol->enlace=NULL;
arbol->izq=NULL;
arbol->der=NULL;
}
else if(x<arbol->codLinea) insertar_linea(arbol->izq,x);
else if(x>arbol->codLinea) insertar_linea(arbol->der,x);
}
/*------------------ FUNCION PARA MOSTRAR TODAS LAS LINEAS -----------------*/
void mostrar_linea(Linea arbol){
if(arbol!=NULL){
mostrar_linea(arbol->izq);
cout<<"\\n\\t"<<arbol->codLinea<<"\\t"<<arbol->descripLinea<<endl;
mostrar_linea(arbol->der);
}
}
/*------------ Funcion que inserta un nuevo producto a la linea ---------------------*/
void insertar_producto(Producto &q,int x){
if (q==NULL){
q=new(struct nodoProducto);
q->codProd=x;
cin.ignore();cout<<"\\n\\tNOMBRE:"; cin.getline(q->nomProd,max_char);
cout<<"\\n\\tPRECIO:"; cin>>q->precio;
q->izq=NULL;
q->der=NULL;
}
else if(x<q->codProd) insertar_producto(q->izq,x);
else if(x>q->codProd) insertar_producto(q->der,x);
}
/*---Funcion que busca el codigo de linea para agregar en el, el producto ingresaro ----*/
void registrar_producto(Linea arbol, int cod){
if(arbol!=NULL){
if(arbol->codLinea==cod){
int x;
cout<<"\\n\\n\\t\\t[ REGISTRO DE PRODUCTO ]\\n";
cout<<"\\t\\t------------------------";
cout<<"\\n\\tCODIGO:"; cin>>x;
insertar_producto(arbol->enlace,x);
}
else if(cod<arbol->codLinea) registrar_producto(arbol->izq,cod);
else if(cod>arbol->codLinea) registrar_producto(arbol->der,cod);
}
}
/*--------- Funcion que muestra todos los productos ingresados en una linea ------*/
void listar_productos(Producto q){
if(q!=NULL){
listar_productos(q->izq);
cout<<"\\t"<<q->codProd<<"\\t"<<q->nomProd<<"\\t"<<q->precio<<endl;
listar_productos(q->der);
}
}
/*--------- Funcion que valida de que linea se mostraran los productos ---------*/
void mostrar_producto(Linea arbol, int x){
if(arbol!=NULL){
if(arbol->codLinea==x){
cout<<"Lista de productos con la Linea:"<<arbol->codLinea<<endl;
cout<<" Cod Prod || Nombre || precio"<<endl;
listar_productos(arbol->enlace);
}
else if(x<arbol->codLinea) mostrar_producto(arbol->izq,x);
else if(x>arbol->codLinea) mostrar_producto(arbol->der,x);
}
}
/*----------------- Funcion para registrar clientes ---------------*/
void registrar_cliente(Cliente &cliente, int x){
if(cliente==NULL){
cliente=new (struct nodoCliente);
cliente->codCliente=x;
cin.ignore(); cout<<"\\n\\tNOMBRE :"; cin.getline(cliente->nomCliente,max_char);
cin.ignore(); cout<<"\\n\\tAPELLIDOS :"; cin.getline(cliente->apellCliente,max_char);
cout<<"\\n\\tDNI :"; cin>>cliente->dniCliente;
cin.ignore(); cout<<"\\n\\tRUC :"; cin.getline(cliente->rucCliente,max_doce);
cin.ignore(); cout<<"\\n\\tTELEFONO :"; cin.getline(cliente->telefono,max_doce);
cin.ignore(); cout<<"\\n\\tDIRECCION :"; cin.getline(cliente->direccion,max_char);
cin.ignore(); cout<<"\\n\\tE-MAIL :"; cin.getline(cliente->email,max_char);
cliente->izq=NULL;
cliente->der=NULL;
}
else if(x<cliente->codCliente) registrar_cliente(cliente->izq,x);
else if(x>cliente->codCliente) registrar_cliente(cliente->der,x);
}
/*------- Funcion que modifica un dato de un cliente seleccionado --------*/
void actualizar_cliente(Cliente &cliente,int cod){
if(cliente!=NULL){
if(cliente->codCliente==cod){
int op;
system("cls");
cout<<"\\n\\n\\t\\t[ MODIFICAR CLIENTE ]\\n";
cout<<"\\t\\t------------------------";
cout<<"\\n\\n\\tCODIGO :"<<cliente->codCliente;
cout<<"\\n\\n\\tNOMBRE :"<<cliente->nomCliente;
cout<<"\\n\\n\\tAPELLIDOS :"<<cliente->apellCliente;
cout<<"\\n\\n\\tDNI :"<<cliente->dniCliente;
cout<<"\\n\\n\\tRUC :"<<cliente->rucCliente;
cout<<"\\n\\n\\tTELEFONO :"<<cliente->telefono;
cout<<"\\n\\n\\tDIRECCION :"<<cliente->direccion;
cout<<"\\n\\n\\tE-MAIL :"<<cliente->email;
menu_actualizar_cliente();
cin>>op;
switch(op){
case 1: cin.ignore();
cout<<"\\n\\tINGRESE NUEVO NOMBRE :";
cin.getline(cliente->nomCliente,max_char);
break;
case 2: cin.ignore();
cout<<"\\n\\tINGRESE NUEVO APELLIDO :";
cin.getline(cliente->apellCliente,max_char);
break;
case 3: cin.ignore();
cout<<"\\n\\tINGRESE NUEVO TELEFONO :";
cin.getline(cliente->telefono,max_doce);
break;
case 4: cin.ignore();
cout<<"\\n\\tINGRESE NUEVO E-MAIL :";
cin.getline(cliente->email,max_char);
break;
case 5: cin.ignore();
cout<<"\\n\\tINGRESE NUEVA DIRECCION :";
cin.getline(cliente->direccion,max_char);
break;
case 6: break;
default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
}
}
else if(cod<cliente->codCliente) actualizar_cliente(cliente->izq,cod);
else if(cod>cliente->codCliente) actualizar_cliente(cliente->der,cod);
}
}
/*---------- Funcion que muestra todos los clientes registrados ---------*/
void mostrar_clientes(Cliente cliente){
if(cliente!=NULL){
mostrar_clientes(cliente->izq);
cout<<"\\n\\n\\t\\t[ MOSTRAR CLIENTES ]\\n";
cout<<"\\t\\t------------------------";
cout<<"\\n\\n\\tCODIGO :"<<cliente->codCliente;
cout<<"\\n\\n\\tNOMBRE :"<<cliente->nomCliente;
cout<<"\\n\\n\\tAPELLIDOS :"<<cliente->apellCliente;
cout<<"\\n\\n\\tDNI :"<<cliente->dniCliente;
cout<<"\\n\\n\\tRUC :"<<cliente->rucCliente;
cout<<"\\n\\n\\tTELEFONO :"<<cliente->telefono;
cout<<"\\n\\n\\tDIRECCION :"<<cliente->direccion;
cout<<"\\n\\n\\tE-MAIL :"<<cliente->email;
mostrar_clientes(cliente->der);
}
}
/*------- Funcion que retorna true cuando el codigo es valido --------*/
bool validar_codigo_cliente(Cliente cliente, int cod, Cliente &ptrCliente){
if(cliente!=NULL){
if(cliente->codCliente==cod){
ptrCliente=cliente;
return true;
}
else if(cod<cliente->codCliente) validar_codigo_cliente(cliente->izq,cod,ptrCliente);
else if(cod>cliente->codCliente) validar_codigo_cliente(cliente->der,cod,ptrCliente);
}
}
/*------- Funcion que valida si el codigo del producto es verdadero--------*/
bool validar_cod_producto(Producto producto, int codprod, Producto &puntProducto){
if(producto!=NULL){
if(producto->codProd==codprod){
puntProducto=producto;
return true;
}
else if(codprod<producto->codProd) validar_cod_producto(producto->izq,codprod,puntProducto);
else if(codprod>producto->codProd) validar_cod_producto(producto->der,codprod,puntProducto);
}
}
/*------- Funcion que busca el codigo de linea del producto en el arbol --------*/
bool validar_codigo_producto(Linea arbol,int codlinea, int codprod, Producto &puntProducto){
bool validar;
validar=false;
if(arbol!=NULL){
if(arbol->codLinea==codlinea){
validar=validar_cod_producto(arbol->enlace,codprod,puntProducto);
if (validar==true)
return validar;
}
else if(codlinea<arbol->codLinea) validar_codigo_producto(arbol->izq,codlinea,codprod,puntProducto);
else if(codlinea>arbol->codLinea) validar_codigo_producto(arbol->der,codlinea,codprod,puntProducto);
}
}
/*------- Funcion que agrega un producto a la boleta de venta --------*/
void insertar_producto_venta(DetalleVenta &q,Linea arbol){
bool validado;
int codLinea,x;
char op;
DetalleVenta t,r;
r=new(struct nodoDetalleVenta);
cout<<"\\n\\tCODIGO:";
cin>>r->codigo;
r->ptrProducto=NULL;
validado=false;
do{
cout<<"\\n\\tINGRESE LINEA DEL PRODUCTO: ";
cin>>codLinea;
cout<<"\\n\\tCODIGO DE PRODUCTO:";
cin>>x;
validado=validar_codigo_producto(arbol,codLinea,x,r->ptrProducto);
if(validado==true){
cout<<"\\n\\t NOMBRE :"<<(r->ptrProducto)->nomProd;
cout<<"\\n\\t PRECIO :"<<(r->ptrProducto)->precio;
}
if(validado==false){
cout<<"\\n\\tCODIGO INVALIDO...!!";
}
cout<<"\\n\\n\\tDesea continuar ? <y/n>: ";
cin>>op;
switch(op){
case \'y\': break;
case \'Y\': break;
case \'n\': return ;
case \'N\': return ;
default: cout<<"\\n\\t Ingrese una opcion valida";
}
}while(validado==false);
r->codProd=x;
cout<<"\\n\\tCANTIDAD:";
cin>>r->cantidad;
strcpy(r->marca,(r->ptrProducto)->nomProd);
r->subtotal=(r->cantidad)*((r->ptrProducto)->precio);
r->sgte=NULL;
if(q==NULL)
q=r;
else{
t=q;
while(t->sgte!=NULL)
t=t->sgte;
t->sgte=r;
}
}
/*------- Funcion que ordena agregar la cantidad de productos deseados --------*/
void detalle_de_venta(DetalleVenta &detalle,Linea arbol,Venta &venta){
char op;
cout<<"\\n\\n\\t\\t[ LISTA DE PRODUCTOS VENDIDOS ]\\n";
cout<<"\\t\\t-------------------------------";
do{
insertar_producto_venta(detalle,arbol);
cout<<"\\n\\n\\tDesea agregar otro producto a la venta ? <y/n>: ";
cin>>op;
switch(op){
case \'y\': break;
case \'Y\': break;
case \'n\': return ;
case \'N\': return ;
default: cout<<"\\n\\t Ingrese una opcion valida";
}
}while(op==\'y\'||op==\'Y\');
}
/*------- Funcion que registra una venta a la lista enlazada venta --------*/
void registrar_venta(Venta &venta,Cliente cliente, Linea arbol){
int x; char op;
float total=0;
bool validado;
Venta q,t;
DetalleVenta aux;
q=new(struct nodoVenta);
cout<<"\\n\\n\\t\\t[ BOLETA DE VENTAS ]\\n";
cout<<"\\t\\t------------------------";
cout<<"\\n\\tCODIGO:";
cin>>q->codigo;
cin.ignore(); cout<<"\\n\\tFECHA:"; cin.getline(q->fecha,max_doce);
validado=false;
do{
cout<<"\\n\\tCODIGO DE CLIENTE:";
cin>>x;
validado=validar_codigo_cliente(cliente,x,q->ptrCliente);
if(validado==true)
cout<<"\\n\\tNOMBRE:"<<(q->ptrCliente)->nomCliente;
if(validado==false)
cout<<"\\n\\tCODIGO INVALIDO...!!";
cout<<"\\n\\n\\tDesea continuar con el registro de venta ? <y/n>: ";
cin>>op;
switch(op){
case \'y\': break;
case \'Y\': break;
case \'n\': delete(q);
return ;
case \'N\': delete(q);
return ;
default: cout<<"\\n\\t Ingrese una opcion valida";
}
}while(validado==false);
q->codCliente=x;
q->detalle=NULL;
q->sgte=NULL;
detalle_de_venta(q->detalle,arbol,q);//insertamos los productos deseados
/*--- calculamos el monto */
aux=q->detalle;
while(aux!=NULL){
total=total+aux->subtotal;
aux=aux->sgte;
}
q->monto=total;
if(venta==NULL)
venta=q;
else {
t=venta;
while(t->sgte!=NULL)
t=t->sgte;
t->sgte=q;
}
}
/*------- Funcion muestra todas las ventas de la lista q --------*/
void listar_ventas(Venta q){
int i=1;
while(q!=NULL){
cout<<"\\n\\n\\tDATOS DE LA VENTA ["<<i<<"] ";
cout<<"\\n\\t------------------------";
cout<<"\\n\\tCODIGO DE VENTA: "<<q->codigo;
cout<<"\\n\\tFECHA : "<<q->fecha;
cout<<"\\n\\tCODIGO DE CLIENTE : "<<q->codCliente;
cout<<"\\n\\tNOMBRE DEL CLIENTE:"<<(q->ptrCliente)->nomCliente;
cout<<"\\n\\tMONTO:"<<q->monto;
q=q->sgte;
i++;
}
}
/*------- Funcion que muestra una venta con sus productos --------*/
void mostrar_venta(Venta q, int cod){
int i=1;
while(q!=NULL){
if(q->codigo==cod){
cout<<"\\n\\n\\t[ DATOS DE LA VENTA ]";
cout<<"\\n\\t------------------------";
cout<<"\\n\\tCODIGO DE VENTA: "<<q->codigo;
cout<<"\\n\\tFECHA : "<<q->fecha;
cout<<"\\n\\tCODIGO DE CLIENTE : "<<q->codCliente;
cout<<"\\n\\tNOMBRE DEL CLIENTE:"<<(q->ptrCliente)->nomCliente;
cout<<"\\n\\tMONTO:"<<q->monto<<endl;
while(q->detalle!=NULL){
cout<<"\\n\\n\\tPRODUCTO ["<<i<<"]\\n";
cout<<"\\n\\tCODIGO:"<<(q->detalle)->codigo;
cout<<"\\n\\tCODIGO DEL PRODUCTO:"<<(q->detalle)->codProd;
cout<<"\\n\\tCANTIDAD:"<<(q->detalle)->cantidad;
cout<<"\\n\\tMARCA:"<<(q->detalle)->ptrProducto->nomProd;
cout<<"\\n\\tSUBTOTAL:"<<(q->detalle)->subtotal;
(q->detalle)=(q->detalle)->sgte;
i++;
}
q=q->sgte;
}
else q=q->sgte;
}
}
/*----------------- Funcion para registrar proveedores ---------------*/
void registrar_proveedor(Proveedor &proveedor, int x){
if(proveedor==NULL){
proveedor=new (struct nodoProveedor);
proveedor->codProveedor=x;
cin.ignore(); cout<<"\\n\\tRAZON SOCIAL :"; cin.getline(proveedor->razonSocial,max_char);
cin.ignore(); cout<<"\\n\\tRUC :"; cin.getline(proveedor->rucProveedor,max_doce);
cin.ignore(); cout<<"\\n\\tTELEFONO :"; cin.getline(proveedor->telefono,max_doce);
cin.ignore(); cout<<"\\n\\tDIRECCION :"; cin.getline(proveedor->direccion,max_char);
cin.ignore(); cout<<"\\n\\tE-MAIL :"; cin.getline(proveedor->email,max_char);
cin.ignore(); cout<<"\\n\\tWEB :"; cin.getline(proveedor->web,max_char);
proveedor->izq=NULL;
proveedor->der=NULL;
}
else if(x<proveedor->codProveedor) registrar_proveedor(proveedor->izq,x);
else if(x>proveedor->codProveedor) registrar_proveedor(proveedor->der,x);
}
/*------- Funcion que modifica un dato de un proveedor seleccionado --------*/
void actualizar_proveedor(Proveedor &proveedor,int cod){
if(proveedor!=NULL){
if(proveedor->codProveedor==cod){
int op;
system("cls");
cout<<"\\n\\n\\t\\t[ MODIFICAR CLIENTE ]\\n";
cout<<"\\t\\t------------------------";
cout<<"\\n\\n\\tCODIGO :"<<proveedor->codProveedor;
cout<<"\\n\\n\\tRAZON SOCIAL :"<<proveedor->razonSocial;
cout<<"\\n\\n\\tRUC :"<<proveedor->rucProveedor;
cout<<"\\n\\n\\tTELEFONO :"<<proveedor->telefono;
cout<<"\\n\\n\\tDIRECCION :"<<proveedor->direccion;
cout<<"\\n\\n\\tE-MAIL :"<<proveedor->email;
cout<<"\\n\\n\\tWEB :"<<proveedor->web;
menu_actualizar_proveedor();
cin>>op;
switch(op){
case 1: cin.ignore();
cout<<"\\n\\tINGRESE NUEVA RAZON SOCIAL :";
cin.getline(proveedor->razonSocial,max_char);
break;
case 2: cin.ignore();
cout<<"\\n\\tINGRESE NUEVO TELEFONO :";
cin.getline(proveedor->telefono,max_doce);
break;
case 3: cin.ignore();
cout<<"\\n\\tINGRESE NUEVO E-MAIL :";
cin.getline(proveedor->email,max_char);
break;
case 4: cin.ignore();
cout<<"\\n\\tINGRESE NUEVA DIRECCION :";
cin.getline(proveedor->direccion,max_char);
break;
case 5: cin.ignore();
cout<<"\\n\\tINGRESE NUEVA WEB :";
cin.getline(proveedor->web,max_char);
break;
case 6: break;
default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
}
}
else if(cod<proveedor->codProveedor) actualizar_proveedor(proveedor->izq,cod);
else if(cod>proveedor->codProveedor) actualizar_proveedor(proveedor->der,cod);
}
}
/*---------- Funcion que muestra todos los proveedores registrados ---------*/
void mostrar_proveedores(Proveedor proveedor){
if(proveedor!=NULL){
mostrar_proveedores(proveedor->izq);
cout<<"\\n\\n\\t\\t[ MOSTRAR PROVEEDOR ]\\n";
cout<<"\\t\\t------------------------";
cout<<"\\n\\n\\tCODIGO :"<<proveedor->codProveedor;
cout<<"\\n\\n\\tRAZON SOCIAL :"<<proveedor->razonSocial;
cout<<"\\n\\n\\tRUC :"<<proveedor->rucProveedor;
cout<<"\\n\\n\\tTELEFONO :"<<proveedor->telefono;
cout<<"\\n\\n\\tDIRECCION :"<<proveedor->direccion;
cout<<"\\n\\n\\tE-MAIL :"<<proveedor->email;
cout<<"\\n\\n\\tWEB :"<<proveedor->web;
mostrar_proveedores(proveedor->der);
}
}
/*------- Funcion muestra todas las ventas de la lista q --------*/
void listar_pedidos(Pedido q){
int i=1;
while(q!=NULL){
cout<<"\\n\\n\\tDATOS DEL PEDIDO ["<<i<<"] ";
cout<<"\\n\\t------------------------";
cout<<"\\n\\tCODIGO DE PEDIDO: "<<q->codigo;
cout<<"\\n\\tFECHA : "<<q->fecha;
cout<<"\\n\\tCODIGO DE PROVEEDOR : "<<q->codProveedor;
cout<<"\\n\\tRAZON SOCIAL:"<<(q->ptrProveedor)->razonSocial;
cout<<"\\n\\tMONTO:"<<q->monto;
q=q->sgte;
i++;
}
}
/*------- Funcion que agrega un producto a la proforma de pedido --------*/
void insertar_producto_pedido(DetallePedido &q,Linea arbol){
bool validado;
int codLinea,x;
char op;
DetallePedido t,r;
r=new(struct nodoDetallePedido);
cout<<"\\n\\tCODIGO:";
cin>>r->codigo;
r->ptrProducto=NULL;
validado=false;
do{
cout<<"\\n\\tINGRESE LINEA DEL PRODUCTO: ";
cin>>codLinea;
cout<<"\\n\\tCODIGO DE PRODUCTO:";
cin>>x;
validado=validar_codigo_producto(arbol,codLinea,x,r->ptrProducto);
if(validado==true){
cout<<"\\n\\t NOMBRE :"<<(r->ptrProducto)->nomProd;
cout<<"\\n\\t PRECIO :"<<(r->ptrProducto)->precio;
}
if(validado==false)
cout<<"\\n\\tCODIGO INVALIDO...!!";
cout<<"\\n\\n\\tDesea continuar ? <y/n>: ";
cin>>op;
switch(op){
case \'y\': break;
case \'Y\': break;
case \'n\': return ;
case \'N\': return ;
default: cout<<"\\n\\t Ingrese una opcion valida";
}
}while(validado==false);
r->codProd=x;
cout<<"\\n\\tCANTIDAD:";
cin>>r->cantidad;
strcpy(r->marca,(r->ptrProducto)->nomProd);
r->subtotal=(r->cantidad)*((r->ptrProducto)->precio);
r->sgte=NULL;
if(q==NULL)
q=r;
else{
t=q;
while(t->sgte!=NULL)
t=t->sgte;
t->sgte=r;
}
}
/*------- Funcion que ordena agregar la cantidad de productos deseados al detalle del pedido --------*/
void detalle_de_pedido(DetallePedido &detalle,Linea arbol,Pedido &pedido){
char op;
cout<<"\\n\\n\\t\\t[ LISTA DE PRODUCTOS A PEDIR ]\\n";
cout<<"\\t\\t-------------------------------";
do{
insertar_producto_pedido(detalle,arbol);
cout<<"\\n\\n\\tDesea agregar otro producto a la Proforma ? <y/n>: ";
cin>>op;
switch(op){
case \'y\': break;
case \'Y\': break;
case \'n\': return ;
case \'N\': return ;
default: cout<<"\\n\\t Ingrese una opcion valida";
}
}while(op==\'y\'||op==\'Y\');
}
/*------- Funcion que retorna true cuando el codigo es valido --------*/
bool validar_codigo_proveedor(Proveedor proveedor, int cod, Proveedor &ptrProveedor){
if(proveedor!=NULL){
if(proveedor->codProveedor==cod){
ptrProveedor=proveedor;
return true;
}
else if(cod<proveedor->codProveedor) validar_codigo_proveedor(proveedor->izq,cod,ptrProveedor);
else if(cod>proveedor->codProveedor) validar_codigo_proveedor(proveedor->der,cod,ptrProveedor);
}
}
/*------- Funcion que registra un Pedido a la lista enlazada Pedido --------*/
void registrar_pedido(Pedido &pedido,Proveedor proveedor, Linea arbol){
int x; char op;
float total=0;
bool validado;
Pedido q,t;
DetallePedido aux;
q=new(struct nodoPedido);
cout<<"\\n\\n\\t\\t[ PROFORMA DE PEDIDO ]\\n";
cout<<"\\t\\t-----------------------------";
cout<<"\\n\\tCODIGO:";
cin>>q->codigo;
cin.ignore(); cout<<"\\n\\tFECHA:"; cin.getline(q->fecha,max_doce);
validado=false;
do{
cout<<"\\n\\tCODIGO DE PROVEEDOR:";
cin>>x;
validado=validar_codigo_proveedor(proveedor,x,q->ptrProveedor);
if(validado==true)
cout<<"\\n\\tRAZON SOCIAL:"<<(q->ptrProveedor)->razonSocial;
if(validado==false)
cout<<"\\n\\tCODIGO INVALIDO...!!";
cout<<"\\n\\n\\tDesea continuar con el registro de Pedido ? <y/n>: ";
cin>>op;
switch(op){
case \'y\': break;
case \'Y\': break;
case \'n\': delete(q);
return ;
case \'N\': delete(q);
return ;
default: cout<<"\\n\\t Ingrese una opcion valida";
}
}while(validado==false);
q->codProveedor=x;
q->detalle=NULL;
q->sgte=NULL;
detalle_de_pedido(q->detalle,arbol,q);//insertamos los productos deseados
/*--- calculamos el monto */
aux=q->detalle;
while(aux!=NULL){
total=total+aux->subtotal;
aux=aux->sgte;
}
q->monto=total;
if(pedido==NULL)
pedido=q;
else {
t=pedido;
while(t->sgte!=NULL)
t=t->sgte;
t->sgte=q;
}
}
/*------- Funcion que muestra un pedido con sus productos --------*/
void mostrar_pedido(Pedido q, int cod){
int i=1;
while(q!=NULL){
if(q->codigo==cod){
cout<<"\\n\\n\\t[ DATOS DEL PEDIDO ]";
cout<<"\\n\\t------------------------";
cout<<"\\n\\tCODIGO DE PEDIDO: "<<q->codigo;
cout<<"\\n\\tFECHA : "<<q->fecha;
cout<<"\\n\\tCODIGO DE PROVEEDOR : "<<q->codProveedor;
cout<<"\\n\\tRAZON SOCIAL:"<<(q->ptrProveedor)->razonSocial;
cout<<"\\n\\tMONTO:"<<q->monto<<endl;
while(q->detalle!=NULL){
cout<<"\\n\\n\\tPRODUCTO ["<<i<<"]\\n";
cout<<"\\n\\tCODIGO:"<<(q->detalle)->codigo;
cout<<"\\n\\tCODIGO DEL PRODUCTO:"<<(q->detalle)->codProd;
cout<<"\\n\\tCANTIDAD:"<<(q->detalle)->cantidad;
cout<<"\\n\\tMARCA:"<<(q->detalle)->ptrProducto->nomProd;
cout<<"\\n\\tSUBTOTAL:"<<(q->detalle)->subtotal;
(q->detalle)=(q->detalle)->sgte;
i++;
}
q=q->sgte;
}
else q=q->sgte;
}
}
/*---------------------- FUNCION PRINCIPAL ----------------------*/
int main (void){
SetConsoleTitle("SISTEMA DE ALMACEN"); // PARA CAMBIAR EL TITULO AL PROGRAMA
Linea arbol=NULL;
Cliente cliente=NULL;
Venta venta=NULL;
Proveedor proveedor=NULL;
Pedido pedido=NULL;
int op,op2,dato;
do{ titulo();
menu1();
cin>>op;
switch(op){
/*------------- ALMACEN ---------------*/
case 1: system("cls");
do{
titulo();
menu2();
cin>>op2;
switch(op2){
case 1: cout<<"\\nIngrese codigo de linea:";
cin>>dato;
insertar_linea(arbol,dato);
break;
case 2: mostrar_linea(arbol);
break;
case 3: cout<<"\\nIngrese codigo de Linea del Producto:";
cin>>dato;
registrar_producto(arbol,dato);
break;
case 4: cout<<"\\nIngrese codigo de Linea del Producto:";
cin>>dato;
mostrar_producto(arbol,dato);
break;
case 5: break;
default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
}
cout<<endl;
system("pause"); system("cls");
}while(op2!=5);
break;
/*------------- CLIENTES ---------------*/
case 2: system("cls");
do{
titulo();
menu3();
cin>>op2;
switch(op2){
case 1: cout<<"\\n\\n\\t\\t[ REGISTRO DE CLIENTE ]\\n";
cout<<"\\t\\t------------------------\\n";
cout<<"\\n\\tCodigo de cliente:";
cin>>dato;
registrar_cliente(cliente,dato);
break;
case 2: cout<<"\\n\\n\\t\\t[ ACTUALIZAR CLIENTE ]\\n";
cout<<"\\t\\t------------------------\\n";
cout<<"\\n\\tCodigo de cliente:";
cin>>dato;
actualizar_cliente(cliente,dato);
break;
case 3: system("cls");
mostrar_clientes(cliente);
break;
case 5: break;
default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
}
cout<<endl;
system("pause"); system("cls");
}while(op2!=5);
break;
/*------------- VENTAS ---------------*/
case 3: system("cls");
do{
titulo();
menu4();
cin>>op2;
switch(op2){
case 1: registrar_venta(venta,cliente,arbol);
break;
case 2: cout<<"\\n\\n\\t\\t[ LISTAR VENTAS REALIZADAS ]\\n";
cout<<"\\t\\t------------------------\\n";
listar_ventas(venta);
break;
case 3: cout<<"\\n\\n\\t\\t[ DETALLES DE VENTA ]\\n";
cout<<"\\t\\t------------------------\\n";
cout<<"\\n\\tIngrese codigo de venta:";
cin>>dato;
mostrar_venta(venta,dato);
break;
case 5: break;
default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
}
cout<<endl;
system("pause"); system("cls");
}while(op2!=5);
break;
/*------------- PROVEEDOR ---------------*/
case 4: system("cls");
do{
titulo();
menu5();
cin>>op2;
switch(op2){
case 1: cout<<"\\n\\n\\t\\t[ REGISTRO DE PROVEEDOR ]\\n";
cout<<"\\t\\t------------------------\\n";
cout<<"\\n\\tCodigo de Proveedor:";
cin>>dato;
registrar_proveedor(proveedor,dato);
break;
case 2: cout<<"\\n\\n\\t\\t[ ACTUALIZAR PROVEEDOR ]\\n";
cout<<"\\t\\t------------------------\\n";
cout<<"\\n\\tCodigo de Proveedor:";
cin>>dato;
actualizar_proveedor(proveedor,dato);
break;
case 3: system("cls");
mostrar_proveedores(proveedor);
break;
case 5: break;
default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
}
cout<<endl;
system("pause"); system("cls");
}while(op2!=5);
break;
/*------------- PEDIDOS ---------------*/
case 5: system("cls");
do{
titulo();
menu6();
cin>>op2;
switch(op2){
case 1: registrar_pedido(pedido,proveedor,arbol);
break;
case 2: cout<<"\\n\\n\\t\\t[ LISTAR PEDIDOS REALIZADOS ]\\n";
cout<<"\\t\\t------------------------\\n";
listar_pedidos(pedido);
break;
case 3: cout<<"\\n\\n\\t\\t[ DETALLES DE PEDIDO ]\\n";
cout<<"\\t\\t------------------------\\n";
cout<<"\\n\\tIngrese codigo de pedido:";
cin>>dato;
mostrar_pedido(pedido,dato);
break;
case 5: break;
default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
}
cout<<endl;
system("pause"); system("cls");
}while(op2!=5);
break;
case 6: return 0;
default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
}
cout<<endl;
system("pause"); system("cls");
}while(op!=6);
system("pause");
return 0;
}