How to keep track of attendance and student-submitted excuses for absences? I will be teaching an introductory class, in which attendance is important, with approximately 60 students in 3 sections.  I'd like to have a system that:


Enables me to quickly mark whether a student is present.
Allows students to see their own attendance record but not other students'.
Lets students provide information about their absences.


For small classes, students email me (or I email them) for information about absences, but it would be overwhelming with this many students.

A single Google spreadsheet would be great for data entry, and students could use comments to annotate their absences, but it wouldn't protect students' privacy.

Any suggestions (besides not tracking attendance)?  My school provides Google Apps and Blackboard, although I'm willing to use other solutions.

UPDATE: I know a hack that would work in Blackboard would be to create a fake assignment for each day (attending class) and enter attendance information (0 or 1) there.  This is not ideal because (1) entering data into Blackboard is slower than putting it into a spreadsheet, (2) it would bloat the grade listings seen by the students, and (3) I don't think students could add a comment to the "grade" (the excuse).

There is a similar question, but it does not address how to incorporate excuses/explanations, which, to me, is the tricky part.
There is a sort of a solution using Google Apps, but it's ugly and it's still very much imperfect (more on that at the bottom).

You could create a master spreadsheet (that for the sake of example has the internal ID of "masterSheet") that looks like this:

      A          B         C         D         E         F
1| Name       | 9/1 | 9/1 Comment | 9/2 | 9/2 Comment | etc.
2| Student A  |     |             |     |             |
3| Student B  |     |             |     |             |
4| Student C  |     |             |     |             |


Then you'll create another spreadsheet for Student A:

    A            B                                C
1| Date | Attendance Grade                 | Comment/Excuse
2| 9/1  | =IMPORTRANGE("masterSheet","B2") |
3| 9/2  | =IMPORTRANGE("masterSheet","D2") |
3| etc. | =IMPORTRANGE("masterSheet","X2") |


You'll then make columns A and B (as well as cell C1) uneditable except by you.  You don't necessarily need to type in the IMPORTRANGE() stuff manually, and you do it formulaicly much easier if you have both the master and student spreadsheets go in the same order (although it's possible either way).

Initially, the student will just see

    A            B                                C
1| Date | Attendance Grade                 | Comment/Excuse
2| 9/1  |                                  |
3| 9/2  |                                  |
3| etc. |                                  |


As you put in their attendance grades for each day, it will show up automatically in theirs, but they won't be able to edit it if you properly protect the range.  Now, for their comments.  You'll do the exact same thing, but in reverse, and you'll get:

      A          B         C                           D         E                           F
1| Name       | 9/1 | 9/1 Comment                   | 9/2 | 9/2 Comment                   | etc.
2| Student A  |     | =IMPORTRANGE("studentA","C2") |     | =IMPORTRANGE("studentA","C3") |
3| Student B  |     | =IMPORTRANGE("studentB","C2") |     | =IMPORTRANGE("studentB","C3") |
4| Student C  |     | =IMPORTRANGE("studentC","C2") |     | =IMPORTRANGE("studentC","C3") |


If a student enters in a comment in their spreadsheet, it will show up on yours.

Now, a few comments about this:

It's ugly.  It's awful.  But it basically does what you want.  But there's also a security consideration that will greatly reduce its efficacy to be effectively useless.  Besides the fact that a student could get access to your original spreadsheet by using IMPORTRANGE() on their comment field, Google Apps requires a user to have viewing or editing privileges to the document referenced by IMPORTRANGE().  There are many ways ways to obfuscate, but it will only ever be obfuscation, and not real security.

What you should do from my experience

Just use Blackboard.  It does NOT take that long to take roll with it.  It is a spreadsheet.  On day one of the semester, I take five minutes and create a column for each day of class, and then don't have to worry about it again (and if you're teaching the same classes, ideally they're on the same schedule and you can either merge the course or clone the course so you only do it once for all three).  Then each day I just hit in 5,enter,0,enter,5,enter,5,enter,5,enter,0,enter (5 is fully present in my personal system, 0 is absent).

All the attendance columns get pushed to the bottom of the student's view (the right of the instructor's view) by using Grade Center -> Manage -> Column Organization.

For students to contact you, make it clear they must use a standard subject line that can be caught and filtered in your e-mail program into a specific e-mail excuse box.  If I accidentally marked them as absent and they weren't, or if they had an excuse, they are instructed to e-mail me using a subject line CC'd to themselves that begins "Attendance:" and that gets filtered into an attendance folder for that semester (you may want them to also add in a section, if you don't have merged courses) where I can then deal with it.  At the end of the semester, I have students verify that I properly tended to any necessary changes in attendance grades and then the one or two mistakes (if any) can be fixed then.  

I regularly deal with 120 students a semester (4 sections x 30 students) and have had no problems with this set up.

Unless you have an attendance-specific module in Blackboard that provides the functionality you want, you are going to have problems finding anything that is FERPA-compliant or that is not going to be a giant PITA to use.