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的提示都会有所帮助
答案 0 :(得分: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转到。
绝对不必使用转到。总是
PERFORM paragraphname [UNTIL condition].
在你习惯之前,这不是一门轻松的训练 - 当你做意大利面条码的噩梦时,你会习惯它; 转到,到处都是 PERFORM me 调用递归代码。
如果有人提到通过,只需微笑并点头并忽略他们必须说的一切。他们是提倡依赖布局的代码的邪恶的缩影。
答案 1 :(得分:0)
我们在商店中使用THROUGH
,但仅限于一个目的。我们用名称标记每个paragrah,并用该名称关闭该段落,最后用“ - ”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.... `