public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Cuarto = new Almacen(3, 5);
Cuarto.AgregarCaja(1, "RED");
Cuarto.AgregarCaja(2, "RED");
Cuarto.AgregarCaja(3, "RED");
Cuarto.AgregarCaja(4, "RED");
Cuarto.AgregarCaja(5, "RED");
Cuarto.AgregarCaja(6, "RED");
Cuarto.AgregarCaja(7, "RED");
Cuarto.AgregarCaja(8, "RED");
Cuarto.AgregarCaja(9, "RED");
Cuarto.AgregarCaja(10, "RED");
Cuarto.AgregarCaja(11, "RED");
Cuarto.AgregarCaja(12, "RED");
Cuarto.AgregarCaja(13, "RED");
Cuarto.RemoverCaja(55);
}
public Almacen Cuarto;
}
public class Almacen
{
public Contenedor[] Contenedores;
public Almacen(int Cantidad, int Capacidad)
{
Contenedores = new Contenedor[Cantidad];
for (int i = 0; i < Cantidad; i++)
{
Contenedores[i] = new Contenedor(Capacidad);
}
}
public void AgregarCaja(int ID,string Nombre)
{
Caja C = new Caja(Nombre, ID);
for (int i = 0; i < Contenedores.Length; i++)
{
if (Contenedores[i].Count < Contenedores[i].Cap)
{
Contenedores[i].Añadir(C);
return;
}
}
}
public void RemoverCaja(int ID)
{
if (VerificarDisponibilidad(ID))
{
int ContenedorOrigen = Buscar(ID);
if (ContenedorOrigen != -1)
{
Caja[] Reacomodo = Contenedores[ContenedorOrigen].Quitar(ID);
if (Reacomodo.Length > 0)
for (int R = 0; R < Reacomodo.Length; R++)
{
for (int i = 0; i < Contenedores.Length; i++)
{
if (i != ContenedorOrigen)
{
if (Contenedores[i].Count < Contenedores[i].Cap)
{
Contenedores[i].Añadir(Reacomodo[R]);
break;
}
}
}
}
}
}
}
public int Buscar(int ID)
{
bool busqueda = false;
for (int i = 0; i < Contenedores.Length; i++)
{
busqueda = Contenedores[i].Buscar(ID);
if (busqueda == true)
{
return i;
}
}
return -1;
}
public bool VerificarDisponibilidad(int ID)
{
int disponiblidad = 0;
int Contenedor = -1;
for (int i = 0; i < Contenedores.Length; i++)
{
if (Contenedores[i].Buscar(ID) == false)
{
disponiblidad = disponiblidad + (Contenedores[i].Cap - Contenedores[i].Count);
}
else
{
Contenedor = i;
}
}
if (Contenedor != -1 && Contenedores[Contenedor].Disponibilidad(ID) <= disponiblidad)
return true;
return false;
}
}
public class Contenedor
{
public Caja[] Cajas;
public int Cap = 0;
public int Count = 0;
public Contenedor(int Capacidad)
{
Cajas = new Caja[Capacidad];
Cap = Capacidad;
}
public void Añadir( Caja Obj)
{
if (Count < Cap)
{
Caja[] newCajas = new Caja[Cap];
newCajas[0] = Obj;
int _Count = 1;
for (int i = 0; i < Cajas.Length -1; i++)
{
newCajas[_Count] = Cajas[i];
if (Cajas[i] != null)
_Count++;
}
Cajas = newCajas;
Count++;
}
}
public Caja[] Quitar(int ID)
{
Caja[] Reacomodo = null;
int Disp = Disponibilidad(ID);
if (Disp != -1)
{
Reacomodo = new Caja[Disp];
for (int i = 0; i < Cajas.Length; i++)
{
if (i <= Disp)
{
if (Cajas[i].ID != ID)
{
Reacomodo[i] = Cajas[i];
Cajas[i] = null;
Count--;
}
}
if (Cajas[i] != null && Cajas[i].ID == ID)
{
Caja[] NewCajas = new Caja[Cap];
Cajas[i] = null;
int _count = 0;
for (int x = 0; x < Cap; x++)
{
NewCajas[_count] = Cajas[x];
if (Cajas[x] != null)
_count++;
}
Cajas = NewCajas;
Count--;
return Reacomodo;
}
}
}
return Reacomodo;
}
public int Disponibilidad(int ID)
{
for (int i = 0; i < Cajas.Length; i++)
{
if (Cajas[i].ID == ID)
{
return i;
}
}
return -1;
}
public bool Buscar(int ID)
{
for (int i = 0; i < Cap; i++)
{
if (Cajas[i] != null && Cajas[i].ID == ID)
return true;
}
return false;
}
}
public class Caja
{
public string Nombre = "";
public int ID = 0;
public Caja(string nombre, int id)
{
Nombre = nombre;
ID = id;
}
}