Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Deklaration MWST - Achtung:Totaler NOOB! (https://www.delphipraxis.net/77299-deklaration-mwst-achtung-totaler-noob.html)

Jenny84 17. Sep 2006 11:42


Deklaration MWST - Achtung:Totaler NOOB!
 
Ich muss für den Informatikunterricht ein Bruttoberechnungsprogramm schreiben, in welchem die MwSt schon deklariert/festgelegt ist. Ich habe gegooglet wie ne Irre und finde immer was mit
//const mwst=16
aber es klappt nie.

Außerdem, sobald ich in meinem Programm eine Zahl im Nettofenster eingebe, kommt diese Fehlermeldung:
" ist kein gültiger Gleitkommawert :wiejetzt:

So sieht mein Code momentan aus:



Delphi-Quellcode:
var
Form1: TForm1;
vnetto, vbrutto, vmwst:single;

const
mwst=16.0;

implementation

{$R *.dfm}

procedure TForm1.nettoChange(Sender: TObject);
begin
//Eingabe
vnetto:=strtofloat(netto.Text);
vmwst:=strtofloat(mwst.Text);
//Verarbeitung
vbrutto:=vnetto+vnetto*vmwst/100.0;
//Ausgabe
brutto.Text:=floattostr(vbrutto);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
brutto.Text:=floattostr(vbrutto);
brutto.Text:=floattostr(strtofloat (netto.text)+strtofloat (netto.Text)*strtofloat(mwst.Text)/100.0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

end.
[edit=alcaeus]Code mit Delphi-Tags formatiert. Mfg, alcaeus[/edit]

Zacherl 17. Sep 2006 11:57

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Vermutlich, weil das Edit am Anfang leer ist und den '' Wert ins OnChange Ereigniss übernimmt.

Jenny84 17. Sep 2006 12:01

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
uPs, sorry, danke alcaeus!

@Florian Bernd: Bin da noch ziemlich neu mit, was müsste ich jetzt ändern? *liebfrag* :oops:

DocE 17. Sep 2006 12:02

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Hallo Jenny,

das erste Problem ist, das Du nicht 2 Sachen gleich benennen darfst. Hier hast Du das Edit MwSt und die Konstante MwSt genannt. Das funktioniert nicht. Nenn das Edit mal MwStEdit. Das nächste Problem ist, dass bei leerem Netto.Text strtofloat eine Exception auslöst, da ein leerer String nicht in eine Zahl umgewandelt werden kann. Fang das mit try..except ab.

die Variablen vnetto,vmwst,vbrutto müssen nicht unbedingt global deklariert werden.

Hier mal ein Codeschnipsel:

Delphi-Quellcode:
procedure TForm1.NettoChange(Sender: TObject);
var vnetto,vmwst,vbrutto: single;
begin

  //Eingabe
  // falls netto.text keine zahl beinhaltet oder leer ist, dann vnetto := 0
  try vnetto := strtofloat(Netto.Text);
  except vnetto := 0; end;

  //Verarbeitung
  vmwst := vnetto * (mwst / 100 );
  vbrutto := vnetto * ((100+mwst) / 100);

  //Ausgabe (formatiert mit 2 Nachkommastellen und Tausender-Punkt)
  MwstEdit.Text := FormatFloat(',0.00',vmwst);
  Brutto.Text := FormatFloat(',0.00',vbrutto);

end;
Grüsse
...Doc

xZise 17. Sep 2006 12:03

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Ein paar dinge:
1. Ist das im Change ganz schlecht, weil, wenn du alles entfernst, er aus einem Leerstring ('') kein Float machen kann und eine Fehlermedlung ausgibt. Mein Vorschlag wäre: TryStrToFloat!
2.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
brutto.Text:=floattostr(vbrutto);
brutto.Text:=floattostr(strtofloat (netto.text)+strtofloat (netto.Text)*strtofloat(mwst.Text)/100.0);
end;
Hier macht die erste zuweisung keinen Sinn!
3.
Button1.Click und nettoChange sind an sich das gleiche, außer das bei nettochange die Umwandlungen aufgesplittet sind.

Noch eine kleine Erklärung zu "TryStrToFloat":
TryStrToFloat erwartet den String und eine Floatvariable und gibt einen Boolean zurück, wenn es funktioniert.
Der Wert, der bei StrToFloat herauskommt ist in der übergebenen Floatvariable enthalten.

Delphi-Quellcode:
procedure TForm1.bTry(Sender : TObject);
var
  ExtendedBuffer : Extended; // Extended ist eine Fließkommavariable
begin
  if TryToStr(eText.text, ExtendedBuffer) {= true} then //das = true kann man im if weglassen
    Showmessage(FloatToStr(ExtendedBuffer) + ' haben sie eingegeben')
  else
    Showmessage('Ihr angegebener Wert war keine Fließkommazahl!');
end;

Jenny84 17. Sep 2006 12:06

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Ich probiers heute abend, da mein Sohn gerade wach wird. Versteh zwar noch leicht Bahnhof, aber wird schon gehen, danke :) :) :)

