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:
Dieses Dokument enthält die folgenden Übungen:
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.
Verarbeitungsschleife definieren
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).
Definieren Sie das Ende der Verarbeitungsschleife, indem Sie
Folgendes vor dem END
-Statement eingeben:
END-REPEAT
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.
Führen Sie das Programm mit RUN
aus.
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.
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.
Speichern Sie das Programm mit STOW
.
Sie werden jetzt die Meldung definieren, die angezeigt werden soll, wenn der Benutzer einen Startnamen angibt, der in der Datenbank nicht gefunden werden kann.
Meldung für nicht gefundene Mitarbeiter definieren
Geben Sie das Label RD1.
am Anfang der Zeile ein, die
das READ
-Statement enthält:
RD1. READ EMPLOYEES-VIEW BY NAME
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
Führen Sie das Programm mit RUN
aus.
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.
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.
Oder:
Drücken Sie ESC.
Speichern Sie das Programm mit STOW
.
Sie können nun mit den nächsten Übungen fortfahren: Interne Subroutinen.