AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Programm "Waren"

Programm "Waren"

Ein Thema von EdAdvokat · begonnen am 12. Jan 2017 · letzter Beitrag vom 16. Jan 2017
Antwort Antwort
Seite 1 von 2  1 2   
EdAdvokat
Registriert seit: 1. Mai 2016
Ein kleines Übungsprogramm "Waren" zur Disskussion. Es soll lediglich eine einfache Berechnung von Preisen, Rabatt und Warenbestand
dargestellt werden.
Angehängte Dateien
Dateityp: zip waren1.zip (2,72 MB, 38x aufgerufen)
 
EdAdvokat

 
Delphi 10.2 Tokyo Professional
 
#2
  Alt 14. Jan 2017, 16:20
Hallo zusammen, gibt es überhaupt nichts zu meckern an dem Programm? So perfekt kann das doch nicht sein.
Zwar ist zu merken, dass es vermutlich Interesse findet, doch keiner meldet sich zu Wort. Bislang konnte
ich aus den konstruktiven Kritiken immer lernen und das soll ja ein Leben lang so weiter gehen ("man lernt
sein Leben lang niemals aus...") Also was ist zu kritisieren?
Norbert
  Mit Zitat antworten Zitat
HolgerX

 
Delphi 6 Professional
 
#3
  Alt 14. Jan 2017, 17:35
Hmm..

OK, fangen wir an zu zerlegen

Delphi-Quellcode:
procedure TWaren.init;
begin
  FillChar(FWarenbestand,sizeof(FWarenbestand),0);
  FillChar(FWarenverkauf,sizeof(FWarenVerkauf),0);
  FillChar(FaktBestand,sizeof(FaktBestand),0);
  FillChar(FStPreis,sizeof(FStPreis),0);
  FillChar(FVerkPreis,sizeof(FVerkPreis),0);
  FillChar(FNettopreis,sizeof(FNettoPreis),0);
  FillChar(FMWSt,sizeof(FMWSt),0);
  FillChar(FErtrag,sizeof(FErtrag),0);
  FillChar(FAbMWSt,sizeof(FAbMWSt),0);
end;

Wieso benutzt Du FillChar um Integer oder Float Variablen zu initialisieren?
Sollte dies nicht besser nur für arrays ob Byte/Char verwendet werden?

Auch ist es besser lesbar, wenn Du die Variablen mit dem entsprechenden Wert initialisierts...


Delphi-Quellcode:
procedure TWaren.init;
begin
  FWarenbestand := 0;
  FWarenverkauf := 0;
  FaktBestand := 0;
  FStPreis := 0;
  FVerkPreis := 0.0;
  FNettopreis := 0.0;
  FMWSt := 0.0;
  FErtrag := 0.0;
  FAbMWSt := 0.0;
end;

Delphi-Quellcode:
var
  Form1: TForm1;
  Waren: TWaren;

Und was mich immer wieder den Kopf schütteln läst: Unsinnige GLOBALE Variablen!

'Waren' wird nur 'innerhalb' der FormularClasse verwendet, wieso dort nicht als FWaren : TWaren unter 'Private' anlegen?
Dann würde an jeder Stelle in den Methoden der Form erkennbar sein, wo es herkommt ('FWaren' = Membervar).

Wieso hat die Classe TWaren kein eigenes Init, bei dem z.B. Warenbe); //const Warenbe
gesetzt wird?

und beim Form1.Init sollten die Werte aus der Classe Waren (nach dessen Init) genommen werden und nicht wieder eigene Konstanten.

