Course Project Information

Project Overview

As a team of five to six programmers, you will assist in the implementation of a data processing system. 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 finalized in a project demonstration 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 portion of the project including the name of the developer.

Project Goal

The purpose of this project is to create an interactive social media program, connecting users. The program will maintain user profiles (non-graphic is fine), storing information about their names, locations, interests and a list of their friends, as well as a user name and password for each member. Members should be able to log in to their profiles, add new friends, search for friends, and also get friend recommendations from the program.

IT Crowd Friendface dialogue
image source

Menu Requirements

After logging in, the program should display the user profile and also present a menu of options to the user.

Your project must offer the following options to the user:

- View My Friends

    -View All Friends

    -View a Friend's Profile

    -Remove a Friend

- Search for a New Friend

    - Search by Name

    - Search by Interest

- Get Friend Recommendations

- Quit

The Search for a Friend and Get Friend Recommendations options should also allow the user to add the friend to their network of friends.

At the end of the program, when the user selects the Quit option, the data should all be written to a file to allow for modifications to the data to be read in the next time the program is executed.

image shows a touch screen of menu options

image source

Data and Topic Requirements

Data from a file must be preloaded into your program upon start up. An initial file containing at least 15 user profiles is required for the purposes of this project. Your team must select a unique group of famous persons as the initial input to your program. These persons should all come from one specific area of U.S. culture. Some possible examples:

  • 1940s film stars
  • 1990s rap artists
  • 19th Century Poets
  • San Jose Sharks Team Members
  • Celebrity Chefs

Note that no other team in the class should have your same data set. Therefore, the instructor may require you to select a different data set if your first choice is already selected by another team (or if deemed inappropriate for a professional setting)

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 User {

    private String firstName;

    private String lastName;

    private String userName;

    private String password;
    private String city;

    private BST<User> friends;

    private List<String> interests;


Each record within your data set should be an instance of this class. Note that you should store at least 2 interests per user.

Required Data Structures and Additional Specifications

The system’s data structures must include:

1. A Binary Search Tree, sorted according to friend name, to maintain the list of friends for each user. This can also be used to search your friend list via name.

2. Two hash tables - one using interest as the key and one using name as the key. The two hash table will allow users to search for friends by name or by interest. Once a person is located, the user should have the option to add this person to his or her friend list.

3. A graph to store the network of relationships among the users. Since the graph will be storing data about Users. Unlike your lab assignment where each vertex is an integer, here each vertex will be a String or User Object. Therefore, you will need to assign each user an integer id. You can keep track of which user was assigned which id by storing an id field in your User class (look up the id for a parcticular User), and also keeping a vector where id numbers are the index and the vector stores User objects (look up by index which User was assigned that index).

4. Optional: A linked list to store a list of interests in the User class.

Part of the project will require you to draw a UML class diagram to show the Hash Tables, the BST and the Graph, and other classes, as well as how they interrelate within the program.

Friend Recommendations and the Friend Graph

  • The friend network among users must be stored as a graph in the form of a vector of linked lists.
  • When a user selects the Get Friend Recommendations menu option, the program must perform a Breadth First Search to find all the friends within the user's social network (these will include both friends and friends of friends, but will not include anyone who does not share a friend in common with the user).
  • These friends should then be ranked according to both distance (how many degrees of separation between the user and the person being recommended - i.e. how many edges away in the graph) and whether the potential friend shares one or more interests. Both considerations should be taken into account when ranking friend recommendations. However, it is up to your team to design your own ranking algorithm. You may also include additional information about the user when designing your ranking algorithm, if you wish.
  • The ranked friend recommendation list should be displayed to the user and the user should then have the option of adding one or more of these recommendations to their friend list.
  • Note that people who are already friends of the user should not be recommended by the program as potential friends.

image source

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.

image spelling out the word team
image source

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, interfacing with the instructor about any issues that arise.

Team Member 2: BST Algorithms Specialist: Implement BST Insert, Delete, Display. Write User class.

Team Member 3: Hash Table Whiz: Implement two hash tables (name and interests as primary keys)

Team Member 4: Graph Expert: Implement the Graph Class, including BFS. Code Friend Recommendation system.

Team Member 5: File I/O and User Interface Ace: Create user interface. Connect menu of options to the data structures. Read and write data from/to a file

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 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! Do not be afraid to reassign this person's portion of the project to someone else as early as you sense a problem!

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 User class including BST sorted by primary key and the Interface are each worth 25% of the project. The two hash tables are worth 25% of the project, and the graph is 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.

An individual grade will be determined: by multiplying the project score by a score factor as shown below, which is determined using the average peer evaluation score (25% for the first peer evaluation and 75% for the second peer evaluation):

Average Peer Rating

Score Factor

16 – 20


12 – 15


10 – 12










Personal Score = Project Score x Score Factor

Schedule of Due Dates

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

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

3. Report 3: Low-Level Design + Peer Evaluation 1
    Report 3 due on Friday, November 9 at 11:59pm on Canvas
    Peer Evaluation 1 due on Friday, November 9at 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
    Report 4 due on Friday, November 30 at 11:59pm on Canvas
    Note: One Test Plan Document per team required 

5. Report 5: Walk-through and Test Results + Peer Evaluation 2
    Report 5 due on Friday, December 7 at 11:59pm on Canvas   
    Peer Evaluation 2 due on Friday, December 14 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 and demonstrate his or her project 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.
  • 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!).
  • 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. 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. For each diagram, the person who completed that particular component should speak about it.

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. Each team member must speak during this part and demo his or her component.


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?