Will discuss in fragments
Large portions of this program are identical to code that you have seen in previous programs, so I won't rehash that material here.
I will only discuss the material that is new to this program.