kostenloser Webspace werbefrei: lima-city


Parkschein Automat

lima-cityForumProgrammiersprachenBasic

  1. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    Hallo Leute, ich bin leider völlig durcheinander gekommen mit einem Projekt. Und zwar sollte man eine Parkuhr Programmieren (wir haben den Münzeinwurf als Textfeld dargestellt)

    Dazu hab ich mir folgende Funktion geschrieben:

    Function Rechnung()
            If IsNumeric(txt_einwurf.Text) Then
                txt_restgeld.Text = Val(txt_kosten.Text) - Val(txt_einwurf.Text)
                If txt_restgeld.Text = 0 Then
                    MsgBox("Ihr Parkschein wird gedruckt.", MsgBoxStyle.OkOnly, "Bitte warten...")
                    txt_restgeld.Text = ""
                ElseIf txt_restgeld.Text > 0 Then
                    MsgBox("Bitte mehr Geld einwerfen.", MsgBoxStyle.OkOnly, "Fehler...")
                    txt_zws.Text = txt_restgeld.Text
                    txt_einwurf.Text = ""
                    txt_restgeld.Text = ""
                    txt_restgeld.Text = Val(txt_zws.Text) - Val(txt_einwurf.Text)
                        If txt_restgeld.Text = 0 Then
                            MsgBox("Ihr Parkschein wird gedruckt", MsgBoxStyle.OkOnly, "Bitte warten...")
                        End If
            End If
            End If
        End Function


    Diese sagt aus, wenn der Text numerisch ist, dann ist das Restgeld gleich die kosten minus den einwurf. Wenn null dann wird Parkschein gedruckt (funzt) wenn zu wenig Geld dann bitte mehr geld einwerfen, das restgeld zwischenspeichern in eine unsichtbare Textbox, den Einwurf und das Restgeld leeren(funzt nicht) und neu berechnen (funzt wiederum). Wenn dann 0 Dann drucke parkschein (funzt dementsprechend auch nicht).

    Das ganze sollte mit If anweisungen und nicht mit For oder While schleifen realisiert werden und ist in VB geschrieben.

    Kann mir jemand helfen, das ist der reinste Schrott den ich da proggt habe -.-
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. kill-a-teddy schrieb:
    Das ganze sollte mit If anweisungen und nicht mit For oder While schleifen realisiert werden und ist in VB geschrieben.
    Ganzs ohne Schleife wirst du da ja wohl nicht zurecht kommen, da ja solange Geld nachgeworfen werden muss bis der eingeworfene Betrag >= Rechnungsbetrag, Übrigens ist auch ein in VB ja afair immernoch zugelassenes GoTo (sollte imho verboten werden) durchaus in der Lage eine manuelle Schleife zu erzeugen. Kannst du den Grund benennen warum keine Schleife verwendet werden soll?
  4. Hi Kill-a-tedy,

    Kann mir jemand helfen, das ist der reinste Schrott den ich da proggt habe -.-


    ... und nicht nur das, auch Deine Beschreibung, was Du eingentlich willst scheint mir etwas wirr zu sein.

    Ich mache mal folgende Annahmen, da Du das ja leider weder formuliert oder als Code mitgeschickt hast:

    Der Anwender kann den Einwurfbetrag in das Textfeld txt.einwurf schreiben und klickt dann auf einen Knopf "Zahlen" oder sowas in der Art. Dadurch wird dann Deine Funktion "Rechnung" aufgerufen. Wenn noch ein Betrag nach zu zahlen ist, dann muss wieder ein Wert eingetragen werden und "Rechnung" erneut ausgeführt. Was Du mit dem Zwischenspeicherfeld willst, weiß ich nicht, Der Code muss dann so aussehen:

    Function Rechnung()
      If  IsNumeric(txt_einwurf.Text) Then
        txt_restgetld.Text = Val(txt_kosten.Text) - Val(txt_einwurf.Text)
        If txt_restgeld.Text = 0 Then
          MsgBox("Ihr Parkschein wird gedruckt.", MsgBoxStyle.OkOnly, "Bitte warten...")
          txt_restgeld.Text = ""
        ElseIf txt_restgeld.Text > 0 Then
          MsgBox("Bitte mehr Geld einwerfen.", MsgBoxStyle.OkOnly, "Fehler...")
        End If
        Else 
          ' Hier muss dann noch die Logik rein für Geld rausgeben, falls zuviel eingezahlt wurde, oder willst Du das dann behalten?
        End If
      End If
    End Function


    Liebe Grüße

    BigBaer
  5. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    bigbaer schrieb:
    Was Du mit dem Zwischenspeicherfeld willst, weiß ich nicht, Der Code muss dann so aussehen: [...]


    Das ist ja nicht anderes, als das was ich sowieso schon hatte. Das Problem bleibt und zwar, dass es eine Endlos-Ausgabe sein könnte... Hat jemand z.B. 10 Euro und will die nur in 1 Cent stücken bezahlen, dann hat er nach dem 1. Cent entweder die Schleife neu angefangen oder bekommt sein Parkticket schon..
  6. Irgendwie hat dein Programm noch keinen wirklichen Sinn. Wenn ich das recht verstehe, wird die Funktion aufgerufen, wenn du auf einen Button klickts? Dann brauchst du doch eh keine Schleifen und das Restgeld kannst du auch stehen lassen, das zu leeren ist eigentlich recht doof. Ansonsten könntest du das Restgeld auch einfach in einer Variablen zwischenspeichern und immer nur ausgeben, das trennt dann auch Ausgabe von Programmlogik (sowieso zu empfehlen).
    Und noch ne andere Sache: Weißt du nicht was Variablen sind? Warum nutzt du Textfelder um Werte zu speichern? Das ist ziemlich... bescheuert?

    Gruß
    aliendwarf
  7. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    Das hatte ich vorher (Dim Restgeld As Integer = txt_restgeld.text) und danach dann restgeld.text geleert, aber das Problem bleibt ja immernoch gleich...


    Wenn ihr zu einem Parkschein Automat geht und dort steht ihr müsst 50 Cent einwerfen. Dann habt ihr es bestimmt nicht immer Parat und macht es klein, ihr werft einmal 20 Cent rein, dann berechnet der neu und es steht nur noch 30 Cent da. Dann werft ihr nochmal 20 Cent und es steht 10 Cent da, welche ihr dann auch einwerft. Das Restgeld wird immer berechnet egal wie klein man die Cents einwirft.

    Bei meinem Programm ist es jedoch so, dass wenn man 20 Cent einwirft es entweder sagt, dass das geld nicht reicht, dann aber gar nichts macht auch nicht weiter rechnet (ist ja klar wegen dem Script) oder es einfach das Ticket druckt.

    Ich brauche also eine Endlos schleife, die nach jedem Einwurf (bei mir jetzt txt_eingabe) das Restgeld neu berechnet. Diese Schleife soll aber erst dann anfangen, wenn man WENIGER als das eingeforderte Geld eingeworfen hat. Es soll also nicht passieren, dass man 50 Cent einwirft aber dann trotzdem eine Schleife kommt und es soll nicht passieren, dass man 20 Cent einwirft und KEINE Schleife bekommt.


    Besser kann ich des Problem nicht beschreiben, wenn des jetzt noch immer nicht verständlich war weiß ich auch net weiter.
  8. kill-a-teddy schrieb:
    Ich brauche also eine Endlos schleife, die nach jedem Einwurf (bei mir jetzt txt_eingabe) das Restgeld neu berechnet. Diese Schleife soll aber erst dann anfangen, wenn man WENIGER als das eingeforderte Geld eingeworfen hat. Es soll also nicht passieren, dass man 50 Cent einwirft aber dann trotzdem eine Schleife kommt und es soll nicht passieren, dass man 20 Cent einwirft und KEINE Schleife bekommt.
    Falsch du brauchst keine Endlosschleife sonder eine Schleife mit definierter Abbruchbedingung (Endlosschleifen = Programmierfehler), ausserdem sollte man idealerweise immer in diese Schlefie kommen. Für so eine Problemstellung benutzt man do ... until. Hier einmal Pseudo-Code:
    bereitsEingeworfen=0
    ZuBezahlen = ZahlbetragErmitteln(Ankunftszeit) ;wird in einer separaten Funktion ermittelt
    do
        bereitsEingeworfen = bereitsEingeworfen + neuEingeworfen
    until bereitsEingeworfen >= ZuBezahlen
    RueckGeld = bereitsEingeworfen - ZuBezahlen
    gebeRueckgeld(RueckGeld) ;Funktion zum Geld zurückgeben aufrufen
    druckeTicket; Funktion zum Parkschein drucken aufrufen.
    Es wird immer mind. 1 mal auf den Einwurf einer Münze gewartet aber höchstens solange bis der eingworfene Betrag grösser oder gleich dem zu zahlenden Betrag ist. ich hoffe dir damit den Sinn einer "fussgesteuerten" Schleife klargemacht zuhaben.

    Beitrag zuletzt geändert: 19.11.2011 21:09:19 von autobert
  9. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    autobert schrieb:

    [...] Falsch du brauchst keine Endlosschleife sonder eine Schleife mit definierter Abbruchbedingung (Endlosschleifen = Programmierfehler), ausserdem sollte man idealerweise immer in diese Schlefie kommen. Für so eine Problemstellung benutzt man do ... until. [...]


    Das ist genau das, was ich meine :) Damit kann das Thema endlich geschlossen werden.
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!