Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-12-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Para los que creen saber latín ... gluglu Humor 4 19-06-2007 10:40:00
DLLs que creen forms y pasarles parametros Wonni Varios 5 16-06-2006 18:26:27
como darle nuevos aspectos a un trackbar de delphi rls Varios 2 16-11-2005 21:26:31
No Creen que Borland Nos traicionó? CarlitosMDQ .NET 17 18-10-2005 19:11:16
como hacer que una columna del dbgrid contenga un valor de un TEdit en cada celda Shidalis OOP 2 02-08-2005 12:05:35


La franja horaria es GMT +2. Ahora son las 05:46:47.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi