Natural unterscheidet zwei Arten von Subroutinen: interne Subroutinen, die direkt im Programm definiert werden, und externe Subroutinen, die als separate Objekte außerhalb des Programms gespeichert werden (dies wird später in diesem Tutorial beschrieben).
Sie werden jetzt eine interne Subroutine in Ihrem Programm definieren,
mit der ein Stern (*) in die neue Benutzervariable #MARK
geschrieben wird. Diese Subroutine wird aufgerufen, wenn ein Mitarbeiter 20
oder mehr Urlaubstage hat.
Wenn Sie mit den Übungen in diesem Dokument fertig sind, wird Ihre Beispielanwendung folgendermaßen strukturiert sein:
Dieses Dokument enthält die folgenden Übungen:
Sie werden jetzt die interne Subroutine in Ihr Programm einfügen.
Interne Subroutine definieren
Geben Sie Folgendes unter der Benutzervariablen
#NAME-END
ein:
1 #MARK (A1)
Diese Variable wird von der Subroutine benutzt. Daher muss Sie zuerst definiert werden.
Um die Subroutine zu definieren, geben Sie Folgendes vor dem
END
-Statement ein:
DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES MOVE '*' TO #MARK END-SUBROUTINE
Wenn diese Subroutine ausgeführt wird, schreibt sie einen
Stern (*) in die Benutzervariable #MARK
.
Anmerkung:
Statt des Statements MOVE '*' TO #MARK
können
Sie auch die folgende Variante des ASSIGN
- oder
COMPUTE
-Statements benutzen: #MARK := '*'
.
Ändern Sie das DISPLAY
-Statement wie folgt:
DISPLAY NAME 3X DEPT 3X LEAVE-DUE 3X '>=20' #MARK
Hiermit wird eine neue Spalte in der Ausgabe angezeigt. Die Überschrift dieser Spalte ist ">=20". Die Spalte enthält einen Stern (*), wenn der betreffende Mitarbeiter 20 oder mehr Urlaubstage hat.
Jetzt, nachdem Sie die interne Subroutine definiert haben, können Sie den entsprechenden Code zum Aufruf dieser Subroutine eingeben.
Interne Subroutine ausführen
Geben Sie Folgendes vor dem DISPLAY
-Statement
ein:
IF LEAVE-DUE >= 20 THEN PERFORM MARK-SPECIAL-EMPLOYEES ELSE RESET #MARK END-IF
Wenn ein Mitarbeiter gefunden wird, der 20 oder mehr
Urlaubstage (LEAVE-DUE
) hat, wird die neue Subroutine mit dem
Namen MARK-SPECIAL-EMPLOYEES
ausgeführt. Wenn ein Mitarbeiter
weniger als 20 Urlaubstage hat, wird der Inhalt von #MARK
zurückgesetzt.
Ihr Programm sollte nun folgendermaßen aussehen:
DEFINE DATA LOCAL 1 #NAME-START (A20) 1 #NAME-END (A20) 1 #MARK (A1) 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 * IF LEAVE-DUE >= 20 THEN PERFORM MARK-SPECIAL-EMPLOYEES ELSE RESET #MARK END-IF * DISPLAY NAME 3X DEPT 3X LEAVE-DUE 3X '>=20' #MARK * END-READ * IF *COUNTER (RD1.) = 0 THEN REINPUT 'No employees meet your criteria.' END-IF * END-REPEAT * DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES MOVE '*' TO #MARK END-SUBROUTINE * END
Führen Sie das Programm mit RUN
aus.
Geben Sie in der daraufhin erscheinenden Map "JONES" ein und drücken Sie EINGABE.
Die Liste der Mitarbeiter sollte jetzt eine zusätzliche Spalte enthalten.
Geben Sie EDIT
in der
MORE
-Zeile ein, um zum Programmeditor zurückzukehren.
Speichern Sie das Programm mit
STOW
.
Geben Sie einen Punkt (.) in der Kommandozeile ein, um zum Menü Development Functions zurückzukehren.
Sie können nun mit den nächsten Übungen fortfahren: Verarbeitungsregeln und Helproutinen.