Remember that a final project for CPSC 225 is due at the end of the semester. I would like them to be completed by the last day of class, Monday, May 2, so that they can be demonstrated in class on that day. You should start on the project early and allow plenty of time for planning what you want to do, designing the program, implementing the design in code, testing the components, and polishing the final version.
Phase 1 of the project is to write up two short preliminary project ideas. At most one of your ideas should be for a game. Just describe what the program would do, in a paragraph or two. Phase 1 is due Wednesday of next week, March 9.
Phase 2 is to meet with me to discuss your idea(s). The meetings will be during the first week after Spring break, March 21 through 25. (There is nothing to stop you from starting work on the project even before we meet.)
Phase 3 is to write a fairly detailed plan for the program. The plan must include a list of the major classes that will be used in the project, with a description of what the class will do. It should describe the GUI or other user interface, if applicable. It should identify any files or other external resources that will be used or generated. And it should identify any obstacles that you foresee to completing the project, such as aspects that you stil don't know how to implement. The project plan is due on Friday, April 1.
Phase 4 is to submit a significant amount of code on April 15. You should have the GUI set up, if there is one. You should have work started on at least a few of the major classes. You should have some test methods for testing the pieces that you have completed.
Phase 5 is the final, completed project, due on May 2.
You can work on the project yourself or with one other person. A three-person group might be possible, depending on exactly what the project is. Group projects should be more ambitious than individual projects.
Your project should use at least four non-trivial, well-designed classes. "Well-designed" means that the class represents a single, clear concept, and/or that it has a single, clear responsibility in the program. It means that appropriate variables, constructors, and methods have been defined in the class. It means that the class is clearly documented.
A complex program is generally made of a number of modules (classes and/or methods) that can be developed and tested independently. You can make your life easier if you develop your program incrementally, testing each piece as you write it. Ideally, you should write test routines to make sure that the modules work. You should turn in the test routines along with the rest of the program, and the documentation for the test routine should tell how it was used.
The project must use some of the advanced materials that we have covered this term (or will cover in the coming weeks): recursion, data structures, generic programming, files, networking, threads, or advanced GUI programming. It should not be a program that you could have written at the end of CPSC 124.
It is possible that you will be able to use program components that you download from the web. This is OK as long as you do a sufficient amount of original work. The source of any code that have not written should be carefully documented. (Also, of course, it should be legal to use it in your program!)
Your program does not have to be terribly original, as long as your coding is original. If you really want to write a spreadsheet program, do it! You might want to extend a program from the textbook or from a lab or even from cs124.
Finally, the project must be a program that you write for this class, not something that you have written in another class or for some other reason.
I do not want you to simply choose a project from a list that I provide, but...
Some projects from past years: A web server (actually, an extension of one we did in the lab). A program for graphing functions, extending one from an exercise in the book. Another program for graphing functions defined by power series. A Sudoku puzzle generator/solver. A networked Poker game (based on a framework that we will see later in the course). An image-to-ASCII-art converter. A simple mp3 player/organizer, using a downloaded mp3 API for playing the songs. A genetic algorithms program, extending something we did in lab. A nice Tetris game. Various drawing/painting programs. More games...
I think that an interesting thing might be to try to write a program for Android devices. Android phones and tablets can be programmed in Java. The Android SDK runs as a plug-in for Eclipse and includes an Android simulator, so you don't even need to own an Android device to write a program for one. (The Android version of Java does not use the same GUI components as standard Java, so there would be a bunch to learn.)
(The Kindle ebook reader can apparently also be programmed in Java. So far, the SDK is only in beta, but it might be worth looking at. The iPhone, unfortunately does not use Java. I think that Blackberry might.)