Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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.

print

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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Intelligent Databases Technologies And Applications

Authors: Zongmin Ma

1st Edition

1599041219, 978-1599041216

More Books

Students also viewed these Databases questions