Description
Objectives:
1. Separate class code into a declaration (header) and implementation
components;
2. Implement a copy constructor;
3. Use the preprocessor directives #ifndef, #define and #endif.
This assignment is an extension of Unit 11 Programming Assignment. You will
modify your implementation of “call_class”. The class will still manage a dynamic
array of call records. Call this program “call_stats8.cpp”. You must separate the
declaration and implementation for the class “call_class” into two separate files.
Please put the class declaration in the file called “call_class.h”, and put the class
implementation in the file called “call_class.cpp. Your driver will be called
“call_stats8.cpp” that is provided. However, you will need to modify it to test the
functionality of your program.
Your input data will be in the file “callstats_data.txt.
The descriptions of the functions you will implement are as follows:
1. the copy constructor will perform a deep copy of an object.
2. (you implemented this in the previous program) the default
constructor to initialize the state of your class. The default constructor
will read the data from the file “callstats_data.txt” into the dynamic array
call_DB. If call_DB becomes full, the function should call the function
“double_size” to double the size (capacity) of call_DB. Remember, count
and call_DB are private members of your class and do not need to be
passed to an member function of your class.
3. (you implemented this in the previous program) is_empty is a
Boolean public member function of the class. It has no formal parameter
because count is a member of the state of the class (private member) and
does not need to be passed to it because the state of the class if known to
all member functions of the class. If count == 0 then true is returned;
otherwise false is returned.
4. (you implemented this in the previous program) is_full is a Boolean
public member function of the class. It has no formal parameters because
count and size are members of the state of the class (private members)
and do not need to be passed to it because the state of the class if known
to all member functions of the class. If count == size then true is return;
otherwise false. The size is the capacity which is the total number of cells
allocated to call_DB.
5. (you implemented this in the previous program) search is an integer
public member function that has only one formal parameter, the key. key
is the cell phone number for the record you are search for. The array of
records, call_DB and count are members of the state of the class and do
not need to be passed to a member function of the class; The function will
return the location of key in call_DB if it is there; otherwise -1 is
returned.
6. (you implemented this in the previous program) add is a void public
member function that inserts the information for a call into call_DB.
Duplicates cell numbers are ok; add will prompt the user for the
firstname, lastname, cell number, relays and call length. You may call
process record to re-process when you add a new record. add no formal
parameters.
7. overload operator “-“ as a member function of call_class with chaining.
This function will have the same functionality as the “remove” function.
Recall the following about the function remove: “remove is a void public
member function thaqt deletes all records with the cell number stored in
key. If duplicate records exist with the same cell number they must all be
deleted. “remove” has only one formal parameter, the key.” Note, because
we are overloading with chaining we must return the current object
“*this”.
8. (you implemented this in the previous program) double_size is a void
public member function that doubles the capacity of call_DB.
“double_size” has no formal parameters because size, count and call_DB
are all members of the state of the class, call_class. First, size is multipled
by two; second, memory is allocated using “call_record *temp=new
call_record[size]; third the records in call_DB are copied into temp with
the statement “temp[i]=call_DB[i]” using a for loop. Forth, the old
memory for call_DB is de-allocated using “delete [ ] call_DB”; Finally,
call_DB is set to point to the new memory pointed to by temp using
“call_DB = temp”.
9. (you implemented this in the previous program) process is a void
public member function the has no formal parameter because
call_DB and count are members of the state of the class.. The function
process will calculate the net cost of a call (net_cost), the tax on a call
(call_tax) and the total cost of the call (total_cost) using the number of
relay stations (relays) and the length in minutes of the call (call_length)
for all call records stored in call_DB. Please consider the following:
a. The tax rate on a call (call_tax) is simply based on the number of
relay stations (relays) used to make the call (0<= relays <=5 then
call_tax = 1%; 6<= relays <=11 then call_tax = 3%; 12<=
relays<=20 then call_tax = 5%; 21<= relays <=50 then call_tax =
8%; relays >50 then call_tax =12%) .
b. The net cost of a call is calculated by the following
formula: net_cost = ( relays / 50 x 0.40 x call_length).
c. The tax on a call is equal to net_cost x call_tax / 100.
d. The total cost of a call (rounded to the nearest hundredth) is
calculated by the following formula: total_cost = net_cost +
call_tax . All tax and cost calculations should be rounded to the
nearest hundredths.
10. (you implemented this in the previous program) overload operator
“<<“ as a friend function of call_class with chaining. This function
will have the same functionality as the “print” (it will print to the
screem). Recall the following about the function print: “print is a
void public member function that has no formal parameters because count
and call_DB are members of the state of the class. The function will print
every field of every call_record in call_DB to the screen”.
11.(you implemented this in the previous program) the destructor to deallocate all memory allocated to call_DB. This function has no formal
parameters because call_DB is a member of the state of the class. It will
be called automatically by the compiler.
Use the driver “call_stats8.cpp” to help you implement this program.
Output Format for the overload “operator<<”:
Consider the following sample output table when designing and
implementing “operator<<“. See section “Format of Output below.
(The output is in the following order: firstname, lastname, cell phone
number, relays, minutes, net cost, tax rate, call tax, total call cost)
Jean Hayward 9546321555 0 0 0 0.01 0 0
Marlon Brando 5612971340 5 50 2 0.01 0.02 2.02
John Kennedy 3051234567 8 25 1.6 0.03 0.05 1.65
Input Stream:
In the assignment you will declare one ifstream to bind your input to the file
“callstats_data.txt” Whenever a program performs file i/o you must include the
“fstream” library.
Format of the input data file(input filename is “callstats_data.txt”): Do not
include column titles
(The order of the columns are as follows: firstname, lastname, cell phone
number, relays, minutes)
Jean Hayward 9546321555 0 0
Marlon Brando 5612971340 5 50
John Kennedy 3051234567 8 25
Hillary Clinton 7542346622 24 17
George Bush 3054432762 15 30
Barack Obama 9544321011 50 100
Donald Trump 8776219988 87 82
Bernie Sanders 9042224556 4 5
Harry Ford 7877176590 11 1
Michelle Obama 5617278899 20 45
Ann Dunham 9546321555 4 3
Vladimir Putin 5612971340 79 86
Harriet Tubman 3051234567 8 25
Oprah Winfrey 5611234444 24 118
Charlotte Ray 3054432762 115 25
Tina Turner 8776219988 265 22
Shirley Chisholm 9042224556 2 5
Maritza Correla 7877176590 89 67
Margaret Thatcher 5617278899 40 56
Format of Output to screen:
(the order of the columns is as follows: firstname, lastname, cell phone number,
relays, minutes, net cost, tax rate, call tax, total call cost)
Jean Hayward 9546321555 0 0 0 0.01 0 0
Marlon Brando 5612971340 5 50 2 0.01 0.02 2.02
John Kennedy 3051234567 8 25 1.6 0.03 0.05 1.65
Hillary Clinton 7542346622 24 17 3.26 0.08 0.26 3.53
George Bush 3054432762 15 30 3.6 0.05 0.18 3.78
Barack Obama 9544321011 50 100 40 0.08 3.2 43.2
Donald Trump 8776219988 87 82 57.07 0.12 6.85 63.92
Bernie Sanders 9042224556 4 5 0.16 0.01 0 0.16
Harry Ford 7877176590 11 1 0.09 0.03 0 0.09
Michelle Obama 5617278899 20 45 7.2 0.05 0.36 7.56
Ann Dunham 9546321555 4 3 0.1 0.01 0 0.1
Vladimir Putin 5612971340 79 86 54.35 0.12 6.52 60.87
Harriet Tubman 3051234567 8 25 1.6 0.03 0.05 1.65
Oprah Winfrey 5611234444 24 118 22.66 0.08 1.81 24.47
Charlotte Ray 3054432762 115 25 23 0.12 2.76 25.76
Mary Carter 9544321011 43 10 3.44 0.08 0.28 3.72
Tina Turner 8776219988 265 22 46.64 0.12 5.6 52.24
Shirley Chisholm 9042224556 2 5 0.08 0.01 0 0.08
Maritza Correla 7877176590 89 67 47.7 0.12 5.72 53.43
Margaret Thatcher 5617278899 40 56 17.92 0.08 1.43 19.35
Handing in your program:
Electronically submit a zip file called “program12.zip” that contains
“call_stats8.cpp”, “call_class.h” and “call_class.cpp” in the
Assignments area of blackboard before the due date and time.
Remember, to submit an assignment – even if it is late…Please start
early and let me know if you have any questions ASAP.