Question
Description: This project will expand Project 2 by adding additional functionality, using pointers, and implementing abstract data types (ADTs) through classes. Pointers must be used
Description:
This project will expand Project 2 by adding
additional functionality, using pointers, and
implementing abstract data types (ADTs) through classes.
Pointers must be used for all array
manipulation
, including arrays with ADTs (structs, cla
sses) e.g, rental cars, rental agencies.
Pointers must be used in function pr
ototypes and function parameter lists
- not square
brackets. Make sure all your C-string functions (e.
g. string copy, string compare, etc.) work with
pointers (parameters list and function implementation)
. Square brackets are to be used only when
declaring an array variable.
Remember: pointer arithmetic
(e.g., ++ , +=, - -, -=) and
setting the
pointer back to the base address
using the array name
can be used to move through arrays
. All
pointers must be passed by value. (
Note
: Try to also get accustomed to using the arrow operator (->)
with Class Object pointers for member access if you use such in your code.)
The new functionality is as follows: You are given
an updated data file (e.g. Agencies.txt) where
there are 3 rental Car Agency locations, where
each of the 3
locations (
RentalAgency
) has
5
cars
(
RentalCar
). You will have
similar menu options
, but the
functionality has been updated
below. Note: using multiple helper functions to do
smaller tasks will make this project significantly
easier. You may want to create a function that w
ill get a car from a location based on the location
and car indices.
The RentalCar Class will contain the following private data members:
m_year
, an
int
(year of production)
m_make
, a C-string (
char
array of 256 maximum size)
m_model
, a C-string (
char
array of 256 maximum size)
m_price
, a
float
(price per day)
m_available
, a
bool
(1 = true; 0 = false; try to display true/false using the
"
std::boolalpha
" manipulator like:
cout << boolalpha << boolVariable;
)
and will have the following public methods:
Default Constructor
will set the aforementioned data members to default initial values of
your selection, and m_available specifically to false. (
Hint
: Remember to use properly named
constants where appropriate).
Parameterized Constructor
will create a new object based on the values of the
arguments passed into it. In its parameters list:
a) there should be a parameter corresponding
to every one of the class data members, b) th
ere should also be a default parameter for the
parameter used to specify whether the car is available.
Separate
get
and
set methods
for all data members.
will print out all the cars data.
estimateCost
will estimate the cars cost
given
(via a parameter passed to it) a number of
days to rent it for.
The RentalAgency ADT will be a struct and
will contain the following data members:
name
, a C-string (
char
array of 256 maximum size)
zipcode
, an
int
array of size 5 (
Hint
: You will
NOT
be able to use
cin
and
cout
or any
fstream
objects directly with this
int
array as you were doing so far with C-strings. The
reason is that reading/writing is specially handled by C++ for
char
array types. You will
need to manage reading/writing to an
int
array on your own.)
inventory
, an array of
RentalCar
objects with a size of 5
The menu must have the following entries,
each implementing a functionality:
1) Ask
the user for the
input file name
. Then,
read ALL
data from that
file
(the file has
been
structured
where the first line is the Car Agency info, followed by 5 cars). The data
have to be stored into
arrays of Class type Objects
.
2) Print out to terminal ALL
data for
all Agencies
and
all their corresponding Cars
in a
way that demonstrates this relationship (see Sample Output section).
3) Estimate
car
rental cost
-
prompt
for: a) an
Agency
(e.g., Hertz you can do so with a
0-2
int
array index number per-Agency), b) a
Car number
(with a 0-4
int
array index
number per-Car of each agency), c) the number of
days to rent
it for
(
rental_cost=days_to_rent*price_per_day
).
4) Find
the
most expensive
Car
Print to terminal
the single most expensive Car out of
all 3 Agencies.
5) Print out
only the
available
Cars
- from
all Agencies
, to a
separate output file
(when
the user chooses menu entry 5, they should also get
asked
for an
output file name
).
6) Exit
program.
The following minimum functionality and structure is required:
Ask the
user
for the
input file
name.
The list(s) of cars must be stored into
array(s) of Class type Objects
.
The list of agencies must be stored into an
array of Struct Objects
.
Use
character arrays
to hold your strings (i.e., C-strings) exclusively (using the
std::string
data type is still not allowed).
Write
multiple functions
(Hint: You could have each menu option be a function).
At least on function must use
pass by-Reference
. Otherwise, as before, you are free to use
pass by-Value, pass by-Reference
,
pass by-Address
for your function parameters. (
Note
:
Remember that using pass by-Value will make
the function work on a local internal copy of
whatever variable you pass as an argument, therefore the change will not be made on the
actual argument itself, and it will be left unaffected after the function call is complete).
Pointers
must be used for
all array manipulation
(iterating over elements to read/modify
cannot be performed with bracket operator accessing).
Pointers
must be used in
function prototypes
and
function parameter lists
(the bracket
notation is not allowed in parameters lists).
Pointers
can only be
moved by incrementing or decrementing
:
double
d[3] = {1,2,3};
double *
d_Pt = d;
for
(
int
i=0; i<3; ++i,++d_Pt){
cout
<<
*
d_Ptd; }
Or by
setting
the pointer
back to the base address
using the array name.
d_Pt = d;
cout
<<
*
d_Pt << endl;
Write your
own C-string length
,
compare
,
copy
,
concatenate
functions. Their prototypes
will have the form (use the prototypes exactly as provided, with
char *
parameters):
// counts characters in str array until a NULL-character '\0' is
found, then it returns that number excluding the '\0' one
// the return type size_t represents an unsigned integral number
large enough to contain the maximum possible number of a storage
size that can appear on a target architecture
size_t
myStringLength
(
const char *
str);
// returns 0 when the C-strings match, i.e. their characters are
equal one-by-one until a NULL-character '\0' is found in both
strings and at the same position as well
// returns a value <= -1 if the first character that does not
match has a lower value in str1 than in str2
// returns a value >= 1 if the first character that does not
match has a higher value in str1 than in str2
int
myStringCompare
(
const char *
str1,
const char *
str2);
// copies characters from source to destination array until a
NULL-character '\0' is found in source, then it NULL-terminates
destination too
// returns a pointer to the destination array
char *
myStringCopy
(
char *
destination,
const char *
source);
// appends the content of source to the destination array
// this means that the NULL-terminator of destination is
overwritten by the first character of source and a NULL-character
'\0' is appended at the end of the concatenated Cstring in
destination
// returns a pointer to the destination array
char *
myStringCat
(
char *
destination,
const char *
source);
The other functionality and structure of the program should remain the
same as Project
#2
, including
writing to screen
and
file
, as well as
restrictions on string
libraries,
global
variables
and
constants
, etc.
Implement the concepts of encapsulation and data hiding!
Making the RentalCar data members private an
d implementing a public interface through
the class Constructors and other methods is your first acquaintance with these concepts in practice.
Try to structure your class source code Implem
ent the concepts of encapsulation and data
hiding!
Try to structure your declarations and implem
entaions as much as possible into class/struct
header files (e.g. RentalCar.h, RentalAgency.h)
, class/struct source files (e.g. RentalCar.cpp,
RentalAgency.cpp), and other source files (proj3.cpp).
Do your best in order to acquaint yourself with these new concepts at this early point, so
that it pays off in future project wh
ich will impose such hard requirements.
Sample Output for menu option 2:
Hertz 93619
2014 Toyota Tacoma , $115.12 per day , Available: true
2012 Honda CRV , $85.1 per day , Available: false
2015 Ford Fusion , $90.89 per day , Available: false
2013 GMC Yukon , $110.43 per day , Available: false
2009 Dodge Neon , $45.25 per day , Available: true
Alamo 89502
2011 Toyota Rav4 , $65.02 per day , Available: true
2012 Mazda CX5 , $86.75 per day , Available: true
2016 Subaru Outback , $71.27 per day , Available: false
2015 Ford F150 , $112.83 per day , Available: true
2010 Toyota Corolla , $50.36 per day , Available: true
Budget 93035
2008 Ford Fiesta , $42.48 per day , Available: false
2009 Dodge Charger , $55.36 per day , Available: true
2012 Chevy Volt , $89.03 pe
r day , Available: false
2007 Subaru Legacy , $59.19 per day , Available: false
2010 Nissan Maxima , $51.68
per day , Available: true
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