总计行未在 COBOL 中显示数据

问题描述 投票:0回答:0

在为这个批处理程序创建完整的模板后,它从一个 txt 文件中获取输入并输出您的配置,它将累加获得的积分并显示它们,它会累加可能的积分和获得的积分列并显示它们,两者在每个列表的底部,一个用于作业,一个用于测试,然后最终它将在文件的最底部显示总计行。目前,模板已配置,现在我们需要的是总计百分比和字母等级,所有这些都没有显示在输出文件中,这就是我需要帮助解决的问题。

所附图像是程序所需的输出。 [desired output for program]

下面列出的 .SEQ 文件必须复制并粘贴到项目文件夹中的 bin/debug 文件夹中,如果您使用的是 visual studio,我认为它在整个过程中都是一样的。在我的学校,我们使用 Visual Studio 2015,所以不确定它将如何转换。您可以将此信息保存在记事本中。

Assignment #1  010 010
Assignment #2  028 030
Assignment #3  045 050
Assignment #4  109 130
Assignment #5  095 100
Assignment #6  000 000
Assignment #7  000 000
Assignment #8  000 000
Assignment #9  000 000
Assignment #10 000 000
Test #1        009 012
Test #2        018 018
Test #3        028 037
Test #4        019 025
Test #5        043 055
Test #6        015 023
Test #7        000 000
Test #8        000 000
Test #9        000 000

下面列出的是实际程序本身。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. GRADES.
      * BOB
      ******************************************************************
      *    THIS PROGRAM WILL ADD UP ASSIGNMENTS AND TESTS COLUMNS
      *    AND DISPLAY TOTALS FOR EACH THEN PRESENT A FINAL TOTAL
      *    LINE THAT DISPLAYS GRAND TOTALS, PERCENTAGE AND THE STU 
      *    DENTS LETTER GRADE
      *    
      ******************************************************************
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
     
           SELECT GRADES-FILE-IN
               ASSIGN TO 'GRADES.SEQ'
               ORGANIZATION IS LINE SEQUENTIAL.
     
           SELECT GRADES-FILE-OUT
               ASSIGN TO 'GRADES.RPT'
               ORGANIZATION IS LINE SEQUENTIAL.
     
       DATA DIVISION.
       FILE SECTION.
     
       FD  GRADES-FILE-IN.
       01  GRADES-RECORD-IN.
           05  DESCRIPTION-IN          PIC X(14).
           05                          PIC X.
           05  POINTS-EARNED           PIC 999.
           05                          PIC X.
           05  POINTS-POSSIBLE         PIC 999.
     

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

       WORKING-STORAGE SECTION.
       01  ARE-THERE-MORE-RECORDS      PIC XXX     VALUE 'YES'.
       01  LINES-PRINTED               PIC 99      VALUE ZERO.
       01  WS-POINTS-EARNED            PIC 999     VALUE ZERO.
       01  WS-POINTS-POSSIBLE          PIC 999     VALUE ZERO.
       01  WS-PERCENT-POINTS-EARNED    PIC .99     VALUE ZERO.
       01  WS-LETTER-GRADE             PIC XX.
       01  WS-GET-GRADE                PIC 99.
       
       
       01  DETAIL-LINE.
           05  DL-DESCRIPTION-IN              PIC X(14).
           05                          PIC X(8)   VALUE SPACES.
           05  DL-POINTS-EARNED        PIC ZZ9.
           05                          PIC X(8)   VALUE SPACES.
           05  DL-POINTS-POSSIBLE     PIC ZZ9.
           
       01 ASG-TOTAL-LINES.
           05                          PIC X(6)   VALUE 'Totals'.
           05                          PIC X(16)  VALUE SPACES.
           05  TL-ASG-POINTS-EARNED            PIC ZZ9.
           05                          PIC X(8)   VALUE SPACES.
           05  TL-ASG-POINTS-POSSIBLE  PIC ZZ9.
           05                          PIC X(4)   VALUE SPACES.
           05                          PIC X(9)   VALUE 'Percent ='.
           05                          PIC XX     VALUE SPACES.
           05  TL-ASG-PERCENT          PIC .99.
           05                          PIC XX     VALUE SPACES.
           05                          PIC X(7)   VALUE 'Grade ='.
           05                          PIC X      VALUE SPACES.
           05  TL-ASG-LETTER-GRADE     PIC X.
           
       01 TEST-TOTAL-LINES.
           05                          PIC X(6)   VALUE 'Totals'.
           05                          PIC X(16)  VALUE SPACES.
           05  TL-TEST-POINTS-EARNED           PIC ZZ9.
           05                          PIC X(8)   VALUE SPACES.
           05  TL-TEST-POINTS-POSSIBLE PIC ZZ9.
           05                          PIC X(4)   VALUE SPACES.
           05                          PIC X(9)   VALUE 'Percent ='.
           05                          PIC XX     VALUE SPACES.
           05  TL-TEST-PERCENT         PIC .99.
           05                          PIC XX     VALUE SPACES.
           05                          PIC X(7)   VALUE 'Grade ='.
           05                          PIC X      VALUE SPACES.
           05  TL-TEST-LETTER-GRADE    PIC X.
       
       01 FINAL-LINE.
           05                          PIC X(11)  VALUE 'Final Grade'.
           05                          PIC X(29)  VALUE SPACES.
           05                          PIC X(9)   VALUE 'Percent ='.
           05                          PIC XX.
           05  FL-PERCENT              PIC .99.
           05                          PIC XX     VALUE SPACES.
           05                          PIC X(7)   VALUE 'Grade ='.
           05                          PIC XX     VALUE SPACES.
           05  FL-LETTER-GRADE         PIC X.
     

       PROCEDURE DIVISION.
       0100-MAIN.
           OPEN INPUT GRADES-FILE-IN
           OPEN OUTPUT GRADES-FILE-OUT
     
           PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '
               READ GRADES-FILE-IN
                   AT END
                       PERFORM 0400-WRITE-TEST-TOTALS
                       PERFORM 0600-WRITE-FINAL-GRADE
                       MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
                   NOT AT END
                       PERFORM 0200-PROCESS-ONE-RECORD 
               END-READ
           END-PERFORM
     
           CLOSE GRADES-FILE-IN
           CLOSE GRADES-FILE-OUT
           STOP RUN.
    

       0200-PROCESS-ONE-RECORD.
           COMPUTE WS-POINTS-EARNED = WS-POINTS-EARNED + POINTS-EARNED
           COMPUTE WS-POINTS-POSSIBLE = WS-POINTS-POSSIBLE + POINTS-POSSIBLE
           COMPUTE WS-PERCENT-POINTS-EARNED ROUNDED = WS-POINTS-EARNED
           / WS-POINTS-POSSIBLE                                        
           
           PERFORM 0500-GET-LETTER-GRADE
           
           IF DESCRIPTION-IN = 'Test #1' 
               MOVE WS-POINTS-EARNED TO TL-ASG-POINTS-EARNED
               MOVE WS-POINTS-POSSIBLE TO TL-ASG-POINTS-POSSIBLE
               MOVE WS-PERCENT-POINTS-EARNED TO TL-ASG-PERCENT
               MOVE WS-LETTER-GRADE TO TL-ASG-LETTER-GRADE
               PERFORM 0300-WRITE-ASG-TOTALS 
           END-IF
           
           IF DESCRIPTION-IN = ''
               MOVE WS-POINTS-EARNED TO TL-ASG-POINTS-EARNED
               MOVE WS-POINTS-POSSIBLE TO TL-ASG-POINTS-POSSIBLE
               MOVE WS-PERCENT-POINTS-EARNED TO TL-ASG-PERCENT
               MOVE WS-LETTER-GRADE TO TL-ASG-LETTER-GRADE
               PERFORM 0400-WRITE-TEST-TOTALS 
           END-IF
           
           MOVE SPACES TO GRADES-RECORD-OUT DETAIL-LINE
           MOVE DESCRIPTION-IN TO DL-DESCRIPTION-IN
           MOVE POINTS-EARNED TO DL-POINTS-EARNED
           MOVE POINTS-POSSIBLE TO DL-POINTS-POSSIBLE
           MOVE DETAIL-LINE TO GRADES-RECORD-OUT
           WRITE GRADES-RECORD-OUT
               AFTER ADVANCING 1 LINES.
           ADD 2 TO LINES-PRINTED.
           

       0300-WRITE-ASG-TOTALS.
          MOVE WS-POINTS-EARNED TO TL-ASG-POINTS-EARNED
          MOVE WS-POINTS-POSSIBLE TO TL-ASG-POINTS-POSSIBLE
          MOVE WS-PERCENT-POINTS-EARNED TO TL-ASG-PERCENT
          MOVE WS-LETTER-GRADE TO TL-ASG-LETTER-GRADE
          
          MOVE ASG-TOTAL-LINES TO GRADES-RECORD-OUT 
          WRITE GRADES-RECORD-OUT AFTER ADVANCING 2 LINES.
          MOVE SPACES TO GRADES-RECORD-OUT.
          WRITE GRADES-RECORD-OUT AFTER ADVANCING 1 LINE.
          
          MOVE ZERO TO WS-POINTS-EARNED
          MOVE ZERO TO WS-POINTS-POSSIBLE
          MOVE ZERO TO WS-PERCENT-POINTS-EARNED.
          
       
       0400-WRITE-TEST-TOTALS.
          MOVE WS-POINTS-EARNED TO TL-TEST-POINTS-EARNED
          MOVE WS-POINTS-POSSIBLE TO TL-TEST-POINTS-POSSIBLE
          MOVE WS-PERCENT-POINTS-EARNED TO TL-TEST-PERCENT
          MOVE WS-LETTER-GRADE TO TL-TEST-LETTER-GRADE
          
          MOVE TEST-TOTAL-LINES TO GRADES-RECORD-OUT 
          WRITE GRADES-RECORD-OUT AFTER ADVANCING 2 LINES.
          MOVE SPACES TO GRADES-RECORD-OUT.
          WRITE GRADES-RECORD-OUT AFTER ADVANCING 1 LINE.
          
          MOVE ZERO TO WS-POINTS-EARNED
          MOVE ZERO TO WS-POINTS-POSSIBLE
          MOVE ZERO TO WS-PERCENT-POINTS-EARNED.
       
       
       0500-GET-LETTER-GRADE.
       IF WS-PERCENT-POINTS-EARNED
       >= .95 AND WS-PERCENT-POINTS-EARNED < 1
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE 
           MOVE 'A' TO WS-LETTER-GRADE
       END-IF
       IF WS-PERCENT-POINTS-EARNED
       >= .90 AND WS-PERCENT-POINTS-EARNED <= .94
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE
           MOVE 'A-' TO WS-LETTER-GRADE
       END-IF
       IF WS-PERCENT-POINTS-EARNED >= .87 AND WS-PERCENT-POINTS-EARNED
       <= .89
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE
           MOVE 'B+' TO WS-LETTER-GRADE
       END-IF
       IF WS-PERCENT-POINTS-EARNED >= .83 AND WS-PERCENT-POINTS-EARNED
       <= .86
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE
           MOVE 'B' TO WS-LETTER-GRADE
       END-IF
       IF WS-PERCENT-POINTS-EARNED >= .80 AND WS-PERCENT-POINTS-EARNED
       <= .82
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE
           MOVE 'B-' TO WS-LETTER-GRADE
       END-IF
       IF WS-PERCENT-POINTS-EARNED >= .77 AND WS-PERCENT-POINTS-EARNED
       <= .79
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE
           MOVE 'C+' TO WS-LETTER-GRADE
       END-IF
       IF WS-PERCENT-POINTS-EARNED >= .74 AND WS-PERCENT-POINTS-EARNED <= .76
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE
           MOVE 'C' TO WS-LETTER-GRADE
       END-IF
       IF WS-PERCENT-POINTS-EARNED >= .70 AND WS-PERCENT-POINTS-EARNED <= .73
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE
           MOVE 'C-' TO WS-LETTER-GRADE
       END-IF
       IF WS-PERCENT-POINTS-EARNED >= .67 AND WS-PERCENT-POINTS-EARNED <= .69
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE
           MOVE 'D+' TO WS-LETTER-GRADE
       END-IF
       IF WS-PERCENT-POINTS-EARNED >= .60 AND WS-PERCENT-POINTS-EARNED <= .66
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE
           MOVE 'D-' TO WS-LETTER-GRADE
       END-IF
       IF WS-PERCENT-POINTS-EARNED <= .59
           COMPUTE WS-GET-GRADE ROUNDED = WS-POINTS-EARNED / WS-POINTS-POSSIBLE
           MOVE 'E' TO WS-LETTER-GRADE
       END-IF.
         
         
       0600-WRITE-FINAL-GRADE.
           
           MOVE FINAL-LINE TO GRADES-RECORD-OUT
           WRITE GRADES-RECORD-OUT
               AFTER ADVANCING 2
           ADD 2 TO LINES-PRINTED.

下面列出的是我的输出,您可以在其中看到缺少的总计和正确的字母分级。


Assignment #1          10         10
Assignment #2          28         30
Assignment #3          45         50
Assignment #4         109        130
Assignment #5          95        100
Assignment #6           0          0
Assignment #7           0          0
Assignment #8           0          0
Assignment #9           0          0
Assignment #10          0          0

Totals                296        332    Percent =  .89  Grade = E

Test #1                 9         12
Test #2                18         18
Test #3                28         37
Test #4                19         25
Test #5                43         55
Test #6                15         23
Test #7                 0          0
Test #8                 0          0
Test #9                 0          0

Totals                123        158    Percent =  .78  Grade = E


Final Grade                             Percent =       Grade =

我已经为要显示的总数创建了所需的模板,并计算了所述总和。

cobol
© www.soinside.com 2019 - 2024. All rights reserved.