Exemple #1
0
 private void InsertarEnHoja(NodoSP padre, int index, SucursalPrecio dato)
 {
     if (padre.hijos[index].estaLleno)           //NodoSP lleno en el cual quiero insertar
     {
         if (padre.hijos[index + 1] != null)     // ¿Es el hermano correcto?
         {
             if (padre.hijos[index + 1] != null) //Lleno, entonces partimos el nodo derecho
             {
                 PartirEn23(padre, index, dato, false);
             }
             else //No esta lleno, entonces hago rotacion a la derecha
             {
                 RotarDerecha(padre, index, dato);
             }
         }
         else if (padre.hijos[index - 1] != null)  //no hay hermano derecho, ¿Es el hijo izquierdo?
         {
             if (padre.hijos[index - 1].estaLleno) //Lleno, entonces partimos el nodo izquierdo
             {
                 PartirEn23(padre, index, dato, false);
             }
             else//No esta lleno, entonces hago rotacion a la derecha
             {
                 RotarIzquierda(padre, index, dato);
             }
         }
     }
     else
     {
         InsertarNoLleno(padre.hijos[index], dato);
     }
 }
Exemple #2
0
        private void InsertarNodoSP(NodoSP padre, SucursalPrecio dato)
        {
            int index = padre.tamaño - 1;

            if (padre.tamaño > 0)
            {
                while (index >= 0 && dato.idSucursal < padre.Llaves[index].idSucursal)
                {
                    index--;
                }
            }
            index++;
            if (raiz.estaLleno)
            {
                partirRaiz(padre);
                InsertarNodoSP(raiz, dato);
            }
            else if (raiz.esHoja)
            {
                InsertarNoLleno(padre, dato);
            }
            else if (padre.hijos[index] != null && padre.hijos[index].esHoja)
            {
                InsertarEnHoja(padre, index, dato);
            }
            else
            {
                InsertarNodoSP(padre.hijos[index], dato);
            }
        }
Exemple #3
0
        private void RotarDerecha(NodoSP padre, int indexhijo, SucursalPrecio dato)
        {
            int llaveDelIndexPadre;
            int tamañoNodoSP = padre.hijos[indexhijo].tamaño;

            if (indexhijo == 0)
            {
                llaveDelIndexPadre = 0;
            }
            else if (indexhijo == tamañoNodoSP)
            {
                llaveDelIndexPadre = tamañoNodoSP - 1;
            }
            else
            {
                llaveDelIndexPadre = indexhijo;
            }

            int tamañoNodoSPHermano = padre.hijos[indexhijo + 1].tamaño;

            //Mover elementos a la hermano derech, entonces hacemos el index 0
            for (int j = tamañoNodoSPHermano - 1; j >= 0; j--)
            {
                padre.hijos[indexhijo + 1].Llaves[j + 1] = padre.hijos[indexhijo + 1].Llaves[j];
            }

            //Si el no es hoja, tengo que moverlo a los hijos
            if (!padre.hijos[indexhijo].esHoja)
            {
                for (int j = tamañoNodoSPHermano; j >= 0; j--)
                {
                    padre.hijos[indexhijo + 1].hijos[0] = padre.hijos[indexhijo + 1].hijos[j];

                    //Ulitmo hijo del nodo esta lleno y enviamos el primero al nodo derecho
                    padre.hijos[indexhijo + 1].hijos[0] = padre.hijos[indexhijo].hijos[tamañoNodoSPHermano];
                    padre.hijos[indexhijo].hijos[tamañoNodoSPHermano] = null;
                }
            }
            padre.hijos[indexhijo + 1].Llaves[0] = padre.Llaves[llaveDelIndexPadre];
            padre.hijos[indexhijo + 1].tamaño++;
            if (padre.hijos[indexhijo].esHoja && dato.idSucursal <padre.Llaves[llaveDelIndexPadre].idSucursal &&
                                                                  dato.idSucursal> padre.hijos[indexhijo].Llaves[tamañoNodoSP - 1].idSucursal)
            {
                padre.Llaves[llaveDelIndexPadre] = dato;
            }
            else
            {
                padre.Llaves[llaveDelIndexPadre] = padre.hijos[indexhijo].Llaves[tamañoNodoSP - 1];

                padre.hijos[indexhijo].Llaves[tamañoNodoSP - 1] = null;
                padre.hijos[indexhijo].tamaño--;
                InsertarNoLleno(padre.hijos[indexhijo], dato);
            }

            if (padre.hijos[indexhijo + 1].tamaño == tamañoNodoSP)
            {
                padre.hijos[indexhijo + 1].estaLleno = true;
            }
        }
