The Lancre coven has started doing foreign consulting. Upon request, one of the witches hops on her broomstick and flies to one of the neighboring countries that require their services. Granny, Nanny and Magrat charge a nominal fee per visit - $10, and 2 cents per mile round trip. They service 4 foreign locations, the distances to which are shown in the following table (left below):
The witches keep a log of foreign trips in a text file named coven_consulting.txt (can be downloaded from Moodle), the format and contents of which is shown in the tables to the right:
All names in the file are spelled correctly. Numbers denote the beginning of travel log data for another month.
On Moodle you will also find a file named Project3.java, which already contains some code. Download this file and finish implementing it according to the instructions.
Your program asks the user to enter the name of a city. The program keeps asking for input until the user enters a valid city. Account for errors in capitalization, i.e. QUIrm and quirm and qUirm are all valid inputs.
The program takes the user input and the input file and prints a short breakdown of revenue for the given city for the months that are in the travel log. Your solution is a general solution - it must work with any of the 4 cities and for any given number of months that may be in the input file.
Project3.java contains methods that encapsulate different functionality. It is written to compile, so it includes some dummy return statements that are only there to make the file compile correctly. Alter the return statements to suit your needs. Do NOT alter the method declarations. I suggest you consider implementing the methods in the following order:
- main – entry point of your program, already implemented, do NOT alter it.
- getDistance – take the String passed to the method and use it to determine the distance to it from Lancre (Hint: switch). Ignore errors in capitalization and white space errors (Hint: ignore case and trim your input). Return the distance.
- checkValidCity – take the String passed to the method and check if it’s one of the 4 that the witches fly to, or not. Ignore errors in capitalization and white space errors (Hint: ignore case and trim your input). Return true or false accordingly.
- getCity – the method takes one word user input (from the keyboard, Hint: Scanner) and continues asking the user to correct himself until the city is valid (Hint: loop). Validate the city by calling checkValidCity. Pass the value of the city back to the method, which invokes getCity.
printReport – invoke getCity to retrieve the user input for the city. Once you have the city, get the distance to it by calling getDistance. Try to open the file (Hint: try-catch, file may not exist, place the file in the right place). Read the file (Hint: you don’t know how many lines are in it, so peak into it before you read; find where months begin – the month starts with a number, not a String, so peak for integers; don’t forget to move the cursor to the next line when you encounter an integer). Keep track of total trips for each month, and all months together (Hint: running totals). Print out a charges for the chosen destination for each month (Hint: a charge for each trip is made up of 2 cents charged for each mile of the total miles for the trip (both directions) plus a $10 consulting fee) as well as a grand total for the whole period. Format your output (Hint: assume number of trips can be in the double digits, consulting fees in the triple digits, mileage and total revenue can have up to 4 digits plus 2 digits precision)