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:
- A brief description of how the user will interact with your program,
including sample commands or menus, as applicable.
- Information about how you plan to represent grade data within your
program.