A couple of students of mine and me did this project for a software design course.