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.
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.
The basic implementation of the project assumes the application runs locally, on a single computer shared between all
employees. This is, of course, unrealistic, however it will allow you to get the basic functionality done without having
to worry about access control, or how to connect to a remote computer from your local client running the application,
etc. For any additional work you do, you can get extra credit, as described below.
The GUI for your application will be written in Swing if you use Java for your project. If you use a different
programming language, then find the equivalent GUI framework and use it.
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.
However, you can get extra credit for doing development work that's not required by the project, as follows:
The web interface will be tested using Firefox 10+ or Chrome.
5. Project Description
I am the owner of a website where I get a fair amount of traffic on a daily basis. One way I generate
revenue from the website is to sell ad-banner impressions on my website'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 website has the home page, and then various sections and sub-sections. For example "News",
"Weather", "Entertainment" are sections, whereby "News Local",
"News National", and "News World" are subsections of the "News" section.
Within each section / sub-section there are individual topic pages, for example "Massive Snowfall in Europe"
and "Early Spring in the Midwest" under "Weather"
Each page on the website belongs to a specific section / sub-section. Pages can be tagged with zero or more
ad tags, such that they will display ad banners for each of those tags. Tagging each page with its own tags is
very expensive and makes ad operations very complicated. Most websites will use the same ad tag(s) for groups of
pages, based on how advertisers (aka clients) buy display inventory. For example, all pages under "News"
may be tagged with the same ad tag(s) regardless of the subsection; on the other hand I may want to tag
the main "News" page with one set of tags, and the "News National", and "News World"
subsections with their own tags.
Each combination of pages and a certain position of an ad is called a placement. Assuming each page has
two ads, then in the example above -- where we group all news pages together -- we would have two have placements
which we can name, for example, News-728x90-top and News-160x600-right. The name of each
placement is something that my ad operations employee determines in the beginning and then doesn't change
in time. It is a good idea to give placements meaningful names, though there is no specific naming convention.
An advertiser such as "ACME Computer Security" may want to buy 1.5 million impressions of the wide
skyscraper (a 160x600 unit) in the News section, to be displayed in the month of March. The point of this tool
is to tell the sales person whether 1.5M impressions are available for that placement, between 3/1 and 3/31,
such that she can book the order.
In another example, an advertiser such as "Buy Best" could buy 5 millions impressions of the home
page header leaderboard (728x90 unit) and 3 million impressions of the page leaderboard in News, to be displayed
between 3/15 and 4/30. The two parts of this order are priced differently: the home page inventory may be sold
at $6 CPM (Cost Per Mille, that is $5 for each one thousand impressions), whereas the News my be priced at $2.5 CPM.
For this example the total order will be worth 5000*6+3000*2.5 = $37,500.
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 placement on the website. She will select a placement and a date (today or in
the future) and then she will enter the projected page views number which is a positive integer.
A page view is generated every time somebody loads a page from my website in their browser. Each page view will
generate zero or more impressions, depending on how many ad banners are placed on the page: for example, if a
page has two ad banners, then a page view will generate two impressions, one for each of the ad banners. All pages
within a placement have the same layout, e.g. they all have a leaderboard at the top of the page and a
wide skyscraper on the right hand side of the page. Different placements may have different layouts.
Sales people should be able to view projected and available inventory for any combination of placements
and a certain date range, book a portion of or all available inventory, modify or cancel a booking.
The order will include the name of the client, the name of the sales person, and the dollar amount charged for that
inventory. The system should calculate the average CPM for the order.
Sales people cannot see each other's orders. They may modify a booking, but not after it's been turned into
a committed order. The VP of Sales can see everything that's been sold, by whom, and for how much money.
The VP of Sales can also cancel anyone's booking, in which case the specific sales person will notified. The
VP of Sales can also cancel a committed order.
Accounting should be able to turn a booking into a committed order upon receipt of payment from the client
or for clients that have a good credit rating. When a booking is approved the sales person that created the booking
and the VP of Sales must be notified.