Exemple #4
0
        private void RotarIzquierda(NodoSP padre, int indexhijo, SucursalPrecio dato)
        {
            int llaveIndexPadre;

            if (indexhijo == 0)
            {
                llaveIndexPadre = 0;
            }
            else if (indexhijo == tamanioMax)
            {
                llaveIndexPadre = tamanioMax - 1;
            }
            else
            {
                llaveIndexPadre = indexhijo - 1;
            }

            //Elemento de padre para hijo izquierdo
            InsertarNoLleno(padre.hijos[indexhijo - 1], padre.Llaves[llaveIndexPadre]);
            if (padre.hijos[indexhijo].esHoja &&
                dato.idSucursal > padre.Llaves[llaveIndexPadre].idSucursal && dato.idSucursal < padre.hijos[indexhijo].Llaves[0].idSucursal)
            {
                //Meter dato si padre es mayor que dato y dato es mayor que el hermano derecho
                padre.Llaves[llaveIndexPadre] = dato;
            }
            else
            {
                //De estar el nodo lleno, a hacerlo mas pequeño
                padre.Llaves[llaveIndexPadre] = padre.hijos[indexhijo].Llaves[0];

                //Mover los elementos del nodo lleno al izquierdo
                int tamañoNodoSP = padre.hijos[indexhijo].tamaño;
                for (int i = 0; i < tamañoNodoSP - 1; i++)
                {
                    padre.hijos[indexhijo].Llaves[i] = padre.hijos[indexhijo].Llaves[i + 1];
                }

                //Si no es hoja, tengo que mover al hijo
                //mover hijo a la izquierdo en campo 1
                if (!padre.hijos[indexhijo].esHoja)
                {
                    padre.hijos[indexhijo].hijos[tamañoNodoSP] = padre.hijos[indexhijo].hijos[0];
                    for (int i = 0; i < tamañoNodoSP - 1; i++)
                    {
                        padre.hijos[indexhijo].hijos[i] = padre.hijos[indexhijo].hijos[i + 1];
                    }
                }

                //Eliminar ultimo elemento del nodo lleno
                padre.hijos[indexhijo].Llaves[tamañoNodoSP - 1] = null;

                //Cambiar tamaño
                padre.hijos[indexhijo].tamaño--;
                padre.hijos[indexhijo].estaLleno = false;

                InsertarNoLleno(padre.hijos[indexhijo], dato);
            }
        }
Exemple #5
0
        public void insertarSyP(SucursalPrecio nueva)
        {
            string escribir = nueva.idSucursal.ToString() + "," + nueva.idProducto.ToString() + "," + nueva.cantidadInv;

            using (StreamWriter sw = new StreamWriter(d2))
            {
                sw.WriteLine(escribir);
            }
            inventario.Insertar(nueva);
        }
Exemple #6
0
        public bool Busqueda(int idSucursal, int idProcuto)
        {
            SucursalPrecio resultado = BuscarCompa(raiz, idSucursal, idProcuto);

            if (resultado != null)
            {
                return(true);
            }
            return(false);
        }
        public void PostSucProdu([FromBody] object value)
        {
            var            val            = Newtonsoft.Json.JsonConvert.SerializeObject(value);
            SucursalPrecio datos          = Newtonsoft.Json.JsonConvert.DeserializeObject <SucursalPrecio>(val);
            var            existeSucursal = Metadata.sucursales.Busqueda(datos.idSucursal);
            var            existeProducto = Metadata.productos.Busqueda(datos.idProducto);

            if (existeProducto && existeSucursal)
            {
                Metadata.insertarSyP(datos);
            }
        }
        public string PostSucPrecio([FromBody] SucursalPrecio value)
        {
            var existe = Metadata.inventario.Busqueda(value.idSucursal, value.idProducto);

            if (existe)
            {
                Metadata.actualizarInventarioQty(value);
                return("Sucursal: " + value.idSucursal + " IDproducto: " + value.idProducto + " actualizada");
            }
            else
            {
                return("no se encontro la sucursal ingresada");
            }
        }
Exemple #9
0
        public void leerInventario()
        {
            using (StreamReader sr = new StreamReader(d2))
            {
                string linea = "";
                while ((linea = sr.ReadLine()) != null)
                {
                    string[] sucursal = linea.Split(',');

                    SucursalPrecio creado = new SucursalPrecio();
                    creado.idSucursal  = Convert.ToInt32(sucursal[0]);
                    creado.idProducto  = Convert.ToInt32(sucursal[1]);
                    creado.cantidadInv = Convert.ToInt32(sucursal[2]);
                    inventario.Insertar(creado);
                    rInventario.Add(creado);
                }
            }
        }
