Every one here wants you to learn this stuff rather than do the assignment for you so I'm intentionally being a little obtuse.
And keep in mind any solution proposed here is how that one programmer would do it, not necessarily the ONE TRUE way.
You need to first get your grades into your program - start with that.
Each line in the file is a student name separated from a grade by a ":".
You want to read those into two parallel arrays (As Jonathan pointed out).
If you google for 'bash split string' you will find lots of helpful advice on how to do this.
I did it this way to get two arrays, one holding the student name and the other holding the grade.
((i=0))
while IFS=":" read -a fields ;
do
students[$i]=${fields[0]}
grades[$i]=${fields[1]}
((i++))
done < students.dat
echo ${students[@]}
echo ${grades[@]}
Cool! Now you need to work on the binary search algorithm a little. Remember you can get the length of an array with ${#ArrayName[@]}
Since the list is apparently already sorted you won't have to do that yourself so you can comparing the name you want to the student name at the midpoint of the array. If the student name you are looking for is greater than the student name at the midpoint, then you know the one you want is in the latter half of the array, and vice versa. Eventually the student name at the midpoint will be exactly the one you are looking for.