Autor Beitrag
Xardas008
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Mi 06.02.08 20:08 
Hallo,

da das Projekt in mehreren Dateien organisiert ist, habe ich alles als Zip angefügt statt die entscheidenden Stellen hier reinzuschreiben.

Folgendes Problem habe ich. Ich habe ein Programm zum Verwalten von Hotels (ist eine Übungsaufgabe in der Schule) und komme nicht weiter. Wenn ich einen Gast einchecken möchte, dann soll er mir diesen aus Testzwecken direkt in Labeln wieder auf der Maske ausgeben, bevor diese im nächsten Schritt dann an die richtige Position auf der Maske platziert werden.
Wieso so umständlich? Naja ich will ja direkt nach dem erstellen des Objektes ersteinmal wissen, ob er das auch so gemacht hat wie gewünscht. Und siehe da es klappt nicht.
Er behauptet, dass er den Gast erfolgreich im Zimmer eingecheckt hat, aber er kann ihn nicht zurückgeben.

Könnte einer versuchen herauszufinden, warum dies nicht funktioniert??

Das ganze wurde in Delphi 10 Lite entwickelt.
Einloggen, um Attachments anzusehen!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 06.02.08 20:16 
user profile iconXardas008 hat folgendes geschrieben:
da das Projekt in mehreren Dateien organisiert ist, habe ich alles als Zip angefügt statt die entscheidenden Stellen hier reinzuschreiben.
Dass ein Projekt mehrere Dateien hat, ist der Normalfall. Soviel Code kann das ja nicht sein, und die meisten haben wahrscheinlich keine Lust, sich die Datei runterzuladen, zu entzippen und dann auch noch selber die Stellen zu suchen, die Du meinst :nixweiss:

user profile iconXardas008 hat folgendes geschrieben:
Das ganze wurde in Delphi 10 Lite entwickelt.
Meinst Du Turbo Explorer?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Xardas008 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Mi 06.02.08 20:20 
Nein, die 10 Lite ist eine Abgespeckte Version vom Borland Studio 2005 (oder wars sogar 2006??) die fast genauso viel kann.


naja ok werde mal eben die Einzelnen Units eben hier reinstellen, aber um es am besten nachzuvollziehn ist die Datei vielleicht doch besser weil da auch die GUI dabei ist.
1. Maindatei
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
unit VerwaltungHotel_Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, KlasseHotel_Unit, StdCtrls, KlasseGast_Unit, ExtCtrls;

type
  Tfrm_Hotel = class(TForm)
    btn_einchecken: TButton;
    btn_clear: TButton;
    btn_Ende: TButton;
    grp_Neuer_Bewohner: TGroupBox;
    lbl_Vorname: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    edt_Vorname: TEdit;
    edt_Name: TEdit;
    edt_Wohnort: TEdit;
    grp_Bewohner: TGroupBox;
    grp_Etage_Zimmer: TGroupBox;
    grp_Hinweis: TGroupBox;
    pnl_Zimmer1: TPanel;
    pnl_Zimmer2: TPanel;
    pnl_Zimmer3: TPanel;
    pnl_Zimmer4: TPanel;
    pnl_Zimmer5: TPanel;
    pnl_Zimmer6: TPanel;
    pnl_Zimmer7: TPanel;
    pnl_Zimmer8: TPanel;
    pnl_Zimmer9: TPanel;
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    Label1: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    edt_Vorname_Show: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    edt_Nachname_Show: TEdit;
    edt_Wohnort_Show: TEdit;
    Label9: TLabel;
    Label10: TLabel;
    cmb_Etage: TComboBox;
    cmb_Zimmer: TComboBox;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    procedure cmb_ZimmerChange(Sender: TObject);
    procedure btn_eincheckenClick(Sender: TObject);
    procedure btn_EndeClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frm_Hotel: Tfrm_Hotel;
  hotel :THotel;
  gast :TGast;
  test :BOOLEAN;
implementation

{$R *.dfm}

procedure Tfrm_Hotel.btn_eincheckenClick(Sender: TObject);
begin
  gast := TGast.Create;
  gast.Name := edt_Name.Text;
  gast.Vorname := edt_Vorname.Text;
  gast.Wohnort := edt_Wohnort.Text;
  //Gast einchecken. Parameter1 = Etage, Parameter2 = Zimmer, Parameter3 = Gast
   test := Hotel.einchecken(1,1,gast);
   //gast := Hotel.getZimmerBewohner(1,1).Name;
   if test then
        Label11.Caption := 'true'
   else
    Label11.Caption := 'false';
   Label12.Caption := Hotel.getZimmerBewohner(1,1).Name;

end;

procedure Tfrm_Hotel.btn_EndeClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure Tfrm_Hotel.cmb_ZimmerChange(Sender: TObject);
begin
  //Aktuellen Zimmerbewohner anzeigen
  //if True then
  //begin
  try

  if assigned (Hotel.getZimmerBewohner(cmb_Etage.ItemIndex+1,cmb_Zimmer.ItemIndex+1)) then
  begin

  gast := Hotel.getZimmerBewohner(cmb_Etage.ItemIndex+1,cmb_Zimmer.ItemIndex+1);

  edt_Nachname_Show.Text := gast.Name;
  edt_Vorname_Show.Text := gast.Vorname;
  edt_Wohnort_Show.Text := gast.Wohnort;
  end;
  except

  edt_Nachname_Show.Text := '';
  edt_Vorname_Show.Text := '';
  edt_Wohnort_Show.Text := '';
  end;

  //end;
end;

procedure Tfrm_Hotel.FormCreate(Sender: TObject);
begin
  Hotel := THotel.Create();
  //gast := TGast.Create;
  pnl_Zimmer1.Color := clLime;
  pnl_Zimmer2.Color := clLime;
  pnl_Zimmer3.Color := clLime;
  pnl_Zimmer4.Color := clLime;
  pnl_Zimmer5.Color := clLime;
  pnl_Zimmer6.Color := clLime;
  pnl_Zimmer7.Color := clLime;
  pnl_Zimmer8.Color := clLime;
  pnl_Zimmer9.Color := clLime;

end;

end.

2. KlasseHotel_Unit
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
unit KlasseHotel_Unit;

interface
   uses
   KlasseEtage_Unit, KlasseGast_Unit;
type
THotel = class(TObject)
private
  etage : array of TEtage;
  maxEtagen :INTEGER;
public
  function stockwerkAnlegen(_etagen:INTEGER):BOOLEAN;
  function getEtage(_etagenNr:INTEGER):TEtage;
  function getZimmerBewohner(_etagenNr, _zimmerNr:INTEGER):TGast;
  function einchecken(_etagenNr, _zimmerNr:INTEGER; _gast:TGast):BOOLEAN;
  function zimmerRaeumen(_etagenNr, _zimmerNr:INTEGER):BOOLEAN;
  constructor Create();
end;
implementation
//Konstruktor
constructor THotel.Create();
begin
  inherited Create;
  setlength(etage,10);
  stockwerkAnlegen(10);
end;


//Funktionen
function THotel.stockwerkAnlegen(_etagen:INTEGER):BOOLEAN;
var i:INTEGER;
begin
  for i := 0 to (_etagen - 1) do
  begin
     etage[i] := TEtage.Create(9);
  end;
  result := true;
end;

function THotel.getEtage(_etagenNr:INTEGER):TEtage;
begin
  if assigned(etage[_etagenNr]) then
  begin
    result := etage[_etagenNr];
  end;
end;

function THotel.getZimmerBewohner(_etagenNr, _zimmerNr:INTEGER):TGast;
begin
  //Zimmerbewohner zurückgeben
  if (assigned(etage[_etagenNr].getZimmer(_zimmerNr).getBewohner())) then
  begin
     result := etage[_etagenNr].getZimmer(_zimmerNr).getBewohner();
  end
  else
  begin
   result := TGast.Create;
  end;
end;

function THotel.einchecken(_etagenNr, _zimmerNr:INTEGER; _gast:TGast):BOOLEAN;
begin
  //Bewohner einchecken
  result := etage[_etagenNr].getZimmer(_zimmerNr).zimmerBelegen(_gast);
end;

function THotel.zimmerRaeumen(_etagenNr, _zimmerNr:INTEGER):BOOLEAN;
begin
  //Zimmer räumen
  etage[_etagenNr].getZimmer(_zimmerNr).zimmerRaeumen;
end;
end.
Xardas008 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Mi 06.02.08 20:22 
3. KlasseGast_Unit
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
unit KlasseGast_Unit;

interface

type
TGast = class(TObject)
private
  FName, FVorname, FWohnort :STRING;
private
   function getName():STRING;
   function getVorname():STRING;
   function getWohnort():STRING;
private
   procedure setName(name:STRING);
   procedure setVorname(_vorname:STRING);
   procedure setWohnort(_wohnort:STRING);

public
   property Name:STRING read getName write setName;
   property Vorname:STRING read getVorname write setVorname;
   property Wohnort:STRING read getWohnort write setWohnort;
   constructor Create;

end;
implementation

constructor TGast.Create;
begin
  inherited Create;
  FName := '-';
  FVorname := '-';
  FWohnort := '-';
end;

function TGast.getName():STRING;
begin
   result := FName;
end;

function TGast.getVorname():STRING;
begin

   result := FVorname;

end;

function TGast.getWohnort():STRING;
begin

   result := FWohnort;
end;

procedure TGast.setName(name:STRING);
begin
    FName := name;
end;

procedure TGast.setVorname(_vorname: string);
begin
    self.FVorname := _vorname;
end;

procedure TGast.setWohnort(_wohnort: string);
begin
    self.FWohnort := _wohnort;
end;
end.

4. Die Etage
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
unit KlasseEtage_Unit;

interface

uses
  KlasseZimmer_Unit;
type

TEtage = class(TZimmer)
private
 {private declaration}
 raeume : array of TZimmer;
 maxRaeume : INTEGER;

public
  {public declaration}
  function getMaxRaeume() :INTEGER;
  function getZimmer(zimmerNr:INTEGER):TZimmer;
  function zimmerAnlegen(zimmer:TZimmer):BOOLEAN;
  constructor Create(_MaxRaeume:INTEGER);
end;



implementation
  constructor TEtage.Create(_maxRaeume:INTEGER);
  var i:INTEGER;
  begin
     inherited Create;
     self.maxRaeume := _maxRaeume;
     setlength(raeume,_maxRaeume);
     for i := 0 to (maxRaeume - 1) do
     begin
       zimmerAnlegen(raeume[i]);
     end;
  end;

  function TEtage.getMaxRaeume():INTEGER;
  begin
    result := maxRaeume;
  end;

  function TEtage.getZimmer(zimmerNr:INTEGER):TZimmer;
  begin
    result := raeume[zimmerNr];
  end;

  //Diese Funktion wird aus dem Konstruktor heraus aufgerufen, deshalb
  //ist eine Schleife hier nicht von Nöten.
  function TEtage.zimmerAnlegen(zimmer: TZimmer):BOOLEAN;
  var i:INTEGER;
  begin

     if (i MOD 2) = 0 then
     begin
       //Einzelzimmer
       raeume[i] := TEinzelZimmer.Create();
     end
     else
     begin
       //Mehrbettzimmer
       raeume[i] := TMehrbettZimmer.Create(4);
     end;

  end;
end.

Und zu guter letzt die Zimmer
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
unit KlasseZimmer_Unit;

interface
  uses
    KlasseGast_Unit;

type

TZimmer = class(TObject)

protected
 voll:BOOLEAN;
 belegt:boolean;
public
 function isVoll():BOOLEAN;
 function isBelegt():BOOLEAN;
 function zimmerBelegen(_gast:TGast):BOOLEAN;virtual;
 function getBewohner():TGast;virtual;
 function zimmerRaeumen():BOOLEAN;virtual;
 constructor Create();
end;

TEinzelZimmer = class(TZimmer)
private
  bewohner :TGast;
public
  function zimmerBelegen(_gast:TGast):BOOLEAN;override;
  function getBewohner():TGast;override;
  function zimmerRaeumen():BOOLEAN;override;
  constructor Create();
end;

TMehrbettZimmer = class(TZimmer)
private
  Fbewohner :array of TGast;
  maxBewohner :INTEGER;
  help :BOOLEAN;
public
  function zimmerBelegen(_gast:TGast):BOOLEAN;override;
  function getBewohner():TGast;override;
  function zimmerRaeumen():BOOLEAN;override;
  constructor Create(_maxBewohner:INTEGER);
end;
implementation
//Konstruktoren
constructor TZimmer.Create();
begin
    inherited Create;

end;

constructor TEinzelZimmer.Create();
begin
    inherited Create;
end;

constructor TMehrbettZimmer.Create(_maxBewohner:INTEGER);
begin
    inherited Create;
    self.maxBewohner := _maxBewohner;
end;
//Funktionen der Basisklasse
function TZimmer.isVoll():BOOLEAN;
begin
  result := voll;
end;
function TZimmer.isBelegt():BOOLEAN;
begin
  result := belegt;
end;

function TZimmer.zimmerBelegen(_gast:TGast):BOOLEAN;
begin
     //Dient nur als Vorlage für Einzel und Mehrbettzimmer
end;

function TZimmer.getBewohner():TGast;
begin
     //Dient nur als Vorlage für Einzel und Mehrbettzimmer

end;

function TZimmer.zimmerRaeumen():BOOLEAN;
begin
     //Dient nur als Vorlage für Einzel und Mehrbettzimmer
end;

//Funktionen der Einzelzimmer
function TEinzelZimmer.zimmerBelegen(_gast:TGast):BOOLEAN;//override;
begin
  if (assigned(_gast)) then
  begin
     bewohner := TGast.Create;
     bewohner := _gast;
     voll := true;
     belegt := true;
     result := true;
  end
  else
  begin
    result := false;
  end;

end;

function TEinzelZimmer.getBewohner():TGast;//override;
begin
    result := bewohner;
end;

function TEinzelZimmer.zimmerRaeumen():BOOLEAN;//override;
begin
   bewohner := nil;
   voll := false;
   belegt := false;
   result := true;
end;

//Funktionen der Mehrbettzimmer
function TMehrbettZimmer.zimmerBelegen(_gast:TGast):BOOLEAN;//override;
var i:INTEGER;
begin
    if help = true then
    begin
      for i := low(Fbewohner) to high(Fbewohner) do
      begin
       Fbewohner[i] := TGast.Create;
       Fbewohner[i] := nil;
       if (Assigned(_gast)) then
       begin
          Fbewohner[i] := _gast;
          belegt := true;
          if i = 4 then
          begin
            voll := true;
          end;
          help := true;
          break;
          result := true;
       end;
      end;
    end
    else
    begin
      for i := low(Fbewohner) to Length(Fbewohner)-1 do
      begin
       setlength(Fbewohner,maxBewohner);
       Fbewohner[i] := nil;
       if (Assigned(_gast)) then
       begin
          Fbewohner[i] := _gast;
          belegt := true;
          if i = 4 then
          begin
            voll := true;
          end;
          help := true;
       end;
       break;
       result := true;
      end;
    end;
end;

function TMehrbettZimmer.getBewohner():TGast;//override;
var i:INTEGER;
    bewohner_mehrbett :TGast;
begin
   bewohner_mehrbett := TGast.Create;
   for i := low(Fbewohner) to high(Fbewohner) do
   begin
     if i = 1 then
     begin
       bewohner_mehrbett.Name := Fbewohner[i].Name;
       bewohner_mehrbett.Vorname := Fbewohner[i].Vorname;
       bewohner_mehrbett.Wohnort := Fbewohner[i].Wohnort;
     end
     else
     begin
       if ((Fbewohner[i].Name <> '')) then
       begin
         bewohner_mehrbett.Name := bewohner_mehrbett.Name + ', ' + Fbewohner[i].Name;
       end;
       if ((Fbewohner[i].Vorname <> '')) then
       begin
         bewohner_mehrbett.Vorname := bewohner_mehrbett.Vorname + ', ' + Fbewohner[i].Name;
       end;
       if ((Fbewohner[i].Wohnort <> '')) then
       begin
         bewohner_mehrbett.Wohnort := bewohner_mehrbett.Wohnort + ', ' + Fbewohner[i].Name;
       end;
     end;

   end;
   result := bewohner_mehrbett;
end;

function TMehrbettZimmer.zimmerRaeumen():BOOLEAN;//override;
var i:INTEGER;
begin
    for i := low(Fbewohner) to high(Fbewohner) do
    begin
       Fbewohner[i] := nil;
    end;
end;
end.


So das waren alle.


Zuletzt bearbeitet von Xardas008 am Mi 06.02.08 20:26, insgesamt 2-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 06.02.08 20:24 
Ich meinte eigentlich, dass Du nur den fürs Problem relevanten Quellcode postest :roll:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Xardas008 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Mi 06.02.08 20:29 
user profile iconChristian S. hat folgendes geschrieben:
Ich meinte eigentlich, dass Du nur den fürs Problem relevanten Quellcode postest :roll:


Das habe ich. Nur dummerweise brauchen wir zum überprüfen alle Dateien, weil ich praktisch durch alle durchlaufe um auf die einzelnen Elemente zu kommen (so stand es im UML-Diagramm welches zur Aufgabe gehörte, wobei dieses eher mager war).

Naja werde das ganze morgen erstmal versuchen nach C# zu portieren ob ich es da eher hinbekomme, vielleicht findet aber auch wer den Fehler und hilft mir dabei, will ja auch verstehen warum das nicht funktioniert.

Am besten lasst ihr es im Debugger durchlaufen dann seht ihr wo er überall hinspringt.

Bei TGast.Create macht er alles noch richtig, aber sobald er dann beim einchecken den Namen (gilt auch bei den anderen) wieder setzen will steht im Debugger Watch-Fenster nur noch E2171, warum??? Wie es scheint schreibt er die auch korrekt dort rein, aber sobald er den Gast eingecheckt hat scheint das Objekt (oder der Verweis) nicht mehr zu stimmen und er findet kein Objekt mehr und daher erstellt er einen neuen Gast um keine Exception auszulösen.
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 765
Erhaltene Danke: 130



BeitragVerfasst: Mi 06.02.08 21:15 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  function TEtage.zimmerAnlegen(zimmer: TZimmer):BOOLEAN;
  var i:INTEGER;
  begin

     if (i MOD 2) = 0 then
     begin
       //Einzelzimmer
       raeume[i] := TEinzelZimmer.Create();
     end
     else
     begin
       //Mehrbettzimmer
       raeume[i] := TMehrbettZimmer.Create(4);
     end;

  end;

Also ich habe erst mal einen gravierenden Fehler gefunden (siehe oben). Die Variable i ist undefiniert (da lokal), hier musst Du den Wert als Parameter übergeben.
Außerdem solltest Du Deine Klasse einzeln testen!! Dann hättest Du Deinen Fehler besser eingrenzen können.
Eine vielfach verschachtelte Schleife zu nehmen und dann zu hoffen, dass alles geht, halte ich für sehr optimistisch.
Viele Deiner Funktionen sind eigentlich Prozeduren. Mache doch auch Prozeduren draus.
Die Klasse TEtage sollte eigentlich keine Nachfolgeklasse von TZimmer sein.

ub60
Xardas008 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Mi 06.02.08 21:45 
user profile iconub60 hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  function TEtage.zimmerAnlegen(zimmer: TZimmer):BOOLEAN;
  var i:INTEGER;
  begin

     if (i MOD 2) = 0 then
     begin
       //Einzelzimmer
       raeume[i] := TEinzelZimmer.Create();
     end
     else
     begin
       //Mehrbettzimmer
       raeume[i] := TMehrbettZimmer.Create(4);
     end;

  end;

Also ich habe erst mal einen gravierenden Fehler gefunden (siehe oben). Die Variable i ist undefiniert (da lokal), hier musst Du den Wert als Parameter übergeben.
Außerdem solltest Du Deine Klasse einzeln testen!! Dann hättest Du Deinen Fehler besser eingrenzen können.
Eine vielfach verschachtelte Schleife zu nehmen und dann zu hoffen, dass alles geht, halte ich für sehr optimistisch.
Viele Deiner Funktionen sind eigentlich Prozeduren. Mache doch auch Prozeduren draus.
Die Klasse TEtage sollte eigentlich keine Nachfolgeklasse von TZimmer sein.

ub60


Seltsam, aus irgendeinem Grund hat das immer funktioniert *gg*.

Naja eigentlich gehört da ne Schleife drum weil pro Etage alle 9 Zimmer angelegt werden sollen.
Xardas008 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Fr 08.02.08 20:13 
So habe das Programm endlich fertig.

Der Grund wieso ich den Gast nicht eingecheckt bekam lag daran, dass es sich um ein Mehrbettzimmer handelte und er dort keine Zimmer belegt hat, weil ich die Größe des Dynamischen Arrays erst in der for-Schleife gesetzt habe, mit der for-Schleife aber auf diesen Array zugegriffen habe welcher ja keine Elemente enthielt.
Somit ging er auch nicht in die Schleife.

Naja mein Lieblingsfehler ist echt EAccesviolation. Sonst bekomme ich eigentlich keine^^.