cobol 报表制作1

实验目的

熟悉COBOL报表的制作方法。

熟悉数值编辑型的使用方法

实验要求

按照提示完成报表程序

参考修改的程序,完成新的报表程序

实验过程

l 修改源程序,使之正常运行
a) 源程序修改后为
 
 
000100 IDENTIFICATION DIVISION.
 
 
000200*
 
 
000300 PROGRAM-ID. RPT1000X.
 
 
000400******************************************************************
 
 
000500* Correct the errors and recompile until you get a clean compile.*
 
 
000600* You should be able to *
 
 
000700* do that without much trouble. *
 
 
000800******************************************************************
 
 
000900*
 
 
001000 ENVIRONMENT DIVISION.
 
 
001100*
 
 
001200 INPUT-OUTPUT SECTION.
 
 
001300*
 
 
001400 FILE-CONTROL.
 
 
001500*
 
 
001600 SELECT CUSTMAST ASSIGN TO CUSTMAST.
 
 
001700 SELECT SALESRPT ASSIGN TO SALESRPT.
 
 
001800*
 
 
001900 DATA DIVISION.
 
 
002000*
 
 
002100 FILE SECTION.
 
 
002200*
 
 
002300 FD CUSTMAST.
 
 
002400*
 
 
002500 01 CUSTOMER-MASTER-RECORD.
 
 
002600 05 CM-BRANCH-NUMBER PIC 9(2).
 
 
002700 05 CM-SALESREP-NUMBER PIC 9(2).
 
 
002800 05 CM-CUSTOMER-NUMBER PIC 9(5).
 
 
002900 05 CM-CUSTOMER-NAME PIC X(20).
 
 
003000 05 CM-SALES-THIS-YTD PIC S9(5)V9(2).
 
 
003100 05 CM-SALES-LAST-YTD PIC S9(5)V9(2).
 
 
003200 05 FILLER PIC X(37).
 
 
003300*
 
 
003400 FD SALESRPT.
 
 
003500*
 
 
003600 01 PRINT-AREA PIC X(132).
 
 
003700*
 
 
003800 WORKING-STORAGE SECTION.
 
 
003900*
 
 
004000 01 SWITCHES.
 
 
004100 05 CUSTMAST-EOF-SWITCH PIC X VALUE "N".
 
 
004200*
 
 
004300 01 PRINT-FIELDS.
 
 
004400 05 PAGE-COUNT PIC S9(3) VALUE ZERO.
 
 
004500 05 LINES-ON-PAGE PIC S9(3) VALUE +55.
 
 
004600 05 LINE-COUNT PIC S9(3) VALUE +99.
 
 
004700 05 SPACE-CONTROL PIC S9.
 
 
004800*
 
 
004900 01 TOTAL-FIELDS.
 
 
005000 05 GRAND-TOTAL-THIS-YTD PIC S9(7)V99 VALUE ZERO.
 
 
005100 05 GRAND-TOTAL-LAST-YTD PIC S9(7)V99 VALUE ZERO.
 
 
005200*
 
 
005300 01 CURRENT-DATE-AND-TIME.
 
 
005400 05 CD-YEAR PIC 9999.
 
 
005500 05 CD-MONTH PIC 99.
 
 
005600 05 CD-DAY PIC 99.
 
 
005700 05 CD-HOURS PIC 99.
 
 
005800 05 CD-MINUTES PIC 99.
 
 
005900 05 FILLER PIC X(9).
 
 
006000*
 
 
006100 01 HEADING-LINE-1.
 
 
006200 05 FILLER PIC X(7) VALUE "DATE: ".
 
 
006300 05 HL1-MONTH PIC 9(2).
 
 
006400 05 FILLER PIC X(2) VALUE "/".
 
 
006500 05 HL1-DAY PIC 9(2).
 
 
006600 05 FILLER PIC X(1) VALUE "/".
 
 
006700 05 HL1-YEAR PIC 9(4).
 
 
006800 05 FILLER PIC X(11) VALUE SPACE.
 
 
006900 05 FILLER PIC X(20) VALUE "YEAR-TO-DATE SALES R".
 
 
007000 05 FILLER PIC X(20) VALUE "EPORT ".
 
 
007100 05 FILLER PIC X(8) VALUE " PAGE: ".
 
 
007200 05 Hl1-PAGE-NUMBER PIC ZZZ9.
 
 
007300 05 FILLER PIC X(52) VALUE SPACE.
 
 
007400*
 
 
007500 01 HEADING-LINE-2.
 
 
007600 05 FILLER PIC X(7) VALUE "TIME: ".
 
 
007700 05 HL2-HOURS PIC 9(2).
 
 
007800 05 FILLER PIC X(1) VALUE ":".
 
 
007900 05 HL2-MINUTES PIC 9(2).
 
 
008000 05 FILLER PIC X(58) VALUE SPACE.
 
 
008100 05 FILLER PIC X(10) VALUE "RPT1000".
 
 
008200 05 FILLER PIC X(52) VALUE SPACE.
 
 
008300*
 
 
008400 01 HEADING-LINE-3.
 
 
008500 05 FILLER PIC X(20) VALUE "CUST ".
 
 
008600 05 FILLER PIC X(20) VALUE " SALES ".
 
 
008700 05 FILLER PIC X(20) VALUE " SALES ".
 
 
008800 05 FILLER PIC X(72) VALUE SPACE.
 
 
008900*
 
 
009000 01 HEADING-LINE-4.
 
 
009100 05 FILLER PIC X(20) VALUE "NUM CUSTOMER NAME".
 
 
009200 05 FILLER PIC X(20) VALUE " THIS YTD ".
 
 
009300 05 FILLER PIC X(20) VALUE " LAST YTD ".
 
 
009400 05 FILLER PIC X(72) VALUE SPACE.
 
 
009500*
 
 
009600 01 CUSTOMER-LINE.
 
 
009700 05 CL-CUSTOMER-NUMBER PIC X(5).
 
 
009800 05 FILLER PIC X(2) VALUE SPACE.
 
 
009900 05 CL-CUSTOMER-NAME PIC X(20).
 
 
010000 05 FILLER PIC X(3) VALUE SPACE.
 
 
010100 05 CL-SALES-THIS-YTD PIC Z,ZZ9.99-.
 
 
010200 05 FILLER PIC X(4) VALUE SPACE.
 
 
010300 05 CL-SALES-LAST-YTD PIC ZZ,ZZ9.99-.
 
 
010400 05 FILLER PIC X(78) VALUE SPACE.
 
 
010500*
 
 
010600 01 GRAND-TOTAL-LINE.
 
 
010700 05 FILLER PIC X(27) VALUE SPACE.
 
 
010800 05 GTL-SALES-THIS-YTD PIC Z,ZZZ,ZZ9.99-.
 
 
010900 05 FILLER PIC X(1) VALUE SPACE.
 
 
011000 05 GTL-SALES-LAST-YTD PIC Z,ZZZ,ZZ9.99-.
 
 
011100 05 FILLER PIC X(78) VALUE SPACE.
 
 
011200*
 
 
011300 PROCEDURE DIVISION.
 
 
011400*
 
 
011500 000-PREPARE-SALES-REPORT.
 
 
011600*
 
 
011700 OPEN INPUT CUSTMAST
 
 
011800 OUTPUT SALESRPT.
 
 
011900 PERFORM 100-FORMAT-REPORT-HEADING.
 
 
012000 PERFORM 200-PREPARE-SALES-LINES
 
 
012100 UNTIL CUSTMAST-EOF-SWITCH = "Y".
 
 
012200 PERFORM 300-PRINT-GRAND-TOTALS.
 
 
012300 CLOSE CUSTMAST
 
 
012400 SALESRPT.
 
 
012500 STOP RUN.
 
 
012600*
 
 
012700 100-FORMAT-REPORT-HEADING.
 
 
012800*
 
 
012900 MOVE function CURRENT-DATE tO CURRENT-DATE-AND-TIME.
 
 
013000 MOVE CD-MONTH TO HL1-MONTH.
 
 
013100 MOVE CD-DAY TO HL1-DAY.
 
 
013200 MOVE CD-YEAR TO HL1-YEAR.
 
 
013300 MOVE CD-HOURS TO HL2-HOURS.
 
 
013400 MOVE CD-MINUTES TO HL2-MINUTES.
 
 
013500
 
 
013600 200-PREPARE-SALES-LINES.
 
 
013700*
 
 
013800 PERFORM 210-READ-CUSTOMER-RECORD.
 
 
013900 IF CUSTMAST-EOF-SWITCH = "N"
 
 
014000 PERFORM 220-PRINT-CUSTOMER-LINE.
 
 
014100*
 
 
014200 210-READ-CUSTOMER-RECORD.
 
 
014300*
 
 
014400 READ CUSTMAST
 
 
014500 AT END
 
 
014600 MOVE "Y" TO CUSTMAST-EOF-SWITCH.
 
 
014700*
 
 
014800 220-PRINT-CUSTOMER-LINE.
 
 
014900*
 
 
015000 IF LINE-COUNT >= LINES-ON-PAGE
 
 
015100 PERFORM 230-PRINT-HEADING-LINES.
 
 
015200 MOVE CM-CUSTOMER-NUMBER TO CL-CUSTOMER-NUMBER.
 
 
015300 MOVE CM-CUSTOMER-NUMBER TO CL-CUSTOMER-NAME.
 
 
015400 MOVE CM-SALES-THIS-YTD TO CL-SALES-THIS-YTD.
 
 
015500 MOVE CM-SALES-LAST-YTD TO CL-SALES-LAST-YTD.
 
 
015600 MOVE CUSTOMER-LINE TO PRINT-AREA.
 
 
015700 WRITE PRINT-AREA AFTER ADVANCING SPACE-CONTROL LINES.
 
 
015800 ADD 1 TO LINE-COUNT.
 
 
015900 ADD CM-SALES-THIS-YTD TO GRAND-TOTAL-THIS-YTD.
 
 
016000 ADD CM-SALES-LAST-YTD TO GRAND-TOTAL-LAST-YTD.
 
 
016100*
 
 
016200 230-PRINT-HEADING-LINES.
 
 
016300*
 
 
016400 ADD 1 TO PAGE-COUNT.
 
 
016500 MOVE PAGE-COUNT TO HL1-PAGE-NUMBER.
 
 
016600 MOVE HEADING-LINE-1 TO PRINT-AREA.
 
 
016700 WRITE PRINT-AREA AFTER ADVANCING PAGE.
 
 
016800 MOVE HEADING-LINE-2 TO PRINT-AREA.
 
 
016900 WRITE PRINT-AREA AFTER ADVANCING 1 LINES.
 
 
017000 MOVE HEADING-LINE-3 TO PRINT-AREA.
 
 
017100 WRITE PRINT-AREA AFTER ADVANCING 2 LINES.
 
 
017200 MOVE HEADING-LINE-4 TO PRINT-AREA.
 
 
017300 WRITE PRINT-AREA AFTER ADVANCING 1 LINES.
 
 
017400 MOVE ZERO TO LINE-COUNT.
 
 
017500 MOVE 2 TO SPACE-CONTROL.
 
 
017600*
 
 
017700 300-PRINT-GRAND-TOTALS.
 
 
017800*
 
 
017900 MOVE GRAND-TOTAL-THIS-YTD TO GTL-SALES-THIS-YTD.
 
 
018000 MOVE GRAND-TOTAL-LAST-YTD TO GTL-SALES-LAST-YTD.
 
 
018100 MOVE GRAND-TOTAL-LINE TO PRINT-AREA.
 
 
018200 WRITE PRINT-AREA AFTER ADVANCING 2 LINES.
 
 
 
 
b) 输出的结果为

