Es scheint ja um Kinokarten / Kinokasse oder sowas zu gehen.
Wäre da nicht formal folgende Struktur angebracht (sinnvoller weiß ich jetzt nicht).
Eine Warenkorbklasse mit Liste von Warenkorbpositionen und einer Funktion Gesamtsumme, die über die Positionen in der Liste iterriert und summiert.
Eine Warenkorbposition-Klasse mit einem Variable für Anzahl und eine für die Kartenklasse und der Funktion Positionssumme (Anz x Kartenpreis).
Bleibt die Frage, was ist eine Kartenklasse. Da könnte man mit einer Basisklasse und entsprechenden Ableitungen für die einzelnen Kartentypen (Loge/Parkett usw.) arbeiten und/oder man könnte auch das Dekorator-Pattern anwenden, da man zu der Karte ggf. noch was dazurechnen muss: 3D-Zuschlag, Überlängen-Zuschlag, usw.
Ja, ich habe vor einiger Zeit mal so ein Übungsprogramm erstellt und wollte es jetzt anders nochmals gestalten mit Klassen für den Rang/Loge.
Ist das Du als Warenkorbklasse bezeichnest folgendes:
Delphi-Quellcode:
type
TKinokarten = class(TObject)
private
const MWSt = 0.19; //gesetzliche MWSt
Preisliste : TRangPreis =(15, 13,10);
Ermaessigung: array [boolean] of Currency = (0,1);
function GetVerkaufteKarten(index: TRang; ermaessigt: boolean):Currency;
var
fFreiePlVorgabe: TRangNr;
FKarten: TRangNr;
fgekaufteKarten: TRangNr;
ffreiePlR: TRangNr;
fPreisR : TRangPreis;
function GetgekaufteKarten(index: TRang): integer;
function GetfreiePlR(index: TRang): integer;
function GetZwSu: Currency;
function GetMWSteuer:Currency;
function GetPreis: Currency;
function GetVorgabePlaetze(index: TRang): integer;
public
constructor create(const VorgabePl1, VorgabePl2, VorgabePl3 : integer);
procedure init;
function setAnzKarten(index: TRang; Value: integer): boolean;
procedure setgekKarten(index: TRang; Value: integer);
procedure BerechnePreisRang(index: TRang; aErmaessigt: boolean);
procedure BerechnegekKarten;
procedure BerechnefreiePlRang;
function getVorgabeGesamt: integer;
function freiePlGesamt: integer;
function gekaufteKartenGesamt : integer;
property VorgabePlaetze[index: TRang]: integer read GetVorgabePlaetze;
property gekaufteKarten[index: Trang]: integer read GetgekaufteKarten;
property freiePlR[index: TRang]: integer read GetfreiePlR;
property ZwSu: Currency read getZwSu;
property MWSteuer: Currency read getMWSteuer;
property Preis: Currency read getPreis;
property VerkaufteKarten[index: TRang; Ermaessigt: boolean] : Currency read GetVerkaufteKarten;
end;
Dies habe ich vormals so in Form einener Klasse erstellt. Nun wollte ich zunächst probieren ob eine Lösung mit abgeleiteten Klassen für die Ränge eine tragfähige Lösung wäre. Dabei ergibt sich das Problem der Zusammenführung von Werten aus den verschiedenen abgeleiteten Klassen, um beispielsweise die bisherigen Einnahmen oder die verkauften Karten für die Ränge zusammenzurechnen. Allein dieses Problem hat mich veranlasst die Frage hier zu stellen.