The main goal of the final project (which counts for 1/2 of the course grade) is to put together all the bits and pieces that you've learned about programming during the quarter: object-oriented programming concepts, well commented readable code, good data structure definitions, understandable algorithms, reasonable error checking on user-provided input, etc.
Over the many years that this course has been taught, we've seen great (and fun) final projects. Examples include:
The point of listing these examples is to show the variety of ideas students have come up with. Some programs have been used to further a research project a student was involved with, some were demonstrations of concepts that the student was interested in, and some have been computer games that were just plain fun to write.
- A GUI-based program to calculate safe dosage levels for potentially toxic drugs. See details here.
- A GUI-based lab animal colony database management system. See details here.
- A GUI-based program to search for plasmids and primers used in the lab. See details here.
- A program to analyze the fragment weights from a mass spectrometry experiments.
- A program to calculate fluid and electrolyte deficit and estimate creatinine clearance in order to access patient renal function.
- A program to compute the target genotypes of Drosophila parents given the desired genotype of progeny.
- A program to calculate electrostatic energy based on a molecule's coordinates and partial charges.
- A program that maintains a database of clinic patients, allowing the user to add, modify, and delete individual patient records.
- A program to determine the dosing regimen for several different drugs given half-life, therapeutic index, and other patient parameters.
- A program that demonstrates community birth, aging, and death based on a cellular automata algorithm.
- A program to catalog and search a personal wine collection.
The requirements listed here are intentionally fairly general so as to maximize the flexibility you have. All will be discussed in class prior to the end of the quarter and most have been the topic of homework problems.
- Your program may be (i) a script, or (ii) an interactive program with either a command-line interface or a graphical user interface (GUI).
When processing user input, at least some rudimentary error checking should be performed in order to avoid tracebacks caused by simple input errors such as mistyped file names or unreasonable numerical data values.
- If you choose to implement a script, your program must accept command line arguments specified by the user such as file name(s) and program option flags. Your program must also both read from and write to at least one disk file.
- If you choose to implement an interactive command line program, your program must include an event loop that reads from standard input (sys.stdin) and reads from or writes to at least one disk file.
- If you choose to implement an interactive GUI program, your program must use Tkinter or Pmw and read from or write to at least one disk file. (If you wish, you may use a different windowing system after getting approval from the course instructors.)
- Your program must define at least two Python classes, possibly more. Your use of class definitions should be done in such a way that they improve the modularity and potential re-usability of your code.
- Your program must consist of multiple program modules. A good way to start is to put the main program in one file and library functions and classes in other files. Each module should have some simple means of testing that module independently of the other modules.
- Your program must either parse input data and use them in some non-trivial task, or use data generated within your program to update one or more graphical outputs such as a histogram or other plot. Examples of parsing include:
Examples of using data include:
- extracting values from an XML file,
- reading comma- or tab-separated data files, and
- screen-scraping from web sites.
The goal is to demonstrate using Python for some non-trivial task. Simply copying data with minor alterations, such as replacing one string with another, is not sufficient.
- creating objects from input values,
- sorting input based on criteria other than alphabetical or simple numerical comparison,
- querying web sites or web services by providing input data to them and then utilizing the results,
- updating graphical displays such as text or graphics (e.g., plot(s)).
- Your program modules must have sufficient comments and docstrings embedded in the source code so that someone reading the program can tell what is going on. Complex algorithms should be thoroughly documented.
- You need to provide either a separate text or MSWord file, or details in an email message, that describes the problem statement, the objective you're trying to accomplish, the approach you've used, any non-standard Python packages you use (including specific versions of those packages), any needed input files used by your program, and any limitations to your solution. In other words, tell us what you're trying to accomplish and provide us with what we need to successfully duplicate your results.
Obviously you need to supply the source code so that we can test your program. You should also supply instructions on how to run your program if it's not totally obvious how to do so, or if you don't provide a "help" feature. If your program uses an input data file or user-provided keyboard input you'll need to supply that too. If you use other python packages that we have not discussed in class, tell us where to obtain these packages. Lastly, if it not completely obvious if your program is generating correct output, you'll need to supply sample output so that we can determine if the program works as advertised.