问题描述
这个程序有一个 SEQ 文件,它可以读取并假设绕过所有毕业 (Y) 的学生,如果班级成绩不是一年级或二年级(1 或 2),并且如果他们的专业是不是编程 (pgm)、数字媒体 (DIG) 或网络安全 (nes)。我的程序也应该进行计算,但目前我只是想将数据打印到 RPT 文件中。它还假设格式化社会安全号码(如 XXX-XX-XXXX)。格式学生姓名:First Initial Middle Initial Last Name(如 A B brown)然后打印 First Yr 或 Second Yr。接下来,专业是什么。然后是多少小时,积分,并计算并显示他们的GPA。
Column Field Type / Format
01-09 Social Security Number Alphanumeric
(no dashes in data file)
10-21 Student Name Alphanumeric
(first initial,middle initial,last name --- no spaces between these items in data file)
26 Graduation Status Alphanumeric
(Y = student has graduated --- and other values of Graduation Status)
27 Class Standing Alphanumeric
(1 = first-year,2 = second-year --- and other values of Class Standing)
28-30 Major Alphanumeric
(pgm,DIG,nes --- and other values of Major)
(pgm = Programming,DIG = Digital Media,and nes = Network Security)
31-33 Credit Hours Earned Numeric,no decimals
34-36 Credit Points Earned Numeric,no decimals
当前程序:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENTS-FILE-IN
ASSIGN TO 'STUDENTS.SEQ'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT STUDENTS-FILE-OUT
ASSIGN TO 'STUDENTS.RPT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD STUDENTS-FILE-IN.
01 STUDENTS-RECORD-IN.
05 SOCIAL-Security-NUMBER-IN PIC X(9).
05 STUDENT-NAME-IN PIC X(12).
05 PIC X(4).
05 GRADUATION-STATUS-IN PIC X.
05 CLASS-STANDING-IN PIC X.
05 MAJOR-IN PIC X(3).
05 CREDIT-HOURS-EARNED-IN PIC 9(3).
05 CREDIT-POINTS-EARNED-IN PIC 9(3).
FD STUDENTS-FILE-OUT.
01 STUDENTS-RECORD-OUT PIC X(80).
WORKING-STORAGE SECTION.
01 ARE-THERE-MORE-RECORDS PIC X(3) VALUE 'YES'.
01 LInes-PRINTED PIC 99 VALUE 99.
01 PAGE-NUMBER PIC 99 VALUE ZERO.
01 WS-FirsT-TIME-THRU PIC X(3) VALUE 'YES'.
01 WS-GRAND-HOURS PIC 9(3) VALUE ZERO.
01 WS-GRAND-POINTS PIC 9(3) VALUE ZERO.
01 WS-GRAND-GPA PIC Z.ZZ VALUE ZERO.
01 WS-PRO-STUDENT PIC ZZ VALUE ZERO.
01 WS-PRO-GPA-NUM PIC ZZ VALUE ZERO.
01 WS-PRO-GPA-PER PIC ZZ.Z VALUE ZERO.
01 WS-DIG-STUDENT PIC ZZ VALUE ZERO.
01 WS-DIG-GPA-NUM PIC ZZ VALUE ZERO.
01 WS-DIG-GPA-PER PIC ZZ.Z VALUE ZERO.
01 WS-nes-STUDENT PIC ZZ VALUE ZERO.
01 WS-nes-GPA-NUM PIC ZZ VALUE ZERO.
01 WS-PRO-GPA-PER PIC ZZ.Z VALUE ZERO.
01 WS-CURRENT-DATE-DATA.
05 WS-CURRENT-DATE.
10 RUN-YEAR PIC XX.
10 RUN-MONTH PIC XX.
10 RUN-DAY PIC XX.
01 heading-LINE-1.
05 PIC X(22) VALUE SPACES.
05 PIC X(33) VALUE '------ ----- ------- ----- ------'.
05 PIC X(6) VALUE SPACES.
05 HL-1-DATE.
10 MONTH-2 PIC XX.
10 PIC X VALUE'/'.
10 DAY-2 PIC XX.
10 PIC X VALUE'/'.
10 YEAR-2 PIC XX.
05 PIC X(4) VALUE SPACES.
05 PIC X(4) VALUE 'PAGE'.
05 HL-1-PAGE-NUMBER PIC Z9.
01 heading-LINE-2.
05 PIC X VALUE SPACE.
05 PIC X(10) VALUE 'SOC SEC NO'.
05 PIC X(4) VALUE SPACES.
05 PIC X(12) VALUE 'STUDENT NAME'.
05 PIC X(3) VALUE SPACES.
05 PIC X(8) VALUE 'STANDING'.
05 PIC X(4) VALUE SPACES.
05 PIC X(5) VALUE 'MAJOR'.
05 PIC X(10) VALUE SPACES.
05 PIC X(5) VALUE 'HOURS'.
05 PIC X(2) VALUE SPACES.
05 PIC X(6) VALUE 'POINTS'.
05 PIC X(5) VALUE SPACES.
05 PIC X(3) VALUE 'GPA'.
01 DETAIL-LINE.
05 PIC X VALUE SPACE.
05 SOCIAL-Security-NUMBER-OUT PIC X(11).
05 SSN-FirsT PIC X(3).
05 SSN-FDASH PIC X VALUE "-".
05 SSN-MIDDLE PIC X(02).
05 SSN-MDASH PIC X VALUE "-".
05 SSN-LAST PIC X(04).
05 PIC X(3) VALUE SPACES.
05 STUDENT-NAME-OUT PIC X(13).
05 FNAME PIC X.
05 PIC X VALUE SPACE.
05 MNAME PIC X.
05 PIC X VALUE SPACE.
05 LNAME PIC X(9).
05 STANDING-OUT PIC X(9).
05 PIC X(3) VALUE SPACES.
05 MAJOR-OUT PIC X(13).
05 PIC X(4) VALUE SPACES.
05 HOURS-OUT PIC X(2).
05 PIC X(5) VALUE SPACES.
05 POINTS-OUT PIC X(3).
05 PIC X(4) VALUE SPACES.
05 STUDENT-GPA-OUT PIC 9.99.
01 TOTALS-LINE.
05 PIC X VALUE SPACE.
05 PIC X(6) VALUE 'TOTALS'.
05 PIC X(50) VALUE SPACES.
05 TL-GRAND-HOURS PIC Z,ZZZ.
05 PIC X(2) VALUE SPACES.
05 TL-GRAND-POINTS PIC ZZ,ZZZ.
05 PIC X(4) VALUE SPACES.
05 TL-GRAND-GPA PIC 9.99.
01 TOTALS-LINE-2A.
05 PIC X VALUE SPACE.
05 PIC X(19) VALUE 'PROGRAMMING MAJORS:'.
01 TOTALS-LINE-2B.
05 PIC X(5) VALUE SPACES.
05 PIC X(18) VALUE 'NUMBER OF STUDENTS'.
05 PIC X(9) VALUE SPACES.
05 TL-GRAND-PRO-STUDENT PIC X(2).
01 TOTALS-LINE-2C.
05 PIC X(5) VALUE SPACES.
05 PIC X(21) VALUE 'NUMBER WITH GPA > 3.0'.
05 PIC X(7) VALUE SPACES.
05 TL-GRAND-PRO-NUM-GPA PIC X.
01 TOTALS-LINE-2D.
05 PIC X(5) VALUE SPACES.
05 PIC X(22) VALUE 'PERCENT WITH GPA > 3.0'.
05 PIC X(5) VALUE SPACES.
05 TL-GRAND-PRO-GPA-PER PIC ZZ.9.
01 TOTALS-LINE-3A.
05 PIC X VALUE SPACE.
05 PIC X(21) VALUE 'DIGITAL MEDIA MAJORS:'.
01 TOTALS-LINE-3B.
05 PIC X(5) VALUE SPACES.
05 PIC X(18) VALUE 'NUMBER OF STUDENTS'.
05 PIC X(9) VALUE SPACES.
05 TL-GRAND-DIG-STUDENT PIC X(2).
01 TOTALS-LINE-3C.
05 PIC X(5) VALUE SPACES.
05 PIC X(21) VALUE 'NUMBER WITH GPA > 3.0'.
05 PIC X(7) VALUE SPACES.
05 TL-GRAND-DIG-NUM-GPA PIC X.
01 TOTALS-LINE-3D.
05 PIC X(5) VALUE SPACES.
05 PIC X(22) VALUE 'PERCENT WITH GPA > 3.0'.
05 PIC X(5) VALUE SPACES.
05 TL-GRAND-DIG-GPA-PER PIC ZZ.9.
01 TOTALS-LINE-4A.
05 PIC X VALUE SPACE.
05 PIC X(24) VALUE 'NETWORK Security MAJORS:'.
01 TOTALS-LINE-4B.
05 PIC X(5) VALUE SPACES.
05 PIC X(18) VALUE 'NUMBER OF STUDENTS'.
05 PIC X(9) VALUE SPACES.
05 TL-GRAND-NET-STUDENT PIC X(2).
01 TOTALS-LINE-4C.
05 PIC X(5) VALUE SPACES.
05 PIC X(21) VALUE 'NUMBER WITH GPA > 3.0'.
05 PIC X(7) VALUE SPACES.
05 TL-GRAND-NET-NUM-GPA PIC X.
01 TOTALS-LINE-4D.
05 PIC X(5) VALUE SPACES.
05 PIC X(22) VALUE 'PERCENT WITH GPA > 3.0'.
05 PIC X(5) VALUE SPACES.
05 TL-GRAND-NET-GPA-PER PIC ZZ.9.
PROCEDURE DIVISION.
100-MAIN.
OPEN INPUT STUDENTS-FILE-IN
OPEN OUTPUT STUDENTS-FILE-OUT
ACCEPT WS-CURRENT-DATE FROM DATE
MOVE RUN-MONTH TO MONTH-2
MOVE RUN-DAY TO DAY-2
MOVE RUN-YEAR TO YEAR-2
PERFORM 300-WRITE-headingS
PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO'
READ STUDENTS-FILE-IN
AT END
PERFORM 400-TOTALS-ROUTINE
MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
NOT AT END
PERFORM 200-PROCESS-ONE-RECORD
END-READ
END-PERFORM
CLOSE STUDENTS-FILE-IN
CLOSE STUDENTS-FILE-OUT
STOP RUN.
200-PROCESS-ONE-RECORD.
IF LInes-PRINTED > 53
PERFORM 300-WRITE-headingS
END-IF
IF GRADUATION-STATUS-IN IS NOT EQUAL TO 'Y'
CONTINUE
IF CLASS-STANDING-IN IS EQUAL TO '1' OR '2'
CONTINUE
IF MAJOR-IN IS EQUAL TO 'pgm' OR 'nes' OR 'DIG'
END-IF
MOVE SOCIAL-Security-NUMBER-IN TO SOCIAL-Security-NUMBER-OUT
MOVE STUDENT-NAME-IN TO STUDENT-NAME-OUT
IF CLASS-STANDING-IN IS EQUAL TO '1'
MOVE 'First Yr' TO STANDING-OUT
IF CLASS-STANDING-IN IS EQUAL TO '2'
MOVE 'Second Yr' TO STANDING-OUT
END-IF
IF MAJOR-IN IS EQUAL TO 'pgm'
MOVE 'Programming' TO MAJOR-OUT
IF MAJOR-IN IS EQUAL TO 'nes'
MOVE 'Net Security' TO MAJOR-OUT
IF MAJOR-IN IS EQUAL TO 'DIG'
MOVE 'Digital Media' TO MAJOR-OUT
END-IF
MOVE CREDIT-HOURS-EARNED-IN TO HOURS-OUT
MOVE CREDIT-POINTS-EARNED-IN TO POINTS-OUT
MOVE DETAIL-LINE TO STUDENTS-RECORD-OUT
WRITE STUDENTS-RECORD-OUT
AFTER ADVANCING 2 LInes
ADD 2 TO LInes-PRINTED
COmpuTE WS-GRAND-HOURS = WS-GRAND-HOURS + CREDIT-HOURS-EARNED-IN
COmpuTE WS-GRAND-POINTS = WS-GRAND-POINTS + CREDIT-POINTS-EARNED-IN
COmpuTE WS-GRAND-GPA ROUNDED = WS-GRAND-HOURS / WS-GRAND-POINTS.
300-WRITE-headingS.
ADD 1 TO PAGE-NUMBER
MOVE PAGE-NUMBER TO HL-1-PAGE-NUMBER
MOVE heading-LINE-1 TO STUDENTS-RECORD-OUT
IF WS-FirsT-TIME-THRU = 'YES'
WRITE STUDENTS-RECORD-OUT
MOVE 'NO' TO WS-FirsT-TIME-THRU
ELSE
WRITE STUDENTS-RECORD-OUT AFTER ADVANCING PAGE
END-IF
MOVE heading-LINE-2 TO STUDENTS-RECORD-OUT
WRITE STUDENTS-RECORD-OUT
AFTER ADVANCING 1
MOVE 3 TO LInes-PRINTED.
400-TOTALS-ROUTINE.
IF LInes-PRINTED > 53
PERFORM 300-WRITE-headingS
END-IF
MOVE WS-GRAND-HOURS TO TL-GRAND-HOURS
MOVE WS-GRAND-POINTS TO TL-GRAND-POINTS
MOVE WS-GRAND-GPA TO TL-GRAND-GPA
MOVE TOTALS-LINE TO STUDENTS-RECORD-OUT
WRITE STUDENTS-RECORD-OUT AFTER ADVANCING 3 LInes
ADD 2 TO LInes-PRINTED.
------ ----- ------- ----- ------ 03/03/21 PAGE 1
SOC SEC NO STUDENT NAME STANDING MAJOR HOURS POINTS GPA
TOTALS 0.00
需要 RPT 文件需要打印如下:
------ ----- ------- ----- ------ 03/03/21 PAGE 1
SOC SEC NO STUDENT NAME STANDING MAJOR HOURS POINTS GPA
377-65-8797 M J Abbott First Yr Digital Media 21 70 3.33
445-90-3241 J C Armour Second Yr Programming 59 140 2.37
877-39-5401 K F Ault First Yr Net Security 44 132 3.00
980-44-3254 R L Bishop First Yr Net Security 20 62 3.10
307-54-8872 D R Boyer Second Yr Digital Media 55 168 3.05
345-21-3465 R D Byers First Yr Net Security 10 24 2.40
659-87-6655 S A Campbell Second Yr Programming 66 180 2.73
907-88-3271 D E copeland Second Yr Net Security 67 202 3.01
387-78-9843 K D Curtis Second Yr Programming 55 160 2.91
887-65-8341 R M Davis First Yr Programming 40 119 2.98
477-80-9325 D P Donaldson First Yr Digital Media 5 12 2.40
207-55-9801 A L Duffy First Yr Net Security 23 75 3.26
399-82-3781 A F Edwards Second Yr Net Security 66 261 3.95
345-32-1092 M L Evans Second Yr Digital Media 70 201 2.87
768-43-2214 W S Ewing First Yr Programming 21 44 2.10
335-76-9801 A C Farkas Second Yr Programming 80 241 3.01
555-87-9214 T E Frail First Yr Digital Media 1 3 3.00
609-95-4386 R L Fuller Second Yr Net Security 88 352 4.00
872-11-9903 J M Garcia Second Yr Digital Media 65 190 2.92
847-64-3902 R S Gordon First Yr Programming 5 17 3.40
675-50-9821 S L Guthrie First Yr Programming 22 88 4.00
226-54-7855 R L Hartman First Yr Net Security 111 440 3.96
448-82-3177 G C Hill Second Yr Programming 87 169 1.94
598-87-3240 W E Hyde Second Yr Programming 55 159 2.89
389-55-7430 H P Ickes First Yr Net Security 18 56 3.11
499-08-7112 D L Imler Second Yr Net Security 74 209 2.82
299-00-6573 R D Isley First Yr Digital Media 10 39 3.90
776-04-4879 H L Jackson First Yr Digital Media 42 108 2.57
899-01-2845 K M Joseph Second Yr Programming 88 260 2.95
176-59-0831 D L Justice Second Yr Digital Media 76 230 3.03
769-94-1659 F D Kahle Second Yr Digital Media 79 240 3.04
307-98-5332 E S Kirk First Yr Programming 9 16 1.78
387-95-6422 D A Koch Second Yr Net Security 63 222 3.52
822-43-8009 S R Laman Second Yr Net Security 80 240 3.00
078-96-5516 C J Lott First Yr Programming 9 30 3.33
188-64-3487 P T Lyons First Yr Programming 45 136 3.02
307-88-4251 J A McDonnell First Yr Net Security 9 28 3.11
598-77-4365 S B Miller Second Yr Digital Media 86 249 2.90
218-87-9563 L R Nickles First Yr Net Security 44 144 3.27
345-90-1226 R J Nunn First Yr Programming 32 99 3.09
465-58-9021 R T O'Brien Second Yr Digital Media 88 352 4.00
774-65-8832 D E Osborne Second Yr Digital Media 76 228 3.00
489-97-6092 R V Parent Second Yr Net Security 66 200 3.03
783-22-5185 D W Price Second Yr Programming 78 228 2.92
999-04-7621 S D Queen First Yr Programming 20 60 3.00
836-61-9047 N C Quinn First Yr Digital Media 44 133 3.02
657-73-2064 D W Rabe Second Yr Digital Media 99 381 3.85
227-68-9014 D L Robinson First Yr Programming 38 113 2.97
376-65-9081 L A Smith Second Yr Net Security 112 336 3.00
117-98-0236 J I Taylor First Yr Net Security 42 127 3.02
988-72-5701 L R Truman Second Yr Programming 100 380 3.80
430-95-7205 N H Underwood Second Yr Net Security 98 392 4.00
RHODES STATE COLLEGE GRADE REPORT 10/11/12 PAGE 2
SOC SEC NO STUDENT NAME STANDING MAJOR HOURS POINTS GPA
309-44-7620 L J Uzelac First Yr Programming 23 72 3.13
467-09-8853 C A Valenti First Yr Programming 10 10 1.00
988-32-0851 H E Vorhees Second Yr Net Security 21 68 3.24
598-83-2016 C L Wagner First Yr Digital Media 29 88 3.03
699-38-7440 L S Wood Second Yr Net Security 60 177 2.95
499-02-1987 J A Yant First Yr Net Security 42 127 3.02
399-78-0041 R E Young Second Yr Digital Media 111 333 3.00
498-37-6022 R J Zellers Second Yr Digital Media 90 360 4.00
984-00-2164 R T Zuber Second Yr Programming 88 266 3.02
Totals 3,235 10,246 3.17
Programming Majors:
Number of students 22
Number with GPA > 3.0 9
Percent with GPA > 3.0 40.9%
Digital Media Majors:
Number of students 18
Number with GPA > 3.0 10
Percent with GPA > 3.0 55.6%
Network Security Majors:
Number of students 21
Number with GPA > 3.0 15
Percent with GPA > 3.0 71.4%
序列文件:
675509821SLGuthrie 1pgm022088
226547855RLHartman 1nes111440
448823177GCHill 2pgm087169
598873240WEHyde 2pgm055159
389557430HPIckes 1nes018056
499087112DLImler 2nes074209
299006573Rdisley 1DIG010039
776044879HLJackson X1DIG042108
899012845KMJoseph 2pgm088260
176590831DLJustice 2DIG076230
769941659FDKahle 2DIG079240
307985332ESKirk 1pgm009016
387956422DAKoch 2nes063222
822438009SRLaman 2nes080240
409875621KRLester DIG065190
078965516CJLott 1pgm009030
188643487PTLyons 1pgm045136
307884251JAMcDonnell 1nes009028
598774365SBMiller 2DIG086249
218879563LRNickles 1nes044144
345901226RJNunn 1pgm032099
465589021RTO'Brien 2DIG088352
774658832DEOsborne 2DIG076228
489976092RVParent 2nes066200
783225185DWPrice 2pgm078228
999047621SDQueen 1pgm020060
836619047NCQuinn 1DIG044133
657732064DWRabe 2DIG099381
227689014DLRobinson 1pgm038113
848769033PBSadler 1COR008030
376659081LASmith 2nes112336
117980236JITaylor 1nes042127
988725701LRTruman 2pgm100380
430957205NHUnderwood 2nes098392
309447620LJUzelac 1pgm023072
467098853CAValenti 1pgm010010
988320851HEVorhees 2nes021068
598832016CLWagner 1DIG029088
699387440LSWood 2nes060177
499021987JAYant 1nes042127
399780041REYoung 2DIG111333
498376022RJZellers 2DIG090360
231442095JBZink 0pgm090360
984002164RTZuber 2pgm088266
解决方法
在 Cobol 中,if
语句必须显式地以 end-if
或 .
所以
IF MAJOR-IN IS EQUAL TO 'PGM'
MOVE 'Programming' TO MAJOR-OUT
IF MAJOR-IN IS EQUAL TO 'NES'
MOVE 'Net Security' TO MAJOR-OUT
IF MAJOR-IN IS EQUAL TO 'DIG'
MOVE 'Digital Media' TO MAJOR-OUT
END-IF
MOVE CREDIT-HOURS-EARNED-IN TO HOURS-OUT
MOVE CREDIT-POINTS-EARNED-IN TO POINTS-OUT
MOVE DETAIL-LINE TO STUDENTS-RECORD-OUT
WRITE STUDENTS-RECORD-OUT
AFTER ADVANCING 2 LINES
ADD 2 TO LINES-PRINTED
适当缩进是
IF MAJOR-IN IS EQUAL TO 'PGM'
MOVE 'Programming' TO MAJOR-OUT
IF MAJOR-IN IS EQUAL TO 'NES'
MOVE 'Net Security' TO MAJOR-OUT
IF MAJOR-IN IS EQUAL TO 'DIG'
MOVE 'Digital Media' TO MAJOR-OUT
END-IF
MOVE CREDIT-HOURS-EARNED-IN TO HOURS-OUT
MOVE CREDIT-POINTS-EARNED-IN TO POINTS-OUT
MOVE DETAIL-LINE TO STUDENTS-RECORD-OUT
WRITE STUDENTS-RECORD-OUT
AFTER ADVANCING 2 LINES
student record
的唯一写法是如果
同时 MAJOR-IN = 'PGM' 和 MAJOR-IN = 'NES' 这是不可能的,所以什么也没写。
这只是程序中的一个问题,我会让你在整个程序中应用类似的修复
还有 CONTINUE
意味着什么都不做,所以在编写的这段代码中毫无意义
IF GRADUATION-STATUS-IN IS NOT EQUAL TO 'Y'
CONTINUE
IF CLASS-STANDING-IN IS EQUAL TO '1' OR '2'
CONTINUE
IF MAJOR-IN IS EQUAL TO 'PGM' OR 'NES' OR 'DIG'
END-IF
找出您希望代码执行的操作并修复它。