Delphi-Quellcode:
procedure TForm1.init;
begin
  FWaren.Init;

  Warenbestand.Text := IntToStr(FWaren.Warenbestand);
  WarenVerkauf.Text:='0';
  aktBestand.Text := IntToStr(FWaren.aktBestand);
  StPreis.Text := FloatToStr(FWaren.StPreis); //const StkPreis
  VerkaufsPreis.text:= FloatToStr(FWaren.Verkaufspreis);
  Nettopreis.Text := FloatToStr(FWaren.Nettopreis);
  MWSt.Text := FloatToStr(FWaren.MWSt);
  Ertrag.Text := FloatToStr(FWaren.Ertrag);
  AbMWSt.Text := FloatToStr(FWaren.AbMWSt);
  BruttoUmsatz.Text := FloatToStr(FWaren.BruttoUmsatz); // Fehlt

  checkbox1.Checked :=false;
  checkboxRabatt.Checked :=false;
end;
Somit wird nur an einer Stelle Konstanten ver wendet und diese zur Ansicht gebracht.


So, hoffe ein paar Tips geben zu können..

Mal sehen, ob meine Infos jetzt von anderen zerpflückt werden
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

 
Delphi 10.4 Sydney
 
#4
  Alt 14. Jan 2017, 18:15
Das größte Problem ist, dass die Mehrwertsteuerberechnung falsch ist. Die 19% Mehrwertsteuer werden auf den Nettowert draufgerechnet. Das sind nicht 19% des Bruttowerts...
Sebastian Jänicke
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

 
Delphi 7 Personal
 
#5
  Alt 14. Jan 2017, 18:46
Da ich nur D7 habe muß ich mich auf den Sourcecode beschränken:
Delphi-Quellcode:
   begin
          if Waren.Warenverkauf>=10 then
            checkboxRabatt.Checked:=true;
         if checkboxRabatt.Checked then
            Waren.StPreis:=((Waren.StPreis)-1);
            checkboxRabatt.Checked:=false;
        MessageDlg(format(Preismeldung,[(Waren.Verkaufspreis),(Waren.Nettopreis),(Waren.MWSt)]),mtInformation,[mbOk],0);
        end;
das checkboxRabatt.Checked:=false; gehört auf den ersten Blick noch zu if checkboxRabatt.Checked then was nach genauerem hinschauen Blödsinn ist, aber warum unnötig verkomplizieren?
Warum diese "Checkboxrabatt"-Orgie?
Wenn Du mehr als 10Stk verkaufst gibt es Rabatt egal ob die Checkbox gecheckt ist oder nicht?
Wenn ein Rabatt gewährt werden soll, dann sollte dies die Checkbox ändern. Es könnte sein, daß die Rabattgewährung nicht möglich ist. Das weiß aber Waren daher sollte Waren den Status der Checkbox setzen.
Delphi-Quellcode:
        if (Waren.aktBestand)<0 then
         begin
           showMessage(mehrWaren);
           checkbox1.Checked:=true;exit;
         end;
Showmessage soll informieren, daß es nicht mehr genug Waren gibt. Warum überprüft die Oberfläche dies und nicht die Klasse Waren?
Und wer ist checkbox1 Gruß
K-H
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#6
  Alt 14. Jan 2017, 20:03
Ich glaube, du begehst die gleichen Fehler wieder, wie bei deinem anderen Programm.

Aber Hut ab für deinen Mut so was hier vor zu stellen. Aber nur so lernt man, aus Fehlern. Weiter so.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

 
Delphi 10.1 Berlin Professional
 
#7
  Alt 15. Jan 2017, 08:26
Moin...
Zitat:
Aber Hut ab für deinen Mut so was hier vor zu stellen. Aber nur so lernt man, aus Fehlern. Weiter so.
...so sehe ich das auch. Alle haben mal angefangen...bei den meisten war Eisenhower noch President. Du mußt nur darauf achten, das du alte Fehler nicht wieder einbaust.

Die Tage schaue ich auch mal rein.

Geändert von haentschman (15. Jan 2017 um 08:28 Uhr)
  Mit Zitat antworten Zitat
EdAdvokat

 
Delphi 10.2 Tokyo Professional
 
#8
  Alt 15. Jan 2017, 14:26
