CS412
Spring 2025

Final Project

topic proposal due by 9:00 p.m. on Friday, 4/11/25
checkpoint deliverable due by 9:00 p.m. on Friday, 4/18/25
complete project due by 9:00 p.m. on Thursday, 5/1/25
Late submissions will not be accepted.

Learning Objectives

By completing this project students will:

Description

You will develop a web application with a database back-end for storage and retrieval of data. Choose your own adventure: select a subject matter related to your major or personal interests.

This is an individual project (i.e., no groups or teams), and counts for 30% of your course grade.

Examples

Some sample CS412 projects ideas include:

Detailed Requirements

Your application must be written using the Django web framework for Python, and must satisfy the following minimal requirements:

You may create the front end using Django templates/HTML/CSS, or any other front end technologies that you choose. Use of additional front-end toolkits (e.g., React, Angular) is permitted but not required. These must be well documented, and you might be asked to explain how these work to verify that you did the work yourself.

More complex projects scoring higher than very simple projects that mimic in-class assignments. The grading breakdown will be approximately as follows:

Planning Your Time

You have approximately 4 weeks to complete this project. Here are some guidelines on what you should be working on at what time:

Week 1 (through 4/11/25):

Select your topic; submit on Gradescope by 9:00 p.m. on Friday, 4/11/25

Your proposal should be brief (about 3-4 sentences) and describe the general subject
matter (e.g., car rental), the specific interaction you will model (e.g., car selection and checkout), the data you will require for this interaction, and any important assumptions.

For the data, please be as specific as possible able the names of models and what kinds of fields are in each model.

You MUST identify which models relate to other models by a Foreign Key relationship (see example below). Briefly:

Example: Successful Project Proposal (1)

The following is an example of the level of detail that is required in the proposal.

My project will model a car rental application used by the customer to search for and reserve a car rental. The customer will browse a listing of cars, select a car, and book the car for specific rental dates to complete a transaction. I will assume that cars already exist in the rental database. I will provide a way for customers to sign up/create a new customer account.

The required data models for this application are:

  • Customer:

    • last name (text)
    • first name (text)
    • address (text)
    • email (text)
    • date of birth (date)
    • driver’s license number (text)
  • Car:

    • vehicle ideification number (text)
    • year (number)
    • make (text)
    • model (text)
    • color (text)
    • car type (text)
    • image (image file)
    • price per day (number)
  • Rental:

    • car (Foreign Key to Car)
    • customer (Foreign Key to Customer)
    • date out (date)
    • date in (date)
    • total price (number)

    ** notes: one rental requires 2 foreign keys: both a Car and a Customer This example uses only 3 models, but 4 are expected in the project.

Example: Successful Project Proposal (2)

The following is an example of the level of detail that is required in the proposal.

My project will model an online book store. It will allow users to search for books, add them to an order, and check-out their order. I will assume that books are already in the application, and that payment is handled externally. I will provide a way for customers to sign up/create a new customer account.

The required data models for this application are:

  • Book:

    • title (text)
    • author (text)
    • year_published (number)
    • price (number)
    • image (image file)
  • Customer:

    • last name (text)
    • first name (text)
    • address (text)
    • email (text)
  • Order:

    • order_date (date)
    • customer (Foreign Key to Customer)
    • status (choice of: “cart”, “shipping”, “complete”)
  • OrderItem:

    • order (Foreign Key to Order)
    • book (Foreign Key to Book)
    • quantity

    note: an Order is a specific transaction for one Customer, but it might contain multiple Books, or multiple quantities of one Book. Each Book is an OrderItem within an Order.

The goal of this topic proposal is for you to be prepared to begin building the application. Until you can explain which models you need, the data attributes of those models, and the relationships between them (i.e., the foreign keys), you are not ready to build the application.

Submit this on Gradescope.

Projects on unapproved topics will not be accepted.

Week 2 (through 4/18/25):

Week 3 (through 4/25/25):

Week 4 (through Thursday 5/1/25):

complete by 9:00 p.m. on Thursday 5/1/25
Late submissions will not be accepted.

Project Demonstration Video

You will present your project by making a short (3 minute) video screen capture, with you narrating as you demonstrate the application. Think about this as a demonstration for a potential customer or employer. This will speed the grading, and provide you with a lasting artifact of your work, which you can demonstrate to potential employers. Your demonstration must not show any code or database records, but must demonstrate every major feature of your application.

I recommend that you write a brief outline of what you will show in which order. Then, use a screen capture tool (I suggest QuickTime player for Mac or Tiny Take for Windows or any similar program). Record your video, and post it to YouTube (a private/unlisted URL is fine; do not submit .mp4 or `.mov files or upload to a google drive – this makes it hard for us to see).

Save the URL into a text file called video_url.txt, and put it in your main project repository (so it will upload to git).

Deployment and Submitting Your Work

Be sure to name your files correctly!

  1. Create a text file within your main django directory called project_url.txt, containing the URL to your web page, and nothing else.

    For example: https://cs-webapps.bu.edu/azs/cs412/mini_fb/.

    This file will be used by the autograder to locate your web page, so you must get the URL exactly correct, and you must not include any other text or code in the file.

  2. Add teaching staff as collaborators to your GitHub repository (wderocco8, Aanuszkiewicz, and azs-bu). Read-only access is fine.

    Create a text file called github_url.txt in the root of your project (e.g., django directory). Paste your GitHub URL in the file.

    Add these files to your git repository using

    `git add -A`.
    

    Commit this to your git repository, using

    `git commit -m "Added project_url.txt"`
    

    Push it to GitHub, using

    `git push origin main`
    
  3. Log in to GradeScope to submit your work.

    In the Gradescope upload page, upload these two files:

    • project_url.txt

    • github_url.txt

Notes:

Academic Honesty and Collaboration

Cooperation is recommended in understanding programming concepts and system features. But the actual solution of the assignments including all programming must be your individual work. For example, copying without attribution any part of someone else’s program is plagiarism, even if you have modified the code. The University takes acts of cheating and plagiarism very seriously; first time violators are routinely suspended for a semester.

Reminders

In your work on this assignment, make sure to abide by the collaboration policies of the course.

If you have questions while working on this assignment, please post them on Piazza! This is the best way to get a quick response from your classmates and the course staff.

Important Guidelines: Comments and Docstrings

  • Refer to the class Coding Standards for important style guidelines. The grader will be awarding/deducting points for writing code that comforms to these standards.

  • Every program file must begin with a descriptive header comment that includes your name, username/BU email, and a brief description of the work contained in the file.

  • Every function must include a descriptive docstring that explains what the function does and identifies/defines each of the parameters to the function.