This application models course management.

The entities involved are students, assignment and grades. Some assignments 
may be individual, others may be group assignments with one or more 
students in a group.

I decided to build it with 4 models. Students, Assignments, Igrades (for 
Individual Grades) and Ggrades (for group grades). This way it is easy
to keep separate assignments and grades per student and per group.

To assist in maintaining integrity and order, I added to the Students
table a column that indicates group number (empty if no group assigned,
or integer value otherwise). Also in the Assignments table I added 
a boolean column to indicate if this is a group assignment (T) or if
it is an individual assignment (F).

I also decided to provide many drop-down boxes to help the user select
a valid value. For instance, if we are on the Group grade screen, the
user can only assign a group project and sees only those type of projects
and the groups that currently exist.

Validations
The name and user names are free format, in other words, any name or 
nickname is acceptable (other than white space). I thought we should 
not restrict the user to certain formats, because students can be 
quite inventive with their names , not to mention accommodating
international students.
email can be in the format: text@text.text  (where text is alphanumeric
including upper and lower case)

Grades can be between 0 and 100. All required fields must be filled
in. Assignment due dates must be a date (forced by data selection
and must be a present or future date when newly entered)

Ordering of assignments is an artificially generated numbers from
1 to 100, assuming no instructor will give more than 100 assignments
per semester. This is also implemented by a drop-down list and is
verified to be unique. There is also a check for uniqueness for
combinations of assignment_id/Student_id and groupnum/Assignment_id  

I listed names of students and description of assignments in order
to enable the user to select a meaningful entity (rather than id)

A student can transfer from group to group only if there are no 
grades for the group he/she is transferring from and into.
If a student is deleted, all their individual graded assignment 
get deleted too. If there are no more students in the group of
the students that was deleted, also the assignments for that 
group get deleted. This way there are no orphaned records on the
database.

I did not complete the summary page, because of lack of time for
personal reasons.

Jack Shutzman
