EMZETT.
Login

Kurz: ACCEPT liest von der Konsole oder holt Systemwerte wie das Datum:

Teil des Kurses COBOL

Kapitel 6 von 8 im Kurs COBOL (Abschnitt „Praxis“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Eingabe lesen

ACCEPT liest von der Konsole oder holt Systemwerte wie das Datum:

IDENTIFICATION DIVISION.
PROGRAM-ID. EINGABE.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAME     PIC X(20).
01 ZAHL     PIC 9(3).
01 DATUM    PIC 9(8).
 
PROCEDURE DIVISION.
    *> Interaktiv wäre:  ACCEPT NAME FROM CONSOLE.
    *> Hier die Alternative ohne Tastatur:
    ACCEPT DATUM FROM DATE YYYYMMDD.
    IF DATUM > 20200101
        DISPLAY "Datum liegt nach 2020"
    END-IF.
    ACCEPT ZAHL FROM ENVIRONMENT "GIBT_ES_NICHT".
    DISPLAY "Zahl ohne Wert: " ZAHL.
    MOVE "Mia Beispiel" TO NAME.
    DISPLAY "Willkommen, " NAME.
    STOP RUN.

Ausgabe:

Datum liegt nach 2020
Zahl ohne Wert: 000
Willkommen, Mia Beispiel

Mit ACCEPT feld FROM CONSOLE liest du eine Zeile, ACCEPT ... FROM ARGUMENT-VALUE die Kommandozeilenargumente, FROM TIME die Uhrzeit.

Ein tabellarischer Bericht

Berichte sind der Klassiker: Kopfzeile, Detailzeilen, Summen.

IDENTIFICATION DIVISION.
PROGRAM-ID. BERICHT.
 
DATA DIVISION.
WORKING-STORAGE SECTION.
01 BESTELLUNGEN.
   05 POSTEN OCCURS 4 TIMES.
      10 P-ARTIKEL PIC X(10).
      10 P-MENGE   PIC 9(3).
      10 P-PREIS   PIC 9(4)V99.
01 I          PIC 9.
01 ZEILE-SUMME PIC 9(6)V99.
01 GESAMT      PIC 9(7)V99 VALUE 0.
01 ZEILE.
   05 Z-ARTIKEL PIC X(10).
   05 FILLER    PIC X(2) VALUE SPACES.
   05 Z-MENGE   PIC ZZ9.
   05 FILLER    PIC X(2) VALUE SPACES.
   05 Z-PREIS   PIC ZZ,ZZ9.99.
   05 FILLER    PIC X(2) VALUE SPACES.
   05 Z-SUMME   PIC Z,ZZZ,ZZ9.99.
01 TRENNER      PIC X(40) VALUE ALL "=".
01 GESAMT-AUS   PIC Z,ZZZ,ZZ9.99.
 
PROCEDURE DIVISION.
    MOVE "Schrauben" TO P-ARTIKEL(1). MOVE 500 TO P-MENGE(1). MOVE 0.12 TO P-PREIS(1).
    MOVE "Muttern"   TO P-ARTIKEL(2). MOVE 480 TO P-MENGE(2). MOVE 0.08 TO P-PREIS(2).
    MOVE "Bohrer"    TO P-ARTIKEL(3). MOVE 12  TO P-MENGE(3). MOVE 14.90 TO P-PREIS(3).
    MOVE "Werkzeug"  TO P-ARTIKEL(4). MOVE 3   TO P-MENGE(4). MOVE 249.00 TO P-PREIS(4).
 
    DISPLAY "BESTELLÜBERSICHT".
    DISPLAY TRENNER.
    DISPLAY "Artikel     Menge     Preis        Summe".
    DISPLAY TRENNER.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4
        COMPUTE ZEILE-SUMME = P-MENGE(I) * P-PREIS(I)
        ADD ZEILE-SUMME TO GESAMT
        MOVE P-ARTIKEL(I) TO Z-ARTIKEL
        MOVE P-MENGE(I)   TO Z-MENGE
        MOVE P-PREIS(I)   TO Z-PREIS
        MOVE ZEILE-SUMME  TO Z-SUMME
        DISPLAY ZEILE
    END-PERFORM.
    DISPLAY TRENNER.
    MOVE GESAMT TO GESAMT-AUS.
    DISPLAY "Gesamt:                   " GESAMT-AUS.
    STOP RUN.

Ausgabe:

BESTELLÜBERSICHT
========================================
Artikel     Menge     Preis        Summe
========================================
Schrauben   500       0.12         60.00
Muttern     480       0.08         38.40
Bohrer       12      14.90        178.80
Werkzeug      3     249.00        747.00
========================================
Gesamt:                       1,024.20

Ausgabe in Dateien: der Bericht als Druckdatei

IDENTIFICATION DIVISION.
PROGRAM-ID. DRUCK.
 
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT BERICHT-DATEI ASSIGN TO "bericht.txt"
        ORGANIZATION IS LINE SEQUENTIAL.
    SELECT LESE-DATEI ASSIGN TO "bericht.txt"
        ORGANIZATION IS LINE SEQUENTIAL.
 
DATA DIVISION.
FILE SECTION.
FD BERICHT-DATEI.
01 BERICHT-ZEILE PIC X(40).
FD LESE-DATEI.
01 LESE-ZEILE    PIC X(40).
 
WORKING-STORAGE SECTION.
01 SEITE   PIC 99 VALUE 1.
01 EOF     PIC X VALUE "N".
01 ZEILEN  PIC 99 VALUE 0.
 
PROCEDURE DIVISION.
    OPEN OUTPUT BERICHT-DATEI.
    MOVE "MONATSBERICHT" TO BERICHT-ZEILE.
    WRITE BERICHT-ZEILE.
    MOVE ALL "-" TO BERICHT-ZEILE.
    WRITE BERICHT-ZEILE.
    MOVE "Umsatz Januar:   12.400,00" TO BERICHT-ZEILE.
    WRITE BERICHT-ZEILE.
    MOVE "Umsatz Februar:  13.250,50" TO BERICHT-ZEILE.
    WRITE BERICHT-ZEILE.
    CLOSE BERICHT-DATEI.
 
    OPEN INPUT LESE-DATEI.
    PERFORM UNTIL EOF = "J"
        READ LESE-DATEI
            AT END MOVE "J" TO EOF
            NOT AT END
                ADD 1 TO ZEILEN
                DISPLAY ZEILEN ": " LESE-ZEILE
        END-READ
    END-PERFORM.
    CLOSE LESE-DATEI.
    STOP RUN.

Ausgabe:

01: MONATSBERICHT
02: ----------------------------------------
03: Umsatz Januar:   12.400,00
04: Umsatz Februar:  13.250,50

Für umfangreiche Berichte gibt es in COBOL den Report Writer (REPORT SECTION, GENERATE), der Seitenköpfe, Gruppenwechsel und Summen automatisiert. GnuCOBOL unterstützt ihn teilweise; in Mainframe-Projekten wird er verwendet, aber oft durch eigene Berichtslogik ersetzt.

Merke

  • ACCEPT liest Konsole, Datum (FROM DATE YYYYMMDD), Zeit und Umgebung
  • Berichte: Editierfelder (Z, ,, .) in Zeilenstrukturen, DISPLAY oder WRITE
  • Kopf-, Detail- und Summenzeilen sind das Grundmuster der Berichtsprogrammierung
  • Report Writer automatisiert große Berichte

Übungsaufgabe

Erweitere den Bericht um eine Mehrwertsteuer-Zeile (19 %) und den Bruttobetrag.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Tabellen und Zeichenketten

Weiter: Dateien, Unterprogramme und Berichte

Alle Kapitel: COBOL im Überblick