document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /*
  2.     Trabajo: Implementacion de un inventario
  3.     Curso: Estructura de Datos
  4.     IDE: Codeblocks
  5.     Web: http://codebotic.blogspot.com
  6.  
  7. */
  8.  
  9. #include<iostream>
  10. #include<cstdlib>
  11. #include<windows.h>
  12. #include<string.h>
  13.  
  14. #define max_char 30
  15. #define max_doce 12
  16.  
  17. #define Color_Red 12
  18. #define Color_Def 15
  19. #define Color_Yellow 14
  20. #define Color_Green 10
  21. using namespace std;
  22.  
  23. /*------ estructura para productos por cada linea ------*/
  24. struct nodoProducto{
  25.     int codProd;
  26.     char nomProd[max_char];
  27.     float precio;
  28.     struct nodoProducto *izq,*der;
  29. };
  30.  
  31. /*------ estructura para linea ------*/
  32. struct nodoLinea{
  33.  
  34.     int codLinea;
  35.     char descripLinea[max_char];
  36.     struct nodoProducto *enlace;
  37.     struct nodoLinea *izq, *der;
  38. };
  39.  
  40. /*------ estructura para clientes ------*/
  41. struct nodoCliente{
  42.     int codCliente;
  43.     char nomCliente[max_char];
  44.     char apellCliente[max_char];
  45.     int dniCliente;
  46.     char rucCliente[max_doce];
  47.     char telefono[max_doce];
  48.     char direccion[max_char];
  49.     char email[max_char];
  50.     struct nodoCliente *izq,*der;
  51. };
  52.  
  53. struct nodoDetalleVenta{
  54.     int codigo;
  55.     int codProd;
  56.     int cantidad;
  57.     int codVenta;
  58.     char marca[max_char];
  59.     float subtotal;
  60.     struct nodoProducto *ptrProducto;
  61.     struct nodoDetalleVenta *sgte;
  62. };
  63.  
  64. struct nodoVenta{
  65.     int codigo;
  66.     int monto;
  67.     char fecha[max_doce];
  68.     int codCliente;
  69.     struct nodoCliente *ptrCliente;
  70.     struct nodoDetalleVenta *detalle;
  71.     struct nodoVenta *sgte;
  72. };
  73.  
  74. struct nodoProveedor{
  75.     int codProveedor;
  76.     char razonSocial[max_char];
  77.     char rucProveedor[max_doce];
  78.     char telefono[max_doce];
  79.     char direccion[max_char];
  80.     char email[max_char];
  81.     char web[max_char];
  82.     struct nodoProveedor *izq,*der;
  83. };
  84.  
  85. struct nodoDetallePedido{
  86.     int codigo;
  87.     int codProd;
  88.     int cantidad;
  89.     int codPedido;
  90.     char marca[max_char];
  91.     float subtotal;
  92.     struct nodoProducto *ptrProducto;
  93.     struct nodoDetallePedido *sgte;
  94. };
  95.  
  96. struct nodoPedido{
  97.     int codigo;
  98.     int monto;
  99.     char fecha[max_doce];
  100.     int codAlmacen;
  101.     int codProveedor;
  102.     struct nodoProveedor *ptrProveedor;
  103.     struct nodoDetallePedido *detalle;
  104.     struct nodoPedido *sgte;
  105. };
  106. typedef struct nodoProducto *Producto;
  107. typedef struct nodoLinea *Linea;
  108. typedef struct nodoCliente *Cliente;
  109. typedef struct nodoDetalleVenta *DetalleVenta;
  110. typedef struct nodoVenta *Venta;
  111. typedef struct nodoProveedor *Proveedor;
  112. typedef struct nodoPedido *Pedido;
  113. typedef struct nodoDetallePedido *DetallePedido;
  114.  
  115.  
  116. /*--------------------Funcion gotoxy -------------------*/
  117. void gotoxy(int x,int y){
  118.      HANDLE  hCon;
  119.      hCon = GetStdHandle(STD_OUTPUT_HANDLE);
  120.      COORD dwPos;
  121.      dwPos.X=x;
  122.      dwPos.Y=y;
  123.      SetConsoleCursorPosition(hCon,dwPos);  }
  124.  
  125. /*-------------------------------  TITULO PRINCIPAL   --------------------------*/
  126. void titulo(void){
  127. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Green);
  128.  
  129. cout<<"      _____________________________________________________________________"<<endl;
  130. cout<<"      |                                   ____________________            |"<<endl;
  131. cout<<"      |                                   | IBA\\xA5"<<"EZ           |___________ |"<<endl;
  132. cout<<"      |        XXXXXXXXXXXXXXXXXX         | FERNANDEZ SEGURA |   CORP    ||"<<endl;
  133. cout<<"      |        SISTEMA DE ALMACEN         | CASTILLO ALVA    |  INDUSRY  ||"<<endl;
  134. cout<<"      |        XXXXXXXXXXXXXXXXXX         | BENITES          |  COMPANY  ||"<<endl;
  135. cout<<"      |  ______________XXX________________| LUZURRIAGA       |  BUSINESS ||"<<endl;
  136. cout<<"      |  |  _    _     +18   _    _    _  |    __  ____ _    |   ______  ||"<<endl;
  137. cout<<"      |  | | |  | |  _____  | |  | |  | | |       ______     |   |  _ |  ||"<<endl;
  138. cout<<"      |  | |_|  |_|  | | |  |_|  |_|  |_| |       |  | |     |   |  | |  ||"<<endl;
  139. cout<<"      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
  140. }
  141.  
  142.  
  143. /*---------------------- MENU PRINCIPAL ----------------------*/
  144. void menu1(void){
  145.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  146.     cout<<"      ---------------------------------------------------------------------\\n";
  147.     cout<<"              <<<<<<<<<<       SISTEMA DE ALMACEN        >>>>>>>>>>";
  148.     cout<<"\\n      ---------------------------------------------------------------------\\n\\n";
  149.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  150.         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  151.     cout<<"                                         //     //  //       // //////////"<<endl;
  152.     cout<<"      (1)ALMACEN                        //     //  ////     //     //"<<endl;
  153.     cout<<"      (2)CLIENTES                      //     //  // //    //     //"<<endl;
  154.     cout<<"      (3)VENTAS                       //     //  //  //   //     //"<<endl;
  155.     cout<<"      (4)PROVEDORES                  //     //  //    // //     //"<<endl;
  156.     cout<<"      (5)PEDIDOS                    //     //  //      ///     //"<<endl;
  157.     cout<<"      (6)SALIR                     /////////  //       //     //"<<endl;
  158.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
  159.     cout<<"                                  INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
  160.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  161.     cout<<"      Ingrese Opcion : ";
  162.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  163. }
  164.  
  165.  
  166. /*---------------------- MENU ALMACEN ----------------------*/
  167. void menu2(void){
  168.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  169.     cout<<"      ---------------------------------------------------------------------\\n";
  170.     cout<<"                 <<<<<<<<<<         ALMACEN        >>>>>>>>>>";
  171.     cout<<"\\n      ---------------------------------------------------------------------\\n\\n";
  172.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  173.     cout<<"                                         //     //  //       // //////////"<<endl;
  174.     cout<<"      (1)REGISTRAR LINEA                //     //  ////     //     //"<<endl;
  175.     cout<<"      (2)MOSTRAR LINEA                 //     //  // //    //     //"<<endl;
  176.     cout<<"      (3)REGISTRAR PRODUCTO           //     //  //  //   //     //"<<endl;
  177.     cout<<"      (4)MOSTRAR PRODUCTOS           //     //  //    // //     //"<<endl;
  178.     cout<<"      (5)REGRESAR                   //     //  //      ///     //"<<endl;
  179.     cout<<"                                   /////////  //       //     //"<<endl;
  180.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
  181.     cout<<"                                  INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
  182.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  183.     cout<<"      Ingrese Opcion : ";
  184.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  185.  
  186. }
  187.  
  188.  
  189. /*---------------------- MENU CLIENTES ----------------------*/
  190. void menu3(void){
  191.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  192.     cout<<"      ---------------------------------------------------------------------\\n";
  193.     cout<<"                 <<<<<<<<<<         CLIENTES        >>>>>>>>>>";
  194.     cout<<"\\n      ---------------------------------------------------------------------\\n\\n";
  195.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  196.     cout<<"      (1)REGISTRAR CLIENTE               //     //  //       // //////////"<<endl;
  197.     cout<<"                                        //     //  ////     //     //"<<endl;
  198.     cout<<"      (2)ACTUALIZAR CLIENTE            //     //  // //    //     //"<<endl;
  199.     cout<<"                                      //     //  //  //   //     //"<<endl;
  200.     cout<<"      (3)LISTAR CLIENTES             //     //  //    // //     //"<<endl;
  201.     cout<<"                                    //     //  //      ///     //"<<endl;
  202.     cout<<"      (5)REGRESAR                  /////////  //       //     //"<<endl;
  203.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
  204.     cout<<"                                  INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
  205.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  206.     cout<<"      Ingrese Opcion : ";
  207.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  208.  
  209. }
  210.  
  211.  
  212. /*-------------------- MENU ACTUALIZAR CLIENTE ------------------*/
  213. void menu_actualizar_cliente(void){
  214.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  215.     cout<<"\\n\\n      ---------------------------------------------------------------------\\n";
  216.     cout<<"              <<<<<<<<<<  CLIENTES -> MODIFICAR DATOS   >>>>>>>>>>";
  217.     cout<<"\\n      ---------------------------------------------------------------------\\n\\n";
  218.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  219.     cout<<"                                        //     //  //       // //////////"<<endl;
  220.     cout<<"      (1)MODIFICAR NOMBRE              //     //  ////     //     //"<<endl;
  221.     cout<<"      (2)MODIFICAR APELLIDOS          //     //  // //    //     //"<<endl;
  222.     cout<<"      (3)MODIFICAR TELEFONO          //     //  //  //   //     //"<<endl;
  223.     cout<<"      (4)MODIFICAR E-MAIL           //     //  //    // //     //"<<endl;
  224.     cout<<"      (5)MODIFICAR DIRECCION       //     //  //      ///     //"<<endl;
  225.     cout<<"      (6)REGRESAR                 /////////  //       //     //"<<endl;
  226.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
  227.     cout<<"                                  INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
  228.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  229.     cout<<"      Ingrese Opcion : ";
  230.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  231. }
  232.  
  233.  
  234. /*---------------------- MENU VENTAS ----------------------*/
  235. void menu4(void){
  236.  
  237.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  238.     cout<<"      ---------------------------------------------------------------------\\n";
  239.     cout<<"                 <<<<<<<<<<         VENTAS        >>>>>>>>>>";
  240.     cout<<"\\n      ---------------------------------------------------------------------\\n\\n";
  241.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  242.     cout<<"      (1)VENDER PRODUCTOS                //     //  //       // //////////"<<endl;
  243.     cout<<"                                        //     //  ////     //     //"<<endl;
  244.     cout<<"      (2)MOSTRAR VENTAS REALIZADAS     //     //  // //    //     //"<<endl;
  245.     cout<<"                                      //     //  //  //   //     //"<<endl;
  246.     cout<<"      (3)DETALLAR VENTA              //     //  //    // //     //"<<endl;
  247.     cout<<"                                    //     //  //      ///     //"<<endl;
  248.     cout<<"      (5)REGRESAR                  /////////  //       //     //"<<endl;
  249.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
  250.     cout<<"                                  INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
  251.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  252.     cout<<"      Ingrese Opcion : ";
  253.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  254. }
  255.  
  256. /*---------------------- MENU PROVEEDORES ---------------------*/
  257. void menu5(void){
  258.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  259.     cout<<"      ---------------------------------------------------------------------\\n";
  260.     cout<<"                 <<<<<<<<<<         PROVEEDORES        >>>>>>>>>>";
  261.     cout<<"\\n      ---------------------------------------------------------------------\\n\\n";
  262.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  263.     cout<<"      (1)REGISTRAR PROVEEDOR             //     //  //       // //////////"<<endl;
  264.     cout<<"                                        //     //  ////     //     //"<<endl;
  265.     cout<<"      (2)ACTUALIZAR PROVEEDOR          //     //  // //    //     //"<<endl;
  266.     cout<<"                                      //     //  //  //   //     //"<<endl;
  267.     cout<<"      (3)LISTAR PROVEEDORES          //     //  //    // //     //"<<endl;
  268.     cout<<"                                    //     //  //      ///     //"<<endl;
  269.     cout<<"      (5)REGRESAR                  /////////  //       //     //"<<endl;
  270.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
  271.     cout<<"                                  INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
  272.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  273.     cout<<"      Ingrese Opcion : ";
  274.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  275.  
  276. }
  277.  
  278. /*-------------------- MENU ACTUALIZAR PROVEEDOR ------------------*/
  279. void menu_actualizar_proveedor(void){
  280.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  281.     cout<<"      ---------------------------------------------------------------------\\n";
  282.     cout<<"            <<<<<<<<<<  PROVEEDORES -> MODIFICAR DATOS   >>>>>>>>>>";
  283.     cout<<"\\n      ---------------------------------------------------------------------\\n\\n";
  284.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  285.     cout<<"                                        //     //  //       // //////////"<<endl;
  286.     cout<<"      (1)MODIFICAR RAZON SOCIAL        //     //  ////     //     //"<<endl;
  287.     cout<<"      (2)MODIFICAR TELEFONO           //     //  // //    //     //"<<endl;
  288.     cout<<"      (3)MODIFICAR E-MAIL            //     //  //  //   //     //"<<endl;
  289.     cout<<"      (4)MODIFICAR DIRECCION        //     //  //    // //     //"<<endl;
  290.     cout<<"      (5)MODIFICAR WEB             //     //  //      ///     //"<<endl;
  291.     cout<<"      (6)REGRESAR                 /////////  //       //     //"<<endl;
  292.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
  293.     cout<<"                                  INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
  294.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  295.     cout<<"      Ingrese Opcion : ";
  296.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  297.  
  298. }
  299.  
  300. /*---------------------- MENU PEDIDOS ----------------------*/
  301. void menu6(void){
  302.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  303.     cout<<"      ---------------------------------------------------------------------\\n";
  304.     cout<<"                 <<<<<<<<<<         PEDIDOS        >>>>>>>>>>";
  305.     cout<<"\\n      ---------------------------------------------------------------------\\n\\n";
  306.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  307.     cout<<"      (1)REALIZAR UN PEDIDO              //     //  //       // //////////"<<endl;
  308.     cout<<"                                        //     //  ////     //     //"<<endl;
  309.     cout<<"      (2)MOSTRAR PEDIDOS REALIZADOS    //     //  // //    //     //"<<endl;
  310.     cout<<"                                      //     //  //  //   //     //"<<endl;
  311.     cout<<"      (3)DETALLAR PEDIDO             //     //  //    // //     //"<<endl;
  312.     cout<<"                                    //     //  //      ///     //"<<endl;
  313.     cout<<"      (5)REGRESAR                  /////////  //       //     //"<<endl;
  314.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Red);
  315.     cout<<"                                  INFORMATICA - ESTRUCTURA DE DATOS"<<endl; //SALIR DEL PROGRAMA
  316.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Yellow);
  317.     cout<<"      Ingrese Opcion : ";
  318.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color_Def);
  319.  
  320. }
  321. /*-------------------- FUNCION PARA INSERTAR UNA LINEA  --------------------*/
  322. void insertar_linea(Linea &arbol, int x){
  323.  
  324.     if(arbol==NULL){
  325.     arbol=new (struct nodoLinea);
  326.     arbol->codLinea=x;
  327.     cin.ignore();
  328.     cout<<"\\n\\tingrese descripcion:";
  329.     cin.getline(arbol->descripLinea,max_char);
  330.     arbol->enlace=NULL;
  331.     arbol->izq=NULL;
  332.     arbol->der=NULL;
  333.     }
  334.     else if(x<arbol->codLinea) insertar_linea(arbol->izq,x);
  335.     else if(x>arbol->codLinea) insertar_linea(arbol->der,x);
  336.  
  337. }
  338.  
  339. /*------------------ FUNCION PARA MOSTRAR TODAS LAS LINEAS -----------------*/
  340. void mostrar_linea(Linea arbol){
  341.     if(arbol!=NULL){
  342.         mostrar_linea(arbol->izq);
  343.         cout<<"\\n\\t"<<arbol->codLinea<<"\\t"<<arbol->descripLinea<<endl;
  344.         mostrar_linea(arbol->der);
  345.     }
  346.  
  347. }
  348.  
  349. /*------------ Funcion que inserta un nuevo producto a la linea ---------------------*/
  350. void insertar_producto(Producto &q,int x){
  351.  
  352.     if (q==NULL){
  353.             q=new(struct nodoProducto);
  354.             q->codProd=x;
  355.             cin.ignore();cout<<"\\n\\tNOMBRE:"; cin.getline(q->nomProd,max_char);
  356.             cout<<"\\n\\tPRECIO:"; cin>>q->precio;
  357.             q->izq=NULL;
  358.             q->der=NULL;
  359.     }
  360.     else if(x<q->codProd) insertar_producto(q->izq,x);
  361.     else if(x>q->codProd) insertar_producto(q->der,x);
  362. }
  363.  
  364. /*---Funcion que busca el codigo de linea para agregar en el, el producto ingresaro  ----*/
  365. void registrar_producto(Linea arbol, int cod){
  366.     if(arbol!=NULL){
  367.         if(arbol->codLinea==cod){
  368.             int x;
  369.             cout<<"\\n\\n\\t\\t[  REGISTRO DE PRODUCTO ]\\n";
  370.             cout<<"\\t\\t------------------------";
  371.             cout<<"\\n\\tCODIGO:"; cin>>x;
  372.             insertar_producto(arbol->enlace,x);
  373.         }
  374.         else if(cod<arbol->codLinea) registrar_producto(arbol->izq,cod);
  375.         else if(cod>arbol->codLinea) registrar_producto(arbol->der,cod);
  376.     }
  377. }
  378.  
  379. /*--------- Funcion que muestra todos los productos ingresados en una linea   ------*/
  380. void listar_productos(Producto q){
  381.  
  382.     if(q!=NULL){
  383.             listar_productos(q->izq);
  384.             cout<<"\\t"<<q->codProd<<"\\t"<<q->nomProd<<"\\t"<<q->precio<<endl;
  385.             listar_productos(q->der);
  386.         }
  387.  
  388. }
  389.  
  390. /*---------  Funcion que valida de que linea se mostraran los productos ---------*/
  391. void mostrar_producto(Linea arbol, int x){
  392.     if(arbol!=NULL){
  393.         if(arbol->codLinea==x){
  394.             cout<<"Lista de productos con la Linea:"<<arbol->codLinea<<endl;
  395.             cout<<" Cod Prod ||   Nombre   ||  precio"<<endl;
  396.             listar_productos(arbol->enlace);
  397.  
  398.         }
  399.         else if(x<arbol->codLinea) mostrar_producto(arbol->izq,x);
  400.         else if(x>arbol->codLinea) mostrar_producto(arbol->der,x);
  401.     }
  402.  
  403.  
  404. }
  405.  
  406. /*-----------------    Funcion para registrar clientes ---------------*/
  407. void registrar_cliente(Cliente &cliente, int x){
  408.  
  409.     if(cliente==NULL){
  410.     cliente=new (struct nodoCliente);
  411.     cliente->codCliente=x;
  412.  
  413.     cin.ignore(); cout<<"\\n\\tNOMBRE :"; cin.getline(cliente->nomCliente,max_char);
  414.     cin.ignore(); cout<<"\\n\\tAPELLIDOS :"; cin.getline(cliente->apellCliente,max_char);
  415.     cout<<"\\n\\tDNI :"; cin>>cliente->dniCliente;
  416.     cin.ignore(); cout<<"\\n\\tRUC :"; cin.getline(cliente->rucCliente,max_doce);
  417.     cin.ignore(); cout<<"\\n\\tTELEFONO :"; cin.getline(cliente->telefono,max_doce);
  418.     cin.ignore(); cout<<"\\n\\tDIRECCION :"; cin.getline(cliente->direccion,max_char);
  419.     cin.ignore(); cout<<"\\n\\tE-MAIL :"; cin.getline(cliente->email,max_char);
  420.  
  421.     cliente->izq=NULL;
  422.     cliente->der=NULL;
  423.     }
  424.     else if(x<cliente->codCliente) registrar_cliente(cliente->izq,x);
  425.     else if(x>cliente->codCliente) registrar_cliente(cliente->der,x);
  426. }
  427.  
  428. /*------- Funcion que modifica un dato de un cliente seleccionado  --------*/
  429. void actualizar_cliente(Cliente &cliente,int cod){
  430.  
  431.     if(cliente!=NULL){
  432.         if(cliente->codCliente==cod){
  433.  
  434.             int op;
  435.             system("cls");
  436.             cout<<"\\n\\n\\t\\t[  MODIFICAR CLIENTE ]\\n";
  437.             cout<<"\\t\\t------------------------";
  438.             cout<<"\\n\\n\\tCODIGO :"<<cliente->codCliente;
  439.             cout<<"\\n\\n\\tNOMBRE :"<<cliente->nomCliente;
  440.             cout<<"\\n\\n\\tAPELLIDOS :"<<cliente->apellCliente;
  441.             cout<<"\\n\\n\\tDNI :"<<cliente->dniCliente;
  442.             cout<<"\\n\\n\\tRUC :"<<cliente->rucCliente;
  443.             cout<<"\\n\\n\\tTELEFONO :"<<cliente->telefono;
  444.             cout<<"\\n\\n\\tDIRECCION :"<<cliente->direccion;
  445.             cout<<"\\n\\n\\tE-MAIL :"<<cliente->email;
  446.  
  447.  
  448.                 menu_actualizar_cliente();
  449.                 cin>>op;
  450.                 switch(op){
  451.  
  452.                     case 1: cin.ignore();
  453.                             cout<<"\\n\\tINGRESE NUEVO NOMBRE :";
  454.                             cin.getline(cliente->nomCliente,max_char);
  455.                             break;
  456.  
  457.                     case 2: cin.ignore();
  458.                             cout<<"\\n\\tINGRESE NUEVO APELLIDO :";
  459.                             cin.getline(cliente->apellCliente,max_char);
  460.                             break;
  461.  
  462.                     case 3: cin.ignore();
  463.                             cout<<"\\n\\tINGRESE NUEVO TELEFONO :";
  464.                             cin.getline(cliente->telefono,max_doce);
  465.                             break;
  466.  
  467.                     case 4: cin.ignore();
  468.                             cout<<"\\n\\tINGRESE NUEVO E-MAIL :";
  469.                             cin.getline(cliente->email,max_char);
  470.                             break;
  471.  
  472.                     case 5: cin.ignore();
  473.                             cout<<"\\n\\tINGRESE NUEVA DIRECCION :";
  474.                             cin.getline(cliente->direccion,max_char);
  475.                             break;
  476.  
  477.                     case 6: break;
  478.  
  479.                     default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
  480.                 }
  481.  
  482.  
  483.         }
  484.         else if(cod<cliente->codCliente) actualizar_cliente(cliente->izq,cod);
  485.         else if(cod>cliente->codCliente) actualizar_cliente(cliente->der,cod);
  486.     }
  487.  
  488. }
  489.  
  490. /*---------- Funcion que muestra todos los clientes registrados ---------*/
  491. void mostrar_clientes(Cliente cliente){
  492.  
  493.     if(cliente!=NULL){
  494.  
  495.         mostrar_clientes(cliente->izq);
  496.         cout<<"\\n\\n\\t\\t[    MOSTRAR CLIENTES    ]\\n";
  497.         cout<<"\\t\\t------------------------";
  498.         cout<<"\\n\\n\\tCODIGO :"<<cliente->codCliente;
  499.         cout<<"\\n\\n\\tNOMBRE :"<<cliente->nomCliente;
  500.         cout<<"\\n\\n\\tAPELLIDOS :"<<cliente->apellCliente;
  501.         cout<<"\\n\\n\\tDNI :"<<cliente->dniCliente;
  502.         cout<<"\\n\\n\\tRUC :"<<cliente->rucCliente;
  503.         cout<<"\\n\\n\\tTELEFONO :"<<cliente->telefono;
  504.         cout<<"\\n\\n\\tDIRECCION :"<<cliente->direccion;
  505.         cout<<"\\n\\n\\tE-MAIL :"<<cliente->email;
  506.         mostrar_clientes(cliente->der);
  507.     }
  508. }
  509. /*------- Funcion que retorna true cuando el codigo es valido  --------*/
  510. bool validar_codigo_cliente(Cliente cliente, int cod, Cliente &ptrCliente){
  511.  
  512.     if(cliente!=NULL){
  513.         if(cliente->codCliente==cod){
  514.                 ptrCliente=cliente;
  515.             return true;
  516.  
  517.         }
  518.         else if(cod<cliente->codCliente) validar_codigo_cliente(cliente->izq,cod,ptrCliente);
  519.         else if(cod>cliente->codCliente) validar_codigo_cliente(cliente->der,cod,ptrCliente);
  520.     }
  521.  
  522.  
  523. }
  524.  
  525. /*------- Funcion que valida si el codigo del producto es verdadero--------*/
  526. bool validar_cod_producto(Producto producto, int codprod, Producto &puntProducto){
  527.  
  528.     if(producto!=NULL){
  529.  
  530.         if(producto->codProd==codprod){
  531.             puntProducto=producto;
  532.             return true;
  533.  
  534.         }
  535.  
  536.         else if(codprod<producto->codProd) validar_cod_producto(producto->izq,codprod,puntProducto);
  537.         else if(codprod>producto->codProd) validar_cod_producto(producto->der,codprod,puntProducto);
  538.  
  539.     }
  540.  
  541. }
  542.  
  543. /*------- Funcion que busca el codigo de linea del producto en el arbol --------*/
  544. bool validar_codigo_producto(Linea arbol,int codlinea, int codprod, Producto &puntProducto){
  545.  
  546.     bool validar;
  547.     validar=false;
  548.     if(arbol!=NULL){
  549.         if(arbol->codLinea==codlinea){
  550.             validar=validar_cod_producto(arbol->enlace,codprod,puntProducto);
  551.             if (validar==true)
  552.                 return validar;
  553.  
  554.             }
  555.         else if(codlinea<arbol->codLinea) validar_codigo_producto(arbol->izq,codlinea,codprod,puntProducto);
  556.         else if(codlinea>arbol->codLinea) validar_codigo_producto(arbol->der,codlinea,codprod,puntProducto);
  557.  
  558.         }
  559.  
  560. }
  561.  
  562. /*------- Funcion que agrega un producto a la boleta de venta --------*/
  563. void insertar_producto_venta(DetalleVenta &q,Linea arbol){
  564.     bool validado;
  565.     int codLinea,x;
  566.     char op;
  567.  
  568.     DetalleVenta t,r;
  569.     r=new(struct nodoDetalleVenta);
  570.     cout<<"\\n\\tCODIGO:";
  571.     cin>>r->codigo;
  572.     r->ptrProducto=NULL;
  573.     validado=false;
  574.     do{
  575.         cout<<"\\n\\tINGRESE LINEA DEL PRODUCTO: ";
  576.         cin>>codLinea;
  577.         cout<<"\\n\\tCODIGO DE PRODUCTO:";
  578.         cin>>x;
  579.         validado=validar_codigo_producto(arbol,codLinea,x,r->ptrProducto);
  580.         if(validado==true){
  581.             cout<<"\\n\\t NOMBRE :"<<(r->ptrProducto)->nomProd;
  582.             cout<<"\\n\\t PRECIO :"<<(r->ptrProducto)->precio;
  583.             }
  584.         if(validado==false){
  585.             cout<<"\\n\\tCODIGO INVALIDO...!!";
  586.             }
  587.         cout<<"\\n\\n\\tDesea continuar  ? <y/n>: ";
  588.         cin>>op;
  589.         switch(op){
  590.             case \'y\':   break;
  591.  
  592.             case \'Y\':   break;
  593.  
  594.             case \'n\':   return ;
  595.  
  596.             case \'N\':   return ;
  597.  
  598.             default: cout<<"\\n\\t Ingrese una opcion valida";
  599.             }
  600.     }while(validado==false);
  601.     r->codProd=x;
  602.     cout<<"\\n\\tCANTIDAD:";
  603.     cin>>r->cantidad;
  604.  
  605.     strcpy(r->marca,(r->ptrProducto)->nomProd);
  606.  
  607.     r->subtotal=(r->cantidad)*((r->ptrProducto)->precio);
  608.     r->sgte=NULL;
  609.  
  610.     if(q==NULL)
  611.         q=r;
  612.     else{
  613.         t=q;
  614.         while(t->sgte!=NULL)
  615.             t=t->sgte;
  616.  
  617.         t->sgte=r;
  618.  
  619.     }
  620.  
  621.  
  622. }
  623.  
  624. /*------- Funcion que ordena agregar la cantidad de productos deseados  --------*/
  625. void detalle_de_venta(DetalleVenta &detalle,Linea arbol,Venta &venta){
  626.  
  627.     char op;
  628.     cout<<"\\n\\n\\t\\t[    LISTA DE PRODUCTOS VENDIDOS  ]\\n";
  629.     cout<<"\\t\\t-------------------------------";
  630.     do{
  631.  
  632.         insertar_producto_venta(detalle,arbol);
  633.         cout<<"\\n\\n\\tDesea agregar otro producto a la venta ? <y/n>: ";
  634.         cin>>op;
  635.         switch(op){
  636.             case \'y\':   break;
  637.  
  638.             case \'Y\':   break;
  639.  
  640.             case \'n\':   return ;
  641.  
  642.             case \'N\':   return ;
  643.  
  644.             default: cout<<"\\n\\t Ingrese una opcion valida";
  645.             }
  646.     }while(op==\'y\'||op==\'Y\');
  647.  
  648. }
  649.  
  650. /*------- Funcion que registra una venta a la lista enlazada venta  --------*/
  651. void registrar_venta(Venta &venta,Cliente cliente, Linea arbol){
  652.  
  653.     int x; char op;
  654.     float total=0;
  655.     bool validado;
  656.     Venta q,t;
  657.     DetalleVenta aux;
  658.     q=new(struct nodoVenta);
  659.     cout<<"\\n\\n\\t\\t[    BOLETA DE VENTAS   ]\\n";
  660.     cout<<"\\t\\t------------------------";
  661.     cout<<"\\n\\tCODIGO:";
  662.     cin>>q->codigo;
  663.     cin.ignore(); cout<<"\\n\\tFECHA:"; cin.getline(q->fecha,max_doce);
  664.     validado=false;
  665.     do{
  666.         cout<<"\\n\\tCODIGO DE CLIENTE:";
  667.         cin>>x;
  668.         validado=validar_codigo_cliente(cliente,x,q->ptrCliente);
  669.         if(validado==true)
  670.             cout<<"\\n\\tNOMBRE:"<<(q->ptrCliente)->nomCliente;
  671.         if(validado==false)
  672.             cout<<"\\n\\tCODIGO INVALIDO...!!";
  673.         cout<<"\\n\\n\\tDesea continuar con el registro de venta ? <y/n>: ";
  674.         cin>>op;
  675.         switch(op){
  676.             case \'y\':   break;
  677.  
  678.             case \'Y\':   break;
  679.  
  680.             case \'n\':   delete(q);
  681.                         return ;
  682.  
  683.             case \'N\':   delete(q);
  684.                         return ;
  685.  
  686.             default: cout<<"\\n\\t Ingrese una opcion valida";
  687.             }
  688.     }while(validado==false);
  689.  
  690.     q->codCliente=x;
  691.     q->detalle=NULL;
  692.     q->sgte=NULL;
  693.     detalle_de_venta(q->detalle,arbol,q);//insertamos los productos deseados
  694.     /*--- calculamos el monto */
  695.     aux=q->detalle;
  696.     while(aux!=NULL){
  697.         total=total+aux->subtotal;
  698.         aux=aux->sgte;
  699.     }
  700.     q->monto=total;
  701.     if(venta==NULL)
  702.         venta=q;
  703.  
  704.     else {
  705.         t=venta;
  706.         while(t->sgte!=NULL)
  707.             t=t->sgte;
  708.  
  709.         t->sgte=q;
  710.     }
  711.  
  712. }
  713.  
  714.  
  715. /*------- Funcion muestra todas las ventas de la lista q  --------*/
  716. void listar_ventas(Venta q){
  717.     int i=1;
  718.     while(q!=NULL){
  719.  
  720.         cout<<"\\n\\n\\tDATOS DE LA VENTA ["<<i<<"] ";
  721.         cout<<"\\n\\t------------------------";
  722.         cout<<"\\n\\tCODIGO DE VENTA: "<<q->codigo;
  723.         cout<<"\\n\\tFECHA  : "<<q->fecha;
  724.         cout<<"\\n\\tCODIGO DE CLIENTE : "<<q->codCliente;
  725.         cout<<"\\n\\tNOMBRE DEL CLIENTE:"<<(q->ptrCliente)->nomCliente;
  726.         cout<<"\\n\\tMONTO:"<<q->monto;
  727.  
  728.         q=q->sgte;
  729.         i++;
  730.     }
  731.  
  732. }
  733.  
  734. /*------- Funcion que muestra una venta con sus productos  --------*/
  735. void mostrar_venta(Venta q, int cod){
  736.     int i=1;
  737.     while(q!=NULL){
  738.  
  739.         if(q->codigo==cod){
  740.             cout<<"\\n\\n\\t[  DATOS DE LA VENTA   ]";
  741.             cout<<"\\n\\t------------------------";
  742.             cout<<"\\n\\tCODIGO DE VENTA: "<<q->codigo;
  743.             cout<<"\\n\\tFECHA  : "<<q->fecha;
  744.             cout<<"\\n\\tCODIGO DE CLIENTE : "<<q->codCliente;
  745.             cout<<"\\n\\tNOMBRE DEL CLIENTE:"<<(q->ptrCliente)->nomCliente;
  746.             cout<<"\\n\\tMONTO:"<<q->monto<<endl;
  747.             while(q->detalle!=NULL){
  748.                 cout<<"\\n\\n\\tPRODUCTO ["<<i<<"]\\n";
  749.                 cout<<"\\n\\tCODIGO:"<<(q->detalle)->codigo;
  750.                 cout<<"\\n\\tCODIGO DEL PRODUCTO:"<<(q->detalle)->codProd;
  751.                 cout<<"\\n\\tCANTIDAD:"<<(q->detalle)->cantidad;
  752.                 cout<<"\\n\\tMARCA:"<<(q->detalle)->ptrProducto->nomProd;
  753.                 cout<<"\\n\\tSUBTOTAL:"<<(q->detalle)->subtotal;
  754.                 (q->detalle)=(q->detalle)->sgte;
  755.                 i++;
  756.             }
  757.              q=q->sgte;
  758.  
  759.         }
  760.         else q=q->sgte;
  761.     }
  762.  
  763. }
  764.  
  765. /*-----------------    Funcion para registrar proveedores ---------------*/
  766. void registrar_proveedor(Proveedor &proveedor, int x){
  767.  
  768.     if(proveedor==NULL){
  769.     proveedor=new (struct nodoProveedor);
  770.     proveedor->codProveedor=x;
  771.  
  772.     cin.ignore(); cout<<"\\n\\tRAZON SOCIAL :"; cin.getline(proveedor->razonSocial,max_char);
  773.     cin.ignore(); cout<<"\\n\\tRUC :"; cin.getline(proveedor->rucProveedor,max_doce);
  774.     cin.ignore(); cout<<"\\n\\tTELEFONO :"; cin.getline(proveedor->telefono,max_doce);
  775.     cin.ignore(); cout<<"\\n\\tDIRECCION :"; cin.getline(proveedor->direccion,max_char);
  776.     cin.ignore(); cout<<"\\n\\tE-MAIL :"; cin.getline(proveedor->email,max_char);
  777.     cin.ignore(); cout<<"\\n\\tWEB :"; cin.getline(proveedor->web,max_char);
  778.     proveedor->izq=NULL;
  779.     proveedor->der=NULL;
  780.     }
  781.     else if(x<proveedor->codProveedor) registrar_proveedor(proveedor->izq,x);
  782.     else if(x>proveedor->codProveedor) registrar_proveedor(proveedor->der,x);
  783. }
  784.  
  785. /*------- Funcion que modifica un dato de un proveedor seleccionado  --------*/
  786. void actualizar_proveedor(Proveedor &proveedor,int cod){
  787.  
  788.     if(proveedor!=NULL){
  789.         if(proveedor->codProveedor==cod){
  790.  
  791.             int op;
  792.             system("cls");
  793.             cout<<"\\n\\n\\t\\t[  MODIFICAR CLIENTE ]\\n";
  794.             cout<<"\\t\\t------------------------";
  795.             cout<<"\\n\\n\\tCODIGO :"<<proveedor->codProveedor;
  796.             cout<<"\\n\\n\\tRAZON SOCIAL :"<<proveedor->razonSocial;
  797.             cout<<"\\n\\n\\tRUC :"<<proveedor->rucProveedor;
  798.             cout<<"\\n\\n\\tTELEFONO :"<<proveedor->telefono;
  799.             cout<<"\\n\\n\\tDIRECCION :"<<proveedor->direccion;
  800.             cout<<"\\n\\n\\tE-MAIL :"<<proveedor->email;
  801.             cout<<"\\n\\n\\tWEB :"<<proveedor->web;
  802.  
  803.  
  804.                 menu_actualizar_proveedor();
  805.                 cin>>op;
  806.                 switch(op){
  807.  
  808.                     case 1: cin.ignore();
  809.                             cout<<"\\n\\tINGRESE NUEVA RAZON SOCIAL :";
  810.                             cin.getline(proveedor->razonSocial,max_char);
  811.                             break;
  812.  
  813.                     case 2: cin.ignore();
  814.                             cout<<"\\n\\tINGRESE NUEVO TELEFONO :";
  815.                             cin.getline(proveedor->telefono,max_doce);
  816.                             break;
  817.  
  818.                     case 3: cin.ignore();
  819.                             cout<<"\\n\\tINGRESE NUEVO E-MAIL :";
  820.                             cin.getline(proveedor->email,max_char);
  821.                             break;
  822.  
  823.                     case 4: cin.ignore();
  824.                             cout<<"\\n\\tINGRESE NUEVA DIRECCION :";
  825.                             cin.getline(proveedor->direccion,max_char);
  826.                             break;
  827.  
  828.                     case 5: cin.ignore();
  829.                             cout<<"\\n\\tINGRESE NUEVA WEB :";
  830.                             cin.getline(proveedor->web,max_char);
  831.                             break;
  832.  
  833.                     case 6: break;
  834.  
  835.                     default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
  836.                 }
  837.  
  838.  
  839.         }
  840.         else if(cod<proveedor->codProveedor) actualizar_proveedor(proveedor->izq,cod);
  841.         else if(cod>proveedor->codProveedor) actualizar_proveedor(proveedor->der,cod);
  842.     }
  843.  
  844. }
  845.  
  846. /*---------- Funcion que muestra todos los proveedores registrados ---------*/
  847. void mostrar_proveedores(Proveedor proveedor){
  848.  
  849.     if(proveedor!=NULL){
  850.  
  851.         mostrar_proveedores(proveedor->izq);
  852.         cout<<"\\n\\n\\t\\t[    MOSTRAR PROVEEDOR    ]\\n";
  853.         cout<<"\\t\\t------------------------";
  854.         cout<<"\\n\\n\\tCODIGO :"<<proveedor->codProveedor;
  855.         cout<<"\\n\\n\\tRAZON SOCIAL :"<<proveedor->razonSocial;
  856.         cout<<"\\n\\n\\tRUC :"<<proveedor->rucProveedor;
  857.         cout<<"\\n\\n\\tTELEFONO :"<<proveedor->telefono;
  858.         cout<<"\\n\\n\\tDIRECCION :"<<proveedor->direccion;
  859.         cout<<"\\n\\n\\tE-MAIL :"<<proveedor->email;
  860.         cout<<"\\n\\n\\tWEB :"<<proveedor->web;
  861.         mostrar_proveedores(proveedor->der);
  862.     }
  863. }
  864.  
  865. /*------- Funcion muestra todas las ventas de la lista q  --------*/
  866. void listar_pedidos(Pedido q){
  867.     int i=1;
  868.     while(q!=NULL){
  869.  
  870.         cout<<"\\n\\n\\tDATOS DEL PEDIDO ["<<i<<"] ";
  871.         cout<<"\\n\\t------------------------";
  872.         cout<<"\\n\\tCODIGO DE PEDIDO: "<<q->codigo;
  873.         cout<<"\\n\\tFECHA  : "<<q->fecha;
  874.         cout<<"\\n\\tCODIGO DE PROVEEDOR : "<<q->codProveedor;
  875.         cout<<"\\n\\tRAZON SOCIAL:"<<(q->ptrProveedor)->razonSocial;
  876.         cout<<"\\n\\tMONTO:"<<q->monto;
  877.  
  878.         q=q->sgte;
  879.         i++;
  880.     }
  881.  
  882. }
  883.  
  884.  
  885. /*------- Funcion que agrega un producto a la proforma de pedido --------*/
  886. void insertar_producto_pedido(DetallePedido &q,Linea arbol){
  887.     bool validado;
  888.     int codLinea,x;
  889.     char op;
  890.  
  891.     DetallePedido t,r;
  892.     r=new(struct nodoDetallePedido);
  893.     cout<<"\\n\\tCODIGO:";
  894.     cin>>r->codigo;
  895.     r->ptrProducto=NULL;
  896.     validado=false;
  897.     do{
  898.         cout<<"\\n\\tINGRESE LINEA DEL PRODUCTO: ";
  899.         cin>>codLinea;
  900.         cout<<"\\n\\tCODIGO DE PRODUCTO:";
  901.         cin>>x;
  902.         validado=validar_codigo_producto(arbol,codLinea,x,r->ptrProducto);
  903.         if(validado==true){
  904.             cout<<"\\n\\t NOMBRE :"<<(r->ptrProducto)->nomProd;
  905.             cout<<"\\n\\t PRECIO :"<<(r->ptrProducto)->precio;
  906.             }
  907.         if(validado==false)
  908.             cout<<"\\n\\tCODIGO INVALIDO...!!";
  909.         cout<<"\\n\\n\\tDesea continuar  ? <y/n>: ";
  910.         cin>>op;
  911.         switch(op){
  912.             case \'y\':   break;
  913.  
  914.             case \'Y\':   break;
  915.  
  916.             case \'n\':   return ;
  917.  
  918.             case \'N\':   return ;
  919.  
  920.             default: cout<<"\\n\\t Ingrese una opcion valida";
  921.             }
  922.     }while(validado==false);
  923.     r->codProd=x;
  924.     cout<<"\\n\\tCANTIDAD:";
  925.     cin>>r->cantidad;
  926.  
  927.     strcpy(r->marca,(r->ptrProducto)->nomProd);
  928.  
  929.     r->subtotal=(r->cantidad)*((r->ptrProducto)->precio);
  930.     r->sgte=NULL;
  931.  
  932.     if(q==NULL)
  933.         q=r;
  934.     else{
  935.         t=q;
  936.         while(t->sgte!=NULL)
  937.             t=t->sgte;
  938.  
  939.         t->sgte=r;
  940.  
  941.     }
  942.  
  943.  
  944. }
  945.  
  946.  
  947. /*------- Funcion que ordena agregar la cantidad de productos deseados al detalle del pedido  --------*/
  948. void detalle_de_pedido(DetallePedido &detalle,Linea arbol,Pedido &pedido){
  949.  
  950.     char op;
  951.     cout<<"\\n\\n\\t\\t[    LISTA DE PRODUCTOS A PEDIR  ]\\n";
  952.     cout<<"\\t\\t-------------------------------";
  953.     do{
  954.  
  955.         insertar_producto_pedido(detalle,arbol);
  956.         cout<<"\\n\\n\\tDesea agregar otro producto a la Proforma ? <y/n>: ";
  957.         cin>>op;
  958.         switch(op){
  959.             case \'y\':   break;
  960.  
  961.             case \'Y\':   break;
  962.  
  963.             case \'n\':   return ;
  964.  
  965.             case \'N\':   return ;
  966.  
  967.             default: cout<<"\\n\\t Ingrese una opcion valida";
  968.             }
  969.     }while(op==\'y\'||op==\'Y\');
  970.  
  971. }
  972.  
  973. /*------- Funcion que retorna true cuando el codigo es valido  --------*/
  974. bool validar_codigo_proveedor(Proveedor proveedor, int cod, Proveedor &ptrProveedor){
  975.  
  976.     if(proveedor!=NULL){
  977.         if(proveedor->codProveedor==cod){
  978.                 ptrProveedor=proveedor;
  979.             return true;
  980.  
  981.         }
  982.         else if(cod<proveedor->codProveedor) validar_codigo_proveedor(proveedor->izq,cod,ptrProveedor);
  983.         else if(cod>proveedor->codProveedor) validar_codigo_proveedor(proveedor->der,cod,ptrProveedor);
  984.     }
  985.  
  986.  
  987. }
  988.  
  989. /*------- Funcion que registra un Pedido a la lista enlazada Pedido  --------*/
  990. void registrar_pedido(Pedido &pedido,Proveedor proveedor, Linea arbol){
  991.  
  992.     int x; char op;
  993.     float total=0;
  994.     bool validado;
  995.     Pedido q,t;
  996.     DetallePedido aux;
  997.     q=new(struct nodoPedido);
  998.     cout<<"\\n\\n\\t\\t[    PROFORMA DE PEDIDO   ]\\n";
  999.     cout<<"\\t\\t-----------------------------";
  1000.     cout<<"\\n\\tCODIGO:";
  1001.     cin>>q->codigo;
  1002.     cin.ignore(); cout<<"\\n\\tFECHA:"; cin.getline(q->fecha,max_doce);
  1003.     validado=false;
  1004.     do{
  1005.         cout<<"\\n\\tCODIGO DE PROVEEDOR:";
  1006.         cin>>x;
  1007.         validado=validar_codigo_proveedor(proveedor,x,q->ptrProveedor);
  1008.         if(validado==true)
  1009.             cout<<"\\n\\tRAZON SOCIAL:"<<(q->ptrProveedor)->razonSocial;
  1010.  
  1011.         if(validado==false)
  1012.             cout<<"\\n\\tCODIGO INVALIDO...!!";
  1013.         cout<<"\\n\\n\\tDesea continuar con el registro de Pedido ? <y/n>: ";
  1014.         cin>>op;
  1015.         switch(op){
  1016.             case \'y\':   break;
  1017.  
  1018.             case \'Y\':   break;
  1019.  
  1020.             case \'n\':   delete(q);
  1021.                         return ;
  1022.  
  1023.             case \'N\':   delete(q);
  1024.                         return ;
  1025.  
  1026.             default: cout<<"\\n\\t Ingrese una opcion valida";
  1027.             }
  1028.     }while(validado==false);
  1029.  
  1030.     q->codProveedor=x;
  1031.     q->detalle=NULL;
  1032.     q->sgte=NULL;
  1033.     detalle_de_pedido(q->detalle,arbol,q);//insertamos los productos deseados
  1034.  
  1035.     /*--- calculamos el monto */
  1036.     aux=q->detalle;
  1037.     while(aux!=NULL){
  1038.         total=total+aux->subtotal;
  1039.         aux=aux->sgte;
  1040.     }
  1041.     q->monto=total;
  1042.     if(pedido==NULL)
  1043.         pedido=q;
  1044.  
  1045.     else {
  1046.         t=pedido;
  1047.         while(t->sgte!=NULL)
  1048.             t=t->sgte;
  1049.  
  1050.         t->sgte=q;
  1051.     }
  1052.  
  1053. }
  1054.  
  1055. /*------- Funcion que muestra un pedido con sus productos  --------*/
  1056. void mostrar_pedido(Pedido q, int cod){
  1057.     int i=1;
  1058.     while(q!=NULL){
  1059.  
  1060.         if(q->codigo==cod){
  1061.             cout<<"\\n\\n\\t[   DATOS DEL PEDIDO   ]";
  1062.             cout<<"\\n\\t------------------------";
  1063.             cout<<"\\n\\tCODIGO DE PEDIDO: "<<q->codigo;
  1064.             cout<<"\\n\\tFECHA  : "<<q->fecha;
  1065.             cout<<"\\n\\tCODIGO DE PROVEEDOR : "<<q->codProveedor;
  1066.             cout<<"\\n\\tRAZON SOCIAL:"<<(q->ptrProveedor)->razonSocial;
  1067.             cout<<"\\n\\tMONTO:"<<q->monto<<endl;
  1068.             while(q->detalle!=NULL){
  1069.                 cout<<"\\n\\n\\tPRODUCTO ["<<i<<"]\\n";
  1070.                 cout<<"\\n\\tCODIGO:"<<(q->detalle)->codigo;
  1071.                 cout<<"\\n\\tCODIGO DEL PRODUCTO:"<<(q->detalle)->codProd;
  1072.                 cout<<"\\n\\tCANTIDAD:"<<(q->detalle)->cantidad;
  1073.                 cout<<"\\n\\tMARCA:"<<(q->detalle)->ptrProducto->nomProd;
  1074.                 cout<<"\\n\\tSUBTOTAL:"<<(q->detalle)->subtotal;
  1075.                 (q->detalle)=(q->detalle)->sgte;
  1076.                 i++;
  1077.             }
  1078.              q=q->sgte;
  1079.  
  1080.         }
  1081.         else q=q->sgte;
  1082.     }
  1083.  
  1084. }
  1085.  
  1086. /*---------------------- FUNCION PRINCIPAL ----------------------*/
  1087. int main (void){
  1088.     SetConsoleTitle("SISTEMA DE ALMACEN"); // PARA CAMBIAR EL TITULO AL PROGRAMA
  1089.     Linea arbol=NULL;
  1090.     Cliente cliente=NULL;
  1091.     Venta venta=NULL;
  1092.     Proveedor proveedor=NULL;
  1093.     Pedido pedido=NULL;
  1094.  
  1095.  
  1096.     int op,op2,dato;
  1097.         do{ titulo();
  1098.             menu1();
  1099.             cin>>op;
  1100.  
  1101.             switch(op){
  1102.  
  1103.                 /*-------------  ALMACEN ---------------*/
  1104.                 case 1: system("cls");
  1105.                         do{
  1106.                             titulo();
  1107.                             menu2();
  1108.                             cin>>op2;
  1109.  
  1110.                             switch(op2){
  1111.                                 case 1: cout<<"\\nIngrese codigo de linea:";
  1112.                                         cin>>dato;
  1113.                                         insertar_linea(arbol,dato);
  1114.                                         break;
  1115.  
  1116.                                 case 2: mostrar_linea(arbol);
  1117.                                         break;
  1118.  
  1119.                                 case 3: cout<<"\\nIngrese codigo de Linea del Producto:";
  1120.                                         cin>>dato;
  1121.                                         registrar_producto(arbol,dato);
  1122.                                         break;
  1123.  
  1124.                                 case 4: cout<<"\\nIngrese codigo de Linea del Producto:";
  1125.                                         cin>>dato;
  1126.                                         mostrar_producto(arbol,dato);
  1127.                                         break;
  1128.  
  1129.                                 case 5: break;
  1130.  
  1131.                                 default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
  1132.  
  1133.                             }
  1134.                             cout<<endl;
  1135.                             system("pause");  system("cls");
  1136.                         }while(op2!=5);
  1137.                         break;
  1138.  
  1139.                 /*-------------  CLIENTES ---------------*/
  1140.                 case 2: system("cls");
  1141.                         do{
  1142.                             titulo();
  1143.                             menu3();
  1144.                             cin>>op2;
  1145.  
  1146.                             switch(op2){
  1147.                                 case 1: cout<<"\\n\\n\\t\\t[  REGISTRO DE CLIENTE ]\\n";
  1148.                                         cout<<"\\t\\t------------------------\\n";
  1149.                                         cout<<"\\n\\tCodigo de cliente:";
  1150.                                         cin>>dato;
  1151.                                         registrar_cliente(cliente,dato);
  1152.                                         break;
  1153.  
  1154.                                 case 2: cout<<"\\n\\n\\t\\t[  ACTUALIZAR CLIENTE ]\\n";
  1155.                                         cout<<"\\t\\t------------------------\\n";
  1156.                                         cout<<"\\n\\tCodigo de cliente:";
  1157.                                         cin>>dato;
  1158.                                         actualizar_cliente(cliente,dato);
  1159.                                         break;
  1160.  
  1161.                                 case 3: system("cls");
  1162.                                         mostrar_clientes(cliente);
  1163.                                         break;
  1164.  
  1165.  
  1166.                                 case 5: break;
  1167.  
  1168.                                 default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
  1169.  
  1170.                             }
  1171.                             cout<<endl;
  1172.                             system("pause");  system("cls");
  1173.                         }while(op2!=5);
  1174.                         break;
  1175.  
  1176.                 /*-------------  VENTAS ---------------*/
  1177.                 case 3: system("cls");
  1178.                         do{
  1179.                             titulo();
  1180.                             menu4();
  1181.                             cin>>op2;
  1182.  
  1183.                             switch(op2){
  1184.                                 case 1: registrar_venta(venta,cliente,arbol);
  1185.                                         break;
  1186.  
  1187.                                 case 2: cout<<"\\n\\n\\t\\t[  LISTAR VENTAS REALIZADAS ]\\n";
  1188.                                         cout<<"\\t\\t------------------------\\n";
  1189.                                         listar_ventas(venta);
  1190.                                         break;
  1191.                                 case 3: cout<<"\\n\\n\\t\\t[    DETALLES DE VENTA    ]\\n";
  1192.                                         cout<<"\\t\\t------------------------\\n";
  1193.                                         cout<<"\\n\\tIngrese codigo de venta:";
  1194.                                         cin>>dato;
  1195.                                         mostrar_venta(venta,dato);
  1196.                                         break;
  1197.  
  1198.                                 case 5: break;
  1199.  
  1200.                                 default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
  1201.  
  1202.                             }
  1203.                             cout<<endl;
  1204.                             system("pause");  system("cls");
  1205.                         }while(op2!=5);
  1206.                         break;
  1207.                 /*-------------  PROVEEDOR ---------------*/
  1208.                 case 4: system("cls");
  1209.                         do{
  1210.                             titulo();
  1211.                             menu5();
  1212.                             cin>>op2;
  1213.  
  1214.                             switch(op2){
  1215.                                 case 1: cout<<"\\n\\n\\t\\t[  REGISTRO DE PROVEEDOR ]\\n";
  1216.                                         cout<<"\\t\\t------------------------\\n";
  1217.                                         cout<<"\\n\\tCodigo de Proveedor:";
  1218.                                         cin>>dato;
  1219.                                         registrar_proveedor(proveedor,dato);
  1220.                                         break;
  1221.  
  1222.                                 case 2: cout<<"\\n\\n\\t\\t[  ACTUALIZAR PROVEEDOR ]\\n";
  1223.                                         cout<<"\\t\\t------------------------\\n";
  1224.                                         cout<<"\\n\\tCodigo de Proveedor:";
  1225.                                         cin>>dato;
  1226.                                         actualizar_proveedor(proveedor,dato);
  1227.                                         break;
  1228.  
  1229.                                 case 3: system("cls");
  1230.                                         mostrar_proveedores(proveedor);
  1231.                                         break;
  1232.  
  1233.  
  1234.                                 case 5: break;
  1235.  
  1236.                                 default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
  1237.  
  1238.                             }
  1239.                             cout<<endl;
  1240.                             system("pause");  system("cls");
  1241.                         }while(op2!=5);
  1242.                         break;
  1243.  
  1244.                 /*-------------  PEDIDOS ---------------*/
  1245.                 case 5: system("cls");
  1246.                         do{
  1247.                             titulo();
  1248.                             menu6();
  1249.                             cin>>op2;
  1250.  
  1251.                             switch(op2){
  1252.                                 case 1: registrar_pedido(pedido,proveedor,arbol);
  1253.                                         break;
  1254.  
  1255.                                 case 2: cout<<"\\n\\n\\t\\t[  LISTAR PEDIDOS REALIZADOS ]\\n";
  1256.                                         cout<<"\\t\\t------------------------\\n";
  1257.                                         listar_pedidos(pedido);
  1258.                                         break;
  1259.  
  1260.                                 case 3: cout<<"\\n\\n\\t\\t[    DETALLES DE PEDIDO    ]\\n";
  1261.                                         cout<<"\\t\\t------------------------\\n";
  1262.                                         cout<<"\\n\\tIngrese codigo de pedido:";
  1263.                                         cin>>dato;
  1264.                                         mostrar_pedido(pedido,dato);
  1265.                                         break;
  1266.  
  1267.                                 case 5: break;
  1268.  
  1269.                                 default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
  1270.  
  1271.                             }
  1272.                             cout<<endl;
  1273.                             system("pause");  system("cls");
  1274.                         }while(op2!=5);
  1275.                         break;
  1276.                 case 6: return 0;
  1277.  
  1278.  
  1279.                 default: cout<<"\\nINGRESE UNA OPCION VALIDA...\\n"; break;
  1280.  
  1281.             }
  1282.             cout<<endl;
  1283.             system("pause");  system("cls");
  1284.  
  1285.         }while(op!=6);
  1286.  
  1287.         system("pause");
  1288.  
  1289.  
  1290.     return 0;
  1291. }
');