Based on the question, I'm presuming there are only 7 classes offered, and John has to take every class.
Let's explain this using classes. Let's say the seven classes are:
We can do this using our basic counting mechanisms. Let's pick the first class. How many options do we have for the first class? 7, right? No classes have been picked yet... so we have 7 options for the first class. Let's say we pick English.
How many options do we have for the next class? 6, because we already picked one. He can't take English again. Let's say he picks French.
After that, how many options do we have? 5. You see the pattern here.
The way that we do this, then, is put in "blanks" for his schedule, and multiply the number of options of each class together. The reasoning behind this is that we are accounting for every possible class option in that spot. Once a class has been picked, we can't go back to it. So, you write it like this:
__ * __ *__ * __ *__ * __ *__
Using the logic above, we fill in the blanks to account for the possible number of classes at each step of the way:
7 * 6 * 5 * 4 * 3 * 2 * 1
Multiplying a number by every number lower than it is called a factorial. Almost always, when we have a problem like this -- where we are choosing without replacement and order matters -- we will use the factorial. You write it using notation: 7!
The answer, then, is 5040. There are 5040 possible schedule options.