Entwickler-Ecke
Sonstiges (Delphi) - Delphi Bußgeldrechner aktualisiert manche Ergebnisse nicht
Vorschlag - Mi 06.01.10 16:07
Titel: Delphi Bußgeldrechner aktualisiert manche Ergebnisse nicht
Hallo liebe Delphi Community
Also, ich habe ein Programm erstellt, mit dem man die Strafe bei einer Übertretung der zulässigen Geschwindigkeit im Straßenverkahr berechnen kann. Nun klappt auch alles, doch wenn man eine Strafe berechnet hat, und danach wieder eine minderwertige strafe ausrechnen will, bleiben die Punkte(Flensburg) und die Zeit des Fahrverbots immer auf dem vorherigen Stand, und werden nicht neu berechnet. #
Kann mir bitte jemand helfen???
Danke
Moderiert von
Tino: Großbuchstaben im Titel ersetzt.
Narses - Mi 06.01.10 16:13
Moin!
Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den
Richtlinien [
http://www.entwickler-ecke.de/richtlinien.html]:
| 1.2 Beiträge: |
| Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf

oder

klicken und den Titel ändern. Danke Dir!
cu
Narses
Delete - Mi 06.01.10 16:17
Funktioniert doch alles. Ich kann das beschriebenen Fehlverhalten nicht nachvollziehen.
Vorschlag - Mi 06.01.10 16:42
Hey luckie
Also bei mir funktioniert das nicht. Vielleicht habe ich es etwas ungenau beschrieben:
Also, wenn ich z.B 25 Km/h zu schnell eingebe, kommen z.B 80€ raus und 1 Punkt. Wenn ich danach im selben Fenster nur noch 10 Km/h zu schnell eingebe, dann bleibt der Punkt stehen, und nur das Bußgeld verändert sich. Also steht dann bei 10 Km/h 10 € und 1 Punkt, obwohl es nicht stimmt.
Also schätze ich, dass das Programm einfach nur das busgeld neu berechnet, aber nicht die Punkte bzw. das Fahrverbot.
Ist es jetzt genauer?
Tilman - Mi 06.01.10 16:48
Das liegt daran weil du die Caption nicht zurücksetzt.
Delphi-Quelltext
1: 2: 3: 4:
| if zahl3 <=10 then Lbbusgeld.Caption:='10'+'€' else |
Delete - Mi 06.01.10 17:47
Und hier die saubere, übertriebene mit Spatzen auf Kanonen geschossene Lösung*:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153:
| unit BussgeldClass;
interface
type iaInnerortsAusserOrts = (iaInnen, iaAussen);
type TStrafe = class (TObject) private FDifGeschW: Cardinal; FBussgeld: Cardinal; FPunkte: Cardinal; FMonateFahrverbot: Cardinal; function GetGeschw: Cardinal; procedure SetGeschw(value: Cardinal); public Constructor Create(ADifGeschw: Cardinal); procedure BerechneStrafe; virtual; abstract; property DifGeschw: Cardinal read GetGeschw write SetGeschw; property Bussgeld: Cardinal read FBussgeld; property Punkte: Cardinal read FPunkte; property MonateFahrverbot: Cardinal read FMonateFahrverbot; end;
TStrafeInnen = class(TStrafe) public procedure BerechneStrafe; override; end;
TStrafeAussen = class(TStrafe) public procedure BerechneStrafe; override; end;
TBussgeld = class(TObject) private FInnerortsAusserorts: iaInnerortsAusserorts; FDifGeschw: Cardinal; FStrafe: TStrafe; public Constructor Create(ADifGeschw: Cardinal; InnerortsAusserorts: iaInnerortsAusserOrts); Destructor Destroy; override; procedure BerechneStrafe; property Strafe: TStrafe read FStrafe; end;
implementation
procedure TBussgeld.BerechneStrafe; begin case FInnerortsAusserorts of iaInnen: begin FStrafe := TStrafeInnen.Create(FDifGeschw); FStrafe.BerechneStrafe; end; iaAussen:; end; end;
constructor TBussgeld.Create(ADifGeschw: Cardinal; InnerortsAusserorts: iaInnerortsAusserOrts); begin inherited Create; FDifGeschw := ADifGeschw; FInnerortsAusserorts := InnerortsAusserorts; end;
destructor TBussgeld.Destroy; begin FStrafe.Free; inherited; end;
constructor TStrafe.Create(ADifGeschw: Cardinal); begin inherited Create; FBussgeld := 0; FPunkte := 0; FMonateFahrverbot := 0; FDifGeschw := ADifGeschw; end;
function TStrafe.GetGeschw: Cardinal; begin Result := FDifGeschW; end;
procedure TStrafe.SetGeschw(value: Cardinal); begin FDifGeschW := value; end;
procedure TStrafeAussen.BerechneStrafe; begin
end;
procedure TStrafeInnen.BerechneStrafe; begin if DifGeschw <= 10 then begin FBussgeld := 15; FPunkte := 0; FMonateFahrverbot := 0; end else if DifGeschw <= 15 then begin FBussgeld := 25; FPunkte := 0; FMonateFahrverbot := 0; end else if DifGeschw <= 20 then begin FBussgeld := 35; FPunkte := 0; FMonateFahrverbot := 0; end else if DifGeschw <= 30 then begin
end else if DifGeschw <= 40 then begin
end else if DifGeschw <= 50 then begin
end else if DifGeschw <= 60 then begin
end else if DifGeschw <= 70 then begin
end else if DifGeschw > 70 then begin
end end;
end. |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.BTinnerortsClick(Sender: TObject); var DifGeschw: Cardinal; Bussgeld: TBussgeld; begin DifGeschw := StrToInt(Edgefahren.Text) - StrToInt(Ederlaubt.Text); Bussgeld := TBussgeld.Create(DifGeschw, iaInnen); try Bussgeld.BerechneStrafe; Lbbusgeld.Caption := IntToStr(Bussgeld.Strafe.Bussgeld); Lbpunkte.Caption := IntToStr(Bussgeld.Strafe.Punkte); Lbfahrverbot.Caption := IntToStr(Bussgeld.Strafe.MonateFahrverbot); finally Bussgeld.Free; end; end; |
Viel Spass.
*) Veranschaulicht aber sehr schön das OOP Konzept mit Vererbung und abstrakten Methoden.
**) Eventuell ginge es auch irgendwie mit
case oder so einfacher.
Vorschlag - Mi 06.01.10 18:06
Okay es funktioniert
ihr seid die Besten!!!!!
VIELEN DANK JUNGS
Delete - Mi 06.01.10 18:08
Hast du meine Lösung verstanden? Oder soll ich dazu noch was erklären?
Kritik von anderen sind auch erwünscht.
---
Moderiert von
Narses: Beiträge zusammengefasst---
Nichts auszusetzen an meinem Code? Auch gut. ;)
Delete - Do 07.01.10 13:39
Man könnte natürlich überlegen, ob man über die Klasse TBussgeld geht oder nicht doch direkt die Klasse TStrafe benutzt. Aber eventuell will man später noch die Funktionalität erweitern und es macht dann mehr Sinn, dies über die Klasse TBussgeld zu realisieren.
Bergmann89 - Do 07.01.10 14:12
Hey,
Ich hab was zu Meckern^^ Wie wäre es mit iaKraftfahrstraße? Da gibts ja auch andere Strafen, oder irre ich mcih da jetzt?
MfG Bergmann
Delete - Do 07.01.10 14:17
Keine Ahnung, ob außerorts zwischen Autobahn und Bundesstraße unterschieden wird. Aber da hatte ich echt ein Problem bei der Benennung. ,)
Bergmann89 - Do 07.01.10 14:35
Hey,
also hier ma der Katalog:
http://www.bussgeldkataloge.de/
Hab das verwechselt: Auf der Kraftfahrstraße is die Toleranzgrenze höher, wegen der gößerer Geschwindigkeit, aber da man ja eh eingibt, wieviel man zu schnell war und nich wie schnell man war, is das ja egal^^
MfG Bergmann.
Tilman - Do 07.01.10 14:42
Naja wobei die Toleranz wiederum glaub ich nichts mit der Kraftfahrstraße zu tun hat glaub ich, sondern eben nur mit der Geschwindigkeit, sprich wenn du auf der Autobahn in ner 50-Zone (Baustelle) zu schnell fährst dürfte das nicht anders geahndet werden als auf ner Landstraße nehm ich mal an.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!