Q: Why is there no B# or Cb
A: there is. B# means C, and Cb means B. you might use B# if you are coming up a scale like F#, G#, A#, C, C#. but you can see if we use B# instead, it looks like F#, G#, A#, B#, C# it looks a little neater because we have 1 of each letter, instead of having no B and 2 C's and have to un-sharp and re-sharp the C. same thing the other way, if you are in Gb major, you might prefer to say Gb, Ab, Bb, Cb, Db neatly so you use all the letters in a row, instead of having to un-flat and re-flat the B by going Gb, Ab, Bb, Bnatural, Db. if you are writing on the staff, the advantage of keeping it scalar become even more clear. i hope that makes sense