Question
Write a program for a mobile operator to manage the bills of different call plans. You will have a base abstract class Plan which has
Write a program for a mobile operator to manage the bills of different call plans.
You will have a base abstract class Plan which has the following members:
1) Customer Name: a string holding the customers name
2) Phone number: a string holding the mobile phone number.
3) Bill Month: an int with values ranging from 1 to 12 indicating the month of the bill.
4) A parameterized constructor.
5) A pure virtual function calculateBill( )
6) A pure virtual function readCalls(istream&,int&,int&) that given a file with the calls duration of the customer, it sets the second & third parameters as given in the derived classes.
7) A virtual function printAccountDetails() which prints the accounts customer name, phone number & month of the bill as one of the months {Jan,Feb,Mar,..Dec}.
A sample of the file calls.txt is shown.
03:02 | 03374826245 |
120:18 | 03174826242 |
48:45 | 03274826234 |
02:56 | 03374821232 |
07:00 | 03189706483 |
100:41 | 03374821232 |
29:40 | 03285768970 |
106:55 | 03189706483 |
Each line in the file has the call duration, as minutes and seconds, and the phone number of the receiver of the call.
Note that the call duration will be rounded up to minutes when readCalls is executed, so for instance 03:02 becomes 4 minutes.
Add two derived classes from the base Plan called PackagePlan and RatePlan.
PackagePlan gives the customer a certain number of minutes monthly with a fixed cost
(monthlyCost). The minutes available are divided into minutes to the same operator (sameMins), and minutes to other operators (otherMins). Assume that phone numbers of this operator start with 033.
If the customer needs more minutes either to the same operator or other operators than the minutes given by the package, the extra minutes will have a certain rate (outRate).
PackagePlan has 6 member variables which are:
1) sameMins (available minutes to the same operator be consumed monthly)
2) otherMins (available minutes to other operators to be consumed monthly)
3) monthlyCost (the fixed cost of the package)
4) outRate (the rate of a minute outside of the package)
5) remainingMins (initially set by all of the available minutes in constructor, then updated by readCalls())
6) outPackMins (initially set to 0 in constructor, then updated by readCalls())
PackagePlan also has:
1) A parameterized constructor to take in the customers name, customers phone number, current month, available minutes for the same operator, available minutes for different operators, monthly cost, and out of package rate.
2)The overridden member function calculateBill, which will calculate & display the details of the bill.
3) The overridden member function readCalls(istream&,int&,int&) that given a file with the calls duration of the customer, it sets the second parameter to the minutes to the same operator & the third parameter to minutes to other operators.
4) The overridden function printAccountDetails() which prints all accounts details represented in Plan and PackagePlan.
5) A member function remainingMinutes to return the remaining available minutes in the package.
6) A member function outOfPackageMins that returns extra minutes outside of the package.
RatePlan gives a special rate (callRate) for the minutes without limits to the monthly number of minutes. It also gives the option of adding a favorite number for the customer where cost of calls to this number are calculated based on a discounted rate (favNumRate).
RatePlan has 3 member variables which are:
callRate: a double storing the cost of the minute.
favNumRate: a double storing the cost of the call minute to the favorite number.
favNum: a string storing the favorite number of the customer.
RatePlan has 4 member functions which are:
A parameterized constructor to take in the customers name, customers phone number, current month, call rate, favorite number rate, and favorite number.
The overridden function calculateBill, which will calculate & display the details of the bill.
The overridden function readCalls, that given the calls file, it returns the second parameter as the duration of the calls to the favorite number, and the third parameter as the calls to numbers other than the favorite number.
The overridden function printAccountDetails() which prints all accounts details represented in Plan and RatePlan.
RatePlan gives a special rate (callRate) for the minutes without limits to the monthly number of minutes. It also gives the option of adding a favorite number for the customer where cost of calls to this number are calculated based on a discounted rate (favNumRate).
RatePlan has 3 member variables which are:
callRate: a double storing the cost of the minute.
favNumRate: a double storing the cost of the call minute to the favorite number.
favNum: a string storing the favorite number of the customer.
RatePlan has 4 member functions which are:
1) A parameterized constructor to take in the customers name, customers phone number, current month, call rate, favorite number rate, and favorite number.
2) The overridden function calculateBill, which will calculate & display the details of the bill.
3) The overridden function readCalls, that given the calls file, it returns the second parameter as the duration of the calls to the favorite number, and the third parameter as the calls to numbers other than the favorite number.
4) The overridden function printAccountDetails() which prints all accounts details represented in Plan and RatePlan.
Finally, create a main that:
creates an array of Plan* => Plan* plans[5].
displays a menu for the user that loops for 5 times asking whether the user wants to create a package plan or a rate plan.
If the user enters 0, then create a package plan object and add it to the array, otherwise create a rate plan object.
For each of the plans chosen allow the user to enter all of the info required for that plan.
Finally, loop through the array and call printAccountDetails & calculateBill for each of the objects created. For package plans call reminingMinutes and outOfPackageMins as well.
Note: You may add member functions to any of the classes if you find it helpful , but do not add constructors. Only the mentioned constructors are allowed. Also you can use the built-in string functions for string manipulation.
Example Scenario 1:
Assuming the user entered 0 for package plan with the following info:
The output should be all of the info entered in addition to the detailed bill.
Output:
Name: Mona Ahmed Phone Number: 03275869471 Month: Mar
Same operator minutes available: 100 Other operators minutes available: 500
Monthly cost: 200 Rate of out of package minutes: 0.2
Total minutes consumed: 422 minutes
Same operator minutes: 108 Other operators minutes: 314
Monthly Bill: 201.6
Remaining minutes: 186
Out of package minutes: 8
Example Scenario 2:
Assuming the user entered 1 for rate plan with the following info:
Computers and Artificial Intelligence
Output:
Name: Hassan Gamal Phone Number: 03293846255 Month: Dec
Call rate: 0.15 Favorite number: 03189706483 Favorite rate: 0.05
Total minutes consumed: 422 minutes
Favorite minutes: 114 Others minutes: 308
Monthly Bill: 51.9
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started