Exemple #10
0
 public async Task <string> Post([FromBody] SucursalPrecio sucursalPrecio, string x)
 {
     try
     {
         //verificar si ese producto con esa sucursal existen
         if (sucursalPrecio.Id_producto == "1" && sucursalPrecio.Id_sucursal == "1")
         {
             //add producto in sucursal
             SDataBase.UpdateProductoSucursal(sucursalPrecio);
             return("Update quantily Producto in sucursal Successful");
         }
         else
         {
             return("The product does not match the sucursal.");
         }
     }
     catch (Exception ex)
     {
         return(ex.Message.ToString());
     }
 }
Exemple #11
0
        public void actualizarInventarioQty(SucursalPrecio actualizar)
        {
            File.Delete(d2);
            ArbolSP nuevo = new ArbolSP(9);
            var     arch  = new FileStream(d2, FileMode.OpenOrCreate);

            arch.Close();
            foreach (var item in rInventario)
            {
                if ((item.idSucursal == actualizar.idSucursal) && (item.idProducto == item.idProducto))
                {
                    item.cantidadInv += actualizar.cantidadInv;
                }
                using (StreamWriter sw = new StreamWriter(d2))
                {
                    sw.WriteLine(item.idSucursal.ToString() + "," + item.idProducto.ToString() + "," + item.cantidadInv.ToString());
                }
                nuevo.Insertar(item);
            }
            inventario.raiz = nuevo.raiz;
        }
Exemple #12
0
 public async Task <string> Post([FromBody] SucursalPrecio sucursalPrecio)
 {
     try
     {
         //verificar si ese producto ya se agrego a esa sucursal
         if (sucursalPrecio.Id_producto == "1" && sucursalPrecio.Id_sucursal == "1")
         {
             //add producto in sucursal
             SDataBase.AddProductoSucursal(sucursalPrecio);
             return("Add Producto in sucursal Successful");
         }
         else
         {
             return("This producto has already been added to that sucursal.");
         }
     }
     catch (Exception ex)
     {
         return(ex.Message.ToString());
     }
 }
Exemple #13
0
        private void PartirEn23(NodoSP padre, int indexHijoLleno, SucursalPrecio dato, bool hermanoIzquierdo)
        {
            //Si el tiene un padre, el no es raiz
            int indexLadoIzquierdo = hermanoIzquierdo ? (indexHijoLleno - 1) : indexHijoLleno;
            int indexLadoDerecho   = hermanoIzquierdo ? (indexHijoLleno) : indexHijoLleno + 1;
            int dosTercios         = (tamanioMax * 2) / 3;

            int  indexLlavePadre = hermanoIzquierdo ? (indexHijoLleno - 1) : (indexHijoLleno);
            int  tamañoMaxNodoSP = tamanioMax - 1;
            bool esHoja          = padre.hijos[indexHijoLleno].esHoja;

            int j     = 0;
            var arr   = new SucursalPrecio[tamanioMax * 2];
            var hijos = new NodoSP[tamanioMax * 2];

            for (int i = 0; i < tamañoMaxNodoSP; i++)
            {
                arr[j++] = padre.hijos[indexLadoIzquierdo].Llaves[i];
                arr[j++] = padre.hijos[indexLadoDerecho].Llaves[i];
            }
            arr[j++] = dato;
            arr[j++] = padre.Llaves[indexLlavePadre];

            if (!esHoja)
            {
                int x = 0;
                for (int i = 0; i < tamanioMax; i++)
                {
                    hijos[x++] = padre.hijos[indexLadoIzquierdo].hijos[i];
                }
                for (int i = 0; i < tamanioMax; i++)
                {
                    hijos[x++] = padre.hijos[indexLadoDerecho].hijos[i];
                }
            }
            j = 0;
            int k;

            for (k = 0; k < dosTercios; k++)
            {
                padre.hijos[indexLadoIzquierdo].Llaves[k] = arr[j++];
            }

            while (k < tamañoMaxNodoSP)
            {
                padre.hijos[indexLadoIzquierdo].Llaves[k++] = null;
                padre.hijos[indexLadoIzquierdo].tamaño--;
            }
            padre.hijos[indexLadoIzquierdo].estaLleno = false;

            SucursalPrecio padre1 = arr[j++];

            padre.Llaves[indexLlavePadre] = padre1;

            for (k = 0; k < dosTercios; k++)
            {
                padre.hijos[indexLadoDerecho].Llaves[k] = arr[j++];
            }
            while (k < tamañoMaxNodoSP)
            {
                padre.hijos[indexLadoDerecho].Llaves[k++] = null;
                padre.hijos[indexLadoDerecho].tamaño--;
            }
            padre.hijos[indexLadoDerecho].estaLleno = false;

            SucursalPrecio padre2 = arr[j++];

            var nuevoNodoSP = new NodoSP(tamanioMax);

            for (k = 0; j < tamanioMax * 2; k++)
            {
                nuevoNodoSP.Llaves[k] = arr[j++];
                nuevoNodoSP.tamaño++;
            }

            var nodoDerecho = padre.hijos[indexLadoDerecho];

            if (padre.estaLleno)
            {
                if (padre.Padre == null)
                {
                    partirRaiz(padre);
                }
                else
                {
                    InsertarEnHoja(padre.Padre, padre.indiceHijoDePadre, padre2);
                }
            }
            else
            {
                int m = nodoDerecho.Padre.tamaño - 1;
                for (; m > indexLlavePadre; m--)
                {
                    nodoDerecho.Padre.hijos[m + 1] = nodoDerecho.Padre.hijos[m + 1];
                }
                nodoDerecho.Padre.Llaves[m + 1] = padre2;
                nodoDerecho.Padre.hijos[m + 2]  = nuevoNodoSP;
                nodoDerecho.Padre.tamaño++;
                nuevoNodoSP.Padre  = nodoDerecho.Padre;
                nuevoNodoSP.esHoja = esHoja;
            }
            if (nodoDerecho.Padre.tamaño == tamanioMax - 1)
            {
                nodoDerecho.Padre.estaLleno = true;
            }
        }
