Users enter information in upper case either intentionally, or unintentionally (e.g. they happen to have CAPSLOCK activated). Several other answers mention a variety of reasons for why the user may be doing so intentionally. If it is unintentional, then the user probably wants to know about it, and correct it.
As others have mentioned, designing an algorithm that 100% accurately converts from upper case to proper case is effectively impossible. It is impossible because the proper case of a name with exactly the same spelling can vary depending on various factors including national origin, culture, the cultural history of the person's family, personal preference, etc. In other words, the same name can be capitalized in multiple ways. This is particularly true for nobility particles, etc.
However, you can, algorithmically, determine a limited set of possible common ways that a name will be capitalized.
What to do when you get a name: Offer a pop-up with choices from which the user can select:
For your system it is better to have the user enter a version that is in proper case. After the user has entered a name, I would pop-up a selection for the user to choose the name to use from a selection of possible capitalizations, or edit the name to what they desire. I would show the pop-up either always, or only when detecting that the name entered was not in proper case (e.g. that has greater than 50% upper case, or has fewer than one upper case letter per word).
For example:
User entered: JOHN VON DOE
Then a pop-up like:
Have the text in the usage example change based on the selection the user has made so they get immediate feedback as to what it will look like.
By presenting a pop-up you get the user to provide you with the proper capitalization of the name at the time of entry and inform them of the desire to have names entered in that manner. Having the immediate feedback to the user that the format they used is not desirable in this system will result in them learning to enter the names in proper case for your system. Having the option of keeping the name exactly the way the user entered it permits them to override what the system thinks might be desired with what they entered. Having the textbox populated with the entry that is closest to what may be the correct capitalization should result in the user having to put the least effort into any addition editing.
Ultimately, you need to let the user specify the exact capitalization to use as they are best qualified to provide you accurate information. You can do something like the above pop-up to encourage the user to provide the name to you in proper case, but you have to accept whatever they enter once you have made it clear that your system prefers proper case.
VanDyke
(in one word, with an inner capital).