cs445 - Spring 2013

The Lion Fish Scuba Shop

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.

2. Acceptance Criteria

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: you can see a mockup -- not complete -- here. If you use a different programming language, then find the equivalent GUI framework and use it.

Of course the application logic should have no dependency on how data will be presented. Your project should work equally well with a command line interface, like the one described here.

To help with project testing here is an XML file with tour definitions: load the tours from this file instead of creating them by hand through the GUI.

3. Questions and Answers

Check here for answers before asking your TA or 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, 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:

  • Create a web interface: 20%
  • Interface with a relational database -- PostgreSQL, SQLite, MySQL, no other database will be accepted -- and create a true client-server application: 20%

The web interface will be tested using Firefox 19+ or Chrome.

5. Project Description

I am the owner of the "Lion Fish Scuba Shop" and we offer fantastic scuba diving tours in the XYZ Caribbean Islands.

Quite frankly I'm tired of doing reservations with pen on paper and having to be always on the phone or have one of my employees on the phone.

I need software that helps me manage my tours.

I want to be able to define when tours will be available, for example every week day at 9am and 4pm. There will be days when I cannot do tours, mostly because of my kids' parent-teacher conferences, which means I should be able to cancel some tours, in addition to being able to increase or decrease the price of a tour based on demand.

When people call I should be able to look up what's available and book them for a spot or more in a tour if the maximum number of spots isn't been exceeded for that tour.

When people call to make a reservation I'll need some of their personal information such that we can process payment; in addition we'll need an email address such that we can contact them if we cancel a tour because of bad weather or because the number of people in the tour is too small.

For all intents and purposes, the email address is what I use to locate orders in the system.

People who have booked a tour can call to cancel. Later on, once this software can be accessed from the Web, I'd like to be able to set a limit for how late people can cancel a trip, say "at least two days before the tour."

People who have booked a tour can also change their booking for a different date, assuming the new tour has availability and that the person doing the change pays the price difference between the original tour and the new one. If the new tour is cheaper, then we'll pay them the difference between the original price and the new one.

Too keep things simple, we're not doing split orders, where, for example, somebody can hold two seats on a tour on Monday morning and another one on Wednesday afternoon. If you want multiple tours, then you'll have to live with multiple orders.

The other thing that I need is some sense of how we're doing as a business. So, I should be able to search for a specific date or date range and see how many bookings we have and how much revenue is associated with those bookings. Also, find out how many cancellations we've had for the same time frame.

Oh, one more thing, every time I look up a customer's booking, I should be able to see if they are repeat-customers and how much money they've spent with us in the past.

That's all for now ... is this super-complicated? Can I get this by the end of April? Muchas gracias! Call me and your next tour will be free.

Last update: Apr 14, 2013 Virgil Bistriceanu cs445 Computer Science

$Id: project.html,v 1.6 2013/04/15 00:48:43 virgil Exp $