Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cobol 第一次执行后GO TO语句的问题_Cobol_Goto - Fatal编程技术网

Cobol 第一次执行后GO TO语句的问题

Cobol 第一次执行后GO TO语句的问题,cobol,goto,Cobol,Goto,在使用GO-TO语句时遇到问题。假设此操作一直运行到用户键入“END”。如果我在第一次打开程序时键入“END”,它将关闭,但如果我在第一次通过时输入有效数据后键入,它将继续返回用户输入数据屏幕 ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT USED-CAR-FILE-OUT ASSIGN TO 'USED-CAR.RPT' ORGANI

在使用GO-TO语句时遇到问题。假设此操作一直运行到用户键入“END”。如果我在第一次打开程序时键入“END”,它将关闭,但如果我在第一次通过时输入有效数据后键入,它将继续返回用户输入数据屏幕

   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.

       SELECT USED-CAR-FILE-OUT
           ASSIGN TO 'USED-CAR.RPT'
           ORGANIZATION IS LINE SEQUENTIAL.

   DATA DIVISION.
   FILE SECTION.

   FD USED-CAR-FILE-OUT.
   01 USED-CAR-RECORD-OUT              PIC X(80).

   WORKING-STORAGE SECTION.
   01  FIRST-RECORD                    PIC X(3)     VALUE 'YES'.
   01  ID-CODE                         PIC X(3).
   01  TOTAL-CASH-PAYMENT              PIC 9(5).
   01  MONTHLY-PAYMENT                 PIC 9(4).
   01  NUMBER-OF-MONTHS                PIC 9(3).
   01  TOTAL-BALANCE                   PIC S9(6)V99 VALUE ZEROS.
   01  INTEREST-COLLECTED              PIC 99V99    VALUE ZEROS.
   01  MONTH-DIFF                      PIC 99       VALUE ZEROS.
   01  MONTH-NUM                       PIC 99       VALUE ZEROS.
   01  YEAR-NUM                        PIC 99       VALUE ZEROS.
   01  ID-HOLD                         PIC X(3)     VALUE SPACES.
   01  PAYMENT-HOLD                    PIC X(3)     VALUE SPACES.






   01  DETAIL-LINE.
       05  ID-CODE-DL                  PIC X(3).
       05                              PIC X(3)    VALUE SPACES.
       05                              PIC X(4)    VALUE 'Yr='.
       05  YEAR-NUMBER-DL              PIC Z9.
       05                              PIC X(4)    VALUE SPACES.
       05                              PIC X(4)    VALUE 'MO='.
       05  MONTH-NUMBER-DL             PIC Z9.
       05                              PIC X(4)    VALUE SPACES.
       05                              PIC X(5)    VALUE 'Pmt='.
       05  PAYMENT-DL                  PIC $$$,$$$.
       05                              PIC X(4)    VALUE SPACES.
       05                              PIC X(5)    VALUE 'Int='.
       05  INTEREST-EARNED-DL          PIC $$$$.99.
       05                              PIC X(3)    VALUE SPACES.
       05                              PIC X(5)    VALUE 'Bal='.
       05  BALANCE-DL                  PIC $$$,$$$.99.


   PROCEDURE DIVISION.
   100-MAIN.

       OPEN OUTPUT USED-CAR-FILE-OUT
           PERFORM 200-USER-INPUT THRU 299-EXIT
       CLOSE USED-CAR-FILE-OUT
       STOP RUN.

   200-USER-INPUT.
       DISPLAY 'Used Car Sales Report'
       DISPLAY 'Enter the ID code (or END) - maxium three char.'
       ACCEPT ID-CODE
       IF ID-CODE = 'END'
           GO TO 299-EXIT
       END-IF
       DISPLAY 'Enter the Total Cash Payment - maximum five digits'
       ACCEPT TOTAL-CASH-PAYMENT
       DISPLAY 'Enter the Monthly Payment - maximum four digits'
       ACCEPT MONTHLY-PAYMENT

       DISPLAY 'Enter the Number of Months - maximum three digits'
       ACCEPT NUMBER-OF-MONTHS
       PERFORM 300-RECORD-PROCESS.

   299-EXIT.
       EXIT.

   300-RECORD-PROCESS.
       IF TOTAL-CASH-PAYMENT > 0
           IF FIRST-RECORD = 'YES'
               MOVE ID-CODE TO ID-CODE-DL
               MOVE 1 TO YEAR-NUMBER-DL
               MOVE 1 TO YEAR-NUM
               move 1 to MONTH-NUMBER-DL
               MOVE TOTAL-CASH-PAYMENT TO PAYMENT-DL
               MOVE PAYMENT-DL TO MONTHLY-PAYMENT
               ADD MONTHLY-PAYMENT TO TOTAL-BALANCE
               MOVE 'NO' TO FIRST-RECORD
            END-IF
           COMPUTE INTEREST-COLLECTED ROUNDED = TOTAL-BALANCE
            * .0175 / 12
           MOVE INTEREST-COLLECTED TO INTEREST-EARNED-DL
           ADD INTEREST-COLLECTED TO TOTAL-BALANCE
           MOVE TOTAL-BALANCE TO BALANCE-DL
           ADD 1 TO MONTH-DIFF
           MOVE MONTH-DIFF TO MONTH-NUMBER-DL
           IF MONTH-NUMBER-DL > 13
               ADD 1 TO MONTH-NUM
               MOVE MONTH-NUM TO MONTH-NUMBER-DL
           END-IF
           IF MONTH-NUMBER-DL = 13
               MOVE 1 TO MONTH-NUM
               MOVE MONTH-NUM TO MONTH-NUMBER-DL
           END-IF
           IF MONTH-NUM = 1
               ADD 1 TO YEAR-NUM
               MOVE YEAR-NUM TO YEAR-NUMBER-DL
           END-IF
           MOVE DETAIL-LINE TO USED-CAR-RECORD-OUT
           WRITE USED-CAR-RECORD-OUT
           AFTER ADVANCING 1 LINE
           MOVE ID-HOLD TO ID-CODE-DL

           IF MONTH-DIFF < NUMBER-OF-MONTHS
               PERFORM 300-RECORD-PROCESS
           END-IF
           PERORM 200-USER-INPUT
       END-IF

       IF MONTHLY-PAYMENT > 0
           IF FIRST-RECORD = 'YES'
               MOVE ID-CODE TO ID-CODE-DL
               MOVE 1 TO YEAR-NUMBER-DL
               MOVE 1 TO YEAR-NUM
               move 1 to MONTH-NUMBER-DL
               MOVE 'NO' TO FIRST-RECORD
           END-IF

           MOVE MONTHLY-PAYMENT TO PAYMENT-DL
           MOVE PAYMENT-DL TO MONTHLY-PAYMENT
           ADD MONTHLY-PAYMENT TO TOTAL-BALANCE
           COMPUTE INTEREST-COLLECTED ROUNDED = TOTAL-BALANCE
            * .0175 / 12
           MOVE INTEREST-COLLECTED TO INTEREST-EARNED-DL
           ADD INTEREST-COLLECTED TO TOTAL-BALANCE
           MOVE TOTAL-BALANCE TO BALANCE-DL
           ADD 1 TO MONTH-DIFF
           MOVE MONTH-DIFF TO MONTH-NUMBER-DL
           IF MONTH-NUMBER-DL > 13
               ADD 1 TO MONTH-NUM
               MOVE MONTH-NUM TO MONTH-NUMBER-DL
           END-IF
           IF MONTH-NUMBER-DL = 13
               MOVE 1 TO MONTH-NUM
               MOVE MONTH-NUM TO MONTH-NUMBER-DL
           END-IF
           IF MONTH-NUM = 1
               ADD 1 TO YEAR-NUM
               MOVE YEAR-NUM TO YEAR-NUMBER-DL
           END-IF
           MOVE DETAIL-LINE TO USED-CAR-RECORD-OUT
           WRITE USED-CAR-RECORD-OUT
           AFTER ADVANCING 1 LINE
           MOVE ID-HOLD TO ID-CODE-DL
           IF TOTAL-CASH-PAYMENT > 0
               MOVE 0 TO TOTAL-CASH-PaYMENT
               MOVE 0 TO PAYMENT-DL
           END-IF
           IF MONTH-DIFF < NUMBER-OF-MONTHS
           PERFORM 300-RECORD-PROCESS
           END-IF
       PERFORM 200-USER-INPUT
       END-IF.
