JACK
ANDERSON
COMPUTER SCIENCE STUDENT
My goal is to gain greater experience working
with valuable industry systems and tools that will
expand my career options.
CONTACT INFO
(352) 359-7541
jackanderson@duck.com
25715 NW 176th Lane
High Springs, FL 32643
ADOBE CERTIFIED PROFESSIONAL
Santa Fe High School
May 2021
ASSOCIATE IN ARTS
Santa Fe College
Aug 2021  Dec 2023
BACHELOR OF SCIENCE IN COMPUTER
SCIENCE
University of North Florida
January 2024  May 2026
SKILLS
 Adaptability
 Communication
 Enterprise COBOL and
JCL
 z/OS, TSO, ISPF
 IBM Z Xplore
Advanced Badge
Project Demo: Annuity Valuation
Here is a project I worked on in COBOL for FinTech: Annuity Valuation.
IDENTIFICATION DIVISION.
PROGRAM-ID. ANNUITY.
*----------------------------------------------------------------
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TOTAL-LOAN PIC 9(9)V99.
01 FTOTAL-LOAN PIC $$$,$$$,$$9.99.
01 INTEREST-RATE PIC 999V99. *> INTEREST OF 5%.
01 INTEREST-RATEP PIC 999V99 VALUE ZERO.
01 MONTHS PIC 999 VALUE ZERO.
01 YEARS PIC 999.
01 MONTHLY-PAYMENT PIC 9(9)V99.
01 FMONTHLY-PAYMENT PIC $$$,$$$,$$9.99.
01 INPUTVALID PIC X VALUE 'N'.
*----------------------------------------------------------------
*
Above you can see Ive got several data items. Some of them are for user input and
have a second similar item for formatted output.
PROCEDURE DIVISION.
DISPLAY ' '.
DISPLAY 'D8888B. .D888B.'.
DISPLAY '88 `8D VP `8D DB'.
DISPLAY '88OODD~ ODD VP'.
DISPLAY '88~~~ .88~'.
DISPLAY '88 J88~. DB'.
DISPLAY '88 888888D VP'.
DISPLAY ' '.
DISPLAY ' _, _ __ _ __ __ ,___________ _'.
DISPLAY ' / | ( / )( / )( / /( /( / ( / / '.
DISPLAY ' /--| / / / / / / / / (__/ '.
DISPLAY '_/ |_/ (_ / (_ (_,/__/_ _/ _/_ '.
DISPLAY ' // '.
DISPLAY ' (/ '.
DISPLAY ' '.
DISPLAY 'PRESENTED BY JACK ANDERSON, N01585386'.
DISPLAY ' '.
* -----------------------
This section above is basically just a fancy title screen haha. The ASCII art looks a little
goofy in this format but when printed to the user in TSO it looks nice.
* GATHER USER INPUT
* // USE PERFORM UNTIL INSTEAD
PERFORM UNTIL INPUTVALID = 'Y'
DISPLAY 'ENTER THE TOTAL AMOUNT OF YOUR LOAN:'
DISPLAY 'FORMAT: XXXXXXXXX.XX (OMIT DECIMAL POINT)'
ACCEPT TOTAL-LOAN
IF TOTAL-LOAN IS NUMERIC THEN MOVE 'Y' TO INPUTVALID
ELSE DISPLAY 'INPUT IS INVALID, PLEASE TRY AGAIN'
END-IF
END-PERFORM.
MOVE TOTAL-LOAN TO FTOTAL-LOAN.
*
MOVE 'N' TO INPUTVALID.
PERFORM UNTIL INPUTVALID = 'Y'
DISPLAY 'ENTER YOUR ANNUAL INTEREST RATE:'
DISPLAY 'FORMAT: XXX.XX (OMIT DECIMAL POINT)'
ACCEPT INTEREST-RATE
IF INTEREST-RATE IS NUMERIC THEN MOVE 'Y' TO INPUTVALID
ELSE DISPLAY 'INPUT IS INVALID, PLEASE TRY AGAIN'
END-IF
END-PERFORM.
*
MOVE 'N' TO INPUTVALID.
PERFORM UNTIL INPUTVALID = 'Y'
DISPLAY 'ENTER NUMBER OF YEARS:'
DISPLAY 'FORMAT: XXX'
ACCEPT YEARS
IF YEARS IS NUMERIC THEN MOVE 'Y' TO INPUTVALID
ELSE DISPLAY 'INPUT IS INVALID, PLEASE TRY AGAIN'
END-IF
END-PERFORM.
As described, this section is for gathering user input. It checks that the user provides
valid input before moving on to the next section. The first part gathers and checks the
loan amount, the second part is for the interest rate, and the third is for the number of
years on the loan. Each part loops until the input data is in the correct format so that
nothing weird happens later.
* -----------------------
* COMPUTE ANNUITY
*
COMPUTE INTEREST-RATEP = TOTAL-LOAN * 100.
DISPLAY 'TOTAL-LOAN: ' FTOTAL-LOAN ' USD - INTEREST-RATE: '
- INTEREST-RATEP '%'.
DISPLAY ' Y M AMOUNT '.
DISPLAY '--- --- -------------'.
PERFORM YEARS TIMES
ADD 12 TO MONTHS
COMPUTE MONTHLY-PAYMENT = TOTAL-LOAN * FUNCTION ANNUITY
- ((INTEREST-RATE / 12), MONTHS)
COMPUTE YEARS = MONTHS / 12
MOVE MONTHLY-PAYMENT TO FMONTHLY-PAYMENT
DISPLAY YEARS ' ' MONTHS ' ' FMONTHLY-PAYMENT ' USD'
END-PERFORM.
*
GOBACK.
This last part does the math for calculating the annuity. Its pretty simple. It also
reformats the result for printing.
Here is an example of the program in action with good data:
Here is an example with bad data: