interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons, contnrs ;
type
TZinsen =
class
private
FJahr: integer;
FAnfang: double;
FZinsen: double;
function GetEnde: double;
public
property Jahr : integer
read FJahr
write FJahr ;
property Anfang : double
read FAnfang
write FAnfang ;
property Zinsen : double
read FZinsen
write FZinsen ;
property Ende : double
read GetEnde ;
end;
TForm1 =
class(TForm)
BitBtn1: TBitBtn;
edSparbetrag: TEdit;
edFestzins: TEdit;
edMindestLaufzeit: TEdit;
StringGrid1: TStringGrid;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
procedure ShowListe(Liste: TObjectList);
{ Private declarations }
public
{ Public declarations }
ZinsListe : TObjectList ;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var i,Mindestlaufzeit:Integer;
Festzins, Anfang:Double;
Zins : TZinsen ;
begin
// Eingaben aus Feldern lesen
Anfang:=StrToFloat(EdSparbetrag.Text);
Festzins:=StrToFloat(EdFestzins.Text)/100;
Mindestlaufzeit:=StrToInt(EdMindestlaufzeit.Text);
// ObjectList füllen
ZinsListe.Clear ;
for i:=1
to Mindestlaufzeit
do begin
Zins := TZinsen.Create ;
Zins.Jahr := i ;
Zins.Anfang := Anfang ;
Zins.Zinsen := Anfang * Festzins ;
// Zins.Ende braucht nicht gesetzt zu werden, da dies sehr leicht
// aus Anfang und Zinsen berechnet werden kann
// dafür gibts in TZinsen die ReadOnly Eigenschaft Ende, die im Grunde eine Funktion aufruft
// somit stellst du sicher, dass der Inhalt konsistent bleibt. Denn wann immer
// du Anfang oder Zinsen veränderst, so wird Ende automatisch beim nächsten Lesen
// korrekt neu berechnet
// Ab damit in die Liste
ZinsListe.Add(Zins) ;
Anfang := Zins.Ende ;
end;
// Damit wäre alles berechnet... Fehlt noch die Darstellung
ShowListe (Zinsliste) ;
end;
procedure TForm1.ShowListe (Liste : TObjectList) ;
var
i: Integer;
Zins : TZinsen ;
begin
Stringgrid1.ColCount := 4 ;
StringGrid1.RowCount := 1 + Liste.Count ;
StringGrid1.cells[0,0] := '
Jahr' ;
StringGrid1.cells[1,0] := '
Anfang' ;
StringGrid1.cells[2,0] := '
Zinsen' ;
StringGrid1.cells[3,0] := '
Ende' ;
for i := 0
to Liste.Count - 1
do begin // der Listenindex beginnt bei 0 !!!
if Liste[i]
is TZinsen
then begin
Zins := Liste[i]
as TZinsen ;
StringGrid1.cells[0,i+1] := format ('
%d',[Zins.Jahr]) ;
StringGrid1.cells[1,i+1] := format ('
%.2m',[Zins.Anfang]) ;
StringGrid1.cells[2,i+1] := format ('
%.2m',[Zins.Zinsen]) ;
StringGrid1.cells[3,i+1] := format ('
%.2m',[Zins.Ende]) ;
end else
raise exception.Create ('
Ungültiges Objekt in Objektliste.') ;
end;
StringGrid1.FixedCols := 0 ;
StringGrid1.FixedRows := 1 ;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ZinsListe := TObjectList.Create ;
end;
{ TZinsen }
function TZinsen.GetEnde: double;
begin
Result := Anfang + Zinsen ;
end;
end.