Autor Beitrag
Vorschlag
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 63



BeitragVerfasst: 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 user profile iconTino: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1257

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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 user defined image oder user defined image 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



BeitragVerfasst: Mi 06.01.10 16:17 
Funktioniert doch alles. Ich kann das beschriebenen Fehlverhalten nicht nachvollziehen.
Vorschlag Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 63



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mi 06.01.10 16:48 
Das liegt daran weil du die Caption nicht zurücksetzt.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if zahl3 <=10
then
    Lbbusgeld.Caption:='10'+'€'  // <-- hier wird nur Busgeld zurückgesetzt, das Caption für Punkte bleibt.
    else

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 06.01.10 17:47 
Und hier die saubere, übertriebene mit Spatzen auf Kanonen geschossene Lösung*:
ausblenden volle Höhe 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; virtualabstract;
    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

{ TBussgeld }

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;

{ TStrafe }

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;

{ TStrafeAussen }

procedure TStrafeAussen.BerechneStrafe;
begin

end;

{ TStrafeInnen }

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.


ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 63



BeitragVerfasst: Mi 06.01.10 18:06 
Okay es funktioniert


ihr seid die Besten!!!!!




VIELEN DANK JUNGS
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 user profile iconNarses: Beiträge zusammengefasst---

Nichts auszusetzen an meinem Code? Auch gut. ;)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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)