Exemple #14
0
 //method for update producto in sucursal
 public void UpdateProductoSucursal(SucursalPrecio sucursalPrecio)
 {
     //code update producto in sucursal at the tree B
 }
Exemple #15
0
 //method for add new producto in sucursal
 public void AddProductoSucursal(SucursalPrecio sucursalPrecio)
 {
     //code add producto in sucursal at the tree B
 }
Exemple #16
0
        private void InsertarNoLleno(NodoSP actual, SucursalPrecio dato)
        {
            var i = actual.tamaño - 1;
            var m = actual.tamaño;

            //Cuando inserto en rama y si tiene hijos
            if (!actual.esHoja)
            {
                while (i >= 0 && dato.idSucursal < actual.Llaves[i].idSucursal)
                {
                    actual.Llaves[i + 1] = actual.Llaves[i];
                    actual.hijos[i + 2]  = actual.hijos[i + 1];
                    i--;
                }
            }
            else
            {
                while (i >= 0 && dato.idSucursal < actual.Llaves[i].idSucursal)
                {
                    actual.Llaves[i + 1] = actual.Llaves[i];
                    i--;
                }
            }
            actual.Llaves[i + 1] = dato;
            actual.tamaño++;

            //Mover hijo si no es hoja
            if (!actual.esHoja)
            {
                var x = i + 1;
                var c = i + 2;
                actual.hijos[c] = actual.hijos[x];
                actual.hijos[x] = new NodoSP(tamanioMax);

                int j = 0;
                for (; actual.hijos[c].Llaves[j].idSucursal < dato.idSucursal; j++)
                {
                    actual.hijos[x].Llaves[j] = actual.hijos[c].Llaves[j];
                    if (!actual.hijos[c].esHoja)
                    {
                        actual.hijos[x].hijos[j] = actual.hijos[c].hijos[j];
                    }

                    actual.hijos[c].tamaño--;
                    actual.hijos[x].tamaño++;
                }
                int k;
                for (k = j; k < m; k++)
                {
                    actual.hijos[c].Llaves[k - j] = actual.hijos[c].Llaves[k];
                    actual.hijos[c].Llaves[k]     = null;
                    if (!actual.hijos[c].esHoja)
                    {
                        actual.hijos[c].hijos[k - j] = actual.hijos[c].hijos[k];
                        actual.hijos[c].hijos[k]     = null;
                    }
                }
                if (!actual.hijos[c].esHoja)
                {
                    actual.hijos[c].hijos[actual.hijos[c].tamaño] = actual.hijos[c].hijos[k - j];
                }
                if (actual.tamaño == tamanioMax - 1)
                {
                    actual.estaLleno = true;
                }
            }
        }
Exemple #17
0
 public NodoSP(int grado)
 {
     gradoMaximo = grado;
     Llaves      = new SucursalPrecio[grado - 1];
     hijos       = new NodoSP[grado];
 }
Exemple #18
0
 public void Insertar(SucursalPrecio dato)
 {
     InsertarNodoSP(raiz, dato);
 }