Hola!!
estoy haciendo unas prácticas para la universidad, y tengo una duda, os cuento.
Tengo dos clases implementadas, una clase garaje, y otra clase coche. La clase garaje es un depósito,lista o clase contenedora, como querais llamarlo XD. Entonces, he implementado determinados métodos que me permiten la entrada de un coche en el garaje, su salida, etc, creo que estan bien:
Código Delphi
[-]procedure Garaje.EntradaGaraje(CocheObjeto: Coche);
var
i: integer;
vacia,lleno: boolean;
begin
vacia := false;
lleno := true;
i := 1;
while (Not(vacia)and(i<=100)) do
Begin
if plazasarray[i] = nil then
Begin
plazasarray[i] := CocheObjeto;
NumCoches := GetNumCoches();
vacia := true end
else
Begin
i := i + 1;
end;
end; while (lleno)and(i<=100) do
Begin
if plazasarray[i] <> nil then
Begin
lleno := true;
i := i + 1;
end
else
lleno := false;
end;
if Lleno then
writeln('El Parking Esta lleno');
end;
procedure Garaje.SalidaGaraje(matricula: string);
var
i,hora,minutos: integer;
tiempo_total,importe: real;
encontrado: boolean;
begin
encontrado := false;
i := 1;
while (Not(encontrado)and(i<=100)) do
Begin
if plazasarray[i].getMatricula() = matricula then
Begin
write('Introduce la hora actual, Hora: ');
readln(hora);
write('Minutos: ');
readln(minutos);
if minutos>plazasarray[i].getMinutos() then
minutos := minutos-plazasarray[i].getMinutos()
else
Begin
minutos := plazasarray[i].getMinutos()-minutos;
end;
tiempo_total := ((hora-plazasarray[i].getHora())*60) + minutos;
importe := tiempo_total * 0.05;
writeln('IMPORTE: ',importe:0:2);
plazasarray[i] := nil;
plazasarray[i].Free;
NumCoches := GetNumCoches();
encontrado := true;
end
else Begin
i := i + 1;
encontrado := false; end;
end;
if Not(encontrado) then
writeln('El coche de matricula ',matricula,' no existe');
end;
procedure Garaje.VisualizarGaraje();
var
i: integer;
begin
for i := 1 to length(plazasarray) do
Begin
if plazasarray[i] <> nil then
write(' ',plazasarray[i].getMatricula(),' ')
else
write(' V ');
if i mod 10 = 0 then
writeln('');
end;
end;
Ahora, lo que quiero, es desde un menú principal, en el cual llamo a un procedimiento (EntradaVehiculo), quiero que cada vez que seleccione la opcion de Entrada Vehiculo, se cree un objeto distinto y se coloque en la primera posicion libre del array Plazas, el cual contiene dichos objetos coche.
Lo he intentado creando una funcion que me determine cual es la primera plaza que esta libre, y con esta, hacer lo siguiente:
Código Delphi
[-]
parking := Garaje.Create();
pos := parking.GetPlazaLibre();
plaza[pos] := Coche.Create();
plaza[pos].Introducir_Datos();
parking.EntradaGaraje(plaza[pos]);
parking.VisualizarGaraje();
Pero el problema es que me sustituye los objetos constantemente, es decir, yo creo uno y se lo asigno a la primera plaza libre del garaje, pero al crear el siguiente (al darle de nuevo en el menu principal a la opcion de Entrada Vehiculo), el nuevo objeto que creo me sustituye al anterior....
Si alguien me echase una mano se lo agradecería ya que llevo un buen rato dandole al coco...y nada.
EDITO: Cómo puedo hacer para no tener que crear cada vez que llame a este procedimiento (Entrada Vehiculo) el objeto parking, de la clase garaje? Creo que éste puede ser el problema...
Muchas gracias de antemano!!
Un saludo,
Geru.