cs445 - Spring 2015 - Class Project

VIN - A Very Special Wine Club


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.

Logo source

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 interface.

Sample XML files used to test your functionality will be available here soon.

Scenario that will be used to test your application: coming here soon.


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 their from with the design of a database schema, the way they learned in the 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 impecably. 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

I'm starting a new business, a wine club where customers can signup to receive monthly deliveries of excellent wines sourced by our wine specialists.

Each delivery includes six bottles and the price for the delivery is always the same.

Each customer can choose to receive all reds (AR), all whites (AW), or a mix of reds and whites (RW). The basic package is a mix of three reds and three whites.

There is no cost for being a subscriber. You pay for what you receive, plus a delivery charge.

Unfortunatley, the laws in the USA are such that we cannot ship to certain states. In addition, the delivery person must make sure that an adult signs for the delivery and they need to capture the first and last name of that person.

Our club members should be able to preview next month's selection, it's available on the 15th of each month for the following month. Club members should be able to also see the history of past deliveries, including specific information about each wine that was included in the delivery.

Each customer can add a private note to their wine delivery.

One nice thing we intend to do is to allow our club members to rate wines on a scale of 10 (excellent wine) to 1 (a tad above vinegar). We'll use this information for customer service purposes and to improve the work our wine specialists do. We'll also aggregate this information from all customers who care to provide a rating in order to create a score for our wines. Customers will be able to see the wine rating when they get information about a wine.

Our customers can change at any time the type of delivery they receive (AR, AW, or RW) moving forward. Or they can change only the next delivery.

In addition, club members may specify what day of the week they want the delivery to be made and whether it's in the morning or afternoon. From time to time they may want to change the delivery day, just for the month or moving forward.

Our delivery partner will want to use the software on a daily basis in order to get a list of customers to deliver to the next day.

Club members can change the size of their delivery, e.g. skip a delivery by making the size zero, or getting more than the default which is one box that includes six bottles.

When people call with a question about the service, our customer service people should be able to look them up by email address, or their last name, or by their phone number, or by their Facebook or Twitter handle. We'd like to know how much customer service the customer has generated, such as delivery cancellations, returns, bottle exchanges.

From time to time we'll have to change the price of our monthly package. Also, we may have to change the delivery charge from time to time.

The other thing that I need is some sense of how we're doing as a business. So, how many subscribers do we have? How many new customers did we get over the last month, three, six, nine, 12 months? How many customers have cancelled their membership over the last month, three, six, nine, 12 months, since inception? What is the cancellation rate over the last month, three, six, nine, 12 months, since inception? How much money have we made the month, last month, over the last month, three, six, nine, 12 months, since inception?

That's all for now ... is this super-complicated? Can I get this by the end of April? Salud!


Last update: Jan 17, 2015 Virgil Bistriceanu cs445 Computer Science

$Id: project.html,v 1.1 2015/01/18 03:34:40 virgil Exp $