public NodoSucursal(int _grado, bool Tipo)
 {
     if (Tipo)
     {//si es hoja
         Datos  = new Sucursal[_grado - 1];
         Hijos  = new int[_grado];
         esHoja = Tipo;
         Grado  = _grado;
     }
     else
     { // es la raix
         Grado = _grado;
         var GradRaiz = Convert.ToInt32(1.33333 * (double)(_grado - 1));
         Datos  = new Sucursal[GradRaiz];
         Hijos  = new int[GradRaiz + 1];
         esHoja = Tipo;
     }
 }
Пример #2
0
        static void Main(string[] args)
        {
            //id unico Listo
            //Datos Guardados, cifrados Listo - Alejandra
            //Agregar Sucursal Listo
            //Crear Tablas - Marlon Listo
            //match exacto Listo
            //cambiar a archivos locales de bin/debug Listo
            Data.x.CrearTablas();
            //Crear sucursal - Marlon Listo
            var EbenEzer = new Sucursal
            {
                Nombre    = "EbenEzer",
                Id        = 5,
                Direccion = "Zona 5"
            };

            var VerduraDura = new Sucursal
            {
                Nombre    = "VerduraDura",
                Id        = 15,
                Direccion = "Fraijanes"
            };
            var PolloFeliz = new Sucursal
            {
                Nombre    = "Casa De Dios",
                Id        = 11,
                Direccion = "Fraijanes"
            };
            var VacaLoca = new Sucursal
            {
                Nombre    = "VacaLoca",
                Id        = 92,
                Direccion = "Finca la Potra"
            };
            var COVID19 = new Sucursal
            {
                Nombre    = "COVID19",
                Id        = 48,
                Direccion = "Mundo"
            };

            Data.x.AgregarSucursal(EbenEzer);
            Data.x.AgregarSucursal(VerduraDura);
            Data.x.AgregarSucursal(PolloFeliz);
            Data.x.AgregarSucursal(VacaLoca);
            Data.x.AgregarSucursal(COVID19);

            //Agregar Un Producto - Marlon Listo
            var pPepsi = new Producto()
            {
                Id     = 852,
                Nombre = "Pepsi",
                Precio = 56.3
            };
            var Carne = new Producto()
            {
                Id     = 48,
                Nombre = "Carne",
                Precio = 56.3
            };
            var Pollo = new Producto()
            {
                Id     = 618,
                Nombre = "Pollo",
                Precio = 56.3
            };
            var Virus = new Producto()
            {
                Id     = 735,
                Nombre = "Virus",
                Precio = 56.3
            };

            Data.x.AgregarProducto(pPepsi);
            Data.x.AgregarProducto(Carne);
            Data.x.AgregarProducto(Pollo);
            Data.x.AgregarProducto(Virus);
            //Crear relacion - Marlon  Listo
            Data.x.AgregarProductoEnSucursal(EbenEzer.Id, pPepsi.Id, 20);
            Data.x.AgregarProductoEnSucursal(EbenEzer.Id, Carne.Id, 20);
            Data.x.AgregarProductoEnSucursal(EbenEzer.Id, Pollo.Id, 20);
            Data.x.AgregarProductoEnSucursal(PolloFeliz.Id, Pollo.Id, 6);

            // Manejo De INventario: Listo
            //Actualizar Producto Alejandra - nombre y precio
            Data.x.ModificarProducto(pPepsi.Id, "SuperCola", 66.26);
            //Actualizar Relacion Alejandra  Listo-               stock
            Data.x.ModificarRelacion($"{EbenEzer.Id}^{pPepsi.Id}", 5);
            //Actualizar Sucursal Alejandra nomrbre y direccion Listo
            Data.x.ModificarSucursal(EbenEzer.Id, "Nombre Sucursal", "Direccion");
            //Transferir Por sucursales Alejandra
            Data.x.Transferir(Pollo.Id.ToString(), EbenEzer.Id.ToString(), PolloFeliz.Id.ToString(), 10);

            //Agregar varios productos por medio de CSV Alejandra
            Data.x.LeerCSV("CSV_de_Prueba.csv");

            //Listados: Alejandra
            //Sucursal
            List <Sucursal> sucursals = Data.x.ListaDeSucursales();
            //Producto
            List <Producto> products = Data.x.ListaDeProductos();
            //sucursal- Producto
            List <Relacion> relations = Data.x.ListaDeRelaciones();

            Console.WriteLine("Sucursales");
            Console.WriteLine("----------------------------");
            foreach (var item in sucursals)
            {
                Console.WriteLine($"{item.Id} - {item.Nombre} - {item.Direccion}");
            }
            Console.WriteLine("Productos");
            Console.WriteLine("----------------------------");
            foreach (var item in products)
            {
                Console.WriteLine($"{item.Id} - {item.Nombre} - {item.Precio}");
            }

            Console.WriteLine("Relaciones");
            Console.WriteLine("----------------------------");

            foreach (var item in relations)
            {
                Console.WriteLine($"{item.Id_Producto} - {item.Id_Producto} - {item.Stock} unidades");
            }
            Console.ReadLine();

            //datos transportables Compresion Lista, falta implementar  -  Marlon


            //documentacion

            //api net core Marlon

            // Interfaz grafica Marlon
        }
            public void CompartirHaciaLaIzquierda(NodoSucursal Sharing, int[] IndiceHermano, Sucursal Nuevo)
            {
                var padre            = SeekPadre(Sharing.Padre);
                var HermanoIzquierdo = SeekHijo(IndiceHermano[0]);

                var listaactual = Sharing.Datos.ToList <Sucursal>();

                listaactual.Add(Nuevo);
                listaactual.Sort((x, y) => x.Nombre.CompareTo(y.Nombre));
                var datoBaja = padre.Datos[Indice(padre, Nuevo) - 1];
                var sube     = listaactual[0];

                listaactual.Remove(listaactual[0]);
                Sharing.Datos = listaactual.ToArray();
                padre.Datos[Indice(padre, Nuevo) - 1] = sube;
                for (int i = 0; i < HermanoIzquierdo.Datos.Length; i++)
                {
                    if (HermanoIzquierdo.Datos[i] == null)
                    {
                        HermanoIzquierdo.Datos[i] = datoBaja;
                        break;
                    }
                }
                EscribirHijo(Sharing.id, Sharing);
                EscribirHijo(HermanoIzquierdo.id, HermanoIzquierdo);
                EscribirPadre(padre.id, padre);
            }
            public void PartirHaciaLaDerecha(NodoSucursal Hijo, NodoSucursal Hermano, Sucursal Nuevo)
            {
                var padre        = SeekPadre(Hijo.Padre);
                var NuevoHermano = new NodoSucursal(Grado, true)
                {
                    Padre = Hijo.Padre,
                    id    = Siguiente
                };

                Siguiente++;
                var lista = new List <Sucursal>();

                //llenamos la lista
                foreach (var item in padre.Datos)
                {
                    if (item == null)
                    {
                        break;
                    }
                    else
                    {
                        lista.Add(item);
                    }
                }
                foreach (var item in Hijo.Datos)
                {
                    if (item == null)
                    {
                        break;
                    }
                    else
                    {
                        lista.Add(item);
                    }
                }
                foreach (var item in Hermano.Datos)
                {
                    if (item == null)
                    {
                        break;
                    }
                    else
                    {
                        lista.Add(item);
                    }
                }
                lista.Add(Nuevo);
                var array = lista.ToArray();

                SortDatos(array);
                lista = array.ToList <Sucursal>();
                var minimo       = ((2 * Grado) - 1) / 3;
                var listaPadre   = new List <Sucursal>();
                var listaHijo    = new List <Sucursal>();
                var listaHermano = new List <Sucursal>();
                var listaNuevo   = new List <Sucursal>();

                for (int i = 0; i < minimo; i++)
                {
                    listaHijo.Add(lista[0]);
                    lista.Remove(lista[0]);
                }
                listaPadre.Add(lista[0]);
                lista.Remove(lista[0]);
                for (int i = 0; i < minimo; i++)
                {
                    listaHermano.Add(lista[0]);
                    lista.Remove(lista[0]);
                }
                listaPadre.Add(lista[0]);
                lista.Remove(lista[0]);
                for (int i = 0; i < minimo; i++)
                {
                    listaNuevo.Add(lista[0]);
                    lista.Remove(lista[0]);
                }
                for (int i = 0; i < Hijo.Datos.Length; i++)
                {
                    if (listaHijo.Count != 0)
                    {
                        Hijo.Datos[i] = listaHijo[0]; listaHijo.Remove(listaHijo[0]);
                    }
                    else
                    {
                        Hijo.Datos[i] = null;
                    }
                }
                for (int i = 0; i < Hermano.Datos.Length; i++)
                {
                    if (listaHermano.Count != 0)
                    {
                        Hermano.Datos[i] = listaHermano[0]; listaHermano.Remove(listaHermano[0]);
                    }
                    else
                    {
                        Hermano.Datos[i] = null;
                    }
                }
                for (int i = 0; i < NuevoHermano.Datos.Length; i++)
                {
                    if (listaNuevo.Count != 0)
                    {
                        NuevoHermano.Datos[i] = listaNuevo[0]; listaNuevo.Remove(listaNuevo[0]);
                    }
                    else
                    {
                        NuevoHermano.Datos[i] = null;
                    }
                }
                for (int i = 0; i < padre.Datos.Length; i++)
                {
                    if (listaPadre.Count != 0)
                    {
                        padre.Datos[i] = listaPadre[0]; listaPadre.Remove(listaPadre[0]);
                    }
                    else
                    {
                        padre.Datos[i] = null;
                    }
                }
                for (int i = 0; i < padre.Hijos.Length; i++)
                {
                    if (padre.Hijos[i] == 0)
                    {
                        padre.Hijos[i] = NuevoHermano.id;
                        break;
                    }
                }
                EscribirMetaData();
                EscribirPadre(padre.id, padre);
                EscribirHijo(Hijo.id, Hijo);
                EscribirHijo(Hermano.id, Hermano);
                EscribirHijo(NuevoHermano.id, NuevoHermano);
            }
            public void CompartirDato(NodoSucursal Actual, Sucursal Nuevo)
            {
                var padre                   = SeekPadre(Actual.Padre);
                var IndicesHijos            = new List <int>();
                var indiceDelHijoACompartir = 0;

                //llenar lista de hijos disponibles
                foreach (var indicehijo in padre.Hijos)
                {
                    if (indicehijo == 0)
                    {
                        break;
                    }
                    else
                    {
                        IndicesHijos.Add(indicehijo);
                    }
                }
                IndicesHijos.ToArray();
                // encuentra el indice en el arreglo de hijos
                foreach (var item in IndicesHijos)
                {
                    if (item == Actual.id)
                    {
                        break;
                    }
                    else
                    {
                        indiceDelHijoACompartir++;
                    }
                }
                // izquierda


                var indiceizquierda = indiceDelHijoACompartir - 1;
                var indiceDerecha   = indiceDelHijoACompartir + 1;
                var caminoDerecha   = new List <int>();
                var caminoIzquierda = new List <int>();
                var intercambiado   = true;

                if (indiceizquierda >= 0 && intercambiado)
                {
                    var lool = IndicesHijos[indiceDerecha];
                    if (!EstaLleno(SeekHijo(lool)))
                    {
                        caminoIzquierda.Add(IndicesHijos[indiceizquierda]);

                        CompartirHaciaLaIzquierda(Actual, caminoIzquierda.ToArray(), Nuevo);
                        intercambiado = false;
                    }
                    else
                    {
                        //Partir Hacia la derecha
                        PartirHaciaLaDerecha(Actual, SeekHijo(lool), Nuevo);
                    }
                }

                if (indiceDerecha <= IndicesHijos.Count && intercambiado)
                {
                    var lool = IndicesHijos[indiceDerecha];
                    if (!EstaLleno(SeekHijo(lool)))
                    {
                        caminoDerecha.Add(IndicesHijos[indiceDerecha]);

                        CompartirHaciaLaDerecha(Actual, caminoDerecha.ToArray(), Nuevo);
                    }
                    else
                    {
                        //Partir Hacia la derecha
                        PartirHaciaLaDerecha(Actual, SeekHijo(lool), Nuevo);
                    }
                }
            }
            public void PrimeraSeparacion(NodoSucursal Actual, Sucursal Nuevo)
            {
                var lista = new List <Sucursal>();

                foreach (var item in Actual.Datos)
                {
                    lista.Add(item);
                }
                lista.Add(Nuevo);

                // escribir en el archivo todos los nodos disponibles del padre e hijos
                var hijo1 = new NodoSucursal(Grado, true)
                {
                    Grado = Grado
                };

                hijo1.id = IdPAdre;
                var indice = 0;

                for (int i = 0; i < lista.Count / 2; i++)
                {
                    hijo1.Datos[indice] = lista[i];
                    indice++;
                }


                indice = 0;
                var hijo2 = new NodoSucursal(Grado, true);

                hijo2.id = Siguiente;
                Siguiente++;
                for (int i = (lista.Count / 2) + 1; i < lista.Count; i++)
                {
                    hijo2.Datos[indice] = lista[i];
                    indice++;
                }
                var raiznueva = new NodoSucursal(Grado, false)
                {
                    id = Siguiente
                };

                lista.Sort((x, y) => x.Nombre.CompareTo(y.Nombre));
                raiznueva.Datos[0] = lista[(lista.Count / 2) + 1];
                IdPAdre            = Siguiente;
                raiznueva.Hijos[0] = hijo1.id;
                raiznueva.Hijos[1] = hijo2.id;
                hijo1.Padre        = raiznueva.id;
                hijo2.Padre        = raiznueva.id;
                Siguiente++;
                SortDatos(raiznueva.Datos);
                SortDatos(hijo1.Datos);
                SortDatos(hijo2.Datos);

                var escritor = new StreamWriter(GlobalPath);

                //metadata
                escritor.WriteLine($"{(IdPAdre).ToString().PadLeft(3, '0')}" +
                                   $"|{Grado.ToString().PadLeft(3, '0')}|{Siguiente.ToString().PadLeft(3, '0')}" +
                                   $"|{LargoPadre.ToString().PadLeft(3, '0')}|{LargoHijo.ToString().PadLeft(3, '0')}|");
                // nodos
                escritor.WriteLine(hijo1.WriteNodo());
                escritor.WriteLine(hijo2.WriteNodo());
                escritor.WriteLine(raiznueva.WriteNodo());
                escritor.Close();
            }