Project 3–Advanced Taxi SystemObjective
To gain experience and practice using classes.
Problem
As a concierge at a local hotel, you would like to simplify your work when ordering taxi rides for
your customers. Write a program that will place orders with local taxi companies for your
customers.
Specifications
For your program, implement two classes and a struct. You will have a class for taxi companies,
a class for times, and a struct for orders. The class and struct attributes and methods should be as
follows:
Time
-int h, m
stores the time in 24h mode
-void rollForward()
-int getH()
converts h to 12-hour mode, used by print
-int getM()
returns m, used by print
+Time(int h, int m)
constructor, sets h and m
+Time()
constructor, doesn’t set anything
+void setTime()
asks the user to input time in 24h mode
+void print()
nicely prints the time in 12h mode
Trip
int miles
Time pickup
string passenger
Taxi
-string name
stores the name of the taxi company
-vector< Trip > trips
stores the list of trips ordered with the company
-double rateMiles
stores the charge per mile
-double rateTrips
stores the charge per trip (flat rate)
+Taxi(string n, double rM, double rT)
constructor that sets the name, and rates
+string getName()
returns the company’s name
+double calculateTrip(Trip t)
calculates the cost of the trip passed as argument
+double calculateCart()
calculates cost of all pending orders
+void addTrip(Trip t)
adds a trip to the list of orders
+void showTripx()
prints the total pending cost and shows all trips
In int main, you should start by establishing an array of three taxi companies. The following
properties should be given to each taxi company:
Build a menu system that will allow the user to order a trip, view their cart, or exit.
Ordering a trip should ask the user for the passenger’s name, the number of miles to be driven,
and use the Time class method to get the time of the pickup. Create a Trip instance with those
pieces of information. Next, display a submenu for the user to choose a taxi company from
which to order. Show the cost the trip would be with each company using the calculateTrip class
method. Use a for loop to iterate over your taxi company array rather than re-writing the same
basic menu option for each company. When the user selects a company to place the order with,
us the addTrip class method of the corresponding taxi company to add the Trip instance you
created earlier.
Viewing the cart should use a for loop to iterate over the companies in the array, calling the
showTrips class method for each.
Sample Output: Normal Operation (user input in italics)
>2
Active Trips:
>1
What is the passenger\'s first name? Bob
How many miles would you like to travel? 10
Enter the time with whitespace separating the hours and minutes: 5 45 Which company would
you like to place the Trip with?
1. Checker Cab - $30.00
2. GTS Lawrence - $7.00
3. Jayhawk Taxi - $9.00
>2
>2
Active Trips:
Name
Charge per mile
Charge per trip
Checker Cab
0
30
GTS Law.
Project 3–Advanced Taxi SystemObjectiveTo gain experience and prac.pdf
1. Project 3–Advanced Taxi SystemObjective
To gain experience and practice using classes.
Problem
As a concierge at a local hotel, you would like to simplify your work when ordering taxi rides for
your customers. Write a program that will place orders with local taxi companies for your
customers.
Specifications
For your program, implement two classes and a struct. You will have a class for taxi companies,
a class for times, and a struct for orders. The class and struct attributes and methods should be as
follows:
Time
-int h, m
stores the time in 24h mode
-void rollForward()
-int getH()
converts h to 12-hour mode, used by print
-int getM()
returns m, used by print
+Time(int h, int m)
constructor, sets h and m
+Time()
constructor, doesn’t set anything
+void setTime()
asks the user to input time in 24h mode
+void print()
nicely prints the time in 12h mode
Trip
int miles
Time pickup
string passenger
Taxi
-string name
stores the name of the taxi company
-vector< Trip > trips
stores the list of trips ordered with the company
2. -double rateMiles
stores the charge per mile
-double rateTrips
stores the charge per trip (flat rate)
+Taxi(string n, double rM, double rT)
constructor that sets the name, and rates
+string getName()
returns the company’s name
+double calculateTrip(Trip t)
calculates the cost of the trip passed as argument
+double calculateCart()
calculates cost of all pending orders
+void addTrip(Trip t)
adds a trip to the list of orders
+void showTripx()
prints the total pending cost and shows all trips
In int main, you should start by establishing an array of three taxi companies. The following
properties should be given to each taxi company:
Build a menu system that will allow the user to order a trip, view their cart, or exit.
Ordering a trip should ask the user for the passenger’s name, the number of miles to be driven,
and use the Time class method to get the time of the pickup. Create a Trip instance with those
pieces of information. Next, display a submenu for the user to choose a taxi company from
which to order. Show the cost the trip would be with each company using the calculateTrip class
method. Use a for loop to iterate over your taxi company array rather than re-writing the same
basic menu option for each company. When the user selects a company to place the order with,
us the addTrip class method of the corresponding taxi company to add the Trip instance you
created earlier.
Viewing the cart should use a for loop to iterate over the companies in the array, calling the
showTrips class method for each.
Sample Output: Normal Operation (user input in italics)
>2
Active Trips:
>1
What is the passenger's first name? Bob
How many miles would you like to travel? 10
Enter the time with whitespace separating the hours and minutes: 5 45 Which company would
3. you like to place the Trip with?
1. Checker Cab - $30.00
2. GTS Lawrence - $7.00
3. Jayhawk Taxi - $9.00
>2
>2
Active Trips:
Name
Charge per mile
Charge per trip
Checker Cab
0
30
GTS Lawrence
0.20
5
Jayhawk Taxi
0.80
1
$ 7.00 pending with GTS Lawrence
Trip scheduled for Bob covering 10 miles with pickup at 05:45 am
>1
What is the passenger's first name? Jane
How many miles would you like to travel? 100
Enter the time with whitespace separating the hours and minutes: 18 20 Which company would
you like to place the Trip with?
1. Checker Cab - $30.00
2. GTS Lawrence - $25.00
3. Jayhawk Taxi - $81.00
>2
===Main Menu===
1. Order a trip
2. View Cart
3. Exit
>2
Active Trips:
4. Trip scheduled for Bob covering 10 miles with pickup at 05:45 am
Trip scheduled for Jane covering 100 miles with pickup at 06:20 pm $ 0.00 pending with
Jayhawk Taxi
>1
What is the passenger's first name? Sam
How many miles would you like to travel? 4
Enter the time with whitespace separating the hours and minutes: 10 13
Which company would you 1. Checker Cab - $30.00 2. GTS Lawrence - $5.80 3. Jayhawk Taxi -
$4.20 >3
>2
Active Trips:
$ 0.00 pending with Checker Cab $ 32.00 pending with GTS Lawrence
Trip scheduled for Bob covering 10 miles with pickup at 05:45 am
Trip scheduled for Jane covering 100 miles with pickup at 06:20 pm $ 4.20 pending with
Jayhawk Taxi
Trip scheduled for Sam covering 4 miles with pickup at 10:13 am
>1
What is the passenger's first name? Zoe
How many miles would you like to travel? 200
Enter the time with whitespace separating the hours and minutes: 23 59 Which company would
you like to place the Trip with?
1. Checker Cab - $30.00
2. GTS Lawrence - $45.00 3. Jayhawk Taxi - $161.00 >1
>2
Active Trips:
$ 30.00 pending with Checker Cab
Trip scheduled for Zoe covering 200 miles with pickup at 11:59 pm $ 32.00 pending with GTS
Lawrence
Trip scheduled for Bob covering 10 miles with pickup at 05:45 am
Trip scheduled for Jane covering 100 miles with pickup at 06:20 pm $ 4.20 pending with
Jayhawk Taxi
Trip scheduled for Sam covering 4 miles with pickup at 10:13 am
>3 Exiting...
Notes
You will likely need the vector, iomanip, and iostream libraries.
Deviating from the public / private requirements outlined above will incur penalties. Part of
5. what we are trying to learn in this project is lost if everything is public or global.
You should not need any more or any fewer class methods or attributes to accomplish this
project.
Time
-int h, m
stores the time in 24h mode
-void rollForward()
-int getH()
converts h to 12-hour mode, used by print
-int getM()
returns m, used by print
+Time(int h, int m)
constructor, sets h and m
+Time()
constructor, doesn’t set anything
+void setTime()
asks the user to input time in 24h mode
+void print()
nicely prints the time in 12h mode
Solution
Given below are files for the question along with output. Please do rate the answer if it helped.
Thank you.
Time.h
#ifndef Time_h
#define Time_h
class Time
{
int h, m; //24 hour format
int getH(); //convert to 12 hr format
int getM(); //return minutes
public:
Time(int h, int m);
6. Time();
void setTime();
void print();
};
#endif /* Time_h */
Time.cpp
#include "Time.h"
#include
#include
using namespace std;
int Time::getH()
{
int hrs;
if(h == 0)
hrs = 12;
else if(h > 12)
hrs = h - 12;
else
hrs = h;
return hrs;
}
int Time::getM() //return minutes
{
return m;
}
Time::Time(int h, int m)
{
if(h >=0 && h <= 23)
this->h = h;
else
this->h = 0;
if(m >=0 && m <= 59)
this->m = m;
else
7. this->m = 0;
}
Time::Time()
{
this->h = 0;
this->m = 0;
}
void Time::setTime()
{
cout << "Enter the time with whitespace separating the hours and minutes: ";
cin >> h >> m;
}
void Time::print()
{
string ampm = "am";
if(h >= 12)
ampm = "pm";
cout << setw(2) << setfill('0') << getH() << ":" << setw(2) << getM() << " " << ampm;
cout << setfill(' ');
}
Taxi.h
#ifndef Taxi_h
#define Taxi_h
#include
#include
#include "Time.h"
using namespace std;
typedef struct
{
int miles;
Time pickup;
string passenger;
}Trip;
class Taxi
{
10. while(choice != 3)
{
cout << "=== Main Menu ===" << endl;
cout << "1. Order a trip" << endl;
cout << "2. View Cart" << endl;
cout << "3. Exit" << endl;
cout << "> ";
cin >> choice;
switch(choice)
{
case 1:
orderTrip(taxis);
break;
case 2:
viewCart(taxis);
break;
case 3:
break;
default:
cout << "Invalid chocie . Try again" << endl;
}
}
return 0;
}
void orderTrip(vector &taxis)
{
Trip trip;
int choice;
cout << "What is the passenger name? ";
cin >> trip.passenger;
cout << "How many miles would you like to travel ? ";
cin >> trip.miles;
11. trip.pickup.setTime();
cout << "Which company would you like to place the Trip with? " << endl;
for(int i = 0; i < 3; i++)
{
cout << (i+1) << taxis[i].getName() << " - " << taxis[i].calculateTrip(trip) << endl;
}
cout << "> ";
cin >> choice;
if(choice >= 1 && choice <= 3)
taxis[choice - 1].addTrip(trip);
else
cout << "Invalid choice!" << endl;
}
void viewCart(vector &taxis)
{
cout << "Active Trips:" << endl;
for(int i = 0; i < 3; i ++)
taxis[i].showTripx();
cout << endl;
}
output
=== Main Menu ===
1. Order a trip
2. View Cart
3. Exit
> 2
Active Trips:
$0.00 pending with Checker Cab
$0.00 pending with GTS Lawrence
$0.00 pending with Jayhawk Taxi
=== Main Menu ===
1. Order a trip
12. 2. View Cart
3. Exit
> 1
What is the passenger name? Bob
How many miles would you like to travel ? 10
Enter the time with whitespace separating the hours and minutes: 5 45
Which company would you like to place the Trip with?
1Checker Cab - 30.00
2GTS Lawrence - 7.00
3Jayhawk Taxi - 9.00
> 2
=== Main Menu ===
1. Order a trip
2. View Cart
3. Exit
> 2
Active Trips:
$0.00 pending with Checker Cab
$7.00 pending with GTS Lawrence
Trip scheduled for Bob covering 10 miles at 05:45 am
$0.00 pending with Jayhawk Taxi
=== Main Menu ===
1. Order a trip
2. View Cart
3. Exit
> 1
What is the passenger name? Jane
How many miles would you like to travel ? 100
Enter the time with whitespace separating the hours and minutes: 18 20
Which company would you like to place the Trip with?
1Checker Cab - 30.00
2GTS Lawrence - 25.00
3Jayhawk Taxi - 81.00
> 2
=== Main Menu ===
13. 1. Order a trip
2. View Cart
3. Exit
> 2
Active Trips:
$0.00 pending with Checker Cab
$32.00 pending with GTS Lawrence
Trip scheduled for Bob covering 10 miles at 05:45 am
Trip scheduled for Jane covering 100 miles at 06:20 pm
$0.00 pending with Jayhawk Taxi
=== Main Menu ===
1. Order a trip
2. View Cart
3. Exit
> 1
What is the passenger name? Sam
How many miles would you like to travel ? 4
Enter the time with whitespace separating the hours and minutes: 10 13
Which company would you like to place the Trip with?
1Checker Cab - 30.00
2GTS Lawrence - 5.80
3Jayhawk Taxi - 4.20
> 3
=== Main Menu ===
1. Order a trip
2. View Cart
3. Exit
> 2
Active Trips:
$0.00 pending with Checker Cab
$32.00 pending with GTS Lawrence
Trip scheduled for Bob covering 10 miles at 05:45 am
Trip scheduled for Jane covering 100 miles at 06:20 pm
$4.20 pending with Jayhawk Taxi
Trip scheduled for Sam covering 4 miles at 10:13 am
14. === Main Menu ===
1. Order a trip
2. View Cart
3. Exit
> 1
What is the passenger name? Zoe
How many miles would you like to travel ? 200
Enter the time with whitespace separating the hours and minutes: 23 59
Which company would you like to place the Trip with?
1Checker Cab - 30.00
2GTS Lawrence - 45.00
3Jayhawk Taxi - 161.00
> 1
=== Main Menu ===
1. Order a trip
2. View Cart
3. Exit
> 2
Active Trips:
$30.00 pending with Checker Cab
Trip scheduled for Zoe covering 200 miles at 11:59 pm
$32.00 pending with GTS Lawrence
Trip scheduled for Bob covering 10 miles at 05:45 am
Trip scheduled for Jane covering 100 miles at 06:20 pm
$4.20 pending with Jayhawk Taxi
Trip scheduled for Sam covering 4 miles at 10:13 am
=== Main Menu ===
1. Order a trip
2. View Cart
3. Exit
> 3