Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted by Randy Turner ( 15 years ago )
IDENTIFICATION DIVISION.
PROGRAM-ID. Prog2Solution.
************************************************
*written by Hart *
* modified by smithfield
*CSCI 2060 Assign 3 *
*This is a program that reads from an input *
*file and writes data to an output file where *
*the output file has page and column headings *
*as well as edited fields. *
************************************************
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-CUST-FILE ASSIGN TO 'Customer.Dat'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT CUSTOMER-REPORT ASSIGN TO 'Billing.Dat'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD IN-CUST-FILE.
01 IN-CUST-REC.
05 IN-ACCT-NUM PIC X(10).
05 IN-CELL-NUM PIC 9(10).
05 IN-CUST-NAME.
10 IN-LAST-NAME PIC X(13).
10 IN-FIRST-NAME PIC X(10).
05 IN-PLAN PIC A.
05 IN-MONTH-MINS PIC 9(5).
05 IN-MONTH-SMS PIC 9(5).
05 IN-DATA-PLAN PIC A.
FD CUSTOMER-REPORT.
01 PRINT-REC PIC X(80).
WORKING-STORAGE SECTION.
01 WS-WORK-AREAS.
05 MORE-RECORDS PIC X(3)
VALUE 'YES'.
05 WS-DATE.
10 WS-YEAR PIC 9(4).
10 WS-MONTH PIC 9(2).
10 WS-DAY PIC 9(2).
05 WS-PAGE-CT PIC 9(2)
VALUE ZEROES.
05 WS-LINE-CT PIC 9(2)
VALUE ZEROES.
05 first-record PIC X(3)
VALUE 'YES'.
05 OVER-COST PIC 9999.
05 EXTRA-COST PIC 999.99.
01 HEADER1-OUT.
05 PIC X(3)
VALUE SPACES.
05 DATE-OUT.
10 MONTH-OUT PIC 9(2).
10 PIC X
VALUE '/'.
10 DAY-OUT PIC 9(2).
10 PIC X
VALUE '/'.
10 YEAR-OUT PIC 9(4).
05 PIC X(19)
VALUE SPACES.
05 PIC X(40)
VALUE 'BILLING REPORT'.
05 PIC X(5)
VALUE 'PAGE'.
05 PAGE-OUT PIC Z9.
01 HEADER2-OUT.
05 PIC X(2)
VALUE SPACES.
05 PIC X(13)
VALUE 'ACCOUNT'.
05 PIC X(11)
VALUE 'CELL'.
05 PIC X(13)
VALUE 'LAST'.
05 PIC X(12)
VALUE 'FIRST'.
05 PIC X(7)
VALUE 'MONTH'.
05 PIC X(5)
VALUE 'NUMB'.
05 PIC X(5)
VALUE 'PLAN'.
05 PIC X(6)
VALUE 'COST'.
05 PIC X(6)
VALUE 'COST'.
05 PIC X(6)
VALUE 'TOTAL'.
01 HEADER3-OUT.
05 PIC X(2)
VALUE SPACES.
05 PIC X(12)
VALUE 'NUMBER'.
05 PIC X(12)
VALUE 'NUMBER'.
05 PIC X(13)
VALUE 'NAME'.
05 PIC X(13)
VALUE 'NAME'.
05 PIC X(6)
VALUE 'MIN'.
05 PIC X(5)
VALUE 'TEXTS'.
05 PIC X(5)
VALUE SPACES.
05 PIC X(6)
VALUE 'TALK'.
05 PIC X(6)
VALUE 'DATA'.
05 PIC X(6)
VALUE 'COST'.
01 DETAIL-REC-OUT.
05 OUT-ACCT-NUM PIC X(10).
05 PIC X(2).
05 OUT-CELL-NUM PIC 9(10).
05 PIC X(2).
05 OUT-CUST-NAME.
10 OUT-LAST-NAME PIC X(13).
10 PIC X(2).
10 OUT-FIRST-NAME PIC X(10).
05 PIC X(2).
05 OUT-MONTH-MINS PIC Z(4)9.
05 PIC X(2).
05 OUT-MONTH-SMS PIC Z(4)9.
05 OUT-PLAN PIC A.
05 OUT-COST-TALK PIC $$,$$$V99.
05 OUT-COST-DATA PIC $$,$$$V99.
05 OUT-TOTAL-COST PIC $,$$$,$$$V99.
PROCEDURE DIVISION.
************************************************
*100-main=module opens and closes the files, *
*formats the date, and controls the routines *
*for headings and processing records. *
************************************************
100-MAIN-MODULE.
OPEN INPUT IN-CUST-FILE
OUTPUT CUSTOMER-REPORT
MOVE FUNCTION CURRENT-DATE TO WS-DATE
MOVE WS-MONTH TO MONTH-OUT
MOVE WS-DAY TO DAY-OUT
MOVE WS-YEAR TO YEAR-OUT
PERFORM 200-HEADING-RTN.
PERFORM UNTIL MORE-RECORDS = 'NO '
READ IN-CUST-FILE
AT END
MOVE 'NO ' TO MORE-RECORDS
NOT AT END
PERFORM 300-REPORT-RTN
END-READ
END-PERFORM
CLOSE IN-CUST-FILE
CUSTOMER-REPORT
STOP RUN.
************************************************
*200-heading-rtn is executed once from the main*
*module, and again after 50 lines are printed. *
*It inserts the page and columng headings at *
*the top of each page. *
************************************************
200-HEADING-RTN.
ADD 1 TO WS-PAGE-CT
MOVE WS-PAGE-CT TO PAGE-OUT
* DECISION SO THAT FIRST PAGE OF REPORT IS NOT BLANK
IF FIRST-RECORD = 'YES'
WRITE PRINT-REC FROM HEADER1-OUT
AFTER ADVANCING 1
MOVE 'NO' TO FIRST-RECORD
ELSE
WRITE PRINT-REC FROM HEADER1-OUT
AFTER ADVANCING PAGE
END-IF
WRITE PRINT-REC FROM HEADER2-OUT
AFTER ADVANCING 2 LINES
WRITE PRINT-REC FROM HEADER3-OUT
AFTER ADVANCING 1 LINE
MOVE 4 TO WS-LINE-CT.
************************************************
*300-report-rtn is executed from the main *
*module until all input records have been *
*processed. The line counter routine checks *
*when to perform 200-heading-rtn again. *
************************************************
300-REPORT-RTN.
IF WS-LINE-CT >= 50
PERFORM 200-HEADING-RTN
END-IF
MOVE SPACES TO DETAIL-REC-OUT
MOVE IN-ACCT-NUM TO OUT-ACCT-NUM
MOVE IN-CELL-NUM TO OUT-CELL-NUM
MOVE IN-LAST-NAME TO OUT-LAST-NAME
MOVE IN-FIRST-NAME TO OUT-FIRST-NAME
MOVE IN-MONTH-MINS TO OUT-MONTH-MINS
MOVE IN-MONTH-SMS TO OUT-MONTH-SMS
MOVE IN-PLAN TO OUT-PLAN
IF IN-PLAN = 'M'
PERFORM 400-PLAN-M-RTN
ELSE
PERFORM 500-PLAN-P-RTN
WRITE PRINT-REC FROM DETAIL-REC-OUT
AFTER ADVANCING 1 LINE
ADD 1 TO WS-LINE-CT.
*400-PLAN-M-RTN AND 500-PLAN-P-RTN
*PERFORMS ALL THE MATH NEEDED TO ADD OVERAGES AND
*OTHER CHARGES FOR PLAN M
400-PLAN-M-RTN.
IF IN-MONTH-MINS > 450
COMPUTE OVER-COST = IN-MONTH-MINS - 450
COMPUTE EXTRA-COST =
(OVER-COST * .45)+ (OUT-MONTH-SMS * .15)
COMPUTE OUT-COST-TALK = EXTRA-COST + 39.99
ELSE
COMPUTE OUT-COST-TALK = 39.99
IF IN-DATA-PLAN = 'Y' OR 'y'
COMPUTE OUT-COST-DATA = 29.99
ELSE
MOVE ZEROS TO OUT-COST-DATA
END-IF
COMPUTE OUT-TOTAL-COST = OUT-COST-TALK + OUT-COST-DATA.
500-PLAN-P-RTN.
IF IN-MONTH-MINS > 900
COMPUTE OVER-COST = IN-MONTH-MINS - 900
COMPUTE EXTRA-COST = OVER-COST * .40
COMPUTE OUT-COST-TALK = EXTRA-COST + 79.99
ELSE
COMPUTE OUT-COST-TALK = 79.99
IF IN-DATA-PLAN = 'Y' OR 'y'
COMPUTE OUT-COST-DATA = 29.99
ELSE
MOVE ZEROS TO OUT-COST-DATA
END-IF
COMPUTE OUT-TOTAL-COST = OUT-COST-TALK + OUT-COST-DATA.
Revise this Paste