Lösung Programmierung
  • 13 May 2024
  • 5 Minuten zu lesen
  • Dunkel
    Licht
  • pdf

Lösung Programmierung

  • Dunkel
    Licht
  • pdf

Artikel-Zusammenfassung

McrFmBMW

! Allgemein:

! Für die Variablen werden folgendene Präfixe verwenden:

! c .... Character

! b .... boolean

! ==================================================================

! Aufgabe 1:

! Beim Modell sollen, abhängig von der Modellreihe, nur die zulässigen Antworten angezeigt werden.

! ------------------------------------------------------------------

! => InmBMW: zur Initialisierung der cBMW-Variablen

! => VdmFpModellreihe: merken der Eingabe in Modellreihe

! => HdmFpModell: selektieren der zur eingegebenen Modellreihe passenden Antworten

! ==================================================================

! Aufgabe 2:

! Bei der Motorisierung sollen, abhängig vom Modell, nur die richtigen Motorisierungen angezeigt werden.

! ------------------------------------------------------------------

! => InmBMW: zur Initialisierung der cBMW-Variablen

! => VdmFpModell: Speichern des gewählten Modells in eine Variable

! => HdmFpMotorisierung: selektieren der zum eingegebenen Modell passenden Antwortgruppe für Motorisierung

! ==================================================================

! Aufgabe 3:

! Der Allradantrieb soll nur bei 3er Touring, 5er Touring und X5 auswählbar sein.

! ------------------------------------------------------------------

! siehe McrFmAusstatt

! ==================================================================

! Aufgabe 4:

! Wenn das Interieur Braun ist, darf das Cockpit nicht Leder Schwarz sein.

! ------------------------------------------------------------------

! siehe McrFmInnenraum

! ==================================================================

! Aufgabe 5:

! Metalliclackierung darf nur bei Limousine und Coupe auswählbar sein.

! ------------------------------------------------------------------

! siehe McrFmAusstattung

! ==================================================================

/*****************************************************************

Initialisierungsmakro der Startmaske FmBMW

*****************************************************************/

PROCEDURE InmBmw

! ================================================

! die Anweisung RUN public\lib.SetDefaultPreferences muss in das Inm-Makro der Startmaske.

! In Folgemasken muss es nicht.

! diese Prozedur enthält folgende Anweisungen:

! ADJUSTGAPATRUNTIME = true dient dazu, Lücken,

! die durch das Ausblenden einiger Parameter entstehen können, zu fülle

! RUNTIMECHANGE = true ermöglicht Änderungen der Maske während der Laufzeit

RUN public\lib.SetDefaultPreferences

!===========================================

!Für jeden Frageparameter, der im Weiteren benötigt wird, eine Variable anlegen und initialisieren,

!damit man später die eingegebenen Werte darin abspeichern kann.

!===========================================

cBMW = ""

cBMW.cModellreihe = ""

cBMW.cModell = ""

!===========================================

END !InmBMW

/*****************************************************************

Validierungsmakro für FpModellreihe

*****************************************************************/

! Aufgabe1:

! Beim Modell sollen, abhängig von der Modellreihe, nur die zulässigen Antworten angezeigt werden.

! Dazu muss ich mir hier in einer Variable merken, welche Modellreihe ausgewählt wurde,

! damit ich später im Unterdrückungsmakro von FpModell darauf zugreifen kann.

PROCEDURE VdmFpModellreihe

! gewählten Wert in eine Variable speichern

! ASKPRMID ist eine Systemvariable, die die ID des jeweiligen Fragenparameters speichert.

! EVAL gibt den darin enthaltenen Wert zurück

cBMW.cModellreihe = EVAL(ASKPRMID)

END

/*****************************************************************

Validierungsmakro für FpModell

*****************************************************************/

! Aufgabe 2:

! Bei der Motorisierung sollen, abhängig vom Modell, nur die richtigen Motorisierungen angezeigt werden.

! Dazu muss man sich hier im Validierungsmakro für FpModell das eingegebene Modell merken.

PROCEDURE VdmFpModell

cBMW.cModell = EVAL(ASKPRMID)

END

/*****************************************************************

Unterdrückungsmakro für FpModell

*****************************************************************/

! Aufgabe1:

! Beim Modell sollen, abhängig von der Modellreihe, nur die zulässigen Antworten angezeigt werden.

! Aus dem Validierungsmakro VdmFpModellreihe kennen wir die ausgewählte Modellreihe (cBMW.cModellreihe)

PROCEDURE HdmFpModell

VALIDANSWERS = TRUE !das wird benötigt, um die Funktion zum ein- bzw. ausblenden von Antworten zur Verfügung zu haben

! die ersten beiden Buchstaben der gewählten Modellreihe in der lokalen Variable cMr speichern

DEFINE VARIABLE cMr

cMr = LEFT$(cBMW.cModellreihe,2)

! je nach gewählter Modellreihe nur die relevanten Modelle anzeigen.

! z.B. für Modellreihe 3er zeige alle Modelle, die mit '3' beginnen

CASE cMr

WHEN "3e" DO VALIDANSWERS.SELECT = "3*"

WHEN "5e" DO VALIDANSWERS.SELECT = "5*"

WHEN "7e" DO VALIDANSWERS.SELECT = "7*"

WHEN "Z3" DO VALIDANSWERS.SELECT = "Z3"

WHEN "Z8" DO VALIDANSWERS.SELECT = "Z8"

WHEN "X5" DO VALIDANSWERS.SELECT = "X5*"

OTHERWISE

END

END

/*****************************************************************

Unterdrückungsmakro für FpMotorisierung

*****************************************************************/

! Aufgabe2:

! Bei Motorisierung sollen, abhängig vom gewählten Modell, nur die zulässige Antwortgruppe angezeigt werden.

! Aus dem Validierungsmakro VdmFpModell kennen wir das gewählte Modell (cBMW.cModell)

PROCEDURE HdmFpMotorisierung

VALIDANSWERGROUPS = true !das wird benötigt, um die Funktion zum ein- bzw. ausblenden von Antwortgruppen zur Verfügung zu haben

CASE cBMW.cModell

WHEN "3Cab" DO VALIDANSWERGROUPS.SELECT = "Pp3Cab"

WHEN "3Com" DO VALIDANSWERGROUPS.SELECT = "Pp3Com"

WHEN "3Cou" DO VALIDANSWERGROUPS.SELECT = "Pp3Cou"

WHEN "3Lim" DO VALIDANSWERGROUPS.SELECT = "Pp3Lim"

WHEN "3Tou" DO VALIDANSWERGROUPS.SELECT = "Pp3Tou"

WHEN "5Lim" DO VALIDANSWERGROUPS.SELECT = "Pp5Lim"

WHEN "5Tou" DO VALIDANSWERGROUPS.SELECT = "Pp5Tou"

WHEN "7Lim" DO VALIDANSWERGROUPS.SELECT = "Pp7Lim"

WHEN "X5" DO VALIDANSWERGROUPS.SELECT = "PpX5"

WHEN "Z3Cou" DO VALIDANSWERGROUPS.SELECT = "PpZ3C"

WHEN "Z3Roa" DO VALIDANSWERGROUPS.SELECT = "PpZ3R"

WHEN "Z8" DO VALIDANSWERGROUPS.SELECT = "PpZ8"

OTHERWISE

END

END

McrFmAusstatt

! ==================================================================

! Aufgabe 3:

! Der Allradantrieb soll nur bei 3er Touring, 5er Touring und X5 auswählbar sein.

! ------------------------------------------------------------------

! => InmAusstattung: Ein-/Ausblenden von FpAllrad und TextAllrad je nach gewähltem Modell

! => VdmFpAusstatt: zurücksetzen von FpAllrad auf 0 bei einem Modell, das Allrad nicht ermöglicht

! ==================================================================

! Aufgabe 5:

! Metalliclackierung darf nur bei Limousine und Coupe auswählbar sein.

! ------------------------------------------------------------------

! => HdmFpLackierung: Unterdrückungsmakro, um die Antwortgruppe Metalliclackierung gegebenenfalls auszublenden.

! ==================================================================

/*****************************************************************

Initialisierungsmakro der Maske FmAusstattung

*****************************************************************/

PROCEDURE InmAusstattung

! ==================================================================

! Aufgabe 3:

! Der Allradantrieb soll nur bei 3er Touring, 5er Touring und X5 auswählbar sein.

! ------------------------------------------------------------------

! Frageparameter können mithilfe der Eigenschaft Verwendungsart ein- bzw. ausgeblendet werden.

! ------------------------------------------------------------------

! mögliche Verwendungsarten:

! Eingabe, Anzeige, verborgen (als wäre es nicht da), Hintergrund (nicht sichtbar, aber es läuft im Hintergrund, alle Makros springen an)

! Eingabe = 1

! Anzeige = 2

! verborgen = 3

! Hintergurnd = 4

! -------------------------------------------------------------------

! mit useof kann ich die Verwendungsart eines Prüfparameters definieren

! ===================================================================

! Zur besseren Lesbarkeit eine lokale Variable für Modell anlegen. Diese Information kommt aus McrFmBMW

DEFINE VARIABLE cModell

cModell = cBMW.cModell

IF cModell = "3Tou" OR cModell = "5Tou" OR cModell = "X5" THEN

!Allradantrieb ist bei diesem Modell möglich

bAllradErlaubt = 1 ! Boolsche Variable, die abspeichert, ob Allrad erlaubt ist oder nicht

FpAllrad.USEOF = 1

TextAllrad.USEOF = 3

ELSE

! Allradantrieb ist bei diesem Modell nicht möglich

bAllradErlaubt = 0 !Boolsche Variable, die abgspeichert, ob Allrad erlaubt ist oder nicht

FpAllrad.USEOF = 3

TextAllrad.USEOF = 2

ENDIF

END !InmAusstattung

/*****************************************************************

Validierungsmakro von FpAusstatt

*****************************************************************/

PROCEDURE VdmFpAusstatt

! Für den Fall, dass nach einem Modellwechsel von einem Modell mit Allradmöglichkeit zu einem Modell ohne Allradmöglichkeit

! noch ein veraltetes eingeschaltetes Häkchen bei Allrad vorhanden ist,

! muss dieses gelöscht werden, der Wert also auf 0 gesetzt werden.

! Das funktioniert mit DISPLAYVALUE. Diese Eigenschaft ist allerding nur in einem Validierungsmakro gültig.

! Deshalb steht dieser Code im ersten angesteuerten Validierungsmakro der Maske.

IF bAllradErlaubt = FALSE THEN

FpAllrad.DISPLAYVALUE = 0 !Wert auf 0, also ausgeschaltet, zurücksetzen, so dass ein früheres 'Häkchen' gelöscht wird

ENDIF

END

PROCEDURE HdmFpLackierung

VALIDANSWERGROUPS = TRUE

! eine boolsche Variable, die true ist, wenn das gewählte Modell eine Limousine oder ein Coupe ist.

DEFINE VARIABLE bLimorCou

! boolsche Variable bLimorCou setzten

IF RIGHT$(cBMW.cModell,3) = "Lim" OR RIGHT$(cBMW.cModell,3) = "Cou" THEN

! es handelt sich entweder um eine Limousine oder um ein Coupe

bLimorCou = 1

ELSE

! es handelt weder um eine Limosine noch um ein Coupe -->

bLimorCou = 0

ENDIF

IF NOT bLimorCou THEN

! es handelt weder um eine Limosine noch um ein Coupe -->

! Mellaliclackierung in diesem Fall nicht erlaubt

VALIDANSWERGROUPS.EXCLUDE = "PpMetalliclack"

ENDIF

END

McrFmInnenraum

! ==================================================================

! Aufgabe 4:

! Wenn das Interieur Braun ist, darf das Cockpit nicht Leder Schwarz sein.

! ------------------------------------------------------------------

! => InmInnenraum: zur Initialisierung der cInnenraum-Variablen

! => VdmFpInterieurs: merken der Eingabe in Interieurs

! => HdmFpCockpit: gegebenenfalls Leder Schwarz als Antwort für FpCockpit ausblenden

! ==================================================================

/*****************************************************************

Initialisierungsmakro von FmInnenraum

*****************************************************************/

PROCEDURE InmInnenraum

cInnenraum = ""

cInnenraum.cInterieurs = ""

END !InmInnenraum

/*****************************************************************

Validierungsmakro für FpInterieurs

*****************************************************************/

! Aufgabe4:

! Wenn das Interieur Braun ist, darf das Cockpit nicht Leder Schwarz sein.

! Dazu muss ich mir hier in einer Variable merken, welches Interieurs gewählt wurde,

! damit ich später im Unterdrückungsmakro von FpCockpit darauf zugreifen kann.

PROCEDURE VdmFpInterieurs

cInnenraum.cInterieurs = EVAL(ASKPRMID)

END

/*****************************************************************

Unterdrückungsmakro für FpCockpit

*****************************************************************/

! Aufgabe 4

! Wenn das Interieur Braun ist, darf das Cockpit nicht Leder Schwarz sein.

PROCEDURE HdmFpCockpit

VALIDANSWERS = TRUE

IF cInnenraum.cInterieurs = "BR" THEN

VALIDANSWERS.EXCLUDE = "L"

ENDIF

END

McrFmSonderAusst

PROCEDURE InmFmSonderausstatt !Initialisierungsmakro des Fragemodells FmSonderausstatt

!ADJUSTGAPATRUNTIME = TRUE dient dazu, die Lücken, die durch das Ausblenden einiger Parameter entstehen können, zu füllen

ADJUSTGAPATRUNTIME = TRUE

!RUNTIMECHANGE = TRUE ermöglicht Änderungen der Maske während der Laufzeit

RUNTIMECHANGE = TRUE

END !InmFmSonderausstatt


War dieser Artikel hilfreich?