Jenny84 17. Sep 2006 18:13

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Okay haltet mich bitte nicht für blöde oder so... Aber ich raffs nicht! :(
Ich glaub mein Lehrer (der auch weiß, dass ich das kaum versteh) würde mich mit Fragen löchern, wenn ich das so schreibe... Weil soweit sind wir noch gar nicht (arbeiten mit den Unterlagen von datadidact). Aber sind doch die einzigen Möglichkeiten?

mkinzler 17. Sep 2006 18:36

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Was genau verstehst du nicht?

Jenny84 17. Sep 2006 18:39

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
irgendwie alles :oops: also wie ich das jetzt bei mir ändern muss genau. Ich komm voll durcheinander grad :( :oops: :oops: :oops: :wall:

mkinzler 17. Sep 2006 18:48

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Delphi-Quellcode:
procedure TForm1.nettoChange(Sender: TObject);
begin
    if netto.text = '' then Exit;
    //Eingabe
    if TryStrToFloat(netto.Text, vnetto) then
    begin //Nettoeingabe korrekt
        if TryStrToFloat(mwst.Text,vmwst ) then
        begin // //Mwst-Eingabe korrekt
           //Verarbeitung
           vbrutto:=vnetto+vnetto*vmwst/100.0;
          //Ausgabe
          brutto.Text:=floattostr(vbrutto);
        end
        else
        begin    
           //Eingabe ist nicht ok
          ...
        end;
   end
   else
   begin
      //Eingabe ist nicht ok
   end;
end;
Getiipt und nicht getestet.

DocE 17. Sep 2006 19:04

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Was möchtest Du denn genau machen?

1. Soll auch der Mwst-Betrag in einem Edit ausgegeben werden?

2. Sollen sich diese Werte (MwSt-Betrag und Brutto-Betrag) sofort, also während der Eingabe des Netto-Betrages anzeigen, oder erst auf Knopfdruck? Beides zusammen macht nicht viel Sinn... Wenn ihr noch nicht mit try..except oder TryStrToFloat gearbeitet habt, ist die "auf Knopfdruck"-Variante besser, da es erst beim Knopfdruck zu einem Fehler kommen kann, ansonsten aber bei der Eingabe ständig zu Fehlern kommen könnte.

3. Hast Du vielleicht die genaue "Aufgabenstellung"?

4. Ist Dir try..except oder try..finally bekannt?

5. Ist Dir FormatFloat oder FloatToStrF bekannt?


Grüsse
...Doc

Jenny84 17. Sep 2006 19:14

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Bekannt sind mir u.a. halt die Begriffe wie "Strtofloat" und "Floattostr"...

Die Aufgabe heißt:
"Geben Sie das Programm bruttoberechnung ein und ändern Sie es derart ab, dass die Mehrwertsteuer als Konstante deklariert wird."

Da hab ich rumgegooglet und habs halt eingegeben dieses const mwst=16.0; gefunden....

DocE 17. Sep 2006 19:17

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Wenn ich das richtig verstehe, hast Du also bereits das fertige Programm "Bruttoberechnung" und sollst dies nur umändern?

Oder gehört die Entwicklung des Programms "Bruttoberechnung" dazu?

Jenny84 17. Sep 2006 19:22

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Das Programm war in den Unterlagen etwas anders geschrieben, der Lehrer hat an die Tafel geschrieben, wie wir es programmieren sollen (er arbeitet etwas anders wie datadidact...). Und das habe ich abgeschrieben und genauso in den Code eingegeben. Versteh das auch nciht (außer das mit der const mwst=16.0;, das hat er nicht angeschrieben, gehört ja zur Aufgabe)

Omann ich glaub ich raff das nie... Gings euch auch mal so? :?

DocE 17. Sep 2006 19:36

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Ok, das sieht so aus, als wenn es vorher ein Feld gab, nämlich "MwSt", in das man die Prozentzahl der MwSt eingeben sollte und jetzt soll das ganze nur mit einem festen Wert funktionieren. Verstehe zwar nicht ganz, warum man das Programm praktisch "zurückentwickelt", denn die flexible MwSt-Eingabe ist eigentlich besser. Aber gut. Ich ändere mal Deinen zuerst geposteten Quelltext und kommentiere diesen:

Delphi-Quellcode:
var
  Form1: TForm1;
  //vnetto, vbrutto, vmwst: single; // vmwst ist jetzt keine variable mehr, da const, also nur noch
  vnetto, vbrutto: single;

//const
  //mwst=16.0; // wäre im Prinzip richtig, allerdings heißt das Eingabefeld (Edit) bereits mwst.
  //wir benutzen jetzt einfach den Namen der vorherigen Variable "vmwst" (die oben in var entfernt wurde) weiter, um weniger ändern zu müssen
const
  vmwst = 16.0;

implementation

{$R *.dfm} 

procedure TForm1.nettoChange(Sender: TObject);
begin

  //Eingabe
  vnetto:=strtofloat(netto.Text);
  //vmwst:=strtofloat(mwst.Text); dies ist dann nicht mehr erorderlich, da oben als Konstante deklariert

  //Verarbeitung
  vbrutto:= vnetto + vnetto * vmwst / 100.0;

  //Ausgabe
  brutto.Text := floattostr(vbrutto);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 
  brutto.Text:=floattostr(vbrutto); // Diese Zuweisung bringt nichts, da der Wert sofort wieder überschrieben wird
  //brutto.Text:=floattostr(strtofloat (netto.text)+strtofloat (netto.Text)*strtofloat(mwst.Text)/100.0); // strtofloat(mwst.Text) durch vmwst ersetzen
  brutto.Text := floattostr(strtofloat(netto.text) + strtofloat(netto.Text) * vmwst / 100.0);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 
  close;

end;

end.
Allerdings gibt es jetzt immer noch das Problem, dass, wenn Du das Netto-Edit leer machst, oder Buchstaben eingibst, sofort eine Exception "kein gültiger Gleitkommawert" kommt. Ich kann mir eigentlich nicht vorstellen, dass das Programm so an die Tafel geschrieben wurde. Hast Du da schon was geändert? Sonst poste bitte nochmal das Original-Tafel-Programm.

Ich würde mal schätzen, dass die Sachen, die Du unter "NettoChange" gepackt hast, eigentlich in "Button1Click" gehören. Kann das sein?


Grüsse
...Doc

mkinzler 17. Sep 2006 19:39

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Hallo Jenny, vielleicht solltest du einen Schritt zurückgehen und erst einmal die grundlagen der Programmierung und dann die Implementierung in Delphi anschauen.
Dieser Tipp ist nicht böse gemeint, aber ich habe den Eindruck, daß du das was der Lehrer an der tafel mache abpinselst und eingibst, aber nich verstehst was der Code genau macht. Oder irre ich mich?

Jenny84 17. Sep 2006 19:48

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Daaankeschööön! So klangs jetzt wenigstens logisch :)

Ja der Haken wäre dann wirklich nur noch, dass sobald ich das Nettofeld leere diese Meldung kommt....
Und was ist mit dem Edit-Feld für die MwSt? Kann ich ja genausogut weglassen und den Button auch???

Also geändert habe ich nichts, habs genauso abgeschrieben wies an der Tafel stand, weil ich ja so kein Ahnung von dem Zeug hab.

@mkinzler: Mittwoch gibts nen Extra-Kurs für diejenigen die noch so Probleme haben, hoffentlich hilfts! Weil in der Stunde erklärt er nicht so gerne von vorne wegen den anderen, dies schon können... :( Ich habs ja auch erstmal selbst versucht aber diese Aufgabe war halt was, worüber wir noch NIE im Unterricht gesprochen haben (bis jetzt nur Taschenrechner inkl. Quadrat- und Wurzelfunktion programmiert)

mkinzler 17. Sep 2006 19:51

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
http://www.dsdt.info/tutorials/

Jenny84 17. Sep 2006 19:53

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Danke dir! Scheint ja ziemlich hilfreich zu sein, ich schaus mir morgen an in Ruhe, denn langsam wirds Zeit für mich, offline zu gehen.

Ich danke euch nochmal! :thumb:

DocE 17. Sep 2006 19:56

Re: Deklaration MWST - Achtung:Totaler NOOB!
 
Hallo Jenny,

also ich würde das ganze so machen, da ihr die "Try-Sachen" noch nicht hattet:

Was jetzt in NettoChange steht, in Button1Click packen und das bisherige Button1Click entfernen. Somit wird erst auf Knopfdruck gerechnet. Das jetzige MwSt Feld ist somit überflüssig und könnte weg. Der Code würde dann so aussehen:

Delphi-Quellcode:
var
  Form1: TForm1;
  vnetto, vbrutto: single;

const
  vmwst = 16.0;

implementation

{$R *.dfm} 

procedure TForm1.nettoChange(Sender: TObject);
begin

  // bitte leer machen!

end;

procedure TForm1.Button1Click(Sender: TObject);
begin

  //Eingabe
  vnetto := strtofloat(netto.Text);

  //Verarbeitung
  vbrutto := vnetto + vnetto * vmwst / 100.0;

  //Ausgabe
  brutto.Text := floattostr(vbrutto);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 
  close;

end;

end.

Somit rechnet Dir das Programm auf Knopfdruck den Brutto-Betrag mit der festen MwSt aus.

("// bitte leer machen! " nicht dahin schreiben, sondern wirklich leer machen...)


Grüsse
...Doc


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz