CS2141 Gradebook Project

Summer Semester, 2010

This project description is intended to serve two purposes. Firstly, it establishes an approximate scope for defining your own project. Larger projects are (likely) acceptible, but smaller ones probably are not. Second, this project provides a fall-back option for those who do not wish to propose a unique project of their own. Note that this project expands slightly on the standard documentation requirements.

For this project, you will be creating a gradebook program suitable for keeping track of grades for a single course. Rather than specifying a particular set of keywords your program should understand, you will instead be given a list of tasks your program needs to be able to perform. This gives you more or less total freedom over the details of your implementation.

This project also features a documentation requirement, in keeping with the fact that the user interface is not being specified in advance.

Requirements

Your gradebook program must be capable of at least the following:
Adding students to the class
It must be possible to have at least 60 students in the class, and students may be added at any time. Do something appropriate (eg assigning a default grade) if assignments already exist. Student names of at least 30 characters (total) must be supported.
Adding assignments to the class
It must be possible to have at least 15 assignments, and assignments may also be added at any time. Do something appropriate (eg assigning a default grade) if students already exist. Assignments will have some sort of user-friendly name (not just an arbirarily assigned identifier!) and need to have a maximum grade, to make calculating overall grades possible. NOTE: Assignments should be allowed to have differing maximum grades.
Supporting the use of waived and unentered grades
It must be possible to waive an assignment grade such that it does not affect a student's overall grade. Assignment grades which have not been entered should also not be factored into the overall grade. It should be possible to mark an assignment as either waived or unentered using either of the grade entering methods below. It is safe to assume that all grades which should be considered neither waived nor unentered will be integers with value at least 0.
Assigning grades to all students for a given assignment
For a given assignment, the user should be able to go through the entire list of students and assign a grade to each. The students should be presented in a consistent, predictable order (eg alphabetically). Grades with extra credit (ie grades higher than the max grade for the assignment) should be supported.
Changing a single student's grade
The user should be able to change a student's grade for a given assignment without needing to update the grades of all other students for that assignment. Some way of selecting a given student must be provided (eg entering the student's name, or using a unique identifier of some sort). Grades with extra credit (ie grades higher than the max grade for the assignment) should be supported.
Displaying a grade report for the entire class
This must include a way to identify each student, as well as their grade on each assignment. It should also include the average grade for each assignment, and each student's overall grade (you can assume all assignments are weighted equally for the grade calculation).
Displaying a grade report for a single student
Include the student's name, the grade they got on each assignment, and their overall grade.
Storing data in a grade file of some sort
It must be possible to preserve grading data between program runs. To that end, the user should be able to store all user-entered data (including assignments and students for which no grades have been entered) to disk. Subsequent executions of your program should be able to retrieve this stored data. Note that the user must have the option to not commit changes to disk. (Do not write changes to disk automatically, unless you provide some way to undo those changes.) The user should not need to edit the grade file(s) from outside your program, though it must be possible for them to do so. You may assume that your program will have sole control over its grade file(s) while it is running.

Documentation

Choosing to use this project changes your required documentation slightly. The requirements here apply in addition to the main documentation requirements, rather than replacing them.

Your proposal must include a summary of your planned implementation. This document is not a binding specification, and is intended only to get you thinking about your implementation now, rather than just sitting down to program and making things up as you go. If you come up with a "better" way later, go ahead and use that instead. Be sure to include: