CPSC 225, Spring 2019
Final Project Information

Remember that a final project for CPSC 225 is due at the end of the semester. The final project counts for 10 percent of your grade for the course. This is not a huge amount, but it is a significant part of the grade.

I would like final projects to be completed by the last day of class, Monday, May 6. It would be nice if you could demonstrate your work to the class on that day, or possibly even the previous week. However, a class demonstration is not required. Some small extensions on the due date might be possible in individual cases, depending on circumstances.

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 no later than Friday, April 5.

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 each 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 12, but if you would like comments on it before then, you are certainly welcome to turn it in earlier. There will be at least one lab period after April 12 where you will be able to work on your final project.

I encourage you to start programming early. Hopefully, you will have much of the code written before the last week of classes. I encourage you to meet with me again, at least once, to discuss your plans and progress as you work on the code.

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 that you have designed and written yourself. "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.

The project must use some of the advanced materials that we have covered this semester or will cover in the coming weeks: recursion, data structures, generic programming, files, networking, threads, and 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 you 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 (but if you do that, be sure to clearly document the parts of the program that are not original for this project).

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. However, it might be something that you believe would be useful in another class.

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 that year). 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 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 turtle graphics program where the turtle follows commands typed in by the user. Various drawing/painting programs. A program for keeping hockey player stats.n A  program for training music students on intervals and chords. A nice Tetris game. A Space Invaders game. A Go game. More games...