cs445 - Spring 2007

Project


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.

Project Description

I am the owner of a web site where I get a fair amount of traffic on a daily basis. One way I generate revenue from the web site is to sell ad-banner impressions on my web site's pages.

I have multiple sales people selling the inventory. Since they use spreadsheets to keep track of what they're selling and what they think is available to sell, we find ourselves very often in a situation where we sell too much and then cannot deliver the impressions sold. Other times we have inventory that goes wasted because nobody knew it was available to sell. All these problems are mostly due to the fact that keeping spreadsheets in sync is too difficult and error prone.

The time has come for me to commission the creation of a web-based system that helps me, my sales people, my ad operation employee and my accounting employee manage the web site inventory in a centralized fashion.

My web site has the front page and then sections (e.g. news, weather, sports, business, entertainment, classifieds, etc.) and sub-sections (local news, nationa news, world news, currency, personal finance, portfolio, baseball, NBA, football, soccer, movies, concerts, jobs, cars, etc.)

All site pages have real-estate reserved for standard IAB ad banners. See the Interactive Advertising Bureau's web site for more detail. Currently each page on my site can display a 728x90 unit at the top (leaderboard), a 300x250 medium rectangle on the left hand side and a wide skyscraper on the right hand side; the front page also allows for two other placements, two 180x150 rectangles.

On a regular basis my employee in charge with ad operations will need to update the system with the projected number of page views for each section and sub-section of the site. She will use the web interface to select a section, sub-section and a date (today or in the future) and then she will enter the projected number which is a positive integer. I should be able to perform the exact same function.

Sales people should be able to view projected and available inventory for any section, sub-section, placement and date, book a portion or all available inventory, cancel a booking. The booking will include the name of the client and the CPM. They should be able to see their own bookings but not bookings created by other sales people.

My VP of Sales, should be able to view projected and available inventory for any section, sub-section, placement and date, book a portion or all available inventory, view all bookings made by sales people, cancel her own bookings, cancel a booking made by a sales person, cancel committed inventory if the value of the deal being canceled is less than $5000. When a booking is canceled, then the sales person that created the booking must be notified. When committed inventory is canceled, then the sales person, accounting and the site owner must be notified.

I, the owner of the site, should be able to do all the things my VP of Sales can do except that there is no limit to the value of a deal being canceled.

Accounting should be able to turn a booking into commited inventory upon receipt of payment or for clients that have a good credit rating. When a booking is approved and becomes commited inventory then the sales person that created the booking and the VP of sales must be notified.

Unit Testing

Creating unit tests for all your code is a key element of this project. You cannot possibly get full credit for this project unless each and every method in your classes has good unit-testing. By good I mean meaningful and sufficient. A unit-test that asserts true is not meaningful. Only a unit-test for a method that requires multiple tests is not sufficient.

Programming Language

You may use any free or open-source mainstream object-oriented programming language and libraries you want such as Java, C++, Ruby, Python, or PHP.

I strongly discourage the use of proprietary OO programming languages, such as C# or VB.Net, as well as the linking of free and open-source sofware with proprietary 3rd party libraries.

If you're not sure what free software means, then check out the Free Software Foundation.

You should also know that free software is not the same thing as open-source software, this article from the GNU foundation clarifies the matter for you.

Acceptance Criteria

Coming soon

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, you do not have to develop a web interface for this project, nor do you have to interface with a real relational database.

Testing your project will be done from the command line.

In case you do decide to do some of the things that I do not require, then you will get extra credit for the project, as follows:

  • create a web interface: 25%
  • interface with a relational database such as PostgreSQL or MySQL: 25%

Last update: February 1, 2007 Virgil Bistriceanu cs445 Computer Science

$Id: project.html,v 1.2 2007/02/04 22:14:15 Virgil Exp $