Einzelnen Beitrag anzeigen

HilfeBeiDelphi

Registriert seit: 22. Dez 2016
1 Beiträge
 
#1

Delphi Schulprogramm Hilfe

  Alt 22. Dez 2016, 17:40
Hallo, ich bin nicht so ein Delphikönner und bräuchte Hilfe beim finden von logischen Fehlern in meinem Programm, welches sich noch in den Anfängen befindet, denn seitdem ich mein statisches Array durch ein dynamisches Array ersetzt habe, funktioniert das Datenanzeigen, nach dem Verbergen der Strings in den jeweiligen Editfeldern und das Wiedergeben aller Daten, mit Hilfe einer Memo nicht mehr.

Hier sind meine drei Units:

Delphi-Quellcode:
unit uFenster;
// **********************************************************************


interface
// ======================================================================
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Buttons,
  uPerson, uDatensatz;


type
  TFensterFrm = class(TForm)
    GroesseLbl: TLabel;
    GroesseEdt: TEdit;
    GewichtLbl: TLabel;
    GewichtEdt: TEdit;
    BMILbl      : TLabel;
    BmiEdt      : TEdit;
    NameEdt      : TEdit;
    NameLbl : TLabel;
    SteuerPnl   : TPanel;
    BtnBerechnen: TButton;
    BtnEnde: TButton;
    BtnAbnehmen: TButton;
    BtnZunehmen: TButton;
    BtnDatenVerbergen: TButton;
    BtnDatenAnzeigen: TButton;
    EdtAnzahl: TEdit;
    LblNummer: TLabel;
    BtnDatensatzAnzeigen: TButton;
    MemDatensatz: TMemo;
    EdtAnzahlPatienten: TEdit;
    LblAnzahlPatienten: TLabel;
    BtnPatientenBestaetigen: TButton;

    procedure BtnBerechnenClick (Sender: TObject);
    procedure FormCreate (Sender: TObject);
    procedure BtnEndeClick(Sender: TObject);
    procedure BtnDatenVerbergenClick(Sender: TObject);
    procedure BtnDatenAnzeigenClick(Sender: TObject);
    procedure BtnAbnehmenClick(Sender: TObject);
    procedure BtnZunehmenClick(Sender: TObject);
    procedure BtnDatensatzAnzeigenClick(Sender: TObject);
    procedure BtnPatientenBestaetigenClick(Sender: TObject);

   private
    procedure Init;

   public
     Anzahl : Integer;

  end;

var
  FensterFrm: TFensterFrm; // --- das aktuelle Exemplar vom Fenster,
                                          //    in dem alles läuft
  AktuellePerson : TPerson; // --- das Objekt PERSON anlegen
  Datensatz : TDatensatz;
implementation
{$R *.DFM}
// ======================================================================


procedure TFensterFrm.FormCreate(Sender: TObject);
begin
   // --- das Objekt PERSON erzeugen
  FensterFrm.Init;
  Datensatz := TDatensatz.Create;
  Datensatz.Init;
  Anzahl := 0;
  MemDatensatz.Clear;
  EdtAnzahl.Text := '1';
end;

procedure TFensterFrm.Init;
begin
  // Alle Felder im Fenster leeren


end;

procedure TFensterFrm.BtnBerechnenClick(Sender: TObject);
begin
  if (EdtAnzahl.Text = '') or (GewichtEdt.Text = '') or (GroesseEdt.Text = '') or (NameEdt.Text = '') or (EdtAnzahlPatienten.Text = '')
    then ShowMessage('Bitte Fehlende Daten eingeben')
      else begin
  Datensatz.CreateArray;
  // Daten einlesen und an PERSON übergeben
  Datensatz.GetPerson(Anzahl).SetName(NameEdt.Text);
  Datensatz.GetPerson(Anzahl).SetGroesse(StrToFloat(GroesseEdt.Text));
  Datensatz.GetPerson(Anzahl).SetGewicht(StrToFloat(GewichtEdt.Text));
 // Datensatz.GetPerson(Anzahl).SetAnzahlPatienten(StrtoInt(EdtAnzahlPatienten.Text));


  // BMI ermitteln und ausgeben

  BMIEdt.Text := FloatToStr(Datensatz.GetPerson(Anzahl).HatBmi);
 end;

end;

procedure TFensterFrm.BtnEndeClick(Sender: TObject);
// ----------------------------------------------------------------------
begin
  Close;
end;

procedure TFensterFrm.BtnDatenVerbergenClick(Sender: TObject);
begin
  GroesseEdt.Text := '';
  GewichtEdt.Text := '';
  NameEdt.Text := '';
  BmiEdt.Text := '';
end;

procedure TFensterFrm.BtnDatenAnzeigenClick(Sender: TObject);
begin
  if (EdtAnzahl.Text = '')
    then ShowMessage('Bitte Fehlende Nummer eingeben')
      else begin
  Anzahl := StrtoInt(EdtAnzahl.Text)-1;
  NameEdt.Text := Datensatz.GetPerson(Anzahl).GetName;
  GroesseEdt.Text := FloatToStr(Datensatz.GetPerson(Anzahl).GetGroesse);
  GewichtEdt.Text := FloatToStr(Datensatz.GetPerson(Anzahl).GetGewicht);
  BmiEdt.Text := FloatToStr(Datensatz.GetPerson(Anzahl).HatBmi);
 end;
end;

procedure TFensterFrm.BtnAbnehmenClick(Sender: TObject);
begin
  if (EdtAnzahl.Text = '') or (GewichtEdt.Text = '') or (GroesseEdt.Text = '') or (NameEdt.Text = '')
    then ShowMessage('Bitte Fehlende Daten eingeben')
      else begin
  Datensatz.GetPerson(Anzahl).Abnehmen;
  BMIEdt.Text := FloatToStr(Datensatz.GetPerson(Anzahl).HatBmi);
  GewichtEdt.Text := FloatToStr(Datensatz.GetPerson(Anzahl).GetGewicht);
 end;
end;

procedure TFensterFrm.BtnZunehmenClick(Sender: TObject);
begin
  if (EdtAnzahl.Text = '') or (GewichtEdt.Text = '') or (GroesseEdt.Text = '') or (NameEdt.Text = '')
    then ShowMessage('Bitte Fehlende Daten eingeben')
      else begin
  Datensatz.GetPerson(Anzahl).Zunehmen;
  BMIEdt.Text := FloatToStr(Datensatz.GetPerson(Anzahl).HatBmi);
  GewichtEdt.Text := FloatToStr(Datensatz.GetPerson(Anzahl).GetGewicht);
 end;
end;


procedure TFensterFrm.BtnDatensatzAnzeigenClick(Sender: TObject);
var
  i : Integer;
begin
  //i := 1;
  MemDatensatz.Clear;
  {repeat}  for i := 0 to AnzahlPatienten-1 do begin
    MemDatensatz.Lines.Add('Name: '+ Datensatz.GetPerson(i).GetName +' Größe:'+ FloatToStrF(Datensatz.GetPerson(i).GetGroesse,ffFixed,8,2) +' Gewicht:'+ FloatToStrF(Datensatz.GetPerson(i).GetGewicht,ffFixed,8,2) +' BMI:'+ FloatToStrF(Datensatz.GetPerson(i).HatBmi,ffFixed,8,2));
    {Inc(i);
  until (Name = '');}

  end;
end;

procedure TFensterFrm.BtnPatientenBestaetigenClick(Sender: TObject);
begin
  AnzahlPatienten := StrtoInt(EdtAnzahlPatienten.Text);
  Datensatz.CreateArray;
end;

end. // ------ UNIT -------

Delphi-Quellcode:
unit uPerson;


interface
(* ==================================================================== *)
type
  TPerson = class(TObject)
    private
      Name      : string;
    Groesse : real;
    Gewicht : real;
