Final Project

The final project in this course is an open-ended programming project, and is to be completed individually. You are free to come up with your own idea for a project, or use one of the ideas that I have listed below. Either way, there are some requirements that you will need to follow to receive full credit for the project.

You must contact me for approval of your project idea. Please do so by Friday, April 17.

Requirements

Your program will be evaluated according to the following requirements.

Correctness

It is very important that your code compiles without errors! If I cannot compile and run your program, it will be very difficult for me to asses how correct your code is.

For full credit the behavior of your program must be the correct intended behavior of the project.

Organization

Your program must be appropriately decomposed into functions. Programs of the appropriate complexity for this project will likely contain 5 to 10 functions.

Your program must span multiple files. Place your main() function in one file, and place your other functions in one or more separate modules. Your main() function should handle things like validating command line arguments, and then call upon your other functions to do the bulk of the work.

You must create a Makefile so that your program can be built by simply typing make.

Style

Your program must be formatted nicely, and follow the course style guide.

Libraries

You may only use libraries that are part of the C standard library. All of the header files that we have included in our programs in this class are part of the C standard library (stdio.h, stdlib.h, stdbool.h, etc.).

I need to be able to compile and run your code, and I am not willing to install extra libraries in order to do so.

C Features and Programming Concepts

You must use at least two of the following features or concepts that we have discussed in this class:

Documentation

Each of your functions must be documented with the following information:

You must also produce a document that describes how to use your program. The format of this document will vary from project to project, since some projects will take all of their input as command line arguments, others will take input from files that must be structured in a certain way, etc.

Use one of the following formats for your user documentation:

Place your user documentation file in the git-keeper repository for the project, and add it using git add like you would any other file.

Ideas

Here are some project ideas. You may choose one of these, or come up with your own idea. Even if you choose one of the ideas below, you must contact me for approval.

Games

There are many games that you can implement using a text-only interface. Some of the following games are more complicated than others, and for those games you could implement a simpler version of the game, or simulate a portion of the game. For example, it would be sufficiently complex to implement a poker simulation that simply deals two hands and determines which hand wins.

Some games to consider:

Data Processing

There are many things you could do that involve reading in files containing data, and producing reports from that data.

Spreadsheet Files

Spreadsheet programs like Excel allow you to export data in a format called comma separted values (CSV). This is a plain text format, and you can write a program in C that reads in a CSV file in a particular format and produces a report based on the data. For example, your format could be that the file must contain a row of column headers, each subsequent row contains numeric data, and you can calculate some statistics for each column.

Gradebook

You can devise a format for storing grades in text files, and write a program that calculates your overall grade by reading the files. You would want to organize the grades in different categories (exams, projects, etc.) and specify a weight for each category.

Submission

Submit your code and user documentation to git-keeper by Friday, May 1 (the last day of classes).