| Autor |
Beitrag |
Vorschlag
      
Beiträge: 63
|
Verfasst: Mi 06.01.10 16:07
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.
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von Vorschlag am Mi 06.01.10 16:37, insgesamt 1-mal bearbeitet
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1257
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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:
| 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
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 06.01.10 16:17
Funktioniert doch alles. Ich kann das beschriebenen Fehlverhalten nicht nachvollziehen.
|
|
Vorschlag 
      
Beiträge: 63
|
Verfasst: 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
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: 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 |
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 06.01.10 17:47
Und hier die saubere, übertriebene mit Spatzen auf Kanonen geschossene Lösung*:
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 
      
Beiträge: 63
|
Verfasst: Mi 06.01.10 18:06
Okay es funktioniert
ihr seid die Besten!!!!!
VIELEN DANK JUNGS
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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. 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Do 07.01.10 14:35
Hey,
also hier ma der Katalog: 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.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: 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.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|