Hallo zusammen, Danke für Eure Anregungen. Da ich zurückliegend durch eure Anregungen mehr gelernt habe als aus den schlauen Delphibüchern wage ich es, hoffentlich ohne aufdringlich zu wirken, immer mal wieder ein Programmchen hier vorzustellen und den "Spezis" aus Eisenhowers Zeiten Futter für Kritiken zu geben. Die alten Fehler(globale Variable, sinnentlehrte Checkboxen)lassen sich erkenntlich nicht so leicht abstellen - doch ich arbeite daran. Leider wird in den Büchern auf die Frage des Setzens von globalen oder lokalen Variablen nicht so der Schwerpunkt gesetzt und mal schnell eine globale gewählt. So habe ich das kritiklos akzeptiert.
Als Truman regierte erblickte ich das Licht der Welt, doch bis zu Turbo Pascal und Delphi vergingen noch ein paar Jahre und die Programmiererei ist nur mein Hobby, denn ich habe in meinem zurückliegenden Berufsleben eher Paragraphen verbogen als Bits und Bytes gestreichelt, so mag man mir diesen oder jenen Fehler verzeihen.
Also P80286 (er lebt vermutlich nach Eisenhowers Regentschaft in der Zeit der 286-iger PC's): Und wer ist checkbox1 ? - das ist ein Opfer der checkbox-Orgie und es gibt ihn so nicht mehr.
Danke Sebastian für den Hinweis auf die MWSt. Das ist mir peinlich, doch ich habe es hoffentlich verbessert, denn nun wird Bruttopreis, Nettopreis und MWSt so angezeigt, wie es die verbindliche
Berechnung verlangt.
HolgerX, auch Dir vielen Dank und ich hoffe Deine Anregungen umgesetzt zu haben. Das Einfügen der globalen Variablen in OOP unter Form1:TForm1 dann Waren:TWaren zu setzen geschah fast automatisch, weil die das alle so gemacht haben in meinen Büchern. Man soll tatsächlich alles hinterfragen und Eure Argumentation ist diesbezüglich überzeugend.
So nun also eine verbesserte Version
Angehängte Dateien
Dateityp: zip waren2.zip (2,72 MB, 14x aufgerufen)
Norbert

Geändert von EdAdvokat (15. Jan 2017 um 16:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock

 
Delphi 2010 Professional
 
#9
  Alt 16. Jan 2017, 09:09
Kann der Stückpreis nur in ganzen Euro-Beträgen festgelegt werden?
Albert
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

 
Delphi 7 Personal
 
#10
  Alt 16. Jan 2017, 10:26
Gut zu wissen wer auf der "anderen" Seite sitzt, willkommen bei den alten Säcken, als Kennedy in Dallas war, habe ich die Grundrechenarten gelernt.

Delphi-Quellcode:
      if (FWaren.aktBestand)>=0 thenif checkboxverfuegbar.Checked then
    begin
      showMessage(Warenbest);
    exit end
    else if not checkboxverfuegbar.Checked then

        begin
          if FWaren.Warenverkauf>=10 then
            FWaren.StPreis:=((FWaren.StPreis)-1);
            MessageDlg(format(Preismeldung,[(FWaren.Verkaufspreis),(FWaren.Nettopreis),(FWaren.MWSt)]),mtInformation,[mbOk],0);
        end;
        if (FWaren.aktBestand)<0 then
         begin
           checkboxverfuegbar.Checked:=true;exit;
         end;
Dieses Exit; end mag ein gewollter Stolperstein sein, aber
Delphi-Quellcode:
begin
  //irgendwas
  Exit;
end
liest sich doch besser.

Fällt Dir hier etwas auf:
Delphi-Quellcode:
if checkboxverfuegbar.Checked then
    .......
    else if not checkboxverfuegbar.Checked then
(falls wider Erwarten nicht, else ist schon das gleiche wie not checkboxverfuegbar.Checked )

Gruß
K-H
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf