COBOL Loan Annuity Project

Back to Projects

Goal

Create a program that when given a loan amount, interest rate, and number of years it will calculate the annuity over that period.

Source Code

ANNUITY.CBL

               *-------------------------
                IDENTIFICATION DIVISION.
               *-------------------------
                PROGRAM-ID. ANNUITY.
               *-------------------------
                DATA DIVISION.
               *-------------------------
                WORKING-STORAGE SECTION.
                01 I                PIC 9(2).
                01 TOTAL-LOAN       PIC X(9).
                01 NUMTOTAL-LOAN    PIC 9(9).
                01 INTEREST-RATE    PIC X(9).
                01 NUMINTEREST-RATE PIC 99V99.
                01 INTEREST-RATEP   PIC 9(5).
                01 MONTHS           PIC 999 VALUE ZERO.
                01 YEARS            PIC X(5).
                01 NUMYEARS         PIC 9(5).
                01 CNT              PIC 999 VALUE ZERO.
                01 MONTHLY-PAYMENT  PIC $Z(9).99.
               *-------------------------
                PROCEDURE DIVISION.
               *-------------------------
                    DISPLAY "WELCOME TO EMILY'S ANNUITY PROGRAM".
                INPUT-ONE SECTION.
                    DISPLAY 'INPUT TOTAL LOAN.'
                    ACCEPT TOTAL-LOAN.
         
                    PERFORM VARYING I FROM 1 BY 1 UNTIL I > LENGTH OF TOTAL-LOAN
         
                      IF TOTAL-LOAN(I:1) IS NOT NUMERIC THEN
                          IF TOTAL-LOAN(I:1) = ' ' THEN
                             CONTINUE
                          ELSE
                             DISPLAY 'INVALID INPUT'
                             GO TO INPUT-ONE
                          END-IF
                      END-IF
                    END-PERFORM.
         
                    COMPUTE NUMTOTAL-LOAN = FUNCTION NUMVAL(TOTAL-LOAN).
         
                INPUT-TWO SECTION.
                    DISPLAY 'INPUT INTEREST RATE.'
                    ACCEPT INTEREST-RATE
         
                    PERFORM VARYING I FROM 1 BY 1 UNTIL I > LENGTH OF INTEREST-RA
               -    TE
                      IF INTEREST-RATE(I:1) IS NOT NUMERIC THEN
                          IF INTEREST-RATE(I:1) = ' ' OR '.' THEN
                             CONTINUE
                          ELSE
                             DISPLAY 'INVALID INPUT'
                             GO TO INPUT-TWO
                          END-IF
                      END-IF
                    END-PERFORM.
         
                    COMPUTE NUMINTEREST-RATE = FUNCTION NUMVAL(INTEREST-RATE).
         
                INPUT-THREE SECTION.
                    DISPLAY 'INPUT YEARS.'
                    ACCEPT YEARS
         
                    PERFORM VARYING I FROM 1 BY 1 UNTIL I > LENGTH OF YEARS
                      IF YEARS(I:1) IS NOT NUMERIC THEN
                          IF YEARS(I:1) = ' ' THEN
                             CONTINUE
                          ELSE
                             DISPLAY 'INVALID INPUT'
                             GO TO INPUT-THREE
                          END-IF
                      END-IF
                    END-PERFORM.
         
                    COMPUTE NUMYEARS = FUNCTION NUMVAL(YEARS).
         
                COMPUTING SECTION.
                    COMPUTE INTEREST-RATEP = NUMINTEREST-RATE * 100
         
                    DISPLAY 'TOTAL-LOAN: ' TOTAL-LOAN ' INTEREST-RATE: ' INTEREST
               -    -RATEP '%'.
                    DISPLAY ' Y   M        AMOUNT '.
                    DISPLAY '--- --- -------------'.
                    PERFORM UNTIL CNT = NUMYEARS
                      ADD 1 TO CNT
                      ADD 12 TO MONTHS
                      COMPUTE MONTHLY-PAYMENT = FUNCTION ANNUITY((NUMINTEREST-RAT
               -      E / 12), MONTHS) * NUMTOTAL-LOAN
               -
                      DISPLAY CNT ' ' MONTHS ' ' MONTHLY-PAYMENT ' USD'
                    END-PERFORM
                    GOBACK.
          

ANNUITY.JCL

       //ANNUITY JOB  1,NOTIFY=&SYSUID
       //COBRUN   EXEC IGYWCL
       //COBOL.SYSIN  DD DSN=&SYSUID..COBOL.CBL(ANNUITY),DISP=SHR
       //LKED.SYSLMOD DD DSN=&SYSUID..COBOL.LOAD(ANNUITY),DISP=SHR
       //STEPLIB      DD DSN=&SYSUID..COBOL.LOAD,DISP=SHR