000001           *------------------------                                            

 000002            IDENTIFICATION DIVISION.                                            

 000003           *------------------------                                            

 000004            PROGRAM-ID. ANNUITY.                                                

 000005           *------------------------                                            

 000006            DATA DIVISION.                                                      

 000007           *------------------------    

                // Here we define all the variables necessary for the        project, We need to know the total loan amount the interest rate and all the variables needed for the annuity.

                                         

 000008            WORKING-STORAGE SECTION.                                            

 000009            01   TOTAL-LOAN           PIC 9(9).                                      

 000010            01   INTEREST-RATE  PIC 999V99.                                      

 000011            01   INTEREST-RATEP PIC 999V99  VALUE ZERO.                          

 000012            01   MONTHS               PIC 999         VALUE ZERO.                        

 000013            01   YEARS                PIC 999         VALUE ZERO.                        

 000014            01   MONTHLY-PAYMENT  PIC 9(9)V9999.                                

 000015                                                                            

 000016            01   TOTAL-LOAN-SHOW  PIC Z(9).99.                                  

 000017            01   INTSHOW        PIC Z(2).999.                                        

 000018            01   TOTAL-INTEREST-RATEP-SHOW PIC Z(9).99.                          

 000019            01   MONTHLYSHOW PIC Z(9).999.                                      

 000020            01   YEARS-SHOW PIC Z(3).                                            

 000021           *------------------------                                            

 000022            PROCEDURE DIVISION.                                                  

 000023           *------------------------                                            

 000024       //  I use a display version to make sure each of my JCL submission ran successfully                                                                        

 000025                 DISPLAY 'VERSION 4.1'                                          

 000026                                                                            

 000027                 PERFORM OBTAIN-LOAN                                            

 000028                 PERFORM OBTAIN-INTEREST-RATE                                    

 000029                 PERFORM OBTAIN-YEARS                                            

 000030                 PERFORM MAIN-PROCESS                                            

 000031                 GOBACK.                                                        

 000032                                                                            

 000033           // This gathers a positive and non zero loan                                                                  

 000034            OBTAIN-LOAN.                                                        

 000035                 PERFORM UNTIL TOTAL-LOAN IS NUMERIC AND TOTAL-LOAN-SHOW > 0

 000036                    DISPLAY 'ENTER A VALID TOTAL LOAN IN THE FORMAT:XXXXXXXXX

000037           -            , (INCLUDE LEADING ZEROS)'                                  

000038                    ACCEPT TOTAL-LOAN-SHOW                                      

000039                    IF TOTAL-LOAN-SHOW IS ALPHABETIC                            

000040                       DISPLAY 'INPUT IS NON-NUMERIC AND INVALID'                

000041                    ELSE                                                        

000042                       COMPUTE TOTAL-LOAN = FUNCTION NUMVAL(TOTAL-LOAN-SHOW)

000043                                                                            

000044                    IF TOTAL-LOAN-SHOW >  0                                      

000045                       MOVE TOTAL-LOAN-SHOW TO TOTAL-LOAN                        

000046                                                                            

000047                    ELSE                                                        

000048                       DISPLAY 'INPUT IS NOT A POSITIVE NUMBER'                  

000049                    END-IF                                                      

000050                 END-PERFORM.  

             // This gathers a positive non zero interest rate

                                                 

000051            OBTAIN-INTEREST-RATE.                                                

000052                 PERFORM UNTIL INTEREST-RATE IS NUMERIC AND INTSHOW > 0          

000053                    DISPLAY 'ENTER A VALID INTEREST IN THE FORMAT:XXXXX ,    

000054           -            (INCLUDE LEADING ZEROS)'                                    

000055                    ACCEPT INTSHOW                                              

000056                    IF INTSHOW IS ALPHABETIC                                    

000057                       DISPLAY 'INPUT IS NON-NUMERIC AND INVALID'                

000058                    ELSE                                                        

000059                       COMPUTE INTEREST-RATE = FUNCTION NUMVAL(INTSHOW)          

000060                    IF INTSHOW > 0                                              

000061                       MOVE INTSHOW TO INTEREST-RATE                            

000062                    ELSE                                                        

000063                       DISPLAY 'INPUT IS NOT A POSITIVE NUMBER'                  

000064                    END-IF                                                      

000065                 END-PERFORM.                                                    

000066            OBTAIN-YEARS.                                                        

000067                 PERFORM UNTIL YEARS IS NUMERIC AND YEARS-SHOW > 0              

000068                    DISPLAY 'ENTER A VALID NUMBER OF YEARS IN THE FORMAT: XXX

000069           -            , (INCLUDE LEADING ZEROS)                                    

000070                    ACCEPT YEARS-SHOW                                            

000071                    IF YEARS-SHOW IS ALPHABETIC                                  

000072                       DISPLAY 'INPUT IS NON-NUMERIC AND INVALID'          000073                    ELSE                                                        

 000074                       COMPUTE YEARS = FUNCTION NUMVAL(YEARS-SHOW)              

 000075                    IF YEARS-SHOW  > 0                                          

 000076                       MOVE YEARS-SHOW  TO YEARS                                

 000077                    ELSE                                                        

 000078                       DISPLAY 'INPUT IS NOT A POSITIVE NUMBER'                  

 000079                    END-IF                                                      

 000080                 END-PERFORM    

// Here we print the format in which the years and months of the annuity will be displayed. The interest rate and years/months are gathered and plugged into the formula to get the accurate results.

                                                 

 000081            MAIN-PROCESS.                                                        

 000082                 COMPUTE INTEREST-RATEP =                                        

 000083           -          INTEREST-RATE * 100.                                          

 000084                 MOVE INTEREST-RATEP  TO INTSHOW.                                

 000085                 DISPLAY 'TOTAL-LOAN: ' TOTAL-LOAN-SHOW                          

 000086           -         ' USD - INTEREST-RATE: ' INTSHOW            '%'                    

 000087                 DISPLAY ' Y   M            AMOUNT '                                

 000088                 DISPLAY '--- --- -------------'                                

 000089                 PERFORM YEARS TIMES                                            

 000090                   ADD 12 TO MONTHS                                              

 000091                   COMPUTE  MONTHLY-PAYMENT = TOTAL-LOAN                        

 000092           -           * FUNCTION ANNUITY( INTEREST-RATE / MONTHS  , MONTHS)        

 000093                   COMPUTE YEARS = MONTHS / 12                                  

 000094                   MOVE MONTHLY-PAYMENT TO MONTHLYSHOW                          

 000095                   DISPLAY YEARS ' ' MONTHS ' ' MONTHLYSHOW         ' USD'          

 000096                 END-PERFORM.                                                    

 000097                                                                            

 000098                                                                             

Reflection: This project was a lot tougher than the last one. Even though the initial code was provided, there were many things that needed to be changed/fixed. The first thing I had trouble with was getting the code to compile. For this I had to reference the spacing guide in the COBOL textbook. I learned that the Data division and procedure division need to follow a specific guideline (for example: no sentence can pass column 72 and must use a continuation line on the next line). I then needed to fix an issue with my annuity function looping infinitely. This was because I was using the wrong input format when accepting input and would print 500 years instead of 5 years causing an infinite loop. I also learned about paragraphs which allowed me to divide the processes taking place into manageable chunks (like methods in java). This included learning to use IF, ELSE and IS statements. Overall I needed help from multiple people and the IBM documentation.