Final project for CSCI 426 Advanced Programming