Ver Mensaje Individual
  #1  
Antiguo 30-12-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Reputación: 17
gerupc Va por buen camino
Exclamation Cómo hacer que se creen nuevos objetos cada vez?

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 //Salimos del Bucle
        end
       else
         Begin
             i := i + 1;
         end;
     end; //Fin While
     //Compruebo si esta lleno
    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
  //Busco el coche por la matricula
  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 //Si no encuentra la matricula en una plaza
          Begin
            i := i + 1;
            encontrado := false; //Y sigue buscando hasta que sea true
          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.
__________________
Mi Blog
---------------------
Universidad de Deusto
ESIDE-Escuela Superior de Ingenieros Deusto

Última edición por gerupc fecha: 31-12-2007 a las 00:05:23.
Responder Con Cita