cs445 - Fall 2014 - Class Project

Panem Nostrum


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 may seem 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.

Sample XML files used to test your functionality are available here.

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

As described in class, we'll first compile your files with our Main.java (available on the Blackboard) and run a quick check. If everything passes, then we'll run the commands from the test script.


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 some of the features that are described as optional in the project specification. More specifically:

  • Nothing for extra credit. With two weeks to go to the deadline, there is very little code in students' repositories, which is a clear sign that most projects will be late and will have trouble meeting the requirements.

5. Project Description

I am the owner of the "Panem Nostrum" a backery that makes bread using only the best ingredients, such as organic, unbleached and unenriched flour, sea salt, glacier water, and the freshest yeast available. We bake the bread every morning in our wood-burning oven and then deliver it to our subscribers.

That's right, the only way to get our delicious bread is to become a subscriber. You can cancel at any time w/o any penalty, you can suspend the service for a number of days when you go on a trip - knowing that the service will be restarted after that many days, you can even get different products depending on the day of the week, and you can even pick a day and change your bread choices for the day.

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

Unfortunatley we can only deliver to subscribers that live within 10 miles from our bakery.

Quite frankly I'm tired of dealing with all these subscriptions, and order changes, and what not by using just pen and 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 business.

In our bakery we make bread primarily, such as "Boulle", "9 Grains", "Rustic Potato", etc.

From time to time we may drop an item from the list and add others.

Each bread has a recipe and sells for a price that I should be able to adjust from time to time. From time to time I may have to adjust the delivery charge as well.

At the end of each day I need to know how many breads of each type we need to make. For each type of bread I need a summary of ingredients needed. I also need the grand total for each ingredient.

Each day we print a list of all our subscribers and their addresses plus their special delivery instructions, such that our delivery guy can plan his itinerary. Ideally I'd like the software to plan the itinerary ahead of time, but that's not the most urgent thing, it can be done later.

When people call with a question about the service, I 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.

When we make a change to a customer's subscription, we notify the customer of the change via email.

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 much flour of each kind do I need to buy next week, how much water, salt and yeast?

Oh, one more thing, every time I look up a customer's record, I should be able to see when they subscribed to our service and how much money they've spent with us broken down between products and delivery.

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


Last update: Nov 20, 2014 Virgil Bistriceanu cs445 Computer Science

$Id: project.html,v 1.3 2014/11/20 20:24:38 virgil Exp $