For anybody finding this in the future, it can be done with Craft and the GuestEntries plugin, although it'll take some intermediate Craft knowledge. (Entry Management, a custom Method for the file upload, associating Assets with certain entries, et cetera.)
The basic setup that you'd have is this:
Students can create their account from the front end. This requires Craft Pro, which you're better off using for something of this caliber:
Student Login Page
This would be handled by Craft's usual User functionality. Students login and are redirected to the 'Class Listing' page.
Class Listing Page
This is where you'll need a custom plugin to associate Users with Classes, and vice-versa. There might be a plugin out there that can do this; you'll have to do the legwork to find it.
Whatever you do, the plugin will generate a list of associated classes for the logged-in user, organized by Semester. (Again, a custom plugin with the proper relational tables.)
The user will click on a class, and Craft will redirect them to the...
This would actually be a pretty standard entry page. Display all the associated fields for a Class. (Create Asset fields for Resources/Pictures, Body field for Content, et cetera.) Locking functionality could be taken care of with Entry Status. (Disabled = 'locked')
The only intermediate functionality is the File Upload.
Guest Entries can do this; it's a form input with the name of your Field Handle, like this:
<input type="file" name="yourPluginFieldHandle">
If someone builds this, make sure you know how Craft works, lest you open yourself up to some serious Asset Management issues.