环境部。
输入输出部分。
文件控制。
选择二手车归档
分配到“USED-CAR.RPT”
组织是按行顺序的。
数据司。
文件部分。
FD二手车档案。
01二手车记录图X(80)。
工作和储存科。
01第一次记录PIC X(3)值“是”。
01识别码图X(3)。
01总现金支付图9(5)。
01月付款图9(4)。
01月数图9(3)。
01总平衡PIC S9(6)V99值为零。
01利息收集PIC 99V99值为零。
01个月差异PIC 99值为零。
01 MONTH-NUM PIC 99值为零。
01 YEAR-NUM PIC 99值为零。
01 ID-HOLD PIC X(3)个值空间。
01付款挂起PIC X(3)个值空间。
01详图-LINE。
05 ID-CODE-DL图X(3)。
05 PIC X(3)值空间。
05 PIC X(4)值“Yr=”。
05岁数字-DL图Z9。
05 PIC X(4)值空间。
05 PIC X(4)值“MO=”。
05月号-DL图Z9。
05 PIC X(4)值空间。
05 PIC X(5)值“Pmt=”。
05付款-DL PIC$$$,$$$。
05 PIC X(4)值空间。
05 PIC X(5)值“Int=”。
05利息收入-DL PIC$$$.99。
05 PIC X(3)值空间。
05 PIC X(5)值“Bal=”。
05余额-DL PIC$$$,$$$.99。
程序司。
100-MAIN。
打开输出二手车文件输出
通过299-EXIT执行200-USER-INPUT
关闭二手车档案
停,跑。
200-用户输入。
显示“二手车销售报告”
显示“输入ID代码(或结束)-最大三字符”
接受识别码
如果ID-CODE='END'
去299号出口
端到端IF
显示“输入现金支付总额-最多五位数”
接受全额现金支付
显示“输入每月付款-最多四位数”
接受按月付款
显示“输入月数-最多三位数”
接受月数
执行300-RECORD-PROCESS。
299-出口。
出口
300-记录过程。
如果现金支付总额>0
如果第一条记录='是'
将ID-CODE移动到ID-CODE-DL
将1移到年份编号DL
将1移到第1年
将1移动到MONTH-NUMBER-DL
将“现金支付总额”移动到“付款总额”
将PAYMENT-DL移至MONTHLY-PAYMENT
将每月付款添加到总余额中
将“否”移动到第一记录
端到端IF
计算计息四舍五入=总余额
* .0175 / 12
将已收利息移动到已赚利息DL
将收取的利息添加到总余额中
将TOTAL-BALANCE移至BALANCE-DL
将1添加到月差
将月差移动到月数DL
如果月数DL>13
将1添加到MONTH-NUM
将MONTH-NUM移动到MONTH-NUMBER-DL
端到端IF
如果月数DL=13
将1移动到月数
将MONTH-NUM移动到MONTH-NUMBER-DL
端到端IF
如果MONTH-NUM=1
将1添加到YEAR-NUM
将YEAR-NUM移动到YEAR-NUMBER-DL
端到端IF
将明细行移动到二手车记录输出
写出二手车记录
前进1行后
将ID-HOLD移动到ID-CODE-DL
如果月差<月数
执行300记录过程
端到端IF
PERORM 200-用户输入
端到端IF
如果每月付款>0
如果第一条记录='是'
将ID-CODE移动到ID-CODE-DL
将1移到年份编号DL
将1移到第1年
将1移动到MONTH-NUMBER-DL
将“否”移动到第一记录
端到端IF
将每月付款移动到每月付款
将PAYMENT-DL移至MONTHLY-PAYMENT
将每月付款添加到总余额中
计算计息四舍五入=总余额
* .0175 / 12
将已收利息移动到已赚利息DL
将收取的利息添加到总余额中
将TOTAL-BALANCE移至BALANCE-DL
将1添加到月差
将月差移动到月数DL
如果月数DL>13
将1添加到MONTH-NUM
将MONTH-NUM移动到MONTH-NUMBER-DL
端到端IF
如果月数DL=13
将1移动到月数
将MONTH-NUM移动到MONTH-NUMBER-DL
端到端IF
如果MONTH-NUM=1
将1添加到YEAR-NUM
将YEAR-NUM移动到YEAR-NUMBER-DL
端到端IF
将明细行移动到二手车记录输出
写出二手车记录
前进1行后
将ID-HOLD移动到ID-CODE-DL
如果现金支付总额>0
将0移动到现金支付总额
将0移动到PAYMEN
repeat until end of input
     get some input
     if there is input to process 
         process the input
