Course Project Information

Project Overview

As a team of five programmers, you will assist in the implementation of a data processing system that mimics the functionality of an online storefront. Your program must store both customer and product information and display a different interface depending on whether the user is a customer or employee of the store. The teams will be chosen in the third week of class.

Each member of the team is to code one or more functional areas of the project. When complete, the individual components will be integrated into one program, which will be demonstrated in a project demonstration that will be held the last week of the quarter. While the final result is one integrated program, each team member’s work is to be maintained as separate file(s). If this is not possible, clearly document each function including the name of the developer.

image source

Data and Topic Requirements

Your team will select the products that your store is to carry depending on the interest of the team members. The "products" that your store carries will be your topic. Some topics might include:

  • Comic Books
  • Music
  • Clothing
  • Games

Note that you are not permitted to select Books, which will be the example used throughout the quarter. Try to come up with a novel or interesting idea. For example, the topic of movies and cars have already been used by many student teams in the past and will not be allowed as topics on this project.

Once you have selected a topic, your team will be responsible for finding a collection of data that falls within the specifications of your topic. The data collection is of your own choosing, with the requirement that each record in the system must contain a primary key (must be a string) and a secondary key, and at least four non-key fields, one of which must be the price entry for that particular record. For instance, given the Book topic, your fields might be:

Title - primary key

Author - secondary key





Your collection must have a minimum of 15 product records with which to seed your project. Users of your system must be able to upload additional records contained in additional files.

Once you have gathered your collection of data, you will be required to create a class whose fields are the attributes of this data set. For example:

public class Book {

    private String title;

    private String author;

    private int year;

    private int isbn;

    private double price;

    private String description;


Each record within your data set should be an instance of this class.

Menu Requirements

The goal of this project is to create an interactive data processing system, with a menu of options provided to the user. There should be separate menus presented to your user depending on whether he or she is a customer seeking to purchase from your store or an employee who is updating the stock or handling orders.

To begin, your project must offer the following login options to the user:

-Login as a Customer

-Enter username and password (verified from a file)

-Create a new account (added to the file)

-Login as a guest

-Login as an Employee

-Enter username and password (verified from a file)

Your project must offer the following options for the customer user:

- Search for a product

- Find and display one record using the primary key

- Find and display one record using the secondary key

- List Database of Products

- List data sorted by primary key

- List data sorted by secondary key

- Place an Order

- Overnight Shipping

- Rush Shipping

- Standard Shipping

- View Purchases

- View shipped orders

- View unshipped orders

- Quit

Your project must offer the following options for the employee user:

- Search for a customer by name

- Display unsorted customer information, including first and last name, address, phone number, order history

- View Orders by Priority

- Ship an Order

- List Database of Products

- List data sorted by primary key

- List data sorted by secondary key

         - Add a new product
         - Remove a product
         - Quit

The program should load customer, order and product information from a text file. At the end of the program, you should write customer, order and product information to the same or a different file. This feature will allow the information to be read back into the system when the program starts up again.

Any missing menu option from above will lower the completeness score by at least 10% or one letter grade (see more grading information below).

Required Data Structures and Additional Specifications

The system’s data structure must contain a Binary Search Tree, sorted according to the primary key, and a second BST sorted according to the secondary key. The BST will contain the information about the products.

The system must also contained a hash table which will be used to store customer information. The hash table must resolve collisions using separate chaining as described in class. Note that you must have a Customer class to store customer information, similar to the following:

public class Customer {

    private String first_name;

    private String first_name;

    private String last_name;

    private String address;

    private String city;

    private String state;

    private String zip; //or int

    private List<Order> orders;

    //getters, setters, constructors go here


Finally, you will create a Priority Queue to store order information. Orders are to be stored according to priority in a priority queue that is based on the Heap data structure. Priority is to be assigned according to the date and time of the order and the shipping speed selected by the customer. Your Priority Queue should be implemented using a Heap, similar to the class below.

import java.util.Comparator;
public class Heap<T> {

    private int heap_size;
    private ArrayList<T> heap;

    private void heapify(int i)

    private void heap_increase_key(int i, int key){...}


    public Heap()


    public void build_heap()

    public void insert(T data)

    public void remove(int index)

    public ArrayList<order> sort()

    public T get_max()
    public int get_parent(int i)

    public int get_left(int i) {...}

    public int get_right(int i) {...} 
    public int get_size()

    public T get_element(int i) {...}

    /**Additional Operations*/

@Override public String toString(){...}  

    public void displayArray()

