2013-12-10 5 views
2
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. 

를 사용하여 테이블에 문제가 I 내 가변 좌석-NUM에 추가 할 및가 나는 코드가 아직 완료되지 않았습니다 알고 있지만 내가 무엇을 표시하려고 힘든 시간을 보내고 있습니다 때문에 테이블을 사용하는 방법에 대한 몇 가지 도움을받을 수 있습니다 코볼

답변

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). 

당신은 캘리포니아 뭔가를해야 할 것입니다 시작하려면 1 문자열 1을 삭제하기위한 어떤 조언 도움이 될 것입니다 n 이제 좌석에 이름을 지정하려면 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을 사용할 필요는 없습니다. 항상

PERFORM paragraphname [UNTIL condition]. 

당신이 그것에 익숙해 질 때까지 쉬운 학문이 아니다 - 당신은 스파게티 코드와 악몽이있을 때 당신이 그것에 익숙해 질 것입니다; 로 가십시오. 은 재귀 코드를 호출합니다.

누구나 언급 한 적이 있다면 을 통해 간단히 말하면 고개를 끄덕이고 말하면서 모든 것을 무시하십시오. 그들은 레이아웃 의존적 인 코드를 옹호하고 있기 때문에 악의 전형입니다.

+0

nano.galvao @ 감사에게 내가 심하게 지금 모든 것에 의미가 있음을 필요로 많은 사람이 내가 보내고있어 무엇 이제 출력물로서 불필요한 줄을 다시 찾는다. –

+1

마고 (Magoo)를'GO TO '의 위험에 대해 +1 할 것이지만, 역시 약간 동의하지는 않을 것이다. +0.999 여기에 나열된 샘플은 실제 점프를 사용하지 않으므로 굵게 표시된 ESCHEW를 사용할 자격이 있습니다. 그러나 COBOL에서 상태 머신이나 단일 문자 프로토콜 인터프리터를 작성할 때 '계속 수행하십시오'는 상당히 실용적 일 수 있습니다. 범위가 제한적이고 깨끗하고 심지어 방어 할 수있는 경우. _ 모든 작업 세그먼트에 필요한 _ 다음 단계 레이블로 이동 _이라는 하위 단락 부담을 포함합니다.그래서, Never, 예, 아마도 1 년에 1 개의 화요일을 제외하고, 스틱, 돌, 그리고 말로 문을 지킬 준비를하십시오. –

+0

@KarllaurenzBagasan, Magoo가 작업을 수행했으며 nano.galvao는 형식을 지정했습니다. –

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.... ` 
+0

'L2-SUB-PARAGRAPH 수행'및 '실행 - L2-LOOPING-PARAVARYING INDEX1 BY BY 1 ...'이 얼마나 쉽고보다 객체 지향적인지 생각해보십시오. 박사 과정 학생에게 약간의 종결 코드 만 입력하도록 유혹하는 모든 단락 단락은 필요하지 않습니다. 훨씬 더 청결한. 그것은'PERFORM SECTION'에서 구조적으로 숙취를 넘었습니다. 자세한 정보를 유지하고 과거에 뿌리를 둔 관리자에게 보안 담요를 제공합니다. 그러한 구조에 대한 유일한 변명은 'IF 조건이 파 낙타로 간다'이지만 잭 소네 스 구조를 따르는 경우 'IF noitidnoc PERFORM PARA-SUB' 규칙이 적용됩니다! – Magoo

+0

이것은 질의 응답 사이트입니다. '답변'은 제기 된 질문을 다루는 답변입니다. 누군가가 downvotes 또는 중재자 관심을 위해 그것을 플래그하기 전에 당신이'대답'을 삭제하는 것이 좋습니다. 다른 하나와 동일합니다. 질문이나 대답에 대한 의견이 있으면'Comment'로하십시오. 당신이 위에서 제안한 것에 관해서는, 나는 그것을 격려하지 않을 것입니다, COBOL을위한 아주 오래된 것입니다. 그러나 그렇습니다. 항상 사이트 표준이 있습니다. 일반적으로 추천하는 것이 좋습니다. –