// BMI : real;
   public
    constructor Create;
     procedure Init;
    procedure SetName (n : string);
    function GetName : string;
    procedure SetGroesse (gr : real);
    function GetGroesse : real;
    procedure SetGewicht (gw : real);
    function GetGewicht : real;

    function HatBMI: real;
    procedure Abnehmen;
    procedure Zunehmen;
  {  procedure SetAnzahlPatienten (AP : Integer);
    function  GetAnzahlPatienten : Integer; }

  end;

  var
  AnzahlPatienten : Integer;

(* -------------------- B e s c h r e i b u n g -------------------------

Oberklasse    : TObject
Bezugsklassen  : -

Methoden
--------
Create
  Auftrag: Person und Adresse erzeugen und Initialisieren
  vorher : -
  nachher: Person ist erzeugt, alle Datenfelder sind leer.

Init
  Auftrag: Person Initialisieren
  vorher : ist erzeugt
  nachher: alle Datenfelder sind leer.

Set...
  Auftrag: Attribut schreiben
  vorher : Person ist vorhanden.
  nachher: Attribut ist gesetzt

Get...
  Anfrage: Attribut aus dem Objekt lesen
  vorher : Person ist vorhanden.
  nachher: -

HatBMI: real;
  Anfrage: nach dem BMI-Wert
  vorher : Person ist init.
  nachher: -

Abnehmen
  Auftrag: Gewicht jeweils um 5 erhöhen
  vorher : ist erzeugt
  nachher: neues Gewicht
       
----------------------------------------------------------------------- *)


implementation
(* ==================================================================== *)

constructor TPerson.Create;
(* -------------------------------------------------------------------- *)
begin
  inherited Create; // zuerst das geerbte Object erzeugen
  Init;
end;

procedure TPerson.Init;
(* ----------------------------------------- *)
begin


end;

procedure TPerson.SetName (n : string);
(* ----------------------------------------- *)
begin
  Name := n;
end;

function TPerson.GetName : string;
(* ----------------------------------------- *)
begin
  Result := Name;
end;

procedure TPerson.SetGroesse (gr : real);
(* ----------------------------------------- *)
begin
  Groesse := gr;
end;

function TPerson.GetGroesse: real;
(* ----------------------------------------- *)
begin
  Result := Groesse;
end;

procedure TPerson.SetGewicht (gw : real);
(* ----------------------------------------- *)
begin
  Gewicht := gw;
end;

function TPerson.GetGewicht: real;
(* ----------------------------------------- *)
begin
  Result := Gewicht;
end;


function TPerson.HatBMI: real;
(* ----------------------------------------- *)
begin
  Result := Gewicht / sqr(Groesse);
end;

procedure TPerson.Abnehmen;
(* ----------------------------------------- *)
begin
  Gewicht := Gewicht - 5;
end;

procedure TPerson.Zunehmen;
(* ----------------------------------------- *)
begin
  Gewicht := Gewicht + 5;
end;

{procedure TPerson.SetAnzahlPatienten(AP : Integer);
begin
  AnzahlPatienten := AP;
end;

function TPerson.GetAnzahlPatienten : Integer;
begin
  Result := AnzahlPatienten;
end;}


END. // ----- UNIT -------

Delphi-Quellcode:
unit uDatensatz;

interface

uses
  uPerson;

type
  TDatensatz = class(TObject)
  private
    Feld : array of TPerson;
  public
    constructor Create;
    procedure init;
    procedure CreateArray;
    function GetPerson (A : Integer) : TPerson;
  end;
implementation

constructor TDatensatz.Create;
(* -------------------------------------------------------------------- *)
begin
  inherited Create;
  init;
end;

procedure TDatensatz.Init;
(* ----------------------------------------- *)
begin


end;

procedure TDatensatz.CreateArray;
var
  i : Integer;
(* -------------------------------------------------------------------- *)
begin
  SetLength(Feld, AnzahlPatienten-1);
  for i := 0 to AnzahlPatienten do
    Feld[i] := TPerson.Create;
end;

function TDatensatz.GetPerson(A : Integer) : TPerson;
begin
  Result := feld[A];
end;

end.
  Mit Zitat antworten Zitat