    public sort() { ... }

Note that you should also have an Order class to store order information.

The student whose role is to make the Priority Queue will have the hardest job on the team and will need to write this data structure from scratch. Please select the team member(s) who is (are) the best programmer(s) and most reliable student(s) to handle this task. This student(s) will most likely need to work ahead and learn the information about the heap before the rest of the class. The heap lesson videos and notes will be released around week 8 to allow ample time to complete this portion of the project.

Part of the project will require you to draw a UML class diagram to show the Hash Table, the BSTs and the Priority Queue, in addition to the Customer, Order and Product classes and any additional classes you create as part of the project (make sure to show how the classes are interrelated).

Expectations for Team Members

Your grade for the project will be a factor of the team score weighted by a peer evaluation.

In addition to writing and debugging code, each member of the team will:

  1. Give suggestions for the application data: think about original/interesting/educational data that matches the program requirements. During the first team meeting, every student will bring his proposal, then the team will assign a preference number to each proposal (1 – the first choice, etc.); the final decision will be made by the instructor (no two teams should process the same data). 
  2. Participate in designing a solution to the problem: Data Diagrams, Structure Charts, UML Diagram
  3. Participate in writing the project reports. 
  4. Provide relevant test cases for the final presentation. 
  5. Individually test his/her part of the program (as much as possible). This implies writing test drivers (code that will not be included in the final project, but it will be used to test parts of the project).
  6. Participate in all of the team meetings. Come prepared to the meetings. If a team member must be absent from a meeting, he/she should inform the other team members in advance; also he/she could keep in touch by phone or email. 
  7. Turn in his/her part of the project on the scheduled date. 
  8. Work with the team coordinator and other members in the team to integrate his/her part of the code. 
  9. Prepare for and participate during his/her team presentation. 
  10. Actively attend all of the presentation sessions. (Ask questions/provide answers). 
  11. Write the peer evaluations.

Suggested Team Assignments

Each member of the team must write at least one unit of code. If the team is small, team members may have to write multiple units.

Team Member 1: Pro Team Coordinator: Data structure design coordination, main(), Integration, Testing, Project presentation coordination, making sure reports submitted on time, setting up meetings, keeping everyone on track (issuing deadlines to teammates), interfacing with the instructor about any issues that arise.

Team Member 2: BST Algorithms Specialist: Implement BST Insert, Delete, Display or Primary Key and Product Class

Team Member 3: Hash Table Whiz: Implement Hash Table and Customer Class

Team Member 4: Heap/Priority Queue Hero: Implement the Priority Queue and the Order Class. This person should be your strongest programmer and a reliable member of the team. Do not assign this portion to someone who frequently misses team meetings or is not a confident programmer.

Team Member 5: File I/O and User Interface Ace: Create user interface. Connect menu of options to the data structures. Write data to a file. Write Employee class (login credentials)

Project Reports

The following reports are required. The due dates will be announced in class, as well as written on the course schedule. These are as follows:

Peer Evaluation

Each member of the team is to rate the contribution of the other team members using the Peer Evaluation Form. These evaluation forms are to be turned in individually. There will be two (2) peer evaluations in total. 

The peer evaluations are an opportunity for any team member who is not pulling his or her weight to make improvements. Therefore, the score for the first peer evaluation will count towards one quarter (1/4) of each team member's score, while the second peer evaluation will count towards three quarters (3/4) of each team member's score.

Any member who does not complete a peer evaluation will receive a five (5) points deduction from his/her average peer evaluation score for the project, two and a half (2.5) for each missing evaluation. 

Note that you are not to rate yourself. 

These evaluations will be used to determine a tentative score for each individual on the project. You will receive an average of the scores assigned by your team mates. The instructor, however, is responsible for marking the final determination of each person’s grade on the project and will use the teams’ score only as one input in the grading process. See the Project Score section below for more information.

Here is a link to the peer evaluation form that will be used for both peer evaluations:

What to Do If Someone on Your Team is Not Doing His or Her Part

If someone on the team is not doing his or her part, it is the responsibility of the team leader to talk to that person and encourage him/her to take the project more seriously. If this teammate is unresponsive, the next step is to meet with the instructor to explain the situation. The instructor will intervene and talk to the student. Ultimately, however, if your teammate refuses to work, his/her portion of the project should be reassigned to another member(s) so that the team doesn't fall behind or fail. In this case, the other members of the team should give a score of 0 to this teammate on the peer evaluation.

Do not be afraid to give a low peer evaluation score to a teammate who is not meeting his or her responsibilities!

Project Score

A team score will be calculated as shown below.

