Annuity Valuation Project

This project involves developing a COBOL program to run on a mainframe, calculating monthly annuity payments based on a valid loan amount, interest rate, and duration in years.

Source-code:

       IDENTIFICATION DIVISION.

       PROGRAM-ID. ANNUITY.

       DATA DIVISION.

       WORKING-STORAGE SECTION.

       01    TOTAL-LOAN       PIC 9(9)V99 VALUE 100000.

       01    INTEREST-RATE    PIC 999V99  VALUE 0.05.  *> INTEREST OF 5%

       01    INTEREST-RATEP   PIC 999V99 VALUE ZERO.

       01    MONTHS           PIC 999 VALUE ZERO.

       01    YEARS            PIC 999 VALUE ZERO.

       01    MONTHLY-PAYMENT  PIC 9(9)V99 VALUE ZERO.

       01    VALID-INPUT      PIC X VALUE 'N'.

       01    INPUT-STRING     PIC X(10).

       01    IS-NUMERIC       PIC X(3) VALUE 'N'.

       PROCEDURE DIVISION.

           DISPLAY "I'M KATE! ALLOW ME TO ASSIST YOU WITH YOUR LOAN.".

           MOVE 'N' TO VALID-INPUT

           PERFORM UNTIL VALID-INPUT = 'Y'

              DISPLAY 'ENTER YOUR TOTAL LOAN.'

              ACCEPT INPUT-STRING

              IF INPUT-STRING NOT ALPHABETIC

                 COMPUTE TOTAL-LOAN = FUNCTION NUMVAL (INPUT-STRING)

                 IF TOTAL-LOAN > 0 AND <= 999999999

                    MOVE 'Y' TO VALID-INPUT

                 ELSE DISPLAY 'NOT 9 DIGITS'

                 END-IF

              ELSE DISPLAY 'NOT NUMERIC'

              END-IF

 

           END-PERFORM.

 

           MOVE 'N' TO VALID-INPUT

           PERFORM UNTIL VALID-INPUT = 'Y'

              DISPLAY 'PLEASE ENTER YOUR INTEREST RATE.'

              ACCEPT INPUT-STRING

              IF INPUT-STRING NOT ALPHABETIC

                 COMPUTE INTEREST-RATE = FUNCTION NUMVAL (INPUT-STRING)

                 IF INTEREST-RATE > 0 AND <= 100

                    COMPUTE INTEREST-RATE = INTEREST-RATE / 100

                    MOVE 'Y' TO VALID-INPUT

                 ELSE DISPLAY 'MUST BE BETWEEN 1 TO 100.'

                 END-IF

              ELSE DISPLAY 'NOT NUMERIC'

              END-IF

 

           END-PERFORM.

 

           MOVE 'N' TO VALID-INPUT

           PERFORM UNTIL VALID-INPUT = 'Y'

              DISPLAY 'PLEASE ENTER YEARS.'

              ACCEPT INPUT-STRING

              IF INPUT-STRING NOT ALPHABETIC

                 COMPUTE YEARS = FUNCTION NUMVAL (INPUT-STRING)

                 IF YEARS > 0 AND <= 100

                    MOVE 'Y' TO VALID-INPUT

                 ELSE DISPLAY 'MUST BE BETWEEN 1 AND 100.'

                 END-IF

              ELSE DISPLAY 'NOT NUMERIC'

              END-IF

 

           END-PERFORM.

 

           COMPUTE INTEREST-RATEP = INTEREST-RATE * 100.

           DISPLAY 'TOTAL-LOAN: ' TOTAL-LOAN ' USD - INTEREST-RATE: ' I

      -    NTEREST-RATEP '%'.

           DISPLAY ' Y   M        AMOUNT '.

           DISPLAY '--- --- -------------'.

           PERFORM YEARS TIMES

             ADD 12 TO MONTHS

             COMPUTE MONTHLY-PAYMENT = TOTAL-LOAN * FUNCTION ANNUITY ((I

      -      NTEREST-RATE / 12), MONTHS)

             COMPUTE YEARS = MONTHS / 12

             DISPLAY YEARS ' ' MONTHS ' ' MONTHLY-PAYMENT ' USD'

           END-PERFORM

           GOBACK.

Example Output: