#limit (11.0)##pagelength (16.5)##block# #start (2.0,0.0)# #page (61)# #headodd# #center#gs-Warenhaus#right#% #end# #headeven# %#center#gs-Warenhaus #end# #center#1 #center##on("b")#6  Beschreibung der Programmierschnittstelle#off("b")# In allen GRIN-Projekten soll - zumindest als Erweiterung - der Aspekt des "algorithmischen Problemlösens" mit in den Unterricht eingebracht werden. Deshalb ist auch in dem Soester Programm zum Projekt WARENHAUS eine Programmier­ schnittstelle realisiert, die es erlaubt, mit Hilfe eines eng begrenzten Befehlssatzes kleine Programme zur Steuerung der Abläufe im Modell-Warenhaus zu schreiben. Wir haben lange überlegt, ob wir diese Programmierschnittstelle überhaupt nach­ bilden sollten, weil wir der Meinung sind, daß beim Projekt WARENHAUS das algorithmische Problemlösen, wenn überhaupt, nur eine sehr untergeordnete Rolle spielt. Als Randproblematik kann man hier vielleicht untersuchen, wie die Menu- Funktionen unter dem Oberbegriff 'Kommandos' (vgl. Kapitel 5.4) aufgebaut sind, und man kann versuchen, diese in eigenen kleinen Programmen nach- oder umzu­ bilden. Unser zweites Problem war, ob wir uns bei einer eventuellen Nachbildung der Programmierschnittstelle auch wirklich streng an die Soester Vorgaben halten sollten, auch wenn sie unseren Vorstellungen und Konzepten teilweise zuwiderlaufen. Eigent­ lich sind wir der Meinung, daß uns mit der Programmiersprache ELAN bereits ein ausgezeichnetes Hilfsmittel zur Verfügung steht, um auch in der Sekundarstufe I in das algorithmische Problemlösen einzuführen. Gerade das Refinementkonzept - die Methode der 'schrittweisen Verfeinerung' / der "Modularisierung im Kleinen" - scheint uns besonders geeignet, typische Denkweisen des algorithmischen Problem­ lösens offenzulegen. Lediglich die Konstruktion einer Zählschleife und den Umgang mit den Fehlermeldungen des ELAN-Compilers halten wir bei Anfängern für etwas problematisch. Wir haben uns deshalb entschlossen, Ihnen die Programmierschnittstelle in zwei Versionen zur Verfügung zu stellen: In der 'ELAN-Version' können Sie in der üblichen #page# ELAN-Umgebung programmieren; das bietet sich z.B. an, wenn Sie #on("b")#gs-Warenhaus#off("b")# im Wahlpflichtbereich bzw. im Differenzierungsbereich 9/10 einsetzen möchten. Es ist dann dort nicht nötig, erst eine neue, weniger komfortable "Programmiersprache" zu erlernen. Für den GRIN-Bereich enthält #on("b")#gs-Warenhaus#off("b")# eine weitere Programmierebene ('GRIN-Version'), die an die Soester Vorgaben angelehnt ist, und die es erlaubt, die dort benutzten Schreibweisen von Befehlen und Kontrollstrukturen zu übernehmen. Allerdings haben wir dabei eine grundsätzliche Änderung bezüglich der Modularisie­ rungsmöglichkeit von 'GRIN-Programmen' vorgenommen, auf die wir in Kapitel 6.1 näher eingehen werden. Ein 'GRIN-Programm' wird bei der Ausführung des Menupunktes 's Starten' (vgl. Kapitel 5.5) zunächst in ein ELAN-Programm übersetzt und dabei auf formale Korrektheit überprüft. Werden keine Fehler festgestellt, so wird nun seinerseits das ELAN-Programm vom Compiler übersetzt und anschließend ausgeführt. Als Benutzer werden Sie dabei nicht mit Fehlermeldungen des Compilers konfrontiert, da der #on("b")#gs-Warenhaus#off("b")#-Übersetzer vorher alle formalen Fehler abfängt und zum Korrigieren anbietet. Sollte das System nach erfolgreicher Übersetzung und/oder Compilation bei der Ausführung des Programms einen Fehler "bemerken" (z.B. falscher Aufruf eines Befehles), so wird das Programm automatisch abgebrochen und die entsprechende Fehlermeldung mit der Nummer der Programmzeile, in der der Fehler bemerkt wurde, im unteren Teil des Bildschirmes in einem 'notebook' gezeigt. Im oberen Teil wird das Programm zum Verbessern angeboten, wobei der Cursor am Anfang der fehlerhaften Zeile steht (gilt auch für die 'ELAN-Version'). In beiden Versionen der Programmierschnittstelle ist die Schreibweise der Befehle bis auf die Groß- und Kleinschreibung identisch. Folgende Befehle stehen zu Verfügung: #page# GRIN-Version | ELAN-Version ------------------------+------------------------------ Artikelnummer lesen | artikelnummer lesen Artikeldaten eingeben | artikeldaten eingeben Kundennummer lesen | kundennummer lesen Kundendaten eingeben | kundendaten eingeben neues Blatt | neues blatt Rechnungskopf | rechnungskopf Artikel kaufen | artikel kaufen Abrechnung | abrechnung Auskunft | auskunft Bildschirm neu | bildschirm neu | nachbestellen | dezimalwert lesen | bitmuster lesen | Die drei letzten Befehle der ELAN-Version haben wir in den GRIN-Befehlssatz nicht mit aufgenommen, weil wir hier den Befehlssatz möglichst klein (und damit über­ sichtlich) halten wollten und diese Befehle bereits unter dem Oberbegriff 'Kommandos' als Menu-Funktionen zur Verfügung stehen. (Ebenso könnte man bei dem Befehl 'Auskunft' argumentieren. Die entsprechende Menu-Funktion 'Auskunft einholen' liefert bei jeder Anwahl jedoch immer nur #on("b")#eine#off("b")# Auskunft; in einem Programm kann man nun die Ausgabe mehrerer Auskünfte hintereinander realisieren.) Die genaue Wirkung der Befehle werden wir in Kapitel 6.3 noch detailliert beschreiben. Sie entsprechen im wesentlichen den Soester Befehlen, die im WARENHAUS-Begleitheft des LSW (siehe Anhang) auf den Seiten 99/100 aufgelistet sind. (Die anderen dort zu findenden Befehle gehören eigentlich nicht in die Befehls­ liste der Programmierschnittstelle, weil sie nicht von Programmen aus sondern nur in einem 'Direktbefehgs-Modus' als Kommando aufrufbar sind! Diese Befehle sind auch #page# #on("b")#keine#off("b")# Programmierbefehle im eigentlichen Sinne, sondern entweder "Macros" zum "Handling" des Warenhausmodells oder Systemkommandos. #on("b")#gs-Warenhaus#off("b")# stellt diese Befehle unter ähnlichen Namen als Menu-Funktionen zur Verfügung.) #on("b")#6.1  Schreibweisen und Syntaxregeln in GRIN-Programmen#off("b")# Die Regeln, die beim Schreiben eines ELAN-Programms zu beachten sind, werden im EUMEL/ELAN-Benutzerhandbuch beschrieben; wir werden uns daher hier auf die GRIN-Version konzentrieren. Beginnen wir mit einem Beispiel aus dem WARENHAUS-Begleitheft des LSW. Dort finden Sie auf Seite 70 (unten) das folgende Programm: #on("b")# PROGRAMM Rechnung schreiben neues Blatt Kundennummer lesen WENN nicht Stoptaste gedrückt Rechnungskopf WIEDERHOLE Artikelnummer lesen WENN nicht Stoptaste gedrückt Artikel kaufen ENDE WENN BIS Stoptaste gedrückt Abrechnung ENDE WENN ENDE PROGRAMM #off("b")# Sie können dieses Programm ohne Änderungen übernehmen und starten, #on("b")#gs-Warenhaus#off("b")# wird es ohne Beanstandungen ausführen. Bezüglich der Übersicht­ lichkeit und des Programmierstils kann man hier sicher geteilter Meinung sein, darauf gehen wir später noch ein. #page# Wir möchten Ihnen zunächst einige Regeln zur Schreibweise und Syntax in 'GRIN- Programmen' aufzeigen, die sich im obigen Beispiel-Programm beobachten lassen: - In jeder Zeile darf nur #on("b")#ein#off("b")# Befehl stehen; Befehgs-Trennzeichen (wie etwa das Semikolon in ELAN) werden deshalb nicht verwendet. Leerzeichen können beliebig gesetzt werden, auch leere Zeilen sind zulässig, nicht jedoch Kommentare. - Das Arbeiten mit Variablen (gleich welcher Art) ist #on("b")#nicht#off("b")# möglich; alle Befehle sind datentypfrei. - Schlüsselworte für Kontrollstrukturen (wie z.B. WIEDERHOLE, WENN etc.) werden in GROSSBUCHSTABEN geschrieben, Ausführungsbefehle und Bedingungen hingegen klein und gemäß den Regeln der deutschen Sprache mit großem Anfangsbuchstaben bei Substantiven. Diese Festlegung bezüglich der Groß- und Kleinschreibung ist bei den von #on("b")#gs-Warenhaus#off("b")# zur Verfügung ge­ stellten Befehlen #on("b")#verbindlich#off("b")#, d.h. alle Warenhaus-#on("b")#Grund#off("b")#befehle und Kontroll­ strukturen müssen (bis auf Leerzeichen) genauso geschrieben werden, wie sie in den Kapiteln 6.2 und 6.3 vorgegeben werden! (In der Soester Software können dagegen Groß- und Kleinbuchstaben beliebig verwendet werden, sodaß dort z.B. neben 'neues Blatt' auch 'neues blatt', "NEueS BlaTT" u.ä. als identisch ange­ sehen werden.) - Jedes 'GRIN-Programm' beginnt mit dem 'Schlüsselwort' , gefolgt von einem Programmnamen, der beliebig gewählt werden kann, jedoch noch in diese Zeile passen muß. Sinnvoll ist es, hier z.B. den Namen der Programmdatei einzutragen. - Jedes 'GRIN-Programm' endet mit der Zeile . Nach dieser Zeile dürfen nur noch leere Zeilen folgen, es sei denn zwischen und wurden Befehle benutzt, die nicht zum Warenhaus-Grundbefehlssatz gehören. Solche Befehle müssen in einer 'Befehlserklärung' nach Programmende definiert werden. #page# Das obige Programm befriedigt vom äußeren Erscheinungbild her einen PASCAL- Programmierer wahrscheinlich völlig, einen ELAN-Verwöhnten jedoch sicher nicht. Die Soester WARENHAUS-Software bietet keinerlei Möglichkeit der Modularisierung #on("b")#innerhalb#off("b")# eines Programms (Refinement-/Prozedurkonzept o.ä.). Es gibt dort nur die Möglichkeit, fertiggestellte Programme unter dem Programmnamen dem Basis­ befehlssatz "hinzuzufügen" - ein Vorgang, der dem Insertieren unter EUMEL/ELAN ähnelt. Obwohl es unter EUMEL/ELAN ein leichtes gewesen wäre, diese Möglichkeit ebenfalls zu realisieren, haben wir davon Abstand genommen, weil auf diese Weise an jedem Arbeitsplatz eine "eigene" Programmierumgebung entstehen würde. Wir sind der Meinung, daß für Schüler der Sekundarstufe I eine #on("b")#feste Modellumgebung als Basis#off("b")# vorhanden sein muß. Außerdem erscheint uns bei der Programmierung "im Kleinen" die "Bottom-Up"-Technik unangemessen und für den Anfänger viel zu unübersichtlich zu sein; viel eher wäre hier die "Top-Down"-Methode angebracht. Wir haben daher die Programmierumgebung in anderer Richtung erweitert und eine Modularisierungsmöglichkeit realisiert, die dem Refinementkonzept nachempfunden ist und damit unseren didaktisch-methodischen Vorstellungen viel eher entspricht. Bei #on("b")#gs-Warenhaus#off("b")# werden etwa benutzte 'eigene' Befehle #on("b")#innerhalb derselben#off("b")# Programmdatei 'erklärt' und zwar #on("b")#nach#off("b")# dem Ende des eigentlichen 'Haupt­ programms', d.h. also nach der Zeile . Mit Hilfe dieser Mög­ lichkeit könnte das obige Programm besser strukturiert etwa so aussehen: #on("b")# PROGRAMM Rechnung schreiben neues Blatt Kundennummer lesen WENN nicht Stoptaste gedrückt einkaufen mit Rechnung ENDE WENN ENDE PROGRAMM einkaufen mit Rechnung: Rechnungskopf WIEDERHOLE Artikelnummer lesen Artikel eventuell kaufen BIS Stoptaste gedrückt Abrechnung #page# Artikel eventuell kaufen: WENN nicht Stoptaste gedrückt Artikel kaufen ENDE WENN #off("b")# Sie sehen, das Programm ist so zwar etwas länger, aber erheblich übersichtlicher geworden. Für 'neue Befehle' und die zugehörigen 'Befehlserklärungen' gelten folgende Grundsätze: - Die 'Befehlserklärungen' müssen #on("b")#nach#off("b")# aufgelistet werden. Die Reihenfolge ist beliebig. - Eine 'Befehlserklärung' besteht aus dem zu erklärenden Befehl in (bis auf Leer­ zeichen) völlig identischer Schreibweise (!) und einem nachfolgenden Doppel­ punkt (:). - Ein 'neuer Befehl' darf alle möglichen Zeichen enthalten außer einem Doppel­ punkt (:). Außerdem darf solch ein Befehl #on("b")#nicht#off("b")# mit einem 'Schlüsselwort' beginnen (vgl. Kapitel 6.2). - In 'Befehlserklärungen' können neben den Grundbefehlen auch wieder 'neue Befehle' benutzt werden, die dann wiederum erklärt werden müssen. - Befehle dürfen nur #on("b")#einmal#off("b")# erklärt werden, auch wenn sie mehrfach benutzt werden. - Es dürfen nur Befehle erklärt werden, die irgendwo auch wirklich benutzt werden. - Befehlserklärungen sind nur möglich für #on("b")#Ausführungs-Befehle#off("b")#. Es lassen sich also z.B. keine neuen Bedingungen oder Kontrollstrukturen erklären! - Es dürfen innerhalb eines Programms maximal 20 verschiedene 'neue Befehle' verwendet werden. (Diese Grenze dürfte in Warenhaus-Programmen kaum ein­ mal erreicht werden!) #page# Formale Verstöße gegen diese Regeln werden bei dem Übersetzungsvorgang sofort beim Auftauchen des ersten Fehlers zur Korrektur angeboten. Dabei wird in der oberen Bildschirmhälfte das Programm editiert, wobei der Cursor an den Anfang der Zeile gesetzt wird, in der sich der (erste) Fehler befindet. In der unteren Bildschirm­ hälfte wird über den Paralleleditor in einem 'notebook' die Art des Fehlers mit An­ gabe der Zeilennummer genauer beschrieben. In der Regel wird hier nur auf #on("b")#einen#off("b")# (nämlich den ersten auftauchenden) Fehler hingewiesen, so daß Sie das Programm evtl. mehrfach starten müssen, bis alle Fehler erkannt und beseitigt sind. Manchmal tauchen im Fehler-'notebook' aber auch mehrere Fehlermeldungen auf (z.B. wenn 'neue Befehle' nicht erklärt oder erklärte Befehle nicht benutzt wurden). In Extremfällen kann es dabei dazu kommen, daß nicht mehr das ganze Fehler-'notebook' auf dem Bildschirm sichtbar ist. In diesem Fall können Sie mit der Tastenfolge den Cursor zwischen den beiden Bildschirmhälften hin- und herschalten und mit den Pfeiltasten evtl. nicht-sichtbare Teile des 'notebooks' oder der Programmdatei auf den Bildschirm holen. (Für genauere Informationen über den Umgang mit dem EUMEL-Editor lesen Sie bitte im EUMEL-Benutzerhandbuch nach.) #on("b")#6.2  Kontrollstrukturen#off("b")# Sowohl in ELAN-Programmen, als auch in GRIN-Programmen werden Kontroll­ strukturen durch 'Schlüsselworte' gekennzeichnet, die grundsätzlich in GROSSBUCHSTABEN geschrieben werden müssen, um sie deutlich gegenüber Aus­ führungsbefehlen und Bedingungen abzuheben. In GRIN-Programmen gibt es Schlüsselworte für den Anfang und das Ende eines Programms sowie für Schleifen und einseitige Abfragen. Wir notieren hier nur die in GRIN-Programmen möglichen Kontrollstrukturen und geben, wenn vorhanden, die zugehörige ELAN-Übersetzung in Klammern an. #on("b")#Programm-Anfang/Ende:#off("b")# #on("b")#PROGRAMM#off("b")# . . #on("b")#ENDE PROGRAMM#off("b")# Jedes GRIN-(Haupt-)Programm beginnt mit dem Schlüsselwort 'PROGRAMM', gefolgt von einem frei wählbaren Programmnamen, der jedoch in dieselbe Zeile passen muß. Die Zeile 'ENDE PROGRAMM' zeigt das Ende eines GRIN-(Haupt-)Programms an. Sowohl 'PROGRAMM', als auch 'ENDE PROGRAMM' dürfen in einer Programm­ datei nur #on("b")#einmal#off("b")# verwendet werden. Entsprechende Schlüsselworte in ELAN- Programmen gibt es nicht. #on("b")#Schleifen:#off("b")# Schleifen müssen innerhalb des Hauptprogramms oder der Befehlserklärung, in der sie geöffnet werden, auch wieder geschlossen werden. Schachtelungen sind zwar zulässig, sollten aber aus Gründen der Übersichtlichkeit vermieden werden. Soll dennoch innerhalb einer Schleife eine weitere Schleife verwendet werden, so sollte die innere Schleife über einen 'neuen Befehl' in eine Befehlserklärung 'ausgelagert' werden. Folgende Schleifenarten sind möglich: a) Zählschleife: #on("b")#WIEDERHOLE#off("b")# #on("b")#MAL#off("b")# (ELAN: INT VAR i; FOR i FROM 1 UPTO n REPEAT . . . . . #on("b")#ENDE WIEDERHOLE#off("b")# END REPEAT) Die Anweisungen innerhalb der Schleife werden  - mal ausgeführt. b) Schleife mit Ausgangsbedingung: #on("b")#WIEDERHOLE#off("b")# (ELAN: REPEAT . . . . . . #on("b")#BIS#off("b")# UNTIL bedingung END REPEAT) Die Anweisungen innerhalb der Schleife werden mindestens einmal ausgeführt und dann solange wiederholt, bis die Bedingung erfüllt ist. Bei der Programmierung ist darauf zu achten, daß durch die Anweisungen die Bedingung erfüllt werden kann, denn sonst ist das Resultat eine 'Endlosschleife', deren Ausführung nur durch einen totalen Programmabbruch () beendet werden kann. c) Zählschleife mit Ausgangsbedingung: #on("b")#WIEDERHOLE#off("b")# #on("b")#MAL#off("b")# (ELAN: INT VAR i; FOR i FROM 1 UPTO n REPEAT . . . . . #on("b")#BIS#off("b")# UNTIL bedingung END REPEAT) Die Anweisungen innerhalb der Schleife werden -mal ausgeführt. Im Gegensatz zur reinen Zählschleife können die Wiederholungen jedoch vorzeitig abgebrochen werden, nämlich dann, wenn nach irgendeinem Schleifendurchlauf die Bedingung erfüllt ist. d) Endlosschleife: #on("b")#WIEDERHOLE#off("b")# (ELAN: REPEAT . . . . . . #on("b")#ENDE WIEDERHOLE#off("b")# END REPEAT) Die Anweisungen innerhalb der Schleife werden immer wieder ausgeführt. Da keine begrenzte Anzahl von Durchläufen und auch keine Abbruchbedingung angegeben ist, kann diese Schleife nur durch einen totalen Programmabbruch () beendet werden. (Die Schleifenarten c) und d) sind in der Soester WARENHAUS-Software nicht vor­ handen, ergaben sich bei der Konstruktion des #on("b")#gs-Warenhaus#off("b")#-Übersetzers wegen der analogen Strukturen in ELAN jedoch quasi "von selbst", so daß wir sie auch zugelassen haben. Schleifen mit Eingangsbedingung (ELAN: WHILE bedingung REPEAT ... END REPEAT) sind für GRIN-Programme jedoch nicht realisiert.) #on("b")#Einseitige Abfragen:#off("b")# #on("b")#WENN#off("b")# (ELAN: IF bedingung THEN anweisung 1; anweisung 2; . . . . #on("b")#ENDE WENN#off("b")# END IF) Die Anweisungen werden nur ausgeführt, wenn die Bedingung erfüllt ist. (Eine Ent­ sprechung zu der in ELAN möglichen 'zweiseitigen Abfrage' (IF ... THEN ... ELSE ... END IF) gibt es in der GRIN-Version nicht!) Eine im Hauptprogramm oder in einer Befehlserklärung begonnene Abfrage ('WENN ...') muß auch im selben Programmteil wieder beendet werden. Ähnlich wie bei Schleifen ist die Schachtelung von Abfragen innerhalb des Hauptprogramms oder einer Befehlserklärung zwar zulässig, führt aber zu unübersichtlichen Programmen. Auch hier sollte man innerhalb einer Abfrage eventuell notwendige weitere Abfragen durch 'neue Befehle' in Befehlserklärungen auslagern. #on("b")#Zulässige Bedingungen:#off("b")# #on("b")#Stoptaste gedrückt#off("b")# (ELAN: stoptaste gedrückt) Die Bedingung ist erfüllt (d.h. liefert den Wert 'wahr'), wenn während des bis­ herigen Programmablaufs die Tastenfolge getippt worden ist; sonst ist sie nicht erfüllt (Wahrheitswert 'falsch'). (Das Tippen von beim Verlassen einer Datei hat jedoch #on("b")#keinen#off("b")# Einfluß auf den Wahrheitswert der Bedingung!) Bei jeder Ausführung der Befehle 'Artikelnummer lesen', 'Kundennummer lesen' und 'Auskunft' wird der Wahrheitswert der Bedingung zunächst immer auf 'falsch' gesetzt (siehe 6.3), so daß die Abfrage der Bedingung nach einem dieser Befehle nur dann 'wahr' liefert, wenn #on("b")#während#off("b")# oder #on("b")#nach#off("b")# der letztmaligen Aus­ führung eines der drei Befehle getippt wurde; ein etwa vorher erfolgtes Tippen dieser Tastenfolge ist somit wirkungslos! #on("b")#nicht Stoptaste gedrückt#off("b")# (ELAN: NOT stoptaste gedrückt) Dieses ist das logische Gegenteil von 'Stoptaste gedrückt': 'nicht Stoptaste ge­ drückt' ist erfüllt, wenn 'Stoptaste gedrückt' #on("b")#nicht#off("b")# erfüllt ist und umgekehrt. Um Probleme bei der Arbeit mit Terminals zu vermeiden, die nicht über den deutschen Zeichensatz verfügen (Umlaute!), ist bei beiden Bedingungen auch die Schreibweise 'gedrueckt' erlaubt. #on("b")#6.3  Detailbeschreibung der Warenhaus-Grundbefehle#off("b")# Wie bereits in 6.1 erwähnt, ist die im folgenden vorgegebene Schreibweise der Grund­ befehle bezüglich Groß- und Kleinschreibung verbindlich; Leerzeichen dagegen können beliebig eingefügt oder auch weggelassen werden. Fett gedruckt steht immer der GRIN-Befehl, in Klammern dahinter der zugehörige ELAN-Befehl. #on("b")#Artikelnummer lesen#off("b")# (ELAN: artikelnummer lesen) - Der Wahrheitswert der Bedingung 'Stoptaste gedrückt' wird zunächst auf 'falsch' gesetzt. - Der Benutzer wird aufgefordert, eine Artikelnummer einzugeben. Je nach Einstellung der 'Eingabeart' (vgl. Kapitel 5.3) erfolgt die Eingabe durch Ein­ tippen einer Zahl über die Tastatur oder durch Einschieben einer Warenkarte in das Lesegerät. Eingaben über die Tastatur sind mit abzu­ schließen. Akzeptiert werden nur Werte von 1 bis 15, ansonsten erfolgt eine Warnung, und die Eingabe wird wiederholt. - Durch Tippen der Tastenfolge kann dieser Befehl abgebrochen werden, ohne daß eine Artikelnummer eingelesen wird. In diesem Falle wird der Wahrheitswert der Bedingung 'Stoptaste gedrückt' auf 'wahr' gesetzt, sonst bleibt der Wert auf 'falsch'. - Durch Tippen der Tastenfolge wird die Ausführung des gesamten Programms abgebrochen. #on("b")#Artikeldaten eingeben#off("b")# (ELAN: artikeldaten eingeben) - Der Befehl setzt voraus, daß zuvor eine Artikelnummer eingelesen wurde, ansonsten erfolgt eine entsprechende Fehlermeldung. - Die Angaben zu einem Artikel (Name, Preis, Mindestbestand, Bestand) können eingegeben bzw. verändert werden. - Alle Eingaben sind mit oder der Tastenfolge abzuschließen. Durch wird der Wahrheitswert der Bedingung 'Stoptaste gedrückt' auf 'wahr' gesetzt. - Nach Abschluß der Eingaben werden die Artikeldaten in der Filial-Verwaltung gespeichert, worauf auch kurz hingewiesen wird. - Durch Tippen der Tastenfolge während der Eingaben wird die Ausführung des gesamten Programms abgebrochen. #on("b")#Kundennummer lesen#off("b")# (ELAN: kundennummer lesen) - Der Wahrheitswert der Bedingung 'Stoptaste gedrückt' wird zunächst auf 'falsch' gesetzt. - Der Benutzer wird aufgefordert, eine Kundennummer einzugeben. Je nach Einstellung der 'Eingabeart' (vgl. Kapitel 5.3) erfolgt die Eingabe durch Ein­ tippen einer Zahl über die Tastatur oder durch Einschieben einer Kundenkarte in das Lesegerät. Eingaben über die Tastatur sind mit abzu­ schließen. Akzeptiert werden nur Werte von 129 bis 159, ansonsten erfolgt eine Warnung, und die Eingabe wird wiederholt. - Durch Tippen der Tastenfolge kann dieser Befehl abgebrochen werden, ohne daß eine Kundennummer eingelesen wird. In diesem Falle wird der Wahrheitswert der Bedingung 'Stoptaste gedrückt' auf 'wahr' gesetzt, sonst bleibt der Wert auf 'falsch'. - Durch Tippen der Tastenfolge wird die Ausführung des gesamten Programms abgebrochen. #on("b")#Kundendaten eingeben#off("b")# (ELAN: kundendaten eingeben) - Der Befehl setzt voraus, daß zuvor eine Kundennummer eingelesen wurde, ansonsten erfolgt eine entsprechende Fehlermeldung. - Die Angaben zu einem Kunden (Name, Vorname, Geschlecht) können einge­ geben bzw. verändert werden. - Alle Eingaben sind mit oder der Tastenfolge abzuschließen. Durch wird der Wahrheitswert der Bedingung 'Stoptaste gedrückt' auf 'wahr' gesetzt. - Nach Abschluß der Eingaben werden die Kundendaten sowohl in der Filial- Verwaltung als auch in der Zentrale gespeichert, worauf auch kurz hingewiesen wird. - Durch Tippen der Tastenfolge während der Eingaben wird die Ausführung des gesamten Programms abgebrochen. #on("b")#neues Blatt#off("b")# (ELAN: neues blatt) - Das Rechnungsfenster auf dem Bildschirm wird gelöscht. - Für die Ausgabe der nächsten Rechnung auf dem Drucker wird eine neue Rechnungsdatei bereitgestellt. #on("b")#Rechnungskopf#off("b")# (ELAN: rechnungskopf) - Ein Rechnungskopf wird auf dem Bildschirm ausgegeben. Falls zuvor eine Kundenummer eingelesen worden ist, unter der bereits Kundendaten einge­ geben wurden, erscheint der Name des betreffenden Kunden im Rechnungs­ kopf. - Der Rechnungskopf wird für einen eventuellen späteren Ausdruck in die Rechnungsdatei geschrieben. #on("b")#Artikel kaufen#off("b")# (ELAN: artikel kaufen) - Der Befehl setzt voraus, daß zuvor eine Artikelnummer eingelesen worden ist, ansonsten erfolgt eine entsprechende Fehlermeldung. - Artikelname und -preis werden auf den Bildschirm und in die Rechnungsdatei geschrieben. - Der Kauf wird intern in den entsprechenden Filial-Dateien registriert. #on("b")#Abrechnung#off("b")# (ELAN: abrechnung) - Die Preise der gekauften Artikel werden addiert. - Die Summe wird auf dem Bildschirm angezeigt und in die Rechnungsdatei geschrieben. - Der Benutzer wird gefragt, ob die Rechnung ausgedruckt werden soll. #on("b")#Auskunft#off("b")# (ELAN: auskunft) - Der Wahrheitswert der Bedingung 'Stoptaste gedrückt' wird zunächst auf 'falsch' gesetzt. - Der Benutzer wird aufgefordert, eine Codenummer einzugeben. Je nach Ein­ stellung der 'Eingabeart' (vgl. Kapitel 5.3) erfolgt die Eingabe durch Eintippen einer Zahl über die Tastatur oder durch Einschieben einer Codekarte in das Lesegerät. Eingaben über die Tastatur sind mit abzuschließen. Akzeptiert werden nur zulässige Werte, ansonsten erfolgt eine Warnung, und die Eingabe wird wiederholt. Die Bedeutungen der einzelnen Auskunftscodes sind in Kapitel 5.4 unter der Menufunktion 'Auskunft einholen' beschrieben. - Durch Tippen der Tastenfolge kann der Befehl abgebrochen werden, ohne daß eine Codenummer eingelesen wird. In diesem Falle wird der Wahrheitswert der Bedingung 'Stoptaste gedrückt' auf 'wahr' gesetzt, sonst bleibt der Wert auf 'falsch'. - Durch Tippen der Tastenfolge wird die Ausführung des gesamten Programms abgebrochen. #on("b")#Bildschirm neu#off("b")# (ELAN: bildschirm neu) - Der Programm-Eingangsbildschirm wird neu aufgebaut. Der Befehl wird benötigt, wenn die Fenstereinteilung auf dem Bildschirm wiederhergestellt werden soll (z.B. nach Ausgabe einer Liste bei dem Befehl 'Auskunft'). - Der Befehl wird beim Starten eines GRIN-Programms automatisch ausgeführt; bei ELAN-Programmen wird er automatisch am Anfang eines jeden Programms eingefügt, wenn das Programm nicht mit diesem Befehl beginnt. Neben diesen Befehlen stehen für ELAN-Programme noch drei weitere zur Verfügung, die nicht zum GRIN-Befehlssatz gehören: nachbestellen, dezimalwert lesen, bitmuster lesen. Diese Befehle entsprechen in ihrer Wirkung den gleichnamigen Menufunktionen unter dem Oberbegriff 'Kommandos', die in Kapitel 5.4 beschrieben sind.