CPSC 225, Spring 2012
Final Project Information

Remember that a final project for CPSC 225 is due at the end of the semester. I would like it to be completed by the last day of class, Monday, April 30. 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.

You should think about ideas for a project, and you should meet with me to discuss your ideas. The meeting should be between Tuesday, March 27 and Tuesday, April 3.

After meeting with me, you should 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 still don't know how to implement. The project plan is due on Friday, April 6.

You should have a significant amount of code written by Monday, April 16. 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. You should plan to meet with me that week to show me what you have done and to discuss what you still have to do.

The project is due on Monday, April 30.

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 three 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 obtain from the web or other sources. 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 as such. (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 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. A Go game. Various drawing/painting programs. More games...