CptS 122 – Data Structures
Programming Assignment 7: Bank Account (Bonus
Assigned: Sunday April 5th, 2020
Due: Friday April 17th, 2020 by midnight
I. Learner Objectives:
At the conclusion of this programming assignment, participants should be able to:
• Design, implement and test classes in C++
• Declare and define constructors
• Declare and define destructors
• Compare and contrast public and private access specifiers in C++
• Describe what is an attribute or data member of a class
• Describe what is a method of a class
• Apply and implement overloaded functions
• Distinguish between pass-by-value and pass-by-reference
• Read and write files in C++
II. Overview & Requirements:
1. Design a generic class to hold the following information about a bank account:
Number of deposits this month
Number of withdrawals
Annual interest rate
Monthly service charges
The class should have the following member functions:
• Constructor: Accepts arguments for the balance and annual interest rate.
• deposit: A virtual function that accepts an argument for the amount of the deposit.
The function should add the argument to the account balance. It should also
increment the variable holding the number of deposits.
• withdraw: A virtual function that accepts an argument for the amount of the
withdrawal. The function should subtract the argument from the balance. It should
also increment the variable holding the number of withdrawals.
• calcInt: A virtual function that updates the balance by calculating the monthly
interest earned by the account, and adding this interest to the balance. This is
performed by the following formulas:
𝑀𝑜𝑛𝑡ℎ𝑙𝑦 𝐼𝑛𝑡𝑒𝑟𝑒𝑠𝑡 𝑅𝑎𝑡𝑒 = (
𝐴𝑛𝑛𝑢𝑎𝑙 𝐼𝑛𝑡𝑒𝑟𝑒𝑠𝑡 𝑅𝑎𝑡𝑒
𝑀𝑜𝑛𝑡ℎ𝑙𝑦 𝐼𝑛𝑡𝑒𝑟𝑒𝑠𝑡 = 𝐵𝑎𝑙𝑎𝑛𝑐𝑒 ∗ 𝑀𝑜𝑛𝑡ℎ𝑙𝑦 𝐼𝑛𝑡𝑒𝑟𝑒𝑠𝑡
𝑅𝑎𝑡𝑒 𝐵𝑎𝑙𝑎𝑛𝑐𝑒 = 𝐵𝑎𝑙𝑎𝑛𝑐𝑒 + 𝑀𝑜𝑛𝑡ℎ𝑙𝑦 𝐼𝑛𝑡𝑒𝑟𝑒𝑠𝑡
• monthlyProc: A virtual function that subtracts the monthly service charges from
the balance, calls the calcInt function, and then sets the variables that hold the number
of withdrawals, number of deposits, and monthly service charges to zero.
Next, design a savings account class, derived from the generic account class. The savings
account class should have the following additional member:
status (to represent an active or inactive account)
If the balance of a savings account falls below $25, it becomes inactive. (The status member
could be a flag variable.) No more withdrawals may be made until the balance is raised above
$25, at which time the account becomes active again. The savings account class should have the
following member functions:
• withdraw: A function that checks to see if the account is inactive before a
withdrawal is made. (No withdrawal will be allowed if the account is not active.) A
withdrawal is then made by calling the base class version of the function.
• deposit: A function that checks to see if the account is inactive before a deposit is
made. If the account is inactive and the deposit brings the balance above $25, the
account becomes active again. The deposit is then made by calling the base class
version of the function.
• monthlyProc: Before the base class function is called, this function checks the
number of withdrawals. If the number of withdrawals for the month is more than 4, a
service charge of $1 for each withdrawal above 4 is added to the base class variable
that holds the monthly service charges. (Don’t forget to check the account balance
after the service charge is taken. If the balance falls below $25, the account becomes
Next, design a checking account class, also derived from the generic account class. It should
have the following member functions:
• withdraw: Before the base class function is called, this function will determine if a
withdrawal (a check written) will cause the balance to go below $0. If the balance
goes below $0, a service charge of $15 will be taken from the account. (The
withdrawal will not be made.) If there isn’t enough in the account to pay the service
charge, the balance will become negative and the customer will owe the negative
amount to the bank.
• monthlyProc: Before the base class function is called, this function adds the
monthly fee of $5 plus $0.10 per withdrawal (check written) to the base class variable
that holds the monthly service charges.
III. Submitting Assignments:
1. Must submit your assignment in a zip file through blackboard.
2. Your project must contain at least 3 header files (.h files) and 4 C++ source files (which
must be .cpp files).
3. Your project must build properly. The most points an assignment can receive if it does
not build properly is 65 percent of the total grade.
IV. Grading Guidelines:
This assignment is worth 90 points. Your assignment will be evaluated based on a successful
compilation and adherence to the program requirements. We will grade according to the
• 5 pts – Appropriate top-down design, style, and commenting according to class standards
• 60 pts – Implementation of each function in the three classes. (5 points for each function)
• 10 pts – Implementation inheritance
• 15 pts – implementation of three test cases one for each class object (5 points for each