"Pay My Park Stay" - Make it easier to pay for Park fees


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 $200 in cash, curtesy of our sponsor, theSleepless, Inc. 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

After a pretty long drive I arrived at one of this country's great parks. Beautiful weather, great views, couldn't wait to stretch a bit and then enjoy the view. Except that the park admission fee was to be paid by cash only, honor system: you put the money in an envelope, write the license place number of your vehicle on the envelope, and then drop the envelope in a collection box.

If you don't have the cash, tough luck, the park administrators don't seem to care too much. And if you don't have the right amount, then consider yourself lucky, you just made a "donation" to the Park system.

Why couldn't we pay the admission fee using our phones? It's anybody's guess, however the purpose of this project is to create the back-end software that would allow such payment. Read below for the high-level requirements.

As a tourist I should be able to get a list of all parks in the state, select one of them and view the admission fees for that park.

I could then pay for admission by specifying the type of vehicle I'm paying for, e.g. two-axle, motorcycle, etc. and providing the additional information required, such as license place state, license plate number, credit card information (i.e. name on card, card number, security code, billing address/state/zip). An email address will be required for sending a payment confirmation.

Of course I expect to receive an order number after payment has been processed. I could use the order number to submit a comment about the park I visited. Normally, in this day and age, I should be able to see comments posted by other visitors for each park.

As a park ranger I should be able to check if payment has been made for a vehicle based on that plate's state and number.

As an employee of the state government I need to maintain the list of parks and the admission fees for each of them; such fees change from time to time. Also, my boss makes me generate reports about the parks. She wants to know admission numbers by parks for various time frames, e.g. last month, between 12/15 and 12/31, etc. She also wants to know the revenue collected for all parks in a given time period, as a total and broken down by park.

Lastly, I expect that our Customer Service team will receive calls for assistance from time to time and they should be able to search for past orders, based on the last four digits of a CC number and possibly a date range, or by a license plate number and possibly a date range.


Last update: Sep 4, 2018 Virgil Bistriceanu cs445 Computer Science