Just a quick note:
I hope this is a typing error, but
if (score <0 | score >100)
is not correct. You need to have two pipes as in:
if (score < 0 || score > 100)
Your code will still work with one pipe, but two pipes tells it to stop checking the further conditions if the first condition is true.
This can be very useful if you're doing something like:
if (someClass != null && someClass.Value == 5)
In this case, the expression will execute without error if someClass is null. What happens is the first part comes out as false and because we're checking for and, it doesn't need to continue.
However, if you write
if (someClass != null & someClass.Value == 5)
and someClass is null, you will get an error.