|
Registriert seit: 22. Dez 2016 1 Beiträge |
#1
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. |
![]() |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
LinkBack |
![]() |
![]() |