"Share A Ride" - A Ride Sharing Application


1. Introduction

The purpose of the project is to give you the opportunity to practice the concepts discussed in this class. The requirements are purposely somewhat vague such that you can interact with the client (that's your instructor) to figure out the detailed requirements.

Before we get into the functionality detail, I want to remind you that detail about the programming language, the platform on which the project will be tested, unit-testing, and how to submit your work is available in the syllabus.

Sections 2 through 4 in this document cover acceptance criteria for the project, Q&A, and a description of how you can earn extra credit for the project.

Lastly, the best project will receive a prize of $300 in cash, curtesy of our sponsors, PartySlate, Inc. ($200) and theSleepless, Inc. ($100). Your instructor reserves the right to not award the prize or to split it between multiple outstanding submissions.


2. Acceptance Criteria

The basic implementation of the project assumes the application runs on a server and that various clients access it through a REST API.

The RESTful API will be available here as soon as we clarify the project detail. This process will require you to ask lots of questions, in class, via email, etc.

I will not change the high-level requirements as a result of the requirements clarification process. However, I will document the decisions made in the Q&A document.

Here is the scenario that will be used to test your application.


3. Questions and Answers

Check here for answers before asking your TA or the teacher.


4. Extra Credit

The main purpose of this project is to practice object-oriented analysis, design and programming, not to teach you web development frameworks or relational databases. As such, the use of a database is expressly prohibited for the core project implementation.

There is a finer point to be made about the databases ban, namely that most students would start with the design of a database schema, the way they learned in a Databases class, instead of thinking about use cases, entity objects, etc.

In fact, the database should be a plug-in to your application, the same way the delivery mechanism should be, whether command line, web, etc.

We can talk about extra credit iff (if and only if) your core project implementation works impeccably. This point will not be debated.

If you complete your core project implementation on time and feel adventurous, then you can get extra credit for implementing a web client for the customer.


5. Project Description

As I drive from Schaumburg to Milwaukee, most of it on I-294 and I-94, I see lots of cars with a single occupant, the driver.

Turns out that it's not just me seeing mostly empty cars, the surveys have shown that the phenomenon is widespread, see below for the results of a 2016 study based on American Community Survey data. (Click on the thumbnail to see the full image).

Ride sharing is quite common in Europe, see for example Mitfahrzentale in Germany.

So, what if we could make ride-sharing simpler here, in the U.S.A?

The idea is that I, as a driver, can post my upcoming trip to another city: that includes the starting point, the end point, date and time of departure, the max number of people I'm willing to take with me in the car, and the amount I want to charge for each person I take on the ride, which amount defaults to zero. In addition to all this, the driver can specify other conditions for the ride, such as "no smoking / no vaping, no more than two carry-ons, no guns, etc.", etc.

People who need rides can search what rides are available for a certain date between a starting point and an end point. If any rides are found, then one can post a note to the desired ride, thus expressing interest in joining the ride. The system will notify the driver with a link to the note.

The note should include the number of passengers, the desired pick-up and drop-off place, and any other information that the rider may think is necessary.

The driver can respond with her own note to require additional clarification, confirm the ride, etc.

Both the driver and the rider have access to the full history of notes (messages) exchanged while arranging a ride.

To protect the privacy of the driver, only limited information about the driver will be available for searches by potential riders:

  • The zip code and the name of the departure and arrival cities
  • The first name of the driver, the number of ratings and the average rating of the driver, and comments about the driver made by other riders.
  • The picture of the driver

Drivers can see the number of ratings and the average rating of the rider. Also, drivers can see comments about the rider made by other drivers. In addition, the driver can see a picture of the rider.

To address security concerns each user of the system would have to first create an account with SAR. Whether you're a driver or rider, the account includes information such as first and last name, a cell phone number where the system can send notifications, and your picture (just like with Uber and Lyft). An account is not active -- i.e. it may not be used -- until the user confirms their account information by clicking on the link that's been sent to their cell phone after they created the account.

When a driver posts a ride, (s)he will have to include the make, model, color of the car, the license plate number, and the state that issued the license plate.

One hour before the ride scheduled departure time, the driver will be reminded that he needs to pick up passengers and be provided with a link to confirm the ride's on time.

At the ride scheduled departure time, the driver will be prompted to confirm that she's started the ride.

The rider who booked the ride will receive a message asking to confirm that he's on board, taking the ride.

When the ride is complete, the driver can rate the rider and make comments about the rider. Likewise, the rider can rate the driver and make comments about the driver. Rating is on a scale from 1 to 5 with 5 being the best.

This is not a for-profit business, we don't make any money in the process, our only interest is to reduce the number of single-occupant cars on the road. This being said we know that the government bureaucrats will eventually ask us for business data and/or information for all sorts of purposes, such as better urban planning, environmental impact, etc. As such, as the business owner, I'll need to be able to generate some reports from SAR, as follows:

  • Number of rides posted between a start date and an end date, broken down between departure zip code and arrival zip code.
  • Number of rides taken between a start date and an end date, broken down between departure zip code and arrival zip code.


Last update: Jan 7, 2020 Virgil Bistriceanu cs445 Computer Science