PERFORM 200-USER-INPUT
  UNTIL ID-CODE = 'END'.
IF NOT USER-INPUT-ENDED
   DISPLAY 'Enter the Total Cash Payment - maximum five digits'
   ACCEPT TOTAL-CASH-PAYMENT
   ...
   ACCEPT NUMBER-OF-MONTHS
   PERFORM 300-RECORD-PROCESS.
  IF NOT USER-INPUT-ENDED
     PERFORM 210-ACCEPT-DETAILS.

210-ACCEPT-DETAILS.

   DISPLAY 'Enter the Total Cash Payment - maximum five digits'.
   ACCEPT TOTAL-CASH-PAYMENT.
   ...
   ACCEPT NUMBER-OF-MONTHS.
   PERFORM 300-RECORD-PROCESS.
  PERFORM 300-RECORD-PROCESS
    UNTIL TOTAL-BALANCE = 0.
MAIN:perform user-input until end-detected.  
user-input: get user data; perform calculations until balance is zero.
calculations: one month's calculations at a time. 
IF MONTHLY-PAYMENT IS LESS THAN INTEREST-COLLECTED
   MOVE 'ERR' TO ID-CODE.
100-MAIN.
   PERFORM 200-USER-INPUT THRU 299-EXIT
200-USER-INPUT.
    IF some condition GO TO 299-EXIT
    ...
    PERFORM 300-RECORD-PROCESS
    .

299-EXIT.
 300-RECORD-PROCESS.
    ...
    PERFORM 200-USER-INPUT