Design a Java application that will read a file containing data related to the U
ID: 3721695 • Letter: D
Question
Design a Java application that will read a file containing data related to the US. Crime statistics from 1994-2013. The description of the file is at the end of this file. The application should provide statistical results on the data including: a. Population growth in percentages from each consecutive year (e.g. 1994-1995 calculation is ((262803276 - 260327021)/260327021)*100 = 0.9512%, 1995-1996 would be ((265228572 - 262803276)/262803276)*100 = 0.9229%) b. Years where the maximum and minimum Murder rates occurred. c. Years where the maximum and minimum Robbery rates occurred. The following are some design criteria and specific requirements that need to be addressed: a. Use command line arguments to send in the name of the US Crime Data file. b. You should also use Java classes to their full extent to include multiple methods and at least two classes c. You are not allowed to modify the Crime.csv Statistic data file included in this assignment. d. Use arrays and Java classes to store the data. (Hint: You can and should create a USCrimeClass to store the fields. You can also have an Array of US Crime Objects.) e. You should create separate methods for each of the required functionality. (e.g. getMaxMurderYear() will return the Year where the Murder rate was highest. ) f. A user-friendly and well-organized menu should be used for users to select which data to return. A sample menu is shown in run example. You are free to enhance your design and you should add additional menu items and functionality. g. The menu system should be displayed at the command prompt, and continue to redisplay after results are returned or until Q is selected. If a user enters an invalid menu item, the system should redisplay the menu with a prompt asking them to enter a valid menu selection h. The application should keep track of the elapsed time (in seconds) between once the application starts and when the user quits the program. After the program is exited, the application should provide a prompt thanking the user for trying the US Crime Statistics program and providing the total time elapsed. i. Hint: When reading the Crimes file, read one line at a time (See ReadEmail.java) and then within the loop parse each line into the USCrimeClass fields and then store that USCrimeClass Object into an array. Note you can use String.split(“,”) to split the CSV line into a the fields for setting the USCrimeClass Object. Here is sample run: java TestUSCrime Crime.csv 2 ********** Welcome to the US Crime Statistical Application ************************** Enter the number of the question you want answered. Enter ‘Q’ to quit the program : 1. What were the percentages in population growth for each consecutive year from 1994 – 2013? 2. What year was the Murder rate the highest? 3. What year was the Murder rate the lowest? 4. What year was the Robbery rate the highest? 5. What year was the Robbery rate the lowest? Q. Quit the program Enter your selection: 2 The Murder rate was highest in 1994 Enter the number of the question you want answered. Enter ‘Q’ to quit the program : 1. What were the percentages in population growth for each consecutive year from 1994 – 2013? 2. What year was the Murder rate the highest? 3. What year was the Murder rate the lowest? 4. What year was the Robbery rate the highest? 5. What year was the Robbery rate the lowest? Q. Quit the program Enter your selection: 5 The Robbery rate was lowest in 2013 Enter the number of the question you want answered. Enter ‘Q’ to quit the program : 1. What were the percentages in population growth for each consecutive year from 1994 – 2013? 2. What year was the Murder rate the highest? 3. What year was the Murder rate the lowest? 4. What year was the Robbery rate the highest? 5. What year was the Robbery rate the lowest? Q. Quit the program Enter your selection: Q Thank you for trying the US Crimes Statistics Program. Elapsed time in seconds was: 32 The google recommended Java style guide, provided as link in the week 2 content, should be used to format and document your code. Specifically, the following style guide attributes should be addressed: ? Header comments include filename, author, date and brief purpose of the program. ? In-line comments used to describe major functionality of the code. ? Meaningful variable names and prompts applied. 3 ? Class names are written in UpperCamelCase. ? Variable names are written in lowerCamelCase. ? Constant names are in written in All Capitals. ? Braces use K&R style.
Explanation / Answer
SourceCode:
Testing_US_Crime.java:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Scanner;
public class Testing_US_Crime{
public static void Pop_Growth(ArrayList StoreList) {
System.out.println("The percentages in population growth for each consecutive year from 1994 – 2013");
for (int i = 0; i < StoreList.size(); i++) {
US_Crime Fault = (US_Crime) StoreList.get(i);
US_Crime Usc1 = null;
if (Fault.YYYY < 2013) {//year filtered
Usc1 = (US_Crime) StoreList.get(i + 1);
System.out.println(" Duration : "
+ Fault.YYYY
+ "-"
+ Usc1.YYYY
+ " --> "
+ (((Usc1.Population - Fault.Population) / Fault.Population) * 100)
+ "%");
}
}
}
public static void Motor_theft(ArrayList Storelist)
{
System.out.println("The total percentage change in Motor Vehicle Theft between 1998 and 2012");
for (int i = 0; i < Storelist.size(); i++)
{
US_Crime Fault = (US_Crime) Storelist.get(i);
US_Crime Usc1 = null;
if (Fault.YYYY > 1998 && Fault.YYYY < 2013) {//year filtering
Usc1 = (US_Crime) Storelist.get(i + 1);
System.out.println(" Duration : "
+ Fault.YYYY
+ "-"
+ Usc1.YYYY
+ " --> "
+ (((Usc1.Motor_vehicle_theft - Fault.Motor_vehicle_theft) / Fault.Motor_vehicle_theft) * 100)
+ "%");
}
}
}
public static void Highest_Murder_Rate(ArrayList StoreList)
{
double max_Murderrate = Double.MIN_VALUE;
int YYYY = 0;
for (int i = 0; i < StoreList.size(); i++)
{
US_Crime fault = (US_Crime) StoreList.get(i);
if (max_Murderrate < fault.Murder_and_nonnegligent_manslaughter_rate)
{
max_Murderrate = fault.Murder_and_nonnegligent_manslaughter_rate;
YYYY = (int) fault.YYYY;
}
}
System.out.println("Murder rate the highest : ---> " + YYYY);
}
public static void Lowest_Murder_Rate(ArrayList StoreList)
{
double min_Murderrate = Double.MAX_VALUE;
int YYYY = 0;
for (int i = 0; i < StoreList.size(); i++)
{
US_Crime fault = (US_Crime) StoreList.get(i);
if (min_Murderrate > fault.Murder_and_nonnegligent_manslaughter_rate) {
min_Murderrate = fault.Murder_and_nonnegligent_manslaughter_rate;
YYYY = (int) fault.YYYY;
}
}
System.out.println("The murder rate was highest in the year : ---> " + YYYY);
}
public static void Highest_Robbery_Rate(ArrayList StoreList)
{
double max_Robberyrrate = Double.MIN_VALUE;
int yyyy = 0;
for (int i = 0; i < StoreList.size(); i++)
{
US_Crime fault = (US_Crime) StoreList.get(i);
if (max_Robberyrrate < fault.Robbery_rate) {
max_Robberyrrate = fault.Robbery_rate;
yyyy = (int) fault.YYYY;
}
}
System.out.println("Robbery_rate the highest : ---> " + yyyy);
}
public static void Lowest_Robbery_Rate(ArrayList StoreList)
{
double min_Robberyrrate = Double.MAX_VALUE;
int yyyy = 0;
for (int i = 0; i < StoreList.size(); i++)
{
US_Crime Fault = (US_Crime) StoreList.get(i);
if (min_Robberyrrate > Fault.Robbery_rate) {
min_Robberyrrate = Fault.Robbery_rate;
yyyy = (int) Fault.YYYY;
}
}
System.out.println("Robbery_rate the LOWEST : ---> " + yyyy);
}
public static US_Crime storeToCrimeObjin(String line)
{
String[] data = line.split(",");
US_Crime fault = new US_Crime(data);
return fault;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args)
{
long TimeStarted = System.currentTimeMillis();
System.out.println("********** Welcome to the US Crime Statistical Application **************************");
String InputFile = "Crime.csv";// give your in file
Try
{
ArrayList small = new ArrayList<US_Crime>();
FileInputStream Filestr = new FileInputStream(InputFile);
// Get the object of DataInputStream
DataInputStream In = new DataInputStream(Filestr);
BufferedReader Br = new BufferedReader(new InputStreamReader(In));
String StrLine;
// Read File Line By Line
StrLine = Br.readLine();// skip first line
while ((StrLine = Br.readLine()) != null) {// lines
small.add(storeToCrimeObjin(StrLine));
}
// Close the input stream
In.close();
Scanner Sc = new Scanner(System.in);
char Ch = '';
while (Ch != 'Q')
{
PrintMenu.printMenu();
Ch = Sc.next().charAt(0);
switch (Ch) {
case '1':
Pop_Growth(small);
break;
case '2':
Highest_Murder_Rate(small);
break;
case '3':
Lowest_Murder_Rate(small);
break;
case '4':
Highest_Robbery_Rate(small);
break;
case '5':
Lowest_Robbery_Rate(small);
break;
case '6':
Motor_theft(small);
break;
case '7':
//Please defined clear explanation what to do
break;
case '8':
//Please defined clear explanation what to do
break;
case 'Q':
long TimeEnding = System.currentTimeMillis();
System.out.println("Thank you for trying the US Crimes Statistics Program.");
System.out.println("Elapsed time in seconds was: "
+ (TimeEnding - TimeStarted) / 100);
break;
default:
System.out.println("Enter a valid menu selection");
}
}
} catch (Exception e) {
}
}
}
US_Crime.java:
PrintMenu.java: