Homework 2: Calculating Credit Card Interest

Please review the rules on collaboration for homework for this course, as well as the guidelines for turning in work.

In this assignment you will write a program to simulate calculating credit card interest whilst making only the minimum payment each month.

See the "Grading" section below for specific criteria for this assignment. As with all projects and homework, the style guidelines apply to this assignment, and points may be deducted for poor style, readability, and testing.

Learning outcomes

Upon completion of this assignment, students will demonstrate understanding of the following learning outcomes:

1. In the context of low-level, systems programming: 2. Architect and analyze stateful programs: 3.Productively develop software within a Unix-style command-line interface (CLI): 8. Author small, memory-safe programs that interact with the world:

Background

An individual's credit card comes with an annual percentage rate (APR), which dictates how much interest you'd pay on a balance over a year. However, because users typically accrue charges over the course a billing cycle, most credit card issuers calculate a so-called daily periodic rate (or DPR) and charge you interest based on the average daily balance during your billing cycle.

Details differ by card issuer, but we will calculate the daily periodic rate as the annual percentage rate over 365.

The total interest charges accrued in your billing cycle is then your average daily balance multiplied by the DPR and the number of days in the billing cycle.

Example

Suppose your APR is 18%, then the DPR is calculated as

0.18 / 365 = 0.0004931506849

Now suppose you're not adding any new charges and your forward balance is $42. If the month corresponding to your billing cycle has 31 days, the total interest you owe is

 $42 * 0.004931 * 31 = $0.64

This is a pretty underwhelming amount, but as we'll see, the compounding interest can be significant when you only pay the minimum amount each month.

The Task

Write a program called creditcard.c that establishes an annual percentage rate and an initial balance as well as a monthly minimum payment. The program should then display the amount paid each month, along with the interest accrued and the remaining balance. Once the balance is paid off, it should report how many months it took to pay off the balance and the total amount paid.

For example, if we have a common APR of 18% and monthly minimum of $35, we might see the following for a forward balance of $500.

Cycle	Month	Intrst	Payment	Balance
 0	 9	$ 7.40	$35.00	$ 472.40
 1	10	$ 7.22	$35.00	$ 444.62
 2	11	$ 6.58	$35.00	$ 416.20
 3	12	$ 6.36	$35.00	$ 387.56
 4	 1	$ 5.92	$35.00	$ 358.48
 5	 2	$ 4.95	$35.00	$ 328.43
 6	 3	$ 5.02	$35.00	$ 298.46
 7	 4	$ 4.42	$35.00	$ 267.87
 8	 5	$ 4.10	$35.00	$ 236.97
 9	 6	$ 3.51	$35.00	$ 205.47
10	 7	$ 3.14	$35.00	$ 173.61
11	 8	$ 2.65	$35.00	$ 141.27
12	 9	$ 2.09	$35.00	$ 108.36
13	10	$ 1.66	$35.00	$  75.01
14	11	$ 1.11	$35.00	$  41.12
15	12	$ 0.63	$35.00	$   6.75
16	 1	$ 0.10	$ 6.86	$   0.00
After 17 months, you paid $566.86 on an initial balance of $500.00.

Your program should also follow these requirements:

Grading

Your testing should cover an appropriate range of "input" value combinations and your program's output should make it easy to assess correctness. I highly recommend for this (and all coding projects) that you make a testing plan before you start to write code. You do not need to plan to test all possible inputs to the program, but you should have a plan that will test major sections of your code and demonstrate your problem solving skills. Include this plan when you submit your code and testing transcript.

The assignment will be worth 25 points, based on the following criteria: