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