У меня проблемы с таблицами с использованием Cobol

 IDENTIFICATION DIVISION.
 PROGRAM-ID. MP4-5.
 ENVIRONMENT DIVISION.
 DATA DIVISION.
 WORKING-STORAGE SECTION.

 01 SEAT-DESCRIPTION.
    03 FILLER PIC X(50) VALUE "01   DRIVER".
    03 FILLER PIC X(50) VALUE "02   DRIVER'S ASST".
    03 FILLER PIC X(50) VALUE "03".
    03 FILLER PIC X(50) VALUE "04".
    03 FILLER PIC X(50) VALUE "05".
    03 FILLER PIC X(50) VALUE "06".
    03 FILLER PIC X(50) VALUE "07".
    03 FILLER PIC X(50) VALUE "08".
    03 FILLER PIC X(50) VALUE "09".
    03 FILLER PIC X(50) VALUE "10".
    03 FILLER PIC X(50) VALUE "11".
    03 FILLER PIC X(50) VALUE "12".
    03 FILLER PIC X(50) VALUE "13".
    03 FILLER PIC X(50) VALUE "14".
    03 FILLER PIC X(50) VALUE "15".

 01 MAIN-MENU   PIC X.
   88 RESERVATION VALUE "R".
   88 VIEW-RESERVATION VALUE "V".
   88 CANCEL-RESERVATION VALUE "D".
   88 EXIT-PROC VALUE "E".

 01 DECISION PIC X.
   88 YES VALUE "Y".
   88 NAY VALUE "N".   

 01 SEAT-NUM PIC 9(2).

 01 CUST-NAME PIC X(18).

 01 CUST-CNTCT PIC 9(11).

 01 CHOICE PIC X.

PROCEDURE DIVISION.
MAIN-ROUTINE.

 DISPLAY "        ABC TRANSPORT COMPANY".
 DISPLAY "__________________________________________".
 DISPLAY "     [R] ADD RESERVATION/S ".
 DISPLAY "     [V] VIEW RESERVATION/S ".
 DISPLAY "     [D] CANCEL RESERVATION/S ".
 DISPLAY "     [E] EXIT".
 DISPLAY "         ENTER CHOICE: " WITH NO ADVANCING.

 ACCEPT MAIN-MENU.

 PERFORM I-CHAIN.

I-CHAIN.
 IF RESERVATION
    GO TO RESERVE-PROC
 ELSE IF VIEW-RESERVATION
    GO TO VRESERVE-PROC
 ELSE IF CANCEL-RESERVATION
    GO TO CRESERVE-PROC
 ELSE IF EXIT-PROC
    GO TO END-PGM
 ELSE
    DISPLAY "INVALID OPTION"

 GO TO MAIN-ROUTINE.


RESERVE-PROC.
 DISPLAY "RESERVE SEAT #:   "WITH NO ADVANCING.
 ACCEPT SEAT-NUM.

 IF SEAT-NUM IS NUMERIC
      IF SEAT-NUM >2 AND SEAT-NUM <16
      GO TO CONT-RES
      ELSE
             DISPLAY "INVALID OPTION"
             PERFORM RESERVE-PROC
 ELSE 
    DISPLAY "ENTER A NUMERIC VALUE"
    GO TO RESERVE-PROC.

CONT-RES.
 DISPLAY "CUSTOMER NAME :     "WITH NO ADVANCING.
 ACCEPT CUST-NAME.

 MOVE CUST-NAME TO SEAT-NUM.
 DISPLAY "CUSTOMER CONTACT #: "WITH NO ADVANCING.
 ACCEPT CUST-CNTCT.

 MOVE CUST-CNTCT TO SEAT-NUM.
 GO TO RESER-CONT.

RESER-CONT.
 DISPLAY "RESERVE MORE? [Y/N]? "WITH NO ADVANCING.
 ACCEPT DECISION.
 IF YES
     PERFORM RESERVE-PROC
 ELSE IF NAY
     PERFORM MAIN-ROUTINE
 ELSE
     DISPLAY "INVALID OPTION"
     PERFORM RESER-CONT.

VRESERVE-PROC.
 DISPLAY "        ABC TRANSPORT COMPANY".
 DISPLAY "           RESERVATION LIST".
 DISPLAY "__________________________________________".
 DISPLAY " "SEAT-DESCRIPTION.

CRESERVE-PROC.
 DISPLAY "        ABC TRANSPORT COMPANY".
 DISPLAY "         CANCEL RESERVATION".
 DISPLAY "__________________________________________".

END-PGM.
 STOP RUN.

Я знаю, что код еще не завершен, но могу ли я получить некоторую помощь о том, как использовать таблицы, потому что мне трудно пытаться отобразить то, что я хочу добавить к моей переменной SEAT-NUM, и любые советы по удалению строки 1 с помощью 1 было бы полезно

2 ответа

Для начала вам нужно что-то вроде

01 SEAT-DESCRIPTION-REDEF REDEFINES SEAT-DESCRIPTION.
   03 SEAT-NUMBER-DATA OCCURS 15.
      05 SEAT-NUMBER-TEXT   PIC X(02).
      05 FILLER             PIC X(04).
      05 SEAT-FILLED-BY     PIC X(44).

Теперь вы можете присвоить значение SEAT-FILLED-BY(SEAT-NUM) назначить имя для места.

Непонятно чем вы занимаетесь CUST-CNTCT но небольшая корректировка:

01 SEAT-DESCRIPTION-REDEF REDEFINES SEAT-DESCRIPTION.
   03 SEAT-NUMBER-DATA OCCURS 15.
      05 SEAT-NUMBER-TEXT   PIC X(02).
      05 FILLER             PIC X(04).
      05 SEAT-FILLED-BY     PIC X(32).
      05 FILLER             PIC X(01).
      05 SEAT-CONTACT       PIC X(11).

и теперь вы можете MOVE CUST-CNTCT TO SEAT-CONTACT(SEAT-NUM). что, вероятно, близко к тому, что вы хотите сделать.

А теперь немного рекламы о структуре.

ESCHEW GO TO.

НИКОГДА не нужно использовать GO TO. Всегда

PERFORM paragraphname [UNTIL condition].

Это непростая дисциплина, пока вы не привыкнете к ней - и вы привыкнете к ней, когда у вас будут кошмары со спагетти-кодом; Идите повсюду и выполняйте меня, используя рекурсивный код.

И если кто-то когда-либо упоминает " ВЫПОЛНЯТЬ ЧЕРЕЗ", просто улыбнитесь, кивните и игнорируйте все, что он должен сказать. Они являются воплощением зла, потому что они защищают код, зависящий от макета.

Мы используем THROUGH в нашем магазине, но для одной цели. Мы помечаем каждый параграф именем и закрываем этот абзац этим именем с "-"EXIT"в конце.

Затем, когда мы вызываем этот абзац, мы называем его, используя синтаксис

"PERFORM L2-SUB-PARAGRAPH THROUGH L2-SUB-PARAPGRAPH-EXIT.

Это дает коду более объектно-ориентированный вид и делает абзацы более модульными.

Или, если вы хотите перебрать абзац, вы можете написать его так:

`PERFORM -L2-LOOPING-PARA' 
     'THROUGH L2-LOOPING-PARA-EXIT'
         'VARYING INDEX1 FROM 1 BY 1.... `
Другие вопросы по тегам