One of the interesting large programs I wrote as an undergraduate was the back end of a Chess program. The GUI for the program (using GTK) was provided and I got to design and implement all of the classes to operate the pieces, board and rules correctly. This was written completely in C++.
This was a large program--over 2000 lines of code for just the back end. It was large enough that a lot of planning was necessary to be able to implement it correctly. To help plan for this program, I created a design document to describe the classes that I would write to complete the program.
The chess program was a rewarding experience. It was another program that could be appreciated by non-computer majors! (Though they probably didn't understand the distinction between the graphical interface and the back end program when I tried to describe it...). It was fun to have a large program to be in charge of and have to deal with all of the details of planning and programming it.