1DATE: 04/ 12/2012 YEAR-TO-DATE SALES REPORT PAGE: 1

TIME: 09:05 RPT1000

0CUST SALES SALES

NUM CUSTOMER NAME THIS YTD LAST YTD

011111 11111 1,234.56 1,111.11

012345 12345 2,345.67 22,222.22

022222 22222 4,545.00 0.00

034567 34567 111.11 0.00

055555 55555 0.00 1,000.00

000111 00111 4,099.00 19,930.00

033333 33333 6,396.35 4,462.88

012121 12121 1,444.00 11,059.26

024680 24680 7,481.45 11,892.47

099999 99999 5,059.00 4,621.95

076543 76543 2,383.46 4,435.26

0 115,099.60 80,735.15

c) 小结

注意在程序中“.”的使用, 如果是有显式结束的语句要用显式结束的语句!!

l 编写报表程序输出变量
a) 源程序
 
 
000100 IDENTIFICATION DIVISION.
 
 
000200 PROGRAM-ID. REPRT11.
 
 
000300 AUTHOR.MARTIN.
 
 
000400*
 
 
000500 ENVIRONMENT DIVISION.
 
 
000600*
 
 
000700 INPUT-OUTPUT SECTION.
 
 
000800 FILE-CONTROL.
 
 
000900 SELECT INPUT-DATA ASSIGN TO REPORTIN.
 
 
001000 SELECT OUTPUT-DATA ASSIGN TO REPRTOUT.
 
 
001100*
 
 
001200 DATA DIVISION.
 
 
001300*
 
 
001400 FILE SECTION.
 
 
001500*
 
 
001600 FD INPUT-DATA.
 
 
001700 01 INPUT-RECORD.
 
 
001800 05 FILLER PIC X.
 
 
001900 05 ACCOUNT-NUMBER PIC X(5).
 
 
002000 05 FILLER PIC X.
 
 
002100 05 AMOUNT PIC 9(5)V99.
 
 
002200 05 FILLER PIC X(66).
 
 
002300 FD OUTPUT-DATA.
 
 
002400 01 OUTPUT-RECORD PIC X(133).
 
 
002500*
 
 
002600 WORKING-STORAGE SECTION.
 
 
002700*
 
 
002800 77 END-OF-FILE-FLAG PIC X VALUE 'N'.
 
 
002900*
 
 
003000 01 HEAD-HEAD.
 
 
003100 05 FILLER PIC X(13) VALUE SPACE.
 
 
003200 05 HEAD-TITLE PIC X(11) VALUE 'BALANCE DUE'.
 
 
003300 05 FILLER PIC X(109) VALUE SPACE.
 
 
003400*
 
 
003500 01 HEADLINE-ONE.
 
 
003600 05 ACCOUNT-NUMBER-SECTION.
 
 
003700 10 FILLER PIC X(7) VALUE "ACCOUNT".
 
 
003800 05 AMOUNT-SECTION.
 
 
003900 10 FILLER PIC X(3) VALUE SPACE.
 
 
004000 10 FILLER PIC X(6) VALUE "AMOUNT".
 
 
004100 05 DISCOUNT-SECTION.
 
 
004200 10 FILLER PIC X VALUE SPACE.
 
 
004300 10 FILLER PIC X(8) VALUE "DISCOUNT".
 
 
004400 05 NET-AMOUNT-SECTION.
 
 
004500 10 FILLER PIC X(5) VALUE SPACE.
 
 
004600 10 FILLER PIC X(3) VALUE "NET".
 
 
004700 10 FILLER PIC X VALUE SPACE.
 
 
004800 05 FILL-BLANK.
 
 
004900 10 FILLER PIC X(99) VALUE SPACE.
 
 
005000*
 
 
005100 01 HEADLINE-TWO.
 
 
005200 05 ACCOUNT-NUMBER-SECTION.
 
 
005300 10 FILLER PIC X VALUE SPACE.
 
 
005400 10 FILLER PIC X(6) VALUE "NUMBER".
 
 
005500 05 AMOUNT-SECTION.
 
 
005600 10 FILLER PIC X(9) VALUE SPACES.
 
 
005700 05 DISCOUNT-SECTION.
 
 
005800 10 FILLER PIC X(9) VALUE SPACE.
 
 
005900 05 NET-AMOUNT-SECTION.
 
 
006000 10 FILLER PIC X(3) VALUE SPACE.
 
 
006100 10 FILLER PIC X(6) VALUE "AMOUNT".
 
 
006200 05 FILL-BLANK.
 
 
006300 10 FILLER PIC X(99) VALUE SPACE.
 
 
006400*
 
 
006500 01 RECORD-FORMAT.
 
 
006600 05 FILLER PIC X(2) VALUE SPACE.
 
 
006700 05 ACCOUNT-NUMBER PIC X(5) VALUE SPACE.
 
 
006800 05 FILLER PIC X(2) VALUE SPACE.
 
 
006900 05 AMOUNT PIC 9(5)V99 VALUE ZERO.
 
 
007000 05 FILLER PIC X(3) VALUE SPACE.
 
 
007100 05 DISCOUNT PIC 9(4)V99 VALUE ZERO.
 
 
007200 05 FILLER PIC X(2) VALUE SPACE.
 
 
007300 05 NET-AMOUNT PIC 9(5)V99 VALUE ZERO.
 
 
007400 05 FILLER PIC X(99) VALUE SPACE.
 
 
007500*
 
 
007600 01 TOTAL-FORMAT.
 
 
007700 05 FILLER PIC X(6) VALUE "TOTALS".
 
 
007800 05 FILLER PIC X(2) VALUE SPACE.
 
 
007900 05 TOTAL-AMOUNT PIC 9(6)V99 VALUE ZEROS.
 
 
008000 05 FILLER PIC X(2) VALUE SPACE.
 
 
008100 05 TOTAL-DISCOUNT PIC 9(5)V99 VALUE ZEROS.
 
 
008200 05 FILLER PIC X VALUE SPACE.
 
 
008300 05 TOTAL-NET-AMOUNT PIC 9(6)V99 VALUE ZEROS.
 
 
008400 05 FILLER PIC X(90) VALUE SPACE.
 
 
008500*
 
 
008600 77 TEST-DATA PIC 9(5)V99.
 
 
008700 PROCEDURE DIVISION.
 
 
008800*
 
 
008900 000-MAIN.
 
 
009000*
 
 
009100 OPEN INPUT INPUT-DATA
 
 
009200 OUTPUT OUTPUT-DATA.
 
 
009300 PERFORM 100-WRITE-HEADLINE.
 
 
009400 PERFORM 200-READ-AND-WRITE
 
 
009500 UNTIL END-OF-FILE-FLAG = 'Y'.
 
 
009600 PERFORM 300-WRITE-TOTALLINE.
 
 
009700 CLOSE INPUT-DATA OUTPUT-DATA.
 
 
009800 STOP RUN.
 
 
009900*
 
 
010000 100-WRITE-HEADLINE.
 
 
010100*
 
 
010200 MOVE HEAD-HEAD TO OUTPUT-RECORD.
 
 
010300 WRITE OUTPUT-RECORD.
 
 
010400 MOVE HEADLINE-ONE TO OUTPUT-RECORD.
 
 
010500 WRITE OUTPUT-RECORD.
 
 
010600 MOVE HEADLINE-TWO TO OUTPUT-RECORD.
 
 
010700 WRITE OUTPUT-RECORD.
 
 
010800*
 
 
010900 200-READ-AND-WRITE.
 
 
011000*
 
 
011100 PERFORM 210-READ-DATA.
 
 
011200 IF END-OF-FILE-FLAG = 'N'
 
 
011300 PERFORM 220-CALCULATE-DATA
 
 
011400 PERFORM 230-WRITE-DATA.
 
 
011500*
 
 
011600 210-READ-DATA.
 
 
011700*
 
 
011800 READ INPUT-DATA
 
 
011900 AT END MOVE 'Y' TO END-OF-FILE-FLAG.
 
 
012000*
 
 
012100 220-CALCULATE-DATA.
 
 
012200*
 
 
012300* MOVE INPUT-RECORD TO RECORD-FORMAT.
 
 
012400 MOVE AMOUNT IN INPUT-RECORD TO AMOUNT IN RECORD-FORMAT.
 
 
012500 MOVE ACCOUNT-NUMBER IN INPUT-RECORD
 
 
012600 TO ACCOUNT-NUMBER IN RECORD-FORMAT.
 
 
012700 DISPLAY RECORD-FORMAT.
 
 
012800 ADD AMOUNT IN RECORD-FORMAT TO TOTAL-AMOUNT.
 
 
012900 MULTIPLY 0.02 BY AMOUNT IN RECORD-FORMAT
 
 
013000 GIVING DISCOUNT IN RECORD-FORMAT ROUNDED
 
 
013100 END-MULTIPLY.
 
 
013200 ADD DISCOUNT TO TOTAL-DISCOUNT.
 
 
013300 SUBTRACT DISCOUNT FROM AMOUNT IN RECORD-FORMAT
 
 
013400 GIVING NET-AMOUNT ROUNDED.
 
 
013500 ADD NET-AMOUNT TO TOTAL-NET-AMOUNT.
 
 
013600*
 
 
013700 230-WRITE-DATA.
 
 
013800*
 
 
013900 MOVE RECORD-FORMAT TO OUTPUT-RECORD.
 
 
014000 WRITE OUTPUT-RECORD.
 
 
014100*
 
 
014200 300-WRITE-TOTALLINE.
 
 
014300*
 
 
014400 MOVE TOTAL-FORMAT TO OUTPUT-RECORD.
 
 
014500 WRITE OUTPUT-RECORD.
 
 
 
 
b) 输出

