CS 151 - Introduction to Data Structures

Homework 3

ArrayList - Zipcode lookup

Due Sep 22, prior to 11:59:59 PM

Read the program design principles and code formatting standards carefully. You are expected to adhere to all stated standards.

Overview

This project uses the ArrayList class rather than the StuffBag class of the previous assignment. Otherwise it is similar. The major difference between and ArrayList and Bag is the notion of ordering. In the bag, you have no idea, ever, where the information is kept. With ArrayList, you get something of an idea; the get(index) function and, in particular add(item, index) give you the ability to keep information in your array list in a particular order. So, you are going to do exactly that.

Rather than using List151Impl you can use the Java-standard ArrayList. If you want to use List151Impl that is OK.

Reuse all of class design from the previous assignment for storing information. If you want to improve your class design that is good. If you lost points in assignment 2 for class design, you will loose only 0.75 times the points in assignment 3. (I will grade assignment 2 before assignment 3 is due.)

Data

Copied from Assignment 2

shuffzip.csv

/home/gtowell/Public/151/A03/shuffzip.csv This file is identical to the one from assignment 2 except that the order of the lines has been shuffled so the zip codes are totally random. Otherwise this file is identical to the one from Homework 2.
The lines in this file contain 12 comma-separated fields that look like this:
      "00705","STANDARD","AIBONITO","PR","PRIMARY",18.14,-66.26,"NA-US-PR-AIBONITO","false",,,
      "09005","MILITARY","APO","AE","PRIMARY",,,"EU-DE-WEISBADEN AAF OMDC","false",,,
      "10029","STANDARD","NEW YORK","NY","PRIMARY",40.71,-73.99,"NA-US-NY-NEW YORK","false",31490,48403,1050141146
The fields in each row are:

  1. zip code
  2. type -- ignored
  3. city name
  4. state abbreviation
  5. type 2 -- ignored
  6. Latitude
  7. Longitude
  8. long code -- ignored
  9. true or false -- ignored
  10. population 1
  11. population 2
  12. another number -- ignored

For this assignment we care about only: zip code, city name, state, latitude, longitude and population 2. Some lines are missing the longitude and latitude (like the second sample line), some are missing population, but all lines have the correct number of commas (11). There are no lines for which the longitude and latitude are not known but the population is known.

Given this final statement, the data falls into 3 groups: 1: those for which location and population are known, 2: those for which only location is known, 3: those for which neither location nor population is known. You first task is to design a set of java classes so that each of these groups can be stored in a instance that is capable of storing the available information, and no more. These java classes MUST be linked to each other using inheritance. For instance, if you define a class Place that stores group 3 data, then you might make a class

      public class LocatedPlace extends Place
to store group 2 data and another class
      public class PopulatedPlace extends LocatedPlace
to store group 1 data.

Requirements

Electronic Submissions

Your program will be graded based on how it runs on the department’s Linux server, not how it runs on your computer. Be sure to include with your submission:

1. README:

The usual plain text file README
2. Source files:
All .java files that are not part of the standard Java libraries, regardless of whether you wrote them or simply used ones supplied with the assignment.
4. Script file
The requested output from you program
DO NOT INCLUDE:
Data files that are read from the class site.

The following steps for submission assume that you created a project directory named Assignment3 in the directory /home/YOU/cs151/

  1. Put the README file into the project directory (/home/YOU/cs151/Assignment3)
  2. Go to the directory /home/YOU/cs151/Assignment3/
  3. Enter /home/gtowell/bin/submit -c 151 -p 3 -d Assignment3