p4-budget

EECS 285 Project 4: Budget Tracker

First App Due Wednesday, 17 Nov 2021, 8pm

Project Due Friday, 10 Dec 2021, 8pm

In this project, you will build an Android application for keeping track of a budget. The application will allow a user to add individual transactions, specifying each transaction’s category. It will then display the total money spent on each category and overall, as will as allow the user to list the individual transactions.

The purpose of this project is to gain basic experience in Android development. You will have full freedom to design your code and layouts, as long as you adhere to the minimum specifications described here.

This project is divided into two parts, both of which need to be turned in on their respective due dates:

Authors

The project was written by Amir Kamil for EECS 285. The concept was inspired by the Swing budget-tracker project by Andrew M. Morgan.

Table of Contents

Project Roadmap

This is a big-picture view of what you’ll need to do to complete this project. Most of the pieces listed here also have a corresponding section later on in the spec that goes into more detail.

This project will be graded by hand for correctness, and the correctness portion is worth 100% of your project grade. We will not grade your programming practices on this project. However, you should still adhere to good practices when writing your code.

The first app is worth 10% of your project grade, while the full project described here is worth 90%.

We recommend you work with a partner for this project. Please see the syllabus for partnership rules. Since the first app is submitted separately, you do not have to work in the same partnership for the first app as for the full project.

Set up your project

Follow the setup tutorial to set up your project.

Your Java files should all be in a package with the structure eecs285.proj4.<uniqname>budgettracker, where <uniqname> is your uniqname. If you are working in a partnership, then use both of your uniqnames, in alphabetical order, separated by an underscore. For example, if I am working alone, I would put the following package directive at the top of each .java file:

package eecs285.proj4.akamilbudgettracker;

If I am working with schatzju, then I would use the following:

package eecs285.proj4.akamil_schatzjubudgettracker;

Familiarize yourself with the requirements below

Read through the rest of the specification to determine the required behavior that your app must support.

Design, implement, and test your sources

Start by designing the structure of your app, determining what activities it will have and how they will connect to each other. Then design the internal code structure and layouts before proceeding to implement them. Finally, test your code thoroughly on the target device.

Submit

Submit the following files to the autograder.

Refer to the guide on preparing files for submission for how to obtain the required files.

As per course policy, we will grade your last submission to the autograder. It is your responsibility to ensure that your last submission is complete.

Early Submission Bonus

If your final submission for the full project occurs at least two days before the due date (at or before 11:59pm two days before the due date), you will receive bonus points calculated at 5% of your overall score for the project (including both the setup and full project). In other words, if your overall score is N, it will be 1.05 * N after the bonus is applied.

If your final submission occurs on the day before the due date (by 11:59pm), you will receive bonus points calculated at 2.5% of your overall score for the project. In other words, if your overall score is N, it will be 1.025 * N after the bonus is applied.

Required Behavior

As mentioned above, the purpose of the Android app is to keep track of a budget. The app keeps track of individual transactions, while also associating them with categories (e.g. food, utilities, entertainment, etc.). Categories should not be hard-coded – instead, the user should be able to specify what categories they care about. The app has the ability to display the total monetary value for individual categories as well as the overall total. The app also enables the user to see a list of all transactions and to clear the transaction data.

You may develop your app on either a phone or a tablet. However, we will only test your app on a phone. We recommend testing your app on a phone emulator to make sure the interface works properly. We will only test your app in portrait mode.

We will test your app on Android Oreo 8.1. You must use a target API of 27 or lower. We recommend API 24, which gives you more support for Java 8 features and libraries than earlier API levels.

You must submit your application sources to the autograder. Refer to the Submit section for instructions on how to submit the required files. Your app must compile correctly on the autograder for us to be able to grade it.

The next two sections detail the required structure and behavior of your app. Aside from the base, required functionality, you have full freedom to design the look and feel of your app, as well as to add any extra features you want. However, we will only grade the required elements below.

App Name

Your app must include your uniqname(s) in the application name. Use a format similar to the package structure. For example, if I am working alone, the following would be my app name:

If I am working with schatzju, then it would be:

You can specify the application name when you create an Android project. If you have already created your project, you can edit the name in res/values/strings.xml:

    <string name="app_name">akamil_schatzju Budget Tracker</string>

List of Requirements

Optional Features

Clarifications

Sample Video and Screenshots

The following is a sample video of the instructor solution. Your design does not have to match ours, but it must support the same basic functionality, as described above.

The following are screenshots from the instructor solution:

Helpful Resources

The following are a few resources you may find helpful in implementing your app.