如何在 COBOL 输出文件中添加平均列和总计行

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

我的问题是我是 cobol 的初学者,因为我不太了解事物的顺序,所以我无法为我的 COBOL 程序接收正确的输出。如果您使用的是 visual studio 2015,则输出文件是 COBOL 程序的 bin debug 文件夹中的 .rpt 文件。它可能在 2022 年可用,但我们不允许使用该版本。我的目标是在输出文件的右侧添加一行平均值,并在底部添加一个总计行,其中包含击球总数、上垒数和平均总数。目前,我的计算显示 0,并且我的平均值没有像 CORRECT 输出那样在右侧排列。 SEQ 文件列在代码下方,它进入 bin 调试文件夹。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. BASEBALL-2.
      * 
      ******************************************************************
      *
      *    This program reads a file containing population data about 
      *    U.S. cities.  It then changes the order of the fields and   
      *    writes a report showing this information.
      *
      ******************************************************************
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.

           SELECT BASEBALL-FILE-IN
               ASSIGN TO 'BASEBALL-2.SEQ'
               ORGANIZATION IS LINE SEQUENTIAL.
     
           SELECT BASEBALL-FILE-OUT
               ASSIGN TO 'BASEBALL-2.RPT'
               ORGANIZATION IS LINE SEQUENTIAL.

       DATA DIVISION.
       FILE SECTION.

       FD  BASEBALL-FILE-IN.
       01  BASEBALL-RECORD-IN.
           05  NAME-IN                 PIC X(18).
           05  FILLER                  PIC XX.
           05  LEAGUE-IN               PIC X(2).
           05  FILLER                  PIC XX.
           05  TEAM-IN                 PIC 9(3).
           05  FILLER                  PIC XX.
           05  AT-BATS-IN              PIC 9(3).
           05  FILLER                  PIC XX.
           05  HITS-IN                 PIC 9(3).
     
       FD  BASEBALL-FILE-OUT.
       01  BASEBALL-RECORD-OUT           PIC X(80).

       WORKING-STORAGE SECTION.
       01  ARE-THERE-MORE-RECORDS      PIC X(3)  VALUE 'YES'.
       01  LINES-PRINTED               PIC 99    VALUE ZERO.
       01  PAGE-NUMBER                 PIC 99    VALUE ZERO.
       01  WS-AVERAGE-AMOUNT          PIC 99    VALUE ZERO.
       01  WS-GRAND-TOTAL-BATS         PIC 99    VALUE ZERO.
       01  WS-GRAND-TOTAL-HITS         PIC 99    VALUE ZERO.
       01  WS-GRAND-TTL-AVG-AMT     PIC 99    VALUE ZERO.

       01  CURRENT-DATE.
           05  YEAR-X                  PIC XX.
           05  MONTH-X                 PIC XX.
           05  DAY-X                   PIC XX.
      

       01  HEADING-LINE-1.
           05                          PIC X(23) VALUE SPACES.
           05                          PIC X(27)
               VALUE 'BASEBALL PLAYER STATISTICS'.
           05                          PIC X(5) VALUE SPACES.
           05  HL-1-DATE.
               10  HL-1-MONTH          PIC XX.
               10                      PIC X     VALUE '/'.
               10  HL-1-DAY            PIC XX.
               10                      PIC X     VALUE '/'.
               10  HL-1-YEAR           PIC XX.
           05                          PIC X(3)  VALUE SPACES.
           05                          PIC X(5)  VALUE 'PAGE'.
           05  HL-1-PAGE-NUMBER        PIC Z9.

       01  HEADING-LINE-2.
           05                          PIC X(9)  VALUE 'LEAGUE'.
           05                          PIC XX VALUE SPACES.
           05                          PIC X(9)  VALUE 'TEAM'.
           05                          PIC XX VALUE SPACES.
           05                          PIC X(19)  VALUE 'NAME'.
           05                          PIC XX  VALUE SPACES.
           05                          PIC XX(13) VALUE 'HITS-IN'.
           05                          PIC XX VALUE SPACES.
           05                          PIC XX(13) VALUE 'AT-BATS'.
           05                          PIC XX VALUE SPACES.
           05                          PIC XX(10) VALUE 'AVERAGE'.
       


    

       01  DETAIL-LINE.
           05  DL-LEAGUE               PIC X(9).
           05                          PIC XX  VALUE SPACES
           05  DL-TEAM                 PIC X(9).
           05                          PIC XX  VALUE SPACES.
           05  DL-NAME                 PIC X(19).
           05                          PIC XX  VALUE SPACES.
           05  DL-HITS-IN              PIC 999.
           05                          PIC XX  VALUE SPACES.
.          05  DL-AT-BATS              PIC 999.
           05                          PIC XX  VALUE SPACES.
           05  DL-AVERAGE              PIC .999.
           05                          PIC XX  VALUE SPACES.

       01  TOTAL-LINE.
           05                                  PIC X(20)
               VALUE 'TOTAL'.
           05                                  PIC X(15) VALUE SPACES.
           05  TL-GRAND-TOTAL-HITS-AMOUNT            PIC 999.
           05                                  PIC X(10) VALUE SPACES.
           05  TL-GRAND-TOTAL-BATS-AMOUNT            PIC 999.
           05                                  PIC X(10).
           05  TL-GRAND-TOTAL-AVERAGE-AMOUNT         PIC 999.

       PROCEDURE DIVISION.
       100-MAIN.
           OPEN INPUT BASEBALL-FILE-IN
           OPEN OUTPUT BASEBALL-FILE-OUT

      *    Get the Current Date From The System
           ACCEPT CURRENT-DATE FROM DATE
           MOVE MONTH-X TO HL-1-MONTH
           MOVE DAY-X TO HL-1-DAY
           MOVE YEAR-X TO HL-1-YEAR
           PERFORM 300-WRITE-HEADINGS

           PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '
               READ BASEBALL-FILE-IN
                   AT END
                       MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
                   NOT AT END
                       PERFORM 200-PROCESS-ONE-RECORD 
               END-READ
           END-PERFORM

           CLOSE BASEBALL-FILE-IN
           CLOSE BASEBALL-FILE-OUT
           STOP RUN.

       200-PROCESS-ONE-RECORD.
           IF LINES-PRINTED >= 57
               PERFORM 300-WRITE-HEADINGS
           END-IF
   
           COMPUTE WS-AVERAGE-AMOUNT ROUNDED = DL-AT-BATS / DL-HITS-IN
           MOVE NAME-IN TO DL-NAME
           MOVE LEAGUE-IN TO DL-LEAGUE     
           MOVE TEAM-IN TO DL-TEAM  
           MOVE AT-BATS-IN TO DL-AT-BATS
           MOVE HITS-IN TO DL-HITS-IN     
           MOVE DETAIL-LINE TO BASEBALL-RECORD-OUT
           WRITE BASEBALL-RECORD-OUT
               AFTER ADVANCING 2 LINES
           ADD 2 TO LINES-PRINTED.
       COMPUTE WS-GRAND-TOTAL-BATS = WS-GRAND-TOTAL-BATS + DL-AT-BATS
           COMPUTE WS-GRAND-TOTAL-HITS = WS-GRAND-TOTAL-HITS + DL-HITS-IN
       COMPUTE WS-GRAND-TTL-AVG-AMT = WS-GRAND-TTL-AVG-AMT + WS-AVERAGE-AMOUNT
           MOVE WS-GRAND-TOTAL-HITS TO TL-GRAND-TOTAL-HITS-AMOUNT
       MOVE WS-GRAND-TOTAL-BATS TO TL-GRAND-TOTAL-BATS-AMOUNT
       MOVE WS-GRAND-TTL-AVG-AMT TO TL-GRAND-TOTAL-AVERAGE-AMOUNT

       300-WRITE-HEADINGS.
           ADD 1 TO PAGE-NUMBER
           MOVE PAGE-NUMBER TO HL-1-PAGE-NUMBER
           MOVE HEADING-LINE-1 TO BASEBALL-RECORD-OUT
           WRITE BASEBALL-RECORD-OUT
               AFTER ADVANCING PAGE
           MOVE HEADING-LINE-2 TO BASEBALL-RECORD-OUT
           WRITE BASEBALL-RECORD-OUT
               AFTER ADVANCING 2
           MOVE 3 TO LINES-PRINTED.
Votto               NL CIN   354 121
McCutchen           NL PIT   569 190
Posey               NL SF    510 169
Frandsen            NL PHI   169 056
Lucroy              NL MIL   299 098
Ruiz                NL PHI   351 114
Molina              NL STL   487 156
Braun               NL MIL   572 182
Young               NL COL   174 055
Pierre              NL PHI   383 120
Ruggiano            NL MIA   288 090
Pacheco             NL COL   449 138
Wright              NL NYM   560 172
Craig               NL STL   447 137
Prado               NL ATL   599 183
Scutaro             NL SF    600 183
Werth               NL WSH   276 084
Kemp                NL LAD   378 115
Gonzalez            NL COL   518 157
Bloomquist          NL ARI   324 098
Cruz                NL LAD   255 077
Hill                NL ARI   578 174
Jay                 NL STL   422 127
Fowler              NL COL   454 136
Nelson              NL COL   324 097
Carpenter           NL STL   284 085
Ramirez             NL MIL   551 164
Desmond             NL WSH   489 145
Freese              NL STL   490 145
Tejada              NL NYM   433 128
Jones               NL ATL   370 109
Solano              NL MIA   258 076
Holliday            NL STL   582 171
Johnson             NL ATL   259 076
LeMahieu            NL COL   208 061
Denorfia            NL SD    324 095
Montero             NL ARI   468 137
Altuve              NL HOU   561 164
Murphy              NL NYM   544 159
Colvin              NL COL   396 115
Castillo            NL CHC   155 045
Pagan               NL SF    583 169
Bernadina           NL WSH   221 064
Dobbs               NL MIA   311 090
Aoki                NL MIL   491 142
Rutledge            NL COL   243 070
Sandoval            NL SF    375 108
Goldschmidt         NL ARI   497 143
Reyes               NL MIA   616 177
Tulowitzki          NL COL   181 052
Morse               NL WSH   383 110
Infante             NL MIA   328 094
Zimmerman           NL WSH   554 158
Ethier              NL LAD   531 151
Johnson             NL ARI   476 135
Rizzo               NL CHC   314 089
Stanton             NL MIA   427 121
Headley             NL SD    579 164
Phillips            NL CIN   558 158
Castro              NL CHC   619 175
Hanigan             NL CIN   308 087
Forsythe            NL SD    298 084
Walker              NL PIT   472 132
Schumaker           NL STL   265 074

我尝试将平均值和总平均值变量添加到工作存储中,并为总计创建一个新的工作存储,以及在程序的处理区域中添加算术。下面显示的是正确的布局,简化为一页。

BASEBALL PLAYER STATISTICS         10/09/12    PAGE  3
LEAGUE    TEAM      NAME                  HITS         AT BATS      AVERAGE
NL        WSH       Zimmerman              158             554         .285
NL        LAD       Ethier                 151             531         .284
NL        ARI       Johnson                135             476         .284
NL        CHC       Rizzo                   89             314         .283
NL        MIA       Stanton                121             427         .283
NL        SD        Headley                164             579         .283
NL        CIN       Phillips               158             558         .283
NL        CHC       Castro                 175             619         .283
NL        CIN       Hanigan                 87             308         .282
NL        SD        Forsythe                84             298         .282
NL        PIT       Walker                 132             472         .280
NL        STL       Schumaker               74             265         .279
TOTALS                                   7,851          26,342         .298
cobol
© www.soinside.com 2019 - 2024. All rights reserved.