My school book says that 0^0 can't be defined, while the calculator says that 0^0 = 1, which is true?

It is undefined but by convention it is typically assigned a value of 1. The reason is if you have 0^x with x tending towards 0 then it is 0 but if you have x^0 with x tending towards 0 it is 1. But in other forms you can get any other value. In most cases where this turns up it is in the form x^0 so it is 1 by convention. But technically your book is correct.
Whether or not 0^0 has a value is very context dependent.  When you are in combinatorial contexts, so all numbers in place are natural numbers, a^b counts the number of maps from a set of size b to a set of size a, and there is a convention that there is an "empty map" from the empty set to itself (or more generally, from the empty set to any other set), which is why we define 0^(0)=1 in combinatorial contexts.  If we accept that there is an empty map  {}-->{1,2,3} making 3^(0)=1, then it isn't too much of a stretch to say there is an empty map {}-->{}.  Introducing negative whole numbers doesn't really complicate the discussion too much, and while we lose the nice interpretation, we have algebraic properties that make everything still work out in a nice manner.

However, if you start allowing fractions or real numbers you can start running into issues.  x^(y) might not be well defined if x is negative and y isn't a whole number.  And as x and y get closer to 0, x^y can get close to many different numbers depending on how they are getting closer (even if x and y always stay positive).

So because the function x^y is discontinuous at (0,0), we don't have any particular value that it makes sense to give 0^0 if we are working on a context that allows x and y to be small but not zero.  After all, 0^(y)=0 if y is not zero, and x^(0)=1 if x is not zero.  There is no good way to reconcile these two facts in a continuous context to define 0^(0).
I think it should be 1. To see why, let's view exponentiation as repeated multiplication. For example, if I multiply 5 by 2\^3, then I'm multiplying 5 by 2, 3 times. Using this convention, 5 x 3\^0 = 5, as we are multiplying 5 by 3, 0 times, so nothing happens and you just get 5. This logic naturally extends to 0. 0\^0 = 1 \* 0\^0, which is 1 multiplied by 0, 0 times, so you're still left with 1. Thus, 0\^0 = 1.