Homework 7: Choose Your Own Homework
- 1. Introduction
- 2. Guidelines
- 3. Minimum Viable Assignment
- 4. Proposal Submission
- 5. Grading and Submission
- 6. Important Notes
- 7. Sample Project
1. Introduction
Your task for this homework is to design and implement an assignment of your choosing. It is a two week assignment, and it is expected that the median student will spend 10-15 hours on it. You can build whatever you would like, but there are some guidelines you should follow to ensure your assignment helps you demonstrate correct usage of data structures. This document will provide those guidelines.
2. Guidelines
Here are the minimum guidelines to consider when designing your homework:
- This is a data structures course, therefore your assignment must demonstrate your ability to properly use at least two different data structures. (You don’t need to implement them yourself, however. You can use data structures from the Java API such as
ArrayList
,LinkedList
, etc.) - One of the data structures you use must be either a set (which is like a Python set) or a map (which is like a Python dictionary).
- Whatever type of data you are storing in data structures, you should manage at least 500 of them.
- Your program must be interactive. That means it has a menu of some sort that a user can interact with. You can build a basic text-based menu or if you want.
3. Minimum Viable Assignment
When designing your assignment, it is important to think through what we called the Minimum Viable Assignment (MVA). An MVA meets the basic requirements specified above and functions completely correctly. If your assignment is completed to the level of MVA, then it will receive a score of 80. If you want a score higher than 80, you will need to include extra features that go above and beyond the minimum. However, extra features do not help you if your assignment does not function properly and hence does not reach MVA. (So, build an MVA first, then add your extra features.)
Examples of ways to go above and beyond:
- Instead of a text interface, you could build a graphical interface using something like Java’s Swing library.
- Your program could gather data from a website, parsing it and inserting it into a data structure.
- Your program could deal with a very large data set, and do it efficiently.
- You could make use of some sort of other Java library that would require extra learning for you and result in very nice functionality.
Roughly speaking, a each good “above and beyond” increases your maximum score by anywhere from 5-15 points, depending on the difficulty as judged by your instructor.
4. Proposal Submission
For this assignment, you are required to submit a proposal with your idea. You proposal needs to include the following:
- Your name and andrew ID.
- Section 1: An overview of what your program will do.
- Section 2: A discussion of what data structures you will use and what you will store in them.
- Section 3: A description of your interactive interface. What is the user able to do?
- Section 4 (Optional): If you wish to potentially receive a score of greater than 80, then discuss your “above and beyond” plans. For each “above and beyond” item, discuss how many extra points you think it should be worth if you accomplish it. You can include more items here then you will realistically finish.
When writing your proposal, think of sections 1-3 as describing your MVA. Section 4 discusses extensions to your MVA in order to get more points. Remember: You assignment must be completely functional without any of the features from section 4.
You will submit your proposal and your instructor will give you feedback in 24-48 hours.
Your proposal must be a PDF file (other formats are not acceptable) and must be submitted on Autolab before Tuesday, November 27 @ 8:00pm. Late days may not be used for the proposal submission.
5. Grading and Submission
The assignment will be graded as follows:
- 5 points will be graded based on your proposal which is due November 27th at 8:00pm.
- 10 points will be graded on Autolab based on your adherence to the style guide.
- 100 points will be manually graded by the instructor based on the quality of your final, submitted assignment.
(Yes, this project is out of 115 points.)
5.1. Submission Documentation
Your final submission needs to include a brief document containing the following:
- Your name and andrew ID.
- The number hours you spent on the assignment. (This is used for planning future iterations of the course, it is not considering when grading. So please be honest.)
- The name of the file containing the
main()
function that should be run in order to start the assignment. (Or other instructions for running your assignment if required.) - A brief discussion of what works and what doesn’t in your final assignment. This includes a list of which of your above and beyond functionalities you included.
This should all be included in a text file inside your submission. (It must be a text file. I will not accept Word files, PDFs, etc.) The easiest way to handle this is to create a text file in Eclipse and save it to the Eclipse project for your assignment. Then it will automatically be included when you export the zip file.
Name this file README.txt
5.2. Style
In this homework you will be strictly graded according to the style guide. A style checker has been incorporated with Autolab and will assign these style points automatically. You can see your style score and feedback as part of the Autolab output.
5.3. How to Submit
You will submit your program to Autolab. Login to the system and you will see the homework.
You’ll need to submit a zip
file containing your code and documentation. Lucky for you, however, Eclipse can create this zip file for you. Check out these instructions. On Autolab, you’ll submit that exported zip
file. The autograder for this assignment will only be checking style.
6. Important Notes
- If you have questions, please post to Piazza. The course staff, including the instructor, monitor and answer questions there.
- When posting to Piazza, if you include any code make sure your question is posted privately to the instructors, and not to the entire class.
- If you are using a Java library not covered in class, there is a very high chance that the TAs and Instructor have no experience with it. That means our ability to help you with it is limited.
7. Sample Project
Here is a proposal for a sample project. This is here for example purposes.
Section 1
In this assignment I will build a simple music manager. It reads in information about songs from a text file and then allows the user to search them, modify them, make playlists, etc. Songs have the following information:
- Artist
- Title
- Album
- Genre (1 word)
- Playlists the song is contained in (could be 0), each separated by a semi-colon (;) (every song belongs to exactly one genre, but can belong to zero, one, or more playlists)
Section 2
I’ll use two data structures:
- I’ll stored the songs in an
ArrayList
of song objects. - I’ll use a
Map
to store the relationship between genres and songs.
Section 3
I’ll provide a text-based, interactive menu system that allows the following functionality:
- Load songs from a file
- Display all songs
- Display all artists
- Given an artist, display all the songs (title & album) by that artist
- Display all genres
- Given a genre, display all the songs (title & artist) in that genre
- Display all playlists
- Given a playlist, display all the songs (title & artist) in that playlist
- Add a new song with all relevant information
- Create a new playlist
- Add a song to a particular playlist
- Write an updated version of the input file, preserving any additions or changes made during the execution of the program.
- Quit the program
Section 4
Here are extensions I’m considering for more points:
- A feature to import songs based on the meta-data stored in an actual music files. I’ll use the library found at http://www.jthink.net/jaudiotagger/ to do it. (10 points)
- Add a feature to retrieve song lyrics over the internet from http://www.mldb.org. (10 points)
- Make the interface graphical using Swing instead of text-based. (10 points)