We had something like this running in IWP for a few years.
What we did was create a new data entry privilege for each student.
We restricted access to all other fields except for those we wanted the students to enter their information.
We had a script at login that brought up each student's record when they logged in and only allowed each student to see their own record (based on AccountName). This was an ongoing solution where students could come back and update their information.
One thing that could have been better implemented was the account/password creation. Every account was manually created and managed within the db file. After a few years, we had a lot of logins/passwords. Besides that, it worked well for our purposes.
As for questionnaires, we just used an online service. quicker to implement. the one with the monkey.
Hopefully this helps a little.