# Introduction

This is the second of two projects in this class. The purpose of these projects is for you to explore a topic we have covered in lab in more detail. This will require you to do some research on your own; however, if you get stuck, please ask your instructor for help. You should choose one of the following projects, complete it, and put your results in the git repository for this project. Please make a note of which project you have chosen in the README.md file.

If you would like to do another project that is not on this list, please ask your instructor by Friday, April 28.

For each project, you must submit an answers.md file containing answers to questions and prompts. You must also submit any configuration files, program source, or scripts you wrote for the assignment. Your submission for this project should be similar to the lab assignments you have submitted so far.

The project is due at 11:59:59 PM on Friday May 5, 2017.

# Project Options

## Project A: Makefile Helpers

Sometimes, Makefiles can be a pain to write by hand. To make1 it a little easier to write them, there are tools out there that can generate parts of a Makefile automatically.

For this project, pick one of the following tools and use it to automatically generate as much of the Makefile from Lab 7 Problem 2 as you can.

CMake may be especially interesting if you enjoy using IDEs since it can generate project files for several common IDEs in addition to Makefiles.

Be sure to include a write-up in your answers.md that describes the steps required to use the tool you chose. In other words, describe what you had to do to get the chosen tool to generate parts of your Makefile.

Also, make sure you include the source code for Lab 7 Problem 2. We want to be able to clone your repository and run make to test your Makefile.

Relevant Labs:

## Project B: C++ Standard Library

Using data structures from the C++ standard library, implement a program to count the number of occurrences of each word in a file.

Input: Your program must accept a single command-line argument (the file name). It should never prompt the user for input (Don’t use cin!).

Output: Your program must output a nicely-formatted table of words and their corresponding occurrence count.

Hint: use a map.

Sample files:

Be sure to include a write-up in your answers.md that describes your choice in data structure. Why was it an appropriate choice for solving this particular problem?2

Include a Makefile so we can build your project.

Relevant Labs:

## Project C: GUIs

Use Qt to make a 4-function calculator app.

Include a .pro file to help us compile your project. We want to be able to run qmake followed by make to build your project.

Be sure to include a write-up in your answers.md that describes the steps you took to create your calculator app. If you started with code from lab, mention that. We want to hear about your thought process and how it lead to your final product.

Relevant Labs:

## Project D: [Your title here]

Come up with your own project!

If you do this one, be sure to include a description of your project in your README.md to remind us what your project is about.

# Submitting

Push to your project repository as you would with any ol’ lab assignment. As always make sure that everything looks correct on the GitLab website. Don’t commit junk files; don’t leave out important files.

We will grade whatever is on your master branch as of 11:59:59 PM on Friday May 5, 2017.

You will be graded on the following:

• Indicating project choice in README.md
• The responses in your answers.md
• Make them complete and coherent
• Answer prompts fully. If you are concerned whether your response is sufficient, just ask. Your responses don’t have to make a novel, but they need to be thoughtful and complete. We cannot read your mind.
• Format them as Markdown if you please
• Any relevant config/source/script files you commit to your repository
• Having a clean, well organized repository
• Name files sensibly
• Don’t commit junk files!
• Write a .gitignore if it makes sense for your project.
• Sane, coherent commit messages.
1. heh.

2. Don’t say “Because the hint said so”.