Final Project - Ticket Management System Upgraded Introduction |
Welcome to the Final Project for COMP90041 - Programming and Software Development! For this project, we will extend the ticket management system to a real-life Ticket Management System. In your real life, you may use some kind of database. But we will handle and save data using files. Ticket Management System still has two types of Users - |
-
Admin - who can manage the concerts and prices
-
Customer - who can book tickets for the concerts.
Admin Operations - An admin can perform the following operations -
Customer Operations - A customer needs to select a concert to perform some actions.
-
Admin can view all the concerts
-
Admin can view prices for seats for a concert and update them
-
Admin can view all bookings for all customers for a concert
-
Admin can see the total payment received for a concert
|
|
Some of the operations are now removed from the previous assignments and there are a few new operations to perform by different kind of users.
File Handling & Command Line Args File Handling
Your program can launch in two modes - Customer mode or Admin mode. To run the program in any mode, it is important to read some data from the files and load them in the appropriate objects of classes (see guidance slide). There are atleast four or more files available to you. Four files that will always be present are mentioned below. These files are present in the assets folder.
Best Case Scenario: This section describes a real-life intended scenario.
|
separated format.
|
Note that the file names may change. They are passed in specific order via the command line params. See the Command Line Arguments section below. You must not hardcode the file names in the code.
Venue Files - Venue files can change. They are not mandatory files except venue_default.txt mentioned above. When we test your code for assessment we may add/skip these files and some additional files.
-
venue_mcg.txt - This file contains a layout for a venue that is specific to MCG(Melbourne Cricket Ground)
-
venue_marvel.txt - This file contains a layout for the venue that is specific to Marvel Stadium.
Customer File
This file contains the following data in order
-
Customer ID - a unique ID to identify the customer
-
Customer name - Name of the customer (includes a space in case there is a First
Name and a Last Name)
-
Password - a password that comprises of alphanumeric characters, @ and # symbols
Total Data Points: 3 fixed data points.
Concert File
This file contains the following data in order mentioned below.
|
RIGHT SEAT PRICE. For eg - VIP:359:499:399 means the zone type is VIP with the left section price set to AUD 359, centre section price set to AUD 499 and the right section price set to AUD 399. |
Total Data Points: 8 fixed data points.
Booking File
The booking file contains bookings for all the concert for all the customers. The data follows the order -
|
|
Thus to derive an aisle number you will look at ZoneType and merge it with RowNumber. See the Venue File layout below for more details.
The last 5 data (Ticket Id to Price) repeat based on the Total Tickets booked. Thus for 2 tickets and 3 tickets booked the data may look like the following respectively.
4,2,John Doe,2,2,1,3,6,VIP,259,2,3,7,VIP,259
1,1,Jane Doe,1,3,1,3,3,VIP,359,2,3,4,VIP,359,3,3,5,VIP,499
Total fixed data points: 5 (Booking id, customer id, customer name, concert id, total tickets)
Total variable data points: multiples of 5 based on total tickets (Ticket id, row number, seat number, zone type, price)
Out of Scope Scenario: A line in the booking file will never have an incorrect concert ID or customer ID that does not exist in their respective files.
Venue File
The Venue is now marked with Aisle Numbers. The Aisle Numbers start from the letters V for VIP, S for SEATING and T for STANDING zones. The venue may look like this
V1 [1][2][3] [4][5] [6][7][8][9] V1 V2 [1][2][3] [4][5] [6][7][8][9] V2 V3 [1][2][3] [4][5] [6][7][8][9] V3
S1 [1][2][3] [4][5] [6][7][8][9] S1 S2 [1][2][3] [4][5] [6][7][8][9] S2 S3 [1][2][3] [4][5] [6][7][8][9] S3
T1 [1][2][3] [4][5] [6][7][8][9] T1 T2 [1][2][3] [4][5] [6][7][8][9] T2 T3 [1][2][3] [4][5] [6][7][8][9] T3 T4 [1][2][3] [4][5] [6][7][8][9] T4
This means that there are 3 rows each for VIP (that starts with the initial V: V1 to V3) and SEATING (that starts with the initial S: S1 to S3) and 4 rows for STANDING(that starts with the initial T: T1 to T4). Each row has 3 seats in the left section, 2 seats in the middle section and 4 seats in the right section.
Worst Case Scenario: Your program may behave incorrectly if not handled explicitly. These inputs can be tested.
There will always be a venue_default.txt available to you. When you parse the concert.csv file if you see a venue name like MCG, you should look for a file venue_mcg.txt to load the venue. Similarly, if you see a venue name like abc you should look for a file venue_abc.txt. If you can not find the file venue_abc.txt or venue_mcg.txt you should load the venue layout from venue_default.txt file.
Note that the IDs (customer id/ concert id/ booking id) start from 1 as an index. You should take care when saving them in array/ArrayList as array indices start from 0.
Note that the files do not have a header describing the column names so you don't have to do special handling of the header vs the data.
Command Line Arguments
There is a set of command line arguments that should be passed to the program. Some of these parameters are optional. So you should take special care while handling these. The general format for the command line args is like this -
java TicketManagementEngine --admin|--customer [customer id] [customer password] customerFilePath
concertFilePath bookingFilePath [variable list of Venue Filepaths]
Note that the first param can be either --admin or --customer. The | signs represent or. The params in the [] means that they are optional. See the details below.
Admin Mode
Your code will have command-line arguments like this
$java TicketManagementEngine --
admin ../assets/customer.csv ../assets/concert.csv ../assets/bookings.csv ../assets/venue_mcg.txt ../asset
s/venue_marvel.txt
-
the first param specifies the program is run in admin mode.
-
the second param is the path to the customer.csv file.
-
the third param is the path to concert.csv file
-
the fourth param is the path to bookings.csv
-
The fifth and sixth params are optional and represent venue file paths. There could be more venue file paths following these as well. This is a variable list of paths.
While the file name can change from bookings.csv to bookings_incorrect.csv to abc.csv as well, but the order will |
remain the same - customer > concert > booking > variable list of venue files. You must not hardcode the file names in your program at all. |
Note that venue_default.csv is not provided as a file path. You can assume (hard code or make it a constant in your code and set the default file path as assets/venue_default.txt).
Customer Mode
The customer mode follows a similar pattern however the second and third parameters can be optional.
$java TicketManagementEngine --customer 1
abc@1 ../assets/customer.csv ../assets/concert.csv ../assets/bookings.csv ../assets/venue_mcg.txt
-
the first param specifies the program is run in customer mode.
-
the second and third parameters are optional and represent customer id and
password.
-
the fourth, fifth, and sixth params are file paths to customer.csv, concert.csv and
bookings.csv.
-
the seventh param is again optional and represents venue file paths. There could be more venue file paths following the seventh param as well.
Worst Case Scenario: Your program may behave incorrectly if not handled explicitly. These inputs can be tested.
In case the second and third parameters are missing, your program command line args will look like this.
$java TicketManagementEngine --
customer ../assets/customer.csv ../assets/concert.csv ../assets/bookings.csv ../assets/venue_mcg.txt
You must handle the optional parameters appropriately.
In Edstem, this will be passed automatically. However, if you want to write code in your IDE, you must pass appropriate command line arguments.
When you quit the program, your program should write back any changes done to Bookings, Concert, and Customer back to the file path mentioned. Please do not override the Venue files.
IMPORTANT NOTE: Sometimes file handling is buffered internally by the operating system as well. This means if you PrintWriter.print , you may end up with an empty file. This can be an intermittent issue. To avoid this, please use .flush() methods.
Invalid User Mode |
terminate the program. $ java TicketManagementEngine -- Exception Handling with Files |
Worst Case Scenario: Your program may behave incorrectly if not handled explicitly. These inputs can be tested.
1. FileNotFoundException or IOException - The file paths that are provided to you are not present in the directory. Or are unavailable for File read/write operations. In this case, Java raises FileNotFoundException or IOException. Your program should handle these correctly and terminate the program. For example - this is printed when the file for bookings doesn't exist. ../asets/bookings.csv (No such file or directory) |
2. InvalidLineException - Every file expects a minimum number of fixed data points. When these data points are missing, you should raise an InvalidLineException, skip reading the line, print an error message and move onto the next line. This will only happen for concert.csv, customer.csv and bookings.csv. One of the following exception messages should be printed. Invalid Concert Files. Skipping this line. Invalid booking Files. Skipping this line. Invalid Customer Files. Skipping this line. 3. InvalidFormatException - Some data points are rigid and some data points are flexible. For example, customer names can be anything. However, seat aisle numbers should either start from V/S/T. In such cases, you must raise an InvalidFormatException and skip reading the line, print an error message and move onto the next line. One of the following exception messages should be printed. Booking Id is in incorrect format. Skipping this line. // This is printed when booking id is not numeric Customer Id is in incorrect format. Skipping this line. // This is printed when customer id is not numeric Concert Id is in incorrect format. Skipping this line. // This is printed when concert id is not numeric Incorrect Number of Tickets. Skipping this line. // This is printed when the total number of tickets is not numeric or 0 Invalid Zone Type. Skipping this line. // when the aisle numbers in Venue does not starts with V/S/T |
4. IncorrectPasswordException - When the customer id and password are passed from the command line params and they do not match as per the customers.csv, you should raise this exception, print the message and terminate the program. Incorrect Password. Terminating Program 5. NotFoundException: If the customer id is not found in the customer.csv file raise this exception, print the message and terminate the program. Customer does not exist. Terminating Program Customer Main Menu |
Customer Menu
Your program will run in customer mode when you provide the correct command line parameters.
Use Case 1: Customer mode with customer id and correct password
Best Case Scenario: This section describes a real-life intended scenario.
With the correct command line params (highlighted in bold below) you should print the welcome message as shown below. The password and customer id are present in the |
customer.csv file and should match. Note that the welcome message shows the customer's name (highlighted in bold to differentiate, you don't have to make the output bold.). The customer's name is also present in the customer file. $java TicketManagementEngine --customer 1 ________ ___ _____ |_ _| \/ |/ ___| |||. .|\`--. | | | |\/| | `--. \ |||| ||/\__// \_/ \_| |_/\____/ Select a concert or 0 to exit
----------------------------------------------------------------------------------------------------------
----------------- |
-----------------
----------------------------------------------------------------------------------------------------------
----------------- The customer mode always asks to select a concert for which they can perform different options. See the Select a concert section below. Use Case 2: Customer mode with either incorrect customer id and incorrect password |
Worst Case Scenario: Your program may behave incorrectly if not handled explicitly. These inputs can be tested.
When an incorrect password is passed, the program should terminate with the message shown in bold below. $java TicketManagementEngine --customer 1 |
When an incorrect customer id is passed, the program should terminate with the message shown in bold below. $java TicketManagementEngine --customer 100 Use Case 3: Customer mode with no customer id and password |
Best Case Scenario: This section describes a real-life intended scenario.
If no customer id is provided in the command line params as shown below, then prompt the user to provide a name and password. A customer id should be auto-generated. Read the last available customer id in customer.csv file, say 1, 2,3 is present in the file. So the last available customer id is 3. And then add 1 to generate the new customer id = 4 in this case. When you quit the program, this customer should be appended in the customer.csv file as well. |
Note that the welcome message shows the customer's name (highlighted in bold) Enter your name: Jane Doe ________ ___ _____ |_ _| \/ |/ ___| |||. .|\`--. | | | |\/| | `--. \ |||| ||/\__// \_/ \_| |_/\____/ |
Select a concert or 0 to exit
----------------------------------------------------------------------------------------------------------
-----------------
---------------------------------------------------------------------------------------------------------- |
----------------- > Concert Selection Customers can perform various operations like booking seats, viewing booking details etc about a concert. After the welcome message, you must print a list of concerts to select from. The concerts can be loaded from the concert.csv file. The user will select a concert as per the id mentioned in the file. Once the user selects a concert, print the menu selection. |
Out of Scope Scenario: The input to concert selection will either be the concert id or a 0. There won't be any invalid input here.
Welcome Trina Dey to Ticket Management System ________ ___ _____ |_ _| \/ |/ ___| |||. .|\`--. | | | |\/| | `--. \ |||| ||/\__// \_/ \_| |_/\____/ |
Select a concert or 0 to exit
----------------------------------------------------------------------------------------------------------
-----------------
|
----------------------------------------------------------------------------------------------------------
----------------- Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit > at the ticket costs
seats layout |
If the user selects a 0 then you should terminate the program by printing the message Exiting customer mode. Please ensure that all the changes made to Concert/Bookings/Customers should be saved back to the files. Welcome Trina Dey to Ticket Management System ________ ___ _____ |_ _| \/ |/ ___| |||. .|\`--. | | | |\/| | `--. \ |||| ||/\__// \_/ \_| |_/\____/ Select a concert or 0 to exit
----------------------------------------------------------------------------------------------------------
----------------- |
2 2024-10-04 Taylor Swift 1900 MARVEL 143 5 138
----------------------------------------------------------------------------------------------------------
----------------- Exiting customer mode |
Tip: Use the format string "%-5s%-15s%-15s%-15s%-30s%-15s%-15s%-15s%n" to show the concerts.
Option 1: Show Ticket Costs
After selecting the concert id, if the user selects option 1 then show them the cost of ticket prices based on the zone. Note that there are various zones present and within a
zone, the prices of seats in different sections can vary. These zones and prices come from the concert.csv file. Select an option to get started! Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit >1 at the ticket costs
seats layout ---------- SEATING ---------- |
Left Seats: 199.0 Center Seats: 99.0 Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit > at the ticket costs
seats layout |
Tip: Use the format string "---------- %8s ----------%n" to print the statements like ---------- VIP ----------
Option 2: View Venue Layout
Customers can view the venue layout of the concert. A concert layout shows the available seats for the venue. The venue is loaded at the beginning of the program based on the venue name. See the FileHandling Slide again. The venue layouts do not have any bookings in the venue_xxx.txt files. However, when you read from the bookings.csv file, you should also show the booked seats to the customers while printing the venue layout, so that they don't book the already booked slides. X represents the booked seats in the venue layout. (See the bold highlighted texts. Note, you don't have to generate outputs in bold)
Select an option to get started! Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit >2 at the ticket costs
seats layout V1 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] V1 V2 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] V2 V3 [1][2][X][X][X] [6][7][8][9][10][11] [12][13][14][15][16] V3 |
S1 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] S1 S2 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] S2 S3 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] S3 S4 [1][2][3][4][5] [6][X][X][9][10][11] [12][13][14][15][16] S4 S5 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] S5 T1 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T1 T2 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T2 T3 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T3 T4 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T4 T5 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T5 T6 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T6 Select an option to get started! Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit > at the ticket costs
seats layout Option 3: Book Seats |
In an actual booking system, you don't have to move around in the layout to select a seat. You can simply select using your mouse. However, in this case, we will use the keyboard. To book a seat you will print the layout first with the aisle numbers and seat numbers. You should also print the already booked seats marked with X. You should prompt the user to enter the aisle number, seat number and total number of seats to be booked. |
Out of Scope Scenario: When mapping the booked seats from the bookings.csv to the venue layout, you will always find valid aisle and seat numbers. There won't be a file that has an invalid booking with an incorrect aisle and seat number that does not match the venue layout.
Select an option to get started!
Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit >3 at the ticket costs
seats layout V1 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] V1 V2 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] V2 V3 [1][2][X][X][X] [6][7][8][9][10][11] [12][13][14][15][16] V3 S1 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] S1 |
S2 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] S2 S3 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] S3 S4 [1][2][3][4][5] [6][X][X][9][10][11] [12][13][14][15][16] S4 S5 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] S5 T1 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T1 T2 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T2 T3 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T3 T4 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T4 T5 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T5 T6 [1][2][3][4][5] [6][7][8][9][10][11] [12][13][14][15][16] T6 Enter the aisle number: T1 Enter the seat number: 5 Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit > at the ticket costs
seats layout |
Once you have booked a seat(s), you should store it somewhere so that you can write the relevant data back to the bookings.csv when you exit the program. Take a look at the bookings.csv again to see what is the relevant information that gets stored. How to generate booking id? For the current concert and current customer find the maximum of the previous booking ids and simply add 1. |
Out of Scope Scenario: Below scenarios are out of scope.
• Not Enough Seats - Select the seat number say 15 and try to book 5 seats.
-
Select an already booked seat.
-
Not Enough Seats - Select a seat next to a booked seat and try to book 2 seats.
This will force you to choose the already booked seats and hence is not possible.
-
Choose an incorrect aisle number
-
Choose an incorrect seat number
Option 4: View Booking Details When you read the bookings.csv file, for the same customer different bookings from different concerts can be present. Since you have selected a concert to perform an |
operation, when the customer wants to see booking details, you should show all the bookings that belong to the selected concert for this customer. If you created any bookings during the program run that were not previously present in the bookings.csv file, then that should be shown as well. This info has two parts - 1. A list of bookings showing the booking id, concert date, artist name, timing, venue name, seats booked and total price for all the seats booked. 2. For each booking there should be a ticket info printed. Each ticket info shows ticket id, aisle numbers, seat numbers, Seat Type and the price of the seats at the time of booking. Note that within a zone there are different sections with different prices, and hence price for each seat can vary. |
Warning: Be extra cautious that you are showing booking details for the correct concert selected and for this specific customer only. As a customer, other customers should not be able to see your bookings or vice versa.
Select an option to get started!
Press 1 to look at the ticket costs
Press 2 to view seats layout |
Press 5 to exit Id Concert Date Artist Name Timing Venue Name Seats Booked Total Price ---------------------------------------------------------------------------------------------------------- -----------------
---------------------------------------------------------------------------------------------------------- ----------------- Taylor Swift Taylor Swift Taylor Swift 1900 MCG 3 1900 MCG 2 1900 MCG 4 1217.0 518.0 396.0 |
Ticket Info
################################################## ############### Booking Id: 2 #################### VIP 359.0 VIP 359.0 VIP 499.0 |
Id Aisle Number Seat Number Seat Type Price ##################################################
################################################## ############### Booking Id: 3 #################### Id Aisle Number Seat Number Seat Type Price ##################################################
################################################## Select an option to get started!
Press 1 to look at the ticket costs
Press 2 to view seats layout STANDING 99.0 STANDING 99.0 STANDING 99.0 STANDING 99.0 |
Press 5 to exit > |
Tip: Use the format string "%-5s%-15s%-15s%-10s%-15s%-15s%-10s%n" to print booking list and "%-5s%- 15s%-15s%-10s%-10s%n" to print the ticket info list.
If no booking is found for a concert, you should print an error message and return back to the menu.
Select an option to get started!
Press 1 to look at the ticket costs
Press 2 to view seats layout
Press 3 to book seats
Press 4 to view booking details
Press 5 to exit Select an option to get started! Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit at the ticket costs
seats layout |
> Option 5: Exit Exiting the concert menu only exits from the current concert and prints the concert selection again. You can proceed to perform operations with the same or other concerts or can choose to exit the program by selecting 0. See the Concert Selection at the beginning of this slide. Select an option to get started! Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit >5 at the ticket costs
seats layout Exiting this concert |
---------------------------------------------------------------------------------------------------------- -----------------
---------------------------------------------------------------------------------------------------------- ----------------- > Invalid Option |
In case, someone provides an invalid input like -9 or 7, you should be able to print “Invalid Input” and prompt the user again with the menu to select a valid input again. Sample output Select an option to get started! Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit >7 at the ticket costs
seats layout |
Invalid Input Press 1 to look Press 2 to view Press 3 to book Press 4 to view Press 5 to exit > at the ticket costs
seats layout Admin Menu Admin Menu Your program will run in admin mode when you provide the correct command line parameters (highlighted in bold). $java TicketManagementEngine -- You should print the appropriate welcome message and show the menu options. |
Welcome to Ticket Management System Admin Mode. ________ ___ _____ |_ _| \/ |/ ___| |||. .|\`--. | | | |\/| | `--. \ |||| ||/\__// \_/ \_| |_/\____/ Select an option to get started! |
Press 2 to update the ticket costs Option 1: View Concerts Just like customers can see all the concerts, so can admin. You should load the concerts from the concert.csv file. |
Select an option to get started!
----------------------------------------------------------------------------------------------------------
----------------- |
Press 5 to exit > Option 2: Update Ticket Costs Admin can update the ticket costs. In this version, the admin must select a zone first before updating the prices for sections. Select an option to get started! |
Press 4 to view total payment received for a concert # Date Artist Name Timing Venue Name Total Seats Seats Booked Seats Left ---------------------------------------------------------------------------------------------------------- ----------------- 1 2024-10-01 Taylor Swift 1900 MCG 224 5 219 |
2 2024-10-04 Taylor Swift 1900 MARVEL 143 5 138
----------------------------------------------------------------------------------------------------------
----------------- ---------- SEATING ----------
Left Seats: 199.0 Center Seats: 99.0 |
Centre zone price: 225 Option 3: View Bookings |
Unlike customer, admin can see bookings for all the customers. However, they need to select a concert first. Just like customer, you should print the list of bookings first followed by ticket info for each booking id. Select an option to get started! |
Select a concert or 0 to exit
----------------------------------------------------------------------------------------------------------
-----------------
----------------------------------------------------------------------------------------------------------
-----------------
---------------------------------------------------------------------------------------------------------- |
----------------- Ticket Info
################################################## ############### Booking Id: 2 #################### Id Aisle Number Seat Number Seat Type Price VIP 359.0 VIP 359.0 VIP 499.0 |
##################################################
################################################## Select an option to get started! |
Press 5 to exit > |
Tip: Use the format string "%-5s%-15s%-15s%-10s%-15s%-15s%-10s%n" to print booking list and "%-5s%- 15s%-15s%-10s%-10s%n" to print the ticket info list.
Option 4: Total Payment For a selected concert id, admin can see the total payment received for the concert. This means for all the bookings for all the customers, you should sum up the price and show it. Select an option to get started! |
# Date Artist Name Timing Venue Name Total Seats Seats Booked Seats Left ---------------------------------------------------------------------------------------------------------- -----------------
----------------------------------------------------------------------------------------------------------
----------------- |
Press 2 to update the ticket costs Option 5: Exit Admin should exit the program by printing the exit message. Please ensure that all the changes made to Concert/Bookings/Customers should be saved back to the files. |
Select an option to get started! Invalid Option In case, someone provides an invalid input like -9 or 7, you should be able to print “Invalid Input” and prompt the user again with the menu to select a valid input again. Sample output Select an option to get started! |
Invalid Input |