  • Completeness and Accuracy (80%).

-The project runs without errors

-All portions of the project are complete and functional

-The BST, Hash Table, Heap, and Interface are each worth 25% of the project. If any of these components is missing, a deduction of 25% will be made.

  • Reports (10%). All Reports are complete, thorough and well-written.
  • Presentation (10%). See presentation section below for grading criteria.

A tentative individual grade will be determined: by multiplying the project score by an average rating factor and using a score factor as shown below. After the individual’s tentative score, up or down adjustments may be made based on individual performance as observed in the presentations or based on the individual’s program code and documentation.

Average Peer Rating

Score Factor

16 – 20


12 – 15


10 – 12










Personal Score = Project Score x Score Factor

Tentative Schedule of Due Dates (Check Course Schedule for Updates)

1. Report 1: Project Proposal and Team Member Document
    Due Friday, January 5 at 11:59pm on Canvas
    Note: One document per team required.

2. Report 2: Requirements Analysis and High-level Design
    Due Friday, February 8 at 11:59pm on Canvas
    Note: One Requirements Analysis Document per team required.

3. Report 3: Low-Level Design + Peer Evaluation 1
    Due Friday, March 1 at 11:59pm on Canvas
    Note: One Low-Level Design Document per team required, one peer evaluation per team member required.

4. Report 4: Test Plan
    Due Friday, March 8 at 11:59pm on Canvas
    Note: One Test Plan Document per team required 

5. Report 5: Walk-through and Test Results + (Peer Evaluation 2 <-- due on Final Exam date Friday, March 29)
    Report Due Friday, March 22 at 11:59pm on Canvas
    Peer Evaluation 2 Due Friday, March 29 at 12:00pm on Canvas
    Note: One Walk-through and Test Results Document per team required + one peer evaluation per team member required.


  • At the end of the quarter, you will need to present the final version of your project to the instructor, who will also test out your code.
  • This presentation and demonstration will occur via video.
  • Suggested software for screen capture to record your video:
    • Camtasia (free 30 day trial)
    • QuickTime (comes standard with a Mac)
  • The video should have two parts:
  1. A PowerPoint presentation (or similar) as described below
  2. A demonstration of your project, where each team member shows the functionality of his or her portion of the project.
  • Each team member should speak as part of the presentation.
  • When discussing the UML diagrams, the teammate responsible for that portion of the project should explain the diagram for his or her component.
  • Your project will also be evaluated by the instructor during this video presentation. If a component is not included on the video, I will assume that it does not work or was not completed, and will not bother to test it.
  • Please select *one student* to demonstrate the project in a continuous video demonstration of all project features (including error cases).
  • Please show a continuous recording of the project demo. Please do not edit out any component of the project or the results of entering a key. Please do not break the project into pieces and record each component separately.
  • As no extensions are allowed, make sure that you at least have a running version of your project when you record the video (even if it is incomplete) or you will receive a 0 on your project (no exceptions!).
  • Please read all directions below to maximize your presentation score.
  • The presentation itself will be graded on a 20 point scale as follows:

 Requirement Description Point Value
Slide 1

Your first slide must display your topic and the full names of all presenters. Important: At this point in the presentation, each team member should introduce him or herself and one person should state the topic of the presentation.

Slide 2
Your second slide must provide an outline of what you will cover in your presentation. This outline must be a list in either bullet point or numerical form. One member of the team should briefly go over what will be discussed during the presentation.

Slide 3
Your third slide must give an overview or brief summary of what your chosen topic is. In other words, define your topic.

Slide 4
In the fourth slide, you will need to give an overview of your data set, where you found it and what are the fields contained in the data set.

Slide 5-6 or 7
In the next 2-3 slides, give an overview of the data structures used in your presentation. You must present these by using the UML diagrams that you created in your project reports. You may update the UML diagrams if your data structures have changed since submitting the reports.

Slide 7 or 8
In the next slide, list the results from your walk-throughs. What errors did you notice and what feedback did you get from your participants? Did you make any changes since completing the walk-throughs?

Live Demo of Project
During the live demo, you should display the main functionality of your system, including all required menu options, as well as any special features you would like to show off. Is this demonstration coherent? Is it professional? Is it a continuous recording?

All teammates present
Each teammate spoke during the recording


Presentation Aesthetics
Is your presentation laid out nicely with lots of images and clear, readable text?

Is the presentation delivered in a practiced and professional manner?