CS 151 - Introduction to Data Structures

Homework 2

Bags - Zipcode lookup

Due Sep 15, 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.


This project uses the StuffBag class and object-oriented design with inheritance. The general idea is that you are given file containg data about zip codes. Each line of the file contains data about exactly one zip code. However, some of the data is missing on some of the lines. The goal is to create classes that store exactly the available information about each zip code, and no more. So, you will create classes with inheritance that allow you to store all the data available in the minimum possible space. All of the data must be stored in a single Bag. You will then query the Bag to deliver information about zip codes.

Code is available by scp at
/home/gtowell/Public/151/A02/StuffBag.java Use cp or scp to get the code. For example:

                  scp YOURUNIXLOGIN@goldengate.cs.brynmawr.edu:/home/gtowell/Public/151/A02/BagOfStuff.java BagOfStuff.java



The data for this assignment is available at /home/gtowell/Public/151/A02/ziplocs.csv.
The lines in this file contain 12 comma-separated fields that look like this (There is no header line. Initialize your StuffBag so it can hold at least 50000 entries.)
      "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
Hint, to get rid of the annoying double quotes use the replace method of the String class. For example:
      String ss = "\"asdf\"";
      System.out.println(ss);  // prints "asdf"
      ss = ss.replace("\"", "");
      System.out.println(ss);  // prints asdf
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 as well as longitude and latitude. 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.


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.


The usual plain text file README
2. Source files:

3. Data files used:
Data files that are read from the class site.

The following steps for submission assume that you created a project directory named Assignment2 in the directory /home/YOU/cs151/. Very briefly,

  1. Put the README file into the project directory (/home/YOU/cs151/Assignment2)
  2. Go to the directory /home/YOU/cs151/Assignment2/
  3. Enter /home/gtowell/bin/submit -c 151 -p 2 -d Assignment2
The directions for submitting in assignment 1 can also be followed with minor changes resulting fromt he changed assignment number.