Verarbeitungsschleifen und Labels

Sie werden Ihr Programm jetzt erweitern, indem Sie Verarbeitungsschleifen und Labels hinzufügen.

Wenn Sie mit den Übungen in diesem Dokument fertig sind, wird Ihre Beispielanwendung immer noch aus denselben Modulen wie im vorherigen Dokument bestehen:

Anwendungsstruktur

Dieses Dokument enthält die folgenden Übungen:


Wiederholte Benutzung erlauben

So wie Ihr Programm jetzt aufgebaut ist, wird es sofort nach dem Anzeigen der Map und dem Anzeigen der Mitarbeiterliste beendet. Damit der Benutzer sofort wieder eine neue Mitarbeiterliste anzeigen kann, ohne das Programm neu zu starten, werden Sie den entsprechenden Programmcode nun in eine REPEAT-Schleife setzen.

Beginn der AnweisungslisteVerarbeitungsschleife definieren

  1. Geben Sie Folgendes unter END-DEFINE ein:

    RP1. REPEAT

    REPEAT definiert den Beginn der Verarbeitungsschleife. RP1. ist ein Label, das beim Verlassen der Verarbeitungsschleife benutzt wird (dies wird weiter unten definiert).

  2. Definieren Sie das Ende der Verarbeitungsschleife, indem Sie Folgendes vor dem END-Statement eingeben:

    END-REPEAT
  3. Geben Sie Folgendes unter INPUT USING MAP 'MAP01' ein:

    IF #NAME-START = '.' THEN
      ESCAPE BOTTOM (RP1.)
    END-IF

    Das IF-Statement, das mit END-IF beendet werden muss, prüft den Inhalt des Feldes #NAME-START. Wenn ein Punkt (.) in diesem Feld eingeben wird, wird das Statement ESCAPE BOTTOM zum Verlassen der Schleife benutzt. Die Verarbeitung wird mit dem ersten Statement nach der Schleife fortgesetzt (in diesem Fall ist das END).

    Indem Sie einer Schleife ein Label zuordnen (hier ist es RP1.), können Sie sich mit dem Statement ESCAPE BOTTOM auf diese Schleife beziehen. Da Schleifen geschachtelt werden können, sollten Sie angeben, welche Schleife Sie verlassen möchten. Andernfalls wird nur die innerste aktive Schleife verlassen.

    Ihr Programm sollte nun folgendermaßen aussehen:

    DEFINE DATA
    LOCAL
      1 #NAME-START        (A20)
      1 #NAME-END          (A20)
      1 EMPLOYEES-VIEW VIEW OF EMPLOYEES
        2 FULL-NAME
          3 NAME (A20)
        2 DEPT (A6)
        2 LEAVE-DATA
          3 LEAVE-DUE (N2)
    END-DEFINE
    *
    RP1. REPEAT
    *
      INPUT USING MAP 'MAP01'
    *
      IF #NAME-START = '.' THEN
        ESCAPE BOTTOM (RP1.)
      END-IF
    *
      IF #NAME-END = ' ' THEN
        MOVE #NAME-START TO #NAME-END
      END-IF
    *
      READ EMPLOYEES-VIEW BY NAME
        STARTING FROM #NAME-START
        ENDING AT #NAME-END
    *
        DISPLAY NAME 3X DEPT 3X LEAVE-DUE
    *
      END-READ
    *
    END-REPEAT
    *
    END

    Anmerkung:
    Zur besseren Lesbarkeit wurde der Inhalt der REPEAT-Schleife eingerückt.

  4. Führen Sie das Programm mit RUN aus.

  5. Geben Sie in der daraufhin erscheinenden Map "JONES" in dem Feld für den Startnamen ein und drücken Sie EINGABE.

    In der daraufhin erscheinenden Liste werden nur die Mitarbeiter mit dem Namen "Jones" angezeigt. Drücken Sie EINGABE. Wegen der REPEAT-Schleife wird die Map wieder angezeigt. Sie können nun sehen, dass "JONES" als Endname eingetragen wurde.

  6. Geben Sie einen Punkt (.) in dem Feld für den Startnamen ein und drücken Sie EINGABE, um die Map zu verlassen. Vergessen Sie nicht, die restlichen Zeichen des Namens zu löschen, der noch in diesem Feld angezeigt wird.

  7. Speichern Sie das Programm mit STOW.

Meldung für nicht gefundene Informationen anzeigen

Sie werden jetzt die Meldung definieren, die angezeigt werden soll, wenn der Benutzer einen Startnamen angibt, der in der Datenbank nicht gefunden werden kann.

Beginn der AnweisungslisteMeldung für nicht gefundene Mitarbeiter definieren

  1. Geben Sie das Label RD1. am Anfang der Zeile ein, die das READ-Statement enthält:

    RD1. READ EMPLOYEES-VIEW BY NAME
  2. Geben Sie Folgendes unter END-READ ein:

    IF *COUNTER (RD1.) = 0 THEN
       REINPUT 'No employees meet your criteria.'
    END-IF

    Mit der Systemvariablen *COUNTER wird die Anzahl der Datensätze geprüft, die in der READ-Schleife gefunden werden. Wenn der Inhalt gleich 0 ist (d.h. wenn ein Mitarbeiter mit dem angegebenen Namen nicht gefunden wurde), wird die Meldung, die mit dem REINPUT-Statement definiert wurde, unten in der Map angezeigt.

    Um die READ-Schleife zu bezeichnen, geben Sie ihr ein Label (in diesem Fall ist es RD1.). Da ein komplexes Datenbankzugriffsprogramm viele Schleifen enthalten kann, müssen Sie angeben, auf welche Schleife Sie sich beziehen.

    Ihr Programm sollte nun folgendermaßen aussehen:

    DEFINE DATA
    LOCAL
      1 #NAME-START        (A20)
      1 #NAME-END          (A20)
      1 EMPLOYEES-VIEW VIEW OF EMPLOYEES
        2 FULL-NAME
          3 NAME (A20)
        2 DEPT (A6)
        2 LEAVE-DATA
          3 LEAVE-DUE (N2)
    END-DEFINE
    *
    RP1. REPEAT
    *
      INPUT USING MAP 'MAP01'
    *
      IF #NAME-START = '.' THEN
        ESCAPE BOTTOM (RP1.)
      END-IF
    *
      IF #NAME-END = ' ' THEN
        MOVE #NAME-START TO #NAME-END
      END-IF
    *
      RD1. READ EMPLOYEES-VIEW BY NAME
        STARTING FROM #NAME-START
        ENDING AT #NAME-END
    *
        DISPLAY NAME 3X DEPT 3X LEAVE-DUE
    *
      END-READ
    *
      IF *COUNTER (RD1.) = 0 THEN
        REINPUT 'No employees meet your criteria.'
      END-IF
    *
    END-REPEAT
    *
    END
  3. Führen Sie das Programm mit RUN aus.

  4. Geben Sie in der daraufhin erscheinenden Map einen Startnamen ein, der nicht in der Demodatenbank definiert ist (zum Beispiel "XYZ") und drücken Sie EINGABE.

    Ihre Meldung sollte jetzt in der Map angezeigt werden.

  5. Geben Sie einen Punkt (.) in dem Feld für den Startnamen ein und drücken Sie EINGABE, um die Map zu verlassen. Vergessen Sie nicht, die restlichen Zeichen des Namens zu löschen, der noch in diesem Feld angezeigt wird.

  6. Speichern Sie das Programm mit STOW.

Sie können nun mit den nächsten Übungen fortfahren: Interne Subroutinen.