EECS 285 Project 4: Budget Tracker

First App Due Friday, 30 Nov 2018, 8pm

Project Due Monday, 10 Dec 2018, 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:


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>sbudgettracker, 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.akamilsbudgettracker;

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

package eecs285.proj4.akamil_schatzjusbudgettracker;

If you specify the appropriate application name when creating your project in Android Studio, it will automatically fill in the correct package name.

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

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 design your app’s interface for either a phone or a tablet. You may also support both if you like. However, we will only test your app on one or the other. Submit a file called phone.txt if you want us to test on a phone, and a file tablet.txt if you want us to test on a tablet. We will test your app in portrait mode whether you choose to develop for a phone or a tablet.

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.

Along with phone.txt or tablet.txt, you must submit both your application sources (including both Java sources and the app’s XML and other resources) and a compiled Android application package (APK). Refer to the Submit section for instructions on how to submit the required files.

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 the same format as in 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. You will need to escape the apostrophe when you define your app name in strings.xml:

    <string name="app_name">akamil_schatzju\'s Budget Tracker</string>

List of Requirements

Optional Features


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.