Topical Information

The purpose of this project is to test your ability to use files, class design, operator overloading, and Strings or strings effectively in program design.

Program Information

Create a program which will read a phrase from the user and create a framed version of it for printing. For example, the phrase "hello world" would always result in:

   *********
   * hello *
   * world *
   *********

Whereas the phrase "the sky is falling" might be:

   ***********
   * the     *
   * sky     *
   * is      *
   * falling *
   ***********

Or:

   ***********
   *   the   *
   *   sky   *
   *   is    *
   * falling *
   ***********

Or even:

   ***********
   *     the *
   *     sky *
   *      is *
   * falling *
   ***********

Depending on whether or not the user asked for left, centered, or right justification — respectively — of the phrase's words within the frame. Note how the frame exactly fits the phrase based on the longest word within. Neat, eh? (Makes "Hello World" seem like a bad test case, doesn't it?)

The phrase "O | -+- | /-\" when centered would become:

    *******
    *  O  *
    *  |  *
    * -+- *
    *  |  *
    * /-\ *
    *******

(Okay, so it's a sad excuse for a stick figure, but hey! I've never claimed to be a great good decent artist, now have I? *phbbt*)

Also allow the user to specify what character you are to make the frame from. Typical choices would be @, #, *, +, x, X, o, or O. But let them tell you anything that will print just fine. (Hint: cctype has a function called isprint that tells if a character is printable.)

Give them the option of reading phrases from the keyboard or a file they specify (assume each line of the input stream contains a single phrase).

The user should also be able to choose if the framed phrase is printed on the screen or into a file they specify.


In case it isn't clear, you should create a 'frame the phrase' class. It should have overloaded operators for at least input and output. (Although concatenation might prove interesting, too...)

This assignment is (Level 5).

Options