Assessment 3
Car Rental
CSE1OFX Object Oriented Programming Fundamentals
Before you begin
Objectives
This is an individual assignment. Students are not permitted to work in a group when writing this assignment.
? Discuss the concepts of classes, objects, encapsulation and inheritance relating to objectoriented programming paradigm and apply them to solve a real-world problem.
? Analyse mathematical, scientific and other types of problems and design logical solutions for each, suitable for implementing as a computer program.
? Use an object-oriented programming language, and associated class libraries, to develop object-oriented programs.
? Use a development environment to develop, test, and debug programs that solve a given problem.
? Design and develop a test plan to ensure that a given programming solution works as anticipated in both expected and unexpected scenarios.
? Construct appropriate diagrams and textual descriptions to communicate the static structure and the dynamic behaviour of any object-oriented programming solution.

Summary
A car hire company is an organisation that rents out cars and other vehicles to customers over a set period of time, usually ranging from a couple of days to a couple of weeks.
Hiring a car is a common practice for those who have taken a plane to a destination and wish to be able to manage their own transport needs on the ground. It is also becoming increasingly common for residents of a town to avoid the ongoing expenses of owning their own car, and to simply hire a car locally whenever they need one.
In this assessment task you will create your own Java object-oriented console based (command line) program that will allow a customer to make a partial booking of a vehicle through a car hire company. The car booking system will be implemented with text prompts, standard output, and ASCII-art drawing where required. You will also need to read data from a file in CSV format.
It is strongly recommended that you read through the entire assessment before commencing any of the tasks.
Scenario
Carrington Cars has been a player in the car rental market for many years. The organisation prides itself on customer service and has numerous rental centres in convenient locations around the city of Melbart. The organisation has recently seen a significant increase in the number of customers arriving at their centres without securing a booking online. In many cases the staff at centres are overwhelmed, leading to delays in customer support. To streamline the customer service experience Carrington wish for customers to be able to make a partial booking onsite using an in-store console-based system. This partial booking is then finalised by Carrington staff in person with the customer when they become available.
Solution design
Classes
It is expected that the solution will comprise eight classes as outlined below:
Functionality
It is expected that your solution will have the following functionality:
• The user should be presented with an initial welcome message.
• Details on the cars to be hired (including daily rates) are to be retrieved from a file named ‘carlist.csv’ (provided) and displayed in a tabular format. An appropriate error message should be displayed if the file is unable to be retrieved.
• The program should allow the user to enter a selection to proceed or exit from the program
i.e. user to be given the following options: o Make a booking o Exit
• The program should allow a user to select a car that they would like from the list
• The program should include prompts for the user to enter start and end dates of a hire.
These should be:
o A prompt for the year o A prompt for the month o A prompt for the day
• The program should capture the following details from a user: o Name o Email o Address
• There are two types of cars:
o Standard cars (as represented in the Car class). Standard cars have a base daily rate of hire.
o Premium cars (as represented in the PremiumCar class, an extension of the Car class). On top of the daily rate, there is an extra cost with the hire of premium cars that being:
? The need to pay insurance on the hire of a premium car. Insurance is calculated as 5% of the daily rate.
• The program should calculate the cost of the hire dependent upon:
o Daily rate of hire o Number of days of hire
o Extra costs for premium cars (as outlined above)
• Once all details have been collected from the user, the following information should be displayed to the user as a summary:
o Customer details o Booking confirmation o Car hired o Start and end dates of hire o Number of days of hire o Rate per day
o Total cost of hire
Example of Expected Implementation
Refer to Figure 1 for an example of how the user interface might be presented
Figure 1 shows the following functionality in action:
• Display to user of the list of cars available and the total records displayed (drawn from information provided in carlist.csv file)
• User given initial menu to make a booking or exit the program
• User able to select their choice of car (with informative error message if invalid selection is made)
• User able to enter the start and end dates of their booking
• User able to enter relevant personal details (name and contact information)
• Display of summary of booking details
• User able to continue with another booking or exit the program
Assessment Tasks
Task overview
The first two tasks are focused on the development of a UML diagram while the remaining tasks are based on implementing and testing the program.
It is recommended that you read through the information and requirements of all tasks below prior to commencing any work on your project, and that you complete the structure of your UML diagram before proceeding with later tasks.
Code in your solution should abide by the following best practices:
• Error handling for user input.
• Consistent code indentation with one level of indentation per block. • Code commenting for each class, all methods, and inline comments • Naming conventions adhered to.
• Reasonable code line lengths.
It is also recommended that you review the assessment rubric at the end of this document for a better understanding of the basis on which your submission will be marked.
Tasks 1-2: UML Diagram
Create a complete UML class diagram using Visio for the Car Rental program.
Task 1: UML Classes
Represent classes on the UML diagram based on the information provided in the class descriptions in Tasks 3-10 below
Task 2: UML Class Relationships
Represent the relationships between classes on the UML diagram including multiplicities (where required) and relationship names.
Tasks 3 – 10: Implementation
Tasks 3-10 describe the classes that together make up the overall program.
Implementation tips for Tasks 3-10
Try to break down the logic in the assessment into small sections. In general, you should focus on implementing, testing and running small sections of the assessment at a time. This ensures that building blocks for your assessment are sound. Also, if you make any errors in your code, they will be more easily identified and rectified.
If you find that any of the methods are particularly long, you are welcome to introduce additional ‘helper’ methods to break up your work.
Make sure that you lodge a support request if you would like any guidance.
Task 3: MenuDisplay Class
This class manages the retrieval of available cars from a CSV file and displays them to the user.
MenuDisplay Constructors and methods:
Name Return value Input parameters Description
displayCarList int None Displays list of cars to user in tabular format and returns the number of cars available. Refer to Figure 1.
getSelection int None Prompt to make booking or exit from the system.
Task 4: CarAndBookingDates Class
This class manages user selections of the car be hired, and the dates they would like to hire.
CarAndBookingDates Instance variables:
Name Data Type Description
year int Contains the year value
month int Contains the month value
day int Contains the day value
CarAndBookingDates Constructors and methods:
Name Return value Input parameters Description
CarAndBookingDates n/a None Constructor to initialise instance variables with default values
carSelection int int carsAvailable Prompts user for entry of a Car ID number and validates based on the records available. If the car number selected is not found,
appropriate error message to be displayed and retakes the input until a valid selection is made.
Returns a valid selection.
carsAvailable: the input parameter contains the total record retrieved from the CSV file.
getCarBookingDateFull LocalDate None Calls the Year, Month and Day of booking date input methods.
Method collates the date inputs and returns as a LocalDate format.
promptForYear int None User prompt for year of date
promptForMonth int None User prompt for month of date
promptForDay int None User prompt for day of date
validateYearString boolean String year Check if year value is valid
validateMonthString boolean String month Check if month value is valid
validateDayString boolean String day Check if day value is valid
Task 5: CarBooking Class
This class does all the work of calculating duration and cost of the hire of a car.
CarBooking Instance variables:
Name Data Type Description
startDate LocalDate Start Date of Booking
endDate LocalDate End date of Booking
carNumber int ID number of car
totalDays long Duration of booking in days
newRate double Calculated rate of booking
cost double Total cost of booking
car Car Car that is associated with booking
CarBooking Constructors and methods:
Name Return value Input parameters Description
CarBooking n/a LocalDate startDate, LocalDate endDate, int carNumber Constructor to initialise instance variables.
makeBooking void None The method reads the CSV file: implement them with the try/catch mechanism and print an error message and exit when caught. And
Car number selected would be required to retrieve the details and store them in an array.
Based on the car type determine if a new rate is required or the existing rate to total calculate cost.
Calls the calculateTotalDays and calculateCost methods.
calculateTotalDays void None Calculates the difference in days between the start date and the end date of the booking
calculateCost void double newRate long totalDays Sets the cost of a booking based on the rate by the number of days
getCost double None Accessor method for ‘cost’
getStartDate Date None Accessor method for ‘startDate’
getEndDate Date None Accessor method for ‘endDate’
getTotalDays long None Accessor method for ‘totalDays’
getCarNumber Int None Accessor method for ‘carNumber’
getNewRate double None Accessor method for ‘newRate’
getCarName String None Accessor method for ‘carName’
Task 6: Car Class
This class holds information related to individual cars that are available for hire.
Car Instance variables:
Name Data Type Description
carRate double The base cost of hiring a car
carName String The name of the type of car
Car Constructors and methods:
Name Return value Input parameters Description
Car n/a String carName double carRate Constructor to initialise instance variables.
getCarRate double None Accessor method for ‘carRate’
getCarName String None Accessor method for ‘carName’
Task 7: PremiumCar Class
This class is an extension of the Car class. As such, all existing functionality is automatically inherited. This documentation lists additions and differences only.
PremiumCar Instance variables:
Name Data Type Description
INSURANCERATE double Constant representing the percentage rate of insurance: 0.05
PremiumCar Constructors and methods:
Name Return value Input parameters Description
PremiumCar n/a double carRate Constructor to initialise instance variables.
String carName
getCarRate double None Override method of Car class
Task 8: Customer Class
This class manages the details of the customer looking to hire a car.
Customer Instance variables:
Name Data Type Description
customerName String Name of the customer
customerEmail String Email address of the customer
customerAddress String Address of the customer
Customer Constructors and methods:
Name Return value Input parameters Description
Customer n/a String customerName
String customerEmail
String customerAddress Constructor to initialise instance variables.
getCustomerName String None Accessor method for ‘customerName’
getCustomerEmail String None Accessor method for ‘customerEmail’
getCustomerAddress String None Accessor method for ‘customerAddress’
Task 9: PrintBookingDetails Class
This class displays details of a finalised booking to the user.
PrintBookingDetails Constructors and methods:
Name Return value Input parameters Description
printBookingDetails void CarBooking carBooking
Customer customer Displays the details of booking to customer or user
Task 10: CarRentalTester Class
This is the overall entry point for the program and has the following functionality:
• Controlling access to the main menu, customer details and car booking information.
• The main method invokes and captures the values from: displayCarList(), carSelection(…), getCarBookingDateFull(). Values captured are passed as input parameter to methods and objects instantiated.
• Other necessary methods, such as makeBooking() and printBookingDetails(…) are also invoked from the driver class. Apply necessary iteration to loop the program.
CarRentalTester Instance variables:
Name Data Type Description
menu MenuDisplay Instance of the MenuDisplay class
customer Customer Instance of the Customer class
carBooking CarBooking Instance of the CarBooking class
carAndBookingDates CarAndBookingDates Instance of the CarAndBookingDates class
CarRentalTester Constructors and methods:
Name Return value Input parameters Description
main void None Entry point for program.
Task 11: Test scenario
Download and fill in the Test_Case_Template.docx from the learning portal. The template will be used for testing the date input.
The test scenario should cover the following tests that generate valid outcomes:
1. The duration for hire is greater than zero
2. The duration for hire is 30 days or less for the month of November
…and the following test cases that generate invalid outcomes:
3. The duration for hire is less than zero
4. The duration for hire is 32 days or more for the month of January 5. The duration for hire is 31 days or more for the month of November.
Task 12: Testing the code
After you have finished writing your code, test it by performing the following tasks. Your response must include a screenshot of the output for each of the following. These tasks have a combination of valid and invalid tests. Note that that an invalid entry should catch the validation applied.
1. Test for exception handling with file retrieval through running code after updating file name as follows:
File Name: “cark.csv”
Take a screenshot of the output.
2. Run the code with the following inputs to validate the car number selection:
Car number: 7
If the car selected is not the one of the available cars as displayed, the program should request that the user re-enter the car selection.
Take a screenshot of the output
3. Run the code with the following inputs to verify end date is not before start date:
Car number: 2
Start Date: Year: 2020, Month: 5, Day: 1
End Date: Year: 2020, Month: 4, Day: 13
If the end date is before the start date, the program should request that user re-enter information
Take a screenshot of the output
.
4. Run the code with the following inputs to make a booking for premium car:
Car number: 1
Start Date: Year: 2020, Month: 10, Day: 5
End Date: Year: 2020, Month: 10, Day: 15
Customer details: for customer details use your name, email and address. Take a screenshot of the output
5. Run the code with the following inputs to make a booking for standard car:
Car number: 5
Start Date: Year – 2020, Month – 9, Day – 1
End Date: Year – 2020, Month – 9, Day – 18
Customer details: for customer details use your name, email and address.
Take a screenshot of the output
Task 13: Coding Conventions
When coding your solution the following coding conventions must be followed.
a) Commenting: Add a class header comment, method header comments, and inline comments where required.
b) Indentation: Consistently indent your code by one level per block. (A good guideline is the
NetBeans default of 4 spaces per block.)
c) Naming conventions: Use TitleCase for class names, camelCase for variables and UPPER_CASE for constants.
d) Line lengths: Do not exceed the 80 characters per line guideline.
Submitting your assignment
When you have completed your answers, submit the assessment on the Learning Portal. You should submit the following:
Task number File name Description
Tasks 1-2 xxx_cse1ofx_assessment3_uml.vsdx Visio UML diagram.
Tasks 3-10 xxx_cse1ofx_assessment3_code.zip Zipped NetBeans project
Task 11 xxx_cse1ofx_assessment3_testScenario.docx Test scenario.
Task 12 xxx_cse1ofx_assessment3_ screenshots.docx Testing the code
Notes:
• Replace the “xxx” placeholders with your Student ID.
• The Zip file mentioned above is a compressed version of your code solution folder.

Assessment marking criteria
The complete marking rubric is given below. During marking, one option will be selected per row and additional feedback will be given where necessary.
Task 1a: UML diagram classes (All classes) There are a significant There are a small
Classes have not been All classes have been
number of errors in the number of errors in the
satisfactorily satisfactorily
representation of in the representation of
represented represented
classes classes
0 points 3 points 1 point 2 points
Task 1b: UML diagram constants (in PremiumCar
class) There is a minor error with how
Constants have not been Constants have been
the constants have been
represented correctly. represented correctly.
represented
0 points 1 point 0.5 points
Task 1c: UML diagram instance variables (Car,
CarBooking,
Customer, CarRentalTester classes Instance variables have not been the
represented correctly represented
0 points
1 point There are minor errors with how
Instance variables have been
instance variables have been represented correctly
2 points
Task 1d: UML diagram methods
(All classes) 0 method sets satisfactory. 0 points
There are a significant number of errors in the representation of methods
1 point There are a small
All methods have
number of errors in the been satisfactorily
in the representation of represented
methods
3 points
2 points
Task 1e: UML diagram constructors (Car, Premium Car, CarAndBookingDate s classes) There are minor errors with how
Instance variables have not been Constructors have been
the constructors have been
represented correctly represented correctly
represented
0 points 2 points 1 point
Task 1f: UML diagram visibility modifiers (All
classes) Visibility modifie Visibility modifiers are incorrect. correct.
0 points
0.5 points
rs are partly
Visibility modifiers are correct.
1 point
Task 2a: diagram relationships UML There are a significant
Relationships are not number of errors in the
satisfactorily representation of
represented. relationships
0 points
1 point There are a small number
All relationships have
of errors in the in the been satisfactorily
representation of represented
relationships
3 points 2 points
Task 2b: UML diagram relationship multiplicities (where required) There are a small number of
Relationships are not All relationships have been
errors in the representation of
satisfactorily represented. satisfactorily represented
relationships
0 points 1 point 0.5 point
Task 2c: UML diagram relationship names There are a small number of
Relationships are not All relationships have been
errors in the naming of
satisfactorily named. satisfactorily named
relationships
0 points 2 points 1 point
Task 3a:
MenuDisplay class diplayCarList method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 3b:
MenuDisplay class getSelection method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 4a:
CarAndBookingDate s class constructor Constructor is incorrect.
0 points
Constructor is partly correct. Constructor is correct.
0.5 points 1 point
Task 4b:
CarAndBookingDate
s carSelection method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 4c:
CarAndBookingDate
s
getCarBookingDateF ull method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 4d:
CarAndBookingDate s promptForYear method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 4e:
CarAndBookingDate s promptForMonth method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 4f:
CarAndBookingDate
s promptForDay method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 4g:
CarAndBookingDate s validateYearString method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 4h:
CarAndBookingDate
s
validateMonthString method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 4i:
CarAndBookingDate s validateDayString
method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 5a CarBooking class instance
variables Instance variables are incorrect.
0 points
Some instance variables are correct 0.5 points All instance variables are correct. 1 point
Task 5b: CarBooking class small methods:
getCost getStartDate getEndDate getTotalDays getCarNumber getNewRate getCarName Small methods are partly Small methods are incorrect. correct.
0 points
1 point Small methods are correct. 2 points
Task 5c: CarBooking class makeBooking method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 5d: CarBooking class calculateCost
method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 6a:
Car class instance
variables Instance variables are incorrect.
0 points
Instance variables are partly correct 0.5 points Instance variables are correct. 1 point
Task 6b:
Car class
constructor Constructor is incorrect.
0 points
Constructor is partly correct. Const
0.5 points 1 poin ructor is correct. t
Task 6c:
Car class small
methods: getCarRate setCarRate getCarName setCarName Small methods are incorrect.
0 points
Small methods are partly correct. 1 point Small methods are correct. 2 points
Task
PremiumCar constants 7a: Constants are incorrect.
0 points
Constants are partly correct
0.5 points Constants are correct. 1 point
Task
PremiumCar constructor 7b: class Constructor is incorrect.
0 points
Constructor is partly correct. Constructor is correct.
0.5 points 1 point
Task PremiumCar override method 7c class
Override method is incorrect.
0 points
Override method is partly correct. 1 point Override method is correct. 2 points
Task 8a Customer class instance
variables Instance variables are incorrect.
0 points
Some instance variables are correct 0.5 points All instance variables are correct. 1 point
Task 8b: Customer class constructor Constructor is incorrect.
0 points
Constructor is partly correct. 1 point Constructor is correct. 2 points
Task 8c: Customer class small methods: getCustomerName getCustomerEmail getCustomerAddress setCustomerName setCustomerEmail setCustomerAddress Small methods are incorrect.
0 points
Small methods are partly correct. 1 point Small methods are correct. 2 points
Task 9:
PrintBookingDetails class printBookingDetails method Solution is incorrect.
0 points
Solution is partly correct. 1 point Solution is correct. 2 points
Task 10a
CarRentalTester
class instance
variables Solution is incorrec
0 points
t. Solution is partly correct. Solution is correct.
1 point 2 points
Task 10b
CarRentalTester main method Solution is incorrect.
0 points
Solution is mostly Solution is partly Solution is mostly Solution is correct. incorrect. correct. correct. 4 points 1 point 2 points 3 points
Task 11a: Test scenario 1 –
Description Field Test scenario description field is incomplete or
Test scenario description field is appropriate.
inappropriate
0.5 points 0 points
Task 11b: Test scenario 1 – Other
Fields Other test scenario fields
Other test scenario fields All other test scenario fields
partially completed as
incomplete or inappropriate completed as expected.
expected.
0 points 1 point 0.5 points
Task 11c: Test scenario 1 –
Duration is greater than zero Test Case is incomplete or inappropriate 0 points
Test case is correct.
0.5 points
Task 11d: Test scenario 1 –
Duration is less than
30 for month of
November Test Case is incomplete or inappropriate 0 points
Test case is correct.
0.5 points
Task 11e: Test scenario 1 – Day is less than zero Test Case is incomplete or inappropriate 0 points
Test case is correct.
0.5 points
Task 11f: Test scenario 1 –
Duration is 32 or more for month of
January Test Case is incomplete or inappropriate 0 points
Test case is correct.
0.5 points
Task 11g: Test scenario 1 –
Duration is 31 or more for month of
November Test Case is incomplete or inappropriate 0 points
Test case i
0.5 points s correct.
Task 12: Testing the code 2 tests are
Unsatisfactory 0 1 test is correct
correct
points 0.5 points 1 point
3 tests are correct 1.5 points 4 tests are correct 2 points 5 tests are correct 3 points
Task 13a: Code
indentation Code indentation was unsatisfactory and needs work. 0 points
Code indentation was fair and needs some work. 1 point Code indentation was excellent and met the standard with consistent indentation of one level per block. 2 points
Task 13b: Code commenting Code commenting was unsatisfactory and needs work. 0 points
Code commenting was fair and needs some work. 1 point Code commenting was excellent and met the standard with class header comments, method header comments, and some inline comments where appropriate.ts. 2 points
Task 13c: Naming conventions Naming conventions did not meet expected standards. 0 points
Naming conventions were excellent and met the standard with TitleCase for class names, camelCase for variables and UPPER_CASE for constants. 1 point
Task 13d: Code line lengths Line lengths did not meet guidelines. 0 points
Line lengths were excellent and did not exceed the 80 characters per line guideline.
1 point
Submission timeliness 5 days late
(25% penalty)
-20 points
4 days late 3 days late
(20% penalty) (15% penalt
-16 points -12 points 2 days late
y) (10% penalty)
-8 points 1 day late On time (5% penalty) (
-4 points 0 points
Task 1a: UML diagram classes (All classes) There are a significant
Classes have not been number of errors in the
satisfactorily representation of
represented classes
0 points
1 point There are a small
All classes have been
number of errors in the satisfactorily
in the representation of represented
classes
3 points 2 points
no penalty)
Total: 80 points

Published by
Write my essay
View all posts