* IDENTIFICATION DIVISION. PROGRAM-ID. CLAS002A. *AUTHOR: MICHAEL MARTUCCI. *WRITTEN: FEB. 13, 2005. *REMARKS: CLASS EXERCISE FOR CPT-115 COBOL I - * PROGRAM READS AN INPUT FILE OF CUSTOMERS * AND GENERATES A LISTING OF ID, NAME, AND * BALANCES FOR EACH CUSTOMER. *MODIFIED: SEPT 2007 TO ADD ERRORS SO THAT THE CLASS * GETS TO SEE HOW ERRORS ARE HANDLED * BY VMS (LUCKY DEVILS) *MODIFIED: SEPT 2005 BY MIKE MARTUCCI * TO CORRECT ERRORS * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMERS ASSIGN TO CUSTIN. SELECT PRINT-OUT ASSIGN TO PRTOUT2A. * DATA DIVISION. FILE SECTION. * FD CUSTOMERS RECORD CONTAINS 55 CHARACTERS LABEL RECORDS ARE STANDARD. 01 CUSTOMER-RECORD. 05 CUST-ID PIC 9(8). 05 CUST-LAST-NAME PIC X(20). 05 CUST-CHKG-ACCT-NO PIC 9(10). 05 CUST-CHKG-ACCT-BAL PIC 9(7)v9(2). 05 CUST-SVGS-ACCT-NO PIC 9(10). 05 CUST-SVGS-ACCT-BAL PIC 9(7)v9(2). * FD PRINT-OUT RECORD CONTAINS 132 CHARACTERS LABEL RECORDS ARE OMITTED. 01 PRINT-RECORD PIC X(132). * ****************************************************************** WORKING-STORAGE SECTION. ****************************************************************** * 01 EOF-SW PIC X(1) VALUE 'N'. * 01 VARIABLES. 05 LINE-CNTR PIC 9(2) VALUE 55. 05 PAGE-NO PIC 9(3) VALUE 0. 05 WS-CURRENT-DATE PIC X(10). * 01 REPORT-TOTALS. 05 RPT-TTL-CHKG-ACCT-BAL PIC 9(12)V9(2) VALUE 0. 05 RPT-TTL-SVGS-ACCT-BAL PIC 9(12)v9(2) VALUE 0. * 01 REPORT-TITLE. 05 FILLER PIC X(24) VALUE SPACES. 05 FILLER PIC X(24) VALUE 'CUSTOMER ACCOUNT DETAILS'. 05 FILLER PIC X(24) VALUE SPACES. * 01 HEADER-1. 05 FILLER PIC X(04) VALUE SPACES. 05 FILLER PIC X(21) VALUE 'PROGRAM ID: CLAS002A'. 05 FILLER PIC X(15) VALUE SPACES. 05 FILLER PIC X(11) VALUE 'RUNDATE: '. 05 HDR-1-DATE PIC X(10). 05 FILLER PIC X(11) VALUE SPACES. * 01 HEADER-2. 05 FILLER PIC X(40) VALUE SPACES. 05 FILLER PIC X(11) VALUE 'PAGE: '. 05 HDR-2-PAGE PIC 999. 05 FILLER PIC X(18) VALUE SPACES. * 01 COLUMN-UNDERLINES. 05 FILLER PIC X(1) VALUE SPACES. 05 FILLER PIC X(8) VALUE '-------'. 05 FILLER PIC X(35) VALUE SPACES. 05 FILLER PIC X(06) VALUE '------'. 05 FILLER PIC X(10) VALUE SPACES. 05 FILLER PIC X(8) VALUE '--------'. 05 FILLER PIC X(5) VALUE SPACES. 05 FILLER PIC X(06) VALUE '------'. 05 FILLER PIC X(5) VALUE SPACES. 05 FILLER PIC X(8) VALUE '--------'. 05 FILLER PIC X(01) VALUE SPACES. * 01 COLUMN-HDRS. 05 FILLER PIC X(1) VALUE SPACES. 05 FILLER PIC X(8) VALUE 'CUST-ID'. 05 FILLER PIC X(35) VALUE SPACES. 05 FILLER PIC X(06) VALUE 'CHKG #'. 05 FILLER PIC X(10) VALUE SPACES. 05 FILLER PIC X(8) VALUE 'CHKG BAL'. 05 FILLER PIC X(5) VALUE SPACES. 05 FILLER PIC X(06) VALUE 'SVGS #'. 05 FILLER PIC X(5) VALUE SPACES. 05 FILLER PIC X(8) VALUE 'SVGS BAL'. 05 FILLER PIC X(01) VALUE SPACES. * 01 DETAIL-LINE. 05 FILLER PIC X(1) VALUE SPACES. 05 DTL-CUST-ID PIC 9(8). 05 FILLER PIC X(06) VALUE SPACES. 05 DTL-NAME PIC X(20). 05 FILLER PIC X(10) VALUE SPACES. 05 DTL-CHKG-ACCT-NO PIC 9(06). 05 FILLER PIC X(10) VALUE SPACES. 05 DTL-CHKG-ACCT-BAL PIC Z,ZZ9.99. 05 FILLER PIC X(05) VALUE SPACES. 05 DTL-SVGS-ACCT-NO PIC 9(06). 05 FILLER PIC X(05) VALUE SPACES. 05 DTL-SVGS-ACCT-BAL PIC 9(4)v9(2). 05 FILLER PIC X(01) VALUE SPACES. * 01 TTL-LINE-1. 05 FILLER PIC X(04) VALUE SPACES. 05 FILLER PIC X(44) VALUE 'REPORT TOTAL OF CHECKING ACCOUNT BALANCES: '. 05 TTL-LINE-1-CHKG-ACCT-BAL PIC ZZ,ZZZ,ZZ9.99. 05 FILLER PIC X(11) VALUE SPACES. * 01 TTL-LINE-2. 05 FILLER PIC X(04) VALUE SPACES. 05 FILLER PIC X(44) VALUE 'REPORT TOTAL OF SAVINGS ACCOUNT BALANCES: '. 05 TTL-LINE-2-SVGS-ACCT-BAL PIC ZZ,ZZZ,ZZ9.99. 05 FILLER PIC X(11) VALUE SPACES. * ********************************************************************* PROCEDURE DIVISION. ********************************************************************* * 0100-MAIN-LINE. ACCEPT WS-CURRENT-DATE FROM DATE. MOVE WS-CURRENT-DATE TO HDR-1-DATE. * OPEN INPUT CUSTOMERS OUTPUT PRINT-OUT. * PERFORM 0400-READ-CUSTOMER-RECORD UNTIL EOF-SW = 'Y'. * PERFORM 0705-PRINT-REPORT-TOTALS. * CLOSE CUSTOMERS, PRINT-OUT. * STOP RUN. * * ************ PERFORMED SUB-ROUTINES ******************************* * * 0400-READ-CUSTOMER-RECORD. READ CUSTOMERS AT END MOVE 'Y' TO EOF-SW. IF EOF-SW = 'N' PERFORM 0450-PROCESS-CUSTOMER-RECORD. * 0450-PROCESS-CUSTOMER-RECORD. * MOVE CUST-ID TO DTL-CUST-ID. MOVE CUST-LAST-NAME TO DTL-NAME MOVE CUST-CHKG-ACCT-NO TO DTL-CHKG-ACCT-NO. MOVE CUST-CHKG-ACCT-BAL TO DTL-CHKG-ACCT-BAL. MOVE CUST-SVGS-ACCT-NO TO DTL-SVGS-ACCT-NO. MOVE CUST-SVGS-ACCT-BAL TO DTL-SVGS-ACCT-BAL. * IF CUST-CHKG-ACCT-BAL IS NOT NUMERIC DISPLAY 'NON-NUMERIC DATA: CUST-CHKG-ACCT-BAL = ' CUST-CHKG-ACCT-BAL STOP RUN. ADD CUST-CHKG-ACCT-BAL TO RPT-TTL-CHKG-ACCT-BAL. * IF CUST-SVGS-ACCT-BAL IS NOT NUMERIC DISPLAY 'NON-NUMERIC DATA: CUST-SVGS-ACCT-BAL = ' CUST-SVGS-ACCT-BAL STOP RUN. ADD CUST-SVGS-ACCT-BAL TO RPT-TTL-SVGS-ACCT-BAL. * PERFORM 0500-PRINT-DETAIL-LINE. * * * 0500-PRINT-DETAIL-LINE. IF LINE-CTR GREATER THAN 40 PERFORM 0600-PRINT-PAGE-HEADER. MOVE DETAIL-LINE TO PRINT-RECORD. WRITE PRINT-RECORD AFTER ADVANCING 2 LINES. ADD 2 TO LINE-CTR. * 0600-PRINT-PAGE-HEADER. ADD 1 TO PAGE-NO. MOVE PAGE-NO TO HDR-2-PAGE. * MOVE REPORT-TITLE TO PRINT-RECORD. WRITE PRINT-RECORD AFTER ADVANCING PAGE. * MOVE HEADER-1 TO PRINT-RECORD. WRITE PRINT-RECORD AFTER ADVANCING 2 LINES. * MOVE HEADER-2 TO PRINT-RECORD. WRITE PRINT-RECORD AFTER ADVANCING 1 LINES. * MOVE COLUMN-HDRS TO PRINT-RECORD. WRITE PRINT-RECORD AFTER ADVANCING 2 LINES. * MOVE COLUMN-UNDERLINES TO PRINT-RECORD. WRITE PRINT-RECORD AFTER ADVANCING 1 LINE. * MOVE 0 TO LINE-CTR. * 0700-PRINT-REPORT-TOTALS. MOVE RPT-TTL-CHKG-ACCT-BAL TO TTL-LINE-1-CHKG-ACCT-BAL. MOVE TTL-LINE-1 TO PRINT-RECORD. WRITE PRINT-RECORD AFTER ADVANCING PAGE. * MOVE RPT-TTL-SVGS-ACCT-BAL TO TTL-LINE-2-SVGS-ACCT-BAL. MOVE TTL-LINE-2 TO PRINT-RECORD. WRITE PRINT-RECORD AFTER ADVANCING 2 LINES. * ******** END OF PROGRAM LISTING *********************