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; } }
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(); }