clip_image001

c) 小结

复合型数据的复制如果没有指定成员之间的具体存放位置,可能会引起数据位置格式的错误,所以最简单的方法是给每个复合项条目单独指定!!

l 编写报表程序输出编辑型变量
a) 源程序
 
 
000100 IDENTIFICATION DIVISION.
 
 
000200 PROGRAM-ID. REPRT11.
 
 
000300 AUTHOR.MARTIN.
 
 
000400*
 
 
000500 ENVIRONMENT DIVISION.
 
 
000600*
 
 
000700 INPUT-OUTPUT SECTION.
 
 
000800 FILE-CONTROL.
 
 
000900 SELECT INPUT-DATA ASSIGN TO REPORTIN.
 
 
001000 SELECT OUTPUT-DATA ASSIGN TO REPRTOUT.
 
 
001100*
 
 
001200 DATA DIVISION.
 
 
001300*
 
 
001400 FILE SECTION.
 
 
001500*
 
 
001600 FD INPUT-DATA.
 
 
001700 01 INPUT-RECORD.
 
 
001800 05 FILLER PIC X.
 
 
001900 05 ACCOUNT-NUMBER PIC X(5).
 
 
002000 05 FILLER PIC X.
 
 
002100 05 AMOUNT PIC 9(5)V99.
 
 
002200 05 FILLER PIC X(66).
 
 
002300 FD OUTPUT-DATA.
 
 
002400 01 OUTPUT-RECORD PIC X(133).
 
 
002500*
 
 
002600 WORKING-STORAGE SECTION.
 
 
002700*
 
 
002800 77 END-OF-FILE-FLAG PIC X VALUE 'N'.
 
 
002900*
 
 
003000 01 HEAD-HEAD.
 
 
003100 05 FILLER PIC X(13) VALUE SPACE.
 
 
003200 05 HEAD-TITLE PIC X(11) VALUE 'BALANCE DUE'.
 
 
003300 05 FILLER PIC X(109) VALUE SPACE.
 
 
003400*
 
 
003500 01 HEADLINE-ONE.
 
 
003600 05 ACCOUNT-NUMBER-SECTION.
 
 
003700 10 FILLER PIC X(7) VALUE "ACCOUNT".
 
 
003800 05 AMOUNT-SECTION.
 
 
003900 10 FILLER PIC X(5) VALUE SPACE.
 
 
004000 10 FILLER PIC X(6) VALUE "AMOUNT".
 
 
004100 05 DISCOUNT-SECTION.
 
 
004200 10 FILLER PIC X(3) VALUE SPACE.
 
 
004300 10 FILLER PIC X(8) VALUE "DISCOUNT".
 
 
004400 05 NET-AMOUNT-SECTION.
 
 
004500 10 FILLER PIC X(5) VALUE SPACE.
 
 
004600 10 FILLER PIC X(3) VALUE "NET".
 
 
004700 10 FILLER PIC X VALUE SPACE.
 
 
004800 05 FILL-BLANK.
 
 
004900 10 FILLER PIC X(95) VALUE SPACE.
 
 
005000*
 
 
005100 01 HEADLINE-TWO.
 
 
005200 05 ACCOUNT-NUMBER-SECTION.
 
 
005300 10 FILLER PIC X VALUE SPACE.
 
 
005400 10 FILLER PIC X(6) VALUE "NUMBER".
 
 
005500 05 AMOUNT-SECTION.
 
 
005600 10 FILLER PIC X(9) VALUE SPACES.
 
 
005700 05 DISCOUNT-SECTION.
 
 
005800 10 FILLER PIC X(9) VALUE SPACE.
 
 
005900 05 NET-AMOUNT-SECTION.
 
 
006000 10 FILLER PIC X(6) VALUE SPACE.
 
 
006100 10 FILLER PIC X(6) VALUE "AMOUNT".
 
 
006200 05 FILL-BLANK.
 
 
006300 10 FILLER PIC X(96) VALUE SPACE.
 
 
006400*
 
 
006500 01 RECORD-FORMAT.
 
 
006600 05 FILLER PIC X(2) VALUE SPACE.
 
 
006700 05 ACCOUNT-NUMBER PIC X(5) VALUE SPACE.
 
 
006800 05 FILLER PIC X(2) VALUE SPACE.
 
 
006900 05 AMOUNT PIC $,$$$,$$9.99 VALUE ZERO.
 
 
007000 05 FILLER PIC X(3) VALUE SPACE.
 
 
007100 05 DISCOUNT PIC $$$,$$9.99 VALUE ZERO.
 
 
007200 05 FILLER PIC X(2) VALUE SPACE.
 
 
007300 05 NET-AMOUNT PIC $,$$$,$$9.99 VALUE ZERO.
 
 
007400 05 FILLER PIC X(85) VALUE SPACE.
 
 
007500*
 
 
007600 01 TOTAL-FORMAT.
 
 
007700 05 FILLER PIC X(6) VALUE "TOTALS".
 
 
007800 05 FILLER PIC X(2) VALUE SPACE.
 
 
007900 05 TOTAL-AMOUNT PIC $$,$$$,$$9.99 VALUE ZEROS.
 
 
008000 05 FILLER PIC X(2) VALUE SPACE.
 
 
008100 05 TOTAL-DISCOUNT PIC $,$$$,$$$.99 VALUE ZEROS.
 
 
008200 05 FILLER PIC X VALUE SPACE.
 
 
008300 05 TOTAL-NET-AMOUNT PIC $$,$$$,$$9.99 VALUE ZEROS.
 
 
008400 05 FILLER PIC X(83) VALUE SPACE.
 
 
008500*
 
 
008600 01 RECORD-DATA.
 
 
008700 05 ACCOUNT-NUMBER PIC X(5) VALUE SPACE.
 
 
008800 05 AMOUNT PIC 9(5)V99 VALUE ZERO.
 
 
008900 05 DISCOUNT PIC 9(4)V99 VALUE ZERO.
 
 
009000 05 NET-AMOUNT PIC 9(5)V99 VALUE ZERO.
 
 
009100*
 
 
009200 01 TOTAL-DATA.
 
 
009300 05 TOTAL-AMOUNT PIC 9(6)V99 VALUE ZERO.
 
 
009400 05 TOTAL-DISCOUNT PIC 9(5)V99 VALUE ZERO.
 
 
009500 05 TOTAL-NET-AMOUNT PIC 9(6)V99 VALUE ZERO.
 
 
009600*
 
 
009700 77 TEST-DATA PIC 9(5)V99.
 
 
009800 PROCEDURE DIVISION.
 
 
009900*
 
 
010000 000-MAIN.
 
 
010100*
 
 
010200 OPEN INPUT INPUT-DATA
 
 
010300 OUTPUT OUTPUT-DATA.
 
 
010400 PERFORM 100-WRITE-HEADLINE.
 
 
010500 PERFORM 200-READ-AND-WRITE
 
 
010600 UNTIL END-OF-FILE-FLAG = 'Y'.
 
 
010700 PERFORM 300-WRITE-TOTALLINE.
 
 
010800 CLOSE INPUT-DATA OUTPUT-DATA.
 
 
010900 STOP RUN.
 
 
011000*
 
 
011100 100-WRITE-HEADLINE.
 
 
011200*
 
 
011300 MOVE HEAD-HEAD TO OUTPUT-RECORD.
 
 
011400 WRITE OUTPUT-RECORD.
 
 
011500 MOVE HEADLINE-ONE TO OUTPUT-RECORD.
 
 
011600 WRITE OUTPUT-RECORD.
 
 
011700 MOVE HEADLINE-TWO TO OUTPUT-RECORD.
 
 
011800 WRITE OUTPUT-RECORD.
 
 
011900*
 
 
012000 200-READ-AND-WRITE.
 
 
012100*
 
 
012200 PERFORM 210-READ-DATA.
 
 
012300 IF END-OF-FILE-FLAG = 'N'
 
 
012400 PERFORM 220-CALCULATE-DATA
 
 
012500 PERFORM 230-WRITE-DATA.
 
 
012600*
 
 
012700 210-READ-DATA.
 
 
012800*
 
 
012900 READ INPUT-DATA
 
 
013000 AT END MOVE 'Y' TO END-OF-FILE-FLAG.
 
 
013100*
 
 
013200 220-CALCULATE-DATA.
 
 
013300*
 
 
013400 MOVE AMOUNT IN INPUT-RECORD TO AMOUNT IN RECORD-DATA.
 
 
013500 MOVE ACCOUNT-NUMBER IN INPUT-RECORD
 
 
013600 TO ACCOUNT-NUMBER IN RECORD-DATA.
 
 
013700 ADD AMOUNT IN RECORD-DATA TO TOTAL-AMOUNT IN TOTAL-DATA.
 
 
013800 MULTIPLY 0.02 BY AMOUNT IN RECORD-DATA
 
 
013900 GIVING DISCOUNT IN RECORD-DATA ROUNDED
 
 
014000 END-MULTIPLY.
 
 
014100 ADD DISCOUNT IN RECORD-DATA TO TOTAL-DISCOUNT IN TOTAL-DATA.
 
 
014200 SUBTRACT DISCOUNT IN RECORD-DATA FROM AMOUNT IN RECORD-DATA
 
 
014300 GIVING NET-AMOUNT IN RECORD-DATA ROUNDED.
 
 
014400 ADD NET-AMOUNT IN RECORD-DATA
 
 
014500 TO TOTAL-NET-AMOUNT IN TOTAL-DATA.
 
 
014600*
 
 
014700 230-WRITE-DATA.
 
 
014800* FORMAT DATA
 
 
014900 MOVE AMOUNT IN RECORD-DATA
 
 
015000 TO AMOUNT IN RECORD-FORMAT.
 
 
015100 MOVE ACCOUNT-NUMBER IN RECORD-DATA
 
 
015200 TO ACCOUNT-NUMBER IN RECORD-FORMAT.
 
 
015300 MOVE DISCOUNT IN RECORD-DATA
 
 
015400 TO DISCOUNT IN RECORD-FORMAT.
 
 
015500 MOVE NET-AMOUNT IN RECORD-DATA
 
 
015600 TO NET-AMOUNT IN RECORD-FORMAT.
 
 
015700
 
 
015800* MOVE DATA TO FORMAT IN ORDER TO PRINT
 
 
015900 MOVE RECORD-FORMAT TO OUTPUT-RECORD.
 
 
016000 WRITE OUTPUT-RECORD.
 
 
016100*
 
 
016200 300-WRITE-TOTALLINE.
 
 
016300*
 
 
016400* FORMAT DATA
 
 
016500 MOVE TOTAL-AMOUNT IN TOTAL-DATA
 
 
016600 TO TOTAL-AMOUNT IN TOTAL-FORMAT.
 
 
016700 MOVE TOTAL-DISCOUNT IN TOTAL-DATA
 
 
016800 TO TOTAL-DISCOUNT IN TOTAL-FORMAT.
 
 
016900 MOVE TOTAL-NET-AMOUNT IN TOTAL-DATA
 
 
017000 TO TOTAL-NET-AMOUNT IN TOTAL-FORMAT.
 
 
017100* MOVE DATA TO FORMAT IN ORDER TO PRINT
 
 
017200 MOVE TOTAL-FORMAT TO OUTPUT-RECORD.
 
 
017300 WRITE OUTPUT-RECORD.
 
 
 
 
b) 输出

clip_image003

c) 小结

注意编辑型数据中的符号即使不显示也是要占位的。在计算记录长度时要注意。

实验总结

转载于:https://www.cnblogs.com/martin-dlut/archive/2012/04/12/2443672.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值